private int AddCartHeader(CartHeader cartHeader, POSInventoryContext context)
        {
            Cart_Header cHeader = new Cart_Header
                {
                    dateadded = DateTime.Now,
                    agentID = cartHeader.AgentID,
                    merchant_fk = cartHeader.MerchantId,
                    order_total = cartHeader.Total,
                    order_tax = cartHeader.Tax,
                    order_discount = cartHeader.Discount,
                    order_net = cartHeader.Net,
                    orShipTo = cartHeader.ShippingInfo.To,
                    orShipAddress1 = cartHeader.ShippingInfo.AddressOne,
                    orShipAddress2 = cartHeader.ShippingInfo.AddressTwo,
                    orShipCity = cartHeader.ShippingInfo.City,
                    orShipState = cartHeader.ShippingInfo.State,
                    orShipZipCode = cartHeader.ShippingInfo.ZipCode,
                    orShipCountry = cartHeader.ShippingInfo.Country,
                    orShipPhone = cartHeader.ShippingInfo.Phone,
                    orRefNotes = cartHeader.ShippingInfo.Notes,
                    FedExHomeDelivery = cartHeader.ShippingInfo.FedExHomeDelivery,
                    FedExSaturdayDelivery = cartHeader.ShippingInfo.FedExSaturdayDelivery,
                    orShipCost = cartHeader.ShippingInfo.Cost,
                    orShipEmail = cartHeader.ShippingInfo.Email,
                    orTotalWeight = cartHeader.TotalWeight,
                    orWeight_measureID = cartHeader.WeightId,
                    deploymethID = cartHeader.DeploymentId,
                };

            int cHeaderId = context.InsertCartHeader(cHeader);

            return cHeaderId;
        }
        private void AddCartDetails(CartHeader cartHeader, int cHeaderId, POSInventoryContext context)
        {
            foreach (var cartItem in cartHeader.Items)
            {
                Cart_Detail cDetail = new Cart_Detail
                    {
                        cart_id = cHeaderId,
                        thType = cartItem.Type,
                        thingID = cartItem.Id,
                        description = cartItem.Description,
                        qty = cartItem.Quantity,
                        price = cartItem.Price,
                        extended = cartItem.Extended,
                        discount = cartItem.Discount,
                        tax = cartItem.Tax,
                        unit = cartItem.Unit,
                        weight = cartItem.Weight,
                        weight_measureID = cartItem.WeightId
                    };

                context.InsertCartDetails(cDetail);
            }

            context.SaveChanges();
        }
 private User GetUserFromCart(CartHeader cart)
 {
     if (cart.AgentID != 0)
     {
         return _userRepository.Get(user => user.RefId == cart.AgentID).FirstOrDefault();
     }
     else
     {
         return _userRepository.Get(user => user.RefId == cart.MerchantId).FirstOrDefault();
     }
 }
        public int AddOrder(CartHeader cart)
        {
            int inventoryOrderId = _inventoryRepository.CreateOrderFrom(cart);
            User user = GetUserFromCart(cart);
            Order order = new Order
                {
                    UserId = user.Id,
                    RefId = inventoryOrderId
                };

            _orderRepository.Add(order);
            _unitOfWork.Commit();

            return order.Id;
        }
        public int CreateOrderFrom(CartHeader cartHeader)
        {
            try
            {
                using (POSInventoryContext context = new POSInventoryContext())
                {
                    int cHeaderId = AddCartHeader(cartHeader, context);
                    AddCartDetails(cartHeader, cHeaderId, context);

                    var orderId = AddOrder(cartHeader, context, cHeaderId);

                    return orderId;
                }
            }
            catch (Exception e)
            {
                throw new DataAccessException("Error POSInventoryContext access", e);
            }
        }
 private int AddOrder(CartHeader cartHeader, POSInventoryContext context, int cHeaderId)
 {
     int orderId = context.InsertOrder(
         cHeaderId,
         cartHeader.AgentID,
         cartHeader.DeploymentId,
         0,
         cartHeader.ShippingInfo.To,
         cartHeader.ShippingInfo.AddressOne,
         cartHeader.ShippingInfo.AddressTwo,
         cartHeader.ShippingInfo.City,
         cartHeader.ShippingInfo.State,
         cartHeader.ShippingInfo.ZipCode,
         cartHeader.ShippingInfo.Country,
         cartHeader.ShippingInfo.Phone,
         cartHeader.Tax,
         cartHeader.Discount,
         cartHeader.Net,
         cartHeader.ShippingInfo.FedExHomeDelivery,
         cartHeader.ShippingInfo.FedExSaturdayDelivery,
         cartHeader.ShippingInfo.Email
         );
     return orderId;
 }
        private CartHeader GetOrderReady(IEnumerable<MarketingProduct> marketingMaterials)
        {
            try
            {
                var userLogged = Session[Utils.UserKey] as UserModel;

                var shippingInfo = new ShippingInfo
                {
                    AddressOne = userLogged.Address1,
                    AddressTwo = userLogged.Address2,
                    City = userLogged.City,
                    Cost = 15,
                    Country = "USA",
                    Email = userLogged.Email,
                    Phone = userLogged.Phone,
                    State = userLogged.State,
                    ZipCode = userLogged.ZipCode,
                    To = userLogged.Name
                };

                var cartDetails = marketingMaterials.Select(thing => new CartItem
                {
                    Description = thing.Name,
                    Price = thing.Price.IsNull() ? 0 : thing.Price.Value,
                    Discount = thing.Discount.IsNull() ? 0 : thing.Discount.Value,
                    Weight = thing.Weight.IsNull() ? 0 : thing.Weight.Value,
                    Quantity = thing.Quantity,
                    Extended = marketingMaterials.Sum(item => item.Price).Value,
                    Tax = 0,
                    Type = thing.thType.ToString(),
                    Unit = "Units",
                    WeightId = thing.Weight_measureID.Value,
                    Id = thing.thingID.Value
                });

                var isAnAgent = Utils.IsUserAgent(userLogged.UserCategory);

                var cartHeader = new CartHeader
                {
                    AgentID = isAnAgent ? userLogged.UserId : 0,
                    Items = cartDetails.ToList(),
                    ShippingInfo = shippingInfo,
                    TotalWeight = cartDetails.Sum(item => (item.Weight*item.Quantity)),
                    Total = cartDetails.Sum(item => (item.Price*item.Quantity)) + shippingInfo.Cost,
                    MerchantId = isAnAgent ? 0 : userLogged.UserId,
                };

                return cartHeader;

            }
            catch (Exception exception)
            {
                return null;
            }
        }