Search in sources :

Example 96 with Move

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

the class DoubtfulCustomerService method getMove.

/**
 * Fonction permettant de récupérer les écritures de facture à transférer sur le compte client
 * douteux
 *
 * @param rule Le règle à appliquer :
 *     <ul>
 *       <li>0 = Créance de + 6 mois
 *       <li>1 = Créance de + 3 mois
 *     </ul>
 *
 * @param doubtfulCustomerAccount Le compte client douteux
 * @param company La société
 * @return Les écritures de facture à transférer sur le compte client douteux
 */
public List<Move> getMove(int rule, Account doubtfulCustomerAccount, Company company) {
    LocalDate date = null;
    switch(rule) {
        // Créance de + 6 mois
        case 0:
            date = Beans.get(AppBaseService.class).getTodayDate(company).minusMonths(company.getAccountConfig().getSixMonthDebtMonthNumber());
            break;
        // Créance de + 3 mois
        case 1:
            date = Beans.get(AppBaseService.class).getTodayDate(company).minusMonths(company.getAccountConfig().getThreeMonthDebtMontsNumber());
            break;
        default:
            break;
    }
    log.debug("Date de créance prise en compte : {} ", date);
    String request = "SELECT DISTINCT m FROM MoveLine ml, Move m WHERE ml.move = m AND m.company.id = " + company.getId() + " AND ml.account.useForPartnerBalance = true " + "AND m.invoice IS NOT NULL AND ml.amountRemaining > 0.00 AND ml.debit > 0.00 AND ml.dueDate < '" + date.toString() + "' AND ml.account.id != " + doubtfulCustomerAccount.getId() + " AND m.invoice.operationTypeSelect = " + InvoiceRepository.OPERATION_TYPE_CLIENT_SALE;
    log.debug("Requete : {} ", request);
    Query query = JPA.em().createQuery(request);
    @SuppressWarnings("unchecked") List<Move> moveList = query.getResultList();
    return moveList;
}
Also used : Query(javax.persistence.Query) AppBaseService(com.axelor.apps.base.service.app.AppBaseService) Move(com.axelor.apps.account.db.Move) LocalDate(java.time.LocalDate)

Example 97 with Move

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

the class DoubtfulCustomerService method createDoubtFulCustomerRejectMove.

/**
 * Procédure permettant de créer les écritures de passage en client douteux pour chaque ligne
 * d'écriture de rejet de facture
 *
 * @param moveLine Une ligne d'écritures de rejet de facture
 * @param doubtfulCustomerAccount Un compte client douteux
 * @param debtPassReason Un motif de passage en client douteux
 * @throws AxelorException
 */
@Transactional(rollbackOn = { Exception.class })
public void createDoubtFulCustomerRejectMove(MoveLine moveLine, Account doubtfulCustomerAccount, String debtPassReason) throws AxelorException {
    log.debug("Ecriture concernée : {} ", moveLine.getName());
    Company company = moveLine.getMove().getCompany();
    Partner partner = moveLine.getPartner();
    LocalDate todayDate = appBaseService.getTodayDate(company);
    Move newMove = moveService.getMoveCreateService().createMove(company.getAccountConfig().getAutoMiscOpeJournal(), company, null, partner, moveLine.getMove().getPaymentMode(), MoveRepository.TECHNICAL_ORIGIN_AUTOMATIC, moveLine.getMove().getFunctionalOriginSelect());
    BigDecimal amountRemaining = moveLine.getAmountRemaining();
    // Ecriture au crédit sur le 411
    MoveLine creditMoveLine = moveLineService.createMoveLine(newMove, partner, moveLine.getAccount(), amountRemaining, false, todayDate, 1, moveLine.getName(), debtPassReason);
    newMove.addMoveLineListItem(creditMoveLine);
    Reconcile reconcile = reconcileService.createReconcile(moveLine, creditMoveLine, amountRemaining, false);
    if (reconcile != null) {
        reconcileService.confirmReconcile(reconcile, true);
    }
    // Ecriture au débit sur le 416 (client douteux)
    MoveLine debitMoveLine = moveLineService.createMoveLine(newMove, newMove.getPartner(), doubtfulCustomerAccount, amountRemaining, true, todayDate, 2, moveLine.getName(), debtPassReason);
    newMove.getMoveLineList().add(debitMoveLine);
    debitMoveLine.setInvoiceReject(moveLine.getInvoiceReject());
    debitMoveLine.setPassageReason(debtPassReason);
    moveService.getMoveValidateService().validate(newMove);
    moveRepo.save(newMove);
    this.invoiceRejectProcess(debitMoveLine, doubtfulCustomerAccount, debtPassReason);
}
Also used : Company(com.axelor.apps.base.db.Company) Move(com.axelor.apps.account.db.Move) MoveLine(com.axelor.apps.account.db.MoveLine) Partner(com.axelor.apps.base.db.Partner) LocalDate(java.time.LocalDate) BigDecimal(java.math.BigDecimal) Reconcile(com.axelor.apps.account.db.Reconcile) Transactional(com.google.inject.persist.Transactional)

