Files
Backend-Api/CompanyManagment.Application/InsuranceListApplication.cs
2024-12-22 02:47:29 +03:30

1639 lines
87 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using _0_Framework.Application;
using Company.Domain.DateSalaryAgg;
using Company.Domain.DateSalaryItemAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.EmployeeChildrenAgg;
using Company.Domain.InsuranceEmployeeInfoAgg;
using Company.Domain.InsuranceJobItemAgg;
using Company.Domain.InsuranceListAgg;
using Company.Domain.InsurancWorkshopInfoAgg;
using Company.Domain.LeftWorkInsuranceAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.DateSalary;
using CompanyManagment.App.Contracts.DateSalaryItem;
using CompanyManagment.App.Contracts.EmployeeInsurancListData;
using CompanyManagment.App.Contracts.InsuranceEmployeeInfo;
using CompanyManagment.App.Contracts.InsuranceJobItem;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.InsuranceYearlySalary;
using CompanyManagment.App.Contracts.LeftWorkInsurance;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.YearlySalary;
using CompanyManagment.App.Contracts.YearlySalaryItems;
using MD.PersianDateTime.Standard;
namespace CompanyManagment.Application;
public class InsuranceListApplication: IInsuranceListApplication
{
//private readonly ITransactionManager _transactionManager;
private readonly IInsuranceListRepository _insuranceListRepositpry;
private readonly IEmployeeInsurancListDataRepository _employeeInsurancListDataRepository;
private readonly IInsuranceEmployeeInfoRepository _insuranceEmployeeInfoRepository;
private readonly IEmployeeRepository _employeeRepository;
private readonly IWorkshopRepository _workShopRepository;
private readonly ILeftWorkInsuranceApplication _leftWorkInsuranceApplication;
private readonly IInsuranceEmployeeInfoApplication _insuranceEmployeeInfoApplication;
private readonly IEmployeeInsurancListDataApplication _employeeInsurancListDataApplication;
private readonly IYearlySalaryApplication _yearlySalaryApplication;
private readonly IYearlySalaryItemApplication _yearlySalaryItemApplication;
private readonly IInsuranceWorkshopInfoRepository _insuranceWorkshopInfoRepository;
private readonly IInsuranceJobItemRepositpry _insuranceJobItemRepository;
private readonly IDateSalaryRepository _dateSalaryRepository;
private readonly IDateSalaryItemRepository _dateSalaryItemRepository;
private readonly IPersonalContractingPartyApp _contractingPartyApp;
private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
private readonly IInsuranceYearlySalaryApplication _insuranceYearlySalaryApplication;
public InsuranceListApplication( IInsuranceListRepository insuranceListRepositpry, IEmployeeInsurancListDataRepository employeeInsurancListDataRepository, IInsuranceEmployeeInfoRepository insuranceEmployeeInfoRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workShopRepository, ILeftWorkInsuranceApplication leftWorkInsuranceApplication, IInsuranceEmployeeInfoApplication insuranceEmployeeInfoApplication, IEmployeeInsurancListDataApplication employeeInsurancListDataApplication, IYearlySalaryApplication yearlySalaryApplication,IYearlySalaryItemApplication yearlySalaryItemApplication ,IInsuranceWorkshopInfoRepository insuranceWorkshopInfoRepository,IInsuranceJobItemRepositpry insuranceJobItemRepository, IDateSalaryRepository dateSalaryRepository, IDateSalaryItemRepository dateSalaryItemRepository, IPersonalContractingPartyApp contractingPartyApp, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IInsuranceYearlySalaryApplication insuranceYearlySalaryApplication)
{
// _transactionManager = transactionManager;
_insuranceListRepositpry = insuranceListRepositpry;
_employeeInsurancListDataRepository = employeeInsurancListDataRepository;
_insuranceEmployeeInfoRepository = insuranceEmployeeInfoRepository;
_employeeRepository = employeeRepository;
_workShopRepository = workShopRepository;
_leftWorkInsuranceApplication = leftWorkInsuranceApplication;
_insuranceEmployeeInfoApplication = insuranceEmployeeInfoApplication;
_employeeInsurancListDataApplication = employeeInsurancListDataApplication;
_yearlySalaryApplication = yearlySalaryApplication;
_yearlySalaryItemApplication = yearlySalaryItemApplication;
_insuranceWorkshopInfoRepository = insuranceWorkshopInfoRepository;
_insuranceJobItemRepository = insuranceJobItemRepository;
_dateSalaryRepository = dateSalaryRepository;
_dateSalaryItemRepository = dateSalaryItemRepository;
_contractingPartyApp = contractingPartyApp;
_leftWorkInsuranceRepository = leftWorkInsuranceRepository;
_insuranceYearlySalaryApplication = insuranceYearlySalaryApplication;
}
public OperationResult Create(CreateInsuranceList command)
{
var operation = new OperationResult();
if (command.WorkshopId==0 )
{
return operation.Failed(" انتخاب کارگاه اجباری می باشد ");
}
if ( command.Month == "0" )
{
return operation.Failed(" انتخاب ماه اجباری می باشد ");
}
if ( command.Year == "0")
{
return operation.Failed("انتخاب سال اجباری می باشد ");
}
else if (_insuranceListRepositpry.Exists(x =>
x.WorkshopId == command.WorkshopId && x.Month == command.Month && x.Year == command.Year))
{
return operation.Failed(" لیست بیمه برای کارگاه، سال و ماه انتخاب شده قبلا ایجاد شده است ");
}
else
{
#region EmployeeDetailsForInsurance
if (command.EmployeeDetailsForInsuranceList != null && command.EmployeeDetailsForInsuranceList.Count > 0)
{
foreach (var item in command.EmployeeDetailsForInsuranceList)
{
if (item.InsuranceEmployeeInformationId == 0)
{
var createInsuranceEmployeeInfo = new CreateInsuranceEmployeeInfo();
createInsuranceEmployeeInfo.EmployeeId = item.EmployeeId;
createInsuranceEmployeeInfo.FName = item.FName;
createInsuranceEmployeeInfo.LName = item.LName;
createInsuranceEmployeeInfo.FatherName = item.FatherName;
createInsuranceEmployeeInfo.PlaceOfIssue = item.PlaceOfIssue;
createInsuranceEmployeeInfo.NationalCode = item.NationalCode;
createInsuranceEmployeeInfo.IdNumber = item.IdNumber;
createInsuranceEmployeeInfo.Gender = item.Gender;
createInsuranceEmployeeInfo.InsuranceCode = item.InsuranceCode;
createInsuranceEmployeeInfo.DateOfBirthGr = item.DateOfBirth.ToGeorgianDateTime();
createInsuranceEmployeeInfo.DateOfIssueGr = item.DateOfIssue.ToGeorgianDateTime();
_insuranceEmployeeInfoApplication.Create(createInsuranceEmployeeInfo);
}
else
{
var insuranceEmployeeInfo = new EditInsuranceEmployeeInfo();
insuranceEmployeeInfo.Id = item.InsuranceEmployeeInformationId;
insuranceEmployeeInfo.EmployeeId = item.EmployeeId;
insuranceEmployeeInfo.FName = item.FName;
insuranceEmployeeInfo.LName = item.LName;
insuranceEmployeeInfo.FatherName = item.FatherName;
insuranceEmployeeInfo.PlaceOfIssue = item.PlaceOfIssue;
insuranceEmployeeInfo.NationalCode = item.NationalCode;
insuranceEmployeeInfo.IdNumber = item.IdNumber;
insuranceEmployeeInfo.Gender = item.Gender;
insuranceEmployeeInfo.InsuranceCode = item.InsuranceCode;
insuranceEmployeeInfo.DateOfBirthGr = item.DateOfBirth.ToGeorgianDateTime();
insuranceEmployeeInfo.DateOfIssueGr = item.DateOfIssue.ToGeorgianDateTime();
_insuranceEmployeeInfoApplication.Edit(insuranceEmployeeInfo);
}
}
}
else
{
return operation.Failed(" لیست پرسنل در کارگاه و تاریخ انتخاب شده خالی است ");
}
#endregion
string startMonthCurrent = command.Year + "/" + command.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
command.StartDate = startMonthCurrent.ToGeorgianDateTime();
command.EndDate = endMonthCurrent.ToGeorgianDateTime();
#region InsuranceList
operation = _insuranceListRepositpry.CreateInsuranceList(command);
#endregion
return operation;
}
}
public OperationResult Edit(EditInsuranceList command)
{
var operation = new OperationResult();
if (command.WorkshopId == 0)
{
return operation.Failed(" انتخاب کارگاه اجباری می باشد ");
}
if (command.Month == "0")
{
return operation.Failed(" انتخاب ماه اجباری می باشد ");
}
if (command.Year == "0")
{
return operation.Failed("انتخاب سال اجباری می باشد ");
}
else if (_insuranceListRepositpry.Exists(x =>x.id!=command.Id && x.WorkshopId == command.WorkshopId && x.Month == command.Month && x.Year == command.Year))
{
return operation.Failed(" لیست بیمه برای کارگاه، سال و ماه انتخاب شده قبلا ایجاد شده است ");
}
else
{
#region EmployeeDetailsForInsurance
if (command.EmployeeDetailsForInsuranceList != null && command.EmployeeDetailsForInsuranceList.Count > 0)
{
foreach (var item in command.EmployeeDetailsForInsuranceList)
{
if (item.InsuranceEmployeeInformationId == 0)
{
var createInsuranceEmployeeInfo = new CreateInsuranceEmployeeInfo();
createInsuranceEmployeeInfo.EmployeeId = item.EmployeeId;
createInsuranceEmployeeInfo.FName = item.FName;
createInsuranceEmployeeInfo.LName = item.LName;
createInsuranceEmployeeInfo.FatherName = item.FatherName;
createInsuranceEmployeeInfo.PlaceOfIssue = item.PlaceOfIssue;
createInsuranceEmployeeInfo.NationalCode = item.NationalCode;
createInsuranceEmployeeInfo.IdNumber = item.IdNumber;
createInsuranceEmployeeInfo.Gender = item.Gender;
createInsuranceEmployeeInfo.InsuranceCode = item.InsuranceCode;
createInsuranceEmployeeInfo.DateOfBirthGr = item.DateOfBirth.ToGeorgianDateTime();
createInsuranceEmployeeInfo.DateOfIssueGr =!string.IsNullOrEmpty(item.DateOfIssue)? item.DateOfIssue.ToGeorgianDateTime(): "1300/10/11".ToGeorgianDateTime();
_insuranceEmployeeInfoApplication.Create(createInsuranceEmployeeInfo);
}
else
{
var insuranceEmployeeInfo = new EditInsuranceEmployeeInfo();
insuranceEmployeeInfo.Id = item.InsuranceEmployeeInformationId;
insuranceEmployeeInfo.EmployeeId = item.EmployeeId;
insuranceEmployeeInfo.FName = item.FName;
insuranceEmployeeInfo.LName = item.LName;
insuranceEmployeeInfo.FatherName = item.FatherName;
insuranceEmployeeInfo.PlaceOfIssue = item.PlaceOfIssue;
insuranceEmployeeInfo.NationalCode = item.NationalCode;
insuranceEmployeeInfo.IdNumber = item.IdNumber;
insuranceEmployeeInfo.Gender = item.Gender;
insuranceEmployeeInfo.InsuranceCode = item.InsuranceCode;
insuranceEmployeeInfo.DateOfBirthGr = item.DateOfBirth.ToGeorgianDateTime();
insuranceEmployeeInfo.DateOfIssueGr = !string.IsNullOrEmpty(item.DateOfIssue) ? item.DateOfIssue.ToGeorgianDateTime() : "1300/10/11".ToGeorgianDateTime(); ;
_insuranceEmployeeInfoApplication.Edit(insuranceEmployeeInfo);
}
}
}
else
{
return operation.Failed(" لیست پرسنل در کارگاه و تاریخ انتخاب شده خالی است ");
}
#endregion
string startMonthCurrent = command.Year + "/" + command.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
command.StartDate = startMonthCurrent.ToGeorgianDateTime();
command.EndDate = endMonthCurrent.ToGeorgianDateTime();
#region InsuranceList
operation = _insuranceListRepositpry.EditInsuranceList(command);
#endregion
if (command.InsuranceWorkshopInfo != null)
{
var insuranceWorkshopInfoObj =
_insuranceWorkshopInfoRepository.Get(command.InsuranceWorkshopInfo.InsuranceWorkshopInfoId);
insuranceWorkshopInfoObj.Edit(command.InsuranceWorkshopInfo.WorkshopName,
command.InsuranceWorkshopInfo.InsuranceCode, command.InsuranceWorkshopInfo.AgreementNumber,
command.InsuranceWorkshopInfo.EmployerName, command.InsuranceWorkshopInfo.Address, command.InsuranceWorkshopInfo.ListNumber);
_insuranceWorkshopInfoRepository.SaveChanges();
}
return operation;
}
}
public EditInsuranceList GetDetails(long id)
{
var insuranceListDetails = _insuranceListRepositpry.GetDetails(id);
string startMonthCurrent = insuranceListDetails.Year + "/" + insuranceListDetails.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
var dayMonthCurrent = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var year = Convert.ToInt32(insuranceListDetails.Year);
var month = Convert.ToInt32(insuranceListDetails.Month);
var day = 1;
var persianCurrentStartDate = new PersianDateTime(year, month, day);
var persianCurrentEndDate = new PersianDateTime(year, month, dayMonthCurrent);
var model = new YearlySalarySearchModel();
model.StartDateGr = startMonthCurrent.ToGeorgianDateTime();
model.EndDateGr = endMonthCurrent.ToGeorgianDateTime();
model.year = insuranceListDetails.Year;
var yearSalaryObj = _yearlySalaryApplication.GetDetailsBySearchModel(model);
var yearlysalaryItem = new YearlysalaryItemViewModel();
var housingAllowance = new YearlysalaryItemViewModel();
var consumableItems = new YearlysalaryItemViewModel();
if (yearSalaryObj != null)
{
yearlysalaryItem = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "مزد روزانه").FirstOrDefault();
housingAllowance = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه مسکن").FirstOrDefault();
consumableItems = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه اقلام").FirstOrDefault();
}
foreach (var item in insuranceListDetails.EmployeeDetailsForInsuranceList)
{
item.IncludeStatus = _leftWorkInsuranceApplication.GetLeftPersonelByWorkshopIdAndEmployeeId(insuranceListDetails.WorkshopId,item.EmployeeId).IncludeStatus;
if (!string.IsNullOrEmpty(item.LeftWorkDate))
{
var yearEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(0, 4));
var monthEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(5, 2));
var dayEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(8, 2));
var persianLeftDateUser = new PersianDateTime(yearEndDateUser, monthEndDateUser, dayEndDateUser);
if (persianLeftDateUser <= persianCurrentEndDate)
item.HasLeftWorkInMonth = true;
else
item.HasLeftWorkInMonth = false;
}
else
{
item.HasLeftWorkInMonth = false;
}
var yearStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(0, 4));
var monthStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(5, 2));
var dayStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(8, 2));
var persianStartDateUser = new PersianDateTime(yearStartDateUser, monthStartDateUser, dayStartDateUser);
if (persianStartDateUser < persianCurrentStartDate)
item.HasStartWorkInMonth = false;
else
item.HasStartWorkInMonth = true;
item.StartMonthCurrent = startMonthCurrent;
item.DailyWageStr = item.DailyWage.ToMoney();
item.HousingAllowance = housingAllowance.ItemValue;
item.ConsumableItems = consumableItems.ItemValue;
item.EndMonthCurrentDay = dayMonthCurrent;
}
insuranceListDetails.EmployeeDetailsForInsuranceList = insuranceListDetails.EmployeeDetailsForInsuranceList.OrderByDescending(x => x.HasLeftWorkInMonth).ThenByDescending(x => x.HasStartWorkInMonth)
.ThenBy(x => x.LName).ToList();
insuranceListDetails.AllInsuredShare = insuranceListDetails.InsuredShare +
insuranceListDetails.EmployerShare +
insuranceListDetails.UnEmploymentInsurance;
return insuranceListDetails;
}
public List<InsuranceListViewModel> Search(InsuranceListSearchModel searchModel)
{
var result = _insuranceListRepositpry.Search(searchModel);
result = result.Select(x => new InsuranceListViewModel()
{
Id = x.Id,
Year = x.Year,
Month = x.Month.GetMonthByNumber(),
MonthNumber = x.MonthNumber,
WorkShopCode = x.WorkShopCode,
WorkShopName = x.WorkShopName,
WorkShopId = x.WorkShopId,
TypeOfInsuranceSend = x.TypeOfInsuranceSend,
FixedSalary = x.FixedSalary,
StrFixedSalary = x.StrFixedSalary,
EmployerName = x.EmployerName,
Branch = x.Branch,
City = x.City,
ConfirmSentlist = x.ConfirmSentlist,
EmployerId = x.EmployerId,
IsBlockCantracingParty = _contractingPartyApp.IsBlockByEmployerId(x.EmployerId),
}).ToList();
return result;
}
// محاسبه جدول پرسنل در - DSKWOR 1 create
public MainEmployeeDetailsViewModel SearchEmployeeForCreateInsuranceList( EmployeeForCreateInsuranceListSearchModel searchModel)
{
var result = new MainEmployeeDetailsViewModel();
var workshopId = searchModel.WorkshopIds.FirstOrDefault();
var employerId = _workShopRepository.GetDetails(workshopId).EmployerIdList.FirstOrDefault();
var isBolock = _contractingPartyApp.IsBlockByEmployerId(employerId);
double monthlybaseYear = 0;
// اگر لیست بیمه تکراری نبود
if (!_insuranceListRepositpry.Exists(x =>x.Year == searchModel.Year && x.Month == searchModel.Month && searchModel.WorkshopIds.Contains(x.WorkshopId)))
{
List<EmployeeDetailsForInsuranceListViewModel> list = new List<EmployeeDetailsForInsuranceListViewModel>();
// شروع بکار و ترک کار بیمه
var leftWorkInsuranceViewModelList =_leftWorkInsuranceApplication.SearchForCreateInsuranceList(searchModel);
int leftWorkInsuranceCount= leftWorkInsuranceViewModelList.Count();
string startMonthCurrent = searchModel.Year + "/" + searchModel.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
var model = new YearlySalarySearchModel();
var startDate = startMonthCurrent.ToGeorgianDateTime();
model.StartDateGr = startDate;
model.EndDateGr = endMonthCurrent.ToGeorgianDateTime();
model.year = searchModel.Year;
//مقادیر سالانه این تاریخ
var yearSalaryObj = _yearlySalaryApplication.GetDetailsBySearchModel(model);
var yearlysalaryItem = new YearlysalaryItemViewModel();
var housingAllowance = new YearlysalaryItemViewModel();
var consumableItems = new YearlysalaryItemViewModel();
var maritalStatus = new YearlysalaryItemViewModel();
if (yearSalaryObj != null)
{
yearlysalaryItem = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "مزد روزانه").FirstOrDefault();
housingAllowance = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه مسکن").FirstOrDefault();
consumableItems = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه اقلام").FirstOrDefault();
maritalStatus = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "حق تاهل").FirstOrDefault();
}
foreach (var item in leftWorkInsuranceViewModelList)
{
var employeeObject = _employeeRepository.GetDetailsByADDate(item.EmployeeId);
var employeeDetailsForInsuranceObj = new EmployeeDetailsForInsuranceListViewModel();
employeeDetailsForInsuranceObj.HasConfilictJobs = false;
employeeDetailsForInsuranceObj.IsMaritalStatusSet = // آیا وضعیت تاهل پرسنل ست شده است
!string.IsNullOrWhiteSpace(employeeObject.MaritalStatus);
if (_insuranceEmployeeInfoRepository.Exists(x => x.EmployeeId == item.EmployeeId))
{
var employeeInfoObject = _insuranceEmployeeInfoApplication.GetDetailsByEmployeeId(item.EmployeeId);
employeeDetailsForInsuranceObj.InsuranceEmployeeInformationId = employeeInfoObject.Id;
employeeDetailsForInsuranceObj.EmployeeId = employeeInfoObject.EmployeeId;
employeeDetailsForInsuranceObj.FName = employeeInfoObject.FName;
employeeDetailsForInsuranceObj.LName = employeeInfoObject.LName;
employeeDetailsForInsuranceObj.FatherName = employeeInfoObject.FatherName;
employeeDetailsForInsuranceObj.DateOfBirth = employeeInfoObject.DateOfBirth;
employeeDetailsForInsuranceObj.DateOfIssue = employeeInfoObject.DateOfIssue;
employeeDetailsForInsuranceObj.DateOfBirthGr = employeeInfoObject.DateOfBirthGr;
employeeDetailsForInsuranceObj.DateOfIssueGr = employeeInfoObject.DateOfIssueGr;
employeeDetailsForInsuranceObj.PlaceOfIssue = employeeInfoObject.PlaceOfIssue;
employeeDetailsForInsuranceObj.IdNumber = employeeInfoObject.IdNumber;
employeeDetailsForInsuranceObj.Gender = employeeInfoObject.Gender;
//از جدول پرسنل پر می شود
employeeDetailsForInsuranceObj.NationalCode = employeeObject.NationalCode; //employeeInfoObject.NationalCode;
employeeDetailsForInsuranceObj.Nationality = employeeObject.Nationality;
employeeDetailsForInsuranceObj.InsuranceCode = employeeObject.InsuranceCode; //employeeInfoObject.InsuranceCode;
}
else
{
// var employeeObject = _employeeRepository.GetDetailsByADDate(item.EmployeeId);
employeeDetailsForInsuranceObj.InsuranceEmployeeInformationId = 0;
//employeeDetailsForInsuranceObj.EmployeeInsurancListDataId = 0;
employeeDetailsForInsuranceObj.EmployeeId = employeeObject.Id;
employeeDetailsForInsuranceObj.FName = employeeObject.FName;
employeeDetailsForInsuranceObj.LName = employeeObject.LName;
employeeDetailsForInsuranceObj.FatherName = employeeObject.FatherName;
employeeDetailsForInsuranceObj.DateOfBirth = (employeeObject.DateOfBirth=="1300/10/11"?"" : employeeObject.DateOfBirth);
employeeDetailsForInsuranceObj.DateOfIssue = employeeObject.DateOfIssue;
employeeDetailsForInsuranceObj.PlaceOfIssue = employeeObject.PlaceOfIssue;
employeeDetailsForInsuranceObj.NationalCode = employeeObject.NationalCode;
employeeDetailsForInsuranceObj.IdNumber = employeeObject.IdNumber;
employeeDetailsForInsuranceObj.Gender = employeeObject.Gender;
employeeDetailsForInsuranceObj.InsuranceCode = employeeObject.InsuranceCode;
employeeDetailsForInsuranceObj.Nationality = employeeObject.Nationality;
}
#region ComputingWorkingDays
int startWork = 0;
int endWork = 0;
var year = Convert.ToInt32(searchModel.Year);
var month = Convert.ToInt32(searchModel.Month);
var day = 1;
var persianCurrentStartDate = new PersianDateTime(year, month, day);
var dayMonthCurrent = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var persianCurrentEndDate = new PersianDateTime(year, month, dayMonthCurrent);
//آخرین روز ماه جاری
var endMonthCurrentDay = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var yearStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(0, 4));
var monthStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(5, 2));
var dayStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(8, 2));
var persianStartDateUser = new PersianDateTime(yearStartDateUser, monthStartDateUser, dayStartDateUser);
if (persianStartDateUser < persianCurrentStartDate)
employeeDetailsForInsuranceObj.HasStartWorkInMonth = false;
else
employeeDetailsForInsuranceObj.HasStartWorkInMonth = true;
//اگر شروع به کار کاربر از ابتدای ماه جاری کمتر باشد
if (persianStartDateUser <= persianCurrentStartDate)
{
startWork = 1;
}
else
{
startWork = dayStartDateUser;
}
if (!string.IsNullOrEmpty(item.LeftWorkDate))
{
var yearEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(0, 4));
var monthEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(5, 2));
var dayEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(8, 2));
var persianLeftDateUser = new PersianDateTime(yearEndDateUser, monthEndDateUser, dayEndDateUser);
var persianEndDateUser = persianLeftDateUser.AddDays(-1);
var persianEndDateUserStr = persianLeftDateUser.AddDays(-1).ToString("yyyy/MM/dd");
//if (persianLeftDateUser <= persianCurrentEndDate)
// employeeDetailsForInsuranceObj.HasLeftWorkInMonth = true;
//else
// employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
//ترک کارش در ماه و سال جاری بود نمایش داده شود
if (!item.LeftWorkDate.Contains(searchModel.Year + "/" + searchModel.Month))
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
item.LeftWorkDate = string.Empty;
item.LeftWorkDateGr = null;
}
else
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = true;
}
//اگر پایان به کار کاربر از پایان ماه جاری بیشتر باشد
if (persianEndDateUser >= persianCurrentEndDate)
{
endWork = endMonthCurrentDay;
}
else
{
endWork = Convert.ToInt32(persianEndDateUserStr.Substring(8, 2));
}
}
else
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
endWork = endMonthCurrentDay;
}
int countWorkingDays = 0;
for (int i = startWork; i <= endWork; i++)
{
countWorkingDays = countWorkingDays + 1;
}
//farokhiChanges
//روزهای کارکرد پرسنل با آی دی های زیر دستی تعریف شد
switch (item.EmployeeId)
{
//case 3812://ثابت- کسری حاجی پور
// countWorkingDays = 15;
// break;
case 40463://ثابت
countWorkingDays = 10;
break;
case 40469://ثابت
countWorkingDays = 7;
break;
case 9950://ثابت
countWorkingDays = 15;
break;
case 9640://ثابت
countWorkingDays = 15;
break;
case 40998://ثابت
countWorkingDays = 15;
break;
case 6219://ثابت
countWorkingDays = 15;
break;
//case 7897://ثابت
// countWorkingDays = 15;
break;
}
#endregion
employeeDetailsForInsuranceObj.IncludeStatus = item.IncludeStatus;
#region InsuranceJob
double dailyWage = employeeDetailsForInsuranceObj.DailyWage;
if (searchModel.FixedSalary)
{
dailyWage = Convert.ToDouble(GetDailyWageFixedSalary(searchModel.Year, item.WorkshopId,item.EmployeeId, model.StartDateGr, model.EndDateGr, item.JobId, searchModel.Population, searchModel.InsuranceJobId));
employeeDetailsForInsuranceObj.HasConfilictJobs = (dailyWage == 0 ? true : false);
}
#endregion
if (yearlysalaryItem != null)
{
if(!searchModel.FixedSalary )
{
//dailyWage= yearlysalaryItem.ItemValue;
dailyWage = ComputeDailyWage(yearlysalaryItem.ItemValue, item.EmployeeId,item.WorkshopId, searchModel.Year) ;
//(double basic, int totalYears) basicResult = BasicYear(item.EmployeeId, workshopId, startDate);
//var basic = basicResult.basic;
//if (basicResult.totalYears > 0)
//{
// monthlybaseYear = GetMonthlyBaseYear(basicResult.basic, countWorkingDays);
//}
}
employeeDetailsForInsuranceObj.DailyWage = GetRoundValue(dailyWage);
employeeDetailsForInsuranceObj.DailyWageStr = employeeDetailsForInsuranceObj.DailyWage.ToMoney();
employeeDetailsForInsuranceObj.MonthlySalary = GetRoundValue(dailyWage * countWorkingDays);
employeeDetailsForInsuranceObj.HousingAllowance = housingAllowance.ItemValue;
employeeDetailsForInsuranceObj.ConsumableItems = consumableItems.ItemValue;
employeeDetailsForInsuranceObj.EndMonthCurrentDay = endMonthCurrentDay;
employeeDetailsForInsuranceObj.YearlySalaryItem = yearlysalaryItem.ItemValue;
employeeDetailsForInsuranceObj.MonthlyBaseYearsStr = monthlybaseYear.ToMoney();
if (item.IncludeStatus)
{
var marital = employeeObject.MaritalStatus == "متاهل" ? maritalStatus.ItemValue : 0;
employeeDetailsForInsuranceObj.MonthlyBenefits = GetMonthlyBenefits(endMonthCurrentDay, consumableItems.ItemValue, housingAllowance.ItemValue, marital, countWorkingDays);
}
else
{
employeeDetailsForInsuranceObj.MonthlyBenefits = 0;
}
if (searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist" && item.JobId == 10) //کمک دولت
{
employeeDetailsForInsuranceObj.MonthlyBenefits = 0;
}
//farokhiChanges
if (item.EmployeeId == 42783)
employeeDetailsForInsuranceObj.MonthlyBenefits = 53082855;
employeeDetailsForInsuranceObj.BenefitsIncludedContinuous =employeeDetailsForInsuranceObj.MonthlyBenefits + employeeDetailsForInsuranceObj.MonthlySalary;
//if ((!item.IncludeStatus &&(item.JobId == 10 || item.JobId == 17 || item.JobId == 18 || item.JobId == 16)) ||(item.IncludeStatus && item.JobId == 10)) // 10 --> karfarma
//{
// var insuranceShare2 =(employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 27) / 100;
// employeeDetailsForInsuranceObj.InsuranceShare =GetRoundValue(insuranceShare2);
//}
//else
//{
var insuranceShare = (employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 7) / 100;
employeeDetailsForInsuranceObj.InsuranceShare = GetRoundValue(insuranceShare); //Math.Round(insuranceShare, MidpointRounding.ToPositiveInfinity);
//}
var employerShare = (employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 20) / 100;
employeeDetailsForInsuranceObj.EmployerShare = GetRoundValue(employerShare); //Math.Round(employerShare, MidpointRounding.ToPositiveInfinity);
//if (searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist" && item.JobId==10)//کمک دولت
//{employeeDetailsForInsuranceObj.InsuranceShare = 0;}
var unEmploymentInsurance =(employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 3) / 100;
employeeDetailsForInsuranceObj.UnEmploymentInsurance = GetRoundValue(unEmploymentInsurance);
employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous = employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous;
employeeDetailsForInsuranceObj.IncludedAndNotIncluded = employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous + employeeDetailsForInsuranceObj.BenefitsIncludedContinuous;
}
employeeDetailsForInsuranceObj.StartMonthCurrent = startMonthCurrent;
employeeDetailsForInsuranceObj.WorkingDays = countWorkingDays;
employeeDetailsForInsuranceObj.StartWorkDate = item.StartWorkDate;
employeeDetailsForInsuranceObj.LeftWorkDate = item.LeftWorkDate;
employeeDetailsForInsuranceObj.JobId = item.JobId;
employeeDetailsForInsuranceObj.JobName = item.JobName;
employeeDetailsForInsuranceObj.JobCode = item.JobCode;
if (!string.IsNullOrWhiteSpace(item.LeftWorkDate))
employeeDetailsForInsuranceObj.LeftWorkDateGr = item.LeftWorkDateGr;
employeeDetailsForInsuranceObj.StartWorkDateGr = item.StartWorkDateGr;
//farokhiChanges
if (item.EmployeeId == 42783)
employeeDetailsForInsuranceObj.MonthlyBenefits = 53082855;
list.Add(employeeDetailsForInsuranceObj);
}
list = list.OrderByDescending(x => x.HasLeftWorkInMonth).ThenByDescending(x => x.HasStartWorkInMonth)
.ThenBy(x => x.LName).ToList();
result.EmployeeDetailsForInsuranceList = list;
result.IsExist = false;
result.IsBlock = isBolock == "true"?true:false;
result.MaritalStatus = maritalStatus.ItemValue;
}
else
{
result.IsExist = true;
result.IsBlock = isBolock == "true" ? true : false;
}
return result;
}
public OperationResult CreateEmployeeDetailsInfo(EmployeeDetailsForInsuranceListViewModel command)
{
var result = new OperationResult();
try
{
//_transactionManager.BeginTransaction();
var createInsuranceEmployeeInfo = new CreateInsuranceEmployeeInfo();
createInsuranceEmployeeInfo.EmployeeId = command.EmployeeId;
createInsuranceEmployeeInfo.FName = command.FName;
createInsuranceEmployeeInfo.LName = command.LName;
createInsuranceEmployeeInfo.FatherName = command.FatherName;
createInsuranceEmployeeInfo.PlaceOfIssue = command.PlaceOfIssue;
createInsuranceEmployeeInfo.NationalCode = command.NationalCode;
createInsuranceEmployeeInfo.IdNumber = command.IdNumber;
createInsuranceEmployeeInfo.Gender = command.Gender;
createInsuranceEmployeeInfo.InsuranceCode = command.InsuranceCode;
createInsuranceEmployeeInfo.DateOfBirthGr = command.DateOfBirth.ToGeorgianDateTime();
createInsuranceEmployeeInfo.DateOfIssueGr = command.DateOfIssue.ToGeorgianDateTime();
result = _insuranceEmployeeInfoApplication.Create(createInsuranceEmployeeInfo);
//var createEmployeeInsuranceListData = new CreateEmployeeInsurancListData();
//createEmployeeInsuranceListData.InsuranceListId = command.InsuranceListId;
//createEmployeeInsuranceListData.EmployeeId = command.EmployeeId;
////روزهای کارکرد پرسنل
//createEmployeeInsuranceListData.WorkingDays = command.WorkingDays;
//// دستمزد روزانه
//createEmployeeInsuranceListData.DailyWage = command.DailyWage;
////دستمزد ماهانه
//createEmployeeInsuranceListData.MonthlySalary = command.MonthlySalary;
////مزایای ماهانه
//createEmployeeInsuranceListData.MonthlyBenefits = command.MonthlyBenefits;
////دستمزد و مزایای ماهانه مشمول
//createEmployeeInsuranceListData.MonthlyBenefitsIncluded = command.MonthlyBenefitsIncluded;
//// مزایای مشمول مستمر
//createEmployeeInsuranceListData.BenefitsIncludedContinuous = command.BenefitsIncludedContinuous;
////مزایای مشمول غیر مستمر
//createEmployeeInsuranceListData.BenefitsIncludedNonContinuous = command.BenefitsIncludedNonContinuous;
////سهم بیمه حق کارگر
//createEmployeeInsuranceListData.InsuranceShare = command.InsuranceShare;
//// تاریخ شروع به کار
//createEmployeeInsuranceListData.StartWorkDate = command.StartWorkDate.ToGeorgian();
////تاریخ ترک کار
//if()
//createEmployeeInsuranceListData.LeftWorkDate = command.LeftWorkDate.ToGeorgian();
//// آی دی شغل
//createEmployeeInsuranceListData.JobId = command.JobId;
//result = _employeeInsurancListDataApplication.Create(createEmployeeInsuranceListData);
// _transactionManager.CommitTransaction();
}
catch (Exception ex)
{
result.IsSuccedded = false;
result.Message = "ثبت اطلاعات با خطا مواجه شد";
// _transactionManager.RollbackTransaction();
}
return result;
}
public OperationResult EditEmployeeDetailsInfo(EmployeeDetailsForInsuranceListViewModel command)
{
var result = new OperationResult();
try
{
//_transactionManager.BeginTransaction();
var insuranceEmployeeInfo = new EditInsuranceEmployeeInfo();
insuranceEmployeeInfo.Id = command.InsuranceEmployeeInformationId;
insuranceEmployeeInfo.EmployeeId = command.EmployeeId;
insuranceEmployeeInfo.FName = command.FName;
insuranceEmployeeInfo.LName = command.LName;
insuranceEmployeeInfo.FatherName = command.FatherName;
insuranceEmployeeInfo.PlaceOfIssue = command.PlaceOfIssue;
insuranceEmployeeInfo.NationalCode = command.NationalCode;
insuranceEmployeeInfo.IdNumber = command.IdNumber;
insuranceEmployeeInfo.Gender = command.Gender;
insuranceEmployeeInfo.InsuranceCode = command.InsuranceCode;
insuranceEmployeeInfo.DateOfBirthGr = command.DateOfBirth.ToGeorgianDateTime();
insuranceEmployeeInfo.DateOfIssueGr = command.DateOfIssue.ToGeorgianDateTime();
result = _insuranceEmployeeInfoApplication.Edit(insuranceEmployeeInfo);
// var createEmployeeInsuranceListData = new EditEmployeeInsurancListData();
// createEmployeeInsuranceListData.InsuranceListId = command.InsuranceListId;
//// createEmployeeInsuranceListData.Id = command.EmployeeInsurancListDataId;
// createEmployeeInsuranceListData.EmployeeId = command.EmployeeId;
// //روزهای کارکرد پرسنل
// createEmployeeInsuranceListData.WorkingDays = command.WorkingDays;
// // دستمزد روزانه
// createEmployeeInsuranceListData.DailyWage = command.DailyWage;
// //دستمزد ماهانه
// createEmployeeInsuranceListData.MonthlySalary = command.MonthlySalary;
// //مزایای ماهانه
// createEmployeeInsuranceListData.MonthlyBenefits = command.MonthlyBenefits;
// //دستمزد و مزایای ماهانه مشمول
// createEmployeeInsuranceListData.MonthlyBenefitsIncluded = command.MonthlyBenefitsIncluded;
// // مزایای مشمول مستمر
// createEmployeeInsuranceListData.BenefitsIncludedContinuous = command.BenefitsIncludedContinuous;
// //مزایای مشمول غیر مستمر
// createEmployeeInsuranceListData.BenefitsIncludedNonContinuous = command.BenefitsIncludedNonContinuous;
// //سهم بیمه حق کارگر
// createEmployeeInsuranceListData.InsuranceShare = command.InsuranceShare;
// // تاریخ شروع به کار
// createEmployeeInsuranceListData.StartWorkDate = command.StartWorkDate.ToGeorgian();
// //تاریخ ترک کار
// createEmployeeInsuranceListData.LeftWorkDate = command.LeftWorkDate.ToGeorgian();
// // آی دی شغل
// createEmployeeInsuranceListData.JobId = command.JobId;
// result = _employeeInsurancListDataApplication.Edit(createEmployeeInsuranceListData);
// _transactionManager.CommitTransaction();
}
catch (Exception ex)
{
result.IsSuccedded = false;
result.Message = "ثبت اطلاعات با خطا مواجه شد";
// _transactionManager.RollbackTransaction();
}
return result;
}
public OperationResult Remove(long id)
{
return _insuranceListRepositpry.Remove(id);
}
public EditInsuranceList GetDetailsForEdit(long id)
{
var insuranceListDetails = _insuranceListRepositpry.GetDetailsForEdit(id);
string startMonthCurrent = insuranceListDetails.Year + "/" + insuranceListDetails.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
var dayMonthCurrent = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var year = Convert.ToInt32(insuranceListDetails.Year);
var month = Convert.ToInt32(insuranceListDetails.Month);
var day = 1;
var persianCurrentStartDate = new PersianDateTime(year, month, day);
var persianCurrentEndDate = new PersianDateTime(year, month, dayMonthCurrent);
var model = new YearlySalarySearchModel();
model.StartDateGr = startMonthCurrent.ToGeorgianDateTime();
model.EndDateGr = endMonthCurrent.ToGeorgianDateTime();
model.year = insuranceListDetails.Year;
var yearSalaryObj = _yearlySalaryApplication.GetDetailsBySearchModel(model);
var yearlysalaryItem = new YearlysalaryItemViewModel();
var housingAllowance = new YearlysalaryItemViewModel();
var consumableItems = new YearlysalaryItemViewModel();
if (yearSalaryObj != null)
{
yearlysalaryItem = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "مزد روزانه").FirstOrDefault();
housingAllowance = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه مسکن").FirstOrDefault();
consumableItems = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه اقلام").FirstOrDefault();
}
return insuranceListDetails;
}
public double GetRoundValue(double value)
{
string strValue = value.ToString();
if (strValue.IndexOf('.') > -1)
{
string a = strValue.Substring(strValue.IndexOf('.')+1, 1);
if (int.Parse(a) > 5)
{
return (Math.Round(value, MidpointRounding.ToPositiveInfinity));
}
else
{
return (Math.Round(value, MidpointRounding.ToNegativeInfinity));
}
}
return value;
}
//محاسبه پرسنل در جدول - DSKWOR EDIT
public MainEmployeeDetailsViewModel SearchEmployeeListForEditByInsuranceListId(EmployeeForEditInsuranceListSearchModel searchModel)
{
var mainEmployeeDetailsViewModel= new MainEmployeeDetailsViewModel();
var mainEmployeeDetailsViewModel2= new MainEmployeeDetailsViewModel();
var mainEmployeeDetailsViewModelForNewPersonel= new MainEmployeeDetailsViewModel();
List<long> ids = searchModel.WorkshopIds.Where(x=>x!=searchModel.WorkshopId).ToList();
searchModel.Month = searchModel.Month.PadLeft(2, '0');
if (!_insuranceListRepositpry.Exists(x => x.Year == searchModel.Year && x.Month == searchModel.Month && (ids!=null && ids.Count > 0 && ids.Contains(x.WorkshopId))))
{
mainEmployeeDetailsViewModel = _insuranceListRepositpry.SearchEmployeeListForEditByInsuranceListId(searchModel);
var employeeForCreateInsurance = new EmployeeForCreateInsuranceListSearchModel();
employeeForCreateInsurance.Month = searchModel.Month;
employeeForCreateInsurance.Year = searchModel.Year;
employeeForCreateInsurance.WorkshopIds = ids;
#region OtherWorkshop
if (ids != null && ids.Count > 0)//اگر ورکشاپهای دیگر را انتخاب کرد
{
mainEmployeeDetailsViewModel2 = SearchEmployeeForCreateInsuranceList(employeeForCreateInsurance);
}
#endregion
#region NewPersonel
//اگر افراد جدیدی به لیست بیمه اضافه شوند.
var searchModelForCreate = new EmployeeForCreateInsuranceListSearchModel();
searchModelForCreate.Month = searchModel.Month;
searchModelForCreate.Year = searchModel.Year;
searchModelForCreate.WorkshopIds=new List<long>(){ searchModel.WorkshopId };
var leftWorkInsuranceViewModelList = _leftWorkInsuranceApplication.SearchForCreateInsuranceList(searchModelForCreate);
var newEmployeeId = leftWorkInsuranceViewModelList.Select(x => x.EmployeeId).ToList();
var oldEmployeeId = mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList.Select(x => x.EmployeeId).ToList();
if(!newEmployeeId.SequenceEqual(oldEmployeeId))
{
var employeeAddIds = new List<long>();
var employeeRemoveIds = new List<long>();
//var employeeAddIds = newEmployeeId.Except(oldEmployeeId).ToList();
//var employeeRemoveIds = newEmployeeId.Where(x => !oldEmployeeId.Any(z => z == x)).ToList();
foreach (var newitem in newEmployeeId)
{
if (!oldEmployeeId.Any(x => x == newitem))
{
employeeAddIds.Add(newitem);
}
}
foreach (var olditem in oldEmployeeId)
{
if (!newEmployeeId.Any(x => x == olditem))
{
employeeRemoveIds.Add(olditem);
}
}
if (employeeAddIds != null && employeeAddIds.Count > 0)
{
leftWorkInsuranceViewModelList = leftWorkInsuranceViewModelList.Where(x => employeeAddIds.Contains(x.EmployeeId)).ToList();
mainEmployeeDetailsViewModelForNewPersonel = GetEmployeeForInsuranceList(leftWorkInsuranceViewModelList,searchModel);
if (mainEmployeeDetailsViewModelForNewPersonel.EmployeeDetailsForInsuranceList != null &&
mainEmployeeDetailsViewModelForNewPersonel.EmployeeDetailsForInsuranceList.Count > 0)
{
mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList = mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList.Union(mainEmployeeDetailsViewModelForNewPersonel.EmployeeDetailsForInsuranceList).ToList();
}
}
if (employeeRemoveIds != null && employeeRemoveIds.Count>0)
{
mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList = mainEmployeeDetailsViewModel
.EmployeeDetailsForInsuranceList.Where(x => !employeeRemoveIds.Contains(x.EmployeeId))
.ToList();
}
}
#endregion
string startMonthCurrent = searchModel.Year + "/" + searchModel.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
var dayMonthCurrent = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var year = Convert.ToInt32(searchModel.Year);
var month = Convert.ToInt32(searchModel.Month);
var day = 1;
var persianCurrentStartDate = new PersianDateTime(year, month, day);
var persianCurrentEndDate = new PersianDateTime(year, month, dayMonthCurrent);
var model = new YearlySalarySearchModel();
model.StartDateGr = startMonthCurrent.ToGeorgianDateTime();
model.EndDateGr = endMonthCurrent.ToGeorgianDateTime();
model.year = searchModel.Year;
var yearlysalaryItem = new YearlysalaryItemViewModel();
var housingAllowance = new YearlysalaryItemViewModel();
var consumableItems = new YearlysalaryItemViewModel();
var maritalStatus = new YearlysalaryItemViewModel();
foreach (var item in mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList)
{
var employeeObject = _employeeRepository.GetDetailsByADDate(item.EmployeeId);
item.HasConfilictJobs = false;
item.IncludeStatus = item.IncludeStatus;
int startWork = 0;
int endWork = 0;
item.IsMaritalStatusSet = // آیا وضعیت تاهل پرسنل ست شده است
!string.IsNullOrWhiteSpace(employeeObject.MaritalStatus);
#region HasConfilictLeftWork
bool hasConfilict = false;
// // اگر شروع به کار و ترک کارش در جدول ترک کار تغییر کرده باشد
if (item.HasConfilictLeftWork)//item.LeftWorkDate != item.StrLeftWorkDateNew || (item.StartWorkDate != item.StrStartWorkDateNew && !string.IsNullOrEmpty(item.StrStartWorkDateNew) ) ||(item.JobId!=item.JobIdNew && item.JobIdNew!=0))
{
if (item.LeftWorkDate != item.StrLeftWorkDateNew)
{
item.LeftWorkDate = item.StrLeftWorkDateNew;
item.LeftWorkDateGr = item.LeftWorkDateNew;
}
if (item.StartWorkDate != item.StrStartWorkDateNew &&
!string.IsNullOrEmpty(item.StrStartWorkDateNew))
{
item.StartWorkDate = item.StrStartWorkDateNew;
item.StartWorkDateGr = item.StartWorkDateNew;
}
if (item.JobId != item.JobIdNew && item.JobIdNew != 0)
{
item.JobId = item.JobIdNew;
item.JobCode = item.JobCodeNew;
item.JobName = item.JobNameNew;
}
item.IncludeStatus = item.IncludeStatusNew;//(item.IncludeStatus==item.IncludeStatusNew);
hasConfilict = true;
}
#endregion
var yearSalaryObj = _yearlySalaryApplication.GetDetailsBySearchModel(model);
if (yearSalaryObj != null)
{
yearlysalaryItem = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "مزد روزانه").FirstOrDefault();
housingAllowance = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه مسکن").FirstOrDefault();
consumableItems = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه اقلام").FirstOrDefault();
maritalStatus = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "حق تاهل").FirstOrDefault();
item.HousingAllowance = housingAllowance.ItemValue;
item.ConsumableItems = consumableItems.ItemValue;
item.MaritalStatus = maritalStatus.ItemValue;
item.YearlySalaryItem = yearlysalaryItem.ItemValue;
}
//ترک کارش در ماه و سال جاری بود نمایش داده شود
if (!string.IsNullOrEmpty(item.LeftWorkDate) && !item.LeftWorkDate.Contains(searchModel.Year+"/"+searchModel.Month ) )
{
item.LeftWorkDate = string.Empty;
item.LeftWorkDateGr = null;
}
if (!string.IsNullOrEmpty(item.LeftWorkDate)) //&& item.LeftWorkDate.Substring(5, 2)==searchModel.Month && item.LeftWorkDate.Substring(0, 4) == searchModel.Year)
{
// item.HasLeftWorkInMonth = true;
var yearEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(0, 4));
var monthEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(5, 2));
var dayEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(8, 2));
var persianLeftDateUser = new PersianDateTime(yearEndDateUser, monthEndDateUser, dayEndDateUser);
var persianEndDateUser = persianLeftDateUser.AddDays(-1);
var persianEndDateUserStr = persianLeftDateUser.AddDays(-1).ToString("yyyy/MM/dd");
if (persianLeftDateUser <= persianCurrentEndDate)
item.HasLeftWorkInMonth = true;
else
item.HasLeftWorkInMonth = false;
//اگر پایان به کار کاربر از پایان ماه جاری بیشتر باشد
if (persianEndDateUser >= persianCurrentEndDate)
{
endWork = dayMonthCurrent;
}
else
{
endWork = Convert.ToInt32(persianEndDateUserStr.Substring(8, 2));
}
}
else
{
// item.HasLeftWorkInMonth = false;
endWork = dayMonthCurrent;
}
var yearStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(0, 4));
var monthStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(5, 2));
var dayStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(8, 2));
var persianStartDateUser = new PersianDateTime(yearStartDateUser, monthStartDateUser, dayStartDateUser);
if(persianStartDateUser <= persianCurrentStartDate)
{
startWork = 1;
}
else
{
startWork = dayStartDateUser;
}
if(persianStartDateUser < persianCurrentStartDate)
item.HasStartWorkInMonth = false;
else
item.HasStartWorkInMonth = true;
if (hasConfilict) //اگر ترک کار شخص تغییر کرده بود، دوباره محاسبه شود
{
item.StartMonthCurrent = startMonthCurrent;
item.HousingAllowance = housingAllowance.ItemValue;
item.ConsumableItems = consumableItems.ItemValue;
item.DailyWage= ComputeDailyWage(yearlysalaryItem.ItemValue, item.EmployeeId, searchModel.WorkshopId, searchModel.Year);
item.DailyWageStr = item.DailyWage.ToMoney();
}
else
{
item.DailyWageStr = item.DailyWage.ToMoney();
}
item.EndMonthCurrentDay = dayMonthCurrent;
if (hasConfilict || searchModel.FixedSalary || searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist")
{
#region InsuranceJob
double dailyWage = item.DailyWage;
if (searchModel.FixedSalary)
{
dailyWage = Convert.ToDouble(GetDailyWageFixedSalary(searchModel.Year, searchModel.WorkshopId, item.EmployeeId, model.StartDateGr, model.EndDateGr, item.JobId, searchModel.Population, searchModel.InsuranceJobId));
item.HasConfilictJobs = (dailyWage == 0 ? true : false);
}
#endregion
if (hasConfilict)
{
int countWorkingDays = 0;
for (int i = startWork; i <= endWork; i++)
{
countWorkingDays = countWorkingDays + 1;
}
item.MonthlySalary = GetRoundValue(dailyWage * countWorkingDays);
item.WorkingDays = countWorkingDays;
if (item.IncludeStatus)
{
var marital = employeeObject.MaritalStatus == "متاهل" ? maritalStatus.ItemValue : 0;
item.MonthlyBenefits = GetMonthlyBenefits(dayMonthCurrent, consumableItems.ItemValue, housingAllowance.ItemValue, marital, countWorkingDays);
}
else
{
item.MonthlyBenefits = 0;
}
}
if (searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist" && item.JobId == 10) //کمک دولت
{
item.MonthlyBenefits = 0;
}
item.BenefitsIncludedContinuous = item.MonthlyBenefits + item.MonthlySalary;
var insuranceShare = (item.BenefitsIncludedContinuous * 7) / 100;
item.InsuranceShare = GetRoundValue(insuranceShare);
//}
var employerShare = (item.BenefitsIncludedContinuous * 20) / 100;
item.EmployerShare = GetRoundValue(employerShare);
var unEmploymentInsurance = (item.BenefitsIncludedContinuous * 3) / 100;
item.UnEmploymentInsurance = GetRoundValue(unEmploymentInsurance);
// item.BenefitsIncludedNonContinuous = item.BenefitsIncludedContinuous;
item.IncludedAndNotIncluded = item.BenefitsIncludedContinuous + item.BenefitsIncludedNonContinuous;
}
}
if (mainEmployeeDetailsViewModel2.EmployeeDetailsForInsuranceList!=null && mainEmployeeDetailsViewModel2.EmployeeDetailsForInsuranceList.Count>0)
mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList = mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList.Union(mainEmployeeDetailsViewModel2.EmployeeDetailsForInsuranceList).OrderByDescending(x => x.HasLeftWorkInMonth).ThenByDescending(x => x.HasStartWorkInMonth).ThenBy(x => x.LName).ToList();
else
mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList = mainEmployeeDetailsViewModel.EmployeeDetailsForInsuranceList.OrderByDescending(x => x.HasLeftWorkInMonth).ThenByDescending(x => x.HasStartWorkInMonth).ThenBy(x => x.LName).ToList();
mainEmployeeDetailsViewModel.IsExist = false;
mainEmployeeDetailsViewModel.MaritalStatus = maritalStatus.ItemValue;
}
else
{
mainEmployeeDetailsViewModel.IsExist = true;
}
return mainEmployeeDetailsViewModel;
}
public OperationResult ConfirmInsuranceList(long id)
{
OperationResult result = new OperationResult();
try
{
result = _insuranceListRepositpry.ConfirmInsuranceList(id);
result.Message = "تایید ارسال لیست بیمه با موفقیت انجام شد";
}
catch (Exception)
{
result.Message = "تایید ارسال لیست بیمه با خطا انجام شد";
}
return result;
}
private double? GetDailyWageFixedSalary(string year, long workshopId,long employeeId,DateTime? startDateGr, DateTime? endDateGr, long jobId, string population, long? insuranceJobId)
{
double? result = 0;
//اگر مشاغل مقطوع بود و شغلش کارفرما بود
// در جدول لیست بیمه قبلی چک شود
if (jobId == 10) //کارفرما
{
InsuranceListSearchModel searchModel = new InsuranceListSearchModel();
var workshop = _workShopRepository.GetDetails(workshopId);
if (workshop.FixedSalary)
{
var inJob = _insuranceJobItemRepository
.GetInsuranceJobItemByInsuranceJobId((long)workshop.InsuranceJobId);
if (workshop.Population == "MoreThan500")
{
var max = inJob.MaxBy(x => x.PercentageMoreThan);
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageMoreThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
else
{
var max = inJob.MaxBy(x => x.PercentageLessThan);
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = max.PercentageLessThan;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
}
//var insuransList = _insuranceListRepositpry.GetInsuranceListByWorkshopIdAndYear(workshopId, year);
//var employeeInsurancListData = _employeeInsurancListDataRepository.GetEmployeeInsurancListDataByEmployeeIdAndInsuranceListId(employeeId, insuransList.Id);
//if (employeeInsurancListData != null )
//{
// result = employeeInsurancListData.DailyWage;
//}
}
else
{
var searchModel = new InsuranceJobItemSearchModel();
searchModel.InsuranceJobId = (long)insuranceJobId;
var JobItem = _insuranceJobItemRepository.GetInsuranceJobItemByInsuranceJobIdForFixedSalary((long)insuranceJobId, jobId);
if (JobItem != null && JobItem.Id != 0)
{
double percent = 0;
if (population == "MoreThan500")
percent = JobItem.PercentageMoreThan;
else if (population == "LessThan500")
percent = JobItem.PercentageLessThan;
var dateSaleryviewModel = new DateSalarySearchModel();
dateSaleryviewModel.StartDateGr = startDateGr;
dateSaleryviewModel.EndDateGr = endDateGr;
var _dateSalary = _dateSalaryRepository.GetDateSalaryViewModel(dateSaleryviewModel);
if (_dateSalary != null)
{
var dateSaleryItemviewModel = new DateSalaryItemSearchModel();
dateSaleryItemviewModel.DateSalaryId = _dateSalary.Id;
dateSaleryItemviewModel.Percent = percent;
var dateSalaryItem = _dateSalaryItemRepository.Search(dateSaleryItemviewModel);
if (dateSalaryItem != null)
result = dateSalaryItem[0].Salary;
}
}
}
return result;
}
private double GetMonthlyBenefits(int endMonthCurrentDay, double consumableItemsItemValue, double housingAllowanceItemValue,double maritalStatus, int countWorkingDays)
{
//مزایای ماهانه با توجه به پایان ماه که 30 یا 31 روزه است، متفاوت می باشد
//برای ماه 29 روزه هم تقسیم بر 30 می شود.
if (countWorkingDays == endMonthCurrentDay)
return (consumableItemsItemValue + housingAllowanceItemValue + maritalStatus);
else if (endMonthCurrentDay == 29)//farokhiChanges در خط پایین عدد 30 رو به 29 تغییر دادم
return GetRoundValue(((consumableItemsItemValue + housingAllowanceItemValue + maritalStatus) / 29) * countWorkingDays);
else if (endMonthCurrentDay == 30)//farokhiChanges این شرط و خط زیر رو اضافه کردم
return GetRoundValue(((consumableItemsItemValue + housingAllowanceItemValue + maritalStatus) / 30) * countWorkingDays);
else if (endMonthCurrentDay == 31)//farokhiChanges این شرط و خط زیر رو اضافه کردم
return GetRoundValue(((consumableItemsItemValue + housingAllowanceItemValue + maritalStatus) / 31) * countWorkingDays);
else
return GetRoundValue(((consumableItemsItemValue + housingAllowanceItemValue + maritalStatus) / endMonthCurrentDay) * countWorkingDays);
}
private double ComputeDailyWage(double yearlysalaryItemValue, long employeeId, long workshopId, string year)
{
double dailyWage = yearlysalaryItemValue;
InsuranceListSearchModel searchModel = new InsuranceListSearchModel();
var insuransList = _insuranceListRepositpry.GetInsuranceListByWorkshopIdAndYear(workshopId, year);
if (insuransList != null)
{
var employeeInsurancListData = _employeeInsurancListDataRepository.GetEmployeeInsurancListDataByEmployeeIdAndInsuranceListId( employeeId, insuransList.Id);
if (employeeInsurancListData != null && employeeInsurancListData.DailyWage> dailyWage)
{
dailyWage=employeeInsurancListData.DailyWage;
}
}
return dailyWage;
}
public MainEmployeeDetailsViewModel GetEmployeeForInsuranceList(List<LeftWorkInsuranceViewModel> leftWorkInsuranceViewModelList, EmployeeForEditInsuranceListSearchModel searchModel)
{
var result = new MainEmployeeDetailsViewModel();
List<EmployeeDetailsForInsuranceListViewModel> list = new List<EmployeeDetailsForInsuranceListViewModel>();
int leftWorkInsuranceCount= leftWorkInsuranceViewModelList.Count();
string startMonthCurrent = searchModel.Year + "/" + searchModel.Month + "/01";
string endMonthCurrent = startMonthCurrent.FindeEndOfMonth();
var model = new YearlySalarySearchModel();
model.StartDateGr = startMonthCurrent.ToGeorgianDateTime();
model.EndDateGr = endMonthCurrent.ToGeorgianDateTime();
model.year = searchModel.Year;
var yearSalaryObj = _yearlySalaryApplication.GetDetailsBySearchModel(model);
var yearlysalaryItem = new YearlysalaryItemViewModel();
var housingAllowance = new YearlysalaryItemViewModel();
var consumableItems = new YearlysalaryItemViewModel();
var maritalStatus = new YearlysalaryItemViewModel();
if (yearSalaryObj != null)
{
yearlysalaryItem = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "مزد روزانه").FirstOrDefault();
housingAllowance = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه مسکن").FirstOrDefault();
consumableItems = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "کمک هزینه اقلام").FirstOrDefault();
maritalStatus = _yearlySalaryItemApplication.GetItemsByYearlySalaryId(yearSalaryObj.Id)
.Where(x => x.ItemName == "حق تاهل").FirstOrDefault();
}
foreach (var item in leftWorkInsuranceViewModelList)
{
var employeeObject = _employeeRepository.GetDetailsByADDate(item.EmployeeId);
var employeeDetailsForInsuranceObj = new EmployeeDetailsForInsuranceListViewModel();
employeeDetailsForInsuranceObj.HasConfilictJobs = false;
employeeDetailsForInsuranceObj.IsMaritalStatusSet = // آیا وضعیت تاهل پرسنل ست شده است
!string.IsNullOrWhiteSpace(employeeObject.MaritalStatus);
if (_insuranceEmployeeInfoRepository.Exists(x => x.EmployeeId == item.EmployeeId))
{
var employeeInfoObject = _insuranceEmployeeInfoApplication.GetDetailsByEmployeeId(item.EmployeeId);
employeeDetailsForInsuranceObj.InsuranceEmployeeInformationId = employeeInfoObject.Id;
employeeDetailsForInsuranceObj.EmployeeId = employeeInfoObject.EmployeeId;
employeeDetailsForInsuranceObj.FName = employeeInfoObject.FName;
employeeDetailsForInsuranceObj.LName = employeeInfoObject.LName;
employeeDetailsForInsuranceObj.FatherName = employeeInfoObject.FatherName;
employeeDetailsForInsuranceObj.DateOfBirth = employeeInfoObject.DateOfBirth;
employeeDetailsForInsuranceObj.DateOfIssue = employeeInfoObject.DateOfIssue;
employeeDetailsForInsuranceObj.DateOfBirthGr = employeeInfoObject.DateOfBirthGr;
employeeDetailsForInsuranceObj.DateOfIssueGr = employeeInfoObject.DateOfIssueGr;
employeeDetailsForInsuranceObj.PlaceOfIssue = employeeInfoObject.PlaceOfIssue;
employeeDetailsForInsuranceObj.IdNumber = employeeInfoObject.IdNumber;
employeeDetailsForInsuranceObj.Gender = employeeInfoObject.Gender;
//از جدول پرسنل پر می شود
employeeDetailsForInsuranceObj.NationalCode =
employeeObject.NationalCode; //employeeInfoObject.NationalCode;
employeeDetailsForInsuranceObj.Nationality = employeeObject.Nationality;
employeeDetailsForInsuranceObj.InsuranceCode =
employeeObject.InsuranceCode; //employeeInfoObject.InsuranceCode;
}
else
{
// var employeeObject = _employeeRepository.GetDetailsByADDate(item.EmployeeId);
employeeDetailsForInsuranceObj.InsuranceEmployeeInformationId = 0;
//employeeDetailsForInsuranceObj.EmployeeInsurancListDataId = 0;
employeeDetailsForInsuranceObj.EmployeeId = employeeObject.Id;
employeeDetailsForInsuranceObj.FName = employeeObject.FName;
employeeDetailsForInsuranceObj.LName = employeeObject.LName;
employeeDetailsForInsuranceObj.FatherName = employeeObject.FatherName;
employeeDetailsForInsuranceObj.DateOfBirth = employeeObject.DateOfBirth=="1300/10/11"?"": employeeObject.DateOfBirth;
employeeDetailsForInsuranceObj.DateOfIssue = employeeObject.DateOfIssue;
employeeDetailsForInsuranceObj.PlaceOfIssue = employeeObject.PlaceOfIssue;
employeeDetailsForInsuranceObj.NationalCode = employeeObject.NationalCode;
employeeDetailsForInsuranceObj.IdNumber = employeeObject.IdNumber;
employeeDetailsForInsuranceObj.Gender = employeeObject.Gender;
employeeDetailsForInsuranceObj.InsuranceCode = employeeObject.InsuranceCode;
employeeDetailsForInsuranceObj.Nationality = employeeObject.Nationality;
}
#region ComputingWorkingDays
int startWork = 0;
int endWork = 0;
var year = Convert.ToInt32(searchModel.Year);
var month = Convert.ToInt32(searchModel.Month);
var day = 1;
var persianCurrentStartDate = new PersianDateTime(year, month, day);
var dayMonthCurrent = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var persianCurrentEndDate = new PersianDateTime(year, month, dayMonthCurrent);
//آخرین روز ماه جاری
var endMonthCurrentDay = Convert.ToInt32(endMonthCurrent.Substring(8, 2));
var yearStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(0, 4));
var monthStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(5, 2));
var dayStartDateUser = Convert.ToInt32(item.StartWorkDate.Substring(8, 2));
var persianStartDateUser = new PersianDateTime(yearStartDateUser, monthStartDateUser, dayStartDateUser);
if (persianStartDateUser < persianCurrentStartDate)
employeeDetailsForInsuranceObj.HasStartWorkInMonth = false;
else
employeeDetailsForInsuranceObj.HasStartWorkInMonth = true;
//اگر شروع به کار کاربر از ابتدای ماه جاری کمتر باشد
if (persianStartDateUser <= persianCurrentStartDate)
{
startWork = 1;
}
else
{
startWork = dayStartDateUser;
}
if (!string.IsNullOrEmpty(item.LeftWorkDate))
{
var yearEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(0, 4));
var monthEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(5, 2));
var dayEndDateUser = Convert.ToInt32(item.LeftWorkDate.Substring(8, 2));
var persianLeftDateUser = new PersianDateTime(yearEndDateUser, monthEndDateUser, dayEndDateUser);
var persianEndDateUser = persianLeftDateUser.AddDays(-1);
var persianEndDateUserStr = persianLeftDateUser.AddDays(-1).ToString("yyyy/MM/dd");
//if (persianLeftDateUser <= persianCurrentEndDate)
// employeeDetailsForInsuranceObj.HasLeftWorkInMonth = true;
//else
// employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
//ترک کارش در ماه و سال جاری بود نمایش داده شود
if (!item.LeftWorkDate.Contains(searchModel.Year + "/" + searchModel.Month))
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
item.LeftWorkDate = string.Empty;
item.LeftWorkDateGr = null;
}
else
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = true;
}
//اگر پایان به کار کاربر از پایان ماه جاری بیشتر باشد
if (persianEndDateUser >= persianCurrentEndDate)
{
endWork = endMonthCurrentDay;
}
else
{
endWork = Convert.ToInt32(persianEndDateUserStr.Substring(8, 2));
}
}
else
{
employeeDetailsForInsuranceObj.HasLeftWorkInMonth = false;
endWork = endMonthCurrentDay;
}
int countWorkingDays = 0;
for (int i = startWork; i <= endWork; i++)
{
countWorkingDays = countWorkingDays + 1;
}
//farokhiChanges
//روزهای کارکرد پرسنل با آی دی های زیر دستی تعریف شد
switch (item.EmployeeId)
{
//case 3812://ثابت
// countWorkingDays = 15;
// break;
case 40463://ثابت
countWorkingDays = 10;
break;
case 40469://ثابت
countWorkingDays = 7;
break;
case 9950://ثابت
countWorkingDays = 15;
break;
case 9640://ثابت
countWorkingDays = 15;
break;
case 40998://ثابت
countWorkingDays = 15;
break;
case 6219://ثابت
countWorkingDays = 15;
break;
//case 7897://ثابت
// countWorkingDays = 15;
// break;
}
;
#endregion
employeeDetailsForInsuranceObj.IncludeStatus = item.IncludeStatus;
#region InsuranceJob
double dailyWage = employeeDetailsForInsuranceObj.DailyWage;
if (searchModel.FixedSalary)
{
dailyWage = Convert.ToDouble(GetDailyWageFixedSalary(searchModel.Year, item.WorkshopId,item.EmployeeId, model.StartDateGr, model.EndDateGr, item.JobId, searchModel.Population, searchModel.InsuranceJobId));
employeeDetailsForInsuranceObj.HasConfilictJobs = (dailyWage == 0 ? true : false);
}
#endregion
if (yearlysalaryItem != null)
{
if(!searchModel.FixedSalary )
{
//dailyWage= yearlysalaryItem.ItemValue;
dailyWage = ComputeDailyWage(yearlysalaryItem.ItemValue, item.EmployeeId,item.WorkshopId, searchModel.Year) ;
}
employeeDetailsForInsuranceObj.DailyWage = GetRoundValue(dailyWage);
employeeDetailsForInsuranceObj.DailyWageStr = employeeDetailsForInsuranceObj.DailyWage.ToMoney();
employeeDetailsForInsuranceObj.MonthlySalary = GetRoundValue(dailyWage * countWorkingDays);
employeeDetailsForInsuranceObj.HousingAllowance = housingAllowance.ItemValue;
employeeDetailsForInsuranceObj.ConsumableItems = consumableItems.ItemValue;
employeeDetailsForInsuranceObj.EndMonthCurrentDay = endMonthCurrentDay;
employeeDetailsForInsuranceObj.YearlySalaryItem = yearlysalaryItem.ItemValue;
if (item.IncludeStatus)
{
var marital = employeeObject.MaritalStatus == "متاهل" ? maritalStatus.ItemValue : 0;
employeeDetailsForInsuranceObj.MonthlyBenefits = GetMonthlyBenefits(endMonthCurrentDay, consumableItems.ItemValue, housingAllowance.ItemValue, marital, countWorkingDays);
}
else
{
employeeDetailsForInsuranceObj.MonthlyBenefits = 0;
}
if (searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist" && item.JobId == 10) //کمک دولت
{
employeeDetailsForInsuranceObj.MonthlyBenefits = 0;
}
employeeDetailsForInsuranceObj.BenefitsIncludedContinuous =employeeDetailsForInsuranceObj.MonthlyBenefits + employeeDetailsForInsuranceObj.MonthlySalary;
//if ((!item.IncludeStatus &&(item.JobId == 10 || item.JobId == 17 || item.JobId == 18 || item.JobId == 16)) ||(item.IncludeStatus && item.JobId == 10)) // 10 --> karfarma
//{
// var insuranceShare2 =(employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 27) / 100;
// employeeDetailsForInsuranceObj.InsuranceShare =GetRoundValue(insuranceShare2);
//}
//else
//{
var insuranceShare = (employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 7) / 100;
employeeDetailsForInsuranceObj.InsuranceShare = GetRoundValue(insuranceShare); //Math.Round(insuranceShare, MidpointRounding.ToPositiveInfinity);
//}
var employerShare = (employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 20) / 100;
employeeDetailsForInsuranceObj.EmployerShare = GetRoundValue(employerShare); //Math.Round(employerShare, MidpointRounding.ToPositiveInfinity);
//if (searchModel.TypeOfInsuranceSendWorkshop == "Govermentlist" && item.JobId==10)//کمک دولت
//{employeeDetailsForInsuranceObj.InsuranceShare = 0;}
var unEmploymentInsurance =(employeeDetailsForInsuranceObj.BenefitsIncludedContinuous * 3) / 100;
employeeDetailsForInsuranceObj.UnEmploymentInsurance = GetRoundValue(unEmploymentInsurance);
employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous = employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous;
employeeDetailsForInsuranceObj.IncludedAndNotIncluded = employeeDetailsForInsuranceObj.BenefitsIncludedNonContinuous + employeeDetailsForInsuranceObj.BenefitsIncludedContinuous;
}
employeeDetailsForInsuranceObj.StartMonthCurrent = startMonthCurrent;
employeeDetailsForInsuranceObj.WorkingDays = countWorkingDays;
employeeDetailsForInsuranceObj.StartWorkDate = item.StartWorkDate;
employeeDetailsForInsuranceObj.LeftWorkDate = item.LeftWorkDate;
employeeDetailsForInsuranceObj.JobId = item.JobId;
employeeDetailsForInsuranceObj.JobName = item.JobName;
employeeDetailsForInsuranceObj.JobCode = item.JobCode;
if (!string.IsNullOrWhiteSpace(item.LeftWorkDate))
employeeDetailsForInsuranceObj.LeftWorkDateGr = item.LeftWorkDateGr;
employeeDetailsForInsuranceObj.StartWorkDateGr = item.StartWorkDateGr;
list.Add(employeeDetailsForInsuranceObj);
}
list = list.OrderByDescending(x => x.HasLeftWorkInMonth).ThenByDescending(x => x.HasStartWorkInMonth)
.ThenBy(x => x.LName).ToList();
result.EmployeeDetailsForInsuranceList = list;
result.IsExist = false;
result.MaritalStatus = maritalStatus.ItemValue;
//}
//else
//{
// result.IsExist = true;
//}
return result;
}
#region Client
public List<InsuranceListViewModel> SearchForClient(InsuranceListSearchModel searchModel)
{
var result = _insuranceListRepositpry.SearchForClient(searchModel);
return result;
}
#endregion
//farokhiChanges
public (double basic, int totalYear) BasicYear(long employeeId, long worshopId, DateTime startDate)
{
var totalYears = _leftWorkInsuranceRepository.TotalWorkingYears(employeeId, worshopId, startDate);
var baseSalary = _insuranceYearlySalaryApplication.GetBaseYearByDate(startDate, totalYears);
return (baseSalary, totalYears);
}
public double GetMonthlyBaseYear(double dayliBase, int countWorkingDays)
{
double res =GetRoundValue(dayliBase * countWorkingDays);
return res;
}
}