BaseYears changes - Bonuses changes - RollCall CaseHistory buges fixed

This commit is contained in:
SamSys
2024-11-20 19:08:20 +03:30
parent 207864e4d6
commit 2c1ea936ec
13 changed files with 578 additions and 131 deletions

View File

@@ -10,8 +10,9 @@ namespace Company.Domain.ContractAgg;
public interface IContractRepository : IRepository<long, Contract>
{
EditContract GetDetails(long id);
EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId);
List<ContractViweModel> Search(ContractSearchModel searchModel);
List<ContractViweModel> Search(ContractSearchModel searchModel);
List<ContractViweModel> SearchForextension(ContractSearchModel searchModel);
List<ContractViweModel> SearchForCheckout(ContractSearchModel searchModel);

View File

@@ -32,13 +32,13 @@ public interface IYearlySalaryRepository : IRepository<long, YearlySalary>
double MarriedAllowance(DateTime endDateW, long employeeId);
#region newComputeOptions
#region newComputeOptions
double Years(DateTime separationStartDate,DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions,bool hasleft,DateTime startWorkDate,DateTime contractStart, DateTime contractEnd, long workshopId,long employeeId, bool isOldContract);
BunosesAndYearsPayStatus Years(DateTime separationStartDate,DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions,bool hasleft,DateTime startWorkDate,DateTime contractStart, DateTime contractEnd, long workshopId,long employeeId, bool isOldContract);
LeaveAndAbsenceViewModel LeavePay(string startDateFa,DateTime leftWorkDate,DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string computeOptions, bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId,
int fridayStartToEnd,int officialHoliday, string totalHoursH, string totalHorsM, double consumableItem,
double housingAllowance, double familyAllowance,double marriedAllowance, bool isOldContract);
double Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions, bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId, bool isOldContract);
BunosesAndYearsPayStatus Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions, bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId, bool isOldContract);
List<ContractsCanToLeave> LeftWorkCantoleaveList(DateTime startDate, DateTime endDate,long workshopId, long employeeId, bool hasleft,DateTime leftWorkDate, int fridayStartToEnd, int officialHoliday, string totalHoursH, string totalHorsM, DateTime separationStartDate);

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.YearlySalary;
public class BunosesAndYearsPayStatus
{
public double Bunoses { get; set; }
public double YearsPay { get; set; }
public bool NotCompleted { get; set; }
public DateTime ContractStart { get; set; }
public DateTime ContractEnd { get; set; }
public List<BunosesAndYearsPayStatus> BunosesStatusList { get; set; }
}

View File

@@ -4,21 +4,20 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.YearlySalary
namespace CompanyManagment.App.Contracts.YearlySalary;
public class ContractsCanToLeave
{
public class ContractsCanToLeave
{
public double WorkingPerDayHourses { get; set; }
public DateTime ContractStart { get; set; }
public DateTime ContractEnd { get; set; }
public double CanToLeave { get; set; }
public double PeriodOfAbsence { get; set; }
public double AbsenceDeduction { get; set; }
public bool LastChekoutOfContract { get; set; }
public bool Left { get; set; }
public bool EndOfYear { get; set; }
public int ContractCounter { get; set; }
public int CountChekoutDays { get; set; }
public bool Is365 { get; set; }
}
}
public double WorkingPerDayHourses { get; set; }
public DateTime ContractStart { get; set; }
public DateTime ContractEnd { get; set; }
public double CanToLeave { get; set; }
public double PeriodOfAbsence { get; set; }
public double AbsenceDeduction { get; set; }
public bool LastChekoutOfContract { get; set; }
public bool Left { get; set; }
public bool EndOfYear { get; set; }
public int ContractCounter { get; set; }
public int CountChekoutDays { get; set; }
public bool Is365 { get; set; }
}

View File

