using System; using System.Collections.Generic; using System.Threading.Tasks; using _0_Framework.Application; using CompanyManagment.App.Contracts.PersonalContractingParty; using Company.Domain.ContarctingPartyAgg; using Company.Domain.empolyerAgg; using CompanyManagment.App.Contracts.Representative; using Company.Domain.InstitutionContractAgg; using CompanyManagment.EFCore.Repository; namespace CompanyManagment.Application; public class PersonalContractingPartyApplication : IPersonalContractingPartyApp { private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository; private readonly IRepresentativeApplication _representativeApplication; private readonly IEmployerRepository _employerRepository; private readonly IInstitutionContractRepository _institutionContractRepository; public bool nationalCodValid=false; public bool idnumberIsOk = true; public bool nameIsOk = true; public bool nationalcodeIsOk = true; public bool legalNameIsOk = true; public bool registerIdIsOk = true; public bool nationalIdIsOk = true; public PersonalContractingPartyApplication( IPersonalContractingPartyRepository personalContractingPartyRepository, IRepresentativeApplication representativeApplication, IEmployerRepository employerRepository, IInstitutionContractRepository institutionContractRepository) { _personalContractingPartyRepository = personalContractingPartyRepository; _representativeApplication = representativeApplication; _employerRepository = employerRepository; _institutionContractRepository = institutionContractRepository; } public OperationResult Create(CreatePersonalContractingParty command) { var opration = new OperationResult(); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.Nationalcode == command.Nationalcode && x.SureName == command.SureName )) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); //if (_personalContractingPartyRepository2.Exists(x => x.IdNumber == command.IdNumber)) //{ // idnumberIsOk = false; // return opration.Failed("شماره شناسنامه وارد شده تکراری است"); //} //if (_personalContractingPartyRepository2.Exists(x => x.LName == command.LName)) //{ // nameIsOk = false; // return opration.Failed("نام خانوادگی وارد شده تکراری است"); //} if (_personalContractingPartyRepository.Exists(x => x.Nationalcode == command.Nationalcode && x.LName != command.LName)) { nationalcodeIsOk = false; return opration.Failed("کد ملی وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode)) return opration.Failed("کد طرف حساب تکراری است"); try { char[] chArray = command.Nationalcode.ToCharArray(); int[] numArray = new int[chArray.Length]; var cunt = chArray.Length; for (int i = 0; i < chArray.Length; i++) { numArray[i] = (int)char.GetNumericValue(chArray[i]); } int num2 = numArray[9]; switch (command.Nationalcode) { case "0000000000": case "1111111111": case "2222222222": case "3333333333": case "4444444444": case "5555555555": case "6666666666": case "7777777777": case "8888888888": case "9999999999": nationalCodValid = false; return opration.Failed("کد ملی وارد شده صحیح نمی باشد"); } int num3 = ((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) + (numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) + (numArray[8] * 2); int num4 = num3 - ((num3 / 11) * 11); if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) || ((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10) { nationalCodValid = true; } else { nationalCodValid = false; return opration.Failed("کد ملی وارد شده نا معتبر است"); } } catch (Exception) { nationalCodValid = false; return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید"); } if (nationalCodValid && nationalcodeIsOk) { var representative = _representativeApplication.GetDetails(command.RepresentativeId); var personalContractingParty = new PersonalContractingParty(command.FName, command.LName, command.Nationalcode, command.IdNumber, "*", "*", "حقیقی", command.Phone, command.AgentPhone, command.Address,command.RepresentativeId,representative.FullName,command.ArchiveCode, command.State,command.City,command.Zone,command.SureName,null,null); _personalContractingPartyRepository.Create(personalContractingParty); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } else { return opration.Failed("خطایی رخ داده است"); } } public OperationResult Edit2(EditPersonalContractingParty command) { var opration = new OperationResult(); var personalContractingParty = _personalContractingPartyRepository.Get(command.Id); if (personalContractingParty == null) return opration.Failed("رکورد مورد نظر یافت نشد"); personalContractingParty.Edit2(command.Address); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } public OperationResult CreateLegals(CreatePersonalContractingParty command) { var opration = new OperationResult(); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.RegisterId == command.RegisterId && x.SureName == command.SureName)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.SureName == command.SureName)) { legalNameIsOk = false; return opration.Failed("نام شرکت وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.RegisterId == command.RegisterId && x.LName != command.LName)) { registerIdIsOk = false; return opration.Failed("شماره ثبت وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.NationalId == command.NationalId && x.LName != command.LName)) { nationalIdIsOk = false; return opration.Failed("شناسه ملی وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode)) return opration.Failed("کد طرف حساب تکراری است"); if (legalNameIsOk && registerIdIsOk && nationalIdIsOk) { var representative = _representativeApplication.GetDetails(command.RepresentativeId); var legalContractingParty = new PersonalContractingParty("*", command.LName, "*", "*", command.RegisterId, command.NationalId, "حقوقی", command.Phone, command.AgentPhone, command.Address,command.RepresentativeId, representative.FullName,command.ArchiveCode, command.State, command.City, command.Zone,command.SureName,null,null); _personalContractingPartyRepository.Create(legalContractingParty); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } else { return opration.Failed("خطایی رخ داده است"); } } public OperationResult Edit(EditPersonalContractingParty command) { var opration = new OperationResult(); var personalContractingParty = _personalContractingPartyRepository.Get(command.Id); if (personalContractingParty == null) return opration.Failed("رکورد مورد نظر یافت نشد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.Nationalcode == command.Nationalcode && x.SureName == command.SureName && x.id != command.Id)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode && x.id != command.Id)) return opration.Failed("کد طرف حساب تکراری است"); try { char[] chArray = command.Nationalcode.ToCharArray(); int[] numArray = new int[chArray.Length]; var cunt = chArray.Length; for (int i = 0; i < chArray.Length; i++) { numArray[i] = (int)char.GetNumericValue(chArray[i]); } int num2 = numArray[9]; switch (command.Nationalcode) { case "0000000000": case "1111111111": case "22222222222": case "33333333333": case "4444444444": case "5555555555": case "6666666666": case "7777777777": case "8888888888": case "9999999999": nationalCodValid = false; return opration.Failed("کد ملی وارد شده صحیح نمی باشد"); } int num3 = ((((((((numArray[0] * 10) + (numArray[1] * 9)) + (numArray[2] * 8)) + (numArray[3] * 7)) + (numArray[4] * 6)) + (numArray[5] * 5)) + (numArray[6] * 4)) + (numArray[7] * 3)) + (numArray[8] * 2); int num4 = num3 - ((num3 / 11) * 11); if ((((num4 == 0) && (num2 == num4)) || ((num4 == 1) && (num2 == 1))) || ((num4 > 1) && (num2 == Math.Abs((int)(num4 - 11)))) && cunt <= 10) { nationalCodValid = true; } else { nationalCodValid = false; return opration.Failed("کد ملی وارد شده نا معتبر است"); } } catch (Exception) { nationalCodValid = false; return opration.Failed("لطفا کد ملی 10 رقمی وارد کنید"); } if (nationalCodValid) { var representative = _representativeApplication.GetDetails(command.RepresentativeId); personalContractingParty.Edit(command.FName, command.LName, command.Nationalcode, command.IdNumber, command.Phone, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName, command.ArchiveCode, command.State, command.City, command.Zone,command.SureName); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } else { return opration.Failed("خطایی رخ داده است"); } } public OperationResult EditLegal(EditPersonalContractingParty command) { var opration = new OperationResult(); var legalContractingParty = _personalContractingPartyRepository.Get(command.Id); if (legalContractingParty == null) return opration.Failed("رکورد مورد نظر یافت نشد"); if (_personalContractingPartyRepository.Exists(x => x.LName== command.LName && x.RegisterId == command.RegisterId &&x.SureName == command.SureName &&x.id != command.Id)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode && x.id != command.Id)) return opration.Failed("کد طرف حساب تکراری است"); var representative = _representativeApplication.GetDetails(command.RepresentativeId); legalContractingParty.EditLegal(command.LName, command.RegisterId, command.NationalId, command.Phone, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName,command.ArchiveCode, command.State, command.City, command.Zone, command.SureName); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } public EditPersonalContractingParty GetDetails(long id) { return _personalContractingPartyRepository.GetDetails(id); } public string IsBlockByEmployerId(long employerId) { return _personalContractingPartyRepository.IsBlockByEmployerId(employerId); } public EditPersonalContractingParty GetDetailsToEdit(long id) { return _personalContractingPartyRepository.GetDetailsToEdit(id); } public string GetFullName(long id) { return _personalContractingPartyRepository.GetFullName(id); } public List GetPersonalContractingParties() { return _personalContractingPartyRepository.GetPersonalContractingParties(); } public List Search(PersonalContractingPartySearchModel searchModel2) { return _personalContractingPartyRepository.Search(searchModel2); } public int GetLastArchiveCode() { return _personalContractingPartyRepository.GetLastNewArchiveCode(); } #region Mahan public List SearchByName(string name) { return _personalContractingPartyRepository.SearchByName(name); } #endregion public ContractingPartyAndStatmentIdViewModel GetContractingpartyIdByAccountId(long accountId) { return _personalContractingPartyRepository.GetContractingpartyIdByAccountId(accountId); } #region NewByHeydari public List GetPersonalContractingPartiesForNationalcode(string searchText) { return _personalContractingPartyRepository.GetPersonalContractingPartiesForNationalcode(searchText); } public List SearchForMain(PersonalContractingPartySearchModel searchModel2) { var result= _personalContractingPartyRepository.SearchForMain(searchModel2); foreach (var item in result) { item.HasInstitutionContract = _personalContractingPartyRepository.GetHasContract(item.id); } return result; } public OperationResult DeletePersonalContractingParties(long id) { var opration = new OperationResult(); //همان لحظه قبل از آیا از حذف مطمئن هستید، پیغام باید نماییش داده شود که قرارداد مالی دارد //if (_personalContractingPartyRepository2.GetHasContract(id)) //{ // return opration.Failed("HasInstitutionContract"); //} //اونهایی که کارفرما یا قرارداد غیر فعال دارند غیر فعال می شوند if (_employerRepository.Exists(x => x.ContractingPartyId == id)|| _institutionContractRepository.Exists(x => x.ContractingPartyId == id)) { opration= _personalContractingPartyRepository.DeActiveAll(id); return opration; } else { opration = _personalContractingPartyRepository.DeletePersonalContractingParties(id); } return opration; } public OperationResult Active(long id) { var opration = new OperationResult(); var contract = _personalContractingPartyRepository.Get(id); if (contract == null) return opration.Failed("رکورد مورد نظر یافت نشد"); return _personalContractingPartyRepository.ActiveAll(id); //var opration = new OperationResult(); //var contract = _personalContractingPartyRepository2.Get(id); //if (contract == null) // return opration.Failed("رکورد مورد نظر یافت نشد"); //contract.Active(); //_personalContractingPartyRepository2.SaveChanges(); //return opration.Succcedded(); } public OperationResult DeActive(long id) { var opration = new OperationResult(); var personalContracting = _personalContractingPartyRepository.Get(id); if (personalContracting == null) return opration.Failed("رکورد مورد نظر یافت نشد"); personalContracting.DeActive(); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } public bool GetHasContract(long id) { return _personalContractingPartyRepository.GetHasContract(id); } public OperationResult Block(long id) { var opration = new OperationResult(); var contract = _personalContractingPartyRepository.Get(id); if (contract == null) return opration.Failed("رکورد مورد نظر یافت نشد"); contract.Block(); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } public OperationResult DisableBlock(long id) { var opration = new OperationResult(); var personalContracting = _personalContractingPartyRepository.Get(id); if (personalContracting == null) return opration.Failed("رکورد مورد نظر یافت نشد"); int blockTimes = personalContracting.BlockTimes + 1; personalContracting.DisableBlock(blockTimes); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } #endregion #region Insurance public bool IsBlockCheckByWorkshopId(long workshopId) { return _personalContractingPartyRepository.IsBlockCheckByWorkshopId(workshopId); } #endregion #region Api public async Task> GetList( ContractingPartyGetListSearchModel searchModel) { return await _personalContractingPartyRepository.GetList(searchModel); } public async Task> GetSelectList(string search,long id) { return await _personalContractingPartyRepository.GetSelectList(search,id); } public async Task CreateReal(CreateRealContractingParty command) { var operation = new OperationResult(); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.Nationalcode == command.NationalCode && x.SureName == command.SureName)) return operation.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return operation.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.Nationalcode == command.NationalCode && x.LName != command.LName)) { nationalcodeIsOk = false; return operation.Failed("کد ملی وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode)) return operation.Failed("کد طرف حساب تکراری است"); if (command.NationalCode.NationalCodeValid() != "valid") { return operation.Failed("کد ملی وارد شده نا معتبر است"); } var representative = _representativeApplication.GetDetails(command.RepresentativeId); var personalContractingParty = new PersonalContractingParty(command.FName, command.LName, command.NationalCode, command.IdNumber, "*", "*", "حقیقی", command.PhoneNumber, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName, command.ArchiveCode, command.State, command.City, command.Zone, command.SureName, null, null); await _personalContractingPartyRepository.CreateAsync(personalContractingParty); await _personalContractingPartyRepository.SaveChangesAsync(); return operation.Succcedded(); } public async Task CreateLegal(CreateLegalContractingParty command) { var opration = new OperationResult(); if (_personalContractingPartyRepository.Exists(x => x.LName == command.CompanyName && x.RegisterId == command.RegisterId && x.SureName == command.SureName)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.LName == command.CompanyName && x.SureName == command.SureName)) { legalNameIsOk = false; return opration.Failed("نام شرکت وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.RegisterId == command.RegisterId && x.LName != command.CompanyName)) { registerIdIsOk = false; return opration.Failed("شماره ثبت وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.NationalId == command.NationalId && x.LName != command.CompanyName)) { nationalIdIsOk = false; return opration.Failed("شناسه ملی وارد شده تکراری است"); } if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode)) return opration.Failed("کد طرف حساب تکراری است"); var representative = _representativeApplication.GetDetails(command.RepresentativeId); var legalContractingParty = new PersonalContractingParty("*", command.CompanyName, "*", "*", command.RegisterId, command.NationalId, "حقوقی", command.PhoneNumber, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName, command.ArchiveCode, command.State, command.City, command.Zone, command.SureName,null,null); await _personalContractingPartyRepository.CreateAsync(legalContractingParty); await _personalContractingPartyRepository.SaveChangesAsync(); return opration.Succcedded(); } public async Task> GetNationalCodeOrNationalId() { return await _personalContractingPartyRepository.GetNationalCodeOrNationalId(); } public async Task> Delete(long id) { var operationResult = new OperationResult(); try { //اگر دارای قرارداد یا دازای کارفرما باشد غیر فعال می شود if (_employerRepository.Exists(x => x.ContractingPartyId == id) || _institutionContractRepository.Exists(x => x.ContractingPartyId == id)) { operationResult = await _personalContractingPartyRepository.DeactivateWithSubordinates(id); return operationResult; } var entity = _personalContractingPartyRepository.Get(id); _personalContractingPartyRepository.Remove(entity); operationResult.Succcedded("Deleted"); } catch { return operationResult.Failed("خطایی رخ داده است"); } return operationResult; } public OperationResult EditRealApi(EditRealContractingParty command) { var opration = new OperationResult(); var personalContractingParty = _personalContractingPartyRepository.Get(command.Id); if (personalContractingParty == null) return opration.Failed("رکورد مورد نظر یافت نشد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.LName == command.LName && x.Nationalcode == command.NationalCode && x.SureName == command.SureName && x.id != command.Id)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode && x.id != command.Id)) return opration.Failed("کد طرف حساب تکراری است"); if (command.NationalCode.NationalCodeValid() != "valid") { return opration.Failed("کد ملی وارد شده نا معتبر است"); } try { var representative = _representativeApplication.GetDetails(command.RepresentativeId); personalContractingParty.Edit(command.FName, command.LName, command.NationalCode, command.IdNumber, command.PhoneNumber, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName, command.ArchiveCode, command.State, command.City, command.Zone, command.SureName); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } catch { return opration.Failed("خطایی رخ داده است"); } } public OperationResult EditLegal(EditLegalContractingParty command) { var opration = new OperationResult(); var legalContractingParty = _personalContractingPartyRepository.Get(command.Id); if (legalContractingParty == null) return opration.Failed("رکورد مورد نظر یافت نشد"); if (_personalContractingPartyRepository.Exists(x => x.LName == command.CompanyName && x.RegisterId == command.RegisterId && x.SureName == command.SureName && x.id != command.Id)) return opration.Failed("امکان ثبت رکورد تکراری وجود ندارد"); if (command.RepresentativeId < 1) return opration.Failed("لطفا معرف را انتخاب کنید"); if (_personalContractingPartyRepository.Exists(x => x.ArchiveCode == command.ArchiveCode && x.id != command.Id)) return opration.Failed("کد طرف حساب تکراری است"); var representative = _representativeApplication.GetDetails(command.RepresentativeId); legalContractingParty.EditLegal(command.CompanyName, command.RegisterId, command.NationalId, command.PhoneNumber, command.AgentPhone, command.Address, command.RepresentativeId, representative.FullName, command.ArchiveCode, command.State, command.City, command.Zone, command.SureName); _personalContractingPartyRepository.SaveChanges(); return opration.Succcedded(); } public async Task GetRealDetails(long id) { return await _personalContractingPartyRepository.GetRealDetails(id); } public async Task GetLegalDetails(long id) { return await _personalContractingPartyRepository.GetLegalDetails(id); } public async Task GetRepresentativeIdByNationalCode(string nationalCode) { var entity = await _personalContractingPartyRepository.GetByNationalCode(nationalCode); return entity?.RepresentativeId??0; } #endregion }