Example 98 with Move

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

the class ExtractContextMoveServiceImpl method getMapFromMoveWizardGenerateReverseForm.

@Override
public Map<String, Object> getMapFromMoveWizardGenerateReverseForm(Context context) throws AxelorException {
    Move move = context.asType(Move.class);
    Map<String, Object> assistantMap = new HashMap<String, Object>();
    int dateOfReversionSelect = (int) context.get("dateOfReversionSelect");
    LocalDate dateOfReversion;
    switch(dateOfReversionSelect) {
        case MoveRepository.DATE_OF_REVERSION_TODAY:
            dateOfReversion = Beans.get(AppBaseService.class).getTodayDate(move.getCompany());
            break;
        case MoveRepository.DATE_OF_REVERSION_ORIGINAL_MOVE_DATE:
            dateOfReversion = move.getDate();
            break;
        case MoveRepository.DATE_OF_REVERSION_CHOOSE_DATE:
            dateOfReversion = LocalDate.parse(context.get("dateOfReversion").toString());
            break;
        default:
            throw new AxelorException(move, TraceBackRepository.CATEGORY_MISSING_FIELD, I18n.get(IExceptionMessage.REVERSE_DATE_SELECT_UNKNOW_TYPE), dateOfReversionSelect);
    }
    assistantMap.put("dateOfReversion", dateOfReversion);
    assistantMap.put("isAutomaticReconcile", (boolean) context.get("isAutomaticReconcile"));
    assistantMap.put("isAutomaticAccounting", (boolean) context.get("isAutomaticAccounting"));
    assistantMap.put("isUnreconcileOriginalMove", (boolean) context.get("isUnreconcileOriginalMove"));
    return assistantMap;
}
Also used : AxelorException(com.axelor.exception.AxelorException) Move(com.axelor.apps.account.db.Move) HashMap(java.util.HashMap) LocalDate(java.time.LocalDate)

Example 99 with Move

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

the class MoveAdjustementService method createAdjustmentCreditMove.

/**
 * Creating move of passage in gap regulation (on credit)
 *
 * @param debitMoveLine
 * @return
 * @throws AxelorException
 */
public MoveLine createAdjustmentCreditMove(MoveLine debitMoveLine) throws AxelorException {
    Partner partner = debitMoveLine.getPartner();
    Account account = debitMoveLine.getAccount();
    Move debitMove = debitMoveLine.getMove();
    Company company = debitMove.getCompany();
    BigDecimal debitAmountRemaining = debitMoveLine.getAmountRemaining();
    AccountConfig accountConfig = accountConfigService.getAccountConfig(company);
    Journal miscOperationJournal = accountConfigService.getAutoMiscOpeJournal(accountConfig);
    Move adjustmentMove = moveCreateService.createMove(miscOperationJournal, company, null, partner, null, MoveRepository.TECHNICAL_ORIGIN_AUTOMATIC, debitMove.getFunctionalOriginSelect());
    // Création de la ligne au crédit
    MoveLine creditAdjustmentMoveLine = moveLineService.createMoveLine(adjustmentMove, partner, account, debitAmountRemaining, false, appAccountService.getTodayDate(company), 1, null, null);
    // Création de la ligne au débit
    MoveLine debitAdjustmentMoveLine = moveLineService.createMoveLine(adjustmentMove, partner, accountConfigService.getCashPositionVariationAccount(accountConfig), debitAmountRemaining, true, appAccountService.getTodayDate(company), 2, null, null);
    adjustmentMove.addMoveLineListItem(creditAdjustmentMoveLine);
    adjustmentMove.addMoveLineListItem(debitAdjustmentMoveLine);
    moveValidateService.validate(adjustmentMove);
    moveRepository.save(adjustmentMove);
    return creditAdjustmentMoveLine;
}
Also used : Account(com.axelor.apps.account.db.Account) Company(com.axelor.apps.base.db.Company) 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) BigDecimal(java.math.BigDecimal) AccountConfig(com.axelor.apps.account.db.AccountConfig)

