use of de.metas.pricing.conditions.PriceSpecificationType 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.pricing.conditions.PriceSpecificationType in project metasfresh-webui-api by metasfresh.
the class PricingConditionsRowActions method toPartialPriceChange.
private static PartialPriceChange toPartialPriceChange(final List<JSONDocumentChangedEvent> fieldChangeRequests, final CurrencyId defaultCurrencyId) {
final PartialPriceChangeBuilder builder = PartialPriceChange.builder().defaultCurrencyId(defaultCurrencyId);
for (final JSONDocumentChangedEvent fieldChangeRequest : fieldChangeRequests) {
final String fieldName = fieldChangeRequest.getPath();
builder.changedFieldName(fieldName);
if (PricingConditionsRow.FIELDNAME_BasePriceType.equals(fieldName)) {
final LookupValue priceTypeLookupValue = fieldChangeRequest.getValueAsStringLookupValue();
final PriceSpecificationType priceType = priceTypeLookupValue != null ? PriceSpecificationType.ofCode(priceTypeLookupValue.getIdAsString()) : null;
builder.priceType(priceType);
} else if (PricingConditionsRow.FIELDNAME_BasePricingSystem.equals(fieldName)) {
final LookupValue pricingSystem = fieldChangeRequest.getValueAsIntegerLookupValue();
final PricingSystemId pricingSystemId = pricingSystem != null ? PricingSystemId.ofRepoIdOrNull(pricingSystem.getIdAsInt()) : null;
builder.basePricingSystemId(Optional.ofNullable(pricingSystemId));
} else if (PricingConditionsRow.FIELDNAME_PricingSystemSurcharge.equals(fieldName)) {
builder.pricingSystemSurchargeAmt(fieldChangeRequest.getValueAsBigDecimal(BigDecimal.ZERO));
} else if (PricingConditionsRow.FIELDNAME_BasePrice.equals(fieldName)) {
builder.fixedPriceAmt(fieldChangeRequest.getValueAsBigDecimal(BigDecimal.ZERO));
} else if (PricingConditionsRow.FIELDNAME_C_Currency_ID.equals(fieldName)) {
final LookupValue currency = fieldChangeRequest.getValueAsIntegerLookupValue();
final CurrencyId currencyId = currency != null ? CurrencyId.ofRepoIdOrNull(currency.getIdAsInt()) : null;
builder.currencyId(currencyId);
if (currencyId != null) {
builder.defaultCurrencyId(currencyId);
}
}
}
return builder.build();
}
Aggregations