use of com.axelor.apps.account.db.AccountingBatch in project axelor-open-suite by axelor.
the class AccountingBatchController method actionDirectDebit.
/**
* Lancer le batch de prélèvement
*
* @param request
* @param response
*/
public void actionDirectDebit(ActionRequest request, ActionResponse response) {
try {
AccountingBatch accountingBatch = request.getContext().asType(AccountingBatch.class);
accountingBatch = Beans.get(AccountingBatchRepository.class).find(accountingBatch.getId());
Batch batch = Beans.get(AccountingBatchService.class).directDebit(accountingBatch);
response.setFlash(batch.getComments());
} catch (Exception e) {
TraceBackService.trace(response, e);
} finally {
response.setReload(true);
}
}
use of com.axelor.apps.account.db.AccountingBatch in project axelor-open-suite by axelor.
the class BatchDirectDebitCustomerInvoice method process.
@Override
protected void process() {
AccountingBatch accountingBatch = batch.getAccountingBatch();
List<String> filterList = new ArrayList<>();
List<Pair<String, Object>> bindingList = new ArrayList<>();
filterList.add("self.operationTypeSelect = :operationTypeSelect");
bindingList.add(Pair.of("operationTypeSelect", (Object) InvoiceRepository.OPERATION_TYPE_CLIENT_SALE));
filterList.add("self.statusSelect = :statusSelect");
bindingList.add(Pair.of("statusSelect", (Object) InvoiceRepository.STATUS_VENTILATED));
filterList.add("self.amountRemaining > 0");
filterList.add("self.hasPendingPayments = FALSE");
LocalDate dueDate = accountingBatch.getDueDate() != null ? accountingBatch.getDueDate() : Beans.get(AppBaseService.class).getTodayDate(accountingBatch.getCompany());
filterList.add("self.dueDate <= :dueDate");
bindingList.add(Pair.of("dueDate", (Object) dueDate));
if (accountingBatch.getCompany() != null) {
filterList.add("self.company = :company");
bindingList.add(Pair.of("company", (Object) accountingBatch.getCompany()));
}
filterList.add("self.partner.id NOT IN (SELECT DISTINCT partner.id FROM Partner partner LEFT JOIN partner.blockingList blocking WHERE blocking.blockingSelect = :blockingSelect AND blocking.blockingToDate >= :blockingToDate)");
bindingList.add(Pair.of("blockingSelect", BlockingRepository.DEBIT_BLOCKING));
bindingList.add(Pair.of("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());
}
filterList.add("self.companyBankDetails IN (:bankDetailsSet)");
bindingList.add(Pair.of("bankDetailsSet", (Object) bankDetailsSet));
}
if (accountingBatch.getPaymentMode() != null) {
filterList.add("self.paymentMode = :paymentMode");
bindingList.add(Pair.of("paymentMode", (Object) accountingBatch.getPaymentMode()));
}
List<InvoicePayment> invoicePaymentList = processQuery(filterList, bindingList);
if (!invoicePaymentList.isEmpty()) {
try {
final BankOrder bankOrder = Beans.get(BankOrderMergeService.class).mergeFromInvoicePayments(invoicePaymentList);
findBatch().setBankOrder(bankOrder);
} catch (AxelorException e) {
TraceBackService.trace(e, ExceptionOriginRepository.DIRECT_DEBIT, batch.getId());
LOG.error(e.getMessage());
}
}
}
use of com.axelor.apps.account.db.AccountingBatch 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.AccountingBatch in project axelor-open-suite by axelor.
the class AccountingBatchBankPaymentService method run.
@Override
public Batch run(Model batchModel) throws AxelorException {
Batch batch;
AccountingBatch accountingBatch = (AccountingBatch) batchModel;
if (!Beans.get(AppBankPaymentService.class).isApp("bank-payment")) {
return super.run(accountingBatch);
}
switch(accountingBatch.getActionSelect()) {
case AccountingBatchRepository.ACTION_DIRECT_DEBIT:
batch = directDebit(accountingBatch);
break;
default:
batch = super.run(accountingBatch);
}
return batch;
}
use of com.axelor.apps.account.db.AccountingBatch in project axelor-open-suite by axelor.
the class AccountingBatchController method actionRealizeFixedAssetLines.
public void actionRealizeFixedAssetLines(ActionRequest request, ActionResponse response) {
AccountingBatch accountingBatch = request.getContext().asType(AccountingBatch.class);
accountingBatch = Beans.get(AccountingBatchRepository.class).find(accountingBatch.getId());
Batch batch = Beans.get(AccountingBatchService.class).realizeFixedAssetLines(accountingBatch);
if (batch != null)
response.setFlash(batch.getComments());
response.setReload(true);
}
Aggregations