Sample code using zChargeGroup
Use the following sample code to update product of Quote via zChargeGroup.
public class SampleProductAdd {
public static void sampleProductManipulation() {
zqu.Quote quote = zqu.Quote.getNewInstance();
quote.set('Name', 'My Product Manipulation Test Quote');
quote.set('zqu__StartDate__c', Date.newInstance(2025, 1, 1));
quote.set('zqu__InitialTerm__c', 12);
// populate other Quote fields
quote.save();
Id quoteId = quote.getId();
Id productRatePlanId = 'a0cEc000006HELbIAO';
Id productChargeId = 'a0aEc00000LH956IAD';
//===== add product to Quote via zChargeGroup =====
zqu.zChargeGroup newChargeGroup = zqu.zQuoteUtil.getChargeGroup(quoteId, productRatePlanId);
if (newChargeGroup == null) {
throw new zqu.CustomValidationException('Fail to add product ' + productRatePlanId + ' to Quote, Product not found or expired.');
}
newChargeGroup.productName = 'Product added by zChargeGroup';
zqu.zQuoteUtil.addChargeGroup(newChargeGroup);
//===== update product of Quote via zChargeGroup =====
List<zqu.zChargeGroup> currentChargeGroups = zqu.zQuoteUtil.getChargeGroups(quoteId);
for (zqu.zChargeGroup chargeGroup : currentChargeGroups) {
if (chargeGroup.productRatePlanId == productRatePlanId) {
chargeGroup.contractEffectiveDate = Date.newInstance(2025, 2, 1);
for (zqu.zCharge charge : chargeGroup.zCharges) {
if (charge.PRODUCT_RATE_PLAN_CHARGE_SFDC_ID == productChargeId) {
charge.EFFECTIVE_PRICE = '19.99';
charge.QUANTITY = '10';
}
}
}
}
zqu.zQuoteUtil.updateChargeGroups(currentChargeGroups);
//===== add product to Quote via QPlan =====
List<zqu.QPlan> newQPlans = zqu.QPlanBuilder.makeFromCatalog(quoteId, new List<ID>{ productRatePlanId });
if (newQPlans.size() < 1) {
throw new zqu.CustomValidationException('Fail to add product ' + productRatePlanId + ' to Quote, Product not found or expired.');
}
for (zqu.QPlan qPlan : newQPlans) {
qPlan.put('zqu__QuoteProductName__c', 'Product added by QPlan');
}
zqu.QPlanWriter.save(newQPlans);
//===== update product of Quote via QPlan =====
List<zqu.QPlan> currentQPlans = zqu.QPlanReader.load(quoteId);
for (zqu.QPlan qPlan : currentQPlans) {
if (qPlan.get('zqu__ProductRatePlan__c') == productRatePlanId) {
qPlan.getAmendment().put('zqu__ContractEffectiveDate__c', Date.newInstance(2025, 2, 1));
for (zqu.QCharge qCharge : qPlan.getCharges()) {
if (qCharge.get('zqu__ProductRatePlanCharge__c') == productChargeId) {
qCharge.put('zqu__EffectivePrice__c', 19.99);
qCharge.put('zqu__Quantity__c', 10);
}
}
}
}
zqu.QPlanWriter.save(currentQPlans);
}
}
