Search in sources :

Example 1 with PaymentSchedule

use of com.axelor.apps.account.db.PaymentSchedule in project axelor-open-suite by axelor.

the class PaymentScheduleLineServiceImpl method createPaymentMove.

@Override
@Transactional(rollbackOn = { Exception.class })
public Move createPaymentMove(PaymentScheduleLine paymentScheduleLine, BankDetails companyBankDetails, PaymentMode paymentMode) throws AxelorException {
    Preconditions.checkNotNull(paymentScheduleLine);
    Preconditions.checkNotNull(companyBankDetails);
    PaymentSchedule paymentSchedule = paymentScheduleLine.getPaymentSchedule();
    Company company = paymentSchedule.getCompany();
    Partner partner = paymentSchedule.getPartner();
    Journal journal = paymentModeService.getPaymentModeJournal(paymentMode, company, companyBankDetails);
    BigDecimal amount = paymentScheduleLine.getInTaxAmount();
    String name = paymentScheduleLine.getName();
    LocalDate todayDate = appBaseService.getTodayDate(company);
    Account account = accountingSituationService.getCustomerAccount(partner, company);
    Move move = moveService.getMoveCreateService().createMove(journal, company, null, partner, paymentMode, MoveRepository.TECHNICAL_ORIGIN_AUTOMATIC, MoveRepository.FUNCTIONAL_ORIGIN_PAYMENT);
    MoveLine creditMoveLine = moveService.getMoveLineService().createMoveLine(move, partner, account, amount, false, todayDate, 1, name, null);
    move.addMoveLineListItem(creditMoveLine);
    creditMoveLine = moveLineRepo.save(creditMoveLine);
    Account paymentModeAccount = paymentModeService.getPaymentModeAccount(paymentMode, company, companyBankDetails);
    MoveLine debitMoveLine = moveService.getMoveLineService().createMoveLine(move, partner, paymentModeAccount, amount, true, todayDate, 2, name, null);
    move.addMoveLineListItem(debitMoveLine);
    debitMoveLine = moveLineRepo.save(debitMoveLine);
    moveService.getMoveValidateService().validate(move);
    // Reconcile
    if (paymentSchedule.getTypeSelect() == PaymentScheduleRepository.TYPE_TERMS && paymentSchedule.getInvoiceSet() != null) {
        List<MoveLine> debitMoveLineList = paymentSchedule.getInvoiceSet().stream().sorted(Comparator.comparing(Invoice::getDueDate)).map(invoice -> moveService.getMoveLineService().getDebitCustomerMoveLine(invoice)).collect(Collectors.toList());
        if (moveToolService.isSameAccount(debitMoveLineList, account)) {
            List<MoveLine> creditMoveLineList = Lists.newArrayList(creditMoveLine);
            paymentService.useExcessPaymentOnMoveLines(debitMoveLineList, creditMoveLineList);
        }
    }
    paymentScheduleLine.setDirectDebitAmount(amount);
    paymentScheduleLine.setInTaxAmountPaid(amount);
    paymentScheduleLine.setAdvanceOrPaymentMove(move);
    paymentScheduleLine.setAdvanceMoveLine(creditMoveLine);
    paymentScheduleLine.setStatusSelect(PaymentScheduleLineRepository.STATUS_VALIDATED);
    paymentScheduleService.closePaymentScheduleIfAllPaid(paymentSchedule);
    return move;
}
Also used : Company(com.axelor.apps.base.db.Company) PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule) Move(com.axelor.apps.account.db.Move) MoveService(com.axelor.apps.account.service.move.MoveService) PaymentService(com.axelor.apps.account.service.payment.PaymentService) Inject(com.google.inject.Inject) LoggerFactory(org.slf4j.LoggerFactory) PaymentModeService(com.axelor.apps.account.service.payment.PaymentModeService) Transactional(com.google.inject.persist.Transactional) ArrayList(java.util.ArrayList) BigDecimal(java.math.BigDecimal) Lists(com.google.common.collect.Lists) AxelorException(com.axelor.exception.AxelorException) MoveLine(com.axelor.apps.account.db.MoveLine) PaymentScheduleLine(com.axelor.apps.account.db.PaymentScheduleLine) MoveToolService(com.axelor.apps.account.service.move.MoveToolService) PaymentScheduleRepository(com.axelor.apps.account.db.repo.PaymentScheduleRepository) RoundingMode(java.math.RoundingMode) Journal(com.axelor.apps.account.db.Journal) Logger(org.slf4j.Logger) MethodHandles(java.lang.invoke.MethodHandles) AppBaseService(com.axelor.apps.base.service.app.AppBaseService) Invoice(com.axelor.apps.account.db.Invoice) Collectors(java.util.stream.Collectors) Account(com.axelor.apps.account.db.Account) SequenceService(com.axelor.apps.base.service.administration.SequenceService) List(java.util.List) PaymentScheduleLineRepository(com.axelor.apps.account.db.repo.PaymentScheduleLineRepository) LocalDate(java.time.LocalDate) PaymentMode(com.axelor.apps.account.db.PaymentMode) Preconditions(com.google.common.base.Preconditions) Comparator(java.util.Comparator) MoveLineRepository(com.axelor.apps.account.db.repo.MoveLineRepository) Partner(com.axelor.apps.base.db.Partner) MoveRepository(com.axelor.apps.account.db.repo.MoveRepository) BankDetails(com.axelor.apps.base.db.BankDetails) Account(com.axelor.apps.account.db.Account) Company(com.axelor.apps.base.db.Company) PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule) Move(com.axelor.apps.account.db.Move) MoveLine(com.axelor.apps.account.db.MoveLine) Journal(com.axelor.apps.account.db.Journal) Partner(com.axelor.apps.base.db.Partner) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) Transactional(com.google.inject.persist.Transactional)

