public static void AddOrderItems(OrderHeader orderHeader, int lastOrderId)
        {
            IstokDoorsDBContext db = new IstokDoorsDBContext();

            foreach (var item in orderHeader.OrderItems)
            {
                db.usp_CreateOrderItem(lastOrderId, item.DoorId, item.Quantity, item.Discount);

            }

            db.SaveChanges();
        }
        public static void EditOrderHeaderData(OrderHeader orderHeader)
        {
            IstokDoorsDBContext db = new IstokDoorsDBContext();

            var dbOrderHeader = db.OrderHeaders.Find(orderHeader.OrderId);

            dbOrderHeader.Memo = orderHeader.Memo;
            dbOrderHeader.PaymentTermId = orderHeader.PaymentTermId;
            dbOrderHeader.IsPaid = orderHeader.IsPaid;
            dbOrderHeader.PaymentReferece = orderHeader.PaymentReferece;

            db.SaveChanges();
        }
        public static void AddOrderHeaderData(OrderHeader orderHeader)
        {
            IstokDoorsDBContext db = new IstokDoorsDBContext();

            OrderHeader myOrderHeader = new OrderHeader();

            myOrderHeader.PaymentTermId = orderHeader.PaymentTermId;
            myOrderHeader.CustomerId = orderHeader.CustomerId;
            myOrderHeader.Memo = orderHeader.Memo;

            db.OrderHeaders.Add(myOrderHeader);
            db.SaveChanges();
        }
        public async Task<ActionResult> Cancel(ViewModelOrderHeader viewModelOrderHeader)
        {
            OrderHeader orderHeader = new OrderHeader();

            Mapper.CreateMap<ViewModelOrderHeader, OrderHeader>();
            orderHeader = Mapper.Map(viewModelOrderHeader, orderHeader);

            if (ModelState.IsValid)
            {
                if (orderHeader.OrderFulfillmentSchedule.CancellationDate == null)
                {
                    orderHeader.OrderFulfillmentSchedule.CancellationDate = DateTime.Now;
                }
                db.Entry(orderHeader.OrderFulfillmentSchedule).State = System.Data.Entity.EntityState.Modified;

                MethodsForOrderHandling.EditOrderHeaderData(orderHeader);
                 
                db.usp_CancelOrder(orderHeader.OrderId);

                await db.SaveChangesAsync();

                MethodsForOrderHandling.SendSmsToAllInvolved(orderHeader.OrderId, "cancel");
                
                return RedirectToAction("Index");

            }           


            return RedirectToAction("Cancel");
        }
        public async Task<ActionResult> Ship(OrderHeader orderHeader)
        {

            if (orderHeader.OrderStatusId == 4)
            {
                if (ModelState.IsValid)
                {
                    orderHeader.OrderFulfillmentSchedule.ActualDateOfShipping = DateTime.Now;
                    db.Entry(orderHeader.OrderFulfillmentSchedule).State = System.Data.Entity.EntityState.Modified;

                    MethodsForOrderHandling.EditOrderHeaderData(orderHeader);
                 
                    db.usp_ShipOrder(orderHeader.OrderId);
                    await db.SaveChangesAsync();

                    MethodsForOrderHandling.SendSmsToAllInvolved(orderHeader.OrderId, "ship");

                    return RedirectToAction("Index");

                }

            }


            return RedirectToAction("Ship", orderHeader);
        }
        public async Task<ActionResult> Edit( OrderHeader orderHeader)
        {
            if (ModelState.IsValid)
            {
                db.Entry(orderHeader.OrderFulfillmentSchedule).State = System.Data.Entity.EntityState.Modified;

                MethodsForOrderHandling.EditOrderHeaderData(orderHeader);
                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }
            

            return View(orderHeader);
        }
        public async Task<ActionResult> Create(OrderHeader orderHeader)
        {
               if (ModelState.IsValid && orderHeader.OrderItems.Count>0)
            {
                MethodsForOrderHandling.AddOrderHeaderData(orderHeader);
                await db.SaveChangesAsync();

                var lastOrder = db.OrderHeaders.OrderByDescending(o => o.OrderId).First();

                orderHeader.OrderFulfillmentSchedule.OrderId = lastOrder.OrderId;
                db.OrderFulfillmentSchedules.Add(orderHeader.OrderFulfillmentSchedule);                 

                MethodsForOrderHandling.AddOrderItems(orderHeader, lastOrder.OrderId);

                await db.SaveChangesAsync();
                return RedirectToAction("Index");
            }


            return RedirectToAction("Create");
            //return Content("<script language='javascript' type='text/javascript'>alert('Пожалуйста, определите Состав Заказа!');</script>");
             
        }