コード例 #1
0
ファイル: Sage50Api.cs プロジェクト: valentin78/Apination
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
ファイル: Sage50Api.cs プロジェクト: valentin78/Apination
        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);
        }