protected void AddUsage(PXCache sender, int?contractID, int?inventoryID, decimal?used, string UOM) { if (contractID != null && inventoryID != null) { Contract contract = PXSelect <Contract, Where <Contract.contractID, Equal <Required <Contract.contractID> > > > .Select(this, contractID); //update all revisions starting from last active foreach (ContractDetailExt targetItem in PXSelectJoin <ContractDetailExt, InnerJoin <ContractItem, On <ContractItem.contractItemID, Equal <ContractDetailExt.contractItemID> >, InnerJoin <InventoryItem, On <InventoryItem.inventoryID, Equal <ContractItem.recurringItemID> > > >, Where <ContractDetailExt.contractID, Equal <Required <ContractDetailExt.contractID> >, And <ContractDetailExt.revID, GreaterEqual <Required <ContractDetailExt.revID> >, And <ContractItem.recurringItemID, Equal <Required <ContractItem.recurringItemID> > > > > > .Select(this, contractID, contract.LastActiveRevID, inventoryID)) { decimal inTargetUnit = used ?? 0; if (!string.IsNullOrEmpty(UOM)) { inTargetUnit = INUnitAttribute.ConvertToBase(sender, inventoryID, UOM, used ?? 0, INPrecision.QUANTITY); } ContractDetailAcum item = new ContractDetailAcum(); item.ContractDetailID = targetItem.ContractDetailID; item = ContractDetails.Insert(item); item.Used += inTargetUnit; item.UsedTotal += inTargetUnit; } } }
protected override bool PrepareInsert(PXCache sender, object row, PXAccumulatorCollection columns) { if (!base.PrepareInsert(sender, row, columns)) { return(false); } columns.UpdateOnly = true; ContractDetailAcum item = (ContractDetailAcum)row; columns.Update <ContractDetailAcum.used>(item.Used, PXDataFieldAssign.AssignBehavior.Summarize); columns.Update <ContractDetailAcum.usedTotal>(item.UsedTotal, PXDataFieldAssign.AssignBehavior.Summarize); //columns.Update<ContractDetailAcum.contractID>(item.ContractID, PXDataFieldAssign.AssignBehavior.Initialize); //columns.Update<ContractDetailAcum.inventoryID>(item.InventoryID, PXDataFieldAssign.AssignBehavior.Initialize); return(true); }