1134 lines
44 KiB
C#
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
|
|
} |