private void addPaymentsInstallments( Sale sale, List<Payment> payments, List<Installment> installments) { if (installments != null) { for (Installment i : installments) { i.setDate(GenericTools.getDateFromString(i.getDateString())); i.setAmount(ServerTools.round(i.getAmount())); } if (sale.getClient() != null) { // Client must be enabled if he has future or pending installments sale.getClient().setDisabled(false); } } if (payments != null) { for (Payment p : payments) { p.setDate(GenericTools.getDateFromString(p.getDateString())); p.setScheduleDate(GenericTools.getDateFromString(p.getScheduleDateString())); p.setAmount(ServerTools.round(p.getAmount())); p.setPaymentMethod(sale.getPaymentMethod()); } } sale.setInstallments(installments); sale.setPayments(payments); }
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void installmentToPayment(Installment installment) throws IabakoPackageForbiddenException { Installment installmentFromDB = (Installment) installmentService.getById(installment.getId()); if (installmentFromDB == null) { log.warn("No installment found with id :" + installment.getId()); return; } Payment payment = new Payment(); payment.setDate(GenericTools.getDateFromString(installment.getDateString())); payment.setScheduleDate(GenericTools.getDateFromString(installment.getScheduleDateString())); payment.setAmount(installment.getAmount()); payment.setSale(installment.getSale()); payment.setComment(installment.getComment()); payment.setPaymentMethod(installment.getPaymentMethod()); payment.setRequestDetails(installment.getRequestDetails()); payment.setRequestBeforeDateSent(installment.isRequestBeforeDateSent()); payment.setRequestAfterDateSent(installment.isRequestAfterDateSent()); installmentService.remove(installmentFromDB, true); paymentService.save(payment, true); trackingService.addTrackingToUserSession( TrackingType.installmentToPaymentReceived, installment.getSale()); }
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public void deleteInstallmentsByAmount(Sale sale, Double amount) { List<Installment> installments = getInstallments(sale); Double balance = amount; List<Installment> toDelete = new ArrayList<Installment>(); Installment toMerge = null; for (Installment i : installments) { balance = ServerTools.round(balance - i.getAmount()); if (balance >= 0) { toDelete.add(i); } else { toMerge = i; toMerge.setAmount(balance * -1); break; } } for (Installment i : toDelete) { installmentService.remove(i, true); } if (toMerge != null) { installmentService.save(toMerge, true); } }
private void addCustomInstallmentsDefinition(Sale sale, List<Installment> installments) { if (sale.getInstallmentsDefinition() == null || sale.getPaymentType() == PaymentType.onePayment || sale.getInstallmentsDefinition().getInstallmentsType() == null || sale.getInstallmentsDefinition().getInstallmentsFrequency() == null || sale.getInstallmentsDefinition().getInstallmentsFrequency() == InstallmentsFrequency.custom && GenericTools.isEmpty(installments)) { sale.setPaymentType(PaymentType.onePayment); sale.setInstallmentsDefinition(null); } else { InstallmentsDefinition installDef = sale.getInstallmentsDefinition(); sale.setPaymentMethod(null); if (installDef.getInstallmentsFrequency() == InstallmentsFrequency.periodical) { installDef.setInstallmentsPeriodicalStartDate( GenericTools.getDateFromString(installDef.getInstallmentsPeriodicalStartDateString())); } else { // Clear periodical values installDef.setInstallmentsPeriodicalStartDate(null); installDef.setInstallmentsPeriodicalPrice(null); } if (sale.getInstallmentsDefinition().getInstallmentsFrequency() == InstallmentsFrequency.custom) { List<Installment> customInstallmentDefList = new ArrayList<Installment>(); for (Installment installment : installments) { Installment customInstallmentDef = new Installment(); customInstallmentDef.setDate(GenericTools.getDateFromString(installment.getDateString())); // In drafts, amount can be null (but in database) customInstallmentDef.setAmount( installment.getAmount() == null ? 0 : installment.getAmount()); customInstallmentDef.setInstallmentsDefinition(sale.getInstallmentsDefinition()); customInstallmentDefList.add(customInstallmentDef); } sale.getInstallmentsDefinition().setInstallments(customInstallmentDefList); } else if (sale.getInstallmentsDefinition().getInstallmentsType() == InstallmentsType.undefined) { // Clear defined value installDef.setInstallmentsNumber(0); Date lastInstallmentDate = installments.isEmpty() ? sale.getInstallmentsDefinition().getInstallmentsPeriodicalStartDate() : installments.get(installments.size() - 1).getDate(); Date nextUndefinedInstallment; if (installments.isEmpty()) { nextUndefinedInstallment = lastInstallmentDate; } else { nextUndefinedInstallment = sale.getInstallmentsDefinition() .addNToDate( new ServerTools(), lastInstallmentDate, sale.getInstallmentsDefinition().getInstallmentsPeriodicalFrequency(), sale.getInstallmentsDefinition().getInstallmentsPeriodicalFrequencyN()); } sale.getInstallmentsDefinition().setNextUndefinedInstallment(nextUndefinedInstallment); } } }