protected static void UpdatePrices(ContractMaint graph, ContractDetail item) { Contract contract = PXSelect <Contract, Where <Contract.contractID, Equal <Required <Contract.contractID> > > > .Select(graph, item.ContractID); using (PXTransactionScope ts = new PXTransactionScope()) { if (CTPRType.IsTemplate(contract.BaseType) != true) { ContractMaintExt contractMaintExt = CreateInstance <ContractMaintExt>(); contractMaintExt.Contracts.Current = contract; if (contract.IsActive == true && contract.IsPendingUpdate != true && contract.Status != Contract.status.PendingActivation) { CTBillEngine engine = CreateInstance <CTBillEngine>(); engine.Upgrade(contract.ContractID); engine.Clear(); contractMaintExt.Contracts.Current = PXSelect <Contract, Where <Contract.contractID, Equal <Required <Contract.contractID> > > > .Select(engine, item.ContractID); item = PXSelect <ContractDetail, Where <ContractDetail.contractID, Equal <Required <ContractDetail.contractID> >, And <ContractDetail.lineNbr, Equal <Required <ContractDetail.lineNbr> > > > > .Select(engine, item.ContractID, item.LineNbr); } contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.basePriceOption>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.basePrice>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.renewalPriceOption>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.renewalPrice>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.fixedRecurringPriceOption>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.fixedRecurringPrice>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.usagePriceOption>(item); contractMaintExt.ContractDetails.Cache.SetDefaultExt <ContractDetail.usagePrice>(item); contractMaintExt.ContractDetails.Update(item); contractMaintExt.Actions.PressSave(); } else { TemplateMaint templateMaint = CreateInstance <TemplateMaint>(); templateMaint.Templates.Current = PXSelect <ContractTemplate, Where <ContractTemplate.contractID, Equal <Required <ContractTemplate.contractID> > > > .Select(graph, item.ContractID); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.basePriceOption>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.basePrice>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.renewalPriceOption>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.renewalPrice>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.fixedRecurringPriceOption>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.fixedRecurringPrice>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.usagePriceOption>(item); templateMaint.ContractDetails.Cache.SetDefaultExt <ContractDetail.usagePrice>(item); templateMaint.ContractDetails.Update(item); templateMaint.Actions.PressSave(); } ts.Complete(); } }
protected virtual void BillingFilter_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { BillingFilter filter = (BillingFilter)e.Row; Items.SetProcessDelegate( delegate(Contract item) { CTBillEngine engine = PXGraph.CreateInstance <CTBillEngine>(); ContractBillingSchedule schedule = PXSelect <ContractBillingSchedule, Where <ContractBillingSchedule.contractID, Equal <Required <Contract.contractID> > > > .Select(engine, item.ContractID); if (schedule.Type == BillingType.OnDemand) { engine.Bill(item.ContractID, filter.InvoiceDate); } else { engine.Bill(item.ContractID); } }); }
public void Persist(PersistDelegate baseMethod) { ARRegister invoice = Base.ARDocument.Current; List <Contract> setupContracts = new List <Contract>(); if (SetupContract) { // Create, set up, and activate contracts ContractMaint contractMaint = PXGraph.CreateInstance <ContractMaint>(); CTBillEngine engine = PXGraph.CreateInstance <CTBillEngine>(); int seq = 1; // Reuse ARTran_TranType_RefNbr from ARReleaseProcess foreach (ARTran tran in PXSelect <ARTran, Where <ARTran.tranType, Equal <Required <ARInvoice.docType> >, And <ARTran.refNbr, Equal <Required <ARInvoice.refNbr> >, And <ARTranExt.usrSIMCardID, IsNotNull, And <ARTranExt.usrContractID, IsNull> > > >, OrderBy <Asc <ARTran.tranType, Asc <ARTran.refNbr, Asc <ARTran.lineNbr> > > > > .Select(Base, invoice.DocType, invoice.RefNbr)) { // Create, set up, and activate contract for a particular SOInvoice line ARTranExt tranExt = PXCache <ARTran> .GetExtension <ARTranExt>(tran); Contract contract = CreateActivateContract(contractMaint, invoice.DocDate, invoice.CustomerID, invoice.CustomerLocationID, tranExt.UsrSIMCardID, tranExt.UsrPhoneNumber, engine); setupContracts.Add(contract); // Associate the generated contract with the SOInvoice line tranExt.UsrContractID = contract.ContractID; Base.ARTran_TranType_RefNbr.Cache.SetValueExt(tran, "UsrContractID", contract.ContractID); Base.ARTran_TranType_RefNbr.Cache.SetStatus(tran, PXEntryStatus.Modified); Base.ARTran_TranType_RefNbr.Cache.Update(tran); Base.ARTran_TranType_RefNbr.Cache.IsDirty = true; seq++; } } baseMethod(); }
private Contract CreateActivateContract(ContractMaint contractMaint, DateTime?invoiceDate, int?customerID, int?customerLocationID, string simCardID, string phoneNumber, CTBillEngine engine) { contractMaint.Clear(); // Initialize new contract Contract contract = (Contract)contractMaint.Contracts.Cache.CreateInstance(); contract = contractMaint.Contracts.Insert(contract); // Look up contract template ID Contract template = PXSelect <Contract, Where <Contract.isTemplate, Equal <boolTrue>, And <Contract.contractCD, Equal <Required <Contract.contractCD> > > > > .Select(Base, "SIMCARD"); if (template == null) { throw new PXException("The SIMCARD contract template was not found."); } // Set required fields contract.TemplateID = template.ContractID; contract.CustomerID = customerID; contract = contractMaint.Contracts.Update(contract); contract.LocationID = customerLocationID; contract.StartDate = invoiceDate; contract.ActivationDate = invoiceDate; contract = contractMaint.Contracts.Update(contract); // Store simCardID and phoneNumber into the contract attributes foreach (CSAnswers attribute in contractMaint.Answers.Select()) { switch (attribute.AttributeID) { case "SIMCARDID": attribute.Value = simCardID; contractMaint.Answers.Update(attribute); break; case "PHONENUM": attribute.Value = phoneNumber; contractMaint.Answers.Update(attribute); break; } } // Save the generated contract contractMaint.Save.Press(); // Set up and activate the contract engine.SetupAndActivate(contract.ContractID, contract.ActivationDate); return(contract); }