Search in sources :

Example 21 with Account

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

the class MoveServiceImpl method createMove.

/**
 * Créer une écriture comptable propre à la facture.
 *
 * @param invoice
 * @param consolidate
 * @return
 * @throws AxelorException
 */
@Transactional(rollbackOn = { Exception.class })
@Override
public Move createMove(Invoice invoice) throws AxelorException {
    Move move = null;
    if (invoice != null && invoice.getInvoiceLineList() != null) {
        Journal journal = invoice.getJournal();
        Company company = invoice.getCompany();
        Partner partner = invoice.getPartner();
        Account account = invoice.getPartnerAccount();
        log.debug("Création d'une écriture comptable spécifique à la facture {} (Société : {}, Journal : {})", new Object[] { invoice.getInvoiceId(), company.getName(), journal.getCode() });
        int functionalOrigin = Beans.get(InvoiceService.class).getPurchaseTypeOrSaleType(invoice);
        if (functionalOrigin == PriceListRepository.TYPE_PURCHASE) {
            functionalOrigin = MoveRepository.FUNCTIONAL_ORIGIN_PURCHASE;
        } else if (functionalOrigin == PriceListRepository.TYPE_SALE) {
            functionalOrigin = MoveRepository.FUNCTIONAL_ORIGIN_SALE;
        } else {
            functionalOrigin = 0;
        }
        move = moveCreateService.createMove(journal, company, invoice.getCurrency(), partner, invoice.getInvoiceDate(), invoice.getPaymentMode(), MoveRepository.TECHNICAL_ORIGIN_AUTOMATIC, functionalOrigin);
        if (move != null) {
            move.setInvoice(invoice);
            move.setTradingName(invoice.getTradingName());
            boolean isPurchase = InvoiceToolService.isPurchase(invoice);
            boolean isDebitCustomer = moveToolService.isDebitCustomer(invoice, false);
            move.getMoveLineList().addAll(moveLineService.createMoveLines(invoice, move, company, partner, account, journal.getIsInvoiceMoveConsolidated(), isPurchase, isDebitCustomer));
            moveRepository.save(move);
            invoice.setMove(move);
            invoice.setCompanyInTaxTotalRemaining(moveToolService.getInTaxTotalRemaining(invoice));
            moveValidateService.validate(move);
        }
    }
    return move;
}
Also used : Account(com.axelor.apps.account.db.Account) Company(com.axelor.apps.base.db.Company) Move(com.axelor.apps.account.db.Move) InvoiceService(com.axelor.apps.account.service.invoice.InvoiceService) Journal(com.axelor.apps.account.db.Journal) Partner(com.axelor.apps.base.db.Partner) Transactional(com.google.inject.persist.Transactional)

Example 22 with Account

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

the class MoveValidateService method checkPreconditions.

public void checkPreconditions(Move move) throws AxelorException {
    Journal journal = move.getJournal();
    Company company = move.getCompany();
    if (company == null) {
        throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.MOVE_3), move.getReference()));
    }
    if (journal == null) {
        throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.MOVE_2), move.getReference()));
    }
    if (move.getPeriod() == null) {
        throw new AxelorException(TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.MOVE_4), move.getReference()));
    }
    if (move.getMoveLineList() == null || move.getMoveLineList().isEmpty()) {
        throw new AxelorException(TraceBackRepository.CATEGORY_INCONSISTENCY, String.format(I18n.get(IExceptionMessage.MOVE_8), move.getReference()));
    }
    if (move.getMoveLineList().stream().allMatch(moveLine -> moveLine.getDebit().add(moveLine.getCredit()).compareTo(BigDecimal.ZERO) == 0)) {
        throw new AxelorException(TraceBackRepository.CATEGORY_INCONSISTENCY, String.format(I18n.get(IExceptionMessage.MOVE_8), move.getReference()));
    }
    MoveLineService moveLineService = Beans.get(MoveLineService.class);
    if (move.getFunctionalOriginSelect() != MoveRepository.FUNCTIONAL_ORIGIN_CLOSURE && move.getFunctionalOriginSelect() != MoveRepository.FUNCTIONAL_ORIGIN_OPENING) {
        for (MoveLine moveLine : move.getMoveLineList()) {
            Account account = moveLine.getAccount();
            if (account.getIsTaxAuthorizedOnMoveLine() && account.getIsTaxRequiredOnMoveLine() && moveLine.getTaxLine() == null) {
                throw new AxelorException(TraceBackRepository.CATEGORY_MISSING_FIELD, String.format(I18n.get(IExceptionMessage.MOVE_9), account.getName(), moveLine.getName()));
            }
            if (moveLine.getAnalyticDistributionTemplate() == null && ObjectUtils.isEmpty(moveLine.getAnalyticMoveLineList()) && account.getAnalyticDistributionAuthorized() && account.getAnalyticDistributionRequiredOnMoveLines()) {
                throw new AxelorException(TraceBackRepository.CATEGORY_MISSING_FIELD, String.format(I18n.get(IExceptionMessage.MOVE_10), account.getName(), moveLine.getName()));
            }
            if (account != null && !account.getAnalyticDistributionAuthorized() && (moveLine.getAnalyticDistributionTemplate() != null || (moveLine.getAnalyticMoveLineList() != null && !moveLine.getAnalyticMoveLineList().isEmpty()))) {
                throw new AxelorException(move, TraceBackRepository.CATEGORY_CONFIGURATION_ERROR, String.format(I18n.get(IExceptionMessage.MOVE_11), moveLine.getName()));
            }
            moveLineService.validateMoveLine(moveLine);
        }
        this.validateWellBalancedMove(move);
    }
}
Also used : AxelorException(com.axelor.exception.AxelorException) Account(com.axelor.apps.account.db.Account) Company(com.axelor.apps.base.db.Company) MoveLine(com.axelor.apps.account.db.MoveLine) Journal(com.axelor.apps.account.db.Journal)

