diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 2a04c722..1c49bd39 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -863,7 +863,7 @@ public class CheckoutApplication : ICheckoutApplication if (!getContractsData.IsSuccedded) { - signalR.SendAsync("StartProcessingFailed", getContractsData.Message); + await signalR.SendAsync("StartProcessingFailed", getContractsData.Message); return op.Failed(getContractsData.Message); } @@ -874,604 +874,613 @@ public class CheckoutApplication : ICheckoutApplication foreach (var item in getContractsData.Data.ContractIncludedData) { - //آیا کل مرخصی به ساعت کاراضافه شود؟ - bool totalLeaveCompute = false; - //آیا غیبت محاسبه شود؟ - bool abcenseDeductionCompute = false; - switch (item.ComputeOption) + try { - case "OnEndOfYear": - var endOfYearCheckout = item.Separation.ContractEnd.Substring(5, 2); - - totalLeaveCompute = true; - abcenseDeductionCompute = item.Separation.HasLeft || endOfYearCheckout == "12"; - break; - case "OnLeftWork": - - totalLeaveCompute = true; - abcenseDeductionCompute = item.Separation.HasLeft; - break; - case "OnEndOfContract": - var startMonth = item.ContractStart.Substring(5, 2); - var endMonth = item.ContractEnd.Substring(5, 2); - - totalLeaveCompute = startMonth != endMonth; - abcenseDeductionCompute = (startMonth != endMonth && item.Separation.HasLeft) || (startMonth != endMonth && item.ContractEndGr == item.Separation.ContractEndGr); - break; - } - - - //دستمزد روزانه بدون تاثیر ساعت کار - #region DailyWageCompute - - var contract = new EditContract() - { - ContractStartGr = item.ContractStartGr, - ContractEndGr = item.ContractEndGr, - DailySalaryUnAffected = item.DailySalaryUnAffected, - DailyWageType = item.DailyWageType, - ContarctStart = item.ContractStart, - ContractEnd = item.ContractEnd, - GetWorkDate = item.FirstGetWorkingDay, - GetWorkDateHide = item.FirstGetWorkingDay, - - }; - - //دستمزد روزانه بدون تاثیر ساعت کار - var dailyWageUnAffected = await _yearlySalaryRepository.GetCheckoutDailyWage(contract, - item.Separation.ContractStartGr, item.Separation.ContractEndGr); - - #endregion - - - - - var hasRollCall = await _rollCallEmployeeRepository.HasRollCallRecord(item.EmployeeId, workshopId, item.Separation.ContractStartGr, item.Separation.ContractEndGr); - if (getContractsData.Data.IsStaticCheckout) - hasRollCall = false; - - //محاسبه موظفی - #region MandatoryCompute - var mandatoryCompute = new ComputingViewModel(); - - item.WorkingHours.ContractStartGr = item.Separation.ContractStartGr; - item.WorkingHours.ContractEndGr = item.Separation.ContractEndGr; - item.WorkingHours.ContarctStart = item.Separation.ContarctStart; - item.WorkingHours.ContractEnd = item.Separation.ContractEnd; - item.WorkingHours.GetWorkDate = contract.GetWorkDate; - item.WorkingHours.GetWorkDateHide = contract.GetWorkDate; - item.WorkingHours.WorkshopId = workshopId; - item.WorkingHours.EmployeeId = item.EmployeeId; - - mandatoryCompute = await _rollCallMandatoryRepository.MandatoryCompute(item.EmployeeId, workshopId, - item.Separation.ContractStartGr, item.Separation.ContractEndGr, item.WorkingHours, getContractsData.Data.WorkshopHolidayWorking, - hasRollCall, getContractsData.Data.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute); - - #endregion - - - if (contract.EmployeeId == 9659) - mandatoryCompute.SumTime44 = "48 - 24"; - - var officialHoliday = mandatoryCompute.OfficialHoliday; - var Friday = int.Parse(mandatoryCompute.NumberOfFriday); - var fridayStartToEnd = mandatoryCompute.FridayStartToEnd; - - var totalHoursH = mandatoryCompute.TotalHoursesH; - var totalHoursM = mandatoryCompute.TotalHoursesM; - var dayliWage = mandatoryCompute.SalaryCompute.MoneyToDouble(); - var consumableItemDouble = mandatoryCompute.ConsumableItems.MoneyToDouble(); - var housingAllowanceDouble = mandatoryCompute.HousingAllowance.MoneyToDouble(); - var familyAllowanceDouble = mandatoryCompute.FamilyAllowance.MoneyToDouble(); - var marriedAllowanceDouble = mandatoryCompute.MarriedAllowance.MoneyToDouble(); - - //اضافه کاری - var overTimePay = _yearlySalaryRepository.GetOverTimeWorking(dayliWage, - mandatoryCompute.OverTimeWorkH, mandatoryCompute.OverTimeWorkM); - //شبکاری - var overNightPay = _yearlySalaryRepository.GetOverNightWorking(dayliWage, - mandatoryCompute.OverNightWorkH, mandatoryCompute.OverNightWorkM, mandatoryCompute.SumTime44, - officialHoliday, Friday, item.Separation.ContractStartGr, item.Separation.ContractEndGr, totalHoursH, - totalHoursM); - - - //سنوات - var yearsPay = _yearlySalaryRepository.Years(item.Separation.ContractStartGr, item.Separation.LeftWorkDate, - item.Separation.ContractEndGr, - dayliWage, item.YearsOption, item.Separation.HasLeft, item.Separation.StartWorkDate, contract.ContractStartGr, - contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, getContractsData.Data.IsOldContract); - //عیدی - #region BonusesPay - var bunosesPay = _yearlySalaryRepository.Bunoses(item.Separation.ContarctStart, item.Separation.LeftWorkDate, - item.Separation.ContractStartGr, item.Separation.ContractEndGr, - dayliWage, item.BonusesOption, item.Separation.HasLeft, item.Separation.StartWorkDate, - contract.ContractStartGr, - contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, getContractsData.Data.IsOldContract); - //اگر تصفیه حساب پاک شده برای عیدی یا سنوات وجود داشت - if (bunosesPay.NotCompleted || yearsPay.NotCompleted) - { - - List lostCheckoutsDates = new List(); - if ((bunosesPay.NotCompleted && yearsPay.NotCompleted) || (bunosesPay.NotCompleted && !yearsPay.NotCompleted)) - lostCheckoutsDates = bunosesPay.BunosesStatusList; - if (!bunosesPay.NotCompleted && yearsPay.NotCompleted) - lostCheckoutsDates = yearsPay.BunosesStatusList; - - foreach (var found in lostCheckoutsDates) + //آیا کل مرخصی به ساعت کاراضافه شود؟ + bool totalLeaveCompute = false; + //آیا غیبت محاسبه شود؟ + bool abcenseDeductionCompute = false; + switch (item.ComputeOption) { - ComputingViewModel foundMandatoryCompute = new ComputingViewModel(); - var foundContract = _contractRepository.GetContractByStartEnd(found.ContractStart, - found.ContractEnd, contract.WorkshopIds, contract.EmployeeId); + case "OnEndOfYear": + var endOfYearCheckout = item.Separation.ContractEnd.Substring(5, 2); - if (foundContract.Id > 0) - { - var foundWorkingHours = _workingHoursTempRepository.GetByContractIdConvertToShiftwork4(foundContract.Id); - foundWorkingHours.ContractStartGr = found.ContractStart; - foundWorkingHours.ContractEndGr = found.ContractEnd; - foundWorkingHours.ContarctStart = found.ContractStart.ToFarsi(); - foundWorkingHours.ContractEnd = found.ContractEnd.ToFarsi(); - foundWorkingHours.GetWorkDate = foundContract.GetWorkDate; - foundWorkingHours.GetWorkDateHide = foundContract.GetWorkDate; - foundWorkingHours.WorkshopId = contract.WorkshopIds; - foundWorkingHours.EmployeeId = contract.EmployeeId; - bool foundHasRollCall = await _rollCallEmployeeRepository.HasRollCallRecord(item.EmployeeId, workshopId, found.ContractStart, found.ContractEnd); + totalLeaveCompute = true; + abcenseDeductionCompute = item.Separation.HasLeft || endOfYearCheckout == "12"; + break; + case "OnLeftWork": - if (getContractsData.Data.IsStaticCheckout) - foundHasRollCall = false; + totalLeaveCompute = true; + abcenseDeductionCompute = item.Separation.HasLeft; + break; + case "OnEndOfContract": + var startMonth = item.ContractStart.Substring(5, 2); + var endMonth = item.ContractEnd.Substring(5, 2); - foundMandatoryCompute = await _rollCallMandatoryRepository.MandatoryCompute(contract.EmployeeId, - contract.WorkshopIds, - found.ContractStart, found.ContractEnd, foundWorkingHours, getContractsData.Data.WorkshopHolidayWorking, foundHasRollCall, getContractsData.Data.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute); - - - - - - var MontlyYearsBunos = - _yearlySalaryRepository.GetMontlyBunosYears(foundMandatoryCompute.weeklyTime, found.ContractStart, found.ContractEnd, - foundMandatoryCompute.SalaryCompute.MoneyToDouble(), foundMandatoryCompute.SumTime44, foundMandatoryCompute.OfficialHoliday, - int.Parse(foundMandatoryCompute.NumberOfFriday), foundMandatoryCompute.TotalHolidayAndNotH, foundMandatoryCompute.TotalHolidayAndNotM, - foundMandatoryCompute.Basic, foundMandatoryCompute.FridayStartToEnd, foundMandatoryCompute.DayliFeeComplete, hasRollCall, getContractsData.Data.WorkshopHolidayWorking, item.WorkingHours.ShiftWork); - double foundMontlySalary = MontlyYearsBunos.MontlyWage + MontlyYearsBunos.BasicYears; - int foundTotaldays = Convert.ToInt32(MontlyYearsBunos.SumOfWorkingDay); - double foundDayliWage = foundMontlySalary / foundTotaldays; - if (bunosesPay.NotCompleted) - { - double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; - bunosesPay.Bunoses += foundBonuses; - bunosesPay.TotalDayCompute += foundTotaldays; - } - - if (yearsPay.NotCompleted) - { - double foundBonuses = ((foundDayliWage * 30) / 365) * foundTotaldays; - yearsPay.YearsPay += foundBonuses; - yearsPay.TotalDayCompute += foundTotaldays; - } - - } + totalLeaveCompute = startMonth != endMonth; + abcenseDeductionCompute = (startMonth != endMonth && item.Separation.HasLeft) || (startMonth != endMonth && item.ContractEndGr == item.Separation.ContractEndGr); + break; } - } - #endregion - //مزد مرخصی جدید - var leavePayNew = _yearlySalaryRepository.LeavePay(item.Separation.ContarctStart, - item.Separation.LeftWorkDate, item.Separation.ContractStartGr, item.Separation.ContractEndGr, - dayliWage, item.ComputeOption, item.Separation.HasLeft, item.Separation.StartWorkDate, + //دستمزد روزانه بدون تاثیر ساعت کار + #region DailyWageCommpute + + var contract = new EditContract() + { + ContractStartGr = item.ContractStartGr, + ContractEndGr = item.ContractEndGr, + DailySalaryUnAffected = item.DailySalaryUnAffected, + DailyWageType = item.DailyWageType, + ContarctStart = item.ContractStart, + ContractEnd = item.ContractEnd, + GetWorkDate = item.FirstGetWorkingDay, + GetWorkDateHide = item.FirstGetWorkingDay, + + }; + + //دستمزد روزانه بدون تاثیر ساعت کار + var dailyWageUnAffected = await _yearlySalaryRepository.GetCheckoutDailyWage(contract, + item.Separation.ContractStartGr, item.Separation.ContractEndGr); + + #endregion + + + + + var hasRollCall = await _rollCallEmployeeRepository.HasRollCallRecord(item.EmployeeId, workshopId, item.Separation.ContractStartGr, item.Separation.ContractEndGr); + if (getContractsData.Data.IsStaticCheckout) + hasRollCall = false; + + //محاسبه موظفی + #region MandatoryCompute + var mandatoryCompute = new ComputingViewModel(); + + item.WorkingHours.ContractStartGr = item.Separation.ContractStartGr; + item.WorkingHours.ContractEndGr = item.Separation.ContractEndGr; + item.WorkingHours.ContarctStart = item.Separation.ContarctStart; + item.WorkingHours.ContractEnd = item.Separation.ContractEnd; + item.WorkingHours.GetWorkDate = contract.GetWorkDate; + item.WorkingHours.GetWorkDateHide = contract.GetWorkDate; + item.WorkingHours.WorkshopId = workshopId; + item.WorkingHours.EmployeeId = item.EmployeeId; + + mandatoryCompute = await _rollCallMandatoryRepository.MandatoryCompute(item.EmployeeId, workshopId, + item.Separation.ContractStartGr, item.Separation.ContractEndGr, item.WorkingHours, getContractsData.Data.WorkshopHolidayWorking, + hasRollCall, getContractsData.Data.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute); + + #endregion + + + if (contract.EmployeeId == 9659) + mandatoryCompute.SumTime44 = "48 - 24"; + + var officialHoliday = mandatoryCompute.OfficialHoliday; + var Friday = int.Parse(mandatoryCompute.NumberOfFriday); + var fridayStartToEnd = mandatoryCompute.FridayStartToEnd; + + var totalHoursH = mandatoryCompute.TotalHoursesH; + var totalHoursM = mandatoryCompute.TotalHoursesM; + var dayliWage = mandatoryCompute.SalaryCompute.MoneyToDouble(); + var consumableItemDouble = mandatoryCompute.ConsumableItems.MoneyToDouble(); + var housingAllowanceDouble = mandatoryCompute.HousingAllowance.MoneyToDouble(); + var familyAllowanceDouble = mandatoryCompute.FamilyAllowance.MoneyToDouble(); + var marriedAllowanceDouble = mandatoryCompute.MarriedAllowance.MoneyToDouble(); + + //اضافه کاری + var overTimePay = _yearlySalaryRepository.GetOverTimeWorking(dayliWage, + mandatoryCompute.OverTimeWorkH, mandatoryCompute.OverTimeWorkM); + //شبکاری + var overNightPay = _yearlySalaryRepository.GetOverNightWorking(dayliWage, + mandatoryCompute.OverNightWorkH, mandatoryCompute.OverNightWorkM, mandatoryCompute.SumTime44, + officialHoliday, Friday, item.Separation.ContractStartGr, item.Separation.ContractEndGr, totalHoursH, + totalHoursM); + + + //سنوات + var yearsPay = _yearlySalaryRepository.Years(item.Separation.ContractStartGr, item.Separation.LeftWorkDate, + item.Separation.ContractEndGr, + dayliWage, item.YearsOption, item.Separation.HasLeft, item.Separation.StartWorkDate, contract.ContractStartGr, + contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, getContractsData.Data.IsOldContract); + //عیدی + #region BonusesPay + var bunosesPay = _yearlySalaryRepository.Bunoses(item.Separation.ContarctStart, item.Separation.LeftWorkDate, + item.Separation.ContractStartGr, item.Separation.ContractEndGr, + dayliWage, item.BonusesOption, item.Separation.HasLeft, item.Separation.StartWorkDate, contract.ContractStartGr, - contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, fridayStartToEnd, - officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, - familyAllowanceDouble, marriedAllowanceDouble, getContractsData.Data.IsOldContract); - - - - - #region Insurance - - double insuranceShare = 0; - //اگر پرسنل داری شروع بکار بیمه بود - var insuranceEmployeeDataItem = - insuranceEmployeeData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - - //اگر لیست بیمه برای پرسنل ساخته شده بود - var insuranceListDataWithDetails = - insuranceListData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - if (insuranceListDataWithDetails != null) - { - insuranceShare = insuranceListDataWithDetails.InsuranceShare; - } - else - { - if (insuranceEmployeeDataItem != null && insuranceEmployeeDataItem.StartWorkDateGr <= item.Separation.ContractEndGr) + contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, getContractsData.Data.IsOldContract); + //اگر تصفیه حساب پاک شده برای عیدی یا سنوات وجود داشت + if (bunosesPay.NotCompleted || yearsPay.NotCompleted) { - var workingDays = Tools.GetEmployeeInsuranceWorkingDays(insuranceEmployeeDataItem.StartWorkDateGr, item.Separation.LeftWorkDate, startDateGr, endDateGr, insuranceEmployeeDataItem.EmployeeId); - var leftWorkFa = workingDays.hasLeftWorkInMonth ? item.Separation.LeftWorkDate.ToFarsi() : ""; - //به دست آوردن دستمزد روزانه با توجه به اینکه کارگاه مشاغل مقطوع است یا خیر + List lostCheckoutsDates = new List(); + if ((bunosesPay.NotCompleted && yearsPay.NotCompleted) || (bunosesPay.NotCompleted && !yearsPay.NotCompleted)) + lostCheckoutsDates = bunosesPay.BunosesStatusList; + if (!bunosesPay.NotCompleted && yearsPay.NotCompleted) + lostCheckoutsDates = yearsPay.BunosesStatusList; - double dailyWage = 0; - if (getContractsData.Data.FixedSalary) + foreach (var found in lostCheckoutsDates) { - var res = _insuranceListApplication.GetDailyWageFixedSalary(year, getContractsData.Data.WorkshopId, insuranceEmployeeDataItem.EmployeeId, startDateGr, - endDateGr, insuranceEmployeeDataItem.JobId, getContractsData.Data.Population, getContractsData.Data.InsuranceJobId); - dailyWage = res ?? 0; + ComputingViewModel foundMandatoryCompute = new ComputingViewModel(); + var foundContract = _contractRepository.GetContractByStartEnd(found.ContractStart, + found.ContractEnd, contract.WorkshopIds, contract.EmployeeId); + if (foundContract.Id > 0) + { + var foundWorkingHours = _workingHoursTempRepository.GetByContractIdConvertToShiftwork4(foundContract.Id); + foundWorkingHours.ContractStartGr = found.ContractStart; + foundWorkingHours.ContractEndGr = found.ContractEnd; + foundWorkingHours.ContarctStart = found.ContractStart.ToFarsi(); + foundWorkingHours.ContractEnd = found.ContractEnd.ToFarsi(); + foundWorkingHours.GetWorkDate = foundContract.GetWorkDate; + foundWorkingHours.GetWorkDateHide = foundContract.GetWorkDate; + foundWorkingHours.WorkshopId = contract.WorkshopIds; + foundWorkingHours.EmployeeId = contract.EmployeeId; + bool foundHasRollCall = await _rollCallEmployeeRepository.HasRollCallRecord(item.EmployeeId, workshopId, found.ContractStart, found.ContractEnd); + + if (getContractsData.Data.IsStaticCheckout) + foundHasRollCall = false; + + foundMandatoryCompute = await _rollCallMandatoryRepository.MandatoryCompute(contract.EmployeeId, + contract.WorkshopIds, + found.ContractStart, found.ContractEnd, foundWorkingHours, getContractsData.Data.WorkshopHolidayWorking, foundHasRollCall, getContractsData.Data.RotatingShiftCompute, dailyWageUnAffected, totalLeaveCompute); + + + + + + var MontlyYearsBunos = + _yearlySalaryRepository.GetMontlyBunosYears(foundMandatoryCompute.weeklyTime, found.ContractStart, found.ContractEnd, + foundMandatoryCompute.SalaryCompute.MoneyToDouble(), foundMandatoryCompute.SumTime44, foundMandatoryCompute.OfficialHoliday, + int.Parse(foundMandatoryCompute.NumberOfFriday), foundMandatoryCompute.TotalHolidayAndNotH, foundMandatoryCompute.TotalHolidayAndNotM, + foundMandatoryCompute.Basic, foundMandatoryCompute.FridayStartToEnd, foundMandatoryCompute.DayliFeeComplete, hasRollCall, getContractsData.Data.WorkshopHolidayWorking, item.WorkingHours.ShiftWork); + double foundMontlySalary = MontlyYearsBunos.MontlyWage + MontlyYearsBunos.BasicYears; + int foundTotaldays = Convert.ToInt32(MontlyYearsBunos.SumOfWorkingDay); + double foundDayliWage = foundMontlySalary / foundTotaldays; + if (bunosesPay.NotCompleted) + { + double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays; + bunosesPay.Bunoses += foundBonuses; + bunosesPay.TotalDayCompute += foundTotaldays; + } + + if (yearsPay.NotCompleted) + { + double foundBonuses = ((foundDayliWage * 30) / 365) * foundTotaldays; + yearsPay.YearsPay += foundBonuses; + yearsPay.TotalDayCompute += foundTotaldays; + } + + } } - else - { - var res = _insuranceListApplication.ComputeDailyWage(yearlysaleries.DayliWage, insuranceEmployeeDataItem.EmployeeId, getContractsData.Data.WorkshopId, year); - dailyWage = res; - } - - //بدست آوردن پایه سنوات - var baseYears = _insuranceListRepository.GetEmployeeInsuranceBaseYear(insuranceEmployeeDataItem.EmployeeId, getContractsData.Data.WorkshopId, - workingDays.countWorkingDays, startDateGr, endDateGr, workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth); - - //جمع مزد روزانه و پایه سنوات - var dailyWagePlusBaseYears = dailyWage + baseYears.baseYear; - - - //دستمزد ماهانه با محاسبه پایه سنوات - var monthlySalary = Tools.GetRoundDoubleValue(dailyWagePlusBaseYears * workingDays.countWorkingDays); - - //حق تاهل - var marriedAllowanceForInsurance = item.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0; - - //محاسبه مزایای ماهانه - var monthlyBenefits = _insuranceListApplication.GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowanceForInsurance, workingDays.countWorkingDays, getContractsData.Data.TypeOfInsuranceSend, insuranceEmployeeDataItem.JobId, insuranceEmployeeDataItem.EmployeeId, insuranceEmployeeDataItem.IncludeStatus); - if (getContractsData.Data.HasInsuranceCheckoutOverTime) - { - - monthlyBenefits = Tools.GetRoundDoubleValue(monthlyBenefits += overTimePay); - } - - //محاسبه جمع مزایای مشمول و دستمزد ماهانه - var benefitsIncludedContinuous = monthlyBenefits + monthlySalary; - - //محاسبه حق بیمه سهم بیمه شده - insuranceShare = (benefitsIncludedContinuous * 7) / 100; } - } + + #endregion + + //مزد مرخصی جدید + var leavePayNew = _yearlySalaryRepository.LeavePay(item.Separation.ContarctStart, + item.Separation.LeftWorkDate, item.Separation.ContractStartGr, item.Separation.ContractEndGr, + dayliWage, item.ComputeOption, item.Separation.HasLeft, item.Separation.StartWorkDate, + contract.ContractStartGr, + contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, fridayStartToEnd, + officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble, + familyAllowanceDouble, marriedAllowanceDouble, getContractsData.Data.IsOldContract); - #endregion - - #region ResultToSave - var syear = Convert.ToInt32(item.ContractStart.Substring(0, 4)); - var smonth = Convert.ToInt32(item.ContractStart.Substring(5, 2)); + #region Insurance - string monthfarsiName = (item.ContractStart.Substring(5, 2)).ToFarsiMonthByNumber(); - - var yearShamsi = item.ContractStart.Substring(0, 4); + double insuranceShare = 0; + //اگر پرسنل داری شروع بکار بیمه بود + var insuranceEmployeeDataItem = + insuranceEmployeeData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); - - var dayliWageDouble = mandatoryCompute.SalaryCompute.MoneyToDouble(); - // کمک هزینه اقلام - var consumableItem = mandatoryCompute.ConsumableItems.MoneyToDouble(); - //حق اولاد - var familyAllowance = mandatoryCompute.FamilyAllowance.MoneyToDouble(); - //کمک هزینه مسکن - var housingAllowance = mandatoryCompute.HousingAllowance.MoneyToDouble(); - //حق تاهل - var marriedAllowance = mandatoryCompute.MarriedAllowance.MoneyToDouble(); - - #region Salary - - var totalDays = (item.Separation.ContractEndGr - item.Separation.ContractStartGr).TotalDays + 1; - - //حقوق ماهانه - var monthlyWage = mandatoryCompute.DailySalaryAffected * totalDays; - //پایه سنوات - var bacicYears = mandatoryCompute.BaseYearAffected * totalDays; - #endregion - - - //سنوات - var years = yearsPay.YearsPay; - //عیدی و پاداش - var bunos = bunosesPay.Bunoses; - - //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه - if (item.EmployeeId == 45104 && getContractsData.Data.WorkshopId == 315) - { - years = 0; - - bunos = 0; - } - - //تعداد زروز های فیش - var sumOfWorkingDays = $"{totalDays}"; - - //مبلغ جمعه کاری - double fridayPay = 0; - if (Friday > 0) - { - var fridayPercent = dayliWageDouble * 40 / 100; - //فوق العاده جمعه کاری - fridayPay = fridayPercent * Friday; - } - - - //حق بیمه سهم کارگر - #region InsuranceDeduction - - double insuranceDeduction = 0; - bool hasInsuranceShareTheSameAsList = false; - var inshuranceShareRound = Tools.GetRoundDoubleValue(insuranceShare); - if (inshuranceShareRound == 0) - { - var insuranceOverTime = getContractsData.Data.HasInsuranceCheckoutOverTime ? overTimePay : 0; - insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100; - } - else - { - insuranceDeduction = inshuranceShareRound; - hasInsuranceShareTheSameAsList = true; - } - - - #endregion - - //مقادیر - روز - تعداد - ساعت - #region Values - - //مدت شب کاری - var overNightWorkValue = - $"{Convert.ToInt32(mandatoryCompute.OverNightWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverNightWorkM):00}"; - //تعداد جمعه کاری - var fridayWorkValue = $"{Friday}"; - //نوع نوبت کاری - var rotatingShiftValue = mandatoryCompute.RotatingShiftValue; - // تعداد سال های سنوات - var totalDayOfYearsCompute = yearsPay.YearsPay > 0 ? $"{yearsPay.TotalDayCompute}" : "0"; - //تعداد روز های عیدی و پاداش - var totalDayOfBunosesCompute = bunosesPay.Bunoses > 0 ? $"{bunosesPay.TotalDayCompute}" : "0"; - //مدت اضافه کارس - var overTimeWorkValue = - $"{Convert.ToInt32(mandatoryCompute.OverTimeWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverTimeWorkM):00}"; - - - #endregion - - //کسر اضافه کار از غیبت یا بلعکس - #region OverTimeAndAbsencSubtraction - var absenceDeduction = abcenseDeductionCompute ? leavePayNew.AbsenceDeduction : 0; - - if (overTimePay > 0 && absenceDeduction > 0) - { - if (absenceDeduction >= overTimePay) + //اگر لیست بیمه برای پرسنل ساخته شده بود + var insuranceListDataWithDetails = + insuranceListData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId); + if (insuranceListDataWithDetails != null) { - absenceDeduction -= overTimePay; - overTimePay = 0; - overTimeWorkValue = "00:00"; + insuranceShare = insuranceListDataWithDetails.InsuranceShare; } else { - overTimePay -= absenceDeduction; - absenceDeduction = 0; + if (insuranceEmployeeDataItem != null && insuranceEmployeeDataItem.StartWorkDateGr <= item.Separation.ContractEndGr) + { + var workingDays = Tools.GetEmployeeInsuranceWorkingDays(insuranceEmployeeDataItem.StartWorkDateGr, item.Separation.LeftWorkDate, startDateGr, endDateGr, insuranceEmployeeDataItem.EmployeeId); + var leftWorkFa = workingDays.hasLeftWorkInMonth ? item.Separation.LeftWorkDate.ToFarsi() : ""; + + //به دست آوردن دستمزد روزانه با توجه به اینکه کارگاه مشاغل مقطوع است یا خیر + + double dailyWage = 0; + if (getContractsData.Data.FixedSalary) + { + var res = _insuranceListApplication.GetDailyWageFixedSalary(year, getContractsData.Data.WorkshopId, insuranceEmployeeDataItem.EmployeeId, startDateGr, + endDateGr, insuranceEmployeeDataItem.JobId, getContractsData.Data.Population, getContractsData.Data.InsuranceJobId); + dailyWage = res ?? 0; + + } + else + { + var res = _insuranceListApplication.ComputeDailyWage(yearlysaleries.DayliWage, insuranceEmployeeDataItem.EmployeeId, getContractsData.Data.WorkshopId, year); + dailyWage = res; + } + + //بدست آوردن پایه سنوات + var baseYears = _insuranceListRepository.GetEmployeeInsuranceBaseYear(insuranceEmployeeDataItem.EmployeeId, getContractsData.Data.WorkshopId, + workingDays.countWorkingDays, startDateGr, endDateGr, workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth); + + //جمع مزد روزانه و پایه سنوات + var dailyWagePlusBaseYears = dailyWage + baseYears.baseYear; + + + //دستمزد ماهانه با محاسبه پایه سنوات + var monthlySalary = Tools.GetRoundDoubleValue(dailyWagePlusBaseYears * workingDays.countWorkingDays); + + //حق تاهل + var marriedAllowanceForInsurance = item.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0; + + //محاسبه مزایای ماهانه + var monthlyBenefits = _insuranceListApplication.GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowanceForInsurance, workingDays.countWorkingDays, getContractsData.Data.TypeOfInsuranceSend, insuranceEmployeeDataItem.JobId, insuranceEmployeeDataItem.EmployeeId, insuranceEmployeeDataItem.IncludeStatus); + if (getContractsData.Data.HasInsuranceCheckoutOverTime) + { + + monthlyBenefits = Tools.GetRoundDoubleValue(monthlyBenefits += overTimePay); + } + + //محاسبه جمع مزایای مشمول و دستمزد ماهانه + var benefitsIncludedContinuous = monthlyBenefits + monthlySalary; + + //محاسبه حق بیمه سهم بیمه شده + insuranceShare = (benefitsIncludedContinuous * 7) / 100; + } } - } - #endregion - - //مساعده - #region SalaryAid - - var salaryAids = - _rollCallMandatoryRepository.SalaryAidsForCheckout(contract.EmployeeId, contract.WorkshopIds, startDateGr, endDateGr) - .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); - - var salaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); - - #endregion - - //اقساط وام - #region LoanInstallment - - var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(contract.EmployeeId, contract.WorkshopIds, - item.Separation.ContractStartGr, item.Separation.HasLeft ? DateTime.MaxValue : item.Separation.ContractEndGr) - .Select(x => - new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); - - var installmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); - - #endregion - - //پاداش - #region Reward - var rewards = new List(); - double rewardPay = 0; - if (getContractsData.Data.RewardComputeOnCheckout) - { - rewards = _rollCallMandatoryRepository.RewardForCheckout(contract.EmployeeId, contract.WorkshopIds, startDateGr, endDateGr) - .Select(x => new CheckoutReward(x.Amount, x.AmountDouble, x.GrantDateFa, x.GrantDateGr, x.Description, x.Title, x.Id)).ToList(); + #endregion - rewardPay = rewards.Sum(x => x.AmountDouble); - } + #region ResultToSave - #endregion + var syear = Convert.ToInt32(item.ContractStart.Substring(0, 4)); + var smonth = Convert.ToInt32(item.ContractStart.Substring(5, 2)); - //جدول حضورغیاب پرسنل - #region CheckoutRollCall + string monthfarsiName = (item.ContractStart.Substring(5, 2)).ToFarsiMonthByNumber(); - //کارکرد واقعی - محاسبات شامل مرخصی افزوده شده - var totalWorkingTimeSpan = mandatoryCompute.TotalWorkingTimeSpan; - //ساعت استراحت - var totalBreakTimeSpan = mandatoryCompute.TotalBreakTimeSpan; - // ساعت حضور - بدون مرخصی افزده شده - var totalPresentTimeSpan = mandatoryCompute.TotalPresentTimeSpan; - //مدت مرخصی استحقاقی - var totalPaidLeave = mandatoryCompute.TotalPaidLeave; - //مدت مرخصی استعلاجی - var totalSickLeave = mandatoryCompute.TotalSickLeave; + var yearShamsi = item.ContractStart.Substring(0, 4); - var firstDayOfMonth = startDateGr; - var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); + var dayliWageDouble = mandatoryCompute.SalaryCompute.MoneyToDouble(); + // کمک هزینه اقلام + var consumableItem = mandatoryCompute.ConsumableItems.MoneyToDouble(); + //حق اولاد + var familyAllowance = mandatoryCompute.FamilyAllowance.MoneyToDouble(); + //کمک هزینه مسکن + var housingAllowance = mandatoryCompute.HousingAllowance.MoneyToDouble(); + //حق تاهل + var marriedAllowance = mandatoryCompute.MarriedAllowance.MoneyToDouble(); - LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() - { - EmployeeId = contract.EmployeeId, - WorkshopId = contract.WorkshopIds, - StartLeaveGr = item.Separation.ContractStartGr, - EndLeaveGr = item.Separation.ContractEndGr, - IsAccepted = true, - }; - var leaves = _leaveApplication.search(sickLeaveSearch); + #region Salary - firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); + var totalDays = (item.Separation.ContractEndGr - item.Separation.ContractStartGr).TotalDays + 1; - lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); + //حقوق ماهانه + var monthlyWage = mandatoryCompute.DailySalaryAffected * totalDays; + //پایه سنوات + var bacicYears = mandatoryCompute.BaseYearAffected * totalDays; + #endregion - int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() - { - HolidayYear = item.Separation.ContractStartGr.ToFarsiYear() - }); - //all the dates from start to end, to be compared with present days to get absent dates - var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); + //سنوات + var years = yearsPay.YearsPay; + //عیدی و پاداش + var bunos = bunosesPay.Bunoses; - var absentRecords = completeDaysList - .ExceptBy(mandatoryCompute.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) - .Select(x => + //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه + if (item.EmployeeId == 45104 && getContractsData.Data.WorkshopId == 315) { - var leave = leaves.FirstOrDefault(y => - y.EmployeeId == contract.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); - var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); - var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; - var isNormalWorkingDay = isHoliday == false && isFriday == false; + years = 0; + + bunos = 0; + } + + //تعداد زروز های فیش + var sumOfWorkingDays = $"{totalDays}"; + + //مبلغ جمعه کاری + double fridayPay = 0; + if (Friday > 0) + { + var fridayPercent = dayliWageDouble * 40 / 100; + //فوق العاده جمعه کاری + fridayPay = fridayPercent * Friday; + } + + + //حق بیمه سهم کارگر + #region InsuranceDeduction + + double insuranceDeduction = 0; + bool hasInsuranceShareTheSameAsList = false; + var inshuranceShareRound = Tools.GetRoundDoubleValue(insuranceShare); + if (inshuranceShareRound == 0) + { + var insuranceOverTime = getContractsData.Data.HasInsuranceCheckoutOverTime ? overTimePay : 0; + insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100; + } + else + { + insuranceDeduction = inshuranceShareRound; + hasInsuranceShareTheSameAsList = true; + } + + + #endregion + + //مقادیر - روز - تعداد - ساعت + #region Values + + //مدت شب کاری + var overNightWorkValue = + $"{Convert.ToInt32(mandatoryCompute.OverNightWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverNightWorkM):00}"; + //تعداد جمعه کاری + var fridayWorkValue = $"{Friday}"; + //نوع نوبت کاری + var rotatingShiftValue = mandatoryCompute.RotatingShiftValue; + // تعداد سال های سنوات + var totalDayOfYearsCompute = yearsPay.YearsPay > 0 ? $"{yearsPay.TotalDayCompute}" : "0"; + //تعداد روز های عیدی و پاداش + var totalDayOfBunosesCompute = bunosesPay.Bunoses > 0 ? $"{bunosesPay.TotalDayCompute}" : "0"; + //مدت اضافه کارس + var overTimeWorkValue = + $"{Convert.ToInt32(mandatoryCompute.OverTimeWorkH):00}:{Convert.ToInt32(mandatoryCompute.OverTimeWorkM):00}"; + + + #endregion + + //کسر اضافه کار از غیبت یا بلعکس + #region OverTimeAndAbsencSubtraction + var absenceDeduction = abcenseDeductionCompute ? leavePayNew.AbsenceDeduction : 0; + + if (overTimePay > 0 && absenceDeduction > 0) + { + if (absenceDeduction >= overTimePay) + { + absenceDeduction -= overTimePay; + overTimePay = 0; + overTimeWorkValue = "00:00"; + } + else + { + overTimePay -= absenceDeduction; + absenceDeduction = 0; + } + + } + #endregion + + //مساعده + #region SalaryAid + + var salaryAids = + _rollCallMandatoryRepository.SalaryAidsForCheckout(contract.EmployeeId, contract.WorkshopIds, startDateGr, endDateGr) + .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); + + var salaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); + + #endregion + + //اقساط وام + #region LoanInstallment + + var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(contract.EmployeeId, contract.WorkshopIds, + item.Separation.ContractStartGr, item.Separation.HasLeft ? DateTime.MaxValue : item.Separation.ContractEndGr) + .Select(x => + new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); + + var installmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); + + #endregion + + //پاداش + #region Reward + + + var rewards = new List(); + double rewardPay = 0; + if (getContractsData.Data.RewardComputeOnCheckout) + { + rewards = _rollCallMandatoryRepository.RewardForCheckout(contract.EmployeeId, contract.WorkshopIds, startDateGr, endDateGr) + .Select(x => new CheckoutReward(x.Amount, x.AmountDouble, x.GrantDateFa, x.GrantDateGr, x.Description, x.Title, x.Id)).ToList(); + + rewardPay = rewards.Sum(x => x.AmountDouble); + } + + #endregion + + //جدول حضورغیاب پرسنل + #region CheckoutRollCall + + //کارکرد واقعی - محاسبات شامل مرخصی افزوده شده + var totalWorkingTimeSpan = mandatoryCompute.TotalWorkingTimeSpan; + //ساعت استراحت + var totalBreakTimeSpan = mandatoryCompute.TotalBreakTimeSpan; + // ساعت حضور - بدون مرخصی افزده شده + var totalPresentTimeSpan = mandatoryCompute.TotalPresentTimeSpan; + //مدت مرخصی استحقاقی + var totalPaidLeave = mandatoryCompute.TotalPaidLeave; + //مدت مرخصی استعلاجی + var totalSickLeave = mandatoryCompute.TotalSickLeave; + + + var firstDayOfMonth = startDateGr; + var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); + + LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() + { + EmployeeId = contract.EmployeeId, + WorkshopId = contract.WorkshopIds, + StartLeaveGr = item.Separation.ContractStartGr, + EndLeaveGr = item.Separation.ContractEndGr, + IsAccepted = true, + }; + var leaves = _leaveApplication.search(sickLeaveSearch); + + firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); + + lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); + + int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; + + var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() + { + HolidayYear = item.Separation.ContractStartGr.ToFarsiYear() + }); + //all the dates from start to end, to be compared with present days to get absent dates + var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); + + var absentRecords = completeDaysList + .ExceptBy(mandatoryCompute.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) + .Select(x => + { + var leave = leaves.FirstOrDefault(y => + y.EmployeeId == contract.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); + var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); + var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; + var isNormalWorkingDay = isHoliday == false && isFriday == false; + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = null, + EndDate1 = null, + DateTimeGr = x.Date, + DayOfWeek = x.Date.DayOfWeek.ToString(), + RollCallDateFa = x.Date.ToFarsi(), + LeaveType = leave != null ? leave.LeaveType : "", + IsAbsent = leave == null && isNormalWorkingDay + }; + }); + + + var presentDays = mandatoryCompute.GroupedRollCalls.Select(x => + { + + var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); + + var rollCallTimeSpanPerDay = x.SumOneDaySpan; + TimeSpan breakTimePerDay = x.BreakTime; + return new CheckoutDailyRollCallViewModel() { - StartDate1 = null, - EndDate1 = null, - DateTimeGr = x.Date, - DayOfWeek = x.Date.DayOfWeek.ToString(), - RollCallDateFa = x.Date.ToFarsi(), - LeaveType = leave != null ? leave.LeaveType : "", - IsAbsent = leave == null && isNormalWorkingDay + StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), + EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), + + StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", + EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", + + TotalhourseSpan = rollCallTimeSpanPerDay, + + BreakTimeTimeSpan = breakTimePerDay, + + DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), + RollCallDateFa = x.CreationDate.Date.ToFarsi(), + DateTimeGr = x.CreationDate.Date, + IsSliced = x.ShiftList.Count() > 2, + IsAbsent = false }; }); - var presentDays = mandatoryCompute.GroupedRollCalls.Select(x => - { - - var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); - - var rollCallTimeSpanPerDay = x.SumOneDaySpan; - TimeSpan breakTimePerDay = x.BreakTime; - - return new CheckoutDailyRollCallViewModel() + presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel { - StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), - EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), - - StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", - EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", - - TotalhourseSpan = rollCallTimeSpanPerDay, - - BreakTimeTimeSpan = breakTimePerDay, - - DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), - RollCallDateFa = x.CreationDate.Date.ToFarsi(), - DateTimeGr = x.CreationDate.Date, - IsSliced = x.ShiftList.Count() > 2, + StartDate1 = x.StartDate1, + EndDate1 = x.EndDate1, + EndDate2 = x.EndDate2, + StartDate2 = x.StartDate2, + TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", + BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", + TotalhourseSpan = x.TotalhourseSpan, + BreakTimeTimeSpan = x.BreakTimeTimeSpan, + DayOfWeek = x.DayOfWeek, + RollCallDateFa = x.RollCallDateFa, + DateTimeGr = x.DateTimeGr, + IsSliced = x.IsSliced, IsAbsent = false - }; - }); + }); + + var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); + result.ForEach(x => + { + x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); + x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; + }); + + var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, + x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, + x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) + .ToList(); - presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + + var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); + var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, totalPresentTimeSpan, totalBreakTimeSpan, + totalWorkingTimeSpan, totalPaidLeave, totalSickLeave, checkoutRollCallDays); + #endregion + + //مقادیر پرداخت نهایی - مطالبات - کسورات + #region TotalPayment + + var shiftPay = contract.WorkshopIds == 552 && hasRollCall ? 0 : mandatoryCompute.ShiftPay; + + + var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + overTimePay + + overNightPay + familyAllowance + bunos + years + leavePayNew.LeavPay + fridayPay + shiftPay + rewardPay; + var totalDeductionDouble = insuranceDeduction + absenceDeduction + installmentDeduction + salaryAidDeduction; + + //مطالبات + var totalClaims = totalClaimsDouble.ToMoney(); + //کسورات + var totalDeductions = totalDeductionDouble.ToMoney(); + + //مبلغ قابل پرداخت + var totalPayment = totalClaimsDouble - totalDeductionDouble; + + #endregion + + + #region CreateCheckoutModel + + var checkout = new Checkout(item.EmployeeFullName, item.FathersName, item.NationalCode + , item.DateOfBirth, item.EmployeeId, getContractsData.Data.WorkshopName, getContractsData.Data.WorkshopId, item.ContractNo, item.Separation.ContractStartGr, item.Separation.ContractEndGr, monthfarsiName, yearShamsi, + item.ContractId, item.WorkingHours.WorknigHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance + , overTimePay, overNightPay, fridayPay, 0, shiftPay, familyAllowance, bunos, years, leavePayNew.LeavPay, insuranceDeduction, 0, installmentDeduction, salaryAidDeduction, absenceDeduction, sumOfWorkingDays, + getContractsData.Data.ArchiveCode, item.PersonnelCode, totalClaims, totalDeductions, totalPayment, "0", marriedAllowance, leavePayNew.LeaveCheckout, leavePayNew.CreditLeaves, leavePayNew.AbsencePeriod, leavePayNew.AverageHoursPerDay, hasRollCall, overTimeWorkValue, overNightWorkValue + , fridayWorkValue, rotatingShiftValue, "0", leavePayNew.TotalDayOfLeaveCompute, totalDayOfYearsCompute, totalDayOfBunosesCompute, + loanInstallments, salaryAids, checkoutRollCall, mandatoryCompute.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList, rewards, rewardPay); + + #endregion + + + #endregion + + + + + #region SaveToDb + + + var saveToDb = await _checkoutRepository.CreateCheckout(checkout); + if(!saveToDb) + await signalR.SendAsync() + #endregion + } + catch (Exception) { - StartDate1 = x.StartDate1, - EndDate1 = x.EndDate1, - EndDate2 = x.EndDate2, - StartDate2 = x.StartDate2, - TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", - BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", - TotalhourseSpan = x.TotalhourseSpan, - BreakTimeTimeSpan = x.BreakTimeTimeSpan, - DayOfWeek = x.DayOfWeek, - RollCallDateFa = x.RollCallDateFa, - DateTimeGr = x.DateTimeGr, - IsSliced = x.IsSliced, - IsAbsent = false - }); - var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); - result.ForEach(x => - { - x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); - x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; - }); - - var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, - x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, - x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) - .ToList(); - - - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - - var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); - var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, totalPresentTimeSpan, totalBreakTimeSpan, - totalWorkingTimeSpan, totalPaidLeave, totalSickLeave, checkoutRollCallDays); - #endregion - - //مقادیر پرداخت نهایی - مطالبات - کسورات - #region TotalPayment - - var shiftPay = contract.WorkshopIds == 552 && hasRollCall ? 0 : mandatoryCompute.ShiftPay; - - - var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + overTimePay + - overNightPay + familyAllowance + bunos + years + leavePayNew.LeavPay + fridayPay + shiftPay + rewardPay; - var totalDeductionDouble = insuranceDeduction + absenceDeduction + installmentDeduction + salaryAidDeduction; - - //مطالبات - var totalClaims = totalClaimsDouble.ToMoney(); - //کسورات - var totalDeductions = totalDeductionDouble.ToMoney(); - - //مبلغ قابل پرداخت - var totalPayment = totalClaimsDouble - totalDeductionDouble; - - #endregion - - - #region CreateCheckoutModel - - var checkout = new Checkout(item.EmployeeFullName, item.FathersName, item.NationalCode - , item.DateOfBirth, item.EmployeeId, getContractsData.Data.WorkshopName, getContractsData.Data.WorkshopId, item.ContractNo, item.Separation.ContractStartGr, item.Separation.ContractEndGr, monthfarsiName, yearShamsi, - item.ContractId, item.WorkingHours.WorknigHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance - , overTimePay, overNightPay, fridayPay, 0, shiftPay, familyAllowance, bunos, years, leavePayNew.LeavPay, insuranceDeduction, 0, installmentDeduction, salaryAidDeduction, absenceDeduction, sumOfWorkingDays, - getContractsData.Data.ArchiveCode, item.PersonnelCode, totalClaims, totalDeductions, totalPayment, "0", marriedAllowance, leavePayNew.LeaveCheckout, leavePayNew.CreditLeaves, leavePayNew.AbsencePeriod, leavePayNew.AverageHoursPerDay, hasRollCall, overTimeWorkValue, overNightWorkValue - , fridayWorkValue, rotatingShiftValue, "0", leavePayNew.TotalDayOfLeaveCompute, totalDayOfYearsCompute, totalDayOfBunosesCompute, - loanInstallments, salaryAids, checkoutRollCall, mandatoryCompute.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList, rewards, rewardPay); - - #endregion - - - #endregion - - - - - #region SaveToDb - - - var saveToDb = await _checkoutRepository.CreateCheckout(checkout); - - #endregion + throw; + }