private string getFormula(EmployeeServiceWork order, IUnitOfWork uow) { IList <EmployeeCoeff> listEmployeeCoeffs; listEmployeeCoeffs = uow.Session.QueryOver <EmployeeCoeff>().Where(x => x.Employee == order.Employee).List(); var formulaName = uow.Session.QueryOver <Domain.SalaryFormulas>().Where(x => x.Service.Id == order.WorkOrderPay.Service.Id).List() .FirstOrDefault(x => x.Service.Id == order.WorkOrderPay.Service.Id).Formula; string str = "СУММ СУММА SUM сумм сумма sum Сумм Сумма Sum"; foreach (var coef in listEmployeeCoeffs) { if (str.Contains(coef.Coeff.Name)) { continue; } if (formulaName.Contains(coef.Coeff.Name)) { formulaName = formulaName.Replace(coef.Coeff.Name, coef.Value); } } var listCoeff = uow.Session.QueryOver <Coefficients>().List(); foreach (var coeff in listCoeff) { if (str.Contains(coeff.Name)) { continue; } if (formulaName.Contains(coeff.Name)) { formulaName = formulaName.Replace(coeff.Name, "1"); } } return(formulaName); }
public void Calculate(DateTime start, DateTime end) { listEmployeeServiceSalaries.Clear(); using (IUnitOfWork uow = UnitOfWorkFactory.CreateWithoutRoot()) { EmployeeServiceWork employeeServiceWork = null; IList <EmployeeServiceWork> listEmployeeServiceWork; var listServiceDontCalculate = uow.Session.QueryOver <Service>().Where(x => x.ListServiceOrderType != null).List().Where(x => x.ListServiceOrderType.Count > 0).ToList() .Where(x => x.ListServiceOrderType[0].OrderTypeClass.IsCalculateSalary).ToList(); listEmployeeServiceWork = uow.Session.QueryOver <EmployeeServiceWork>(() => employeeServiceWork).Where(x => x.DateWork >= start && x.DateWork <= end).List(); if (listServiceDontCalculate != null) { listEmployeeServiceWork = listEmployeeServiceWork.Where(x => listServiceDontCalculate.Contains(x.WorkOrderPay.Service)).ToList(); } if (!checkServiceFormulas(listEmployeeServiceWork, uow)) { MessageDialogWorks.RunWarningDialog("Не для всех услуг указаны формулы расчета."); return; } foreach (var order in listEmployeeServiceWork) { EmployeeServiceSalary employeeServiceSalary = listEmployeeServiceSalaries.FirstOrDefault(x => x.Employee.Id == order.Employee.Id); if (employeeServiceSalary != null) { WorkOrderPay workOrderPay = uow.GetById <WorkOrderPay>(order.WorkOrderPay.Id); var employeeServiceWorkType = employeeServiceSalary.listEmployeeSalarySirviceType.FirstOrDefault(x => x.Service.Id == workOrderPay.Service.Id); if (employeeServiceWorkType != null) { foreach (var emp in listEmployeeServiceSalaries) { if (emp.Employee == order.Employee) { foreach (var service in emp.listEmployeeSalarySirviceType) { if (service.Service == order.WorkOrderPay.Service) { service.listCost.Add(getCost(order, listEmployeeServiceWork)); } } } } } else { EmployeeSalaryServiceType empServiceType = new EmployeeSalaryServiceType(order.WorkOrderPay.Service); empServiceType.listCost.Add(getCost(order, listEmployeeServiceWork)); empServiceType.Formula = getFormula(order, uow); foreach (var emp in listEmployeeServiceSalaries) { if (emp.Employee == order.Employee) { emp.listEmployeeSalarySirviceType.Add(empServiceType); } } } } else { Employee emp = uow.GetById <Employee>(order.Employee.Id); EmployeeServiceSalary empServiceSalary = new EmployeeServiceSalary(order.Employee); EmployeeSalaryServiceType empServiceType = new EmployeeSalaryServiceType(order.WorkOrderPay.Service); empServiceType.listCost.Add(getCost(order, listEmployeeServiceWork)); empServiceType.Formula = getFormula(order, uow); empServiceSalary.listEmployeeSalarySirviceType.Add(empServiceType); var r = empServiceType.SummaAfterFormula; listEmployeeServiceSalaries.Add(empServiceSalary); } } setData(); foreach (var row in listEmployeeServiceSalaries) { foreach (var service in row.listEmployeeSalarySirviceType) { service.Calculation(); } row.getAllSumma(); } } }
private decimal getCost(EmployeeServiceWork order, IList <EmployeeServiceWork> listEmployeeServiceWork) { var col = listEmployeeServiceWork.Where(x => x.WorkOrderPay == order.WorkOrderPay).ToList().Count(); return(order.WorkOrderPay.Cost / col); }