use of de.metas.money.Money in project metasfresh-webui-api by metasfresh.
the class PricingConditionsView method updateOrderLineRecord.
private void updateOrderLineRecord(@NonNull final PricingConditionsBreak pricingConditionsBreak, @Nullable final Money basePrice) {
final IOrderDAO ordersRepo = Services.get(IOrderDAO.class);
final IOrderLineBL orderLineBL = Services.get(IOrderLineBL.class);
final I_C_OrderLine orderLineRecord = ordersRepo.getOrderLineById(getOrderLineId());
orderLineRecord.setIsTempPricingConditions(pricingConditionsBreak.isTemporaryPricingConditionsBreak());
if (pricingConditionsBreak.isTemporaryPricingConditionsBreak()) {
orderLineRecord.setM_DiscountSchema_ID(-1);
orderLineRecord.setM_DiscountSchemaBreak_ID(-1);
final PriceSpecification price = pricingConditionsBreak.getPriceSpecification();
final PriceSpecificationType type = price.getType();
if (type == PriceSpecificationType.NONE) {
//
} else if (type == PriceSpecificationType.BASE_PRICING_SYSTEM) {
assumeNotNull(basePrice, "If type={}, then the given basePrice may not be null; pricingConditionsBreak={}", type, pricingConditionsBreak);
final BigDecimal priceEntered = limitPrice(basePrice.toBigDecimal(), orderLineRecord);
orderLineRecord.setIsManualPrice(true);
orderLineRecord.setPriceEntered(priceEntered);
orderLineRecord.setC_Currency_ID(basePrice.getCurrencyId().getRepoId());
orderLineRecord.setBase_PricingSystem_ID(price.getBasePricingSystemId().getRepoId());
} else if (type == PriceSpecificationType.FIXED_PRICE) {
final Money fixedPrice = price.getFixedPrice();
Check.assumeNotNull(fixedPrice, "fixedPrice shall not be null for {}", price);
final BigDecimal priceEntered = limitPrice(fixedPrice.toBigDecimal(), orderLineRecord);
orderLineRecord.setIsManualPrice(true);
orderLineRecord.setPriceEntered(priceEntered);
orderLineRecord.setC_Currency_ID(fixedPrice.getCurrencyId().getRepoId());
orderLineRecord.setBase_PricingSystem_ID(-1);
}
orderLineRecord.setIsManualDiscount(true);
orderLineRecord.setDiscount(pricingConditionsBreak.getDiscount().toBigDecimal());
// make sure it's not overwritten by whatever the system comes up with when we save the orderLine.
orderLineRecord.setIsManualPaymentTerm(true);
orderLineRecord.setC_PaymentTerm_Override_ID(PaymentTermId.toRepoId(pricingConditionsBreak.getDerivedPaymentTermIdOrNull()));
orderLineRecord.setPaymentDiscount(Percent.toBigDecimalOrNull(pricingConditionsBreak.getPaymentDiscountOverrideOrNull()));
//
// PriceActual & Discount
Percent discountEffective = pricingConditionsBreak.getDiscount();
final BigDecimal priceActual = discountEffective.subtractFromBase(orderLineRecord.getPriceEntered(), CurrencyPrecision.TWO.toInt());
final BigDecimal priceActualEffective = limitPrice(priceActual, orderLineRecord);
if (priceActualEffective.compareTo(priceActual) != 0) {
discountEffective = PriceAndDiscount.calculateDiscountFromPrices(orderLineRecord.getPriceEntered(), priceActualEffective, CurrencyPrecision.TWO);
}
//
orderLineRecord.setIsManualDiscount(true);
orderLineRecord.setDiscount(discountEffective.toBigDecimal());
orderLineRecord.setPriceActual(priceActualEffective);
} else {
final PricingConditionsBreakId pricingConditionsBreakId = pricingConditionsBreak.getId();
orderLineRecord.setM_DiscountSchema_ID(pricingConditionsBreakId.getDiscountSchemaId());
orderLineRecord.setM_DiscountSchemaBreak_ID(pricingConditionsBreakId.getDiscountSchemaBreakId());
orderLineRecord.setIsManualDiscount(false);
orderLineRecord.setIsManualPrice(false);
orderLineRecord.setIsManualPaymentTerm(false);
final OrderLinePriceUpdateRequest orderLinePriceUpdateRequest = OrderLinePriceUpdateRequest.prepare(orderLineRecord).pricingConditionsBreakOverride(pricingConditionsBreak).build();
orderLineBL.updatePrices(orderLinePriceUpdateRequest);
}
orderLineBL.updateLineNetAmtFromQtyEntered(orderLineRecord);
orderLineBL.setTaxAmtInfo(orderLineRecord);
InterfaceWrapperHelper.save(orderLineRecord);
}
use of de.metas.money.Money in project metasfresh-webui-api by metasfresh.
the class PaymentsViewAllocateCommand method toPayableDocument.
private PayableDocument toPayableDocument(final InvoiceRow row) {
final Money openAmt = moneyService.toMoney(row.getOpenAmt());
final Money discountAmt = moneyService.toMoney(row.getDiscountAmt());
return PayableDocument.builder().invoiceId(row.getInvoiceId()).bpartnerId(row.getBPartnerId()).documentNo(row.getDocumentNo()).isSOTrx(row.getSoTrx().toBoolean()).creditMemo(row.isCreditMemo()).openAmt(openAmt).amountsToAllocate(AllocationAmounts.builder().payAmt(openAmt).discountAmt(discountAmt).build()).build();
}
use of de.metas.money.Money in project metasfresh-webui-api by metasfresh.
the class PricingConditionsRowsLoader method createEditablePricingConditionsRowOrNull.
/**
* On-the-fly create a PricingConditionsRow using this instance's {@link #sourceDocumentLine}.
*/
private PricingConditionsRow createEditablePricingConditionsRowOrNull() {
if (sourceDocumentLine == null) {
return null;
}
final int discountSchemaId = bpartnerBL.getDiscountSchemaId(sourceDocumentLine.getBpartnerId(), sourceDocumentLine.getSoTrx());
final PricingConditionsId pricingConditionsId = PricingConditionsId.ofRepoIdOrNull(discountSchemaId);
final Money priceEntered = sourceDocumentLine.getPriceEntered();
final PricingConditionsBreak pricingConditionsBreak = PricingConditionsBreak.builder().id(// N/A
null).matchCriteria(PricingConditionsBreakMatchCriteria.builder().breakValue(BigDecimal.ZERO).productId(sourceDocumentLine.getProductId()).productCategoryId(sourceDocumentLine.getProductCategoryId()).build()).priceSpecification(PriceSpecification.fixedPrice(priceEntered)).paymentTermIdOrNull(sourceDocumentLine.getPaymentTermId()).discount(sourceDocumentLine.getDiscount()).dateCreated(// N/A; the PricingConditionsBreak hasn't been created (i.e. persisted on DB) yet
null).createdById(null).build();
return PricingConditionsRow.builder().lookups(lookups).editable(true).bpartner(lookups.lookupBPartner(sourceDocumentLine.getBpartnerId())).customer(sourceDocumentLine.getSoTrx().isSales()).pricingConditionsId(pricingConditionsId).pricingConditionsBreak(pricingConditionsBreak).basePricingSystemPriceCalculator(basePricingSystemPriceCalculator).dateLastInOut(getLastInOutDate(sourceDocumentLine.getBpartnerId(), sourceDocumentLine.getSoTrx(), pricingConditionsBreak)).build();
}
use of de.metas.money.Money in project metasfresh-webui-api by metasfresh.
the class OrderLinePricingConditionsViewFactory method createSourceDocumentLine.
private final SourceDocumentLine createSourceDocumentLine(@NonNull final I_C_OrderLine orderLineRecord, @NonNull final SOTrx soTrx) {
final IProductDAO productsRepo = Services.get(IProductDAO.class);
final ProductId productId = ProductId.ofRepoId(orderLineRecord.getM_Product_ID());
final ProductCategoryId productCategoryId = productsRepo.retrieveProductCategoryByProductId(productId);
final Money priceEntered = Money.of(orderLineRecord.getPriceEntered(), CurrencyId.ofRepoId(orderLineRecord.getC_Currency_ID()));
return SourceDocumentLine.builder().orderLineId(OrderLineId.ofRepoIdOrNull(orderLineRecord.getC_OrderLine_ID())).soTrx(soTrx).bpartnerId(BPartnerId.ofRepoId(orderLineRecord.getC_BPartner_ID())).productId(productId).productCategoryId(productCategoryId).priceEntered(priceEntered).discount(Percent.of(orderLineRecord.getDiscount())).paymentTermId(PaymentTermId.ofRepoIdOrNull(orderLineRecord.getC_PaymentTerm_Override_ID())).pricingConditionsBreakId(PricingConditionsBreakId.ofOrNull(orderLineRecord.getM_DiscountSchema_ID(), orderLineRecord.getM_DiscountSchemaBreak_ID())).build();
}
use of de.metas.money.Money in project metasfresh-webui-api by metasfresh.
the class PricingConditionsView method updateSalesOrderLineIfPossible.
public void updateSalesOrderLineIfPossible() {
if (!hasEditableRow()) {
return;
}
final PricingConditionsRow editableRow = getEditableRow();
final BigDecimal basePriceAmt = editableRow.getBasePriceAmt();
final CurrencyId currencyId = editableRow.getCurrencyId();
final Money basePriceFromRow = Money.ofOrNull(basePriceAmt, currencyId);
final PricingConditionsBreak pricingConditionsBreak = editableRow.getPricingConditionsBreak();
updateOrderLineRecord(pricingConditionsBreak, basePriceFromRow);
}
Aggregations