ACUMATICA

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.