use of com.axelor.apps.account.db.Invoice in project axelor-open-suite by axelor.
the class NotificationServiceImpl method populateNotificationItemList.
@Override
public void populateNotificationItemList(Notification notification) {
notification.clearNotificationItemList();
Comparator<Invoice> byInvoiceDate = (i1, i2) -> i1.getInvoiceDate().compareTo(i2.getInvoiceDate());
Comparator<Invoice> byDueDate = (i1, i2) -> i1.getDueDate().compareTo(i2.getDueDate());
Comparator<Invoice> byInvoiceId = (i1, i2) -> i1.getInvoiceId().compareTo(i2.getInvoiceId());
List<Invoice> invoiceList = new ArrayList<Invoice>();
if (notification.getSubrogationRelease() != null) {
invoiceList = notification.getSubrogationRelease().getInvoiceSet().stream().sorted(byInvoiceDate.thenComparing(byDueDate).thenComparing(byInvoiceId)).collect(Collectors.toList());
}
for (Invoice invoice : invoiceList) {
if (invoice.getAmountRemaining().signum() > 0) {
notification.addNotificationItemListItem(createNotificationItem(invoice));
}
}
}
use of com.axelor.apps.account.db.Invoice 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;
}
use of com.axelor.apps.account.db.Invoice 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;
}
use of com.axelor.apps.account.db.Invoice in project axelor-open-suite by axelor.
the class PaymentScheduleServiceImpl method getPaymentSchedulerMoveLineToPay.
/**
* This method is used to get the movelines to be paid based on a paymentSchedule It loops on the
* invoice M2M content and gets the movelines which are to pay
*
* @param paymentSchedule
* @return
*/
@Override
public List<MoveLine> getPaymentSchedulerMoveLineToPay(PaymentSchedule paymentSchedule) {
log.debug("In getPaymentSchedulerMoveLineToPay ....");
List<MoveLine> moveLines = new ArrayList<MoveLine>();
for (Invoice invoice : paymentSchedule.getInvoiceSet()) {
if (invoice.getCompanyInTaxTotalRemaining().compareTo(BigDecimal.ZERO) > 0 && invoice.getMove() != null && invoice.getMove().getMoveLineList() != null) {
for (MoveLine moveLine : invoice.getMove().getMoveLineList()) {
if (moveLine.getAccount().getUseForPartnerBalance() && moveLine.getAmountRemaining().compareTo(BigDecimal.ZERO) > 0 && moveLine.getDebit().compareTo(BigDecimal.ZERO) > 0) {
moveLines.add(moveLine);
}
}
}
}
log.debug("End getPaymentSchedulerMoveLineToPay.");
return moveLines;
}
use of com.axelor.apps.account.db.Invoice 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;
}
Aggregations