use of com.axelor.apps.account.db.MoveLine in project axelor-open-suite by axelor.
the class MoveTemplateService method generateMove.
@Transactional(rollbackOn = { Exception.class })
public List<Long> generateMove(LocalDate moveDate, List<HashMap<String, Object>> moveTemplateList) throws AxelorException {
List<Long> moveList = new ArrayList<>();
for (HashMap<String, Object> moveTemplateMap : moveTemplateList) {
MoveTemplate moveTemplate = moveTemplateRepo.find(Long.valueOf((Integer) moveTemplateMap.get("id")));
if (moveTemplate.getJournal().getCompany() != null) {
Move move = moveService.getMoveCreateService().createMove(moveTemplate.getJournal(), moveTemplate.getJournal().getCompany(), null, null, moveDate, null, MoveRepository.TECHNICAL_ORIGIN_TEMPLATE, 0);
int counter = 1;
for (MoveTemplateLine moveTemplateLine : moveTemplate.getMoveTemplateLineList()) {
BigDecimal amount = moveTemplateLine.getDebit().add(moveTemplateLine.getCredit());
MoveLine moveLine = moveLineService.createMoveLine(move, moveTemplateLine.getPartner(), moveTemplateLine.getAccount(), amount, moveTemplateLine.getDebit().compareTo(BigDecimal.ZERO) > 0, moveDate, moveDate, counter, moveTemplate.getFullName(), moveTemplateLine.getName());
move.getMoveLineList().add(moveLine);
Tax tax = moveTemplateLine.getTax();
if (tax != null) {
TaxLine taxLine = taxService.getTaxLine(tax, moveDate);
if (taxLine != null) {
moveLine.setTaxLine(taxLine);
moveLine.setTaxRate(taxLine.getValue());
moveLine.setTaxCode(tax.getCode());
}
}
moveLine.setAnalyticDistributionTemplate(moveTemplateLine.getAnalyticDistributionTemplate());
moveLineService.generateAnalyticMoveLines(moveLine);
counter++;
}
if (moveTemplate.getAutomaticallyValidate()) {
moveValidateService.validate(move);
}
moveRepo.save(move);
moveList.add(move.getId());
}
}
return moveList;
}
use of com.axelor.apps.account.db.MoveLine in project axelor-open-suite by axelor.
the class MoveToolService method getBalanceAmount.
/**
* Compute the balance amount : total debit - total credit
*
* @param moveLineList
* @return
*/
public BigDecimal getBalanceAmount(List<MoveLine> moveLineList) {
BigDecimal balance = BigDecimal.ZERO;
if (moveLineList == null) {
return balance;
}
for (MoveLine moveLine : moveLineList) {
balance = balance.add(moveLine.getDebit());
balance = balance.subtract(moveLine.getCredit());
}
return balance;
}
use of com.axelor.apps.account.db.MoveLine in project axelor-open-suite by axelor.
the class MoveValidateService method completeMoveLines.
/**
* In move lines, fill the dates field and the partner if they are missing, and fill the counter.
*
* @param move
*/
public void completeMoveLines(Move move) {
LocalDate date = move.getDate();
Partner partner = move.getPartner();
int counter = 1;
for (MoveLine moveLine : move.getMoveLineList()) {
if (moveLine.getDate() == null) {
moveLine.setDate(date);
}
if (moveLine.getAccount() != null && moveLine.getAccount().getUseForPartnerBalance() && moveLine.getDueDate() == null) {
moveLine.setDueDate(date);
}
if (moveLine.getOriginDate() == null) {
moveLine.setOriginDate(date);
}
if (partner != null) {
moveLine.setPartner(partner);
}
moveLine.setCounter(counter);
counter++;
}
}
use of com.axelor.apps.account.db.MoveLine 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.MoveLine 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);
}
Aggregations