diff --git a/.github/workflows/dotnet-developPublish.yml b/.github/workflows/dotnet-developPublish.yml
new file mode 100644
index 00000000..aace164d
--- /dev/null
+++ b/.github/workflows/dotnet-developPublish.yml
@@ -0,0 +1,48 @@
+name: Deploy Development ASP.NET Core App to IIS
+
+on:
+ push:
+ branches:
+ - Main
+
+env:
+ DOTNET_ENVIRONMENT: Development
+
+jobs:
+ build-and-deploy:
+ runs-on: windows-latest
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Setup .NET SDK
+ uses: actions/setup-dotnet@v4
+ with:
+ dotnet-version: '8.0.x' # یا نسخه پروژهت
+
+ - name: Restore dependencies
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build --configuration Release
+
+ - name: Publish
+ run: dotnet publish --configuration Release --output ./publish /p:EnvironmentName=Development --no-build
+
+ - name: Deploy to IIS via Web Deploy
+ shell: powershell
+ run: |
+ $publishFolder = Resolve-Path ./publish
+ & "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
+ -verb:sync `
+ -source:contentPath="$publishFolder" `
+ -dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R2rNpdnetP3j>q5b18",authType="Basic" `
+ -allowUntrusted `
+ -enableRule:AppOffline
+
+
+ env:
+ SERVER_HOST: your-server-ip-or-domain
+ DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
+ DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
diff --git a/0_Framework/0_Framework.csproj b/0_Framework/0_Framework.csproj
index 1de86aff..54b62986 100644
--- a/0_Framework/0_Framework.csproj
+++ b/0_Framework/0_Framework.csproj
@@ -21,4 +21,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/0_Framework/Application/AppSettingConfiguration.cs b/0_Framework/Application/AppSettingConfiguration.cs
index 414949f1..127f11d5 100644
--- a/0_Framework/Application/AppSettingConfiguration.cs
+++ b/0_Framework/Application/AppSettingConfiguration.cs
@@ -3,4 +3,6 @@
public class AppSettingConfiguration
{
public string Domain { get; set; }
+ public string ClientDomain =>"client"+Domain;
+ public string AdminDomain =>"admin"+Domain;
}
\ No newline at end of file
diff --git a/0_Framework/Application/AuthHelper.cs b/0_Framework/Application/AuthHelper.cs
index 50e221b2..ef510830 100644
--- a/0_Framework/Application/AuthHelper.cs
+++ b/0_Framework/Application/AuthHelper.cs
@@ -42,6 +42,7 @@ public class AuthHelper : IAuthHelper
result.WorkshopName = claims.FirstOrDefault(x => x is { Type: "WorkshopName" })?.Value;
result.Permissions = Tools.DeserializeFromBsonList(claims.FirstOrDefault(x => x is { Type: "permissions" })?.Value);
result.RoleName = claims.FirstOrDefault(x => x is { Type: "RoleName" })?.Value;
+ result.WorkshopId = long.Parse(claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value??"0");
return result;
}
@@ -76,7 +77,7 @@ public class AuthHelper : IAuthHelper
#region Vafa
- public void UpdateWorkshopSlugClaim(string newWorkshopSlug, string newWorkshopName)
+ public void UpdateWorkshopSlugClaim(string newWorkshopSlug, string newWorkshopName,long newWorkshopId)
{
var user = _contextAccessor.HttpContext.User;
@@ -85,6 +86,7 @@ public class AuthHelper : IAuthHelper
var claimsIdentity = (ClaimsIdentity)user.Identity;
var existingClaimSlug = claimsIdentity.FindFirst("WorkshopSlug");
var existingClaimName = claimsIdentity.FindFirst("WorkshopName");
+ var existingWorkshopId = claimsIdentity.FindFirst("WorkshopId");
if (existingClaimSlug != null)
{
@@ -96,9 +98,14 @@ public class AuthHelper : IAuthHelper
claimsIdentity.RemoveClaim(existingClaimName);
}
+ if (existingWorkshopId != null)
+ {
+ claimsIdentity.RemoveClaim(existingWorkshopId);
+ }
claimsIdentity.AddClaim(new Claim("WorkshopSlug", newWorkshopSlug));
claimsIdentity.AddClaim(new Claim("WorkshopName", newWorkshopName));
+ claimsIdentity.AddClaim(new Claim("WorkshopId",newWorkshopId.ToString()));
var authProperties = new AuthenticationProperties
@@ -128,8 +135,16 @@ public class AuthHelper : IAuthHelper
return "";
}
+
+
#endregion
+ public long GetWorkshopId()
+ {
+ return long.Parse(_contextAccessor.HttpContext?.User.Claims.FirstOrDefault(x => x.Type == "WorkshopId")?.Value ?? "0");
+
+
+ }
public string CurrentAccountRole()
{
@@ -182,6 +197,7 @@ public class AuthHelper : IAuthHelper
//mahanChanges
new("workshopList",workshopBson),
new("WorkshopSlug",slug),
+ new("WorkshopId", account.WorkshopId.ToString()),
new("WorkshopName",account.WorkshopName??"")
};
diff --git a/0_Framework/Application/AuthViewModel.cs b/0_Framework/Application/AuthViewModel.cs
index dba5d198..d419bd67 100644
--- a/0_Framework/Application/AuthViewModel.cs
+++ b/0_Framework/Application/AuthViewModel.cs
@@ -20,6 +20,7 @@ public class AuthViewModel
public int? PositionValue { get; set; }
public string WorkshopSlug { get; set; }
+ public long WorkshopId { get; set; }
public string WorkshopName { get; set; }
public List WorkshopList { get; set; }
diff --git a/0_Framework/Application/Enums/TypeOfCheckoutWarning.cs b/0_Framework/Application/Enums/TypeOfCheckoutWarning.cs
new file mode 100644
index 00000000..45c82a53
--- /dev/null
+++ b/0_Framework/Application/Enums/TypeOfCheckoutWarning.cs
@@ -0,0 +1,15 @@
+namespace _0_Framework.Application.Enums;
+
+public enum TypeOfCheckoutWarning
+{
+ ///
+ /// هشدار های متفرقه
+ ///
+ OthersWarning,
+ ///
+ /// هشدار سهم بیمه کارگر
+ ///
+ InsuranceEmployeeShare,
+
+
+}
\ No newline at end of file
diff --git a/0_Framework/Application/IAuthHelper.cs b/0_Framework/Application/IAuthHelper.cs
index 281755aa..ab9cf572 100644
--- a/0_Framework/Application/IAuthHelper.cs
+++ b/0_Framework/Application/IAuthHelper.cs
@@ -17,11 +17,12 @@ public interface IAuthHelper
#region Vafa
- void UpdateWorkshopSlugClaim(string workshopSlug, string workshopName);
+ void UpdateWorkshopSlugClaim(string workshopSlug, string workshopName, long workshopId);
#endregion
long CurrentSubAccountId();
string GetWorkshopSlug();
string GetWorkshopName();
+ long GetWorkshopId();
(long Id, UserType userType, long roleId) GetUserTypeWithId();
}
\ No newline at end of file
diff --git a/0_Framework/Application/PagedResult.cs b/0_Framework/Application/PagedResult.cs
new file mode 100644
index 00000000..ecfa9ea1
--- /dev/null
+++ b/0_Framework/Application/PagedResult.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
+
+namespace _0_Framework.Application;
+
+
+public class PagedResult where T : class
+{
+ public int TotalCount { get; set; }
+ public List List { get; set; }
+}
+public class PagedResult:PagedResult where T : class
+{
+ public TMeta? Meta { get; set; }
+}
diff --git a/0_Framework/Application/PaginationRequest.cs b/0_Framework/Application/PaginationRequest.cs
new file mode 100644
index 00000000..0ad0fe3d
--- /dev/null
+++ b/0_Framework/Application/PaginationRequest.cs
@@ -0,0 +1,7 @@
+namespace _0_Framework.Application;
+
+public class PaginationRequest
+{
+ public int PageIndex { get; set; } = 1;
+ public int PageSize { get; set; } = 30;
+}
\ No newline at end of file
diff --git a/0_Framework/Application/PaymentGateway/AqayePardakhtPaymentGateway.cs b/0_Framework/Application/PaymentGateway/AqayePardakhtPaymentGateway.cs
index 8df8d415..b71f8681 100644
--- a/0_Framework/Application/PaymentGateway/AqayePardakhtPaymentGateway.cs
+++ b/0_Framework/Application/PaymentGateway/AqayePardakhtPaymentGateway.cs
@@ -24,7 +24,7 @@ public class AqayePardakhtPaymentGateway:IPaymentGateway
{
_httpClient = httpClientFactory.CreateClient();
- if (appSetting.Value.Domain == ".dad-mehr.ir")
+ if (appSetting.Value.Domain == ".dadmehrg.ir")
{
_pin = "7349F84E81AB584862D9";
}
diff --git a/0_Framework/Application/Sms/ISmsService.cs b/0_Framework/Application/Sms/ISmsService.cs
index edcd5e72..04bd637d 100644
--- a/0_Framework/Application/Sms/ISmsService.cs
+++ b/0_Framework/Application/Sms/ISmsService.cs
@@ -26,6 +26,12 @@ public interface ISmsService
#region Mahan
Task GetCreditAmount();
+
+ public Task SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId);
+
+ public Task SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
+ long contractingPartyId, long institutionContractId);
+
SmsResult TaskReminderSms(string number, string taskCount);
#endregion
diff --git a/0_Framework/Application/Sms/OtpResultViewModel.cs b/0_Framework/Application/Sms/OtpResultViewModel.cs
new file mode 100644
index 00000000..ea85d622
--- /dev/null
+++ b/0_Framework/Application/Sms/OtpResultViewModel.cs
@@ -0,0 +1,7 @@
+namespace _0_Framework.Application.Sms;
+
+public class OtpResultViewModel
+{
+ public int ExpireTimeSec { get; set; }
+ public int ReSendTimeSec { get; set; }
+}
\ No newline at end of file
diff --git a/0_Framework/Application/StaticWorkshopAccounts.cs b/0_Framework/Application/StaticWorkshopAccounts.cs
index eac5ad08..f0746e01 100644
--- a/0_Framework/Application/StaticWorkshopAccounts.cs
+++ b/0_Framework/Application/StaticWorkshopAccounts.cs
@@ -30,8 +30,9 @@ public static class StaticWorkshopAccounts
/// 380 - افروز نظری
/// 381 - مهدی قربانی
/// 392 - عمار حسن دوست
+ /// 20 - سمیرا الهی نیا
///
- public static List StaticAccountIds = [2, 3, 380, 381, 392];
+ public static List StaticAccountIds = [2, 3, 380, 381, 392, 20];
///
/// این تاریخ در جدول اکانت لفت ورک به این معنیست
diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs
index d959c33e..23afe3cb 100644
--- a/0_Framework/Application/Tools.cs
+++ b/0_Framework/Application/Tools.cs
@@ -477,26 +477,42 @@ public static class Tools
string bb = string.Empty;
bool isNegative = false;
- for (int x = 0; x < myMoney.Length; x++)
+ try
{
- if (char.IsDigit(myMoney[x]))
+ if (!string.IsNullOrWhiteSpace(myMoney))
{
- bb += myMoney[x];
- }
- else if (myMoney[x] == '-' && bb.Length == 0)
- {
- // اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر
- isNegative = true;
- }
- }
+ for (int x = 0; x < myMoney.Length; x++)
+ {
+ if (char.IsDigit(myMoney[x]))
+ {
+ bb += myMoney[x];
+ }
+ else if (myMoney[x] == '-' && bb.Length == 0)
+ {
+ // اگر علامت منفی قبل از اولین عدد آمد، در نظر بگیر
+ isNegative = true;
+ }
+ }
- if (bb.Length > 0)
- {
- double res = double.Parse(bb);
- return isNegative ? -res : res;
+ if (bb.Length > 0)
+ {
+ double res = double.Parse(bb);
+ return isNegative ? -res : res;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ return 0;
+ }
+
}
- else
+ catch (Exception)
{
+
return 0;
}
}
@@ -1496,6 +1512,14 @@ public static class Tools
#region Mahan
+ public static bool IsvalidIban(this string iban)
+ {
+ return Regex.IsMatch(iban, @"^IR[0-9]{24}$");
+ }
+ public static bool IsValidCardNumber(this string cardNumber)
+ {
+ return Regex.IsMatch(cardNumber, @"^[0-9]{16}$");
+ }
///
/// این متد حروف عربی را به فارسی در میاورد. مثال: علي را به علی تبدیل میکند
///
diff --git a/0_Framework/Application/UID/IUidService.cs b/0_Framework/Application/UID/IUidService.cs
index 19dd0034..a3350dfa 100644
--- a/0_Framework/Application/UID/IUidService.cs
+++ b/0_Framework/Application/UID/IUidService.cs
@@ -38,7 +38,7 @@ public class UidBasicInformation
{
"GENDER_MALE" => Application.Gender.Male,
"GENDER_FEMALE" => Application.Gender.Female,
- _ => throw new ArgumentOutOfRangeException()
+ _ => Application.Gender.None
};
}
public record IdentificationInformation(string NationalId, string BirthDate, string ShenasnameSeri, string ShenasnameSerial, string ShenasnamehNumber);
@@ -110,6 +110,53 @@ public interface IUidService
{
Task GetPersonalInfo(string nationalCode , string birthDate);
Task IsMachPhoneWithNationalCode(string nationalCode , string phoneNumber);
+ Task IbanInquiry (string iban);
+ Task AccountToIban(string accountNumber, UidBanks bank);
+ Task CardToIban(string cardNumber);
+}
+
+public class CardToNumberResponse:UidBaseResponse
+{
+ public string Iban { get; set; }
+ public string CardNumber { get; set; }
+}
+
+public class AccountToIbanResponse:UidBaseResponse
+{
+ public string Iban { get; set; }
+}
+
+public class IbanInquiryResponse:UidBaseResponse
+{
+ public IbanInquiryAccountBasicInformation AccountBasicInformation { get; set; }
+ [JsonProperty("owners")]
+ public List Owners { get; set; }
+}
+
+public class IbanInquiryAccountBasicInformation
+{
+ public string Iban { get; set; }
+ public string AccountNumber { get; set; }
+ public IbanInquiryBankInformation BankInformation { get; set; }
+ public string AccountStatus { get; set; }
+
+}
+
+public class IbanInquiryBankInformation
+{
+ public string BankName { get; set; }
+}
+
+public class IbanInquiryOwner
+{
+ [JsonProperty("firstName")]
+ public string FirstName { get; set; }
+ [JsonProperty("lastName")]
+ public string LastName { get; set; }
+ [JsonProperty("nationalIdentifier")]
+ public string NationalIdentifier { get; set; }
+ [JsonProperty("customerType")]
+ public string CustomerType { get; set; }
}
public class MatchMobileWithNationalCodeResponse
@@ -118,4 +165,7 @@ public class MatchMobileWithNationalCodeResponse
public ResponseContext ResponseContext { get; set; }
}
-
+public class UidBaseResponse
+{
+ public ResponseContext ResponseContext { get; set; }
+}
diff --git a/0_Framework/Application/UID/UidBanks.cs b/0_Framework/Application/UID/UidBanks.cs
new file mode 100644
index 00000000..16e0c3d4
--- /dev/null
+++ b/0_Framework/Application/UID/UidBanks.cs
@@ -0,0 +1,117 @@
+using System.ComponentModel;
+
+namespace _0_Framework.Application.UID;
+
+public enum UidBanks
+{
+ [Description("بانک دی")]
+ BANK_DEY = 66,
+
+ [Description("بانک سپه")]
+ BANK_SEPAH = 15,
+
+ [Description("بانک شهر")]
+ BANK_SHAHR = 61,
+
+ [Description("بانک ملت")]
+ BANK_MELAT = 12,
+
+ [Description("بانک ملی")]
+ BANK_MELLI = 17,
+
+ [Description("بانک رفاه کارگران")]
+ BANK_REFAH = 13,
+
+ [Description("بانک سینا")]
+ BANK_SINA = 59,
+
+ [Description("بانک مسکن")]
+ BANK_MASKAN = 14,
+
+ [Description("بانک آینده")]
+ BANK_AYANDEH = 62,
+
+ [Description("بانک انصار")]
+ BANK_ANSAR = 63,
+
+ [Description("بانک تجارت")]
+ BANK_TEJARAT = 18,
+
+ [Description("بانک رسالت")]
+ BANK_RESALAT = 70,
+
+ [Description("بانک سامان")]
+ BANK_SAMAN = 56,
+
+ [Description("بانک مرکزی")]
+ BANK_MARKAZI = 10,
+
+ [Description("بانک سرمایه")]
+ BANK_SARMAYEH = 58,
+
+ [Description("بانک صادرات")]
+ BANK_SADERAT = 19,
+
+ [Description("بانک قوامین")]
+ BANK_GHAVAMIN = 52,
+
+ [Description("بانک پارسیان")]
+ BANK_PARSIAN = 54,
+
+ [Description("بانک کشاورزی")]
+ BANK_KESHAVARZI = 16,
+
+ [Description("بانک گردشگری")]
+ BANK_GARDESHGARI = 64,
+
+ [Description("پست بانک")]
+ BANK_POST_BANK = 21,
+
+ [Description("بانک پاسارگاد")]
+ BANK_PASARGAD = 57,
+
+ [Description("بانک کارآفرین")]
+ BANK_KARAFARIN = 53,
+
+ [Description("بانک خاورمیانه")]
+ BANK_KHAVARMIANEH = 78,
+
+ [Description("بانک ایران زمین")]
+ BANK_IRAN_ZAMIN = 69,
+
+ [Description("بانک مهر اقتصاد")]
+ BANK_MEHR_EQTESAD = 79,
+
+ [Description("بانک صنعت و معدن")]
+ BANK_SANAT_MADAN = 11,
+
+ [Description("بانک اقتصاد نوین")]
+ BANK_EGHTESAD_NOVIN = 55,
+
+ [Description("بانک توسعه تعاون")]
+ BANK_TOSSE_TAAVON = 22,
+
+ [Description("بانک توسعه صادرات")]
+ BANK_TOSSE_SADERAT = 20,
+
+ [Description("بانک ایران و ونزوئلا")]
+ BANK_IRAN_VENEZUELA = 95,
+
+ [Description("بانک حکمت ایرانیان")]
+ BANK_HEKMAT_IRANIAN = 65,
+
+ [Description("بانک قرض الحسنه مهر")]
+ BANK_GHARZOLHASANEH_MEHR = 60,
+
+ [Description("موسسه مالی و اعتباری ملل")]
+ BANK_MOASSASE_MELLAL = 75,
+
+ [Description("موسسه مالی و اعتباری نور")]
+ BANK_MOASSASE_NOOR = 80,
+
+ [Description("موسسه مالی و اعتباری کوثر")]
+ BANK_MOASSASE_KOSAR = 73,
+
+ [Description("موسسه مالی و اعتباری توسعه")]
+ BANK_MOASSASE_TOSSE = 51
+}
\ No newline at end of file
diff --git a/0_Framework/Application/UID/UidBanksExtension.cs b/0_Framework/Application/UID/UidBanksExtension.cs
new file mode 100644
index 00000000..98a46f16
--- /dev/null
+++ b/0_Framework/Application/UID/UidBanksExtension.cs
@@ -0,0 +1,27 @@
+using System;
+using System.ComponentModel;
+using System.Reflection;
+
+namespace _0_Framework.Application.UID
+{
+ public static class UidBanksExtension
+ {
+ ///
+ /// دریافت نام فارسی بانک
+ ///
+ /// بانک
+ /// نام فارسی بانک
+ public static string GetPersianName(this UidBanks bank)
+ {
+ var fieldInfo = bank.GetType().GetField(bank.ToString());
+
+ if (fieldInfo == null)
+ return string.Empty;
+
+ var attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(
+ fieldInfo, typeof(DescriptionAttribute));
+
+ return attribute?.Description ?? bank.ToString();
+ }
+ }
+}
diff --git a/0_Framework/Application/UID/UidService.cs b/0_Framework/Application/UID/UidService.cs
deleted file mode 100644
index ccf3c0ef..00000000
--- a/0_Framework/Application/UID/UidService.cs
+++ /dev/null
@@ -1,79 +0,0 @@
-using System;
-using System.Net.Http;
-using System.Net.Http.Json;
-using System.Text;
-using System.Text.Json;
-using System.Threading.Tasks;
-using Newtonsoft.Json;
-
-namespace _0_Framework.Application.UID;
-
-public class UidService : IUidService
-{
- private readonly HttpClient _httpClient;
- private const string BaseUrl = "https://json-api.uid.ir/api/inquiry/";
-
- public UidService()
- {
- _httpClient = new HttpClient()
- {
- BaseAddress = new Uri(BaseUrl)
- };
- }
-
- public async Task GetPersonalInfo(string nationalCode, string birthDate)
- {
- var request = new PersonalInfoRequest
- {
- BirthDate = birthDate,
- NationalId = nationalCode,
- RequestContext = new UidRequestContext()
- };
- var json = JsonConvert.SerializeObject(request);
- var contentType = new StringContent(json, Encoding.UTF8, "application/json");
-
- try
- {
- var requestResult = await _httpClient.PostAsync("person/v2", contentType);
- if (!requestResult.IsSuccessStatusCode)
- return null;
- var responseResult = await requestResult.Content.ReadFromJsonAsync();
- if (responseResult.BasicInformation != null)
- {
- responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName?.ToPersian();
- responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName?.ToPersian();
- responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName?.ToPersian();
- }
-
- return responseResult;
- }
- catch
- {
-
- return new PersonalInfoResponse(new UidBasicInformation(),
- new IdentificationInformation(default, default, default, default, default), new RegistrationStatus(),
- new ResponseContext(new UidStatus(14, "")));
- }
-
- }
-
-
- public async Task IsMachPhoneWithNationalCode(string nationalCode, string phoneNumber)
- {
- var request = new PersonalInfoRequest
- {
- MobileNumber = phoneNumber,
- NationalId = nationalCode,
- RequestContext = new UidRequestContext()
- };
- var json = JsonConvert.SerializeObject(request);
- var contentType = new StringContent(json, Encoding.UTF8, "application/json");
-
- var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
- if (!requestResult.IsSuccessStatusCode)
- return null;
-
- var responseResult = await requestResult.Content.ReadFromJsonAsync();
- return responseResult;
- }
-}
\ No newline at end of file
diff --git a/0_Framework/Domain/CustomizeCheckoutShared/Base/BaseCustomizeEntity.cs b/0_Framework/Domain/CustomizeCheckoutShared/Base/BaseCustomizeEntity.cs
index a8522d14..13eae1f7 100644
--- a/0_Framework/Domain/CustomizeCheckoutShared/Base/BaseCustomizeEntity.cs
+++ b/0_Framework/Domain/CustomizeCheckoutShared/Base/BaseCustomizeEntity.cs
@@ -119,7 +119,7 @@ public class BaseCustomizeEntity : EntityBase
public BreakTime BreakTime { get; protected set; }
- public List WeeklyOffDays { get; set; }
+ public List WeeklyOffDays { get; set; } = [];
public void FridayWorkToWeeklyDayOfWeek()
{
diff --git a/0_Framework/Domain/IRepository.cs b/0_Framework/Domain/IRepository.cs
index 8c4b008a..209a5f29 100644
--- a/0_Framework/Domain/IRepository.cs
+++ b/0_Framework/Domain/IRepository.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
+using Microsoft.EntityFrameworkCore.Storage;
namespace _0_Framework.Domain;
@@ -17,4 +18,6 @@ public interface IRepository where T:class
bool Exists(Expression> expression);
void SaveChanges();
Task SaveChangesAsync();
+ Task BeginTransactionAsync();
+
}
\ No newline at end of file
diff --git a/0_Framework/Exceptions/BadRequestException.cs b/0_Framework/Exceptions/BadRequestException.cs
index ac8324b7..7a85e96f 100644
--- a/0_Framework/Exceptions/BadRequestException.cs
+++ b/0_Framework/Exceptions/BadRequestException.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
namespace _0_Framework.Exceptions;
@@ -14,5 +15,13 @@ public class BadRequestException:Exception
Details = details;
}
+ public BadRequestException(string message, Dictionary extra) :
+ base(message)
+ {
+ Extra = extra;
+ }
+
public string Details { get; }
+ public Dictionary Extra { get; set; }
+
}
\ No newline at end of file
diff --git a/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs b/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs
index a3a8fc4c..e6fd9da1 100644
--- a/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs
+++ b/0_Framework/Exceptions/Handler/CustomExceptionHandler.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Diagnostics;
@@ -24,37 +25,42 @@ public class CustomExceptionHandler : IExceptionHandler
"Error Message: {exceptionMessage}, Time of occurrence {time}",
exception.Message, DateTime.UtcNow);
- (string Detail, string Title, int StatusCode) details = exception switch
+ (string Detail, string Title, int StatusCode, Dictionary? Extra) details = exception switch
{
InternalServerException =>
(
exception.Message,
exception.GetType().Name,
- context.Response.StatusCode = StatusCodes.Status500InternalServerError
+ context.Response.StatusCode = StatusCodes.Status500InternalServerError,
+ null
),
- BadRequestException =>
+ BadRequestException bre =>
(
exception.Message,
exception.GetType().Name,
- context.Response.StatusCode = StatusCodes.Status400BadRequest
+ context.Response.StatusCode = StatusCodes.Status400BadRequest,
+ bre.Extra
),
NotFoundException =>
(
exception.Message,
exception.GetType().Name,
- context.Response.StatusCode = StatusCodes.Status404NotFound
+ context.Response.StatusCode = StatusCodes.Status404NotFound,
+ null
),
UnAuthorizeException =>
(
exception.Message,
exception.GetType().Name,
- context.Response.StatusCode = StatusCodes.Status401Unauthorized
+ context.Response.StatusCode = StatusCodes.Status401Unauthorized,
+ null
),
_ =>
(
exception.Message,
exception.GetType().Name,
- context.Response.StatusCode = StatusCodes.Status500InternalServerError
+ context.Response.StatusCode = StatusCodes.Status500InternalServerError,
+ null
)
};
@@ -63,9 +69,12 @@ public class CustomExceptionHandler : IExceptionHandler
Title = details.Title,
Detail = details.Detail,
Status = details.StatusCode,
- Instance = context.Request.Path
+ Instance = context.Request.Path,
+ Extensions = details.Extra ?? new Dictionary()
};
+
+
problemDetails.Extensions.Add("traceId", context.TraceIdentifier);
await context.Response.WriteAsJsonAsync(problemDetails, cancellationToken: cancellationToken);
diff --git a/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs b/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs
new file mode 100644
index 00000000..bcb351bd
--- /dev/null
+++ b/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs
@@ -0,0 +1,8 @@
+namespace _0_Framework.InfraStructure.Mongo;
+
+public class MongoDbConfig
+{
+ public string ConnectionString { get; set; } = null!;
+
+ public string DatabaseName { get; set; } = null!;
+}
\ No newline at end of file
diff --git a/0_Framework/InfraStructure/QueryableExtensions.cs b/0_Framework/InfraStructure/QueryableExtensions.cs
index 8d28d29f..bcfb7bc6 100644
--- a/0_Framework/InfraStructure/QueryableExtensions.cs
+++ b/0_Framework/InfraStructure/QueryableExtensions.cs
@@ -5,14 +5,14 @@ namespace _0_Framework.InfraStructure;
public static class QueryableExtensions
{
- public static IQueryable ApplyPagination(this IQueryable query, int page, int pageSize)
+ public static IQueryable ApplyPagination(this IQueryable query, int page, int pageSize = 30)
{
if (page <= 0) page = 1;
if (pageSize <= 0) pageSize = 10;
return query.Skip((page - 1) * pageSize).Take(pageSize);
}
- public static IEnumerable ApplyPagination(this IEnumerable source, int page, int pageSize)
+ public static IEnumerable ApplyPagination(this IEnumerable source, int page, int pageSize = 30)
{
if (page <= 0) page = 1;
if (pageSize <= 0) pageSize = 10;
diff --git a/0_Framework/InfraStructure/RepositoryBase.cs b/0_Framework/InfraStructure/RepositoryBase.cs
index 3c573b18..8f8a9fac 100644
--- a/0_Framework/InfraStructure/RepositoryBase.cs
+++ b/0_Framework/InfraStructure/RepositoryBase.cs
@@ -6,6 +6,7 @@ using System.Text;
using System.Threading.Tasks;
using _0_Framework.Domain;
using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Storage;
namespace _0_Framework.InfraStructure
{
@@ -70,5 +71,10 @@ namespace _0_Framework.InfraStructure
{
await _context.SaveChangesAsync();
}
+
+ public async Task BeginTransactionAsync()
+ {
+ return await _context.Database.BeginTransactionAsync();
+ }
}
}
diff --git a/AccountManagement.Application.Contracts/Account/IAccountApplication.cs b/AccountManagement.Application.Contracts/Account/IAccountApplication.cs
index 89f9693a..ac21411b 100644
--- a/AccountManagement.Application.Contracts/Account/IAccountApplication.cs
+++ b/AccountManagement.Application.Contracts/Account/IAccountApplication.cs
@@ -64,4 +64,13 @@ public interface IAccountApplication
///
///
public bool CheckExistClientAccount(string userName);
+ List GetAdminAccountsNew();
+
+ void CameraLogin(CameraLoginRequest request);
+}
+
+public class CameraLoginRequest
+{
+ public string UserName { get; set; }
+ public string Password { get; set; }
}
\ No newline at end of file
diff --git a/AccountManagement.Application/AccountApplication.cs b/AccountManagement.Application/AccountApplication.cs
index 7c32b7db..74880b13 100644
--- a/AccountManagement.Application/AccountApplication.cs
+++ b/AccountManagement.Application/AccountApplication.cs
@@ -18,6 +18,7 @@ using Microsoft.AspNetCore.Mvc.Rendering;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using Company.Domain.WorkshopAgg;
using System.Security.Claims;
+using _0_Framework.Exceptions;
using AccountManagement.Domain.PositionAgg;
using AccountManagement.Domain.SubAccountAgg;
using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg;
@@ -259,7 +260,8 @@ public class AccountApplication : IAccountApplication
var workshop = workshopList.First();
authViewModel.WorkshopName = workshop.Name;
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id);
- }
+ authViewModel.WorkshopId = workshop.Id;
+ }
}
_authHelper.Signin(authViewModel);
@@ -317,6 +319,7 @@ public class AccountApplication : IAccountApplication
var workshop = workshopList.First();
authViewModel.WorkshopName = workshop.WorkshopName;
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId);
+ authViewModel.WorkshopId = workshop.WorkshopId;
}
_authHelper.Signin(authViewModel);
idAutoriz = 2;
@@ -368,6 +371,7 @@ public class AccountApplication : IAccountApplication
var workshop = workshopList.First();
authViewModel.WorkshopName = workshop.Name;
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id);
+ authViewModel.WorkshopId = workshop.Id;
}
}
@@ -515,6 +519,7 @@ public class AccountApplication : IAccountApplication
var workshop = authViewModel.WorkshopList.First();
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.Id);
authViewModel.WorkshopName = workshop.Name;
+ authViewModel.WorkshopId = workshop.Id;
}
_authHelper.Signin(authViewModel);
return operation.Succcedded(2);
@@ -795,4 +800,33 @@ public class AccountApplication : IAccountApplication
return _accountRepository.CheckExistClientAccount(userName);
}
+ public List GetAdminAccountsNew()
+ {
+ return _accountRepository.GetAdminAccountsNew();
+ }
+
+ public void CameraLogin(CameraLoginRequest request)
+ {
+ var cameraAccount = _cameraAccountRepository.GetBy(request.UserName);
+
+ if (cameraAccount == null)
+ {
+ throw new BadRequestException(ApplicationMessages.WrongUserPass);
+ }
+
+ (bool Verified, bool NeedUpgrade) result = _passwordHasher.Check(cameraAccount.Password, request.Password);
+
+ if (!result.Verified)
+ throw new BadRequestException(ApplicationMessages.WrongUserPass);
+
+ var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
+
+ var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
+ cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId,
+ cameraAccount.IsActiveSting);
+ if (cameraAccount.IsActiveSting != "true")
+ throw new BadRequestException(ApplicationMessages.WrongUserPass);
+
+ _authHelper.CameraSignIn(authViewModel);
+ }
}
\ No newline at end of file
diff --git a/Company.Domain/AuthorizedBankDetailsAgg/AuthorizedBankDetails.cs b/Company.Domain/AuthorizedBankDetailsAgg/AuthorizedBankDetails.cs
new file mode 100644
index 00000000..198c1a44
--- /dev/null
+++ b/Company.Domain/AuthorizedBankDetailsAgg/AuthorizedBankDetails.cs
@@ -0,0 +1,46 @@
+using System.Collections.Generic;
+using _0_Framework_b.Domain;
+
+namespace Company.Domain.AuthorizedBankDetailsAgg
+{
+ public class AuthorizedBankDetails : EntityBase
+ {
+ private AuthorizedBankDetails()
+ {
+ OwnersList = new List();
+ }
+
+ public AuthorizedBankDetails(string cardNumber, string accountNumber, string ban, string bankName, List ownersList)
+ {
+ CardNumber = cardNumber;
+ AccountNumber = accountNumber;
+ IBan = ban;
+ BankName = bankName;
+ OwnersList = ownersList ?? new List();
+ }
+
+ public string CardNumber { get; private set; }
+ public string AccountNumber { get; private set; }
+ public string IBan { get; private set; }
+ public string BankName { get; private set; }
+ public List OwnersList { get; private set; }
+ }
+
+ public class AuthorizedBankDetailsOwner // Value Object - not inheriting from EntityBase
+ {
+ private AuthorizedBankDetailsOwner() { }
+
+ public AuthorizedBankDetailsOwner(string fName, string lName, string nationalIdentifier, string customerType)
+ {
+ FName = fName;
+ LName = lName;
+ NationalIdentifier = nationalIdentifier;
+ CustomerType = customerType;
+ }
+
+ public string FName { get; private set; }
+ public string LName { get; private set; }
+ public string NationalIdentifier { get; private set; }
+ public string CustomerType { get; private set; }
+ }
+}
\ No newline at end of file
diff --git a/Company.Domain/AuthorizedBankDetailsAgg/IAuthorizedBankDetailsRepository.cs b/Company.Domain/AuthorizedBankDetailsAgg/IAuthorizedBankDetailsRepository.cs
new file mode 100644
index 00000000..7b514ff5
--- /dev/null
+++ b/Company.Domain/AuthorizedBankDetailsAgg/IAuthorizedBankDetailsRepository.cs
@@ -0,0 +1,13 @@
+using _0_Framework_b.Domain;
+using System.Collections.Generic;
+using Company.Application.Contracts.AuthorizedBankDetails;
+
+namespace Company.Domain.AuthorizedBankDetailsAgg
+{
+ public interface IAuthorizedBankDetailsRepository : IRepository
+ {
+ EditAuthorizedBankDetails GetDetails(long id);
+ List Search(AuthorizedBankDetailsSearchModel searchModel);
+ AuthorizedBankDetailsViewModel GetByIban(string iban);
+ }
+}
diff --git a/Company.Domain/AuthorizedPersonAgg/AuthorizedPerson.cs b/Company.Domain/AuthorizedPersonAgg/AuthorizedPerson.cs
new file mode 100644
index 00000000..93819400
--- /dev/null
+++ b/Company.Domain/AuthorizedPersonAgg/AuthorizedPerson.cs
@@ -0,0 +1,51 @@
+using System;
+using _0_Framework.Domain;
+
+namespace Company.Domain.AuthorizedPersonAgg;
+
+public class AuthorizedPerson : EntityBase
+{
+ public string NationalCode { get; private set; }
+ public string FirstName { get; private set; }
+ public string LastName { get; private set; }
+ public string FatherName { get; private set; }
+ public string BirthDate { get; private set; }
+ public string Gender { get; private set; }
+ public string DeathStatus { get; private set; }
+ public string ShenasnameSeri { get; private set; }
+ public string ShenasnameSerial { get; private set; }
+ public string ShenasnamehNumber { get; private set; }
+ public bool IsVerified { get; private set; }
+ public DateTime? VerificationDate { get; private set; }
+
+ public AuthorizedPerson(string nationalCode, string firstName, string lastName, string fatherName,
+ string birthDate, string gender, string deathStatus, string shenasnameSeri,
+ string shenasnameSerial, string shenasnamehNumber)
+ {
+ NationalCode = nationalCode;
+ FirstName = firstName;
+ LastName = lastName;
+ FatherName = fatherName;
+ BirthDate = birthDate;
+ Gender = gender;
+ DeathStatus = deathStatus;
+ ShenasnameSeri = shenasnameSeri;
+ ShenasnameSerial = shenasnameSerial;
+ ShenasnamehNumber = shenasnamehNumber;
+ IsVerified = true;
+ VerificationDate = DateTime.Now;
+ }
+
+ public void UpdatePersonalInfo(string firstName, string lastName, string fatherName,
+ string gender, string deathStatus)
+ {
+ FirstName = firstName;
+ LastName = lastName;
+ FatherName = fatherName;
+ Gender = gender;
+ DeathStatus = deathStatus;
+ VerificationDate = DateTime.Now;
+ }
+
+ protected AuthorizedPerson() { }
+}
diff --git a/Company.Domain/AuthorizedPersonAgg/IAuthorizedPersonRepository.cs b/Company.Domain/AuthorizedPersonAgg/IAuthorizedPersonRepository.cs
new file mode 100644
index 00000000..2157150a
--- /dev/null
+++ b/Company.Domain/AuthorizedPersonAgg/IAuthorizedPersonRepository.cs
@@ -0,0 +1,9 @@
+using _0_Framework.Domain;
+
+namespace Company.Domain.AuthorizedPersonAgg;
+
+public interface IAuthorizedPersonRepository : IRepository
+{
+ AuthorizedPerson GetByNationalCode(string nationalCode);
+ bool ExistsByNationalCode(string nationalCode);
+}
diff --git a/Company.Domain/CheckoutAgg/Checkout.cs b/Company.Domain/CheckoutAgg/Checkout.cs
index a0a24239..eece536d 100644
--- a/Company.Domain/CheckoutAgg/Checkout.cs
+++ b/Company.Domain/CheckoutAgg/Checkout.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
+using System.Security.AccessControl;
using _0_Framework.Application;
using _0_Framework.Domain;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
@@ -12,25 +13,25 @@ namespace Company.Domain.CheckoutAgg;
public class Checkout : EntityBase
{
- private Checkout()
- {
-
- }
+ public Checkout()
+ {
+ }
+
public Checkout(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth,
long employeeId, string workshopName, long workshopId, string contractNo, DateTime contractStart,
- DateTime contractEnd, string month, string year, long contractId, long workingHoursId,
+ DateTime contractEnd, string month, string year, long contractId, long workingHoursId,
double monthlySalary, double baseYearsPay, double consumableItems, double housingAllowance,
double overtimePay, double nightworkPay, double fridayPay, double missionPay, double shiftPay,
double familyAllowance, double bonusesPay, double yearsPay, double leavePay,
double insuranceDeduction, double taxDeducation, double installmentDeduction,
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
- , string archiveCode, string personnelCode,
+ , string archiveCode, string personnelCode,
string totalClaims, string totalDeductions, double totalPayment, string signature, double marriedAllowance, bool leaveCheckout,
double creditLeaves, double absencePeriod, double averageHoursPerDay, bool hasRollCall, string overTimeWorkvalue,
string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue,
string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute,
ICollection loanInstallments,
- ICollection salaryAids,CheckoutRollCall checkoutRollCall)
+ ICollection salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList)
{
EmployeeFullName = employeeFullName;
FathersName = fathersName;
@@ -90,14 +91,17 @@ public class Checkout : EntityBase
LoanInstallments = loanInstallments;
SalaryAids = salaryAids;
CheckoutRollCall = checkoutRollCall;
+ EmployeeMandatoryHours = employeeMandatoryHours;
+ HasInsuranceShareTheSameAsList = hasInsuranceShareTheSameAsList;
}
+
public string EmployeeFullName { get; private set; }
public string IsActiveString { get; private set; }
public string Signature { get; private set; }
public string FathersName { get; private set; }
public string NationalCode { get; private set; }
- public string DateOfBirth { get; private set; }
+ public string DateOfBirth { get; private set; }
public long EmployeeId { get; private set; }
public string WorkshopName { get; private set; }
@@ -133,7 +137,7 @@ public class Checkout : EntityBase
public double SalaryAidDeduction { get; private set; }
public double AbsenceDeduction { get; private set; }
-
+
public string SumOfWorkingDays { get; private set; }
public string ArchiveCode { get; private set; }
public string PersonnelCode { get; private set; }
@@ -155,49 +159,70 @@ public class Checkout : EntityBase
//میانگین ساعت کار در یک روز
public double AverageHoursPerDay { get; private set; }
public bool HasRollCall { get; private set; }
- ///
- /// مقدار اضافه کار
- ///
+ ///
+ /// مقدار اضافه کار
+ ///
public string OverTimeWorkValue { get; private set; }
-
- ///
- /// مقدار شبکاری
- ///
+
+ ///
+ /// مقدار شبکاری
+ ///
public string OverNightWorkValue { get; private set; }
-
- ///
- /// مقدار جمعه کاری
- ///
- public string FridayWorkValue { get; private set; }
-
- ///
- /// درصد نوبت کاری
- ///
- public string RotatingShiftValue { get; private set; }
-
- ///
+
+ ///
+ /// مقدار جمعه کاری
+ ///
+ public string FridayWorkValue { get; private set; }
+
+ ///
+ /// درصد نوبت کاری
+ ///
+ public string RotatingShiftValue { get; private set; }
+
+ ///
/// مقدار غیبت
///
- public string AbsenceValue { get; private set; }
+ public string AbsenceValue { get; private set; }
- ///
- /// تعداد روزهای محاسبه شده برای مزد مرخصی
- ///
- public string TotalDayOfLeaveCompute { get; private set; }
- ///
- /// تعداد روزهای محاسبه شده برای سنوات
- ///
- public string TotalDayOfYearsCompute { get; private set; }
- ///
- /// تعداد روزهای محاسبه شده برای عیدی و پاداش
- ///
- public string TotalDayOfBunosesCompute { get; private set; }
+ ///
+ /// تعداد روزهای محاسبه شده برای مزد مرخصی
+ ///
+ public string TotalDayOfLeaveCompute { get; private set; }
+ ///
+ /// تعداد روزهای محاسبه شده برای سنوات
+ ///
+ public string TotalDayOfYearsCompute { get; private set; }
+ ///
+ /// تعداد روزهای محاسبه شده برای عیدی و پاداش
+ ///
+ public string TotalDayOfBunosesCompute { get; private set; }
+ ///
+ /// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد
+ ///
+ public bool HasAmountConflict { get; private set; }
- #region valueObjects
+ ///
+ /// ساعت موظفی پرسنل در ماه
+ ///
+ public TimeSpan EmployeeMandatoryHours { get; set; }
- public ICollection LoanInstallments { get; set; } = [];
- public ICollection SalaryAids { get; set; } = [];
+ ///
+ /// آیا حق بیمه مشابه لیست بیمه حساب شده؟
+ ///
+ public bool HasInsuranceShareTheSameAsList { get; private set; }
+
+ ///
+ /// آیا فیش نیاز به بروزرسانی دارد
+ ///
+ public bool IsUpdateNeeded { get; private set; }
+
+ public List CheckoutWarningMessageList { get; set; }
+
+ #region valueObjects
+
+ public ICollection LoanInstallments { get; set; } = [];
+ public ICollection SalaryAids { get; set; } = [];
public CheckoutRollCall CheckoutRollCall { get; private set; }
#endregion
@@ -266,7 +291,7 @@ public class Checkout : EntityBase
var year = contarctStart.ToFarsiYear();
var sumYear = year.Substring(Math.Max(0, year.Length - 2));
-
+
ContractNo = archiveCode + "/" + personnelCode + "/" + sumYear + "/" + month;
}
public void Active()
@@ -301,7 +326,7 @@ public class Checkout : EntityBase
}
- public void SetSalaryAid(ICollection salaryAids,double salaryAidAmount)
+ public void SetSalaryAid(ICollection salaryAids, double salaryAidAmount)
{
SalaryAids = salaryAids;
SalaryAidDeduction = salaryAidAmount;
@@ -316,23 +341,48 @@ public class Checkout : EntityBase
{
CheckoutRollCall = checkoutRollCall;
}
+
+ public void SetAmountConflict(bool hasAmountConflict)
+ {
+ HasAmountConflict = hasAmountConflict;
+ }
+
+ public void SetEmployeeMandatoryHours(TimeSpan employeeMandatoryHours)
+ {
+ EmployeeMandatoryHours = employeeMandatoryHours;
+ }
+
+ public void SetInsuranceShare()
+ {
+ HasInsuranceShareTheSameAsList = true;
+ }
+
+ ///
+ /// نیاز به آپدیت
+ ///
+ public void SetUpdateNeeded()
+ {
+ IsUpdateNeeded = true;
+ }
+
+
}
public class CheckoutRollCall
{
- private CheckoutRollCall(){}
- public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan,
- TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan,
- ICollection rollCallDaysCollection)
- {
- TotalMandatoryTimeSpan = totalMandatoryTimeSpan;
- TotalPresentTimeSpan = totalPresentTimeSpan;
- TotalBreakTimeSpan = totalBreakTimeSpan;
- TotalWorkingTimeSpan = totalWorkingTimeSpan;
- TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan;
- TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan;
- RollCallDaysCollection = rollCallDaysCollection;
- }
+ private CheckoutRollCall() { }
+ public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan,
+ TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan,
+ ICollection rollCallDaysCollection)
+ {
+ TotalMandatoryTimeSpan = totalMandatoryTimeSpan;
+ TotalPresentTimeSpan = totalPresentTimeSpan;
+ TotalBreakTimeSpan = totalBreakTimeSpan;
+ TotalWorkingTimeSpan = totalWorkingTimeSpan;
+ TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan;
+ TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan;
+ RollCallDaysCollection = rollCallDaysCollection;
+ }
///
@@ -373,27 +423,27 @@ public class CheckoutRollCall
public class CheckoutRollCallDay
{
- private CheckoutRollCallDay(){}
- public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate,
- string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan,
- bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday,
- bool isHoliday, string leaveType)
- {
- Date = date;
- FirstStartDate = firstStartDate;
- FirstEndDate = firstEndDate;
- SecondStartDate = secondStartDate;
- SecondEndDate = secondEndDate;
- BreakTimeSpan = breakTimeSpan;
- IsSliced = isSliced;
- WorkingTimeSpan = workingTimeSpan;
- IsAbsent = isAbsent;
- IsFriday = isFriday;
- IsHoliday = isHoliday;
- LeaveType = leaveType;
- }
+ private CheckoutRollCallDay() { }
+ public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate,
+ string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan,
+ bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday,
+ bool isHoliday, string leaveType)
+ {
+ Date = date;
+ FirstStartDate = firstStartDate;
+ FirstEndDate = firstEndDate;
+ SecondStartDate = secondStartDate;
+ SecondEndDate = secondEndDate;
+ BreakTimeSpan = breakTimeSpan;
+ IsSliced = isSliced;
+ WorkingTimeSpan = workingTimeSpan;
+ IsAbsent = isAbsent;
+ IsFriday = isFriday;
+ IsHoliday = isHoliday;
+ LeaveType = leaveType;
+ }
- public long Id { get; set; }
+ public long Id { get; set; }
///
/// تاریخ
@@ -437,12 +487,12 @@ public class CheckoutRollCallDay
///
/// آیا غیبت است
///
- public bool IsAbsent { get; private set; }
+ public bool IsAbsent { get; private set; }
///
/// آیا جمعه است
///
- public bool IsFriday { get; private set; }
+ public bool IsFriday { get; private set; }
///
/// آیا تعطیل رسمی است
@@ -454,6 +504,6 @@ public class CheckoutRollCallDay
///
public string LeaveType { get; private set; }
- public long CheckoutId { get; set; }
+ public long CheckoutId { get; set; }
}
\ No newline at end of file
diff --git a/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs b/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs
new file mode 100644
index 00000000..167a9664
--- /dev/null
+++ b/Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs
@@ -0,0 +1,32 @@
+using _0_Framework.Application.Enums;
+using _0_Framework.Domain;
+
+namespace Company.Domain.CheckoutAgg;
+
+public class CheckoutWarningMessage : EntityBaseWithoutCreationDate
+{
+ public CheckoutWarningMessage(string warningMessage, long checkoutId, TypeOfCheckoutWarning typeOfCheckoutWarning)
+ {
+ WarningMessage = warningMessage;
+ CheckoutId = checkoutId;
+ TypeOfCheckoutWarning = typeOfCheckoutWarning;
+ }
+
+ ///
+ /// پیام هشدار
+ ///
+ public string WarningMessage { get; private set; }
+
+
+ ///
+ /// آی دی فیش حقوقی
+ ///
+ public long CheckoutId { get; private set; }
+
+ ///
+ /// نوع هشدار فیش حقوقی
+ ///
+ public TypeOfCheckoutWarning TypeOfCheckoutWarning { get; private set; }
+
+ public Checkout Checkout { get; set; }
+}
\ No newline at end of file
diff --git a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs
index 3a71ea7c..5294bbaa 100644
--- a/Company.Domain/CheckoutAgg/ICheckoutRepository.cs
+++ b/Company.Domain/CheckoutAgg/ICheckoutRepository.cs
@@ -78,4 +78,6 @@ public interface ICheckoutRepository : IRepository
long workshopId, DateTime start, DateTime end);
#endregion
+
+ Task GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
}
\ No newline at end of file
diff --git a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs
index b9c58e62..1e67bc01 100644
--- a/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs
+++ b/Company.Domain/ClassifiedSalaryAgg/ClassifiedSalary.cs
@@ -10,6 +10,7 @@ namespace Company.Domain.ClassifiedSalaryAgg
{
public class ClassifiedSalary : EntityBase
{
+ //test//test
public ClassifiedSalary(double group1, double group2, double group3, double group4, double group5, double group6, double group7, double group8, double group9, double group10, double group11, double group12, double group13, double group14, double group15, double group16, double group17, double group18, double group19, double group20, DateTime startDate, DateTime endDate, int year)
{
Group1 = group1;
diff --git a/Company.Domain/Company.Domain.csproj b/Company.Domain/Company.Domain.csproj
index 76106517..09e112b7 100644
--- a/Company.Domain/Company.Domain.csproj
+++ b/Company.Domain/Company.Domain.csproj
@@ -18,4 +18,8 @@
+
+
+
+
diff --git a/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs b/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs
index d76c5fd4..26e6e6df 100644
--- a/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs
+++ b/Company.Domain/ContarctingPartyAgg/IPersonalContractingPartyRepository.cs
@@ -15,7 +15,7 @@ public interface IPersonalContractingPartyRepository :IRepository Search(PersonalContractingPartySearchModel searchModel2);
- int GetLastArchiveCode();
+ int GetLastNewArchiveCode();
#region Mahan
List SearchByName(string name);
@@ -74,4 +74,6 @@ public interface IPersonalContractingPartyRepository :IRepository GetRealDetails(long id);
Task GetLegalDetails(long id);
+ Task GetByNationalCode(string nationalCode);
+ Task GetByRegisterId(string registerId);
}
\ No newline at end of file
diff --git a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
index d2dc26bf..abe676c0 100644
--- a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
+++ b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
@@ -73,12 +73,27 @@ public class PersonalContractingParty : EntityBase
/// آیا از طریق ای پی ای احراز هویت شده است
///
public bool IsAuthenticated { get; private set; }
-
-
+
///
/// جنسیت
///
public Gender Gender { get; private set; }
+
+ ///
+ /// سمت و صاحب امضاء اوراق (فقط برای طرف حقوقی)
+ ///
+ public string LegalPosition { get; private set; }
+
+ ///
+ /// نام مدیر عامل (فقط برای طرف حقوقی)
+ ///
+ public string CeoFName { get; private set; }
+
+ ///
+ /// نام خانوادگی مدیر عامل (فقط برای طرف حقوقی)
+ ///
+ public string CeoLName { get; private set; }
+
#endregion
@@ -94,7 +109,8 @@ public class PersonalContractingParty : EntityBase
public PersonalContractingParty(string fName, string lName, string nationalcode, string idNumber,
/*string legalName,*/ string registerId, string nationalId, string isLegal,
string phone, string agentPhone, string address,long representativeId,
- string representativeFullName, int archiveCode, string state,string city, string zone, string sureName)
+ string representativeFullName, int archiveCode, string state,string city,
+ string zone, string sureName,string ceoFName,string ceoLName,string legalPosition=null)
{
FName = fName;
@@ -120,8 +136,9 @@ public class PersonalContractingParty : EntityBase
IsActiveString = "true";
IsBlock = "false";
BlockTimes = 0;
-
-
+ LegalPosition = legalPosition;
+ CeoFName = ceoFName;
+ CeoLName = ceoLName;
}
@@ -151,7 +168,7 @@ public class PersonalContractingParty : EntityBase
}
public void EditLegal(string lName, string registerId, string nationalId, string phone, string agentPhone, string address, long representativeId, string representativeFullName, int archiveCode,
- string state, string city, string zone, string sureName)
+ string state, string city, string zone, string sureName,string legalPosition = null)
{
LName = lName;
@@ -168,6 +185,8 @@ public class PersonalContractingParty : EntityBase
State = state;
City = city;
Zone = zone;
+ if (legalPosition != null)
+ LegalPosition = legalPosition;
}
@@ -203,7 +222,8 @@ public class PersonalContractingParty : EntityBase
IsAuthenticated = true;
}
- public void Authentication(string fName, string lName, string fatherName,string idNumber, string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender)
+ public void Authentication(string fName, string lName, string fatherName,string idNumber,
+ string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender,string phone)
{
this.FName = fName;
this.LName = lName;
@@ -214,6 +234,22 @@ public class PersonalContractingParty : EntityBase
this.IdNumber = idNumber;
this.Gender = gender;
this.IsAuthenticated = true;
+ Phone = phone;
+ }
+
+ public void LegalAuthentication(string fName, string lName, string fatherName,string idNumber, string idNumberSeri,
+ string idNumberSerial, string dateOfBirth, Gender gender,string phone)
+ {
+ CeoFName = fName;
+ CeoLName = lName;
+ this.FatherName = fatherName;
+ this.IdNumberSeri = idNumberSeri;
+ this.IdNumberSerial = idNumberSerial;
+ this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : null;
+ this.IdNumber = idNumber;
+ this.Gender = gender;
+ this.IsAuthenticated = true;
+ Phone = phone;
}
public void RegisterComplete(string fatherName, string idNumberSeri, string idNumberSerial, DateTime dateOfBirth, Gender gender)
diff --git a/Company.Domain/ContractAgg/Contract.cs b/Company.Domain/ContractAgg/Contract.cs
index 24e2e371..5ad80d1f 100644
--- a/Company.Domain/ContractAgg/Contract.cs
+++ b/Company.Domain/ContractAgg/Contract.cs
@@ -17,7 +17,7 @@ public class Contract : EntityBase
public Contract(long personnelCode, long employeeId, long employerId,
long workshopIds, long yearlySalaryId, DateTime contarctStart, DateTime contractEnd, string dayliWage,
string archiveCode, DateTime getWorkDate, DateTime setContractDate, string jobType,
- string contractType, string workshopAddress1, string workshopAddress2, string consumableItems, long jobTypeId, string housingAllowance, string agreementSalary, string workingHoursWeekly, string familyAllowance, string contractPeriod)
+ string contractType, string workshopAddress1, string workshopAddress2, string consumableItems, long jobTypeId, string housingAllowance, string agreementSalary, string workingHoursWeekly, string familyAllowance, string contractPeriod, double dailySalaryAffected, double baseYearAffected, double dailySalaryUnAffected, double baseYearUnAffected, bool hasManualDailyWage, string dailyWageType)
{
PersonnelCode = personnelCode;
EmployeeId = employeeId;
@@ -45,6 +45,19 @@ public class Contract : EntityBase
WorkingHoursWeekly = workingHoursWeekly;
FamilyAllowance = familyAllowance;
ContractPeriod = contractPeriod;
+
+ //پراپرتی های جدید برای دستمزد دلخواه
+ #region NewManualDailyWage
+ DailySalaryAffected = dailySalaryAffected;
+ BaseYearAffected = baseYearAffected;
+ DailySalaryUnAffected = dailySalaryUnAffected;
+ BaseYearUnAffected = baseYearUnAffected;
+ HasManualDailyWage = hasManualDailyWage;
+ DailyWageType = dailyWageType;
+
+ #endregion
+
+
Signature = "0";
@@ -65,7 +78,42 @@ public class Contract : EntityBase
public DateTime SetContractDate { get; private set; }
public string JobType { get; private set; }
public string ContractType { get; private set; }
+ ///
+ /// مزد تجمیعی یعد از تاثیر ساعت کار
+ ///
public string DayliWage { get; private set; }
+
+ ///
+ /// دستمزد روزانه خام بعد از تاثیر ساعت کار
+ ///
+ public double DailySalaryAffected { get; set; }
+
+ ///
+ /// پایه سنوات بعد از تاثیر ساعت کار
+ ///
+ public double BaseYearAffected { get; set; }
+
+
+ ///
+ /// دستمزد روزانه قبل از تاثیر ساعت کار
+ ///
+ public double DailySalaryUnAffected { get; set; }
+
+ ///
+ /// پایه سنوات قبل از تاثیر ساعت کار
+ ///
+ public double BaseYearUnAffected { get; set; }
+
+ ///
+ /// آیا دستمزد روزانه دستی وارد شده است؟
+ ///
+ public bool HasManualDailyWage { get; set; }
+
+ ///
+ /// نوع دستمزد انتخاب شده
+ ///
+ public string DailyWageType { get; set; }
+
public string IsActiveString { get; private set; }
public string ArchiveCode { get; private set; }
public string WorkshopAddress1 { get; private set; }
@@ -89,6 +137,7 @@ public class Contract : EntityBase
public Contract()
{
+
WorkingHoursList = new List();
}
public void Edit(long pesrsonnelCode, long employeeId, long employerId, long workshopId, long yearlySalaryId,
diff --git a/Company.Domain/ContractAgg/IContractRepository.cs b/Company.Domain/ContractAgg/IContractRepository.cs
index 808c7e3b..3d6ea269 100644
--- a/Company.Domain/ContractAgg/IContractRepository.cs
+++ b/Company.Domain/ContractAgg/IContractRepository.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.Contract;
@@ -9,6 +10,24 @@ namespace Company.Domain.ContractAgg;
public interface IContractRepository : IRepository
{
+ ///
+ /// دریافت مزد ارتقاء یافته
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart);
+
+ ///
+ /// دریافت لیست مزد ارتقاء یافته
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetManualDailWageList(long workshopId, long employeeId,
+ DateTime contractStart);
EditContract GetDetails(long id);
EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId);
diff --git a/Company.Domain/ContractingPartyBankAccountsAgg/IContractingPartyBankAccountsRepository.cs b/Company.Domain/ContractingPartyBankAccountsAgg/IContractingPartyBankAccountsRepository.cs
index 3b7dd277..e555fd6c 100644
--- a/Company.Domain/ContractingPartyBankAccountsAgg/IContractingPartyBankAccountsRepository.cs
+++ b/Company.Domain/ContractingPartyBankAccountsAgg/IContractingPartyBankAccountsRepository.cs
@@ -8,10 +8,12 @@ namespace Company.Domain.ContractingPartyBankAccountsAgg;
public interface IContractingPartyBankAccountsRepository:IRepository
{
- Task>> GetList(ContractingPartyBankAccountSearchModel searchModel);
- Task>> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
- Task>> IBanSelectList(string search, string selected);
+ Task GetList(ContractingPartyBankAccountSearchModel searchModel);
+ Task> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
+ Task> IBanSelectList(string search, string selected);
- Task>> CardNumberSelectList(string search, string selected);
- Task>> AccountNumberSelectList(string search, string selected);
+ Task> CardNumberSelectList(string search, string selected);
+ Task> AccountNumberSelectList(string search, string selected);
+ Task> GetAccountHolderNameSelectList(string search, string selected);
+ Task> ContractingPartyNamesSelectList(string search, string selected);
}
\ No newline at end of file
diff --git a/Company.Domain/CustomizeCheckoutAgg/CustomizeCheckout.cs b/Company.Domain/CustomizeCheckoutAgg/CustomizeCheckout.cs
index a5a5b953..637290cc 100644
--- a/Company.Domain/CustomizeCheckoutAgg/CustomizeCheckout.cs
+++ b/Company.Domain/CustomizeCheckoutAgg/CustomizeCheckout.cs
@@ -374,6 +374,13 @@ public class CustomizeCheckout : EntityBase
TotalPayment = TotalPayment - previousAmount + newAmount;
}
+ ///
+ /// آیا مغایرت مبلغ دارد
+ ///
+ public bool HasAmountConflict { get; private set; }
-
+ public void SetHasAmountConflict(bool hasConflict)
+ {
+ HasAmountConflict = hasConflict;
+ }
}
\ No newline at end of file
diff --git a/Company.Domain/CustomizeCheckoutTempAgg/CustomizeCheckoutTemp.cs b/Company.Domain/CustomizeCheckoutTempAgg/CustomizeCheckoutTemp.cs
index 8a3cb9f2..d6330491 100644
--- a/Company.Domain/CustomizeCheckoutTempAgg/CustomizeCheckoutTemp.cs
+++ b/Company.Domain/CustomizeCheckoutTempAgg/CustomizeCheckoutTemp.cs
@@ -377,4 +377,16 @@ public class CustomizeCheckoutTemp : EntityBase
{
TotalPayment = TotalPayment - previousAmount + newAmount;
}
+
+ ///
+ /// آیا مغایرت مبلغ دارد
+ ///
+ public bool HasAmountConflict { get; private set; }
+
+
+
+ public void SetHasAmountConflict(bool hasConflict)
+ {
+ HasAmountConflict = hasConflict;
+ }
}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeFaceEmbeddingAgg/EmployeeFaceEmbedding.cs b/Company.Domain/EmployeeFaceEmbeddingAgg/EmployeeFaceEmbedding.cs
new file mode 100644
index 00000000..d38fc151
--- /dev/null
+++ b/Company.Domain/EmployeeFaceEmbeddingAgg/EmployeeFaceEmbedding.cs
@@ -0,0 +1,189 @@
+using System;
+using System.Collections.Generic;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace Company.Domain.EmployeeFaceEmbeddingAgg;
+
+public class EmployeeFaceEmbedding
+ {
+ public EmployeeFaceEmbedding()
+ {
+ EmbeddingHistory = new List();
+ MetadataHistory = new List();
+ }
+
+ public EmployeeFaceEmbedding(string employeeFullName, long employeeId, long workshopId,
+ List embeddings, EmployeeFaceEmbeddingMetadata metadata)
+ {
+ Id = Guid.NewGuid().ToString();
+ EmployeeFullName = employeeFullName;
+ EmployeeId = employeeId;
+ WorkshopId = workshopId;
+ Embeddings = embeddings;
+ Metadata = metadata;
+ EmbeddingHistory = new List();
+ MetadataHistory = new List();
+ CreatedAt = DateTime.UtcNow;
+ UpdatedAt = DateTime.UtcNow;
+ }
+
+ [BsonId]
+ [BsonRepresentation(BsonType.String)]
+ public string Id { get; set; }
+
+ [BsonElement("employeeFullName")]
+ public string EmployeeFullName { get; set; }
+
+ [BsonElement("employeeId")]
+ public long EmployeeId { get; set; }
+
+ [BsonElement("workshopId")]
+ public long WorkshopId { get; set; }
+
+ [BsonElement("embeddings")]
+ public List Embeddings { get; set; }
+
+ [BsonElement("metadata")]
+ public EmployeeFaceEmbeddingMetadata Metadata { get; set; }
+
+ [BsonElement("embeddingHistory")]
+ public List EmbeddingHistory { get; set; }
+
+ [BsonElement("metadataHistory")]
+ public List MetadataHistory { get; set; }
+
+ [BsonElement("createdAt")]
+ public DateTime CreatedAt { get; set; }
+
+ [BsonElement("updatedAt")]
+ public DateTime UpdatedAt { get; set; }
+
+ public void UpdateEmbedding(List newEmbedding, double confidence, double refinementPercentage)
+ {
+ if (Embeddings != null)
+ {
+ EmbeddingHistory.Add(new EmbeddingHistoryItem
+ {
+ Embedding = new List(Embeddings),
+ Timestamp = DateTime.UtcNow,
+ Confidence = confidence,
+ RefinementPercentage = refinementPercentage
+ });
+ }
+
+ Embeddings = newEmbedding;
+ UpdatedAt = DateTime.UtcNow;
+ }
+
+ public void UpdateMetadata(EmployeeFaceEmbeddingMetadata newMetadata, double confidence, double refinementPercentage)
+ {
+ if (Metadata != null)
+ {
+ MetadataHistory.Add(new MetadataHistoryItem
+ {
+ Metadata = Metadata,
+ Timestamp = DateTime.UtcNow,
+ Confidence = confidence,
+ RefinementPercentage = refinementPercentage
+ });
+ }
+
+ Metadata = newMetadata;
+ UpdatedAt = DateTime.UtcNow;
+ }
+
+ public void UpdateEmployeeInfo(string employeeFullName, long workshopId)
+ {
+ EmployeeFullName = employeeFullName;
+ WorkshopId = workshopId;
+ UpdatedAt = DateTime.UtcNow;
+ }
+ }
+
+ public class EmployeeFaceEmbeddingMetadata
+ {
+ [BsonElement("avg_eye_distance_normalized")]
+ public double AvgEyeDistanceNormalized { get; set; }
+
+ [BsonElement("avg_eye_to_face_ratio")]
+ public double AvgEyeToFaceRatio { get; set; }
+
+ [BsonElement("avg_face_aspect_ratio")]
+ public double AvgFaceAspectRatio { get; set; }
+
+ [BsonElement("avg_detection_confidence")]
+ public double AvgDetectionConfidence { get; set; }
+
+ [BsonElement("avg_keypoints_normalized")]
+ public EmployeeFaceEmbeddingKeypoints AvgKeypointsNormalized { get; set; }
+
+ [BsonElement("per_image_metadata")]
+ public List PerImageMetadata { get; set; }
+ }
+
+ public class EmployeeFaceEmbeddingKeypoints
+ {
+ [BsonElement("left_eye")]
+ public double[] LeftEye { get; set; }
+
+ [BsonElement("right_eye")]
+ public double[] RightEye { get; set; }
+
+ [BsonElement("nose")]
+ public double[] Nose { get; set; }
+
+ [BsonElement("mouth_left")]
+ public double[] MouthLeft { get; set; }
+
+ [BsonElement("mouth_right")]
+ public double[] MouthRight { get; set; }
+ }
+
+ public class ImageMetadata
+ {
+ [BsonElement("face_aspect_ratio")]
+ public double FaceAspectRatio { get; set; }
+
+ [BsonElement("eye_distance_normalized")]
+ public double EyeDistanceNormalized { get; set; }
+
+ [BsonElement("eye_to_face_ratio")]
+ public double EyeToFaceRatio { get; set; }
+
+ [BsonElement("detection_confidence")]
+ public double DetectionConfidence { get; set; }
+
+ [BsonElement("keypoints_normalized")]
+ public EmployeeFaceEmbeddingKeypoints KeypointsNormalized { get; set; }
+ }
+
+ public class EmbeddingHistoryItem
+ {
+ [BsonElement("embedding")]
+ public List Embedding { get; set; }
+
+ [BsonElement("timestamp")]
+ public DateTime Timestamp { get; set; }
+
+ [BsonElement("confidence")]
+ public double Confidence { get; set; }
+
+ [BsonElement("refinementPercentage")]
+ public double RefinementPercentage { get; set; }
+ }
+
+ public class MetadataHistoryItem
+ {
+ [BsonElement("metadata")]
+ public EmployeeFaceEmbeddingMetadata Metadata { get; set; }
+
+ [BsonElement("timestamp")]
+ public DateTime Timestamp { get; set; }
+
+ [BsonElement("confidence")]
+ public double Confidence { get; set; }
+
+ [BsonElement("refinementPercentage")]
+ public double RefinementPercentage { get; set; }
+ }
\ No newline at end of file
diff --git a/Company.Domain/EmployeeFaceEmbeddingAgg/IEmployeeFaceEmbeddingRepository.cs b/Company.Domain/EmployeeFaceEmbeddingAgg/IEmployeeFaceEmbeddingRepository.cs
new file mode 100644
index 00000000..f2b6e470
--- /dev/null
+++ b/Company.Domain/EmployeeFaceEmbeddingAgg/IEmployeeFaceEmbeddingRepository.cs
@@ -0,0 +1,15 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Company.Domain.EmployeeFaceEmbeddingAgg;
+
+public interface IEmployeeFaceEmbeddingRepository
+{
+ Task CreateAsync(EmployeeFaceEmbedding employeeFaceEmbedding);
+ Task UpdateAsync(EmployeeFaceEmbedding employeeFaceEmbedding);
+ Task GetByIdAsync(string id);
+ Task GetByEmployeeIdAsync(long employeeId);
+ Task> GetByWorkshopIdAsync(long workshopId);
+ Task> GetByWorkshopIdsAsync(List workshopIds);
+ Task DeleteAsync(string id);
+}
\ No newline at end of file
diff --git a/Company.Domain/FinancialStatmentAgg/FinancialStatment.cs b/Company.Domain/FinancialStatmentAgg/FinancialStatment.cs
index bd6f6858..bae877fb 100644
--- a/Company.Domain/FinancialStatmentAgg/FinancialStatment.cs
+++ b/Company.Domain/FinancialStatmentAgg/FinancialStatment.cs
@@ -17,6 +17,7 @@ public class FinancialStatment : EntityBase
ContractingPartyId = contractingPartyId;
ContractingPartyName = contractingPartyName;
PublicId = Guid.NewGuid();
+ FinancialTransactionList = [];
}
public FinancialStatment()
@@ -37,4 +38,12 @@ public class FinancialStatment : EntityBase
{
PublicId = Guid.NewGuid();
}
+
+ public void AddFinancialTransaction(FinancialTransaction financialTransaction)
+ {
+ if (financialTransaction == null)
+ throw new ArgumentNullException(nameof(financialTransaction));
+ FinancialTransactionList.Add(financialTransaction);
+ }
+
}
\ No newline at end of file
diff --git a/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs b/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs
index a418a733..60a1d8f6 100644
--- a/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs
+++ b/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs
@@ -13,12 +13,15 @@ namespace Company.Domain.FinancialStatmentAgg;
public interface IFinancialStatmentRepository : IRepository
{
+ [Obsolete("این متد منسوخ شده است. لطفاً از متد GetDetailsByContractingParty استفاده کنید.")]
FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId);
List Search(FinancialStatmentSearchModel searchModel);
Task GetClientFinancialStatement(long accountId,
- ClientFinancialStatementSearchModel searchModel);
+ FinancialStatementSearchModel searchModel);
Task> GetDetailsByPublicId(string publicId);
Task GetBalanceAmount(long id);
Task GetClientDebtAmount(long accountId);
+ Task GetDetailsByContractingParty(long contractingPartyId,FinancialStatementSearchModel searchModel);
+ Task GetByContractingPartyId(long contractingPartyId);
}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
index 9aa53393..3a91fcdf 100644
--- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
+++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs
@@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
+using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.Workshop;
+using Microsoft.AspNetCore.Mvc;
namespace Company.Domain.InstitutionContractAgg;
@@ -43,4 +45,36 @@ public interface IInstitutionContractRepository : IRepository
///
void RollcallServiceCreateTransaction();
+
+ Task> GetList(InstitutionContractListSearchModel searchModel);
+ Task GetListStats(InstitutionContractListSearchModel searchModel);
+ Task> RegistrationWorkflowMainList();
+ Task> RegistrationWorkflowItems(long institutionContractId);
+ Task GetInstitutionWorkshopInitialDetails(long institutionWorkshopInitialId);
+ Task GetIncludeWorkshopDetailsAsync(long institutionContractId);
+ void UpdateStatusIfNeeded(long institutionContractId);
+ Task GetVerificationDetails(Guid id);
+ Task GetByPublicIdAsync(Guid id);
+
+ #region Extension
+
+ Task GetExtensionInquiry(long previousContractId);
+ Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
+ Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
+ Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request);
+ Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
+
+ #endregion
+
+ #region Upgrade(Amendment)
+
+ Task GetAmendmentWorkshops(long institutionContractId);
+ Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
+
+ Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
+ Task RemoveAmendmentWorkshops(Guid workshopTempId);
+ #endregion
+
+ Task> GetInstitutionContractSelectList(string search, string selected);
+ Task> PrintAllAsync(List ids);
}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs
index 95a30277..2df07cf1 100644
--- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs
@@ -1,17 +1,24 @@
using System;
using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using System.Security.Cryptography;
using _0_Framework.Domain;
using Company.Domain.InstitutionContractContactInfoAgg;
+using CompanyManagment.App.Contracts.InstitutionContract;
namespace Company.Domain.InstitutionContractAgg;
public class InstitutionContract : EntityBase
{
- public InstitutionContract(string contractNo, long representativeId, string representativeName, long contractingPartyId,
+ public InstitutionContract(string contractNo, long representativeId, string representativeName,
+ long contractingPartyId,
string contractingPartyName, DateTime contractDateGr, string contractDateFa, string state, string city,
string address, DateTime contractStartGr, string contractStartFa, DateTime contractEndGr,
string contractEndFa, double contractAmount, double dailyCompenseation, double obligation,
- double totalAmount, int extensionNo, string workshopManualCount, string employeeManualCount, string description, string officialCompany,string typeOfcontract, string hasValueAddedTax, double valueAddedTax)
+ double totalAmount, int extensionNo, string workshopManualCount, string employeeManualCount, string description,
+ string officialCompany, string typeOfcontract, string hasValueAddedTax, double valueAddedTax,
+ List workshopDetails, long lawId)
{
ContractNo = contractNo;
RepresentativeId = representativeId;
@@ -43,67 +50,123 @@ public class InstitutionContract : EntityBase
TypeOfContract = typeOfcontract;
HasValueAddedTax = hasValueAddedTax;
ValueAddedTax = valueAddedTax;
+ VerificationStatus = InstitutionContractVerificationStatus.PendingForVerify;
+ ContactInfoList = [];
+ Installments = [];
+ WorkshopGroup = new InstitutionContractWorkshopGroup(id, workshopDetails);
+ PublicId = Guid.NewGuid();
+ LawId = lawId;
}
+ public long LawId { get; private set; }
+
public string ContractNo { get; private set; }
public long RepresentativeId { get; private set; }
+
public string RepresentativeName { get; private set; }
+
public long ContractingPartyId { get; private set; }
+
public string ContractingPartyName { get; private set; }
+
public DateTime ContractDateGr { get; private set; }
+
public string ContractDateFa { get; private set; }
+
public string State { get; private set; }
+
public string City { get; private set; }
+
public string Address { get; private set; }
+
//public long ContactInfoId { get; private set; }
public DateTime ContractStartGr { get; private set; }
+
public string ContractStartFa { get; private set; }
+
public DateTime ContractEndGr { get; private set; }
+
public string ContractEndFa { get; private set; }
-
+
// مبلغ قرارداد
public double ContractAmount { get; private set; }
-
+
//خسارت روزانه
public double DailyCompenseation { get; private set; }
//وجه التزام
public double Obligation { get; private set; }
+
// مبلغ کل قرارداد
public double TotalAmount { get; private set; }
+
public string WorkshopManualCount { get; private set; }
+
public string EmployeeManualCount { get; private set; }
+
public string IsActiveString { get; private set; }
+
public int ExtensionNo { get; private set; }
+
public string Description { get; private set; }
+
public string Signature { get; private set; }
+
public string OfficialCompany { get; private set; }
+
public string TypeOfContract { get; private set; }
- public string HasValueAddedTax { get; set; }
- public double ValueAddedTax { get; set; }
+
+ public string HasValueAddedTax { get; private set; }
+
+ public double ValueAddedTax { get; private set; }
+
+ public Guid PublicId { get; private set; }
+
+ public string VerifyCode { get; private set; }
+ public DateTime VerifyCodeCreation { get; private set; }
+ public string VerifierFullName { get; private set; }
+ public string VerifierPhoneNumber { get; private set; }
+
+ [NotMapped] public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now;
+
+ [NotMapped] public bool CanResendVerifyCode => VerifyCodeCreation.Add(ReSendTime) <= DateTime.Now;
+
+ [NotMapped] public TimeSpan ExpireTime => TimeSpan.FromMinutes(5);
+
+
+ [NotMapped] public TimeSpan ReSendTime => TimeSpan.FromMinutes(2);
+
+ public bool IsInstallment { get; set; }
+
+ public InstitutionContractVerificationStatus VerificationStatus { get; private set; }
+
+ public InstitutionContractWorkshopGroup WorkshopGroup { get; private set; }
public List ContactInfoList { get; set; }
+ public List Installments { get; set; }
+
+ public List Amendments { get; private set; }
+
public InstitutionContract()
{
-
- ContactInfoList = new List();
+ ContactInfoList = [];
+ Installments = [];
}
public void Edit(DateTime contractDateGr, string contractDateFa, string state, string city, string address,
DateTime contractStartGr, string contractStartFa, DateTime contractEndGr, string contractEndFa,
double contractAmount, double dailyCompenseation, double obligation, double totalAmount,
- string workshopManualCount, string employeeManualCount, string description, string officialCompany,
+ string workshopManualCount, string employeeManualCount, string description, string officialCompany,
string typeOfcontract, double valueAddedTax, string hasValueAddedTax)
{
-
ContractDateGr = contractDateGr;
ContractDateFa = contractDateFa;
State = state;
City = city;
Address = address;
-
+
ContractStartGr = contractStartGr;
ContractStartFa = contractStartFa;
ContractEndGr = contractEndGr;
@@ -124,13 +187,11 @@ public class InstitutionContract : EntityBase
public void Active()
{
-
this.IsActiveString = "true";
}
public void DeActive()
{
-
this.IsActiveString = "false";
}
@@ -148,4 +209,182 @@ public class InstitutionContract : EntityBase
{
this.Signature = "0";
}
+
+ public void Verified()
+ {
+ VerificationStatus = InstitutionContractVerificationStatus.Verified;
+ }
+
+ public void SetPendingWorkflow()
+ {
+ VerificationStatus = InstitutionContractVerificationStatus.PendingWorkflow;
+ }
+
+ public void SetInstallments(List installments)
+ {
+ Installments = installments;
+ IsInstallment = true;
+ }
+
+
+ public void SetVerifyCode(string code,string verifierFullName, string verifierPhoneNumber)
+ {
+ VerifyCode = code;
+ VerifyCodeCreation = DateTime.Now;
+ VerifierFullName = verifierFullName;
+ VerifierPhoneNumber = verifierPhoneNumber;
+ }
+
+ public void SetWorkshopGroup(InstitutionContractWorkshopGroup workshopGroup)
+ {
+ WorkshopGroup = workshopGroup;
+ }
+
+ public void SetAmount(double totalAmount, double tax, double oneMonthPayment)
+ {
+ ContractAmount = oneMonthPayment;
+ TotalAmount = totalAmount;
+ ValueAddedTax = tax;
+ HasValueAddedTax = tax > 0 ? "true" : "false";
+ }
+
+ public void ClearGroup()
+ {
+ WorkshopGroup = null;
+ }
+}
+
+public class InstitutionContractAmendment : EntityBase
+{
+ private InstitutionContractAmendment(){}
+ public InstitutionContractAmendment(long institutionContractId,
+ List installments, double amount, bool hasInstallment,
+ InstitutionContractAmendmentChange amendmentChange, long lawId)
+ {
+ InstitutionContractId = institutionContractId;
+ Installments = installments is { Count: > 0} ? installments : [];
+ Amount = amount;
+ HasInstallment = hasInstallment;
+ AmendmentChanges = [amendmentChange];
+ LawId = lawId;
+ }
+
+ public long InstitutionContractId { get; set; }
+ public InstitutionContract InstitutionContract { get; set; }
+ public List Installments { get; set; }
+ public double Amount { get; set; }
+ public bool HasInstallment { get; set; }
+ public string VerifyCode { get; set; }
+ public DateTime VerificationCreation { get; set; }
+ public List AmendmentChanges { get; set; }
+
+ public long LawId { get; set; }
+
+ public void SetVerifyCode(string code,string verifierFullName, string verifierPhoneNumber)
+ {
+ VerifyCode = code;
+ VerifyCodeCreation = DateTime.Now;
+ VerifierFullName = verifierFullName;
+ VerifierPhoneNumber = verifierPhoneNumber;
+ }
+
+ public string VerifierPhoneNumber { get; private set; }
+
+ public string VerifierFullName { get; private set; }
+
+ public DateTime VerifyCodeCreation { get; set; }
+}
+
+public class InstitutionContractAmendmentChange : EntityBase
+{
+ private InstitutionContractAmendmentChange() { }
+ private InstitutionContractAmendmentChange(long institutionContractAmendmentId,
+ InstitutionContractAmendment institutionContractAmendment, InstitutionContractAmendmentChangeType changeType,
+ DateTime changeDateGr, bool? hasRollCallPlan, bool? hasCustomizeCheckoutPlan, bool? hasContractPlan,
+ bool? hasContractPlanInPerson, bool? hasInsurancePlan, bool? hasInsurancePlanInPerson, int? personnelCount,
+ long? workshopDetailsId)
+ {
+ InstitutionContractAmendmentId = institutionContractAmendmentId;
+ InstitutionContractAmendment = institutionContractAmendment;
+ ChangeType = changeType;
+ ChangeDateGr = changeDateGr;
+ HasRollCallPlan = hasRollCallPlan;
+ HasCustomizeCheckoutPlan = hasCustomizeCheckoutPlan;
+ HasContractPlan = hasContractPlan;
+ HasContractPlanInPerson = hasContractPlanInPerson;
+ HasInsurancePlan = hasInsurancePlan;
+ HasInsurancePlanInPerson = hasInsurancePlanInPerson;
+ PersonnelCount = personnelCount;
+ WorkshopDetailsId = workshopDetailsId;
+ }
+
+ public long InstitutionContractAmendmentId { get; private set; }
+ public InstitutionContractAmendment InstitutionContractAmendment { get; private set; }
+ public InstitutionContractAmendmentChangeType ChangeType { get; private set; }
+ public DateTime ChangeDateGr { get; private set; }
+
+ ///
+ /// پلن حضور و غیاب
+ ///
+ public bool? HasRollCallPlan { get; private set; }
+
+ ///
+ /// پلن فیش غیر رسمی
+ ///
+ public bool? HasCustomizeCheckoutPlan { get; private set; }
+
+ ///
+ /// پلن قرارداد و تصفیه
+ ///
+ public bool? HasContractPlan { get; private set; }
+
+ ///
+ /// پلن قرارداد و تصفیه حضوری
+ ///
+ public bool? HasContractPlanInPerson { get; private set; }
+
+ ///
+ /// پلن بیمه
+ ///
+ public bool? HasInsurancePlan { get; private set; }
+
+ ///
+ /// پلن بیمه حضوری
+ ///
+ public bool? HasInsurancePlanInPerson { get; private set; }
+
+ ///
+ /// تعداد پرسنل
+ ///
+ public int? PersonnelCount { get; private set; }
+
+ ///
+ /// تعداد کارگاه
+ ///
+ public long? WorkshopDetailsId { get; private set; }
+}
+
+public enum InstitutionContractAmendmentChangeType
+{
+ PersonCount,
+ Services,
+ WorkshopCreated
+}
+
+public enum InstitutionContractVerificationStatus
+{
+ ///
+ /// در انتظار تایید
+ ///
+ PendingForVerify = 0,
+
+ ///
+ /// در انتظار کارپوشه
+ ///
+ PendingWorkflow = 1,
+
+ ///
+ /// تایید شده
+ ///
+ Verified = 2
}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContractInstallment.cs b/Company.Domain/InstitutionContractAgg/InstitutionContractInstallment.cs
new file mode 100644
index 00000000..bdbfa535
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContractInstallment.cs
@@ -0,0 +1,28 @@
+using System;
+using _0_Framework.Application;
+
+namespace Company.Domain.InstitutionContractAgg;
+
+public class InstitutionContractInstallment
+{
+ public InstitutionContractInstallment(DateTime installmentDateGr, double amount,
+ string description)
+ {
+ InstallmentDateGr = installmentDateGr;
+ InstallmentDateFa = installmentDateGr.ToFarsi();
+ Amount = amount;
+ Description = description;
+ }
+
+ public long Id { get; private set; }
+ public DateTime InstallmentDateGr { get; private set; }
+ public string InstallmentDateFa { get; private set; }
+ public double Amount { get; private set; }
+ public string Description { get; private set; }
+
+ public long InstitutionContractId { get; private set; }
+ public long? InstitutionContractAmendmentId { get; private set; }
+
+ public InstitutionContract InstitutionContract { get; private set; }
+ public InstitutionContractAmendment InstitutionContractAmendment { get; set; }
+}
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopBase.cs b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopBase.cs
new file mode 100644
index 00000000..046cfe21
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopBase.cs
@@ -0,0 +1,84 @@
+using System;
+using System.Collections.Generic;
+using _0_Framework.Domain;
+
+namespace Company.Domain.InstitutionContractAgg;
+
+public class InstitutionContractWorkshopBase:EntityBase
+{
+ protected InstitutionContractWorkshopBase(){}
+ public InstitutionContractWorkshopBase(string workshopName, bool hasRollCallPlan,bool hasRollCallPlanInPerson,
+ bool hasCustomizeCheckoutPlan, bool hasContractPlan,bool hasContractPlanInPerson,bool hasInsurancePlan,bool hasInsurancePlanInPerson,
+ int personnelCount, double price )
+ {
+ WorkshopName = workshopName;
+ Services = new WorkshopServices(hasInsurancePlan, hasInsurancePlanInPerson,
+ hasContractPlan, hasContractPlanInPerson, hasRollCallPlan, hasRollCallPlanInPerson,hasCustomizeCheckoutPlan);
+ PersonnelCount = personnelCount;
+ Price = price;
+ Employers = [];
+ }
+ ///
+ /// شناسه کارگاه
+ ///
+ public long? WorkshopId { get; protected set; }
+
+ ///
+ /// نام کارگاه
+ ///
+ public string WorkshopName { get; private set; }
+
+ public WorkshopServices Services { get; set; } = new (false, false,
+ false, false, false,
+ false, false);
+ public int PersonnelCount { get; private set; }
+
+
+
+ ///
+ /// شناسه قرارداد نهاد مرتبط
+ ///
+ public long InstitutionContractId { get; private set; }
+
+
+ public double Price { get; private set; }
+
+
+ public List Employers { get; private set; } = new();
+
+ public void SetEmployers(List employerIds)
+ {
+ Employers.Clear();
+ foreach (var employerId in employerIds)
+ {
+ Employers.Add(new InstitutionContractWorkshopDetailEmployer(employerId));
+ }
+ }
+ public void AddEmployer(long employerId)
+ {
+ if (Employers.Exists(x => x.EmployerId == employerId))
+ return;
+
+ Employers.Add(new InstitutionContractWorkshopDetailEmployer(employerId));
+ }
+
+ // ⚡️ Equality Implementation
+ public override bool Equals(object? obj)
+ {
+ if (obj is not InstitutionContractWorkshopBase other)
+ return false;
+
+ return WorkshopName == other.WorkshopName &&
+ PersonnelCount == other.PersonnelCount &&
+ Price == other.Price &&
+ Services == other.Services;
+ }
+
+ public override int GetHashCode()
+ {
+ return HashCode.Combine(WorkshopName, PersonnelCount, Price, Services);
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopCurrent.cs b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopCurrent.cs
new file mode 100644
index 00000000..f133fa70
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopCurrent.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using _0_Framework_b.Domain;
+
+namespace Company.Domain.InstitutionContractAgg;
+
+public class InstitutionContractWorkshopCurrent:InstitutionContractWorkshopBase
+{
+ private InstitutionContractWorkshopCurrent(){}
+ public InstitutionContractWorkshopCurrent(string workshopName, bool hasRollCallPlan,
+ bool hasRollCallPlanInPerson, bool hasCustomizeCheckoutPlan, bool hasContractPlan,
+ bool hasContractPlanInPerson, bool hasInsurancePlan, bool hasInsurancePlanInPerson,
+ int personnelCount, double price,long institutionContractWorkshopGroupId,InstitutionContractWorkshopGroup workshopGroup,long workshopId) : base(workshopName, hasRollCallPlan,
+ hasRollCallPlanInPerson, hasCustomizeCheckoutPlan, hasContractPlan,
+ hasContractPlanInPerson, hasInsurancePlan, hasInsurancePlanInPerson, personnelCount, price)
+ {
+ InstitutionContractWorkshopGroupId = institutionContractWorkshopGroupId;
+ WorkshopGroup = workshopGroup;
+ WorkshopId = workshopId;
+ }
+ public long InstitutionContractWorkshopGroupId { get; private set; }
+ public InstitutionContractWorkshopGroup WorkshopGroup { get; private set; }
+ public long InitialWorkshopId { get; private set; }
+ public InstitutionContractWorkshopInitial WorkshopInitial { get; private set; }
+
+
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopGroup.cs b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopGroup.cs
new file mode 100644
index 00000000..20797f04
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopGroup.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.Linq;
+using _0_Framework_b.Domain;
+
+namespace Company.Domain.InstitutionContractAgg;
+
+public class InstitutionContractWorkshopGroup : EntityBase
+{
+ private InstitutionContractWorkshopGroup()
+ {
+ }
+
+ public long InstitutionContractId { get; private set; }
+ public InstitutionContract InstitutionContract { get; set; }
+ public List InitialWorkshops { get; private set; }
+ public List CurrentWorkshops { get; private set; }
+ public DateTime LastModifiedDate { get; private set; }
+
+ [NotMapped]
+ public bool HasChanges =>
+ !InitialWorkshops.Cast()
+ .SequenceEqual(CurrentWorkshops.Cast());
+
+ public InstitutionContractWorkshopGroup(long institutionContractId,
+ List initialDetails)
+ {
+ InstitutionContractId = institutionContractId;
+ var initialWorkshops = initialDetails.ToList();
+ InitialWorkshops = initialWorkshops.ToList();
+ LastModifiedDate = DateTime.Now;
+ }
+
+ public void UpdateCurrentWorkshops(List updatedDetails)
+ {
+ CurrentWorkshops = updatedDetails.ToList();
+ LastModifiedDate = DateTime.Now;
+ }
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopInitial.cs b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopInitial.cs
new file mode 100644
index 00000000..cceaeefb
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/InstitutionContractWorkshopInitial.cs
@@ -0,0 +1,70 @@
+using System.Collections.Generic;
+using System.Linq;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.InstitutionContract;
+
+namespace Company.Domain.InstitutionContractAgg;
+
+public class InstitutionContractWorkshopInitial:InstitutionContractWorkshopBase
+{
+ private InstitutionContractWorkshopInitial(){}
+ public InstitutionContractWorkshopInitial(string workshopName, bool hasRollCallPlan,
+ bool hasRollCallPlanInPerson, bool hasCustomizeCheckoutPlan, bool hasContractPlan,
+ bool hasContractPlanInPerson, bool hasInsurancePlan, bool hasInsurancePlanInPerson,
+ int personnelCount, double price) : base(workshopName, hasRollCallPlan,
+ hasRollCallPlanInPerson, hasCustomizeCheckoutPlan, hasContractPlan, hasContractPlanInPerson,
+ hasInsurancePlan, hasInsurancePlanInPerson, personnelCount, price)
+ {
+ WorkshopCreated = false;
+ }
+
+ public long InstitutionContractWorkshopGroupId { get; private set; }
+ public InstitutionContractWorkshopGroup WorkshopGroup { get; private set; }
+ public bool WorkshopCreated { get; private set; }
+
+ public InstitutionContractWorkshopCurrent? WorkshopCurrent { get; private set; }
+ public long? InstitutionContractWorkshopCurrentId { get; private set; }
+
+ public void SetWorkshopId(long workshopId)
+ {
+ WorkshopId = workshopId;
+ WorkshopCreated = true;
+ WorkshopCurrent = new InstitutionContractWorkshopCurrent(WorkshopName,Services.RollCall,Services.RollCallInPerson,
+ Services.CustomizeCheckout,Services.Contract,Services.ContractInPerson,Services.Insurance,
+ Services.InsuranceInPerson,PersonnelCount,Price,InstitutionContractWorkshopGroupId,WorkshopGroup,workshopId);
+ WorkshopCurrent.SetEmployers(Employers.Select(x=>x.EmployerId).ToList());
+ }
+
+ public static InstitutionContractWorkshopInitial CreateManual(string workshopName, bool hasRollCallPlan,
+ bool hasRollCallPlanInPerson, bool hasCustomizeCheckoutPlan, bool hasContractPlan,
+ bool hasContractPlanInPerson, bool hasInsurancePlan, bool hasInsurancePlanInPerson,
+ int personnelCount, double price, long workshopId,List employerIds)
+ {
+
+ var entity = new InstitutionContractWorkshopInitial(workshopName, hasRollCallPlan,
+ hasRollCallPlanInPerson, hasCustomizeCheckoutPlan, hasContractPlan, hasContractPlanInPerson,
+ hasInsurancePlan, hasInsurancePlanInPerson, personnelCount, price);
+ entity.WorkshopCreated = true;
+ entity.WorkshopId = workshopId;
+ entity.SetEmployers(employerIds);
+ return entity;
+ }
+
+ public void SetWorkshopGroup(InstitutionContractWorkshopGroup entityWorkshopGroup)
+ {
+ InstitutionContractWorkshopGroupId = entityWorkshopGroup.id;
+ WorkshopGroup = entityWorkshopGroup;
+ }
+}
+
+public class InstitutionContractWorkshopDetailEmployer : EntityBase
+{
+ public long EmployerId { get; private set; }
+
+ public InstitutionContractWorkshopDetailEmployer(long employerId)
+ {
+ EmployerId = employerId;
+ }
+
+ private InstitutionContractWorkshopDetailEmployer() { }
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAgg/WorkshopServices.cs b/Company.Domain/InstitutionContractAgg/WorkshopServices.cs
new file mode 100644
index 00000000..95d71066
--- /dev/null
+++ b/Company.Domain/InstitutionContractAgg/WorkshopServices.cs
@@ -0,0 +1,23 @@
+namespace Company.Domain.InstitutionContractAgg;
+public record WorkshopServices
+{
+ public WorkshopServices(bool insurance, bool insuranceInPerson, bool contract, bool contractInPerson, bool rollCall, bool rollCallInPerson, bool customizeCheckout)
+ {
+ Insurance = insurance;
+ InsuranceInPerson = insuranceInPerson;
+ Contract = contract;
+ ContractInPerson = contractInPerson;
+ RollCall = rollCall;
+ CustomizeCheckout = customizeCheckout;
+ RollCallInPerson = rollCallInPerson;
+ }
+
+ public bool Insurance { get; private set; }
+ public bool InsuranceInPerson { get; private set; }
+ public bool Contract { get; private set; }
+ public bool ContractInPerson { get; private set; }
+ public bool RollCall { get; private set; }
+
+ public bool RollCallInPerson { get; private set; }
+ public bool CustomizeCheckout { get; private set; }
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs
new file mode 100644
index 00000000..bac4cd56
--- /dev/null
+++ b/Company.Domain/InstitutionContractAmendmentTempAgg/InstitutionContractAmendmentTemp.cs
@@ -0,0 +1,151 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace Company.Domain.InstitutionContractAmendmentTempAgg;
+
+public class InstitutionContractAmendmentTemp
+{
+ public InstitutionContractAmendmentTemp(List prevWorkshops,
+ long institutionContractId)
+ {
+ Id = Guid.NewGuid();
+ PrevWorkshops = prevWorkshops;
+ NewWorkshops = prevWorkshops.Select(x=> new InstitutionContractAmendmentTempNewWorkshop(
+ x.WorkshopName, x.CountPerson, x.ContractAndCheckout, x.ContractAndCheckoutInPerson, x.Insurance,
+ x.InsuranceInPerson, x.RollCall, x.RollCallInPerson, x.CustomizeCheckout, x.Price, x.WorkshopId,
+ x.CurrentWorkshopId, 0)).ToList();
+ InstitutionContractId = institutionContractId;
+ }
+
+ [BsonId]
+ [BsonRepresentation(BsonType.String)]
+ public Guid Id { get; private set; }
+ public List PrevWorkshops { get; private set; }
+ public List NewWorkshops { get; private set; }
+ public long InstitutionContractId { get; private set; }
+}
+
+public class InstitutionContractAmendmentTempNewWorkshop : InstitutionContractAmendmentTempPrevWorkshop
+{
+ public InstitutionContractAmendmentTempNewWorkshop(string workshopName, int countPerson, bool contractAndCheckout,
+ bool contractAndCheckoutInPerson, bool insurance, bool insuranceInPerson, bool rollCall, bool rollCallInPerson,
+ bool customizeCheckout, double price, long workshopId, long currentWorkshopId,double priceDifference) : base(
+ workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance, insuranceInPerson,
+ rollCall, rollCallInPerson, customizeCheckout, price, workshopId, currentWorkshopId)
+ {
+ PriceDifference = priceDifference;
+ }
+
+ ///
+ /// مبلغ اختلاف کارگاه جدید با کارگاه قبلی(مبلغ اصلی ارتقاء)
+ ///
+ public double PriceDifference { get; private set; }
+
+
+ public void Edit(string workshopName, int countPerson, bool contractAndCheckout,
+ bool contractAndCheckoutInPerson,
+ bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout,
+ double price,double priceDifference)
+ {
+ base.Edit(workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance,
+ insuranceInPerson, rollCall, customizeCheckout, price);
+ PriceDifference = priceDifference;
+ }
+}
+
+public class InstitutionContractAmendmentTempPrevWorkshop
+{
+ public InstitutionContractAmendmentTempPrevWorkshop(string workshopName, int countPerson, bool contractAndCheckout,
+ bool contractAndCheckoutInPerson,
+ bool insurance, bool insuranceInPerson,
+ bool rollCall, bool rollCallInPerson, bool customizeCheckout, double price, long workshopId,
+ long currentWorkshopId)
+ {
+ Id = Guid.NewGuid();
+ WorkshopName = workshopName;
+ CountPerson = countPerson;
+ ContractAndCheckout = contractAndCheckout;
+ Insurance = insurance;
+ RollCall = rollCall;
+ CustomizeCheckout = customizeCheckout;
+ ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
+ InsuranceInPerson = insuranceInPerson;
+ RollCallInPerson = rollCallInPerson;
+ Price = price;
+ WorkshopId = workshopId;
+ CurrentWorkshopId = currentWorkshopId;
+ }
+
+ [BsonRepresentation(BsonType.String)]
+ public Guid Id { get; set; }
+
+ public long CurrentWorkshopId { get; private set; }
+ public long WorkshopId { get; set; }
+
+ ///
+ /// نام کارگاه
+ ///
+ public string WorkshopName { get; private set; }
+
+ ///
+ /// تعداد پرسنل
+ ///
+ public int CountPerson { get; private set; }
+
+
+ #region ServiceSelection
+
+ ///
+ /// قرارداد و تصفیه
+ ///
+ public bool ContractAndCheckout { get; private set; }
+
+ ///
+ /// بیمه
+ ///
+ public bool Insurance { get; private set; }
+
+ ///
+ /// حضورغباب
+ ///
+ public bool RollCall { get; private set; }
+
+ public bool RollCallInPerson { get; set; }
+
+ ///
+ /// فیش غیر رسمی
+ ///
+ public bool CustomizeCheckout { get; private set; }
+
+ ///
+ /// خدمات حضوری قرداد و تصفیه
+ ///
+ public bool ContractAndCheckoutInPerson { get; private set; }
+
+ ///
+ /// خدمات حضوری بیمه
+ ///
+ public bool InsuranceInPerson { get; private set; }
+
+ public double Price { get; private set; }
+
+ #endregion
+
+ public void Edit(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
+ bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout,
+ double price)
+ {
+ WorkshopName = workshopName;
+ CountPerson = countPerson;
+ ContractAndCheckout = contractAndCheckout;
+ Insurance = insurance;
+ RollCall = rollCall;
+ CustomizeCheckout = customizeCheckout;
+ ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
+ InsuranceInPerson = insuranceInPerson;
+ Price = price;
+ }
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs
new file mode 100644
index 00000000..020200f5
--- /dev/null
+++ b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Threading.Tasks;
+
+namespace Company.Domain.InstitutionContractExtensionTempAgg;
+
+public interface IInstitutionContractExtenstionTempRepository
+{
+ Task Create(InstitutionContractExtensionTemp institutionContract);
+
+ Task GetPreviousExtenstionData(long contractingPartyId);
+ Task Remove(Guid id);
+}
\ No newline at end of file
diff --git a/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs
new file mode 100644
index 00000000..568ae4a5
--- /dev/null
+++ b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using CompanyManagment.App.Contracts.InstitutionContract;
+using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace Company.Domain.InstitutionContractExtensionTempAgg;
+
+public class InstitutionContractExtensionTemp
+{
+ public InstitutionContractExtensionTemp(long previousContractingPartyId)
+ {
+ Id = Guid.NewGuid();
+ PreviousId = previousContractingPartyId;
+ }
+
+ [BsonId] // Specifies this field as the _id in MongoDB
+ [BsonRepresentation(BsonType.String)] // Ensures the GUID is stored as a string
+ public Guid Id { get; set; }
+ public long PreviousId { get; set; }
+ public string Address { get; set; }
+ public string City { get; set; }
+ public string Province { get; set; }
+ public List ContactInfos { get; set; }
+
+ public List Workshops { get; set; }
+
+ public InstitutionContractExtensionPlanDetail OneMonth { get; set; }
+ public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; }
+ public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
+ public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
+ public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; }
+ public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; }
+
+ public bool HasContractInPerson { get; set; }
+
+ public InstitutionContractDuration? Duration { get; set; }
+
+ public void SetContractingPartyInfos(string address, string city, string province, List contactInfos)
+ {
+ Address = address;
+ City = city;
+ Province = province;
+ ContactInfos = contactInfos;
+ }
+
+ public void SetWorkshopsAndPlanAmounts(List workshops,
+ InstitutionContractExtensionPlanDetail oneMonth,
+ InstitutionContractExtensionPlanDetail threeMonth, InstitutionContractExtensionPlanDetail sixMonth,
+ InstitutionContractExtensionPlanDetail twelveMonth, bool hasContractInPerson)
+ {
+ Workshops = workshops;
+ OneMonth = oneMonth;
+ ThreeMonths = threeMonth;
+ SixMonths = sixMonth;
+ TwelveMonths = twelveMonth;
+ HasContractInPerson = hasContractInPerson;
+ }
+
+ public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractPaymentMonthlyViewModel monthly,
+ InstitutionContractPaymentOneTimeViewModel oneTime)
+ {
+ Duration = duration;
+ MonthlyPayment = monthly;
+ OneTimePayment = oneTime;
+ }
+
+}
+
+public class InstitutionContractExtenstionTempPlan
+{
+ public InstitutionContractExtenstionTempPlan(string contractStart, string contractEnd,
+ string oneMonthPaymentDiscounted, string oneMonthDiscount, string oneMonthOriginalPayment,
+ string totalPayment, string dailyCompensation, string obligation)
+ {
+ ContractStart = contractStart;
+ ContractEnd = contractEnd;
+ OneMonthPaymentDiscounted = oneMonthPaymentDiscounted;
+ OneMonthDiscount = oneMonthDiscount;
+ OneMonthOriginalPayment = oneMonthOriginalPayment;
+ TotalPayment = totalPayment;
+ DailyCompensation = dailyCompensation;
+ Obligation = obligation;
+ }
+
+ public string ContractStart { get; set; }
+ public string ContractEnd { get; set; }
+ public string OneMonthPaymentDiscounted { get; set; }
+ public string OneMonthDiscount { get; set; }
+ public string OneMonthOriginalPayment { get; set; }
+ public string TotalPayment { get; set; }
+ public string DailyCompensation { get; set; }
+ public string Obligation { get; set; }
+}
+
+public class InstitutionContractExtensionTempWorkshop
+{
+ public InstitutionContractExtensionTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
+ bool insurance, bool insuranceInPerson,
+ bool rollCall,bool rollCallInPerson, bool customizeCheckout,double price,long workshopId)
+ {
+ WorkshopName = workshopName;
+ CountPerson = countPerson;
+ ContractAndCheckout = contractAndCheckout;
+ Insurance = insurance;
+ RollCall = rollCall;
+ CustomizeCheckout = customizeCheckout;
+ ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
+ InsuranceInPerson = insuranceInPerson;
+ RollCallInPerson = rollCallInPerson;
+ Price = price;
+ WorkshopId = workshopId;
+ }
+
+ public long WorkshopId { get; set; }
+
+ ///
+ /// نام کارگاه
+ ///
+ public string WorkshopName { get; private set; }
+
+ ///
+ /// تعداد پرسنل
+ ///
+ public int CountPerson { get; private set; }
+
+
+ #region ServiceSelection
+
+ ///
+ /// قرارداد و تصفیه
+ ///
+ public bool ContractAndCheckout { get; private set; }
+
+ ///
+ /// بیمه
+ ///
+ public bool Insurance { get; private set; }
+
+ ///
+ /// حضورغباب
+ ///
+ public bool RollCall { get; private set; }
+
+ public bool RollCallInPerson { get; set; }
+
+ ///
+ /// فیش غیر رسمی
+ ///
+ public bool CustomizeCheckout { get;private set; }
+
+ ///
+ /// خدمات حضوری قرداد و تصفیه
+ ///
+ public bool ContractAndCheckoutInPerson { get; private set; }
+
+ ///
+ /// خدمات حضوری بیمه
+ ///
+ public bool InsuranceInPerson { get; private set; }
+
+ public double Price{ get; set; }
+
+ #endregion
+}
+
+
diff --git a/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs b/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs
index 27a906a7..fc889ab0 100644
--- a/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs
+++ b/Company.Domain/InsurancJobAgg/IInsuranceJobRepositpry.cs
@@ -25,5 +25,6 @@ public interface IInsuranceJobRepositpry:IRepository
OperationResult EditInsuranceJob(EditInsuranceJob command);
+ Task> GetSelectList();
}
diff --git a/Company.Domain/InsuranceListAgg/IInsuranceListRepository.cs b/Company.Domain/InsuranceListAgg/IInsuranceListRepository.cs
index 1ff57039..214df689 100644
--- a/Company.Domain/InsuranceListAgg/IInsuranceListRepository.cs
+++ b/Company.Domain/InsuranceListAgg/IInsuranceListRepository.cs
@@ -51,6 +51,14 @@ public interface IInsuranceListRepository:IRepository
List GetEmployeeInsuranceDataAmonthAgo(DateTime currentMonthStartDate, long workshopId);
#endregion
+ ///
+ /// دریافت اطلاعات بیمه کارکنان برای استفاده در فیش حقوقی
+ ///
+ ///
+ ///
+ ///
+ List EmployeeInsuranceDataBy(DateTime startDate, long workshopId);
+
///
/// بدست آوردن اطلاعات محاسباتی ماه پرسنل برای ویرایش
///
@@ -67,6 +75,8 @@ public interface IInsuranceListRepository:IRepository
Task GetTabCounts(InsuranceListSearchModel searchModel);
#endregion
+
+ Task> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
}
diff --git a/Company.Domain/LawAgg/ILawRepository.cs b/Company.Domain/LawAgg/ILawRepository.cs
new file mode 100644
index 00000000..08708532
--- /dev/null
+++ b/Company.Domain/LawAgg/ILawRepository.cs
@@ -0,0 +1,15 @@
+using _0_Framework.Domain;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using CompanyManagment.App.Contracts.Law;
+
+namespace Company.Domain.LawAgg
+{
+ public interface ILawRepository : IRepository
+ {
+ Task GetWithItems(long id);
+ Task> GetActive();
+ Task GetByType(LawType type);
+ Task> GetList(LawSearchModel searchModel);
+ }
+}
diff --git a/Company.Domain/LawAgg/Law.cs b/Company.Domain/LawAgg/Law.cs
new file mode 100644
index 00000000..284f251f
--- /dev/null
+++ b/Company.Domain/LawAgg/Law.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Collections.Generic;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.Law;
+using System.Text.Json;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace Company.Domain.LawAgg
+{
+ public class Law : EntityBase
+ {
+ private Law(){}
+ public string Title { get; private set; }
+ public bool IsActive { get; private set; }
+ public List Items { get; private set; }
+ public LawType Type { get; private set; }
+ public string HeadTitle { get; private set; }
+ public string NotificationsJson { get; private set; }
+ public int Version { get; private set; }
+
+ [NotMapped]
+ public List Notifications
+ {
+ get => string.IsNullOrEmpty(NotificationsJson)
+ ? new List()
+ : JsonSerializer.Deserialize>(NotificationsJson);
+ set => NotificationsJson = JsonSerializer.Serialize(value);
+ }
+
+ public Law(string title, LawType lawType, List notifications, string headTitle, int version = 1)
+ {
+ Title = title;
+ IsActive = true; // آخرین نسخه فعال است
+ Items = new List();
+ Type = lawType;
+ Notifications = notifications ?? new List();
+ HeadTitle = headTitle;
+ Version = version;
+ }
+
+ public void Edit(string title)
+ {
+ Title = title;
+ }
+
+ public void AddItem(string header, string details, int orderNumber)
+ {
+ Items.Add(new LawItem(header, details, orderNumber));
+ }
+
+ public void SetItem(List items)
+ {
+ Items = items ?? new List();
+ }
+ public void RemoveItem(int orderNumber)
+ {
+ var item = Items.Find(x => x.OrderNumber == orderNumber);
+ if (item != null)
+ Items.Remove(item);
+ }
+
+ public void Activate()
+ {
+ IsActive = true;
+ }
+
+ public void Deactivate()
+ {
+ IsActive = false;
+ }
+
+ public void SetAsLatestVersion()
+ {
+ IsActive = true;
+ }
+
+ public void SetAsOldVersion()
+ {
+ IsActive = false;
+ }
+
+ public Law CreateNewVersion(string title, List notifications, string headTitle, List items)
+ {
+ var newVersion = new Law(
+ title,
+ this.Type,
+ notifications,
+ headTitle,
+ this.Version + 1
+ );
+
+ newVersion.SetItem(items);
+ newVersion.SetAsLatestVersion();
+
+ return newVersion;
+ }
+ }
+
+ public class LawItem
+ {
+ public long Id { get; set; }
+ public string Header { get; private set; }
+ public string Details { get; private set; }
+ public int OrderNumber { get; private set; }
+ public long LawId { get; set; }
+
+ protected LawItem() { }
+
+ public LawItem(string header, string details, int orderNumber)
+ {
+ Header = header;
+ Details = details;
+ OrderNumber = orderNumber;
+ }
+ }
+}
diff --git a/Company.Domain/LeaveAgg/ILeaveRepository.cs b/Company.Domain/LeaveAgg/ILeaveRepository.cs
index 7b4ee239..d5c96aa4 100644
--- a/Company.Domain/LeaveAgg/ILeaveRepository.cs
+++ b/Company.Domain/LeaveAgg/ILeaveRepository.cs
@@ -22,7 +22,7 @@ public interface ILeaveRepository : IRepository
bool CheckContractExist(DateTime myDate,long employeeId, long workshopId);
- LeavErrorViewModel CheckErrors(DateTime startLeav, DateTime endLeav, long employeeId, long workshopId);
+ LeavErrorViewModel CheckErrors(DateTime startLeav, DateTime endLeav, long employeeId, long workshopId,bool isInvalid);
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
List searchClient(LeaveSearchModel searchModel);
LeavePrintViewModel PrintOne(long id);
diff --git a/Company.Domain/LeaveAgg/Leave.cs b/Company.Domain/LeaveAgg/Leave.cs
index d164b49d..86cc530c 100644
--- a/Company.Domain/LeaveAgg/Leave.cs
+++ b/Company.Domain/LeaveAgg/Leave.cs
@@ -8,7 +8,9 @@ public class Leave: EntityBase
{
public Leave(DateTime startLeave, DateTime endLeave,
string leaveHourses, long workshopId, long employeeId,
- string paidLeaveType, string leaveType, string employeeFullName, string workshopName, bool isAccepted, string decription, int year, int month, TimeSpan shiftDuration, bool hasShiftDuration)
+ string paidLeaveType, string leaveType, string employeeFullName, string workshopName,
+ bool isAccepted, string decription, int year, int month, TimeSpan shiftDuration,
+ bool hasShiftDuration,bool isInvalid)
{
StartLeave = startLeave;
EndLeave = endLeave;
@@ -25,6 +27,7 @@ public class Leave: EntityBase
Month = month;
ShiftDuration = shiftDuration;
HasShiftDuration = hasShiftDuration;
+ IsInvalid = isInvalid;
}
public DateTime StartLeave { get; private set; }
@@ -43,6 +46,10 @@ public class Leave: EntityBase
public TimeSpan ShiftDuration { get; private set; }
public bool HasShiftDuration { get; private set; }
+ ///
+ ///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
+ ///
+ public bool IsInvalid { get; private set; }
public void Edit(DateTime startLeave, DateTime endLeave,
string leaveHourses, long workshopId, long employeeId,
diff --git a/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentGroupRepository.cs b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentGroupRepository.cs
new file mode 100644
index 00000000..f8025530
--- /dev/null
+++ b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentGroupRepository.cs
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.PaymentInstrument;
+
+namespace Company.Domain.PaymentInstrumentAgg;
+
+public interface IPaymentInstrumentGroupRepository:IRepository
+{
+ void Remove(PaymentInstrumentGroup paymentInstrumentGroup);
+ Task> GetList();
+}
\ No newline at end of file
diff --git a/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs
new file mode 100644
index 00000000..a8d4a943
--- /dev/null
+++ b/Company.Domain/PaymentInstrumentAgg/IPaymentInstrumentRepository.cs
@@ -0,0 +1,19 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using _0_Framework.Application;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.PaymentInstrument;
+
+namespace Company.Domain.PaymentInstrumentAgg;
+
+public interface IPaymentInstrumentRepository:IRepository
+{
+ Task GetList(PaymentInstrumentSearchModel searchModel);
+ Task> GetPosTerminalSelectList(string search);
+ Task> PosTerminalIdSelectList(string search, string selected);
+ Task> IbanSelectList(string search, string selected);
+ Task> AccountNumberSelectList(string search, string selected);
+ Task> CardNumberSelectList(string search, string selected);
+ Task> AccountHolderNameSelectList(string search, string selected);
+
+}
\ No newline at end of file
diff --git a/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs b/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs
new file mode 100644
index 00000000..11ee80c7
--- /dev/null
+++ b/Company.Domain/PaymentInstrumentAgg/PaymentInstrument.cs
@@ -0,0 +1,52 @@
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.PaymentInstrument;
+
+namespace Company.Domain.PaymentInstrumentAgg;
+
+public class PaymentInstrument:EntityBase
+{
+ private PaymentInstrument(string cardNumber, string accountHolderName, string accountNumber,string iBan,bool isAuth,long paymentInstrumentGroupId)
+ {
+ CardNumber = cardNumber;
+ AccountHolderName = accountHolderName;
+ AccountNumber = accountNumber;
+ IBan = iBan;
+ IsAuth = isAuth;
+ PaymentInstrumentGroupId = paymentInstrumentGroupId;
+ Type = PaymentInstrumentType.BankAccount;
+ }
+
+ private PaymentInstrument(string posTerminalId , string description,long paymentInstrumentGroupId)
+ {
+ PosTerminalId = posTerminalId;
+ Description = description;
+ PaymentInstrumentGroupId = paymentInstrumentGroupId;
+ Type = PaymentInstrumentType.Pos;
+ }
+
+ public static PaymentInstrument CreatePosType(string posTerminalId, string description, long paymentInstrumentGroupId)
+ {
+ return new PaymentInstrument(posTerminalId, description, paymentInstrumentGroupId);
+ }
+
+ public static PaymentInstrument CreateBankAccount(string cardNumber, string accountHolderName, string accountNumber,
+ string iBan, bool isAuth, long paymentInstrumentGroupId)
+ {
+ return new PaymentInstrument(cardNumber, accountHolderName, accountNumber, iBan, isAuth, paymentInstrumentGroupId);
+ }
+
+ public string CardNumber { get; private set; }
+ public string AccountHolderName { get; private set; }
+ public string AccountNumber { get; private set; }
+ public string IBan { get; private set; }
+
+ public string PosTerminalId { get; private set; }
+ public string Description { get; set; }
+
+ public PaymentInstrumentType Type { get; private set; }
+
+ public bool IsAuth { get; private set; }
+
+ public long PaymentInstrumentGroupId { get; private set; }
+ public PaymentInstrumentGroup PaymentInstrumentGroup { get; private set; }
+}
diff --git a/Company.Domain/PaymentInstrumentAgg/PaymentInstrumentGroup.cs b/Company.Domain/PaymentInstrumentAgg/PaymentInstrumentGroup.cs
new file mode 100644
index 00000000..c6a243f4
--- /dev/null
+++ b/Company.Domain/PaymentInstrumentAgg/PaymentInstrumentGroup.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using _0_Framework.Application;
+using _0_Framework.Domain;
+
+namespace Company.Domain.PaymentInstrumentAgg;
+
+public class PaymentInstrumentGroup:EntityBase
+{
+ public PaymentInstrumentGroup(string name)
+ {
+ Name = name;
+ IsActive = IsActive.True;
+ }
+
+ public string Name { get; private set; }
+ public IsActive IsActive { get; private set; }
+ public List PaymentInstruments { get; set; }
+
+ public void Edit(string name)
+ {
+ Name = name;
+ }
+
+ public void DeActive()
+ {
+ IsActive = IsActive.False;
+ }
+}
\ No newline at end of file
diff --git a/Company.Domain/ReportAgg/IReportRepository.cs b/Company.Domain/ReportAgg/IReportRepository.cs
index 7615bbf7..892391d1 100644
--- a/Company.Domain/ReportAgg/IReportRepository.cs
+++ b/Company.Domain/ReportAgg/IReportRepository.cs
@@ -11,21 +11,23 @@ namespace Company.Domain.ReportAgg
{
Task GetAllActiveWorkshopsNew(string year, string month);
AllReport GetAllActiveWorkshops(string year, string month);
- WorkshopResult GetWorkshopContractDone(string year, string month, long accountId, List workshopList);
- WorkshopResult GetWorkshopContractSignDone(string year, string month, long accountId, List workshopList);
- WorkshopResult GetWorkshopCheckoutDone(string year, string month, long accountId, List workshopList);
- WorkshopResult GetWorkshopCheckoutSignDone(string year, string month, long accountId, List workshopList);
- List GetEmployeeContract(string year, string month, long workshopId);
- List GetEmployeeContractSign(string year, string month, long workshopId);
- List GetEmployeeCheckout(string year, string month, long workshopId);
- List GetEmployeeCheckoutSign(string year, string month, long workshopId);
- PrintAllContractCheckout GetPrintAllContractDone(string year, string month, long accountId,
+ Task GetWorkshopContractDone(string year, string month, long accountId, List workshopList);
+ Task GetWorkshopContractSignDone(string year, string month, long accountId,
List workshopList);
- PrintAllContractCheckout GetPrintAllContractSignDone(string year, string month, long accountId,
+ Task GetWorkshopCheckoutDone(string year, string month, long accountId, List workshopList);
+ Task GetWorkshopCheckoutSignDone(string year, string month, long accountId,
List workshopList);
- PrintAllContractCheckout GetPrintAllCheckoutDone(string year, string month, long accountId,
+ Task> GetEmployeeContract(string year, string month, long workshopId);
+ Task> GetEmployeeContractSign(string year, string month, long workshopId);
+ Task> GetEmployeeCheckout(string year, string month, long workshopId);
+ Task> GetEmployeeCheckoutSign(string year, string month, long workshopId);
+ Task GetPrintAllContractDone(string year, string month, long accountId,
List workshopList);
- PrintAllContractCheckout GetPrintAllCheckoutSignDone(string year, string month, long accountId,
+ Task GetPrintAllContractSignDone(string year, string month, long accountId,
+ List workshopList);
+ Task GetPrintAllCheckoutDone(string year, string month, long accountId,
+ List workshopList);
+ Task GetPrintAllCheckoutSignDone(string year, string month, long accountId,
List workshopList);
diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs
index c1a8e006..9d501157 100644
--- a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs
+++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs
@@ -15,7 +15,7 @@ namespace Company.Domain.RollCallAgg;
public interface IRollCallMandatoryRepository : IRepository
{
- ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute);
+ ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute, double dailyWageUnAffected, bool totalLeaveCompute);
///
/// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب
diff --git a/Company.Domain/RollCallEmployeeStatusAgg/IRollCallEmployeeStatusRepository.cs b/Company.Domain/RollCallEmployeeStatusAgg/IRollCallEmployeeStatusRepository.cs
index ed2db0ec..2009aeec 100644
--- a/Company.Domain/RollCallEmployeeStatusAgg/IRollCallEmployeeStatusRepository.cs
+++ b/Company.Domain/RollCallEmployeeStatusAgg/IRollCallEmployeeStatusRepository.cs
@@ -26,5 +26,6 @@ namespace Company.Domain.RollCallEmployeeStatusAgg
List GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr);
List GetByWorkshopIdInDates(long workshopId, DateTime start, DateTime end);
bool IsActiveInPeriod(long employeeId, long workshopId, DateTime startDate, DateTime endDate);
- }
+ void RemoveRange(IEnumerable rollCallEmployeeStatusList);
+ }
}
diff --git a/Company.Domain/SalaryAidAgg/ISalaryAidRepository.cs b/Company.Domain/SalaryAidAgg/ISalaryAidRepository.cs
index edc2d7c5..4acc1cec 100644
--- a/Company.Domain/SalaryAidAgg/ISalaryAidRepository.cs
+++ b/Company.Domain/SalaryAidAgg/ISalaryAidRepository.cs
@@ -1,4 +1,5 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.Reward;
using CompanyManagment.App.Contracts.SalaryAid;
@@ -21,4 +22,5 @@ public interface ISalaryAidRepository:IRepository
SalaryAidsGroupedViewModel GetSearchListAsGrouped(SalaryAidSearchViewModel searchModel);
#endregion
+
}
\ No newline at end of file
diff --git a/Company.Domain/SmsResultAgg/SmsResult.cs b/Company.Domain/SmsResultAgg/SmsResult.cs
index 7a460662..5270f4de 100644
--- a/Company.Domain/SmsResultAgg/SmsResult.cs
+++ b/Company.Domain/SmsResultAgg/SmsResult.cs
@@ -5,7 +5,8 @@ namespace Company.Domain.SmsResultAgg;
public class SmsResult: EntityBase
{
- public SmsResult(int messageId, string status,string typeOfSms, string contractingPartyName,string mobile, long contractingPatyId, long institutionContractId)
+ public SmsResult(int messageId, string status,string typeOfSms,
+ string contractingPartyName,string mobile, long contractingPatyId, long institutionContractId)
{
MessageId = messageId;
Status = status;
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs b/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs
index e6ee8870..5e24becb 100644
--- a/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs
+++ b/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs
@@ -21,6 +21,8 @@ public class ContractingPartyTemp : EntityBase
IdNumberSerial = idNumberSerial;
Gender = gender;
DateOfBirth = dateOfBirth;
+ PublicId = Guid.NewGuid();
+ Status = ContractingPartyTempStatus.InComplete;
}
///
@@ -91,10 +93,34 @@ public class ContractingPartyTemp : EntityBase
///
public string Address { get; private set; }
+ public ContractingPartyTempStatus Status { get; set; }
+
+ public string VerifyCode { get; set; }
+ public DateTime VerifyCodeSentDateTime { get; set; }
+
+ public Guid PublicId { get; set; }
+
public void UpdateAddress(string state, string city, string address)
{
this.State = state;
this.City = city;
this.Address = address;
}
+
+ public void SetCompleted()
+ {
+ Status = ContractingPartyTempStatus.Completed;
+ }
+
+ public void SetVerifyCode(string verifyCode)
+ {
+ VerifyCode = verifyCode;
+ VerifyCodeSentDateTime = DateTime.Now;
+ }
+}
+
+public enum ContractingPartyTempStatus
+{
+ InComplete,
+ Completed
}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractContactInfoTempRepository.cs b/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractContactInfoTempRepository.cs
new file mode 100644
index 00000000..584029f9
--- /dev/null
+++ b/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractContactInfoTempRepository.cs
@@ -0,0 +1,7 @@
+using _0_Framework.Domain;
+
+namespace Company.Domain.TemporaryClientRegistrationAgg;
+
+public interface IInstitutionContractContactInfoTempRepository : IRepository
+{
+}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractTempRepository.cs b/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractTempRepository.cs
index 60212417..45443466 100644
--- a/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractTempRepository.cs
+++ b/Company.Domain/TemporaryClientRegistrationAgg/IInstitutionContractTempRepository.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework_b.Domain;
+using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
namespace Company.Domain.TemporaryClientRegistrationAgg;
@@ -17,10 +18,5 @@ public interface IInstitutionContractTempRepository : IRepository
Task GetInstitutionContractTemp(long id,long contractingPartyTempId);
- ///
- /// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
- /// جهت نمایش در کارپوشه
- ///
- ///
- Task> GetAllCompletedRegistration();
+
}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractContactInfoTemp.cs b/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractContactInfoTemp.cs
new file mode 100644
index 00000000..4d616f77
--- /dev/null
+++ b/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractContactInfoTemp.cs
@@ -0,0 +1,25 @@
+using _0_Framework.Domain;
+
+namespace Company.Domain.TemporaryClientRegistrationAgg;
+
+public class InstitutionContractContactInfoTemp : EntityBase
+{
+ public InstitutionContractContactInfoTemp(string phoneType, string position, string phoneNumber,
+ string fullName, long institutionContractTempId, bool sendSms)
+ {
+ PhoneType = phoneType;
+ Position = position;
+ PhoneNumber = phoneNumber;
+ FullName = fullName;
+ InstitutionContractTempId = institutionContractTempId;
+ SendSms = sendSms;
+ }
+
+ public string PhoneType { get; private set; }
+ public long InstitutionContractTempId { get; private set; }
+ public string Position { get; private set; }
+ public string PhoneNumber { get; private set; }
+ public string FullName { get; private set; }
+ public bool SendSms { get; private set; }
+ public InstitutionContractTemp InstitutionContractTemp { get; set; }
+}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractTemp.cs b/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractTemp.cs
index 198c3737..b21d9b9c 100644
--- a/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractTemp.cs
+++ b/Company.Domain/TemporaryClientRegistrationAgg/InstitutionContractTemp.cs
@@ -1,13 +1,15 @@
using System;
+using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application.UID;
using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.TemporaryClientRegistration;
namespace Company.Domain.TemporaryClientRegistrationAgg;
public class InstitutionContractTemp : EntityBase
{
- public InstitutionContractTemp(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
+ public InstitutionContractTemp(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
ContractingPartyTempId = contractingPartyTempId;
PaymentModel = paymentModel;
@@ -22,6 +24,7 @@ public class InstitutionContractTemp : EntityBase
MessageId = messageId;
SendVerifyCodeTime = sendVerifyCodeTime;
VerifyCodeEndTime = verifyCodeEndTime;
+ PublicId = Guid.NewGuid();
}
///
@@ -87,7 +90,7 @@ public class InstitutionContractTemp : EntityBase
/// -
/// Completed ثبت نام تکمیل شده
///
- public string RegistrationStatus { get; private set; }
+ public InstitutionContractTempStatus RegistrationStatus { get; private set; }
///
/// آی دی پیامک ارسال شده
@@ -104,8 +107,16 @@ public class InstitutionContractTemp : EntityBase
///
public DateTime? VerifyCodeEndTime{ get; private set; }
+ ///
+ /// آیدی عمومی
+ /// برای نمایش در آدرس
+ ///
+ public Guid PublicId { get; set; }
- public void Edit(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
+ public List ContactInfoList { get; set; }
+
+
+ public void Edit(long contractingPartyTempId, string paymentModel, string periodModel, double totalPayment, DateTime contractStartGr, DateTime contractEndGr, string officialCompany, double valueAddedTax, string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
ContractingPartyTempId = contractingPartyTempId;
PaymentModel = paymentModel;
@@ -122,7 +133,7 @@ public class InstitutionContractTemp : EntityBase
VerifyCodeEndTime = verifyCodeEndTime;
}
- public void Update(string verifyCode, string registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
+ public void Update(string verifyCode, InstitutionContractTempStatus registrationStatus, int messageId, DateTime? sendVerifyCodeTime, DateTime? verifyCodeEndTime)
{
VerifyCode = verifyCode;
RegistrationStatus = registrationStatus;
@@ -131,9 +142,10 @@ public class InstitutionContractTemp : EntityBase
VerifyCodeEndTime = verifyCodeEndTime;
}
- public void ChangeRegistrationStatus(string registrationStatus)
+ public void ChangeRegistrationStatus(InstitutionContractTempStatus registrationStatus)
{
RegistrationStatus = registrationStatus;
}
-}
\ No newline at end of file
+}
+
diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
index 01d6adea..6d5f56ea 100644
--- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
+++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
@@ -70,6 +70,7 @@ public interface IWorkshopRepository : IRepository
Task> GetWorkshopsForLeftWorkTemp(long accountId);
Task GetWorkshopsForLeftWorkTempCount(long accountId);
Task> GetSelectList(string search, long id);
+ int GetLastArchiveCode();
#endregion
diff --git a/Company.Domain/WorkshopAgg/Workshop.cs b/Company.Domain/WorkshopAgg/Workshop.cs
index 96e61911..99226c05 100644
--- a/Company.Domain/WorkshopAgg/Workshop.cs
+++ b/Company.Domain/WorkshopAgg/Workshop.cs
@@ -76,14 +76,13 @@ public class Workshop : EntityBase
ClientEmployeeWorkshopList = new List();
}
-
-
-
+
public Workshop(string workshopName,string workshopSureName, string insuranceCode, string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide,
bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
- bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout, IsActive cutContractEndOfYear, bool rotatingShiftCompute, bool isStaticCheckout)
+ bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout,
+ IsActive cutContractEndOfYear, bool rotatingShiftCompute, bool isStaticCheckout,long contractingPartyId)
{
WorkshopName = workshopName;
WorkshopSureName = workshopSureName;
@@ -134,6 +133,7 @@ public class Workshop : EntityBase
CutContractEndOfYear = cutContractEndOfYear;
RotatingShiftCompute = rotatingShiftCompute;
IsStaticCheckout = isStaticCheckout;
+ ContractingPartyId = contractingPartyId;
}
@@ -233,6 +233,8 @@ public class Workshop : EntityBase
///
public bool IsStaticCheckout { get; private set; }
+ public long ContractingPartyId { get; private set; }
+
public Workshop()
{
RollCallServicesList = new List();
@@ -344,4 +346,10 @@ public class Workshop : EntityBase
this.IsActiveString = "false";
ArchiveCode = "b-" + archiveCode;
}
+}
+
+public enum WorkshopRegistrationStatus
+{
+ NotRegistered = 0,
+ Registered = 1
}
\ No newline at end of file
diff --git a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs
index 7a0a3acc..cae19664 100644
--- a/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs
+++ b/Company.Domain/YearlySalaryAgg/IYearlySalaryRepository.cs
@@ -6,6 +6,7 @@ using CompanyManagment.App.Contracts.YearlySalary;
using System.Threading.Tasks;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Holiday;
+using CompanyManagment.App.Contracts.Contract;
namespace Company.Domain.YearlySalaryAgg;
@@ -17,10 +18,50 @@ public interface IYearlySalaryRepository : IRepository
void TestDayliFeeCompute();
List GetYears();
List GetYearlySalary();
+
+ ///
+ /// دریافت مزد روزانه فیش حقوقی
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task GetCheckoutDailyWage(EditContract contract, DateTime checkoutStart, DateTime checkoutEnd);
+
+ ///
+ /// دریافت مزد روزانه بر اساس تاریخ شروع و پایان
+ ///
+ ///
+ ///
+ ///
+ Task<(double dailyWage, long yearlySalaryId)> GetDailyWageByStartEnd(DateTime start, DateTime end);
+
MontlywageBunosYearsViewModel GetMontlyBunosYears(TimeSpan weeklyTime, DateTime contractStart,DateTime contractEnd, double daylyWage, string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM, string basic, int fridayStartToEnd, double dayliFeeComplete, bool hasRollCall, bool holidaysWorking,string shiftWork);
double GetLeavePay(DateTime contractStart, DateTime contractEnd, double daylyWage, double consumableItem, double housingAllowance, double familyAllowance , string weeklyWorkingTime, int officialholiday, int friday, string totalHoursH, string totalHorsM);
double GetOverTimeWorking(double dayliWage, string overTimeWorkH, string overTimeWorkM);
double GetOverNightWorking(double dayliWage, string overNightWorkH, string overNightWorkM, string weeklyWorkingTime, int officialholiday, int friday, DateTime contractStart, DateTime contractEnd, string totalHoursH, string totalHorsM);
+
+ ///
+ /// متد ارتقاء مزد دلخواه
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task UpgradeManualDailyWage(DateTime newContractStart, DateTime lastContractStart,
+ double lastContractManualDailyWage);
+
+ ///
+ /// متد محاسبه پایه سنوات و لیست پایه سنوات های پرسنل
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task BaseYearCompute(DateTime contractStart, DateTime contractEnd, long employeeId,
+ long workshopId, List leftWorkList);
DayliFeeViewModel DayliFeeComputing(DateTime startDateW,DateTime contractStart, DateTime endDateW, long employeeId, long workshopId,List leftWorkList);
Task DayliFeeComputingAsync(DateTime startDateW, DateTime contractStart, DateTime endDateW, long employeeId, long workshopId, List leftWorkList);
string ConsumableItems(DateTime endDateW);
diff --git a/Company.Domain/empolyerAgg/Employer.cs b/Company.Domain/empolyerAgg/Employer.cs
index 09837e79..0722e73f 100644
--- a/Company.Domain/empolyerAgg/Employer.cs
+++ b/Company.Domain/empolyerAgg/Employer.cs
@@ -1,5 +1,7 @@
using System;
using System.Collections.Generic;
+using System.Security.AccessControl;
+using _0_Framework.Application;
using _0_Framework.Domain;
using Company.Domain.ContarctingPartyAgg;
using Company.Domain.ContractAgg;
@@ -66,6 +68,11 @@ public class Employer : EntityBase
public string SanaPassword { get; private set; }
public string EmployerNo { get; set; }
+ public bool IsAuth { get; set; }
+ public string IdNumberSerial { get; set; }
+
+ public string IdNumberSeri { get; set; }
+
public PersonalContractingParty ContractingParty { get; set; }
//public List Workshops { get; private set; }
@@ -227,4 +234,35 @@ public class Employer : EntityBase
this.IsActive = false;
this.Address = "false";
}
+
+ public void Authentication(string fName, string lName, string fatherName,string idNumber,
+ string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender,string phone)
+ {
+ this.FName = fName;
+ this.LName = lName;
+ this.FatherName = fatherName;
+ this.IdNumberSeri = idNumberSeri;
+ this.IdNumberSerial = idNumberSerial;
+ this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : new();
+ this.IdNumber = idNumber;
+ this.Gender = gender == _0_Framework.Application.Gender.Male? "مرد" : "زن";
+ this.IsAuth = true;
+ Phone = phone;
+ }
+
+
+ public void LegalAuthentication(string fName, string lName, string fatherName,string idNumber, string idNumberSeri,
+ string idNumberSerial, string dateOfBirth, Gender gender,string phone)
+ {
+ FName = fName;
+ EmployerLName = lName;
+ this.FatherName = fatherName;
+ this.IdNumberSeri = idNumberSeri;
+ this.IdNumberSerial = idNumberSerial;
+ this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : new();
+ this.IdNumber = idNumber;
+ this.Gender =gender == _0_Framework.Application.Gender.Male? "مرد" : "زن";
+ this.IsAuth = true;
+ Phone = phone;
+ }
}
\ No newline at end of file
diff --git a/Company.Domain/empolyerAgg/IEmployerRepository.cs b/Company.Domain/empolyerAgg/IEmployerRepository.cs
index e3f1c7a1..94489f36 100644
--- a/Company.Domain/empolyerAgg/IEmployerRepository.cs
+++ b/Company.Domain/empolyerAgg/IEmployerRepository.cs
@@ -1,9 +1,11 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
+using _0_Framework.Application.Enums;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Employer;
+using Microsoft.AspNetCore.Mvc;
namespace Company.Domain.empolyerAgg;
@@ -34,7 +36,7 @@ public interface IEmployerRepository : IRepository
List GetEmployersHasWorkshop();
- Task> GetSelectList(string search,long id);
+ Task> GetSelectList(string search, long id, LegalType? legalType);
#endregion
@@ -68,5 +70,5 @@ public interface IEmployerRepository : IRepository
#endregion
-
+ Task> GetWorkflowRegistrationForEdit(long employerId, long institutionWorkshopDetailsId);
}
\ No newline at end of file
diff --git a/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
index 68144324..ca7dcfac 100644
--- a/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
+++ b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
@@ -12,9 +12,7 @@ public class CaseHistoryRollCallExcelForEmployeeViewModel
public string EmployeeFullName { get; set; }
public string TotalWorkingHoursFa { get; set; }
public string TotalWorkingTimeSpan { get; set; }
-
-
-
+
public List RollCalls { get; set; }
}
@@ -40,7 +38,8 @@ public class RollCallItemForEmployeeExcelViewModel
public bool HasLeave { get; set; }
public string TotalWorkingHours { get; set; }
-
+ public string EnterTimeDifferences { get; set; }
+ public string ExitTimeDifferences { get; set; }
}
public class RollCallTimeExcelViewModel
diff --git a/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs b/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
index 4d10e241..b7455351 100644
--- a/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
+++ b/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
@@ -113,11 +113,12 @@ public class RollCallExcelGenerator : ExcelGenerator
worksheet.Cells[i + row + 1, 1].Value = i + 1;
worksheet.Cells[i + row + 1, 2].Value = rollCall.DayOfWeekFa;
worksheet.Cells[i + row + 1, 3].Value = rollCall.DateFa;
- worksheet.Cells[i + row + 1, 4].Value = "-";
+ worksheet.Cells[i + row + 1, 4].Value = rollCall.EnterTimeDifferences;
worksheet.Cells[i + row + 1, 5].Value = rollCall.StartsItems;
worksheet.Cells[i + row + 1, 6].Value = rollCall.EndsItems;
- worksheet.Cells[i + row + 1, 7].Value = "-";
- worksheet.Cells[i + row + 1, 8].Value = rollCall.TotalWorkingHours == string.Empty ? "ندارد" : rollCall.TotalWorkingHours;
+ worksheet.Cells[i + row + 1, 7].Value = rollCall.ExitTimeDifferences;
+ worksheet.Cells[i + row + 1, 8].Value = rollCall.TotalWorkingHours == string.Empty
+ ? "ندارد" : rollCall.TotalWorkingHours;
// Style data cells
for (int j = 1; j <= 8; j++)
@@ -307,6 +308,49 @@ public class RollCallExcelGenerator : ExcelGenerator
return package.GetAsByteArray();
}
+ private string CalculateExitMinuteDifference(TimeSpan early, TimeSpan late)
+ {
+ if (early == TimeSpan.Zero && late == TimeSpan.Zero)
+ {
+ return "-";
+ }
+ else if (late != TimeSpan.Zero)
+ {
+ var minutes = late.TotalMinutes > 999 ? "999" : late.TotalMinutes.ToString();
+ return $"{minutes}+";
+ }
+ else if (early != TimeSpan.Zero)
+ {
+ var minutes = early.TotalMinutes > 999 ? "999" : early.TotalMinutes.ToString();
+ return $"{minutes}-";
+ }
+ else
+ {
+ return $"";
+ }
+ }
+
+ private string CalculateEntryMinuteDifference(TimeSpan early, TimeSpan late)
+ {
+ if (early == TimeSpan.Zero && late == TimeSpan.Zero)
+ {
+ return "-";
+ }
+ else if (late != TimeSpan.Zero)
+ {
+ var minutes = late.TotalMinutes > 999 ? "999" : late.TotalMinutes.ToString();
+ return $"{minutes}-";
+ }
+ else if (early != TimeSpan.Zero)
+ {
+ var minutes = early.TotalMinutes > 999 ? "999" : early.TotalMinutes.ToString();
+ return $"{minutes}+";
+ }
+ else
+ {
+ return $"";
+ }
+ }
}
diff --git a/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj b/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj
new file mode 100644
index 00000000..4c09d4ae
--- /dev/null
+++ b/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CompanyManagement.Infrastructure.Mongo/EmployeeFaceEmbeddingRepo/EmployeeFaceEmbeddingRepository.cs b/CompanyManagement.Infrastructure.Mongo/EmployeeFaceEmbeddingRepo/EmployeeFaceEmbeddingRepository.cs
new file mode 100644
index 00000000..e2abc255
--- /dev/null
+++ b/CompanyManagement.Infrastructure.Mongo/EmployeeFaceEmbeddingRepo/EmployeeFaceEmbeddingRepository.cs
@@ -0,0 +1,60 @@
+using Company.Domain.EmployeeFaceEmbeddingAgg;
+using MongoDB.Driver;
+
+namespace CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo;
+
+public class EmployeeFaceEmbeddingRepository : IEmployeeFaceEmbeddingRepository
+{
+ private readonly IMongoCollection _employeeFaceEmbeddings;
+
+ public EmployeeFaceEmbeddingRepository(IMongoDatabase database)
+ {
+ _employeeFaceEmbeddings = database.GetCollection("EmployeeFaces");
+ }
+
+ public async Task CreateAsync(EmployeeFaceEmbedding employeeFaceEmbedding)
+ {
+ await _employeeFaceEmbeddings.InsertOneAsync(employeeFaceEmbedding);
+ }
+
+ public async Task UpdateAsync(EmployeeFaceEmbedding employeeFaceEmbedding)
+ {
+ await _employeeFaceEmbeddings.ReplaceOneAsync(
+ x => x.Id == employeeFaceEmbedding.Id,
+ employeeFaceEmbedding);
+ }
+
+ public async Task GetByIdAsync(string id)
+ {
+ return await _employeeFaceEmbeddings
+ .Find(x => x.Id == id)
+ .FirstOrDefaultAsync();
+ }
+
+ public async Task GetByEmployeeIdAsync(long employeeId)
+ {
+ return await _employeeFaceEmbeddings
+ .Find(x => x.EmployeeId == employeeId)
+ .FirstOrDefaultAsync();
+ }
+
+ public async Task> GetByWorkshopIdAsync(long workshopId)
+ {
+ return await _employeeFaceEmbeddings
+ .Find(x => x.WorkshopId == workshopId)
+ .ToListAsync();
+ }
+
+ public async Task> GetByWorkshopIdsAsync(List workshopIds)
+ {
+ return await _employeeFaceEmbeddings
+ .Find(x => workshopIds.First()==x.WorkshopId)
+ .ToListAsync();
+ }
+
+ public async Task DeleteAsync(string id)
+ {
+ await _employeeFaceEmbeddings.DeleteOneAsync(x => x.Id == id);
+ }
+}
+
diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs
new file mode 100644
index 00000000..2b959872
--- /dev/null
+++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs
@@ -0,0 +1,32 @@
+using Company.Domain.InstitutionContractExtensionTempAgg;
+using MongoDB.Driver;
+
+namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo;
+
+public class InstitutionContractExtenstionTempRepository:IInstitutionContractExtenstionTempRepository
+{
+ private readonly IMongoCollection _institutionExtenstionTemp;
+
+ public InstitutionContractExtenstionTempRepository(IMongoDatabase database)
+ {
+ _institutionExtenstionTemp = database.GetCollection("InstitutionContractExtenstionTemp");
+ }
+
+ public async Task Create(InstitutionContractExtensionTemp institutionContract)
+ {
+ await _institutionExtenstionTemp.InsertOneAsync(institutionContract);
+ }
+
+ public async Task GetPreviousExtenstionData(long contractingPartyId)
+ {
+ var entity = await _institutionExtenstionTemp
+ .Find(x => x.PreviousId == contractingPartyId)
+ .FirstOrDefaultAsync();
+ return entity;
+ }
+
+ public async Task Remove(Guid id)
+ {
+ await _institutionExtenstionTemp.DeleteOneAsync(x=>x.Id == id);
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsSearchModel.cs b/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsSearchModel.cs
new file mode 100644
index 00000000..3f47b0be
--- /dev/null
+++ b/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsSearchModel.cs
@@ -0,0 +1,12 @@
+namespace Company.Application.Contracts.AuthorizedBankDetails
+{
+ public class AuthorizedBankDetailsSearchModel
+ {
+ public string CardNumber { get; set; }
+ public string AccountNumber { get; set; }
+ public string IBan { get; set; }
+ public string BankName { get; set; }
+ public string NationalIdentifier { get; set; }
+ }
+}
+
diff --git a/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsViewModel.cs b/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsViewModel.cs
new file mode 100644
index 00000000..3987e925
--- /dev/null
+++ b/CompanyManagment.App.Contracts/AuthorizedBankDetails/AuthorizedBankDetailsViewModel.cs
@@ -0,0 +1,18 @@
+using System;
+using System;
+
+using System.Collections.Generic;
+namespace Company.Application.Contracts.AuthorizedBankDetails;
+
+public class AuthorizedBankDetailsViewModel
+{
+ public string NationalIdentifier { get; set; }
+
+ public long Id { get; set; }
+ public string CustomerType { get; set; }
+ public string CardNumber { get; set; }
+ public string AccountNumber { get; set; }
+ public string IBan { get; set; }
+ public string BankName { get; set; }
+ public List Owners { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/AuthorizedBankDetails/CreateAuthorizedBankDetails.cs b/CompanyManagment.App.Contracts/AuthorizedBankDetails/CreateAuthorizedBankDetails.cs
new file mode 100644
index 00000000..5e299e34
--- /dev/null
+++ b/CompanyManagment.App.Contracts/AuthorizedBankDetails/CreateAuthorizedBankDetails.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace Company.Application.Contracts.AuthorizedBankDetails
+{
+ public class CreateAuthorizedBankDetails
+ {
+ public string CardNumber { get; set; }
+
+ public string AccountNumber { get; set; }
+
+ public string IBan { get; set; }
+
+ public string BankName { get; set; }
+
+ public List OwnersList { get; set; }
+ }
+
+ public class CreateAuthorizedBankDetailsOwner
+ {
+ public string FName { get; set; }
+
+ public string LName { get; set; }
+
+ public string NationalIdentifier { get; set; }
+
+ public string CustomerType { get; set; }
+ }
+}
diff --git a/CompanyManagment.App.Contracts/AuthorizedBankDetails/EditAuthorizedBankDetails.cs b/CompanyManagment.App.Contracts/AuthorizedBankDetails/EditAuthorizedBankDetails.cs
new file mode 100644
index 00000000..ea28e332
--- /dev/null
+++ b/CompanyManagment.App.Contracts/AuthorizedBankDetails/EditAuthorizedBankDetails.cs
@@ -0,0 +1,28 @@
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+
+namespace Company.Application.Contracts.AuthorizedBankDetails
+{
+ public class EditAuthorizedBankDetails
+ {
+ public long Id { get; set; }
+
+ public string CardNumber { get; set; }
+
+ public string AccountNumber { get; set; }
+
+ public string IBan { get; set; }
+
+ public string BankName { get; set; }
+
+ public List OwnersList { get; set; }
+ }
+
+ public class AuthorizedBankDetailsOwnerViewModel
+ {
+ public string FName { get; set; }
+ public string LName { get; set; }
+ public string NationalIdentifier { get; set; }
+ public string CustomerType { get; set; }
+ }
+}
diff --git a/CompanyManagment.App.Contracts/AuthorizedBankDetails/IAuthorizedBankDetailsApplication.cs b/CompanyManagment.App.Contracts/AuthorizedBankDetails/IAuthorizedBankDetailsApplication.cs
new file mode 100644
index 00000000..90368d4a
--- /dev/null
+++ b/CompanyManagment.App.Contracts/AuthorizedBankDetails/IAuthorizedBankDetailsApplication.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+using _0_Framework.Application;
+using Company.Application.Contracts.AuthorizedBankDetails;
+
+namespace Company.Application.Contracts.AuthorizedBankDetails
+{
+ public interface IAuthorizedBankDetailsApplication
+ {
+ OperationResult Create(CreateAuthorizedBankDetails command);
+ EditAuthorizedBankDetails GetDetails(long id);
+ List