diff --git a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs index 0a85ed0a..15bfa45e 100644 --- a/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs +++ b/CompanyManagment.App.Contracts/Contract/ComputingViewModel.cs @@ -41,6 +41,7 @@ public class ComputingViewModel public string EmployeeFullName { get; set; } public string YearAndMonth { get; set; } + public bool HasRotatingShift { get; set; } //public List holidays; } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/WorkingHoursTemp/RotatingShiftViewModel.cs b/CompanyManagment.App.Contracts/WorkingHoursTemp/RotatingShiftViewModel.cs index 3b3e9bb1..735ede77 100644 --- a/CompanyManagment.App.Contracts/WorkingHoursTemp/RotatingShiftViewModel.cs +++ b/CompanyManagment.App.Contracts/WorkingHoursTemp/RotatingShiftViewModel.cs @@ -16,5 +16,6 @@ public class RotatingShiftViewModel public bool IsEveningShift { get; set; } public bool IsNightShift { get; set; } public string RotatingDate { get; set; } + public int WinRate { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs index 42294c0e..f14a7bde 100644 --- a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -462,48 +462,98 @@ CreateWorkingHoursTemp command, bool holidayWorking) string shiftPayValue = "0"; List rotatingResultList = RotatingShiftCheck(groupedRollCall); - var moriningCount = rotatingResultList.Count(x => x.IsMorningShift); - var eveningCount = rotatingResultList.Count(x => x.IsEveningShift); - var nightCount = rotatingResultList.Count(x => x.IsNightShift); + // شبکاری TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); var RotatingfaName = new List(); - if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود - { - if (moriningCount > 0) - RotatingfaName.Add("صبح"); - if (eveningCount > 0) - RotatingfaName.Add("عصر"); - if (nightCount > 0) - RotatingfaName.Add("شب"); - } - else// اگر منظم و شیفتی بود - { - var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; - int validCount = 0; - if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد - { - validCount = 2; - } - else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت - { - validCount = 8; - } - else - { - // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است - validCount = (int)((totalDays * 8) / 28); - } + //if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود + //{ + // if (moriningCount > 0) + // RotatingfaName.Add("صبح"); + // if (eveningCount > 0) + // RotatingfaName.Add("عصر"); + // if (nightCount > 0) + // RotatingfaName.Add("شب"); + //} + //else// اگر منظم و شیفتی بود + //{ + // var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; + // int validCount = 0; + // if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد + // { + // validCount = 2; + // } + // else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت + // { + // validCount = 8; + // } + // else + // { + // // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است + // validCount = (int)((totalDays * 8) / 28); + // } - if (moriningCount >= validCount) - RotatingfaName.Add("صبح"); - if (eveningCount >= validCount) - RotatingfaName.Add("عصر"); - if (nightCount >= validCount) - RotatingfaName.Add("شب"); + // if (moriningCount >= validCount) + // RotatingfaName.Add("صبح"); + // if (eveningCount >= validCount) + // RotatingfaName.Add("عصر"); + // if (nightCount >= validCount) + // RotatingfaName.Add("شب"); + //} + + int moriningCount = 0; + int eveningCount = 0; + int nightCount = 0; + + int moriningWinRate = rotatingResultList.Where(x => x.IsMorningShift).Sum(x => x.WinRate); + int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); + int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); + + + if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); } + if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift); + } + + var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; + int validCount = 0; + if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد + { + validCount = 2; + } + else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت + { + validCount = 8; + } + else + { + // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است + validCount = (int)((totalDays * 8) / 28); + } + + if (moriningCount >= validCount) + RotatingfaName.Add("صبح"); + if (eveningCount >= validCount) + RotatingfaName.Add("عصر"); + if (nightCount >= validCount) + RotatingfaName.Add("شب"); var rotatingFaResult = ""; if (RotatingfaName.Count > 1)// اگر تعداد شیفت های محاسبه شده بیش از یک بود { @@ -623,9 +673,41 @@ CreateWorkingHoursTemp command, bool holidayWorking) string shiftPayValue = "0"; List rotatingResultList = RotatingShiftCheck(groupedRollCall); - var moriningCount = rotatingResultList.Count(x => x.IsMorningShift); - var eveningCount = rotatingResultList.Count(x => x.IsEveningShift); - var nightCount = rotatingResultList.Count(x => x.IsNightShift); + int moriningCount = 0; + int eveningCount = 0; + int nightCount = 0; + + int moriningWinRate = rotatingResultList.Where(x=>x.IsMorningShift).Sum(x => x.WinRate); + int eveningWinRate = rotatingResultList.Where(x => x.IsEveningShift).Sum(x => x.WinRate); + int nightWinRate = rotatingResultList.Where(x => x.IsNightShift).Sum(x => x.WinRate); + + + if (moriningWinRate > eveningWinRate && moriningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (eveningWinRate > moriningWinRate && eveningWinRate > nightWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift); + nightCount = rotatingResultList.Count(x => x.IsNightShift && x.WinRate > 55); + } + + if (nightWinRate > moriningWinRate && nightWinRate > eveningWinRate) + { + moriningCount = rotatingResultList.Count(x => x.IsMorningShift && x.WinRate > 55); + eveningCount = rotatingResultList.Count(x => x.IsEveningShift && x.WinRate > 55); + nightCount = rotatingResultList.Count(x => x.IsNightShift); + } + + + + + + // شبکاری TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks)); var RotatingfaName = new List(); @@ -1061,18 +1143,28 @@ CreateWorkingHoursTemp command, bool holidayWorking) if (result.MorningWorkSpan > result.EveningWorkSpan || result.MorningWorkSpan == result.EveningWorkSpan) // if morning bigerThan evening or equal { + if (result.MorningWorkSpan != nullWorkspan) { + var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.MorningWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); result.IsMorningShift = true; result.IsNightShift = false; result.IsEveningShift = false; result.RotatingShiftStatus = "صبح"; + } if (result.MorningWorkSpan < result.NightWorkSpan || result.MorningWorkSpan == result.NightWorkSpan) // if night bigerThan morning or equal if (result.NightWorkSpan != nullWorkspan) { + var sumSpan = result.MorningWorkSpan.Add(result.NightWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); result.IsMorningShift = false; result.IsNightShift = true; result.IsEveningShift = false; @@ -1083,6 +1175,10 @@ CreateWorkingHoursTemp command, bool holidayWorking) { if (result.EveningWorkSpan != nullWorkspan) { + var sumSpan = result.MorningWorkSpan.Add(result.EveningWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.EveningWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); result.IsEveningShift = true; result.IsMorningShift = false; result.IsNightShift = false; @@ -1093,6 +1189,10 @@ CreateWorkingHoursTemp command, bool holidayWorking) || result.EveningWorkSpan == result.NightWorkSpan) // if night bigerThan evening or equal if (result.NightWorkSpan != nullWorkspan) { + var sumSpan = result.EveningWorkSpan.Add(result.NightWorkSpan); + var sumSpanDouble = sumSpan.TotalMinutes; + var winRate = (result.NightWorkSpan.TotalMinutes * 100) / sumSpanDouble; + result.WinRate = Convert.ToInt32(winRate); result.IsMorningShift = false; result.IsEveningShift = false; result.IsNightShift = true; diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 3b7f765c..e8fd8e43 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -186,6 +186,7 @@ public class IndexModel : PageModel result.EmployeeFullName = checkout.EmployeeFullName; result.YearAndMonth = $"{checkout.Month} {checkout.Year}"; + result.HasRotatingShift = result.RotatingStatus == "نوبت کاری ندارد" ? false : true; Console.WriteLine("ok"); return Partial("./RotatingShiftReportDesktop", result); } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/RotatingShiftReportDesktop.cshtml b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/RotatingShiftReportDesktop.cshtml index 0b66cd62..ae1be0de 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/RotatingShiftReportDesktop.cshtml +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/RotatingShiftReportDesktop.cshtml @@ -53,7 +53,17 @@ .rotateParntModal { height: 600px !important; } + .noRotating{ + background-color: #fe8470; + } + .hasRotating{ + background-color: #1bff01; + } + + string noRotating = "noRotating"; + string hasRotating = "hasRotating"; + } @@ -98,7 +108,8 @@
نوع ساعت کاری :
-
+
+
@Model.RotatingStatus
@@ -118,19 +129,8 @@ نوبت شب
- @{ - if (@Model.RotatingStatus == "نوبت کاری ندارد") - { -
-
-
-

نوبت کاری ندارد

-
-
-
- } - else - { + + @foreach (var item in @Model.RotatingResultList) { @@ -163,9 +163,9 @@
} - } + - } +