Example 23 with Account

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

the class MoveAdjustementService method createAdjustmentDebitMove.

/**
 * Creating move of passage in gap regulation (on debit)
 *
 * @param debitMoveLine
 * @return
 * @throws AxelorException
 */
@Transactional(rollbackOn = { Exception.class })
public void createAdjustmentDebitMove(MoveLine debitMoveLine) throws AxelorException {
    Partner partner = debitMoveLine.getPartner();
    Account account = debitMoveLine.getAccount();
    Move debitMove = debitMoveLine.getMove();
    Company company = debitMove.getCompany();
    AccountConfig accountConfig = accountConfigService.getAccountConfig(company);
    BigDecimal debitAmountRemaining = debitMoveLine.getAmountRemaining();
    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 debit
    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);
}
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) Transactional(com.google.inject.persist.Transactional)

Example 24 with Account

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

the class AccountController method computeBalance.

public void computeBalance(ActionRequest request, ActionResponse response) {
    try {
        Account account = request.getContext().asType(Account.class);
        if (account.getId() == null) {
            return;
        }
        account = Beans.get(AccountRepository.class).find(account.getId());
        BigDecimal balance = Beans.get(AccountService.class).computeBalance(account, AccountService.BALANCE_TYPE_DEBIT_BALANCE);
        if (balance.compareTo(BigDecimal.ZERO) >= 0) {
            response.setAttr("$balanceBtn", "title", I18n.get(ITranslation.ACCOUNT_DEBIT_BALANCE));
        } else {
            balance = balance.multiply(new BigDecimal(-1));
            response.setAttr("$balanceBtn", "title", I18n.get(ITranslation.ACCOUNT_CREDIT_BALANCE));
        }
        response.setValue("$balanceBtn", balance);
    } catch (Exception e) {
        TraceBackService.trace(response, e);
    }
}
Also used : Account(com.axelor.apps.account.db.Account) AccountService(com.axelor.apps.account.service.AccountService) BigDecimal(java.math.BigDecimal) AxelorException(com.axelor.exception.AxelorException)

Example 25 with Account

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

the class AccountingReportController method getAccount.

/**
 * @param request
 * @param response
 */
public void getAccount(ActionRequest request, ActionResponse response) {
    AccountingReport accountingReport = request.getContext().asType(AccountingReport.class);
    try {
        Account account = Beans.get(AccountingReportService.class).getAccount(accountingReport);
        logger.debug("Compte : {}", account);
        response.setValue("account", account);
    } catch (Exception e) {
        TraceBackService.trace(response, e);
    }
}
Also used : Account(com.axelor.apps.account.db.Account) AccountingReport(com.axelor.apps.account.db.AccountingReport) AccountingReportService(com.axelor.apps.account.service.AccountingReportService)

Aggregations

Account (com.axelor.apps.account.db.Account)59 MoveLine (com.axelor.apps.account.db.MoveLine)27 Company (com.axelor.apps.base.db.Company)26 BigDecimal (java.math.BigDecimal)26 Partner (com.axelor.apps.base.db.Partner)25 Move (com.axelor.apps.account.db.Move)21 AxelorException (com.axelor.exception.AxelorException)20 Journal (com.axelor.apps.account.db.Journal)18 Transactional (com.google.inject.persist.Transactional)18 AccountConfig (com.axelor.apps.account.db.AccountConfig)14 LocalDate (java.time.LocalDate)12 AnalyticMoveLine (com.axelor.apps.account.db.AnalyticMoveLine)10 ArrayList (java.util.ArrayList)10 TaxLine (com.axelor.apps.account.db.TaxLine)8 Invoice (com.axelor.apps.account.db.Invoice)7 Reconcile (com.axelor.apps.account.db.Reconcile)7 InvoiceLine (com.axelor.apps.account.db.InvoiceLine)6 BankDetails (com.axelor.apps.base.db.BankDetails)6 PaymentMode (com.axelor.apps.account.db.PaymentMode)5 Product (com.axelor.apps.base.db.Product)5