RotatingShiftReport changes

This commit is contained in:
SamSys
2025-04-30 20:15:11 +03:30
parent 4ec4935a1d
commit e03aabf88b
5 changed files with 157 additions and 54 deletions

View File

@@ -41,6 +41,7 @@ public class ComputingViewModel
public string EmployeeFullName { get; set; } public string EmployeeFullName { get; set; }
public string YearAndMonth { get; set; } public string YearAndMonth { get; set; }
public bool HasRotatingShift { get; set; }
//public List<string> holidays; //public List<string> holidays;
} }

View File

@@ -16,5 +16,6 @@ public class RotatingShiftViewModel
public bool IsEveningShift { get; set; } public bool IsEveningShift { get; set; }
public bool IsNightShift { get; set; } public bool IsNightShift { get; set; }
public string RotatingDate { get; set; } public string RotatingDate { get; set; }
public int WinRate { get; set; }
} }

View File

@@ -462,48 +462,98 @@ CreateWorkingHoursTemp command, bool holidayWorking)
string shiftPayValue = "0"; string shiftPayValue = "0";
List<RotatingShiftViewModel> rotatingResultList = RotatingShiftCheck(groupedRollCall); List<RotatingShiftViewModel> 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)); TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks));
var RotatingfaName = new List<string>(); var RotatingfaName = new List<string>();
if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود //if (command.ShiftWork != "1" && command.ShiftWork != "2" && command.ShiftWork != "4")//اگر چرخشی بود و منظم نبود
{ //{
if (moriningCount > 0) // if (moriningCount > 0)
RotatingfaName.Add("صبح"); // RotatingfaName.Add("صبح");
if (eveningCount > 0) // if (eveningCount > 0)
RotatingfaName.Add("عصر"); // RotatingfaName.Add("عصر");
if (nightCount > 0) // if (nightCount > 0)
RotatingfaName.Add("شب"); // RotatingfaName.Add("شب");
} //}
else// اگر منظم و شیفتی بود //else// اگر منظم و شیفتی بود
{ //{
var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1; // var totalDays = (int)(command.ContractEndGr - command.ContractStartGr).TotalDays + 1;
int validCount = 0; // int validCount = 0;
if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد // if (totalDays <= 7) // زیر 7 روز باید حد اقل 2 تغییر شیفت داشته باشد
{ // {
validCount = 2; // validCount = 2;
} // }
else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت // else if (totalDays >= 28) // بالای 28 روز حد اقل 8 تغییر شیفت
{ // {
validCount = 8; // validCount = 8;
} // }
else // else
{ // {
// تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است // // تناسب گیری - اگر برای 28 روز 8 تغییر پس برای ایکس روز چند تغییر لازم است
validCount = (int)((totalDays * 8) / 28); // validCount = (int)((totalDays * 8) / 28);
} // }
if (moriningCount >= validCount) // if (moriningCount >= validCount)
RotatingfaName.Add("صبح"); // RotatingfaName.Add("صبح");
if (eveningCount >= validCount) // if (eveningCount >= validCount)
RotatingfaName.Add("عصر"); // RotatingfaName.Add("عصر");
if (nightCount >= validCount) // if (nightCount >= validCount)
RotatingfaName.Add("شب"); // 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 = ""; var rotatingFaResult = "";
if (RotatingfaName.Count > 1)// اگر تعداد شیفت های محاسبه شده بیش از یک بود if (RotatingfaName.Count > 1)// اگر تعداد شیفت های محاسبه شده بیش از یک بود
{ {
@@ -623,9 +673,41 @@ CreateWorkingHoursTemp command, bool holidayWorking)
string shiftPayValue = "0"; string shiftPayValue = "0";
List<RotatingShiftViewModel> rotatingResultList = RotatingShiftCheck(groupedRollCall); List<RotatingShiftViewModel> rotatingResultList = RotatingShiftCheck(groupedRollCall);
var moriningCount = rotatingResultList.Count(x => x.IsMorningShift); int moriningCount = 0;
var eveningCount = rotatingResultList.Count(x => x.IsEveningShift); int eveningCount = 0;
var nightCount = rotatingResultList.Count(x => x.IsNightShift); 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)); TimeSpan over22 = new TimeSpan(rotatingResultList.Sum(x => x.NightWorkSpan.Ticks));
var RotatingfaName = new List<string>(); var RotatingfaName = new List<string>();
@@ -1061,18 +1143,28 @@ CreateWorkingHoursTemp command, bool holidayWorking)
if (result.MorningWorkSpan > result.EveningWorkSpan if (result.MorningWorkSpan > result.EveningWorkSpan
|| result.MorningWorkSpan == result.EveningWorkSpan) // if morning bigerThan evening or equal || result.MorningWorkSpan == result.EveningWorkSpan) // if morning bigerThan evening or equal
{ {
if (result.MorningWorkSpan != nullWorkspan) 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.IsMorningShift = true;
result.IsNightShift = false; result.IsNightShift = false;
result.IsEveningShift = false; result.IsEveningShift = false;
result.RotatingShiftStatus = "صبح"; result.RotatingShiftStatus = "صبح";
} }
if (result.MorningWorkSpan < result.NightWorkSpan if (result.MorningWorkSpan < result.NightWorkSpan
|| result.MorningWorkSpan == result.NightWorkSpan) // if night bigerThan morning or equal || result.MorningWorkSpan == result.NightWorkSpan) // if night bigerThan morning or equal
if (result.NightWorkSpan != nullWorkspan) 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.IsMorningShift = false;
result.IsNightShift = true; result.IsNightShift = true;
result.IsEveningShift = false; result.IsEveningShift = false;
@@ -1083,6 +1175,10 @@ CreateWorkingHoursTemp command, bool holidayWorking)
{ {
if (result.EveningWorkSpan != nullWorkspan) 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.IsEveningShift = true;
result.IsMorningShift = false; result.IsMorningShift = false;
result.IsNightShift = false; result.IsNightShift = false;
@@ -1093,6 +1189,10 @@ CreateWorkingHoursTemp command, bool holidayWorking)
|| result.EveningWorkSpan == result.NightWorkSpan) // if night bigerThan evening or equal || result.EveningWorkSpan == result.NightWorkSpan) // if night bigerThan evening or equal
if (result.NightWorkSpan != nullWorkspan) 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.IsMorningShift = false;
result.IsEveningShift = false; result.IsEveningShift = false;
result.IsNightShift = true; result.IsNightShift = true;

View File

@@ -186,6 +186,7 @@ public class IndexModel : PageModel
result.EmployeeFullName = checkout.EmployeeFullName; result.EmployeeFullName = checkout.EmployeeFullName;
result.YearAndMonth = $"{checkout.Month} {checkout.Year}"; result.YearAndMonth = $"{checkout.Month} {checkout.Year}";
result.HasRotatingShift = result.RotatingStatus == "نوبت کاری ندارد" ? false : true;
Console.WriteLine("ok"); Console.WriteLine("ok");
return Partial("./RotatingShiftReportDesktop", result); return Partial("./RotatingShiftReportDesktop", result);
} }

