public IActionResult Update([FromBody] dynamic employeeData)
        {
            ValidateSession();
            var result = "";

            try
            {
                if (employeeData != null)
                {
                    Lms_EmployeePoco employeePoco = JsonConvert.DeserializeObject <Lms_EmployeePoco>(JsonConvert.SerializeObject(employeeData[0]));

                    if (employeePoco.Id > 0 && employeePoco.FirstName.Trim() != string.Empty)
                    {
                        var employee = _employeeLogic.GetSingleById(employeePoco.Id);
                        // it is required to pull existing data first,
                        // cause there are some data which do not come from UI

                        employee.FirstName         = employeePoco.FirstName;
                        employee.LastName          = employeePoco.LastName;
                        employee.DriverLicenseNo   = employeePoco.DriverLicenseNo;
                        employee.SocialInsuranceNo = employeePoco.SocialInsuranceNo;
                        employee.EmployeeTypeId    = employeePoco.EmployeeTypeId;
                        employee.IsHourlyPaid      = employeePoco.IsHourlyPaid;
                        employee.HourlyRate        = employeePoco.HourlyRate;

                        employee.IsSalaried           = employeePoco.IsSalaried;
                        employee.SalaryAmount         = employeePoco.SalaryAmount;
                        employee.IsCommissionProvided = employeePoco.IsCommissionProvided;
                        employee.CommissionPercentage = employeePoco.CommissionPercentage;
                        employee.IsFuelChargeProvided = employeePoco.IsFuelChargeProvided;
                        employee.FuelPercentage       = employeePoco.FuelPercentage;
                        employee.RadioInsuranceAmount = employeePoco.RadioInsuranceAmount;
                        employee.InsuranceAmount      = employeePoco.InsuranceAmount;
                        employee.SalaryTerm           = employeePoco.SalaryTerm;
                        employee.IsActive             = employeePoco.IsActive;

                        employee.UnitNumber   = employeePoco.UnitNumber;
                        employee.AddressLine  = employeePoco.AddressLine;
                        employee.CityId       = employeePoco.CityId;
                        employee.ProvinceId   = employeePoco.ProvinceId;
                        employee.CountryId    = employeePoco.CountryId;
                        employee.PostCode     = employeePoco.PostCode;
                        employee.EmailAddress = employeePoco.EmailAddress;
                        employee.MobileNumber = employeePoco.MobileNumber;
                        employee.FaxNumber    = employeePoco.FaxNumber;
                        employee.PhoneNumber  = employeePoco.PhoneNumber;


                        var poco = _employeeLogic.Update(employee);
                        result = poco.Id.ToString();
                    }
                }
            }
            catch (Exception ex)
            {
            }

            return(Json(result));
        }
        public IActionResult Add([FromBody] dynamic employeeLoanData)
        {
            ValidateSession();
            var result = "";

            try
            {
                if (employeeLoanData != null)
                {
                    Lms_EmployeeLoanPoco employeeLoanPoco = JsonConvert.DeserializeObject <Lms_EmployeeLoanPoco>(JsonConvert.SerializeObject(employeeLoanData[0]));

                    if (employeeLoanPoco.LoanAmount > 0)
                    {
                        using (var scope = new TransactionScope()) {
                            var _transactionController = new TransactionController(_cache, _dbContext);
                            var _configLogic           = new Lms_ConfigurationLogic(_cache, new EntityFrameworkGenericRepository <Lms_ConfigurationPoco>(_dbContext));
                            var configInfo             = _configLogic.GetSingleById(1);
                            var employeeInfo           = _employeeLogic.GetSingleById(employeeLoanPoco.EmployeeId);

                            List <TransactionModel> debitTransactionModelList = new List <TransactionModel>();
                            TransactionModel        debitTransactionModel     = new TransactionModel();
                            debitTransactionModel.AccountId = employeeInfo.AccountId;
                            debitTransactionModel.TxnAmount = employeeLoanPoco.LoanAmount;
                            debitTransactionModelList.Add(debitTransactionModel);

                            List <TransactionModel> creditTransactionModelList = new List <TransactionModel>();
                            TransactionModel        creditTransactionModel     = new TransactionModel();
                            creditTransactionModel.AccountId = (int)configInfo.LoanIncomeAccount;
                            creditTransactionModel.TxnAmount = employeeLoanPoco.LoanAmount;
                            creditTransactionModelList.Add(creditTransactionModel);

                            var txnId = _transactionController.MakeTransaction(debitTransactionModelList, creditTransactionModelList, employeeLoanPoco.LoanAmount, DateTime.Now, DateTime.Now, employeeLoanPoco.Remarks);

                            employeeLoanPoco.TransactionId = txnId;
                            employeeLoanPoco.CreatedBy     = sessionData.UserId;
                            var loanId = _employeeLoanLogic.Add(employeeLoanPoco);
                            if (!string.IsNullOrEmpty(loanId.ToString()))
                            {
                                result = loanId.ToString();
                                scope.Complete();
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }

            return(Json(result));
        }
        public IActionResult PartialLoadEmployeeOrders(string empId, string fromDate, string toDate)
        {
            List <ViewModel_PayrollOrder> viewModelPayrollOrders = new List <ViewModel_PayrollOrder>();

            if (empId != "")
            {
                int      selectedEmpId    = Convert.ToInt16(empId);
                DateTime selectedFromDate = Convert.ToDateTime(fromDate);
                DateTime selectedToDate   = Convert.ToDateTime(toDate);

                _deliveryOptionLogic = new Lms_DeliveryOptionLogic(_cache, new EntityFrameworkGenericRepository <Lms_DeliveryOptionPoco>(_dbContext));
                var deliveryOptionList = _deliveryOptionLogic.GetList();

                _employeeLogic = new Lms_EmployeeLogic(_cache, new EntityFrameworkGenericRepository <Lms_EmployeePoco>(_dbContext));
                var employeeList = _employeeLogic.GetList();

                _additionalServiceLogic = new Lms_OrderAdditionalServiceLogic(_cache, new EntityFrameworkGenericRepository <Lms_OrderAdditionalServicePoco>(_dbContext));

                _orderLogic = new Lms_OrderLogic(_cache, new EntityFrameworkGenericRepository <Lms_OrderPoco>(_dbContext));
                var orderList = _orderLogic.GetList();

                _orderStatusLogic = new Lms_OrderStatusLogic(_cache, new EntityFrameworkGenericRepository <Lms_OrderStatusPoco>(_dbContext));
                var orderStatusList = _orderStatusLogic.GetList().Where(c => (c.DispatchedToEmployeeId == selectedEmpId || c.PassedOffToEmployeeId == selectedEmpId) && c.CreateDate >= selectedFromDate && c.CreateDate <= selectedToDate && c.IsDelivered == true).ToList();

                orderList = (from order in orderList
                             join status in orderStatusList on order.Id equals status.OrderId
                             select order).ToList();

                foreach (var order in orderList)
                {
                    ViewModel_PayrollOrder payrollOrder = new ViewModel_PayrollOrder();
                    var empInfo = _employeeLogic.GetSingleById(selectedEmpId);

                    var orderStatus = orderStatusList.Where(c => c.OrderId == order.Id).FirstOrDefault();


                    payrollOrder.WaybillNumber           = order.WayBillNumber;
                    payrollOrder.WaybillDate             = order.CreateDate;
                    payrollOrder.OrderType               = order.OrderTypeId == 1 ? "Single" : "Return";
                    payrollOrder.DeliveryOptionShortCode = deliveryOptionList.Where(c => c.Id == order.DeliveryOptionId).FirstOrDefault().ShortCode;
                    payrollOrder.PickupEmployeeId        = (int)orderStatus.DispatchedToEmployeeId;
                    payrollOrder.PickupEmployeeName      = employeeList.Where(c => c.Id == payrollOrder.PickupEmployeeId).FirstOrDefault().FirstName;

                    var deliveryEmpId = orderStatusList.Where(c => c.OrderId == order.Id).FirstOrDefault().PassedOffToEmployeeId;
                    if (deliveryEmpId != null && deliveryEmpId > 0)
                    {
                        payrollOrder.DeliveryEmployeeId   = (int)orderStatus.PassedOffToEmployeeId;
                        payrollOrder.DeliveryEmployeeName = employeeList.Where(c => c.Id == payrollOrder.DeliveryEmployeeId).FirstOrDefault().FirstName;
                    }
                    else
                    {
                        payrollOrder.DeliveryEmployeeId   = payrollOrder.PickupEmployeeId;
                        payrollOrder.DeliveryEmployeeName = payrollOrder.PickupEmployeeName;
                    }

                    payrollOrder.WaybillBaseAmount = order.OrderBasicCost;
                    if (order.BasicCostOverriden != null && order.BasicCostOverriden > 0)
                    {
                        payrollOrder.WaybillBaseAmount = (decimal)order.BasicCostOverriden;
                    }

                    payrollOrder.OrderCommissionPercent = empInfo.CommissionPercentage == null ? 0 : (decimal)empInfo.CommissionPercentage;
                    payrollOrder.OrderFuelPercent       = empInfo.FuelPercentage == null ? 0 : (decimal)empInfo.FuelPercentage;

                    payrollOrder.OrderCommissionAmnt = payrollOrder.WaybillBaseAmount * payrollOrder.OrderCommissionPercent / 100;
                    payrollOrder.OrderFuelAmnt       = payrollOrder.WaybillBaseAmount * payrollOrder.OrderFuelPercent / 100;

                    payrollOrder.AddServiceAmnt = 0;

                    var additionalServices = _additionalServiceLogic.GetList().Where(c => c.OrderId == order.Id);
                    foreach (var addSrv in additionalServices)
                    {
                        if (addSrv.DriverPercentageOnAddService != null && addSrv.DriverPercentageOnAddService > 0)
                        {
                            payrollOrder.AddServiceAmnt = payrollOrder.AddServiceAmnt + (addSrv.AdditionalServiceFee * (decimal)addSrv.DriverPercentageOnAddService / 100);
                        }
                    }
                    payrollOrder.WaitTime = orderStatus.DeliveryWaitTimeHour;

                    viewModelPayrollOrders.Add(payrollOrder);
                }
            }

            return(PartialView("_PartialViewEmployeeDeliveries", viewModelPayrollOrders));
        }