Esempio n. 1
0
        public async Task <IActionResult> OnDelete()
        {
            List <Employee_Dto> entitites = JsonSerializer.Deserialize <List <Employee_Dto> >(Request.Form["info"]);

            try
            {
                for (int i = 0; i < entitites.Count; i++)
                {
                    Employee_Dto entity = entitites[i];
                    //await BusinessUnitTemplatesAppService.Repository.DeleteAsync(leaveRequest.);
                    await employeeAppService.DeleteAsync(entity.Id);

                    if (AuditingManager.Current != null)
                    {
                        EntityChangeInfo entityChangeInfo = new EntityChangeInfo();
                        entityChangeInfo.EntityId           = entity.Id.ToString();
                        entityChangeInfo.EntityTenantId     = entity.TenantId;
                        entityChangeInfo.ChangeTime         = DateTime.Now;
                        entityChangeInfo.ChangeType         = EntityChangeType.Deleted;
                        entityChangeInfo.EntityTypeFullName = typeof(Employee).FullName;

                        AuditingManager.Current.Log.EntityChanges.Add(entityChangeInfo);
                    }
                }
                return(StatusCode(200));
            }
            catch (Exception ex)
            {
                return(StatusCode(500));
            }
        }
Esempio n. 2
0
        public IActionResult OnGet(int P1Year, int P1Month, int P2Year, int P2Month, bool isAjax)
        {
            bool isOnGet = P1Year != 0 && P2Year != 0;

            if (!isOnGet)
            {
                return(Page());
            }

            try
            {
                bool isPeriodValid = true;

                Payrun_Dto fromPayrun = null;
                Payrun_Dto toPayrun   = null;

                fromPayrun = ObjectMapper.Map <Payrun, Payrun_Dto>(PayrunAppService.Repository.WithDetails().SingleOrDefault(x => x.Year == P1Year && x.Month == P1Month));
                toPayrun   = ObjectMapper.Map <Payrun, Payrun_Dto>(PayrunAppService.Repository.WithDetails().SingleOrDefault(x => x.Year == P2Year && x.Month == P2Month));

                if (fromPayrun == null || toPayrun == null)
                {
                    isPeriodValid = false;
                }

                if (!isPeriodValid)
                {
                    return(BadRequest(new { type = "period" }));
                }


                List <dynamic> payrunReconSummaryDynamicDS = new List <dynamic>();

                if (fromPayrun != null && toPayrun != null)
                {
                    Allowances = DicValuesRepo.WithDetails(x => x.ValueType).Where(x => x.ValueType.ValueTypeFor == ValueTypeModules.AllowanceType).ToList();

                    List <PayrunDetail_Dto> fromPDetails = fromPayrun.PayrunDetails.ToList();
                    List <PayrunDetail_Dto> toPDetails   = toPayrun.PayrunDetails.ToList();

                    List <(PayrunDetail_Dto fromPDetail, PayrunDetail_Dto toPDetail)> payrunReconDetails = new List <(PayrunDetail_Dto fromPDetail, PayrunDetail_Dto toPDetail)>();

                    var toExplicits = toPDetails.Where(x => !fromPDetails.Any(x1 => x1.EmployeeId == x.EmployeeId))
                                      .Select(x => { return((PayrunDetail_Dto)null, x); });

                    payrunReconDetails.AddRange(toExplicits);
                    payrunReconDetails.AddRange(fromPDetails.Select(x =>
                    {
                        if (toPDetails.Exists(x1 => x1.EmployeeId == x.EmployeeId))
                        {
                            return(x, toPDetails.Single(x1 => x1.EmployeeId == x.EmployeeId));
                        }
                        else
                        {
                            return(x, null);
                        }
                    }));

                    for (int i = 0; i < payrunReconDetails.Count; i++)
                    {
                        var reconDetail = payrunReconDetails[i];

                        PayrunDetail_Dto fromD = reconDetail.fromPDetail;
                        PayrunDetail_Dto toD   = reconDetail.toPDetail;

                        dynamic payrunReconEmpDDSRow = new ExpandoObject();

                        if (fromD != null || toD != null)
                        {
                            bool isFromD = fromD != null;
                            bool isToD   = toD != null;
                            bool both    = isToD && isFromD;

                            Employee_Dto emp = isFromD ? fromD.Employee : toD.Employee;

                            payrunReconEmpDDSRow.getCompanyName            = emp.Department.Company.CompanyName;
                            payrunReconEmpDDSRow.getCompanyAddress         = emp.Department.Company.CompanyLocations[0].Location.LocationName;
                            payrunReconEmpDDSRow.getEmployeeReferenceId    = emp.GetReferenceId;
                            payrunReconEmpDDSRow.getEmployeeName           = emp.Name;
                            payrunReconEmpDDSRow.getEmployeeDepartmentName = emp.Department.Name;
                            payrunReconEmpDDSRow.getEmployeePositionTitle  = emp.Position.Title;

                            if (both)
                            {
                                List <(PayrunAllowanceSummary_Dto fromAllowance, PayrunAllowanceSummary_Dto toAllowance)> allowancesReconDetails = new List <(PayrunAllowanceSummary_Dto fromAllowance, PayrunAllowanceSummary_Dto toAllowance)>();

                                var toAllowancesExplicits = toD.PayrunAllowancesSummaries.Where(x => !fromD.PayrunAllowancesSummaries.Any(x1 => x1.AllowanceTypeId == x.AllowanceTypeId))
                                                            .Select(x => { return((PayrunAllowanceSummary_Dto)null, x); });

                                allowancesReconDetails.AddRange(toAllowancesExplicits);
                                allowancesReconDetails.AddRange(fromD.PayrunAllowancesSummaries.Select(x =>
                                {
                                    if (toD.PayrunAllowancesSummaries.Any(x1 => x1.AllowanceTypeId == x.AllowanceTypeId))
                                    {
                                        return(x, toD.PayrunAllowancesSummaries.First(x1 => x1.AllowanceTypeId == x.AllowanceTypeId));
                                    }
                                    else
                                    {
                                        return(x, null);
                                    }
                                }));

                                decimal bsDiffValue = (toD.BasicSalary - fromD.BasicSalary);
                                string  bsDiff      = bsDiffValue < 0? $"({Math.Abs(bsDiffValue).ToString("N2")})" : bsDiffValue.ToString("N2");
                                DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"basicSalary", bsDiff);

                                if (bsDiffValue > 0)
                                {
                                    payrunReconEmpDDSRow.category = "Increment";
                                    var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                    payrunReconSummaryDynamicDS.Add(cloned);;
                                    payrunReconEmpDDSRow.category = "⁠";
                                }
                                else if (bsDiffValue < 0)
                                {
                                    payrunReconEmpDDSRow.category = "Deduction";
                                    var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                    payrunReconSummaryDynamicDS.Add(cloned);
                                    payrunReconEmpDDSRow.category = "⁠";
                                }
                                payrunReconEmpDDSRow.basicSalary = "⁠—";

                                for (int j = 0; j < allowancesReconDetails.Count; j++)
                                {
                                    PayrunAllowanceSummary_Dto fromAllowance = allowancesReconDetails[j].fromAllowance;
                                    PayrunAllowanceSummary_Dto toAllowance   = allowancesReconDetails[j].toAllowance;

                                    bool isFromDAllowance = fromAllowance != null;
                                    bool isToDAllowance   = toAllowance != null;
                                    bool bothAllowance    = isFromDAllowance && isToDAllowance;

                                    if (bothAllowance)
                                    {
                                        DictionaryValue_Dto allowance = fromAllowance.AllowanceType;
                                        string camelCaseName          = allowance.Value;
                                        camelCaseName = camelCaseName.Replace(" ", "");
                                        camelCaseName = char.ToLowerInvariant(camelCaseName[0]) + camelCaseName.Substring(1);

                                        double difference = (double)(toAllowance.Value - fromAllowance.Value);
                                        string difValue   = difference >= 0 ? difference.ToString("N2") : $"({Math.Abs(difference).ToString("N2")})";

                                        DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value", difValue);

                                        if (difference > 0)
                                        {
                                            payrunReconEmpDDSRow.category = $"{allowance.Value} Increased";
                                            var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                            payrunReconSummaryDynamicDS.Add(cloned);
                                            DynamicHelper.RemoveProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value");
                                            payrunReconEmpDDSRow.category = "⁠";
                                        }
                                        else if (difference < 0)
                                        {
                                            payrunReconEmpDDSRow.category = $"{allowance.Value} Decreased";
                                            var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                            payrunReconSummaryDynamicDS.Add(cloned);
                                            DynamicHelper.RemoveProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value");
                                            payrunReconEmpDDSRow.category = "⁠";
                                        }
                                    }
                                    else
                                    {
                                        if (isFromDAllowance)
                                        {
                                            DictionaryValue_Dto allowance = fromAllowance.AllowanceType;
                                            string camelCaseName          = allowance.Value;
                                            camelCaseName = camelCaseName.Replace(" ", "");
                                            camelCaseName = char.ToLowerInvariant(camelCaseName[0]) + camelCaseName.Substring(1);

                                            double allowanceValue = (double)fromAllowance.Value;
                                            string value          = $"({allowanceValue.ToString("N2")})";

                                            DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value", value);
                                            payrunReconEmpDDSRow.category = $"{allowance.Value} Removed";
                                            var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                            payrunReconSummaryDynamicDS.Add(cloned);
                                            DynamicHelper.RemoveProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value");
                                            payrunReconEmpDDSRow.category = "⁠";
                                        }
                                        else if (isToDAllowance)
                                        {
                                            DictionaryValue_Dto allowance = toAllowance.AllowanceType;
                                            string camelCaseName          = allowance.Value;
                                            camelCaseName = camelCaseName.Replace(" ", "");
                                            camelCaseName = char.ToLowerInvariant(camelCaseName[0]) + camelCaseName.Substring(1);

                                            double allowanceValue = (double)toAllowance.Value;
                                            string value          = allowanceValue >= 0 ? allowanceValue.ToString("N2") : $"({allowanceValue.ToString("N2")})";

                                            DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value", value);
                                            payrunReconEmpDDSRow.category = $"{allowance.Value} Added";
                                            var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                            payrunReconSummaryDynamicDS.Add(cloned);
                                            DynamicHelper.RemoveProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value");
                                            payrunReconEmpDDSRow.category = "⁠";
                                        }
                                    }
                                }
                                payrunReconEmpDDSRow.grossEarnings = toD.GrossEarnings - fromD.GrossEarnings;

                                decimal gosiDiffValue = (toD.GOSIAmount - fromD.GOSIAmount);
                                payrunReconEmpDDSRow.gosiValue = gosiDiffValue > 0? gosiDiffValue.ToString("N2") : $"({Math.Abs(gosiDiffValue).ToString("N2")})";
                                if (gosiDiffValue != 0)
                                {
                                    payrunReconEmpDDSRow.category = gosiDiffValue > 0? "GOSI Increased" : "GOSI Decreased";
                                    var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                    payrunReconSummaryDynamicDS.Add(cloned);
                                    payrunReconEmpDDSRow.gosiValue = "—";
                                    payrunReconEmpDDSRow.category  = "⁠";
                                }

                                decimal loansDiffValue = (toD.Loan - fromD.Loan);
                                payrunReconEmpDDSRow.loansValue = loansDiffValue > 0? loansDiffValue.ToString("N2") : $"({Math.Abs(loansDiffValue).ToString("N2")})";
                                if (loansDiffValue != 0)
                                {
                                    payrunReconEmpDDSRow.category = loansDiffValue > 0? "Loans Increased" : "Loans Decreased";
                                    var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                    payrunReconSummaryDynamicDS.Add(cloned);
                                    payrunReconEmpDDSRow.gosiValue = "—";
                                    payrunReconEmpDDSRow.category  = "⁠";
                                }
                                decimal leavesDiffValue = (toD.Leaves - fromD.Leaves);
                                payrunReconEmpDDSRow.leavesValue = leavesDiffValue > 0? leavesDiffValue.ToString("N2") : $"({Math.Abs(leavesDiffValue).ToString("N2")})";
                                if (loansDiffValue != 0)
                                {
                                    payrunReconEmpDDSRow.category = leavesDiffValue > 0? "Leaves Increased" : "Leaves Decreased";
                                    var cloned = JsonConvert.DeserializeObject <dynamic>(JsonConvert.SerializeObject(payrunReconEmpDDSRow));
                                    payrunReconSummaryDynamicDS.Add(cloned);
                                    payrunReconEmpDDSRow.gosiValue = "—";
                                    payrunReconEmpDDSRow.category  = "⁠";
                                }

                                payrunReconEmpDDSRow.grossDeduction = toD.GrossDeductions - fromD.GrossDeductions;

                                payrunReconEmpDDSRow.netAmount = (payrunReconEmpDDSRow.grossEarnings - payrunReconEmpDDSRow.grossDeduction).ToString("N2");
                            }
                            else
                            {
                                if (isFromD)
                                {
                                    string bs = fromD.BasicSalary.ToString("N2");
                                    DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"basicSalary", bs);
                                    var fromAllowances = fromD.PayrunAllowancesSummaries.ToList();
                                    for (int j = 0; j < fromAllowances.Count; j++)
                                    {
                                        PayrunAllowanceSummary_Dto fromAllowance = fromAllowances[i];

                                        DictionaryValue_Dto allowance = fromAllowance.AllowanceType;
                                        string camelCaseName          = allowance.Value;
                                        camelCaseName = camelCaseName.Replace(" ", "");
                                        camelCaseName = char.ToLowerInvariant(camelCaseName[0]) + camelCaseName.Substring(1);

                                        double allowanceValue = (double)fromAllowance.Value;
                                        string value          = allowanceValue > 0 ? allowanceValue.ToString("N2") : $"({allowanceValue.ToString("N2")})";

                                        DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value", value);
                                    }
                                    payrunReconEmpDDSRow.grossEarnings = fromD.GrossEarnings;

                                    payrunReconEmpDDSRow.gosiValue   = fromD.GOSIAmount;
                                    payrunReconEmpDDSRow.loansValue  = fromD.Loan;
                                    payrunReconEmpDDSRow.leavesValue = fromD.Leaves;

                                    payrunReconEmpDDSRow.grossDeduction = fromD.GrossDeductions;

                                    payrunReconEmpDDSRow.netAmount = (payrunReconEmpDDSRow.grossEarnings - payrunReconEmpDDSRow.grossDeduction).ToString("N2");

                                    payrunReconEmpDDSRow.category = "Left";
                                    payrunReconSummaryDynamicDS.Add(payrunReconEmpDDSRow);
                                    payrunReconEmpDDSRow.category = "⁠";
                                }
                                else if (isToD)
                                {
                                    string bs = toD.BasicSalary.ToString("N2");
                                    DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"basicSalary", bs);
                                    var toAllowances = toD.PayrunAllowancesSummaries.ToList();
                                    for (int j = 0; j < toAllowances.Count; j++)
                                    {
                                        PayrunAllowanceSummary_Dto toAllowance = toAllowances[i];

                                        DictionaryValue_Dto allowance = toAllowance.AllowanceType;
                                        string camelCaseName          = allowance.Value;
                                        camelCaseName = camelCaseName.Replace(" ", "");
                                        camelCaseName = char.ToLowerInvariant(camelCaseName[0]) + camelCaseName.Substring(1);

                                        double allowanceValue = (double)toAllowance.Value;
                                        string value          = allowanceValue > 0 ? allowanceValue.ToString("N2") : $"({allowanceValue.ToString("N2")})";

                                        DynamicHelper.AddProperty(payrunReconEmpDDSRow, $"{camelCaseName}_Value", value);
                                    }
                                    payrunReconEmpDDSRow.grossEarnings = toD.GrossEarnings;

                                    payrunReconEmpDDSRow.gosiValue   = toD.GOSIAmount;
                                    payrunReconEmpDDSRow.loansValue  = toD.Loan;
                                    payrunReconEmpDDSRow.leavesValue = toD.Leaves;

                                    payrunReconEmpDDSRow.grossDeduction = toD.GrossDeductions;

                                    payrunReconEmpDDSRow.netAmount = (payrunReconEmpDDSRow.grossEarnings - payrunReconEmpDDSRow.grossDeduction).ToString("N2");

                                    payrunReconEmpDDSRow.category = "New Employee";
                                    payrunReconSummaryDynamicDS.Add(payrunReconEmpDDSRow);
                                    payrunReconEmpDDSRow.category = "⁠";
                                }
                            }
                        }

                        //if(payrunReconEmpDDSRow.netAmount != "0.00")
                        //    payrunReconSummaryDynamicDS.Add(payrunReconEmpDDSRow);
                    }

                    if (!isAjax)
                    {
                        ViewData["Payruns_DS"] = JsonSerializer.Serialize(payrunReconSummaryDynamicDS);
                        return(Page());
                    }
                    else
                    {
                        return(new JsonResult(payrunReconSummaryDynamicDS));
                    }
                }
                else
                {
                    return(BadRequest(new { type = "payrun" }));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(new { type = "exception" }));
            }
        }
