예제 #1
0
 /// <summary>
 /// Сформировать номер заказа для отображения
 /// </summary>
 /// <param name="orderID"></param>
 /// <returns></returns>
 public static string GetOrderDisplayNumber( Order order )
 {
     //return string.Format( "{0}/{1}", order.StoreNumber, order.OrderID );
     return order.OrderID.ToString();
 }
 protected string GetOrderDisplayNumber( Order order )
 {
     return OrderTracking.GetOrderDisplayNumber( order );
 }
예제 #3
0
        private static void SendorderFranch(StoreDataContext dc, ref Order order, string employeeId)
        {
            if (order == null)
                throw new ArgumentNullException("order");
            var acctgOrder = new OrderInfo
            {
                ClientId = order.ClientID,
                OrderNo = order.OrderID.ToString(),
                CustOrderNum = order.CustOrderNum,
                OrderDate = order.OrderDate,
                DeliveryAddress = order.ShippingAddress,
                PaymentType = order.PaymentMethod.ToTextOrName(),
                EmployeeId = employeeId,
                OrderNotes = order.OrderNotes,
                OrderLines = order.OrderLines
                .Select<OrderLine, OrderLineInfo>(
                    l => new OrderLineInfo
                    {
                        WebOrderLineId = l.OrderLineID,
                        Article = new ArticleInfo
                        {
                            PartNumber = l.PartNumber,
                            Manufacturer = l.Manufacturer,
                            SupplierId = l.SupplierID,
                            ReferenceID = l.ReferenceID,
                            DeliveryDaysMin = l.DeliveryDaysMin,
                            DeliveryDaysMax = l.DeliveryDaysMax,
                            Description = l.PartDescription,
                            DescriptionOrig = l.PartName,
                            InternalPartNumber = l.Part.InternalPartNumber,//l.SparePart.InternalPartNumber,
                            SupplierPriceWithMarkup = l.Part.SupplierPriceWithMarkup,//l.SparePart.SupplierPriceWithMarkup,
                            SupplierMarkup = l.Part.PriceConstantTerm.GetValueOrDefault(),//l.SparePart.PriceConstantTerm.GetValueOrDefault(),
                            WeightPhysical = l.WeightPhysical.GetValueOrDefault(),
                            WeightVolume = l.WeightVolume.GetValueOrDefault(),
                            DiscountGroup = l.Part.RgCode//l.SparePart.RgCode
                        },
                        FinalSalePrice = l.UnitPrice,
                        Quantity = l.Qty,
                        StrictlyThisNumber = l.StrictlyThisNumber ? 1 : 0,
                        VinCheckupData = l.VinCheckupData,
                        OrderLineNotes = l.OrderLineNotes
                    }).ToArray()
            };

            //noxml logic!!!
            if (LightBO.IsLight())
            {
                //для лайтовых франчей формируем xml только в случае если у пользователя выставлен признак "автозаказ"
                //в противном случае xml не формируем и выставляем для заказа признак о том, что у него нет xml
                if (LightBO.GetIsAutoOrder(order.UserID))
                {
                    OrderService.SendOrder(dc, ref acctgOrder);

                    foreach (var wl in order.OrderLines)
                    {
                        var al = acctgOrder.OrderLines.Single(l => l.WebOrderLineId == wl.OrderLineID);
                        wl.AcctgOrderLineID = al.AcctgOrderLineId;
                    }
                }
                else
                {
                    LightBO.SetOrderNoXmlSign(order.OrderID);
                }
            }
            else
            {
                //для не лайтовых франчей логика остается старой
                OrderService.SendOrder(dc, ref acctgOrder);

                foreach (var wl in order.OrderLines)
                {
                    var al = acctgOrder.OrderLines.Single(l => l.WebOrderLineId == wl.OrderLineID);
                    wl.AcctgOrderLineID = al.AcctgOrderLineId;
                }

                if (order.OrderLines.FirstOrDefault() != null)
                    throw new BLException("Ошибка отправки заказа. Не принято одна или более позиций заказа");
            }
        }
