Search in sources :

Example 1 with DebtRecoveryMethod

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

the class DebtRecoverySessionService method getMaxLevel.

public int getMaxLevel(DebtRecovery debtRecovery) {
    DebtRecoveryMethod debtRecoveryMethod = debtRecovery.getDebtRecoveryMethod();
    int levelMax = -1;
    if (debtRecoveryMethod != null && debtRecoveryMethod.getDebtRecoveryMethodLineList() != null) {
        for (DebtRecoveryMethodLine debtRecoveryMethodLine : debtRecoveryMethod.getDebtRecoveryMethodLineList()) {
            int currentLevel = debtRecoveryMethodLine.getSequence();
            if (currentLevel > levelMax) {
                levelMax = currentLevel;
            }
        }
    }
    return levelMax;
}
Also used : DebtRecoveryMethod(com.axelor.apps.account.db.DebtRecoveryMethod) DebtRecoveryMethodLine(com.axelor.apps.account.db.DebtRecoveryMethodLine)

Example 2 with DebtRecoveryMethod

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

the class DebtRecoveryService method debtRecoveryGenerate.

/**
 * Handle the debt recovery process for a partner and company. Can optionally specify a trading
 * name.
 *
 * @param partner The partner that has debts to be recovered
 * @param company The company for which to recover the debts
 * @param tradingName (optional) A trading name of the company for which to recover the debts
 * @throws AxelorException
 * @throws IllegalAccessException
 * @throws InstantiationException
 * @throws ClassNotFoundException
 * @throws IOException
 */
