Пример #1
0
        // Helper Methods
        #region CreateMagentoSale
        private MyMagento.Models.Order CreateMagentoSale()
        {
            MyMagento.Models.Order order = new MyMagento.Models.Order();
            order.increment_id = "123";
            order.total_paid   = 9.99;
            order.created_at   = new DateTime(2015, 08, 24, 14, 59, 00);

            var billingAddress = new MyMagento.Models.OrderAddress();

            billingAddress.address_type = "billing";
            billingAddress.firstname    = "billing firstname";
            billingAddress.lastname     = "billing lastname";
            billingAddress.street       = "billing street 1\nbilling street 2";
            billingAddress.city         = "billing city";
            billingAddress.region       = "billing region";
            billingAddress.postcode     = "billing postcode";
            billingAddress.country_id   = "billing country id";
            billingAddress.email        = "*****@*****.**";

            var shippingAddress = new MyMagento.Models.OrderAddress();

            shippingAddress.address_type = "shipping";
            shippingAddress.firstname    = "shipping firstname";
            shippingAddress.lastname     = "shipping lastname";
            shippingAddress.street       = "shipping street 1\nshipping street 2";
            shippingAddress.city         = "shipping city";
            shippingAddress.region       = "shipping region";
            shippingAddress.postcode     = "shipping postcode";
            shippingAddress.country_id   = "shipping country id";
            shippingAddress.telephone    = "0049 171 1234567";

            order.addresses = new List <MyMagento.Models.OrderAddress>();
            order.addresses.Add(billingAddress);
            order.addresses.Add(shippingAddress);

            var orderItem = new MyMagento.Models.OrderItem();

            orderItem.qty_ordered = 2;
            orderItem.tax_amount  = 19.0;
            orderItem.price       = 19.95;
            orderItem.name        = "item name";
            orderItem.item_id     = 1234567;
            orderItem.sku         = "sku";
            orderItem.tax_percent = 19.0;

            order.order_items = new List <MyMagento.Models.OrderItem>();
            order.order_items.Add(orderItem);

            MyMagento.Models.OrderComment comment = new MyMagento.Models.OrderComment();
            comment.comment      = "Paid via paypal";
            comment.created_at   = new DateTime(2015, 08, 25, 14, 59, 00);
            order.order_comments = new List <MyMagento.Models.OrderComment>();
            order.order_comments.Add(comment);

            return(order);
        }
Пример #2
0
        public void SyncToSale(MyMagento.Models.Order order)
        {
            try
            {
                if (order.status != "canceled")
                {
                    Sale sale = Sale.LoadByMagentoIncrementId(order.increment_id.ToString());

                    MyMagento.Models.OrderAddress billingAddress  = order.addresses.Find(x => x.address_type == "billing");
                    MyMagento.Models.OrderAddress shippingAddress = order.addresses.Find(x => x.address_type == "shipping");

                    if (sale == null)
                    {
                        sale = Sale.Create();

                        System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
                        provider.NumberDecimalSeparator = ".";

                        sale.Source       = SaleSources.Magento;
                        sale.SourceId     = order.increment_id.ToString();
                        sale.EbayName     = String.Empty;
                        sale.NameOfBuyer  = billingAddress.firstname + " " + billingAddress.lastname;
                        sale.PhoneNumber  = shippingAddress.telephone ?? String.Empty;
                        sale.EMailAddress = billingAddress.email;
                        Models.MyDataContext.Default.Sales.Add(sale);

                        var itemsWithoutCategories = order.order_items.Where(runner => runner.parent_item_id == null).ToList();                         //Filters out doubles that come in with customizable products such as size or color
                        foreach (MyMagento.Models.OrderItem currentItem in itemsWithoutCategories)
                        {
                            Decimal amount         = Convert.ToDecimal(currentItem.qty_ordered, provider);
                            Decimal totalTax       = Convert.ToDecimal(currentItem.tax_amount, provider);
                            Decimal singleTax      = totalTax / amount;
                            Decimal singlePriceNet = Convert.ToDecimal(currentItem.price, provider);

                            SaleItem saleItem = new SaleItem();
                            saleItem.Sale = sale;
                            saleItem.EbaySalesRecordNumber = -1;
                            saleItem.ExternalArticleName   = currentItem.name;
                            saleItem.ExternalArticleNumber = currentItem.item_id.ToString();
                            saleItem.InternalArticleNumber = currentItem.sku;
                            saleItem.Article             = Article.LoadByArticleNumber(currentItem.sku);
                            saleItem.Amount              = amount;
                            saleItem.TaxRate             = Convert.ToDecimal(currentItem.tax_percent, provider);
                            saleItem.SinglePriceGross    = singleTax + singlePriceNet;
                            saleItem.EbayOrderLineItemID = String.Empty;
                            Models.MyDataContext.Default.SaleItems.Add(saleItem);
                            Models.MyDataContext.Default.SaveChanges();
                            saleItem.DecreaseStock();
                        }
                    }

                    if (sale.CanBeSynced)
                    {
                        System.Globalization.NumberFormatInfo provider = new System.Globalization.NumberFormatInfo();
                        provider.NumberDecimalSeparator = ".";

                        sale.InvoiceName = billingAddress.firstname + " " + billingAddress.lastname;
                        String[] billingStreetParts = billingAddress.street.Split('\n');
                        sale.InvoiceStreet1  = billingStreetParts.Length >= 1 ? billingStreetParts[0] : String.Empty;
                        sale.InvoiceStreet2  = billingStreetParts.Length >= 2 ? billingStreetParts[1] : String.Empty;
                        sale.InvoiceCity     = billingAddress.city ?? String.Empty;
                        sale.InvoiceRegion   = billingAddress.region ?? String.Empty;
                        sale.InvoicePostcode = billingAddress.postcode ?? String.Empty;
                        sale.InvoiceCountry  = billingAddress.country_id ?? String.Empty;

                        sale.ShippingName = shippingAddress.firstname + " " + shippingAddress.lastname;
                        String[] shippingStreetParts = shippingAddress.street.Split('\n');
                        sale.ShippingStreet1  = shippingStreetParts.Length >= 1 ? shippingStreetParts[0] : String.Empty;
                        sale.ShippingStreet2  = shippingStreetParts.Length >= 2 ? shippingStreetParts[1] : String.Empty;
                        sale.ShippingCity     = shippingAddress.city ?? String.Empty;
                        sale.ShippingRegion   = shippingAddress.region ?? String.Empty;
                        sale.ShippingPostcode = shippingAddress.postcode ?? String.Empty;
                        sale.ShippingCountry  = shippingAddress.country_id ?? String.Empty;

                        // FIXME: There could be a better method to figure out the payment date
                        if (order.total_paid != null && order.order_comments != null && order.order_comments.Count > 0)
                        {
                            var lastComment = order.order_comments[order.order_comments.Count - 1];
                            sale.DateOfPayment = TimeZoneInfo.ConvertTimeToUtc(lastComment.created_at);
                        }
                        else
                        {
                            sale.DateOfPayment = null;
                        }

                        sale.DateOfSale    = TimeZoneInfo.ConvertTimeToUtc(order.created_at);
                        sale.ShippingPrice = Convert.ToDecimal(order.shipping_amount, provider);
                    }

                    MyDataContext.Default.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw new SalesImportException(String.Format("Error at Magento-Order-Number: {0} ", order.increment_id),
                                               ex);
            }
        }