Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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();
                }
            }
        }
Exemplo n.º 3
0
        private decimal getCost(EmployeeServiceWork order, IList <EmployeeServiceWork> listEmployeeServiceWork)
        {
            var col = listEmployeeServiceWork.Where(x => x.WorkOrderPay == order.WorkOrderPay).ToList().Count();

            return(order.WorkOrderPay.Cost / col);
        }