diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index 9cec9606..b2355432 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -474,6 +474,30 @@ public static class Tools return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); } + + /// + /// اگر مبلغ صفر باشد خط تیره برمیگرداند + /// + /// + /// + public static string ToMoneyCheckZero(this double myMoney) + { + if (myMoney == 0) + return "-"; + return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); + } + + /// + /// اگر مبلغ صفر یا نال باشد خط تیره برمیگرداند + /// + /// + /// + public static string ToMoneyCheckZeroNullable(this double? myMoney) + { + if (myMoney == 0 || myMoney == null) + return "-"; + return myMoney?.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir")); + } public static string ToMoneyNullable(this double? myMoney) { diff --git a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs index aa30b980..c479e3d9 100644 --- a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs +++ b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs @@ -86,6 +86,12 @@ public interface ICheckoutRepository : IRepository #region ForApi + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + Task> GetEmployeeSelectListByWorkshopId(long id); /// /// دریافت لیست فیش حقوقی @@ -94,5 +100,14 @@ public interface ICheckoutRepository : IRepository /// Task> GetList(CheckoutSearchModelDto searchModel); + + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// + Task> CheckoutPrint(List ids); + #endregion } \ No newline at end of file diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs index 6d5f56ea..b9193076 100644 --- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs +++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs @@ -106,4 +106,14 @@ public interface IWorkshopRepository : IRepository #endregion + + #region ForApi + /// + /// دریافت لیست کارگاه های ادمین برای سلکت تو + /// Api + /// + /// + Task> GetAdminWorkshopSelectList(); + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs new file mode 100644 index 00000000..60b72897 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs @@ -0,0 +1,247 @@ +using System; +using CompanyManagment.App.Contracts.Loan; +using CompanyManagment.App.Contracts.RollCall; +using CompanyManagment.App.Contracts.SalaryAid; +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class CheckoutPrintDto +{ + // هدر فیش + // اطلاعات هویتی + // اطلاعات کارگاه + #region Header + public long Id { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeFullName { get; set; } + + /// + /// نام پدر + /// + public string FathersName { get; set; } + + /// + /// کد ملی + /// + public string NationalCode { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + + /// + /// نام کارگاه + /// + public string WorkshopName { get; set; } + + /// + /// شماره قراداد + /// + public string ContractNo { get; set; } + + /// + /// ماه + /// + public string Month { get; set; } + + /// + /// سال + /// + public string Year { get; set; } + + /// + /// لیست کارفرما + /// + public List EmployersLists { get; set; } + + /// + /// آیا کارقرما حقوقی است + /// + public bool EmployerIslegal { get; set; } + + /// + /// آیا ترک کار کرده + /// + public bool HasLeft { get; set; } + + /// + /// آخرین روز کاری + /// + public string LastDayOfWork { get; set; } + + /// + /// روز ترک کار + /// + public string LeftWorkDate { get; set; } + + #endregion + + //جدول مطالبات و کسورات + #region PaymentAndDeductionTable + /// + /// مطالبات + /// + public List PaymentList { get; set; } + + /// + /// کسورات + /// + public List DeductionList { get; set; } + + /// + /// جمع مطالبات + /// + public string TotalPayment { get; set; } + + /// + /// جمع کسورات + /// + public string TotalDeductions { get; set; } + + + /// + /// مبلغ قابل پرداخت + /// + public string TotalClaims { get; set; } + #endregion + + //لیست ورود و خروج پرسنل + //اطلاعات ساعات کار و موظقی + #region RollCallData + /// + /// لیست حضورغیاب + /// + public List MonthlyRollCall { get; set; } + + /// + /// دیتای جدول حضورغیاب + /// + public CheckoutRollCallViewModel CheckoutRollCall { get; set; } + + #endregion + + //اقساط - مساعده + #region SalaryAidAndInstallmentData + + public List Installments { get; set; } + public List SalaryAids { get; set; } + + #endregion +} + +/// +/// کسورات +/// +public class PaymentData +{ + /// + /// حقوق و مزد + /// + public string MonthlySalary { get; set; } + + /// + /// پایه سنوات + /// + public string BaseYearsPay { get; set; } + + /// + /// کمک هزینه اقلام مصرفی + /// + public string ConsumableItems { get; set; } + + /// + /// کمک هزینه مسکن + /// + public string HousingAllowance { get; set; } + + /// + /// فوق العاده اضافه کاری + /// + public string OvertimePay { get; set; } + + /// + /// فوق العاده شبکاری + /// + public string NightworkPay { get; set; } + + /// + /// فوق العاده جمعه کاری + /// + public string FridayPay { get; set; } + + /// + /// فوق العاده ماموریت + /// + public string MissionPay { get; set; } + + /// + /// فوق العاده نوبت کاری + /// + public string ShiftPay { get; set; } + + /// + /// کمک هزینه عائله مندی + /// + public string FamilyAllowance { get; set; } + + /// + /// حق تاهل + /// + public string MarriedAllowance { get; set; } + +} + +/// +/// کسورات +/// +public class DeductionData +{ + +} + +public class PaymentAndDeductionList +{ + public int RowNumber { get; set; } + /// + /// عنوان + /// + public string Title { get; set; } + + /// + /// مقدار/روز/ساعت + /// + public string Value { get; set; } + + /// + /// مبلغ + /// + public string Amount { get; set; } +} + + +/// +/// لیست کارفرما +/// +public class CheckoutEmployersList +{ + public string IsLegal { get; set; } + public string EmployerFullName { get; set; } +} + + + + +public class CheckoutGetData : CheckoutPrintDto +{ + public DateTime ContractStart { get; set; } + + public int PersonnelCode { get; set; } + + public long WorkshopId { get; set; } + public long EmployeeId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs new file mode 100644 index 00000000..e3d5c6c9 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/ContractsListToCreateCheckoutDto.cs @@ -0,0 +1,53 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class ContractsListToCreateCheckoutDto +{ + /// + /// آی دی قراداد + /// + public long Id { get; set; } + + /// + /// کد پرسنلی + /// + public long PersonnelCode { get; set; } + + /// + /// شماره قرارداد + /// + public string ContractNo { get; set; } + + //نام کارگاه + public string WorkshopName { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeName { get; set; } + + /// + /// تاریخ شوع فیش + /// + public string ContractStart { get; set; } + /// + /// تاریخ پایان فیش + /// + public string ContractEnd { get; set; } + + /// + /// تاریخ ترک کار + /// + public string LeftWorkDate { get; set; } + + /// + /// وضعیت ایجاد فیش + /// + public CreateCheckoutStatus CreateCheckoutStatus { get; set; } + + + /// + /// توضیحات + /// + public string Description { get; set; } + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs new file mode 100644 index 00000000..f63a750c --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CreateCheckoutStatus.cs @@ -0,0 +1,22 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +/// +/// وضعیت ایجاد فیش +/// +public enum CreateCheckoutStatus +{ + /// + /// آماده ایجاد + /// + ReadyToCreate, + + /// + /// غیر مجاز + /// + NotValid, + + /// + /// دارای فیش حقوقی + /// + HasCheckout, +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs new file mode 100644 index 00000000..4384aaa3 --- /dev/null +++ b/CompanyManagment.App.Contracts/Checkout/Dto/EmployeeSelectListDto.cs @@ -0,0 +1,14 @@ +namespace CompanyManagment.App.Contracts.Checkout.Dto; + +public class EmployeeSelectListDto +{ + /// + /// آی دی پرسنل + /// + public long Id { get; set; } + + /// + /// نام پرسنل + /// + public string EmployeeFullName { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs index 828c631d..01312afa 100644 --- a/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs +++ b/CompanyManagment.App.Contracts/Checkout/ICheckoutApplication.cs @@ -69,6 +69,13 @@ public interface ICheckoutApplication #region ForApi + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + Task> GetEmployeeSelectListByWorkshopId(long id); + /// /// دریافت لیست فیش های حقوقی ادمین /// @@ -83,9 +90,41 @@ public interface ICheckoutApplication /// Task GetRotatingShiftApi(long id); + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// + Task> CheckoutPrint(List ids); + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + Task>> GetContractToCreateCheckout(long workshopId, + string year, string month, long employeeId); + #endregion } +public class CheckoutPrintInstallmentDto +{ + public string RemainingAmount { get; set; } + public string LoanAmount { get; set; } + public string Amount { get; set; } +} +public class CheckoutPrintSalaryAidDto +{ + public string Amount { get; set; } + public string SalaryAidDateTimeFa { get; set; } +} +} + public class CheckoutListClientSearchModel:PaginationRequest { public long? EmployeeId { get; set; } diff --git a/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs b/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs index 9c938ee9..94b2e283 100644 --- a/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs +++ b/CompanyManagment.App.Contracts/RollCall/CheckoutDailyRollCallViewModel.cs @@ -45,4 +45,42 @@ namespace CompanyManagment.App.Contracts.RollCall } #endregion + public class CheckoutPrintRollCallDto + { + + public string RollCallDateFa { get; set; } + public string StartDate1 { get; set; } + public string EndDate1 { get; set; } + + public string StartDate2 { get; set; } + public string EndDate2 { get; set; } + + //منقطع بودن شیفت کاری + public bool IsSliced { get; set; } + + public string TotalWorkingHours { get; set; } + + public string DayOfWeek { get; set; } + + public string BreakTimeString { get; set; } + + /// + /// اگر مرخصی نداشته باشد خالی خواهد بود، اگر داشته باشد نوع مرخصی جانشانی می شود + /// + public string LeaveType { get; set; } + + public bool IsAbsent { get; set; } + public bool IsFriday { get; set; } + public bool IsHoliday { get; set; } + public bool IsBirthDay { get; set; } + + + public string EnterDifferencesMinutes1 { get; set; } + public string ExitDifferencesMinutes1 { get; set; } + + public string EnterDifferencesMinutes2 { get; set; } + public string ExitDifferencesMinutes2 { get; set; } + + } + } diff --git a/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs b/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs new file mode 100644 index 00000000..8ed1da5d --- /dev/null +++ b/CompanyManagment.App.Contracts/Workshop/DTOs/AdminWorkshopSelectListDto.cs @@ -0,0 +1,24 @@ +namespace CompanyManagment.App.Contracts.Workshop.DTOs; + +public class AdminWorkshopSelectListDto +{ + /// + /// آی دی کارگاه + /// + public long Id { get; set; } + + /// + /// نام کارگاه + /// + public string WorkshopFullName { get; set; } + + /// + /// کد بایگانی + /// + public string ArchiveCode { get; set; } + + /// + /// آیا بلاک شده است + /// + public bool IsBlock { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs index 5ac6164b..8bf49865 100644 --- a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs +++ b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs @@ -1,5 +1,6 @@ using _0_Framework.Application; using AccountManagement.Application.Contracts.Account; +using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.Employee.DTO; using CompanyManagment.App.Contracts.Workshop.DTOs; using Microsoft.AspNetCore.Mvc; @@ -95,6 +96,17 @@ public interface IWorkshopApplication Task> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command); + #region ForApi + + + /// + /// دریافت لیست کارگاه های ادمین برای سلکت تو + /// Api + /// + /// + Task> GetAdminWorkshopSelectList(); + + #endregion } public class CreateWorkshopWorkflowRegistration diff --git a/CompanyManagment.Application/CheckoutApplication.cs b/CompanyManagment.Application/CheckoutApplication.cs index 0e68c173..68ec56b1 100644 --- a/CompanyManagment.Application/CheckoutApplication.cs +++ b/CompanyManagment.Application/CheckoutApplication.cs @@ -34,135 +34,136 @@ namespace CompanyManagment.Application; public class CheckoutApplication : ICheckoutApplication { - private readonly ICheckoutRepository _checkoutRepository; - private readonly IYearlySalaryRepository _yearlySalaryRepository; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly IEmployerRepository _employerRepository; - private readonly IPersonalContractingPartyApp _contractingPartyApp; - private readonly ILeaveApplication _leaveApplication; - private readonly IMandatoryHoursApplication _mandatoryHoursApplication; - private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; - private readonly IRollCallRepository _rollCallRepository; - private readonly IHolidayItemApplication _holidayItemApplication; - private readonly IWorkingHoursTempRepository _workingHoursTempRepository; - private readonly IWorkshopRepository _workshopRepository; + private readonly ICheckoutRepository _checkoutRepository; + private readonly IYearlySalaryRepository _yearlySalaryRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly IEmployerRepository _employerRepository; + private readonly IPersonalContractingPartyApp _contractingPartyApp; + private readonly ILeaveApplication _leaveApplication; + private readonly IMandatoryHoursApplication _mandatoryHoursApplication; + private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; + private readonly IRollCallRepository _rollCallRepository; + private readonly IHolidayItemApplication _holidayItemApplication; + private readonly IWorkingHoursTempRepository _workingHoursTempRepository; + private readonly IWorkshopRepository _workshopRepository; + public CheckoutApplication(ICheckoutRepository checkoutRepository, IYearlySalaryRepository yearlySalaryRepository, - ILeftWorkRepository leftWorkRepository, - IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication, IWorkingHoursTempRepository workingHoursTempRepository, IWorkshopRepository workshopRepository) - { - _checkoutRepository = checkoutRepository; - _yearlySalaryRepository = yearlySalaryRepository; - _leftWorkRepository = leftWorkRepository; - _employerRepository = employerRepository; - _contractingPartyApp = contractingPartyApp; - _leaveApplication = leaveApplication; - _mandatoryHoursApplication = mandatoryHoursApplication; - _rollCallMandatoryRepository = rollCallMandatoryRepository; - _rollCallRepository = rollCallRepository; - _holidayItemApplication = holidayItemApplication; + ILeftWorkRepository leftWorkRepository, + IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication, IWorkingHoursTempRepository workingHoursTempRepository, IWorkshopRepository workshopRepository) + { + _checkoutRepository = checkoutRepository; + _yearlySalaryRepository = yearlySalaryRepository; + _leftWorkRepository = leftWorkRepository; + _employerRepository = employerRepository; + _contractingPartyApp = contractingPartyApp; + _leaveApplication = leaveApplication; + _mandatoryHoursApplication = mandatoryHoursApplication; + _rollCallMandatoryRepository = rollCallMandatoryRepository; + _rollCallRepository = rollCallRepository; + _holidayItemApplication = holidayItemApplication; _workingHoursTempRepository = workingHoursTempRepository; _workshopRepository = workshopRepository; } - [SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")] - public void Create(CreateCheckout command) - { - var operation = new OperationResult(); - var syear = Convert.ToInt32(command.ContractStart.Substring(0, 4)); - var smonth = Convert.ToInt32(command.ContractStart.Substring(5, 2)); - string month = string.Empty; - switch (smonth) - { - case 1: - month = "فروردین"; - break; - case 2: - month = "اردیبهشت"; - break; - case 3: - month = "خرداد"; - break; - case 4: - month = "تیر"; - break; - case 5: - month = "مرداد"; - break; - case 6: - month = "شهریور"; - break; - case 7: - month = "مهر"; - break; - case 8: - month = "آبان"; - break; - case 9: - month = "آذر"; - break; - case 10: - month = "دی"; - break; - case 11: - month = "بهمن"; - break; - case 12: - month = "اسفند"; - break; - } - var year = syear.ToString(); + [SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")] + public void Create(CreateCheckout command) + { + var operation = new OperationResult(); + var syear = Convert.ToInt32(command.ContractStart.Substring(0, 4)); + var smonth = Convert.ToInt32(command.ContractStart.Substring(5, 2)); + string month = string.Empty; + switch (smonth) + { + case 1: + month = "فروردین"; + break; + case 2: + month = "اردیبهشت"; + break; + case 3: + month = "خرداد"; + break; + case 4: + month = "تیر"; + break; + case 5: + month = "مرداد"; + break; + case 6: + month = "شهریور"; + break; + case 7: + month = "مهر"; + break; + case 8: + month = "آبان"; + break; + case 9: + month = "آذر"; + break; + case 10: + month = "دی"; + break; + case 11: + month = "بهمن"; + break; + case 12: + month = "اسفند"; + break; + } + var year = syear.ToString(); - #region SickLeav + #region SickLeav - //var serachModel = new LeaveSearchModel() - //{ - // EmployeeId = command.EmployeeId, - // WorkshopId = command.WorkshopId, - // LeaveType = "استعلاجی", - // StartLeave = command.ContractStart, - // EndLeave = command.ContractEnd, - // IsAccepted = true, - //}; - //var leavList = _leaveApplication.search(serachModel); - // int sickLeaveCount = 0; - //if (leavList.Count > 0) - //{ + //var serachModel = new LeaveSearchModel() + //{ + // EmployeeId = command.EmployeeId, + // WorkshopId = command.WorkshopId, + // LeaveType = "استعلاجی", + // StartLeave = command.ContractStart, + // EndLeave = command.ContractEnd, + // IsAccepted = true, + //}; + //var leavList = _leaveApplication.search(serachModel); + // int sickLeaveCount = 0; + //if (leavList.Count > 0) + //{ - // foreach (var leave in leavList) - // { - // if (leave.StartLeaveGr < command.ContractStartGr && leave.EndLeaveGr <= command.ContractEndGr) - // { - // int res = (int)((leave.EndLeaveGr - command.ContractStartGr).TotalDays +1); - // sickLeaveCount += res; - // } - // else if (leave.StartLeaveGr >= command.ContractStartGr && leave.EndLeaveGr > command.ContractEndGr) - // { - // int res = (int)((command.ContractEndGr - leave.StartLeaveGr).TotalDays + 1); - // sickLeaveCount += res; - // } - // else - // { - // int res = (int)((leave.EndLeaveGr - leave.StartLeaveGr).TotalDays + 1); - // sickLeaveCount += res; - // } + // foreach (var leave in leavList) + // { + // if (leave.StartLeaveGr < command.ContractStartGr && leave.EndLeaveGr <= command.ContractEndGr) + // { + // int res = (int)((leave.EndLeaveGr - command.ContractStartGr).TotalDays +1); + // sickLeaveCount += res; + // } + // else if (leave.StartLeaveGr >= command.ContractStartGr && leave.EndLeaveGr > command.ContractEndGr) + // { + // int res = (int)((command.ContractEndGr - leave.StartLeaveGr).TotalDays + 1); + // sickLeaveCount += res; + // } + // else + // { + // int res = (int)((leave.EndLeaveGr - leave.StartLeaveGr).TotalDays + 1); + // sickLeaveCount += res; + // } - // } - //} + // } + //} - #endregion + #endregion - var dayliWage = command.DayliWage.MoneyToDouble(); - // کمک هزینه اقلام - var consumableItem = command.ConsumableItems.MoneyToDouble(); - //حق اولاد - var familyAllowance = command.FamilyAllowance.MoneyToDouble(); - //کمک هزینه مسکن - var housingAllowance = command.HousingAllowance.MoneyToDouble(); - //حق تاهل - var marriedAllowance = command.MarriedAllowance.MoneyToDouble(); + var dayliWage = command.DayliWage.MoneyToDouble(); + // کمک هزینه اقلام + var consumableItem = command.ConsumableItems.MoneyToDouble(); + //حق اولاد + var familyAllowance = command.FamilyAllowance.MoneyToDouble(); + //کمک هزینه مسکن + var housingAllowance = command.HousingAllowance.MoneyToDouble(); + //حق تاهل + var marriedAllowance = command.MarriedAllowance.MoneyToDouble(); //var MontlyYearsBunos = //_yearlySalaryRepository.GetMontlyBunosYears(command.WeeklyTime, command.ContractStartGr, command.ContractEndGr, dayliWage, command.WorkingWeeklyTime, command.officialholiday, command.friday, command.TotalHolidaysAndNotH, command.TotalHolidaysAndNotM, command.Basic, command.FridayStarttoEnd, command.DailFeeComplete, command.HasRollCall, command.HolidayWorking, command.ShiftWork); //دستمزد ماهانه @@ -183,8 +184,8 @@ public class CheckoutApplication : ICheckoutApplication //سنوات var years = command.YearsPay; - //عیدی و پاداش - var bunos = command.BonusesPay; + //عیدی و پاداش + var bunos = command.BonusesPay; //فاطمه احمدژاد === موقت عیدی و پاداش و سنوات حساب نشه if (command.EmployeeId == 45104 && command.WorkshopId == 315) @@ -195,12 +196,12 @@ public class CheckoutApplication : ICheckoutApplication } var sumOfWorkingDays = $"{totalDays}"; - if (command.friday > 0) - { - var fridayPercent = dayliWage * 40 / 100; - //فوق العاده جمعه کاری - command.FridayPay = fridayPercent * command.friday; - } + if (command.friday > 0) + { + var fridayPercent = dayliWage * 40 / 100; + //فوق العاده جمعه کاری + command.FridayPay = fridayPercent * command.friday; + } //حق بیمه سهم کارگر #region InsuranceDeduction @@ -208,7 +209,7 @@ public class CheckoutApplication : ICheckoutApplication bool hasInsuranceShareTheSameAsList = false; if (command.InsuranceDeduction == 0) { - var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0; + var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0; insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100; } else @@ -222,213 +223,213 @@ public class CheckoutApplication : ICheckoutApplication if (command.OvertimePay > 0 && command.AbsenceDeduction > 0) - { - if (command.AbsenceDeduction >= command.OvertimePay) - { - command.AbsenceDeduction = command.AbsenceDeduction - command.OvertimePay; - command.OvertimePay = 0; + { + if (command.AbsenceDeduction >= command.OvertimePay) + { + command.AbsenceDeduction = command.AbsenceDeduction - command.OvertimePay; + command.OvertimePay = 0; command.OverTimeWorkValue = "00:00"; } - else - { - command.OvertimePay = command.OvertimePay - command.AbsenceDeduction; - command.AbsenceDeduction = 0; - } + else + { + command.OvertimePay = command.OvertimePay - command.AbsenceDeduction; + command.AbsenceDeduction = 0; + } - } - var checkoutStart = $"{command.Year}/{command.Month}/01"; - var checkoutEnd = checkoutStart.FindeEndOfMonth(); - var salaryAids = - _rollCallMandatoryRepository.SalaryAidsForCheckout(command.EmployeeId, command.WorkshopId, checkoutStart.ToGeorgianDateTime(), checkoutEnd.ToGeorgianDateTime()) - .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); + } + var checkoutStart = $"{command.Year}/{command.Month}/01"; + var checkoutEnd = checkoutStart.FindeEndOfMonth(); + var salaryAids = + _rollCallMandatoryRepository.SalaryAidsForCheckout(command.EmployeeId, command.WorkshopId, checkoutStart.ToGeorgianDateTime(), checkoutEnd.ToGeorgianDateTime()) + .Select(x => new CheckoutSalaryAid(x.Amount, x.SalaryAidDateTimeGe, x.SalaryAidDateTimeFa, x.CalculationDateTimeGe, x.CalculationDateTimeFa, x.Id)).ToList(); - command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); - - var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(command.EmployeeId, - command.WorkshopId, command.ContractStartGr, command.HasLeft ? DateTime.MaxValue : command.ContractEndGr) - .Select(x => - new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); + command.SalaryAidDeduction = salaryAids.Sum(x => x.Amount.MoneyToDouble()); - command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); + var loanInstallments = _rollCallMandatoryRepository.LoanInstallmentForCheckout(command.EmployeeId, + command.WorkshopId, command.ContractStartGr, command.HasLeft ? DateTime.MaxValue : command.ContractEndGr) + .Select(x => + new CheckoutLoanInstallment(x.Amount, x.Month, x.Year, x.IsActive, x.RemainingAmount, x.LoanAmount, x.Id)).ToList(); - - - - var firstDayOfMonth = $"{command.ContractStart.Substring(0, 8)}01".ToGeorgianDateTime(); - var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); - - LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() - { - EmployeeId = command.EmployeeId, - WorkshopId = command.WorkshopId, - StartLeaveGr = command.ContractStartGr, - EndLeaveGr = command.ContractEndGr, - IsAccepted = true, - }; - var leaves = _leaveApplication.search(sickLeaveSearch); - - firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); - - lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); - - int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - - var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() - { - HolidayYear = command.ContractStartGr.ToFarsiYear() - }); - //all the dates from start to end, to be compared with present days to get absent dates - var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); - - var absentRecords = completeDaysList - .ExceptBy(command.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) - .Select(x => - { - var leave = leaves.FirstOrDefault(y => - y.EmployeeId == command.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); - var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); - var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; - var isNormalWorkingDay = isHoliday == false && isFriday == false; - return new CheckoutDailyRollCallViewModel() - { - StartDate1 = null, - EndDate1 = null, - DateTimeGr = x.Date, - DayOfWeek = x.Date.DayOfWeek.ToString(), - RollCallDateFa = x.Date.ToFarsi(), - LeaveType = leave != null ? leave.LeaveType : "", - IsAbsent = leave == null && isNormalWorkingDay - }; - }); - - var presentDays = command.GroupedRollCalls.Select(x => - { - - var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); - - var rollCallTimeSpanPerDay = x.SumOneDaySpan; - TimeSpan breakTimePerDay = x.BreakTime; - - return new CheckoutDailyRollCallViewModel() - { - StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), - EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), - - StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", - EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", - - TotalhourseSpan = rollCallTimeSpanPerDay, - - BreakTimeTimeSpan = breakTimePerDay, - - DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), - RollCallDateFa = x.CreationDate.Date.ToFarsi(), - DateTimeGr = x.CreationDate.Date, - IsSliced = x.ShiftList.Count() > 2, - IsAbsent = false - }; - }); - - - presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel - { - StartDate1 = x.StartDate1, - EndDate1 = x.EndDate1, - EndDate2 = x.EndDate2, - StartDate2 = x.StartDate2, - TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", - BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", - TotalhourseSpan = x.TotalhourseSpan, - BreakTimeTimeSpan = x.BreakTimeTimeSpan, - DayOfWeek = x.DayOfWeek, - RollCallDateFa = x.RollCallDateFa, - DateTimeGr = x.DateTimeGr, - IsSliced = x.IsSliced, - IsAbsent = false - }); - - var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); - result.ForEach(x => - { - x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); - x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; - }); - - var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, - x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, - x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) - .ToList(); - - - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - - var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); - var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, command.TotalPresentTimeSpan, command.TotalBreakTimeSpan, - command.TotalWorkingTimeSpan, command.TotalPaidLeave, command.TotalSickLeave, checkoutRollCallDays); + command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble()); - var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay + - command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay; - var totalClaims = totalClaimsDouble.ToMoney(); - var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction; - var totalDeductions = totalDeductionDouble.ToMoney(); - var totalPayment = totalClaimsDouble - totalDeductionDouble; + var firstDayOfMonth = $"{command.ContractStart.Substring(0, 8)}01".ToGeorgianDateTime(); + var firstDayOfCurrentMonth = new DateTime(syear, smonth, 1, new PersianCalendar()); - if (_checkoutRepository.Exists(x => - x.Month == command.Month && x.Year == command.Year && x.ContractNo == command.ContractNo)) - { - operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); - } - else - { - if (string.IsNullOrWhiteSpace(command.Signature)) - { - command.Signature = "0"; - } - + LeaveSearchModel sickLeaveSearch = new LeaveSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + StartLeaveGr = command.ContractStartGr, + EndLeaveGr = command.ContractEndGr, + IsAccepted = true, + }; + var leaves = _leaveApplication.search(sickLeaveSearch); - var checkout = new Checkout(command.EmployeeFullName, command.FathersName, command.NationalCode - , command.DateOfBirth, command.EmployeeId, command.WorkshopName, command.WorkshopId, command.ContractNo, command.ContractStartGr, command.ContractEndGr, month, year, - command.ContractId, command.WorkingHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance - , command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays, - command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue - , command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute, - loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList); + firstDayOfMonth.AddMonthsFa(1, out var lastDayOfCurrentMonth); - _checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult(); - //_checkoutRepository.SaveChanges(); + lastDayOfCurrentMonth = lastDayOfCurrentMonth.AddDays(-1); - //var employeeFullName = new SqlParameter("@EmployeeFullName", SqlDbType.NVarChar, 50); - //employeeFullName.Value = command.EmployeeFullName; - //var fathersName = new SqlParameter("@FathersName", SqlDbType.NVarChar, 20); - //fathersName.Value = command.EmployeeFullName; + int dateRange = (int)(lastDayOfCurrentMonth - firstDayOfCurrentMonth).TotalDays + 1; - } + var holidays = _holidayItemApplication.Search(new HolidayItemSearchModel() + { + HolidayYear = command.ContractStartGr.ToFarsiYear() + }); + //all the dates from start to end, to be compared with present days to get absent dates + var completeDaysList = Enumerable.Range(0, dateRange).Select(offset => firstDayOfCurrentMonth.AddDays(offset).Date).ToList(); + + var absentRecords = completeDaysList + .ExceptBy(command.GroupedRollCalls.Select(x => x.CreationDate.Date), y => y.Date) + .Select(x => + { + var leave = leaves.FirstOrDefault(y => + y.EmployeeId == command.EmployeeId && y.EndLeaveGr.Date >= x.Date && y.StartLeaveGr.Date <= x.Date); + var isHoliday = holidays.Any(y => y.HolidaydateGr == x.Date); + var isFriday = x.Date.DayOfWeek == DayOfWeek.Friday; + var isNormalWorkingDay = isHoliday == false && isFriday == false; + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = null, + EndDate1 = null, + DateTimeGr = x.Date, + DayOfWeek = x.Date.DayOfWeek.ToString(), + RollCallDateFa = x.Date.ToFarsi(), + LeaveType = leave != null ? leave.LeaveType : "", + IsAbsent = leave == null && isNormalWorkingDay + }; + }); + + var presentDays = command.GroupedRollCalls.Select(x => + { + + var orderedRollcalls = x.ShiftList.OrderBy(y => y.Start); + + var rollCallTimeSpanPerDay = x.SumOneDaySpan; + TimeSpan breakTimePerDay = x.BreakTime; + + return new CheckoutDailyRollCallViewModel() + { + StartDate1 = orderedRollcalls.FirstOrDefault().Start.ToString("HH:mm"), + EndDate1 = orderedRollcalls.FirstOrDefault().EndWithOutResTime.ToString("HH:mm"), + + StartDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.Start.ToString("HH:mm") ?? "", + EndDate2 = orderedRollcalls.Skip(1).FirstOrDefault()?.EndWithOutResTime.ToString("HH:mm") ?? "", + + TotalhourseSpan = rollCallTimeSpanPerDay, + + BreakTimeTimeSpan = breakTimePerDay, + + DayOfWeek = x.CreationDate.DayOfWeek.DayOfWeeKToPersian(), + RollCallDateFa = x.CreationDate.Date.ToFarsi(), + DateTimeGr = x.CreationDate.Date, + IsSliced = x.ShiftList.Count() > 2, + IsAbsent = false + }; + }); - } + presentDays = presentDays.Select(x => new CheckoutDailyRollCallViewModel + { + StartDate1 = x.StartDate1, + EndDate1 = x.EndDate1, + EndDate2 = x.EndDate2, + StartDate2 = x.StartDate2, + TotalWorkingHours = $"{(int)(x.TotalhourseSpan.TotalHours)}:{x.TotalhourseSpan.Minutes:00}", + BreakTimeString = $"{(int)(x.BreakTimeTimeSpan.TotalHours)}:{x.BreakTimeTimeSpan.Minutes:00}", + TotalhourseSpan = x.TotalhourseSpan, + BreakTimeTimeSpan = x.BreakTimeTimeSpan, + DayOfWeek = x.DayOfWeek, + RollCallDateFa = x.RollCallDateFa, + DateTimeGr = x.DateTimeGr, + IsSliced = x.IsSliced, + IsAbsent = false + }); - public OperationResult Edit(EditCheckout command) - { - throw new NotImplementedException(); - } + var result = presentDays.Concat(absentRecords).OrderBy(x => x.DateTimeGr).ToList(); + result.ForEach(x => + { + x.IsHoliday = holidays.Any(y => x.DateTimeGr.Date == y.HolidaydateGr.Date); + x.IsFriday = x.DateTimeGr.DayOfWeek == DayOfWeek.Friday; + }); - public EditCheckout GetDetails(long id) - { - return _checkoutRepository.GetDetails(id); - } + var checkoutRollCallDays = result.Select(x => new CheckoutRollCallDay(x.DateTimeGr, + x.StartDate1, x.EndDate1, x.StartDate2, x.EndDate2, + x.BreakTimeTimeSpan, x.IsSliced, x.TotalhourseSpan, x.IsAbsent, x.IsFriday, x.IsHoliday, x.LeaveType)) + .ToList(); - public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, - string contractStart, string contractEnd) - { - return await _checkoutRepository.GetContractResultToCreateCheckout(workshopId, employeeId, year, month, contractStart, - contractEnd); - } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(syear, smonth); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + + var totalMandatoryHours = TimeSpan.FromHours(mandatoryWholeHours).Add(TimeSpan.FromMinutes(mandatoryMinutes)); + var checkoutRollCall = new CheckoutRollCall(totalMandatoryHours, command.TotalPresentTimeSpan, command.TotalBreakTimeSpan, + command.TotalWorkingTimeSpan, command.TotalPaidLeave, command.TotalSickLeave, checkoutRollCallDays); + + + + + var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay + + command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay; + var totalClaims = totalClaimsDouble.ToMoney(); + var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction; + var totalDeductions = totalDeductionDouble.ToMoney(); + var totalPayment = totalClaimsDouble - totalDeductionDouble; + + if (_checkoutRepository.Exists(x => + x.Month == command.Month && x.Year == command.Year && x.ContractNo == command.ContractNo)) + { + operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + } + else + { + if (string.IsNullOrWhiteSpace(command.Signature)) + { + command.Signature = "0"; + } + + + var checkout = new Checkout(command.EmployeeFullName, command.FathersName, command.NationalCode + , command.DateOfBirth, command.EmployeeId, command.WorkshopName, command.WorkshopId, command.ContractNo, command.ContractStartGr, command.ContractEndGr, month, year, + command.ContractId, command.WorkingHoursId, monthlyWage, bacicYears, consumableItem, housingAllowance + , command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays, + command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue + , command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute, + loanInstallments, salaryAids, checkoutRollCall, command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList); + + _checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult(); + //_checkoutRepository.SaveChanges(); + + //var employeeFullName = new SqlParameter("@EmployeeFullName", SqlDbType.NVarChar, 50); + //employeeFullName.Value = command.EmployeeFullName; + //var fathersName = new SqlParameter("@FathersName", SqlDbType.NVarChar, 20); + //fathersName.Value = command.EmployeeFullName; + + } + + + } + + public OperationResult Edit(EditCheckout command) + { + throw new NotImplementedException(); + } + + public EditCheckout GetDetails(long id) + { + return _checkoutRepository.GetDetails(id); + } + + public async Task GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, + string contractStart, string contractEnd) + { + return await _checkoutRepository.GetContractResultToCreateCheckout(workshopId, employeeId, year, month, contractStart, + contractEnd); + + } public Task> SearchCheckoutOptimized(CheckoutSearchModel searchModel) { @@ -440,32 +441,32 @@ public class CheckoutApplication : ICheckoutApplication var watch = System.Diagnostics.Stopwatch.StartNew(); watch.Start(); var result = new List(); - var query = await _checkoutRepository.SearchForMainCheckout(searchModel); - query = query.Select(x => new CheckoutViewModel() - { - Id = x.Id, - EmployeeFullName = x.EmployeeFullName, - ContractStart = x.ContractStart, - ContractEnd = x.ContractEnd, - ContractStartGr = x.ContractStartGr, - ContractEndGr = x.ContractEndGr, - PersonnelCode = x.PersonnelCode, - PersonnelCodeInt = x.PersonnelCodeInt, - ArchiveCode = x.ArchiveCode, - SumOfWorkingDays = x.SumOfWorkingDays, - WorkshopName = x.WorkshopName, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - ContractId = x.ContractId, - WorkshopId = x.WorkshopId, - EmployeeId = x.EmployeeId, - IsActiveString = x.IsActiveString, - Signature = x.Signature, - CreationDate = x.CreationDate, - EmployerName = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.EmployerFullName, - IsBlockCantracingParty = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.IsBlockContractingParty, - }).ToList(); + var query = await _checkoutRepository.SearchForMainCheckout(searchModel); + query = query.Select(x => new CheckoutViewModel() + { + Id = x.Id, + EmployeeFullName = x.EmployeeFullName, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + ContractStartGr = x.ContractStartGr, + ContractEndGr = x.ContractEndGr, + PersonnelCode = x.PersonnelCode, + PersonnelCodeInt = x.PersonnelCodeInt, + ArchiveCode = x.ArchiveCode, + SumOfWorkingDays = x.SumOfWorkingDays, + WorkshopName = x.WorkshopName, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + ContractId = x.ContractId, + WorkshopId = x.WorkshopId, + EmployeeId = x.EmployeeId, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + CreationDate = x.CreationDate, + EmployerName = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.EmployerFullName, + IsBlockCantracingParty = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.IsBlockContractingParty, + }).ToList(); //foreach (var items in query) //{ // var s = _employerRepository.GetEmployerByWorkshopId(items.WorkshopId); @@ -483,239 +484,239 @@ public class CheckoutApplication : ICheckoutApplication Console.WriteLine("old : " + watch.Elapsed); return query; - } + } - public List SimpleSearch(CheckoutSearchModel searchModel) - { - return _checkoutRepository.SimpleSearch(searchModel); - } + public List SimpleSearch(CheckoutSearchModel searchModel) + { + return _checkoutRepository.SimpleSearch(searchModel); + } - public List PrintAll(List id) - { - var result = _checkoutRepository.PrintAll(id); - var oneRecord = result.FirstOrDefault(); - if (oneRecord == null) - return new(); - result.ForEach(x => - { + public List PrintAll(List id) + { + var result = _checkoutRepository.PrintAll(id); + var oneRecord = result.FirstOrDefault(); + if (oneRecord == null) + return new(); + result.ForEach(x => + { - int yearFa; - int monthFa; - try - { - yearFa = int.Parse(oneRecord.Year); - monthFa = oneRecord.Month.ToMonthByStringValue(); - } - catch (Exception e) - { - return; - } - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - var totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(y => y.TotalhourseSpan.Ticks)); - var totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(y => y.BreakTimeTimeSpan.Ticks)); - TimeSpan totalPresent = totalWorking + totalBreakTime; - if (x.CheckoutRollCall == null) - { - if (x.HasRollCall) - { - totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - - x.TotalHourlyLeave; - totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = totalWorking + totalBreakTime; - } - else - { - totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); - totalWorking = totalPresent - totalBreakTime; - } + int yearFa; + int monthFa; + try + { + yearFa = int.Parse(oneRecord.Year); + monthFa = oneRecord.Month.ToMonthByStringValue(); + } + catch (Exception e) + { + return; + } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + var totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(y => y.TotalhourseSpan.Ticks)); + var totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(y => y.BreakTimeTimeSpan.Ticks)); + TimeSpan totalPresent = totalWorking + totalBreakTime; + if (x.CheckoutRollCall == null) + { + if (x.HasRollCall) + { + totalWorking = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - + x.TotalHourlyLeave; + totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = totalWorking + totalBreakTime; + } + else + { + totalBreakTime = new TimeSpan(x.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = new TimeSpan(x.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalWorking = totalPresent - totalBreakTime; + } - x.TotalWorkingTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); - x.TotalBreakTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); - x.TotalPresentTimeStr = - Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); - x.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); - - } - }); - - return result; - } + x.TotalWorkingTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); + x.TotalBreakTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); + x.TotalPresentTimeStr = + Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); + x.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); - public CheckoutViewModel PrintOne(long id) - { - var result = _checkoutRepository.PrintOne(id); + } + }); - int yearFa; - int monthFa; - try - { - yearFa = int.Parse(result.Year); - monthFa = result.Month.ToMonthByStringValue(); - } - catch (Exception e) - { - return new(); - } - double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); - int mandatoryWholeHours = (int)mandatoryHours; - int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); - TimeSpan totalWorking; - TimeSpan totalBreakTime; - TimeSpan totalPresent; - TimeSpan totalHoursLeave; - if (result.HasRollCall) - { - totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - result.TotalHourlyLeave; - totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = totalWorking + totalBreakTime; - } - else - { - totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); - totalPresent = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); - totalWorking = totalPresent - totalBreakTime; - } + return result; + } - result.TotalWorkingTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); - result.TotalBreakTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); - result.TotalPresentTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); - result.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); + public CheckoutViewModel PrintOne(long id) + { + var result = _checkoutRepository.PrintOne(id); - return result; - } + int yearFa; + int monthFa; + try + { + yearFa = int.Parse(result.Year); + monthFa = result.Month.ToMonthByStringValue(); + } + catch (Exception e) + { + return new(); + } + double mandatoryHours = _mandatoryHoursApplication.GetMandatoryHoursByYearAndMonth(yearFa, monthFa); + int mandatoryWholeHours = (int)mandatoryHours; + int mandatoryMinutes = (int)((mandatoryHours - mandatoryWholeHours) * 60); + TimeSpan totalWorking; + TimeSpan totalBreakTime; + TimeSpan totalPresent; + TimeSpan totalHoursLeave; + if (result.HasRollCall) + { + totalWorking = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)) - result.TotalHourlyLeave; + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = totalWorking + totalBreakTime; + } + else + { + totalBreakTime = new TimeSpan(result.MonthlyRollCall.Sum(x => x.BreakTimeTimeSpan.Ticks)); + totalPresent = new TimeSpan(result.MonthlyRollCall.Sum(x => x.TotalhourseSpan.Ticks)); + totalWorking = totalPresent - totalBreakTime; + } - public CheckoutLeavePrintViewModel LeavePrint(long id) - { - return _checkoutRepository.PrintLeave(id); - } + result.TotalWorkingTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalWorking.TotalHours, totalWorking.Minutes, "-"); + result.TotalBreakTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalBreakTime.TotalHours, totalBreakTime.Minutes, "-"); + result.TotalPresentTimeStr = Tools.ToFarsiHoursAndMinutes((int)totalPresent.TotalHours, totalPresent.Minutes, "-"); + result.TotalMandatoryTimeStr = Tools.ToFarsiHoursAndMinutes(mandatoryWholeHours, mandatoryMinutes, "-"); - public OperationResult Sign(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); + return result; + } - contract.Sign(); + public CheckoutLeavePrintViewModel LeavePrint(long id) + { + return _checkoutRepository.PrintLeave(id); + } + + public OperationResult Sign(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.Sign(); - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } - public OperationResult UnSign(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); + public OperationResult UnSign(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); - contract.UnSign(); + contract.UnSign(); - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } - public OperationResult Active(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); + public OperationResult Active(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); - contract.Active(); + contract.Active(); - _checkoutRepository.SaveChanges(); - return opration.Succcedded(); - } + _checkoutRepository.SaveChanges(); + return opration.Succcedded(); + } - public OperationResult DeActive(long id) - { - var opration = new OperationResult(); - var contract = _checkoutRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); + public OperationResult DeActive(long id) + { + var opration = new OperationResult(); + var contract = _checkoutRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); - contract.DeActive(); + contract.DeActive(); - _checkoutRepository.SaveChanges(); + _checkoutRepository.SaveChanges(); - return opration.Succcedded(); - } + return opration.Succcedded(); + } - public OperationResult RemoveCheckout(long id) - { - return _checkoutRepository.RemoveCheckout(id); - } + public OperationResult RemoveCheckout(long id) + { + return _checkoutRepository.RemoveCheckout(id); + } - public OperationResult CustomSet(long id, double rewardPay, double salaryAidDeduction) - { - var opration = new OperationResult(); - var checkout = _checkoutRepository.Get(id); - var totalClaimsDouble = checkout.TotalClaims.MoneyToDouble(); - var totalDeductionsDouble = checkout.TotalDeductions.MoneyToDouble(); - totalClaimsDouble = (double)(totalClaimsDouble - checkout.RewardPay); - totalDeductionsDouble = totalDeductionsDouble - checkout.SalaryAidDeduction; + public OperationResult CustomSet(long id, double rewardPay, double salaryAidDeduction) + { + var opration = new OperationResult(); + var checkout = _checkoutRepository.Get(id); + var totalClaimsDouble = checkout.TotalClaims.MoneyToDouble(); + var totalDeductionsDouble = checkout.TotalDeductions.MoneyToDouble(); + totalClaimsDouble = (double)(totalClaimsDouble - checkout.RewardPay); + totalDeductionsDouble = totalDeductionsDouble - checkout.SalaryAidDeduction; - var totalClaims = totalClaimsDouble + rewardPay; - var totalDeductions = totalDeductionsDouble + salaryAidDeduction; + var totalClaims = totalClaimsDouble + rewardPay; + var totalDeductions = totalDeductionsDouble + salaryAidDeduction; - var totalClaimsString = totalClaims.ToMoney(); - var totalDeductionsString = totalDeductions.ToMoney(); - var totalPayment = totalClaims - totalDeductions; + var totalClaimsString = totalClaims.ToMoney(); + var totalDeductionsString = totalDeductions.ToMoney(); + var totalPayment = totalClaims - totalDeductions; - checkout.CustomSet(rewardPay, salaryAidDeduction, totalClaimsString, totalDeductionsString, totalPayment); + checkout.CustomSet(rewardPay, salaryAidDeduction, totalClaimsString, totalDeductionsString, totalPayment); - _checkoutRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } + _checkoutRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } - #region Client + #region Client - public List SearchForClient(CheckoutSearchModel searchModel) - { - return _checkoutRepository.SearchForClient(searchModel); - } + public List SearchForClient(CheckoutSearchModel searchModel) + { + return _checkoutRepository.SearchForClient(searchModel); + } - #endregion - #region NewChangeByHeydari - public List CheckHasSignature(List ids) - { - return _checkoutRepository.CheckHasSignature(ids); - } - public OperationResult DeleteAllCheckouts(List ids) - { - return _checkoutRepository.DeleteAllCheckouts(ids); - } - public OperationResult DeleteCheckout(long id) - { - return _checkoutRepository.DeleteCheckout(id); - } - public async Task> SearchForMainCheckout(CheckoutSearchModel searchModel) - { - return await _checkoutRepository.SearchForMainCheckout(searchModel); - } - #endregion - #region Pooya + #endregion + #region NewChangeByHeydari + public List CheckHasSignature(List ids) + { + return _checkoutRepository.CheckHasSignature(ids); + } + public OperationResult DeleteAllCheckouts(List ids) + { + return _checkoutRepository.DeleteAllCheckouts(ids); + } + public OperationResult DeleteCheckout(long id) + { + return _checkoutRepository.DeleteCheckout(id); + } + public async Task> SearchForMainCheckout(CheckoutSearchModel searchModel) + { + return await _checkoutRepository.SearchForMainCheckout(searchModel); + } + #endregion + #region Pooya - public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) - { - return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); - } + public List<(long EmployeeId, DateTime CheckoutStart, DateTime CheckoutEnd)> GetLastCheckoutsByWorkshopIdForWorkFlow(long workshopId, DateTime start, DateTime end) + { + return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); + } public async Task> GetListForClient(long workshopId,CheckoutListClientSearchModel searchModel) { @@ -731,6 +732,58 @@ public class CheckoutApplication : ICheckoutApplication #region ForApi + #region CreateWorkshop + + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + public async Task> GetEmployeeSelectListByWorkshopId(long id) + { + return await _checkoutRepository.GetEmployeeSelectListByWorkshopId(id); + } + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + public async Task>> GetContractToCreateCheckout(long workshopId, string year, string month, long employeeId) + { + var op = new OperationResult>(); + if (workshopId < 1) + return op.Failed("کارگاه را انتخاب کنید"); + if (string.IsNullOrWhiteSpace(year) || string.IsNullOrWhiteSpace(month)) + return op.Failed("سال و ماه را انتخاب کنید"); + var result = await GetContractResultToCreateCheckout(workshopId, employeeId, year, month, null, + null); + if(result.CreateCheckoutList.Count == 0) + return op.Failed("موردی یافت نشد"); + var finalResult = result.CreateCheckoutList.Select(x => new ContractsListToCreateCheckoutDto + { + Id = x.Id, + ContractNo = x.ContractNo, + WorkshopName = x.WorkshopName, + EmployeeName = x.EmployeeName, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + Description = x.Description, + LeftWorkDate = x.LeftWorkDate, + CreateCheckoutStatus = x.HasCheckout ? CreateCheckoutStatus.HasCheckout : x.Extension == false ? CreateCheckoutStatus.NotValid : CreateCheckoutStatus.ReadyToCreate + + }).ToList(); + + return op.Succcedded(finalResult); + } + + #endregion + + public async Task> GetList(CheckoutSearchModelDto searchModel) { return await _checkoutRepository.GetList(searchModel); @@ -745,8 +798,8 @@ public class CheckoutApplication : ICheckoutApplication var typeOfWorkingHours = ""; if (checkout.HasRollCall) { - result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, true, workingHours, false); - typeOfWorkingHours = "دارای حضورغیاب"; + result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, true, workingHours, false); + typeOfWorkingHours = "دارای حضورغیاب"; } else @@ -778,5 +831,11 @@ public class CheckoutApplication : ICheckoutApplication RotatingShiftList = items }; } + + public Task> CheckoutPrint(List ids) + { + return _checkoutRepository.CheckoutPrint(ids); + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs index 64ee3c80..1c45a32f 100644 --- a/CompanyManagment.Application/WorkshopAppliction.cs +++ b/CompanyManagment.Application/WorkshopAppliction.cs @@ -11,6 +11,7 @@ using Company.Domain.InstitutionContractAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.LeftWorkInsuranceAgg; using Company.Domain.WorkshopAgg; +using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.Employee; using CompanyManagment.App.Contracts.Employee.DTO; using CompanyManagment.App.Contracts.EmployeeChildren; @@ -1131,5 +1132,16 @@ public class WorkshopAppliction : IWorkshopApplication } + + #endregion + + + #region ForApi + + public async Task> GetAdminWorkshopSelectList() + { + return await _workshopRepository.GetAdminWorkshopSelectList(); + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 4abe4c9d..29bdd214 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -956,7 +956,7 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos Amount = s.Amount, AmountDouble = s.Amount.MoneyToDouble(), SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, - SalaryAidDateTimeGe = s.SalaryAidDateTime + SalaryAidDateTimeGe = s.SalaryAidDateTime, }).ToList(), CheckoutRollCall = item.CheckoutRollCall != null ? new CheckoutRollCallViewModel() @@ -2816,10 +2816,44 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos #endregion - - #region ForApi + ///ایجاد فیش + #region CreateCheckout + + + /// + /// دریافت سلکت لیست پرسنل کارگاه + /// + /// + /// + public async Task> GetEmployeeSelectListByWorkshopId(long id) + { + var employeesHasLeftworkData = _context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId); + var employees = await _context.Employees + .Where(x => employeesHasLeftworkData.Contains(x.id)) + .Select(x => + new EmployeeSelectListDto() + { + Id = x.id, + EmployeeFullName = x.FullName + }) + .AsNoTracking() + .ToListAsync(); + return employees; + } + + + + #endregion + + + + /// + /// دریافت لیست فیش حقوقی + /// + /// + /// public async Task> GetList(CheckoutSearchModelDto searchModel) { var acountID = _authHelper.CurrentAccountId(); @@ -2827,43 +2861,40 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .Select(x => x.WorkshopId); - var watch = new Stopwatch(); - watch.Start(); - var checkouts = - ( - from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) - join x in _context.CheckoutSet - on workshop.id equals x.WorkshopId - select new - { - Id = x.id, - EmployeeFullName = x.EmployeeFullName, - EmployeeId = x.EmployeeId, - ContractStart = x.ContractStart, - ContractEnd = x.ContractEnd, - PersonnelCode = x.PersonnelCode, - SumOfWorkingDays = x.SumOfWorkingDays, - Month = x.Month, - Year = x.Year, - ContractNo = x.ContractNo, - IsActiveString = x.IsActiveString, - Signature = x.Signature, - IsUpdateNeeded = x.IsUpdateNeeded, - WorkshopId = x.WorkshopId, - ArchiveCode = workshop.ArchiveCode, - WorkshopName = workshop.WorkshopFullName, - WorkshopSignCheckout = workshop.SignCheckout, - - } - - ).OrderByDescending(x => x.Id) - .ThenByDescending(x => x.Year) - .ThenByDescending(x=>x.ContractStart) - .ThenBy(x => x.PersonnelCode).AsNoTracking(); + watch.Start(); + var checkouts = + ( + from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) + join x in _context.CheckoutSet + on workshop.id equals x.WorkshopId + select new + { + Id = x.id, + EmployeeFullName = x.EmployeeFullName, + EmployeeId = x.EmployeeId, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + SumOfWorkingDays = x.SumOfWorkingDays, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + IsUpdateNeeded = x.IsUpdateNeeded, + WorkshopId = x.WorkshopId, + ArchiveCode = workshop.ArchiveCode, + WorkshopName = workshop.WorkshopFullName, + WorkshopSignCheckout = workshop.SignCheckout, + } + ).OrderByDescending(x => x.Id) + .ThenByDescending(x => x.Year) + .ThenByDescending(x => x.ContractStart) + .ThenBy(x => x.PersonnelCode).AsNoTracking(); Console.WriteLine("getList======================= : " + watch.Elapsed); - + #region SercheModel if (!string.IsNullOrWhiteSpace(searchModel.ContractNo)) @@ -2875,10 +2906,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos .OrderByDescending(x => x.ContractStart) .ThenBy(x => x.PersonnelCode); } + if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName)) { checkouts = checkouts.Where(x => x.EmployeeFullName.Contains(searchModel.EmployeeFullName)); } + if (searchModel.EmployerId != 0) { var workshopIds = _context.WorkshopEmployers.Where(e => e.EmployerId == searchModel.EmployerId) @@ -2888,16 +2921,12 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos } - - - //سرچ سال if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month) && (string.IsNullOrWhiteSpace(searchModel.ContractStart) || string.IsNullOrWhiteSpace(searchModel.ContractEnd))) { - var startYear = searchModel.Year + "/01/01"; var startyearGr = startYear.ToGeorgianDateTime(); var endYear = $"{searchModel.Year}/12/01".FindeEndOfMonth(); @@ -2905,15 +2934,14 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos checkouts = checkouts.Where(x => x.ContractStart >= startyearGr && x.ContractEnd <= endYearGr); - if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) + if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || + searchModel.EmployerId > 0) checkouts = checkouts.OrderByDescending(x => x.ContractEnd); - } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && string.IsNullOrWhiteSpace(searchModel.ContractStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd)) { - //سرچ سال و ماه string y1 = $"{searchModel.Year}/{searchModel.Month}/01"; var startDate = y1.ToGeorgianDateTime(); @@ -3027,42 +3055,41 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos endDate >= x.ContractEnd && startDate < x.ContractEnd); //if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) // checkouts = checkouts.OrderBy(x => x.PersonnelCodeInt); - } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd) && string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month)) { - //سرچ تاریخ var start = searchModel.ContractStart.ToGeorgianDateTime(); var endd = searchModel.ContractEnd.ToGeorgianDateTime(); checkouts = checkouts.Where(x => x.ContractStart >= start && x.ContractStart <= endd); - if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) + if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || + searchModel.EmployerId > 0) checkouts = checkouts.OrderByDescending(x => x.ContractEnd).ThenBy(x => x.PersonnelCode); } - #endregion watch.Reset(); watch.Start(); - - var checkoutQueryFilter = await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); + + var checkoutQueryFilter = + await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); Console.WriteLine("pagination===================== : " + watch.Elapsed); - var employers =await + var employers = await _context.WorkshopEmployers.Where(x => checkoutQueryFilter .Select(c => c.WorkshopId).Contains(x.WorkshopId)) - .Select(x=> new {x.Employer, x.WorkshopId}).ToListAsync(); + .Select(x => new { x.Employer, x.WorkshopId }).ToListAsync(); var contractingPartiesIds = employers.Select(x => x.Employer.ContractingPartyId).ToList(); var warningMessages = await _context.CheckoutWarningMessages.Where(x => checkoutQueryFilter .Select(c => c.Id).Contains(x.CheckoutId)).ToListAsync(); - + var contractnigParties = await _context.PersonalContractingParties .Where(x => contractingPartiesIds.Contains(x.id)).ToListAsync(); @@ -3077,7 +3104,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { var warningMessage = warningMessages.Where(wm => wm.CheckoutId == x.Id); var empl = employers.First(em => em.WorkshopId == x.WorkshopId); - var isBlock = contractnigParties.Any(cp => cp.id == empl.Employer.ContractingPartyId && cp.IsBlock == "true"); + var isBlock = + contractnigParties.Any(cp => cp.id == empl.Employer.ContractingPartyId && cp.IsBlock == "true"); var option = options.FirstOrDefault(o => o.WorkshopId == x.WorkshopId && o.EmployeeId == x.EmployeeId); return new CheckoutDto { @@ -3102,13 +3130,10 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos { WarningMessage = wm.WarningMessage, TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - }).ToList() }; - - }) - .ToList(); + .ToList(); var count = await checkouts.CountAsync(); Console.WriteLine("FinalList================================ : " + watch.Elapsed); return new PagedResult() @@ -3118,5 +3143,322 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos }; } + /// + /// پرینت فیش حقوقی + /// Api + /// + /// + /// + public async Task> CheckoutPrint(List ids) + { + if (ids.Count == 0) + return new List(); + + var watch = new Stopwatch(); + watch.Start(); + + var getCheckouts = await _context.CheckoutSet.Where(x => ids.Contains(x.id)) + .AsNoTracking() + .ToListAsync(); + + var employers = await _context.WorkshopEmployers + .Where(x => x.WorkshopId == getCheckouts.First().WorkshopId).AsNoTracking() + .Select(x => new CheckoutEmployersList + { + IsLegal = x.Employer.IsLegal, + EmployerFullName = x.Employer.FullName + }).ToListAsync(); + + var employees = + (from x in _context.Employees.Where(x => getCheckouts.Select(ch => ch.EmployeeId).Contains(x.id)) + select new + { + EmployeeId = x.id, + MaritalStatus = x.MaritalStatus + } + ).AsNoTracking(); + var workshop = await _context.Workshops.AsNoTracking().FirstAsync(x => x.id == getCheckouts.First().WorkshopId); + var showSumOfPayments = workshop.TotalPaymentHide; + bool isLegal = employers.Any(x => x.IsLegal == "حقوقی"); + + var leftWorks = await _context.LeftWorkList.AsNoTracking() + .Where(x => x.WorkshopId == workshop.id).ToListAsync(); + + var result = getCheckouts.Select(x => + { + var leftCheck = leftWorks + .FirstOrDefault(l => + l.EmployeeId == x.EmployeeId && x.ContractStart >= l.StartWorkDate && + x.ContractStart <= l.LeftWorkDate && l.HasLeft); + bool hasLeft = false; + var leftWorkDate = ""; + var lastDayOfWork = ""; + if (leftCheck != null) + { + var contractLeftWorkDate = x.ContractEnd.AddDays(1); + if (leftCheck.HasLeft && leftCheck.LeftWorkDate == contractLeftWorkDate) + { + hasLeft = true; + leftWorkDate = leftCheck.LeftWorkDate.ToFarsi(); + lastDayOfWork = x.ContractEnd.ToFarsi(); + } + } + + var overTimeWorkValue = x.OvertimePay > 0 ? x.OverTimeWorkValue : "-"; + var overNightWorkValue = x.NightworkPay > 0 ? x.OverNightWorkValue : "-"; + var fridayWorkValue = x.FridayPay > 0 ? x.FridayWorkValue : "-"; + var maritalStatus = employees.First(e => e.EmployeeId == x.EmployeeId).MaritalStatus; + var rewardPay = x.RewardPay == null ? "-" : x.RewardPay.ToMoneyCheckZeroNullable(); + var rotatingShiftValue = x.ShiftPay > 0 ? x.RotatingShiftValue : "-"; + var totalDeduction = "-"; + var totalPayment = "-"; + var totalClaims = "-"; + if (showSumOfPayments) + { + totalDeduction = x.TotalDeductions; + totalPayment = x.TotalPayment.ToMoneyCheckZero(); + totalClaims = x.TotalClaims; + } + + List rollcalls = []; + TimeSpan TotalPresentTimeSpan; + TimeSpan TotalBreakTimeSpan; + TimeSpan TotalWorkingTimeSpan; + TimeSpan TotalPaidLeaveTmeSpan; + TimeSpan TotalMandatoryTimeSpan; + TimeSpan TotalSickLeaveTimeSpan; + if (x.CheckoutRollCall != null) + { + TotalMandatoryTimeSpan = x.CheckoutRollCall.TotalPresentTimeSpan; + TotalBreakTimeSpan = x.CheckoutRollCall.TotalBreakTimeSpan; + TotalWorkingTimeSpan = x.CheckoutRollCall.TotalWorkingTimeSpan; + TotalPaidLeaveTmeSpan = x.CheckoutRollCall.TotalPaidLeaveTmeSpan; + TotalMandatoryTimeSpan = x.CheckoutRollCall.TotalMandatoryTimeSpan; + TotalSickLeaveTimeSpan = x.CheckoutRollCall.TotalSickLeaveTimeSpan; + rollcalls = x.CheckoutRollCall.RollCallDaysCollection.Select(r => new CheckoutPrintRollCallDto() + { + DayOfWeek = r.Date.DayOfWeek.DayOfWeeKToPersian(), + StartDate1 = r.FirstStartDate, + EndDate1 = r.FirstEndDate, + StartDate2 = r.SecondStartDate, + EndDate2 = r.SecondEndDate, + IsSliced = r.IsSliced, + LeaveType = r.LeaveType, + IsAbsent = r.IsAbsent, + IsFriday = r.IsFriday, + IsHoliday = r.IsHoliday, + TotalWorkingHours = $"{(int)(r.WorkingTimeSpan.TotalHours)}:{r.WorkingTimeSpan.Minutes:00}", + BreakTimeString = $"{(int)(r.BreakTimeSpan.TotalHours)}:{r.BreakTimeSpan.Minutes:00}", + RollCallDateFa = r.Date.ToFarsi() + + }).ToList(); + } + else + { + + // if (x.HasRollCall) + // x.MonthlyRollCall = _rollCallRepository.GetEmployeeRollCallsForMonth(x.EmployeeId, x.WorkshopId, + // x.ContractStartGr, x.ContractEndGr); + // else + // { + // x.CreateWorkingHoursTemp.ContractStartGr = x.ContractStartGr; + // x.CreateWorkingHoursTemp.ContractEndGr = x.ContractEndGr; + // x.CreateWorkingHoursTemp.ContarctStart = x.ContractStartGr.ToFarsi(); + // x.CreateWorkingHoursTemp.ContractEnd = x.ContractEndGr.ToFarsi(); + // x.CreateWorkingHoursTemp.EmployeeId = x.EmployeeId; + // x.CreateWorkingHoursTemp.WorkshopId = x.WorkshopId; + // x.MonthlyRollCall = + // ConvertStaticToRollCall(x.CreateWorkingHoursTemp, + // workshopName.WorkshopHolidayWorking); + // } + } + + return new CheckoutPrintDto() + { + Id = x.id, + + // هدر فیش + // اطلاعات هویتی + // اطلاعات کارگاه + + #region Header + + EmployeeFullName = x.EmployeeFullName, + FathersName = x.FathersName, + NationalCode = x.NationalCode, + DateOfBirth = x.DateOfBirth, + WorkshopName = workshop.WorkshopName, + ContractNo = x.ContractNo, + Month = x.Month, + Year = x.Year, + EmployersLists = employers, + EmployerIslegal = isLegal, + HasLeft = hasLeft, + LastDayOfWork = lastDayOfWork, + LeftWorkDate = leftWorkDate, + + #endregion + + //جدول مطالبات و کسورات + + #region PaymentAndDeductionTable + + //مطالبات + PaymentList = + [ + new PaymentAndDeductionList() + { + RowNumber = 1, Title = "حقوق و مزد", Value = $"{x.SumOfWorkingDays}", + Amount = x.MonthlySalary.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 2, Title = "پایه سنوات", Value = "-", Amount = x.BaseYearsPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 3, Title = "کمک هزینه اقلام مصرفی خانوار", Value = "-", + Amount = x.ConsumableItems.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 4, Title = "کمک هزینه مسکن", Value = "-", + Amount = x.HousingAllowance.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 5, Title = "فوق العاده اضافه کاری", Value = overTimeWorkValue, + Amount = x.OvertimePay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 6, Title = "فوق العاده شب کاری", Value = overNightWorkValue, + Amount = x.NightworkPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 7, Title = "فوق العاده جمعه کاری", Value = fridayWorkValue, + Amount = x.FridayPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { RowNumber = 8, Title = "فوق العاده ماموریت", Value = "-", Amount = "-", }, + + new PaymentAndDeductionList() + { + RowNumber = 9, Title = "فوق العاده نوبت کاری", Value = rotatingShiftValue, + Amount = x.ShiftPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 10, Title = "کمک هزینه عائله مندی", Value = "-", + Amount = x.FamilyAllowance.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 11, Title = "حق تاهل", Value = maritalStatus, + Amount = x.MarriedAllowance.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { RowNumber = 12, Title = "پاداش", Value = "-", Amount = rewardPay, }, + + new PaymentAndDeductionList() + { + RowNumber = 13, Title = "عیدی و پاداش", Value = "-", + Amount = x.BonusesPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 14, Title = "سنوات", Value = "-", + Amount = x.YearsPay.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 15, Title = "مزد مرخصی", Value = "-", + Amount = x.LeavePay.ToMoneyCheckZero(), + } + ], + + //کسورات + DeductionList = + [ + new PaymentAndDeductionList() + { + RowNumber = 1, Title = "حق بیمه سهم کارگر", Value = "-", + Amount = x.InsuranceDeduction.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 2, Title = "مالیات بر حقوق", Value = "-", + Amount = x.TaxDeducation.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 3, Title = "قسط تسهیلات", Value = "-", + Amount = x.InstallmentDeduction.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { + RowNumber = 4, Title = "مساعده", Value = "-", Amount = x.SalaryAidDeduction.ToMoneyCheckZero(), + }, + + new PaymentAndDeductionList() + { RowNumber = 5, Title = "غیبت", Value = "-", Amount = "-", } + ], + + TotalPayment = totalPayment, + TotalDeductions = totalDeduction, + TotalClaims = totalClaims, + + #endregion + + //لیست ورود و خروج پرسنل + //اطلاعات ساعات کار و موظقی + + #region RollCallData + + MonthlyRollCall =rollcalls, + #endregion + + + //اقساط - مساعده + + #region SalaryAidAndInstallmentData + SalaryAids= x.SalaryAids.Select(s=> new CheckoutPrintSalaryAidDto() + { + Amount = s.Amount, + SalaryAidDateTimeFa = s.SalaryAidDateTimeFa, + }).ToList(), + + Installments = x.LoanInstallments.Select(i=>new CheckoutPrintInstallmentDto() + { + Amount = i.AmountForMonth, + RemainingAmount = i.LoanRemaining, + LoanAmount = i.LoanAmount + }).ToList(), + + + #endregion + }; + }).ToList(); + + Console.WriteLine("print : " + watch.Elapsed); + return result; + } + #endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index 30a06a9f..f8e55f70 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -1187,14 +1187,14 @@ public class WorkshopRepository : RepositoryBase !string.IsNullOrEmpty(x.ArchiveCode)) .Select(x => x.ArchiveCode) .ToList(); - + int maxArchiveCode = 0; - + foreach (var code in archiveCodes) { // Remove "b-" prefix if exists string cleanCode = code.StartsWith("b-") ? code.Substring(2) : code; - + // Try to parse the clean code to an integer if (int.TryParse(cleanCode, out int codeValue)) { @@ -1204,7 +1204,7 @@ public class WorkshopRepository : RepositoryBase x.StartWork).ToList(); } + + + + #endregion + + + #region ForApi + + public async Task> GetAdminWorkshopSelectList() + { + var watch = new Stopwatch(); + watch.Start(); + var acountId = _authHelper.CurrentAccountId(); + + var workshopIds = _context.WorkshopAccounts.AsNoTracking().Where(x => x.AccountId == acountId).Select(x => x.WorkshopId); + + var employers = await + _context.WorkshopEmployers.AsNoTracking().Where(x => workshopIds.Contains(x.WorkshopId)) + .Select(x => new { x.Employer, x.WorkshopId }).ToListAsync(); + + var blockedContractingParties =await _context.PersonalContractingParties + .Where(x => x.IsBlock == "true").Select(x=>x.id).ToListAsync(); + + var workshops = await _context.Workshops.AsNoTracking() + .Where(x => workshopIds.Contains(x.id)) + .Where(x => x.IsActiveString == "true").ToListAsync(); + + + var result = workshops.Select(x => + { + var empl = employers.First(em => em.WorkshopId == x.id); + var isBlock = blockedContractingParties.Any(cp => cp == empl.Employer.ContractingPartyId); + return new AdminWorkshopSelectListDto + { + Id = x.id, + WorkshopFullName = x.WorkshopFullName, + ArchiveCode = x.ArchiveCode, + IsBlock = isBlock + }; + + }).OrderBy(x=>x.IsBlock ? 1 : 0) + .ToList(); + + Console.WriteLine("workshopSelectList : " +watch.Elapsed); + return result; + } + #endregion } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs index 8f3df3e9..295d50b7 100644 --- a/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs +++ b/ServiceHost/Areas/Admin/Controllers/CheckoutController.cs @@ -2,18 +2,26 @@ using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout.Dto; using CompanyManagment.App.Contracts.InstitutionPlan; +using CompanyManagment.App.Contracts.Workshop; +using CompanyManagment.App.Contracts.Workshop.DTOs; using Microsoft.AspNetCore.Mvc; +using NuGet.Packaging.Signing; using ServiceHost.BaseControllers; +using WorkFlow.Application.Contracts.WorkFlow; namespace ServiceHost.Areas.Admin.Controllers; public class CheckoutController : AdminBaseController { private readonly ICheckoutApplication _checkoutApplication; + private readonly IWorkshopApplication _workshopApplication; + private readonly IWorkFlowApplication _workFlowApplication; - public CheckoutController(ICheckoutApplication checkoutApplication) + public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication, IWorkFlowApplication workFlowApplication) { _checkoutApplication = checkoutApplication; + _workshopApplication = workshopApplication; + _workFlowApplication = workFlowApplication; } /// @@ -39,5 +47,81 @@ public class CheckoutController : AdminBaseController return result; } + /// + /// پرینت گروهی فیش حقوقی + /// + /// + /// + [HttpGet("GroupPrint")] + public async Task> Print(List ids) + { + var result =await _checkoutApplication.CheckoutPrint(ids); + return result; + } + + /// + /// پرینت تکی فیش حقوقی + /// + /// + /// + [HttpGet("PrintOne")] + public async Task> Print(long id) + { + var result = await _checkoutApplication.CheckoutPrint([id]); + return result; + } + + + #region CreateCheckout + /// + /// سلکت لیست کارگاه + /// + /// + [HttpGet("WorkshopSelectList")] + public async Task> GetWorkshopSelectList() + { + var result =await _workshopApplication.GetAdminWorkshopSelectList(); + return result; + } + + /// + /// سلک لیست پرسنل + /// + /// + /// + [HttpGet("EmployeeSelectList")] + public async Task> GetEmployeeSelectListByWorkshopId(long workshopId) + { + var result = await _checkoutApplication.GetEmployeeSelectListByWorkshopId(workshopId); + return result; + } + + + /// + /// دریافت لیست قراردادها برای ایجاد فیش حقوقی + /// + /// + /// + /// + /// + /// + [HttpGet("GetContractsToCreateCheckout")] + public async Task>> GetContractsToCreateCheckout(long workshopId, string year, string month, long employeeId) + { + + var result =await _checkoutApplication.GetContractToCreateCheckout(workshopId, year, month, employeeId); + if (!result.IsSuccedded) + return result; + + var hasWorkFlow =await _workFlowApplication.HasWorkFlow(workshopId, year, month); + + if (hasWorkFlow) + return new OperationResult>().Failed( + "این کارگاه به دلیل داشتن کارپوشه مجاز به ایجاد تصفیه حساب نمی باشد"); + return result; + + } + #endregion + } diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs index a98a852a..a1a37028 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/CheckoutPrintAll.cshtml.cs @@ -22,9 +22,12 @@ public class CheckoutPrintAllModel : PageModel } public void OnGet(string idlist) - { - var ids = ExtractNumbers(idlist); - var resultList = new List(); + { + + + var ids = ExtractNumbers(idlist); + + var resultList = new List(); var res = _checkoutApplication.PrintAll(ids); diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index 218871e3..98953155 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -386,17 +386,17 @@ if (builder.Environment.IsDevelopment()) { var logConfig = configuration .ReadFrom.Configuration(context.Configuration) - .ReadFrom.Services(services) - .Enrich.FromLogContext(); + .ReadFrom.Services(services); + - logConfig.WriteTo.File( - path: Path.Combine(logDirectory, "gozareshgir_log.txt"), - rollingInterval: RollingInterval.Day, - retainedFileCountLimit: 30, - shared: true, - outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}" - ); + //logConfig.WriteTo.File( + // path: Path.Combine(logDirectory, "gozareshgir_log.txt"), + // rollingInterval: RollingInterval.Day, + // retainedFileCountLimit: 30, + // shared: true, + // outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}" + //); }, writeToProviders: true); // این باعث میشه کنسول پیش‌فرض هم کار کنه } diff --git a/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs b/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs index e000f514..6ac9791c 100644 --- a/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs +++ b/WorkFlow/Application/WorkFlow.Application.Contracts/WorkFlow/IWorkFlowApplication.cs @@ -73,4 +73,15 @@ public interface IWorkFlowApplication Task> GetEmployeesWithoutLunchBreak(long workshopId); Task> GetEmployeesWithoutGroup(long workshopId); + + #region ForApi + /// + /// در زمان ایجاد فیش کارپوشه کارگاه را چک میکند + /// + /// + /// + /// + /// + Task HasWorkFlow(long workshopId, string year, string month); + #endregion } \ No newline at end of file diff --git a/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs b/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs index d644bb5f..ac28f42f 100644 --- a/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs +++ b/WorkFlow/Application/WorkFlow.Application/WorkFlowApplication.cs @@ -781,5 +781,66 @@ public class WorkFlowApplication : IWorkFlowApplication return _customizedWorkshopSettingsACL.GetEmployeesWithoutGroup(workshopId); } + #region ForApi + + + public async Task HasWorkFlow(long workshopId, string year, string month) + { + var workshop = _workshopRepository.GetDetails(workshopId); + bool hasWorkFlow = false; + + var skipRollCallByWorkshopId = workshopId is 368 or 610; + if (workshop.HasRollCallFreeVip == "true" && !skipRollCallByWorkshopId) + { + DateTime startSreach; + DateTime endSearch; + + if (month == "0" && year == "0") + { + DateTime now = DateTime.Now; + string startStr = $"{now.ToFarsi().Substring(0, 8)}01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else if (month == "0" && year != "0") + { + DateTime now = DateTime.Now; + + string startStr = $"{year}/{now.ToFarsi().Substring(5, 2)}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else if (month != "0" && year == "0") + { + DateTime now = DateTime.Now; + + string startStr = $"{now.ToFarsi().Substring(0, 4)}/{month}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + else + { + string startStr = $"{year}/{month}/01"; + startSreach = startStr.ToGeorgianDateTime(); + endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime(); + } + + + DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1); + if (lastMonthEnd == endSearch) + { + var countWorkFlowCut = await CountCutByBgServiceLastMonth(workshopId); + var countWorkFlowAbsent = await CountAbsentRollCallLastMonth(workshopId); + var countWorkFlowLunchBreak = await CountEmployeesWithoutLunchBreakLastMonth(workshopId); + var countUndefinedRollCalls = await CountUndefinedLastMonth(workshopId); + + hasWorkFlow = countWorkFlowCut > 0 || countWorkFlowAbsent > 0 || countWorkFlowLunchBreak > 0 || + countUndefinedRollCalls > 0; + } + } + + return hasWorkFlow; + } + #endregion } \ No newline at end of file