/**
  * Méthode permettant de construire un log affichant une liste d'échéance
  *
  * @param paymentScheduleLineList
  * @return
  */
 public String toStringPaymentScheduleLineList(List<PaymentScheduleLine> paymentScheduleLineList) {
   String list = " (nb = ";
   list += paymentScheduleLineList.size();
   list += " ) : ";
   for (PaymentScheduleLine paymentScheduleLine : paymentScheduleLineList) {
     list += paymentScheduleLine.getName();
     list += ", ";
   }
   return list;
 }
  @Transactional(rollbackOn = {AxelorException.class, Exception.class})
  public PaymentScheduleLine generateExportMensu(
      PaymentScheduleLine paymentScheduleLine,
      List<PaymentScheduleLine> paymentScheduleLineList,
      Company company)
      throws AxelorException {

    PaymentSchedule paymentSchedule = paymentScheduleLine.getPaymentSchedule();

    this.testBankDetails(paymentSchedule);

    AccountConfig accountConfig = company.getAccountConfig();

    Account account = accountConfig.getCustomerAccount();
    PaymentMode paymentMode = accountConfig.getDirectDebitPaymentMode();

    BigDecimal amount = paymentScheduleLine.getInTaxAmount();
    Partner partner = paymentSchedule.getPartner();

    Move move =
        moveService
            .getMoveCreateService()
            .createMove(
                paymentModeService.getPaymentModeJournal(paymentMode, company),
                company,
                null,
                partner,
                paymentMode);

    this.setDebitNumber(paymentScheduleLineList, paymentScheduleLine, company);

    MoveLine moveLine =
        moveLineRepo.save(
            moveLineServices.createMoveLine(
                move, partner, account, amount, false, today, 1, paymentScheduleLine.getName()));

    move.addMoveLineListItem(moveLine);

    if (paymentScheduleLine.getFromReject()) {
      // lettrage avec le rejet
      PaymentScheduleLine rejectedPaymentScheduleLine =
          this.getPaymentScheduleLineRejectOrigin(paymentScheduleLine);
      if (rejectedPaymentScheduleLine.getRejectMoveLine() != null
          && rejectedPaymentScheduleLine
                  .getRejectMoveLine()
                  .getAmountRemaining()
                  .compareTo(BigDecimal.ZERO)
              == 1) {
        reconcileService.reconcile(rejectedPaymentScheduleLine.getRejectMoveLine(), moveLine);
      }
    } else {
      // Lettrage du paiement avec les factures d'échéances
      this.reconcileDirectDebit(moveLine, paymentSchedule);
    }

    move.addMoveLineListItem(
        moveLineServices.createMoveLine(
            move,
            partner,
            paymentModeService.getCompanyAccount(paymentMode, company),
            amount,
            true,
            today,
            2,
            null));

    this.validateMove(move);

    paymentScheduleLine.setDirectDebitAmount(amount);
    paymentScheduleLine.setInTaxAmountPaid(amount);
    paymentScheduleLine.setAdvanceOrPaymentMove(moveRepo.find(move.getId()));
    paymentScheduleLine.setAdvanceMoveLine(moveLine);
    paymentScheduleLine.setStatusSelect(PaymentScheduleLineRepository.STATUS_VALIDATED);
    return paymentScheduleLineRepo.save(paymentScheduleLine);
  }