{
	"info": {
		"_postman_id": "903207f8-9eb2-447c-afea-c50536a53430",
		"name": "FnacDarty-370 Patch 20190320_1",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
	},
	"item": [
		{
			"name": "ExportComptable",
			"item": [
				{
					"name": "Update ExportComptableScript",
					"event": [
						{
							"listen": "test",
							"script": {
								"id": "4b01e0c0-6456-46f9-bd00-5f1e76d0495b",
								"exec": [
									"var jsonData = JSON.parse(responseBody);",
									"tests[\"is.success\"] = jsonData.actionStatus.status === \"SUCCESS\";"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"auth": {
							"type": "basic",
							"basic": [
								{
									"key": "username",
									"value": "{{opencell.username}}",
									"type": "string"
								},
								{
									"key": "password",
									"value": "{{opencell.password}}",
									"type": "string"
								}
							]
						},
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Proxy-Authorization",
								"type": "text",
								"value": "{{proxy.auth}}"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n    \"code\": \"org.meveo.service.script.fnacdarty.ExportComptableScript\",\n    \"description\": \"Export Comptable Script\",\n    \"type\": \"JAVA\",\n    \"script\": \"package org.meveo.service.script.fnacdarty;\\r\\n\\r\\nimport java.io.BufferedWriter;\\r\\nimport java.io.File;\\r\\nimport java.io.FileOutputStream;\\r\\nimport java.io.IOException;\\r\\nimport java.io.OutputStreamWriter;\\r\\nimport java.io.Writer;\\r\\nimport java.math.BigDecimal;\\r\\nimport java.math.RoundingMode;\\r\\nimport java.util.ArrayList;\\r\\nimport java.util.Calendar;\\r\\nimport java.util.Date;\\r\\nimport java.util.GregorianCalendar;\\r\\nimport java.util.HashMap;\\r\\nimport java.util.List;\\r\\nimport java.util.Map;\\r\\nimport java.util.Map.Entry;\\r\\n\\r\\nimport org.meveo.admin.exception.BusinessException;\\r\\nimport org.meveo.commons.utils.CsvBuilder;\\r\\nimport org.meveo.commons.utils.ParamBean;\\r\\nimport org.meveo.commons.utils.StringUtils;\\r\\nimport org.meveo.model.admin.Seller;\\r\\nimport org.meveo.model.billing.BillingAccount;\\r\\nimport org.meveo.model.billing.Invoice;\\r\\nimport org.meveo.model.billing.RatedTransaction;\\r\\nimport org.meveo.model.billing.SubCategoryInvoiceAgregate;\\r\\nimport org.meveo.model.billing.Subscription;\\r\\nimport org.meveo.model.billing.SubscriptionStatusEnum;\\r\\nimport org.meveo.model.billing.UserAccount;\\r\\nimport org.meveo.model.billing.WalletOperation;\\r\\nimport org.meveo.model.catalog.DiscountPlan;\\r\\nimport org.meveo.model.catalog.OfferTemplate;\\r\\nimport org.meveo.model.catalog.OneShotChargeTemplate;\\r\\nimport org.meveo.model.crm.Provider;\\r\\nimport org.meveo.model.jobs.JobInstance;\\r\\nimport org.meveo.model.payments.AccountOperation;\\r\\nimport org.meveo.model.payments.MatchingStatusEnum;\\r\\nimport org.meveo.model.payments.PaymentMethodEnum;\\r\\nimport org.meveo.model.payments.RecordedInvoice;\\r\\nimport org.meveo.model.shared.DateUtils;\\r\\nimport org.meveo.model.shared.Name;\\r\\nimport org.meveo.service.billing.impl.InvoiceAgregateService;\\r\\nimport org.meveo.service.billing.impl.RatedTransactionService;\\r\\nimport org.meveo.service.billing.impl.WalletOperationService;\\r\\nimport org.meveo.service.catalog.impl.DiscountPlanService;\\r\\nimport org.meveo.service.crm.impl.ProviderService;\\r\\nimport org.meveo.service.payments.impl.AccountOperationService;\\r\\nimport org.meveo.service.payments.impl.PaymentService;\\r\\nimport org.meveo.service.script.Script;\\r\\nimport org.slf4j.Logger;\\r\\nimport org.slf4j.LoggerFactory;\\r\\n\\r\\n\\r\\n\\/**\\r\\n * The Class ExportComptableScript.\\r\\n *\\r\\n * @author anasseh\\r\\n * \\r\\n * \\r\\n *\\/\\r\\npublic class ExportComptableScript extends Script {\\r\\n\\r\\n\\t\\/** The Constant log. *\\/\\r\\n\\tprivate static final Logger log = LoggerFactory.getLogger(ExportComptableScript.class);\\r\\n\\r\\n\\t\\/** The account operation service. *\\/\\r\\n\\tprivate AccountOperationService accountOperationService = (AccountOperationService) getServiceInterface(\\\"AccountOperationService\\\");\\r\\n\\r\\n\\t\\/** The payment service. *\\/\\r\\n\\tprivate PaymentService paymentService = (PaymentService) getServiceInterface(\\\"PaymentService\\\");\\r\\n\\r\\n\\t\\/** The invoice agregate service. *\\/\\r\\n\\tprivate InvoiceAgregateService invoiceAgregateService = (InvoiceAgregateService) getServiceInterface(\\\"InvoiceAgregateService\\\");\\r\\n\\r\\n\\t\\/** The Rated Transaction service. *\\/\\r\\n\\tprivate RatedTransactionService ratedTransactionService = (RatedTransactionService) getServiceInterface(\\\"RatedTransactionService\\\");\\r\\n\\r\\n\\t\\/** The discount plan service. *\\/\\r\\n\\tprivate DiscountPlanService discountPlanService = (DiscountPlanService) getServiceInterface(\\\"DiscountPlanService\\\");\\r\\n\\r\\n\\t\\/** The wallet operation service. *\\/\\r\\n\\tprivate WalletOperationService walletOperationService = (WalletOperationService) getServiceInterface(\\\"WalletOperationService\\\");\\r\\n\\r\\n\\t\\/** The code facture. *\\/\\r\\n\\tprivate final String codeFacture = \\\"INV_STD\\\";\\r\\n\\r\\n\\t\\/** The code avoir. *\\/\\r\\n\\tprivate final String codeAvoir = \\\"INV_CRN\\\";\\r\\n\\r\\n\\t\\/** The code payment CB. *\\/\\r\\n\\tprivate final String codePaymentCB = \\\"PAY_CRD\\\";\\r\\n\\r\\n\\t\\/** The code payment DD. *\\/\\r\\n\\tprivate final String codePaymentDD = \\\"PAY_DDT\\\";\\r\\n\\r\\n\\t\\/** The code refund CB. *\\/\\r\\n\\tprivate final String codeRefundCB = \\\"REF_CRD\\\";\\r\\n\\r\\n\\t\\/** The code refund DD. *\\/\\r\\n\\tprivate final String codeRefundDD = \\\"REF_DDT\\\";\\r\\n\\r\\n\\t\\/** The code refund CH. *\\/\\r\\n\\tprivate final String codeRefundCH = \\\"REF_CHK\\\";\\r\\n\\r\\n\\t\\/** The code reject payment CB. *\\/\\r\\n\\tprivate final String codeRejectPaymentCB = \\\"REJ_CRD\\\";\\r\\n\\r\\n\\t\\/** The code reject payment DD. *\\/\\r\\n\\tprivate final String codeRejectPaymentDD = \\\"REJ_DDT\\\";\\r\\n\\r\\n\\t\\/** The code reject refund CB. *\\/\\r\\n\\tprivate final String codeRejectRefundCB = \\\"REJ_RCR\\\";\\r\\n\\r\\n\\t\\/** The code event cycle facturation. *\\/\\r\\n\\tprivate final String codeEventCycleFacturation = \\\"EF1\\\";\\r\\n\\r\\n\\t\\/** The code event cycle financement facturation. *\\/\\r\\n\\tprivate final String codeEventCycleFinancementFacturation = \\\"EP1\\\";\\r\\n\\r\\n\\t\\/** The code event gestion banque. *\\/\\r\\n\\tprivate final String codeEventGestionBanque = \\\"EI1\\\";\\r\\n\\r\\n\\t\\/** The code event cloture fin mois. *\\/\\r\\n\\tprivate final String codeEventClotureFinMois = \\\"EC1\\\";\\r\\n\\r\\n\\t\\/** The code event cloture fin mois. *\\/\\r\\n\\tprivate final String codeEventClotureFinMoisPCA = \\\"EC1_PCA\\\";\\r\\n\\r\\n\\t\\/** The code event cloture fin mois. *\\/\\r\\n\\tprivate final String codeEventClotureFinMoisFAE = \\\"EC1_FAE\\\";\\r\\n\\r\\n\\t\\/** The code event perte creances. *\\/\\r\\n\\tprivate final String codeEventPerteCreances = \\\"EA1\\\";\\r\\n\\r\\n\\t\\/** The code journal ventes encaissements. *\\/\\r\\n\\tprivate final String codeJournalVentesEncaissements = \\\"FAC1\\\";\\r\\n\\r\\n\\t\\/** The code journal remboursements decaissements. *\\/\\r\\n\\tprivate final String codeJournalRemboursementsDecaissements = \\\"AVO1\\\";\\r\\n\\r\\n\\t\\/** The code journal financement encaissements. *\\/\\r\\n\\tprivate final String codeJournalFinancementEncaissements = \\\"FIN1\\\";\\r\\n\\r\\n\\t\\/** The code journal remboursement client C B SEPA. *\\/\\r\\n\\tprivate final String codeJournalRemboursementClientCB_SEPA = \\\"RBA1\\\";\\r\\n\\r\\n\\t\\/** The code journal remboursement client cheque. *\\/\\r\\n\\tprivate final String codeJournalRemboursementClientCheque = \\\"RBC1\\\";\\r\\n\\r\\n\\t\\/** The code journal constatation impaye rejet. *\\/\\r\\n\\tprivate final String codeJournalConstatationImpayeRejet = \\\"BQI1\\\";\\r\\n\\r\\n\\t\\/** The code journal representation impaye. *\\/\\r\\n\\tprivate final String codeJournalRepresentationImpaye = \\\"BQR1\\\";\\r\\n\\r\\n\\t\\/** The code journal C A produits constates avance. *\\/\\r\\n\\tprivate final String codeJournalCA_ProduitsConstatesAvance = \\\"PCA1\\\";\\r\\n\\r\\n\\t\\/** The code journal C A pacture emettre. *\\/\\r\\n\\tprivate final String codeJournalCA_FactureEmettre = \\\"FAE1\\\";\\r\\n\\r\\n\\t\\/** The code journal abandon creances. *\\/\\r\\n\\tprivate final String codeJournalAbandonCreances = \\\"ABC1\\\";\\r\\n\\r\\n\\t\\/** The code journal annulation creances. *\\/\\r\\n\\tprivate final String codeJournalAnnulationCreances = \\\"ANC1\\\";\\r\\n\\r\\n\\t\\/** The tax percent. *\\/\\r\\n\\tprivate final BigDecimal taxPercent = BigDecimal.valueOf(20);\\r\\n\\r\\n\\t\\/** The from date. *\\/\\r\\n\\tprivate Date fromDate = null;\\r\\n\\r\\n\\t\\/** The to date. *\\/\\r\\n\\tprivate Date toDate = null;\\r\\n\\r\\n\\t\\/** The to date. *\\/\\r\\n\\tprivate Date dayDate = null;\\r\\n\\r\\n\\t\\/** The file name prefix. *\\/\\r\\n\\tprivate String fileNamePrefix = null;\\r\\n\\r\\n\\t\\/** The output dir. *\\/\\r\\n\\tprivate String outputDir = null;\\r\\n\\r\\n\\t\\/** The job. *\\/\\r\\n\\tprivate JobInstance job = null;\\r\\n\\r\\n\\t\\/** The code event. *\\/\\r\\n\\tprivate String codeEvent = null;\\r\\n\\r\\n\\t\\/* (non-Javadoc)\\r\\n\\t * @see org.meveo.service.script.Script#execute(java.util.Map)\\r\\n\\t *\\/\\r\\n\\t@Override\\r\\n\\tpublic void execute(Map<String, Object> context) throws BusinessException {\\r\\n\\t\\ttry {\\r\\n\\t\\t\\tlog.info(\\\"Execute context:{}\\\", context);\\r\\n\\t\\t\\tjob = (JobInstance) context.get(Script.CONTEXT_ENTITY);\\r\\n\\r\\n\\t\\t\\tdayDate = (Date) job.getCfValue(\\\"DAY_DATE\\\");\\r\\n\\t\\t\\tfileNamePrefix = (String) job.getCfValue(\\\"PREFIX\\\");\\r\\n\\t\\t\\toutputDir = (String) job.getCfValue(\\\"OUPUT_DIR\\\");\\r\\n\\t\\t\\tcodeEvent = (String) job.getCfValue(\\\"TYPE_EVENT\\\");\\r\\n\\t\\t\\tDate[] dates = getDates(dayDate, fromDate, toDate, codeEvent);\\r\\n\\t\\t\\tfromDate = DateUtils.setDateToStartOfDay(dates[0]);\\r\\n\\t\\t\\ttoDate = DateUtils.setDateToEndOfDay(dates[1]);\\r\\n\\r\\n\\t\\t\\tlog.debug(\\\"procesing ExportComptable for fromDate:{}, toDate:{}, fileNamePrefix:{}, outputDir:{}\\\", fromDate, toDate, fileNamePrefix, outputDir);\\r\\n\\r\\n\\t\\t\\tif (codeEventCycleFacturation.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tif (StringUtils.isBlank(fileNamePrefix)) {\\r\\n\\t\\t\\t\\t\\tfileNamePrefix = \\\"ExportComptable_Vente_\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\teventCycleFacturation(fileNamePrefix, outputDir, fromDate, toDate);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (codeEventCycleFinancementFacturation.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tif (StringUtils.isBlank(fileNamePrefix)) {\\r\\n\\t\\t\\t\\t\\tfileNamePrefix = \\\"ExportComptable_Finance_\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\teventCycleFinancementFacturation(fileNamePrefix, outputDir, fromDate, toDate);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (codeEventGestionBanque.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tif (StringUtils.isBlank(fileNamePrefix)) {\\r\\n\\t\\t\\t\\t\\tfileNamePrefix = \\\"ExportComptable_Banque_\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\teventGestionBanque(fileNamePrefix, outputDir, fromDate, toDate);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (codeEventClotureFinMoisPCA.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tif (StringUtils.isBlank(fileNamePrefix)) {\\r\\n\\t\\t\\t\\t\\tfileNamePrefix = \\\"ExportComptable_Cloture_PCA_\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\teventClotureFinMoisPCA(fileNamePrefix + \\\"\\\", outputDir, fromDate, toDate);\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (codeEventClotureFinMoisFAE.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tif (StringUtils.isBlank(fileNamePrefix)) {\\r\\n\\t\\t\\t\\t\\tfileNamePrefix = \\\"ExportComptable_Cloture_FAE_\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\teventClotureFinMoisFAE(fileNamePrefix, outputDir, fromDate, toDate);\\r\\n\\t\\t\\t}\\r\\n\\t\\t} catch (Exception e) {\\r\\n\\t\\t\\tlog.error(\\\"Error Export comptable\\\", e);\\r\\n\\t\\t\\tthrow new BusinessException(e.getMessage());\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the dates.\\r\\n\\t *\\r\\n\\t * @param dayDate   the day date\\r\\n\\t * @param fromDate  the from date\\r\\n\\t * @param toDate    the to date\\r\\n\\t * @param codeEvent the code event\\r\\n\\t * @return the dates\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate Date[] getDates(Date dayDate, Date fromDate, Date toDate, String codeEvent) throws BusinessException {\\r\\n\\t\\tDate[] dates = new Date[2];\\r\\n\\t\\tDate now = new Date();\\r\\n\\t\\tif (codeEventCycleFacturation.equals(codeEvent) || codeEventCycleFinancementFacturation.equals(codeEvent)) {\\r\\n\\t\\t\\tif (dayDate != null) {\\r\\n\\t\\t\\t\\tdates[0] = dayDate;\\r\\n\\t\\t\\t\\tdates[1] = dayDate;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tthrow new BusinessException(\\\"Le champDate DAY_DATE (Date facture) est obligatoire\\\");\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\tif (codeEventGestionBanque.equals(codeEvent)) {\\r\\n\\t\\t\\tif (dayDate != null) {\\r\\n\\t\\t\\t\\tdates[0] = dayDate;\\r\\n\\t\\t\\t\\tdates[1] = dayDate;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tdates[0] = DateUtils.addDaysToDate(now, -1);\\r\\n\\t\\t\\t\\tdates[1] = DateUtils.addDaysToDate(now, -1);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\tif (codeEventClotureFinMoisPCA.equals(codeEvent)) {\\r\\n\\t\\t\\tif (dayDate != null) {\\r\\n\\t\\t\\t\\tdates[0] = dayDate;\\r\\n\\t\\t\\t\\tdates[1] = dayDate;\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tdates[0] = now;\\r\\n\\t\\t\\t\\tdates[1] = now;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (codeEventClotureFinMoisFAE.equals(codeEvent)) {\\r\\n\\t\\t\\tif (dayDate == null) {\\r\\n\\t\\t\\t\\tdayDate = now;\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tdates[0] = DateUtils.setDateToStartOfDay(DateUtils.setDayToDate(dayDate, 1));\\r\\n\\t\\t\\tdates[1] = null; \\/\\/ to date not used for this event\\r\\n\\t\\t}\\r\\n\\t\\treturn dates;\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Event cycle facturation.\\r\\n\\t *\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate void eventCycleFacturation(String fileNamePrefix, String outputDir, Date fromDate, Date toDate) throws BusinessException {\\r\\n\\t\\tList<String[]> lineVentes = new ArrayList<String[]>();\\r\\n\\t\\tlineVentes.addAll(getLinesEventCycleFacturation(codeFacture, codeEventCycleFacturation, codeJournalVentesEncaissements, fromDate, toDate));\\r\\n\\t\\tlineVentes.addAll(getLinesEventCycleFacturation(codeAvoir, codeEventCycleFacturation, codeJournalRemboursementsDecaissements, fromDate, toDate));\\r\\n\\t\\tgenerateFile(lineVentes, outputDir, fromDate, toDate, fileNamePrefix, codeEventCycleFacturation);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the lines event cycle facturation.\\r\\n\\t *\\r\\n\\t * @param occCode the occ code\\r\\n\\t * @param event   the event\\r\\n\\t * @param journal the journal\\r\\n\\t * @param from    the from\\r\\n\\t * @param to      the to\\r\\n\\t * @return the lines event cycle facturation\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<String[]> getLinesEventCycleFacturation(String occCode, String event, String journal, Date from, Date to) throws BusinessException {\\r\\n\\t\\tList<String[]> listEvent = new ArrayList<String[]>();\\r\\n\\t\\tList<RecordedInvoice> listAOs = (List<RecordedInvoice>) listEvent(occCode, from, to, null);\\r\\n\\t\\tlog.info(\\\"listAOs occCode:{}, event:{}, journal:{},from:{}, to:{}, size:{}\\\", occCode, event, journal, from, to, (listAOs == null ? \\\"null\\\" : listAOs.size()));\\r\\n\\t\\tfor (RecordedInvoice ao : listAOs) {\\r\\n\\t\\t\\tBigDecimal sumDiscount = BigDecimal.ZERO;\\r\\n\\t\\t\\tlog.info(\\\"The invoice:{}\\\", ao.getInvoices().get(0));\\r\\n\\r\\n\\t\\t\\tMap<String, BigDecimal> discountInfos = getDiscountInfos(ao.getInvoices().get(0));\\r\\n\\t\\t\\tfor (Entry<String, BigDecimal> entry : discountInfos.entrySet()) {\\r\\n\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_REM\\\", entry.getValue(), taxPercent, null, entry.getKey()));\\r\\n\\t\\t\\t\\tsumDiscount = sumDiscount.add(entry.getValue());\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_ABO\\\", round(ao.getAmountWithoutTax(), 2).add(sumDiscount), taxPercent, null));\\r\\n\\r\\n\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_TTC\\\", round(ao.getAmount(), 2), null, null));\\r\\n\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_TVA\\\", getTaxAmount(ao.getAmount(), ao.getAmountWithoutTax()), taxPercent, null));\\r\\n\\t\\t}\\r\\n\\t\\treturn listEvent;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the tax amount.\\r\\n\\t *\\r\\n\\t * @param ttc the ttc\\r\\n\\t * @param ht  the ht\\r\\n\\t * @return the tax amount\\r\\n\\t *\\/\\r\\n\\tprivate BigDecimal getTaxAmount(BigDecimal ttc, BigDecimal ht) {\\r\\n\\t\\treturn round(ttc, 2).subtract(round(ht, 2));\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the discount amounts aggregated by type remise from discountPlans and\\r\\n\\t * oneShot as discount.\\r\\n\\t *\\r\\n\\t * @param invoice the invoice\\r\\n\\t * @return the discount infos\\r\\n\\t *\\/\\r\\n\\tprivate Map<String, BigDecimal> getDiscountInfos(Invoice invoice) {\\r\\n\\t\\tMap<String, BigDecimal> result = new HashMap<String, BigDecimal>();\\r\\n\\t\\tList<SubCategoryInvoiceAgregate> allSubCats = (List<SubCategoryInvoiceAgregate>) invoiceAgregateService.listByInvoiceAndType(invoice, \\\"F\\\");\\r\\n\\t\\tfor (SubCategoryInvoiceAgregate subCategoryInvoiceAgregate : allSubCats) {\\r\\n\\t\\t\\tif (!StringUtils.isBlank(subCategoryInvoiceAgregate.getDiscountPlanCode())) {\\r\\n\\t\\t\\t\\tDiscountPlan discountPlan = discountPlanService.findByCode(subCategoryInvoiceAgregate.getDiscountPlanCode());\\r\\n\\t\\t\\t\\tString typeRemise = (String) discountPlan.getCfValue(\\\"CF_DP_FD_DISCOUNT_CATEGORY\\\");\\r\\n\\t\\t\\t\\tif (typeRemise == null) {\\r\\n\\t\\t\\t\\t\\ttypeRemise = \\\"\\\";\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tif (result.containsKey(typeRemise)) {\\r\\n\\t\\t\\t\\t\\tresult.put(typeRemise, result.get(typeRemise).add(round(subCategoryInvoiceAgregate.getAmountWithoutTax(), 2)));\\r\\n\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\tresult.put(typeRemise, round(subCategoryInvoiceAgregate.getAmountWithoutTax(), 2));\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\tList<RatedTransaction> rts = invoice.getRatedTransactions();\\r\\n\\t\\tfor (RatedTransaction rt : rts) {\\r\\n\\t\\t\\tWalletOperation wo = walletOperationService.findById(rt.getWalletOperationId());\\r\\n\\t\\t\\tif (wo != null && wo.getChargeInstance() != null && wo.getChargeInstance().getChargeTemplate() != null) {\\r\\n\\t\\t\\t\\tif (OneShotChargeTemplate.CHARGE_TYPE.equals(wo.getChargeInstance().getChargeTemplate().getChargeType())\\r\\n\\t\\t\\t\\t\\t\\t&& wo.getChargeInstance().getChargeTemplate().getCode().startsWith(\\\"REM\\\")) {\\r\\n\\t\\t\\t\\t\\tString typeRemise = (String) wo.getChargeInstance().getChargeTemplate().getCfValue(\\\"CF_CH_FD_DISCOUNT_CATEGORY\\\");\\r\\n\\t\\t\\t\\t\\tif (typeRemise == null) {\\r\\n\\t\\t\\t\\t\\t\\ttypeRemise = \\\"\\\";\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tif (result.containsKey(typeRemise)) {\\r\\n\\t\\t\\t\\t\\t\\tresult.put(typeRemise, result.get(typeRemise).add(round(rt.getAmountWithoutTax(), 2)));\\r\\n\\t\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\t\\tresult.put(typeRemise, round(rt.getAmountWithoutTax(), 2));\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Event cycle financement facturation.\\r\\n\\t *\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate void eventCycleFinancementFacturation(String fileNamePrefix, String outputDir, Date fromDate, Date toDate) throws BusinessException {\\r\\n\\t\\tList<String[]> lineFinances = new ArrayList<String[]>();\\r\\n\\t\\tlineFinances.addAll(getLinesEventCycleFinancementFacturation(codePaymentCB, codeEventCycleFinancementFacturation, codeJournalFinancementEncaissements, fromDate, toDate));\\r\\n\\t\\tlineFinances.addAll(getLinesEventCycleFinancementFacturation(codePaymentDD, codeEventCycleFinancementFacturation, codeJournalFinancementEncaissements, fromDate, toDate));\\r\\n\\t\\tlineFinances.addAll(getLinesEventCycleFinancementFacturation(codeRefundCB, codeEventCycleFinancementFacturation, codeJournalRemboursementClientCB_SEPA, fromDate, toDate));\\r\\n\\t\\tlineFinances.addAll(getLinesEventCycleFinancementFacturation(codeRefundDD, codeEventCycleFinancementFacturation, codeJournalRemboursementClientCB_SEPA, fromDate, toDate));\\r\\n\\t\\tgenerateFile(lineFinances, outputDir, fromDate, toDate, fileNamePrefix, codeEventCycleFinancementFacturation);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the lines event cycle financement facturation.\\r\\n\\t *\\r\\n\\t * @param occCode the occ code\\r\\n\\t * @param event   the event\\r\\n\\t * @param journal the journal\\r\\n\\t * @param from    the from\\r\\n\\t * @param to      the to\\r\\n\\t * @return the lines event cycle financement facturation\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<String[]> getLinesEventCycleFinancementFacturation(String occCode, String event, String journal, Date from, Date to) throws BusinessException {\\r\\n\\t\\tList<String[]> listEvent = new ArrayList<String[]>();\\r\\n\\t\\tList<AccountOperation> listAOs = (List<AccountOperation>) listEventFinances(occCode, from, to, MatchingStatusEnum.L);\\r\\n\\t\\tlog.info(\\\"listAOs occCode:{}, event:{}, journal:{},from:{}, to:{}, size:{}\\\", occCode, event, journal, from, to, (listAOs == null ? \\\"null\\\" : listAOs.size()));\\r\\n\\t\\tfor (AccountOperation accountOperation : listAOs) {\\r\\n\\t\\t\\tAccountOperation linkedInvoice = getInvoiceThatWasPaid(accountOperation);\\r\\n\\t\\t\\tif (linkedInvoice == null) {\\r\\n\\t\\t\\t\\tthrow new BusinessException(\\\"The payment\\/refund AO id:\\\" + accountOperation.getId() + \\\" are matched with a no invoice\\/adjustment\\\");\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (linkedInvoice instanceof RecordedInvoice) {\\r\\n\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, accountOperation, (RecordedInvoice) linkedInvoice, \\\"M_TTC\\\", accountOperation.getAmount(), null, null));\\r\\n\\t\\t\\t} else {\\r\\n\\t\\t\\t\\tlinkedInvoice = getInvoiceThatShouldBePaid(linkedInvoice);\\r\\n\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, accountOperation, (RecordedInvoice) linkedInvoice, \\\"M_TTC\\\", accountOperation.getAmount(), null, null));\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t}\\r\\n\\t\\treturn listEvent;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Event gestion banque.\\r\\n\\t *\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate void eventGestionBanque(String fileNamePrefix, String outputDir, Date fromDate, Date toDate) throws BusinessException {\\r\\n\\t\\tList<String[]> linesBanque = new ArrayList<String[]>();\\r\\n\\t\\tlinesBanque.addAll(getLinesEventGestionBanque(codeRefundCH, codeEventGestionBanque, codeJournalRemboursementClientCheque, fromDate, toDate, MatchingStatusEnum.L));\\r\\n\\t\\tlinesBanque.addAll(getLinesEventGestionBanque(codeRejectPaymentCB, codeEventGestionBanque, codeJournalConstatationImpayeRejet, fromDate, toDate, MatchingStatusEnum.L));\\r\\n\\t\\tlinesBanque.addAll(getLinesEventGestionBanque(codeRejectPaymentDD, codeEventGestionBanque, codeJournalConstatationImpayeRejet, fromDate, toDate, MatchingStatusEnum.L));\\r\\n\\t\\tlinesBanque.addAll(getLinesEventGestionBanque(codePaymentCB, codeEventGestionBanque, codeJournalRepresentationImpaye, fromDate, toDate, MatchingStatusEnum.L));\\r\\n\\t\\tlinesBanque.addAll(getLinesEventGestionBanque(codePaymentDD, codeEventGestionBanque, codeJournalRepresentationImpaye, fromDate, toDate, MatchingStatusEnum.L));\\r\\n\\r\\n\\t\\tgenerateFile(linesBanque, outputDir, fromDate, toDate, fileNamePrefix, codeEventGestionBanque);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the lines event gestion banque.\\r\\n\\t *\\r\\n\\t * @param occCode            the occ code\\r\\n\\t * @param event              the event\\r\\n\\t * @param journal            the journal\\r\\n\\t * @param fromDate           the from date\\r\\n\\t * @param toDate             the to date\\r\\n\\t * @param matchingStatusEnum the matching status enum\\r\\n\\t * @return the lines event gestion banque\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<String[]> getLinesEventGestionBanque(String occCode, String event, String journal, Date fromDate, Date toDate, MatchingStatusEnum matchingStatusEnum)\\r\\n\\t\\t\\tthrows BusinessException {\\r\\n\\t\\tList<String[]> listEvent = new ArrayList<String[]>();\\r\\n\\t\\tAccountOperation invoiceThatWasPaid = null;\\r\\n\\t\\tList<AccountOperation> listAOs = (List<AccountOperation>) listEvent(occCode, fromDate, toDate, matchingStatusEnum);\\r\\n\\t\\tlog.info(\\\"listAOs occCode:{}, event:{}, journal:{},from:{}, to:{}, matchingStatusEnum:{}, size:{}\\\", occCode, event, journal, fromDate, toDate, matchingStatusEnum,\\r\\n\\t\\t\\t\\t(listAOs == null ? \\\"null\\\" : listAOs.size()));\\r\\n\\t\\tfor (AccountOperation accountOperation : listAOs) {\\r\\n\\t\\t\\tif (journal.equals(codeJournalRemboursementClientCheque)) {\\r\\n\\t\\t\\t\\tinvoiceThatWasPaid = getInvoiceThatWasPaid(accountOperation);\\r\\n\\t\\t\\t\\tif (invoiceThatWasPaid == null) {\\r\\n\\t\\t\\t\\t\\tthrow new BusinessException(\\\"The payment check AO id:\\\" + accountOperation.getId() + \\\" are matched with a no invoice\\\");\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, accountOperation, invoiceThatWasPaid, \\\"M_RBT\\\", accountOperation.getAmount(), null, null));\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (journal.equals(codeJournalConstatationImpayeRejet)) {\\r\\n\\t\\t\\t\\tinvoiceThatWasPaid = getInvoiceThatShouldBePaid(accountOperation);\\r\\n\\t\\t\\t\\tif (invoiceThatWasPaid != null) {\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, accountOperation, invoiceThatWasPaid, \\\"M_IMP\\\", accountOperation.getAmount(), null, null));\\r\\n\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\tcontinue;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (journal.equals(codeJournalRepresentationImpaye)) {\\r\\n\\t\\t\\t\\tinvoiceThatWasPaid = getInvoiceThatWasPaid(accountOperation);\\r\\n\\t\\t\\t\\tif (invoiceThatWasPaid.getType().contentEquals(\\\"I\\\") && invoiceThatWasPaid.getRejectedPayment() != null) {\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, accountOperation, invoiceThatWasPaid, \\\"M_IMP\\\", accountOperation.getAmount(), null, null));\\r\\n\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\tcontinue;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn listEvent;\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the invoice that should be paid by CC.\\r\\n\\t *\\r\\n\\t * @param accountOperation the account operation\\r\\n\\t * @return the invoice that should be paid by CC\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate RecordedInvoice getInvoiceThatShouldBePaid(AccountOperation accountOperation) {\\r\\n\\t\\tList<RecordedInvoice> listAOs = new ArrayList<RecordedInvoice>();\\r\\n\\t\\tMap<String, Object> params = new HashMap<String, Object>();\\r\\n\\t\\tparams.put(\\\"rejectedPaymentId\\\", accountOperation.getId());\\r\\n\\r\\n\\t\\tString queryStr = \\\"Select ri from RecordedInvoice as ri where ri.rejectedPayment.id =:rejectedPaymentId\\\";\\r\\n\\t\\tlistAOs = (List<RecordedInvoice>) accountOperationService.executeSelectQuery(queryStr, params);\\r\\n\\t\\tif (listAOs != null && !listAOs.isEmpty()) {\\r\\n\\t\\t\\treturn listAOs.get(0);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn null;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the invoice that was paid.\\r\\n\\t *\\r\\n\\t * @param accountOperation the account operation\\r\\n\\t * @return the invoice that was paid\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate AccountOperation getInvoiceThatWasPaid(AccountOperation accountOperation) throws BusinessException {\\r\\n\\t\\tif (accountOperation.getMatchingStatus() != MatchingStatusEnum.L) {\\r\\n\\t\\t\\treturn null;\\r\\n\\t\\t}\\r\\n\\t\\tList<? extends AccountOperation> listAos = null;\\r\\n\\t\\tif (accountOperation.getMatchingAmounts() != null || !accountOperation.getMatchingAmounts().isEmpty()) {\\r\\n\\t\\t\\tlistAos = paymentService.getAccountOperationThatWasPaid(accountOperation);\\r\\n\\t\\t\\tif (listAos == null || listAos.isEmpty()) {\\r\\n\\t\\t\\t\\treturn null;\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn listAos.get(0);\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Event Cloture Fin Mois PCA.\\r\\n\\t *\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate void eventClotureFinMoisPCA(String fileNamePrefix, String outputDir, Date fromDate, Date toDate) throws BusinessException {\\r\\n\\t\\tList<String[]> linePCA = new ArrayList<String[]>();\\r\\n\\t\\tlinePCA.addAll(getLinesEventClotureFinMois(codeFacture, codeEventClotureFinMoisPCA, codeJournalCA_ProduitsConstatesAvance, fromDate, toDate));\\r\\n\\t\\tgenerateFile(linePCA, outputDir, fromDate, toDate, fileNamePrefix, codeEventClotureFinMoisPCA);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Event Cloture Fin Mois FAE.\\r\\n\\t *\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate void eventClotureFinMoisFAE(String fileNamePrefix, String outputDir, Date fromDate, Date toDate) throws BusinessException {\\r\\n\\t\\tList<String[]> lineFAE = new ArrayList<String[]>();\\r\\n\\t\\tlineFAE.addAll(getLinesEventClotureFinMois(null, codeEventClotureFinMoisFAE, codeJournalCA_FactureEmettre, fromDate, toDate));\\r\\n\\t\\tgenerateFile(lineFAE, outputDir, fromDate, toDate, fileNamePrefix, codeEventClotureFinMoisFAE);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the lines event Cloture Fin Mois.\\r\\n\\t *\\r\\n\\t * @param occCode the occ code\\r\\n\\t * @param event   the event\\r\\n\\t * @param journal the journal\\r\\n\\t * @param from    the from\\r\\n\\t * @param to      the to\\r\\n\\t * @return the lines event Cloture Fin Mois\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate List<String[]> getLinesEventClotureFinMois(String occCode, String event, String journal, Date from, Date to) throws BusinessException {\\r\\n\\t\\tList<String[]> listEvent = new ArrayList<String[]>();\\r\\n\\r\\n\\t\\tif (journal.equals(codeJournalCA_ProduitsConstatesAvance)) {\\r\\n\\t\\t\\tList<RatedTransaction> listRTs = (List<RatedTransaction>) listRTsPCA(from, to);\\r\\n\\t\\t\\tlog.info(\\\"listRtsPCA event:{}, journal:{},from:{}, to:{}, size:{}\\\", event, journal, from, to, (listRTs == null ? \\\"null\\\" : listRTs.size()));\\r\\n\\t\\t\\tfor (RatedTransaction rt : listRTs) {\\r\\n\\t\\t\\t\\tSubscription subscription = rt.getSubscription();\\r\\n\\t\\t\\t\\tRecordedInvoice ao = rt.getInvoice().getRecordedInvoice();\\r\\n\\t\\t\\t\\tif (subscription != null && subscription.getOffer().getCfValuesNullSafe() != null\\r\\n\\t\\t\\t\\t\\t\\t&& \\\"CAL_YEARLY_PERIOD\\\".equals(subscription.getOffer().getCfValuesNullSafe().getValue(\\\"CF_OF_FD_CALENDAR\\\"))\\r\\n\\t\\t\\t\\t\\t\\t&& subscription.getStatus() == SubscriptionStatusEnum.ACTIVE) {\\r\\n\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_ABO\\\", getAmountPCA(rt.getAmountWithoutTax(), rt, from), null, null));\\r\\n\\t\\t\\t\\t\\tMap<String, BigDecimal> discountInfos = getDiscountInfos(ao.getInvoices().get(0));\\r\\n\\t\\t\\t\\t\\tfor (Entry<String, BigDecimal> entry : discountInfos.entrySet()) {\\r\\n\\t\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, ao, null, \\\"M_REM\\\", entry.getValue(), BigDecimal.ZERO, null, entry.getKey()));\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\tif (journal.equals(codeJournalCA_FactureEmettre)) {\\r\\n\\t\\t\\tList<WalletOperation> listWOs = (List<WalletOperation>) listWOsFAE(from, to);\\r\\n\\t\\t\\tfor (WalletOperation wo : listWOs) {\\r\\n\\t\\t\\t\\tBigDecimal ht = BigDecimal.ZERO;\\r\\n\\t\\t\\t\\tBigDecimal ttc = BigDecimal.ZERO;\\r\\n\\t\\t\\t\\tBigDecimal tva = BigDecimal.ZERO;\\r\\n\\t\\t\\t\\tif (wo != null && wo.getChargeInstance() != null && wo.getChargeInstance().getChargeTemplate() != null\\r\\n\\t\\t\\t\\t\\t\\t&& OneShotChargeTemplate.CHARGE_TYPE.equals(wo.getChargeInstance().getChargeTemplate().getChargeType())\\r\\n\\t\\t\\t\\t\\t\\t&& wo.getChargeInstance().getChargeTemplate().getCode().startsWith(\\\"REM\\\")) {\\r\\n\\r\\n\\t\\t\\t\\t\\tString typeRemise = (String) wo.getChargeInstance().getChargeTemplate().getCfValue(\\\"CF_CH_FD_DISCOUNT_CATEGORY\\\");\\r\\n\\t\\t\\t\\t\\tif (typeRemise == null) {\\r\\n\\t\\t\\t\\t\\t\\ttypeRemise = \\\"\\\";\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_REM\\\", wo.getAmountWithoutTax(), null, wo, typeRemise));\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_TVA\\\", getTaxAmount(wo.getAmountWithTax(), wo.getAmountWithoutTax()), null, wo));\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_TTC\\\", wo.getAmountWithTax(), null, wo));\\r\\n\\r\\n\\t\\t\\t\\t} else {\\r\\n\\t\\t\\t\\t\\tht = computeAmountFAE(wo, from, wo.getAmountWithoutTax());\\r\\n\\t\\t\\t\\t\\tttc = computeAmountFAE(wo, from, wo.getAmountWithTax());\\r\\n\\t\\t\\t\\t\\ttva = getTaxAmount(ttc, ht);\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_ABO\\\", ht, null, wo));\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_TVA\\\", tva, null, wo));\\r\\n\\t\\t\\t\\t\\tlistEvent.add(getLineFromAO(event, journal, null, null, \\\"M_TTC\\\", ttc, null, wo));\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn listEvent;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Compute amount FAE.\\r\\n\\t *\\r\\n\\t * @param wo the wo\\r\\n\\t * @param fromDate the from date\\r\\n\\t * @param amount the amount\\r\\n\\t * @return the big decimal\\r\\n\\t *\\/\\r\\n\\tprivate BigDecimal computeAmountFAE(WalletOperation wo, Date fromDate, BigDecimal amount) {\\r\\n\\t\\tBigDecimal result = BigDecimal.ZERO;\\r\\n\\t\\tdouble nbDaysFromDateAndStartDate = DateUtils.daysBetween(fromDate, wo.getStartDate());\\r\\n\\t\\tdouble nbDaysEndDateAndStartDate = DateUtils.daysBetween(wo.getEndDate(), wo.getStartDate());\\r\\n\\t\\tBigDecimal ratio = BigDecimal.valueOf(nbDaysFromDateAndStartDate \\/ nbDaysEndDateAndStartDate);\\r\\n\\t\\tresult = amount.multiply(ratio);\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the line from AO.\\r\\n\\t *\\r\\n\\t * @param event                  the event\\r\\n\\t * @param journal                the journal\\r\\n\\t * @param accountOperation       the account operation\\r\\n\\t * @param linkedAccountOperation the linked account operation\\r\\n\\t * @param saleType               the sale type\\r\\n\\t * @param amount                 the amount\\r\\n\\t * @param taxPercent             the tax percent\\r\\n\\t * @param wo                     the wo\\r\\n\\t * @return the line from AO\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate String[] getLineFromAO(String event, String journal, AccountOperation accountOperation, AccountOperation linkedAccountOperation, String saleType, BigDecimal amount,\\r\\n\\t\\t\\tBigDecimal taxPercent, WalletOperation wo) throws BusinessException {\\r\\n\\t\\treturn getLineFromAO(event, journal, accountOperation, linkedAccountOperation, saleType, amount, taxPercent, wo, null);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the line from AO.\\r\\n\\t *\\r\\n\\t * @param event                  the event\\r\\n\\t * @param journal                the journal\\r\\n\\t * @param accountOperation       the account operation\\r\\n\\t * @param linkedAccountOperation the linked account operation\\r\\n\\t * @param saleType               the sale type\\r\\n\\t * @param amount                 the amount\\r\\n\\t * @param taxPercent             the tax percent\\r\\n\\t * @param wo                     the wo\\r\\n\\t * @param codeRemise             the code remise\\r\\n\\t * @return the line from AO\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tprivate String[] getLineFromAO(String event, String journal, AccountOperation accountOperation, AccountOperation linkedAccountOperation, String saleType, BigDecimal amount,\\r\\n\\t\\t\\tBigDecimal taxPercent, WalletOperation wo, String codeRemise) throws BusinessException {\\r\\n\\t\\tString[] t = new String[33];\\r\\n\\t\\tSubscription subscription = getSubscription(accountOperation, wo);\\r\\n\\t\\tSeller seller = subscription.getSeller();\\r\\n\\t\\tOfferTemplate offer = subscription.getOffer();\\r\\n\\t\\tName name = getName(accountOperation, wo);\\r\\n\\t\\tt[0] = format(getEvent(event), 3);\\r\\n\\t\\tt[1] = format(journal, 4);\\r\\n\\t\\tt[2] = format(DateUtils.formatDateWithPattern(getDateOperation(accountOperation, journal, wo), \\\"yyyyMMdd\\\"), 8);\\r\\n\\t\\tif (seller == null || seller.getSeller() == null || seller.getSeller().getSeller() == null) {\\r\\n\\t\\t\\tthrow new BusinessException(\\\"A seller is null\\\");\\r\\n\\t\\t}\\r\\n\\t\\tt[3] = format(\\\"FNAC\\\".equals(seller.getSeller().getSeller().getCode()) ? \\\"F\\\" : \\\"D\\\", 1);\\r\\n\\t\\tt[4] = format(seller.getSeller().getCode(), 4);\\/\\/ Soci\\u00E9t\\u00E9s Juridiques\\r\\n\\t\\tt[5] = format(seller.getCode(), 6);\\/\\/ magasin\\r\\n\\t\\tt[6] = format((String) seller.getCfValue(\\\"CF_S_FD_SELLER_TYPE\\\"), 1);\\/\\/ type magasin\\r\\n\\t\\tt[7] = format(subscription.getCode(), 18);\\/\\/ Contrats\\r\\n\\t\\tt[8] = format(name == null ? null : name.getLastName(), 40); \\/\\/ Nom Client\\r\\n\\t\\tt[9] = format(name == null ? null : name.getFirstName(), 40);\\/\\/ Prenom client\\r\\n\\t\\tt[10] = format((String) offer.getCfValue(\\\"CF_OF_FD_ANALYTIC_OFFER_TYPE\\\"), 3);\\/\\/ type offer\\r\\n\\t\\tt[11] = format((String) subscription.getCfValue(\\\"CF_SU_FD_OFFER_CODE\\\"), 10);\\/\\/ code offer metier\\r\\n\\t\\tt[12] = format(offer.getName(), 50);\\/\\/ libelle offer\\r\\n\\t\\tt[13] = format((String) offer.getCfValue(\\\"CF_OF_FD_ANALYTIC_BUSINESS_SECTOR\\\"), 3);\\/\\/ SecteurCommercial\\r\\n\\t\\tt[14] = format(((String) offer.getCfValue(\\\"CF_OF_FD_ANALYTIC_OFFER_PERIODICITY\\\")).equals(\\\"Annuelle\\\") ? \\\"A\\\" : \\\"M\\\", 1);\\/\\/ Fr\\u00E9quence\\r\\n\\t\\tt[15] = format((String) offer.getCfValue(\\\"CF_OF_FD_ANALYTIC_OFFER_PERIODICITY\\\"), 20);\\/\\/ libelle Fr\\u00E9quence\\r\\n\\t\\tt[16] = format(((String) offer.getCfValue(\\\"CF_OF_FD_ANALYTIC_REVENUE_TYPE\\\")).equals(\\\"CA\\\") ? \\\"O\\\" : \\\"N\\\", 1);\\/\\/ type CA\\/\\/ type CA\\r\\n\\t\\tt[17] = format(DateUtils.formatDateWithPattern(subscription.getSubscriptionDate(), \\\"yyyyMMdd\\\"), 8);\\/\\/ Date de souscription du contrat\\r\\n\\t\\tt[18] = format(getInvoiceNumber(event, accountOperation, linkedAccountOperation), 16);\\/\\/ N\\u00B0 Facture\\r\\n\\t\\tt[19] = format(DateUtils.formatDateWithPattern(getInvoiceDate(event, accountOperation, linkedAccountOperation), \\\"yyyyMMdd\\\"), 8);\\/\\/ Date de codeFacture\\r\\n\\t\\tt[20] = format(saleType, 5);\\/\\/ Sale type\\r\\n\\t\\tt[21] = format(getSigne(amount), 1);\\/\\/ signe\\r\\n\\t\\tt[22] = format(getSensComptable(journal, saleType, amount), 1);\\r\\n\\t\\tt[23] = format(roundFormat(amount == null ? amount : amount.abs(), 2), 13);\\/\\/ Montant\\r\\n\\t\\tt[24] = taxPercent == null || journal.equals(codeJournalCA_FactureEmettre) || journal.equals(codeJournalCA_ProduitsConstatesAvance) ? \\\"0000\\\"\\r\\n\\t\\t\\t\\t: StringUtils.getLongAsNChar(taxPercent.multiply(new BigDecimal(100)).longValue(), 4);\\/\\/ Taux TVA\\r\\n\\t\\tt[25] = format(codeRemise, 2);\\/\\/ type remise\\r\\n\\t\\tt[26] = format(getBusinessPaymentMethod(accountOperation, journal, \\\"NO\\\".equals((String) subscription.getCfValue(\\\"CF_RETRY_PAYMENT\\\"))), 3);\\/\\/ Mode de paiement\\r\\n\\t\\tt[27] = format(getCodeRemiseBanque(accountOperation, event), 13);\\/\\/ getCodeRemiseBanque(ao);\\/\\/un id lot unique sur 7 (13 sur la spec 8) char\\r\\n\\t\\t\\/\\/ \\/\\/TODO waiting core\\r\\n\\t\\tString[] address = getAddress(accountOperation, journal);\\r\\n\\t\\tt[28] = format(address[0], 35);\\/\\/ Adresse \\u2013 rue 1\\r\\n\\t\\tt[29] = format(address[1], 35);\\/\\/ Adresse \\u2013 rue 2\\r\\n\\t\\tt[30] = format(address[2], 10);\\/\\/ Adresse \\u2013 code postal\\r\\n\\t\\tt[31] = format(address[3], 35);\\/\\/ Adresse \\u2013 Ville\\r\\n\\t\\tt[32] = format(address[4], 3);\\/\\/ Adresse \\u2013 code pays\\r\\n\\r\\n\\t\\treturn t;\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the signe.\\r\\n\\t *\\r\\n\\t * @param amount the amount\\r\\n\\t * @return the signe\\r\\n\\t *\\/\\r\\n\\tprivate String getSigne(BigDecimal amount) {\\r\\n\\t\\tif (amount.doubleValue() < 0) {\\r\\n\\t\\t\\treturn \\\"-\\\";\\r\\n\\t\\t}\\r\\n\\t\\treturn \\\"+\\\";\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the customer last name.\\r\\n\\t *\\r\\n\\t * @param accountOperation the account operation\\r\\n\\t * @param wo               the wo\\r\\n\\t * @return the customer name\\r\\n\\t *\\/\\r\\n\\tprivate Name getName(AccountOperation accountOperation, WalletOperation wo) {\\r\\n\\t\\tif (accountOperation != null) {\\r\\n\\t\\t\\treturn accountOperation.getCustomerAccount().getName();\\r\\n\\t\\t}\\r\\n\\t\\tif (wo != null) {\\r\\n\\t\\t\\tif (wo.getWallet() != null && wo.getWallet().getUserAccount() != null) {\\r\\n\\t\\t\\t\\treturn wo.getWallet().getUserAccount().getBillingAccount().getCustomerAccount().getName();\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn null;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the address.\\r\\n\\t *\\r\\n\\t * @param accountOperation the account operation\\r\\n\\t * @param journal          the journal\\r\\n\\t * @return the address\\r\\n\\t *\\/\\r\\n\\tprivate String[] getAddress(AccountOperation accountOperation, String journal) {\\r\\n\\t\\tString[] address = { \\\"\\\", \\\"\\\", \\\"\\\", \\\"\\\", \\\"\\\" };\\r\\n\\t\\tif (journal.equals(codeJournalRemboursementClientCheque)) {\\r\\n\\t\\t\\tif (accountOperation.getCustomerAccount().getAddress() != null) {\\r\\n\\t\\t\\t\\taddress[0] = accountOperation.getCustomerAccount().getAddress().getAddress1();\\r\\n\\t\\t\\t\\taddress[1] = accountOperation.getCustomerAccount().getAddress().getAddress2();\\r\\n\\t\\t\\t\\taddress[2] = accountOperation.getCustomerAccount().getAddress().getZipCode();\\r\\n\\t\\t\\t\\taddress[3] = accountOperation.getCustomerAccount().getAddress().getCity();\\r\\n\\t\\t\\t\\tif (accountOperation.getCustomerAccount().getAddress().getCountry().getCountryCode() != null) {\\r\\n\\t\\t\\t\\t\\taddress[4] = accountOperation.getCustomerAccount().getAddress().getCountry().getCountryCode();\\r\\n\\t\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn address;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the invoice date.\\r\\n\\t *\\r\\n\\t * @param event                  the event\\r\\n\\t * @param accountOperation       the account operation\\r\\n\\t * @param linkedAccountOperation the linked account operation\\r\\n\\t * @return the invoice date\\r\\n\\t *\\/\\r\\n\\tprivate Date getInvoiceDate(String event, AccountOperation accountOperation, AccountOperation linkedAccountOperation) {\\r\\n\\t\\tif (event.equals(codeEventClotureFinMoisFAE) || accountOperation == null) {\\r\\n\\t\\t\\treturn null;\\r\\n\\t\\t}\\r\\n\\t\\tif (event.equals(codeEventCycleFacturation) || event.equals(codeEventClotureFinMoisPCA)) {\\r\\n\\t\\t\\treturn accountOperation.getTransactionDate();\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn linkedAccountOperation.getTransactionDate();\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the invoice number.\\r\\n\\t *\\r\\n\\t * @param event                  the event\\r\\n\\t * @param accountOperation       the account operation\\r\\n\\t * @param linkedAccountOperation the linked account operation\\r\\n\\t * @return the invoice number\\r\\n\\t *\\/\\r\\n\\tprivate String getInvoiceNumber(String event, AccountOperation accountOperation, AccountOperation linkedAccountOperation) {\\r\\n\\t\\tif (event.equals(codeEventClotureFinMoisFAE) || accountOperation == null) {\\r\\n\\t\\t\\treturn \\\"\\\";\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (event.equals(codeEventClotureFinMoisPCA) || event.equals(codeEventCycleFacturation)) {\\r\\n\\t\\t\\treturn accountOperation.getReference();\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn linkedAccountOperation.getReference();\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the date operation.\\r\\n\\t *\\r\\n\\t * @param accountOperation the account operation\\r\\n\\t * @param journal          the journal\\r\\n\\t * @param wo               the wo\\r\\n\\t * @return the date operation\\r\\n\\t *\\/\\r\\n\\tprivate Date getDateOperation(AccountOperation accountOperation, String journal, WalletOperation wo) {\\r\\n\\t\\tif (journal.equals(codeJournalCA_FactureEmettre)) {\\r\\n\\t\\t\\treturn wo.getOperationDate();\\r\\n\\t\\t}\\r\\n\\t\\tif (journal.equals(codeJournalCA_ProduitsConstatesAvance)) {\\r\\n\\t\\t\\treturn accountOperation.getTransactionDate();\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn accountOperation.getTransactionDate();\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the subscription.\\r\\n\\t *\\r\\n\\t * @param ao the ao\\r\\n\\t * @param wo the wo\\r\\n\\t * @return the subscription\\r\\n\\t *\\/\\r\\n\\tprivate Subscription getSubscription(AccountOperation ao, WalletOperation wo) {\\r\\n\\t\\tif (ao != null) {\\r\\n\\t\\t\\tif (ao.getCustomerAccount() != null && ao.getCustomerAccount().getBillingAccounts() != null && !ao.getCustomerAccount().getBillingAccounts().isEmpty()) {\\r\\n\\t\\t\\t\\tBillingAccount ba = ao.getCustomerAccount().getBillingAccounts().get(0);\\r\\n\\t\\t\\t\\tif (ba != null && ba.getUsersAccounts() != null && !ba.getUsersAccounts().isEmpty()) {\\r\\n\\t\\t\\t\\t\\tUserAccount ua = ba.getUsersAccounts().get(0);\\r\\n\\t\\t\\t\\t\\tif (ua != null && ua.getSubscriptions() != null && !ua.getSubscriptions().isEmpty()) {\\r\\n\\t\\t\\t\\t\\t\\treturn ua.getSubscriptions().get(0);\\r\\n\\t\\t\\t\\t\\t}\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t} else if (wo != null) {\\r\\n\\t\\t\\treturn wo.getSubscription();\\r\\n\\t\\t}\\r\\n\\t\\treturn null;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * List event.\\r\\n\\t *\\r\\n\\t * @param occCode            the occ code\\r\\n\\t * @param from               the from\\r\\n\\t * @param to                 the to\\r\\n\\t * @param matchingStatusEnum the matching status enum\\r\\n\\t * @return the list<? extends account operation>\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<? extends AccountOperation> listEvent(String occCode, Date from, Date to, MatchingStatusEnum matchingStatusEnum) {\\r\\n\\t\\t@SuppressWarnings(\\\"rawtypes\\\")\\r\\n\\t\\tList<? extends AccountOperation> listAOs = new ArrayList();\\r\\n\\t\\tMap<String, Object> params = new HashMap<String, Object>();\\r\\n\\t\\tparams.put(\\\"fromDate\\\", from);\\r\\n\\t\\tparams.put(\\\"toDate\\\", to);\\r\\n\\t\\tparams.put(\\\"occCode\\\", occCode);\\r\\n\\t\\tif (matchingStatusEnum != null) {\\r\\n\\t\\t\\tparams.put(\\\"matchingStatusEnum\\\", matchingStatusEnum);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tString queryStr = \\\"Select ao from AccountOperation as ao  where ao.reference not like 'DRAFT%' and ao.transactionDate >=:fromDate and ao.transactionDate <=:toDate and  \\\"\\r\\n\\t\\t\\t\\t+ \\\"ao.occCode =:occCode \\\";\\r\\n\\r\\n\\t\\tif (codeRejectPaymentCB.equals(occCode) || codeRejectRefundCB.equals(occCode)) {\\r\\n\\t\\t\\tqueryStr = \\\"Select ao from AccountOperation as ao  where ao.rejectedDate >=:fromDate and ao.rejectedDate <=:toDate and  \\\" + \\\"ao.occCode =:occCode \\\";\\r\\n\\t\\t}\\r\\n\\t\\tif (matchingStatusEnum != null) {\\r\\n\\t\\t\\tqueryStr += \\\" and ao.matchingStatus =:matchingStatusEnum\\\";\\r\\n\\t\\t}\\r\\n\\t\\tlistAOs = (List<? extends AccountOperation>) accountOperationService.executeSelectQuery(queryStr, params);\\r\\n\\t\\tlog.debug(\\\"Count occCode:{} occCodelistAOs :{}\\\", occCode, listAOs == null ? null : listAOs.size());\\r\\n\\r\\n\\t\\treturn listAOs;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * List R ts PCA.\\r\\n\\t *\\r\\n\\t * @param fromDate the from date\\r\\n\\t * @param toDate the to date\\r\\n\\t * @return the list\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<RatedTransaction> listRTsPCA(Date fromDate, Date toDate) {\\r\\n\\t\\tList<RatedTransaction> listRTs = new ArrayList<RatedTransaction>();\\r\\n\\r\\n\\t\\tMap<String, Object> params = new HashMap<String, Object>();\\r\\n\\t\\tparams.put(\\\"fromDate\\\", fromDate);\\r\\n\\t\\tString queryStrRTs = \\\"SELECT rt FROM RatedTransaction rt, Invoice inv WHERE  rt.subscription.status='ACTIVE' AND \\\" + \\\"inv.id = rt.invoice.id  AND \\\"\\r\\n\\t\\t\\t\\t+ \\\"rt.status = 'BILLED' AND \\\" + \\\"inv.invoiceDate <:fromDate  AND \\\" + \\\"rt.endDate>:fromDate  AND \\\" + \\\"rt.startDate<:fromDate  AND \\\"\\r\\n\\t\\t\\t\\t+ \\\"inv.invoiceNumber not like 'DRAFT%'\\\";\\r\\n\\r\\n\\t\\tlistRTs = (List<RatedTransaction>) ratedTransactionService.executeSelectQuery(queryStrRTs, params);\\r\\n\\r\\n\\t\\treturn listRTs;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * List event finances.\\r\\n\\t *\\r\\n\\t * @param occCode            the occ code\\r\\n\\t * @param from               the from\\r\\n\\t * @param to                 the to\\r\\n\\t * @param matchingStatusEnum the matching status enum\\r\\n\\t * @return the list\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<AccountOperation> listEventFinances(String occCode, Date from, Date to, MatchingStatusEnum matchingStatusEnum) {\\r\\n\\t\\tList<AccountOperation> listAOs = new ArrayList<AccountOperation>();\\r\\n\\t\\tList<AccountOperation> listAOsRej = new ArrayList<AccountOperation>();\\r\\n\\t\\tMap<String, Object> params = new HashMap<String, Object>();\\r\\n\\t\\tparams.put(\\\"fromDate\\\", from);\\r\\n\\t\\tparams.put(\\\"toDate\\\", to);\\r\\n\\t\\tparams.put(\\\"occCode\\\", occCode);\\r\\n\\t\\tif (matchingStatusEnum != null) {\\r\\n\\t\\t\\tparams.put(\\\"matchingStatusEnum\\\", matchingStatusEnum);\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tString queryStr = \\\"Select aoPay from AccountOperation as aoPay, AccountOperation as aoInv, MatchingAmount maPay, MatchingAmount maInv, MatchingCode mc \\\"\\r\\n\\t\\t\\t\\t+ \\\"where aoPay.occCode=:occCode and aoPay.id = maPay.accountOperation.id and maPay.matchingCode.id = mc.id \\\" + \\\"and aoInv.occCode='\\\" + codeFacture\\r\\n\\t\\t\\t\\t+ \\\"' and aoInv.id = maInv.accountOperation.id and maInv.matchingCode.id = mc.id \\\"\\r\\n\\t\\t\\t\\t+ \\\"and aoInv.transactionDate >=:fromDate and aoInv.transactionDate <=:toDate and aoInv.matchingStatus=:matchingStatusEnum and aoInv.rejectedPayment is null\\\";\\r\\n\\r\\n\\t\\tString queryStrRejected = \\\"Select aoPay from AccountOperation as aoPay, AccountOperation as aoRej, AccountOperation as aoInv, MatchingAmount maPay, MatchingAmount maRej, MatchingCode mc \\\"\\r\\n\\t\\t\\t\\t+ \\\"where aoPay.occCode=:occCode and aoPay.id = maPay.accountOperation.id and maPay.matchingCode.id = mc.id \\\" + \\\"and (aoRej.occCode='\\\" + codeRejectPaymentCB\\r\\n\\t\\t\\t\\t+ \\\"'  or aoRej.occCode='\\\" + codeRejectPaymentDD + \\\"')  and aoRej.id = maRej.accountOperation.id and maRej.matchingCode.id = mc.id \\\"\\r\\n\\t\\t\\t\\t+ \\\"and aoInv.transactionDate >=:fromDate and aoInv.transactionDate <=:toDate  and aoInv.rejectedPayment = aoRej and aoRej.matchingStatus=:matchingStatusEnum\\\";\\r\\n\\r\\n\\t\\tlistAOs = (List<AccountOperation>) accountOperationService.executeSelectQuery(queryStr, params);\\r\\n\\t\\tlistAOsRej = (List<AccountOperation>) accountOperationService.executeSelectQuery(queryStrRejected, params);\\r\\n\\t\\tlistAOs.addAll(listAOsRej);\\r\\n\\r\\n\\t\\tlog.debug(\\\"Count occCode:{} occCodelistAOs :{}\\\", occCode, listAOs == null ? null : listAOs.size());\\r\\n\\r\\n\\t\\treturn listAOs;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * List Rated Transactions.\\r\\n\\t *\\r\\n\\t * @param fromDate the from date\\r\\n\\t * @param toDate   the to date\\r\\n\\t * @return the list<? extends rated transaction>\\r\\n\\t *\\/\\r\\n\\t@SuppressWarnings(\\\"unchecked\\\")\\r\\n\\tprivate List<WalletOperation> listWOsFAE(Date fromDate, Date toDate) {\\r\\n\\t\\tList<RatedTransaction> listRTs = new ArrayList<RatedTransaction>();\\r\\n\\t\\tList<WalletOperation> listWOs = new ArrayList<WalletOperation>();\\r\\n\\t\\tMap<String, Object> params = new HashMap<String, Object>();\\r\\n\\t\\tparams.put(\\\"fromDate\\\", fromDate);\\r\\n\\t\\tString queryStrRTs = \\\"SELECT rt FROM RatedTransaction rt, Invoice inv WHERE  rt.subscription.status='ACTIVE' and ( rt.startDate<:fromDate or (rt.startDate is null and rt.usageDate<:fromDate )) AND \\\"\\r\\n\\t\\t\\t\\t+ \\\" ( rt.status='OPEN' OR (inv.id = rt.invoice.id AND rt.status = 'BILLED' and inv.invoiceDate >=:fromDate))\\\";\\r\\n\\t\\tString queryStrWOs = \\\"SELECT wo FROM WalletOperation wo WHERE ( wo.startDate<:fromDate or (wo.startDate is null and wo.operationDate<:fromDate )) AND status='OPEN' and wo.subscription.status='ACTIVE'\\\";\\r\\n\\t\\tlistWOs = (List<WalletOperation>) ratedTransactionService.executeSelectQuery(queryStrWOs, params);\\r\\n\\t\\tlistRTs = (List<RatedTransaction>) ratedTransactionService.executeSelectQuery(queryStrRTs, params);\\r\\n\\t\\tfor (RatedTransaction rt : listRTs) {\\r\\n\\t\\t\\tWalletOperation wo = walletOperationService.findById(rt.getWalletOperationId());\\r\\n\\t\\t\\tif (wo != null) {\\r\\n\\t\\t\\t\\tlistWOs.add(wo);\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn listWOs;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Round.\\r\\n\\t *\\r\\n\\t * @param amount the amount\\r\\n\\t * @param scale  the scale\\r\\n\\t * @return the string\\r\\n\\t *\\/\\r\\n\\tprivate String roundFormat(BigDecimal amount, Integer scale) {\\r\\n\\t\\tif (amount == null) {\\r\\n\\t\\t\\tamount = BigDecimal.ZERO;\\r\\n\\t\\t}\\r\\n\\t\\tif (scale == null) {\\r\\n\\t\\t\\tscale = 2;\\r\\n\\t\\t}\\r\\n\\t\\tamount = amount.setScale(scale, RoundingMode.HALF_UP);\\r\\n\\t\\tamount = amount.multiply(new BigDecimal(\\\"100\\\"));\\r\\n\\t\\treturn getAmountAsNChar(String.valueOf(amount.intValue()).replaceAll(\\\"\\\\\\\\.\\\", \\\",\\\"), 13);\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Round.\\r\\n\\t *\\r\\n\\t * @param amount the amount\\r\\n\\t * @param scale  the scale\\r\\n\\t * @return the big decimal\\r\\n\\t *\\/\\r\\n\\tprivate BigDecimal round(BigDecimal amount, Integer scale) {\\r\\n\\t\\tif (amount == null) {\\r\\n\\t\\t\\tamount = BigDecimal.ZERO;\\r\\n\\t\\t}\\r\\n\\t\\tif (scale == null) {\\r\\n\\t\\t\\tscale = 2;\\r\\n\\t\\t}\\r\\n\\t\\tamount = amount.setScale(scale, RoundingMode.HALF_UP);\\r\\n\\r\\n\\t\\treturn amount;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Format.\\r\\n\\t *\\r\\n\\t * @param field  the field\\r\\n\\t * @param length the length\\r\\n\\t * @return the string\\r\\n\\t *\\/\\r\\n\\tprivate String format(String field, int length) {\\r\\n\\t\\tif (field == null) {\\r\\n\\t\\t\\treturn StringUtils.getStringAsNChar(\\\"\\\", length);\\r\\n\\t\\t}\\r\\n\\t\\treturn StringUtils.enleverAccent(StringUtils.getStringAsNChar(field, length));\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the sens comptable.\\r\\n\\t *\\r\\n\\t * @param journal the journal\\r\\n\\t * @param saleType the sale type\\r\\n\\t * @param amount the amount\\r\\n\\t * @return the sens comptable\\r\\n\\t *\\/\\r\\n\\tprivate String getSensComptable(String journal, String saleType, BigDecimal amount) {\\r\\n\\t\\tString sensCompta = getSensComptable(journal, saleType);\\r\\n\\t\\tif (amount.doubleValue() < 0) {\\r\\n\\t\\t\\tif (\\\"C\\\".equals(sensCompta)) {\\r\\n\\t\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (\\\"D\\\".equals(sensCompta)) {\\r\\n\\t\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn sensCompta;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the sens comptable.\\r\\n\\t *\\r\\n\\t * @param journal the journal\\r\\n\\t * @param saleType the sale type\\r\\n\\t * @return the sens comptable\\r\\n\\t *\\/\\r\\n\\tprivate String getSensComptable(String journal, String saleType) {\\r\\n\\t\\tif (codeJournalVentesEncaissements.equals(journal) && \\\"M_ABO\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalVentesEncaissements.equals(journal) && \\\"M_TVA\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalVentesEncaissements.equals(journal) && \\\"M_TTC\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalVentesEncaissements.equals(journal) && \\\"M_REM\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalVentesEncaissements.equals(journal) && \\\"M_FRA\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\r\\n\\t\\tif (codeJournalRemboursementsDecaissements.equals(journal) && \\\"M_ABO\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalRemboursementsDecaissements.equals(journal) && \\\"M_TVA\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalRemboursementsDecaissements.equals(journal) && \\\"M_TTC\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalRemboursementsDecaissements.equals(journal) && \\\"M_REM\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalRemboursementsDecaissements.equals(journal) && \\\"M_FRA\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\r\\n\\t\\tif (codeJournalFinancementEncaissements.equals(journal))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\r\\n\\t\\tif (codeJournalRemboursementClientCB_SEPA.equals(journal))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\r\\n\\t\\tif (codeJournalRemboursementClientCheque.equals(journal))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\r\\n\\t\\tif (codeJournalConstatationImpayeRejet.equals(journal))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\r\\n\\t\\tif (codeJournalRepresentationImpaye.equals(journal))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalCA_ProduitsConstatesAvance.equals(journal))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalCA_FactureEmettre.equals(journal) && \\\"M_ABO\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalCA_FactureEmettre.equals(journal) && \\\"M_REM\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\t\\tif (codeJournalCA_FactureEmettre.equals(journal) && \\\"M_TVA\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"C\\\";\\r\\n\\t\\tif (codeJournalCA_FactureEmettre.equals(journal) && \\\"M_TTC\\\".equals(saleType))\\r\\n\\t\\t\\treturn \\\"D\\\";\\r\\n\\r\\n\\t\\treturn \\\"\\\";\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the business payment method.\\r\\n\\t *\\r\\n\\t * @param ao               the ao\\r\\n\\t * @param journal          the journal\\r\\n\\t * @param isExludedPayment the is exluded payment\\r\\n\\t * @return the business payment method\\r\\n\\t *\\/\\r\\n\\tprivate String getBusinessPaymentMethod(AccountOperation ao, String journal, boolean isExludedPayment) {\\r\\n\\t\\tif (ao == null) {\\r\\n\\t\\t\\treturn \\\"\\\";\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif ((journal.equals(codeJournalVentesEncaissements) || journal.equals(codeJournalRemboursementsDecaissements)) && isExludedPayment) {\\r\\n\\t\\t\\tif (PaymentMethodEnum.CARD == ao.getPaymentMethod()) {\\r\\n\\t\\t\\t\\treturn \\\"IMC\\\";\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (PaymentMethodEnum.DIRECTDEBIT == ao.getPaymentMethod()) {\\r\\n\\t\\t\\t\\treturn \\\"IMS\\\";\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (PaymentMethodEnum.CHECK == ao.getPaymentMethod() || codeRefundCH.equals(ao.getOccCode())) {\\r\\n\\t\\t\\treturn \\\"CK\\\";\\r\\n\\t\\t}\\r\\n\\t\\tif (PaymentMethodEnum.CARD == ao.getPaymentMethod()) {\\r\\n\\r\\n\\t\\t\\treturn \\\"CB\\\";\\r\\n\\t\\t}\\r\\n\\t\\tif (PaymentMethodEnum.WIRETRANSFER == ao.getPaymentMethod()) {\\r\\n\\t\\t\\treturn \\\"VIR\\\";\\r\\n\\t\\t}\\r\\n\\t\\tif (PaymentMethodEnum.DIRECTDEBIT == ao.getPaymentMethod()) {\\r\\n\\r\\n\\t\\t\\treturn \\\"PS\\\";\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (journal.equals(codeJournalCA_ProduitsConstatesAvance)) {\\r\\n\\t\\t\\treturn \\\"\\\";\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\tif (journal.equals(codeJournalCA_FactureEmettre)) {\\r\\n\\t\\t\\treturn \\\"\\\";\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn \\\"MDT\\\";\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the code remise banque.\\r\\n\\t *\\r\\n\\t * @param ao    the ao\\r\\n\\t * @param event the event\\r\\n\\t * @return the code remise\\r\\n\\t *\\/\\r\\n\\tprivate String getCodeRemiseBanque(AccountOperation ao, String event) {\\r\\n\\t\\tif (codeEventCycleFinancementFacturation.equals(event) || codeEventGestionBanque.equals(event)) {\\r\\n\\t\\t\\tif (ao.getPaymentMethod() == PaymentMethodEnum.DIRECTDEBIT) {\\r\\n\\t\\t\\t\\tif (ao.getDdRequestItem() != null && ao.getDdRequestItem().getDdRequestLOT() != null) {\\r\\n\\t\\t\\t\\t\\treturn \\\"\\\" + ao.getDdRequestItem().getDdRequestLOT().getId();\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn \\\"\\\";\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Generate file.\\r\\n\\t *\\r\\n\\t * @param lines          the lines\\r\\n\\t * @param outputDir      the output dir\\r\\n\\t * @param fromDate       the from date\\r\\n\\t * @param toDate         the to date\\r\\n\\t * @param fileNamePrefix the file name prefix\\r\\n\\t * @param codeEvent      the code event\\r\\n\\t * @throws BusinessException the business exception\\r\\n\\t *\\/\\r\\n\\tpublic void generateFile(List<String[]> lines, String outputDir, Date fromDate, Date toDate, String fileNamePrefix, String codeEvent) throws BusinessException {\\r\\n\\t\\ttry {\\r\\n\\t\\t\\tProvider appProvider = ((ProviderService) getServiceInterface(\\\"ProviderService\\\")).getProvider();\\r\\n\\t\\t\\tCsvBuilder csvBuilder = new CsvBuilder(\\\"\\\", false, CsvBuilder.BREAK_LINE_UNIX);\\r\\n\\r\\n\\t\\t\\tfor (int i = 0; i < lines.size(); i++) {\\r\\n\\t\\t\\t\\tString[] line = lines.get(i);\\r\\n\\t\\t\\t\\tcsvBuilder.appendValues(line);\\r\\n\\t\\t\\t\\tcsvBuilder.startNewLine();\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tString absolutFileName = ParamBean.getInstance().getChrootDir(appProvider.getCode());\\r\\n\\t\\t\\tif (!StringUtils.isBlank(outputDir)) {\\r\\n\\t\\t\\t\\tabsolutFileName += File.separator + outputDir.replaceAll(\\\"\\\\\\\\..\\\", \\\"\\\");\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tif (codeEventCycleFacturation.equals(codeEvent) || codeEventCycleFinancementFacturation.equals(codeEvent) || codeEventGestionBanque.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tabsolutFileName += File.separator + fileNamePrefix + DateUtils.formatDateWithPattern(fromDate, \\\"dd-MM-yyyy\\\") + \\\".csv\\\";\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\tif (codeEventClotureFinMoisPCA.equals(codeEvent) || codeEventClotureFinMoisFAE.equals(codeEvent)) {\\r\\n\\t\\t\\t\\tabsolutFileName += File.separator + fileNamePrefix + DateUtils.formatDateWithPattern(fromDate, \\\"MM-yyyy\\\") + \\\".csv\\\";\\r\\n\\t\\t\\t}\\r\\n\\r\\n\\t\\t\\ttoFile(csvBuilder, absolutFileName);\\r\\n\\t\\t\\tlog.info(\\\"ExportComptable created :{}\\\", absolutFileName);\\r\\n\\t\\t} catch (Exception e) {\\r\\n\\t\\t\\te.printStackTrace();\\r\\n\\t\\t\\tthrow new BusinessException(e.getMessage());\\r\\n\\t\\t}\\r\\n\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * To file.\\r\\n\\t *\\r\\n\\t * @param csvBuilder       the csv builder\\r\\n\\t * @param absolutFfilename the absolut ffilename\\r\\n\\t *\\/\\r\\n\\tprivate void toFile(CsvBuilder csvBuilder, String absolutFfilename) {\\r\\n\\t\\tWriter w = null;\\r\\n\\t\\ttry {\\r\\n\\t\\t\\tFile tmp = new File(absolutFfilename);\\r\\n\\t\\t\\tFile createDir = tmp.getParentFile();\\r\\n\\r\\n\\t\\t\\tcreateDir.mkdirs();\\r\\n\\t\\t\\tFileOutputStream fos = new FileOutputStream(absolutFfilename);\\r\\n\\t\\t\\tw = new BufferedWriter(new OutputStreamWriter(fos, \\\"US-ASCII\\\"));\\r\\n\\t\\t\\tw.write(csvBuilder.toString());\\r\\n\\t\\t\\tw.flush();\\r\\n\\t\\t\\tw.close();\\r\\n\\r\\n\\t\\t} catch (Exception e) {\\r\\n\\t\\t\\tlog.error(\\\"error on toFile\\\", e);\\r\\n\\t\\t} finally {\\r\\n\\t\\t\\tif (w != null) {\\r\\n\\t\\t\\t\\ttry {\\r\\n\\t\\t\\t\\t\\tw.close();\\r\\n\\t\\t\\t\\t} catch (IOException e) {\\r\\n\\t\\t\\t\\t\\tlog.error(\\\"exception on toFile\\\", e);\\r\\n\\t\\t\\t\\t\\t;\\r\\n\\t\\t\\t\\t}\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the amount event cloture fin mois PCA.\\r\\n\\t *\\r\\n\\t * @param amount the amount\\r\\n\\t * @param rt the rt\\r\\n\\t * @param from the from\\r\\n\\t * @return the amount event cloture fin mois PCA\\r\\n\\t *\\/\\r\\n\\tprivate BigDecimal getAmountPCA(BigDecimal amount, RatedTransaction rt, Date from) {\\r\\n\\r\\n\\t\\tBigDecimal result = BigDecimal.ZERO;\\r\\n\\t\\tdouble nbDaysEndDateAndFromDate = DateUtils.daysBetween(rt.getEndDate(), fromDate);\\r\\n\\t\\tdouble nbDaysEndDateAndStartDate = DateUtils.daysBetween(rt.getEndDate(), rt.getStartDate());\\r\\n\\t\\tBigDecimal ratio = BigDecimal.valueOf(nbDaysEndDateAndFromDate \\/ nbDaysEndDateAndStartDate);\\r\\n\\t\\tresult = amount.multiply(ratio);\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Sets the time to zero.\\r\\n\\t *\\r\\n\\t * @param date the date\\r\\n\\t * @return the date\\r\\n\\t *\\/\\r\\n\\tpublic Date setTimeToEnd(Date date) {\\r\\n\\t\\tif (date == null) {\\r\\n\\t\\t\\treturn null;\\r\\n\\t\\t}\\r\\n\\t\\tfinal GregorianCalendar gc = new GregorianCalendar();\\r\\n\\t\\tgc.setTime(date);\\r\\n\\t\\tgc.set(Calendar.HOUR_OF_DAY, 23);\\r\\n\\t\\tgc.set(Calendar.MINUTE, 59);\\r\\n\\t\\tgc.set(Calendar.SECOND, 59);\\r\\n\\t\\tgc.set(Calendar.MILLISECOND, gc.getActualMaximum(Calendar.MILLISECOND));\\r\\n\\t\\tgc.set(Calendar.DAY_OF_MONTH, gc.getActualMaximum(Calendar.MONTH));\\r\\n\\t\\treturn gc.getTime();\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Sets the time to zero.\\r\\n\\t *\\r\\n\\t * @param date the date\\r\\n\\t * @return the date\\r\\n\\t *\\/\\r\\n\\tpublic Date setTimeToZero(Date date) {\\r\\n\\t\\tif (date == null) {\\r\\n\\t\\t\\treturn null;\\r\\n\\t\\t}\\r\\n\\t\\tfinal GregorianCalendar gc = new GregorianCalendar();\\r\\n\\t\\tgc.setTime(date);\\r\\n\\t\\tgc.set(Calendar.HOUR_OF_DAY, 0);\\r\\n\\t\\tgc.set(Calendar.MINUTE, 0);\\r\\n\\t\\tgc.set(Calendar.SECOND, 0);\\r\\n\\t\\tgc.set(Calendar.MILLISECOND, 0);\\r\\n\\t\\tgc.set(Calendar.DAY_OF_MONTH, gc.getActualMinimum(Calendar.MILLISECOND));\\r\\n\\t\\treturn gc.getTime();\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the event.\\r\\n\\t *\\r\\n\\t * @param event the event\\r\\n\\t * @return the event\\r\\n\\t *\\/\\r\\n\\tprivate String getEvent(String event) {\\r\\n\\t\\tif (event.equals(codeEventClotureFinMoisFAE) || event.equals(codeEventClotureFinMoisPCA)) {\\r\\n\\t\\t\\treturn codeEventClotureFinMois;\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn event;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Sets the date to start of day.\\r\\n\\t *\\r\\n\\t * @param date the date\\r\\n\\t * @return the date\\r\\n\\t *\\/\\r\\n\\tpublic static Date setDateToStartOfDay(Date date) {\\r\\n\\t\\tDate result = null;\\r\\n\\r\\n\\t\\tif (date != null) {\\r\\n\\t\\t\\tCalendar calendar = Calendar.getInstance();\\r\\n\\t\\t\\tcalendar.setTime(date);\\r\\n\\t\\t\\tint year = calendar.get(Calendar.YEAR);\\r\\n\\t\\t\\tint month = calendar.get(Calendar.MONTH);\\r\\n\\t\\t\\tint day = calendar.get(Calendar.DATE);\\r\\n\\t\\t\\tcalendar.set(year, month, day, 0, 0, 0);\\r\\n\\t\\t\\tcalendar.set(Calendar.MILLISECOND, calendar.getActualMinimum(Calendar.MILLISECOND));\\r\\n\\t\\t\\tresult = calendar.getTime();\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Sets the date to end of day.\\r\\n\\t *\\r\\n\\t * @param date the date\\r\\n\\t * @return the date\\r\\n\\t *\\/\\r\\n\\tpublic static Date setDateToEndOfDay(Date date) {\\r\\n\\t\\tDate result = null;\\r\\n\\r\\n\\t\\tif (date != null) {\\r\\n\\t\\t\\tCalendar calendar = Calendar.getInstance();\\r\\n\\t\\t\\tcalendar.setTime(date);\\r\\n\\t\\t\\tint year = calendar.get(Calendar.YEAR);\\r\\n\\t\\t\\tint month = calendar.get(Calendar.MONTH);\\r\\n\\t\\t\\tint day = calendar.get(Calendar.DATE);\\r\\n\\t\\t\\tcalendar.set(year, month, day, 23, 59, 59);\\r\\n\\t\\t\\tcalendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));\\r\\n\\t\\t\\tresult = calendar.getTime();\\r\\n\\t\\t}\\r\\n\\r\\n\\t\\treturn result;\\r\\n\\t}\\r\\n\\r\\n\\t\\/**\\r\\n\\t * Gets the amount as N char.\\r\\n\\t *\\r\\n\\t * @param value  the value\\r\\n\\t * @param nbChar the nb char\\r\\n\\t * @return the amount as N char\\r\\n\\t *\\/\\r\\n\\tpublic static String getAmountAsNChar(String value, int nbChar) {\\r\\n\\r\\n\\t\\tString buildString;\\r\\n\\t\\tif (value.charAt(0) == '-') {\\r\\n\\t\\t\\tvalue = value.substring(1);\\r\\n\\t\\t\\tbuildString = \\\"\\\" + value;\\r\\n\\t\\t\\twhile (buildString.length() < nbChar - 1) {\\r\\n\\t\\t\\t\\tbuildString = \\\"0\\\" + buildString;\\r\\n\\r\\n\\t\\t\\t}\\r\\n\\t\\t\\tbuildString = \\\"-\\\" + buildString;\\r\\n\\t\\t} else {\\r\\n\\t\\t\\tbuildString = \\\"\\\" + value;\\r\\n\\t\\t\\twhile (buildString.length() < nbChar) {\\r\\n\\t\\t\\t\\tbuildString = \\\"0\\\" + buildString;\\r\\n\\r\\n\\t\\t\\t}\\r\\n\\t\\t}\\r\\n\\t\\treturn buildString;\\r\\n\\t}\\r\\n\\r\\n}\\r\\n\",\n    \"executionRoles\": [],\n    \"sourcingRoles\": []\n}"
						},
						"url": {
							"raw": "{{opencell.url}}/scriptInstance/createOrUpdate",
							"host": [
								"{{opencell.url}}"
							],
							"path": [
								"scriptInstance",
								"createOrUpdate"
							]
						},
						"description": "Custom script extending DDRequestBuilderScript , to be used for SEPA SAGE DD payments."
					},
					"response": []
				}
			],
			"event": [
				{
					"listen": "prerequest",
					"script": {
						"id": "1b0ae977-1a29-4be9-a4df-6f772fdd2cd8",
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				},
				{
					"listen": "test",
					"script": {
						"id": "a7991502-7e2e-463d-a590-dc87985513f9",
						"type": "text/javascript",
						"exec": [
							""
						]
					}
				}
			]
		},
		{
			"name": "CF_PROV_PROVIDER_VERSION",
			"event": [
				{
					"listen": "test",
					"script": {
						"id": "533db33d-45ae-448e-bc6a-114c52d19a0d",
						"exec": [
							"var jsonData = JSON.parse(responseBody);",
							"tests[\"is.success\"] = jsonData.status === \"SUCCESS\";"
						],
						"type": "text/javascript"
					}
				}
			],
			"request": {
				"auth": {
					"type": "basic",
					"basic": [
						{
							"key": "username",
							"value": "{{opencell.username}}",
							"type": "string"
						},
						{
							"key": "password",
							"value": "{{opencell.password}}",
							"type": "string"
						},
						{
							"key": "saveHelperData",
							"value": true,
							"type": "boolean"
						},
						{
							"key": "showPassword",
							"value": false,
							"type": "boolean"
						}
					]
				},
				"method": "POST",
				"header": [
					{
						"key": "Authorization",
						"value": "Basic b3BlbmNlbGwuYWRtaW46b3BlbmNlbGwuYWRtaW4="
					},
					{
						"key": "Content-Type",
						"value": "application/json"
					}
				],
				"body": {
					"mode": "raw",
					"raw": "{\r\n    \"code\": \"{{request.label}}_{{$timestamp}}\",\r\n    \"description\": \"{{project.code}} {{project.type}} {{project.version}}\",\r\n    \"fieldType\": \"STRING\",\r\n    \"appliesTo\": \"PROVIDER\",\r\n    \"defaultValue\": \"{{timestamp.iso}}\",\r\n    \"storageType\": \"SINGLE\",\r\n    \"valueRequired\": false,\r\n    \"versionable\": false,\r\n    \"allowEdit\": false,\r\n    \"hideOnNew\": false,\r\n    \"cacheValue\": false,\r\n    \"guiPosition\": \"tab:Project versions:999\"\r\n}\r\n"
				},
				"url": {
					"raw": "{{opencell.url}}/customFieldTemplate/createOrUpdate",
					"host": [
						"{{opencell.url}}"
					],
					"path": [
						"customFieldTemplate",
						"createOrUpdate"
					]
				}
			},
			"response": []
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"id": "351bba63-d110-4a17-aa31-5dd5e01e03f9",
				"type": "text/javascript",
				"exec": [
					"pm.globals.set(\"timestamp.iso\", (new Date()).toISOString());",
					"pm.globals.set(\"request.label\", pm.info.requestName);",
					"",
					"var parts = pm.info.requestName.split(\"|\");",
					"",
					"for(let i=0; i<parts.length; i++) {",
					"    pm.globals.set(\"request.label.\"+i, parts[i]);",
					"}",
					""
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"id": "41a93d89-7b80-42da-a5d0-75de0101172b",
				"type": "text/javascript",
				"exec": [
					""
				]
			}
		}
	],
	"variable": [
		{
			"id": "65e3cf8e-3bde-42ff-8335-407e96d07fa6",
			"key": "template.code",
			"value": "FD",
			"type": "string"
		},
		{
			"id": "70d3ef6a-b6c6-4fb9-8242-bb762cbac858",
			"key": "template.label",
			"value": "Fnac-Darty",
			"type": "string"
		},
		{
			"id": "7ccad2ce-c380-4b3f-92cf-2e3cb35bc36a",
			"key": "provider.code",
			"value": "ABO",
			"type": "string"
		},
		{
			"id": "4183b1a3-94a3-4c06-ba51-f7fdb13fa58f",
			"key": "project.code",
			"value": "FnacDarty-370",
			"type": "string"
		},
		{
			"id": "101c61fd-3df5-42dc-a7d8-d334ba16e37f",
			"key": "project.description",
			"value": "Fnac-Darty Abo",
			"type": "string"
		},
		{
			"id": "a33be86a-8bb8-4918-b8ea-d60509399844",
			"key": "project.type",
			"value": "Patch",
			"type": "string"
		},
		{
			"id": "3dc3d1f6-d76c-493e-809b-435425e0d1d1",
			"key": "project.version",
			"value": "20190320_1",
			"type": "string"
		}
	]
}