DeActiveInstitutionEndOfContract hangfire completed

This commit is contained in:
gozareshgir
2026-01-12 13:10:58 +03:30
parent 0d33d79620
commit 1c7e8824c7
3 changed files with 232 additions and 91 deletions

View File

@@ -2,12 +2,13 @@
using _0_Framework.Application.Enums;
using _0_Framework.Application.Sms;
using _0_Framework.InfraStructure;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.InstitutionContractAgg;
using Company.Domain.SmsResultAgg;
using CompanyManagment.App.Contracts.Hubs;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.EFCore.Migrations;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
@@ -18,7 +19,6 @@ using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Company.Domain.ContarctingPartyAgg;
namespace CompanyManagment.EFCore.Repository;
@@ -30,6 +30,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
private readonly ISmsResultRepository _smsResultRepository;
private readonly IHubContext<SendSmsHub> _hubContext;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
public InstitutionContractSmsServiceRepository(CompanyContext context, ISmsService smsService, ILogger<InstitutionContractSmsServiceRepository> logger, ISmsResultRepository smsResultRepository, IHubContext<SendSmsHub> hubContext, IPersonalContractingPartyRepository personalContractingPartyRepository) : base(context)
{
_context = context;
@@ -999,7 +1000,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
var contractingPartyIdList = new List<long>();
var institutionContracts = await _context.InstitutionContractSet.Where(x=>x.IsActiveString == "true")
var institutionContracts = await _context.InstitutionContractSet.Where(x => x.IsActiveString == "true")
.Include(x => x.Installments)
.Select(x => new InstitutionContractViewModel
{
@@ -1051,7 +1052,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
if (transactions != null)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
@@ -1085,7 +1086,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
}
}
}
}
@@ -1131,7 +1132,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
}
}
}
}
}
catch (Exception e)
@@ -1174,12 +1175,12 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
/// <returns></returns>
public async Task UnBlock()
{
var getBlockedParties =await _context.PersonalContractingParties
.Where(x => x.IsBlock == "true" && x.IsActiveString == "true").Select(x=>x.id).ToArrayAsync();
var getBlockedParties = await _context.PersonalContractingParties
.Where(x => x.IsBlock == "true" && x.IsActiveString == "true").Select(x => x.id).ToArrayAsync();
var checkDate = DateTime.Now;
if (getBlockedParties.Any())
{
var institutionContracts = await _context.InstitutionContractSet.Where(x=> getBlockedParties.Contains(x.ContractingPartyId))
var institutionContracts = await _context.InstitutionContractSet.Where(x => getBlockedParties.Contains(x.ContractingPartyId))
.Include(x => x.Installments)
.Select(x => new InstitutionContractViewModel
{
@@ -1198,7 +1199,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
SigningType = x.SigningType,
InstallmentList = x.Installments
.Select(ins => new InstitutionContractInstallmentViewModel
{ AmountDouble = ins.Amount, InstallmentDateGr = ins.InstallmentDateGr })
{ AmountDouble = ins.Amount, InstallmentDateGr = ins.InstallmentDateGr })
.OrderBy(ins => ins.InstallmentDateGr).Skip(1).ToList(),
}).Where(x => x.ContractStartGr < checkDate && x.ContractEndGr >= checkDate &&
x.ContractAmountDouble > 0 && x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify).GroupBy(x => x.ContractingPartyId).Select(x => x.First())
@@ -1222,48 +1223,48 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
try
{
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
if (transactions != null)
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
if (transactions != null)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);
var balance = debtor - creditor;
var jobRelation = "بابت قرارداد مابین (روابط کار)";
var taxAndFinancial = "بابت قرارداد مابین (حسابداری و مالیات)";
var jobRelationContract = transactions.FinancialTransactionList
.OrderByDescending(x => x.TdateGr).FirstOrDefault(x =>
x.TypeOfTransaction == "debt" && x.DescriptionOption == jobRelation);
var taxAndFinancialContract = transactions.FinancialTransactionList
.OrderByDescending(x => x.TdateGr).FirstOrDefault(x =>
x.TypeOfTransaction == "debt" && x.DescriptionOption == taxAndFinancial);
var jobRelationContractAmounts =
jobRelationContract != null ? jobRelationContract.Deptor : 0;
var taxAndFinancialContractAmounts =
taxAndFinancialContract != null ? taxAndFinancialContract.Deptor : 0;
var sumOfAmounts = jobRelationContractAmounts * 2 + taxAndFinancialContractAmounts * 2;
if (balance < sumOfAmounts)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);
var res = _personalContractingPartyRepository.Get(item.ContractingPartyId);
var blockTime = res.BlockTimes + 1;
res.DisableBlock(blockTime);
var balance = debtor - creditor;
var jobRelation = "بابت قرارداد مابین (روابط کار)";
var taxAndFinancial = "بابت قرارداد مابین (حسابداری و مالیات)";
var jobRelationContract = transactions.FinancialTransactionList
.OrderByDescending(x => x.TdateGr).FirstOrDefault(x =>
x.TypeOfTransaction == "debt" && x.DescriptionOption == jobRelation);
var taxAndFinancialContract = transactions.FinancialTransactionList
.OrderByDescending(x => x.TdateGr).FirstOrDefault(x =>
x.TypeOfTransaction == "debt" && x.DescriptionOption == taxAndFinancial);
var jobRelationContractAmounts =
jobRelationContract != null ? jobRelationContract.Deptor : 0;
var taxAndFinancialContractAmounts =
taxAndFinancialContract != null ? taxAndFinancialContract.Deptor : 0;
var sumOfAmounts = jobRelationContractAmounts * 2 + taxAndFinancialContractAmounts * 2;
if (balance < sumOfAmounts)
{
var res = _personalContractingPartyRepository.Get(item.ContractingPartyId);
var blockTime = res.BlockTimes + 1;
res.DisableBlock(blockTime);
}
}
}
}
catch (Exception e)
@@ -1280,34 +1281,34 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
{
try
{
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
if (transactions != null)
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
if (transactions != null)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);
var balance = debtor - creditor;
var instalment = item.InstallmentList
.FirstOrDefault()!.AmountDouble;
var sumOfAmounts = instalment * 2;
if (balance < sumOfAmounts)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);
var res = _personalContractingPartyRepository.Get(item.ContractingPartyId);
var blockTime = res.BlockTimes + 1;
res.DisableBlock(blockTime);
var balance = debtor - creditor;
var instalment = item.InstallmentList
.FirstOrDefault()!.AmountDouble;
var sumOfAmounts = instalment * 2;
if (balance < sumOfAmounts)
{
var res = _personalContractingPartyRepository.Get(item.ContractingPartyId);
var blockTime = res.BlockTimes + 1;
res.DisableBlock(blockTime);
}
}
}
}
catch (Exception e)
{
@@ -1322,9 +1323,116 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase<long, Inst
await _context.SaveChangesAsync();
}
}
public async Task DeActiveInstitutionEndOfContract(DateTime checkDate)
{
var institutionContracts = await _context.InstitutionContractSet
.Where(x => (x.IsActiveString == "true" || x.IsActiveString == "blue") && (x.ContractEndGr.Date < checkDate.Date && x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify))
.Include(x => x.Installments)
.Select(x => new InstitutionContractViewModel
{
Id = x.id,
ContractingPartyId = x.ContractingPartyId,
ContractingPartyName = x.ContractingPartyName,
ContractStartGr = x.ContractStartGr,
ContractStartFa = x.ContractStartFa,
ContractEndGr = x.ContractEndGr,
ContractEndFa = x.ContractEndFa,
IsActiveString = x.IsActiveString,
ContractAmountDouble = x.ContractAmount,
OfficialCompany = x.OfficialCompany,
IsInstallment = x.IsInstallment,
VerificationStatus = x.VerificationStatus,
SigningType = x.SigningType,
InstallmentList = x.Installments
.Select(ins => new InstitutionContractInstallmentViewModel
{ AmountDouble = ins.Amount, InstallmentDateGr = ins.InstallmentDateGr })
.OrderBy(ins => ins.InstallmentDateGr).Skip(1).ToList(),
}).ToListAsync();
// قرارداد هایی که بطور یکجا پرداخت شده اند
var paidInFull = institutionContracts.Where(x =>
x.SigningType != InstitutionContractSigningType.Legacy && x.IsInstallment == false && x.SigningType != null).ToList();
//حذف قراداد هایی که یکجا پرداخت شده اند از لیست ایجاد سند ماهانه
institutionContracts = institutionContracts.Except(paidInFull).ToList();
var financialStatmentList = await _context.FinancialStatments.AsSplitQuery()
.Where(x => institutionContracts.Select(ins => ins.ContractingPartyId).Contains(x.ContractingPartyId))
.Include(x => x.FinancialTransactionList).Where(x => x.FinancialTransactionList.Count > 0).ToListAsync();
//قرارداد های جاری فعال
var currentActiveContracts = await _context.InstitutionContractSet.Where(x =>
x.ContractEndGr.Date > checkDate.Date && x.IsActiveString == "true" &&
x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify).ToListAsync();
var institutionContractIds = institutionContracts.Select(x => x.Id).ToList();
var queryableContracts =await _context.InstitutionContractSet.Where(x => institutionContractIds.Contains(x.id)).ToListAsync();
foreach (var item in institutionContracts)
{
try
{
var existContractAfterThis = currentActiveContracts.Any(x =>
x.ContractingPartyId == item.ContractingPartyId);
var transactions =
financialStatmentList.FirstOrDefault(x => x.ContractingPartyId == item.ContractingPartyId);
var contract = queryableContracts.FirstOrDefault(x => x.id == item.Id);
if (transactions != null && contract != null)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
var creditor = transactions.FinancialTransactionList.Sum(x => x.Creditor);
var balance = debtor - creditor;
if (balance > 0)
{
if (existContractAfterThis) // اگر بعد از این قراداد مالی قراردادی داشت حتی اگر بدهکار بود فقط غیرفعالش کن
contract.DeActive();
else // اگر نداشت غیر فعال آبیش کن
contract.DeActiveBlue();
}
else // اگر بدهکار نبود چه بعدش قرارداد مالی داشت چه نداشت غیرفعال کن
{
contract.DeActive();
}
await _context.SaveChangesAsync();
if (!existContractAfterThis) // اگر بعد از این قراداد مالی قرادادی نداشت همه وابستگی ها را غیر فعال کن
{
await _personalContractingPartyRepository.DeActiveAllAsync(item.ContractingPartyId);
Thread.Sleep(500);
}
}
}
catch (Exception e)
{
string name = item.ContractingPartyName.Length > 18
? item.ContractingPartyName.Substring(0, 18)
: item.ContractingPartyName;
string errMess = $"{name}-خطا";
await _smsService.Alarm("09114221321", errMess);
}
}
}
#endregion
}