예제 #4
0
        private static void SendOrder(StoreDataContext dc, ref Order order, string employeeId)
        {
            if (order == null) throw new ArgumentNullException("order");

            var perm1C = CommonDac.GetPermutations(); //Заполняем словарь перестановок SupplierID

            var acctgOrder = new OrderInfo
            {
                ClientId = order.ClientID,
                OrderNo = order.OrderID.ToString(),
                CustOrderNum = order.CustOrderNum,
                OrderDate = order.OrderDate,
                DeliveryAddress = order.ShippingAddress,
                PaymentType = order.PaymentMethod.ToTextOrName(),
                EmployeeId = employeeId,
                OrderNotes = order.OrderNotes,
                OrderLines = order.OrderLines.Select<OrderLine, OrderLineInfo>(
                    l => new OrderLineInfo
                    {
                        WebOrderLineId = l.OrderLineID,
                        Article = new ArticleInfo
                        {
                            PartNumber = ProcessingPACK(l.PartNumber, l.SupplierID), //обрабатываем PACK
                            Manufacturer = l.Manufacturer,
                            /* Реализована возможность продавать одну и ту же деталь (pn, brand, supplierID) по разным ценам (например если при разной "партионности" разная цена, т.е. 1 шт. - 10р. 10 шт. - 9р.):
                             * в этом случае данная деталь заливается с разными SupplierID (реальный и "виртуальный"). Т.к. УС ничего не знает о данных "виртуальных" SupplierID, то при отправке в УС
                             * должна производиться подмена "виртуальных" SupplierID реальными. */
                            SupplierId = perm1C.ContainsKey(l.SupplierID) ? (int)perm1C[l.SupplierID] : l.SupplierID,
                            ReferenceID = l.ReferenceID,
                            DeliveryDaysMin = l.DeliveryDaysMin,
                            DeliveryDaysMax = l.DeliveryDaysMax,
                            Description = l.PartDescription,
                            DescriptionOrig = l.PartName,
                            InternalPartNumber = l.Part.InternalPartNumber,
                            SupplierPriceWithMarkup = l.Part.SupplierPriceWithMarkup,
                            SupplierMarkup = l.Part.PriceConstantTerm.GetValueOrDefault(),
                            WeightPhysical = l.WeightPhysical.GetValueOrDefault(),
                            WeightVolume = l.WeightVolume.GetValueOrDefault(),
                            DiscountGroup = l.Part.RgCode

                        },
                        FinalSalePrice = l.UnitPrice,
                        Quantity = l.Qty,
                        StrictlyThisNumber = l.StrictlyThisNumber ? 1 : 0,
                        VinCheckupData = l.VinCheckupData,
                        OrderLineNotes = l.OrderLineNotes
                    }).ToArray()
            };

            OrderService.SendOrder(dc, ref acctgOrder);

            foreach (var wl in order.OrderLines)
            {
                var al = acctgOrder.OrderLines.Single(l => l.WebOrderLineId == wl.OrderLineID);
                wl.AcctgOrderLineID = al.AcctgOrderLineId;
            }

            if (order.OrderLines.FirstOrDefault() != null)
                throw new BLException("Ошибка отправки заказа. Не принято одна или более позиций заказа");
        }
예제 #5
0
        public static OrderLine LoadOrderLineData(string clientId, int orderLineId, bool TrackEnable)
        {
            using (var dc = new DCFactory<StoreDataContext>())
            {

                DataLoadOptions options = new DataLoadOptions();
                options.LoadWith<OrderLine>(l => l.Order);
                options.LoadWith<OrderLine>(l => l.OrderLineStatusChanges);
                options.AssociateWith<OrderLine>(l => l.OrderLineStatusChanges.OrderBy(sc => sc.StatusChangeTime));
                dc.DataContext.LoadOptions = options;

                dc.DataContext.DeferredLoadingEnabled = false;
                dc.DataContext.ObjectTrackingEnabled = TrackEnable;

                var OrdLn = dc.DataContext.OrderLines.Where(l =>
                    l.OrderLineID == orderLineId &&
                    l.Order.ClientID == clientId).ToArray()[0];

                if (!TrackEnable)
                {
                    OrderLine res2 = new OrderLine();
                    Order o = new Order();
                    OrderLine res = Serializer.JsonClone<OrderLine>(OrdLn, res2);
                    res.Order = Serializer.JsonClone<Order>(OrdLn.Order, o);
                    return res;
                }
                else
                    return OrdLn;
                //return res;
            }
        }
예제 #6
0
        /// <summary>
        /// Создание заказа для веб-сервиса франча
        /// </summary>
        /// <returns>ID заказа</returns>
        public static int CreateOrderForService(
            int userId,
            string clientId,
            string storeNumber,
            List<OrderLine> orderLines,
            string custOrderNum)
        {
            var order = new Order()
            {
                UserID = userId,
                ClientID = clientId,
                StoreNumber = storeNumber,
                ShippingMethod = ShippingMethod.StorePickup,
                ShippingAddress = string.Empty,
                PaymentMethod = PaymentMethod.Cash,
                OrderNotes = string.Empty,
                CustOrderNum = custOrderNum,
                OrderDate = DateTime.Now
            };
            foreach (var line in orderLines)
            {
                order.OrderLines.Add( line );
            }
            using (var dc = new DCFactory<StoreDataContext>())
            {
                dc.DataContext.Orders.InsertOnSubmit( order );
                //DCFactory начинает транзакцию и так, может не стоит этого делать?
                dc.DataContext.Transaction = dc.DataContext.Connection.BeginTransaction();

                try
                {
                    dc.DataContext.SubmitChanges();
                    SendOrder(dc.DataContext, ref order, string.Empty );

                    dc.DataContext.SubmitChanges();
                    dc.DataContext.Transaction.Commit();
                }
                catch(Exception ex)
                {
                    string s = ex.Message;
                    dc.DataContext.Transaction.Rollback();
                    throw;
                }
                finally
                {

                }
                return order.OrderID;
            }
        }