@Transactional(rollbackOn = { Exception.class })
public boolean debtRecoveryGenerate(Partner partner, Company company, TradingName tradingName) throws AxelorException, ClassNotFoundException, InstantiationException, IllegalAccessException, IOException, JSONException {
    boolean remindedOk = false;
    DebtRecovery debtRecovery = this.getDebtRecovery(partner, company, // getDebtRecovery if one already exists
    tradingName);
    BigDecimal balanceDue = accountCustomerService.getBalanceDue(partner, company, tradingName);
    if (balanceDue.compareTo(BigDecimal.ZERO) > 0) {
        log.debug("balanceDue : {} ", balanceDue);
        BigDecimal balanceDueDebtRecovery = accountCustomerService.getBalanceDueDebtRecovery(partner, company, tradingName);
        if (balanceDueDebtRecovery.compareTo(BigDecimal.ZERO) > 0) {
            log.debug("balanceDueDebtRecovery : {} ", balanceDueDebtRecovery);
            remindedOk = true;
            if (debtRecovery == null) {
                AccountingSituationRepository accSituationRepo = Beans.get(AccountingSituationRepository.class);
                AccountingSituation accountingSituation = accSituationRepo.all().filter("self.partner = ?1 and self.company = ?2", partner, company).fetchOne();
                debtRecovery = this.createDebtRecovery(accountingSituation, tradingName);
            }
            debtRecovery.setCompany(companyRepo.find(company.getId()));
            if (tradingName != null)
                debtRecovery.setTradingName(tradingNameRepo.find(tradingName.getId()));
            debtRecovery.setCurrency(partner.getCurrency());
            debtRecovery.setBalanceDue(balanceDue);
            List<MoveLine> moveLineList = this.getMoveLineDebtRecovery(partner, company, tradingName);
            this.updateInvoiceDebtRecovery(debtRecovery, this.getInvoiceList(moveLineList));
            this.updatePaymentScheduleLineDebtRecovery(debtRecovery, this.getPaymentScheduleList(moveLineList, partner));
            debtRecovery.setBalanceDueDebtRecovery(balanceDueDebtRecovery);
            Integer levelDebtRecovery = -1;
            if (debtRecovery.getDebtRecoveryMethodLine() != null) {
                levelDebtRecovery = debtRecovery.getDebtRecoveryMethodLine().getSequence();
            }
            LocalDate referenceDate = this.getReferenceDate(debtRecovery);
            if (referenceDate != null) {
                log.debug("date de référence : {} ", referenceDate);
                debtRecovery.setReferenceDate(referenceDate);
            } else {
                throw new AxelorException(debtRecovery, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, "%s :\n" + I18n.get("Partner") + " %s, " + I18n.get("Company") + " %s : " + tradingName != null ? I18n.get("Trading name") + " %s : " : "" + I18n.get(IExceptionMessage.DEBT_RECOVERY_2), I18n.get(com.axelor.apps.base.exceptions.IExceptionMessage.EXCEPTION), partner.getName(), company.getName());
            }
            if (debtRecovery.getDebtRecoveryMethod() == null) {
                DebtRecoveryMethod debtRecoveryMethod = debtRecoverySessionService.getDebtRecoveryMethod(debtRecovery);
                if (debtRecoveryMethod != null) {
                    debtRecovery.setDebtRecoveryMethod(debtRecoveryMethod);
                    debtRecoverySessionService.debtRecoverySession(debtRecovery);
                } else {
                    throw new AxelorException(debtRecovery, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, "%s :\n" + I18n.get("Partner") + " %s, " + I18n.get("Company") + " %s : " + tradingName != null ? I18n.get("Trading name") + " %s : " : "" + I18n.get(IExceptionMessage.DEBT_RECOVERY_3), I18n.get(com.axelor.apps.base.exceptions.IExceptionMessage.EXCEPTION), partner.getName(), company.getName());
                }
            } else {
                debtRecoverySessionService.debtRecoverySession(debtRecovery);
            }
            if (debtRecovery.getWaitDebtRecoveryMethodLine() == null) {
                // Si le niveau de relance a évolué
                if (debtRecovery.getDebtRecoveryMethodLine() != null && debtRecovery.getDebtRecoveryMethodLine().getSequence() > levelDebtRecovery) {
                    debtRecoveryActionService.runAction(debtRecovery);
                    DebtRecoveryHistory debtRecoveryHistory = debtRecoveryActionService.getDebtRecoveryHistory(debtRecovery);
                    if (CollectionUtils.isEmpty(messageRepo.findByRelatedTo(Math.toIntExact(debtRecoveryHistory.getId()), DebtRecoveryHistory.class.getCanonicalName()).fetch())) {
                        debtRecoveryActionService.runMessage(debtRecovery);
                    }
                }
            } else {
                log.debug("Tiers {}, Société {} - Niveau de relance en attente ", partner.getName(), company.getName());
                // TODO Alarm ?
                TraceBackService.trace(new AxelorException(debtRecovery, TraceBackRepository.CATEGORY_INCONSISTENCY, "%s :\n" + I18n.get("Partner") + " %s, " + I18n.get("Company") + " %s : " + I18n.get(IExceptionMessage.DEBT_RECOVERY_4), I18n.get(com.axelor.apps.base.exceptions.IExceptionMessage.EXCEPTION), partner.getName(), company.getName()));
            }
        } else {
            debtRecoverySessionService.debtRecoveryInitialization(debtRecovery);
        }
    } else {
        debtRecoverySessionService.debtRecoveryInitialization(debtRecovery);
    }
    return remindedOk;
}
Also used : AxelorException(com.axelor.exception.AxelorException) DebtRecoveryHistory(com.axelor.apps.account.db.DebtRecoveryHistory) DebtRecoveryMethod(com.axelor.apps.account.db.DebtRecoveryMethod) AccountingSituationRepository(com.axelor.apps.account.db.repo.AccountingSituationRepository) AccountingSituation(com.axelor.apps.account.db.AccountingSituation) MoveLine(com.axelor.apps.account.db.MoveLine) DebtRecovery(com.axelor.apps.account.db.DebtRecovery) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) Transactional(com.google.inject.persist.Transactional)

Aggregations

DebtRecoveryMethod (com.axelor.apps.account.db.DebtRecoveryMethod)2 AccountingSituation (com.axelor.apps.account.db.AccountingSituation)1 DebtRecovery (com.axelor.apps.account.db.DebtRecovery)1 DebtRecoveryHistory (com.axelor.apps.account.db.DebtRecoveryHistory)1 DebtRecoveryMethodLine (com.axelor.apps.account.db.DebtRecoveryMethodLine)1 MoveLine (com.axelor.apps.account.db.MoveLine)1 AccountingSituationRepository (com.axelor.apps.account.db.repo.AccountingSituationRepository)1 AxelorException (com.axelor.exception.AxelorException)1 Transactional (com.google.inject.persist.Transactional)1 BigDecimal (java.math.BigDecimal)1 LocalDate (java.time.LocalDate)1