Compare commits

..

41 Commits

Author SHA1 Message Date
4e9cecbb74 Merge branch 'Feature/Excel/instiutition-contract' 2025-12-29 17:21:58 +03:30
1d656a590f Merge remote-tracking branch 'origin/master' 2025-12-29 16:26:08 +03:30
SamSys
a33d7c019c launchsettnig 2025-12-29 15:08:53 +03:30
SamSys
d62b5ca155 Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-29 14:37:47 +03:30
SamSys
18a4334d8a change WarningMessage on InsuranceList Edit 2025-12-29 14:36:03 +03:30
84416fe1f5 feat: add validation for in-person contract approval and suppress documentation warnings 2025-12-29 13:29:32 +03:30
Mahan Chamani
bd1c1fa814 Refactor deployment script to use env variables
Updated deployment configuration to use environment variables for server host and credentials.
2025-12-29 12:22:10 +03:30
Mahan Chamani
8496b52013 Change deployment target from master to Main
Updated deployment configuration with new server details.
2025-12-29 11:17:59 +03:30
Mahan Chamani
5c1547dced Update dotnet-developPublish.yml 2025-12-29 09:51:06 +03:30
Mahan Chamani
c09321d89d Update dotnet-developPublish.yml 2025-12-29 09:50:40 +03:30
219e64c0f7 add menu 2025-12-29 09:35:33 +03:30
b42217ed94 Merge branch 'Feature/Excel/instiutiton-contract' 2025-12-28 19:31:14 +03:30
ad6f872145 fix: update contract and insurance list links to use dynamic domain 2025-12-28 18:31:13 +03:30
d22805892a Merge branch 'Feature/Insurance/client-api'
# Conflicts:
#	CompanyManagment.EFCore/Repository/InsuranceListRepository.cs
2025-12-28 18:25:14 +03:30
4da496cab8 Merge branch 'Feature/contracts/api' 2025-12-28 13:08:56 +03:30
SamSys
4b40580658 Merge branch 'master' into Feature/ClientLeavePageApi 2025-12-27 19:16:39 +03:30
SamSys
cddaf2f709 changes 2025-12-27 16:58:36 +03:30
SamSys
337cd40a4e LeaveDuration daily and hourly on create modal completed 2025-12-27 16:51:08 +03:30
SamSys
a98300cacd GetHourlyLeaveDuration 2025-12-27 15:49:39 +03:30
SamSys
daded35ab1 Merge branch 'master' into Feature/ClientLeavePageApi 2025-12-27 14:06:29 +03:30
SamSys
ba778bb519 LeaveListPrint 2025-12-27 14:06:10 +03:30
SamSys
54c67fe8f7 add ListPrint 2025-12-27 12:06:02 +03:30
SamSys
a638913172 create levave api and get rotating shift api 2025-12-25 16:16:50 +03:30
SamSys
69476f3f2d add multiple get list for leaveController 2025-12-24 12:53:06 +03:30
SamSys
4bc65e500d Merge branch 'Feature/ClientLeavePageApi' of https://github.com/samsyntax24/OriginalGozareshgir into Feature/ClientLeavePageApi 2025-12-24 11:53:15 +03:30
07587d162f add: implement PrintAllAsync and PrintOneAsync methods for leave printing functionality 2025-12-24 11:17:53 +03:30
SamSys
59bbb7aae6 ini leave groupList 2025-12-23 18:15:48 +03:30
SamSys
89de3162de GetLewvList Api 2025-12-23 17:03:54 +03:30
SamSys
132c8ac5a4 init 2025-12-23 15:10:17 +03:30
8e5d4c312e fix: correct spelling of 'Month' and enhance insurance client list retrieval with additional properties 2025-12-21 11:03:23 +03:30
4b39994de6 feat: add API endpoint for printing multiple contracts 2025-12-20 15:50:34 +03:30
0dd2dc7c43 add workshopCode on client contract print 2025-12-20 15:21:34 +03:30
20c00893b6 feat: add API endpoint for printing contract details and enhance contract print logic 2025-12-20 14:23:23 +03:30
b0d174a575 feat: implement contract printing methods and view models 2025-12-20 13:04:30 +03:30
293ea0f6f4 feat: enhance insurance client print model with additional properties and update related logic 2025-12-20 10:13:13 +03:30
3ce4cf3966 add insurance print api for client 2025-12-18 13:34:31 +03:30
0fbd5c9d3e Add print methods and ContractPrintViewModel class
Updated the `IContractApplication` interface:
- Added `PrintOneAsync(long id)` and `PrintAllAsync(List<long> ids)` methods.
- Corrected formatting of `DeleteAllContarcts(List<long> ids)`.
- Grouped changes under the `NewChangeByHeydari` region.

Introduced the `ContractPrintViewModel` class (currently empty).

Implemented `PrintOneAsync` and `PrintAllAsync` in `ContractApplication` with `NotImplementedException`.

These changes prepare the codebase for contract printing functionality.
2025-11-11 19:29:51 +03:30
8436f70aa0 Refactor and enhance contract handling logic
- Added `DailyWage`, `AvgWorkingHour`, and `FamilyAllowance` properties to `GetContractListForClientResponse`.
- Refactored `WorkingHoursWeekly` conversion logic by introducing a reusable `WeeklyHourConvertor` method in `ContractRepository`.
- Updated query result mapping to include new properties and utilize `WeeklyHourConvertor` for `AvgWorkingHour`.
- Improved code readability and maintainability by centralizing repetitive logic.
2025-11-11 19:26:45 +03:30
9cf8447a83 feat: add API for retrieving paginated contract list for client with filtering options 2025-11-03 17:49:51 +03:30
e124a4d5d9 feat: implement method to retrieve paginated contract list for client with filtering options 2025-11-03 17:43:50 +03:30
7b9e7881c6 feat: add commented-out method for retrieving contract list for client 2025-11-03 14:45:41 +03:30
34 changed files with 2236 additions and 99 deletions

View File

