Compare commits

..

5 Commits

260 changed files with 3869 additions and 15258 deletions

View File

@@ -5,6 +5,8 @@ on:
branches: branches:
- Main - Main
env:
DOTNET_ENVIRONMENT: Development
jobs: jobs:
build-and-deploy: build-and-deploy:
@@ -35,11 +37,12 @@ jobs:
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" ` & "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
-verb:sync ` -verb:sync `
-source:contentPath="$publishFolder" ` -source:contentPath="$publishFolder" `
-dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" ` -dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R",authType="Basic" `
-allowUntrusted ` -allowUntrusted `
-enableRule:AppOffline -enableRule:AppOffline
env: env:
SERVER_HOST: 171.22.24.15 SERVER_HOST: your-server-ip-or-domain
DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }} DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}

6
.gitignore vendored
View File

@@ -362,9 +362,3 @@ MigrationBackup/
# # Fody - auto-generated XML schema # # Fody - auto-generated XML schema
# FodyWeavers.xsd # FodyWeavers.xsd
.idea .idea
/ServiceHost/appsettings.Development.json
/ServiceHost/appsettings.json
# Storage folder - ignore all uploaded files, thumbnails, and temporary files
ServiceHost/Storage

View File

@@ -2,8 +2,6 @@
public enum TypeOfSmsSetting public enum TypeOfSmsSetting
{ {
//همه انواع پیامک
All = 0,
/// <summary> /// <summary>
/// پیامک /// پیامک
@@ -25,7 +23,7 @@ public enum TypeOfSmsSetting
/// <summary> /// <summary>
/// پیامک /// پیامک
/// هشدار بدهی /// هشدار اول
/// </summary> /// </summary>
Warning, Warning,
@@ -40,14 +38,4 @@ public enum TypeOfSmsSetting
/// </summary> /// </summary>
InstitutionContractConfirm, InstitutionContractConfirm,
/// <summary>
/// ارسال کد تاییدیه قرارداد مالی
/// </summary>
SendInstitutionContractConfirmationCode,
/// <summary>
/// یادآور وظایف
/// </summary>
TaskReminder,
} }

View File

@@ -4,7 +4,6 @@ using System.Net.Http;
using System.Net.Http.Json; using System.Net.Http.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace _0_Framework.Application.PaymentGateway; namespace _0_Framework.Application.PaymentGateway;
@@ -13,24 +12,18 @@ public class SepehrPaymentGateway:IPaymentGateway
{ {
private readonly HttpClient _httpClient; private readonly HttpClient _httpClient;
private const long TerminalId = 99213700; private const long TerminalId = 99213700;
private readonly ILogger<SepehrPaymentGateway> _logger;
public SepehrPaymentGateway(IHttpClientFactory httpClient, ILogger<SepehrPaymentGateway> logger) public SepehrPaymentGateway(IHttpClientFactory httpClient)
{ {
_logger = logger;
_httpClient = httpClient.CreateClient(); _httpClient = httpClient.CreateClient();
_httpClient.BaseAddress = new Uri("https://sepehr.shaparak.ir/Rest/V1/PeymentApi/"); _httpClient.BaseAddress = new Uri("https://sepehr.shaparak.ir/Rest/V1/PeymentApi/");
} }
public async Task<PaymentGatewayResponse> Create(CreatePaymentGatewayRequest command, CancellationToken cancellationToken = default) public async Task<PaymentGatewayResponse> Create(CreatePaymentGatewayRequest command, CancellationToken cancellationToken = default)
{ {
_logger.LogInformation("Create payment started. TransactionId: {TransactionId}, Amount: {Amount}", command.TransactionId, command.Amount);
command.ExtraData ??= new Dictionary<string, object>(); command.ExtraData ??= new Dictionary<string, object>();
_logger.LogInformation("Initializing extra data with FinancialInvoiceId: {FinancialInvoiceId}", command.FinancialInvoiceId);
command.ExtraData.Add("financialInvoiceId", command.FinancialInvoiceId); command.ExtraData.Add("financialInvoiceId", command.FinancialInvoiceId);
var extraData = JsonConvert.SerializeObject(command.ExtraData); var extraData = JsonConvert.SerializeObject(command.ExtraData);
_logger.LogInformation("Serialized extra data payload: {Payload}", extraData);
var res = await _httpClient.PostAsJsonAsync("GetToken", new var res = await _httpClient.PostAsJsonAsync("GetToken", new
{ {
TerminalID = TerminalId, TerminalID = TerminalId,
@@ -39,25 +32,21 @@ public class SepehrPaymentGateway:IPaymentGateway
callbackURL = command.CallBackUrl, callbackURL = command.CallBackUrl,
payload = extraData payload = extraData
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
_logger.LogInformation("Create payment request sent. StatusCode: {StatusCode}", res.StatusCode);
// خواندن محتوای پاسخ // خواندن محتوای پاسخ
var content = await res.Content.ReadAsStringAsync(cancellationToken); var content = await res.Content.ReadAsStringAsync(cancellationToken);
_logger.LogInformation("Create payment response content: {Content}", content);
// تبدیل پاسخ JSON به آبجکت دات‌نت // تبدیل پاسخ JSON به آبجکت دات‌نت
var json = System.Text.Json.JsonDocument.Parse(content); var json = System.Text.Json.JsonDocument.Parse(content);
_logger.LogInformation("Create payment JSON parsed successfully.");
// گرفتن مقدار AccessToken // گرفتن مقدار AccessToken
var accessToken = json.RootElement.GetProperty("Accesstoken").ToString(); var accessToken = json.RootElement.GetProperty("Accesstoken").ToString();
var status = json.RootElement.GetProperty("Status").ToString(); var status = json.RootElement.GetProperty("Status").ToString();
_logger.LogInformation("Create payment parsed values. Status: {Status}, AccessToken: {AccessToken}", status, accessToken);
return new PaymentGatewayResponse return new PaymentGatewayResponse
{ {
Status = status, Status = status,
IsSuccess = status == "0", IsSuccess = status == "0",
Token = accessToken, Token = accessToken
}; };
} }
@@ -66,24 +55,21 @@ public class SepehrPaymentGateway:IPaymentGateway
public async Task<PaymentGatewayResponse> Verify(VerifyPaymentGateWayRequest command, CancellationToken cancellationToken = default) public async Task<PaymentGatewayResponse> Verify(VerifyPaymentGateWayRequest command, CancellationToken cancellationToken = default)
{ {
_logger.LogInformation("Verify payment started. DigitalReceipt: {DigitalReceipt}", command.DigitalReceipt);
var res = await _httpClient.PostAsJsonAsync("Advice", new var res = await _httpClient.PostAsJsonAsync("Advice", new
{ {
digitalreceipt = command.DigitalReceipt, digitalreceipt = command.DigitalReceipt,
Tid = TerminalId, Tid = TerminalId,
}, cancellationToken: cancellationToken); }, cancellationToken: cancellationToken);
_logger.LogInformation("Verify payment request sent. StatusCode: {StatusCode}", res.StatusCode);
// خواندن محتوای پاسخ // خواندن محتوای پاسخ
var content = await res.Content.ReadAsStringAsync(cancellationToken); var content = await res.Content.ReadAsStringAsync(cancellationToken);
_logger.LogInformation("Verify payment response content: {Content}", content);
// تبدیل پاسخ JSON به آبجکت دات‌نت // تبدیل پاسخ JSON به آبجکت دات‌نت
var json = System.Text.Json.JsonDocument.Parse(content); var json = System.Text.Json.JsonDocument.Parse(content);
_logger.LogInformation("Verify payment JSON parsed successfully.");
var message = json.RootElement.GetProperty("Message").GetString(); var message = json.RootElement.GetProperty("Message").GetString();
var status = json.RootElement.GetProperty("Status").GetString(); var status = json.RootElement.GetProperty("Status").GetString();
_logger.LogInformation("Verify payment parsed values. Status: {Status}, Message: {Message}", status, message);
return new PaymentGatewayResponse return new PaymentGatewayResponse
{ {
Status = status, Status = status,

View File

@@ -18,17 +18,3 @@ public class ApiResultViewModel
public string DeliveryColor { get; set; } public string DeliveryColor { get; set; }
public string FullName { get; set; } public string FullName { get; set; }
} }
public class ApiReportDto
{
public int MessageId { get; set; }
public long Mobile { get; set; }
public string SendUnixTime { get; set; }
public string DeliveryState { get; set; }
public string DeliveryUnixTime { get; set; }
public string DeliveryColor { get; set; }
}

View File

@@ -19,13 +19,6 @@ public interface ISmsService
bool SendAccountsInfo(string number,string fullName, string userName); bool SendAccountsInfo(string number,string fullName, string userName);
Task<ApiResultViewModel> GetByMessageId(int messId); Task<ApiResultViewModel> GetByMessageId(int messId);
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate); Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);
#region ForApi
Task<List<ApiReportDto>> GetApiReport(string startDate, string endDate);
#endregion
string DeliveryStatus(byte? dv); string DeliveryStatus(byte? dv);
string DeliveryColorStatus(byte? dv); string DeliveryColorStatus(byte? dv);
string UnixTimeStampToDateTime(int? unixTimeStamp); string UnixTimeStampToDateTime(int? unixTimeStamp);
@@ -71,7 +64,6 @@ public interface ISmsService
/// <summary> /// <summary>
/// پیامک مسدودی طرف حساب /// پیامک مسدودی طرف حساب
/// قراردادهای قدیم
/// </summary> /// </summary>
/// <param name="number"></param> /// <param name="number"></param>
/// <param name="fullname"></param> /// <param name="fullname"></param>
@@ -82,19 +74,6 @@ public interface ISmsService
/// <returns></returns> /// <returns></returns>
Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, string aprove); Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, string aprove);
/// <summary>
/// پیامک مسدودی طرف حساب
/// قرارداد های جدید
/// </summary>
/// <param name="number"></param>
/// <param name="fullname"></param>
/// <param name="amount"></param>
/// <param name="code1"></param>
/// <param name="code2"></param>
/// <returns></returns>
Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessageForElectronicContract(string number,
string fullname,
string amount, string code1, string code2);
#endregion #endregion
#region AlarmMessage #region AlarmMessage

View File

@@ -34,7 +34,7 @@ public interface IAccountApplication
OperationResult DeActive(long id); OperationResult DeActive(long id);
OperationResult DirectLogin(long id); OperationResult DirectLogin(long id);
// AccountLeftWorkViewModel WorkshopList(long accountId); AccountLeftWorkViewModel WorkshopList(long accountId);
OperationResult SaveWorkshopAccount( OperationResult SaveWorkshopAccount(
List<WorkshopAccountlistViewModel> workshopAccountList, List<WorkshopAccountlistViewModel> workshopAccountList,
string startDate, string startDate,
@@ -75,6 +75,7 @@ public interface IAccountApplication
void CameraLogin(CameraLoginRequest request); void CameraLogin(CameraLoginRequest request);
Task<GetPmUserDto> GetPmUserAsync(long accountId); Task<GetPmUserDto> GetPmUserAsync(long accountId);
} }
public class CameraLoginRequest public class CameraLoginRequest

View File

@@ -18,6 +18,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Shared.Contracts.PmUser.Commands; using Shared.Contracts.PmUser.Commands;
using Shared.Contracts.PmUser.Queries; using Shared.Contracts.PmUser.Queries;
@@ -47,13 +48,7 @@ public class AccountApplication : IAccountApplication
private readonly IPmUserCommandService _pmUserCommandService; private readonly IPmUserCommandService _pmUserCommandService;
public AccountApplication(IAccountRepository accountRepository, IPasswordHasher passwordHasher, public AccountApplication(IAccountRepository accountRepository, IPasswordHasher passwordHasher,
IFileUploader fileUploader, IAuthHelper authHelper, IRoleRepository roleRepository, IWorker worker, IFileUploader fileUploader, IAuthHelper authHelper, IRoleRepository roleRepository, IWorker worker, ISmsService smsService, ICameraAccountRepository cameraAccountRepository, IPositionRepository positionRepository, IAccountLeftworkRepository accountLeftworkRepository, IWorkshopRepository workshopRepository, ISubAccountRepository subAccountRepository, ISubAccountRoleRepository subAccountRoleRepository, IWorkshopSubAccountRepository workshopSubAccountRepository, ISubAccountPermissionSubtitle1Repository accountPermissionSubtitle1Repository, IUnitOfWork unitOfWork, IPmUserQueryService pmUserQueryService, IPmUserCommandService pmUserCommandService)
ISmsService smsService, ICameraAccountRepository cameraAccountRepository,
IPositionRepository positionRepository, IAccountLeftworkRepository accountLeftworkRepository,
IWorkshopRepository workshopRepository, ISubAccountRepository subAccountRepository,
ISubAccountRoleRepository subAccountRoleRepository, IWorkshopSubAccountRepository workshopSubAccountRepository,
ISubAccountPermissionSubtitle1Repository accountPermissionSubtitle1Repository, IUnitOfWork unitOfWork,
IPmUserQueryService pmUserQueryService, IPmUserCommandService pmUserCommandService)
{ {
_authHelper = authHelper; _authHelper = authHelper;
_roleRepository = roleRepository; _roleRepository = roleRepository;
@@ -73,6 +68,7 @@ public class AccountApplication : IAccountApplication
_fileUploader = fileUploader; _fileUploader = fileUploader;
_passwordHasher = passwordHasher; _passwordHasher = passwordHasher;
_accountRepository = accountRepository; _accountRepository = accountRepository;
} }
public OperationResult EditClient(EditClientAccount command) public OperationResult EditClient(EditClientAccount command)
@@ -93,8 +89,7 @@ public class AccountApplication : IAccountApplication
(x.Mobile == command.Mobile && x.id != command.Id))) (x.Mobile == command.Mobile && x.id != command.Id)))
return opreation.Failed("شماره موبایل تکراری است"); return opreation.Failed("شماره موبایل تکراری است");
if (_accountRepository.Exists(x => if (_accountRepository.Exists(x =>
(x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(x.NationalCode) && (x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(x.NationalCode) && x.id != command.Id)))
x.id != command.Id)))
return opreation.Failed("کد ملی تکراری است"); return opreation.Failed("کد ملی تکراری است");
if (_accountRepository.Exists(x => if (_accountRepository.Exists(x =>
(x.Email == command.Email && !string.IsNullOrWhiteSpace(x.Email) && x.id != command.Id))) (x.Email == command.Email && !string.IsNullOrWhiteSpace(x.Email) && x.id != command.Id)))
@@ -102,8 +97,7 @@ public class AccountApplication : IAccountApplication
var path = $"profilePhotos"; var path = $"profilePhotos";
var picturePath = _fileUploader.Upload(command.ProfilePhoto, path); var picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
editAccount.EditClient(command.Fullname, command.Username, command.Mobile, picturePath, command.Email, editAccount.EditClient(command.Fullname, command.Username, command.Mobile, picturePath, command.Email, command.NationalCode);
command.NationalCode);
_accountRepository.SaveChanges(); _accountRepository.SaveChanges();
return opreation.Succcedded(); return opreation.Succcedded();
} }
@@ -148,8 +142,8 @@ public class AccountApplication : IAccountApplication
if (_fileUploader != null) if (_fileUploader != null)
{ {
picturePath = _fileUploader.Upload(command.ProfilePhoto, path); picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
}
}
var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId, var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId,
picturePath, roleName.Name, "true", "false"); picturePath, roleName.Name, "true", "false");
@@ -164,8 +158,7 @@ public class AccountApplication : IAccountApplication
if (command.UserRoles == null) if (command.UserRoles == null)
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است"); return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList(); var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username, var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username, account.Password, command.Mobile,
account.Password, command.Mobile,
null, account.id, pmUserRoles)); null, account.id, pmUserRoles));
if (!createPm.isSuccess) if (!createPm.isSuccess)
{ {
@@ -174,6 +167,7 @@ public class AccountApplication : IAccountApplication
} }
//var url = "api/user/create"; //var url = "api/user/create";
//var key = SecretKeys.ProgramManagerInternalApi; //var key = SecretKeys.ProgramManagerInternalApi;
@@ -258,14 +252,14 @@ public class AccountApplication : IAccountApplication
// $"api/user/{account.id}", // $"api/user/{account.id}",
// key // key
//); //);
var userResult = await _pmUserQueryService.GetPmUserDataByAccountId(account.id); var userResult =await _pmUserQueryService.GetPmUserDataByAccountId(account.id);
if (command.UserRoles == null) if (command.UserRoles == null)
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است"); return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList(); var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
//اگر کاربر در پروگرام منیجر قبلا ایجاد شده //اگر کاربر در پروگرام منیجر قبلا ایجاد شده
if (userResult.Id > 0) if (userResult.Id >0)
{ {
if (!command.UserRoles.Any()) if (!command.UserRoles.Any())
{ {
@@ -273,8 +267,7 @@ public class AccountApplication : IAccountApplication
return operation.Failed("حداقل یک نقش باید انتخاب شود"); return operation.Failed("حداقل یک نقش باید انتخاب شود");
} }
var editPm = await _pmUserCommandService.Edit(new EditPmUserDto(command.Fullname, command.Username, var editPm =await _pmUserCommandService.Edit(new EditPmUserDto(command.Fullname, command.Username, command.Mobile, account.id, pmUserRoles,
command.Mobile, account.id, pmUserRoles,
command.IsProgramManagerUser)); command.IsProgramManagerUser));
if (!editPm.isSuccess) if (!editPm.isSuccess)
{ {
@@ -309,6 +302,7 @@ public class AccountApplication : IAccountApplication
// _unitOfWork.RollbackAccountContext(); // _unitOfWork.RollbackAccountContext();
// return operation.Failed(response.Error); // return operation.Failed(response.Error);
//} //}
} }
else //اگر کاربر قبلا ایجاد نشده else //اگر کاربر قبلا ایجاد نشده
{ {
@@ -322,8 +316,11 @@ public class AccountApplication : IAccountApplication
} }
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname,
command.Username, account.Password, command.Mobile,
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username, account.Password, command.Mobile,
null, account.id, pmUserRoles)); null, account.id, pmUserRoles));
if (!createPm.isSuccess) if (!createPm.isSuccess)
{ {
@@ -332,6 +329,7 @@ public class AccountApplication : IAccountApplication
} }
//var parameters = new CreateProgramManagerUser( //var parameters = new CreateProgramManagerUser(
// command.Fullname, // command.Fullname,
// command.Username, // command.Username,
@@ -364,6 +362,7 @@ public class AccountApplication : IAccountApplication
// return operation.Failed(response.Error); // return operation.Failed(response.Error);
//} //}
} }
} }
_unitOfWork.CommitAccountContext(); _unitOfWork.CommitAccountContext();
@@ -377,6 +376,7 @@ public class AccountApplication : IAccountApplication
public OperationResult Login(Login command) public OperationResult Login(Login command)
{ {
long idAutoriz = 0; long idAutoriz = 0;
var operation = new OperationResult(); var operation = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Password)) if (string.IsNullOrWhiteSpace(command.Password))
@@ -401,25 +401,19 @@ public class AccountApplication : IAccountApplication
.Select(x => x.Code) .Select(x => x.Code)
.ToList(); .ToList();
//PmPermission //PmPermission
var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id) var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id).GetAwaiter().GetResult();
.GetAwaiter().GetResult(); if (PmUserData.AccountId > 0 && PmUserData.IsActive)
long? pmUserId = null;
if (PmUserData != null)
{ {
if (PmUserData.AccountId > 0 && PmUserData.IsActive)
{
var pmUserPermissions =
PmUserData.RoleListDto != null
? PmUserData.RoleListDto
.SelectMany(x => x.Permissions)
.Where(p => p != 99)
.Distinct()
.ToList()
: new List<int>();
permissions.AddRange(pmUserPermissions);
}
pmUserId = PmUserData.Id > 0 ? PmUserData.Id : null; var pmUserPermissions =
PmUserData.RoleListDto != null
? PmUserData.RoleListDto
.SelectMany(x => x.Permissions)
.Where(p => p != 99)
.Distinct()
.ToList()
: new List<int>();
permissions.AddRange(pmUserPermissions);
} }
@@ -432,25 +426,24 @@ public class AccountApplication : IAccountApplication
{ {
positionValue = null; positionValue = null;
} }
var pmUserId = PmUserData.AccountId > 0 ? PmUserData.AccountId : null;
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
, account.Username, account.Mobile, account.ProfilePhoto, , account.Username, account.Mobile, account.ProfilePhoto,
permissions, account.RoleName, account.AdminAreaPermission, permissions, account.RoleName, account.AdminAreaPermission,
account.ClientAriaPermission, positionValue, 0, pmUserId); account.ClientAriaPermission, positionValue,0,pmUserId);
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
account.IsActiveString == "true") account.IsActiveString == "true")
{ {
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
authViewModel.Permissions = clientPermissions; authViewModel.Permissions = clientPermissions;
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
new WorkshopClaim {
{ PersonnelCount = x.PersonnelCount,
PersonnelCount = x.PersonnelCount, Id = x.Id,
Id = x.Id, Name = x.WorkshopFullName,
Name = x.WorkshopFullName, Slug = _passwordHasher.SlugHasher(x.Id)
Slug = _passwordHasher.SlugHasher(x.Id) }).OrderByDescending(x => x.PersonnelCount).ToList();
}).OrderByDescending(x => x.PersonnelCount).ToList();
authViewModel.WorkshopList = workshopList; authViewModel.WorkshopList = workshopList;
if (workshopList.Any()) if (workshopList.Any())
{ {
@@ -463,14 +456,10 @@ public class AccountApplication : IAccountApplication
_authHelper.Signin(authViewModel); _authHelper.Signin(authViewModel);
if ((account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" && if ((account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" && account.IsActiveString == "true") || (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false" && account.IsActiveString == "true"))
account.IsActiveString == "true") || (account.AdminAreaPermission == "true" &&
account.ClientAriaPermission == "false" &&
account.IsActiveString == "true"))
idAutoriz = 1; idAutoriz = 1;
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && account.IsActiveString == "true")
account.IsActiveString == "true")
idAutoriz = 2; idAutoriz = 2;
} }
@@ -482,8 +471,7 @@ public class AccountApplication : IAccountApplication
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting);
cameraAccount.IsActiveSting);
if (cameraAccount.IsActiveSting == "true") if (cameraAccount.IsActiveSting == "true")
{ {
_authHelper.CameraSignIn(authViewModel); _authHelper.CameraSignIn(authViewModel);
@@ -493,6 +481,7 @@ public class AccountApplication : IAccountApplication
{ {
idAutoriz = 0; idAutoriz = 0;
} }
} }
if (subAccount != null) if (subAccount != null)
@@ -522,14 +511,12 @@ public class AccountApplication : IAccountApplication
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId); authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId);
authViewModel.WorkshopId = workshop.WorkshopId; authViewModel.WorkshopId = workshop.WorkshopId;
} }
_authHelper.Signin(authViewModel); _authHelper.Signin(authViewModel);
idAutoriz = 2; idAutoriz = 2;
} }
return operation.Succcedded(idAutoriz); return operation.Succcedded(idAutoriz);
} }
public OperationResult LoginWithMobile(long id) public OperationResult LoginWithMobile(long id)
{ {
var operation = new OperationResult(); var operation = new OperationResult();
@@ -538,6 +525,7 @@ public class AccountApplication : IAccountApplication
return operation.Failed(ApplicationMessages.WrongUserPass); return operation.Failed(ApplicationMessages.WrongUserPass);
var permissions = _roleRepository.Get(account.RoleId) var permissions = _roleRepository.Get(account.RoleId)
.Permissions .Permissions
.Select(x => x.Code) .Select(x => x.Code)
@@ -553,22 +541,20 @@ public class AccountApplication : IAccountApplication
} }
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, , account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, account.AdminAreaPermission, account.ClientAriaPermission, positionValue);
account.AdminAreaPermission, account.ClientAriaPermission, positionValue);
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
account.IsActiveString == "true") account.IsActiveString == "true")
{ {
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes(); var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
authViewModel.Permissions = clientPermissions; authViewModel.Permissions = clientPermissions;
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
new WorkshopClaim {
{ PersonnelCount = x.PersonnelCount,
PersonnelCount = x.PersonnelCount, Id = x.Id,
Id = x.Id, Name = x.WorkshopFullName,
Name = x.WorkshopFullName, Slug = _passwordHasher.SlugHasher(x.Id)
Slug = _passwordHasher.SlugHasher(x.Id) }).OrderByDescending(x => x.PersonnelCount).ToList();
}).OrderByDescending(x => x.PersonnelCount).ToList();
authViewModel.WorkshopList = workshopList; authViewModel.WorkshopList = workshopList;
if (workshopList.Any()) if (workshopList.Any())
{ {
@@ -581,15 +567,13 @@ public class AccountApplication : IAccountApplication
_authHelper.Signin(authViewModel); _authHelper.Signin(authViewModel);
long idAutoriz = 0; long idAutoriz = 0;
if (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" || if (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" || account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false")
account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false")
idAutoriz = 1; idAutoriz = 1;
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false") if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false")
idAutoriz = 2; idAutoriz = 2;
return operation.Succcedded(idAutoriz); return operation.Succcedded(idAutoriz);
} }
public void Logout() public void Logout()
{ {
_authHelper.SignOut(); _authHelper.SignOut();
@@ -625,7 +609,6 @@ public class AccountApplication : IAccountApplication
_accountRepository.SaveChanges(); _accountRepository.SaveChanges();
return operation.Succcedded(); return operation.Succcedded();
} }
public EditAccount GetByVerifyCode(string code, string phone) public EditAccount GetByVerifyCode(string code, string phone)
{ {
return _accountRepository.GetByVerifyCode(code, phone); return _accountRepository.GetByVerifyCode(code, phone);
@@ -654,6 +637,7 @@ public class AccountApplication : IAccountApplication
await _accountRepository.RemoveCode(id); await _accountRepository.RemoveCode(id);
return operation.Succcedded(); return operation.Succcedded();
} }
@@ -698,6 +682,7 @@ public class AccountApplication : IAccountApplication
return operation.Failed("این اکانت وجود ندارد"); return operation.Failed("این اکانت وجود ندارد");
var permissions = _roleRepository.Get(account.RoleId) var permissions = _roleRepository.Get(account.RoleId)
.Permissions .Permissions
.Select(x => x.Code) .Select(x => x.Code)
@@ -706,8 +691,7 @@ public class AccountApplication : IAccountApplication
_authHelper.SignOut(); _authHelper.SignOut();
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true", , account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true", null);
null);
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
{ {
PersonnelCount = x.PersonnelCount, PersonnelCount = x.PersonnelCount,
@@ -727,11 +711,9 @@ public class AccountApplication : IAccountApplication
authViewModel.WorkshopName = workshop.Name; authViewModel.WorkshopName = workshop.Name;
authViewModel.WorkshopId = workshop.Id; authViewModel.WorkshopId = workshop.Id;
} }
_authHelper.Signin(authViewModel); _authHelper.Signin(authViewModel);
return operation.Succcedded(2); return operation.Succcedded(2);
} }
public OperationResult DirectCameraLogin(long cameraAccountId) public OperationResult DirectCameraLogin(long cameraAccountId)
{ {
var prAcc = _authHelper.CurrentAccountInfo(); var prAcc = _authHelper.CurrentAccountInfo();
@@ -741,45 +723,47 @@ public class AccountApplication : IAccountApplication
return operation.Failed("این اکانت وجود ندارد"); return operation.Failed("این اکانت وجود ندارد");
_authHelper.SignOut(); _authHelper.SignOut();
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile; var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId, var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting);
cameraAccount.IsActiveSting);
if (cameraAccount.IsActiveSting == "true") if (cameraAccount.IsActiveSting == "true")
{ {
_authHelper.CameraSignIn(authViewModel); _authHelper.CameraSignIn(authViewModel);
} }
else else
{ {
return operation.Failed("این اکانت غیر فعال شده است"); return operation.Failed("این اکانت غیر فعال شده است");
} }
return operation.Succcedded(2); return operation.Succcedded(2);
} }
// public AccountLeftWorkViewModel WorkshopList(long accountId) public AccountLeftWorkViewModel WorkshopList(long accountId)
// { {
// string fullname = this._accountRepository.GetById(accountId).Fullname; string fullname = this._accountRepository.GetById(accountId).Fullname;
// List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId); List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
// List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList(); List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
// List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops(); List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
// List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList(); List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
// (string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId); (string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
// return new AccountLeftWorkViewModel() return new AccountLeftWorkViewModel()
// { {
// AccountId = accountId, AccountId = accountId,
// AccountFullName = fullname, AccountFullName = fullname,
// StartDateFa = byAccountId.StartWorkFa, StartDateFa = byAccountId.StartWorkFa,
// LeftDateFa = byAccountId.LeftWorkFa, LeftDateFa = byAccountId.LeftWorkFa,
// WorkshopAccountlist = source, WorkshopAccountlist = source,
// WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"), WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
// AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname") AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
// }; };
// } }
public OperationResult SaveWorkshopAccount( public OperationResult SaveWorkshopAccount(
List<WorkshopAccountlistViewModel> workshopAccountList, List<WorkshopAccountlistViewModel> workshopAccountList,
@@ -789,12 +773,10 @@ public class AccountApplication : IAccountApplication
{ {
return this._accountLeftworkRepository.SaveWorkshopAccount(workshopAccountList, startDate, leftDate, accountId); return this._accountLeftworkRepository.SaveWorkshopAccount(workshopAccountList, startDate, leftDate, accountId);
} }
public OperationResult CreateNewWorkshopAccount(long currentAccountId, long newAccountId) public OperationResult CreateNewWorkshopAccount(long currentAccountId, long newAccountId)
{ {
return this._accountLeftworkRepository.CopyWorkshopToNewAccount(currentAccountId, newAccountId); return this._accountLeftworkRepository.CopyWorkshopToNewAccount(currentAccountId, newAccountId);
} }
#region Mahan #region Mahan
public List<AccountViewModel> AccountsForAssign(long taskId) public List<AccountViewModel> AccountsForAssign(long taskId)
@@ -808,7 +790,6 @@ public class AccountApplication : IAccountApplication
{ {
return new List<AccountViewModel>(); return new List<AccountViewModel>();
} }
return _accountRepository.GetAccountsByPositionId(positionId); return _accountRepository.GetAccountsByPositionId(positionId);
} }
@@ -826,6 +807,7 @@ public class AccountApplication : IAccountApplication
return operation.Failed("این اکانت وجود ندارد"); return operation.Failed("این اکانت وجود ندارد");
var permissions = _roleRepository.Get(account.RoleId) var permissions = _roleRepository.Get(account.RoleId)
.Permissions .Permissions
.Select(x => x.Code) .Select(x => x.Code)
@@ -834,10 +816,10 @@ public class AccountApplication : IAccountApplication
_authHelper.SignOut(); _authHelper.SignOut();
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, , account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, account.AdminAreaPermission, account.ClientAriaPermission, account.Position.PositionValue);
account.AdminAreaPermission, account.ClientAriaPermission, account.Position.PositionValue);
_authHelper.Signin(authViewModel); _authHelper.Signin(authViewModel);
return operation.Succcedded(2); return operation.Succcedded(2);
} }
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList() public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
@@ -846,11 +828,8 @@ public class AccountApplication : IAccountApplication
} }
#endregion #endregion
#region Pooya #region Pooya
public OperationResult IsPhoneNumberAndPasswordValid(long accountId, string phoneNumber, string password, string rePassword)
public OperationResult IsPhoneNumberAndPasswordValid(long accountId, string phoneNumber, string password,
string rePassword)
{ {
OperationResult op = new(); OperationResult op = new();
@@ -868,8 +847,7 @@ public class AccountApplication : IAccountApplication
return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد"); return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد");
} }
if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) && if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) && string.IsNullOrWhiteSpace(rePassword))
string.IsNullOrWhiteSpace(rePassword))
return op.Failed("چیزی برای تغییر وجود ندارد"); return op.Failed("چیزی برای تغییر وجود ندارد");
@@ -895,22 +873,20 @@ public class AccountApplication : IAccountApplication
var entity = _accountRepository.Get(command.AccountId); var entity = _accountRepository.Get(command.AccountId);
if (entity == null) if (entity == null)
return op.Failed(ApplicationMessages.RecordNotFound); return op.Failed(ApplicationMessages.RecordNotFound);
var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password, var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password, command.RePassword);
command.RePassword);
if (validationResult.IsSuccedded == false) if (validationResult.IsSuccedded == false)
return validationResult; return validationResult;
if (!string.IsNullOrWhiteSpace(command.RePassword)) if (!string.IsNullOrWhiteSpace(command.RePassword))
{ {
entity.ChangePassword(_passwordHasher.Hash(command.Password)); entity.ChangePassword(_passwordHasher.Hash(command.Password));
} }
if (!string.IsNullOrWhiteSpace(command.PhoneNumber)) if (!string.IsNullOrWhiteSpace(command.PhoneNumber))
{ {
entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto, entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto, entity.RoleName);
entity.RoleName);
} }
_accountRepository.SaveChanges(); _accountRepository.SaveChanges();
return op.Succcedded(); return op.Succcedded();
} }
@@ -1006,7 +982,6 @@ public class AccountApplication : IAccountApplication
// return claimsResponse.Failed(ApplicationMessages.WrongUserPass); // return claimsResponse.Failed(ApplicationMessages.WrongUserPass);
//} //}
#endregion #endregion

View File

@@ -10,7 +10,7 @@ public interface IAccountLeftworkRepository : IRepository<long, AccountLeftWork>
{ {
(string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId); (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId);
List<WorkshopAccountlistViewModel> WorkshopList(long accountId); List<WorkshopAccountlistViewModel> WorkshopList(long accountId);
// List<WorkshopSelectList> GetAllWorkshops(); List<WorkshopSelectList> GetAllWorkshops();
OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId); OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId);

View File

@@ -18,13 +18,14 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
{ {
private readonly AccountContext _accountContext; private readonly AccountContext _accountContext;
private readonly IWorkshopAccountRepository _workshopAccountRepository; private readonly IWorkshopAccountRepository _workshopAccountRepository;
private readonly IWorkshopApplication _workshopApplication;
public AccountLeftworkRepository(AccountContext accountContext, public AccountLeftworkRepository(AccountContext accountContext, IWorkshopAccountRepository workshopAccountRepository, IWorkshopApplication workshopApplication) : base(accountContext)
IWorkshopAccountRepository workshopAccountRepository) : base(accountContext)
{ {
_accountContext = accountContext; _accountContext = accountContext;
_workshopAccountRepository = workshopAccountRepository; _workshopAccountRepository = workshopAccountRepository;
} _workshopApplication = workshopApplication;
}
public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId) public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId)
{ {
@@ -57,14 +58,14 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
}).ToList(); }).ToList();
} }
// public List<WorkshopSelectList> GetAllWorkshops() public List<WorkshopSelectList> GetAllWorkshops()
// { {
// return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList() return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
// { {
// Id = x.Id, Id = x.Id,
// WorkshopFullName = x.WorkshopFullName WorkshopFullName = x.WorkshopFullName
// }).ToList(); }).ToList();
// } }
public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId) public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId)
{ {

View File

@@ -1,6 +1,5 @@
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Application.Sms; using _0_Framework.Application.Sms;
using Company.Domain.ContarctingPartyAgg; using Company.Domain.ContarctingPartyAgg;
using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractAgg;
@@ -13,21 +12,19 @@ public class JobSchedulerRegistrator
private readonly IBackgroundJobClient _backgroundJobClient; private readonly IBackgroundJobClient _backgroundJobClient;
private readonly SmsReminder _smsReminder; private readonly SmsReminder _smsReminder;
private readonly IInstitutionContractRepository _institutionContractRepository; private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
private static DateTime? _lastRunCreateTransaction; private static DateTime? _lastRunCreateTransaction;
private static DateTime? _lastRunSendMonthlySms; private static DateTime? _lastRunSendMonthlySms;
private readonly ISmsService _smsService; private readonly ISmsService _smsService;
private readonly ILogger<JobSchedulerRegistrator> _logger; private readonly ILogger<JobSchedulerRegistrator> _logger;
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository) public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger)
{ {
_smsReminder = smsReminder; _smsReminder = smsReminder;
_backgroundJobClient = backgroundJobClient; _backgroundJobClient = backgroundJobClient;
_institutionContractRepository = institutionContractRepository; _institutionContractRepository = institutionContractRepository;
_smsService = smsService; _smsService = smsService;
_logger = logger; _logger = logger;
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
} }
public void Register() public void Register()
@@ -60,44 +57,6 @@ public class JobSchedulerRegistrator
() => SendInstitutionContractConfirmSms(), () => SendInstitutionContractConfirmSms(),
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن "*/1 * * * *" // هر 1 دقیقه یکبار چک کن
); );
RecurringJob.AddOrUpdate(
"InstitutionContract.SendWarningSms",
() => SendWarningSms(),
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
);
RecurringJob.AddOrUpdate(
"InstitutionContract.SendLegalActionSms",
() => SendLegalActionSms(),
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
);
RecurringJob.AddOrUpdate(
"InstitutionContract.Block",
() => Block(),
"*/30 * * * *" // هر 30 دقیقه یکبار چک کن
);
RecurringJob.AddOrUpdate(
"InstitutionContract.UnBlock",
() => UnBlock(),
"*/10 * * * *"
);
RecurringJob.AddOrUpdate(
"InstitutionContract.DeActiveInstitutionEndOfContract",
() => DeActiveInstitutionEndOfContract(),
"*/30 * * * *"
);
RecurringJob.AddOrUpdate(
"InstitutionContract.BlueDeActiveAfterZeroDebt",
() => BlueDeActiveAfterZeroDebt(),
"*/10 * * * *"
);
} }
@@ -108,7 +67,7 @@ public class JobSchedulerRegistrator
[DisableConcurrentExecution(timeoutInSeconds: 1200)] [DisableConcurrentExecution(timeoutInSeconds: 1200)]
public async System.Threading.Tasks.Task CreateFinancialTransaction() public async System.Threading.Tasks.Task CreateFinancialTransaction()
{ {
var now = DateTime.Now; var now =DateTime.Now;
var endOfMonth = now.ToFarsi().FindeEndOfMonth(); var endOfMonth = now.ToFarsi().FindeEndOfMonth();
var endOfMonthGr = endOfMonth.ToGeorgianDateTime(); var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
_logger.LogInformation("CreateFinancialTransaction job run"); _logger.LogInformation("CreateFinancialTransaction job run");
@@ -130,7 +89,7 @@ public class JobSchedulerRegistrator
try try
{ {
await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description); await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
_lastRunCreateTransaction = now; _lastRunCreateTransaction = now;
Console.WriteLine("CreateTransAction executed"); Console.WriteLine("CreateTransAction executed");
@@ -163,7 +122,7 @@ public class JobSchedulerRegistrator
try try
{ {
await _institutionContractSmsServiceRepository.SendMonthlySms(now); await _institutionContractRepository.SendMonthlySms(now);
_lastRunSendMonthlySms = now; _lastRunSendMonthlySms = now;
Console.WriteLine("Send Monthly sms executed"); Console.WriteLine("Send Monthly sms executed");
@@ -185,7 +144,7 @@ public class JobSchedulerRegistrator
public async System.Threading.Tasks.Task SendReminderSms() public async System.Threading.Tasks.Task SendReminderSms()
{ {
_logger.LogInformation("SendReminderSms job run"); _logger.LogInformation("SendReminderSms job run");
await _institutionContractSmsServiceRepository.SendReminderSmsForBackgroundTask(); await _institutionContractRepository.SendReminderSmsForBackgroundTask();
} }
/// <summary> /// <summary>
@@ -196,7 +155,7 @@ public class JobSchedulerRegistrator
public async System.Threading.Tasks.Task SendBlockSms() public async System.Threading.Tasks.Task SendBlockSms()
{ {
_logger.LogInformation("SendBlockSms job run"); _logger.LogInformation("SendBlockSms job run");
await _institutionContractSmsServiceRepository.SendBlockSmsForBackgroundTask(); await _institutionContractRepository.SendBlockSmsForBackgroundTask();
} }
@@ -208,97 +167,7 @@ public class JobSchedulerRegistrator
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms() public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
{ {
_logger.LogInformation("SendInstitutionContractConfirmSms job run"); _logger.LogInformation("SendInstitutionContractConfirmSms job run");
await _institutionContractSmsServiceRepository.SendInstitutionContractConfirmSmsTask(); await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
}
/// <summary>
/// ارسال پیامک هشدار
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task SendWarningSms()
{
_logger.LogInformation("SendWarningSms job run");
await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.Warning);
}
/// <summary>
/// پیامک اقدام قضایی
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task SendLegalActionSms()
{
_logger.LogInformation("SendWarningSms job run");
await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.LegalAction);
}
/// <summary>
/// بلاگ سازی
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task Block()
{
_logger.LogInformation("block job run");
var now = DateTime.Now;
var executeDate = now.ToFarsi().Substring(8, 2);
if (executeDate == "20")
{
if (now.Hour >= 9 && now.Hour < 10)
{
await _institutionContractSmsServiceRepository.Block(now);
}
}
}
/// <summary>
/// آنبلاک
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task UnBlock()
{
_logger.LogInformation("UnBlock job run");
await _institutionContractSmsServiceRepository.UnBlock();
}
/// <summary>
/// غیر فعال سازی قراداد های پایان یافته
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task DeActiveInstitutionEndOfContract()
{
_logger.LogInformation("DeActiveInstitutionEndOfContract job run");
var now = DateTime.Now;
var executeDate = now.ToFarsi().Substring(8, 2);
if (executeDate == "01")
{
if (now.Hour >= 9 && now.Hour < 10)
{
await _institutionContractSmsServiceRepository.DeActiveInstitutionEndOfContract(now);
}
}
}
/// <summary>
/// غیرفعال سازس قرارداد های آبی که بدهی ندارند
/// </summary>
/// <returns></returns>
[DisableConcurrentExecution(timeoutInSeconds: 800)]
public async System.Threading.Tasks.Task BlueDeActiveAfterZeroDebt()
{
_logger.LogInformation("BlueDeActiveAfterZeroDebt job run");
await _institutionContractSmsServiceRepository.BlueDeActiveAfterZeroDebt();
} }
} }

View File

@@ -80,6 +80,4 @@ public interface ICheckoutRepository : IRepository<long, Checkout>
#endregion #endregion
Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate); Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
Task<PagedResult<CheckoutListClientDto>> GetListForClient(long workshopId,
CheckoutListClientSearchModel searchModel);
} }

View File

@@ -1,5 +1,4 @@
using System; using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using System.Collections.Generic; using System.Collections.Generic;
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Domain; using _0_Framework.Domain;
@@ -33,9 +32,7 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
List<PersonalContractingPartyViewModel> SearchForMain(PersonalContractingPartySearchModel searchModel2); List<PersonalContractingPartyViewModel> SearchForMain(PersonalContractingPartySearchModel searchModel2);
OperationResult DeletePersonalContractingParties(long id); OperationResult DeletePersonalContractingParties(long id);
bool GetHasContract(long id); bool GetHasContract(long id);
[Obsolete("از متدهای async استفاده کنید")]
OperationResult DeActiveAll(long id); OperationResult DeActiveAll(long id);
[Obsolete("از متدهای async استفاده کنید")]
OperationResult ActiveAll(long id); OperationResult ActiveAll(long id);
#endregion #endregion
@@ -79,9 +76,4 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
Task<PersonalContractingParty> GetByNationalCode(string nationalCode); Task<PersonalContractingParty> GetByNationalCode(string nationalCode);
Task<PersonalContractingParty> GetByNationalId(string registerId); Task<PersonalContractingParty> GetByNationalId(string registerId);
Task<OperationResult> DeActiveAllAsync(long id);
Task<OperationResult> ActiveAllAsync(long id);
} }

View File

@@ -48,10 +48,6 @@ public interface IContractRepository : IRepository<long, Contract>
bool Remove(long id); bool Remove(long id);
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel); List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
#endregion #endregion
#region NewChangeByHeydari #region NewChangeByHeydari
@@ -67,8 +63,4 @@ public interface IContractRepository : IRepository<long, Contract>
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth); ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd); List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
#endregion #endregion
} }

View File

@@ -54,6 +54,7 @@ public interface IEmployeeRepository : IRepository<long, Employee>
Employee GetIgnoreQueryFilter(long id); Employee GetIgnoreQueryFilter(long id);
[Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")]
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId); Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
@@ -77,7 +78,32 @@ public interface IEmployeeRepository : IRepository<long, Employee>
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id); Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel); Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId); Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
#endregion
/// <summary>
/// دریافت لیست پرسنل کلاینت
/// api
/// </summary>
/// <param name="searchModel"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId);
/// <summary>
/// پرینت تجمیعی پرسنل کلاینت
/// api
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId);
/// <summary>
/// سلکت لیست پرسنل های کارگاه کلاینت
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
#endregion
} }

View File

@@ -10,6 +10,4 @@ public interface IFinancialInvoiceRepository : IRepository<long, FinancialInvoic
EditFinancialInvoice GetDetails(long id); EditFinancialInvoice GetDetails(long id);
List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel); List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel);
Task<FinancialInvoice> GetUnPaidByEntityId(long entityId, FinancialInvoiceItemType financialInvoiceItemType); Task<FinancialInvoice> GetUnPaidByEntityId(long entityId, FinancialInvoiceItemType financialInvoiceItemType);
Task<FinancialInvoice> GetUnPaidFinancialInvoiceByContractingPartyIdAndAmount(long contractingPartyId,
double amount);
} }

View File

@@ -56,13 +56,9 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
void UpdateStatusIfNeeded(long institutionContractId); void UpdateStatusIfNeeded(long institutionContractId);
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id); Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
Task<InstitutionContract> GetByPublicIdAsync(Guid id); Task<InstitutionContract> GetByPublicIdAsync(Guid id);
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request, string contractStart = null); InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request,string contractStart = null);
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request); InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
#region Creation
#endregion
#region Extension #region Extension
@@ -80,18 +76,76 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
#region Upgrade(Amendment) #region Upgrade(Amendment)
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId); Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request); Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
Task RemoveAmendmentWorkshops(Guid workshopTempId); Task RemoveAmendmentWorkshops(Guid workshopTempId);
#endregion #endregion
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected); Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids); Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids);
#region ReminderSMS
/// <summary>
/// دریافت لیست - ارسال پیامک
/// فراخوانی از سمت بک گراند سرویس
/// </summary>
/// <returns></returns>
Task<bool> SendReminderSmsForBackgroundTask();
/// <summary>
/// ارسال پیامک صورت حساب ماهانه
/// </summary>
/// <param name="now"></param>
/// <returns></returns>
Task SendMonthlySms(DateTime now);
/// <summary>
/// ارسال پیامک مسدودی از طرف بک گراند سرویس
/// </summary>
/// <returns></returns>
Task SendBlockSmsForBackgroundTask();
/// <summary>
/// دریافت لیست واجد شرایط بلاک
/// جهت ارسال پیامک مسدودی
/// </summary>
/// <param name="checkDate"></param>
/// <returns></returns>
Task<List<BlockSmsListData>> GetBlockListData(DateTime checkDate);
/// <summary>
/// ارسال پیامک مسدودی
/// </summary>
/// <param name="smsListData"></param>
/// <param name="typeOfSms"></param>
/// <param name="sendMessStart"></param>
/// <param name="sendMessEnd"></param>
/// <returns></returns>
Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
string sendMessStart, string sendMessEnd);
/// <summary>
///دریافت لیست بدهکارن
/// جهت ارسال پیامک
/// </summary>
/// <returns></returns>
Task<List<SmsListData>> GetSmsListData(DateTime checkDate, TypeOfSmsSetting typeOfSmsSetting);
/// <summary>
/// ارسال پیامک های یاد آور بدهی
/// </summary>
/// <returns></returns>
Task SendReminderSmsToContractingParties(List<SmsListData> smsListData, string typeOfSms, string sendMessStart, string sendMessEnd);
/// <summary>
/// ارسال پیامک یادآور تایید قراداد مالی
/// </summary>
/// <returns></returns>
Task SendInstitutionContractConfirmSmsTask();
#endregion
#region CreateMontlyTransaction #region CreateMontlyTransaction
@@ -104,21 +158,6 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
#endregion #endregion
Task<long> GetIdByInstallmentId(long installmentId); Task<long> GetIdByInstallmentId(long installmentId);
Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId); Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId);
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request);
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
Task<InstitutionContract> GetIncludeInstallments(long id);
} }

View File

@@ -1,145 +0,0 @@
using _0_Framework.Application.Enums;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.InstitutionContract;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Company.Domain.InstitutionContractAgg;
public interface IInstitutionContractSmsServiceRepository : IRepository<long, InstitutionContract>
{
#region reminderSMs
/// <summary>
/// ارسال پیامک یادآور تایید قراداد مالی
/// </summary>
/// <returns></returns>
Task SendInstitutionContractConfirmSmsTask();
#endregion
//هشدار و اقدام قضایی
#region WarningOrLegalActionSmsListData
/// <summary>
/// اجرای تسک پیامک هشدار یا اقدام قضایی
/// </summary>
/// <param name="typeOfSmsSetting"></param>
/// <returns></returns>
Task SendWarningOrLegalActionSmsTask(TypeOfSmsSetting typeOfSmsSetting);
/// <summary>
/// دریافت لیست بدهکاران آبی جهت هشدار یا اقدام قضایی
/// </summary>
/// <param name="typeOfSmsSetting"></param>
/// <returns></returns>
Task<List<SmsListData>> GetWarningOrLegalActionSmsListData(TypeOfSmsSetting typeOfSmsSetting);
/// <summary>
/// ارسال پیامک هشدار یا اقدام قضایی
/// </summary>
/// <param name="smsListData"></param>
/// <param name="typeOfSmsSetting"></param>
/// <returns></returns>
Task SendWarningOrLegalActionSms(List<SmsListData> smsListData, TypeOfSmsSetting typeOfSmsSetting);
#endregion
//بلاک - آنبلاک - پیامک بلاک -
// غیر فعال سازی قراداد های پایان یافته
#region Block
/// <summary>
/// ارسال پیامک مسدودی از طرف بک گراند سرویس
/// </summary>
/// <returns></returns>
Task SendBlockSmsForBackgroundTask();
/// <summary>
/// دریافت لیست واجد شرایط بلاک
/// جهت ارسال پیامک مسدودی
/// </summary>
/// <param name="checkDate"></param>
/// <returns></returns>
Task<List<BlockSmsListData>> GetBlockListData(DateTime checkDate);
/// <summary>
/// ارسال پیامک مسدودی
/// </summary>
/// <param name="smsListData"></param>
/// <param name="typeOfSms"></param>
/// <param name="sendMessStart"></param>
/// <param name="sendMessEnd"></param>
/// <returns></returns>
Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
string sendMessStart, string sendMessEnd);
/// <summary>
/// بلاک سازی
/// </summary>
/// <param name="checkDate"></param>
/// <returns></returns>
Task Block(DateTime checkDate);
/// <summary>
/// دریافت لیست بدهکارانی که باید بلاک شوند
/// </summary>
/// <param name="checkDate"></param>
/// <returns></returns>
Task<List<long>> GetToBeBlockList(DateTime checkDate);
/// <summary>
/// آنبلاک
/// </summary>
/// <returns></returns>
Task UnBlock();
/// <summary>
/// غیر فعالسازی قرارداد های پایان یافته
/// </summary>
/// <param name="checkDate"></param>
/// <returns></returns>
Task DeActiveInstitutionEndOfContract(DateTime checkDate);
/// <summary>
/// غیرفعال سازس قرارداد های آبی که بدهی ندارند
/// </summary>
/// <returns></returns>
Task BlueDeActiveAfterZeroDebt();
#endregion
#region ReminderSMS
/// <summary>
/// دریافت لیست - ارسال پیامک
/// فراخوانی از سمت بک گراند سرویس
/// </summary>
/// <returns></returns>
Task<bool> SendReminderSmsForBackgroundTask();
/// <summary>
/// ارسال پیامک صورت حساب ماهانه
/// </summary>
/// <param name="now"></param>
/// <returns></returns>
Task SendMonthlySms(DateTime now);
/// <summary>
///دریافت لیست بدهکارن
/// جهت ارسال پیامک
/// </summary>
/// <returns></returns>
Task<List<SmsListData>> GetSmsListData(DateTime checkDate, TypeOfSmsSetting typeOfSmsSetting);
/// <summary>
/// ارسال پیامک های یاد آور بدهی
/// </summary>
/// <returns></returns>
Task SendReminderSmsToContractingParties(List<SmsListData> smsListData, string typeOfSms, string sendMessStart, string sendMessEnd);
#endregion
}

View File

@@ -23,8 +23,6 @@ public class InstitutionContractWorkshopGroup : EntityBase
!InitialWorkshops.Cast<InstitutionContractWorkshopBase>() !InitialWorkshops.Cast<InstitutionContractWorkshopBase>()
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>()); .SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
public bool IsInPersonContract => InitialWorkshops.Any(x => x.Services.ContractInPerson);
public InstitutionContractWorkshopGroup(long institutionContractId, public InstitutionContractWorkshopGroup(long institutionContractId,
List<InstitutionContractWorkshopInitial> initialDetails) List<InstitutionContractWorkshopInitial> initialDetails)
{ {

View File

@@ -1,340 +0,0 @@
using System;
using System.Collections.Generic;
using _0_Framework.Application;
using _0_Framework.Application.Enums;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace Company.Domain.InstitutionContractCreationTempAgg;
public class InstitutionContractCreationTemp
{
public InstitutionContractCreationTemp()
{
Id = Guid.NewGuid();
}
[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; }
/// <summary>
/// نوع حقوقی طرف قرارداد (حقیقی یا حقوقی)
/// </summary>
public LegalType ContractingPartyLegalType { get; set; }
/// <summary>
/// اطلاعات شخص حقیقی
/// </summary>
public InstitutionContractCreationTempRealParty RealParty { get; set; }
/// <summary>
/// اطلاعات شخص حقوقی
/// </summary>
public InstitutionContractCreationTempLegalParty LegalParty { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Province { get; set; }
public List<EditContactInfo> ContactInfos { get; set; }
public long RepresentativeId { get; set; }
public List<InstitutionContractCreationTempWorkshop> Workshops { get; set; }
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
public InstitutionContractCreationPlanDetail 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 SetContractingPartyInfo(LegalType legalType,
InstitutionContractCreationTempRealParty realParty,
InstitutionContractCreationTempLegalParty legalParty)
{
ContractingPartyLegalType = legalType;
RealParty = realParty;
LegalParty = legalParty;
}
public void SetWorkshopsAndPlanAmounts(List<InstitutionContractCreationTempWorkshop> workshops,
InstitutionContractCreationPlanDetail oneMonth,
InstitutionContractCreationPlanDetail threeMonth, InstitutionContractCreationPlanDetail sixMonth,
InstitutionContractCreationPlanDetail 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 void SetContractingPartyContactInfo(string address, string city, string province, List<EditContactInfo> requestContactInfos,long representativeId)
{
Address = address;
City = city;
Province = province;
ContactInfos = requestContactInfos;
RepresentativeId = representativeId;
}
}
public class InstitutionContractCreationTempLegalParty
{
/// <summary>
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
/// </summary>
public long Id { get; set; }
/// <summary>
/// نام شرکت
/// </summary>
public string CompanyName { get; set; }
/// <summary>
/// شماره ثبت
/// </summary>
public string RegisterId { get; set; }
/// <summary>
/// شناسه ملی شرکت
/// </summary>
public string NationalId { get; set; }
/// <summary>
/// شماره تلفن شرکت
/// </summary>
public string PhoneNumber { get; set; }
/// <summary>
/// شناسه موقت طرف قرارداد
/// </summary>
public long ContractingPartyTempId { get; set; }
/// <summary>
/// کد ملی نماینده قانونی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// تاریخ تولد نماینده قانونی فارسی
/// </summary>
public string BirthDateFa { get; set; }
/// <summary>
/// نام نماینده قانونی
/// </summary>
public string FName { get; set; }
/// <summary>
/// نام خانوادگی نماینده قانونی
/// </summary>
public string LName { get; set; }
/// <summary>
/// نام پدر نماینده قانونی
/// </summary>
public string FatherName { get; set; }
/// <summary>
/// شماره شناسنامه نماینده قانونی
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// وضعیت احراز هویت نماینده قانونی
/// </summary>
public bool IsAuth { get; set; }
/// <summary>
/// سمت نماینده قانونی در شرکت
/// </summary>
public string Position { get; set; }
/// <summary>
/// جنسیت نماینده قانونی
/// </summary>
public Gender Gender { get; set; }
public string IdNumberSeri { get; set; }
public string IdNumberSerial { get; set; }
}
public class InstitutionContractCreationTempRealParty
{
/// <summary>
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
/// </summary>
public long Id { get; set; }
/// <summary>
/// کد ملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// تاریخ تولد فارسی
/// </summary>
public string BirthDateFa { get; set; }
/// <summary>
/// شماره تلفن
/// </summary>
public string PhoneNumber { get; set; }
/// <summary>
/// وضعیت احراز هویت
/// </summary>
public bool IsAuth { get; set; }
/// <summary>
/// نام
/// </summary>
public string FName { get; set; }
/// <summary>
/// نام خانوادگی
/// </summary>
public string LName { get; set; }
/// <summary>
/// نام پدر
/// </summary>
public string FatherName { get; set; }
/// <summary>
/// شماره شناسنامه
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// شناسه موقت طرف قرارداد
/// </summary>
public long ContractingPartyTempId { get; set; }
/// <summary>
/// جنسیت
/// </summary>
public Gender Gender { get; set; }
public string IdNumberSeri { get; set; }
public string IdNumberSerial { get; set; }
}
public class InstitutionContractCreationTempPlan
{
public InstitutionContractCreationTempPlan(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 InstitutionContractCreationTempWorkshop
{
public InstitutionContractCreationTempWorkshop(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; }
/// <summary>
/// نام کارگاه
/// </summary>
public string WorkshopName { get; private set; }
/// <summary>
/// تعداد پرسنل
/// </summary>
public int CountPerson { get; private set; }
#region ServiceSelection
/// <summary>
/// قرارداد و تصفیه
/// </summary>
public bool ContractAndCheckout { get; private set; }
/// <summary>
/// بیمه
/// </summary>
public bool Insurance { get; private set; }
/// <summary>
/// حضورغباب
/// </summary>
public bool RollCall { get; private set; }
public bool RollCallInPerson { get; set; }
/// <summary>
/// فیش غیر رسمی
/// </summary>
public bool CustomizeCheckout { get;private set; }
/// <summary>
/// خدمات حضوری قرداد و تصفیه
/// </summary>
public bool ContractAndCheckoutInPerson { get; private set; }
/// <summary>
/// خدمات حضوری بیمه
/// </summary>
public bool InsuranceInPerson { get; private set; }
public double Price{ get; set; }
#endregion
}

View File

@@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Company.Domain.InstitutionContractSendFlagAgg;
/// <summary>
/// Interface برای Repository مربوط به فلگ ارسال قرارداد
/// </summary>
public interface IInstitutionContractSendFlagRepository
{
/// <summary>
/// ایجاد یک رکورد جدید برای فلگ ارسال قرارداد
/// </summary>
Task Create(InstitutionContractSendFlag flag);
/// <summary>
/// بازیابی فلگ بر اساس شناسه قرارداد
/// </summary>
Task<InstitutionContractSendFlag> GetByContractId(long contractId);
/// <summary>
/// به‌روزرسانی فلگ ارسال
/// </summary>
Task Update(InstitutionContractSendFlag flag);
/// <summary>
/// بررسی اینکه آیا قرارداد ارسال شده است
/// </summary>
Task<bool> IsContractSent(long contractId);
}

View File

@@ -1,82 +0,0 @@
using System;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace Company.Domain.InstitutionContractSendFlagAgg;
/// <summary>
/// نمایندگی فلگ ارسال قرارداد در MongoDB
/// این موجودیت برای ردیابی اینکه آیا قرارداد ارسال شده است استفاده می‌شود
/// </summary>
public class InstitutionContractSendFlag
{
public InstitutionContractSendFlag(long institutionContractId,bool isSent)
{
Id = Guid.NewGuid();
InstitutionContractId = institutionContractId;
IsSent = isSent;
CreatedDate = DateTime.Now;
}
/// <summary>
/// شناسه یکتای MongoDB
/// </summary>
[BsonId]
[BsonRepresentation(BsonType.String)]
public Guid Id { get; set; }
/// <summary>
/// شناسه قرارداد در SQL
/// </summary>
public long InstitutionContractId { get; set; }
/// <summary>
/// آیا قرارداد ارسال شده است
/// </summary>
public bool IsSent { get; set; }
/// <summary>
/// تاریخ و زمان ارسال
/// </summary>
public DateTime? SentDate { get; set; }
/// <summary>
/// تاریخ و زمان ایجاد رکورد
/// </summary>
public DateTime CreatedDate { get; set; }
/// <summary>
/// تاریخ و زمان آخرین به‌روزرسانی
/// </summary>
public DateTime? LastModifiedDate { get; set; }
/// <summary>
/// علامت‌گذاری قرارداد به عنوان ارسال‌شده
/// </summary>
public void MarkAsSent()
{
IsSent = true;
SentDate = DateTime.Now;
LastModifiedDate = DateTime.Now;
}
/// <summary>
/// بازگردانی علامت ارسال
/// </summary>
public void MarkAsNotSent()
{
IsSent = false;
SentDate = null;
LastModifiedDate = DateTime.Now;
}
/// <summary>
/// به‌روزرسانی علامت آخری اصلاح
/// </summary>
public void UpdateLastModified()
{
LastModifiedDate = DateTime.Now;
}
}

View File

@@ -78,7 +78,6 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
#endregion #endregion
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel); Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
} }

View File

@@ -1,30 +1,10 @@
using _0_Framework.Domain; using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.App.Contracts.SmsResult.Dto;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using _0_Framework.Domain;
namespace Company.Domain.SmsResultAgg; namespace Company.Domain.SmsResultAgg;
public interface ISmsResultRepository : IRepository<long, SmsResult> public interface ISmsResultRepository : IRepository<long, SmsResult>
{ {
#region ForApi
/// <summary>
/// دریافت لیست پیامکها
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel);
/// <summary>
/// دریافت اکسپند لیست هر تاریخ
/// </summary>
/// <param name="searchModel"></param>
/// <param name="date"></param>
/// <returns></returns>
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date);
#endregion
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel); List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
} }

View File

@@ -8,129 +8,86 @@ using System.Text.RegularExpressions;
namespace CompanyManagement.Infrastructure.Excel.InstitutionContract; namespace CompanyManagement.Infrastructure.Excel.InstitutionContract;
// Enum برای تعریف ستون‌های موجود
public enum ExcelColumnType
{
RowNumber, // ردیف
PhysicalContract, // قرارداد فیزیکی
ContractNo, // شماره قرارداد
Representative, // معرف
ContractingPartyName, // طرف حساب
ArchiveCode, // شماره کارفرما
EmployerName, // کارفرما
WorkshopName, // کارگاه‌ها (چندخطی)
WorkshopCount, // تعداد کارگاه
EmployeeCount, // مجموع پرسنل
ContractStartDate, // شروع قرارداد
ContractEndDate, // پایان قرارداد
InstallmentAmount, // مبلغ قسط
ContractAmount, // مبلغ قرارداد
FinancialStatus // وضعیت مالی
}
// کلاس کانفیگ برای تنظیم ستون‌های نمایشی
public class ExcelColumnConfig
{
public List<ExcelColumnType> VisibleColumns { get; set; }
public ExcelColumnConfig()
{
// فعلاً تمام ستون‌ها فعال هستند
VisibleColumns = new List<ExcelColumnType>
{
ExcelColumnType.PhysicalContract,
ExcelColumnType.ContractNo,
ExcelColumnType.Representative,
ExcelColumnType.ContractingPartyName,
ExcelColumnType.ArchiveCode,
ExcelColumnType.EmployerName,
ExcelColumnType.WorkshopName,
ExcelColumnType.WorkshopCount,
ExcelColumnType.EmployeeCount,
ExcelColumnType.ContractStartDate,
ExcelColumnType.ContractEndDate,
ExcelColumnType.InstallmentAmount,
ExcelColumnType.ContractAmount,
ExcelColumnType.FinancialStatus
};
}
}
public class InstitutionContractExcelGenerator public class InstitutionContractExcelGenerator
{ {
private static ExcelColumnConfig _columnConfig = new ExcelColumnConfig();
public static byte[] GenerateExcel(List<InstitutionContractExcelViewModel> contractViewModels) public static byte[] GenerateExcel(List<InstitutionContractViewModel> institutionContractViewModels)
{ {
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization"); ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
using var package = new ExcelPackage(); using var package = new ExcelPackage();
var allWorksheet = package.Workbook.Worksheets.Add("همه");
// ایجاد شیت برای هر تب با داده‌های مربوطه var blueWorksheet = package.Workbook.Worksheets.Add("آبی");
foreach (var viewModel in contractViewModels) blueWorksheet.TabColor = Color.LightBlue;
{
var worksheet = CreateWorksheet(package, viewModel.Tab); var grayWorksheet = package.Workbook.Worksheets.Add("خاکستری");
CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet); grayWorksheet.TabColor = Color.LightGray;
}
var redWorksheet = package.Workbook.Worksheets.Add("قرمز");
redWorksheet.TabColor = Color.LightCoral;
var purpleWorksheet = package.Workbook.Worksheets.Add("بنفش");
purpleWorksheet.TabColor = Color.MediumPurple;
var blackWorksheet = package.Workbook.Worksheets.Add("مشکی");
blackWorksheet.TabColor = Color.DimGray;
var yellowWorksheet = package.Workbook.Worksheets.Add("زرد");
yellowWorksheet.TabColor = Color.Yellow;
var whiteWorksheet = package.Workbook.Worksheets.Add("سفید");
whiteWorksheet.TabColor = Color.White;
CreateExcelSheet(institutionContractViewModels, allWorksheet);
var blueContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "blue").ToList();
CreateExcelSheet(blueContracts, blueWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(blueContracts).ToList();
var grayContracts = institutionContractViewModels.Where(x => x.IsContractingPartyBlock == "true").ToList();
CreateExcelSheet(grayContracts, grayWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(grayContracts).ToList();
var redContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "red").ToList();
CreateExcelSheet(redContracts, redWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(redContracts).ToList();
var purpleContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "purple").ToList();
CreateExcelSheet(purpleContracts, purpleWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(purpleContracts).ToList();
var blackContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "black").ToList();
CreateExcelSheet(blackContracts, blackWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList();
var yellowContracts = institutionContractViewModels
.Where(x => string.IsNullOrWhiteSpace(x.ExpireColor) && x.WorkshopCount == "0").ToList();
CreateExcelSheet(yellowContracts, yellowWorksheet);
institutionContractViewModels = institutionContractViewModels.Except(yellowContracts).ToList();
var otherContracts = institutionContractViewModels;
CreateExcelSheet(otherContracts, whiteWorksheet);
return package.GetAsByteArray(); return package.GetAsByteArray();
} }
/// <summary> private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet)
/// ایجاد شیت بر اساس نوع تب
/// </summary>
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
{ {
return status switch // Headers
{ worksheet.Cells[1, 1].Value = "شماره قرارداد";
InstitutionContractListStatus.DeactiveWithDebt => worksheet.Cells[1, 2].Value = "طرف حساب";
CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue), worksheet.Cells[1, 3].Value = "شماره کارفرما";
worksheet.Cells[1, 4].Value = "کارفرما ها";
worksheet.Cells[1, 5].Value = "کارگاه ها";
worksheet.Cells[1, 6].Value = "مجبوع پرسنل";
worksheet.Cells[1, 7].Value = "شروع قرارداد";
worksheet.Cells[1, 8].Value = "پایان قرارداد";
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)";
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
worksheet.Cells[1, 11].Value = "وضعیت مالی";
InstitutionContractListStatus.Deactive => using (var range = worksheet.Cells[1, 1, 1, 11])
CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
InstitutionContractListStatus.PendingForRenewal =>
CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
InstitutionContractListStatus.Free =>
CreateColoredWorksheet(package, "بنفش", Color.MediumPurple),
InstitutionContractListStatus.Block =>
CreateColoredWorksheet(package, "بلاک", Color.DimGray),
InstitutionContractListStatus.WithoutWorkshop =>
CreateColoredWorksheet(package, "بدون کارگاه", Color.Yellow),
InstitutionContractListStatus.Active =>
CreateColoredWorksheet(package, "فعال", Color.White),
InstitutionContractListStatus.PendingForVerify =>
CreateColoredWorksheet(package, "در انتظار تایید", Color.OrangeRed),
null => CreateColoredWorksheet(package, "کل قرارداد ها", Color.White),
_ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
};
}
/// <summary>
/// ایجاد شیت با رنگ تب
/// </summary>
private static ExcelWorksheet CreateColoredWorksheet(ExcelPackage package, string sheetName, Color tabColor)
{
var worksheet = package.Workbook.Worksheets.Add(sheetName);
worksheet.TabColor = tabColor;
return worksheet;
}
private static void CreateExcelSheet(List<GetInstitutionContractListItemsViewModel> contractItems, ExcelWorksheet worksheet)
{
// دریافت نقشه ستون‌های مرئی
var visibleColumnIndices = GetVisibleColumnIndices();
int columnCount = visibleColumnIndices.Count;
// تنظیم Headers
SetupHeaders(worksheet, visibleColumnIndices, columnCount);
using (var range = worksheet.Cells[1, 1, 1, columnCount])
{ {
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center; range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center; range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
@@ -153,35 +110,30 @@ public class InstitutionContractExcelGenerator
int row = 2; int row = 2;
for (int i = 0; i < contractItems.Count; i++) for (int i = 0; i < institutionContractViewModels.Count; i++)
{ {
var contract = contractItems[i]; var contract = institutionContractViewModels[i];
var employers = contract.EmployerNames?.ToList() ?? new(); var employers = contract.EmployerViewModels?.ToList() ?? new();
var workshops = contract.WorkshopNames?.ToList() ?? new(); var workshops = contract.WorkshopViewModels?.ToList() ?? new();
int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست int maxRows = Math.Max(employers.Count, workshops.Count);
maxRows = Math.Max(1, maxRows);
int startRow = row; int startRow = row;
int endRow = row + maxRows - 1; int endRow = row + maxRows - 1;
// 🎨 دریافت رنگ پس‌زمینه بر اساس وضعیت قرارداد // 🎨 دریافت رنگ پس‌زمینه از مقدار رنگ موجود در داده
var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount); string colorName = contract.ExpireColor.ToLower();
var fillColor = GetColorByName(colorName, contract.WorkshopCount, contract.IsContractingPartyBlock);
for (int j = 0; j < maxRows; j++) for (int j = 0; j < maxRows; j++)
{ {
int currentRow = row + j; int currentRow = row + j;
// پر کردن ستون‌های employer و workshop worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null;
var employerColIndex = GetColumnIndexForType(ExcelColumnType.EmployerName, visibleColumnIndices); worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null;
var workshopColIndex = GetColumnIndexForType(ExcelColumnType.WorkshopName, visibleColumnIndices);
if (employerColIndex > 0) for (int col = 1; col <= 11; col++)
worksheet.Cells[currentRow, employerColIndex].Value = j < employers.Count ? employers[j] : null;
if (workshopColIndex > 0)
worksheet.Cells[currentRow, workshopColIndex].Value = j < workshops.Count ? workshops[j] : null;
for (int col = 1; col <= columnCount; col++)
{ {
var cell = worksheet.Cells[currentRow, col]; var cell = worksheet.Cells[currentRow, col];
@@ -202,235 +154,109 @@ public class InstitutionContractExcelGenerator
} }
// 🧱 مرج و مقداردهی ستون‌های اصلی // 🧱 مرج و مقداردهی ستون‌های اصلی
FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices); worksheet.Cells[startRow, 1, endRow, 1].Merge = true;
worksheet.Cells[startRow, 1].Value = contract.ContractNo;
worksheet.Cells[startRow, 2, endRow, 2].Merge = true;
worksheet.Cells[startRow, 2].Value = contract.ContractingPartyName;
worksheet.Cells[startRow, 3, endRow, 3].Merge = true;
worksheet.Cells[startRow, 3].Value = contract.ArchiveCode;
worksheet.Cells[startRow, 6, endRow, 6].Merge = true;
worksheet.Cells[startRow, 6].Value = contract.EmployeeCount;
worksheet.Cells[startRow, 7, endRow, 7].Merge = true;
worksheet.Cells[startRow, 7].Value = contract.ContractStartFa;
worksheet.Cells[startRow, 8, endRow, 8].Merge = true;
worksheet.Cells[startRow, 8].Value = contract.ContractEndFa;
worksheet.Cells[startRow, 9, endRow, 9].Merge = true;
var contractWithoutWorkshopAmountCell = worksheet.Cells[startRow, 9];
contractWithoutWorkshopAmountCell.Value = contract.WorkshopCount == "0" ? MoneyToDouble(contract.ContractAmount) : "";
contractWithoutWorkshopAmountCell.Style.Numberformat.Format = "#,##0";
worksheet.Cells[startRow, 10, endRow, 10].Merge = true;
var contractAmountCell = worksheet.Cells[startRow, 10];
contractAmountCell.Value = contract.WorkshopCount != "0" ? MoneyToDouble(contract.ContractAmount) : "";
contractAmountCell.Style.Numberformat.Format = "#,##0";
worksheet.Cells[startRow, 11, endRow, 11].Merge = true;
var balance = MoneyToDouble(contract.BalanceStr);
var balanceCell = worksheet.Cells[startRow, 11];
balanceCell.Value = balance;
balanceCell.Style.Numberformat.Format = "#,##0";
if (balance > 0)
balanceCell.Style.Font.Color.SetColor(Color.Red);
else if (balance < 0)
balanceCell.Style.Font.Color.SetColor(Color.Green);
// 📦 بوردر ضخیم خارجی برای هر سطر // 📦 بوردر ضخیم خارجی برای هر سطر
var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount]; var boldRange = worksheet.Cells[startRow, 1, endRow, 11];
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium); boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
row += maxRows; row += maxRows;
} }
SetupPrintSettings(worksheet, visibleColumnIndices, columnCount);
}
/// <summary>
/// دریافت فهرست ستون‌های مرئی بر اساس کانفیگ
/// </summary>
private static List<ExcelColumnType> GetVisibleColumnIndices()
{
return _columnConfig.VisibleColumns;
}
/// <summary>
/// دریافت شماره ستون برای یک نوع ستون خاص
/// </summary>
private static int GetColumnIndexForType(ExcelColumnType columnType, List<ExcelColumnType> visibleColumns)
{
var index = visibleColumns.IndexOf(columnType);
return index >= 0 ? index + 1 : 0; // 1-based indexing
}
/// <summary>
/// دریافت متن header برای یک نوع ستون
/// </summary>
private static string GetColumnHeader(ExcelColumnType columnType)
{
return columnType switch
{
ExcelColumnType.RowNumber => "ردیف",
ExcelColumnType.PhysicalContract => "قرارداد فیزیکی",
ExcelColumnType.ContractNo => "شماره قرارداد",
ExcelColumnType.Representative => "معرف",
ExcelColumnType.ContractingPartyName => "طرف حساب",
ExcelColumnType.ArchiveCode => "شماره کارفرما",
ExcelColumnType.EmployerName => "کارفرما",
ExcelColumnType.WorkshopName => "کارگاه‌ها",
ExcelColumnType.WorkshopCount => "تعداد کارگاه",
ExcelColumnType.EmployeeCount => "مجموع پرسنل",
ExcelColumnType.ContractStartDate => "شروع قرارداد",
ExcelColumnType.ContractEndDate => "پایان قرارداد",
ExcelColumnType.InstallmentAmount => "مبلغ قسط",
ExcelColumnType.ContractAmount => "مبلغ قرارداد",
ExcelColumnType.FinancialStatus => "وضعیت مالی",
_ => ""
};
}
/// <summary>
/// تنظیم Headerهای ستون‌ها
/// </summary>
private static void SetupHeaders(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
{
for (int i = 0; i < visibleColumns.Count; i++)
{
worksheet.Cells[1, i + 1].Value = GetColumnHeader(visibleColumns[i]);
}
}
/// <summary>
/// پر کردن داده‌های ستون‌ها برای یک قرارداد
/// </summary>
private static void FillColumnData(ExcelWorksheet worksheet, GetInstitutionContractListItemsViewModel contract, int startRow, int endRow, List<ExcelColumnType> visibleColumns)
{
for (int i = 0; i < visibleColumns.Count; i++)
{
int columnIndex = i + 1; // 1-based indexing
var columnType = visibleColumns[i];
// Merge cells for non-repeating columns
worksheet.Cells[startRow, columnIndex, endRow, columnIndex].Merge = true;
var cell = worksheet.Cells[startRow, columnIndex];
switch (columnType)
{
case ExcelColumnType.PhysicalContract:
var physicalText = contract.IsOldContract
? (contract.HasSigniture ? "موجود" : "ناموجود")
: (contract.IsInPersonContract ? "الکترونیکی حضوری" : "الکترونیکی غیر حضوری");
cell.Value = physicalText;
cell.Style.Font.Bold = true;
cell.Style.Font.Color.SetColor(physicalText switch
{
"موجود" => Color.Green,
"ناموجود" => Color.Red,
"الکترونیکی حضوری" => Color.Purple,
_ => Color.Blue
});
break;
case ExcelColumnType.ContractNo:
cell.Value = contract.ContractNo;
break;
case ExcelColumnType.Representative:
cell.Value = contract.RepresentativeName;
break;
case ExcelColumnType.ContractingPartyName:
cell.Value = contract.ContractingPartyName;
break;
case ExcelColumnType.ArchiveCode:
cell.Value = contract.ArchiveNo;
break;
case ExcelColumnType.EmployerName:
// این ستون چندخطی است و داخل loop پر می‌شود
break;
case ExcelColumnType.WorkshopName:
// این ستون چندخطی است و داخل loop پر می‌شود
break;
case ExcelColumnType.WorkshopCount:
cell.Value = contract.WorkshopsCount;
break;
case ExcelColumnType.EmployeeCount:
cell.Value = contract.EmployeesCount;
break;
case ExcelColumnType.ContractStartDate:
cell.Value = contract.ContractStartFa;
break;
case ExcelColumnType.ContractEndDate:
cell.Value = contract.ContractEndFa;
break;
case ExcelColumnType.InstallmentAmount:
cell.Value = contract.InstallmentAmount;
cell.Style.Numberformat.Format = "#,##0";
break;
case ExcelColumnType.ContractAmount:
cell.Value = contract.ContractAmount;
cell.Style.Numberformat.Format = "#,##0";
break;
case ExcelColumnType.FinancialStatus:
cell.Value = contract.Balance;
cell.Style.Numberformat.Format = "#,##0";
if (contract.Balance > 0)
cell.Style.Font.Color.SetColor(Color.Red);
else if (contract.Balance < 0)
cell.Style.Font.Color.SetColor(Color.Green);
break;
}
}
}
/// <summary>
/// تنظیم تنظیمات چاپ و عرض ستون‌ها
/// </summary>
private static void SetupPrintSettings(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
{
worksheet.PrinterSettings.PaperSize = ePaperSize.A4; worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
worksheet.PrinterSettings.Orientation = eOrientation.Landscape; worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
worksheet.PrinterSettings.FitToPage = true; worksheet.PrinterSettings.FitToPage = true;
worksheet.PrinterSettings.FitToWidth = 1; worksheet.PrinterSettings.FitToWidth = 1;
worksheet.PrinterSettings.FitToHeight = 0; worksheet.PrinterSettings.FitToHeight = 0;
worksheet.PrinterSettings.Scale = 85; worksheet.PrinterSettings.Scale = 85;
int contractNoCol = 1;
// تنظیم عرض ستون‌ها بر اساس نوع ستون int contractingPartyNameCol = 2;
for (int i = 0; i < visibleColumns.Count; i++) int archiveNoCol = 3;
{ int employersCol = 4;
int columnIndex = i + 1; int workshopsCol = 5;
worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]); int employeeCountCol = 6;
} int startContractCol = 7;
int endContractCol = 8;
int contractWithoutWorkshopAmountCol = 9;
int contractAmountCol = 10;
int balanceCol = 11;
worksheet.Columns[contractNoCol].Width = 17;
worksheet.Columns[contractingPartyNameCol].Width = 40;
worksheet.Columns[archiveNoCol].Width = 10;
worksheet.Columns[employersCol].Width = 40;
worksheet.Columns[workshopsCol].Width = 45;
worksheet.Columns[employeeCountCol].Width = 12;
worksheet.Columns[startContractCol].Width = 12;
worksheet.Columns[endContractCol].Width = 12;
worksheet.Columns[contractWithoutWorkshopAmountCol].Width = 18;
worksheet.Columns[contractAmountCol].Width = 12;
worksheet.Columns[balanceCol].Width = 12;
worksheet.View.RightToLeft = true; // فارسی worksheet.View.RightToLeft = true; // فارسی
} //worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
/// <summary>
/// دریافت عرض ستون پیش‌فرض برای هر نوع ستون
/// </summary>
private static double GetColumnWidth(ExcelColumnType columnType)
{
return columnType switch
{
ExcelColumnType.RowNumber => 8,
ExcelColumnType.PhysicalContract => 15,
ExcelColumnType.ContractNo => 17,
ExcelColumnType.Representative => 15,
ExcelColumnType.ContractingPartyName => 40,
ExcelColumnType.ArchiveCode => 10,
ExcelColumnType.EmployerName => 40,
ExcelColumnType.WorkshopName => 45,
ExcelColumnType.WorkshopCount => 12,
ExcelColumnType.EmployeeCount => 12,
ExcelColumnType.ContractStartDate => 12,
ExcelColumnType.ContractEndDate => 12,
ExcelColumnType.InstallmentAmount => 15,
ExcelColumnType.ContractAmount => 15,
ExcelColumnType.FinancialStatus => 12,
_ => 12
};
} }
private static double MoneyToDouble(string value) private static double MoneyToDouble(string value)
{ {
if (string.IsNullOrEmpty(value)) Console.WriteLine(value);
return 0;
var min = value.Length > 1 ? value.Substring(0, 2) : ""; var min = value.Length > 1 ? value.Substring(0, 2) : "";
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble(); var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
Console.WriteLine(test);
return test; return test;
} }
private static Color GetColorByName(string name, string workshopCount, string IsContractingPartyBlock)
/// <summary>
/// دریافت رنگ بر اساس وضعیت قرارداد
/// </summary>
private static Color GetColorByStatus(InstitutionContractListStatus status, int workshopsCount)
{ {
return status switch return name switch
{ {
InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue, "blue" => Color.LightBlue,
InstitutionContractListStatus.Deactive => Color.LightGray, _ when IsContractingPartyBlock == "true" => Color.LightGray,
InstitutionContractListStatus.PendingForRenewal => Color.LightCoral, "red" => Color.LightCoral,
InstitutionContractListStatus.Free => Color.MediumPurple, "purple" => Color.MediumPurple,
InstitutionContractListStatus.Block => Color.DimGray, "black" => Color.DimGray,
InstitutionContractListStatus.WithoutWorkshop => Color.Yellow, var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow,
InstitutionContractListStatus.Active => Color.White,
_ => Color.White _ => Color.White
}; };
} }
} }
public class InstitutionContractExcelViewModel
{
public InstitutionContractListStatus? Tab { get; set; }
public List<GetInstitutionContractListItemsViewModel> GetInstitutionContractListItemsViewModels { get; set; }
}

View File

@@ -1,58 +0,0 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Company.Domain.InstitutionContractSendFlagAgg;
using MongoDB.Driver;
namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo;
/// <summary>
/// Repository برای مدیریت فلگ ارسال قرارداد در MongoDB
/// </summary>
public class InstitutionContractSendFlagRepository : IInstitutionContractSendFlagRepository
{
private readonly IMongoCollection<InstitutionContractSendFlag> _collection;
public InstitutionContractSendFlagRepository(IMongoDatabase database)
{
_collection = database.GetCollection<InstitutionContractSendFlag>("InstitutionContractSendFlag");
}
public async Task Create(InstitutionContractSendFlag flag)
{
await _collection.InsertOneAsync(flag);
}
public async Task<InstitutionContractSendFlag> GetByContractId(long contractId)
{
var filter = Builders<InstitutionContractSendFlag>.Filter
.Eq(x => x.InstitutionContractId, contractId);
return await _collection.Find(filter).FirstOrDefaultAsync();
}
public async Task Update(InstitutionContractSendFlag flag)
{
var filter = Builders<InstitutionContractSendFlag>.Filter
.Eq(x => x.InstitutionContractId, flag.InstitutionContractId);
await _collection.ReplaceOneAsync(filter, flag);
}
public async Task<bool> IsContractSent(long contractId)
{
var flag = await GetByContractId(contractId);
return flag != null && flag.IsSent;
}
public async Task Remove(long contractId)
{
var filter = Builders<InstitutionContractSendFlag>.Filter
.Eq(x => x.InstitutionContractId, contractId);
await _collection.DeleteOneAsync(filter);
}
}

View File

@@ -2,7 +2,7 @@ using System.Collections.Generic;
using _0_Framework.Application; using _0_Framework.Application;
using Company.Application.Contracts.AuthorizedBankDetails; using Company.Application.Contracts.AuthorizedBankDetails;
namespace CompanyManagment.App.Contracts.AuthorizedBankDetails namespace Company.Application.Contracts.AuthorizedBankDetails
{ {
public interface IAuthorizedBankDetailsApplication public interface IAuthorizedBankDetailsApplication
{ {

View File

@@ -62,40 +62,4 @@ public interface ICheckoutApplication
long workshopId, DateTime start, DateTime end); long workshopId, DateTime start, DateTime end);
#endregion #endregion
Task<PagedResult<CheckoutListClientDto>> GetListForClient(long workshopId,
CheckoutListClientSearchModel searchModel);
}
public class CheckoutListClientSearchModel:PaginationRequest
{
public long? EmployeeId { get; set; }
public string Year { get; set; }
public string Month { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public CheckoutClientListOrderType? OrderType { get; set; }
}
public class CheckoutListClientDto
{
public long Id { get; set; }
public string Year { get; set; }
public string Month { get; set; }
public string EmployeeName { get; set; }
public string ContractNo { get; set; }
public string ContractStart { get; set; }
public string ContractEnd { get; set; }
public bool Signature { get; set; }
}
public enum CheckoutClientListOrderType
{
ByCheckoutCreationDate,
BySignedCheckout,
ByUnSignedCheckout,
ByPersonnelCode,
ByPersonnelCodeDescending,
ByCheckoutStartDate,
ByCheckoutStartDateDescending
} }

View File

@@ -3,7 +3,6 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net10.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<NoWarn>$(NoWarn);1591</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>

View File

@@ -1,12 +0,0 @@
namespace CompanyManagment.App.Contracts.Contract;
public enum ContractListOrderType
{
ByContractCreationDate,
BySignedContract,
ByUnSignedContract,
ByPersonnelCode,
ByPersonnelCodeDescending,
ByContractStartDate,
ByContractStartDateDescending
}

View File

@@ -1,13 +0,0 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Contract;
public class GetContractListForClientRequest: PaginationRequest
{
public int Year { get; set; }
public int Month { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public long EmployeeId { get; set; }
public ContractListOrderType? OrderType { get; set; }
}

View File

@@ -1,15 +0,0 @@
namespace CompanyManagment.App.Contracts.Contract;
public class GetContractListForClientResponse
{
public long Id { get; set; }
public string PersonnelCode { get; set; }
public string ContractNo { get; set; }
public string EmployeeFullName { get; set; }
public string ContractStart { get; set; }
public string ContractEnd { get; set; }
public bool IsSigned { get; set; }
public string DailyWage { get; set; }
public string AvgWorkingHour { get; set; }
public string FamilyAllowance { get; set; }
}

View File

@@ -3,8 +3,6 @@ using System.Collections.Generic;
using _0_Framework.Application; using _0_Framework.Application;
using CompanyManagment.App.Contracts.Workshop; using CompanyManagment.App.Contracts.Workshop;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application.Enums;
namespace CompanyManagment.App.Contracts.Contract; namespace CompanyManagment.App.Contracts.Contract;
public interface IContractApplication public interface IContractApplication
@@ -47,25 +45,12 @@ public interface IContractApplication
#region Client #region Client
OperationResult Remove(long id); OperationResult Remove(long id);
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel); List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
#endregion
/// <summary> #region NewChangeByHeydari
/// لیست قراردادها برای کلاینت
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<PagedResult<GetContractListForClientResponse>>
GetContractListForClient(GetContractListForClientRequest searchModel);
Task<ContractPrintViewModel> PrintOneAsync(long id);
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
#endregion OperationResult DeleteAllContarcts(List<long> ids);
#region NewChangeByHeydari
OperationResult DeleteAllContarcts(List<long> ids);
OperationResult DeleteContarcts(long id); OperationResult DeleteContarcts(long id);
List<long> CheckHasCheckout(List<long> ids); List<long> CheckHasCheckout(List<long> ids);
List<long> CheckHasSignature(List<long> ids); List<long> CheckHasSignature(List<long> ids);
@@ -73,75 +58,3 @@ public interface IContractApplication
#endregion #endregion
} }
public class ContractPrintViewModel
{
public string ContractNo { get; set; }
public ContractPrintEmployerViewModel Employer { get; set; }
public ContractPrintEmployeeViewModel Employee { get; set; }
public ContractPrintTypeOfContractViewModel TypeOfContract { get; set; }
public ContractPrintFeesViewModel Fees { get; set; }
public string ConditionAndDetials { get; set; }
}
public class ContractPrintFeesViewModel
{
public string DailyWage { get; set; }
public string FamilyAllowance { get; set; }
public string ConsumableItems { get; set; }
public string HousingAllowance { get; set; }
}
public class ContractPrintTypeOfContractViewModel
{
public string ContractType { get; set; }
public string JobName { get; set; }
public string SetContractDate { get; set; }
public string ContarctStart { get; set; }
public string ContractEnd { get; set; }
public string WorkingHoursWeekly { get; set; }
public List<string> WorkshopAddress { get; set; }
}
public class ContractPrintEmployeeViewModel
{
public string FullName { get; set; }
public string NationalCode { get; set; }
public string IdNumber { get; set; }
public string DateOfBirth { get; set; }
public string FatherName { get; set; }
public string LevelOfEducation { get; set; }
public string Address { get; set; }
}
public class ContractPrintEmployerViewModel
{
public LegalType LegalType { get; set; }
public ContractPrintRealEmployerViewModel RealEmployer { get; set; }
public ContractPrintLegalEmployerViewModel LegalEmployer { get; set; }
public string WorkshopName { get; set; }
public string Address { get; set; }
public string WorkshopCode { get; set; }
}
public class ContractPrintLegalEmployerViewModel
{
public string CompanyName { get; set; }
public string NationalId { get; set; }
public string RegisterId { get; set; }
}
public class ContractPrintRealEmployerViewModel
{
public string FullName { get; set; }
public string NationalCode { get; set; }
public string IdNumber { get; set; }
}

View File

@@ -0,0 +1,92 @@
using System.Diagnostics.Contracts;
namespace CompanyManagment.App.Contracts.Employee.DTO;
/// <summary>
/// لیست پرسنل کلاینت
/// api
/// </summary>
public class EmployeeListDto
{
/// <summary>
/// آی دی پرسنل
/// </summary>
public long Id { get; set; }
/// <summary>
/// نام کامل پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// کد پرسنلی
/// </summary>
public int PersonnelCode { get; set; }
/// <summary>
/// وضعیت تاهل
/// </summary>
public string MaritalStatus { get; set; }
/// <summary>
///کد ملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شماره شناسنامه
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// تاریخ تولد
/// </summary>
public string DateOfBirth { get; set; }
/// <summary>
/// نام پدر
/// </summary>
public string FatherName { get; set; }
/// <summary>
/// تعداد فرزندان
/// </summary>
public string NumberOfChildren { get; set; }
/// <summary>
/// آخرین تاریخ شروع بکار قرارداد
/// </summary>
public string LatestContractStartDate { get; set; }
/// <summary>
/// تاریخ ترک کار قرارداد
/// </summary>
public string ContractLeftDate { get; set; }
/// <summary>
/// آخرین تاریخ شروع بکار بیمه
/// </summary>
public string LatestInsuranceStartDate { get; set; }
/// <summary>
/// تاریخ ترک کار بیمه
/// </summary>
public string InsuranceLeftDate { get; set; }
/// <summary>
/// دارای قرارداد است؟
/// </summary>
public bool HasContract { get; set; }
/// <summary>
/// دارای بیمه است؟
/// </summary>
public bool HasInsurance { get; set; }
/// <summary>
/// وضعیت پرسنل در کارگاه
/// </summary>
public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; }
}

View File

@@ -0,0 +1,18 @@
namespace CompanyManagment.App.Contracts.Employee.DTO;
/// <summary>
/// سرچ مدل پرسنل
/// api
/// </summary>
public class EmployeeSearchModelDto
{
/// <summary>
/// نام پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// کد ملی
/// </summary>
public string NationalCode { get; set; }
}

View File

@@ -0,0 +1,29 @@
namespace CompanyManagment.App.Contracts.Employee.DTO;
/// <summary>
/// وضعیت پرسنل در کارگاه
/// api
/// </summary>
public enum EmployeeStatusInWorkshop
{
/// <summary>
/// ایجاد شده توسط کارفرما
/// </summary>
CreatedByClient,
/// <summary>
/// ترک کار موقت
/// </summary>
LefWorkTemp,
/// <summary>
/// در حال کار در کارگاه
/// </summary>
Working,
/// <summary>
/// قطع ارتباط و ترک کار کامب
/// </summary>
HasLeft,
}

View File

@@ -0,0 +1,96 @@
namespace CompanyManagment.App.Contracts.Employee.DTO;
/// <summary>
/// پرینت تجمیعی پرسنل
/// </summary>
public class PrintAllEmployeesInfoDtoClient
{
public PrintAllEmployeesInfoDtoClient(EmployeeListDto source)
{
Id = source.Id;
EmployeeFullName = source.EmployeeFullName;
PersonnelCode = source.PersonnelCode;
MaritalStatus = source.MaritalStatus;
NationalCode = source.NationalCode;
IdNumber = source.IdNumber;
DateOfBirth = source.DateOfBirth;
FatherName = source.FatherName;
NumberOfChildren = source.NumberOfChildren;
LatestContractStartDate = source.LatestContractStartDate;
ContractLeftDate = source.ContractLeftDate;
LatestInsuranceStartDate = source.LatestInsuranceStartDate;
InsuranceLeftDate = source.InsuranceLeftDate;
EmployeeStatusInWorkshop = source.EmployeeStatusInWorkshop;
}
/// <summary>
/// آی دی پرسنل
/// </summary>
public long Id { get; set; }
/// <summary>
/// نام کامل پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// کد پرسنلی
/// </summary>
public int PersonnelCode { get; set; }
/// <summary>
/// وضعیت تاهل
/// </summary>
public string MaritalStatus { get; set; }
/// <summary>
///کد ملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شماره شناسنامه
/// </summary>
public string IdNumber { get; set; }
/// <summary>
/// تاریخ تولد
/// </summary>
public string DateOfBirth { get; set; }
/// <summary>
/// نام پدر
/// </summary>
public string FatherName { get; set; }
/// <summary>
/// تعداد فرزندان
/// </summary>
public string NumberOfChildren { get; set; }
/// <summary>
/// آخرین تاریخ شروع بکار قرارداد
/// </summary>
public string LatestContractStartDate { get; set; }
/// <summary>
/// تاریخ ترک کار قرارداد
/// </summary>
public string ContractLeftDate { get; set; }
/// <summary>
/// آخرین تاریخ شروع بکار بیمه
/// </summary>
public string LatestInsuranceStartDate { get; set; }
/// <summary>
/// تاریخ ترک کار بیمه
/// </summary>
public string InsuranceLeftDate { get; set; }
/// <summary>
/// وضعیت پرسنل در کارگاه
/// </summary>
public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; }
}

View File

@@ -1,8 +1,10 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using CompanyManagment.App.Contracts.Employee.DTO; using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
using Microsoft.AspNetCore.Mvc;
namespace CompanyManagment.App.Contracts.Employee; namespace CompanyManagment.App.Contracts.Employee;
@@ -73,6 +75,7 @@ public interface IEmployeeApplication
long workshopId); long workshopId);
Task<OperationResult> EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command); Task<OperationResult> EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command);
[Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")]
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId); Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate); Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate);
@@ -103,8 +106,26 @@ public interface IEmployeeApplication
/// <returns></returns> /// <returns></returns>
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId); Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
#endregion
/// <summary>
/// دریافت لیست پرسنل کلاینت
/// api
/// </summary>
/// <param name="searchModel"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId);
/// <summary>
/// پرینت تجمیعی پرسنل کلاینت
/// api
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId);
#endregion
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
} }
public class GetClientEmployeeListSearchModel public class GetClientEmployeeListSearchModel

View File

@@ -8,7 +8,7 @@ public class CreateFinancialInvoice
public double Amount { get; set; } public double Amount { get; set; }
public long ContractingPartyId { get; set; } public long ContractingPartyId { get; set; }
public string Description { get; set; } public string Description { get; set; }
public List<CreateFinancialInvoiceItem> Items { get; set; } public List<CreateFinancialInvoiceItem>? Items { get; set; }
} }
public class CreateFinancialInvoiceItem public class CreateFinancialInvoiceItem

View File

@@ -10,8 +10,7 @@ public class EditFinancialInvoice
public double Amount { get; set; } public double Amount { get; set; }
public FinancialInvoiceStatus Status { get; set; } public FinancialInvoiceStatus Status { get; set; }
public List<EditFinancialInvoiceItem> Items { get; set; } public List<EditFinancialInvoiceItem>? Items { get; set; }
public long ContractingPartyId { get; set; }
} }
public class EditFinancialInvoiceItem public class EditFinancialInvoiceItem

View File

@@ -6,7 +6,6 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
namespace CompanyManagment.App.Contracts.FinancialStatment; namespace CompanyManagment.App.Contracts.FinancialStatment;
@@ -63,17 +62,7 @@ public interface IFinancialStatmentApplication
/// <returns></returns> /// <returns></returns>
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId, Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,
FinancialStatementSearchModel searchModel); FinancialStatementSearchModel searchModel);
/// <summary>
/// پردازش شارژ حساب از طریق درگاه پرداخت سپهر
/// </summary>
/// <param name="request"></param>
/// <param name="gateWayCallBackUrl">مسیر برگشت درگاه پرداخت</param>
///
Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreatePaymentGateWayAndCreateInvoice(
CreateFinancialPayRequest request, string gateWayCallBackUrl);
} }
public record CreateFinancialPayRequest(long Id, string BaseUrl);
public class FinancialStatmentDetailsByContractingPartyViewModel public class FinancialStatmentDetailsByContractingPartyViewModel
{ {

View File

@@ -96,8 +96,6 @@ public class GetInstitutionContractListItemsViewModel
/// مبلغ قسط /// مبلغ قسط
/// </summary> /// </summary>
public double InstallmentAmount { get; set; } public double InstallmentAmount { get; set; }
public bool InstitutionContractIsSentFlag { get; set; }
} }
public class InstitutionContractListWorkshop public class InstitutionContractListWorkshop

View File

@@ -5,10 +5,8 @@ using System.Drawing;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Application.Sms; using _0_Framework.Application.Sms;
using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.App.Contracts.TemporaryClientRegistration; using CompanyManagment.App.Contracts.TemporaryClientRegistration;
using CompanyManagment.App.Contracts.Workshop; using CompanyManagment.App.Contracts.Workshop;
using CompanyManagment.App.Contracts.WorkshopPlan; using CompanyManagment.App.Contracts.WorkshopPlan;
@@ -201,7 +199,6 @@ public interface IInstitutionContractApplication
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList(); Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
/// <summary> /// <summary>
/// دریافت آیتم های کارپوشه ثبت نام /// دریافت آیتم های کارپوشه ثبت نام
/// </summary> /// </summary>
@@ -209,6 +206,8 @@ public interface IInstitutionContractApplication
/// <returns></returns> /// <returns></returns>
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId); Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
#endregion #endregion
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id); Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
@@ -218,31 +217,6 @@ public interface IInstitutionContractApplication
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request); InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request); InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
#region Creation
/// <summary>
/// تب ایجاد قرارداد مؤسسه - احراز هویت
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
/// <summary>
/// تب ایجاد قرارداد مؤسسه -مشخصات طرف قرارداد و انتخاب کارگاه ها
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(
InstitutionContractCreationWorkshopsRequest request);
/// <summary>
/// تب ایجاد قرارداد مؤسسه - مالی
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
#endregion
#region Extension #region Extension
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId); Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
@@ -258,27 +232,21 @@ public interface IInstitutionContractApplication
Task<InstitutionContractDiscountResponse> SetDiscountForExtension( Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
InstitutionContractSetDiscountForExtensionRequest request); InstitutionContractSetDiscountForExtensionRequest request);
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension( Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
InstitutionContractResetDiscountForExtensionRequest request); InstitutionContractResetDiscountForExtensionRequest request);
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request); Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected); Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
#endregion #endregion
#region Upgrade (Amendment) #region Upgrade (Amendment)
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId); Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
InstitutionContractAmendmentTempWorkshopViewModel request);
Task RemoveAmendmentWorkshops(Guid workshopTempId); Task RemoveAmendmentWorkshops(Guid workshopTempId);
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
InsitutionContractAmendmentPaymentRequest request);
#endregion #endregion
@@ -291,9 +259,8 @@ public interface IInstitutionContractApplication
/// <returns></returns> /// <returns></returns>
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id); Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
Task<OperationResult> SetPendingWorkflow(long entityId, InstitutionContractSigningType signingType); Task<OperationResult> SetPendingWorkflow(long entityId,InstitutionContractSigningType signingType);
Task<long> GetIdByInstallmentId(long installmentId); Task<long> GetIdByInstallmentId(long installmentId);
/// <summary> /// <summary>
/// تایید قرارداد مالی به صورت دستی /// تایید قرارداد مالی به صورت دستی
/// </summary> /// </summary>
@@ -301,50 +268,4 @@ public interface IInstitutionContractApplication
/// <returns></returns> /// <returns></returns>
Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId); Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId);
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
/// <summary>
/// تعیین فلگ ارسال قرارداد در MongoDB
/// اگر فلگ وجود نداشتن‌د ایجاد می‌کند
/// </summary>
/// <param name="request">درخواست تعیین فلگ</param>
/// <returns>نتیجه عملیات</returns>
Task<OperationResult> SetContractSendFlag(SetInstitutionContractSendFlagRequest request);
}
public class CreationSetContractingPartyResponse
{
public long RepresentativeId { get; set; }
}
public class InstitutionContractCreationWorkshopsResponse
{
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
}
public class InstitutionContractCreationWorkshopsRequest
{
public Guid TempId { get; set; }
public string City { get; set; }
public string Province { get; set; }
public string Address { get; set; }
public List<EditContactInfo> ContactInfos { get; set; }
/// <summary>
/// اطلاعات شخص حقیقی
/// </summary>
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
/// <summary>
/// اطلاعات شخص حقوقی
/// </summary>
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
public LegalType LegalType { get; set; }
public long RepresentativeId { get; set; }
} }

View File

@@ -1,11 +0,0 @@
using _0_Framework.Application.Enums;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractCreationInquiryRequest
{
public string NationalCode { get; set; }
public string DateOfBirth { get; set; }
public string Mobile { get; set; }
public LegalType LegalType { get; set; }
}

View File

@@ -8,10 +8,3 @@ public class InstitutionContractExtensionCompleteRequest
public bool IsInstallment { get; set; } public bool IsInstallment { get; set; }
public long LawId { get; set; } public long LawId { get; set; }
} }
public class InstitutionContractCreationCompleteRequest
{
public Guid TemporaryId { get; set; }
public bool IsInstallment { get; set; }
public long LawId { get; set; }
}

View File

@@ -25,20 +25,3 @@ public class InstitutionContractExtensionInquiryResult
public List<EditContactInfo> ContactInfoViewModels { get; set; } public List<EditContactInfo> ContactInfoViewModels { get; set; }
public long RepresentativeId { get; set; } public long RepresentativeId { get; set; }
} }
public class InstitutionContractCreationInquiryResult
{
/// <summary>
/// اطلاعات شخص حقیقی
/// </summary>
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
/// <summary>
/// اطلاعات شخص حقوقی
/// </summary>
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
public LegalType LegalType { get; set; }
public Guid TempId { get; set; }
}

View File

@@ -7,8 +7,3 @@ public class InstitutionContractExtensionPaymentRequest
public InstitutionContractDuration Duration { get; set; } public InstitutionContractDuration Duration { get; set; }
public Guid TempId { get; set; } public Guid TempId { get; set; }
} }
public class InstitutionContractCreationPaymentRequest
{
public InstitutionContractDuration Duration { get; set; }
public Guid TempId { get; set; }
}

View File

@@ -6,10 +6,3 @@ public class InstitutionContractExtensionPaymentResponse
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; } public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
} }
public class InstitutionContractCreationPaymentResponse
{
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
}

View File

@@ -10,10 +10,3 @@ public class InstitutionContractExtensionPlanRequest
public string TotalAmount { get; set; } public string TotalAmount { get; set; }
public Guid TempId { get; set; } public Guid TempId { get; set; }
} }
public class InstitutionContractCreationPlanRequest
{
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
public Guid TempId { get; set; }
}

View File

@@ -7,18 +7,7 @@ public class InstitutionContractExtensionPlanResponse
public InstitutionContractExtensionPlanDetail SixMonths { get; set; } public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; } public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
} }
public class InstitutionContractExtensionPlanDetail:InstitutionContractCreationPlanDetail public class InstitutionContractExtensionPlanDetail
{
}
public class InstitutionContractCreationPlanResponse
{
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
public InstitutionContractCreationPlanDetail TwelveMonths { get; set; }
}
public class InstitutionContractCreationPlanDetail
{ {
public string ContractStart { get; set; } public string ContractStart { get; set; }
public string ContractEnd { get; set; } public string ContractEnd { get; set; }

View File

@@ -33,5 +33,5 @@ public class InstitutionContractPaymentOneTimeViewModel
} }
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
{ {
public List<MonthlyInstallment> Installments { get; set; } = []; public List<MonthlyInstallment> Installments { get; set; }
} }

View File

@@ -7,8 +7,3 @@ public class InstitutionContractResetDiscountForExtensionRequest
public Guid TempId { get; set; } public Guid TempId { get; set; }
public bool IsInstallment { get; set; } public bool IsInstallment { get; set; }
} }
public class InstitutionContractResetCreationForExtensionRequest
{
public Guid TempId { get; set; }
public bool IsInstallment { get; set; }
}

View File

@@ -9,10 +9,3 @@ public class InstitutionContractSetDiscountForExtensionRequest
public double TotalAmount { get; set; } public double TotalAmount { get; set; }
public bool IsInstallment { get; set; } public bool IsInstallment { get; set; }
} }
public class InstitutionContractSetDiscountForCreationRequest
{
public Guid TempId { get; set; }
public int DiscountPercentage { get; set; }
public double TotalAmount { get; set; }
public bool IsInstallment { get; set; }
}

View File

@@ -1,19 +0,0 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
/// <summary>
/// درخواست برای تعیین فلگ ارسال قرارداد
/// </summary>
public class SetInstitutionContractSendFlagRequest
{
/// <summary>
/// شناسه قرارداد
/// </summary>
public long InstitutionContractId { get; set; }
/// <summary>
/// آیا قرارداد ارسال شده است
/// </summary>
public bool IsSent { get; set; }
}

View File

@@ -94,29 +94,4 @@ public class BlockSmsListData
/// آی دی صورت حساب مالی /// آی دی صورت حساب مالی
/// </summary> /// </summary>
public string AproveId { get; set; } public string AproveId { get; set; }
/// <summary>
/// آیا قرداد مالی قدیمی است
/// </summary>
public bool IsElectronicContract { get; set; }
/// <summary>
/// پابلیک آی دی بخش یک
/// </summary>
public string Code1 { get; set; }
/// <summary>
/// پابلیک آی دی بخش دو
/// </summary>
public string Code2 { get; set; }
}
/// <summary>
/// لیست قراداد های آبی
/// جهت ارسال هشدار یا اقدام قضائی
/// </summary>
public class BlueWarningSmsData
{
} }

View File

@@ -5,7 +5,6 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using CompanyManagment.App.Contracts.InsuranceList; using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@@ -97,94 +96,6 @@ public interface IInsuranceListApplication
#endregion #endregion
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel); Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
}
public class InsuranceClientPrintViewModel
{
public string Month { get; set; }
public string Year { get; set; }
public string WorkshopName { get; set; }
public string ListNo { get; set; }
public string AgreementNumber { get; set; }
public string WorkshopInsuranceCode { get; set; }
public string WorkshopEmployerName { get; set; }
public string WorkshopAddress { get; set; }
public List<InsuranceClientPrintItemsViewModel> Items { get; set; }
public string EmployerShare { get; set; }
public string InsuredShare { get; set; }
public string UnEmploymentInsurance { get; set; }
public string AllInsuredShare { get; set; }
}
public class InsuranceClientPrintItemsViewModel
{
/// <summary>
/// شماره بیمه
/// </summary>
public string InsuranceCode { get; set; }
/// <summary>
/// نام و نام خانوادگی
/// </summary>
public string FullName { get; set; }
/// <summary>
/// شغل
/// </summary>
public string JobName { get; set; }
/// <summary>
/// کد ملی
/// </summary>
public string NationalCode { get; set; }
/// <summary>
/// شروع به کار
/// </summary>
public string StartWork { get; set; }
/// <summary>
/// ترک کار
/// </summary>
public string LeftWork { get; set; }
/// <summary>
/// روزهای کارکرد
/// </summary>
public string WorkingDays { get; set; }
/// <summary>
/// دستمزد روزانه
/// </summary>
public string DailyWage { get; set; }
/// <summary>
/// پایه سنوات روزانه
/// </summary>
public string BaseYears { get; set; }
/// <summary>
/// دستمزد ماهانه
/// </summary>
public string MonthlySalary { get; set; }
/// <summary>
/// مزایای ماهیانه مشمول
/// </summary>
public string MonthlyBenefits { get; set; }
/// <summary>
/// حق تاهل
/// </summary>
public string MarriedAllowance { get; set; }
/// <summary>
/// حقوق و مزایای ماهیانه مشمول
/// </summary>
public string BenefitsIncludedContinuous { get; set; }
/// <summary>
/// حقوق و مزایای ماهیانه غیر مشمول
/// </summary>
public string BenefitsIncludedNonContinuous { get; set; }
/// <summary>
/// مجموع مزایای ماهیانه مشمول و غیر مشمول
/// </summary>
public string IncludedAndNotIncluded { get; set; }
/// <summary>
/// حق بیمه سهم بیمه شده
/// </summary>
public string InsuranceShare { get; set; }
} }
public class InsuranceClientSearchModel:PaginationRequest public class InsuranceClientSearchModel:PaginationRequest
@@ -202,11 +113,4 @@ public class InsuranceClientListViewModel
public int YearInt { get; set; } public int YearInt { get; set; }
public string MonthName { get; set; } public string MonthName { get; set; }
public int MonthInt { get; set; } public int MonthInt { get; set; }
public int PersonnelCount { get; set; }
public int LeftWorkCount { get; set; }
public string AllInsuredShare { get; set; }
public string InsuredShare { get; set; }
public string EmployerShare { get; set; }
public string UnEmploymentInsurance { get; set; }
} }

View File

@@ -1,21 +0,0 @@
using _0_Framework.Application;
using System.Threading;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.PaymentCallback;
/// <summary>
/// رابط برای مدیریت Callback درگاه‌های پرداخت
/// </summary>
public interface IPaymentCallbackHandler
{
/// <summary>
/// تأیید و پردازش callback درگاه پرداخت سپهر
/// </summary>
/// <param name="command">داده‌های callback درگاه</param>
/// <param name="cancellationToken">توکن لغو عملیات</param>
/// <returns>نتیجه عملیات</returns>
Task<OperationResult> VerifySepehrPaymentCallback(VerifyPaymentCallbackCommand command,
CancellationToken cancellationToken = default);
}

View File

@@ -1,53 +0,0 @@
namespace CompanyManagment.App.Contracts.PaymentCallback;
/// <summary>
/// دستور تأیید callback درگاه پرداخت
/// </summary>
public class VerifyPaymentCallbackCommand
{
/// <summary>
/// کد پاسخ درگاه (0 = موفق)
/// </summary>
public int ResponseCode { get; set; }
/// <summary>
/// شناسه فاکتور/تراکنش
/// </summary>
public long InvoiceId { get; set; }
/// <summary>
/// داده‌های اضافی JSON
/// </summary>
public string Payload { get; set; }
/// <summary>
/// مبلغ تراکنش
/// </summary>
public long Amount { get; set; }
/// <summary>
/// شماره پیگیری درگاه
/// </summary>
public long TraceNumber { get; set; }
/// <summary>
/// شماره سند بانکی (RRN)
/// </summary>
public long Rrn { get; set; }
/// <summary>
/// رسید دیجیتال
/// </summary>
public string DigitalReceipt { get; set; }
/// <summary>
/// بانک صادر کننده کارت
/// </summary>
public string IssuerBank { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
}

View File

@@ -132,5 +132,4 @@ public interface IPersonalContractingPartyApp
#endregion #endregion
Task<long> GetRepresentativeIdByNationalCode(string nationalCode);
} }

View File

@@ -1,22 +0,0 @@
namespace CompanyManagment.App.Contracts.SepehrPaymentGateway;
/// <summary>
/// پاسخ ایجاد درگاه پرداخت سپهر
/// </summary>
public class CreateSepehrPaymentGatewayResponse
{
/// <summary>
/// توکن درگاه
/// </summary>
public string Token { get; set; }
/// <summary>
/// شناسه تراکنش
/// </summary>
public long TransactionId { get; set; }
/// <summary>
/// URL درگاه پرداخت
/// </summary>
public string PaymentUrl { get; set; }
}

View File

@@ -1,32 +0,0 @@
using _0_Framework.Application;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.SepehrPaymentGateway;
/// <summary>
/// رابط برای سرویس مشترک ایجاد درگاه پرداخت سپهر
/// </summary>
public interface ISepehrPaymentGatewayService
{
/// <summary>
/// ایجاد درگاه پرداخت سپهر برای یک تراکنش
/// </summary>
/// <param name="amount">مبلغ</param>
/// <param name="contractingPartyId">شناسه طرف قرارداد</param>
/// <param name="frontCallbackUrl">آدرس بازگشتی به فرانت برای نمایش نتیجه</param>
/// <param name="gatewayCallbackUrl">آدرس بازگشتی درگاه پرداخت</param>
/// <param name="financialInvoiceId">شناسه فاکتور مالی (اختیاری) - این پارامتر مستقیماً به درگاه فرستاده می‌شود</param>
/// <param name="extraData">داده‌های اضافی سفارشی برای payload (اختیاری)</param>
/// <param name="cancellationToken">توکن لغو</param>
/// <returns>شامل Token درگاه یا OperationResult با خطا</returns>
Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreateSepehrPaymentGateway(
double amount,
long contractingPartyId,
long financialInvoiceId,
string gatewayCallbackUrl,
string frontCallbackUrl="https://client.gozareshgir.ir",
Dictionary<string, object> extraData = null,
CancellationToken cancellationToken = default);
}

View File

@@ -1,15 +0,0 @@
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
/// <summary>
/// وضعیت ارسال پیامک
/// </summary>
public enum SendStatus
{
All=0,
/// <summary>
/// موفق
/// </summary>
Success,
//ناموفق
Failed,
}

View File

@@ -1,54 +0,0 @@
using System;
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
public class SmsReportDto
{
/// <summary>
/// تاریخ ارسال
/// </summary>
public string SentDate { get; set; }
}
public class SmsReportListDto
{
/// <summary>
/// آی دی
/// </summary>
public long Id { get; set; }
/// <summary>
/// آی دی پیامک در sms.ir
/// </summary>
public int MessageId { get; set; }
/// <summary>
/// وضعیت ارسال
/// </summary>
public string Status { get; set; }
/// <summary>
/// نوع پیامک
/// </summary>
public string TypeOfSms { get; set; }
/// <summary>
/// نام طرف حساب
/// </summary>
public string ContractingPartyName { get; set; }
/// <summary>
/// شماره موبایل
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// ساعت و دقیقه
/// </summary>
public string HourAndMinute { get; set; }
}

View File

@@ -1,43 +0,0 @@
using _0_Framework.Application.Enums;
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
public class SmsReportSearchModel
{
//نوع پیامک
public TypeOfSmsSetting TypeOfSms { get; set; }
/// <summary>
/// وضعیت ارسال پیامک
/// </summary>
public SendStatus SendStatus { get; set; }
/// <summary>
/// شماره موبایل
/// </summary>
public string Mobile { get; set; }
/// <summary>
/// آی دی طرف حساب
/// </summary>
public long ContractingPatyId { get; set; }
/// <summary>
/// سال
/// </summary>
public string Year { get; set; }
/// <summary>
/// ماه
/// </summary>
public string Month { get; set; }
/// <summary>
/// تاریخ شروع
/// </summary>
public string StartDateFa { get; set; }
/// <summary>
/// تاریخ پایان
/// </summary>
public string EndDateFa { get; set; }
}

View File

@@ -1,34 +1,14 @@
using _0_Framework.Application; using System;
using CompanyManagment.App.Contracts.SmsResult.Dto;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.SmsResult; namespace CompanyManagment.App.Contracts.SmsResult;
public interface ISmsResultApplication public interface ISmsResultApplication
{ {
#region ForApi
/// <summary>
/// دریافت لیست پیامکها
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel);
/// <summary>
/// دریافت اکسپند لیست هر تاریخ
/// </summary>
/// <param name="searchModel"></param>
/// <param name="date"></param>
/// <returns></returns>
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date);
#endregion
OperationResult Create(CreateSmsResult command); OperationResult Create(CreateSmsResult command);
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel); List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
} }

View File

@@ -1,10 +1,11 @@
using System.Collections.Generic; using _0_Framework.Application;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Account;
using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.Workshop.DTOs; using CompanyManagment.App.Contracts.Workshop.DTOs;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
namespace CompanyManagment.App.Contracts.Workshop; namespace CompanyManagment.App.Contracts.Workshop;
@@ -92,6 +93,8 @@ public interface IWorkshopApplication
#endregion #endregion
Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command); Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command);
} }
public class CreateWorkshopWorkflowRegistration public class CreateWorkshopWorkflowRegistration

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using _0_Framework.Application; using _0_Framework.Application;
using Company.Application.Contracts.AuthorizedBankDetails; using Company.Application.Contracts.AuthorizedBankDetails;
using Company.Domain.AuthorizedBankDetailsAgg; using Company.Domain.AuthorizedBankDetailsAgg;
using CompanyManagment.App.Contracts.AuthorizedBankDetails;
namespace CompanyManagment.Application namespace CompanyManagment.Application
{ {

View File

@@ -706,10 +706,5 @@ public class CheckoutApplication : ICheckoutApplication
return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end); return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end);
} }
public async Task<PagedResult<CheckoutListClientDto>> GetListForClient(long workshopId,CheckoutListClientSearchModel searchModel)
{
return await _checkoutRepository.GetListForClient(workshopId, searchModel);
}
#endregion #endregion
} }

View File

@@ -2712,9 +2712,7 @@ public class ContractApplication : IContractApplication
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds) var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
.Select(x => x.EmployerId).ToList(); .Select(x => x.EmployerId).ToList();
res.Employers = _employerRepository.GetEmployers(emp); res.Employers = _employerRepository.GetEmployers(emp);
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds); var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
var workshop = new WorkshopViewModel() var workshop = new WorkshopViewModel()
{ {
@@ -3109,21 +3107,6 @@ public class ContractApplication : IContractApplication
return _contractRepository.SearchForClient(searchModel); return _contractRepository.SearchForClient(searchModel);
} }
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
{
return await _contractRepository.GetContractListForClient(searchModel);
}
public async Task<ContractPrintViewModel> PrintOneAsync(long id)
{
return (await _contractRepository.PrintAllAsync([id])).FirstOrDefault();
}
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
{
return await _contractRepository.PrintAllAsync(ids);
}
#endregion #endregion
#region NewChangeByHeydari #region NewChangeByHeydari

View File

@@ -1734,5 +1734,20 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId); return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId);
} }
public async Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId)
{
return await _EmployeeRepository.ListOfAllEmployeesClient(searchModel, workshopId);
}
public async Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId)
{
return await _EmployeeRepository.PrintAllEmployeesInfoClient(workshopId);
}
public async Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId)
{
return await _EmployeeRepository.GetWorkingEmployeesSelectList(workshopId);
}
#endregion #endregion
} }

View File

@@ -9,13 +9,15 @@ using CompanyManagment.EFCore;
namespace CompanyManagment.Application; namespace CompanyManagment.Application;
public class FinancialInvoiceApplication : IFinancialInvoiceApplication public class FinancialInvoiceApplication : RepositoryBase<long, FinancialInvoice>, IFinancialInvoiceApplication
{ {
private readonly IFinancialInvoiceRepository _financialInvoiceRepository; private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
private readonly CompanyContext _context;
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository) public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository, CompanyContext context) : base(context)
{ {
_financialInvoiceRepository = financialInvoiceRepository; _financialInvoiceRepository = financialInvoiceRepository;
_context = context;
} }
public OperationResult Create(CreateFinancialInvoice command) public OperationResult Create(CreateFinancialInvoice command)
@@ -184,7 +186,6 @@ public class FinancialInvoiceApplication : IFinancialInvoiceApplication
return _financialInvoiceRepository.Search(searchModel); return _financialInvoiceRepository.Search(searchModel);
} }
//public OperationResult Remove(long id) //public OperationResult Remove(long id)
//{ //{
// var operation = new OperationResult(); // var operation = new OperationResult();

View File

@@ -3,12 +3,9 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using Company.Domain.ContarctingPartyAgg; using Company.Domain.ContarctingPartyAgg;
using Company.Domain.FinancialInvoiceAgg;
using Company.Domain.FinancialStatmentAgg; using Company.Domain.FinancialStatmentAgg;
using CompanyManagment.App.Contracts.FinancialInvoice;
using CompanyManagment.App.Contracts.FinancialStatment; using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.FinancilTransaction; using CompanyManagment.App.Contracts.FinancilTransaction;
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
using Microsoft.AspNetCore.Components.Forms; using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@@ -19,20 +16,12 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
private readonly IFinancialStatmentRepository _financialStatmentRepository; private readonly IFinancialStatmentRepository _financialStatmentRepository;
private readonly IFinancialTransactionApplication _financialTransactionApplication; private readonly IFinancialTransactionApplication _financialTransactionApplication;
private readonly IPersonalContractingPartyRepository _contractingPartyRepository; private readonly IPersonalContractingPartyRepository _contractingPartyRepository;
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
public FinancialStatmentApplication(IFinancialStatmentRepository financialStatmentRepository, public FinancialStatmentApplication(IFinancialStatmentRepository financialStatmentRepository, IFinancialTransactionApplication financialTransactionApplication, IPersonalContractingPartyRepository contractingPartyRepository)
IFinancialTransactionApplication financialTransactionApplication,
IPersonalContractingPartyRepository contractingPartyRepository,
IFinancialInvoiceRepository financialInvoiceRepository,
ISepehrPaymentGatewayService sepehrPaymentGatewayService)
{ {
_financialStatmentRepository = financialStatmentRepository; _financialStatmentRepository = financialStatmentRepository;
_financialTransactionApplication = financialTransactionApplication; _financialTransactionApplication = financialTransactionApplication;
_contractingPartyRepository = contractingPartyRepository; _contractingPartyRepository = contractingPartyRepository;
_financialInvoiceRepository = financialInvoiceRepository;
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
} }
public OperationResult CreateFromBankGateway(CreateFinancialStatment command) public OperationResult CreateFromBankGateway(CreateFinancialStatment command)
@@ -62,6 +51,7 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
if (createTransaction.IsSuccedded) if (createTransaction.IsSuccedded)
return op.Succcedded(); return op.Succcedded();
return op.Failed("خطا در انجام عملیات"); return op.Failed("خطا در انجام عملیات");
} }
else else
{ {
@@ -81,6 +71,8 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
Balance = 0, Balance = 0,
TypeOfTransaction = command.TypeOfTransaction, TypeOfTransaction = command.TypeOfTransaction,
DescriptionOption = command.DescriptionOption DescriptionOption = command.DescriptionOption
}; };
var createTransaction = _financialTransactionApplication.Create(transaction); var createTransaction = _financialTransactionApplication.Create(transaction);
if (createTransaction.IsSuccedded) if (createTransaction.IsSuccedded)
@@ -106,22 +98,22 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
{ {
debtor = 0; debtor = 0;
creditor = command.CreditorString.MoneyToDouble(); creditor = command.CreditorString.MoneyToDouble();
} }
else if (command.TypeOfTransaction == "debt") else if (command.TypeOfTransaction == "debt")
{ {
creditor = 0; creditor = 0;
debtor = command.DeptorString.MoneyToDouble(); debtor = command.DeptorString.MoneyToDouble();
} }
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr)) if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
{ {
return op.Failed("تاریخ وارد شده صحیح نمی باشد"); return op.Failed("تاریخ وارد شده صحیح نمی باشد");
} }
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId)) if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
{ {
var financialStatment = var financialStatment = _financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
_financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
var transaction = new CreateFinancialTransaction() var transaction = new CreateFinancialTransaction()
{ {
FinancialStatementId = financialStatment.Id, FinancialStatementId = financialStatment.Id,
@@ -132,15 +124,20 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
Creditor = creditor, Creditor = creditor,
TypeOfTransaction = command.TypeOfTransaction, TypeOfTransaction = command.TypeOfTransaction,
DescriptionOption = command.DescriptionOption DescriptionOption = command.DescriptionOption
}; };
var createTransaction = _financialTransactionApplication.Create(transaction); var createTransaction = _financialTransactionApplication.Create(transaction);
if (createTransaction.IsSuccedded) if (createTransaction.IsSuccedded)
return op.Succcedded(); return op.Succcedded();
return op.Failed("خطا در انجام عملیات"); return op.Failed("خطا در انجام عملیات");
} }
else else
{ {
var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName); var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName);
_financialStatmentRepository.Create(statement); _financialStatmentRepository.Create(statement);
_financialStatmentRepository.SaveChanges(); _financialStatmentRepository.SaveChanges();
@@ -156,15 +153,21 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
Balance = 0, Balance = 0,
TypeOfTransaction = command.TypeOfTransaction, TypeOfTransaction = command.TypeOfTransaction,
DescriptionOption = command.DescriptionOption DescriptionOption = command.DescriptionOption
}; };
var createTransaction = _financialTransactionApplication.Create(transaction); var createTransaction = _financialTransactionApplication.Create(transaction);
if (createTransaction.IsSuccedded) if (createTransaction.IsSuccedded)
return op.Succcedded(); return op.Succcedded();
return op.Failed("خطا در انجام عملیات"); return op.Failed("خطا در انجام عملیات");
} }
} }
public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel) public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel)
{ {
return _financialStatmentRepository.Search(searchModel); return _financialStatmentRepository.Search(searchModel);
@@ -200,45 +203,6 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty( public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
long contractingPartyId, FinancialStatementSearchModel searchModel) long contractingPartyId, FinancialStatementSearchModel searchModel)
{ {
return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId, searchModel); return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId,searchModel);
}
public async Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreatePaymentGateWayAndCreateInvoice(
CreateFinancialPayRequest request, string gateWayCallBackUrl)
{
var op = new OperationResult<CreateSepehrPaymentGatewayResponse>();
// گام 1: دریافت موجودی حساب
var balanceAmount = await GetBalanceAmount(request.Id);
if (balanceAmount.Amount <= 0)
{
return op.Failed("موجودی حساب شما صفر است");
}
// گام 2: ایجاد درگاه پرداخت سپهر
var financialInvoice = await _financialInvoiceRepository
.GetUnPaidFinancialInvoiceByContractingPartyIdAndAmount(balanceAmount.ContractingPartyId,
balanceAmount.Amount);
if (financialInvoice == null)
{
financialInvoice = new FinancialInvoice(balanceAmount.Amount, balanceAmount.ContractingPartyId,
"پرداخت بدهی صورت حساب مالی");
var items = new FinancialInvoiceItem("پرداخت بدهی صورت حساب مالی", balanceAmount.Amount,
financialInvoice.id, FinancialInvoiceItemType.PreviousDebt, 0);
financialInvoice.AddItem(items);
await _financialInvoiceRepository.CreateAsync(financialInvoice);
await _financialInvoiceRepository.SaveChangesAsync();
}
var gatewayResult = await _sepehrPaymentGatewayService.CreateSepehrPaymentGateway(
amount: balanceAmount.Amount,
contractingPartyId: balanceAmount.ContractingPartyId,
frontCallbackUrl: request.BaseUrl,
gatewayCallbackUrl: gateWayCallBackUrl,
financialInvoiceId: financialInvoice.id,
extraData: null);
return gatewayResult;
} }
} }

View File

@@ -1,33 +1,40 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Application.Enums; using _0_Framework.Application.Enums;
using _0_Framework.Application.PaymentGateway; using _0_Framework.Application.PaymentGateway;
using _0_Framework.Application.Sms; using _0_Framework.Application.Sms;
using _0_Framework.Application.UID;
using _0_Framework.Exceptions; using _0_Framework.Exceptions;
using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Account;
using Company.Domain.ContarctingPartyAgg; using Company.Domain.ContarctingPartyAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.empolyerAgg; using Company.Domain.empolyerAgg;
using Company.Domain.FinancialInvoiceAgg; using Company.Domain.FinancialInvoiceAgg;
using Company.Domain.FinancialStatmentAgg; using Company.Domain.FinancialStatmentAgg;
using Company.Domain.FinancialTransactionAgg; using Company.Domain.FinancialTransactionAgg;
using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractAgg;
using Company.Domain.LeftWorkAgg;
using Company.Domain.PaymentTransactionAgg; using Company.Domain.PaymentTransactionAgg;
using Company.Domain.RepresentativeAgg; using Company.Domain.RepresentativeAgg;
using Company.Domain.RollCallServiceAgg; using Company.Domain.RollCallServiceAgg;
using Company.Domain.TemporaryClientRegistrationAgg;
using Company.Domain.WorkshopAgg; using Company.Domain.WorkshopAgg;
using Company.Domain.InstitutionContractSendFlagAgg;
using CompanyManagment.App.Contracts.FinancialInvoice; using CompanyManagment.App.Contracts.FinancialInvoice;
using CompanyManagment.App.Contracts.FinancialStatment; using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.App.Contracts.PaymentTransaction; using CompanyManagment.App.Contracts.PaymentTransaction;
using CompanyManagment.App.Contracts.SepehrPaymentGateway; using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.Workshop; using CompanyManagment.App.Contracts.Workshop;
using Microsoft.Extensions.Logging; using CompanyManagment.EFCore.Migrations;
using Microsoft.AspNetCore.Mvc;
using OfficeOpenXml.Packaging.Ionic.Zip;
using PersianTools.Core; using PersianTools.Core;
using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel; using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel;
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment; using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
@@ -42,48 +49,49 @@ public class InstitutionContractApplication : IInstitutionContractApplication
private readonly IFinancialStatmentApplication _financialStatmentApplication; private readonly IFinancialStatmentApplication _financialStatmentApplication;
private readonly IEmployerRepository _employerRepository; private readonly IEmployerRepository _employerRepository;
private readonly IWorkshopRepository _workshopRepository; private readonly IWorkshopRepository _workshopRepository;
private readonly ILeftWorkRepository _leftWorkRepository;
private readonly IWorkshopApplication _workshopApplication; private readonly IWorkshopApplication _workshopApplication;
private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
private readonly IFinancialStatmentRepository _financialStatmentRepository; private readonly IFinancialStatmentRepository _financialStatmentRepository;
private readonly IContactInfoApplication _contactInfoApplication; private readonly IContactInfoApplication _contactInfoApplication;
private readonly IAccountApplication _accountApplication; private readonly IAccountApplication _accountApplication;
private readonly ISmsService _smsService; private readonly ISmsService _smsService;
private readonly IUidService _uidService;
private readonly IFinancialInvoiceRepository _financialInvoiceRepository; private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
private readonly IPaymentGateway _paymentGateway; private readonly IPaymentGateway _paymentGateway;
private readonly IPaymentTransactionRepository _paymentTransactionRepository; private readonly IPaymentTransactionRepository _paymentTransactionRepository;
private readonly IRollCallServiceRepository _rollCallServiceRepository; private readonly IRollCallServiceRepository _rollCallServiceRepository;
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
private readonly IInstitutionContractSendFlagRepository _institutionContractSendFlagRepository;
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository, public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
IPersonalContractingPartyRepository contractingPartyRepository, IPersonalContractingPartyRepository contractingPartyRepository,
IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository, IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository,
IWorkshopRepository workshopRepository, IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository,
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication, IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication,
IContractingPartyTempRepository contractingPartyTempRepository,
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication, IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, ISmsService smsService, IAccountApplication accountApplication, ISmsService smsService, IUidService uidService,
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory, IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository, IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository)
ISepehrPaymentGatewayService sepehrPaymentGatewayService,ILogger<SepehrPaymentGateway> sepehrGatewayLogger,
IInstitutionContractSendFlagRepository institutionContractSendFlagRepository)
{ {
_institutionContractRepository = institutionContractRepository; _institutionContractRepository = institutionContractRepository;
_contractingPartyRepository = contractingPartyRepository; _contractingPartyRepository = contractingPartyRepository;
_representativeRepository = representativeRepository; _representativeRepository = representativeRepository;
_employerRepository = employerRepository; _employerRepository = employerRepository;
_workshopRepository = workshopRepository; _workshopRepository = workshopRepository;
_leftWorkRepository = leftWorkRepository;
_financialStatmentApplication = financialStatmentApplication; _financialStatmentApplication = financialStatmentApplication;
_workshopApplication = workshopApplication; _workshopApplication = workshopApplication;
_contractingPartyTempRepository = contractingPartyTempRepository;
_financialStatmentRepository = financialStatmentRepository; _financialStatmentRepository = financialStatmentRepository;
_contactInfoApplication = contactInfoApplication; _contactInfoApplication = contactInfoApplication;
_accountApplication = accountApplication; _accountApplication = accountApplication;
_smsService = smsService; _smsService = smsService;
_uidService = uidService;
_financialInvoiceRepository = financialInvoiceRepository; _financialInvoiceRepository = financialInvoiceRepository;
_paymentTransactionRepository = paymentTransactionRepository; _paymentTransactionRepository = paymentTransactionRepository;
_rollCallServiceRepository = rollCallServiceRepository; _rollCallServiceRepository = rollCallServiceRepository;
_sepehrPaymentGatewayService = sepehrPaymentGatewayService; _paymentGateway = new SepehrPaymentGateway(httpClientFactory);
_paymentGateway = new SepehrPaymentGateway(httpClientFactory,sepehrGatewayLogger);
_institutionContractSendFlagRepository = institutionContractSendFlagRepository;
} }
public OperationResult Create(CreateInstitutionContract command) public OperationResult Create(CreateInstitutionContract command)
@@ -809,11 +817,20 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
if (contractingParty != null) if (contractingParty != null)
{ {
var accountsDeActiveRes = _contractingPartyRepository.DeActiveAllAsync(contractingParty.id) contractingParty.DeActive();
.GetAwaiter().GetResult(); _contractingPartyRepository.SaveChanges();
var employers =
if (!accountsDeActiveRes.IsSuccedded) _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
return opration.Failed(accountsDeActiveRes.Message); //var employersIdList = employers.Select(x => x.Id).ToList();
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
//foreach (var workshop in workshops)
//{
// var res = _workshopApplication.DeActive(workshop.Id);
//}
foreach (var employer in employers)
{
var res = _employerRepository.DeActiveAll(employer.Id);
}
} }
return opration.Succcedded(); return opration.Succcedded();
@@ -830,10 +847,20 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
if (contractingParty != null) if (contractingParty != null)
{ {
var activeRes = _contractingPartyRepository.ActiveAllAsync(contractingParty.id).GetAwaiter() contractingParty.Active();
.GetResult(); _contractingPartyRepository.SaveChanges();
if (!activeRes.IsSuccedded) var employers =
return opration.Failed(activeRes.Message); _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
//var employersIdList = employers.Select(x => x.Id).ToList();
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
//foreach (var workshop in workshops)
//{
// var res = _workshopApplication.DeActive(workshop.Id);
//}
foreach (var employer in employers)
{
var res = _employerRepository.ActiveAll(employer.Id);
}
} }
return opration.Succcedded(); return opration.Succcedded();
@@ -898,7 +925,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return opration.Succcedded(); return opration.Succcedded();
} }
public void CreateContractingPartyAccount(long contractingPartyid, long accountId) public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
{ {
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId); _institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
@@ -1268,87 +1294,119 @@ public class InstitutionContractApplication : IInstitutionContractApplication
if (contractingParty == null) if (contractingParty == null)
throw new NotFoundException("طرف قرارداد یافت نشد"); throw new NotFoundException("طرف قرارداد یافت نشد");
if (institutionContract.VerifyCode != code) if (institutionContract.VerifyCode != code)
return op.Failed("کد وارد شده صحیح نمی باشد"); return op.Failed("کد وارد شده صحیح نمی باشد");
var financialStatement = await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id); var financialStatement =await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id);
var dbTransaction = await _institutionContractRepository.BeginTransactionAsync(); var dbTransaction = await _institutionContractRepository.BeginTransactionAsync();
FinancialInvoice financialInvoice; FinancialInvoice financialInvoice;
FinancialInvoiceItem financialInvoiceItem; FinancialInvoiceItem financialInvoiceItem;
var today = DateTime.Today; var today = DateTime.Today;
double invoiceAmount = 0; double invoiceAmount = 0;
string invoiceItemDescription = string.Empty; string invoiceItemDescription = string.Empty;
FinancialInvoiceItemType invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract; FinancialInvoiceItemType invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
long invoiceItemEntityId = 0; long invoiceItemEntityId = 0;
if (institutionContract.IsInstallment) if (institutionContract.IsInstallment)
{ {
var firstInstallment = institutionContract.Installments.First(); var firstInstallment = institutionContract.Installments.First();
var firstInstallmentAmount = firstInstallment.Amount; var firstInstallmentAmount = firstInstallment.Amount;
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(firstInstallment.Id, FinancialInvoiceItemType.BuyInstitutionContractInstallment); financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(firstInstallment.Id, FinancialInvoiceItemType.BuyInstitutionContractInstallment);
if (financialInvoice == null) if (financialInvoice == null)
{ {
invoiceAmount = firstInstallmentAmount; var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
invoiceItemDescription = $"پرداخت قسط اول قرارداد شماره {institutionContract.ContractNo}"; "قسط اول سرویس", "debt", "بابت خدمات", firstInstallmentAmount, 0, 0);
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContractInstallment; financialStatement.AddFinancialTransaction(financialTransaction);
invoiceItemEntityId = firstInstallment.Id; invoiceAmount = firstInstallmentAmount;
} invoiceItemDescription = $"پرداخت قسط اول قرارداد شماره {institutionContract.ContractNo}";
else invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContractInstallment;
{ invoiceItemEntityId = firstInstallment.Id;
invoiceAmount = financialInvoice.Amount; }
invoiceItemDescription = financialInvoice.Items.First().Description; else
invoiceItemType = financialInvoice.Items.First().Type; {
invoiceItemEntityId = financialInvoice.Items.First().EntityId; invoiceAmount = financialInvoice.Amount;
} invoiceItemDescription = financialInvoice.Items.First().Description;
} invoiceItemType = financialInvoice.Items.First().Type;
else invoiceItemEntityId = financialInvoice.Items.First().EntityId;
{ }
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(institutionContract.id, FinancialInvoiceItemType.BuyInstitutionContract); }
if (financialInvoice == null) else
{ {
invoiceAmount = institutionContract.TotalAmount; financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(institutionContract.id, FinancialInvoiceItemType.BuyInstitutionContract);
invoiceItemDescription = $"پرداخت کل قرارداد شماره {institutionContract.ContractNo}"; if (financialInvoice == null)
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract; {
invoiceItemEntityId = institutionContract.id; var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
} "پرداخت کل سرویس", "debt", "بابت خدمات", institutionContract.TotalAmount, 0, 0);
else financialStatement.AddFinancialTransaction(financialTransaction);
{ invoiceAmount = institutionContract.TotalAmount;
invoiceAmount = financialInvoice.Amount; invoiceItemDescription = $"پرداخت کل قرارداد شماره {institutionContract.ContractNo}";
invoiceItemDescription = financialInvoice.Items.First().Description; invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
invoiceItemType = financialInvoice.Items.First().Type; invoiceItemEntityId = institutionContract.id;
invoiceItemEntityId = financialInvoice.Items.First().EntityId; }
} else
} {
invoiceAmount = financialInvoice.Amount;
invoiceItemDescription = financialInvoice.Items.First().Description;
invoiceItemType = financialInvoice.Items.First().Type;
invoiceItemEntityId = financialInvoice.Items.First().EntityId;
}
}
if (financialInvoice == null) if (financialInvoice == null)
{ {
financialInvoice = new FinancialInvoice(invoiceAmount, contractingParty.id, $"خرید قرارداد مالی شماره {institutionContract.ContractNo}"); financialInvoice = new FinancialInvoice(invoiceAmount, contractingParty.id, $"خرید قرارداد مالی شماره {institutionContract.ContractNo}");
financialInvoiceItem = new FinancialInvoiceItem(invoiceItemDescription, invoiceAmount, 0, invoiceItemType, invoiceItemEntityId); financialInvoiceItem = new FinancialInvoiceItem(invoiceItemDescription, invoiceAmount, 0, invoiceItemType, invoiceItemEntityId);
financialInvoice.AddItem(financialInvoiceItem); financialInvoice.AddItem(financialInvoiceItem);
await _financialInvoiceRepository.CreateAsync(financialInvoice); await _financialInvoiceRepository.CreateAsync(financialInvoice);
} }
await _financialInvoiceRepository.SaveChangesAsync(); await _financialInvoiceRepository.SaveChangesAsync();
// استفاده از سرویس مشترک برای ایجاد درگاه پرداخت var transaction = new PaymentTransaction(institutionContract.ContractingPartyId, invoiceAmount,
var gatewayResult = await _sepehrPaymentGatewayService.CreateSepehrPaymentGateway( institutionContract.ContractingPartyName, "https://client.gozareshgir.ir",
amount: (long)invoiceAmount, PaymentTransactionGateWay.SepehrPay);
contractingPartyId: institutionContract.ContractingPartyId, await _paymentTransactionRepository.CreateAsync(transaction);
gatewayCallbackUrl: callbackUrl, await _financialInvoiceRepository.SaveChangesAsync();
financialInvoiceId: financialInvoice.id,
extraData: null);
if (!gatewayResult.IsSuccedded) var createPayment = new CreatePaymentGatewayRequest()
{ {
await dbTransaction.RollbackAsync(); Amount = invoiceAmount,
return op.Failed(gatewayResult.Message); TransactionId = transaction.id.ToString(),
} CallBackUrl = callbackUrl,
FinancialInvoiceId = financialInvoice.id,
};
var gatewayResponse = await _paymentGateway.Create(createPayment);
if (!gatewayResponse.IsSuccess)
return op.Failed("خطا در ایجاد درگاه پرداخت: " + gatewayResponse.Message + gatewayResponse.ErrorCode);
// institutionContract.SetPendingWorkflow();
//
// var phone = institutionContract.ContactInfoList.FirstOrDefault(x =>
// x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
// if (phone !=null)
// {
// var userPass = contractingParty.IsLegal == "حقیقی"
// ? contractingParty.Nationalcode
// : contractingParty.NationalId;
// var createAcc = new RegisterAccount
// {
// Fullname = contractingParty.LName,
// Username = userPass,
// Password = userPass,
// Mobile = phone.PhoneNumber,
// NationalCode = userPass
// };
// var res = _accountApplication.RegisterClient(createAcc);
// if (res.IsSuccedded)
// CreateContractingPartyAccount(contractingParty.id, res.SendId);
// }
await dbTransaction.CommitAsync(); await dbTransaction.CommitAsync();
await _institutionContractRepository.SaveChangesAsync(); await _institutionContractRepository.SaveChangesAsync();
return op.Succcedded(gatewayResult.Data.Token); return op.Succcedded(gatewayResponse.Token);
} }
public async Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId) public async Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId)
@@ -1386,22 +1444,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return _institutionContractRepository.ResetDiscountCreate(request); return _institutionContractRepository.ResetDiscountCreate(request);
} }
public Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request)
{
return _institutionContractRepository.CreationInquiry(request);
}
public Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request)
{
return _institutionContractRepository.GetCreationWorkshops(request);
}
public Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request)
{
return _institutionContractRepository.GetCreationInstitutionPlan(request);
}
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId) public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
{ {
return await _institutionContractRepository.GetExtensionInquiry(previousContractId); return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
@@ -1592,11 +1634,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
return op.Failed("قرارداد مالی قبلا تایید شده است"); return op.Failed("قرارداد مالی قبلا تایید شده است");
if (!institutionContract.WorkshopGroup.IsInPersonContract)
{
return op.Failed("قرارداد مالی غیر حضوری نمی تواند به صورت دستی تایید شود");
}
var transaction = await _institutionContractRepository.BeginTransactionAsync(); var transaction = await _institutionContractRepository.BeginTransactionAsync();
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical); await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);
@@ -1620,28 +1657,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return op.Succcedded(); return op.Succcedded();
} }
public Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request)
{
return _institutionContractRepository.GetCreationPaymentMethod(request);
}
public Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request)
{
return _institutionContractRepository.SetDiscountForCreation(request);
}
public Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request)
{
return _institutionContractRepository.ResetDiscountForCreation(request);
}
public Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request)
{
return _institutionContractRepository.CreationComplete(request);
}
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity( private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
string state) string state)
@@ -1825,60 +1840,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
installments.Add(lastInstallment); installments.Add(lastInstallment);
return installments; return installments;
} }
} }
/// <summary>
/// تعیین فلگ ارسال قرارداد
/// اگر فلگ وجود نداشتن‌د ایجاد می‌کند
/// </summary>
public async Task<OperationResult> SetContractSendFlag(SetInstitutionContractSendFlagRequest request)
{
var operationResult = new OperationResult();
try
{
// بازیابی قرارداد از SQL
var contract = _institutionContractRepository.Get(request.InstitutionContractId);
if (contract == null)
return operationResult.Failed("قرارداد مورد نظر یافت نشد");
// بررسی اینکه آیا فلگ در MongoDB وجود دارد
var existingFlag = await _institutionContractSendFlagRepository
.GetByContractId(request.InstitutionContractId);
if (existingFlag != null)
{
// اگر فلگ وجود داشتن‌د، آن را اپدیت کنیم
if (request.IsSent)
{
existingFlag.MarkAsSent();
}
else
{
existingFlag.MarkAsNotSent();
}
existingFlag.UpdateLastModified();
await _institutionContractSendFlagRepository.Update(existingFlag);
}
else
{
// اگر فلگ وجود ندارد، آن را ایجاد کنیم
var newFlag = new InstitutionContractSendFlag(
request.InstitutionContractId,
request.IsSent
);
await _institutionContractSendFlagRepository.Create(newFlag);
}
return operationResult.Succcedded();
}
catch (Exception ex)
{
return operationResult.Failed($"خطا در تعیین فلگ ارسال: {ex.Message}");
}
}
} }
#region CustomViewModels #region CustomViewModels

View File

@@ -2381,10 +2381,5 @@ public class InsuranceListApplication : IInsuranceListApplication
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel); return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
} }
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
{
return await _insuranceListRepositpry.ClientPrintOne(id);
}
#endregion #endregion
} }

View File

@@ -1,239 +0,0 @@
using _0_Framework.Application;
using Company.Domain.PaymentTransactionAgg;
using CompanyManagment.App.Contracts.FinancialInvoice;
using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.PaymentCallback;
using CompanyManagment.App.Contracts.PaymentTransaction;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Transactions;
using _0_Framework.Application.PaymentGateway;
using Company.Domain.FinancialStatmentAgg;
using Company.Domain.FinancialTransactionAgg;
using Company.Domain.InstitutionContractAgg;
using CompanyManagment.EFCore.Migrations;
using Microsoft.Extensions.Logging;
namespace CompanyManagment.Application;
public class PaymentCallbackHandler : IPaymentCallbackHandler
{
private readonly IPaymentTransactionApplication _paymentTransactionApplication;
private readonly IFinancialStatmentApplication _financialStatmentApplication;
private readonly IFinancialStatmentRepository _financialStatmentRepository;
private readonly IFinancialInvoiceApplication _financialInvoiceApplication;
private readonly IInstitutionContractApplication _institutionContractApplication;
private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly IPaymentGateway _paymentGateway;
public PaymentCallbackHandler(
IPaymentTransactionApplication paymentTransactionApplication,
IFinancialStatmentApplication financialStatmentApplication,
IFinancialInvoiceApplication financialInvoiceApplication,
IInstitutionContractApplication institutionContractApplication,
IHttpClientFactory httpClientFactory, IInstitutionContractRepository institutionContractRepository,
IFinancialStatmentRepository financialStatmentRepository,
ILogger<SepehrPaymentGateway> sepehrGatewayLogger)
{
_paymentTransactionApplication = paymentTransactionApplication;
_financialStatmentApplication = financialStatmentApplication;
_financialInvoiceApplication = financialInvoiceApplication;
_institutionContractApplication = institutionContractApplication;
_institutionContractRepository = institutionContractRepository;
_financialStatmentRepository = financialStatmentRepository;
_paymentGateway = new SepehrPaymentGateway(httpClientFactory, sepehrGatewayLogger);
}
/// <summary>
/// تأیید و پردازش callback درگاه پرداخت سپهر
/// </summary>
public async Task<OperationResult> VerifySepehrPaymentCallback(VerifyPaymentCallbackCommand command,
CancellationToken cancellationToken = default)
{
var operation = new OperationResult();
try
{
await using var transactionScope =await _financialStatmentRepository.BeginTransactionAsync();
// گام 1: دریافت اطلاعات تراکنش
var transaction = await _paymentTransactionApplication.GetDetails(command.InvoiceId);
if (transaction == null)
return operation.Failed("تراکنش مورد نظر یافت نشد");
// گام 2: بررسی وضعیت قبلی تراکنش
if (transaction.Status != PaymentTransactionStatus.Pending)
return operation.Failed("این تراکنش قبلا پرداخت شده است");
// گام 3: بررسی کد پاسخ درگاه
if (command.ResponseCode != 0)
{
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
return failResult.IsSuccedded
? operation.Failed("تراکنش توسط درگاه رد شد")
: operation.Failed("خطا در به‌روزرسانی وضعیت تراکنش");
}
// گام 4: استخراج اطلاعات فاکتور مالی
var extraData = JsonConvert.DeserializeObject<IDictionary<string, object>>(command.Payload ?? "{}");
extraData.TryGetValue("financialInvoiceId", out var financialInvoiceIdObj);
if (financialInvoiceIdObj == null ||
!long.TryParse(financialInvoiceIdObj.ToString(), out var financialInvoiceId))
return operation.Failed("فاکتور مالی نامعتبر است");
// گام 5: دریافت اطلاعات فاکتور مالی
var financialInvoice = _financialInvoiceApplication.GetDetails(financialInvoiceId);
if (financialInvoice == null)
return operation.Failed("فاکتور مالی نامعتبر است");
if (financialInvoice.Status != FinancialInvoiceStatus.Unpaid)
return operation.Failed("فاکتور مالی نامعتبر است");
// گام 6: بررسی تطابق مبلغ
if ((long)financialInvoice.Amount != command.Amount)
{
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
return operation.Failed("مبلغ تراکنش با مبلغ فاکتور مطابقت ندارد");
}
// گام 7: به‌روزرسانی فاکتور مالی
var setPaidResult = _financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
if (!setPaidResult.IsSuccedded)
{
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
return operation.Failed("خطا در به‌روزرسانی فاکتور مالی");
}
// گام 8: به‌روزرسانی وضعیت تراکنش
var setSuccessResult = _paymentTransactionApplication.SetSuccess(
command.InvoiceId,
command.CardNumber,
command.IssuerBank,
command.Rrn.ToString(),
command.DigitalReceipt);
if (!setSuccessResult.IsSuccedded)
{
return operation.Failed("خطا در به‌روزرسانی وضعیت تراکنش");
}
// گام 9: به‌روزرسانی وضعیت قرارداد‌های نهادی (اگر وجود داشته باشند)
var institutionContractItems = financialInvoice.Items.Where(x =>
x.Type is FinancialInvoiceItemType.BuyInstitutionContract
or FinancialInvoiceItemType.BuyInstitutionContractInstallment).ToList();
if (institutionContractItems.Any())
{
await HandleInstitutionContractItems(financialInvoice);
}
// گام 10: ایجاد سند مالی (Financial Statement)
var createCreditStatementCommand = new CreateFinancialStatment()
{
ContractingPartyId = transaction.ContractingPartyId,
Deptor = 0,
Creditor = command.Amount,
DeptorString = "0",
TypeOfTransaction = "credit",
DescriptionOption = (financialInvoice.Description ?? "") + " شماره فاکتور: " +
(financialInvoice.InvoiceNumber ?? ""),
Description = "درگاه بانکی",
};
var statementResult = _financialStatmentApplication.CreateFromBankGateway(createCreditStatementCommand);
if (!statementResult.IsSuccedded)
{
_paymentTransactionApplication.SetFailed(command.InvoiceId);
return operation.Failed("خطا در ایجاد سند مالی");
}
// گام 11: تأیید نهایی با درگاه پرداخت
var verifyCommand = new VerifyPaymentGateWayRequest()
{
Amount = transaction.Amount,
TransactionId = command.InvoiceId.ToString(),
DigitalReceipt = command.DigitalReceipt
};
var verifyRes = await _paymentGateway.Verify(verifyCommand, cancellationToken);
#if DEBUG
verifyRes.IsSuccess = true;
#endif
if (!verifyRes.IsSuccess)
{
return operation.Failed("خطا در تایید پرداخت از درگاه");
}
// تمام عملیات موفق - تایید transaction
await transactionScope.CommitAsync(cancellationToken);
return operation.Succcedded();
}
catch (Exception ex)
{
// در صورت بروز هرگونه خطا، transaction خودکار rollback می‌شود
return operation.Failed($"خطا در پردازش callback: {ex.Message}");
}
}
/// <summary>
/// مدیریت آپدیت قرارداد‌های نهادی
/// </summary>
private async Task HandleInstitutionContractItems(EditFinancialInvoice financialInvoice)
{
// قرارداد‌های خریداری مستقیم
var directContractItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
var financialStatement =
await _financialStatmentRepository.GetByContractingPartyId(financialInvoice.ContractingPartyId);
var today = DateTime.Now;
foreach (var item in directContractItems)
{
var institutionContract = _institutionContractRepository.Get(item.EntityId);
await _institutionContractApplication.SetPendingWorkflow(item.EntityId,
InstitutionContractSigningType.OtpBased);
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
"پرداخت کل سرویس", "debt", "بابت خدمات", institutionContract.TotalAmount, 0, 0);
financialStatement.AddFinancialTransaction(financialTransaction);
}
// قرارداد‌های خریداری با اقساط
var installmentItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
foreach (var item in installmentItems)
{
var institutionContractId =await _institutionContractRepository.GetIdByInstallmentId(item.EntityId);
var institutionContract = _institutionContractRepository.Get(institutionContractId);
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,
InstitutionContractSigningType.OtpBased);
var firstInstallment = institutionContract.Installments.First();
var firstInstallmentAmount = firstInstallment.Amount;
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
"قسط اول سرویس", "debt", "بابت خدمات", firstInstallmentAmount, 0, 0);
financialStatement.AddFinancialTransaction(financialTransaction);
}
await _financialStatmentRepository.SaveChangesAsync();
}
}

View File

@@ -722,11 +722,5 @@ public class PersonalContractingPartyApplication : IPersonalContractingPartyApp
return await _personalContractingPartyRepository.GetLegalDetails(id); return await _personalContractingPartyRepository.GetLegalDetails(id);
} }
public async Task<long> GetRepresentativeIdByNationalCode(string nationalCode)
{
var entity = await _personalContractingPartyRepository.GetByNationalCode(nationalCode);
return entity?.RepresentativeId??0;
}
#endregion #endregion
} }

View File

@@ -1,119 +0,0 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.PaymentGateway;
using CompanyManagment.App.Contracts.PaymentTransaction;
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
using Microsoft.Extensions.Logging;
namespace CompanyManagment.Application;
/// <summary>
/// سرویس مشترک برای ایجاد درگاه پرداخت سپهر
/// </summary>
public class SepehrPaymentGatewayService : ISepehrPaymentGatewayService
{
private readonly IPaymentGateway _paymentGateway;
private readonly IPaymentTransactionApplication _paymentTransactionApplication;
public SepehrPaymentGatewayService(
IPaymentTransactionApplication paymentTransactionApplication,
IHttpClientFactory httpClientFactory,
ILogger<SepehrPaymentGateway> sepehrGatewayLogger)
{
_paymentGateway = new SepehrPaymentGateway(httpClientFactory, sepehrGatewayLogger);
_paymentTransactionApplication = paymentTransactionApplication;
}
/// <summary>
/// ایجاد درگاه پرداخت سپهر برای یک تراکنش
/// </summary>
/// <param name="amount">مبلغ</param>
/// <param name="contractingPartyId">شناسه طرف قرارداد</param>
/// <param name="frontCallbackUrl">آدرس بازگشتی به فرانت برای نمایش نتیجه</param>
/// <param name="gatewayCallbackUrl">آدرس بازگشتی درگاه پرداخت</param>
/// <param name="financialInvoiceId">شناسه فاکتور مالی (اختیاری)</param>
/// <param name="extraData">داده‌های اضافی (اختیاری)</param>
/// <param name="cancellationToken">توکن لغو</param>
/// <returns>شامل Token درگاه یا OperationResult با خطا</returns>
public async Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreateSepehrPaymentGateway(
double amount,
long contractingPartyId,
long financialInvoiceId,
string gatewayCallbackUrl,
string frontCallbackUrl="https://client.gozareshgir.ir",
Dictionary<string, object> extraData = null,
CancellationToken cancellationToken = default)
{
var op = new OperationResult<CreateSepehrPaymentGatewayResponse>();
try
{
// گام 1: ایجاد تراکنش پرداخت
var transactionCommand = new CreatePaymentTransaction()
{
Amount = amount,
ContractingPartyId = contractingPartyId,
CallBackUrl = frontCallbackUrl,
Gateway = PaymentTransactionGateWay.SepehrPay
};
var transactionResult = await _paymentTransactionApplication.Create(transactionCommand);
if (!transactionResult.IsSuccedded)
{
return op.Failed(transactionResult.Message);
}
// گام 2: ایجاد درخواست درگاه پرداخت
extraData ??= new Dictionary<string, object>();
var createPaymentCommand = new CreatePaymentGatewayRequest()
{
Amount = amount,
TransactionId = transactionResult.SendId.ToString(),
CallBackUrl = gatewayCallbackUrl,
FinancialInvoiceId = financialInvoiceId,
ExtraData = extraData
};
// گام 3: ارسال درخواست به درگاه سپهر
var gatewayResponse = await _paymentGateway.Create(createPaymentCommand, cancellationToken);
#if DEBUG
gatewayResponse.IsSuccess = true;
#endif
if (!gatewayResponse.IsSuccess)
{
return op.Failed($"خطا در ایجاد درگاه پرداخت: {gatewayResponse.Message ?? gatewayResponse.ErrorCode?.ToString()}");
}
// گام 4: ذخیره Token در تراکنش
var setTokenResult = await _paymentTransactionApplication.SetTransactionId(
transactionResult.SendId,
gatewayResponse.Token);
if (!setTokenResult.IsSuccedded)
{
return op.Failed("خطا در ذخیره Token درگاه");
}
// گام 5: بازگشت اطلاعات درگاه پرداخت
var response = new CreateSepehrPaymentGatewayResponse
{
Token = gatewayResponse.Token,
TransactionId = transactionResult.SendId,
PaymentUrl = _paymentGateway.GetStartPayUrl(gatewayResponse.Token)
};
return op.Succcedded(response);
}
catch (Exception ex)
{
return op.Failed($"خطا در ایجاد درگاه پرداخت: {ex.Message}");
}
}
}

View File

@@ -1,10 +1,8 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using Company.Domain.SmsResultAgg; using Company.Domain.SmsResultAgg;
using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.App.Contracts.SmsResult.Dto;
namespace CompanyManagment.Application; namespace CompanyManagment.Application;
@@ -17,23 +15,6 @@ public class SmsResultApplication : ISmsResultApplication
_smsResultRepository = smsResultRepository; _smsResultRepository = smsResultRepository;
} }
#region ForApi
public async Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel)
{
return await _smsResultRepository.GetSmsReportList(searchModel);
}
public async Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date)
{
return await _smsResultRepository.GetSmsReportExpandList(searchModel, date);
}
#endregion
public OperationResult Create(CreateSmsResult command) public OperationResult Create(CreateSmsResult command)
{ {
var op = new OperationResult(); var op = new OperationResult();

View File

@@ -1,14 +1,13 @@
using _0_Framework.Application; using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Enums; using _0_Framework.Application.Enums;
using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractAgg;
using Company.Domain.SmsResultAgg; using Company.Domain.SmsResultAgg;
using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.EFCore.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace CompanyManagment.Application; namespace CompanyManagment.Application;
@@ -16,13 +15,11 @@ public class SmsSettingApplication : ISmsSettingApplication
{ {
private readonly ISmsSettingsRepository _smsSettingsRepository; private readonly ISmsSettingsRepository _smsSettingsRepository;
private readonly IInstitutionContractRepository _institutionContractRepository; private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository) public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository)
{ {
_smsSettingsRepository = smsSettingsRepository; _smsSettingsRepository = smsSettingsRepository;
_institutionContractRepository = institutionContractRepository; _institutionContractRepository = institutionContractRepository;
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
} }
@@ -119,12 +116,12 @@ public class SmsSettingApplication : ISmsSettingApplication
public async Task<List<SmsListData>> GetSmsListData(TypeOfSmsSetting typeOfSmsSetting) public async Task<List<SmsListData>> GetSmsListData(TypeOfSmsSetting typeOfSmsSetting)
{ {
return await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting); return await _institutionContractRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting);
} }
public async Task<List<BlockSmsListData>> GetBlockSmsListData(TypeOfSmsSetting typeOfSmsSetting) public async Task<List<BlockSmsListData>> GetBlockSmsListData(TypeOfSmsSetting typeOfSmsSetting)
{ {
return await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now); return await _institutionContractRepository.GetBlockListData(DateTime.Now);
} }
@@ -137,7 +134,7 @@ public class SmsSettingApplication : ISmsSettingApplication
if (command.Any()) if (command.Any())
{ {
await _institutionContractSmsServiceRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd); await _institutionContractRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd);
return op.Succcedded(); return op.Succcedded();
} }
else else
@@ -156,7 +153,7 @@ public class SmsSettingApplication : ISmsSettingApplication
string sendMessEnd = "پایان مسدودی آنی "; string sendMessEnd = "پایان مسدودی آنی ";
if (command.Any()) if (command.Any())
{ {
await _institutionContractSmsServiceRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart, await _institutionContractRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart,
sendMessEnd); sendMessEnd);
return op.Succcedded(); return op.Succcedded();
} }

View File

@@ -12,6 +12,7 @@ using Company.Domain.LeftWorkAgg;
using Company.Domain.LeftWorkInsuranceAgg; using Company.Domain.LeftWorkInsuranceAgg;
using Company.Domain.WorkshopAgg; using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.Employee; using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.EmployeeChildren; using CompanyManagment.App.Contracts.EmployeeChildren;
using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.RollCallService; using CompanyManagment.App.Contracts.RollCallService;
@@ -407,10 +408,6 @@ public class WorkshopAppliction : IWorkshopApplication
public EditWorkshop GetDetails(long id) public EditWorkshop GetDetails(long id)
{ {
var workshop = _workshopRepository.GetDetails(id); var workshop = _workshopRepository.GetDetails(id);
if (workshop == null)
{
return null;
}
if (workshop.IsClassified) if (workshop.IsClassified)
{ {
workshop.CreatePlan = _workshopPlanApplication.GetWorkshopPlanByWorkshopId(id); workshop.CreatePlan = _workshopPlanApplication.GetWorkshopPlanByWorkshopId(id);
@@ -1130,5 +1127,6 @@ public class WorkshopAppliction : IWorkshopApplication
return operation.Succcedded(); return operation.Succcedded();
} }
#endregion #endregion
} }

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,6 @@ using System.Globalization;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Application.Enums;
using _0_Framework.Exceptions;
using _0_Framework.InfraStructure; using _0_Framework.InfraStructure;
using Company.Domain.ContractAgg; using Company.Domain.ContractAgg;
using Company.Domain.empolyerAgg; using Company.Domain.empolyerAgg;
@@ -1083,7 +1081,30 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
var weeklyDouble = 0.0; var weeklyDouble = 0.0;
var weekly = c.WorkingHoursWeekly; var weekly = c.WorkingHoursWeekly;
c.WorkingHoursWeekly = WeeklyHourConvertor(weekly); if (!string.IsNullOrWhiteSpace(weekly) &&
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
{
if (weekly.Contains("/"))
{
weeklyDouble = double.Parse(weekly);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else if (weekly.Contains("."))
{
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else
{
c.WorkingHoursWeekly = c.WorkingHoursWeekly + " " + "ساعت";
}
}
var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds) var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds)
.Select(x => x.EmployerId).ToList(); .Select(x => x.EmployerId).ToList();
c.Employers = _employerRepository.GetEmployers(emp); c.Employers = _employerRepository.GetEmployers(emp);
@@ -1140,37 +1161,6 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
return query; return query;
} }
private static string WeeklyHourConvertor(string weekly)
{
double weeklyDouble;
if (!string.IsNullOrWhiteSpace(weekly) &&
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
{
if (weekly.Contains("/"))
{
weeklyDouble = double.Parse(weekly);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else if (weekly.Contains("."))
{
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
var minute = (int)((weeklyDouble % 1) * 60);
var hour = (int)(weeklyDouble);
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
}
else
{
return weekly + " " + "ساعت";
}
}
return "";
}
public IQueryable<WorkshopEmployerViewModel> GetWorkshopEmployer() public IQueryable<WorkshopEmployerViewModel> GetWorkshopEmployer()
{ {
return _context.WorkshopEmployers.Select(x => new WorkshopEmployerViewModel return _context.WorkshopEmployers.Select(x => new WorkshopEmployerViewModel
@@ -1516,195 +1506,6 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
} }
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
{
var workshopId = _authHelper.GetWorkshopId();
var query = _context.Contracts
.Where(c => c.WorkshopIds == workshopId);
#region Search
if (searchModel.EmployeeId > 0)
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))
{
if (!searchModel.StartDate.TryToGeorgianDateTime(out var startDate))
throw new BadRequestException("تاریخ شروع وارد شده معتبر نمی باشد.");
if (!searchModel.EndDate.TryToGeorgianDateTime(out var endDate))
throw new BadRequestException("تاریخ پایان وارد شده معتبر نمی باشد.");
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
}
if (searchModel.Year>0 && searchModel.Month >0)
{
var startDateFa = $"{searchModel.Year:0000}/{searchModel.Month:00}/01";
if (!startDateFa.TryToGeorgianDateTime(out var startDate))
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
if(!startDateFa.FindeEndOfMonth().TryToGeorgianDateTime(out var endDate))
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
}
if (searchModel.OrderType != null)
{
switch (searchModel.OrderType)
{
case ContractListOrderType.ByContractCreationDate:
query = query.OrderBy(x => x.CreationDate);
break;
case ContractListOrderType.ByContractStartDate:
query = query.OrderBy(x => x.ContarctStart);
break;
case ContractListOrderType.ByContractStartDateDescending:
query = query.OrderByDescending(x=>x.ContarctStart);
break;
case ContractListOrderType.ByPersonnelCode:
query = query.OrderBy(x => x.PersonnelCode);
break;
case ContractListOrderType.ByPersonnelCodeDescending:
query = query.OrderByDescending(x => x.PersonnelCode);
break;
case ContractListOrderType.BySignedContract:
query = query.OrderByDescending(x => x.Signature == "1");
break;
case ContractListOrderType.ByUnSignedContract:
query = query.OrderBy(x => x.Signature == "1");
break;
}
}
else
{
query = query.OrderByDescending(x => x.id);
}
#endregion
var pagedList =await query
.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var employeeIds = pagedList.Select(x => x.EmployeeId).ToList();
var employees = await _context.Employees
.Where(x => employeeIds.Contains(x.id)).Select(x => new
{
Id = x.id,
x.FullName
}).ToListAsync();
var result = new PagedResult<GetContractListForClientResponse>
{
TotalCount = await query.CountAsync(),
List = pagedList.Select(c =>
{
var employeeFullName = employees
.FirstOrDefault(e => e.Id == c.EmployeeId)?.FullName ?? "";
return new GetContractListForClientResponse
{
Id = c.id,
PersonnelCode = c.PersonnelCode.ToString(),
ContractStart = c.ContarctStart.ToFarsi(),
ContractEnd = c.ContractEnd.ToFarsi(),
ContractNo = c.ContractNo,
IsSigned = c.Signature == "1",
EmployeeFullName = employeeFullName,
AvgWorkingHour = WeeklyHourConvertor(c.WorkingHoursWeekly),
DailyWage = c.DayliWage,
FamilyAllowance = c.FamilyAllowance
};
}).ToList()
};
return result;
}
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
{
var query =await _context.Contracts.Include(x => x.Employer)
.Include(x => x.Employee).Where(x => ids.Contains(x.id))
.ToListAsync();
var workshopIds = query.Select(x => x.WorkshopIds).Distinct().ToList();
var workshops = await _context.Workshops
.Where(x => workshopIds.Contains(x.id))
.ToListAsync();
List<long> exceptionWorkshops = [516,63,38,39];
var res = query.Select(x =>
{
var workshop = workshops.FirstOrDefault(w => w.id == x.WorkshopIds);
var employerRes = new ContractPrintEmployerViewModel()
{
WorkshopName = workshop!.WorkshopName,
Address =$"{workshop.State} - {workshop.City} - {workshop.Address}",
LegalType = x.Employer.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal,
LegalEmployer = x.Employer.IsLegal == "حقیقی"
? null
: new ContractPrintLegalEmployerViewModel()
{
NationalId = x.Employer.NationalId,
RegisterId = x.Employer.RegisterId,
CompanyName = x.Employer.LName,
},
RealEmployer = x.Employer.IsLegal == "حقیقی"
? new ContractPrintRealEmployerViewModel()
{
FullName = x.Employer.FullName,
IdNumber = x.Employer.IdNumber,
NationalCode = x.Employer.Nationalcode
}
: null,
WorkshopCode = workshop.InsuranceCode
};
var employeeRes = new ContractPrintEmployeeViewModel()
{
Address =$"{x.Employee.State} - {x.Employee.City} - {x.Employee.Address}" ,
FullName = x.Employee.FullName,
IdNumber = x.Employee.IdNumber,
NationalCode = x.Employee.NationalCode,
DateOfBirth = x.Employee.DateOfBirth.ToFarsi(),
FatherName = x.Employee.FatherName,
LevelOfEducation = x.Employee.LevelOfEducation
};
var typeOfContract = new ContractPrintTypeOfContractViewModel()
{
ContarctStart = x.ContarctStart.ToFarsi(),
ContractEnd = x.ContractEnd.ToFarsi(),
JobName = x.JobType,
ContractType = x.ContractType,
SetContractDate = x.SetContractDate.ToFarsi(),
WorkingHoursWeekly = WeeklyHourConvertor(x.WorkingHoursWeekly),
WorkshopAddress = [x.WorkshopAddress1, x.WorkshopAddress2],
};
ContractPrintFeesViewModel fees= new ContractPrintFeesViewModel()
{
DailyWage = x.DayliWage,
FamilyAllowance = x.FamilyAllowance,
HousingAllowance = x.HousingAllowance,
ConsumableItems = x.ConsumableItems,
};
return new ContractPrintViewModel()
{
Employer = employerRes,
Employee = employeeRes,
TypeOfContract = typeOfContract,
Fees = fees,
ContractNo = x.ContractNo,
ConditionAndDetials = exceptionWorkshops.Contains(x.WorkshopIds) ? "بر اساس ماده 190 قانون کار جمهوری اسلامی ایران ، پرسنل اقرار مینماید کلیه مبالغ پیش بینی شده در قانون کار را وفق قرارداد منعقده دریافت مینماید. این مبالغ قسمتی بصورت مستقیم از سوی کارفرما و قسمتی بر اساس شرایط کارگاه از محل درآمد حاصله از مشتری اخذ میگردد . با توجه به شرایط کارگاه کلیه مبالغ بصورت واریز به حساب و وجه نقد رایج کشور ، تواما به پرسنل پرداخت میگردد. امضا تصفیه حساب دارای مبالغ ، توسط پرسنل نشانگر تصفیه قطعی ایشان میباشد.": "",
};
}).ToList();
return res;
}
#endregion #endregion
#region NewChangeByHeydari #region NewChangeByHeydari

View File

@@ -1,23 +1,24 @@
using System; using _0_Framework.Application;
using System.Collections.Generic; using _0_Framework.Application.Enums;
using System.Data; using _0_Framework.Exceptions;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure; using _0_Framework.InfraStructure;
using Company.Domain.ClientEmployeeWorkshopAgg; using Company.Domain.ClientEmployeeWorkshopAgg;
using Company.Domain.EmployeeAccountAgg; using Company.Domain.EmployeeAccountAgg;
using Company.Domain.EmployeeAgg; using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.Employee;
using Company.Domain.EmployeeInsuranceRecordAgg; using Company.Domain.EmployeeInsuranceRecordAgg;
using Company.Domain.InsuranceListAgg;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord; using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
using CompanyManagment.App.Contracts.LeftWorkTemp;
using Microsoft.Data.SqlClient; using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using CompanyManagment.App.Contracts.Employee.DTO; using System;
using CompanyManagment.App.Contracts.LeftWorkTemp; using System.Collections.Generic;
using _0_Framework.Application.Enums; using System.Data;
using _0_Framework.Exceptions; using System.Linq;
using System.Threading.Tasks;
namespace CompanyManagment.EFCore.Repository; namespace CompanyManagment.EFCore.Repository;
@@ -33,7 +34,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
public bool city = true; public bool city = true;
public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000); public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000);
private readonly IAuthHelper _authHelper; private readonly IAuthHelper _authHelper;
public EmployeeRepository(CompanyContext context, IConfiguration configuration, IAuthHelper authHelper) :base(context) public EmployeeRepository(CompanyContext context, IConfiguration configuration, IAuthHelper authHelper) : base(context)
{ {
_context = context; _context = context;
_configuration = configuration; _configuration = configuration;
@@ -42,13 +43,13 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
public List<EmployeeViewModel> GetEmployee() public List<EmployeeViewModel> GetEmployee()
{ {
return _context.Employees.Where(x=>x.IsActive).Select(x => new EmployeeViewModel return _context.Employees.Where(x => x.IsActive).Select(x => new EmployeeViewModel
{ {
Id = x.id, Id = x.id,
FName = x.FName, FName = x.FName,
LName = x.LName, LName = x.LName,
EmployeeFullName = x.FName +" "+x.LName, EmployeeFullName = x.FName + " " + x.LName,
FatherName = x.FatherName, FatherName = x.FatherName,
NationalCode = x.NationalCode, NationalCode = x.NationalCode,
IdNumber = x.IdNumber, IdNumber = x.IdNumber,
@@ -61,46 +62,46 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
public EditEmployee GetDetails(long id) public EditEmployee GetDetails(long id)
{ {
return _context.Employees.Select(x => new EditEmployee return _context.Employees.Select(x => new EditEmployee
{ {
Id = x.id, Id = x.id,
FName = x.FName, FName = x.FName,
LName = x.LName, LName = x.LName,
Gender = x.Gender, Gender = x.Gender,
NationalCode = x.NationalCode, NationalCode = x.NationalCode,
IdNumber = x.IdNumber, IdNumber = x.IdNumber,
Nationality = x.Nationality, Nationality = x.Nationality,
FatherName = x.FatherName, FatherName = x.FatherName,
DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(), DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(),
DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(), DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(),
PlaceOfIssue = x.PlaceOfIssue, PlaceOfIssue = x.PlaceOfIssue,
Phone = x.Phone, Phone = x.Phone,
Address = x.Address, Address = x.Address,
State = x.State, State = x.State,
City = x.City, City = x.City,
MaritalStatus = x.MaritalStatus, MaritalStatus = x.MaritalStatus,
MilitaryService = x.MilitaryService, MilitaryService = x.MilitaryService,
LevelOfEducation = x.LevelOfEducation, LevelOfEducation = x.LevelOfEducation,
FieldOfStudy = x.FieldOfStudy, FieldOfStudy = x.FieldOfStudy,
BankCardNumber = x.BankCardNumber, BankCardNumber = x.BankCardNumber,
BankBranch = x.BankBranch, BankBranch = x.BankBranch,
InsuranceCode = x.InsuranceCode, InsuranceCode = x.InsuranceCode,
InsuranceHistoryByYear = x.InsuranceHistoryByYear, InsuranceHistoryByYear = x.InsuranceHistoryByYear,
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth, InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
NumberOfChildren = x.NumberOfChildren, NumberOfChildren = x.NumberOfChildren,
OfficePhone = x.OfficePhone, OfficePhone = x.OfficePhone,
EmployeeFullName = x.FName + " " + x.LName, EmployeeFullName = x.FName + " " + x.LName,
MclsUserName =x.MclsUserName, MclsUserName = x.MclsUserName,
MclsPassword = x.MclsPassword, MclsPassword = x.MclsPassword,
EserviceUserName = x.EserviceUserName, EserviceUserName = x.EserviceUserName,
EservicePassword = x.EservicePassword, EservicePassword = x.EservicePassword,
TaxOfficeUserName = x.TaxOfficeUserName, TaxOfficeUserName = x.TaxOfficeUserName,
TaxOfficepassword = x.TaxOfficepassword, TaxOfficepassword = x.TaxOfficepassword,
SanaUserName = x.SanaUserName, SanaUserName = x.SanaUserName,
SanaPassword = x.SanaPassword, SanaPassword = x.SanaPassword,
}) })
.FirstOrDefault(x => x.Id == id); .FirstOrDefault(x => x.Id == id);
} }
@@ -182,7 +183,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
return query.OrderByDescending(x => x.Id).Take(100).ToList(); return query.OrderByDescending(x => x.Id).Take(100).ToList();
} }
public async Task<List<EmployeeSelectListViewModel>> GetEmployeeToList() public async Task<List<EmployeeSelectListViewModel>> GetEmployeeToList()
{ {
var watch = System.Diagnostics.Stopwatch.StartNew(); var watch = System.Diagnostics.Stopwatch.StartNew();
@@ -273,45 +274,45 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
public EditEmployee GetDetailsByADDate(long id) public EditEmployee GetDetailsByADDate(long id)
{ {
return _context.Employees.Select(x => new EditEmployee return _context.Employees.Select(x => new EditEmployee
{ {
Id = x.id, Id = x.id,
FName = x.FName, FName = x.FName,
LName = x.LName, LName = x.LName,
Gender = x.Gender, Gender = x.Gender,
NationalCode = x.NationalCode, NationalCode = x.NationalCode,
IdNumber = x.IdNumber, IdNumber = x.IdNumber,
Nationality = x.Nationality, Nationality = x.Nationality,
FatherName = x.FatherName, FatherName = x.FatherName,
DateOfBirthGr = x.DateOfBirth , DateOfBirthGr = x.DateOfBirth,
DateOfIssueGr = x.DateOfIssue , DateOfIssueGr = x.DateOfIssue,
DateOfBirth = x.DateOfBirth.ToFarsi(), DateOfBirth = x.DateOfBirth.ToFarsi(),
DateOfIssue = x.DateOfIssue.ToFarsi(), DateOfIssue = x.DateOfIssue.ToFarsi(),
PlaceOfIssue = x.PlaceOfIssue, PlaceOfIssue = x.PlaceOfIssue,
Phone = x.Phone, Phone = x.Phone,
Address = x.Address, Address = x.Address,
State = x.State, State = x.State,
City = x.City, City = x.City,
MaritalStatus = x.MaritalStatus, MaritalStatus = x.MaritalStatus,
MilitaryService = x.MilitaryService, MilitaryService = x.MilitaryService,
LevelOfEducation = x.LevelOfEducation, LevelOfEducation = x.LevelOfEducation,
FieldOfStudy = x.FieldOfStudy, FieldOfStudy = x.FieldOfStudy,
BankCardNumber = x.BankCardNumber, BankCardNumber = x.BankCardNumber,
BankBranch = x.BankBranch, BankBranch = x.BankBranch,
InsuranceCode = x.InsuranceCode, InsuranceCode = x.InsuranceCode,
InsuranceHistoryByYear = x.InsuranceHistoryByYear, InsuranceHistoryByYear = x.InsuranceHistoryByYear,
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth, InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
NumberOfChildren = x.NumberOfChildren, NumberOfChildren = x.NumberOfChildren,
OfficePhone = x.OfficePhone, OfficePhone = x.OfficePhone,
EmployeeFullName = x.FName + " " + x.LName, EmployeeFullName = x.FName + " " + x.LName,
MclsUserName = x.MclsUserName, MclsUserName = x.MclsUserName,
MclsPassword = x.MclsPassword, MclsPassword = x.MclsPassword,
EserviceUserName = x.EserviceUserName, EserviceUserName = x.EserviceUserName,
EservicePassword = x.EservicePassword, EservicePassword = x.EservicePassword,
TaxOfficeUserName = x.TaxOfficeUserName, TaxOfficeUserName = x.TaxOfficeUserName,
TaxOfficepassword = x.TaxOfficepassword, TaxOfficepassword = x.TaxOfficepassword,
SanaUserName = x.SanaUserName, SanaUserName = x.SanaUserName,
SanaPassword = x.SanaPassword, SanaPassword = x.SanaPassword,
}) })
.FirstOrDefault(x => x.Id == id); .FirstOrDefault(x => x.Id == id);
} }
@@ -324,7 +325,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
EmployeeFullName = x.FName + " " + x.LName, EmployeeFullName = x.FName + " " + x.LName,
IsActive = x.IsActive IsActive = x.IsActive
}).Where(x=>x.IsActive).ToList(); }).Where(x => x.IsActive).ToList();
} }
#region Client #region Client
@@ -452,7 +453,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth, var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
dateOfIssue, dateOfIssue,
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,command.IdNumberSerial,command.IdNumberSeri, command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality, command.IdNumberSerial, command.IdNumberSeri,
command.Phone, command.Address, command.Phone, command.Address,
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation, command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
command.FieldOfStudy, command.BankCardNumber, command.FieldOfStudy, command.BankCardNumber,
@@ -706,18 +707,18 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
{ {
case null: case null:
case "": case "":
query = query.Where(x => x.IsActive == true).ToList(); query = query.Where(x => x.IsActive == true).ToList();
break; break;
case "false": case "false":
query = query.Where(x => x.IsActive == false).ToList(); query = query.Where(x => x.IsActive == false).ToList();
hasSearch = true; hasSearch = true;
break; break;
case "both": case "both":
query = query.Where(x => x.IsActive == true || x.IsActive == false).ToList(); query = query.Where(x => x.IsActive == true || x.IsActive == false).ToList();
hasSearch = true; hasSearch = true;
break; break;
} }
if (hasSearch) if (hasSearch)
@@ -816,11 +817,11 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
var employeesQuery = _context.Employees.Where(x => var employeesQuery = _context.Employees.Where(x =>
workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) || workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)).Select(x => new workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)).Select(x => new
{ {
leftWork = workshopActiveLeftWorksQuery.Where(l => l.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(), leftWork = workshopActiveLeftWorksQuery.Where(l => l.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
insuranceLeftWork = workshopActiveInsuranceLeftWorksQuery.Where(i => i.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(), insuranceLeftWork = workshopActiveInsuranceLeftWorksQuery.Where(i => i.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
Employee = x Employee = x
}); });
@@ -946,13 +947,13 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
}).ToList(); }).ToList();
} }
#endregion #endregion
#region Api #region Api
public async Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id) public async Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText, long id)
{ {
var query = _context.Employees.AsQueryable(); var query = _context.Employees.AsQueryable();
EmployeeSelectListViewModel idSelected = null; EmployeeSelectListViewModel idSelected = null;
if (id > 0) if (id > 0)
{ {
@@ -963,104 +964,104 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
}).FirstOrDefaultAsync(x => x.Id == id); }).FirstOrDefaultAsync(x => x.Id == id);
} }
if (!string.IsNullOrWhiteSpace(searchText)) if (!string.IsNullOrWhiteSpace(searchText))
{ {
query = query.Where(x => (x.FName + " " + x.LName).Contains(searchText)); query = query.Where(x => (x.FName + " " + x.LName).Contains(searchText));
} }
var list = await query.Take(100).Select(x => new EmployeeSelectListViewModel() var list = await query.Take(100).Select(x => new EmployeeSelectListViewModel()
{ {
Id = x.id, Id = x.id,
EmployeeFullName = x.FName + " " + x.LName EmployeeFullName = x.FName + " " + x.LName
}).ToListAsync(); }).ToListAsync();
if (idSelected != null) if (idSelected != null)
list.Add(idSelected); list.Add(idSelected);
return list.DistinctBy(x=>x.Id).ToList(); return list.DistinctBy(x => x.Id).ToList();
} }
public async Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel) public async Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel)
{ {
var query = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances).AsQueryable(); var query = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances).AsQueryable();
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode)) if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
{ {
query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode)); query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode));
} }
if (searchModel.EmployeeId > 0) if (searchModel.EmployeeId > 0)
{ {
query = query.Where(x => x.id == searchModel.EmployeeId); query = query.Where(x => x.id == searchModel.EmployeeId);
} }
if (searchModel.WorkshopId > 0) if (searchModel.WorkshopId > 0)
{ {
query = query.Where(x => x.LeftWorks.Any(l => l.WorkshopId == searchModel.WorkshopId) || x.LeftWorkInsurances.Any(l => l.WorkshopId == searchModel.WorkshopId)); query = query.Where(x => x.LeftWorks.Any(l => l.WorkshopId == searchModel.WorkshopId) || x.LeftWorkInsurances.Any(l => l.WorkshopId == searchModel.WorkshopId));
} }
#region employer #region employer
if (searchModel.EmployerId > 0) if (searchModel.EmployerId > 0)
{ {
var workshopIdsByEmployer = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId) var workshopIdsByEmployer = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId)
.Include(x => x.Workshop).Select(x => x.Workshop.id).AsQueryable(); .Include(x => x.Workshop).Select(x => x.Workshop.id).AsQueryable();
query = query.Where(x => query = query.Where(x =>
x.LeftWorks.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)) || x.LeftWorks.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)) ||
x.LeftWorkInsurances.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId))); x.LeftWorkInsurances.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)));
} }
#endregion #endregion
if (!string.IsNullOrEmpty(searchModel.InsuranceCode)) if (!string.IsNullOrEmpty(searchModel.InsuranceCode))
{ {
query = query.Where(x => x.InsuranceCode.Contains(searchModel.InsuranceCode)); query = query.Where(x => x.InsuranceCode.Contains(searchModel.InsuranceCode));
} }
if (searchModel.EmployeeStatus != ActivationStatus.None) if (searchModel.EmployeeStatus != ActivationStatus.None)
{ {
var status = searchModel.EmployeeStatus switch var status = searchModel.EmployeeStatus switch
{ {
ActivationStatus.Active => true, ActivationStatus.Active => true,
ActivationStatus.DeActive => false, ActivationStatus.DeActive => false,
_ => throw new BadRequestException("پارامتر جستجو نامعتبر است") _ => throw new BadRequestException("پارامتر جستجو نامعتبر است")
}; };
query = query.Where(x => x.IsActiveString == status.ToString() || x.IsActive == status); query = query.Where(x => x.IsActiveString == status.ToString() || x.IsActive == status);
} }
var list = await query.Skip(searchModel.PageIndex).Take(30).ToListAsync(); var list = await query.Skip(searchModel.PageIndex).Take(30).ToListAsync();
var employeeIds = list.Select(x => x.id); var employeeIds = list.Select(x => x.id);
var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync(); var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync();
var result = list.Select(x => new GetEmployeeListViewModel() var result = list.Select(x => new GetEmployeeListViewModel()
{ {
BirthDate = x.DateOfBirth.ToFarsi(), BirthDate = x.DateOfBirth.ToFarsi(),
ChildrenCount = children.Count(c => c.EmployeeId == x.id).ToString(), ChildrenCount = children.Count(c => c.EmployeeId == x.id).ToString(),
EmployeeFullName = x.FullName, EmployeeFullName = x.FullName,
EmployeeStatus = x.IsActive switch EmployeeStatus = x.IsActive switch
{ {
true => ActivationStatus.Active, true => ActivationStatus.Active,
false => ActivationStatus.DeActive false => ActivationStatus.DeActive
}, },
Gender = x.Gender switch Gender = x.Gender switch
{ {
"مرد" => Gender.Male, "مرد" => Gender.Male,
"زن" => Gender.Female, "زن" => Gender.Female,
_ => Gender.None _ => Gender.None
}, },
Id = x.id, Id = x.id,
InsuranceCode = x.InsuranceCode, InsuranceCode = x.InsuranceCode,
NationalCode = x.NationalCode NationalCode = x.NationalCode
}).ToList(); }).ToList();
return result; return result;
} }
public Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId) public Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
{ {
@@ -1170,7 +1171,144 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
// //
// }; // };
// }).OrderByDescending(x => x.StartWork).ToList(); // }).OrderByDescending(x => x.StartWork).ToList();
throw new NotImplementedException(); throw new NotImplementedException();
}
public async Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId)
{
var hasNotStoppedWorkingYet = Tools.GetUndefinedDateTime();
var baseQuery = await
(
from personnelCode in _context.PersonnelCodeSet
join employee in _context.Employees
on personnelCode.EmployeeId equals employee.id
where personnelCode.WorkshopId == workshopId
select new
{
Employee = employee,
PersonnelCode = personnelCode
}
).ToListAsync();
if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName))
baseQuery = baseQuery.Where(x => x.Employee.FullName.Contains(searchModel.EmployeeFullName)).ToList();
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
baseQuery = baseQuery.Where(x => x.Employee.NationalCode.Contains(searchModel.NationalCode)).ToList();
var employeeIds = baseQuery.Select(x => x.Employee.id).ToList();
var leftWorks = await _context.LeftWorkList
.Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId))
.ToListAsync();
var insuranceLeftWorks = await _context.LeftWorkInsuranceList
.Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId))
.ToListAsync();
var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync();
var clientTemp = await _context.EmployeeClientTemps.Where(x => x.WorkshopId == workshopId)
.Select(x => x.EmployeeId).ToListAsync();
var leftWorkTempData = await _context.LeftWorkTemps.Where(x => x.WorkshopId == workshopId).ToListAsync();
var startWorkTemp = leftWorkTempData.Where(x => x.LeftWorkType == LeftWorkTempType.StartWork).ToList();
var leftWorkTemp = leftWorkTempData.Where(x => x.LeftWorkType == LeftWorkTempType.LeftWork).ToList();
var result = baseQuery.Select(x =>
{
var left = leftWorks
.Where(l => l.EmployeeId == x.Employee.id)
.MaxBy(l => l.StartWorkDate);
var insuranceLeftWork = insuranceLeftWorks
.Where(l => l.EmployeeId == x.Employee.id).MaxBy(l => l.StartWorkDate);
var contractStart = left != null ? left.StartWorkDate.ToFarsi() : "";
var contractLeft = left != null
? left.LeftWorkDate != hasNotStoppedWorkingYet ? left.LeftWorkDate.ToFarsi() : ""
: "";
var insuranceStart = insuranceLeftWork != null ? insuranceLeftWork.StartWorkDate.ToFarsi() : "";
var insuranceLeft = insuranceLeftWork != null
? insuranceLeftWork.LeftWorkDate != null ? insuranceLeftWork.LeftWorkDate.ToFarsi() : ""
: "";
int personnelCode = Convert.ToInt32($"{x.PersonnelCode.PersonnelCode}");
int numberOfChildren = children.Count(ch => ch.EmployeeId == x.Employee.id);
bool employeeHasLeft =
(!string.IsNullOrWhiteSpace(insuranceLeft) && !string.IsNullOrWhiteSpace(contractLeft))
|| (left == null && !string.IsNullOrWhiteSpace(insuranceLeft))
|| (insuranceLeftWork == null && !string.IsNullOrWhiteSpace(contractLeft));
bool hasClientTemp = clientTemp.Any(c => c == x.Employee.id);
bool hasStartWorkTemp = startWorkTemp.Any(st => st.EmployeeId == x.Employee.id);
bool hasLeftWorkTemp = leftWorkTemp.Any(lf => lf.EmployeeId == x.Employee.id);
return new EmployeeListDto
{
Id = x.Employee.id,
EmployeeFullName = x.Employee.FullName,
PersonnelCode = personnelCode,
MaritalStatus = x.Employee.MaritalStatus,
NationalCode = x.Employee.NationalCode,
IdNumber = x.Employee.IdNumber,
DateOfBirth = x.Employee.DateOfBirth.ToFarsi(),
FatherName = x.Employee.FatherName,
NumberOfChildren = $"{numberOfChildren}",
LatestContractStartDate = contractStart,
ContractLeftDate = contractLeft,
LatestInsuranceStartDate = insuranceStart,
InsuranceLeftDate = insuranceLeft,
HasContract = !string.IsNullOrWhiteSpace(contractStart),
HasInsurance = !string.IsNullOrWhiteSpace(insuranceStart),
EmployeeStatusInWorkshop =
hasClientTemp || hasStartWorkTemp ? EmployeeStatusInWorkshop.CreatedByClient :
hasLeftWorkTemp ? EmployeeStatusInWorkshop.LefWorkTemp :
employeeHasLeft ? EmployeeStatusInWorkshop.HasLeft : EmployeeStatusInWorkshop.Working,
};
}).OrderBy(x => x.EmployeeStatusInWorkshop).ThenBy(x => x.PersonnelCode).ToList();
return result;
}
public async Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId)
{
var res = await ListOfAllEmployeesClient(new EmployeeSearchModelDto(), workshopId);
return res
.Where(x=>x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.CreatedByClient
&& x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.LefWorkTemp)
.Select(x => new PrintAllEmployeesInfoDtoClient(x)).ToList();
}
public async Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId)
{
var dateNow = DateTime.Now.Date;
var workshopActiveLeftWorksQuery = _context.LeftWorkList.Where(x => x.WorkshopId == workshopId &&
x.StartWorkDate <= dateNow && x.LeftWorkDate > dateNow);
var workshopActiveInsuranceLeftWorksQuery = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId &&
x.StartWorkDate <= dateNow && (x.LeftWorkDate > dateNow || x.LeftWorkDate == null));
var employeesQuery = _context.Employees.Where(x => workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id));
return await employeesQuery.Select(x => new EmployeeSelectListViewModel()
{
Id = x.id,
EmployeeFullName = x.FullName
}).ToListAsync();
} }
#endregion #endregion

View File

@@ -34,7 +34,6 @@ public class FinancialInvoiceRepository : RepositoryBase<long, FinancialInvoice>
Amount = financialInvoice.Amount, Amount = financialInvoice.Amount,
Status = financialInvoice.Status, Status = financialInvoice.Status,
InvoiceNumber = financialInvoice.InvoiceNumber, InvoiceNumber = financialInvoice.InvoiceNumber,
ContractingPartyId = financialInvoice.ContractingPartyId,
Items = financialInvoice.Items?.Select(x => new EditFinancialInvoiceItem Items = financialInvoice.Items?.Select(x => new EditFinancialInvoiceItem
{ {
Id = x.id, Id = x.id,
@@ -101,12 +100,4 @@ public class FinancialInvoiceRepository : RepositoryBase<long, FinancialInvoice>
.Where(x => x.Status == FinancialInvoiceStatus.Unpaid).FirstOrDefaultAsync(x => x.Items .Where(x => x.Status == FinancialInvoiceStatus.Unpaid).FirstOrDefaultAsync(x => x.Items
.Any(y => y.Type == financialInvoiceItemType && y.EntityId == entityId)); .Any(y => y.Type == financialInvoiceItemType && y.EntityId == entityId));
} }
public async Task<FinancialInvoice> GetUnPaidFinancialInvoiceByContractingPartyIdAndAmount(long contractingPartyId,
double amount)
{
return await _context.FinancialInvoices.FirstOrDefaultAsync(x=>x.ContractingPartyId == contractingPartyId &&
x.Amount == amount &&
x.Status == FinancialInvoiceStatus.Unpaid);
}
} }

View File

@@ -210,7 +210,6 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
} }
return new FinancialTransactionDetailViewModel() return new FinancialTransactionDetailViewModel()
{ {
Id = t.id,
DateTimeGr = t.TdateGr, DateTimeGr = t.TdateGr,
DateFa = t.TdateGr.ToFarsi(), DateFa = t.TdateGr.ToFarsi(),
TimeFa = $"{t.TdateGr:HH:mm}", TimeFa = $"{t.TdateGr:HH:mm}",

View File

@@ -176,20 +176,18 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney()) if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
{ {
checkout.SetUpdateNeeded(); checkout.SetUpdateNeeded();
if (!_context.CheckoutWarningMessages.Any(x => if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare))
x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning ==
TypeOfCheckoutWarning.InsuranceEmployeeShare))
{ {
var createWarrning = var createWarrning =
new CheckoutWarningMessage( new CheckoutWarningMessage(
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", "مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
_context.CheckoutWarningMessages.Add(createWarrning); _context.CheckoutWarningMessages.Add(createWarrning);
} }
_context.SaveChanges(); _context.SaveChanges();
} }
} }
} }
} }
@@ -731,7 +729,7 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
var id = insuranceListObj.id; var id = insuranceListObj.id;
if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0) if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0)
{ {
var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month); var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month);
var checkouts = _context.CheckoutSet.Where(x => var checkouts = _context.CheckoutSet.Where(x =>
x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName && x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName &&
@@ -761,15 +759,16 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
{ {
var createWarrning = var createWarrning =
new CheckoutWarningMessage( new CheckoutWarningMessage(
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", "مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
_context.CheckoutWarningMessages.Add(createWarrning); _context.CheckoutWarningMessages.Add(createWarrning);
} }
_context.SaveChanges(); _context.SaveChanges();
} }
} }
} }
} }
_employeeInsurancListDataRepository.SaveChanges(); _employeeInsurancListDataRepository.SaveChanges();
@@ -1778,76 +1777,46 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
return res; return res;
} }
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList( public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(InsuranceClientSearchModel searchModel)
InsuranceClientSearchModel searchModel)
{ {
var workshopId = _authHelper.GetWorkshopId(); var workshopId = _authHelper.GetWorkshopId();
var query = _context.InsuranceListSet var query = _context.InsuranceListSet
.Where(x => x.WorkshopId == workshopId); .Select(x => new InsuranceClientListViewModel
if (searchModel.Year > 0)
{ {
query = query.Where(x => x.Year == searchModel.Year.ToString("0000")); Id = x.id,
} WorkShopId = x.WorkshopId,
Year = x.Year,
YearInt = Convert.ToInt32(x.Year),
Month = x.Month,
MonthName = x.Month.ToFarsiMonthByNumber(),
MonthInt = Convert.ToInt32(x.Month),
}).Where(x => x.WorkShopId == workshopId);
if (searchModel.Year>0)
{
query = query.Where(x => x.YearInt == searchModel.Year);
}
if (searchModel.Month > 0) if (searchModel.Month > 0)
{ {
query = query.Where(x => x.Month == searchModel.Month.ToString("00")); query = query.Where(x => x.MonthInt == searchModel.Month);
} }
var res = new PagedResult<InsuranceClientListViewModel> var res = new PagedResult<InsuranceClientListViewModel>
{ {
TotalCount = query.Count() TotalCount = query.Count()
}; };
var list = (await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync());
var insuranceListIds = list.Select(x => x.id).ToList();
var employeeData = await _context.EmployeeInsurancListDataSet
.Where(x => insuranceListIds.Contains(x.InsuranceListId))
.GroupBy(x => x.InsuranceListId)
.Select(g => new
{
g.Key,
Count = g.Count(x=>x.LeftWorkDate != null)
}).ToListAsync();
query = searchModel.Sorting switch query = searchModel.Sorting switch
{ {
"CreationDate-Max" => query.OrderByDescending(x => x.id), "CreationDate-Max" => query.OrderByDescending(x => x.Id),
"CreationDate-Min" => query.OrderBy(x => x.id), "CreationDate-Min" => query.OrderBy(x => x.Id),
"Month-Max" => query.OrderByDescending(x => x.Month), "Month-Max" => query.OrderByDescending(x => x.MonthInt),
"Month-Min" => query.OrderBy(x => x.Month), "Month-Min" => query.OrderBy(x => x.MonthInt),
"Year-Max" => query.OrderByDescending(x => x.Year), "Year-Max" => query.OrderByDescending(x => x.YearInt),
"Year-Min" => query.OrderBy(x => x.Year), "Year-Min" => query.OrderBy(x => x.YearInt),
_ => query.OrderByDescending(x => x.id), _ => query.OrderByDescending(x => x.Id),
}; };
res.List =await query.ApplyPagination(searchModel.PageIndex,searchModel.PageSize).ToListAsync();
var resList = list
.Select(x => new InsuranceClientListViewModel
{
Id = x.id,
WorkShopId = x.WorkshopId,
Year = x.Year,
YearInt = Convert.ToInt32(x.Year),
Month = x.Month,
MonthName = x.Month.ToFarsiMonthByNumber(),
MonthInt = Convert.ToInt32(x.Month),
EmployerShare = x.EmployerShare.ToMoney(),
InsuredShare = x.InsuredShare.ToMoney(),
UnEmploymentInsurance = x.UnEmploymentInsurance.ToMoney(),
PersonnelCount = x.SumOfEmployees,
AllInsuredShare = (x.InsuredShare +
x.EmployerShare +
x.UnEmploymentInsurance).ToMoney(),
LeftWorkCount =employeeData.FirstOrDefault(e=>e.Key == x.id)?.Count ?? 0,
}).ToList();
res.List = resList;
return res; return res;
} }
@@ -1913,9 +1882,9 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
query = query.Where(x => x.Month == searchModel.Month).OrderByDescending(x => x.WorkShopName) query = query.Where(x => x.Month == searchModel.Month).OrderByDescending(x => x.WorkShopName)
.ThenByDescending(x => x.EmployerName).ThenByDescending(x => x.Year); .ThenByDescending(x => x.EmployerName).ThenByDescending(x => x.Year);
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0") if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName) query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month); .ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
if (!string.IsNullOrEmpty(searchModel.WorkShopCode)) if (!string.IsNullOrEmpty(searchModel.WorkShopCode))
@@ -1996,77 +1965,6 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
return res; return res;
} }
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
{
var insurance = await _context.InsuranceListSet.FirstOrDefaultAsync(x => x.id == id);
if (insurance == null)
return null;
var employeeInsurance = _context.EmployeeInsurancListDataSet
.Where(x => x.InsuranceListId == insurance.id);
var workshop = await _context.Workshops
.Include(x => x.InsuranceWorkshopInfo)
.FirstOrDefaultAsync(x => x.id == insurance.WorkshopId);
var employeeIds = await employeeInsurance
.Select(x => x.EmployeeId).ToListAsync();
var employees = await _context.Employees
.Where(x => employeeIds.Contains(x.id)).ToListAsync();
var jobIds = employeeInsurance.Select(x => x.JobId).ToList();
var jobs = await _context.Jobs
.Where(x => jobIds.Contains(x.id)).ToDictionaryAsync(x => x.id, x => x.JobName);
var employeeData = employeeInsurance.ToList().Select(x =>
{
var employee = employees.FirstOrDefault(e => e.id == x.EmployeeId);
return new InsuranceClientPrintItemsViewModel()
{
BaseYears = x.BaseYears.ToMoney(),
BenefitsIncludedContinuous = x.BenefitsIncludedContinuous.ToMoney(),
BenefitsIncludedNonContinuous = x.BenefitsIncludedNonContinuous.ToMoney(),
DailyWage = x.DailyWage.ToMoney(),
IncludedAndNotIncluded = (x.BenefitsIncludedNonContinuous + x.BenefitsIncludedContinuous).ToMoney(),
WorkingDays = x.WorkingDays.ToString(),
MarriedAllowance = x.MarriedAllowance.ToMoney(),
StartWork = x.StartWorkDate.ToFarsi(),
LeftWork = x.LeftWorkDate.ToFarsi(),
MonthlyBenefits = x.MonthlyBenefits.ToMoney(),
MonthlySalary = x.MonthlySalary.ToMoney(),
NationalCode = employee.NationalCode,
InsuranceCode = employee.InsuranceCode,
JobName = jobs.GetValueOrDefault(x.JobId, ""),
FullName = employee.FullName,
InsuranceShare = x.InsuranceShare.ToMoney(),
};
}).ToList();
var result = new InsuranceClientPrintViewModel()
{
Items = employeeData.ToList(),
AllInsuredShare = (insurance.InsuredShare +
insurance.EmployerShare +
insurance.UnEmploymentInsurance).ToMoney(),
EmployerShare = insurance.EmployerShare.ToMoney(),
InsuredShare = insurance.InsuredShare.ToMoney(),
UnEmploymentInsurance = insurance.UnEmploymentInsurance.ToMoney(),
WorkshopName = workshop.InsuranceWorkshopInfo.WorkshopName,
WorkshopAddress = workshop.InsuranceWorkshopInfo.Address,
WorkshopEmployerName = workshop.InsuranceWorkshopInfo.EmployerName,
WorkshopInsuranceCode = workshop.InsuranceWorkshopInfo.InsuranceCode,
AgreementNumber = workshop.InsuranceWorkshopInfo.AgreementNumber,
ListNo = "01",
Month = insurance.Month,
Year = insurance.Year
};
return result;
}
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>

View File

@@ -773,137 +773,6 @@ public class PersonalContractingPartyRepository : RepositoryBase<long, PersonalC
return await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.NationalId == nationalId); return await _context.PersonalContractingParties.FirstOrDefaultAsync(x => x.NationalId == nationalId);
} }
public async Task<OperationResult> DeActiveAllAsync(long id)
{
OperationResult result = new OperationResult();
await using var transaction = await _context.Database.BeginTransactionAsync();
await using var accountTransaction = await _accountContext.Database.BeginTransactionAsync();
try
{
var contractingParty = _context.PersonalContractingParties
.FirstOrDefault(x => x.id == id);
if (contractingParty == null)
return result.Failed("طرف حساب یافت نشد");
contractingParty.DeActive();
var employers = _context.Employers
.Where(x => x.ContractingPartyId == id).ToList();
employers.ForEach(x => x.DeActive());
var employerIds = employers.Select(x => x.id).ToList();
var workshopIds = _context.WorkshopEmployers
.Where(x => employerIds.Contains(x.EmployerId))
.Select(x => x.WorkshopId).ToList();
var workshops = _context.Workshops
.Where(x => workshopIds.Contains(x.id)).ToList();
workshops.ForEach(x => x.DeActive(x.ArchiveCode));
var contracts = _context.Contracts
.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList();
contracts.ForEach(x => x.DeActive());
var contractIds = contracts.Select(x => x.id).ToList();
var checkouts = _context.CheckoutSet
.Where(x => contractIds.Contains(x.ContractId)).ToList();
checkouts.ForEach(x => x.DeActive());
var contractingPartyAccount =await _context.ContractingPartyAccounts
.FirstOrDefaultAsync(x => x.PersonalContractingPartyId == id);
if (contractingPartyAccount != null)
{
var account = await _accountContext.Accounts
.FirstOrDefaultAsync(x => x.id == contractingPartyAccount.AccountId);
account?.DeActive();
var cameraAccount =await _accountContext.CameraAccounts
.FirstOrDefaultAsync(x=>x.AccountId==account.id);
cameraAccount?.DeActive();
await _accountContext.SaveChangesAsync();
}
await _context.SaveChangesAsync();
await transaction.CommitAsync();
await accountTransaction.CommitAsync();
result.Succcedded();
}
catch (Exception)
{
result.Failed("غیرفعال کردن طرف حساب با خطا مواجه شد");
await transaction.RollbackAsync();
await accountTransaction.RollbackAsync();
}
return result;
}
public async Task<OperationResult> ActiveAllAsync(long id)
{
OperationResult result = new OperationResult();
await using var transaction =await _context.Database.BeginTransactionAsync();
await using var accountTransaction = await _accountContext.Database.BeginTransactionAsync();
try
{
var personel = _context.PersonalContractingParties
.FirstOrDefault(x => x.id == id);
if (personel == null)
return result.Failed("طرف حساب یافت نشد");
personel.Active();
var employers = _context.Employers.Where(x => x.ContractingPartyId == id).ToList();
employers.ForEach(x => x.Active());
var employerIds = employers.Select(x => x.id).ToList();
var workshopIds = _context.WorkshopEmployers.Where(x => employerIds.Contains(x.EmployerId))
.Select(x => x.WorkshopId).ToList();
var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList();
workshops.ForEach(x => x.Active(x.ArchiveCode));
var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList();
contracts.ForEach(x => x.Active());
var contractIds = contracts.Select(x => x.id).ToList();
var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList();
checkouts.ForEach(x => x.Active());
var contractingPartyAccount =await _context.ContractingPartyAccounts
.FirstOrDefaultAsync(x => x.PersonalContractingPartyId == id);
if (contractingPartyAccount != null)
{
var account = await _accountContext.Accounts
.FirstOrDefaultAsync(x => x.id == contractingPartyAccount.AccountId);
account?.Active();
var cameraAccount =await _accountContext.CameraAccounts
.FirstOrDefaultAsync(x=>x.AccountId==account.id);
cameraAccount?.Active();
await _accountContext.SaveChangesAsync();
}
await _context.SaveChangesAsync();
await transaction.CommitAsync();
await accountTransaction.CommitAsync();
result.Succcedded();
}
catch (Exception)
{
result.Failed("فعال کردن طرف حساب با خطا مواجه شد");
await transaction.RollbackAsync();
await accountTransaction.RollbackAsync();
}
return result;
}
#endregion #endregion
} }

View File

@@ -1,20 +1,13 @@
using _0_Framework.Application; using System.Collections.Generic;
using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure; using _0_Framework.InfraStructure;
using Company.Domain.SmsResultAgg; using Company.Domain.SmsResultAgg;
using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.App.Contracts.SmsResult.Dto;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application.Enums;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace CompanyManagment.EFCore.Repository; namespace CompanyManagment.EFCore.Repository;
public class SmsResultRepository : RepositoryBase<long, SmsResult>, ISmsResultRepository public class SmsResultRepository : RepositoryBase<long, SmsResult> , ISmsResultRepository
{ {
private readonly CompanyContext _context; private readonly CompanyContext _context;
public SmsResultRepository(CompanyContext context) : base(context) public SmsResultRepository(CompanyContext context) : base(context)
@@ -22,260 +15,6 @@ public class SmsResultRepository : RepositoryBase<long, SmsResult>, ISmsResultRe
_context = context; _context = context;
} }
#region ForApi
public async Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel)
{
// مرحله 1: همه رکوردها را با projection ساده بگیرید
var rawQuery = await _context.SmsResults
.Select(x => new
{
x.id,
x.ContractingPatyId,
x.Mobile,
x.Status,
x.TypeOfSms,
x.CreationDate,
DateOnly = x.CreationDate.Date // فقط تاریخ بدون ساعت
})
.AsNoTracking()
.ToListAsync(); // اینجا SQL اجرا می‌شود و همه داده‌ها به client می‌آیند
if (searchModel.ContractingPatyId > 0)
{
rawQuery = rawQuery.Where(x => x.ContractingPatyId == searchModel.ContractingPatyId).ToList();
}
if (!string.IsNullOrWhiteSpace(searchModel.Mobile))
{
rawQuery = rawQuery.Where(x => x.Mobile.Contains(searchModel.Mobile)).ToList();
}
if (searchModel.TypeOfSms != TypeOfSmsSetting.All && searchModel.TypeOfSms != TypeOfSmsSetting.Warning)
{
var typeOfSms = "All";
switch (searchModel.TypeOfSms)
{
case TypeOfSmsSetting.InstitutionContractDebtReminder:
typeOfSms = "یادآور بدهی ماهانه";
break;
case TypeOfSmsSetting.MonthlyInstitutionContract:
typeOfSms = "صورت حساب ماهانه";
break;
case TypeOfSmsSetting.BlockContractingParty:
typeOfSms = "اعلام مسدودی طرف حساب";
break;
case TypeOfSmsSetting.LegalAction:
typeOfSms = "اقدام قضایی";
break;
case TypeOfSmsSetting.InstitutionContractConfirm:
typeOfSms = "یادآور تایید قرارداد مالی";
break;
case TypeOfSmsSetting.SendInstitutionContractConfirmationCode:
typeOfSms = "کد تاییدیه قرارداد مالی";
break;
case TypeOfSmsSetting.TaskReminder:
typeOfSms = "یادآور وظایف";
break;
}
rawQuery = rawQuery.Where(x => x.TypeOfSms == typeOfSms).ToList();
}
if (searchModel.TypeOfSms == TypeOfSmsSetting.Warning)
{
rawQuery = rawQuery.Where(x => x.TypeOfSms.Contains("هشدار")).ToList();
}
if (searchModel.SendStatus != SendStatus.All)
{
var status = "All";
switch (searchModel.SendStatus)
{
case SendStatus.Success: status = "موفق";
break;
case SendStatus.Failed: status = "ناموفق";
break;
}
rawQuery = rawQuery.Where(x => x.Status == status).ToList();
}
#region searchByDate
if (!string.IsNullOrWhiteSpace(searchModel.StartDateFa) &&
!string.IsNullOrWhiteSpace(searchModel.EndDateFa))
{
if (searchModel.StartDateFa.TryToGeorgianDateTime(out var startGr) == false ||
searchModel.EndDateFa.TryToGeorgianDateTime(out var endGr) == false)
return new List<SmsReportDto>();
rawQuery = rawQuery.Where(x => x.CreationDate.Date >= startGr.Date && x.CreationDate.Date <= endGr.Date).ToList();
}
else
{
if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month))
{
var start = searchModel.Year + "/" + searchModel.Month + "/01";
var end = start.FindeEndOfMonth();
var startGr = start.ToGeorgianDateTime();
var endGr = end.ToGeorgianDateTime();
rawQuery = rawQuery.Where(x => x.CreationDate.Date >= startGr.Date && x.CreationDate.Date <= endGr.Date).ToList();
}
else if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month))
{
var start = searchModel.Year + "/01/01";
var findEndOfYear = searchModel.Year + "/12/01";
var end = findEndOfYear.FindeEndOfMonth();
var startGr = start.ToGeorgianDateTime();
var endGr = end.ToGeorgianDateTime();
rawQuery = rawQuery.Where(x => x.CreationDate.Date >= startGr.Date && x.CreationDate.Date <= endGr.Date).ToList();
}
}
#endregion
// مرحله 2: گروه‌بندی و انتخاب آخرین رکورد هر روز روی Client
var grouped = rawQuery
.GroupBy(x => x.DateOnly)
.Select(g => g.OrderByDescending(x => x.CreationDate).First())
.OrderByDescending(x => x.CreationDate)
.ToList();
// مرحله 3: تبدیل به DTO و ToFarsi
var result = grouped.Select(x => new SmsReportDto
{
SentDate = x.CreationDate.ToFarsi()
}).ToList();
return result;
}
public async Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date)
{
if(string.IsNullOrWhiteSpace(date))
return new List<SmsReportListDto>();
if (date.TryToGeorgianDateTime(out var searchDate) == false)
return new List<SmsReportListDto>();
var query = await _context.SmsResults.Where(x => x.CreationDate.Date == searchDate.Date)
.Select(x =>
new
{
x.id,
x.MessageId,
x.Status,
x.TypeOfSms,
x.ContractingPartyName,
x.Mobile,
x.ContractingPatyId,
x.InstitutionContractId,
x.CreationDate,
x.CreationDate.Hour,
x.CreationDate.Minute
}).AsNoTracking()
.ToListAsync(); ;
if (searchModel.ContractingPatyId > 0)
{
query = query.Where(x => x.ContractingPatyId == searchModel.ContractingPatyId).ToList();
}
if (!string.IsNullOrWhiteSpace(searchModel.Mobile))
{
query = query.Where(x => x.Mobile.Contains(searchModel.Mobile)).ToList();
}
if (searchModel.TypeOfSms != TypeOfSmsSetting.All && searchModel.TypeOfSms != TypeOfSmsSetting.Warning)
{
var typeOfSms = "All";
switch (searchModel.TypeOfSms)
{
case TypeOfSmsSetting.InstitutionContractDebtReminder:
typeOfSms = "یادآور بدهی ماهانه";
break;
case TypeOfSmsSetting.MonthlyInstitutionContract:
typeOfSms = "صورت حساب ماهانه";
break;
case TypeOfSmsSetting.BlockContractingParty:
typeOfSms = "اعلام مسدودی طرف حساب";
break;
case TypeOfSmsSetting.LegalAction:
typeOfSms = "اقدام قضایی";
break;
case TypeOfSmsSetting.InstitutionContractConfirm:
typeOfSms = "یادآور تایید قرارداد مالی";
break;
case TypeOfSmsSetting.SendInstitutionContractConfirmationCode:
typeOfSms = "کد تاییدیه قرارداد مالی";
break;
case TypeOfSmsSetting.TaskReminder:
typeOfSms = "یادآور وظایف";
break;
}
query = query.Where(x => x.TypeOfSms == typeOfSms).ToList();
}
if (searchModel.TypeOfSms == TypeOfSmsSetting.Warning)
{
query = query.Where(x => x.TypeOfSms.Contains("هشدار")).ToList();
}
if (searchModel.SendStatus != SendStatus.All)
{
var status = "All";
switch (searchModel.SendStatus)
{
case SendStatus.Success:
status = "موفق";
break;
case SendStatus.Failed:
status = "ناموفق";
break;
}
query = query.Where(x => x.Status == status).ToList();
}
if (query.Count == 0)
return new List<SmsReportListDto>();
var result = query.OrderByDescending(x => x.CreationDate.Hour)
.ThenByDescending(x => x.CreationDate.Minute).Select(x =>
new SmsReportListDto()
{
Id = x.id,
MessageId = x.MessageId,
Status = x.Status,
TypeOfSms = x.TypeOfSms,
ContractingPartyName = x.ContractingPartyName,
Mobile = x.Mobile,
HourAndMinute = x.CreationDate.TimeOfDay.ToString(@"hh\:mm"),
}).ToList();
return result;
}
#endregion
public List<App.Contracts.SmsResult.SmsResultViewModel> Search(SmsResultSearchModel searchModel) public List<App.Contracts.SmsResult.SmsResultViewModel> Search(SmsResultSearchModel searchModel)
{ {
@@ -343,7 +82,7 @@ public class SmsResultRepository : RepositoryBase<long, SmsResult>, ISmsResultRe
query = query.OrderByDescending(x => x.CreationDate) query = query.OrderByDescending(x => x.CreationDate)
.ThenByDescending(x => x.CreationDate.Hour).ThenByDescending(x => x.CreationDate.Minute); .ThenByDescending(x=>x.CreationDate.Hour).ThenByDescending(x=>x.CreationDate.Minute);
return query.Skip(searchModel.PageIndex).Take(30).ToList(); return query.Skip(searchModel.PageIndex).Take(30).ToList();

View File

@@ -207,11 +207,16 @@ public class SmsService : ISmsService
} }
public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate) public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate)
{ {
var st = new DateTime(2024, 6, 2);
var ed = new DateTime(2024, 7, 1);
if(startDate.TryToGeorgianDateTime(out var st) == false || endDate.TryToGeorgianDateTime(out var ed) == false) if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
return new List<ApiResultViewModel>(); {
st = startDate.ToGeorgianDateTime();
}
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
{
ed = endDate.ToGeorgianDateTime();
}
var res = new List<ApiResultViewModel>(); var res = new List<ApiResultViewModel>();
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds; Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
@@ -243,44 +248,6 @@ public class SmsService : ISmsService
return res; return res;
} }
public async Task<List<ApiReportDto>> GetApiReport(string startDate, string endDate)
{
if (startDate.TryToGeorgianDateTime(out var st) == false || endDate.TryToGeorgianDateTime(out var ed) == false)
return new List<ApiReportDto>();
var res = new List<ApiReportDto>();
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600
//int? toDateUnixTime = null; // unix time - for instance: 1703190600
int pageNumber = 2;
int pageSize = 100; // max: 100
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
MessageReportResult[] messages = response.Data;
foreach (var message in messages)
{
var appendData = new ApiReportDto()
{
MessageId = message.MessageId,
Mobile = message.Mobile,
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
DeliveryState = DeliveryStatus(message.DeliveryState),
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
DeliveryColor = DeliveryColorStatus(message.DeliveryState),
};
res.Add(appendData);
}
return res;
}
public string DeliveryStatus(byte? dv) public string DeliveryStatus(byte? dv)
{ {
string mess = ""; string mess = "";
@@ -551,31 +518,6 @@ public class SmsService : ISmsService
return result; return result;
} }
public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessageForElectronicContract(string number, string fullname, string amount,string code1, string code2)
{
var tamplateId = 117685;
var result = new ValueTuple<byte, string, int, bool>();
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
new VerifySendParameter[]
{
new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2)
});
Thread.Sleep(500);
if (sendResult.Message == "موفق")
{
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
return result;
}
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
return result;
}
#endregion #endregion

View File

@@ -10,7 +10,6 @@ using CompanyManagment.App.Contracts.AuthorizedPerson;
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.Application.UID; using _0_Framework.Application.UID;
using Company.Application.Contracts.AuthorizedBankDetails; using Company.Application.Contracts.AuthorizedBankDetails;
using CompanyManagment.App.Contracts.AuthorizedBankDetails;
namespace CompanyManagment.EFCore.Services; namespace CompanyManagment.EFCore.Services;

View File

@@ -89,9 +89,6 @@ EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BackgroundInstitutionContract.Task", "BackgroundInstitutionContract\BackgroundInstitutionContract.Task\BackgroundInstitutionContract.Task.csproj", "{F78FBB92-294B-88BA-168D-F0C578B0D7D6}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BackgroundInstitutionContract.Task", "BackgroundInstitutionContract\BackgroundInstitutionContract.Task\BackgroundInstitutionContract.Task.csproj", "{F78FBB92-294B-88BA-168D-F0C578B0D7D6}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProgramManager", "ProgramManager", "{67AFF7B6-4C4F-464C-A90D-9BDB644D83A9}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProgramManager", "ProgramManager", "{67AFF7B6-4C4F-464C-A90D-9BDB644D83A9}"
ProjectSection(SolutionItems) = preProject
ProgramManager\appsettings.FileStorage.json = ProgramManager\appsettings.FileStorage.json
EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{48F6F6A5-7340-42F8-9216-BEB7A4B7D5A1}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{48F6F6A5-7340-42F8-9216-BEB7A4B7D5A1}"
EndProject EndProject

View File

@@ -61,7 +61,6 @@ using Company.Domain.HolidayItemAgg;
using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractAgg;
using Company.Domain.InstitutionContractContactInfoAgg; using Company.Domain.InstitutionContractContactInfoAgg;
using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.InstitutionContractExtensionTempAgg;
using Company.Domain.InstitutionContractSendFlagAgg;
using Company.Domain.InstitutionPlanAgg; using Company.Domain.InstitutionPlanAgg;
using Company.Domain.InsuranceAgg; using Company.Domain.InsuranceAgg;
using Company.Domain.InsuranceEmployeeInfoAgg; using Company.Domain.InsuranceEmployeeInfoAgg;
@@ -124,7 +123,6 @@ using Company.Domain.ZoneAgg;
using CompanyManagement.Infrastructure.Excel.SalaryAid; using CompanyManagement.Infrastructure.Excel.SalaryAid;
using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo; using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo;
using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo;
using CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo;
using CompanyManagment.App.Contracts.AdminMonthlyOverview; using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.App.Contracts.AndroidApkVersion; using CompanyManagment.App.Contracts.AndroidApkVersion;
using CompanyManagment.App.Contracts.AuthorizedPerson; using CompanyManagment.App.Contracts.AuthorizedPerson;
@@ -231,16 +229,153 @@ using CompanyManagment.Application;
using CompanyManagment.EFCore; using CompanyManagment.EFCore;
using CompanyManagment.EFCore._common; using CompanyManagment.EFCore._common;
using CompanyManagment.EFCore.Repository; using CompanyManagment.EFCore.Repository;
using CompanyManagment.EFCore.Repository;
using File.EfCore.Repository; using File.EfCore.Repository;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using P_TextManager.Domin.TextManagerAgg; using P_TextManager.Domin.TextManagerAgg;
using CompanyManagment.App.Contracts.PaymentCallback; using CompanyManagment.App.Contracts.CrossJobItems;
using CompanyManagment.App.Contracts.SepehrPaymentGateway; using Company.Domain.CrossJobItemsAgg;
using Company.Domain.DateSalaryAgg;
using Company.Domain.DateSalaryItemAgg;
using Company.Domain.FinancialStatmentAgg;
using Company.Domain.FinancialTransactionAgg;
using Company.Domain.GroupPlanAgg;
using Company.Domain.GroupPlanJobItemAgg;
using Company.Domain.InstitutionContractAgg;
using Company.Domain.InstitutionContractContactInfoAgg;
using CompanyManagment.App.Contracts.Insurance;
using Company.Domain.InsuranceAgg;
using Company.Domain.InsuranceEmployeeInfoAgg;
using Company.Domain.InsuranceJobItemAgg;
using Company.Domain.InsuranceListAgg;
using Company.Domain.InsurancJobAgg;
using Company.Domain.InsurancWorkshopInfoAgg;
using Company.Domain.LeftWorkInsuranceAgg;
using Company.Domain.PaymentToEmployeeAgg;
using Company.Domain.PaymentToEmployeeItemAgg;
using Company.Domain.PercentageAgg;
using Company.Domain.PersonnelCodeAgg;
using Company.Domain.SmsResultAgg;
using Company.Domain.WorkingHoursTempAgg;
using Company.Domain.WorkingHoursTempItemAgg;
using Company.Domain.WorkshopPlanAgg;
using Company.Domain.WorkshopPlanEmployeeAgg;
using Company.Domain.ZoneAgg;
using CompanyManagment.App.Contracts.ClassifiedSalary;
using CompanyManagment.App.Contracts.DateSalary;
using CompanyManagment.App.Contracts.DateSalaryItem;
using CompanyManagment.App.Contracts.EmployeeInsurancListData;
using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.FinancilTransaction;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.App.Contracts.InsuranceEmployeeInfo;
using CompanyManagment.App.Contracts.InsuranceJob;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.InsuranceWorkshopInfo;
using CompanyManagment.App.Contracts.LeftWorkInsurance;
using CompanyManagment.App.Contracts.PaymentToEmployee;
using CompanyManagment.App.Contracts.Percentage;
using CompanyManagment.App.Contracts.PersonnleCode;
using CompanyManagment.App.Contracts.SmsResult;
using CompanyManagment.App.Contracts.WorkingHoursTemp;
using CompanyManagment.App.Contracts.WorkingHoursTempItem;
using CompanyManagment.App.Contracts.WorkshopPlan;
using CompanyManagment.App.Contracts.Zone;
using CompanyManagment.App.Contracts.EmployeeComputeOptions;
using Company.Domain.EmployeeComputeOptionsAgg;
using Company.Domain.InsuranceYearlySalaryAgg;
using Company.Domain.ReportAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.RollCallEmployeeAgg;
using Company.Domain.RollCallPlanAgg;
using Company.Domain.RollCallServiceAgg;
using CompanyManagment.App.Contracts.InsuranceYearlySalary;
using CompanyManagment.App.Contracts.Report;
using CompanyManagment.App.Contracts.RollCall;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.App.Contracts.RollCallPlan;
using Company.Domain.ReportClientAgg;
using Company.Domain.TaxJobCategoryAgg;
using Company.Domain.WorkshopAccountAgg;
using CompanyManagment.App.Contracts.ReportClient;
using CompanyManagment.App.Contracts.TaxJobCategory;
using Company.Domain.RollCallEmployeeStatusAgg;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
using Company.Domain.CustomizeWorkshopSettingsAgg;
using Company.Domain.FineAgg;
using Company.Domain.LoanAgg;
using Company.Domain.RewardAgg;
using Company.Domain.SalaryAidAgg;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.Fine;
using CompanyManagment.App.Contracts.Loan;
using CompanyManagment.App.Contracts.Reward;
using CompanyManagment.App.Contracts.SalaryAid;
using Company.Domain.AndroidApkVersionAgg;
using Company.Domain.BankAgg;
using CompanyManagment.App.Contracts.AndroidApkVersion;
using Company.Domain.FineSubjectAgg;
using CompanyManagment.App.Contracts.FineSubject;
using Company.Domain.CustomizeCheckoutAgg;
using CompanyManagment.App.Contracts.CustomizeCheckout;
using Company.Domain.WorkshopSubAccountAgg;
using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.EmployeeBankInformationAgg;
using Company.Domain.RollCallAgg.DomainService;
using CompanyManagment.App.Contracts.Bank;
using CompanyManagment.App.Contracts.EmployeeBankInformation;
using Company.Domain.EmployeeDocumentItemAgg;
using Company.Domain.EmployeeDocumentsAdminSelectionAgg;
using Company.Domain.EmployeeDocumentsAgg;
using CompanyManagement.Infrastructure.Excel.SalaryAid;
using CompanyManagment.App.Contracts.EmployeeDocuments;
using CompanyManagment.App.Contracts.EmployeeDocumentsAdminSelection;
using Company.Domain.EmployeeClientTempAgg;
using Company.Domain.InstitutionPlanAgg;
using Company.Domain.LeftWorkTempAgg;
using Company.Domain.TemporaryClientRegistrationAgg;
using CompanyManagment.App.Contracts.EmployeeClientTemp;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.LeftWorkTemp;
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
using Company.Domain.ContactUsAgg;
using CompanyManagment.App.Contracts.ContactUs;
using Company.Domain.EmployeeAuthorizeTempAgg;
using Company.Domain.AdminMonthlyOverviewAgg;
using Company.Domain.AuthorizedBankDetailsAgg;
using Company.Domain.ContractingPartyBankAccountsAgg;
using Company.Domain.PaymentInstrumentAgg;
using Company.Domain.PaymentTransactionAgg;
using Company.Domain.FinancialInvoiceAgg;
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PaymentInstrument;
using CompanyManagment.App.Contracts.PaymentTransaction;
using CompanyManagment.App.Contracts.AuthorizedPerson;
using Company.Domain.AuthorizedPersonAgg;
using Company.Domain.EmployeeFaceEmbeddingAgg;
using Company.Domain.InstitutionContractExtensionTempAgg;
using Company.Domain.LawAgg;
using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo;
using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo;
using CompanyManagment.App.Contracts.EmployeeFaceEmbedding;
using CompanyManagment.App.Contracts.Law;
using CompanyManagment.EFCore.Repository;
using CompanyManagment.App.Contracts.FinancialInvoice;
using _0_Framework.Application.FaceEmbedding;
using _0_Framework.Infrastructure;
using _0_Framework.InfraStructure;
using Company.Domain.CameraBugReportAgg; using Company.Domain.CameraBugReportAgg;
using CompanyManagment.App.Contracts.AuthorizedBankDetails;
using CompanyManagment.App.Contracts.CameraBugReport; using CompanyManagment.App.Contracts.CameraBugReport;
using CompanyManagement.Infrastructure.Mongo.CameraBugReportRepo;
using CameraBugReportRepository = CompanyManagement.Infrastructure.Mongo.CameraBugReportRepo.CameraBugReportRepository; using CameraBugReportRepository = CompanyManagement.Infrastructure.Mongo.CameraBugReportRepo.CameraBugReportRepository;
using Company.Domain._common;
using CompanyManagment.EFCore._common;
using CompanyManagment.EFCore.Services; using CompanyManagment.EFCore.Services;
using Shared.Contracts.Holidays; using Shared.Contracts.Holidays;
@@ -487,8 +622,6 @@ public class PersonalBootstrapper
services.AddTransient<IPaymentTransactionRepository, PaymentTransactionRepository>(); services.AddTransient<IPaymentTransactionRepository, PaymentTransactionRepository>();
services.AddTransient<IPaymentTransactionApplication, PaymentTransactionApplication>(); services.AddTransient<IPaymentTransactionApplication, PaymentTransactionApplication>();
services.AddTransient<IPaymentCallbackHandler, PaymentCallbackHandler>();
services.AddTransient<ISepehrPaymentGatewayService, SepehrPaymentGatewayService>();
services.AddTransient<IContractingPartyBankAccountsApplication, ContractingPartyBankAccountsApplication>(); services.AddTransient<IContractingPartyBankAccountsApplication, ContractingPartyBankAccountsApplication>();
services.AddTransient<IContractingPartyBankAccountsRepository, ContractingPartyBankAccountsRepository>(); services.AddTransient<IContractingPartyBankAccountsRepository, ContractingPartyBankAccountsRepository>();
@@ -563,7 +696,6 @@ public class PersonalBootstrapper
services.AddTransient<ISmsSettingsRepository, SmsSettingsRepository>(); services.AddTransient<ISmsSettingsRepository, SmsSettingsRepository>();
services.AddTransient<ISmsSettingApplication, SmsSettingApplication>(); services.AddTransient<ISmsSettingApplication, SmsSettingApplication>();
services.AddTransient<IInstitutionContractSmsServiceRepository, InstitutionContractSmsServiceRepository>();
#endregion #endregion
@@ -661,9 +793,6 @@ public class PersonalBootstrapper
services.AddTransient<ICameraBugReportApplication, CameraBugReportApplication>(); services.AddTransient<ICameraBugReportApplication, CameraBugReportApplication>();
services.AddTransient<ICameraBugReportRepository, CameraBugReportRepository>(); // MongoDB Implementation services.AddTransient<ICameraBugReportRepository, CameraBugReportRepository>(); // MongoDB Implementation
// InstitutionContractSendFlag - MongoDB
services.AddTransient<IInstitutionContractSendFlagRepository, InstitutionContractSendFlagRepository>();
services.AddDbContext<CompanyContext>(x => x.UseSqlServer(connectionString)); services.AddDbContext<CompanyContext>(x => x.UseSqlServer(connectionString));
} }
} }

View File

@@ -9,7 +9,6 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="FluentValidation" Version="12.1.1" /> <PackageReference Include="FluentValidation" Version="12.1.1" />
<PackageReference Include="MediatR" Version="14.0.0" /> <PackageReference Include="MediatR" Version="14.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.3.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.1" /> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" /> <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
</ItemGroup> </ItemGroup>
@@ -19,10 +18,4 @@
<ProjectReference Include="..\..\Domain\GozareshgirProgramManager.Domain\GozareshgirProgramManager.Domain.csproj" /> <ProjectReference Include="..\..\Domain\GozareshgirProgramManager.Domain\GozareshgirProgramManager.Domain.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.AspNetCore.Http.Features">
<HintPath>C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\10.0.1\Microsoft.AspNetCore.Http.Features.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@@ -209,38 +209,22 @@ public class CreateOrEditCheckoutCommandHandler : IBaseCommandHandler<CreateOrEd
} }
} }
////حقوق نهایی //حقوق نهایی
//var monthlySalaryPay = (totalHoursWorked * monthlySalaryDefined) / mandatoryHours; var monthlySalaryPay = (totalHoursWorked * monthlySalaryDefined) / mandatoryHours;
//// اگر اضافه کار داشت حقوق تعین شده به عنوان حقوق نهایی در نظر گرفته میشود // اگر اضافه کار داشت حقوق تعین شده به عنوان حقوق نهایی در نظر گرفته میشود
//monthlySalaryPay = monthlySalaryPay > monthlySalaryDefined ? monthlySalaryDefined : monthlySalaryPay; monthlySalaryPay = monthlySalaryPay > monthlySalaryDefined ? monthlySalaryDefined : monthlySalaryPay;
////حقوق کسر شده //حقوق کسر شده
//var deductionFromSalary = monthlySalaryDefined - monthlySalaryPay; var deductionFromSalary = monthlySalaryDefined - monthlySalaryPay;
//new chang salary compute
var monthlySalaryPay = totalHoursWorked * monthlySalaryDefined;
//زمان باقی مانده //زمان باقی مانده
var remainingTime = totalHoursWorked - mandatoryHours; var remainingTime = totalHoursWorked - mandatoryHours;
//تناسب به دقیقه
#region MyRegion
//var monthlySalaryDefinedTest = monthlySalaryDefined * mandatoryHours;
//var monthlySalaryPayTest = totalHoursWorked * monthlySalaryDefined;
////// اگر اضافه کار داشت حقوق تعین شده به عنوان حقوق نهایی در نظر گرفته میشود
//monthlySalaryPayTest = monthlySalaryPayTest > monthlySalaryDefinedTest ? monthlySalaryDefinedTest : monthlySalaryPayTest;
//////حقوق کسر شده
//var deductionFromSalaryTest = monthlySalaryDefinedTest - monthlySalaryPayTest;
#endregion
var computeResult = new ComputeResultDto var computeResult = new ComputeResultDto
{ {
MandatoryHours = mandatoryHours, MandatoryHours = mandatoryHours,
MonthlySalaryPay = monthlySalaryPay, MonthlySalaryPay = monthlySalaryPay,
DeductionFromSalary = 0 /*deductionFromSalary*/, DeductionFromSalary = deductionFromSalary,
RemainingHours = remainingTime RemainingHours = remainingTime
}; };
Console.WriteLine(mandatoryHours); Console.WriteLine(mandatoryHours);

View File

@@ -1,11 +1,10 @@
using DNTPersianUtils.Core; using GozareshgirProgramManager.Application._Common.Interfaces;
using GozareshgirProgramManager.Application._Common.Interfaces;
using GozareshgirProgramManager.Application._Common.Models; using GozareshgirProgramManager.Application._Common.Models;
using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetUserListWhoHaveSettings; using GozareshgirProgramManager.Application.Modules.SalaryPaymentSettings.Queries.GetUserListWhoHaveSettings;
using GozareshgirProgramManager.Domain._Common; using GozareshgirProgramManager.Domain._Common;
using GozareshgirProgramManager.Domain.CheckoutAgg.Enums; using GozareshgirProgramManager.Domain.CheckoutAgg.Enums;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using PersianDateTime = PersianTools.Core.PersianDateTime; using PersianTools.Core;
namespace GozareshgirProgramManager.Application.Modules.Checkouts.Queries.GetUserToGropCreate; namespace GozareshgirProgramManager.Application.Modules.Checkouts.Queries.GetUserToGropCreate;
@@ -46,8 +45,8 @@ public class GetUserToGroupCreatingQueryHandler : IBaseQueryHandler<GetUserToGro
"ایجاد فیش فقط برای ماه های گذشته امکان پذیر است"); "ایجاد فیش فقط برای ماه های گذشته امکان پذیر است");
//var lastMonthStart = lastMonth; var lastMonthStart = lastMonth;
var lastMonthEnd = ((selectedDate.ToFarsi().FindeEndOfMonth())).ToGeorgianDateTime(); var lastMonthEnd = lastMonth;
var query = var query =
await (from u in _context.Users await (from u in _context.Users
@@ -61,8 +60,8 @@ public class GetUserToGroupCreatingQueryHandler : IBaseQueryHandler<GetUserToGro
// LEFT JOIN // LEFT JOIN
//فیش //فیش
join ch in _context.Checkouts join ch in _context.Checkouts
.Where(x => x.CheckoutStartDate < lastMonthEnd .Where(x => x.CheckoutStartDate < lastMonthStart
&& x.CheckoutEndDate > selectedDate) && x.CheckoutEndDate >= lastMonthStart)
on u.Id equals ch.UserId into chJoin on u.Id equals ch.UserId into chJoin
from ch in chJoin.DefaultIfEmpty() from ch in chJoin.DefaultIfEmpty()

View File

@@ -10,7 +10,7 @@ public record AddTaskToPhaseCommand(
Guid PhaseId, Guid PhaseId,
string Name, string Name,
string? Description = null, string? Description = null,
ProjectTaskPriority Priority = ProjectTaskPriority.Medium, TaskPriority Priority = TaskPriority.Medium,
int OrderIndex = 0, int OrderIndex = 0,
DateTime? DueDate = null DateTime? DueDate = null
) : IBaseCommand; ) : IBaseCommand;

View File

@@ -1,57 +0,0 @@
using GozareshgirProgramManager.Application._Common.Interfaces;
using GozareshgirProgramManager.Application._Common.Models;
using GozareshgirProgramManager.Domain._Common;
using GozareshgirProgramManager.Domain._Common.Exceptions;
using GozareshgirProgramManager.Domain.ProjectAgg.Enums;
using GozareshgirProgramManager.Domain.ProjectAgg.Repositories;
namespace GozareshgirProgramManager.Application.Modules.Projects.Commands.ApproveTaskSectionCompletion;
public record ApproveTaskSectionCompletionCommand(Guid TaskSectionId, bool IsApproved) : IBaseCommand;
public class ApproveTaskSectionCompletionCommandHandler : IBaseCommandHandler<ApproveTaskSectionCompletionCommand>
{
private readonly ITaskSectionRepository _taskSectionRepository;
private readonly IUnitOfWork _unitOfWork;
private readonly IAuthHelper _authHelper;
public ApproveTaskSectionCompletionCommandHandler(
ITaskSectionRepository taskSectionRepository,
IUnitOfWork unitOfWork,
IAuthHelper authHelper)
{
_taskSectionRepository = taskSectionRepository;
_unitOfWork = unitOfWork;
_authHelper = authHelper;
}
public async Task<OperationResult> Handle(ApproveTaskSectionCompletionCommand request, CancellationToken cancellationToken)
{
var currentUserId = _authHelper.GetCurrentUserId()
?? throw new UnAuthorizedException("˜ÇÑÈÑ ÇÍÑÇÒ åæ?Ê äÔÏå ÇÓÊ");
var section = await _taskSectionRepository.GetByIdAsync(request.TaskSectionId, cancellationToken);
if (section == null)
{
return OperationResult.NotFound("ÈÎÔ ãæÑÏ äÙÑ ?ÇÝÊ äÔÏ");
}
if (section.Status != TaskSectionStatus.PendingForCompletion)
{
return OperationResult.Failure("ÝÞØ ÈÎÔ<C38E>åÇ?? ˜å ÏÑ ÇäÊÙÇÑ Ê˜ã?á åÓÊäÏ ÞÇÈá ÊÇ??Ï ?Ç ÑÏ åÓÊäÏ");
}
if (request.IsApproved)
{
section.UpdateStatus(TaskSectionStatus.Completed);
}
else
{
section.UpdateStatus(TaskSectionStatus.Incomplete);
}
await _unitOfWork.SaveChangesAsync(cancellationToken);
return OperationResult.Success();
}
}

View File

@@ -1,14 +0,0 @@
using FluentValidation;
namespace GozareshgirProgramManager.Application.Modules.Projects.Commands.ApproveTaskSectionCompletion;
public class ApproveTaskSectionCompletionCommandValidator : AbstractValidator<ApproveTaskSectionCompletionCommand>
{
public ApproveTaskSectionCompletionCommandValidator()
{
RuleFor(c => c.TaskSectionId)
.NotEmpty()
.NotNull()
.WithMessage("ÔäÇÓå ÈÎÔ äã?<3F>ÊæÇäÏ ÎÇá? ÈÇÔÏ");
}
}

Some files were not shown because too many files have changed in this diff Show More