View File

@@ -53,7 +53,17 @@
.rotateParntModal { .rotateParntModal {
height: 600px !important; height: 600px !important;
} }
.noRotating{
background-color: #fe8470;
}
.hasRotating{
background-color: #1bff01;
}
</style> </style>
string noRotating = "noRotating";
string hasRotating = "hasRotating";
} }
@@ -98,7 +108,8 @@
<div class="col-xs-3" style="text-align:left"> <h5>نوع ساعت کاری :</h5> </div> <div class="col-xs-3" style="text-align:left"> <h5>نوع ساعت کاری :</h5> </div>
<div class="col-xs-3" style="text-align:right"> <div class="col-xs-3 @(!Model.HasRotatingShift? @noRotating :@hasRotating )" style="text-align:right ">
<h5>@Model.RotatingStatus</h5> <h5>@Model.RotatingStatus</h5>
</div> </div>
<div class="col-xs-3" style="text-align:left"> <div class="col-xs-3" style="text-align:left">
@@ -118,19 +129,8 @@
<span style="padding: 0px 10px;"> نوبت شب </span> <span style="padding: 0px 10px;"> نوبت شب </span>
</div> </div>
<div id="rotatingList"> <div id="rotatingList">
@{
if (@Model.RotatingStatus == "نوبت کاری ندارد")
{
<div class="row">
<div class="col-xs-4"></div>
<div class="col-xs-4">
<h3>نوبت کاری ندارد</h3>
</div>
<div class="col-xs-4"></div>
</div>
}
else
{
@foreach (var item in @Model.RotatingResultList) @foreach (var item in @Model.RotatingResultList)
{ {
@@ -163,9 +163,9 @@
</div> </div>
} }
}
}
</div> </div>
</div> </div>
<div class="row"> <div class="row">