@@ -5,8 +5,6 @@ on:
branches:
- Main
env:
DOTNET_ENVIRONMENT: Development
jobs:
build-and-deploy:
@@ -37,12 +35,11 @@ jobs:
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
-verb:sync `
-source:contentPath="$publishFolder" `
-dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R",authType="Basic" `
-dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" `
-allowUntrusted `
-enableRule:AppOffline
env:
SERVER_HOST: your-server-ip-or-domain
SERVER_HOST: 171.22.24.15
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}

View File

@@ -48,6 +48,10 @@ public interface IContractRepository : IRepository<long, Contract>
bool Remove(long id);
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
#endregion
#region NewChangeByHeydari
@@ -63,4 +67,8 @@ public interface IContractRepository : IRepository<long, Contract>
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
#endregion
}
}

View File

@@ -23,6 +23,8 @@ public class InstitutionContractWorkshopGroup : EntityBase
!InitialWorkshops.Cast<InstitutionContractWorkshopBase>()
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
public bool IsInPersonContract => InitialWorkshops.Any(x => x.Services.ContractInPerson);
public InstitutionContractWorkshopGroup(long institutionContractId,
List<InstitutionContractWorkshopInitial> initialDetails)
{

View File

@@ -78,6 +78,7 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
#endregion
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
}

View File

@@ -1,8 +1,10 @@
using System;
using System.Collections.Generic;
using _0_Framework.Application;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.Leave;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Company.Domain.LeaveAgg;
@@ -10,7 +12,7 @@ public interface ILeaveRepository : IRepository<long, Leave>
{
EditLeave GetDetails(long id);
List<LeaveViewModel> search(LeaveSearchModel searchModel);
OperationResult RemoveLeave(long id);
Task<OperationResult> RemoveLeave(long id);
#region Pooya
List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
@@ -27,6 +29,8 @@ public interface ILeaveRepository : IRepository<long, Leave>
List<LeaveMainViewModel> searchClient(LeaveSearchModel searchModel);
LeavePrintViewModel PrintOne(long id);
List<LeavePrintViewModel> PrintAll(List<long> id);
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
#region Vafa
@@ -34,4 +38,27 @@ public interface ILeaveRepository : IRepository<long, Leave>
#endregion
bool CheckIfValidToEdit(long id);
/// <summary>
/// دریافت لیست مرخصی ها در کلاینت
/// Api
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<PagedResult<leaveListDto>> GetList(
LeaveListSearchModel searchModel);
/// <summary>
/// دریافت لیست گروه بندی شده
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task<LeaveListPrintDto> ListPrint(List<long> ids);
}

View File

@@ -3,6 +3,7 @@
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup>
<ItemGroup>

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.Contract;
public enum ContractListOrderType
{
ByContractCreationDate,
BySignedContract,
ByUnSignedContract,
ByPersonnelCode,
ByPersonnelCodeDescending,
ByContractStartDate,
ByContractStartDateDescending
}

View File

@@ -0,0 +1,13 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Contract;
public class GetContractListForClientRequest: PaginationRequest
{
public int Year { get; set; }
public int Month { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public long EmployeeId { get; set; }
public ContractListOrderType? OrderType { get; set; }
}

View File

@@ -0,0 +1,15 @@
namespace CompanyManagment.App.Contracts.Contract;
public class GetContractListForClientResponse
{
public long Id { get; set; }
public string PersonnelCode { get; set; }
public string ContractNo { get; set; }
public string EmployeeFullName { get; set; }
public string ContractStart { get; set; }
public string ContractEnd { get; set; }
public bool IsSigned { get; set; }
public string DailyWage { get; set; }
public string AvgWorkingHour { get; set; }
public string FamilyAllowance { get; set; }
}

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Workshop;
using System.Threading.Tasks;
using _0_Framework.Application.Enums;
namespace CompanyManagment.App.Contracts.Contract;
public interface IContractApplication
@@ -45,16 +47,101 @@ public interface IContractApplication
#region Client
OperationResult Remove(long id);
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
#endregion
/// <summary>
/// لیست قراردادها برای کلاینت
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<PagedResult<GetContractListForClientResponse>>
GetContractListForClient(GetContractListForClientRequest searchModel);
Task<ContractPrintViewModel> PrintOneAsync(long id);
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
#region NewChangeByHeydari
#endregion
OperationResult DeleteAllContarcts(List<long> ids);
#region NewChangeByHeydari
OperationResult DeleteAllContarcts(List<long> ids);
OperationResult DeleteContarcts(long id);
List<long> CheckHasCheckout(List<long> ids);
List<long> CheckHasSignature(List<long> ids);
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
#endregion
}
public class ContractPrintViewModel
{
public string ContractNo { get; set; }
public ContractPrintEmployerViewModel Employer { get; set; }
public ContractPrintEmployeeViewModel Employee { get; set; }
public ContractPrintTypeOfContractViewModel TypeOfContract { get; set; }
public ContractPrintFeesViewModel Fees { get; set; }
public string ConditionAndDetials { get; set; }
}
public class ContractPrintFeesViewModel
{
public string DailyWage { get; set; }
public string FamilyAllowance { get; set; }
public string ConsumableItems { get; set; }
public string HousingAllowance { get; set; }
}
public class ContractPrintTypeOfContractViewModel
{
public string ContractType { get; set; }
public string JobName { get; set; }
public string SetContractDate { get; set; }
public string ContarctStart { get; set; }
public string ContractEnd { get; set; }
public string WorkingHoursWeekly { get; set; }
public List<string> WorkshopAddress { get; set; }
}
public class ContractPrintEmployeeViewModel
{
public string FullName { get; set; }
public string NationalCode { get; set; }
public string IdNumber { get; set; }
public string DateOfBirth { get; set; }
public string FatherName { get; set; }
public string LevelOfEducation { get; set; }
public string Address { get; set; }
}
public class ContractPrintEmployerViewModel
{
public LegalType LegalType { get; set; }
public ContractPrintRealEmployerViewModel RealEmployer { get; set; }
public ContractPrintLegalEmployerViewModel LegalEmployer { get; set; }
public string WorkshopName { get; set; }
public string Address { get; set; }
public string WorkshopCode { get; set; }
}
public class ContractPrintLegalEmployerViewModel
{
public string CompanyName { get; set; }
public string NationalId { get; set; }
public string RegisterId { get; set; }
}
public class ContractPrintRealEmployerViewModel
{
public string FullName { get; set; }
public string NationalCode { get; set; }
public string IdNumber { get; set; }
}

View File

@@ -5,6 +5,7 @@ using System.Text;
using System.Threading.Tasks;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
@@ -96,6 +97,94 @@ public interface IInsuranceListApplication
#endregion
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
}
public class InsuranceClientPrintViewModel
{
public string Month { get; set; }
public string Year { get; set; }
public string WorkshopName { get; set; }
public string ListNo { get; set; }
public string AgreementNumber { get; set; }
public string WorkshopInsuranceCode { get; set; }
public string WorkshopEmployerName { get; set; }
public string WorkshopAddress { get; set; }
public List<InsuranceClientPrintItemsViewModel> Items { get; set; }
public string EmployerShare { get; set; }
public string InsuredShare { get; set; }
public string UnEmploymentInsurance { get; set; }
public string AllInsuredShare { get; set; }
}
public class InsuranceClientPrintItemsViewModel
{
/// <summary>
/// شماره بیمه
/// </summary>
public string InsuranceCode { get; set; }
/// <summary>
/// نام و نام خانوادگی
/// </summary>
public string FullName { get; set; }
/// <summary>
/// شغل
/// </summary>
public string JobName { get; set; }
/// <summary>
/// کد ملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شروع به کار
/// </summary>
public string StartWork { get; set; }
/// <summary>
/// ترک کار
/// </summary>
public string LeftWork { get; set; }
/// <summary>
/// روزهای کارکرد
/// </summary>
public string WorkingDays { get; set; }
/// <summary>
/// دستمزد روزانه
/// </summary>
public string DailyWage { get; set; }
/// <summary>
/// پایه سنوات روزانه
/// </summary>
public string BaseYears { get; set; }
/// <summary>
/// دستمزد ماهانه
/// </summary>
public string MonthlySalary { get; set; }
/// <summary>
/// مزایای ماهیانه مشمول
/// </summary>
public string MonthlyBenefits { get; set; }
/// <summary>
/// حق تاهل
/// </summary>
public string MarriedAllowance { get; set; }
/// <summary>
/// حقوق و مزایای ماهیانه مشمول
/// </summary>
public string BenefitsIncludedContinuous { get; set; }
/// <summary>
/// حقوق و مزایای ماهیانه غیر مشمول
/// </summary>
public string BenefitsIncludedNonContinuous { get; set; }
/// <summary>
/// مجموع مزایای ماهیانه مشمول و غیر مشمول
/// </summary>
public string IncludedAndNotIncluded { get; set; }
/// <summary>
/// حق بیمه سهم بیمه شده
/// </summary>
public string InsuranceShare { get; set; }
}
public class InsuranceClientSearchModel:PaginationRequest
@@ -113,4 +202,11 @@ public class InsuranceClientListViewModel
public int YearInt { get; set; }
public string MonthName { get; set; }
public int MonthInt { get; set; }
public int PersonnelCount { get; set; }
public int LeftWorkCount { get; set; }
public string AllInsuredShare { get; set; }
public string InsuredShare { get; set; }
public string EmployerShare { get; set; }
public string UnEmploymentInsurance { get; set; }
}

View File

@@ -0,0 +1,15 @@
namespace CompanyManagment.App.Contracts.Leave;
public class CheckIsInvalidLeaveDto
{
/// <summary>
/// آیا تعطیل است
/// </summary>
public bool IsHoliday { get; set; }
/// <summary>
/// فاقد/دارای اعتبار فیش غیر رسمی
/// </summary>
public bool CanCreateInvalid { get; set; }
}

View File

@@ -0,0 +1,78 @@
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
namespace CompanyManagment.App.Contracts.Leave;
public class CreateLeaveDto
{
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
public string EndLeave { get; set; }
/// <summary>
/// آی دی کارگاه
/// </summary>
public long WorkshopId { get; set; }
/// <summary>
/// آی دی پرسنل
/// </summary>
public long EmployeeId { get; set; }
/// <summary>
/// نوع مدت مرخص روزانه/ ساعتی
/// </summary>
public PaidLeaveType PaidLeaveType { get; set; }
/// <summary>
/// نوع مرخصی استحقاقی/استعلاجی
/// </summary>
public LeaveType LeaveType { get; set; }
/// <summary>
/// نام کامل کارگاه
/// </summary>
public string WorkshopName { get; set; }
/// <summary>
/// ساعت شروع مرخصی
/// </summary>
public string StartHoures { get; set; }
/// <summary>
/// ساعت پایان مرخصی
/// </summary>
public string EndHours { get; set; }
/// <summary>
/// موافقت / عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Decription { get; set; }
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
/// <summary>
/// دارای اعتبار / فاقد اعتبار فیش غیررسمی
/// </summary>
public bool IsInvallid { get; set; }
public CustomizeRotatingShiftsViewModel SelectedShift { get; set; }
}

View File

@@ -0,0 +1,88 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
public class GroupLeaveListDto
{
/// <summary>
/// سال مرخصی
/// </summary>
public string YearStr { get; set; }
/// <summary>
/// ماه مرخصی
/// </summary>
public string MonthStr { get; set; }
/// <summary>
/// آیتم های هر گروه
/// </summary>
public List<LeaveListItemsDto> LeaveListItemsDto { get; set; }
}
/// <summary>
/// آیتم های هر گروه
/// </summary>
public class LeaveListItemsDto
{
/// <summary>
/// نوع مرخصی، استحقاقی/استعلاجی
/// </summary>
public string LeaveType { get; set; }
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
public string EndLeave { get; set; }
/// <summary>
/// زمان مرخصی
/// بازه مرخصی ساعتی
/// </summary>
public string HourlyInterval { get; set; }
/// <summary>
/// مدت مرخصی
/// </summary>
public string LeaveDuration { get; set; }
/// <summary>
/// موافقت/عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
/// <summary>
/// آی دی
/// </summary>
public long Id { get; set; }
/// <summary>
/// آی دی گارگاه
/// </summary>
public long WorkshopId { get; set; }
/// <summary>
/// آی دی پرسنل
/// </summary>
public long EmployeeId { get; set; }
/// <summary>
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
/// </summary>
public bool IsInvalid { get; set; }
}

View File

@@ -19,6 +19,7 @@ public interface ILeaveApplication
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
OperationResult RemoveLeave(long id);
Task<OperationResult> RemoveLeaveAsync(long id);
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
List<LeaveMainViewModel> searchClient(LeaveSearchModel search);
@@ -36,5 +37,117 @@ public interface ILeaveApplication
TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,
string type);
#endregion
#endregion
/// <summary>
/// دریافت لیست مرخصی ها در کلاینت
/// Api
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<PagedResult<leaveListDto>> GetList(
LeaveListSearchModel searchModel);
/// <summary>
/// دریافت لیست گروه بندی شده
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
/// <summary>
/// دریافت مجکوع مرخصی پرسنل
/// اگر آی دی پرسنل، سال و ماه خالی نباشد
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="yearStr"></param>
/// <param name="monthStr"></param>
/// <param name="leaveType"></param>
/// <returns></returns>
TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr,
LeaveType leaveType);
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
/// <summary>
/// چک میکند که تاریخ وارد شده در شروع مرخصی تعطیل است یا خیر
/// دارای/فاقد اعتبار فیش غیررسمی را چک میکند
/// </summary>
/// <param name="startLeaveDate"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId);
/// <summary>
/// ایجاد مرخصی از ای پی آی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateLeave(CreateLeaveDto command);
/// <summary>
/// چک میکند که آیا پرسنل حضور غیاب دارای شیفت گردشی دارد یا خیر
/// اگر داشت دریافت شیف گردشی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="startLeaveDate"></param>
/// <returns></returns>
Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId, long employeeId, string startLeaveDate);
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task<LeaveListPrintDto> ListPrint(List<long> ids);
/// <summary>
/// محاسبه مدت مرخصی ساعتی
/// </summary>
/// <param name="startHours"></param>
/// <param name="endHours"></param>
/// <returns></returns>
Task<string> GetHourlyLeaveDuration(string startHours, string endHours);
/// <summary>
/// محاسبه مدت مرخصی روزانه
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
Task<string> GetDailyLeaveDuration(string startDate, string endDate);
}
public class LeavePrintResponseViewModel
{
public string FullName { get; set; }
public string NationalCode { get; set; }
public string WorkshopName { get; set; }
public List<string> EmployerNames { get; set; }
public string PaidLeaveType { get; set; }
public string ContractNo { get; set; }
public LeavePrintHourlyResponseViewModel HourlyLeave { get; set; }
public LeavePrintDailyResponseViewModel DailyLeave { get; set; }
}
public class LeavePrintDailyResponseViewModel
{
public string StartLeave { get; set; }
public string EndLeave { get; set; }
public string TotalDay { get; set; }
}
public class LeavePrintHourlyResponseViewModel
{
public string LeaveDate { get; set; }
public string StartHour { get; set; }
public string EndHour { get; set; }
public string TotalHour { get; set; }
}

View File

@@ -0,0 +1,24 @@
using _0_Framework.Application;
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
public class LeaveListMultipleDto
{
/// <summary>
/// لیست گروهبندی شده بر اساس سال و ماه
/// اگر در جستجو پرسنل انتخاب شود
/// </summary>
public List<GroupLeaveListDto>? GroupLeaveListDto { get; set; }
/// <summary>
/// لیست نرمال PageResult
/// </summary>
public PagedResult<leaveListDto>? leaveListDto { get; set; }
/// <summary>
/// مجموع مرخصی پرسنل
/// اگر پرسنل انتخاب شده باشد
/// </summary>
public string? SumOfEmployeeleaves { get; set; }
}

View File

@@ -0,0 +1,77 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
/// <summary>
/// پرینت لیستی
/// api
/// </summary>
public class LeaveListPrintDto
{
/// <summary>
/// نام کامل پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// مجموع مرخصی پرسنل
/// </summary>
public string? SumOfEmployeeleaves { get; set; }
/// <summary>
/// لیست مرخصی
/// </summary>
public List<LeavePrintListItemsDto> LeavePrintListItemsDto { get; set; }
}
public class LeavePrintListItemsDto
{
/// <summary>
/// سال مرخصی
/// </summary>
public string YearStr { get; set; }
/// <summary>
/// ماه مرخصی
/// </summary>
public string MonthStr { get; set; }
/// <summary>
/// نوع مرخصی، استحقاقی/استعلاجی
/// </summary>
public string LeaveType { get; set; }
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
public string EndLeave { get; set; }
/// <summary>
/// زمان مرخصی
/// بازه مرخصی ساعتی
/// </summary>
public string HourlyInterval { get; set; }
/// <summary>
/// مدت مرخصی
/// </summary>
public string LeaveDuration { get; set; }
/// <summary>
/// موافقت/عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
}

View File

@@ -0,0 +1,45 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Leave;
public class LeaveListSearchModel : PaginationRequest
{
/// <summary>
/// آی دی کارگاه
/// </summary>
public long WorkshopId { get; set; }
/// <summary>
/// نوع مرخصی، استحقاقی/استعلاجی
/// </summary>
public LeaveType LeaveType { get; set; }
/// <summary>
/// سال مرخصی
/// </summary>
public string YearStr { get; set; }
/// <summary>
/// ماه مرخصی
/// </summary>
public string MonthStr { get; set; }
/// <summary>
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
/// </summary>
public bool IsInvalid { get; private set; }
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
public string EndLeave { get; set; }
/// <summary>
/// آی دی پرسنل
/// </summary>
public long EmployeeId { get; set; }
}

View File

@@ -0,0 +1,18 @@
namespace CompanyManagment.App.Contracts.Leave;
public enum LeaveType
{
/// <summary>
/// هر دو
/// </summary>
Both,
/// <summary>
/// مرخصی استعلاجی
/// </summary>
SickLeave,
/// <summary>
/// مرخصی استحقاقی
/// </summary>
PaidLeave
}

View File

@@ -0,0 +1,17 @@
namespace CompanyManagment.App.Contracts.Leave;
/// <summary>
/// نوع مدت مرخصی
/// </summary>
public enum PaidLeaveType
{
/// <summary>
/// روزانه
/// </summary>
Daily,
/// <summary>
/// ساعتی
/// </summary>
Hourly,
}

View File

@@ -0,0 +1,17 @@
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
public class RotatingShiftDto
{
/// <summary>
/// آیا حضورغیاب به همراه گروهبندی گردشی دارد
/// </summary>
public bool HasRollCall {get; set;}
/// <summary>
/// لیست شیفت های گردشی پرسنل
/// </summary>
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
}

View File

@@ -0,0 +1,84 @@
namespace CompanyManagment.App.Contracts.Leave;
public class leaveListDto
{
/// <summary>
/// نام کامل پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// سال مرخصی
/// </summary>
public string YearStr { get; set; }
/// <summary>
/// ماه مرخصی
/// </summary>
public string MonthStr { get; set; }
/// <summary>
/// نوع مرخصی، استحقاقی/استعلاجی
/// </summary>
public string LeaveType { get; set; }
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
public string EndLeave { get; set; }
/// <summary>
/// زمان مرخصی
/// بازه مرخصی ساعتی
/// </summary>
public string HourlyInterval { get; set; }
/// <summary>
/// مدت مرخصی
/// </summary>
public string LeaveDuration { get; set; }
/// <summary>
/// موافقت/عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
/// <summary>
/// آی دی
/// </summary>
public long Id { get; set; }
/// <summary>
/// آی دی گارگاه
/// </summary>
public long WorkshopId { get; set; }
/// <summary>
/// آی دی پرسنل
/// </summary>
public long EmployeeId { get; set; }
/// <summary>
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
/// </summary>
public bool IsInvalid { get; set; }
}

View File

@@ -2712,7 +2712,9 @@ public class ContractApplication : IContractApplication
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
.Select(x => x.EmployerId).ToList();
res.Employers = _employerRepository.GetEmployers(emp);
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
var workshop = new WorkshopViewModel()
{
@@ -3107,6 +3109,21 @@ public class ContractApplication : IContractApplication
return _contractRepository.SearchForClient(searchModel);
}
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
{
return await _contractRepository.GetContractListForClient(searchModel);
}
public async Task<ContractPrintViewModel> PrintOneAsync(long id)
{
return (await _contractRepository.PrintAllAsync([id])).FirstOrDefault();
}
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
{
return await _contractRepository.PrintAllAsync(ids);
}
#endregion
#region NewChangeByHeydari

View File

@@ -1634,6 +1634,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
return op.Failed("قرارداد مالی قبلا تایید شده است");
if (!institutionContract.WorkshopGroup.IsInPersonContract)
{
return op.Failed("قرارداد مالی غیر حضوری نمی تواند به صورت دستی تایید شود");
}
var transaction = await _institutionContractRepository.BeginTransactionAsync();
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);

View File

@@ -2381,5 +2381,10 @@ public class InsuranceListApplication : IInsuranceListApplication
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
}
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
{
return await _insuranceListRepositpry.ClientPrintOne(id);
}
#endregion
}

View File

@@ -1,17 +1,25 @@
using System;
using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.HolidayItemAgg;
using Company.Domain.LeaveAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.RollCallServiceAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.HolidayItem;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.EFCore.Migrations;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text.RegularExpressions;
using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.LeaveAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using System.Threading.Tasks;
namespace CompanyManagment.Application;
@@ -23,9 +31,12 @@ public class LeaveApplication : ILeaveApplication
private readonly IRollCallRepository _rollCallRepository;
private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository;
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
private readonly IHolidayItemRepository _holidayItemRepository;
private readonly IRollCallServiceRepository _rollCallServiceRepository;
public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication)
public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IHolidayItemRepository holidayItemRepository, IRollCallServiceRepository rollCallServiceRepository)
{
_leaveRepository = leaveRepository;
_employeeRepository = employeeRepository;
@@ -33,6 +44,8 @@ public class LeaveApplication : ILeaveApplication
_rollCallRepository = rollCallRepository;
_employeeSettingsRepository = employeeSettingsRepository;
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
_holidayItemRepository = holidayItemRepository;
_rollCallServiceRepository = rollCallServiceRepository;
}
public OperationResult Create(CreateLeave command)
@@ -237,7 +250,7 @@ public class LeaveApplication : ILeaveApplication
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
var leave = new Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
, command.PaidLeaveType, command.LeaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
year, month, shiftDuration, hasShiftDuration,command.IsInvallid);
_leaveRepository.Create(leave);
@@ -509,7 +522,12 @@ public class LeaveApplication : ILeaveApplication
public OperationResult RemoveLeave(long id)
{
return _leaveRepository.RemoveLeave(id);
return _leaveRepository.RemoveLeave(id).GetAwaiter().GetResult();
}
public async Task<OperationResult> RemoveLeaveAsync(long id)
{
return await _leaveRepository.RemoveLeave(id);
}
public LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId)
@@ -590,11 +608,435 @@ public class LeaveApplication : ILeaveApplication
return leaveTotalTimeSpan;
}
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
{
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
return timeSpanHourlyLeave + dailyLeaveCount;
}
#endregion
#endregion
#region ForApi
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
{
return await _leaveRepository.GetList(searchModel);
}
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
{
return await _leaveRepository.GetGroupList(searchModel);
}
public TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr, LeaveType leaveType)
{
var startFa = $"{yearStr}/{monthStr:00}/01";
var endFa = startFa.FindeEndOfMonth();
if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false)
return TimeSpan.Zero;
var leaveTotalTimeSpan = TimeSpan.Zero;
var leaves = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, start, end);
//var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
//var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
if (leaveType == LeaveType.PaidLeave)
{
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استحقاقی")
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استحقاقی")
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
}
else if (leaveType == LeaveType.SickLeave)
{
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استعلاجی")
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استعلاجی")
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
}
else
{
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی").Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه").Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
}
return leaveTotalTimeSpan;
}
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids,long workshopId)
{
return await _leaveRepository.PrintAllAsync(ids,workshopId);
}
public async Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId)
{
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
}
public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId)
{
var op = new OperationResult<CheckIsInvalidLeaveDto>();
var result = new CheckIsInvalidLeaveDto();
if (startLeaveDate.TryToGeorgianDateTime(out var startLeaveDateGr) == false)
{
return op.Failed("تاریخ وارد شده صحیح نیست");
}
if (startLeaveDateGr.DayOfWeek == DayOfWeek.Friday || _holidayItemRepository.GetHoliday(startLeaveDateGr))
{
result.IsHoliday = true;
}
if (result.IsHoliday)
{
var rollCallService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(workshopId);
if (rollCallService != null)
{
result.CanCreateInvalid = rollCallService.HasCustomizeCheckoutService == "true";
}
}
return op.Succcedded(result);
}
public async Task<OperationResult> CreateLeave(CreateLeaveDto command)
{
TimeSpan shiftDuration = TimeSpan.Zero;
bool hasShiftDuration = false;
var startH = new TimeSpan();
var endH = new TimeSpan();
var op = new OperationResult();
if ((command.PaidLeaveType == PaidLeaveType.Daily && command.LeaveType == LeaveType.PaidLeave) || command.LeaveType == LeaveType.SickLeave)
{
if (string.IsNullOrWhiteSpace(command.StartLeave))
{
return op.Failed("لطفا تاریخ شروع را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.EndLeave))
{
return op.Failed("لطفا تاریخ پایان را وارد کنید");
}
}
else if (command.PaidLeaveType == PaidLeaveType.Hourly)
{
if (string.IsNullOrWhiteSpace(command.StartLeave))
return op.Failed("لطفا تاریخ شروع را وارد کنید");
if (string.IsNullOrWhiteSpace(command.StartHoures) || string.IsNullOrWhiteSpace(command.EndHours))
return op.Failed("ساعت شروع و پایان نمیتواند خالی باشد");
string pattern = @"^([01]\d|2[0-3]):[0-5]\d$";
if (!Regex.IsMatch(command.StartHoures, pattern))
return op.Failed("لطفا ساعت شروع را به درستی وارد کنید");
if (!Regex.IsMatch(command.EndHours, pattern))
return op.Failed("لطفا ساعت پایان را به درستی وارد کنید");
startH = TimeSpan.Parse(command.StartHoures);
endH = TimeSpan.Parse(command.EndHours);
if (startH == endH)
return op.Failed("ساعت شروع و پایان نباید برابر باشد");
}
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.StartLeave))
// return op.Failed("لطفا تاریخ شروع را وارد کنید");
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.EndLeave))
// return op.Failed("لطفا تاریخ پایان را وارد کنید");
if (command.StartLeave.TryToGeorgianDateTime(out var start) == false)
{
return op.Failed("تاریخ شروع صحیح نیست");
}
var end = new DateTime();
if (command.PaidLeaveType == PaidLeaveType.Daily)
{
if (command.EndLeave.TryToGeorgianDateTime(out end) == false)
{
return op.Failed("تاریخ پایان صحیح نیست");
}
}
end = start;
var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId, command.IsInvallid);
if (checkErr.HasChekout)
return op.Failed(checkErr.CheckoutErrMessage);
if (checkErr.HasNotContract)
return op.Failed(checkErr.ContractErrMessage);
if (checkErr.HasLeftWork)
return op.Failed(checkErr.LeftWorlErrMessage);
if (start > end)
return op.Failed("تارخ شروع از پایان بزرگتر است");
var totalhourses = "-";
if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Hourly)
{
start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds);
end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds);
if (start > end)
end = end.AddDays(1);
var totalLeavHourses = (end - start);
var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}";
var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}";
totalhourses = $"{h}:{m}";
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end;
if (_leaveRepository.Exists(x =>
(x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
}
else if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Daily)
{
var totalLeavHourses = (end - start).TotalDays + 1;
totalhourses = $"{(int)totalLeavHourses}";
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
if (_leaveRepository.Exists(x =>
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(command.WorkshopId, command.EmployeeId);
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(command.EmployeeId, command.WorkshopId, start, end);
var hasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
if (hasRollCall)
{
if ((end - start).TotalDays > 1 && employeeSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular)
{
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
}
if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating &&
command.SelectedShift == null)
{
return op.Failed("لطفا شیفت پرسنل را انتخاب کنید");
}
if (command.SelectedShift != null)
{
var validShiftStart = TimeOnly.TryParse(command.SelectedShift.StartTime, out var shiftStart);
var validShiftEnd = TimeOnly.TryParse(command.SelectedShift.EndTime, out var shiftEnd);
if (validShiftStart == false && validShiftEnd == false)
{
return op.Failed("شیفت های انتخاب شده معتبر نمیباشد");
}
var shiftStartDateTime = new DateTime(new DateOnly(), shiftStart);
var shiftEndDateTime = new DateTime(new DateOnly(), shiftEnd);
if (shiftEndDateTime <= shiftStartDateTime)
shiftEndDateTime = shiftEndDateTime.AddDays(1);
shiftDuration = shiftEndDateTime - shiftStartDateTime;
hasShiftDuration = true;
}
else if (employeeSettings is { WorkshopShiftStatus: WorkshopShiftStatus.Irregular })
{
if ((end - start).TotalDays > 1)
{
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
}
if (isActive)
{
shiftDuration = employeeSettings.IrregularShift.WorkshopIrregularShifts switch
{
WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(12),
WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(12),
WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(24),
WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(24),
_ => new TimeSpan()
};
hasShiftDuration = true;
}
}
}
}
if (command.LeaveType == LeaveType.SickLeave)
{
var totalLeavHourses = (end - start).TotalDays + 1;
totalhourses = $"{(int)totalLeavHourses}";
command.PaidLeaveType = PaidLeaveType.Daily;
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
if (_leaveRepository.Exists(x =>
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
}
var year = Convert.ToInt32(command.StartLeave.Substring(0, 4));
var month = Convert.ToInt32(command.StartLeave.Substring(5, 2));
var paidLeaveType = command.PaidLeaveType == PaidLeaveType.Daily ? "روزانه" : "ساعتی";
var leaveType = command.LeaveType == LeaveType.PaidLeave ? "استحقاقی" : "استعلاجی";
var validation = ValidateNewLeaveWithExistingRollCalls(command.WorkshopId, command.EmployeeId, paidLeaveType, start, end);
if (validation.IsSuccedded == false)
return validation;
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
, paidLeaveType, leaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
year, month, shiftDuration, hasShiftDuration, command.IsInvallid);
await _leaveRepository.CreateAsync(leave);
await _leaveRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId,long employeeId, string startLeaveDate)
{
var op = new OperationResult<RotatingShiftDto>();
var result = new RotatingShiftDto();
if (startLeaveDate.TryToGeorgianDateTime(out var startDateTimeGr) == false)
{
return op.Failed("تاریخ شروع صحیح نیست");
}
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId);
//اگر گروه بندی نداشت
if (employeeSettings == null)
{
return op.Succcedded(result);
}
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(employeeId, workshopId, startDateTimeGr, startDateTimeGr);
result.HasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
result.RotatingShifts = employeeSettings.CustomizeRotatingShifts.Select(x =>
new CustomizeRotatingShiftsViewModel()
{
EndTime = x.EndTime.ToString("HH:mm"),
StartTime = x.StartTime.ToString("HH:mm")
}).ToList();
return op.Succcedded(result);
}
#endregion
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
{
return await _leaveRepository.ListPrint(ids);
}
public async Task<string> GetHourlyLeaveDuration(string startHours, string endHours)
{
if (string.IsNullOrWhiteSpace(startHours) || string.IsNullOrWhiteSpace(endHours))
return "";
var start = new DateTime();
var end = new DateTime();
try
{
start = Convert.ToDateTime(startHours);
end = Convert.ToDateTime(endHours);
}
catch (Exception)
{
return "";
}
if (start > end || start == end)
{
end = end.AddDays(1);
}
var HourlyDate = (end - start);
var hours = (int)HourlyDate.TotalHours;
var minutes = HourlyDate.TotalMinutes % 60;
if (hours > 0 && minutes > 0)
{
return (hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه");
}
else if (hours > 0 && minutes == 0)
{
return (hours + " " + "ساعت ");
}
else if (hours == 0 && minutes > 0)
{
return (minutes + " " + "دقیقه");
}
return ($"{hours}");
}
public async Task<string> GetDailyLeaveDuration(string startDate, string endDate)
{
if (string.IsNullOrWhiteSpace(startDate) || string.IsNullOrWhiteSpace(endDate))
return "";
if (startDate.TryToGeorgianDateTime(out var start) == false || endDate.TryToGeorgianDateTime(out var end) == false)
return "";
if (end >= start)
{
var daysSpan = (end - start).TotalDays + 1;
return $"{(int)daysSpan} روز";
}
else
{
return "تاریخ پایان از تاریخ شروع کوچکتر است.";
}
}
}

View File

@@ -5,6 +5,8 @@ using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Exceptions;
using _0_Framework.InfraStructure;
using Company.Domain.ContractAgg;
using Company.Domain.empolyerAgg;
@@ -1081,30 +1083,7 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
var weeklyDouble = 0.0;
var weekly = c.WorkingHoursWeekly;
if (!string.IsNullOrWhiteSpace(weekly) &&
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
{
if (weekly.Contains("/"))
{
weeklyDouble = double.Parse(weekly);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else if (weekly.Contains("."))
{
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else
{
c.WorkingHoursWeekly = c.WorkingHoursWeekly + " " + "ساعت";
}
}
c.WorkingHoursWeekly = WeeklyHourConvertor(weekly);
var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds)
.Select(x => x.EmployerId).ToList();
c.Employers = _employerRepository.GetEmployers(emp);
@@ -1161,6 +1140,37 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
return query;
}
private static string WeeklyHourConvertor(string weekly)
{
double weeklyDouble;
if (!string.IsNullOrWhiteSpace(weekly) &&
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
{
if (weekly.Contains("/"))
{
weeklyDouble = double.Parse(weekly);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else if (weekly.Contains("."))
{
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else
{
return weekly + " " + "ساعت";
}
}
return "";
}
public IQueryable<WorkshopEmployerViewModel> GetWorkshopEmployer()
{
return _context.WorkshopEmployers.Select(x => new WorkshopEmployerViewModel
@@ -1506,6 +1516,195 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
}
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
{
var workshopId = _authHelper.GetWorkshopId();
var query = _context.Contracts
.Where(c => c.WorkshopIds == workshopId);
#region Search
if (searchModel.EmployeeId > 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))
{
if (!searchModel.StartDate.TryToGeorgianDateTime(out var startDate))
throw new BadRequestException("تاریخ شروع وارد شده معتبر نمی باشد.");
if (!searchModel.EndDate.TryToGeorgianDateTime(out var endDate))
throw new BadRequestException("تاریخ پایان وارد شده معتبر نمی باشد.");
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
}
if (searchModel.Year>0 && searchModel.Month >0)
{
var startDateFa = $"{searchModel.Year:0000}/{searchModel.Month:00}/01";
if (!startDateFa.TryToGeorgianDateTime(out var startDate))
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
if(!startDateFa.FindeEndOfMonth().TryToGeorgianDateTime(out var endDate))
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
}
if (searchModel.OrderType != null)
{
switch (searchModel.OrderType)
{
case ContractListOrderType.ByContractCreationDate:
query = query.OrderBy(x => x.CreationDate);
break;
case ContractListOrderType.ByContractStartDate:
query = query.OrderBy(x => x.ContarctStart);
break;
case ContractListOrderType.ByContractStartDateDescending:
query = query.OrderByDescending(x=>x.ContarctStart);
break;
case ContractListOrderType.ByPersonnelCode:
query = query.OrderBy(x => x.PersonnelCode);
break;
case ContractListOrderType.ByPersonnelCodeDescending:
query = query.OrderByDescending(x => x.PersonnelCode);
break;
case ContractListOrderType.BySignedContract:
query = query.OrderByDescending(x => x.Signature == "1");
break;
case ContractListOrderType.ByUnSignedContract:
query = query.OrderBy(x => x.Signature == "1");
break;
}
}
else
{
query = query.OrderByDescending(x => x.id);
}
#endregion
var pagedList =await query
.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var employeeIds = pagedList.Select(x => x.EmployeeId).ToList();
var employees = await _context.Employees
.Where(x => employeeIds.Contains(x.id)).Select(x => new
{
Id = x.id,
x.FullName
}).ToListAsync();
var result = new PagedResult<GetContractListForClientResponse>
{
TotalCount = await query.CountAsync(),
List = pagedList.Select(c =>
{
var employeeFullName = employees
.FirstOrDefault(e => e.Id == c.EmployeeId)?.FullName ?? "";
return new GetContractListForClientResponse
{
Id = c.id,
PersonnelCode = c.PersonnelCode.ToString(),
ContractStart = c.ContarctStart.ToFarsi(),
ContractEnd = c.ContractEnd.ToFarsi(),
ContractNo = c.ContractNo,
IsSigned = c.Signature == "1",
EmployeeFullName = employeeFullName,
AvgWorkingHour = WeeklyHourConvertor(c.WorkingHoursWeekly),
DailyWage = c.DayliWage,
FamilyAllowance = c.FamilyAllowance
};
}).ToList()
};
return result;
}
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
{
var query =await _context.Contracts.Include(x => x.Employer)
.Include(x => x.Employee).Where(x => ids.Contains(x.id))
.ToListAsync();
var workshopIds = query.Select(x => x.WorkshopIds).Distinct().ToList();
var workshops = await _context.Workshops
.Where(x => workshopIds.Contains(x.id))
.ToListAsync();
List<long> exceptionWorkshops = [516,63,38,39];
var res = query.Select(x =>
{
var workshop = workshops.FirstOrDefault(w => w.id == x.WorkshopIds);
var employerRes = new ContractPrintEmployerViewModel()
{
WorkshopName = workshop!.WorkshopName,
Address =$"{workshop.State} - {workshop.City} - {workshop.Address}",
LegalType = x.Employer.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal,
LegalEmployer = x.Employer.IsLegal == "حقیقی"
? null
: new ContractPrintLegalEmployerViewModel()
{
NationalId = x.Employer.NationalId,
RegisterId = x.Employer.RegisterId,
CompanyName = x.Employer.LName,
},
RealEmployer = x.Employer.IsLegal == "حقیقی"
? new ContractPrintRealEmployerViewModel()
{
FullName = x.Employer.FullName,
IdNumber = x.Employer.IdNumber,
NationalCode = x.Employer.Nationalcode
}
: null,
WorkshopCode = workshop.InsuranceCode
};
var employeeRes = new ContractPrintEmployeeViewModel()
{
Address =$"{x.Employee.State} - {x.Employee.City} - {x.Employee.Address}" ,
FullName = x.Employee.FullName,
IdNumber = x.Employee.IdNumber,
NationalCode = x.Employee.NationalCode,
DateOfBirth = x.Employee.DateOfBirth.ToFarsi(),
FatherName = x.Employee.FatherName,
LevelOfEducation = x.Employee.LevelOfEducation
};
var typeOfContract = new ContractPrintTypeOfContractViewModel()
{
ContarctStart = x.ContarctStart.ToFarsi(),
ContractEnd = x.ContractEnd.ToFarsi(),
JobName = x.JobType,
ContractType = x.ContractType,
SetContractDate = x.SetContractDate.ToFarsi(),
WorkingHoursWeekly = WeeklyHourConvertor(x.WorkingHoursWeekly),
WorkshopAddress = [x.WorkshopAddress1, x.WorkshopAddress2],
};
ContractPrintFeesViewModel fees= new ContractPrintFeesViewModel()
{
DailyWage = x.DayliWage,
FamilyAllowance = x.FamilyAllowance,
HousingAllowance = x.HousingAllowance,
ConsumableItems = x.ConsumableItems,
};
return new ContractPrintViewModel()
{
Employer = employerRes,
Employee = employeeRes,
TypeOfContract = typeOfContract,
Fees = fees,
ContractNo = x.ContractNo,
ConditionAndDetials = exceptionWorkshops.Contains(x.WorkshopIds) ? "بر اساس ماده 190 قانون کار جمهوری اسلامی ایران ، پرسنل اقرار مینماید کلیه مبالغ پیش بینی شده در قانون کار را وفق قرارداد منعقده دریافت مینماید. این مبالغ قسمتی بصورت مستقیم از سوی کارفرما و قسمتی بر اساس شرایط کارگاه از محل درآمد حاصله از مشتری اخذ میگردد . با توجه به شرایط کارگاه کلیه مبالغ بصورت واریز به حساب و وجه نقد رایج کشور ، تواما به پرسنل پرداخت میگردد. امضا تصفیه حساب دارای مبالغ ، توسط پرسنل نشانگر تصفیه قطعی ایشان میباشد.": "",
};
}).ToList();
return res;
}
#endregion
#region NewChangeByHeydari

View File

@@ -176,18 +176,20 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
{
checkout.SetUpdateNeeded();
if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare))
if (!_context.CheckoutWarningMessages.Any(x =>
x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning ==
TypeOfCheckoutWarning.InsuranceEmployeeShare))
{
var createWarrning =
new CheckoutWarningMessage(
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد",
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
_context.CheckoutWarningMessages.Add(createWarrning);
}
_context.SaveChanges();
}
}
}
}
@@ -729,7 +731,7 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
var id = insuranceListObj.id;
if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0)
{
var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month);
var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month);
var checkouts = _context.CheckoutSet.Where(x =>
x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName &&
@@ -759,16 +761,15 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
{
var createWarrning =
new CheckoutWarningMessage(
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد",
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
_context.CheckoutWarningMessages.Add(createWarrning);
}
_context.SaveChanges();
}
}
}
}
_employeeInsurancListDataRepository.SaveChanges();
@@ -1777,46 +1778,76 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
return res;
}
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(InsuranceClientSearchModel searchModel)
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(
InsuranceClientSearchModel searchModel)
{
var workshopId = _authHelper.GetWorkshopId();
var query = _context.InsuranceListSet
.Select(x => new InsuranceClientListViewModel
{
Id = x.id,
WorkShopId = x.WorkshopId,
Year = x.Year,
YearInt = Convert.ToInt32(x.Year),
Month = x.Month,
MonthName = x.Month.ToFarsiMonthByNumber(),
MonthInt = Convert.ToInt32(x.Month),
}).Where(x => x.WorkShopId == workshopId);
.Where(x => x.WorkshopId == workshopId);
if (searchModel.Year>0)
if (searchModel.Year > 0)
{
query = query.Where(x => x.YearInt == searchModel.Year);
}
query = query.Where(x => x.Year == searchModel.Year.ToString("0000"));
}
if (searchModel.Month > 0)
{
query = query.Where(x => x.MonthInt == searchModel.Month);
query = query.Where(x => x.Month == searchModel.Month.ToString("00"));
}
var res = new PagedResult<InsuranceClientListViewModel>
{
TotalCount = query.Count()
};
var list = (await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync());
var insuranceListIds = list.Select(x => x.id).ToList();
var employeeData = await _context.EmployeeInsurancListDataSet
.Where(x => insuranceListIds.Contains(x.InsuranceListId))
.GroupBy(x => x.InsuranceListId)
.Select(g => new
{
g.Key,
Count = g.Count(x=>x.LeftWorkDate != null)
}).ToListAsync();
query = searchModel.Sorting switch
{
"CreationDate-Max" => query.OrderByDescending(x => x.Id),
"CreationDate-Min" => query.OrderBy(x => x.Id),
"Month-Max" => query.OrderByDescending(x => x.MonthInt),
"Month-Min" => query.OrderBy(x => x.MonthInt),
"Year-Max" => query.OrderByDescending(x => x.YearInt),
"Year-Min" => query.OrderBy(x => x.YearInt),
_ => query.OrderByDescending(x => x.Id),
"CreationDate-Max" => query.OrderByDescending(x => x.id),
"CreationDate-Min" => query.OrderBy(x => x.id),
"Month-Max" => query.OrderByDescending(x => x.Month),
"Month-Min" => query.OrderBy(x => x.Month),
"Year-Max" => query.OrderByDescending(x => x.Year),
"Year-Min" => query.OrderBy(x => x.Year),
_ => query.OrderByDescending(x => x.id),
};
res.List =await query.ApplyPagination(searchModel.PageIndex,searchModel.PageSize).ToListAsync();
var resList = list
.Select(x => new InsuranceClientListViewModel
{
Id = x.id,
WorkShopId = x.WorkshopId,
Year = x.Year,
YearInt = Convert.ToInt32(x.Year),
Month = x.Month,
MonthName = x.Month.ToFarsiMonthByNumber(),
MonthInt = Convert.ToInt32(x.Month),
EmployerShare = x.EmployerShare.ToMoney(),
InsuredShare = x.InsuredShare.ToMoney(),
UnEmploymentInsurance = x.UnEmploymentInsurance.ToMoney(),
PersonnelCount = x.SumOfEmployees,
AllInsuredShare = (x.InsuredShare +
x.EmployerShare +
x.UnEmploymentInsurance).ToMoney(),
LeftWorkCount =employeeData.FirstOrDefault(e=>e.Key == x.id)?.Count ?? 0,
}).ToList();
res.List = resList;
return res;
}
@@ -1882,10 +1913,10 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
query = query.Where(x => x.Month == searchModel.Month).OrderByDescending(x => x.WorkShopName)
.ThenByDescending(x => x.EmployerName).ThenByDescending(x => x.Year);
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
if (!string.IsNullOrEmpty(searchModel.WorkShopCode))
query = query.Where(x => x.WorkShopCode == searchModel.WorkShopCode).OrderByDescending(x => x.Year)
@@ -1965,6 +1996,77 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
return res;
}
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
{
var insurance = await _context.InsuranceListSet.FirstOrDefaultAsync(x => x.id == id);
if (insurance == null)
return null;
var employeeInsurance = _context.EmployeeInsurancListDataSet
.Where(x => x.InsuranceListId == insurance.id);
var workshop = await _context.Workshops
.Include(x => x.InsuranceWorkshopInfo)
.FirstOrDefaultAsync(x => x.id == insurance.WorkshopId);
var employeeIds = await employeeInsurance
.Select(x => x.EmployeeId).ToListAsync();
var employees = await _context.Employees
.Where(x => employeeIds.Contains(x.id)).ToListAsync();
var jobIds = employeeInsurance.Select(x => x.JobId).ToList();
var jobs = await _context.Jobs
.Where(x => jobIds.Contains(x.id)).ToDictionaryAsync(x => x.id, x => x.JobName);
var employeeData = employeeInsurance.ToList().Select(x =>
{
var employee = employees.FirstOrDefault(e => e.id == x.EmployeeId);
return new InsuranceClientPrintItemsViewModel()
{
BaseYears = x.BaseYears.ToMoney(),
BenefitsIncludedContinuous = x.BenefitsIncludedContinuous.ToMoney(),
BenefitsIncludedNonContinuous = x.BenefitsIncludedNonContinuous.ToMoney(),
DailyWage = x.DailyWage.ToMoney(),
IncludedAndNotIncluded = (x.BenefitsIncludedNonContinuous + x.BenefitsIncludedContinuous).ToMoney(),
WorkingDays = x.WorkingDays.ToString(),
MarriedAllowance = x.MarriedAllowance.ToMoney(),
StartWork = x.StartWorkDate.ToFarsi(),
LeftWork = x.LeftWorkDate.ToFarsi(),
MonthlyBenefits = x.MonthlyBenefits.ToMoney(),
MonthlySalary = x.MonthlySalary.ToMoney(),
NationalCode = employee.NationalCode,
InsuranceCode = employee.InsuranceCode,
JobName = jobs.GetValueOrDefault(x.JobId, ""),
FullName = employee.FullName,
InsuranceShare = x.InsuranceShare.ToMoney(),
};
}).ToList();
var result = new InsuranceClientPrintViewModel()
{
Items = employeeData.ToList(),
AllInsuredShare = (insurance.InsuredShare +
insurance.EmployerShare +
insurance.UnEmploymentInsurance).ToMoney(),
EmployerShare = insurance.EmployerShare.ToMoney(),
InsuredShare = insurance.InsuredShare.ToMoney(),
UnEmploymentInsurance = insurance.UnEmploymentInsurance.ToMoney(),
WorkshopName = workshop.InsuranceWorkshopInfo.WorkshopName,
WorkshopAddress = workshop.InsuranceWorkshopInfo.Address,
WorkshopEmployerName = workshop.InsuranceWorkshopInfo.EmployerName,
WorkshopInsuranceCode = workshop.InsuranceWorkshopInfo.InsuranceCode,
AgreementNumber = workshop.InsuranceWorkshopInfo.AgreementNumber,
ListNo = "01",
Month = insurance.Month,
Year = insurance.Year
};
return result;
}
/// <summary>
///
/// </summary>

View File

@@ -1,12 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.LeaveAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Leave;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CompanyManagment.EFCore.Repository;
@@ -17,6 +19,7 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
public LeaveRepository(CompanyContext context) : base(context)
{
_context = context;
}
public EditLeave GetDetails(long id)
@@ -290,6 +293,65 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
return query;
}
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId)
{
var leaves =await _context
.LeaveList.Where(x => ids.Contains(x.id) && x.WorkshopId == workshopId).ToListAsync();
var minLeave = leaves.Min(x => x.StartLeave);
var maxLeave = leaves.Max(x => x.EndLeave);
var employeeIds = leaves.Select(x => x.EmployeeId).Distinct().ToList();
var contracts = await _context.Contracts
.Where(x => x.WorkshopIds == workshopId && employeeIds.Contains(x.EmployeeId)
&& x.ContarctStart<= maxLeave && x.ContractEnd>= minLeave)
.ToListAsync();
var employees = await _context
.Employees.Where(x=> employeeIds.Contains(x.id)).ToListAsync();
var employerNames = _context.WorkshopEmployers.Include(x=>x.Employer)
.Where(x=>x.WorkshopId == workshopId).Select(x=>x.Employer.FName+" "+x.Employer.LName).ToList();
var workshopName = _context.Workshops.FirstOrDefault(x => x.id == workshopId)?.WorkshopName;
var res = leaves.Select(leave =>
{
var employee = employees.FirstOrDefault(x => x.id == leave.EmployeeId);
return new LeavePrintResponseViewModel
{
FullName = employee?.FName + " " +
employee?.LName,
NationalCode = employee?.NationalCode,
WorkshopName = workshopName,
EmployerNames = employerNames,
PaidLeaveType = leave.PaidLeaveType,
ContractNo = contracts.FirstOrDefault(x =>
x.EmployeeId == leave.EmployeeId &&
x.ContarctStart <= leave.StartLeave &&
x.ContractEnd >= leave.EndLeave)?.ContractNo,
DailyLeave = leave.PaidLeaveType == "روزانه" ? new LeavePrintDailyResponseViewModel
{
StartLeave = leave.StartLeave.ToFarsi(),
EndLeave = leave.EndLeave.ToFarsi(),
TotalDay = leave.LeaveHourses
} : null,
HourlyLeave = leave.PaidLeaveType == "ساعتی" ?
new LeavePrintHourlyResponseViewModel
{
LeaveDate = leave.StartLeave.ToFarsi(),
StartHour = leave.StartLeave.ToString("HH:mm"),
EndHour = leave.EndLeave.ToString("HH:mm"),
TotalHour = TimeSpan.Parse(leave.LeaveHourses)
.TotalHours.ToString("F0")
} : null
};
}).ToList();
return res;
}
#region Vafa
public List<LeaveViewModel> LastLeaveMain(LeaveSearchModel searchModel)
@@ -371,15 +433,17 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
}
}
public OperationResult RemoveLeave(long id)
public async Task<OperationResult> RemoveLeave(long id)
{
var op = new OperationResult();
var item = _context.LeaveList.FirstOrDefault(x => x.id == id);
if (item != null)
{
var checkoutExist = _context.CheckoutSet
var checkoutExist =await _context.CheckoutSet
.Where(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId)
.Where(x => item.StartLeave <= x.ContractEnd).ToList();
.Where(x => item.StartLeave <= x.ContractEnd).ToListAsync();
if (checkoutExist.Count > 0)
{
return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد");
@@ -536,4 +600,250 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
(starContract >= x.StartLeaveGr && starContract <= x.EndLeaveGr) ||
(endContract >= x.StartLeaveGr && endContract <= x.EndLeaveGr));
}
#region ForApi
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
{
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId);
if (searchModel.EmployeeId != 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
if (searchModel.LeaveType == LeaveType.PaidLeave)
query = query.Where(x => x.LeaveType == "استحقاقی");
if (searchModel.LeaveType == LeaveType.SickLeave)
query = query.Where(x => x.LeaveType == "استعلاجی");
if (searchModel.IsInvalid)
{
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
}
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
{
var start = new DateTime();
var end = new DateTime();
try
{
start = searchModel.StartLeave.ToGeorgianDateTime();
end = searchModel.EndLeave.ToGeorgianDateTime();
}
catch (Exception e)
{
return new PagedResult<leaveListDto>();
}
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
}
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
{
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
{
try
{
int year = Convert.ToInt32(searchModel.YearStr);
query = query.Where(x => x.Year == year);
}
catch (Exception)
{
return new PagedResult<leaveListDto>();
}
}
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
{
try
{
int month = Convert.ToInt32(searchModel.MonthStr);
query = query.Where(x => x.Month == month);
}
catch (Exception)
{
return new PagedResult<leaveListDto>();
}
}
}
var count = await query.CountAsync();
query = query.OrderByDescending(x => x.CreationDate);
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
{
Id = item.id,
EmployeeFullName = item.EmployeeFullName,
YearStr = $"{item.Year}",
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
IsInvalid = item.IsInvalid,
LeaveType = item.LeaveType,
StartLeave = item.StartLeave.ToFarsi(),
EndLeave = item.EndLeave.ToFarsi(),
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
IsAccepted = item.IsAccepted,
WorkshopId = item.WorkshopId,
EmployeeId = item.EmployeeId,
}).ToList();
return new PagedResult<leaveListDto>()
{
TotalCount = count,
List = leaveResult
};
}
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
{
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId);
if (searchModel.LeaveType == LeaveType.PaidLeave)
query = query.Where(x => x.LeaveType == "استحقاقی");
if (searchModel.LeaveType == LeaveType.SickLeave)
query = query.Where(x => x.LeaveType == "استعلاجی");
if (searchModel.IsInvalid)
{
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
}
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
{
var start = new DateTime();
var end = new DateTime();
try
{
start = searchModel.StartLeave.ToGeorgianDateTime();
end = searchModel.EndLeave.ToGeorgianDateTime();
}
catch (Exception e)
{
return new List<GroupLeaveListDto>();
}
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
}
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
{
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
{
try
{
int year = Convert.ToInt32(searchModel.YearStr);
query = query.Where(x => x.Year == year);
}
catch (Exception)
{
return new List<GroupLeaveListDto>();
}
}
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
{
try
{
int month = Convert.ToInt32(searchModel.MonthStr);
query = query.Where(x => x.Month == month);
}
catch (Exception)
{
return new List<GroupLeaveListDto>();
}
}
}
var leaveList = await query.GroupBy(x => new { x.Year, x.Month })
.OrderByDescending(group => group.Key.Year)
.ThenByDescending(group => group.Key.Month)
.Select(group => new GroupLeaveListDto
{
YearStr = $"{group.Key.Year}",
MonthStr = group.Key.Month.ToFarsiMonthByIntNumber(),
LeaveListItemsDto = group.OrderByDescending(x=>x.StartLeave).Select(item => new LeaveListItemsDto
{
Id = item.id,
IsInvalid = item.IsInvalid,
LeaveType = item.LeaveType,
StartLeave = item.StartLeave.ToFarsi(),
EndLeave = item.EndLeave.ToFarsi(),
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
IsAccepted = item.IsAccepted,
WorkshopId = item.WorkshopId,
EmployeeId = item.EmployeeId,
}).ToList()
}).ToListAsync();
return leaveList;
}
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
{
var result = new LeaveListPrintDto();
var timeSpanHourlyLeave = new TimeSpan();
var dailyLeaveTime = new TimeSpan();
if (ids.Any())
{
var query = _context.LeaveList.Where(x => ids.Contains(x.id)).OrderByDescending(x=>x.StartLeave).AsQueryable();
#region sumOfLeaves
var hourly = await query.Where(x => x.PaidLeaveType == "ساعتی").Select(x => x.LeaveHourses).ToListAsync();
var daily = await query.Where(x => x.PaidLeaveType == "روزانه").Select(x => x.LeaveHourses).ToListAsync();
if (hourly.Any())
timeSpanHourlyLeave = new TimeSpan(hourly.Sum(x => TimeOnly.Parse(x).Ticks));
if (daily.Any())
dailyLeaveTime = daily.Sum(x => Convert.ToInt32(x)) * TimeSpan.FromDays(1);
var sumOfLeaves = timeSpanHourlyLeave.Add(dailyLeaveTime);
result.SumOfEmployeeleaves = sumOfLeaves.ToFarsiDaysAndHoursAndMinutes();
#endregion
result.LeavePrintListItemsDto = await query.Select(item => new LeavePrintListItemsDto
{
YearStr = $"{item.Year}",
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
StartLeave = item.StartLeave.ToFarsi(),
EndLeave = item.EndLeave.ToFarsi(),
LeaveType = item.LeaveType,
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
IsAccepted = item.IsAccepted,
}).ToListAsync();
result.EmployeeFullName = query.FirstOrDefault()!.EmployeeFullName;
}
return result;
}
#endregion
}

View File

@@ -0,0 +1,39 @@
using _0_Framework.Application;
using Company.Domain.ContractAgg;
using CompanyManagment.App.Contracts.Contract;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Client.Controllers;
public class ContractController:ClientBaseController
{
private readonly IContractApplication _contractApplication;
public ContractController(IContractApplication contractApplication)
{
_contractApplication = contractApplication;
}
[HttpGet]
public async Task<ActionResult<PagedResult<GetContractListForClientResponse>>> GetList(
GetContractListForClientRequest searchModel)
{
var res = await _contractApplication
.GetContractListForClient(searchModel);
return res;
}
[HttpGet("print/{id}")]
public async Task<ActionResult<ContractPrintViewModel>> PrintOne(long id)
{
var res = await _contractApplication.PrintOneAsync(id);
return res;
}
[HttpGet("print")]
public async Task<ActionResult<List<ContractPrintViewModel>>> PrintAll([FromQuery] List<long> ids)
{
var res = await _contractApplication.PrintAllAsync(ids);
return res;
}
}

View File

@@ -19,4 +19,15 @@ public class InsuranceController:ClientBaseController
var insurances =await _insuranceListApplication.GetInsuranceClientList(searchModel);
return Ok(insurances);
}
[HttpGet("print-one")]
public async Task<ActionResult<InsuranceClientPrintViewModel>> ClientPrintList(long id)
{
InsuranceClientPrintViewModel res = await _insuranceListApplication.ClientPrintOne(id);
return res;
}
}
public class InsuranceClientViewModel
{
}

View File

@@ -0,0 +1,172 @@
using _0_Framework.Application;
using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Leave;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
using System.Security.Cryptography;
namespace ServiceHost.Areas.Client.Controllers;
public class LeaveController : ClientBaseController
{
private readonly ILeaveApplication _leaveApplication;
private long _workshopId;
public LeaveController(ILeaveApplication leaveApplication, IAuthHelper authHelper)
{
_leaveApplication = leaveApplication;
_workshopId = authHelper.GetWorkshopId();
}
/// <summary>
/// دریافت لیست مرخصی ها
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
[HttpGet("GetLeaveList")]
public async Task<ActionResult<LeaveListMultipleDto>> GetLeaveList(LeaveListSearchModel searchModel)
{
var result = new LeaveListMultipleDto();
searchModel.WorkshopId = _workshopId;
if (searchModel.EmployeeId > 0)
{
//لیست گروه بندی شده
result.GroupLeaveListDto = await _leaveApplication.GetGroupList(searchModel);
if (!string.IsNullOrWhiteSpace(searchModel.YearStr) && !string.IsNullOrWhiteSpace(searchModel.MonthStr))
{
TimeSpan timeSpan = _leaveApplication.SumOfEmployeeLeaveTimeSpanInDates(_workshopId, searchModel.EmployeeId, searchModel.YearStr, searchModel.MonthStr, searchModel.LeaveType);
//مجموع مرخصی پرسنل
result.SumOfEmployeeleaves = timeSpan.ToFarsiDaysAndHoursAndMinutes();
}
return Ok(result);
}
//لیست نرمال PageResult
result.leaveListDto = await _leaveApplication.GetList(searchModel);
return Ok(result);
}
///// <summary>
///// چک کردن تاریخ شروع مرخصی
///// </summary>
///// <param name="startLeaveDate"></param>
///// <returns></returns>
//[HttpGet("CheckIsInvalidLeave")]
//public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate)
//{
// return await _leaveApplication.CheckIsInvalidLeave(startLeaveDate, _workshopId);
//}
/// <summary>
/// ایجاد مرخصی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("CreateLeave")]
public async Task<ActionResult<OperationResult>> CreateLeave([FromBody] CreateLeaveDto command)
{
command.WorkshopId = _workshopId;
var result = await _leaveApplication.CreateLeave(command);
return result;
}
/// <summary>
/// دریافت شیفت گردشی اگر داشت
/// در مودال ایجاد
/// </summary>
/// <param name="startLeaveDate"></param>
/// <returns></returns>
[HttpGet("GetRotatingShift")]
public async Task<OperationResult<RotatingShiftDto>> GetRotatingShift(long employeeId, string startLeaveDate)
{
return await _leaveApplication.HasRotatingShift(_workshopId, employeeId, startLeaveDate);
}
/// <summary>
/// محاسبه مدت مرخصی ساعتی
/// در مودال ایجاد
/// </summary>
/// <param name="startHours"></param>
/// <param name="endHours"></param>
/// <returns></returns>
[HttpGet("GetHourlyLeaveDuration")]
public async Task<ActionResult<string>> GetHourlyLeaveDuration(string startHours, string endHours)
{
var result =await _leaveApplication.GetHourlyLeaveDuration(startHours, endHours);
return Ok(new { LeaveDuration = result });
}
/// <summary>
/// محاسبه مدت مرخصی روزانه
/// در مودال ایجاد
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
[HttpGet("GetDailyLeaveDuration")]
public async Task<ActionResult<string>> GetDailyLeaveDuration(string startDate, string endDate)
{
var result = await _leaveApplication.GetDailyLeaveDuration(startDate, endDate);
return Ok(new { LeaveDuration = result });
}
/// <summary>
/// پرینت تکی
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("print/{id}")]
public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
{
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
return leavePrint;
}
/// <summary>
/// پرینت گروهی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpGet("print")]
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids, LeaveListSearchModel searchModel)
{
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
return Ok(leavePrints);
}
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpGet("ListPrint")]
public async Task<ActionResult<LeaveListPrintDto>> ListPrint([FromQuery] List<long> ids)
{
var leavePrints = await _leaveApplication.ListPrint(ids);
return Ok(leavePrints);
}
/// <summary>
/// حذف مرخصی
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("RemoveLeave/{id}")]
public async Task<ActionResult<object>> RemoveLeaveAsync(long id)
{
var op =await _leaveApplication.RemoveLeaveAsync(id);
return Ok(new
{
isSuccedded = op.IsSuccedded,
message = op.Message,
});
}
}

View File

@@ -91,9 +91,9 @@
</span>
</a>
<ul class="submenu">
<li Permission="@SubAccountPermissionHelper.ContractListPermissionCode"><a class="selectLi" asp-page="/Company/Contracts/Index"><span>لیست قرارداد</span></a></li>
<li Permission="@SubAccountPermissionHelper.ContractListPermissionCode"><a class="selectLi" href="https://client@(AppSetting.Value.Domain)/contract-list"><span>لیست قرارداد</span></a></li>
<li Permission="@SubAccountPermissionHelper.CheckoutListPermissionCode"><a class="selectLi" asp-page="/Company/Checkouts/Index"><span>لیست فیش حقوقی</span></a></li>
<li Permission="@SubAccountPermissionHelper.InsuranceListPermissionCode"><a class="selectLi" asp-page="/Company/InsuranceList/Index"><span>لیست بیمه</span></a></li>
<li Permission="@SubAccountPermissionHelper.InsuranceListPermissionCode"><a class="selectLi" href="https://client@(AppSetting.Value.Domain)/insurance-list"><span>لیست بیمه</span></a></li>
<li Permission="@SubAccountPermissionHelper.PersonnelStatusIndividualReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Employees/Index", "ContractCheckoutStatus")');"*@><span>گزارش وضعیت انفرادی پرسنل</span></a></li>
<li Permission="@SubAccountPermissionHelper.PersonnelStatusGroupReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Workshop/Index", "ContractCheckoutYearlyStatus")');"*@><span>گزارش وضعیت گروهی پرسنل</span></a></li>
</ul>

View File

@@ -11,7 +11,7 @@
},
"ServiceHost": {
"commandName": "Project",
"launchBrowser": false,
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"