public void Add(PickingListHeader header, AromaContext db) { foreach (var detail in header.PickingListDetail) { var shipment = (from item in this.Shipments where item.groupId.Equals(detail.GroupId) select item).FirstOrDefault(); if (shipment == null) { if (detail.Address == null) detail.Address = detail.Client.DeliveryAddress; var cell = db.GetContact(detail.ClientID, Generic.enumContactType.Cell); //var contact = detail.Client.Contact?.Where(m => m.Active && m.ContactTypeID == 3).FirstOrDefault(); shipment = new Shipment() { ClientDescription = string.Format("{0} {1} ({2})", detail.Client.FullNames, detail.Client.ClientSurname, detail.ClientID), PhoneNumber = cell,// contact==null?string.Empty:contact.ContactName, Address = detail.Address, ClientId = detail.ClientID, groupId = detail.GroupId, ItemCount = 1 }; this.Shipments.Add(shipment); } else { shipment.ItemCount++; } } }
private async Task<PickingListHeader> GetPickingListView(int shippingTypeId, int shippingMethodId) { var shippingType = db.ShippingTypes.Find(shippingTypeId); var codes = new string[0]; if (shippingType.ShippingList) { codes = await (from item in db.ShippingMethodPostalCodes where item.Active && item.ShippingMethodId == shippingMethodId select item.PostalCode.PostalCodeName).Distinct().ToArrayAsync(); } else { codes = await (from item in db.PostalCodes select item.PostalCodeName).ToArrayAsync(); } var codeCheck = codes.Where(m => m == "0300").FirstOrDefault(); var ddd = (from item in db.OrderHeaders.Include(mbox=>mbox.OrderLines).Include(m=>m.Address).ToArray() where item.OrderHeaderId.Equals(Guid.Parse("18903cd2-9554-e611-814c-2047477ce07a")) select item).ToArray(); //var orders = (from item in ddd // where item.Active // && codes.Contains(item.Address.Code) // select item).ToArray(); //try and fix oreders without addesses var noAddressOrders = await (from item in db.OrderHeaders where item.Active && item.Address == null select item).ToArrayAsync(); foreach (var order in noAddressOrders) { order.Address = (from item in db.Addresses where item.ClientID == order.ClientID && item.AddressTypeID == 2 && item.Active select item).FirstOrDefault(); if (order.Address == null) { order.Address = (from item in db.Addresses where item.AddressId== order.Client.DeliveryAddress_AddressId select item).FirstOrDefault(); } if (order.Address == null) { order.Address = (from item in db.Addresses where item.ClientID == order.ClientID && item.AddressTypeID == 2 select item).FirstOrDefault(); } if (order.Address != null) { db.SaveChanges(); } } ///////////////////////////////////////// var orders = await (from item in db.OrderHeaders where item.Active && codes.Contains(item.Address.Code) select item).Include(m => m.OrderLines).ToArrayAsync(); orders = (from item in orders where item.ShippingTypeId == shippingTypeId select item).ToArray(); orders = (from item in orders where item.OrderStatusId==2 select item).ToArray(); var detail = new List<PickingListDetail>(); foreach (var order in orders) { var dt = (from item in order.OrderLines select new PickingListDetail() { Active = false, Address = order.Address, Client = order.Client, ClientID = order.ClientID, OrderLineId = item.OrderLineId, Product = item.Product, ProductID = item.ProductID, TotalItems = item.Quantity - (from PickingListDetail pld in db.PickingListDetails where pld.Active && pld.OrderLineId == item.OrderLineId select pld.TransferQuantity).DefaultIfEmpty(0).Sum(), GroupId = item.OrderHeaderId, Invoice = OrderHeadersController.GetInvoice(db,item.OrderHeaderId).Number, TransferQuantity=item.Quantity - (from PickingListDetail pld in db.PickingListDetails where pld.Active && pld.OrderLineId==item.OrderLineId select pld.TransferQuantity).DefaultIfEmpty(0).Sum() }).OrderBy(m=>m.ClientID).ThenBy(m=>m.Invoice).ToArray(); detail.AddRange(dt.Where(m=>m.TransferQuantity>0)); if (dt.Where(m => m.TransferQuantity > 0).Count() == 0) { order.OrderStatusId = 4; //picked db.SaveChanges(); } } ModelState.Remove("PickingListDetail"); ModelState.Remove("ShippingMethodId"); ModelState.Remove("ShippingMethodId"); ModelState.Remove("PickingDate"); ModelState.Remove("ClientId"); var viewModel = new PickingListHeader() { PickingDate = DateTime.Now, ShippingMethodId = shippingMethodId, ShippingTypeId = shippingTypeId, PickingListDetail = detail.OrderBy(m=>m.ClientID) .ThenBy(m => m.GroupId) .ThenBy(m=>m.Product.ProductName).ToList() }; return viewModel; }