Esempio n. 3
0
        public async Task <ApprovalRouteTemplate> ProcessApprovalRoutesUpdate(ApprovalRouteViewModelBase VM, ApprovalRouteTemplate _approvalRouteTemplate)
        {
            ApprovalRouteTemplate resultApprovalRouteTemplate = _approvalRouteTemplate;

            List <ApprovalRouteVM>           vmApprovalRouteTemplateItems = VM.ApprovalRoute;
            ApprovalRouteTemplate            approvalRouteTemplate        = _approvalRouteTemplate;
            List <ApprovalRouteTemplateItem> approvalRouteTemplateItems   = approvalRouteTemplate.ApprovalRouteTemplateItems.ToList();

            List <ApprovalRouteTemplateItem>         toUpdateAPItems                = new List <ApprovalRouteTemplateItem>();
            List <TaskTemplateItem>                  toUpdateAPTaskItems            = new List <TaskTemplateItem>();
            List <ApprovalRouteTemplate>             toDeleteApprovalRouteTemplates = new List <ApprovalRouteTemplate>();
            List <ApprovalRouteTemplateItemEmployee> toDeleteAPEmployeeItems        = new List <ApprovalRouteTemplateItemEmployee>();
            List <TaskTemplate>             toDeleteAPTaskTemplates     = new List <TaskTemplate>();
            List <TaskTemplateItem>         toDeleteAPTaskItems         = new List <TaskTemplateItem>();
            List <TaskTemplateItemEmployee> toDeleteAPTaskEmployeeItems = new List <TaskTemplateItemEmployee>();

            for (int i = 0; i < vmApprovalRouteTemplateItems.Count; i++)
            {
                ApprovalRouteVM cur = vmApprovalRouteTemplateItems[i];
                //int curId = -1;
                //int.TryParse(cur.Id, out curId);
                if (!approvalRouteTemplateItems.Any(x => x.Id.ToString() == cur.Id))
                {
                    ApprovalRouteTemplateItem approvalRouteTemplateItem = new ApprovalRouteTemplateItem();

                    approvalRouteTemplateItem.Active = cur.Active;

                    if (cur.IsDepartmentHead)
                    {
                        approvalRouteTemplateItem.IsDepartmentHead = true;
                    }
                    else if (cur.IsReportingTo)
                    {
                        approvalRouteTemplateItem.IsReportingTo = true;
                    }
                    else
                    {
                        approvalRouteTemplateItem.IsDepartmentHead = false;
                        approvalRouteTemplateItem.IsReportingTo    = false;

                        approvalRouteTemplateItem.ApprovalRouteItemEmployees = new List <ApprovalRouteTemplateItemEmployee>();
                        for (int y = 0; y < cur.EmployeeIds.Length; y++)
                        {
                            ApprovalRouteTemplateItemEmployee approvalRouteTemplateItemEmployee = new ApprovalRouteTemplateItemEmployee();
                            approvalRouteTemplateItemEmployee.EmployeeId = cur.EmployeeIds[y].Value;

                            approvalRouteTemplateItem.ApprovalRouteItemEmployees.Add(approvalRouteTemplateItemEmployee);
                        }

                        TaskTemplate apItemTaskTemplate = new TaskTemplate();
                        apItemTaskTemplate.TaskModule        = TaskModule.LeaveRequest;
                        apItemTaskTemplate.TaskTemplateItems = new List <TaskTemplateItem>();
                        for (int y = 0; y < cur.TaskTemplate.TaskTemplateItems.Count; y++)
                        {
                            LRTaskVM         lRTaskVM         = cur.TaskTemplate.TaskTemplateItems[y];
                            TaskTemplateItem taskTemplateItem = new TaskTemplateItem();

                            taskTemplateItem.Active          = lRTaskVM.Active;
                            taskTemplateItem.TaskDescription = lRTaskVM.TaskDescription;

                            taskTemplateItem.TaskEmployees = new List <TaskTemplateItemEmployee>();
                            for (int z = 0; z < lRTaskVM.EmployeeIds.Length; z++)
                            {
                                TaskTemplateItemEmployee taskTemplateItemEmployee = new TaskTemplateItemEmployee();
                                taskTemplateItemEmployee.EmployeeId = lRTaskVM.EmployeeIds[z].Value;

                                taskTemplateItem.TaskEmployees.Add(taskTemplateItemEmployee);
                            }

                            taskTemplateItem.RouteIndex     = y + 1;
                            taskTemplateItem.IsAny          = lRTaskVM.IsAny;
                            taskTemplateItem.NotifyEmployee = lRTaskVM.NotifyEmployee;

                            apItemTaskTemplate.TaskTemplateItems.Add(taskTemplateItem);
                        }

                        approvalRouteTemplateItem.TaskTemplate = apItemTaskTemplate;
                    }

                    approvalRouteTemplateItem.RouteIndex = i + 1;

                    approvalRouteTemplateItem.IsAny          = cur.IsAny;
                    approvalRouteTemplateItem.NotifyEmployee = cur.NotifyEmployee;
                    approvalRouteTemplateItem.IsPoster       = cur.IsPoster;

                    resultApprovalRouteTemplate.ApprovalRouteTemplateItems.Add(approvalRouteTemplateItem);
                }
                else
                {
                    resultApprovalRouteTemplate.ApprovalRouteModule = ApprovalRouteModule.LeaveRequest;

                    ApprovalRouteTemplateItem item = resultApprovalRouteTemplate.ApprovalRouteTemplateItems.First(x => x.Id.ToString() == cur.Id);

                    item.Active     = cur.Active;
                    item.RouteIndex = i + 1;

                    item.IsAny          = cur.IsAny;
                    item.NotifyEmployee = cur.NotifyEmployee;
                    item.IsPoster       = cur.IsPoster;

                    List <Employee_Dto> vmApprovalRouteEmployees = cur.ApprovalRouteItemEmployees.Select(x => x.Employee).ToList();
                    List <ApprovalRouteTemplateItemEmployee> approvalRouteEmployees = item.ApprovalRouteItemEmployees.ToList();
                    for (int j = 0; j < vmApprovalRouteEmployees.Count; j++)
                    {
                        Employee_Dto curVMEMployee = vmApprovalRouteEmployees[j];
                        if (!approvalRouteEmployees.Any(x => x.EmployeeId == curVMEMployee.Id) && curVMEMployee.Id != Guid.Empty)
                        {
                            ApprovalRouteTemplateItemEmployee approvalRouteTemplateItemEmployee = new ApprovalRouteTemplateItemEmployee();
                            approvalRouteTemplateItemEmployee.EmployeeId = curVMEMployee.Id;

                            item.ApprovalRouteItemEmployees.Add(approvalRouteTemplateItemEmployee);
                        }
                    }
                    for (int j = 0; j < approvalRouteEmployees.Count; j++)
                    {
                        ApprovalRouteTemplateItemEmployee curItemEmp = approvalRouteEmployees[j];
                        if (!cur.EmployeeIds.Any(x => x == curItemEmp.EmployeeId))
                        {
                            item.ApprovalRouteItemEmployees.Remove(curItemEmp);
                            toDeleteAPEmployeeItems.Add(curItemEmp);
                        }
                        //toDeleteAPEmployeeItems = new List<ApprovalRouteTemplateItemEmployee>();
                    }

                    if (item.TaskTemplate != null)
                    {
                        TaskTemplate apItemTaskTemplate = item.TaskTemplate;
                        apItemTaskTemplate.TaskModule = TaskModule.LeaveRequest;
                        List <LRTaskVM>         vmAPTaskTemplateItems = cur.TaskTemplate.TaskTemplateItems;
                        List <TaskTemplateItem> apTaskTemplateItems   = apItemTaskTemplate.TaskTemplateItems.ToList();
                        for (int y = 0; y < vmAPTaskTemplateItems.Count; y++)
                        {
                            LRTaskVM vmAPTaskTemplateItem   = vmAPTaskTemplateItems[y];
                            int      vmAPTaskTemplateItemId = -1;
                            int.TryParse(vmAPTaskTemplateItem.Id, out vmAPTaskTemplateItemId);
                            if (!apTaskTemplateItems.Any(x => x.Id == vmAPTaskTemplateItemId))
                            {
                                TaskTemplateItem apTaskTemplateItem = new TaskTemplateItem();

                                apTaskTemplateItem.Active          = vmAPTaskTemplateItem.Active;
                                apTaskTemplateItem.TaskDescription = vmAPTaskTemplateItem.TaskDescription;

                                apTaskTemplateItem.TaskEmployees = new List <TaskTemplateItemEmployee>();
                                for (int z = 0; z < vmAPTaskTemplateItem.EmployeeIds.Length; z++)
                                {
                                    TaskTemplateItemEmployee taskTemplateItemEmployee = new TaskTemplateItemEmployee();
                                    taskTemplateItemEmployee.EmployeeId = vmAPTaskTemplateItem.EmployeeIds[z].Value;
                                }

                                apTaskTemplateItem.RouteIndex = y + 1;

                                apTaskTemplateItem.IsAny          = vmAPTaskTemplateItem.IsAny;
                                apTaskTemplateItem.NotifyEmployee = vmAPTaskTemplateItem.NotifyEmployee;

                                item.TaskTemplate.TaskTemplateItems.Add(apTaskTemplateItem);
                            }
                            else
                            {
                                TaskTemplateItem taskTemplateItem = apTaskTemplateItems.First(x => x.Id == vmAPTaskTemplateItemId);

                                taskTemplateItem.Active          = vmAPTaskTemplateItem.Active;
                                taskTemplateItem.TaskDescription = vmAPTaskTemplateItem.TaskDescription;

                                taskTemplateItem.RouteIndex = y + 1;

                                taskTemplateItem.IsAny          = vmAPTaskTemplateItem.IsAny;
                                taskTemplateItem.NotifyEmployee = vmAPTaskTemplateItem.NotifyEmployee;

                                toUpdateAPTaskItems.Add(taskTemplateItem);
                            }
                        }
                        if (vmAPTaskTemplateItems.Count == 0 && apTaskTemplateItems.Count > 0)
                        {
                            toDeleteAPTaskTemplates.Add(apItemTaskTemplate);
                        }
                        else
                        {
                            for (int y = 0; y < apTaskTemplateItems.Count; y++)
                            {
                                TaskTemplateItem curAPTaskItem = apTaskTemplateItems[y];
                                if (!vmAPTaskTemplateItems.Any(x => x.Id == curAPTaskItem.Id.ToString()))
                                {
                                    item.TaskTemplate.TaskTemplateItems.Remove(curAPTaskItem);
                                    toDeleteAPTaskItems.Add(curAPTaskItem);
                                }
                            }
                        }
                    }
                    toUpdateAPItems.Add(item);
                }
            }

            List <ApprovalRouteTemplateItem> toDeleteAPItems = new List <ApprovalRouteTemplateItem>();

            if (vmApprovalRouteTemplateItems.Count == 0 && approvalRouteTemplateItems.Count > 0)
            {
                toDeleteApprovalRouteTemplates.Add(approvalRouteTemplate);
            }
            else
            {
                for (int i = 0; i < approvalRouteTemplateItems.Count; i++)
                {
                    ApprovalRouteTemplateItem cur = approvalRouteTemplateItems[i];
                    if (!vmApprovalRouteTemplateItems.Any(x => x.Id == cur.Id.ToString()))
                    {
                        resultApprovalRouteTemplate.ApprovalRouteTemplateItems.Remove(cur);
                        toDeleteAPTaskTemplates.Add(cur.TaskTemplate);
                        toDeleteAPItems.Add(cur);
                    }
                }
            }

            for (int i = 0; i < toDeleteAPEmployeeItems.Count; i++)
            {
                await ApprovalRouteTemplateItemsAppService.EmployeesRepository.DeleteAsync(x => x.EmployeeId == toDeleteAPEmployeeItems[i].EmployeeId);
            }

            for (int i = 0; i < toDeleteApprovalRouteTemplates.Count; i++)
            {
                await ApprovalRouteTemplatesAppService.Repository.DeleteAsync(toDeleteApprovalRouteTemplates[i].Id);
            }

            for (int i = 0; i < toDeleteAPTaskEmployeeItems.Count; i++)
            {
                await TaskTemplatesAppService.EmployeesRepository.DeleteAsync(x => x.EmployeeId == toDeleteAPTaskEmployeeItems[i].EmployeeId);
            }

            for (int i = 0; i < toDeleteAPTaskItems.Count; i++)
            {
                await TaskTemplatesAppService.ItemsRepository.DeleteAsync(toDeleteAPTaskItems[i]);
            }


            for (int i = 0; i < toUpdateAPTaskItems.Count; i++)
            {
                await TaskTemplatesAppService.ItemsRepository.UpdateAsync(toUpdateAPTaskItems[i]);
            }

            for (int i = 0; i < toDeleteAPItems.Count; i++)
            {
                await ApprovalRouteTemplateItemsAppService.Repository.DeleteAsync(toDeleteAPItems[i]);
            }

            for (int i = 0; i < toDeleteAPTaskTemplates.Count; i++)
            {
                await TaskTemplatesAppService.Repository.DeleteAsync(toDeleteAPTaskTemplates[i].Id);
            }

            for (int i = 0; i < toUpdateAPItems.Count; i++)
            {
                await ApprovalRouteTemplateItemsAppService.Repository.UpdateAsync(toUpdateAPItems[i]);
            }

            return(resultApprovalRouteTemplate);
        }