Example 100 with Move

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

the class MoveAdjustementService method createMoveToPassOnTheOtherAccount.

/**
 * Méthode permettant de créer une écriture du passage du compte de l'écriture au debit vers le
 * compte de l'écriture au credit.
 *
 * @param debitMoveLineToReconcile Ecriture au débit
 * @param creditMoveLineToReconcile Ecriture au crédit
 * @param amount Montant
 * @return L'écriture de passage du compte de l'écriture au debit vers le compte de l'écriture au
 *     credit.
 * @throws AxelorException
 */
public Move createMoveToPassOnTheOtherAccount(MoveLine debitMoveLineToReconcile, MoveLine creditMoveLineToReconcile, BigDecimal amount) throws AxelorException {
    Partner partnerDebit = debitMoveLineToReconcile.getPartner();
    Partner partnerCredit = creditMoveLineToReconcile.getPartner();
    Company company = debitMoveLineToReconcile.getMove().getCompany();
    AccountConfig accountConfig = accountConfigService.getAccountConfig(company);
    Journal journal = accountConfigService.getAutoMiscOpeJournal(accountConfig);
    // Move
    Move move = moveCreateService.createMove(journal, company, null, partnerDebit, null, MoveRepository.TECHNICAL_ORIGIN_AUTOMATIC, debitMoveLineToReconcile.getMove().getFunctionalOriginSelect());
    MoveLine debitMoveLine = moveLineService.createMoveLine(move, partnerCredit, creditMoveLineToReconcile.getAccount(), amount, true, appAccountService.getTodayDate(company), 1, null, null);
    MoveLine creditMoveLine = moveLineService.createMoveLine(move, partnerDebit, debitMoveLineToReconcile.getAccount(), amount, false, appAccountService.getTodayDate(company), 2, null, null);
    move.addMoveLineListItem(debitMoveLine);
    move.addMoveLineListItem(creditMoveLine);
    moveValidateService.validate(move);
    return move;
}
Also used : Company(com.axelor.apps.base.db.Company) 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) AccountConfig(com.axelor.apps.account.db.AccountConfig)

Aggregations

Move (com.axelor.apps.account.db.Move)101 MoveLine (com.axelor.apps.account.db.MoveLine)51 Transactional (com.google.inject.persist.Transactional)37 Company (com.axelor.apps.base.db.Company)36 AxelorException (com.axelor.exception.AxelorException)34 BigDecimal (java.math.BigDecimal)33 Partner (com.axelor.apps.base.db.Partner)31 LocalDate (java.time.LocalDate)28 Journal (com.axelor.apps.account.db.Journal)25 Account (com.axelor.apps.account.db.Account)22 ArrayList (java.util.ArrayList)22 AccountConfig (com.axelor.apps.account.db.AccountConfig)18 Reconcile (com.axelor.apps.account.db.Reconcile)14 AnalyticMoveLine (com.axelor.apps.account.db.AnalyticMoveLine)11 Invoice (com.axelor.apps.account.db.Invoice)11 List (java.util.List)7 BankDetails (com.axelor.apps.base.db.BankDetails)6 InvoicePayment (com.axelor.apps.account.db.InvoicePayment)5 MoveRepository (com.axelor.apps.account.db.repo.MoveRepository)5 MoveService (com.axelor.apps.account.service.move.MoveService)5