public virtual void CreateServiceOrderDocument(OpportunityMaint graphOpportunityMaint, CROpportunity crOpportunityRow, FSCreateServiceOrderFilter fsCreateServiceOrderFilterRow) { if (graphOpportunityMaint == null || crOpportunityRow == null || fsCreateServiceOrderFilterRow == null) { return; } ServiceOrderEntry graphServiceOrderEntry = PXGraph.CreateInstance <ServiceOrderEntry>(); FSServiceOrder newServiceOrderRow = CRExtensionHelper.InitNewServiceOrder(fsCreateServiceOrderFilterRow.SrvOrdType, ID.SourceType_ServiceOrder.OPPORTUNITY); CRSetup crSetupRow = GetCRSetup(); graphServiceOrderEntry.ServiceOrderRecords.Current = graphServiceOrderEntry.ServiceOrderRecords.Insert(newServiceOrderRow); CRExtensionHelper.UpdateServiceOrderHeader(graphServiceOrderEntry, Base.Opportunity.Cache, crOpportunityRow, fsCreateServiceOrderFilterRow, graphServiceOrderEntry.ServiceOrderRecords.Current, Base.Opportunity_Contact.Current, Base.Opportunity_Address.Current, true); SharedFunctions.CopyNotesAndFiles(Base.Opportunity.Cache, graphServiceOrderEntry.ServiceOrderRecords.Cache, crOpportunityRow, graphServiceOrderEntry.ServiceOrderRecords.Current, crSetupRow.CopyNotes, crSetupRow.CopyFiles); foreach (CROpportunityProducts crOpportunityProductsRow in graphOpportunityMaint.Products.Select()) { if (crOpportunityProductsRow.InventoryID != null) { InventoryItem inventoryItemRow = SharedFunctions.GetInventoryItemRow(graphServiceOrderEntry, crOpportunityProductsRow.InventoryID); if (inventoryItemRow.StkItem == true && graphServiceOrderEntry.ServiceOrderTypeSelected.Current.PostTo == ID.SrvOrdType_PostTo.ACCOUNTS_RECEIVABLE_MODULE) { throw new PXException(TX.Error.STOCKITEM_NOT_HANDLED_BY_SRVORDTYPE, inventoryItemRow.InventoryCD); } FSxCROpportunityProducts fsxCROpportunityProductsRow = graphOpportunityMaint.Products.Cache.GetExtension <FSxCROpportunityProducts>(crOpportunityProductsRow); CRExtensionHelper.InsertFSSODetFromOpportunity(graphServiceOrderEntry, graphOpportunityMaint.Products.Cache, crSetupRow, crOpportunityProductsRow, fsxCROpportunityProductsRow, inventoryItemRow); } } graphServiceOrderEntry.ServiceOrderRecords.Current.SourceRefNbr = crOpportunityRow.OpportunityID; if (!Base.IsContractBasedAPI) { throw new PXRedirectRequiredException(graphServiceOrderEntry, null); } }
public static void UpdateServiceOrderHeader(ServiceOrderEntry graphServiceOrderEntry, PXCache cache, CROpportunity crOpportunityRow, FSCreateServiceOrderFilter fsCreateServiceOrderOnOpportunityFilterRow, FSServiceOrder fsServiceOrderRow, CRContact crContactRow, CRAddress crAddressRow, bool updatingExistingSO) { bool somethingChanged = false; FSSrvOrdType fsSrvOrdTypeRow = GetServiceOrderType(graphServiceOrderEntry, fsServiceOrderRow.SrvOrdType); if (fsSrvOrdTypeRow.Behavior != ID.Behavior_SrvOrderType.INTERNAL_APPOINTMENT) { if (fsServiceOrderRow.CustomerID != crOpportunityRow.BAccountID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.customerID>(fsServiceOrderRow, crOpportunityRow.BAccountID); somethingChanged = true; } if (fsServiceOrderRow.LocationID != crOpportunityRow.LocationID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.locationID>(fsServiceOrderRow, crOpportunityRow.LocationID); somethingChanged = true; } } if (fsServiceOrderRow.CuryID != crOpportunityRow.CuryID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.curyID>(fsServiceOrderRow, crOpportunityRow.CuryID); somethingChanged = true; } if (fsServiceOrderRow.BranchID != crOpportunityRow.BranchID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.branchID>(fsServiceOrderRow, crOpportunityRow.BranchID); somethingChanged = true; } if (fsServiceOrderRow.BranchLocationID != fsCreateServiceOrderOnOpportunityFilterRow.BranchLocationID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.branchLocationID>(fsServiceOrderRow, fsCreateServiceOrderOnOpportunityFilterRow.BranchLocationID); somethingChanged = true; } if (fsServiceOrderRow.ContactID != crOpportunityRow.ContactID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.contactID>(fsServiceOrderRow, crOpportunityRow.ContactID); somethingChanged = true; } if (fsServiceOrderRow.DocDesc != crOpportunityRow.Subject) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.docDesc>(fsServiceOrderRow, crOpportunityRow.Subject); somethingChanged = true; } if (fsServiceOrderRow.ProjectID != crOpportunityRow.ProjectID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.projectID>(fsServiceOrderRow, crOpportunityRow.ProjectID); somethingChanged = true; } if (crOpportunityRow.OwnerID != null) { if (crOpportunityRow.OwnerID != (Guid?)cache.GetValueOriginal <CROpportunity.ownerID>(crOpportunityRow)) { int?salesPersonID = GetSalesPersonID(graphServiceOrderEntry, crOpportunityRow.OwnerID); if (salesPersonID != null) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.salesPersonID>(fsServiceOrderRow, salesPersonID); somethingChanged = true; } } } if (fsServiceOrderRow.OrderDate != crOpportunityRow.CloseDate) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.orderDate>(fsServiceOrderRow, crOpportunityRow.CloseDate); somethingChanged = true; } FSAddress fsAddressRow = graphServiceOrderEntry.ServiceOrder_Address.Select(); FSContact fsContactRow = graphServiceOrderEntry.ServiceOrder_Contact.Select(); ApplyChangesfromContactInfo(graphServiceOrderEntry, crContactRow, fsContactRow, ref somethingChanged); ApplyChangesfromAddressInfo(graphServiceOrderEntry, crAddressRow, fsAddressRow, ref somethingChanged); if (fsServiceOrderRow.TaxZoneID != crOpportunityRow.TaxZoneID) { graphServiceOrderEntry.ServiceOrderRecords.SetValueExt <FSServiceOrder.taxZoneID>(fsServiceOrderRow, crOpportunityRow.TaxZoneID); somethingChanged = true; } if (somethingChanged && updatingExistingSO) { graphServiceOrderEntry.ServiceOrderRecords.Update(fsServiceOrderRow); } }