public static void InsertFSSODetFromOpportunity(ServiceOrderEntry graphServiceOrder, PXCache cacheOpportunityProducts, CRSetup crSetupRow, CROpportunityProducts crOpportunityProductRow, FSxCROpportunityProducts fsxCROpportunityProductsRow, InventoryItem inventoryItemRow) { if (graphServiceOrder == null || crOpportunityProductRow == null || fsxCROpportunityProductsRow == null || inventoryItemRow == null) { return; } //Insert a new SODet line FSSODet fsSODetRow = new FSSODet(); UpdateFSSODetFromOpportunity(graphServiceOrder.ServiceOrderDetails.Cache, fsSODetRow, crOpportunityProductRow, fsxCROpportunityProductsRow, SharedFunctions.GetLineTypeFromInventoryItem(inventoryItemRow)); SharedFunctions.CopyNotesAndFiles(cacheOpportunityProducts, graphServiceOrder.ServiceOrderDetails.Cache, crOpportunityProductRow, graphServiceOrder.ServiceOrderDetails.Current, crSetupRow.CopyNotes, crSetupRow.CopyFiles); }
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); } }
protected override BAccount CreateMaster(BusinessAccountMaint graph, AccountConversionOptions config) { var param = AccountInfo.Current; var document = Documents.Current; var docContact = Contacts.Current ?? Contacts.SelectSingle(); var docAddress = Addresses.Current ?? Addresses.SelectSingle(); object cd = param.BAccountID; graph.BAccount.Cache.RaiseFieldUpdating <BAccount.acctCD>(null, ref cd); BAccount account = graph.BAccount.Insert(new BAccount { AcctCD = (string)cd, AcctName = param.AccountName, Type = BAccountType.ProspectType, ParentBAccountID = document.ParentBAccountID, CampaignSourceID = document.CampaignID, }); account.ClassID = param.AccountClass; // In case of (param.AccountClass == null) constructor fills ClassID with default value, so we have to set this directly. CRCustomerClass ocls = PXSelect < CRCustomerClass, Where < CRCustomerClass.cRCustomerClassID, Equal <Required <CRCustomerClass.cRCustomerClassID> > > > .SelectSingleBound(graph, null, account.ClassID); if (ocls?.DefaultOwner == CRDefaultOwnerAttribute.Source) { account.WorkgroupID = document.WorkgroupID; account.OwnerID = document.OwnerID; } account = graph.BAccount.Update(account); if (param.LinkContactToAccount == true) { // in case of opportunity Contact contact = PXSelect <Contact, Where <Contact.contactID, Equal <Required <CROpportunity.contactID> > > > .Select(graph, document.RefContactID); if (contact != null) { graph.Answers.CopyAttributes(account, contact); contact.BAccountID = account.BAccountID; graph.Contacts.Update(contact); } } var defContact = graph.DefContact.SelectSingle() ?? throw new InvalidOperationException("Cannot get Contact for Business Account."); // just to ensure MapContact(docContact, account, ref defContact); MapConsentable(docContact, defContact); defContact = graph.DefContact.Update(defContact); var defAddress = graph.AddressCurrent.SelectSingle() ?? throw new InvalidOperationException("Cannot get Address for Business Account."); // just to ensure MapAddress(docAddress, account, ref defAddress); defAddress = graph.AddressCurrent.Update(defAddress); CR.Location location = graph.DefLocation.Select(); location.DefAddressID = defAddress.AddressID; location.CTaxZoneID = document.TaxZoneID; // Saving tax zone before ReverseDocumentUpdate() removes it graph.DefLocation.Update(location); ReverseDocumentUpdate(graph, account); FillRelations(graph.Relations, account); FillAttributes(graph.Answers, account); TransferActivities(graph, account); // Copy Note text and Files references CRSetup setup = PXSetupOptional <CRSetup> .Select(graph); PXNoteAttribute.CopyNoteAndFiles(graph.Caches <TMain>(), GetMain(document), graph.CurrentBAccount.Cache, account, setup); return(account); }
protected override Contact CreateMaster(ContactMaint graph, ContactConversionOptions _) { var entity = Documents.Current; var param = ContactInfo.Current; var docContact = Contacts.Current ?? Contacts.SelectSingle(); var docContactMethod = ContactMethod.Current ?? ContactMethod.SelectSingle(); var docAddress = Addresses.Current ?? Addresses.SelectSingle(); Contact contact = new Contact { ContactType = ContactTypesAttribute.Person, ParentBAccountID = entity.ParentBAccountID }; MapContact(docContact, contact); MapConsentable(docContact, contact); contact.FirstName = param.FirstName; contact.LastName = param.LastName; contact.Salutation = param.Salutation; contact.Phone1 = param.Phone1; contact.Phone1Type = param.Phone1Type; contact.EMail = param.Email; contact.ContactType = ContactTypesAttribute.Person; contact.ParentBAccountID = entity.ParentBAccountID; contact.BAccountID = entity.BAccountID; contact.Source = entity.Source; MapContactMethod(docContactMethod, contact); var address = (Address)graph.AddressCurrent.Cache.CreateInstance(); address = graph.AddressCurrent.Insert(address); contact = graph.Contact.Insert(contact); contact.ClassID = param.ContactClass; CRContactClass cls = PXSelect < CRContactClass, Where < CRContactClass.classID, Equal <Required <CRContactClass.classID> > > > .SelectSingleBound(graph, null, contact.ClassID); if (cls?.DefaultOwner == CRDefaultOwnerAttribute.Source) { contact.WorkgroupID = entity.WorkgroupID; contact.OwnerID = entity.OwnerID; } MapAddress(docAddress, address); address = (Address)graph.AddressCurrent.Cache.Update(address); contact.DefAddressID = address.AddressID; contact = graph.Contact.Update(contact); ReverseDocumentUpdate(graph, contact); FillRelations(graph.Relations, contact); FillAttributes(graph.Answers, contact); TransferActivities(graph, contact); // Copy Note text and Files references CRSetup setup = PXSetupOptional <CRSetup> .Select(graph); PXNoteAttribute.CopyNoteAndFiles(graph.Caches <TMain>(), Documents.Cache.GetMain(entity), graph.Contact.Cache, contact, setup); return(graph.Contact.Update(contact)); }