Acumatica Advanced Pricing
April 25, 2024
•
12 min read
Introduction
Acumatica's advanced pricing module enables complex pricing strategies including customer-specific pricing, volume discounts, time-based promotions, and tiered pricing. This guide covers configuration and implementation.
Price Lists
POST /api/data/AR202000
Content-Type: application/json
{
"PriceListID": { "value": "RETAIL-2024" },
"Description": { "value": "Retail Price List 2024" },
"EffectiveDate": { "value": "2024-01-01" },
"ExpirationDate": { "value": "2024-12-31" },
"Currencies": [
{ "CurrencyID": { "value": "USD" } }
]
}
Customer-Specific Pricing
async function setCustomerPricing(customerId, pricingRules) {
for (const rule of pricingRules) {
const customerPrice = {
CustomerID: { value: customerId },
InventoryID: { value: rule.itemId },
PriceListID: { value: rule.priceList },
UnitPrice: { value: rule.price },
EffectiveDate: { value: rule.effectiveDate },
ExpirationDate: { value: rule.expirationDate }
};
await createCustomerPrice(baseUrl, token, customerPrice);
}
}
Volume Discounts
async function configureVolumeDiscount(inventoryId, discountTiers) {
const discountData = {
InventoryID: { value: inventoryId },
DiscountCode: { value: `VOL-${inventoryId}` },
Description: { value: 'Volume Discount' },
DiscountType: { value: 'BreakQty' },
Breakpoints: discountTiers.map(tier => ({
Quantity: { value: tier.minQty },
DiscountPercent: { value: tier.discount }
}))
};
return await createDiscount(baseUrl, token, 'AR205000', discountData);
}
Promotions
async function createPromotion(promotion) {
const promoData = {
PromotionCode: { value: promotion.code },
Description: { value: promotion.name },
StartDate: { value: promotion.startDate },
EndDate: { value: promotion.endDate },
DiscountType: { value: promotion.type },
DiscountAmount: { value: promotion.discount },
ApplicableItems: promotion.items.map(i => ({ InventoryID: { value: i } }))
};
return await createPromotionRecord(baseUrl, token, promoData);
}
Complete Implementation
class PricingManager {
async calculatePrice(customerId, items, quantity, date) {
let basePrice = await this.getBasePrice(items);
const customerPrice = await this.getCustomerPrice(customerId, items);
if (customerPrice) basePrice = customerPrice;
const volumeDiscount = await this.getVolumeDiscount(items, quantity);
const promotion = await this.getActivePromotion(items, date);
return this.applyDiscounts(basePrice, volumeDiscount, promotion);
}
}
Summary
Acumatica's advanced pricing enables sophisticated pricing strategies that drive sales and customer loyalty. By implementing customer-specific pricing, volume discounts, and time-based promotions, you can optimize revenue.
For more information, check out our other tutorials on Payment Gateway and Cost Analysis.