Example 2 with PaymentSchedule

use of com.axelor.apps.account.db.PaymentSchedule in project axelor-open-suite by axelor.

the class PaymentScheduleServiceImpl method createPaymentSchedule.

/**
 * Création d'un échéancier sans ces lignes.
 *
 * @param partner Le tiers.
 * @param invoice Facture globale permettant de définir la facture pour une échéance. L'échéancier
 *     est automatiquement associé à la facture si celle-ci existe.
 * @param company La société.
 * @param date Date de création.
 * @param startDate Date de première échéance.
 * @param nbrTerm Nombre d'échéances.
 * @param bankDetails RIB.
 * @param paymentMode Mode de paiement.
 * @return L'échéancier créé.
 * @throws AxelorException
 */
@Override
public PaymentSchedule createPaymentSchedule(Partner partner, Invoice invoice, Company company, LocalDate date, LocalDate startDate, int nbrTerm, BankDetails bankDetails, PaymentMode paymentMode) throws AxelorException {
    PaymentSchedule paymentSchedule = new PaymentSchedule();
    paymentSchedule.setCompany(company);
    paymentSchedule.setPaymentScheduleSeq(this.getPaymentScheduleSequence(company));
    paymentSchedule.setCreationDate(date);
    paymentSchedule.setStartDate(startDate);
    paymentSchedule.setNbrTerm(nbrTerm);
    paymentSchedule.setBankDetails(bankDetails);
    paymentSchedule.setPaymentMode(paymentMode);
    paymentSchedule.setPartner(partner);
    if (paymentSchedule.getInvoiceSet() == null) {
        paymentSchedule.setInvoiceSet(new HashSet<Invoice>());
    } else {
        paymentSchedule.getInvoiceSet().clear();
    }
    if (invoice != null) {
        paymentSchedule.addInvoiceSetItem(invoice);
        invoice.setPaymentSchedule(paymentSchedule);
    }
    return paymentSchedule;
}
Also used : Invoice(com.axelor.apps.account.db.Invoice) PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule)

Example 3 with PaymentSchedule

use of com.axelor.apps.account.db.PaymentSchedule in project axelor-open-suite by axelor.

the class PaymentScheduleServiceImpl method createPaymentSchedule.

/**
 * Création d'un échéancier avec ces lignes.
 *
 * @param company La société.
 * @param date Date de création.
 * @param firstTermDate Date de première échéance.
 * @param initialInTaxAmount Montant d'une échéance.
 * @param nbrTerm Nombre d'échéances.
 * @param bankDetails RIB.
 * @param paymentMode Mode de paiement.
 * @return L'échéancier créé.
 * @throws AxelorException
 */
