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;
}
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);
}
}
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);
}
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);
}
}
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);
}
}
Aggregations