diff --git a/0_Framework/Application/Enums/Gender.cs b/0_Framework/Application/Enums/Gender.cs deleted file mode 100644 index 1b4077ca..00000000 --- a/0_Framework/Application/Enums/Gender.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace _0_Framework.Application.Enums; - -public enum Gender -{ - None, - Male, - Female -} \ No newline at end of file diff --git a/Company.Domain/empolyerAgg/IEmployerRepository.cs b/Company.Domain/empolyerAgg/IEmployerRepository.cs index 1c8dc4e7..26accc01 100644 --- a/Company.Domain/empolyerAgg/IEmployerRepository.cs +++ b/Company.Domain/empolyerAgg/IEmployerRepository.cs @@ -56,6 +56,16 @@ public interface IEmployerRepository : IRepository #endregion + #region Api + Task> GetEmployerList(GetEmployerSearchModel searchModel); + + Task GetLegalEmployerDetail(long id); + Task GetRealEmployerDetail(long id); + //Task> GetSelectList(string search); + Task> DeactivateWithSubordinates(long id); + + + #endregion } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/CreateLegalEmployer.cs b/CompanyManagment.App.Contracts/Employer/CreateLegalEmployer.cs new file mode 100644 index 00000000..a0224f7b --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/CreateLegalEmployer.cs @@ -0,0 +1,84 @@ +using System.ComponentModel.DataAnnotations; +using _0_Framework.Application; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// ایجاد کارفرمای حقیقی +/// +public class CreateLegalEmployer +{ + /// + /// آیدی طرف حساب + /// + [Required] + public long ContractingPartyId { get; set; } + + /// + /// نام شرکت + /// + public string CompanyName { get; set; } + + /// + /// شناسه ملی + /// + public string NationalId { get; set; } + + /// + /// شماره ثبت + /// + public string RegisterId { get; set; } + + /// + /// شماره تلفن همراه + /// + public string PhoneNumber { get; set; } + + /// + /// شماره تلفن ثابت + /// + public string TelephoneNumber { get; set; } + + /// + /// نام مدیر عامل + /// + public string EmployerFName { get; set; } + /// + /// نام خانوادگی مدیر عامل + /// + public string EmployerLName { get; set; } + /// + /// جنسیت مدیر عامل + /// + public Gender EmployerGender { get; set; } + /// + /// کد ملی مدیر عامل + /// + public string EmployerNationalCode { get; set; } + /// + /// شماره شناسنامه مدیر عامل + /// + public string EmployerIdNumber { get; set; } + /// + /// نام پدر مدیر عامل + /// + public string EmployerFatherName { get; set; } + /// + /// تاریخ تولد مدیر عامل + /// + public string EmployerDateOfBirth { get; set; } + /// + /// تاریخ صدور شناسنامه مدیر عامل + /// + public string EmployerDateOfIssue { get; set; } + /// + /// محل صدور شناسنامه مدیر عامل + /// + public string EmployerPlaceOfIssue { get; set; } + + /// + /// اطلاعات سامانه ای + /// + public GovernmentSystemInfo GovernmentSystemInfo { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/CreateRealEmployer.cs b/CompanyManagment.App.Contracts/Employer/CreateRealEmployer.cs new file mode 100644 index 00000000..998e6d75 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/CreateRealEmployer.cs @@ -0,0 +1,80 @@ +using System.ComponentModel.DataAnnotations; +using _0_Framework.Application; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// ایجاد کارفرما حقیقی +/// +public class CreateRealEmployer +{ + /// + /// آیدی طرف حساب + /// + [Required] + public long ContractingPartyId { get; set; } + + /// + /// جنسیت + /// + [Required] + public Gender Gender { get; set; } + + /// + /// نام + /// + [Required] + public string FName { get; set; } + + /// + ///نام خانوادگی + /// + [Required] + public string LName { get; set; } + + /// + /// کد ملی + /// + public string NationalCode { get; set; } + + /// + /// شماره شناسنامه + /// + public string IdNumber { get; set; } + + /// + /// شماره تلفن همراه + /// + public string PhoneNumber { get; set; } + + /// + /// شماره تلفن ثابت + /// + public string Telephone { get; set; } + + /// + /// تاریخ صدور شناسنامه + /// + public string DateOfIssue { get; set; } + + /// + /// محل صدور شناسنامه + /// + public string PlaceOfIssue { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + + /// + /// نام پدر + /// + public string FatherName { get; set; } + + /// + /// اطلاعات سامانه ای + /// + public GovernmentSystemInfo GovernmentSystemInfo { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/EditLegalEmployer.cs b/CompanyManagment.App.Contracts/Employer/EditLegalEmployer.cs new file mode 100644 index 00000000..06d671d8 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/EditLegalEmployer.cs @@ -0,0 +1,9 @@ +namespace CompanyManagment.App.Contracts.Employer; + +public class EditLegalEmployer: CreateLegalEmployer +{ + /// + /// آیدی کارفرما + /// + public long Id { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/EditRealEmployer.cs b/CompanyManagment.App.Contracts/Employer/EditRealEmployer.cs new file mode 100644 index 00000000..bfe9c3e1 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/EditRealEmployer.cs @@ -0,0 +1,12 @@ +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// ویرایش کارفرما حقیقی +/// +public class EditRealEmployer:CreateRealEmployer +{ + /// + /// آیدی کارفرما + /// + public long Id { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/GetEmployerListViewModel.cs b/CompanyManagment.App.Contracts/Employer/GetEmployerListViewModel.cs new file mode 100644 index 00000000..f75fc4b9 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/GetEmployerListViewModel.cs @@ -0,0 +1,50 @@ +using System.Collections.Generic; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// مدل برای گرفتن لیست کارفرما +/// +public class GetEmployerListViewModel +{ + /// + /// آیدی کارفرما + /// + public long Id { get; set; } + + /// + /// کدملی / شناسه ملی + /// + public string NationalCodeOrNationalId { get; set; } + + /// + /// نام کارفرما + /// + public string FullName { get; set; } + + /// + /// نام های کارگاه + /// + public ICollection WorkshopNames { get; set; } + + /// + /// دارای طرف حساب + /// + public bool HasContractingParty { get; set; } + + /// + /// طرف حساب بلاک شده یا نه + /// + public bool HasBlockContractingParty { get; set; } + + /// + /// نوع کارفرما + /// + public LegalType LegalType { get; set; } + + /// + /// وضعیت کارفرما + /// + public ActivationStatus EmployerStatus { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/GetEmployerSearchModel.cs b/CompanyManagment.App.Contracts/Employer/GetEmployerSearchModel.cs new file mode 100644 index 00000000..738f6a25 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/GetEmployerSearchModel.cs @@ -0,0 +1,44 @@ +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// مدل جستجوی لیست کارفرما +/// +public class GetEmployerSearchModel +{ + /// + /// نام شرکت / نام و نام خانوادگی + /// + public string FullNameOrCompanyName { get; set; } + + /// + /// کدملی/ شناسه ملی + /// + public string NationalCodeOrNationalId { get; set; } + + /// + /// شماره شناسنامه یا شماره ثبت + /// + public string IdNumberOrRegisterId { get; set; } + + /// + /// نام طرف حساب + /// + public string ContractingPartyName { get; set; } + + /// + /// وضعیت کارفرما + /// + public ActivationStatus EmployerStatus { get; set; } + + /// + /// نوع کارفرما + /// + public LegalType EmployerType { get; set; } + + /// + /// پیج ایندکس برای دسته بندی سی تایی + /// + public int PageIndex { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/GetLegalEmployerDetailViewModel.cs b/CompanyManagment.App.Contracts/Employer/GetLegalEmployerDetailViewModel.cs new file mode 100644 index 00000000..9ffe398e --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/GetLegalEmployerDetailViewModel.cs @@ -0,0 +1,120 @@ +using _0_Framework.Application; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// اطلاعات کارفرمای حقوقی +/// +public class GetLegalEmployerDetailViewModel +{ + /// + /// آیدی کارفرما + /// + public long Id { get; set; } + + /// + /// نام شرکت + /// + public string CompanyName { get; set; } + + /// + /// شناسه ملی + /// + public string NationalId { get; set; } + + /// + /// شماره ثبت + /// + public string RegisterId { get; set; } + + /// + /// شماره تلفن همراه + /// + public string PhoneNumber { get; set; } + + /// + /// شماره تلفن ثابت + /// + public string TelephoneNumber { get; set; } + + /// + /// کد کارفرما + /// + public string EmployerNo { get; set; } + + /// + /// نام کارفرما + /// + public string ContractingPartyName { get; set; } + + /// + /// نام کارفرما + /// + public long ContractingPartyId { get; set; } + + /// + /// نام و خانوادگی مدیر عامل + /// + public string CeoFullName { get; set; } + + /// + /// نام و خانوادگی مدیر عامل + /// + public string CeoFName { get; set; } + + /// + /// نام و خانوادگی مدیر عامل + /// + public string CeoLName { get; set; } + + /// + /// جنسیت مدیر عامل + /// + public Gender Gender { get; set; } + + /// + /// جنیست + /// + public string GenderStr { get; set; } + + /// + /// ملیت + /// + public string Nationality { get; set; } + + /// + /// نام پدر + /// + public string FatherName { get; set; } + + /// + /// کد ملی + /// + public string NationalCode { get; set; } + + /// + /// شماره شناسنامه + /// + public string IdNumber { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + /// + /// تاریخ صدور شناسنامه + /// + public string DateOfIssue { get; set; } + + /// + /// محل صدور شناسنامه + /// + public string PlaceOfIssue { get; set; } + + /// + /// اطلاعات سامانه های دولتی + /// + public GovernmentSystemInfo GovernmentSystemInfo { get; set; } + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/GetRealEmployerDetailViewModel.cs b/CompanyManagment.App.Contracts/Employer/GetRealEmployerDetailViewModel.cs new file mode 100644 index 00000000..9ace3ab6 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/GetRealEmployerDetailViewModel.cs @@ -0,0 +1,107 @@ +using _0_Framework.Application; +using _0_Framework.Application.Enums; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// اطلاعات کارفرمای حقوقی +/// +public class GetRealEmployerDetailViewModel +{ + /// + /// آیدی کارفرما + /// + public long Id { get; set; } + + /// + /// نام و نام خانوادگی + /// + public string FullName { get; set; } + + /// + /// نام + /// + public string FName{ get; set; } + + /// + /// نام خانوادگی + /// + public string LName { get; set; } + + /// + /// کدملی + /// + public string NationalCode { get; set; } + + /// + /// جنسیت فارسی + /// + public string GenderStr { get; set; } + + /// + /// جنسیت + /// + public Gender Gender { get; set; } + + /// + /// ملیت + /// + public string Nationality { get; set; } + + /// + /// شماره تلفن همراه + /// + public string PhoneNumber { get; set; } + + /// + /// نام پدر + /// + public string FatherName { get; set; } + + /// + /// شماره شناسنامه + /// + public string IdNumber { get; set; } + + /// + /// تاریخ تولد + /// + public string DateOfBirth { get; set; } + + /// + /// نام طرف حساب + /// + public string ContractingPartyName { get; set; } + + + /// + /// آیدی طرف حساب + /// + public long ContractingPartyId { get; set; } + + /// + /// کد کارفرما + /// + public string EmployerNo { get; set; } + + + /// + /// شماره تلفن ثابت + /// + public string TelephoneNumber { get; set; } + + /// + /// تاریخ صدور شناسنامه + /// + public string DateOfIssue { get; set; } + + /// + /// محل صدور شناسنامه + /// + public string PlaceOfIssue { get; set; } + + /// + /// اطلاعات سامانه های دولتی + /// + public GovernmentSystemInfo GovernmentSystemInfo { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/GovernmentSystemInfo.cs b/CompanyManagment.App.Contracts/Employer/GovernmentSystemInfo.cs new file mode 100644 index 00000000..611ccb16 --- /dev/null +++ b/CompanyManagment.App.Contracts/Employer/GovernmentSystemInfo.cs @@ -0,0 +1,54 @@ +using System; + +namespace CompanyManagment.App.Contracts.Employer; + +/// +/// اطلاعات سامانه های دولتی +/// +public class GovernmentSystemInfo +{ + #region MCL + /// + /// نام کاربری اداره کار + /// + public string MclUsername { get; set; } + /// + /// رمز عبور اداره کار + /// + public string MclPassword { get; set; } + #endregion + + #region E-Service تامین اجتماعی + /// + /// نام کاربری سازمان تامین اجتماعی + /// + public string EServiceUsername { get; set; } + /// + /// رمز عبور سازمان تامین اجتماعی + /// + public string EServicePassword { get; set; } + #endregion + + #region Tax سامانه مالیاتی + /// + /// نام کاربری سامانه مالیاتی + /// + public string TaxUsername { get; set; } + /// + /// رمز عبور سامانه مالیاتی + /// + public string TaxPassword { get; set; } + #endregion + + #region Sana سامانه ثنا + /// + /// نام کاربری ثنا + /// + public string SanaUsername { get; set; } + /// + /// رمز عبور ثنا + /// + public string SanaPassword { get; set; } + #endregion + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/Employer/IEmployerApplication.cs b/CompanyManagment.App.Contracts/Employer/IEmployerApplication.cs index ec8582f1..60271d79 100644 --- a/CompanyManagment.App.Contracts/Employer/IEmployerApplication.cs +++ b/CompanyManagment.App.Contracts/Employer/IEmployerApplication.cs @@ -55,4 +55,71 @@ public interface IEmployerApplication #endregion -} \ No newline at end of file + #region Api + + /// + /// لیست کارفرما ها + /// + /// + Task> GetEmployerList(GetEmployerSearchModel searchModel); + + /// + /// جزئیات کارفرما حقوقی + /// + /// + /// + Task GetLegalEmployerDetail(long id); + + /// + /// جزئیات کارفرما حقیقی + /// + /// + /// + Task GetRealEmployerDetail(long id); + + /// + /// ایجاد کارفرمای حقیقی + /// + /// + /// + Task CreateReal(CreateRealEmployer command); + + /// + /// ایجاد کارفرمای حقوقی + /// + /// + /// + Task CreateLegal(CreateLegalEmployer command); + + /// + /// ویرایش کارفرمای حقیقی + /// + /// + /// + Task EditReal(EditRealEmployer command); + + + /// + /// ویرایش کارفرمای حقوقی + /// + /// + /// + Task EditLegal(EditLegalEmployer command); + + ///// + ///// لیست نام کارفرما ها برای جستجو + ///// + ///// + ///// + //public Task> GetSelectList(string search); + + /// + /// حذف کارفرما - درصورت داشتن کارگاه کارفرما غیرفعال میشود + /// + /// + /// + public Task> RemoveApi(long id); + + #endregion +} + diff --git a/CompanyManagment.Application/EmployerApplication.cs b/CompanyManagment.Application/EmployerApplication.cs index 3c6eb318..90a849fa 100644 --- a/CompanyManagment.Application/EmployerApplication.cs +++ b/CompanyManagment.Application/EmployerApplication.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; +using _0_Framework.Exceptions; using Company.Domain.empolyerAgg; using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.Checkout; @@ -957,4 +958,256 @@ public class EmployerApplication : IEmployerApplication } #endregion + #region Api + public async Task> GetEmployerList(GetEmployerSearchModel searchModel) + { + return await _EmployerRepository.GetEmployerList(searchModel); + } + public async Task GetLegalEmployerDetail(long id) + { + var employer = await _EmployerRepository.GetLegalEmployerDetail(id); + if (employer == null) + { + throw new NotFoundException("کارفرمای مورد نطر یافت نشد"); + } + return employer; + + } + + public async Task GetRealEmployerDetail(long id) + { + var employer = await _EmployerRepository.GetRealEmployerDetail(id); + if (employer == null) + { + throw new NotFoundException("کارفرمای مورد نطر یافت نشد"); + } + return employer; + } + + public async Task CreateReal(CreateRealEmployer command) + { + var opration = new OperationResult(); + if (_EmployerRepository.Exists(x => + (x.FName == command.FName && x.LName == command.LName) && x.Nationalcode == command.NationalCode && x.Nationalcode != null)) + return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + + if (string.IsNullOrWhiteSpace(command.FName)) + return opration.Failed("لطفا نام را وارد کنید"); + + if (!string.IsNullOrWhiteSpace(command.NationalCode)) + { + if (command.NationalCode.NationalCodeValid() != "valid") + { + return opration.Failed("کدملی وارد شده نامعتبر است"); + } + if (_EmployerRepository.Exists(x => x.Nationalcode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode))) + { + return opration.Failed("کد ملی وارد شده تکراری است"); + } + } + string initial = "1300/10/11"; + var dateOfBirth = command.DateOfBirth?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + var dateOfIssue = command.DateOfIssue?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + + var gender = command.Gender switch + { + Gender.Male => "مرد", + Gender.Female => "زن", + Gender.None => null, + _ => throw new BadRequestException("جنسیت وارد شده نامعتبر است") + }; + + var employerData = new Employer(command.FName, command.LName, command.ContractingPartyId, gender, + command.NationalCode, command.IdNumber, "ایرانی", command.FatherName, dateOfBirth, + dateOfIssue, command.PlaceOfIssue, "*", "*", "*", "حقیقی", command.PhoneNumber, + command.Telephone, "true", command.GovernmentSystemInfo.MclUsername, command.GovernmentSystemInfo.MclPassword, command.GovernmentSystemInfo.EServiceUsername, command.GovernmentSystemInfo.EServicePassword, + command.GovernmentSystemInfo.TaxUsername, command.GovernmentSystemInfo.TaxPassword, command.GovernmentSystemInfo.SanaUsername, command.GovernmentSystemInfo.SanaPassword); + + await _EmployerRepository.CreateAsync(employerData); + await _EmployerRepository.SaveChangesAsync(); + + return opration.Succcedded(); + } + + public async Task CreateLegal(CreateLegalEmployer command) + { + if (string.IsNullOrWhiteSpace(command.EmployerLName)) + command.EmployerLName = "#"; + var opration = new OperationResult(); + if (_EmployerRepository.Exists(x => + x.LName == command.CompanyName && x.NationalId == command.NationalId && x.EmployerLName == command.EmployerLName)) + return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + + if (_EmployerRepository.Exists(x => x.NationalId == command.NationalId && !string.IsNullOrWhiteSpace(command.NationalId) && x.NationalId != null)) + { + return opration.Failed(" شناسه ملی وارد شده تکراری است"); + } + if (_EmployerRepository.Exists(x => x.LName == command.CompanyName)) + { + return opration.Failed("نام شرکت وارد شده تکراری است"); + } + if (_EmployerRepository.Exists(x => x.RegisterId == command.RegisterId && !string.IsNullOrWhiteSpace(command.RegisterId) && x.RegisterId != null)) + { + return opration.Failed(" شماره ثبت وارد شده تکراری است"); + } + + if (!string.IsNullOrEmpty(command.NationalId) && command.NationalId.Length != 11) + { + return opration.Failed(" شناسه ملی باید 11 رقم باشد"); + } + + if (!string.IsNullOrWhiteSpace(command.EmployerNationalCode)) + { + if (command.EmployerNationalCode.NationalCodeValid() != "valid") + { + return opration.Failed("کد ملی وارد شده نا معتبر است"); + } + } + + string initial = "1300/10/11"; + var dateOfBirth = command.EmployerDateOfBirth?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + var dateOfIssue = command.EmployerDateOfIssue?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + + var gender = command.EmployerGender switch + { + Gender.Male => "مرد", + Gender.Female => "زن", + Gender.None => null, + _ => throw new BadRequestException("جنسیت وارد شده نامعتبر است") + }; + + + var legalEmployerData = new Employer(command.EmployerFName, command.CompanyName, command.ContractingPartyId, gender, + command.EmployerNationalCode, command.EmployerIdNumber, "ایرانی", command.EmployerFatherName, dateOfBirth, + dateOfIssue, command.EmployerPlaceOfIssue, command.RegisterId, command.NationalId, command.EmployerLName, "حقوقی", command.PhoneNumber, + command.TelephoneNumber, "true", command.GovernmentSystemInfo.MclUsername, command.GovernmentSystemInfo.MclPassword, + command.GovernmentSystemInfo.EServiceUsername, command.GovernmentSystemInfo.EServicePassword, + command.GovernmentSystemInfo.TaxUsername, command.GovernmentSystemInfo.TaxPassword, command.GovernmentSystemInfo.SanaUsername, command.GovernmentSystemInfo.SanaPassword); + + await _EmployerRepository.CreateAsync(legalEmployerData); + await _EmployerRepository.SaveChangesAsync(); + + return opration.Succcedded(); + } + + public async Task EditReal(EditRealEmployer command) + { + var opration = new OperationResult(); + var employer = _EmployerRepository.Get(command.Id); + if (employer == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + if (_EmployerRepository.Exists(x => + (x.FName == command.FName && x.LName == command.LName) && x.Nationalcode == command.NationalCode && x.id != command.Id)) + return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + if (!string.IsNullOrWhiteSpace(command.NationalCode)) + { + if (command.NationalCode.NationalCodeValid() != "valid") + { + return opration.Failed("کد ملی وارد شده نا معتبر است"); + } + } + + if (_EmployerRepository.Exists(x => x.Nationalcode == command.NationalCode && !string.IsNullOrWhiteSpace(command.NationalCode) && x.id != command.Id)) + { + + return opration.Failed(" کد ملی وارد شده تکراری است"); + } + + + + string initial = "1300/10/11"; + + var dateOfBirth = command.DateOfBirth?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + var dateOfIssue = command.DateOfIssue?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + + var gender = command.Gender switch + { + Gender.Male => "مرد", + Gender.Female => "زن", + Gender.None => null, + _ => throw new BadRequestException("جنسیت وارد شده نامعتبر است") + }; + + employer.Edit(command.FName, command.LName, command.ContractingPartyId, + gender, command.NationalCode, command.IdNumber, "ایرانی", command.FatherName, + dateOfBirth, dateOfIssue, command.PlaceOfIssue, command.PhoneNumber, command.Telephone, + command.GovernmentSystemInfo.MclUsername, command.GovernmentSystemInfo.MclPassword, command.GovernmentSystemInfo.EServiceUsername, command.GovernmentSystemInfo.EServicePassword, + command.GovernmentSystemInfo.TaxUsername, command.GovernmentSystemInfo.TaxPassword, command.GovernmentSystemInfo.SanaUsername, command.GovernmentSystemInfo.SanaPassword, null); + + await _EmployerRepository.SaveChangesAsync(); + return opration.Succcedded(); + } + + public async Task EditLegal(EditLegalEmployer command) + { + var opration = new OperationResult(); + var legalEmployer = _EmployerRepository.Get(command.Id); + if (legalEmployer == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + if (_EmployerRepository.Exists(x => + x.LName == command.CompanyName && x.NationalId == command.NationalId && !string.IsNullOrWhiteSpace(command.NationalId) && x.id != command.Id)) + return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); + + + if (!string.IsNullOrEmpty(command.NationalId) && command.NationalId.Length != 11) + { + return opration.Failed(" شناسه ملی باید 11 رقم باشد"); + } + + if (!string.IsNullOrWhiteSpace(command.EmployerNationalCode)) + { + if (command.EmployerNationalCode.NationalCodeValid() != "valid") + { + return opration.Failed("کد ملی وارد شده نا معتبر است"); + } + } + + var gender = command.EmployerGender switch + { + Gender.Male => "مرد", + Gender.Female => "زن", + Gender.None => null, + _ => throw new BadRequestException("جنسیت وارد شده نامعتبر است") + }; + + string initial = "1300/10/11"; + var dateOfBirth = command.EmployerDateOfBirth?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + var dateOfIssue = command.EmployerDateOfIssue?.ToGeorgianDateTime() ?? initial.ToGeorgianDateTime(); + legalEmployer.EditLegal(command.EmployerFName, command.CompanyName, command.ContractingPartyId, gender, + command.EmployerNationalCode, command.EmployerIdNumber, "ایرانی", command.EmployerFatherName, dateOfBirth, + dateOfIssue, command.EmployerPlaceOfIssue, command.RegisterId, command.NationalId, command.EmployerLName, + command.PhoneNumber, command.TelephoneNumber, command.GovernmentSystemInfo.MclUsername, command.GovernmentSystemInfo.MclUsername, command.GovernmentSystemInfo.EServiceUsername, command.GovernmentSystemInfo.EServicePassword, + command.GovernmentSystemInfo.TaxUsername, command.GovernmentSystemInfo.TaxPassword, command.GovernmentSystemInfo.SanaUsername, command.GovernmentSystemInfo.SanaPassword, null); + + await _EmployerRepository.SaveChangesAsync(); + return opration.Succcedded(); + } + + //public async Task> GetSelectList(string search) + //{ + // return await _EmployerRepository.GetSelectList(search); + //} + + async Task> IEmployerApplication.RemoveApi(long id) + { + var employer = _EmployerRepository.Get(id); + if (employer == null) + throw new NotFoundException("دیتای مورد نظر یافت نشد"); + + var workshops = _workshopRepository.GetWorkshopsByEmployerId([id]); + + if (workshops.Any()) + { + return await _EmployerRepository.DeactivateWithSubordinates(id); + } + + _EmployerRepository.Remove(id); + + return new OperationResult().Succcedded("Deleted"); + + } + +#endregion } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/EmployerRepository.cs b/CompanyManagment.EFCore/Repository/EmployerRepository.cs index 1344248d..1011df9e 100644 --- a/CompanyManagment.EFCore/Repository/EmployerRepository.cs +++ b/CompanyManagment.EFCore/Repository/EmployerRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; +using _0_Framework.Application.Enums; using _0_Framework.InfraStructure; using Company.Domain.EmployerAccountAgg; using Company.Domain.empolyerAgg; @@ -14,742 +15,742 @@ namespace CompanyManagment.EFCore.Repository; public class EmployerRepository : RepositoryBase, IEmployerRepository { - private readonly CompanyContext _context; - private readonly IAuthHelper _authHelper; + private readonly CompanyContext _context; + private readonly IAuthHelper _authHelper; - public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000); + public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000); - public EmployerRepository(CompanyContext context, IAuthHelper authHelper) : base(context) - { - _context = context; - _authHelper = authHelper; + public EmployerRepository(CompanyContext context, IAuthHelper authHelper) : base(context) + { + _context = context; + _authHelper = authHelper; - } + } - public List GetEmployers() - { - return _context.Employers.Where(x => x.IsActive == true).Select(x => new EmployerViewModel - { - Id = x.id, + public List GetEmployers() + { + return _context.Employers.Where(x => x.IsActive == true).Select(x => new EmployerViewModel + { + Id = x.id, - FName = x.FName, - LName = x.LName, - FullName = x.FullName, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - IsLegal = x.IsLegal, - Phone = x.Phone, - AgentPhone = x.AgentPhone, - Address = x.Address + FName = x.FName, + LName = x.LName, + FullName = x.FullName, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + IsLegal = x.IsLegal, + Phone = x.Phone, + AgentPhone = x.AgentPhone, + Address = x.Address - }).ToList(); - } + }).ToList(); + } - public List GetEmployers(List id) - { - return _context.Employers.Select(x => new EmployerViewModel() - { - Id = x.id, - IsActive = x.IsActive, - FName = x.FName, - LName = x.LName, - FullName = x.FullName, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - IsLegal = x.IsLegal, - Phone = x.Phone, - AgentPhone = x.AgentPhone, - Address = x.Address - }).Where(x => id.Contains(x.Id)) - .Where(x => x.IsActive).ToList(); - //var empList = new List(); - //foreach (var item in id) - //{ - // var e = _context.Employers.Where(x=>x.IsActive).Select(x => new EmployerViewModel - // { - // Id = x.id, + public List GetEmployers(List id) + { + return _context.Employers.Select(x => new EmployerViewModel() + { + Id = x.id, + IsActive = x.IsActive, + FName = x.FName, + LName = x.LName, + FullName = x.FullName, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + IsLegal = x.IsLegal, + Phone = x.Phone, + AgentPhone = x.AgentPhone, + Address = x.Address + }).Where(x => id.Contains(x.Id)) + .Where(x => x.IsActive).ToList(); + //var empList = new List(); + //foreach (var item in id) + //{ + // var e = _context.Employers.Where(x=>x.IsActive).Select(x => new EmployerViewModel + // { + // Id = x.id, - // FName = x.FName, - // LName = x.LName, - // FullName = x.FullName, - // Nationalcode = x.Nationalcode, - // IdNumber = x.IdNumber, - // RegisterId = x.RegisterId, - // NationalId = x.NationalId, - // IsLegal = x.IsLegal, - // Phone = x.Phone, - // AgentPhone = x.AgentPhone, - // Address = x.Address + // FName = x.FName, + // LName = x.LName, + // FullName = x.FullName, + // Nationalcode = x.Nationalcode, + // IdNumber = x.IdNumber, + // RegisterId = x.RegisterId, + // NationalId = x.NationalId, + // IsLegal = x.IsLegal, + // Phone = x.Phone, + // AgentPhone = x.AgentPhone, + // Address = x.Address - // }) - // .FirstOrDefault(x=>x.Id == item); - // empList.Add(e); - //} + // }) + // .FirstOrDefault(x=>x.Id == item); + // empList.Add(e); + //} - //return empList; + //return empList; - } + } - public EditEmployer GetDetails(long id) - { - return _context.Employers.Select(x => new EditEmployer - { - Id = x.id, - FName = x.FName, - LName = x.LName, - ContractingPartyId = x.ContractingPartyId, - Gender = x.Gender, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - Nationality = x.Nationality, - FatherName = x.FatherName, - DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(), - DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(), - PlaceOfIssue = x.PlaceOfIssue, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - EmployerLName = x.EmployerLName, - IsLegal = x.IsLegal, - Phone = x.Phone, - AgentPhone = x.AgentPhone, - Address = x.Address, - MclsUserName = x.MclsUserName, - MclsPassword = x.MclsPassword, - EserviceUserName = x.EserviceUserName, - EservicePassword = x.EservicePassword, - TaxOfficeUserName = x.EservicePassword, - SanaUserName = x.SanaUserName, - SanaPassword = x.SanaPassword, - EmployerNo = x.EmployerNo, - FullName = x.FullName + public EditEmployer GetDetails(long id) + { + return _context.Employers.Select(x => new EditEmployer + { + Id = x.id, + FName = x.FName, + LName = x.LName, + ContractingPartyId = x.ContractingPartyId, + Gender = x.Gender, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + Nationality = x.Nationality, + FatherName = x.FatherName, + DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(), + DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(), + PlaceOfIssue = x.PlaceOfIssue, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + EmployerLName = x.EmployerLName, + IsLegal = x.IsLegal, + Phone = x.Phone, + AgentPhone = x.AgentPhone, + Address = x.Address, + MclsUserName = x.MclsUserName, + MclsPassword = x.MclsPassword, + EserviceUserName = x.EserviceUserName, + EservicePassword = x.EservicePassword, + TaxOfficeUserName = x.EservicePassword, + SanaUserName = x.SanaUserName, + SanaPassword = x.SanaPassword, + EmployerNo = x.EmployerNo, + FullName = x.FullName - }) - .FirstOrDefault(x => x.Id == id); - } + }) + .FirstOrDefault(x => x.Id == id); + } - public List GetEmployerByWorkshopId(long workshopId) - { + public List GetEmployerByWorkshopId(long workshopId) + { - var result = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId).Include(x=>x.Employer) - .Select(x=> new EmprViewModel() - { - EmployerFullName = x.Employer.FName + " " + x.Employer.LName, - Id = x.Employer.id, - FName = x.Employer.FName, - EmployerLName = x.Employer.EmployerLName, - IsLegal = x.Employer.IsLegal, - LName = x.Employer.LName, - IsBlockContractingParty = _context.PersonalContractingParties - .Where(p => p.Employers.Any(e => e.id == x.Employer.id)) - .Select(p => p.IsBlock) - .FirstOrDefault(), + var result = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId).Include(x => x.Employer) + .Select(x => new EmprViewModel() + { + EmployerFullName = x.Employer.FName + " " + x.Employer.LName, + Id = x.Employer.id, + FName = x.Employer.FName, + EmployerLName = x.Employer.EmployerLName, + IsLegal = x.Employer.IsLegal, + LName = x.Employer.LName, + IsBlockContractingParty = _context.PersonalContractingParties + .Where(p => p.Employers.Any(e => e.id == x.Employer.id)) + .Select(p => p.IsBlock) + .FirstOrDefault(), }); - //var employerlist = _context.Employers.Where(x => emps.Contains(x.id)).ToList(); - //var employers = new List(); - - //foreach (var element in employerlist) - //{ - // var employer = new EmprViewModel() - // { - // EmployerFullName = element.FName + " " + element.LName, - // Id = element.id, - // FName = element.FName, - // EmployerLName = element.EmployerLName, - // IsLegal = element.IsLegal, - // LName = element.LName, - // IsBlockContractingParty = _context.PersonalContractingParties.FirstOrDefault(x => x.id == element.ContractingPartyId)?.IsBlock, - // }; - // employers.Add(employer); - //} - - - - return result.ToList(); - } - - public List GetEmployerByContracrtingPartyID(long contractingPartyId) - { - return _context.Employers.Select(x => new EmployerViewModel() - { - Id = x.id, - FName = x.FName, - LName = x.LName, - ContractingPartyID = x.ContractingPartyId, - EmployerNo = x.EmployerNo, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - Nationality = x.Nationality, - - RegisterId = x.RegisterId, - NationalId = x.NationalId, - EmployerLName = x.EmployerLName, - IsLegal = x.IsLegal, - - FullName = x.FName + " " + x.LName, - - - - }).Where(x => x.ContractingPartyID == contractingPartyId) - .ToList(); - } - - public List Search(EmployerSearchModel searchModel) - { - - - var workshopEmp = _context.WorkshopEmployers.Select(x => x.EmployerId); - var query = _context.Employers.Include(x => x.ContractingParty) - .Select(x => new EmployerViewModel - { - Id = x.id, - FName = x.FName, - ContractingPartyID = x.ContractingPartyId, - LName = x.LName, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - EmployerLName = x.EmployerLName, - IsLegal = x.IsLegal, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - ContractingParty = x.ContractingParty.LName, - IsActive = x.IsActive, - Address = x.Address, - EmployerNo = x.EmployerNo, - HasContractingParty = x.ContractingPartyId == 30428 && workshopEmp.Any(n => n == x.id), - HasBlockContractingParty = x.ContractingParty.IsBlock == "true", - }); - - if (searchModel.Id > 0) - query = query.Where(x => x.Id == searchModel.Id); - - if (!string.IsNullOrWhiteSpace(searchModel.LName)) - query = query.Where(x => x.LName.Contains(searchModel.FName) || x.FName.Contains(searchModel.LName)); - - - if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode) && searchModel.Nationalcode != "0") - query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode) || x.NationalId.Contains(searchModel.Nationalcode)); - - if (!string.IsNullOrWhiteSpace(searchModel.IdNumber) && searchModel.IdNumber != "0") - query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber) || x.RegisterId.Contains(searchModel.IdNumber)); - - if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) - query = query.Where(x => (x.IsLegal == "حقیقی" && - ((!string.IsNullOrWhiteSpace(x.FName) && x.FName.StartsWith(searchModel.EmployerLName)) || - (!string.IsNullOrWhiteSpace(x.LName) && x.LName.StartsWith(searchModel.EmployerLName)))) - || (x.IsLegal == "حقوقی" && (!string.IsNullOrWhiteSpace(x.LName) && x.LName.Contains(searchModel.EmployerLName)))); - - if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) - query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); - - - if (!string.IsNullOrEmpty(searchModel.ContactingPartyName)) - { - var personalContractingPIds = _context.PersonalContractingParties.Where(x => !string.IsNullOrEmpty(x.FName) && (x.FName + " " + x.LName).Contains(searchModel.ContactingPartyName)).Select(x => x.id).ToList(); - query = query.Where(x => personalContractingPIds.Contains(x.ContractingPartyID)); - } - - - if (searchModel.ContractingPartyID != 0) - query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); - - if (searchModel.Address == null) - { - query = query.Where(x => x.Address == "true"); - } - - if (searchModel.Address == "false") - { - query = query.Where(x => x.Address == "false"); - } - else if (searchModel.Address == "both") - { - query = query.Where(x => x.Address == "false" || x.Address == "true"); - } - - - - - return query.OrderByDescending(x => x.Id).ToList(); - } - - public List GetEmployerByEmployerIds(List employerIds) - { - return _context.Employers.Select(x => new EmprViewModel() - { - Id = x.id, - FName = x.FName, - LName = x.LName, - EmployerLName = x.EmployerLName, - IsLegal = x.IsLegal, - - //FullName = x.FName + " " + x.LName, - - }).Where(x => employerIds.Contains(x.Id)) - .ToList(); - } - - ///client - - public bool Remove(long id) - { - using (var transaction = _context.Database.BeginTransaction()) - { - try - { - var employerAccountList = _context.EmployerAccounts.Where(x => x.EmployerId == id).ToList(); - _context.EmployerAccounts.RemoveRange(employerAccountList); - var employer = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); - _context.Employers.Remove(employer); - _context.SaveChanges(); - transaction.Commit(); - return true; - } - catch (Exception) - { - transaction.Rollback(); - return false; - } - } - } - - public bool CreateForClient(Employer command) - { - using (var transaction = _context.Database.BeginTransaction()) - { - try - { - Create(command); - _context.SaveChanges(); - var acountID = _authHelper.CurrentAccountId(); - //خودش - var employerAccount = new EmployerAccount(); - employerAccount.AccountId = acountID; - employerAccount.EmployerId = command.id; - _context.EmployerAccounts.Add(employerAccount); - - if (acountID != 3) //آقای مصباح - { - employerAccount = new EmployerAccount(); - employerAccount.AccountId = 3; - employerAccount.EmployerId = command.id; - _context.EmployerAccounts.Add(employerAccount); - } - - if (acountID != 2) //آقای فرخی - { - employerAccount = new EmployerAccount(); - employerAccount.AccountId = 2; - employerAccount.EmployerId = command.id; - _context.EmployerAccounts.Add(employerAccount); - } - _context.SaveChanges(); - transaction.Commit(); - return true; - } - catch (Exception) - { - transaction.Rollback(); - return false; - } - } - } - public List SearchForClient(EmployerSearchModel searchModel) - { - - var acountID = _authHelper.CurrentAccountId(); - var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); - - - - var query = _context.Employers.Where(x => employerIds.Contains(x.id)).Include(x => x.ContractingParty) - .Select(x => new EmployerViewModel - { - Id = x.id, - FName = x.FName, - ContractingPartyID = x.ContractingPartyId, - LName = x.LName, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - EmployerLName = x.EmployerLName, - IsLegal = x.IsLegal, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - ContractingParty = x.ContractingParty.LName, - IsActive = x.IsActive, - Address = x.Address, - EmployerNo = x.EmployerNo, - - }); - - if (!string.IsNullOrWhiteSpace(searchModel.FName)) - query = query.Where(x => x.FName.Contains(searchModel.FName)); - if (!string.IsNullOrWhiteSpace(searchModel.LName)) - query = query.Where(x => x.LName.Contains(searchModel.LName)); - if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode)) - query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode)); - if (!string.IsNullOrWhiteSpace(searchModel.IdNumber)) - query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber)); - if (!string.IsNullOrWhiteSpace(searchModel.RegisterId)) - query = query.Where(x => x.RegisterId.Contains(searchModel.RegisterId)); - if (!string.IsNullOrWhiteSpace(searchModel.NationalId)) - query = query.Where(x => x.NationalId.Contains(searchModel.NationalId)); - if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) - query = query.Where(x => x.EmployerLName.Contains(searchModel.EmployerLName)); - if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) - query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); - if (searchModel.ContractingPartyID != 0) - query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); - if (searchModel.Address == null) - { - query = query.Where(x => x.Address == "true"); - } - - if (searchModel.Address == "false") - { - query = query.Where(x => x.Address == "false"); - } - else if (searchModel.Address == "both") - { - query = query.Where(x => x.Address == "false" || x.Address == "true"); - } - - return query.OrderByDescending(x => x.Id).ToList(); - } - public List GetEmployersForClient(long acountID) - { - // var acountID = _authHelper.CurrentAccountId(); - var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); - - return _context.Employers.Where(x => employerIds.Contains(x.id) && x.IsActive == true).Select(x => new EmployerViewModel - { - Id = x.id, - - FName = x.FName, - LName = x.LName, - FullName = x.FullName, - Nationalcode = x.Nationalcode, - IdNumber = x.IdNumber, - RegisterId = x.RegisterId, - NationalId = x.NationalId, - IsLegal = x.IsLegal, - Phone = x.Phone, - AgentPhone = x.AgentPhone, - Address = x.Address - - }).ToList(); - } - public bool CreateLegalsForClient(Employer legalEmployerData) - { - using (var transaction = _context.Database.BeginTransaction()) - { - try - { - Create(legalEmployerData); - _context.SaveChanges(); - var acountID = _authHelper.CurrentAccountId(); - //خودش - var employerAccount = new EmployerAccount(); - employerAccount.AccountId = acountID; - employerAccount.EmployerId = legalEmployerData.id; - _context.EmployerAccounts.Add(employerAccount); - - _context.SaveChanges(); - - if (acountID != 3) //آقای مصباح - { - employerAccount = new EmployerAccount(); - employerAccount.AccountId = 3; - employerAccount.EmployerId = legalEmployerData.id; - _context.EmployerAccounts.Add(employerAccount); - _context.SaveChanges(); - } - - if (acountID != 2) //آقای فرخی - { - employerAccount = new EmployerAccount(); - employerAccount.AccountId = 2; - employerAccount.EmployerId = legalEmployerData.id; - _context.EmployerAccounts.Add(employerAccount); - _context.SaveChanges(); - } - - - - transaction.Commit(); - return true; - } - catch (Exception ex) - { - transaction.Rollback(); - return false; - } - } - } - - public bool ExistsEmployerAccount(string commandNationalcode) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); - - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == commandNationalcode); - } - else - return false; - - } - - - public bool ExistsEmployerAccountNationalId(string commandNationalId) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == commandNationalId); - } - else - return false; - } - - public bool ExistsEmployerAccountById(string nationalcode, long commandId) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == nationalcode); - } - else - return false; - } - - public bool ExistsEmployerAccountNationalIdEmployerId(string nationalId, long commandId) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == nationalId); - } - else - return false; - - } - - public bool ExistsEmployerAccountRegisterId(string commandRegisterId) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.RegisterId == commandRegisterId); - } - else - return false; - } - - public bool ExistsEmployerAccountLName(string commandLName) - { - var acountID = _authHelper.CurrentAccountId(); - var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); - if (employerIdstList != null && employerIdstList.Count > 0) - { - return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.LName == commandLName); - } - else - return false; - } - - #region Mahan - - public List GetEmployersHasWorkshop() - { - return _context.WorkshopEmployers.Include(x => x.Employer).Select(x => - new EmployerViewModel() - { - FullName = x.Employer.FullName, - Id = x.Employer.id - }).ToList(); - } - - public async Task> GetSelectList(string search) - { - var query = _context.Employers.Select(x => new EmployerSelectListViewModel() - { - Id = x.id, - Name = x.FullName - }); - if (!string.IsNullOrWhiteSpace(search)) - { - query = query.Where(x => x.Name.Contains(search)); - } - - return await query.Take(100).ToListAsync(); - } - - #endregion - - #region NewByHeydari - public OperationResult DeleteEmployer(long id) - { - var op = new OperationResult(); - try - { - var personalContractingParties = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); - _context.Employers.Remove(personalContractingParties); - _context.SaveChanges(); - return op.Succcedded(-1, "حذف با موفقیت انجام شد."); - } - catch (Exception) - { - return op.Failed("حذف با خطا مواجه شد."); - } - } - - public List GetEmployerWithFNameOrLName(string searchText) - { - var result = _context.Employers.Where(x => (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchText)) || - (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchText)) || - (x.IsLegal == "حقیقی" && (!string.IsNullOrEmpty(x.FName) && !string.IsNullOrEmpty(x.LName)) && - (x.FName + " " + x.LName).Contains(searchText))) - .Select(x => new EmployerViewModel - { - Id = x.id, - LName = (x.IsLegal == "حقیقی" ? x.FullName : x.LName), - }).Take(100).ToList(); - - return result; - } - public List GetEmployerWithIdNumberOrRegisterId(string searchText) - { - var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.IdNumber) && x.IdNumber.StartsWith(searchText)) - || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.RegisterId) && x.RegisterId.StartsWith(searchText))) - .Select(x => new EmployerViewModel - { - Id = x.id, - IdNumber = (x.IsLegal == "حقیقی" ? x.IdNumber : x.RegisterId), - }).Take(100).ToList(); - - return result; - } - public List GetEmployerWithNationalcodeOrNationalId(string searchText) - { - var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.Nationalcode) && x.Nationalcode.StartsWith(searchText)) - || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.NationalId) && x.NationalId.StartsWith(searchText))) - .Select(x => new EmployerViewModel - { - Id = x.id, - Nationalcode = (x.IsLegal == "حقیقی" ? x.Nationalcode : x.NationalId), - }).Take(100).ToList(); - - return result; - } - - public OperationResult DeActiveAll(long id) - { - OperationResult result = new OperationResult(); - using (var transaction = _context.Database.BeginTransaction()) - { - try - { - - - var employer = _context.Employers.FirstOrDefault(x => x.id == id); - employer.DeActive(); - - var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); - var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); - workshops.ForEach(x => x.DeActive(x.ArchiveCode)); - - var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); - contracts.ForEach(x => x.DeActive()); - - var contractIds = contracts.Select(x => x.id).ToList(); - var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); - checkouts.ForEach(x => x.DeActive()); - - _context.SaveChanges(); - transaction.Commit(); - result.Failed("DeActive"); - } - catch (Exception) - { - result.Failed("غیرفعال کردن کارفرما با خطا مواجه شد"); - transaction.Rollback(); - } - } - - return result; - } - - public OperationResult ActiveAll(long id) - { - OperationResult result = new OperationResult(); - using (var transaction = _context.Database.BeginTransaction()) - { - try - { - var employer = _context.Employers.FirstOrDefault(x => x.id == id); - employer.Active(); - - var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); - var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); - workshops.ForEach(x => x.Active(x.ArchiveCode)); - - var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); - contracts.ForEach(x => x.Active()); - - var contractIds = contracts.Select(x => x.id).ToList(); - var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); - checkouts.ForEach(x => x.Active()); - - _context.SaveChanges(); - transaction.Commit(); - result.Succcedded(); - } - catch (Exception) - { - result.Failed("فعال کردن کارفرما با خطا مواجه شد"); - transaction.Rollback(); - } - } - - return result; - } - public List GetAllEmployers() - { - return _context.Employers.Select(x => new EmployerViewModel - { - Id = x.id, - FName = x.FName, - LName = x.LName, - FullName = x.FullName, - Nationalcode = x.Nationalcode, - //IdNumber = x.IdNumber, - //RegisterId = x.RegisterId, - NationalId = x.NationalId, - IsLegal = x.IsLegal, - }).ToList(); - } + //var employerlist = _context.Employers.Where(x => emps.Contains(x.id)).ToList(); + //var employers = new List(); + + //foreach (var element in employerlist) + //{ + // var employer = new EmprViewModel() + // { + // EmployerFullName = element.FName + " " + element.LName, + // Id = element.id, + // FName = element.FName, + // EmployerLName = element.EmployerLName, + // IsLegal = element.IsLegal, + // LName = element.LName, + // IsBlockContractingParty = _context.PersonalContractingParties.FirstOrDefault(x => x.id == element.ContractingPartyId)?.IsBlock, + // }; + // employers.Add(employer); + //} + + + + return result.ToList(); + } + + public List GetEmployerByContracrtingPartyID(long contractingPartyId) + { + return _context.Employers.Select(x => new EmployerViewModel() + { + Id = x.id, + FName = x.FName, + LName = x.LName, + ContractingPartyID = x.ContractingPartyId, + EmployerNo = x.EmployerNo, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + Nationality = x.Nationality, + + RegisterId = x.RegisterId, + NationalId = x.NationalId, + EmployerLName = x.EmployerLName, + IsLegal = x.IsLegal, + + FullName = x.FName + " " + x.LName, + + + + }).Where(x => x.ContractingPartyID == contractingPartyId) + .ToList(); + } + + public List Search(EmployerSearchModel searchModel) + { + + + var workshopEmp = _context.WorkshopEmployers.Select(x => x.EmployerId); + var query = _context.Employers.Include(x => x.ContractingParty) + .Select(x => new EmployerViewModel + { + Id = x.id, + FName = x.FName, + ContractingPartyID = x.ContractingPartyId, + LName = x.LName, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + EmployerLName = x.EmployerLName, + IsLegal = x.IsLegal, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + ContractingParty = x.ContractingParty.LName, + IsActive = x.IsActive, + Address = x.Address, + EmployerNo = x.EmployerNo, + HasContractingParty = x.ContractingPartyId == 30428 && workshopEmp.Any(n => n == x.id), + HasBlockContractingParty = x.ContractingParty.IsBlock == "true", + }); + + if (searchModel.Id > 0) + query = query.Where(x => x.Id == searchModel.Id); + + if (!string.IsNullOrWhiteSpace(searchModel.LName)) + query = query.Where(x => x.LName.Contains(searchModel.FName) || x.FName.Contains(searchModel.LName)); + + + if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode) && searchModel.Nationalcode != "0") + query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode) || x.NationalId.Contains(searchModel.Nationalcode)); + + if (!string.IsNullOrWhiteSpace(searchModel.IdNumber) && searchModel.IdNumber != "0") + query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber) || x.RegisterId.Contains(searchModel.IdNumber)); + + if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) + query = query.Where(x => (x.IsLegal == "حقیقی" && + ((!string.IsNullOrWhiteSpace(x.FName) && x.FName.StartsWith(searchModel.EmployerLName)) || + (!string.IsNullOrWhiteSpace(x.LName) && x.LName.StartsWith(searchModel.EmployerLName)))) + || (x.IsLegal == "حقوقی" && (!string.IsNullOrWhiteSpace(x.LName) && x.LName.Contains(searchModel.EmployerLName)))); + + if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) + query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); + + + if (!string.IsNullOrEmpty(searchModel.ContactingPartyName)) + { + var personalContractingPIds = _context.PersonalContractingParties.Where(x => !string.IsNullOrEmpty(x.FName) && (x.FName + " " + x.LName).Contains(searchModel.ContactingPartyName)).Select(x => x.id).ToList(); + query = query.Where(x => personalContractingPIds.Contains(x.ContractingPartyID)); + } + + + if (searchModel.ContractingPartyID != 0) + query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); + + if (searchModel.Address == null) + { + query = query.Where(x => x.Address == "true"); + } + + if (searchModel.Address == "false") + { + query = query.Where(x => x.Address == "false"); + } + else if (searchModel.Address == "both") + { + query = query.Where(x => x.Address == "false" || x.Address == "true"); + } + + + + + return query.OrderByDescending(x => x.Id).ToList(); + } + + public List GetEmployerByEmployerIds(List employerIds) + { + return _context.Employers.Select(x => new EmprViewModel() + { + Id = x.id, + FName = x.FName, + LName = x.LName, + EmployerLName = x.EmployerLName, + IsLegal = x.IsLegal, + + //FullName = x.FName + " " + x.LName, + + }).Where(x => employerIds.Contains(x.Id)) + .ToList(); + } + + ///client + + public bool Remove(long id) + { + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + var employerAccountList = _context.EmployerAccounts.Where(x => x.EmployerId == id).ToList(); + _context.EmployerAccounts.RemoveRange(employerAccountList); + var employer = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); + _context.Employers.Remove(employer); + _context.SaveChanges(); + transaction.Commit(); + return true; + } + catch (Exception) + { + transaction.Rollback(); + return false; + } + } + } + + public bool CreateForClient(Employer command) + { + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + Create(command); + _context.SaveChanges(); + var acountID = _authHelper.CurrentAccountId(); + //خودش + var employerAccount = new EmployerAccount(); + employerAccount.AccountId = acountID; + employerAccount.EmployerId = command.id; + _context.EmployerAccounts.Add(employerAccount); + + if (acountID != 3) //آقای مصباح + { + employerAccount = new EmployerAccount(); + employerAccount.AccountId = 3; + employerAccount.EmployerId = command.id; + _context.EmployerAccounts.Add(employerAccount); + } + + if (acountID != 2) //آقای فرخی + { + employerAccount = new EmployerAccount(); + employerAccount.AccountId = 2; + employerAccount.EmployerId = command.id; + _context.EmployerAccounts.Add(employerAccount); + } + _context.SaveChanges(); + transaction.Commit(); + return true; + } + catch (Exception) + { + transaction.Rollback(); + return false; + } + } + } + public List SearchForClient(EmployerSearchModel searchModel) + { + + var acountID = _authHelper.CurrentAccountId(); + var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); + + + + var query = _context.Employers.Where(x => employerIds.Contains(x.id)).Include(x => x.ContractingParty) + .Select(x => new EmployerViewModel + { + Id = x.id, + FName = x.FName, + ContractingPartyID = x.ContractingPartyId, + LName = x.LName, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + EmployerLName = x.EmployerLName, + IsLegal = x.IsLegal, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + ContractingParty = x.ContractingParty.LName, + IsActive = x.IsActive, + Address = x.Address, + EmployerNo = x.EmployerNo, + + }); + + if (!string.IsNullOrWhiteSpace(searchModel.FName)) + query = query.Where(x => x.FName.Contains(searchModel.FName)); + if (!string.IsNullOrWhiteSpace(searchModel.LName)) + query = query.Where(x => x.LName.Contains(searchModel.LName)); + if (!string.IsNullOrWhiteSpace(searchModel.Nationalcode)) + query = query.Where(x => x.Nationalcode.Contains(searchModel.Nationalcode)); + if (!string.IsNullOrWhiteSpace(searchModel.IdNumber)) + query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumber)); + if (!string.IsNullOrWhiteSpace(searchModel.RegisterId)) + query = query.Where(x => x.RegisterId.Contains(searchModel.RegisterId)); + if (!string.IsNullOrWhiteSpace(searchModel.NationalId)) + query = query.Where(x => x.NationalId.Contains(searchModel.NationalId)); + if (!string.IsNullOrWhiteSpace(searchModel.EmployerLName)) + query = query.Where(x => x.EmployerLName.Contains(searchModel.EmployerLName)); + if (!string.IsNullOrWhiteSpace(searchModel.IsLegal)) + query = query.Where(x => x.IsLegal.Contains(searchModel.IsLegal)); + if (searchModel.ContractingPartyID != 0) + query = query.Where(x => x.ContractingPartyID == searchModel.ContractingPartyID); + if (searchModel.Address == null) + { + query = query.Where(x => x.Address == "true"); + } + + if (searchModel.Address == "false") + { + query = query.Where(x => x.Address == "false"); + } + else if (searchModel.Address == "both") + { + query = query.Where(x => x.Address == "false" || x.Address == "true"); + } + + return query.OrderByDescending(x => x.Id).ToList(); + } + public List GetEmployersForClient(long acountID) + { + // var acountID = _authHelper.CurrentAccountId(); + var employerIds = _context.EmployerAccounts.Where(x => x.AccountId == acountID).AsNoTracking().Select(x => x.EmployerId).ToList(); + + return _context.Employers.Where(x => employerIds.Contains(x.id) && x.IsActive == true).Select(x => new EmployerViewModel + { + Id = x.id, + + FName = x.FName, + LName = x.LName, + FullName = x.FullName, + Nationalcode = x.Nationalcode, + IdNumber = x.IdNumber, + RegisterId = x.RegisterId, + NationalId = x.NationalId, + IsLegal = x.IsLegal, + Phone = x.Phone, + AgentPhone = x.AgentPhone, + Address = x.Address + + }).ToList(); + } + public bool CreateLegalsForClient(Employer legalEmployerData) + { + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + Create(legalEmployerData); + _context.SaveChanges(); + var acountID = _authHelper.CurrentAccountId(); + //خودش + var employerAccount = new EmployerAccount(); + employerAccount.AccountId = acountID; + employerAccount.EmployerId = legalEmployerData.id; + _context.EmployerAccounts.Add(employerAccount); + + _context.SaveChanges(); + + if (acountID != 3) //آقای مصباح + { + employerAccount = new EmployerAccount(); + employerAccount.AccountId = 3; + employerAccount.EmployerId = legalEmployerData.id; + _context.EmployerAccounts.Add(employerAccount); + _context.SaveChanges(); + } + + if (acountID != 2) //آقای فرخی + { + employerAccount = new EmployerAccount(); + employerAccount.AccountId = 2; + employerAccount.EmployerId = legalEmployerData.id; + _context.EmployerAccounts.Add(employerAccount); + _context.SaveChanges(); + } + + + + transaction.Commit(); + return true; + } + catch (Exception ex) + { + transaction.Rollback(); + return false; + } + } + } + + public bool ExistsEmployerAccount(string commandNationalcode) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); + + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == commandNationalcode); + } + else + return false; + + } + + + public bool ExistsEmployerAccountNationalId(string commandNationalId) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == commandNationalId); + } + else + return false; + } + + public bool ExistsEmployerAccountById(string nationalcode, long commandId) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.Nationalcode == nationalcode); + } + else + return false; + } + + public bool ExistsEmployerAccountNationalIdEmployerId(string nationalId, long commandId) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID && x.EmployerId != commandId).Select(x => x.EmployerId).ToList(); + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.NationalId == nationalId); + } + else + return false; + + } + + public bool ExistsEmployerAccountRegisterId(string commandRegisterId) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.RegisterId == commandRegisterId); + } + else + return false; + } + + public bool ExistsEmployerAccountLName(string commandLName) + { + var acountID = _authHelper.CurrentAccountId(); + var employerIdstList = _context.EmployerAccounts.Where(x => x.AccountId == acountID).Select(x => x.EmployerId).ToList(); + if (employerIdstList != null && employerIdstList.Count > 0) + { + return _context.Employers.Any(x => employerIdstList.Contains(x.id) && x.LName == commandLName); + } + else + return false; + } + + #region Mahan + + public List GetEmployersHasWorkshop() + { + return _context.WorkshopEmployers.Include(x => x.Employer).Select(x => + new EmployerViewModel() + { + FullName = x.Employer.FullName, + Id = x.Employer.id + }).ToList(); + } + + public async Task> GetSelectList(string search) + { + var query = _context.Employers.Select(x => new EmployerSelectListViewModel() + { + Id = x.id, + Name = x.FullName + }); + if (!string.IsNullOrWhiteSpace(search)) + { + query = query.Where(x => x.Name.Contains(search)); + } + + return await query.Take(100).ToListAsync(); + } + + #endregion + + #region NewByHeydari + public OperationResult DeleteEmployer(long id) + { + var op = new OperationResult(); + try + { + var personalContractingParties = _context.Employers.Where(x => x.id == id)?.FirstOrDefault(); + _context.Employers.Remove(personalContractingParties); + _context.SaveChanges(); + return op.Succcedded(-1, "حذف با موفقیت انجام شد."); + } + catch (Exception) + { + return op.Failed("حذف با خطا مواجه شد."); + } + } + + public List GetEmployerWithFNameOrLName(string searchText) + { + var result = _context.Employers.Where(x => (!string.IsNullOrEmpty(x.FName) && x.FName.StartsWith(searchText)) || + (!string.IsNullOrEmpty(x.LName) && x.LName.StartsWith(searchText)) || + (x.IsLegal == "حقیقی" && (!string.IsNullOrEmpty(x.FName) && !string.IsNullOrEmpty(x.LName)) && + (x.FName + " " + x.LName).Contains(searchText))) + .Select(x => new EmployerViewModel + { + Id = x.id, + LName = (x.IsLegal == "حقیقی" ? x.FullName : x.LName), + }).Take(100).ToList(); + + return result; + } + public List GetEmployerWithIdNumberOrRegisterId(string searchText) + { + var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.IdNumber) && x.IdNumber.StartsWith(searchText)) + || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.RegisterId) && x.RegisterId.StartsWith(searchText))) + .Select(x => new EmployerViewModel + { + Id = x.id, + IdNumber = (x.IsLegal == "حقیقی" ? x.IdNumber : x.RegisterId), + }).Take(100).ToList(); + + return result; + } + public List GetEmployerWithNationalcodeOrNationalId(string searchText) + { + var result = _context.Employers.Where(x => (x.IsLegal == "حقیقی" && !string.IsNullOrEmpty(x.Nationalcode) && x.Nationalcode.StartsWith(searchText)) + || (x.IsLegal == "حقوقی" && !string.IsNullOrEmpty(x.NationalId) && x.NationalId.StartsWith(searchText))) + .Select(x => new EmployerViewModel + { + Id = x.id, + Nationalcode = (x.IsLegal == "حقیقی" ? x.Nationalcode : x.NationalId), + }).Take(100).ToList(); + + return result; + } + + public OperationResult DeActiveAll(long id) + { + OperationResult result = new OperationResult(); + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + + + var employer = _context.Employers.FirstOrDefault(x => x.id == id); + employer.DeActive(); + + var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); + var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); + workshops.ForEach(x => x.DeActive(x.ArchiveCode)); + + var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); + contracts.ForEach(x => x.DeActive()); + + var contractIds = contracts.Select(x => x.id).ToList(); + var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); + checkouts.ForEach(x => x.DeActive()); + + _context.SaveChanges(); + transaction.Commit(); + result.Failed("DeActive"); + } + catch (Exception) + { + result.Failed("غیرفعال کردن کارفرما با خطا مواجه شد"); + transaction.Rollback(); + } + } + + return result; + } + + public OperationResult ActiveAll(long id) + { + OperationResult result = new OperationResult(); + using (var transaction = _context.Database.BeginTransaction()) + { + try + { + var employer = _context.Employers.FirstOrDefault(x => x.id == id); + employer.Active(); + + var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId).ToList(); + var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList(); + workshops.ForEach(x => x.Active(x.ArchiveCode)); + + var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList(); + contracts.ForEach(x => x.Active()); + + var contractIds = contracts.Select(x => x.id).ToList(); + var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList(); + checkouts.ForEach(x => x.Active()); + + _context.SaveChanges(); + transaction.Commit(); + result.Succcedded(); + } + catch (Exception) + { + result.Failed("فعال کردن کارفرما با خطا مواجه شد"); + transaction.Rollback(); + } + } + + return result; + } + public List GetAllEmployers() + { + return _context.Employers.Select(x => new EmployerViewModel + { + Id = x.id, + FName = x.FName, + LName = x.LName, + FullName = x.FullName, + Nationalcode = x.Nationalcode, + //IdNumber = x.IdNumber, + //RegisterId = x.RegisterId, + NationalId = x.NationalId, + IsLegal = x.IsLegal, + }).ToList(); + } #endregion #region Insurance - /// - /// نام کارفرما - /// وضعیت حقیقی حقوقی - /// - /// - /// + /// + /// نام کارفرما + /// وضعیت حقیقی حقوقی + /// + /// + /// public (string employerName, bool isLegal) InsuranceEmployerByWorkshopId(long workshopId) { var res = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId) @@ -757,32 +758,236 @@ public class EmployerRepository : RepositoryBase, IEmployerRepos { //EmployerFullName = x.Employer.IsLegal == "حقوقی" ? // (x.Employer.EmployerLName != "#" ? x.Employer.FName + " " + x.Employer.EmployerLName: x.Employer.LName) : x.Employer.FullName, - FName = x.Employer.FName, - LName = x.Employer.LName, - EmployerLName = x.Employer.EmployerLName, - EmployerFullName = x.Employer.FullName, - IsLegal = x.Employer.IsLegal, + FName = x.Employer.FName, + LName = x.Employer.LName, + EmployerLName = x.Employer.EmployerLName, + EmployerFullName = x.Employer.FullName, + IsLegal = x.Employer.IsLegal, }); string employer = ""; - bool isLegal = res.Any(x=>x.IsLegal == "حقوقی"); - //اگر حقوقی بود نام همان کارفرما کافیست - if (isLegal) - { - var legalEmloyer = res.FirstOrDefault(x => x.IsLegal == "حقوقی"); - employer = legalEmloyer.EmployerLName != "#" ? legalEmloyer.FName + " " + legalEmloyer.EmployerLName : legalEmloyer.LName; - return (employer,true); + bool isLegal = res.Any(x => x.IsLegal == "حقوقی"); + //اگر حقوقی بود نام همان کارفرما کافیست + if (isLegal) + { + var legalEmloyer = res.FirstOrDefault(x => x.IsLegal == "حقوقی"); + employer = legalEmloyer.EmployerLName != "#" ? legalEmloyer.FName + " " + legalEmloyer.EmployerLName : legalEmloyer.LName; + return (employer, true); } - - //در غیر این صورت رشته ای از نام کارفرماها ساخته می شود - foreach (var item in res) - employer += (item.EmployerFullName + ","); - - employer = employer.Substring(0, employer.Length - 1); + //در غیر این صورت رشته ای از نام کارفرماها ساخته می شود + foreach (var item in res) + employer += (item.EmployerFullName + ","); - return (employer,false); + + employer = employer.Substring(0, employer.Length - 1); + + return (employer, false); + } + + #endregion + #region Api + public async Task> GetEmployerList(GetEmployerSearchModel searchModel) + { + var query = _context.Employers.Include(x => x.ContractingParty).Include(x => x.WorkshopEmployers).ThenInclude(x => x.Workshop).AsQueryable(); + + if (!string.IsNullOrWhiteSpace(searchModel.FullNameOrCompanyName)) + query = query.Where(x => x.FullName.Contains(searchModel.FullNameOrCompanyName)); + + + if (!string.IsNullOrWhiteSpace(searchModel.NationalCodeOrNationalId)) + query = query.Where(x => x.Nationalcode.Contains(searchModel.NationalCodeOrNationalId) || x.NationalId.Contains(searchModel.NationalCodeOrNationalId)); + + if (!string.IsNullOrWhiteSpace(searchModel.IdNumberOrRegisterId)) + query = query.Where(x => x.IdNumber.Contains(searchModel.IdNumberOrRegisterId) || x.RegisterId.Contains(searchModel.IdNumberOrRegisterId)); + + + if (searchModel.EmployerType != LegalType.None) + { + var type = searchModel.EmployerType switch + { + LegalType.Legal => "true", + LegalType.Real => "false", + _ => "", + }; + + query = query.Where(x => x.IsLegal == type); + } + + if (searchModel.EmployerStatus != ActivationStatus.None) + { + var status = searchModel.EmployerStatus switch + { + ActivationStatus.Active => true, + ActivationStatus.DeActive => false, + _ => false + }; + query = query.Where(x => x.IsActive == status); + } + + if (!string.IsNullOrEmpty(searchModel.ContractingPartyName)) + { + query = query.Where(x => + x.ContractingParty.IsLegal == "true" + ? (x.ContractingParty.LName).Contains(searchModel.ContractingPartyName) + : (x.ContractingParty.FName + " " + x.ContractingParty.LName).Contains(searchModel + .ContractingPartyName)); + } + + var employerList = await query.Select(x => new GetEmployerListViewModel() + { + Id = x.id, + FullName = x.FullName, + HasContractingParty = x.ContractingPartyId == 30428 && x.WorkshopEmployers.Any(), + HasBlockContractingParty = x.ContractingParty.IsBlock == "true", + NationalCodeOrNationalId = x.IsLegal == "true" ? x.NationalId : x.Nationalcode, + WorkshopNames = x.WorkshopEmployers.Select(w => w.Workshop.WorkshopFullName).ToList(), + LegalType = x.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal, + EmployerStatus = x.IsActive ? ActivationStatus.Active : ActivationStatus.DeActive, + + }).Skip(searchModel.PageIndex).Take(30).ToListAsync(); + return employerList; + } + + public async Task GetLegalEmployerDetail(long id) + { + var employer = await _context.Employers.Where(x => x.IsLegal == "حقوقی").Include(x => x.ContractingParty).Select(x => + new GetLegalEmployerDetailViewModel() + { + Id = x.id, + CompanyName = x.LName, + ContractingPartyName = x.ContractingParty.FName + " " + x.ContractingParty.LName, + DateOfBirth = x.DateOfBirth.ToFarsi(), + DateOfIssue = x.DateOfIssue.ToFarsi(), + CeoFullName = x.FName + " " + x.EmployerLName, + EmployerNo = x.EmployerNo, + FatherName = x.FatherName, + GenderStr = x.Gender, + Gender = string.IsNullOrWhiteSpace(x.Gender) ? Gender.None : x.Gender == "مرد" ? Gender.Male : Gender.Female, + NationalCode = x.Nationalcode, + IdNumber = x.IdNumber, + NationalId = x.NationalId, + Nationality = x.Nationality, + PhoneNumber = x.Phone, + PlaceOfIssue = x.PlaceOfIssue, + RegisterId = x.RegisterId, + TelephoneNumber = x.AgentPhone, + CeoFName = x.FName, + CeoLName = x.EmployerLName, + GovernmentSystemInfo = new GovernmentSystemInfo + { + EServicePassword = x.EservicePassword, + EServiceUsername = x.EservicePassword, + MclPassword = x.MclsPassword, + MclUsername = x.MclsUserName, + SanaUsername = x.SanaUserName, + SanaPassword = x.SanaPassword, + TaxUsername = x.TaxOfficeUserName, + TaxPassword = x.TaxOfficepassword + }, + ContractingPartyId = x.ContractingPartyId + }).FirstOrDefaultAsync(x => x.Id == id); + + return employer; + } + + public async Task GetRealEmployerDetail(long id) + { + var employer = await _context.Employers.Where(x => x.IsLegal == "حقیقی").Include(x => x.ContractingParty).Select(x => + new GetRealEmployerDetailViewModel() + { + Id = x.id, + ContractingPartyName = x.ContractingParty.FName + " " + x.ContractingParty.LName, + DateOfBirth = x.DateOfBirth.ToFarsi(), + DateOfIssue = x.DateOfIssue.ToFarsi(), + EmployerNo = x.EmployerNo, + FatherName = x.FatherName, + GenderStr = x.Gender, + Gender = string.IsNullOrWhiteSpace(x.Gender) ? Gender.None : + x.Gender == "مرد" ? + Gender.Male : + Gender.Female, + NationalCode = x.Nationalcode, + IdNumber = x.IdNumber, + Nationality = x.Nationality, + PhoneNumber = x.Phone, + PlaceOfIssue = x.PlaceOfIssue, + TelephoneNumber = x.AgentPhone, + FullName = x.FullName, + FName = x.FName, + LName = x.LName, + GovernmentSystemInfo = new GovernmentSystemInfo + { + EServicePassword = x.EservicePassword, + EServiceUsername = x.EservicePassword, + MclPassword = x.MclsPassword, + MclUsername = x.MclsUserName, + SanaUsername = x.SanaUserName, + SanaPassword = x.SanaPassword, + TaxUsername = x.TaxOfficeUserName, + TaxPassword = x.TaxOfficepassword + }, + ContractingPartyId = x.ContractingPartyId + }).FirstOrDefaultAsync(x => x.Id == id); + + return employer; + } + + public async Task> DeactivateWithSubordinates(long id) + { + var op = new OperationResult(); + ; + using (var transaction = await _context.Database.BeginTransactionAsync()) + { + try + { + var employer = await _context.Employers + .Include(x => x.Contracts) + .Include(x => x.WorkshopEmployers) + .ThenInclude(x => x.Workshop) + .ThenInclude(x => x.Checkouts).FirstOrDefaultAsync(x => x.id == id); + if (employer == null) + { + return op.Failed("چنین آیتمی وجود ندارد"); + } + + + var workshops = employer.WorkshopEmployers.Select(x => x.Workshop).ToList(); + + var contracts = employer.Contracts.ToList(); + + var checkouts = workshops.SelectMany(x => x.Checkouts).ToList(); + + + employer.DeActive(); + + foreach (var workshop in workshops) + { + workshop.DeActive(workshop.ArchiveCode); + } + + foreach (var contract in contracts) + { + contract.DeActive(); + } + + foreach (var checkout in checkouts) + { + checkout.DeActive(); + } + + await _context.SaveChangesAsync(); + + await transaction.CommitAsync(); + return op.Succcedded("DeActivate"); + } + catch (Exception) + { + await transaction.RollbackAsync(); + return op.Failed("غیرفعال کردن کارفرما با خطا مواجه شد"); + } + } } #endregion diff --git a/ServiceHost/Areas/Admin/Controllers/EmployerController.cs b/ServiceHost/Areas/Admin/Controllers/EmployerController.cs new file mode 100644 index 00000000..3a75ccc0 --- /dev/null +++ b/ServiceHost/Areas/Admin/Controllers/EmployerController.cs @@ -0,0 +1,123 @@ +using _0_Framework.Application; +using CompanyManagment.App.Contracts.Employer; +using Microsoft.AspNetCore.Mvc; +using ServiceHost.BaseControllers; + +namespace ServiceHost.Areas.Admin.Controllers; + +public class EmployerController : AdminController +{ + private readonly IEmployerApplication _employerApplication; + + public EmployerController(IEmployerApplication employerApplication) + { + _employerApplication = employerApplication; + } + + + /// + /// لیست کارفرما + /// + /// + /// + [HttpGet] + public async Task>> GetList(GetEmployerSearchModel searchModel) + { + return await _employerApplication.GetEmployerList(searchModel); + } + + /// + /// جزئیات کارفرمای حقوقی + /// + /// + /// + [HttpGet("legal/{id}")] + public async Task> GetLegalEmployer(long id) + { + var employerDetail = await _employerApplication.GetLegalEmployerDetail(id); + return employerDetail; + } + + /// + /// جزئیات کارفرمای حقیقی + /// + /// + /// + [HttpGet("real/{id}")] + public async Task> GetRealEmployer(long id) + { + var employerDetail = await _employerApplication.GetRealEmployerDetail(id); + return employerDetail; + } + + /// + /// ایجاد کارفرمای حقیقی + /// + /// + /// + [HttpPost("real")] + public async Task> CreateRealEmployer([FromBody] CreateRealEmployer command) + { + var result = await _employerApplication.CreateReal(command); + return result; + } + + /// + /// ایجاد کارفرما حقوقی + /// + /// + /// + [HttpPost("legal")] + public async Task> CreateLegalEmployer([FromBody] CreateLegalEmployer command) + { + var result = await _employerApplication.CreateLegal(command); + + return result; + } + + /// + /// ویرایش کارفرما حقیقی + /// + /// + /// + [HttpPut("real")] + public async Task> EditRealEmployer([FromBody] EditRealEmployer command) + { + var result = await _employerApplication.EditReal(command); + return result; + } + /// + /// ویرایش کارفرما حقوقی + /// + /// + /// + [HttpPut("legal")] + public async Task> EditLegalEmployer([FromBody] EditLegalEmployer command) + { + var result = await _employerApplication.EditLegal(command); + return result; + } + + /// + /// حذف کارفرما - درصورت داشتن کارگاه، کارفرما غیرفعال میشود + /// + /// + /// + [HttpDelete("{id}")] + public async Task>> Remove(long id) + { + var result = await _employerApplication.RemoveApi(id); + return result; + } + + /// + /// سلکت لیست کارفرما برای جستجو + /// + /// + [HttpGet("select_list")] + public async Task> GetSelectList(string search) + { + return await _employerApplication.GetSelectList(search); + } + +} \ No newline at end of file