void grdPaymentHistory_CommandCellClick(object sender, EventArgs e)
        {
            try
            {
                GridCommandCellElement gridCell = (GridCommandCellElement)sender;
                if (gridCell.ColumnInfo.Name.ToLower() == "btndelete")
                {
                    if (DialogResult.Yes == RadMessageBox.Show("Are you sure you want to delete a Record ? ", "", MessageBoxButtons.YesNo, RadMessageIcon.Question))
                    {
                        long Id = grdPaymentHistory.CurrentRow.Cells["Id"].Value.ToLong();
                        if (grdPaymentHistory.CurrentRow != null && grdPaymentHistory.CurrentRow is GridViewDataRowInfo)
                        {
                            if (grdPaymentHistory.Rows.Count > 1 && Id < grdPaymentHistory.Rows.Where(c => c.Index != grdPaymentHistory.CurrentRow.Index)
                                .OrderByDescending((c => c.Cells["Id"].Value.ToLong())).FirstOrDefault().Cells["Id"].Value.ToLong())
                            {
                                ENUtils.ShowMessage("Expenses History will be Delete in Reverse Order");
                                return;
                            }
                        }

                        string  Type           = grdPaymentHistory.CurrentRow.Cells[COLS.Type].Value.ToStr().ToLower();
                        decimal Amount         = grdPaymentHistory.CurrentRow.Cells[COLS.Amount].Value.ToDecimal();
                        decimal CurrentBalance = numCurrBalance.Value.ToDecimal();
                        grdPaymentHistory.CurrentRow.Delete();
                        if (Type == "credit")
                        {
                            //if (CurrentBalance > 0)
                            //{
                            numCurrBalance.Value = (CurrentBalance - Amount);
                        }
                        else
                        {
                            //if (CurrentBalance > 0)
                            //{
                            numCurrBalance.Value = (CurrentBalance + Amount);
                        }
                        objDriverRent.GetByPrimaryKey(RentId);
                        objDriverRent.Edit();
                        objDriverRent.Current.Balance = numCurrBalance.Value.ToDecimal();

                        objDriverRent.Save();
                        using (TaxiDataContext db = new TaxiDataContext())
                        {
                            var query = db.Fleet_DriverRentExpenses.Single(c => c.Id == Id);
                            db.Fleet_DriverRentExpenses.DeleteOnSubmit(query);
                            db.SubmitChanges();
                        }
                        DisplayRecord();
                    }
                }
            }
            catch (Exception ex)
            {
                ENUtils.ShowMessage(ex.Message);
            }
        }
        private bool OnSave(int DriverId, decimal oldBalance, decimal DriverRent, decimal pdaRent, decimal InitialBalance, decimal rentPayValue, ref decimal accJobs, ref long transId, ref decimal rentDue, ref decimal currBalance)
        {
            bool IsSaved = false;


            try
            {
                bool RentForProcessedJobs = AppVars.objPolicyConfiguration.RentForProcessedJobs.ToBool();

                //var list = (from b in list1
                //           join c in list2 on b.Id equals c.BookingId into table2
                //           from c in table2.DefaultIfEmpty()
                //           where (c == null)
                //           select new


                var rentList = General.GetGeneralList <DriverRent_Charge>(c => c.BookingId != null && c.TransId != null);


                Expression <Func <Booking, bool> > _exp = null;
                if (AppVars.objPolicyConfiguration.PickBookingOnInvoicingType.ToInt() == 2)
                {
                    _exp = c => c.CompanyId != null && ((c.PaymentTypeId != Enums.PAYMENT_TYPES.CASH && c.BookingStatusId == Enums.BOOKINGSTATUS.NOPICKUP) || c.BookingStatusId == Enums.BOOKINGSTATUS.DISPATCHED)

                           && (c.FareRate != null) &&
                           ((RentForProcessedJobs == true && (c.IsProcessed != null && c.IsProcessed == true)) || (RentForProcessedJobs == false && (c.IsProcessed == null || c.IsProcessed == false))) &&
                           (c.DriverId == DriverId) &&
                           (c.PickupDateTime.Value.Date >= dtpFromDate.Value.Value.Date && c.PickupDateTime.Value.Date <= dtpTillDate.Value.Value.Date);
                }
                else
                {
                    _exp = c => c.CompanyId != null && c.BookingStatusId == Enums.BOOKINGSTATUS.DISPATCHED

                           && (c.FareRate != null) &&
                           ((RentForProcessedJobs == true && (c.IsProcessed != null && c.IsProcessed == true)) || (RentForProcessedJobs == false && (c.IsProcessed == null || c.IsProcessed == false))) &&
                           (c.DriverId == DriverId) &&
                           (c.PickupDateTime.Value.Date >= dtpFromDate.Value.Value.Date && c.PickupDateTime.Value.Date <= dtpTillDate.Value.Value.Date);
                }

                var list2 = (from a in General.GetGeneralList <Booking>(_exp)
                             join b in rentList on a.Id equals b.BookingId into table2
                             from b in table2.DefaultIfEmpty()
                             where (b == null)
                             select new
                {
                    Id = a.Id,
                    TotalFare = a.FareRate.ToDecimal() + a.CongtionCharges.ToDecimal() + a.MeetAndGreetCharges.ToDecimal(),
                    //  TotalCharges = a.TotalCharges,
                    CompanyId = a.CompanyId,
                    AccountTypeId = a.Gen_Company.AccountTypeId,
                    DriverCommissionAmount = a.DriverCommission,
                    DriverCommissionType = a.DriverCommissionType,
                    IsCommissionWise = a.IsCommissionWise
                }).ToList();



                //if (list2.Count == 0)
                //    return false;



                objMaster = new DriverRentBO();
                objMaster.New();



                List <DriverRent_Charge> ListDetail = (from a in list2
                                                       select new DriverRent_Charge
                {
                    //Id = a.Id,
                    TransId = objMaster.Current.Id,
                    BookingId = a.Id
                }).ToList();



                decimal Total = list2.Sum(c => c.TotalFare).ToDecimal();

                decimal ACCJobsTotal = list2.Where(c => c.CompanyId != null && c.AccountTypeId.ToInt() == Enums.ACCOUNT_TYPE.ACCOUNT)
                                       .Sum(c => c.TotalFare).ToDecimal();

                decimal ACCCashJobsAmountTotal = list2.Where(c => c.CompanyId != null && c.AccountTypeId.ToInt() == Enums.ACCOUNT_TYPE.CASH &&
                                                             c.IsCommissionWise.ToBool() && c.DriverCommissionType.ToStr().Trim() == "Amount")
                                                 .Sum(c => c.DriverCommissionAmount.ToDecimal()).ToDecimal();

                decimal ACCCashJobsPercentTotal = list2.Where(c => c.CompanyId != null && c.AccountTypeId.ToInt() == Enums.ACCOUNT_TYPE.CASH &&
                                                              c.IsCommissionWise.ToBool() && c.DriverCommissionType.ToStr().Trim() == "Percent")
                                                  .Sum(c => (c.DriverCommissionAmount.ToDecimal() * 100) / c.TotalFare).ToDecimal();



                objMaster.Current.JobsTotal = ACCJobsTotal;


                accJobs = ACCJobsTotal;

                decimal owed = ACCJobsTotal - (DriverRent + pdaRent + (ACCCashJobsAmountTotal + ACCCashJobsPercentTotal));

                owed    = owed + oldBalance;
                rentDue = owed;

                // decimal balance = owed;// +payment;

                currBalance = owed + rentPayValue.ToDecimal();


                objMaster.Current.RentPay = rentPayValue.ToDecimal();

                objMaster.Current.Balance = currBalance;//RentPay - DriverRent;

                objMaster.Current.DriverRent1 = DriverRent;


                // add pda rent
                objMaster.Current.PDARent = pdaRent;

                objMaster.Current.AddBy     = AppVars.LoginObj.LuserId.ToInt();
                objMaster.Current.AddLog    = AppVars.LoginObj.LoginName.ToStr();
                objMaster.Current.AddOn     = DateTime.Now;
                objMaster.Current.TransDate = DateTime.Now; //dtpTransactionDate.Value.ToDateTime();
                objMaster.Current.DriverId  = DriverId;     //ddlDriver.SelectedValue.ToIntorNull();



                objMaster.Current.OldBalance = oldBalance;// (CurrentBalance - RentPay);


                objMaster.Current.FromDate = dtpFromDate.Value.ToDate();
                objMaster.Current.ToDate   = dtpTillDate.Value.ToDate();
                objMaster.Current.TransFor = "Weekly";//ddlDayWise.SelectedText.ToStr();



                objMaster.Current.Fuel  = 0; //Fuel.ToDecimal();
                objMaster.Current.Extra = 0; // Extra.ToDecimal();



                string[] skipProperties             = { "DriverRent", "Booking" };
                IList <DriverRent_Charge> savedList = objMaster.Current.DriverRent_Charges;


                var list = objMaster.Current.DriverRent_Charges.ToList();



                Utils.General.SyncChildCollection(ref savedList, ref ListDetail, "Id", skipProperties);


                objMaster.Save();


                IsSaved = true;
                transId = objMaster.Current.Id;
            }
            catch (Exception ex)
            {
                if (objMaster.Errors.Count > 0)
                {
                    ENUtils.ShowMessage(objMaster.ShowErrors());
                }
                else
                {
                    ENUtils.ShowMessage(ex.Message);
                }
            }

            return(IsSaved);
        }