use of com.axelor.apps.account.db.PaymentScheduleLine in project axelor-open-suite by axelor.
the class BatchBankPaymentServiceImpl method createBankOrderFromPaymentScheduleLines.
@Override
@Transactional(rollbackOn = { Exception.class })
public BankOrder createBankOrderFromPaymentScheduleLines(Batch batch) throws AxelorException, JAXBException, IOException, DatatypeConfigurationException {
List<PaymentScheduleLine> paymentScheduleLineList;
int offset = 0;
while (!(paymentScheduleLineList = fetchPaymentScheduleLineDoneList(batch, offset)).isEmpty()) {
createBankOrders(batch, paymentScheduleLineList);
offset += paymentScheduleLineList.size();
JPA.clear();
batch = batchRepo.find(batch.getId());
}
List<BankOrder> bankOrderList;
while ((bankOrderList = fetchLimitedBankOrderList(batch)).size() > 1) {
bankOrderMergeService.mergeBankOrders(bankOrderList);
JPA.clear();
batch = batchRepo.find(batch.getId());
}
if (bankOrderList.isEmpty()) {
throw new AxelorException(batch, TraceBackRepository.CATEGORY_INCONSISTENCY, I18n.get(IExceptionMessage.BANK_ORDER_MERGE_NO_BANK_ORDERS));
}
BankOrder bankOrder = bankOrderRepo.find(bankOrderList.iterator().next().getId());
batch.setBankOrder(bankOrder);
return bankOrder;
}
use of com.axelor.apps.account.db.PaymentScheduleLine in project axelor-open-suite by axelor.
the class BatchBankPaymentServiceImpl method createBankOrders.
@Transactional(rollbackOn = { Exception.class })
protected void createBankOrders(Batch batch, Collection<PaymentScheduleLine> paymentScheduleLines) throws AxelorException, JAXBException, IOException, DatatypeConfigurationException {
for (PaymentScheduleLine paymentScheduleLine : paymentScheduleLines) {
PaymentSchedule paymentSchedule = paymentScheduleLine.getPaymentSchedule();
MoveLine creditMoveLine = paymentScheduleLine.getAdvanceMoveLine();
for (Invoice invoice : paymentSchedule.getInvoiceSet()) {
MoveLine debitMoveLine = moveService.getMoveLineService().getDebitCustomerMoveLine(invoice);
Reconcile reconcile = reconcileRepo.findByMoveLines(debitMoveLine, creditMoveLine);
if (reconcile == null) {
continue;
}
createBankOrders(batch, reconcile);
}
}
}
use of com.axelor.apps.account.db.PaymentScheduleLine in project axelor-open-suite by axelor.
the class BatchDirectDebitPaymentSchedule method processPaymentScheduleLines.
protected void processPaymentScheduleLines(int paymentScheduleType) {
AccountingBatch accountingBatch = batch.getAccountingBatch();
if (generateBankOrderFlag) {
Preconditions.checkNotNull(accountingBatch.getCompany(), I18n.get("Company is missing."));
Preconditions.checkNotNull(accountingBatch.getPaymentMode(), I18n.get("Payment method is missing."));
BankDetails companyBankDetails = getCompanyBankDetails(accountingBatch);
AccountManagement accountManagement = Beans.get(PaymentModeService.class).getAccountManagement(accountingBatch.getPaymentMode(), accountingBatch.getCompany(), companyBankDetails);
Preconditions.checkNotNull(accountManagement, I18n.get("Account management is missing."));
Preconditions.checkNotNull(accountManagement.getBankDetails(), I18n.get("Bank details in account management is missing."));
Preconditions.checkNotNull(companyBankDetails.getCurrency(), I18n.get("Currency in company bank details is missing."));
String bankOrderExportPath = accountingBatch.getPaymentMode().getBankOrderExportFolderPath();
String dataExpotDir;
try {
dataExpotDir = appBaseService.getDataExportDir();
BankPaymentConfigService bankPaymentConfigService = Beans.get(BankPaymentConfigService.class);
BankPaymentConfig bankPaymentConfig = bankPaymentConfigService.getBankPaymentConfig(accountingBatch.getCompany());
bankPaymentConfigService.getIcsNumber(bankPaymentConfig);
} catch (AxelorException e) {
throw new RuntimeException(e);
}
Preconditions.checkArgument(bankOrderExportPath != null && new File(dataExpotDir + bankOrderExportPath).exists(), String.format(I18n.get("Bank order export folder does not exist: %s"), dataExpotDir + bankOrderExportPath));
}
QueryBuilder<PaymentScheduleLine> queryBuilder = QueryBuilder.of(PaymentScheduleLine.class);
queryBuilder.add("self.paymentSchedule.statusSelect = :paymentScheduleStatusSelect");
queryBuilder.bind("paymentScheduleStatusSelect", PaymentScheduleRepository.STATUS_CONFIRMED);
queryBuilder.add("self.paymentSchedule.typeSelect = :paymentScheduleTypeSelect");
queryBuilder.bind("paymentScheduleTypeSelect", paymentScheduleType);
queryBuilder.add("self.statusSelect = :statusSelect");
queryBuilder.bind("statusSelect", PaymentScheduleLineRepository.STATUS_IN_PROGRESS);
LocalDate dueDate = accountingBatch.getDueDate() != null ? accountingBatch.getDueDate() : Beans.get(AppBaseService.class).getTodayDate(accountingBatch.getCompany());
queryBuilder.add("self.scheduleDate <= :dueDate");
queryBuilder.bind("dueDate", dueDate);
if (accountingBatch.getCompany() != null) {
queryBuilder.add("self.paymentSchedule.company IS NULL OR self.paymentSchedule.company = :company");
queryBuilder.bind("company", accountingBatch.getCompany());
}
queryBuilder.add("self.paymentSchedule.partner.id NOT IN (SELECT DISTINCT partner.id FROM Partner partner LEFT JOIN partner.blockingList blocking WHERE blocking.blockingSelect = :blockingSelect AND blocking.blockingToDate >= :blockingToDate)");
queryBuilder.bind("blockingSelect", BlockingRepository.DEBIT_BLOCKING);
queryBuilder.bind("blockingToDate", Beans.get(AppBaseService.class).getTodayDate(accountingBatch.getCompany()));
if (accountingBatch.getBankDetails() != null) {
Set<BankDetails> bankDetailsSet = Sets.newHashSet(accountingBatch.getBankDetails());
if (accountingBatch.getIncludeOtherBankAccounts() && appBaseService.getAppBase().getManageMultiBanks()) {
bankDetailsSet.addAll(accountingBatch.getCompany().getBankDetailsList());
}
queryBuilder.add("self.paymentSchedule.companyBankDetails IS NULL OR self.paymentSchedule.companyBankDetails IN (:bankDetailsSet)");
queryBuilder.bind("bankDetailsSet", bankDetailsSet);
}
if (accountingBatch.getPaymentMode() != null) {
queryBuilder.add("self.paymentSchedule.paymentMode IS NULL OR self.paymentSchedule.paymentMode = :paymentMode");
queryBuilder.bind("paymentMode", accountingBatch.getPaymentMode());
}
queryBuilder.add(":batch NOT MEMBER OF self.batchSet");
queryBuilder.bind("batch", batch);
processQuery(queryBuilder);
}
use of com.axelor.apps.account.db.PaymentScheduleLine in project axelor-open-suite by axelor.
the class PaymentScheduleLineBankPaymentServiceImpl method rejectFromMap.
protected <T> int rejectFromMap(Map<T, InterbankCodeLine> map, boolean represent, Function<T, PaymentScheduleLine> findFunc) {
int errorCount = 0;
for (Entry<T, InterbankCodeLine> entry : map.entrySet()) {
T key = entry.getKey();
InterbankCodeLine rejectionReason = entry.getValue();
PaymentScheduleLine paymentScheduleLine = findFunc.apply(key);
try {
reject(paymentScheduleLine, rejectionReason, represent);
} catch (Exception e) {
TraceBackService.trace(e);
++errorCount;
}
}
return errorCount;
}
use of com.axelor.apps.account.db.PaymentScheduleLine in project axelor-open-suite by axelor.
the class BankOrderMergeServiceImpl method getLastReferences.
protected Pair<String, LocalDate> getLastReferences(BankOrderLine bankOrderLine) {
String lastReferenceId = "";
LocalDate lastReferenceDate = null;
for (BankOrderLineOrigin bankOrderLineOrigin : bankOrderLine.getBankOrderLineOriginList()) {
LocalDate originDate = null;
String originReferenceId = null;
switch(bankOrderLineOrigin.getRelatedToSelect()) {
case BankOrderLineOriginRepository.RELATED_TO_INVOICE:
Invoice invoice = invoiceRepository.find(bankOrderLineOrigin.getRelatedToSelectId());
if (!Strings.isNullOrEmpty(invoice.getSupplierInvoiceNb())) {
originReferenceId = invoice.getSupplierInvoiceNb();
} else {
originReferenceId = invoice.getInvoiceId();
}
if (!Strings.isNullOrEmpty(invoice.getSupplierInvoiceNb())) {
originDate = invoice.getOriginDate();
} else {
originDate = invoice.getInvoiceDate();
}
break;
case BankOrderLineOriginRepository.RELATED_TO_PAYMENT_SCHEDULE_LINE:
PaymentScheduleLine paymentScheduleLine = paymentScheduleLineRepository.find(bankOrderLineOrigin.getRelatedToSelectId());
originReferenceId = paymentScheduleLine.getName();
originDate = paymentScheduleLine.getScheduleDate();
break;
default:
break;
}
if (originDate != null && (lastReferenceDate == null || lastReferenceDate.isBefore(originDate))) {
lastReferenceDate = originDate;
lastReferenceId = originReferenceId;
}
}
return Pair.of(lastReferenceId, lastReferenceDate);
}
Aggregations