@@ -73,7 +73,7 @@ namespace CompanyManagment.Application
return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id &&
x.StartDate.Date <= contractStart.Date &&
x.EndDate.Date > contractEnd.Date);
x.EndDate.Date >= contractEnd.Date);
}
public OperationResult Deactivate(long id)
{

View File

@@ -81,6 +81,18 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
.FirstOrDefault(x => x.Id == id);
}
public EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId)
{
var res = _context.Contracts.FirstOrDefault(x =>
x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.ContarctStart <= start && x.ContractEnd >= end);
if (res == null)
return new EditContract();
return new EditContract()
{
Id = res.id,
GetWorkDate = res.GetWorkDate.ToFarsi(),
};
}
public List<ContractViweModel> Search(ContractSearchModel searchModel)
{
var AcountID = _authHelper.CurrentAccountId();

View File

@@ -276,8 +276,8 @@ public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>
public List<RollCallEmployeeViewModel> GetEmployeeRollCalls(long workshopId)
{
var dateNow = DateTime.Now;
var f = _context.RollCallEmployees.Where(x => x.WorkshopId == workshopId);
var f = _context.RollCallEmployees.Include(x=>x.EmployeesStatus)
.Where(x => x.WorkshopId == workshopId && x.EmployeesStatus.Any());
var res = f.Select(x => new RollCallEmployeeViewModel
{

View File

@@ -122,8 +122,8 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
//if none was found return empty
if (employeeRollCallStatuses == null)
return new();
if (employeeRollCallStatuses == null || employeeRollCallStatuses.EmployeesStatus == null || !employeeRollCallStatuses.EmployeesStatus.Any())
return null;
//this list will have all the months which employee was active in
var activeMonths = new List<PersianDateTime>();

View File

@@ -1097,10 +1097,11 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
//سنوات
#region yeaers
public double Years(DateTime separationStartDate, DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions,
public BunosesAndYearsPayStatus Years(DateTime separationStartDate, DateTime leftWorkDate, DateTime separationEndDate, double daylyWage, string yearsOptions,
bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId, long employeeId, bool isOldContract)
{
var startDateFa = separationEndDate.ToFarsi();
BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus();
var startDateFa = separationEndDate.ToFarsi();
var checkoutMonth = startDateFa.Substring(5, 2);
double result = 0;
var start1403 = new DateTime(2024, 3, 20);
@@ -1108,7 +1109,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
{
case "OnCheckoutOfMonth":
var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalCheckoutDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalCheckoutDays;
break;
//محاسبه در پایان سال به شرطی که قرارداد منتهی به پایان سال باشد
case "OnEndOfYear"://درپایان سال
@@ -1116,7 +1117,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
if (isOldContract && contractEnd < start1403)
{
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
else if (isOldContract && contractEnd > start1403)
{
@@ -1129,10 +1130,69 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
// اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
}
}
#region NewCompute
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldYearsPay = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays;
sumOfOldYearsPay += foundYearsPay;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays;
finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
}
}
else if (!isOldContract)
{
@@ -1142,20 +1202,77 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
}
}
#region NewCompute
break;
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldYearsPay = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundYearsPay = ((foundDayliWage * 30) / 365) * foundTotaldays;
sumOfOldYearsPay += foundYearsPay;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthYearsPay = ((daylyWage * 30) / 365) * totalDays;
finalResult.YearsPay = lastMonthYearsPay + sumOfOldYearsPay;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
//var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
//result = (daylyWage * 30) / 365 * totalDays;
}
}
break;
//از شروع بکار تا ترک کار
case "OnLeftWork"://درپایان همکاری
if (isOldContract && contractEnd < start1403)
{
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
else if (isOldContract && contractEnd > start1403)
{
@@ -1169,7 +1286,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
// اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
}
else if (!isOldContract)
@@ -1178,7 +1295,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
{
var totalDays = (separationEndDate - startWorkDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
}
@@ -1189,14 +1306,14 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
if (isOldContract && contractEnd < start1403EndOfContract)
{
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
else if (isOldContract && contractEnd > start1403)
{
if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)
{
var totalDays = (separationEndDate - contractStart).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
}else if (!isOldContract)
@@ -1204,7 +1321,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)
{
var totalDays = (separationEndDate - contractStart).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
}
@@ -1218,13 +1335,13 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
//اگر شروع بکار بعد از 1403 بود تاریخ شرو بکار را در نظر میگیرد در غیر اینصورت اولین روز 1403 را در نظر میگیرد
var startComputeDay = startWorkDate >= start1403 ? startWorkDate : start1403;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
}
}
else if (contractStart < start1403 && contractEnd < start1403)// قبل از 1403
{
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 30) / 365 * totalDays;
finalResult.YearsPay = (daylyWage * 30) / 365 * totalDays;
//if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)// اگر ترک کار کرده بود یا فیش آخر قراداد بود
//{
// var totalDays = (separationEndDate - contractStart).TotalDays + 1;
@@ -1233,11 +1350,11 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
}
break;
default:
result = 0;
finalResult.YearsPay = 0;
break;
}
return result;
return finalResult;
}
@@ -2868,11 +2985,11 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
//عیدی
#region Bunoses
public double Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions,
public BunosesAndYearsPayStatus Bunoses(string startDateFa, DateTime leftWorkDate, DateTime separationStartDate, DateTime separationEndDate, double daylyWage, string bonusesOptions,
bool hasleft, DateTime startWorkDate, DateTime contractStart, DateTime contractEnd, long workshopId,
long employeeId, bool isOldContract)
{
BunosesAndYearsPayStatus finalResult = new BunosesAndYearsPayStatus();
double result = 0;
// ماه فیش آخر
var checkoutMonth = startDateFa.Substring(5, 2);
@@ -2882,29 +2999,91 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
case "OnCheckoutOfMonth":
var totalCheckoutDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = ((daylyWage * 60) / 365) * totalCheckoutDays;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totalCheckoutDays;
break;
case "OnEndOfYear"://درپایان سال
if (isOldContract && contractEnd < start1403)
{
var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = ((daylyWage * 60) / 365) * totaltDays;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays;
}
else if (isOldContract && contractEnd > start1403)
{
if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12")
{
//بدست آوردن اولین روز سال
var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = ((daylyWage * 60) / 365) * totalDays;
}
if ((hasleft && leftWorkDate <= separationEndDate) || checkoutMonth == "12")
{
//بدست آوردن اولین روز سال
string startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
DateTime startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
DateTime startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
#region NewCompute
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldBonuses = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays;
sumOfOldBonuses += foundYearsPay;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays;
finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
}
}
else if(!isOldContract)
{
@@ -2914,10 +3093,65 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = ((daylyWage * 60) / 365) * totalDays;
}
}
#region NewCompute
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldBonuses = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundYearsPay = ((foundDayliWage * 60) / 365) * foundTotaldays;
sumOfOldBonuses += foundYearsPay;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays;
finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
}
}
break;
@@ -2926,7 +3160,7 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
if (isOldContract && contractEnd < start1403)
{
var totaltDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = ((daylyWage * 60) / 365) * totaltDays;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totaltDays;
}
else if (isOldContract && contractEnd > start1403)
{
@@ -2937,60 +3171,177 @@ public class YearlySalaryRepository : RepositoryBase<long, YearlySalary>, IYearl
//var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
//var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
//var startComputeDay = contractStart >= startDayOfYearGr ? contractStart : startDayOfYearGr;
var totalDays = (separationEndDate - contractStart).TotalDays + 1;
result = (daylyWage * 60) / 365 * totalDays;
}
}
else if(isOldContract)
var startComputeDay = contractStart;
//var totalDays = (separationEndDate - contractStart).TotalDays + 1;
//result = (daylyWage * 60) / 365 * totalDays;
#region NewCompute
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldBonuses = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays;
sumOfOldBonuses += foundBonuses;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays;
finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
}
}
else if(!isOldContract)
{
if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd)
{
var totalDays = (separationEndDate - contractStart).TotalDays + 1;
result = (daylyWage * 60) / 365 * totalDays;
}
}
var startComputeDay = contractStart;
//var totalDays = (separationEndDate - contractStart).TotalDays + 1;
// finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays;
#region NewCompute
//شروع دوره
string st = startComputeDay.ToFarsi();
int syear = Convert.ToInt32(st.Substring(0, 4));
int smonth = Convert.ToInt32(st.Substring(5, 2));
PersianDateTime startPeriod = new PersianDateTime(syear, smonth, 1);
PersianDateTime startPeriodGr = new PersianDateTime(syear, smonth, 1);
//پایان فیش حقوقی آخر
PersianDateTime endCheckout = separationEndDate.ToPersianDateTime();
if (startPeriod.Year == endCheckout.Year && startPeriod.Month == endCheckout.Month)
{
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
finalResult.Bunoses = ((daylyWage * 60) / 365) * totalDays;
}
else
{
var checkoutList = _context.CheckoutSet.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId &&
x.ContractStart >= startComputeDay && x.ContractEnd < separationStartDate).AsEnumerable();
//پایان دوره
PersianDateTime endPeriod = (separationStartDate.AddDays(-1)).ToPersianDateTime();
List<BunosesAndYearsPayStatus> nullDateList = new List<BunosesAndYearsPayStatus>();
double sumOfOldBonuses = 0;
for (var startDate = startPeriod; startDate <= endPeriod; startDate = startDate.AddMonths(1))
{
var searchStart = ($"{startDate}").ToGeorgianDateTime();
var searchEnd = (($"{startDate}").FindeEndOfMonth()).ToGeorgianDateTime();
var foundCheckout = checkoutList.FirstOrDefault(x =>
x.ContractStart >= searchStart && x.ContractEnd <= searchEnd);
if (foundCheckout == null)
{
nullDateList.Add(new BunosesAndYearsPayStatus()
{
ContractStart = startDate == startPeriodGr ? startComputeDay : searchStart,
ContractEnd = searchEnd
});
finalResult.NotCompleted = true;
}
else
{
double foundMonthlySalary = foundCheckout.MonthlySalary;
int foundTotaldays = Convert.ToInt32(foundCheckout.SumOfWorkingDays);
double foundDayliWage = foundMonthlySalary / foundTotaldays;
double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays;
sumOfOldBonuses += foundBonuses;
}
}
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
double lastMonthBonuses = ((daylyWage * 60) / 365) * totalDays;
finalResult.Bunoses = lastMonthBonuses + sumOfOldBonuses;
finalResult.BunosesStatusList = nullDateList;
}
#endregion
}
}
break;
case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403
//case "EndOfContract1402LeftWork1403": //پایان قرارداد قبل 403 پایان همکاری بعد 403
if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403
{
if (hasleft && leftWorkDate <= separationEndDate)
{
//بدست آوردن اولین روز سال
var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// if (contractStart >= start1403 && contractEnd > start1403)// بعد از 1403
// {
// if (hasleft && leftWorkDate <= separationEndDate)
// {
// //بدست آوردن اولین روز سال
// var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
// var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
result = (daylyWage * 60) / 365 * totalDays;
}
}
else if (contractStart < start1403)// قبل از 1403
{
var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
result = (daylyWage * 60) / 365 * totalDays;
// // اگر تاریخ شروع بکار بزرگتر مساوی روز اول همین سال بود از تازیخ شوع بکار استفاده میشود در غیر اینصورت از روز اول سال استفاده میشود
// var startComputeDay = startWorkDate >= startDayOfYearGr ? startWorkDate : startDayOfYearGr;
// var totalDays = (separationEndDate - startComputeDay).TotalDays + 1;
// result = (daylyWage * 60) / 365 * totalDays;
// }
// }
// else if (contractStart < start1403)// قبل از 1403
// {
// var totalDays = (separationEndDate - separationStartDate).TotalDays + 1;
// finalResult.Bunoses = (daylyWage * 60) / 365 * totalDays;
//if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd || checkoutMonth == "12")
//{
// //بدست آوردن اولین روز سال
// var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
// var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// //if ((hasleft && leftWorkDate <= separationEndDate) || separationEndDate == contractEnd || checkoutMonth == "12")
// //{
// // //بدست آوردن اولین روز سال
// // var startDayOfYear = $"{startDateFa.Substring(0, 4)}/01/01";
// // var startDayOfYearGr = startDayOfYear.ToGeorgianDateTime();
// var startComputeDay = contractStart >= startDayOfYearGr ? contractStart : startDayOfYearGr;
// // var startComputeDay = contractStart >= startDayOfYearGr ? contractStart : startDayOfYearGr;
//}
}
break;
// //}
// }
// break;
default:
result = 0;
finalResult.Bunoses = 0;
break;
}
return result;
return finalResult;
}

