/// <summary> /// Find or Create and after that Populate Vendor data /// </summary> /// <param name="vendor"></param> /// <returns></returns> private EntityReference <Vendor> UpsertVendor(Models.Data.Vendor vendor) { var sageVendor = FindSageVendor(vendor) ?? CompanyContext.Factories.VendorFactory.Create(); sageVendor.PopulateFromModel(CompanyContext, vendor); sageVendor.Save(); return(sageVendor.Key); }
public static void PopulateFromModel(this Vendor sageVendor, Company companyContext, Models.Data.Vendor vendor) { if (vendor == null) { return; } sageVendor.ID = vendor.ExternalId; sageVendor.TaxIDNumber = vendor.TaxIDNumber; sageVendor.Form1099Type = vendor.Form1099Type.ToEnum <VendorForm1099Type>(); sageVendor.UsingPaymentDefaults = vendor.UsingPaymentDefaults; sageVendor.VendorSince = vendor.VendorSince; sageVendor.ExpenseAccountReference = sageVendor.ExpenseAccountReference.PopulateFromModel(vendor.ExpenseAccount, companyContext); sageVendor.ShipmentsContact.PopulateFromModel(vendor.ShipmentsContact); sageVendor.PurchaseOrdersContact.PopulateFromModel(vendor.PurchaseOrdersContact); sageVendor.PaymentsContact.PopulateFromModel(vendor.PaymentsContact); sageVendor.Name = vendor.Name; sageVendor.IsInactive = vendor.IsInactive; sageVendor.AccountNumber = vendor.AccountNumber; sageVendor.ReplaceInventoryItemIDWithPartNumber = vendor.ReplaceInventoryItemIDWithPartNumber; sageVendor.ReplaceInventoryItemIDWithUPC = vendor.ReplaceInventoryItemIDWithUPC; sageVendor.IncludePurchaseRepresentativeOnEmailedForms = vendor.IncludePurchaseRepresentativeOnEmailedForms; sageVendor.ShipVia = vendor.ShipVia; sageVendor.WebSiteURL = vendor.WebSiteURL; sageVendor.UseEmailToDeliverForms = vendor.UseEmailToDeliverForms; sageVendor.Email = vendor.Email; sageVendor.Category = vendor.Category; sageVendor.PhoneNumbers.PopulateFromModel(vendor.PhoneNumbers); sageVendor.CashAccountReference = sageVendor.CashAccountReference.PopulateFromModel(vendor.CashAccount, companyContext); }
private Vendor FindSageVendor(Models.Data.Vendor vendor) { var vendorKey = vendor.GlobalKey(actionSource); var sageVendors = VendorsList(); // find mapping for vendor globalKey var sageVendorId = localDbApi.GetVendorIdByKey(vendorKey); if (sageVendorId != null) { return(sageVendors.SingleOrDefault(sageVendorId)); } // find by GlobalKey in Sage50 var sageCustomer = sageVendors.SingleOrDefault(vendorKey); if (sageCustomer != null) { localDbApi.StoreVendorId(vendorKey, sageCustomer.ID); return(sageCustomer); } // if no mapping found, find customer by name or email and store mapping to localDb if (string.IsNullOrEmpty(vendor.Name) && string.IsNullOrEmpty(vendor.Email)) { throw new AbortException("Can not find Vendor because name and email is null"); } FilterExpression expression; string message = ""; if (!string.IsNullOrEmpty(vendor.Name) && !string.IsNullOrEmpty(vendor.Email)) { expression = FilterExpression.AndAlso( FilterExpression.Equal(FilterExpression.Property("Vendor.Name"), FilterExpression.Constant(vendor.Name)), FilterExpression.Equal(FilterExpression.Property("Vendor.Email"), FilterExpression.Constant(vendor.Email)) ); LoadVendorsList(expression, sageVendors); message = $"name: '{vendor.Name}' and email: '{vendor.Email}'"; } if (sageVendors.Count == 0 && !string.IsNullOrEmpty(vendor.Email)) { expression = FilterExpression.Equal(FilterExpression.Property("Vendor.Email"), FilterExpression.Constant(vendor.Email)); LoadVendorsList(expression, sageVendors); message = $"email: '{vendor.Email}'"; } if (sageVendors.Count == 0 && !string.IsNullOrEmpty(vendor.Name)) { expression = FilterExpression.Equal(FilterExpression.Property("Vendor.Name"), FilterExpression.Constant(vendor.Name)); LoadVendorsList(expression, sageVendors); message = $"name: '{vendor.Name}'"; } if (sageVendors.Count == 0) { return(null); } if (sageVendors.Count > 1) { throw new AbortException($"Found more that one vendor with {message}"); } sageCustomer = sageVendors.First(); localDbApi.StoreVendorId(vendorKey, sageCustomer.ID); return(sageCustomer); }