diff --git a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs
index ce5f76cd..7a93180c 100644
--- a/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs
+++ b/BackgroundInstitutionContract/BackgroundInstitutionContract.Task/Jobs/JobSchedulerRegistrator.cs
@@ -75,16 +75,22 @@ public class JobSchedulerRegistrator
- RecurringJob.AddOrUpdate(
- "InstitutionContract.Block",
- () => Block(),
- "*/30 * * * *" // هر 30 دقیقه یکبار چک کن
- );
+ //RecurringJob.AddOrUpdate(
+ // "InstitutionContract.Block",
+ // () => Block(),
+ // "*/30 * * * *" // هر 30 دقیقه یکبار چک کن
+ //);
+
+ //RecurringJob.AddOrUpdate(
+ // "InstitutionContract.UnBlock",
+ // () => UnBlock(),
+ // "*/10 * * * *"
+ //);
RecurringJob.AddOrUpdate(
- "InstitutionContract.UnBlock",
- () => UnBlock(),
- "*/10 * * * *"
+ "InstitutionContract.DeActiveInstitutionEndOfContract",
+ () => DeActiveInstitutionEndOfContract(),
+ "*/30 * * * *"
);
}
@@ -220,30 +226,49 @@ public class JobSchedulerRegistrator
///
/// بلاگ سازی
///
- ///
+ /////
+ //[DisableConcurrentExecution(timeoutInSeconds: 100)]
+ //public async System.Threading.Tasks.Task Block()
+ //{
+ // _logger.LogInformation("block job run");
+ // var now = DateTime.Now;
+ // var executeDate = now.ToFarsi().Substring(8, 2);
+ // if (executeDate == "20")
+ // {
+ // if (now.Hour >= 9 && now.Hour < 10)
+ // {
+ // await _institutionContractSmsServiceRepository.Block(now);
+ // }
+
+ // }
+ //}
+
+ //[DisableConcurrentExecution(timeoutInSeconds: 100)]
+ //public async System.Threading.Tasks.Task UnBlock()
+ //{
+ // _logger.LogInformation("UnBlock job run");
+
+ // await _institutionContractSmsServiceRepository.UnBlock();
+
+ //}
+
[DisableConcurrentExecution(timeoutInSeconds: 100)]
- public async System.Threading.Tasks.Task Block()
+ public async System.Threading.Tasks.Task DeActiveInstitutionEndOfContract()
{
- _logger.LogInformation("block job run");
+ _logger.LogInformation("DeActiveInstitutionEndOfContract job run");
+
+
var now = DateTime.Now;
var executeDate = now.ToFarsi().Substring(8, 2);
- if (executeDate == "20")
+ if (executeDate == "01")
{
if (now.Hour >= 9 && now.Hour < 10)
{
- await _institutionContractSmsServiceRepository.Block(now);
+ await _institutionContractSmsServiceRepository.DeActiveInstitutionEndOfContract(now);
}
-
+
}
- }
-
- [DisableConcurrentExecution(timeoutInSeconds: 100)]
- public async System.Threading.Tasks.Task UnBlock()
- {
- _logger.LogInformation("UnBlock job run");
-
- await _institutionContractSmsServiceRepository.UnBlock();
-
+
}
}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractSmsServiceRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractSmsServiceRepository.cs
index fbd199c0..b143d711 100644
--- a/Company.Domain/InstitutionContractAgg/IInstitutionContractSmsServiceRepository.cs
+++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractSmsServiceRepository.cs
@@ -83,5 +83,13 @@ public interface IInstitutionContractSmsServiceRepository : IRepository
Task UnBlock();
+
+ ///
+ /// غیر فعالسازی قرارداد های پایان یافته
+ ///
+ ///
+ ///
+ Task DeActiveInstitutionEndOfContract(DateTime checkDate);
+
#endregion
}
\ No newline at end of file
diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs
index d8958c53..b1632dae 100644
--- a/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs
+++ b/CompanyManagment.EFCore/Repository/InstitutionContractSmsServiceRepository.cs
@@ -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 _hubContext;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
+
public InstitutionContractSmsServiceRepository(CompanyContext context, ISmsService smsService, ILogger logger, ISmsResultRepository smsResultRepository, IHubContext hubContext, IPersonalContractingPartyRepository personalContractingPartyRepository) : base(context)
{
_context = context;
@@ -999,7 +1000,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase();
- 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 x.ContractingPartyId == item.ContractingPartyId);
-
+
if (transactions != null)
{
var debtor = transactions.FinancialTransactionList.Sum(x => x.Deptor);
@@ -1085,7 +1086,7 @@ public class InstitutionContractSmsServiceRepository : RepositoryBase
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 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 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 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 (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
+
+
+
}