public ActionResult EditCustomer(Customer objCustomer, List <string> SubCategoryName, List <int> SubCategoryId)
        {
            string status = "error";

            try
            {
                if (!Authenticated)
                {
                    status = "Session Expired";
                }
                else
                {
                    if (objCustomer.IsActive == null)
                    {
                        objCustomer.IsActive = false;
                    }
                    if (objCustomer.IsResaler == null)
                    {
                        objCustomer.IsResaler = false;
                    }
                    var objEdit = db.Customers.Where(x => x.UID == objCustomer.UID).FirstOrDefault();
                    objEdit.IsActive  = objCustomer.IsActive;
                    objEdit.IsResaler = objCustomer.IsResaler;

                    objEdit.Name           = objCustomer.Name;
                    objEdit.OpeningBalance = objCustomer.OpeningBalance;
                    objEdit.Contact        = objCustomer.Contact;
                    objEdit.Address        = objCustomer.Address;
                    objEdit.Email          = objCustomer.Email;

                    objEdit.UpdatedBy = ActiveUserId;
                    objEdit.UpdatedOn = DateTime.Now;

                    if (db.SaveChanges() > 0)
                    {
                        // For discount edit

                        //remove all discount first
                        var exist = db.DiscountOnBrands.Where(x => x.CustomerId == objEdit.Id).ToList();
                        db.DiscountOnBrands.RemoveRange(exist);

                        for (int i = 0; i < SubCategoryName.Count(); i++)
                        {
                            var objDsc = new DiscountOnBrand();

                            if (SubCategoryName[i] == "" || string.IsNullOrEmpty(SubCategoryName[i]))
                            {
                                SubCategoryName[i] = "0";
                            }

                            objDsc.SubCatId   = SubCategoryId[i];
                            objDsc.Discount   = Convert.ToDecimal(SubCategoryName[i]);
                            objDsc.CustomerId = objEdit.Id;
                            objDsc.CreatedOn  = DateTime.Now;
                            db.DiscountOnBrands.Add(objDsc);
                            db.SaveChanges();
                        }

                        // Entry in Customer Payment

                        var objCp = db.CustomerPayments.Where(x => x.EntryType == 1 && x.CustomerId == objEdit.Id).FirstOrDefault();
                        objCp.UID        = Guid.NewGuid();
                        objCp.CustomerId = objEdit.Id;
                        if (objCustomer.OpeningBalance == 0)
                        {
                            objCp.Debit  = 0;
                            objCp.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance > 0)
                        {
                            objCp.Debit  = objCustomer.OpeningBalance;
                            objCp.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance < 0)
                        {
                            objCp.Credit = -(objCustomer.OpeningBalance);
                            objCp.Debit  = 0;
                        }
                        objCp.EntryType      = 1;
                        objCp.PaymentMethode = 1;
                        objCp.EntryDate      = DateTime.Now;
                        objCp.CreatedBy      = ActiveUserId;
                        objCp.CreatedOn      = DateTime.Now;
                        objCp.UpdatedBy      = ActiveUserId;
                        objCp.UpdatedOn      = DateTime.Now;


                        // Entry in Customer Payment Logs
                        var objCpl = new CustomerPaymentLog();

                        objCpl.UID        = Guid.NewGuid();
                        objCpl.CustomerId = objEdit.Id;
                        if (objCustomer.OpeningBalance == 0)
                        {
                            objCpl.Debit  = 0;
                            objCpl.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance > 0)
                        {
                            objCpl.Debit  = objCustomer.OpeningBalance;
                            objCpl.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance < 0)
                        {
                            objCpl.Credit = -(objCustomer.OpeningBalance);
                            objCpl.Debit  = 0;
                        }
                        objCpl.EntryType      = 1;
                        objCpl.PaymentMethode = 1;
                        objCpl.CreatedBy      = ActiveUserId;
                        objCpl.CreatedOn      = DateTime.Now;
                        objCpl.UpdatedBy      = ActiveUserId;
                        objCpl.UpdatedOn      = DateTime.Now;
                        db.CustomerPaymentLogs.Add(objCpl);

                        db.SaveChanges();



                        status = Newtonsoft.Json.JsonConvert.SerializeObject(objEdit);
                    }
                }
            }
            catch (Exception ex)
            {
                ApplicationExceptionLogging(ex.Message, ex.StackTrace, "CustomerManagementController", "EditVendor");
            }

            return(Content(status));
        }
        //pay to customer

        public ActionResult PaymentToCustomer(Guid UID, double totalPay)
        {
            string status = "error";

            try
            {
                var c     = db.Customers.Where(x => x.UID == UID).FirstOrDefault();
                var objCp = new CustomerPayment();



                // Entry in customer Payment

                objCp.UID            = Guid.NewGuid();
                objCp.CustomerId     = c.Id;
                objCp.EntryType      = 5;
                objCp.PaymentMethode = 1;
                objCp.Credit         = Convert.ToDecimal(totalPay);
                objCp.Debit          = 0;
                objCp.EntryDate      = DateTime.Now;
                objCp.CreatedBy      = ActiveUserId;
                objCp.CreatedOn      = DateTime.Now;
                objCp.UpdatedBy      = ActiveUserId;
                objCp.UpdatedOn      = DateTime.Now;
                db.CustomerPayments.Add(objCp);
                db.SaveChanges();

                var objCpl = new CustomerPaymentLog();

                objCpl.UID               = Guid.NewGuid();
                objCpl.CustomerId        = c.Id;
                objCpl.EntryType         = 5;
                objCpl.CustomerPaymentId = objCp.Id;
                objCpl.PaymentMethode    = 1;
                objCpl.CreatedBy         = ActiveUserId;
                objCpl.Credit            = Convert.ToDecimal(totalPay);
                objCpl.Debit             = 0;
                objCpl.CreatedOn         = DateTime.Now;
                objCpl.UpdatedBy         = ActiveUserId;
                objCpl.UpdatedOn         = DateTime.Now;
                db.CustomerPaymentLogs.Add(objCpl);

                db.SaveChanges();


                //return UID and Balance  to js
                var objUpdatedCustomer = db.Customers.Where(cU => cU.UID == UID).Select(s => new
                {
                    UID     = s.UID,
                    CpId    = objCp.Id,
                    Balance = (db.CustomerPayments.Where(x => x.CustomerId == c.Id).Sum(cp => cp.Debit)) - (db.CustomerPayments.Where(x => x.CustomerId == c.Id).Sum(cp => cp.Credit))
                }).FirstOrDefault();

                status = Newtonsoft.Json.JsonConvert.SerializeObject(objUpdatedCustomer);
            }
            catch (Exception ex)
            {
                ApplicationExceptionLogging(ex.Message, ex.StackTrace, "CustomerManagementController", "LoadGridPayments");
            }
            return(Content(status));
        }
        public ActionResult AddCustomer(Customer objCustomer, List <string> SubCategoryName, List <int> SubCategoryId)
        {
            string status = "error";

            try
            {
                if (!Authenticated)
                {
                    status = "Session Expired";
                }
                else
                {
                    if (objCustomer.IsActive == null)
                    {
                        objCustomer.IsActive = false;
                    }
                    if (objCustomer.IsResaler == null)
                    {
                        objCustomer.IsResaler = false;
                    }

                    objCustomer.UID       = Guid.NewGuid();
                    objCustomer.CreatedBy = ActiveUserId;
                    objCustomer.CreatedOn = DateTime.Now;
                    objCustomer.UpdatedBy = ActiveUserId;
                    objCustomer.UpdatedOn = DateTime.Now;

                    db.Customers.Add(objCustomer);
                    if (db.SaveChanges() > 0)
                    {
                        // Discount Entry



                        for (int i = 0; i < SubCategoryName.Count(); i++)
                        {
                            var objDsc = new DiscountOnBrand();
                            if (SubCategoryName[i] == "" || string.IsNullOrEmpty(SubCategoryName[i]))
                            {
                                SubCategoryName[i] = "0";
                            }

                            objDsc.SubCatId   = SubCategoryId[i];
                            objDsc.Discount   = Convert.ToDecimal(SubCategoryName[i]);
                            objDsc.CustomerId = objCustomer.Id;
                            objDsc.CreatedOn  = DateTime.Now;
                            db.DiscountOnBrands.Add(objDsc);
                        }


                        // Entry in Customer Payment

                        var objCp = new CustomerPayment();
                        objCp.UID        = Guid.NewGuid();
                        objCp.CustomerId = objCustomer.Id;
                        if (objCustomer.OpeningBalance == 0)
                        {
                            objCp.Debit  = 0;
                            objCp.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance > 0)
                        {
                            objCp.Debit  = objCustomer.OpeningBalance;
                            objCp.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance < 0)
                        {
                            objCp.Credit = -(objCustomer.OpeningBalance);
                            objCp.Debit  = 0;
                        }
                        objCp.EntryType      = 1;
                        objCp.PaymentMethode = 1;
                        objCp.EntryDate      = DateTime.Now;
                        objCp.CreatedBy      = ActiveUserId;
                        objCp.CreatedOn      = DateTime.Now;
                        objCp.UpdatedBy      = ActiveUserId;
                        objCp.UpdatedOn      = DateTime.Now;
                        db.CustomerPayments.Add(objCp);

                        // Entry in Customer Payment Logs
                        var objCpl = new CustomerPaymentLog();

                        objCpl.UID        = Guid.NewGuid();
                        objCpl.CustomerId = objCustomer.Id;
                        if (objCustomer.OpeningBalance == 0)
                        {
                            objCpl.Debit  = 0;
                            objCpl.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance > 0)
                        {
                            objCpl.Debit  = objCustomer.OpeningBalance;
                            objCpl.Credit = 0;
                        }
                        if (objCustomer.OpeningBalance < 0)
                        {
                            objCpl.Credit = -(objCustomer.OpeningBalance);
                            objCpl.Debit  = 0;
                        }
                        objCpl.EntryType      = 1;
                        objCpl.PaymentMethode = 1;
                        objCpl.CreatedBy      = ActiveUserId;
                        objCpl.CreatedOn      = DateTime.Now;
                        objCpl.UpdatedBy      = ActiveUserId;
                        objCpl.UpdatedOn      = DateTime.Now;
                        db.CustomerPaymentLogs.Add(objCpl);

                        db.SaveChanges();


                        status = Newtonsoft.Json.JsonConvert.SerializeObject(objCustomer);
                    }
                }
            }
            catch (Exception ex)
            {
                ApplicationExceptionLogging(ex.Message, ex.StackTrace, "CustomerManagementController", "AddVendor");
            }
            return(Content(status));
        }