//// POST: VendorRetailer/Create
        //// To protect from overposting attacks, please enable the specific properties you want to bind to, for
        //// more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        //[HttpPost]
        //[ValidateAntiForgeryToken]
        //public ActionResult Create([Bind(Include = "Id,Name,Phone,Email,UserType,ContactPerson,EmployeeId")] UserMas userMas)
        //{
        //    if (ModelState.IsValid)
        //    {
        //        db.UserMas.Add(userMas);
        //        db.SaveChanges();
        //        return RedirectToAction("Index");
        //    }

        //    ViewBag.EmployeeId = new SelectList(db.Employees, "Id", "Name", userMas.EmployeeId);
        //    return View(userMas);
        //}



        public JsonResult SaveVendorRetailerOrder(IEnumerable <VMVendorRetailerDet> OrderDetails, VMVendorRetailerMas OrderMas)
        {
            var result = new
            {
                flag    = false,
                message = "Error occured. !",
                Id      = 0
            };

            try
            {
                using (var dbContextTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        var OrderM = new UserMas()
                        {
                            Id             = 0,
                            Name           = OrderMas.Name,
                            Phone          = OrderMas.Phone,
                            Email          = OrderMas.Email,
                            UserType       = 0,
                            ContactPerson  = OrderMas.ContactPerson,
                            EmployeeId     = OrderMas.EmployeeId,
                            InitialBalance = OrderMas.InitialBalance
                                             //Type = OrderMas.ProdDepartmentId,
                        };

                        db.UserMas.Add(OrderM);
                        db.SaveChanges();

                        Dictionary <int, int> dictionary =
                            new Dictionary <int, int>();



                        if (OrderDetails != null)
                        {
                            foreach (var item in OrderDetails)
                            {
                                //var OrderLocation = new Location()
                                //{
                                //    Id = 0,
                                //    Name = item.Location,
                                //    Cost = item.CarryingCost

                                //};

                                //db.Location.Add(OrderLocation);
                                //db.SaveChanges();

                                //var OrderRetailerItems = new VendorRetailerItems()
                                //{
                                //    Id = 0,
                                //    UserMasId = OrderM.Id,
                                //    ItemId = item.ItemId,
                                //    ItemCost = item.UnitPrice


                                //};

                                //db.VendorRetailerItems.Add(OrderRetailerItems);
                                //db.SaveChanges();


                                var OrderD = new UserDet()
                                {
                                    Id           = 0,
                                    UserMasId    = OrderM.Id,
                                    ItemId       = item.ItemId,
                                    LocationId   = item.LocationId,
                                    UnitPrice    = item.UnitPrice,
                                    CarryingCost = item.CarryingCost
                                };

                                db.UserDet.Add(OrderD);
                                db.SaveChanges();

                                dictionary.Add(item.TempOrderDetId, OrderD.Id);
                            }
                        }


                        dbContextTransaction.Commit();

                        result = new
                        {
                            flag    = true,
                            message = "Saving successful!!",
                            Id      = OrderM.Id
                        };

                        Success("Record saved successfully.", true);
                    }
                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();

                        result = new
                        {
                            flag    = false,
                            message = ex.Message,
                            Id      = 0
                        };
                    }
                }
            }
            catch (Exception ex)
            {
                result = new
                {
                    flag    = false,
                    message = ex.Message,
                    Id      = 0
                };
            }


            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        public JsonResult UpdateVendorRetailerOrder(IEnumerable <VMVendorRetailerDet> OrderDetails, VMVendorRetailerMas OrderMas, int[] DelItems)
        {
            var result = new
            {
                flag    = false,
                message = "Error occured. !"
            };

            //return Json(result, JsonRequestBehavior.AllowGet);

            try
            {
                var OpDate = DateTime.Now;
                using (var dbContextTransaction = db.Database.BeginTransaction())
                {
                    try
                    {
                        var OrderM = db.UserMas.Find(OrderMas.Id);

                        if (OrderM == null)
                        {
                            result = new
                            {
                                flag    = false,
                                message = "Invalid Order Id. Saving failed !"
                            };

                            return(Json(result, JsonRequestBehavior.AllowGet));
                        }

                        OrderM.Name          = OrderMas.Name;
                        OrderM.Phone         = OrderMas.Phone;
                        OrderM.Email         = OrderMas.Email;
                        OrderM.ContactPerson = OrderMas.ContactPerson;
                        OrderM.EmployeeId    = OrderMas.EmployeeId;

                        db.Entry(OrderM).State = EntityState.Modified;
                        db.SaveChanges();

                        Dictionary <int, int> dictionary =
                            new Dictionary <int, int>();
                        if (OrderDetails != null)
                        {
                            foreach (var item in OrderDetails)
                            {
                                //var detailIds = (from userDet in db.UserDet
                                //                  join vendorRetailer in db.VendorRetailerItems on userDet.VendorRetailerItemsId equals vendorRetailer.Id
                                //                  where vendorRetailer.UserMasId == OrderM.Id
                                //                  select userDet).SingleOrDefault().LocationId;

                                //var vendorRetId = db.VendorRetailerItems.FirstOrDefault(x => x.UserMasId == OrderM.Id).Id;

                                //var locId = db.UserDet.FirstOrDefault(x => x.VendorRetailerItemsId == vendorRetId).LocationId;

                                //var OrderLocation = new Location()
                                //{
                                //    Id = item.LocationId,
                                //    Name = db.Location.SingleOrDefault(x=>x.Id == item.LocationId).Name,
                                //    Cost = item.CarryingCost,


                                //};


                                //Location locations = new Location();
                                //var locationName = db.Location.Find(item.LocationId).Name;
                                //locations.Id = item.LocationId;
                                //locations.Name = item.Location;
                                //locations.Cost = item.CarryingCost;

                                //db.Entry(locations).State = locations.Id == 0 ?
                                //                           EntityState.Added :
                                //                           EntityState.Modified;



                                //var OrderRetailerItems = new VendorRetailerItems()
                                //{
                                //    Id = item.VendorRetailerId,
                                //    UserMasId = OrderM.Id,
                                //    ItemId = item.ItemId,
                                //    ItemCost = item.UnitPrice


                                //};
                                //db.Entry(OrderRetailerItems).State = OrderRetailerItems.Id == 0 ?
                                //                         EntityState.Added :
                                //                         EntityState.Modified;


                                var OrderD = new UserDet()
                                {
                                    Id = item.Id,
                                    //VendorRetailerItemsId = OrderRetailerItems.Id,
                                    UserMasId    = OrderM.Id,
                                    ItemId       = item.ItemId,
                                    LocationId   = item.LocationId,
                                    UnitPrice    = item.UnitPrice,
                                    CarryingCost = item.CarryingCost
                                };



                                db.Entry(OrderD).State = OrderD.Id == 0 ?
                                                         EntityState.Added :
                                                         EntityState.Modified;

                                //db.BuyerOrderDets.Add(OrderD);
                                db.SaveChanges();

                                dictionary.Add(item.TempOrderDetId, OrderD.Id);
                            }
                        }



                        //if (DelItems != null)
                        //{
                        //    foreach (var item in DelItems)
                        //    {

                        //        var userDetDel = db.UserDet.SingleOrDefault(x => x.UserMasId == item);
                        //        db.UserDet.Remove(userDetDel);
                        //        db.SaveChanges();
                        //    }
                        //}


                        dbContextTransaction.Commit();

                        result = new
                        {
                            flag    = true,
                            message = "Update successful !!"
                        };

                        Success("Updated successfully.", true);
                    }
                    catch (Exception ex)
                    {
                        dbContextTransaction.Rollback();

                        result = new
                        {
                            flag    = false,
                            message = ex.Message
                        };
                    }
                }
            }
            catch (Exception ex)
            {
                result = new
                {
                    flag    = false,
                    message = ex.Message
                };
            }


            return(Json(result, JsonRequestBehavior.AllowGet));
        }