@Override
public PaymentSchedule createPaymentSchedule(Partner partner, Company company, LocalDate date, LocalDate firstTermDate, BigDecimal initialInTaxAmount, int nbrTerm, BankDetails bankDetails, PaymentMode paymentMode) throws AxelorException {
    Invoice invoice = null;
    PaymentSchedule paymentSchedule = this.createPaymentSchedule(partner, invoice, company, date, firstTermDate, nbrTerm, bankDetails, paymentMode);
    paymentSchedule.setPaymentScheduleLineList(new ArrayList<PaymentScheduleLine>());
    for (int term = 1; term < nbrTerm + 1; term++) {
        paymentSchedule.getPaymentScheduleLineList().add(paymentScheduleLineService.createPaymentScheduleLine(paymentSchedule, initialInTaxAmount, term, firstTermDate.plusMonths(term - 1)));
    }
    return paymentSchedule;
}
Also used : Invoice(com.axelor.apps.account.db.Invoice) PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule) PaymentScheduleLine(com.axelor.apps.account.db.PaymentScheduleLine)

Example 4 with PaymentSchedule

use of com.axelor.apps.account.db.PaymentSchedule in project axelor-open-suite by axelor.

the class CfonbExportService method createRecipientCFONB.

/**
 * Fonction permettant de créer un enregistrement 'destinataire' pour un export de prélèvement
 * d'une échéance
 *
 * @param company Une société
 * @param paymentScheduleLine Une échéance
 * @return Un enregistrement 'destinataire'
 * @throws AxelorException
 */
private String createRecipientCFONB(PaymentScheduleLine paymentScheduleLine, boolean mensu) throws AxelorException {
    PaymentSchedule paymentSchedule = paymentScheduleLine.getPaymentSchedule();
    Partner partner = paymentSchedule.getPartner();
    BankDetails bankDetails = Beans.get(PaymentScheduleService.class).getBankDetails(paymentSchedule);
    BigDecimal amount = paymentScheduleLine.getDirectDebitAmount();
    // Référence
    String ref = paymentScheduleLine.getDebitNumber();
    // Nom/Raison sociale du débiteur
    String partnerName = this.getPayeurPartnerName(partner);
    String operationCode = // Code opération
    this.cfonbConfig.getDirectDebitOperationCodeExportCFONB();
    return this.createRecipientCFONB(amount, ref, partnerName, bankDetails, operationCode);
}
Also used : PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule) BankDetails(com.axelor.apps.base.db.BankDetails) PaymentScheduleService(com.axelor.apps.account.service.PaymentScheduleService) Partner(com.axelor.apps.base.db.Partner) BigDecimal(java.math.BigDecimal)

Example 5 with PaymentSchedule

use of com.axelor.apps.account.db.PaymentSchedule in project axelor-open-suite by axelor.

the class PaymentScheduleController method validate.

// Validation button
public void validate(ActionRequest request, ActionResponse response) {
    PaymentSchedule paymentSchedule = request.getContext().asType(PaymentSchedule.class);
    paymentSchedule = Beans.get(PaymentScheduleRepository.class).find(paymentSchedule.getId());
    try {
        Beans.get(PaymentScheduleService.class).validatePaymentSchedule(paymentSchedule);
        response.setReload(true);
    } catch (Exception e) {
        TraceBackService.trace(response, e);
    }
}
Also used : PaymentSchedule(com.axelor.apps.account.db.PaymentSchedule) PaymentScheduleService(com.axelor.apps.account.service.PaymentScheduleService) AxelorException(com.axelor.exception.AxelorException)

Aggregations

PaymentSchedule (com.axelor.apps.account.db.PaymentSchedule)20 AxelorException (com.axelor.exception.AxelorException)10 PaymentScheduleLine (com.axelor.apps.account.db.PaymentScheduleLine)7 Transactional (com.google.inject.persist.Transactional)7 Invoice (com.axelor.apps.account.db.Invoice)6 PaymentScheduleService (com.axelor.apps.account.service.PaymentScheduleService)6 BankDetails (com.axelor.apps.base.db.BankDetails)6 Partner (com.axelor.apps.base.db.Partner)6 MoveLine (com.axelor.apps.account.db.MoveLine)4 PaymentMode (com.axelor.apps.account.db.PaymentMode)4 BigDecimal (java.math.BigDecimal)4 Company (com.axelor.apps.base.db.Company)3 LocalDate (java.time.LocalDate)3 Move (com.axelor.apps.account.db.Move)2 Reconcile (com.axelor.apps.account.db.Reconcile)2 IrrecoverableService (com.axelor.apps.account.service.IrrecoverableService)2 SequenceService (com.axelor.apps.base.service.administration.SequenceService)2 Account (com.axelor.apps.account.db.Account)1 AccountingBatch (com.axelor.apps.account.db.AccountingBatch)1 InvoicePayment (com.axelor.apps.account.db.InvoicePayment)1