Files
Backend-Api/CompanyManagment.EFCore/Repository/EmployerRepository.cs

1134 lines
44 KiB
C#

using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.InfraStructure;
using Company.Domain.EmployerAccountAgg;
using Company.Domain.empolyerAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Exceptions;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.Packaging.Ionic.Zip;
namespace CompanyManagment.EFCore.Repository;
public class EmployerRepository : RepositoryBase<long, Employer>, IEmployerRepository
{
private readonly CompanyContext _context;
private readonly IAuthHelper _authHelper;
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 List<EmployerViewModel> 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
}).ToList();
}
public List<EmployerViewModel> GetEmployers(List<long> 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<EmployerViewModel>();
//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
// })
// .FirstOrDefault(x=>x.Id == item);
// empList.Add(e);
//}
//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
})
.FirstOrDefault(x => x.Id == id);
}
public List<EmprViewModel> 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 employerlist = _context.Employers.Where(x => emps.Contains(x.id)).ToList();
//var employers = new List<EmprViewModel>();
//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<EmployerViewModel> 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<EmployerViewModel> 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<EmprViewModel> GetEmployerByEmployerIds(List<long> 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<EmployerViewModel> 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<EmployerViewModel> 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<EmployerViewModel> GetEmployersHasWorkshop()
{
return _context.WorkshopEmployers.Include(x => x.Employer).Select(x =>
new EmployerViewModel()
{
FullName = x.Employer.FullName,
Id = x.Employer.id
}).ToList();
}
public async Task<List<EmployerSelectListViewModel>> GetSelectList(string search, long id, LegalType? legalType)
{
var query = _context.Employers.AsQueryable();
if (legalType != null)
{
var legalTypeValue = legalType == LegalType.Real ? "حقیقی" : "حقوقی";
query = query.Where(x => x.IsLegal == legalTypeValue);
}
var viewModelQuery = query.Select(x => new EmployerSelectListViewModel()
{
Id = x.id,
Name = x.FullName
});
EmployerSelectListViewModel idSelected = null;
if (id > 0)
{
idSelected = await viewModelQuery.FirstOrDefaultAsync(x => x.Id == id);
}
if (!string.IsNullOrWhiteSpace(search))
{
viewModelQuery = viewModelQuery.Where(x => x.Name.Contains(search));
}
var list = await viewModelQuery.Take(100).ToListAsync();
if (idSelected != null)
list.Add(idSelected);
return list.DistinctBy(x => x.Id).ToList();
}
#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<EmployerViewModel> 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<EmployerViewModel> 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<EmployerViewModel> 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();
try
{
var employer = _context.Employers.FirstOrDefault(x => x.id == id);
if (employer == null)
{
return result.Failed("کارفرما یافت نشد");
}
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();
result.Succcedded();
}
catch (Exception)
{
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
}
return result;
}
public List<EmployerViewModel> 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
/// <summary>
/// نام کارفرما
/// وضعیت حقیقی حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
public (string employerName, bool isLegal) InsuranceEmployerByWorkshopId(long workshopId)
{
var res = _context.WorkshopEmployers.Where(x => x.WorkshopId == workshopId)
.Include(x => x.Employer).Select(x => new EmprViewModel
{
//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,
});
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);
}
//در غیر این صورت رشته ای از نام کارفرماها ساخته می شود
foreach (var item in res)
employer += (item.EmployerFullName + ",");
employer = employer.Substring(0, employer.Length - 1);
return (employer, false);
}
#endregion
#region Api
public async Task<List<GetEmployerListViewModel>> 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<GetLegalEmployerDetailViewModel> 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<GetRealEmployerDetailViewModel> 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<OperationResult<string>> DeactivateWithSubordinates(long id)
{
var op = new OperationResult<string>();
;
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("غیرفعال کردن کارفرما با خطا مواجه شد");
}
}
}
public async Task<ActionResult<EditEmployerWorkflowRegistration>> GetWorkflowRegistrationForEdit(long employerId,
long institutionWorkshopDetailsId)
{
var contractWorkshopInitial = await _context.InstitutionContractWorkshopInitials
.Include(x => x.Employers)
.Include(x => x.WorkshopGroup)
.ThenInclude(x => x.InstitutionContract)
.FirstOrDefaultAsync(x => x.id == institutionWorkshopDetailsId);
if (contractWorkshopInitial == null)
throw new BadRequestException("جزئیات کارگاه موسسه یافت نشد");
if (contractWorkshopInitial.Employers.All(x => x.EmployerId != employerId))
{
throw new BadRequestException("کارفرمای مورد نظر در این جزئیات کارگاه موسسه یافت نشد");
}
var employer = _context.Employers.FirstOrDefault(x => x.id == employerId);
if (employer == null)
throw new BadRequestException("کارفرمای مورد نظر در این جزئیات کارگاه موسسه یافت نشد");
var legalType = employer.IsLegal == "حقوقی" ? LegalType.Legal : LegalType.Real;
CreateRealEmployerWorkflowRegistration realEmployer = null;
CreateLegalEmployerWorkflowRegistration legalEmployer = null;
var governmentSystemInfo = new GovernmentSystemInfo
{
EServicePassword = employer.EservicePassword,
EServiceUsername = employer.EservicePassword,
MclPassword = employer.MclsPassword,
MclUsername = employer.MclsUserName,
SanaUsername = employer.SanaUserName,
SanaPassword = employer.SanaPassword,
TaxUsername = employer.TaxOfficeUserName,
TaxPassword = employer.TaxOfficepassword
};
if (legalType == LegalType.Real)
{
realEmployer = new CreateRealEmployerWorkflowRegistration()
{
FName = employer.FName,
LName = employer.LName,
IdNumber = employer.IdNumber,
DateOfBirth = employer.DateOfBirth.ToFarsi(),
PlaceOfIssue = employer.PlaceOfIssue,
DateOfIssue = employer.DateOfIssue.ToFarsi(),
FatherName = employer.FatherName,
Gender = employer.Gender switch
{
null => Gender.None,
"مرد" => Gender.Male,
_ => Gender.Female
},
GovernmentSystemInfo = governmentSystemInfo,
IsAuth = employer.IsAuth,
PhoneNumber = employer.Phone,
IdNumberSeri = employer.IdNumberSeri,
IdNumberSerial = employer.IdNumberSerial,
NationalCode = employer.Nationalcode,
Telephone = employer.AgentPhone
};
}
else
{
legalEmployer = new CreateLegalEmployerWorkflowRegistration()
{
CompanyName = employer.LName,
CeoFName = employer.FName,
CeoLName = employer.EmployerLName,
NationalId = employer.NationalId,
RegisterId = employer.RegisterId,
CeoDateOfBirth = employer.DateOfBirth.ToFarsi(),
CeoPlaceOfIssue = employer.PlaceOfIssue,
CeoDateOfIssue = employer.DateOfIssue.ToFarsi(),
CeoFatherName = employer.FatherName,
Gender = employer.Gender == "مرد" ? Gender.Male : Gender.Female,
GovernmentSystemInfo = governmentSystemInfo,
IsAuth = employer.IsAuth,
PhoneNumber = employer.Phone,
CeoNationalCode = employer.Nationalcode,
IdNumberSerial = employer.IdNumberSerial,
CeoIdNumber = employer.IdNumber,
IdNumberSeri = employer.IdNumberSeri,
TelephoneNumber = employer.IdNumber
};
}
var res = new EditEmployerWorkflowRegistration()
{
EmployerId = employerId,
ContractingPartyId = contractWorkshopInitial.WorkshopGroup.InstitutionContract.ContractingPartyId,
InstitutionContractId = contractWorkshopInitial.WorkshopGroup.InstitutionContractId,
LegalType = legalType,
InstitutionWorkshopInitialId = contractWorkshopInitial.id,
RealEmployer = realEmployer,
LegalEmployer = legalEmployer,
};
return res;
}
#endregion
}