diff --git a/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs b/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs new file mode 100644 index 00000000..7119a252 --- /dev/null +++ b/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs @@ -0,0 +1,33 @@ +using System; +using System.Threading.Tasks; + +namespace Company.Domain.InstitutionContractSendFlagAgg; + +/// +/// Interface برای Repository مربوط به فلگ ارسال قرارداد +/// +public interface IInstitutionContractSendFlagRepository +{ + /// + /// ایجاد یک رکورد جدید برای فلگ ارسال قرارداد + /// + Task Create(InstitutionContractSendFlag flag); + + /// + /// بازیابی فلگ بر اساس شناسه قرارداد + /// + Task GetByContractId(long contractId); + + /// + /// به‌روزرسانی فلگ ارسال + /// + Task Update(InstitutionContractSendFlag flag); + + /// + /// بررسی اینکه آیا قرارداد ارسال شده است + /// + Task IsContractSent(long contractId); + + +} + diff --git a/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs new file mode 100644 index 00000000..20d951a0 --- /dev/null +++ b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs @@ -0,0 +1,82 @@ +using System; +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; + +namespace Company.Domain.InstitutionContractSendFlagAgg; + +/// +/// نمایندگی فلگ ارسال قرارداد در MongoDB +/// این موجودیت برای ردیابی اینکه آیا قرارداد ارسال شده است استفاده می‌شود +/// +public class InstitutionContractSendFlag +{ + public InstitutionContractSendFlag(long institutionContractId,bool isSent) + { + Id = Guid.NewGuid(); + InstitutionContractId = institutionContractId; + IsSent = isSent; + CreatedDate = DateTime.Now; + } + + /// + /// شناسه یکتای MongoDB + /// + [BsonId] + [BsonRepresentation(BsonType.String)] + public Guid Id { get; set; } + + /// + /// شناسه قرارداد در SQL + /// + public long InstitutionContractId { get; set; } + + /// + /// آیا قرارداد ارسال شده است + /// + public bool IsSent { get; set; } + + /// + /// تاریخ و زمان ارسال + /// + public DateTime? SentDate { get; set; } + + /// + /// تاریخ و زمان ایجاد رکورد + /// + public DateTime CreatedDate { get; set; } + + /// + /// تاریخ و زمان آخرین به‌روزرسانی + /// + public DateTime? LastModifiedDate { get; set; } + + + /// + /// علامت‌گذاری قرارداد به عنوان ارسال‌شده + /// + public void MarkAsSent(string reason = null) + { + IsSent = true; + SentDate = DateTime.Now; + LastModifiedDate = DateTime.Now; + } + + /// + /// بازگردانی علامت ارسال + /// + public void MarkAsNotSent() + { + IsSent = false; + SentDate = null; + LastModifiedDate = DateTime.Now; + } + + /// + /// به‌روزرسانی علامت آخری اصلاح + /// + public void UpdateLastModified() + { + LastModifiedDate = DateTime.Now; + } +} + diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs new file mode 100644 index 00000000..54f30be0 --- /dev/null +++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs @@ -0,0 +1,57 @@ +using System; +using System.Threading.Tasks; +using Company.Domain.InstitutionContractSendFlagAgg; +using MongoDB.Driver; + +namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo; + +/// +/// Repository برای مدیریت فلگ ارسال قرارداد در MongoDB +/// +public class InstitutionContractSendFlagRepository : IInstitutionContractSendFlagRepository +{ + private readonly IMongoCollection _collection; + + public InstitutionContractSendFlagRepository(IMongoDatabase database) + { + _collection = database.GetCollection("InstitutionContractSendFlag"); + } + + public async Task Create(InstitutionContractSendFlag flag) + { + await _collection.InsertOneAsync(flag); + } + + public async Task GetByContractId(long contractId) + { + var filter = Builders.Filter + .Eq(x => x.InstitutionContractId, contractId); + + return await _collection.Find(filter).FirstOrDefaultAsync(); + } + + + public async Task Update(InstitutionContractSendFlag flag) + { + var filter = Builders.Filter + .Eq(x => x.InstitutionContractId, flag.InstitutionContractId); + + await _collection.ReplaceOneAsync(filter, flag); + } + + public async Task IsContractSent(long contractId) + { + var flag = await GetByContractId(contractId); + return flag != null && flag.IsSent; + } + + public async Task Remove(long contractId) + { + var filter = Builders.Filter + .Eq(x => x.InstitutionContractId, contractId); + + await _collection.DeleteOneAsync(filter); + } + +} + diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index 4765fafb..aab12f1f 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -61,6 +61,7 @@ using Company.Domain.HolidayItemAgg; using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractContactInfoAgg; using Company.Domain.InstitutionContractExtensionTempAgg; +using Company.Domain.InstitutionContractSendFlagAgg; using Company.Domain.InstitutionPlanAgg; using Company.Domain.InsuranceAgg; using Company.Domain.InsuranceEmployeeInfoAgg; @@ -123,6 +124,7 @@ using Company.Domain.ZoneAgg; using CompanyManagement.Infrastructure.Excel.SalaryAid; using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo; using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; +using CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo; using CompanyManagment.App.Contracts.AdminMonthlyOverview; using CompanyManagment.App.Contracts.AndroidApkVersion; using CompanyManagment.App.Contracts.AuthorizedPerson; @@ -658,6 +660,9 @@ public class PersonalBootstrapper services.AddTransient(); services.AddTransient(); // MongoDB Implementation + // InstitutionContractSendFlag - MongoDB + services.AddTransient(); + services.AddDbContext(x => x.UseSqlServer(connectionString)); } } \ No newline at end of file