예제 #7
0
        public static IEnumerable<int> CreateOrder(
            int userId,
            string clientId,
            string storeNumber,
            string employeeId,
            IEnumerable<ShoppingCartItem> cartItems,
            PaymentMethod paymentMethod,
            string shippingAddress,
            string orderNotes,
            string custOrderNum)
        {
            if (string.IsNullOrEmpty(clientId))
                throw new ArgumentException("Client' ID cannot be empty", "clientId");
            if (cartItems == null)
                throw new ArgumentNullException("cartItems");
            if (cartItems.Count() == 0)
                throw new ArgumentException("Shopping cart cannot be empty", "cartItems");
            if (cartItems.Any(i => i.HasIssues))
                throw new ArgumentException("Shopping cart has unresolved issues", "cartItems");

            using (var dc = new DCFactory<StoreDataContext>(IsolationLevel.ReadUncommitted, false, null, false))
            {
                foreach (var itemGroup in cartItems.GroupBy(x => x.SparePart.InternalFranchName))
                {
                    var order = new Order()
                    {
                        UserID = userId,
                        ClientID = clientId,
                        StoreNumber = storeNumber,
                        ShippingMethod =
                            !string.IsNullOrEmpty(shippingAddress)
                                ? ShippingMethod.CourierDelivery
                                : ShippingMethod.StorePickup,
                        ShippingAddress = shippingAddress,
                        PaymentMethod = paymentMethod,
                        OrderNotes = orderNotes,
                        CustOrderNum = custOrderNum,
                        OrderDate = DateTime.Now
                    };

                    dc.DataContext.Connection.Open();
                    foreach (var item in itemGroup)
                    {

                        order.OrderLines.Add(
                            new OrderLine()
                            {

                                //temporary ID while order has'n been sent yet (to satisfy unique database constraint
                                InternalFranchName = item.SparePart.InternalFranchName,
                                Manufacturer = item.SparePart.Manufacturer,
                                PartNumber = item.SparePart.PartNumber,
                                SupplierID = item.SparePart.SupplierID,
                                ReferenceID = item.ReferenceID,
                                DeliveryDaysMin = item.SparePart.DeliveryDaysMin,
                                DeliveryDaysMax = item.SparePart.DeliveryDaysMax,
                                PartName = item.SparePart.PartName,
                                PartDescription = item.SparePart.PartDescription,
                                WeightPhysical = item.SparePart.WeightPhysical,
                                WeightVolume = item.SparePart.WeightVolume,
                                //если проставлена "вчерашнаяя" цена, то в заказ уходит она
                                UnitPrice = item.UnitPriceYesterday.HasValue ? item.UnitPriceYesterday.Value : item.UnitPrice,
                                Qty = item.Qty,
                                StrictlyThisNumber = item.StrictlyThisNumber,
                                VinCheckupData = item.VinCheckupDataID.HasValue
                                    ? ClientCarsDac
                                        .GetGarageCar(item.VinCheckupDataID.Value)
                                        .ToVinOrderLineComment()
                                    : string.Empty,
                                OrderLineNotes = item.ItemNotes,
                                // deas 23.05.2011 task4130 Ускорение работы со статусами
                                //CurrentStatus = OrderLineStatusUtil.StatusByte(dc, "PreOrder" /* "New" */)
                                CurrentStatus = OrderLineStatusUtil.StatusByte("PreOrder" /* "New" */)
                            });

                        var itemToDelete = dc.DataContext.ShoppingCartItems.SingleOrDefault(
                            i =>
                                i.ItemID == item.ItemID &&
                                i.ItemVersion == item.ItemVersion);
                        if (itemToDelete == null)
                            throw new BLException("Ошибка создания заказа. Элемент корзины изменен или удален");
                        dc.DataContext.ShoppingCartItems.DeleteOnSubmit(itemToDelete);
                    }
                    dc.DataContext.Orders.InsertOnSubmit(order);

                    dc.DataContext.Transaction = dc.DataContext.Connection.BeginTransaction();
                    try
                    {
                        dc.DataContext.SubmitChanges();
                        dc.DataContext.Transaction.Commit();
                        LightBO.SetOrderNoXmlSign(order.OrderID);
                    }
                    catch
                    {
                        dc.DataContext.Transaction.Rollback();
                        throw;
                    }

                    finally
                    {
                        if (dc.DataContext.Connection.State == ConnectionState.Open)
                        {
                            dc.DataContext.Connection.Close();
                        }
                        //Теперь закрываемся в DCFactory
                    }

                    yield return order.OrderID;
                }
            }
        }