Exemplo n.º 1
0
        public async Task CurrentShift()
        {
            var ordersFulfilled = await _orderCarWashWorkers.SampleForPayroll(DateTime.Now);

            var DayClose = await _dayResult.DayResultViewInfo();

            OrderCarWashWorkersBll orderCarWashWorkers = new OrderCarWashWorkersBll();

            foreach (var itemShift in DayClose)
            {
                var resultShift = ordersFulfilled.Where(x => x.IdCarWashWorkers == itemShift.carWashWorkersId);

                foreach (var itemOrder in resultShift)
                {
                    orderCarWashWorkers.Id                = itemOrder.Id;
                    orderCarWashWorkers.IdOrder           = itemOrder.IdOrder;
                    orderCarWashWorkers.IdCarWashWorkers  = itemOrder.IdCarWashWorkers;
                    orderCarWashWorkers.CalculationStatus = false;
                    orderCarWashWorkers.Payroll           = itemOrder.Payroll;
                    orderCarWashWorkers.closedDayStatus   = true;
                    orderCarWashWorkers.typeServicesId    = itemOrder.typeServicesId;

                    await _orderCarWashWorkers.UpdateOrderCarWashWorkers(orderCarWashWorkers);
                }

                var resultCarWashWorkers = await _carWashWorkers.CarWashWorkersId(itemShift.carWashWorkersId);

                var InterestRate = (double)resultCarWashWorkers.InterestRate.Value / 100;

                if (resultCarWashWorkers.IdPosition >= 3)
                {
                    await _bonusModules.PremiumAccrual(itemShift.carWashWorkersId, itemShift.payroll.Value / InterestRate);
                }
                else
                {
                    var bonusAdmin = await _orderCarWashWorkers.SampleForPayroll(itemShift.carWashWorkersId, DateTime.Now);

                    var test1 = bonusAdmin.Where(x => x.typeServicesId == 4).Sum(s => s.Payroll);
                    var test2 = bonusAdmin.Where(x => x.typeServicesId == 6).Sum(s => s.Payroll);
                    var test3 = bonusAdmin.Where(x => x.typeServicesId == 8).Sum(s => s.Payroll);
                    var test4 = bonusAdmin.Where(x => x.typeServicesId == 10).Sum(s => s.Payroll);

                    var result = test1 + test2 + test3 + test4;

                    // await _bonusModules.PremiumAccrual(itemShift.carWashWorkersId, itemShift.payroll.Value / InterestRate);
                    await _bonusModules.PremiumAccrual(itemShift.carWashWorkersId, result.Value / InterestRate);
                }
            }
        }
Exemplo n.º 2
0
        public List <OrderServicesCarWashBll> TotalSalaryForToday(int IdCarWashWorkers, int InterestRate)
        {
            var CompletedWork = _orderCarWash.SampleForPayroll(IdCarWashWorkers);

            List <int> idOrder = new List <int>();

            foreach (var x in CompletedWork)
            {
                idOrder.Add(x.IdOrder.Value);
            }

            var allOrder = Mapper.Map <IEnumerable <OrderServicesCarWashBll> >(_unitOfWork.orderUnitiOfWork.QueryObjectGraph(x => idOrder.Contains(x.Id)));

            foreach (var x in allOrder)
            {
                orders.Add(new OrderServicesCarWashBll
                {
                    Id = x.Id,
                    IdClientsOfCarWash     = x.IdClientsOfCarWash,
                    OrderDate              = x.OrderDate,
                    ClosingData            = x.ClosingData,
                    DiscountPrice          = x.DiscountPrice,
                    TotalCostOfAllServices = PercentageOfOrder(InterestRate, x.DiscountPrice)
                });
            }

            return(orders);
        }
        public async Task CloseShift(int idPositionServises)
        {
            var position = await _position.ChoiceEmployees(idPositionServises);

            var ordersFulfilled = await _orderCarWashWorkers.SampleForPayroll(DateTime.Now);

            List <EmployeeDaySummary> employeeDaySummaryList = new List <EmployeeDaySummary>();

            foreach (var item in ordersFulfilled.GroupBy(g => g.IdCarWashWorkers))
            {
                var completedEmployeeOrders = ordersFulfilled.Where(x => x.IdCarWashWorkers == item.Key);
                var employees = await _premiumAndRate.SelectPosition(item.Key);

                List <EmployeeDaySummary> bonusList = new List <EmployeeDaySummary>();

                foreach (var positionItem in position)
                {
                    var resultEmployee = employees.SingleOrDefault(x =>
                                                                   x.positionId == positionItem.idPosition);

                    if (resultEmployee.servicePremium)
                    {
                        double sum = completedEmployeeOrders
                                     .Where(x => x.typeServicesId == positionItem.idPosition)
                                     .Sum(s => s.Payroll).Value;

                        bonusList.Add(new EmployeeDaySummary
                        {
                            carWashWorkersId = item.Key,
                            SumOrder         = sum,
                            percent          = resultEmployee.multiplicityOfTheSum.Value,
                            prizeAmount      = resultEmployee.prizeAmount
                        });
                    }
                }

                double prizeAmiutSum = bonusList.Sum(x => x.prizeAmount.Value);
                double percentSum    = bonusList.Sum(x => x.percent.Value);
                double orderSum      = bonusList.Sum(x => x.SumOrder.Value);
                int    countServeses = bonusList.Count();

                double averagePrize   = Average(prizeAmiutSum, countServeses);
                double averagePercent = Average(percentSum, countServeses);

                double bonusResult = MathFloor(orderSum, averagePercent);

                if (bonusResult > 0)
                {
                    BonusToSalaryBll bonusToSalary = new BonusToSalaryBll();

                    bonusToSalary.amount           = bonusResult * averagePrize;
                    bonusToSalary.carWashWorkersId = item.Key;
                    bonusToSalary.date             = DateTime.Now;
                    await InsertTableBonus(bonusToSalary);
                }
            }
        }
 public async Task <IEnumerable <WagesForDaysWorkedBll> > DayOrderResult(int?Id) =>
 GroupOrderCarWashWorkers(await _orderCarWash.SampleForPayroll(Id));