View File

@@ -498,29 +498,88 @@ public class IndexModel : PageModel
var computeOption = getComputeOption == null
? workshop.ComputeOptions
: getComputeOption.ComputeOptions;
//سنوات
//var leftNull = "1500/01/01";
//var leftNullGr = leftNull.ToGeorgianDateTime();
//var leftWorkDateGr = new DateTime(2121,3,21);
//if (separation.LeftWorkDate < leftNullGr)
//{
// leftWorkDateGr = separation.LeftWorkDate.AddDays(-1);
//}
//else
//{
// leftWorkDateGr = separation.LeftWorkDate;
//}
var yearsPay = _yearlySalaryRepository.Years(separation.ContractStartGr, separation.LeftWorkDate,
separation.ContractEndGr,
dayliWage, yearsOption, separation.HasLeft, separation.StartWorkDate, contract.ContractStartGr,
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, workshop.IsOldContract);
//عیدی
#region BonusesPay
var bunosesPay = _yearlySalaryRepository.Bunoses(separation.ContarctStart, separation.LeftWorkDate,
separation.ContractStartGr, separation.ContractEndGr,
dayliWage, bonusesOption, separation.HasLeft, separation.StartWorkDate,
contract.ContractStartGr,
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, workshop.IsOldContract);
separation.ContractStartGr, separation.ContractEndGr,
dayliWage, bonusesOption, separation.HasLeft, separation.StartWorkDate,
contract.ContractStartGr,
contract.ContractEndGr, contract.WorkshopIds, contract.EmployeeId, workshop.IsOldContract);
if (bunosesPay.NotCompleted || yearsPay.NotCompleted)
{
List<BunosesAndYearsPayStatus> lostCheckoutsDates = new List<BunosesAndYearsPayStatus>();
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)
{
ComputingViewModel foundMandatoryCompute = new ComputingViewModel();
var foundContract = _contractRepository.GetContractByStartEnd(found.ContractStart,
found.ContractEnd, contract.WorkshopIds, contract.EmployeeId);
if (foundContract.Id > 0)
{
var foundWorkingHours = _workingHoursTempApplication.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 = _rollCallEmployeeStatusApp.HasRollCallRecord(contract.EmployeeId,
contract.WorkshopIds,
found.ContractStart, found.ContractEnd);
if (foundHasRollCall)
{
foundMandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId,
contract.WorkshopIds,
found.ContractStart, found.ContractEnd, foundWorkingHours, 0);
}
else
{
foundMandatoryCompute = MandatoryHours(foundWorkingHours, workshop.WorkshopHolidayWorking, 0);
}
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);
double foundMontlySalary = MontlyYearsBunos.MontlyWage;
int foundTotaldays = Convert.ToInt32(MontlyYearsBunos.SumOfWorkingDay);
double foundDayliWage = foundMontlySalary / foundTotaldays;
if (bunosesPay.NotCompleted)
{
double foundBonuses = ((foundDayliWage * 60) / 365) * foundTotaldays;
bunosesPay.Bunoses += foundBonuses;
}
if (yearsPay.NotCompleted)
{
double foundBonuses = ((foundDayliWage * 30) / 365) * foundTotaldays;
yearsPay.YearsPay += foundBonuses;
}
}
}
}
#endregion
//مزد مرخصی جدید
var leavePayNew = _yearlySalaryRepository.LeavePay(separation.ContarctStart,
separation.LeftWorkDate, separation.ContractStartGr, separation.ContractEndGr,
@@ -571,9 +630,9 @@ public class IndexModel : PageModel
//حق تاهل
MarriedAllowance = mandatoryCompute.MarriedAllowance,
//سنوات
YearsPay = yearsPay,
YearsPay = yearsPay.YearsPay,
//عیدی و پادادش
BonusesPay = bunosesPay,
BonusesPay = bunosesPay.Bunoses,
//مدت غیبت
AbsencePeriod = leavePayNew.AbsencePeriod,
//کسری غیبت

View File

@@ -389,5 +389,5 @@
var deleteRollCallData = `@Url.Page("./CaseHistory", "RemoveEmployeeRollCallsInDate")`;
</script>
<script src="~/assetsclient/pages/rollcall/js/casehistory.js?ver=13515"></script>
<script src="~/assetsclient/pages/rollcall/js/casehistory.js?ver=@clientVersion"></script>
}

View File

@@ -46,7 +46,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
}
public IActionResult OnGet()
public IActionResult OnGet()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
@@ -66,7 +66,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
YearlyList = _yearlySalaryApplication.GetYears();
return Page();
}
}
else
{
return Redirect("/Client/Company/RollCall");
@@ -87,6 +87,12 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
if (employeeId > 0)
{
RollCallEmployeeViewModels = _rollCallApplication.GetEmployeeRollCallsHistory(employeeId, workshopId, startDate, endDate, exactDateFa, dateEmployeeIndex);
if (RollCallEmployeeViewModels == null)
return new JsonResult(new
{
IsSuccedded = false,
message = "داده ای یافت نشد!",
});
}
else
{

View File

@@ -294,6 +294,8 @@ function caseHistoryLoadAjax() {
var caseHistoryData = response.data;
var caseHistoryEmployeeData = response.dataEmployee;
console.log(response);
if (response.isSuccedded) {
if (caseHistoryData == null) {