/// <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 ); }
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("Ошибка отправки заказа. Не принято одна или более позиций заказа"); } }
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("Ошибка отправки заказа. Не принято одна или более позиций заказа"); }
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; } }
/// <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; } }
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; } } }