Compare commits

...

77 Commits

Author SHA1 Message Date
147621de34 feat: update institution contract creation to retrieve representatives and set contracting party info 2025-12-30 20:53:44 +03:30
d663857de1 feat: add contracting party response class and update endpoints for institution contract creation 2025-12-30 19:51:28 +03:30
9bbdff9bc6 fix bug InstitutionContractRepository.cs 2025-12-30 16:44:02 +03:30
d11fdcf106 feat: enhance institution contract creation with representative retrieval and code formatting improvements 2025-12-30 14:25:11 +03:30
12318a6a51 refactor: comment out unused methods and clean up repository interfaces 2025-12-30 11:37:33 +03:30
836e721b6f feat: refactor institution contract creation classes and endpoints 2025-12-30 10:38:07 +03:30
8fca1f3a91 feat: add institution contract creation inquiry functionality 2025-12-29 22:19:16 +03:30
2feca1f7f8 add creation 2025-12-29 19:31:18 +03:30
4e9cecbb74 Merge branch 'Feature/Excel/instiutition-contract' 2025-12-29 17:21:58 +03:30
adf297455f feat: enhance Excel export for institution contracts by removing row number and adding dynamic physical contract status 2025-12-29 17:20:07 +03:30
1d656a590f Merge remote-tracking branch 'origin/master' 2025-12-29 16:26:08 +03:30
SamSys
a33d7c019c launchsettnig 2025-12-29 15:08:53 +03:30
SamSys
d62b5ca155 Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-29 14:37:47 +03:30
SamSys
18a4334d8a change WarningMessage on InsuranceList Edit 2025-12-29 14:36:03 +03:30
84416fe1f5 feat: add validation for in-person contract approval and suppress documentation warnings 2025-12-29 13:29:32 +03:30
Mahan Chamani
bd1c1fa814 Refactor deployment script to use env variables
Updated deployment configuration to use environment variables for server host and credentials.
2025-12-29 12:22:10 +03:30
Mahan Chamani
8496b52013 Change deployment target from master to Main
Updated deployment configuration with new server details.
2025-12-29 11:17:59 +03:30
Mahan Chamani
5c1547dced Update dotnet-developPublish.yml 2025-12-29 09:51:06 +03:30
Mahan Chamani
c09321d89d Update dotnet-developPublish.yml 2025-12-29 09:50:40 +03:30
219e64c0f7 add menu 2025-12-29 09:35:33 +03:30
b42217ed94 Merge branch 'Feature/Excel/instiutiton-contract' 2025-12-28 19:31:14 +03:30
8b6786c09a add route for excel download 2025-12-28 19:20:25 +03:30
45c5d20323 add excel download 2025-12-28 19:17:50 +03:30
ad6f872145 fix: update contract and insurance list links to use dynamic domain 2025-12-28 18:31:13 +03:30
d22805892a Merge branch 'Feature/Insurance/client-api'
# Conflicts:
#	CompanyManagment.EFCore/Repository/InsuranceListRepository.cs
2025-12-28 18:25:14 +03:30
4da496cab8 Merge branch 'Feature/contracts/api' 2025-12-28 13:08:56 +03:30
aa0eae6c83 feat: implement Excel export for institution contracts with categorized tabs 2025-12-28 13:01:40 +03:30
SamSys
4b40580658 Merge branch 'master' into Feature/ClientLeavePageApi 2025-12-27 19:16:39 +03:30
SamSys
8bc9e044ae Warning Mesage For EmployeeShare bug Fixed 2025-12-27 18:24:50 +03:30
SamSys
cddaf2f709 changes 2025-12-27 16:58:36 +03:30
SamSys
337cd40a4e LeaveDuration daily and hourly on create modal completed 2025-12-27 16:51:08 +03:30
SamSys
a98300cacd GetHourlyLeaveDuration 2025-12-27 15:49:39 +03:30
SamSys
daded35ab1 Merge branch 'master' into Feature/ClientLeavePageApi 2025-12-27 14:06:29 +03:30
SamSys
ba778bb519 LeaveListPrint 2025-12-27 14:06:10 +03:30
SamSys
27e8d302d9 Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-27 12:06:35 +03:30
SamSys
54c67fe8f7 add ListPrint 2025-12-27 12:06:02 +03:30
92e1d6de5c Merge branch 'Feature/institution-contract/refactor-list' 2025-12-27 10:26:35 +03:30
c488f61a09 refactor: enhance error logging and add installment amount to institution contract view model 2025-12-27 10:26:12 +03:30
SamSys
dc703fad3c Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-25 17:56:45 +03:30
54e5904951 add from form to verify gateway 2025-12-25 17:16:07 +03:30
SamSys
a638913172 create levave api and get rotating shift api 2025-12-25 16:16:50 +03:30
a986212834 add from form to verify gateway 2025-12-25 15:11:27 +03:30
649242fc76 refactor: optimize institution contract list retrieval and improve workshop group loading 2025-12-25 14:33:00 +03:30
SamSys
d254da1393 bacgrountTask InstitutionContract some changes 2025-12-25 12:32:10 +03:30
ad4b0be033 fix: improve error handling and streamline activation process in ActiveAll method 2025-12-25 11:28:29 +03:30
733f39db9f feat: add total amount and one month payment without discount to institution contract 2025-12-24 22:22:49 +03:30
94237434c5 fix: safely deactivate previous institution contract if it exists 2025-12-24 19:30:58 +03:30
2da8bc8a20 Merge remote-tracking branch 'origin/master' 2025-12-24 18:55:19 +03:30
8b217f6cd0 remove maximum length validation for project name in CreateProjectCommandValidator 2025-12-24 18:28:02 +03:30
SamSys
74bd802a3d sms settings frontEnd bug fixed 2025-12-24 18:24:37 +03:30
b58481a36f add employee client api 2025-12-24 18:07:43 +03:30
SamSys
3fd17299f9 fix 2025-12-24 17:20:26 +03:30
SamSys
fc315cc908 change backgrooundTask 2025-12-24 17:18:21 +03:30
SamSys
abe07e1c4b Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-24 16:58:47 +03:30
SamSys
6046f55ece backgroundTask change 2025-12-24 16:58:35 +03:30
d80a36ec35 add: create EmployeeController to manage employee selection for workshops 2025-12-24 16:31:32 +03:30
SamSys
7b648b135e add new logs 2025-12-24 16:22:51 +03:30
SamSys
5998bd212f Merge branch 'master' of https://github.com/samsyntax24/OriginalGozareshgir 2025-12-24 15:56:17 +03:30
SamSys
d77bffabdd add SeriLog on Backgroundtask InstitutionContract 2025-12-24 15:56:00 +03:30
4f0e5a34a4 add: implement reactivation logic for institution contracts and retrieve previous contracts 2025-12-24 15:40:06 +03:30
5faa2062b9 add: implement reactivation logic for contracting parties and associated employers after extension 2025-12-24 13:54:51 +03:30
30b4f52896 add: refactor RollCall application to support asynchronous operations and enhance transaction handling 2025-12-23 20:16:33 +03:30
134466547e add: enhance InstitutionContractRepository to include employer workshops and left work details 2025-12-23 18:54:10 +03:30
a191968c15 add: include Installments in InstitutionContractRepository query 2025-12-23 18:16:50 +03:30
d740c36dc6 add: update ProjectBoardDetailResponse to use TotalTimeMinute and SpentTimeMinute 2025-12-23 17:33:09 +03:30
8e5d4c312e fix: correct spelling of 'Month' and enhance insurance client list retrieval with additional properties 2025-12-21 11:03:23 +03:30
4b39994de6 feat: add API endpoint for printing multiple contracts 2025-12-20 15:50:34 +03:30
0dd2dc7c43 add workshopCode on client contract print 2025-12-20 15:21:34 +03:30
20c00893b6 feat: add API endpoint for printing contract details and enhance contract print logic 2025-12-20 14:23:23 +03:30
b0d174a575 feat: implement contract printing methods and view models 2025-12-20 13:04:30 +03:30
293ea0f6f4 feat: enhance insurance client print model with additional properties and update related logic 2025-12-20 10:13:13 +03:30
3ce4cf3966 add insurance print api for client 2025-12-18 13:34:31 +03:30
0fbd5c9d3e Add print methods and ContractPrintViewModel class
Updated the `IContractApplication` interface:
- Added `PrintOneAsync(long id)` and `PrintAllAsync(List<long> ids)` methods.
- Corrected formatting of `DeleteAllContarcts(List<long> ids)`.
- Grouped changes under the `NewChangeByHeydari` region.

Introduced the `ContractPrintViewModel` class (currently empty).

Implemented `PrintOneAsync` and `PrintAllAsync` in `ContractApplication` with `NotImplementedException`.

These changes prepare the codebase for contract printing functionality.
2025-11-11 19:29:51 +03:30
8436f70aa0 Refactor and enhance contract handling logic
- Added `DailyWage`, `AvgWorkingHour`, and `FamilyAllowance` properties to `GetContractListForClientResponse`.
- Refactored `WorkingHoursWeekly` conversion logic by introducing a reusable `WeeklyHourConvertor` method in `ContractRepository`.
- Updated query result mapping to include new properties and utilize `WeeklyHourConvertor` for `AvgWorkingHour`.
- Improved code readability and maintainability by centralizing repetitive logic.
2025-11-11 19:26:45 +03:30
9cf8447a83 feat: add API for retrieving paginated contract list for client with filtering options 2025-11-03 17:49:51 +03:30
e124a4d5d9 feat: implement method to retrieve paginated contract list for client with filtering options 2025-11-03 17:43:50 +03:30
7b9e7881c6 feat: add commented-out method for retrieving contract list for client 2025-11-03 14:45:41 +03:30
77 changed files with 5098 additions and 1181 deletions

View File

@@ -5,8 +5,6 @@ on:
branches: branches:
- Main - Main
env:
DOTNET_ENVIRONMENT: Development
jobs: jobs:
build-and-deploy: build-and-deploy:
@@ -37,12 +35,11 @@ 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://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R",authType="Basic" ` -dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" `
-allowUntrusted ` -allowUntrusted `
-enableRule:AppOffline -enableRule:AppOffline
env: env:
SERVER_HOST: your-server-ip-or-domain SERVER_HOST: 171.22.24.15
DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }} DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}

View File

@@ -24,9 +24,13 @@ public class CustomExceptionHandler : IExceptionHandler
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken) public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken)
{ {
_logger.LogError( _logger.LogError(exception,
"Error Message: {exceptionMessage}, Time of occurrence {time}", "Error Message: {exceptionMessage}, Type: {exceptionType}, Time: {time}, Path: {path}, TraceId: {traceId}",
exception.Message, DateTime.UtcNow); exception.Message,
exception.GetType().FullName,
DateTime.UtcNow,
context.Request.Path,
context.TraceIdentifier);
(string Detail, string Title, int StatusCode, Dictionary<string, object>? Extra) details = exception switch (string Detail, string Title, int StatusCode, Dictionary<string, object>? Extra) details = exception switch
{ {

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,

View File

@@ -745,25 +745,25 @@ public class AccountApplication : IAccountApplication
} }
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,

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,14 +18,13 @@ 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, IWorkshopAccountRepository workshopAccountRepository, IWorkshopApplication workshopApplication) : base(accountContext) public AccountLeftworkRepository(AccountContext 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)
{ {
@@ -58,14 +57,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

@@ -17,4 +17,9 @@
<ProjectReference Include="..\..\WorkFlow\Infrastructure\WorkFlow.Infrastructure.Config\WorkFlow.Infrastructure.Config.csproj" /> <ProjectReference Include="..\..\WorkFlow\Infrastructure\WorkFlow.Infrastructure.Config\WorkFlow.Infrastructure.Config.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
</ItemGroup>
</Project> </Project>

View File

@@ -15,19 +15,21 @@ public class JobSchedulerRegistrator
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;
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService) 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;
} }
public void Register() public void Register()
{ {
_logger.LogInformation("hangfire Started");
RecurringJob.AddOrUpdate( RecurringJob.AddOrUpdate(
"InstitutionContract.CreateFinancialTransaction", "InstitutionContract.CreateFinancialTransaction",
() => CreateFinancialTransaction(), () => CreateFinancialTransaction(),
@@ -68,7 +70,7 @@ public class JobSchedulerRegistrator
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");
if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 && if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
now.Date != _lastRunCreateTransaction?.Date) now.Date != _lastRunCreateTransaction?.Date)
{ {
@@ -113,7 +115,7 @@ public class JobSchedulerRegistrator
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("SendFirstDayOfMonthSms job run");
if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 && if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 &&
now.Date != _lastRunSendMonthlySms?.Date) now.Date != _lastRunSendMonthlySms?.Date)
{ {
@@ -141,6 +143,7 @@ public class JobSchedulerRegistrator
[DisableConcurrentExecution(timeoutInSeconds: 1200)] [DisableConcurrentExecution(timeoutInSeconds: 1200)]
public async System.Threading.Tasks.Task SendReminderSms() public async System.Threading.Tasks.Task SendReminderSms()
{ {
_logger.LogInformation("SendReminderSms job run");
await _institutionContractRepository.SendReminderSmsForBackgroundTask(); await _institutionContractRepository.SendReminderSmsForBackgroundTask();
} }
@@ -151,6 +154,7 @@ public class JobSchedulerRegistrator
[DisableConcurrentExecution(timeoutInSeconds: 100)] [DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task SendBlockSms() public async System.Threading.Tasks.Task SendBlockSms()
{ {
_logger.LogInformation("SendBlockSms job run");
await _institutionContractRepository.SendBlockSmsForBackgroundTask(); await _institutionContractRepository.SendBlockSmsForBackgroundTask();
} }
@@ -162,6 +166,7 @@ public class JobSchedulerRegistrator
[DisableConcurrentExecution(timeoutInSeconds: 100)] [DisableConcurrentExecution(timeoutInSeconds: 100)]
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms() public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
{ {
_logger.LogInformation("SendInstitutionContractConfirmSms job run");
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask(); await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
} }

View File

@@ -17,9 +17,37 @@ using Microsoft.AspNetCore.Identity;
using MongoDB.Driver; using MongoDB.Driver;
using PersonalContractingParty.Config; using PersonalContractingParty.Config;
using Query.Bootstrapper; using Query.Bootstrapper;
using Serilog;
using Serilog.Events;
using Shared.Contracts.PmUser.Queries; using Shared.Contracts.PmUser.Queries;
using WorkFlow.Infrastructure.Config; using WorkFlow.Infrastructure.Config;
var logDirectory = @"C:\Logs\Hangfire\BackgroundInstitutionContract\";
if (!Directory.Exists(logDirectory))
{
Directory.CreateDirectory(logDirectory);
}
Log.Logger = new LoggerConfiguration()
//NO EF Core log
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
//NO DbCommand log
.MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Command", LogEventLevel.Warning)
//NO Microsoft Public log
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
//.MinimumLevel.Information()
.WriteTo.File(
path: Path.Combine(logDirectory, "institution-contract-log-.txt"),
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 30,
shared: true,
outputTemplate:
"{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"
).CreateLogger();
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
var hangfireConnectionString = builder.Configuration.GetConnectionString("HangfireDb"); var hangfireConnectionString = builder.Configuration.GetConnectionString("HangfireDb");
builder.Services.AddHangfire(x => x.UseSqlServerStorage(hangfireConnectionString)); builder.Services.AddHangfire(x => x.UseSqlServerStorage(hangfireConnectionString));
@@ -59,7 +87,13 @@ builder.Services.AddHttpClient();
builder.Services.AddHttpContextAccessor(); builder.Services.AddHttpContextAccessor();
builder.Services.AddSignalR(); builder.Services.AddSignalR();
builder.Host.UseSerilog();
Log.Information("SERILOG STARTED SUCCESSFULLY");
var app = builder.Build(); var app = builder.Build();
app.MapHub<SendSmsHub>("/sendSmsHub"); app.MapHub<SendSmsHub>("/sendSmsHub");
app.MapHangfireDashboard(); app.MapHangfireDashboard();

View File

@@ -25,8 +25,8 @@
//mahan Docker //mahan Docker
//"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;", //"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;",
//"HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;", "HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;",
"HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;" //"HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;"
}, },
"GoogleRecaptchaV3": { "GoogleRecaptchaV3": {

View File

@@ -48,6 +48,10 @@ 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
@@ -63,4 +67,8 @@ 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

@@ -76,6 +76,7 @@ public interface IEmployeeRepository : IRepository<long, Employee>
#region Api #region Api
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);
#endregion #endregion

View File

@@ -58,7 +58,11 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
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
@@ -159,4 +163,12 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
#endregion #endregion
Task<long> GetIdByInstallmentId(long installmentId); Task<long> GetIdByInstallmentId(long installmentId);
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);
} }

View File

@@ -23,6 +23,8 @@ 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

@@ -0,0 +1,340 @@
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

@@ -78,6 +78,7 @@ 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

@@ -12,7 +12,7 @@ public interface ILeaveRepository : IRepository<long, Leave>
{ {
EditLeave GetDetails(long id); EditLeave GetDetails(long id);
List<LeaveViewModel> search(LeaveSearchModel searchModel); List<LeaveViewModel> search(LeaveSearchModel searchModel);
OperationResult RemoveLeave(long id); Task<OperationResult> RemoveLeave(long id);
#region Pooya #region Pooya
List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end); List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
@@ -54,4 +54,11 @@ public interface ILeaveRepository : IRepository<long, Leave>
/// <param name="searchModel"></param> /// <param name="searchModel"></param>
/// <returns></returns> /// <returns></returns>
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel); Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task<LeaveListPrintDto> ListPrint(List<long> ids);
} }

View File

@@ -8,86 +8,129 @@ 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<InstitutionContractViewModel> institutionContractViewModels) public static byte[] GenerateExcel(List<InstitutionContractExcelViewModel> contractViewModels)
{ {
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("آبی");
blueWorksheet.TabColor = Color.LightBlue;
var grayWorksheet = package.Workbook.Worksheets.Add("خاکستری");
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); foreach (var viewModel in contractViewModels)
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList(); {
var worksheet = CreateWorksheet(package, viewModel.Tab);
var yellowContracts = institutionContractViewModels CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet);
.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();
} }
private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet) /// <summary>
/// ایجاد شیت بر اساس نوع تب
/// </summary>
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
{ {
// Headers return status switch
worksheet.Cells[1, 1].Value = "شماره قرارداد"; {
worksheet.Cells[1, 2].Value = "طرف حساب"; InstitutionContractListStatus.DeactiveWithDebt =>
worksheet.Cells[1, 3].Value = "شماره کارفرما"; CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue),
worksheet.Cells[1, 4].Value = "کارفرما ها";
worksheet.Cells[1, 5].Value = "کارگاه ها"; InstitutionContractListStatus.Deactive =>
worksheet.Cells[1, 6].Value = "مجبوع پرسنل"; CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
worksheet.Cells[1, 7].Value = "شروع قرارداد";
worksheet.Cells[1, 8].Value = "پایان قرارداد"; InstitutionContractListStatus.PendingForRenewal =>
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)"; CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
worksheet.Cells[1, 11].Value = "وضعیت مالی"; 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)
};
}
using (var range = worksheet.Cells[1, 1, 1, 11]) /// <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;
@@ -110,30 +153,35 @@ public class InstitutionContractExcelGenerator
int row = 2; int row = 2;
for (int i = 0; i < institutionContractViewModels.Count; i++) for (int i = 0; i < contractItems.Count; i++)
{ {
var contract = institutionContractViewModels[i]; var contract = contractItems[i];
var employers = contract.EmployerViewModels?.ToList() ?? new(); var employers = contract.EmployerNames?.ToList() ?? new();
var workshops = contract.WorkshopViewModels?.ToList() ?? new(); var workshops = contract.WorkshopNames?.ToList() ?? new();
int maxRows = Math.Max(employers.Count, workshops.Count); int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست
maxRows = Math.Max(1, maxRows);
int startRow = row; int startRow = row;
int endRow = row + maxRows - 1; int endRow = row + maxRows - 1;
// 🎨 دریافت رنگ پس‌زمینه از مقدار رنگ موجود در داده // 🎨 دریافت رنگ پس‌زمینه بر اساس وضعیت قرارداد
string colorName = contract.ExpireColor.ToLower(); var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount);
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;
worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null; // پر کردن ستون‌های employer و workshop
worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null; var employerColIndex = GetColumnIndexForType(ExcelColumnType.EmployerName, visibleColumnIndices);
var workshopColIndex = GetColumnIndexForType(ExcelColumnType.WorkshopName, visibleColumnIndices);
for (int col = 1; col <= 11; col++) if (employerColIndex > 0)
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];
@@ -154,109 +202,235 @@ public class InstitutionContractExcelGenerator
} }
// 🧱 مرج و مقداردهی ستون‌های اصلی // 🧱 مرج و مقداردهی ستون‌های اصلی
worksheet.Cells[startRow, 1, endRow, 1].Merge = true; FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices);
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, 11]; var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount];
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; // تنظیم عرض ستون‌ها بر اساس نوع ستون
int archiveNoCol = 3; for (int i = 0; i < visibleColumns.Count; i++)
int employersCol = 4; {
int workshopsCol = 5; int columnIndex = i + 1;
int employeeCountCol = 6; worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]);
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)
{ {
Console.WriteLine(value); if (string.IsNullOrEmpty(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 name switch return status switch
{ {
"blue" => Color.LightBlue, InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue,
_ when IsContractingPartyBlock == "true" => Color.LightGray, InstitutionContractListStatus.Deactive => Color.LightGray,
"red" => Color.LightCoral, InstitutionContractListStatus.PendingForRenewal => Color.LightCoral,
"purple" => Color.MediumPurple, InstitutionContractListStatus.Free => Color.MediumPurple,
"black" => Color.DimGray, InstitutionContractListStatus.Block => Color.DimGray,
var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow, InstitutionContractListStatus.WithoutWorkshop => 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

@@ -3,6 +3,7 @@
<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

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

View File

@@ -0,0 +1,13 @@
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

@@ -0,0 +1,15 @@
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,6 +3,8 @@ 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
@@ -45,16 +47,101 @@ 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>
/// لیست قراردادها برای کلاینت
/// </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);
#region NewChangeByHeydari #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);
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel); List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
#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

@@ -94,7 +94,42 @@ public interface IEmployeeApplication
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel); Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
/// <summary>
/// لیست کل پرسنل کلاینت
/// </summary>
/// <param name="searchModel"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
#endregion #endregion
}
public class GetClientEmployeeListSearchModel
{
}
public class GetClientEmployeeListViewModel
{
public string FullName { get; set; }
public long EmployeeId { get; set; }
public long WorkshopId { get; set; }
public long PersonnelCode { get; set; }
public string MaritalStatus { get; set; }
public string NationalCode { get; set; }
public string IdNumber { get; set; }
public string DateOfBirthFa { get; set; }
public string FatherName { get; set; }
public int ChildrenCount { get; set; }
public string LastStartInsuranceWork { get; set; }
public string LastLeftInsuranceWork { get; set; }
public string LastStartContractWork { get; set; }
public string LastLeftContractWork { get; set; }
public bool HasContractLeftWork { get; set; }
public bool HasInsuranceLeftWork { get; set; }
public bool LeftWorkCompletely { get; set; }
public bool PendingStartWork { get; set; }
public bool PendingLeftWork { get; set; }
} }

View File

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

View File

@@ -5,8 +5,10 @@ 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;
@@ -26,21 +28,21 @@ public interface IInstitutionContractApplication
/// <param name="command">اطلاعات قرارداد جدید</param> /// <param name="command">اطلاعات قرارداد جدید</param>
/// <returns>نتیجه عملیات</returns> /// <returns>نتیجه عملیات</returns>
OperationResult Create(CreateInstitutionContract command); OperationResult Create(CreateInstitutionContract command);
/// <summary> /// <summary>
/// تمدید قرارداد موجود /// تمدید قرارداد موجود
/// </summary> /// </summary>
/// <param name="command">اطلاعات قرارداد برای تمدید</param> /// <param name="command">اطلاعات قرارداد برای تمدید</param>
/// <returns>نتیجه عملیات</returns> /// <returns>نتیجه عملیات</returns>
OperationResult Extension(CreateInstitutionContract command); OperationResult Extension(CreateInstitutionContract command);
/// <summary> /// <summary>
/// ویرایش قرارداد موجود /// ویرایش قرارداد موجود
/// </summary> /// </summary>
/// <param name="command">اطلاعات جدید قرارداد</param> /// <param name="command">اطلاعات جدید قرارداد</param>
/// <returns>نتیجه عملیات</returns> /// <returns>نتیجه عملیات</returns>
OperationResult Edit(EditInstitutionContract command); OperationResult Edit(EditInstitutionContract command);
/// <summary> /// <summary>
/// دریافت جزئیات قرارداد برای ویرایش /// دریافت جزئیات قرارداد برای ویرایش
/// </summary> /// </summary>
@@ -54,7 +56,7 @@ public interface IInstitutionContractApplication
/// <param name="searchModel">مدل جستجو</param> /// <param name="searchModel">مدل جستجو</param>
/// <returns>لیست قراردادها</returns> /// <returns>لیست قراردادها</returns>
List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel); List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel);
/// <summary> /// <summary>
/// جستجوی جدید در قراردادها /// جستجوی جدید در قراردادها
/// </summary> /// </summary>
@@ -76,7 +78,7 @@ public interface IInstitutionContractApplication
/// <param name="id">لیست شناسه قراردادها</param> /// <param name="id">لیست شناسه قراردادها</param>
/// <returns>لیست قراردادها برای چاپ</returns> /// <returns>لیست قراردادها برای چاپ</returns>
List<InstitutionContractViewModel> PrintAll(List<long> id); List<InstitutionContractViewModel> PrintAll(List<long> id);
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")] [Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
/// <summary> /// <summary>
@@ -146,7 +148,7 @@ public interface IInstitutionContractApplication
/// <param name="id">شناسه قرارداد</param> /// <param name="id">شناسه قرارداد</param>
/// <returns>نتیجه عملیات</returns> /// <returns>نتیجه عملیات</returns>
OperationResult UnSign(long id); OperationResult UnSign(long id);
/// <summary> /// <summary>
/// ایجاد حساب کاربری برای طرف قرارداد /// ایجاد حساب کاربری برای طرف قرارداد
/// </summary> /// </summary>
@@ -191,32 +193,56 @@ public interface IInstitutionContractApplication
/// <param name="command"></param> /// <param name="command"></param>
/// <returns></returns> /// <returns></returns>
Task<OperationResult> EditAsync(EditInstitutionContractRequest command); Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
/// <summary> /// <summary>
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده /// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
/// جهت نمایش در کارپوشه /// جهت نمایش در کارپوشه
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList(); Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
/// <summary> /// <summary>
/// دریافت آیتم های کارپوشه ثبت نام /// دریافت آیتم های کارپوشه ثبت نام
/// </summary> /// </summary>
/// <param name="institutionContractId"></param> /// <param name="institutionContractId"></param>
/// <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);
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id); Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl); Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId); Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
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);
@@ -229,25 +255,31 @@ public interface IInstitutionContractApplication
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod( Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
InstitutionContractExtensionPaymentRequest request); InstitutionContractExtensionPaymentRequest request);
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
Task<OperationResult> ResendVerifyLink(long institutionContractId); Task<OperationResult> ResendVerifyLink(long institutionContractId);
@@ -259,8 +291,9 @@ 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>
@@ -268,4 +301,42 @@ 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);
}
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

@@ -0,0 +1,11 @@
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

@@ -3,6 +3,13 @@ using System;
namespace CompanyManagment.App.Contracts.InstitutionContract; namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractExtensionCompleteRequest public class InstitutionContractExtensionCompleteRequest
{
public Guid TemporaryId { get; set; }
public bool IsInstallment { get; set; }
public long LawId { get; set; }
}
public class InstitutionContractCreationCompleteRequest
{ {
public Guid TemporaryId { get; set; } public Guid TemporaryId { get; set; }
public bool IsInstallment { get; set; } public bool IsInstallment { get; set; }

View File

@@ -24,4 +24,21 @@ public class InstitutionContractExtensionInquiryResult
public string Province { get; set; } public string Province { get; set; }
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

@@ -3,6 +3,11 @@ using System;
namespace CompanyManagment.App.Contracts.InstitutionContract; namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractExtensionPaymentRequest public class InstitutionContractExtensionPaymentRequest
{
public InstitutionContractDuration Duration { get; set; }
public Guid TempId { get; set; }
}
public class InstitutionContractCreationPaymentRequest
{ {
public InstitutionContractDuration Duration { get; set; } public InstitutionContractDuration Duration { get; set; }
public Guid TempId { get; set; } public Guid TempId { get; set; }

View File

@@ -5,4 +5,11 @@ public class InstitutionContractExtensionPaymentResponse
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; } public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
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

@@ -5,6 +5,13 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
namespace CompanyManagment.App.Contracts.InstitutionContract; namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractExtensionPlanRequest public class InstitutionContractExtensionPlanRequest
{
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
public Guid TempId { get; set; }
}
public class InstitutionContractCreationPlanRequest
{ {
public List<WorkshopTempViewModel> WorkshopTemps { get; set; } public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; } public string TotalAmount { get; set; }

View File

@@ -7,7 +7,18 @@ 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 public class InstitutionContractExtensionPlanDetail:InstitutionContractCreationPlanDetail
{
}
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

@@ -18,10 +18,20 @@ public class InstitutionContractPaymentOneTimeViewModel
/// </summary> /// </summary>
public string PaymentAmount { get; set; } public string PaymentAmount { get; set; }
/// <summary>
/// مجموع مبالغ بدون تخفیف
/// </summary>
public string TotalAmountWithoutDiscount { get; set; }
/// <summary>
/// مبلغ یک ماه بدون تخفیف
/// </summary>
public string OneMonthPaymentWithoutDiscount { get; set; }
public string DiscountedAmount { get; set; } public string DiscountedAmount { get; set; }
public int DiscountPercetage { get; set; } public int DiscountPercetage { get; set; }
} }
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
{ {
public List<MonthlyInstallment> Installments { get; set; } public List<MonthlyInstallment> Installments { get; set; } = [];
} }

View File

@@ -3,6 +3,11 @@ using System;
namespace CompanyManagment.App.Contracts.InstitutionContract; namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractResetDiscountForExtensionRequest public class InstitutionContractResetDiscountForExtensionRequest
{
public Guid TempId { get; set; }
public bool IsInstallment { get; set; }
}
public class InstitutionContractResetCreationForExtensionRequest
{ {
public Guid TempId { get; set; } public Guid TempId { get; set; }
public bool IsInstallment { get; set; } public bool IsInstallment { get; set; }

View File

@@ -3,6 +3,13 @@ using System;
namespace CompanyManagment.App.Contracts.InstitutionContract; namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractSetDiscountForExtensionRequest public class InstitutionContractSetDiscountForExtensionRequest
{
public Guid TempId { get; set; }
public int DiscountPercentage { get; set; }
public double TotalAmount { get; set; }
public bool IsInstallment { get; set; }
}
public class InstitutionContractSetDiscountForCreationRequest
{ {
public Guid TempId { get; set; } public Guid TempId { get; set; }
public int DiscountPercentage { get; set; } public int DiscountPercentage { get; set; }

View File

@@ -5,6 +5,7 @@ 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;
@@ -96,6 +97,94 @@ 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
@@ -113,4 +202,11 @@ 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

@@ -0,0 +1,15 @@
namespace CompanyManagment.App.Contracts.Leave;
public class CheckIsInvalidLeaveDto
{
/// <summary>
/// آیا تعطیل است
/// </summary>
public bool IsHoliday { get; set; }
/// <summary>
/// فاقد/دارای اعتبار فیش غیر رسمی
/// </summary>
public bool CanCreateInvalid { get; set; }
}

View File

@@ -0,0 +1,78 @@
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
namespace CompanyManagment.App.Contracts.Leave;
public class CreateLeaveDto
{
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
public string EndLeave { get; set; }
/// <summary>
/// آی دی کارگاه
/// </summary>
public long WorkshopId { get; set; }
/// <summary>
/// آی دی پرسنل
/// </summary>
public long EmployeeId { get; set; }
/// <summary>
/// نوع مدت مرخص روزانه/ ساعتی
/// </summary>
public PaidLeaveType PaidLeaveType { get; set; }
/// <summary>
/// نوع مرخصی استحقاقی/استعلاجی
/// </summary>
public LeaveType LeaveType { get; set; }
/// <summary>
/// نام کامل کارگاه
/// </summary>
public string WorkshopName { get; set; }
/// <summary>
/// ساعت شروع مرخصی
/// </summary>
public string StartHoures { get; set; }
/// <summary>
/// ساعت پایان مرخصی
/// </summary>
public string EndHours { get; set; }
/// <summary>
/// موافقت / عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Decription { get; set; }
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
/// <summary>
/// دارای اعتبار / فاقد اعتبار فیش غیررسمی
/// </summary>
public bool IsInvallid { get; set; }
public CustomizeRotatingShiftsViewModel SelectedShift { get; set; }
}

View File

@@ -19,6 +19,7 @@ public interface ILeaveApplication
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id); GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
OperationResult RemoveLeave(long id); OperationResult RemoveLeave(long id);
Task<OperationResult> RemoveLeaveAsync(long id);
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId); LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
List<LeaveMainViewModel> searchClient(LeaveSearchModel search); List<LeaveMainViewModel> searchClient(LeaveSearchModel search);
@@ -70,7 +71,57 @@ public interface ILeaveApplication
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId); Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId); Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
/// <summary>
/// چک میکند که تاریخ وارد شده در شروع مرخصی تعطیل است یا خیر
/// دارای/فاقد اعتبار فیش غیررسمی را چک میکند
/// </summary>
/// <param name="startLeaveDate"></param>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId);
/// <summary>
/// ایجاد مرخصی از ای پی آی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateLeave(CreateLeaveDto command);
/// <summary>
/// چک میکند که آیا پرسنل حضور غیاب دارای شیفت گردشی دارد یا خیر
/// اگر داشت دریافت شیف گردشی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="startLeaveDate"></param>
/// <returns></returns>
Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId, long employeeId, string startLeaveDate);
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
Task<LeaveListPrintDto> ListPrint(List<long> ids);
/// <summary>
/// محاسبه مدت مرخصی ساعتی
/// </summary>
/// <param name="startHours"></param>
/// <param name="endHours"></param>
/// <returns></returns>
Task<string> GetHourlyLeaveDuration(string startHours, string endHours);
/// <summary>
/// محاسبه مدت مرخصی روزانه
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
Task<string> GetDailyLeaveDuration(string startDate, string endDate);
} }
public class LeavePrintResponseViewModel public class LeavePrintResponseViewModel

View File

@@ -0,0 +1,77 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
/// <summary>
/// پرینت لیستی
/// api
/// </summary>
public class LeaveListPrintDto
{
/// <summary>
/// نام کامل پرسنل
/// </summary>
public string EmployeeFullName { get; set; }
/// <summary>
/// مجموع مرخصی پرسنل
/// </summary>
public string? SumOfEmployeeleaves { get; set; }
/// <summary>
/// لیست مرخصی
/// </summary>
public List<LeavePrintListItemsDto> LeavePrintListItemsDto { get; set; }
}
public class LeavePrintListItemsDto
{
/// <summary>
/// سال مرخصی
/// </summary>
public string YearStr { get; set; }
/// <summary>
/// ماه مرخصی
/// </summary>
public string MonthStr { get; set; }
/// <summary>
/// نوع مرخصی، استحقاقی/استعلاجی
/// </summary>
public string LeaveType { get; set; }
/// <summary>
/// تاریخ شروع مرخصی
/// </summary>
public string StartLeave { get; set; }
/// <summary>
/// تاریخ پایان مرخصی
/// </summary>
public string EndLeave { get; set; }
/// <summary>
/// زمان مرخصی
/// بازه مرخصی ساعتی
/// </summary>
public string HourlyInterval { get; set; }
/// <summary>
/// مدت مرخصی
/// </summary>
public string LeaveDuration { get; set; }
/// <summary>
/// موافقت/عدم موافقت کارفرما
/// </summary>
public bool IsAccepted { get; set; }
}

View File

@@ -0,0 +1,17 @@
namespace CompanyManagment.App.Contracts.Leave;
/// <summary>
/// نوع مدت مرخصی
/// </summary>
public enum PaidLeaveType
{
/// <summary>
/// روزانه
/// </summary>
Daily,
/// <summary>
/// ساعتی
/// </summary>
Hourly,
}

View File

@@ -0,0 +1,17 @@
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Leave;
public class RotatingShiftDto
{
/// <summary>
/// آیا حضورغیاب به همراه گروهبندی گردشی دارد
/// </summary>
public bool HasRollCall {get; set;}
/// <summary>
/// لیست شیفت های گردشی پرسنل
/// </summary>
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
}

View File

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

View File

@@ -124,7 +124,7 @@ namespace CompanyManagment.App.Contracts.RollCall
/// <param name="workshopId"></param> /// <param name="workshopId"></param>
/// <param name="command"></param> /// <param name="command"></param>
/// <returns></returns> /// <returns></returns>
OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command); Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
} }
public class ReCalculateRollCallValues public class ReCalculateRollCallValues
{ {

View File

@@ -2712,7 +2712,9 @@ 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()
{ {
@@ -3107,6 +3109,21 @@ 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

@@ -25,6 +25,7 @@ using Microsoft.EntityFrameworkCore.Query;
using Company.Domain.CheckoutAgg; using Company.Domain.CheckoutAgg;
using Company.Domain.CustomizeCheckoutAgg; using Company.Domain.CustomizeCheckoutAgg;
using Company.Domain.CustomizeCheckoutTempAgg; using Company.Domain.CustomizeCheckoutTempAgg;
using Company.Domain.RollCallAgg;
using CompanyManagment.EFCore.Repository; using CompanyManagment.EFCore.Repository;
@@ -38,7 +39,8 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
IRollCallApplication rollCallAppllication, IRollCallApplication rollCallAppllication,
ICheckoutRepository checkoutRepository, ICheckoutRepository checkoutRepository,
ICustomizeCheckoutRepository customizeCheckoutRepository, ICustomizeCheckoutRepository customizeCheckoutRepository,
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository) ICustomizeCheckoutTempRepository customizeCheckoutTempRepository,
IRollCallRepository rollCallRepository)
: ICustomizeWorkshopSettingsApplication : ICustomizeWorkshopSettingsApplication
{ {
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository; private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
@@ -53,6 +55,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
private readonly ICheckoutRepository _checkoutRepository = checkoutRepository; private readonly ICheckoutRepository _checkoutRepository = checkoutRepository;
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository; private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository;
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository; private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository;
private readonly IRollCallRepository _rollCallRepository = rollCallRepository;
#region RollCallShifts #region RollCallShifts
@@ -822,14 +825,19 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId)); var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId));
var weeklyOffDays = command.OffDayOfWeeks?.Select(x => new WeeklyOffDay(x)).ToList() ?? []; var weeklyOffDays = command.OffDayOfWeeks?
using var transaction = new TransactionScope(); .Select(x => new WeeklyOffDay(x)).ToList() ?? [];
using var rollCallTransaction = _rollCallRepository.BeginTransactionAsync()
.GetAwaiter().GetResult();
entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus, entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus,
command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays); command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays);
if (reCalculateCommand.Count > 0) if (reCalculateCommand.Count > 0)
{ {
var result = _rollCallApplication.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand); var result = _rollCallApplication
.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand)
.GetAwaiter().GetResult();
if (result.IsSuccedded == false) if (result.IsSuccedded == false)
{ {
@@ -844,7 +852,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
_customizeWorkshopGroupSettingsRepository.SaveChanges(); _customizeWorkshopGroupSettingsRepository.SaveChanges();
transaction.Complete(); rollCallTransaction.Commit();
return op.Succcedded(); return op.Succcedded();
} }
public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command, public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
@@ -1043,7 +1051,9 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
_customizeWorkshopGroupSettingsRepository.SaveChanges(); _customizeWorkshopGroupSettingsRepository.SaveChanges();
if (reCalculateCommand.Count > 0) if (reCalculateCommand.Count > 0)
{ {
var result = _rollCallApplication.RecalculateValues(command.WorkshopId, reCalculateCommand); var result = _rollCallApplication
.RecalculateValues(command.WorkshopId, reCalculateCommand)
.GetAwaiter().GetResult();
if (result.IsSuccedded == false) if (result.IsSuccedded == false)
{ {

View File

@@ -1729,5 +1729,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
return await _EmployeeRepository.GetList(searchModel); return await _EmployeeRepository.GetList(searchModel);
} }
public async Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
{
return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId);
}
#endregion #endregion
} }

View File

@@ -1444,6 +1444,22 @@ 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);
@@ -1608,7 +1624,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
} }
institutionContract.SetSigningType(signingType); institutionContract.SetSigningType(signingType);
var previousInstitutionContract = await _institutionContractRepository
.GetPreviousContract(institutionContract.id);
previousInstitutionContract?.DeActive();
ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
await _institutionContractRepository.SaveChangesAsync(); await _institutionContractRepository.SaveChangesAsync();
return op.Succcedded(); return op.Succcedded();
} }
@@ -1631,6 +1650,11 @@ 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);
@@ -1654,6 +1678,28 @@ 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)

View File

@@ -2381,5 +2381,10 @@ 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,18 +1,25 @@
using System; using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.HolidayItemAgg;
using Company.Domain.LeaveAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.RollCallServiceAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.HolidayItem;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.EFCore.Migrations;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.Linq; using System.Linq;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.LeaveAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.WorkshopAgg;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
namespace CompanyManagment.Application; namespace CompanyManagment.Application;
@@ -24,9 +31,12 @@ public class LeaveApplication : ILeaveApplication
private readonly IRollCallRepository _rollCallRepository; private readonly IRollCallRepository _rollCallRepository;
private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository; private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository;
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication; private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
private readonly IHolidayItemRepository _holidayItemRepository;
private readonly IRollCallServiceRepository _rollCallServiceRepository;
public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication) public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IHolidayItemRepository holidayItemRepository, IRollCallServiceRepository rollCallServiceRepository)
{ {
_leaveRepository = leaveRepository; _leaveRepository = leaveRepository;
_employeeRepository = employeeRepository; _employeeRepository = employeeRepository;
@@ -34,6 +44,8 @@ public class LeaveApplication : ILeaveApplication
_rollCallRepository = rollCallRepository; _rollCallRepository = rollCallRepository;
_employeeSettingsRepository = employeeSettingsRepository; _employeeSettingsRepository = employeeSettingsRepository;
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication; _rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
_holidayItemRepository = holidayItemRepository;
_rollCallServiceRepository = rollCallServiceRepository;
} }
public OperationResult Create(CreateLeave command) public OperationResult Create(CreateLeave command)
@@ -238,7 +250,7 @@ public class LeaveApplication : ILeaveApplication
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName; var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName; var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
var leave = new Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
, command.PaidLeaveType, command.LeaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription, , command.PaidLeaveType, command.LeaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
year, month, shiftDuration, hasShiftDuration,command.IsInvallid); year, month, shiftDuration, hasShiftDuration,command.IsInvallid);
_leaveRepository.Create(leave); _leaveRepository.Create(leave);
@@ -510,7 +522,12 @@ public class LeaveApplication : ILeaveApplication
public OperationResult RemoveLeave(long id) public OperationResult RemoveLeave(long id)
{ {
return _leaveRepository.RemoveLeave(id); return _leaveRepository.RemoveLeave(id).GetAwaiter().GetResult();
}
public async Task<OperationResult> RemoveLeaveAsync(long id)
{
return await _leaveRepository.RemoveLeave(id);
} }
public LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId) public LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId)
@@ -672,5 +689,354 @@ public class LeaveApplication : ILeaveApplication
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault(); return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
} }
public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId)
{
var op = new OperationResult<CheckIsInvalidLeaveDto>();
var result = new CheckIsInvalidLeaveDto();
if (startLeaveDate.TryToGeorgianDateTime(out var startLeaveDateGr) == false)
{
return op.Failed("تاریخ وارد شده صحیح نیست");
}
if (startLeaveDateGr.DayOfWeek == DayOfWeek.Friday || _holidayItemRepository.GetHoliday(startLeaveDateGr))
{
result.IsHoliday = true;
}
if (result.IsHoliday)
{
var rollCallService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(workshopId);
if (rollCallService != null)
{
result.CanCreateInvalid = rollCallService.HasCustomizeCheckoutService == "true";
}
}
return op.Succcedded(result);
}
public async Task<OperationResult> CreateLeave(CreateLeaveDto command)
{
TimeSpan shiftDuration = TimeSpan.Zero;
bool hasShiftDuration = false;
var startH = new TimeSpan();
var endH = new TimeSpan();
var op = new OperationResult();
if ((command.PaidLeaveType == PaidLeaveType.Daily && command.LeaveType == LeaveType.PaidLeave) || command.LeaveType == LeaveType.SickLeave)
{
if (string.IsNullOrWhiteSpace(command.StartLeave))
{
return op.Failed("لطفا تاریخ شروع را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.EndLeave))
{
return op.Failed("لطفا تاریخ پایان را وارد کنید");
}
}
else if (command.PaidLeaveType == PaidLeaveType.Hourly)
{
if (string.IsNullOrWhiteSpace(command.StartLeave))
return op.Failed("لطفا تاریخ شروع را وارد کنید");
if (string.IsNullOrWhiteSpace(command.StartHoures) || string.IsNullOrWhiteSpace(command.EndHours))
return op.Failed("ساعت شروع و پایان نمیتواند خالی باشد");
string pattern = @"^([01]\d|2[0-3]):[0-5]\d$";
if (!Regex.IsMatch(command.StartHoures, pattern))
return op.Failed("لطفا ساعت شروع را به درستی وارد کنید");
if (!Regex.IsMatch(command.EndHours, pattern))
return op.Failed("لطفا ساعت پایان را به درستی وارد کنید");
startH = TimeSpan.Parse(command.StartHoures);
endH = TimeSpan.Parse(command.EndHours);
if (startH == endH)
return op.Failed("ساعت شروع و پایان نباید برابر باشد");
}
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.StartLeave))
// return op.Failed("لطفا تاریخ شروع را وارد کنید");
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.EndLeave))
// return op.Failed("لطفا تاریخ پایان را وارد کنید");
if (command.StartLeave.TryToGeorgianDateTime(out var start) == false)
{
return op.Failed("تاریخ شروع صحیح نیست");
}
var end = new DateTime();
if (command.PaidLeaveType == PaidLeaveType.Daily)
{
if (command.EndLeave.TryToGeorgianDateTime(out end) == false)
{
return op.Failed("تاریخ پایان صحیح نیست");
}
}
end = start;
var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId, command.IsInvallid);
if (checkErr.HasChekout)
return op.Failed(checkErr.CheckoutErrMessage);
if (checkErr.HasNotContract)
return op.Failed(checkErr.ContractErrMessage);
if (checkErr.HasLeftWork)
return op.Failed(checkErr.LeftWorlErrMessage);
if (start > end)
return op.Failed("تارخ شروع از پایان بزرگتر است");
var totalhourses = "-";
if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Hourly)
{
start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds);
end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds);
if (start > end)
end = end.AddDays(1);
var totalLeavHourses = (end - start);
var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}";
var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}";
totalhourses = $"{h}:{m}";
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end;
if (_leaveRepository.Exists(x =>
(x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
}
else if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Daily)
{
var totalLeavHourses = (end - start).TotalDays + 1;
totalhourses = $"{(int)totalLeavHourses}";
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
if (_leaveRepository.Exists(x =>
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(command.WorkshopId, command.EmployeeId);
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(command.EmployeeId, command.WorkshopId, start, end);
var hasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
if (hasRollCall)
{
if ((end - start).TotalDays > 1 && employeeSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular)
{
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
}
if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating &&
command.SelectedShift == null)
{
return op.Failed("لطفا شیفت پرسنل را انتخاب کنید");
}
if (command.SelectedShift != null)
{
var validShiftStart = TimeOnly.TryParse(command.SelectedShift.StartTime, out var shiftStart);
var validShiftEnd = TimeOnly.TryParse(command.SelectedShift.EndTime, out var shiftEnd);
if (validShiftStart == false && validShiftEnd == false)
{
return op.Failed("شیفت های انتخاب شده معتبر نمیباشد");
}
var shiftStartDateTime = new DateTime(new DateOnly(), shiftStart);
var shiftEndDateTime = new DateTime(new DateOnly(), shiftEnd);
if (shiftEndDateTime <= shiftStartDateTime)
shiftEndDateTime = shiftEndDateTime.AddDays(1);
shiftDuration = shiftEndDateTime - shiftStartDateTime;
hasShiftDuration = true;
}
else if (employeeSettings is { WorkshopShiftStatus: WorkshopShiftStatus.Irregular })
{
if ((end - start).TotalDays > 1)
{
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
}
if (isActive)
{
shiftDuration = employeeSettings.IrregularShift.WorkshopIrregularShifts switch
{
WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(12),
WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(12),
WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(24),
WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(24),
_ => new TimeSpan()
};
hasShiftDuration = true;
}
}
}
}
if (command.LeaveType == LeaveType.SickLeave)
{
var totalLeavHourses = (end - start).TotalDays + 1;
totalhourses = $"{(int)totalLeavHourses}";
command.PaidLeaveType = PaidLeaveType.Daily;
if (_leaveRepository.Exists(x =>
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
if (_leaveRepository.Exists(x =>
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
if (_leaveRepository.Exists(x =>
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
}
var year = Convert.ToInt32(command.StartLeave.Substring(0, 4));
var month = Convert.ToInt32(command.StartLeave.Substring(5, 2));
var paidLeaveType = command.PaidLeaveType == PaidLeaveType.Daily ? "روزانه" : "ساعتی";
var leaveType = command.LeaveType == LeaveType.PaidLeave ? "استحقاقی" : "استعلاجی";
var validation = ValidateNewLeaveWithExistingRollCalls(command.WorkshopId, command.EmployeeId, paidLeaveType, start, end);
if (validation.IsSuccedded == false)
return validation;
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
, paidLeaveType, leaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
year, month, shiftDuration, hasShiftDuration, command.IsInvallid);
await _leaveRepository.CreateAsync(leave);
await _leaveRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId,long employeeId, string startLeaveDate)
{
var op = new OperationResult<RotatingShiftDto>();
var result = new RotatingShiftDto();
if (startLeaveDate.TryToGeorgianDateTime(out var startDateTimeGr) == false)
{
return op.Failed("تاریخ شروع صحیح نیست");
}
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId);
//اگر گروه بندی نداشت
if (employeeSettings == null)
{
return op.Succcedded(result);
}
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(employeeId, workshopId, startDateTimeGr, startDateTimeGr);
result.HasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
result.RotatingShifts = employeeSettings.CustomizeRotatingShifts.Select(x =>
new CustomizeRotatingShiftsViewModel()
{
EndTime = x.EndTime.ToString("HH:mm"),
StartTime = x.StartTime.ToString("HH:mm")
}).ToList();
return op.Succcedded(result);
}
#endregion #endregion
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
{
return await _leaveRepository.ListPrint(ids);
}
public async Task<string> GetHourlyLeaveDuration(string startHours, string endHours)
{
if (string.IsNullOrWhiteSpace(startHours) || string.IsNullOrWhiteSpace(endHours))
return "";
var start = new DateTime();
var end = new DateTime();
try
{
start = Convert.ToDateTime(startHours);
end = Convert.ToDateTime(endHours);
}
catch (Exception)
{
return "";
}
if (start > end || start == end)
{
end = end.AddDays(1);
}
var HourlyDate = (end - start);
var hours = (int)HourlyDate.TotalHours;
var minutes = HourlyDate.TotalMinutes % 60;
if (hours > 0 && minutes > 0)
{
return (hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه");
}
else if (hours > 0 && minutes == 0)
{
return (hours + " " + "ساعت ");
}
else if (hours == 0 && minutes > 0)
{
return (minutes + " " + "دقیقه");
}
return ($"{hours}");
}
public async Task<string> GetDailyLeaveDuration(string startDate, string endDate)
{
if (string.IsNullOrWhiteSpace(startDate) || string.IsNullOrWhiteSpace(endDate))
return "";
if (startDate.TryToGeorgianDateTime(out var start) == false || endDate.TryToGeorgianDateTime(out var end) == false)
return "";
if (end >= start)
{
var daysSpan = (end - start).TotalDays + 1;
return $"{(int)daysSpan} روز";
}
else
{
return "تاریخ پایان از تاریخ شروع کوچکتر است.";
}
}
} }

View File

@@ -722,5 +722,11 @@ 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

@@ -788,7 +788,7 @@ public class RollCallApplication : IRollCallApplication
return _rollCallRepository.CheckRepeat(employeeId, workshopId); return _rollCallRepository.CheckRepeat(employeeId, workshopId);
} }
public OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands) public async Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
{ {
var operationResult = new OperationResult(); var operationResult = new OperationResult();
try try
@@ -812,24 +812,43 @@ public class RollCallApplication : IRollCallApplication
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime(); var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
var allRollCalls = _rollCallRepository var allRollCalls = await _rollCallRepository
.GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(), .GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(),
oldestDate).GetAwaiter().GetResult(); oldestDate);
var rollCalls =
commands.SelectMany(command =>
allRollCalls.Where(x =>
x.EmployeeId == command.EmployeeId &&
x.ShiftDate >= command.FromDate.ToGeorgianDateTime()
)
);
foreach (var rollCall in rollCalls)
foreach (var command in commands)
{ {
var rollCalls = allRollCalls rollCall.ClearTimeDiff();
.Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
foreach (var rollCall in rollCalls) await _rollCallRepository.SaveChangesAsync();
{
rollCall.ClearTimeDiff(); rollCall.SetEndDateTime(
_rollCallRepository.SaveChanges(); rollCall.EndDate!.Value,
rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService); _rollCallDomainService
} );
} }
_rollCallRepository.SaveChanges();
// foreach (var command in commands)
// {
// var rollCalls = allRollCalls
// .Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
//
// foreach (var rollCall in rollCalls)
// {
// rollCall.ClearTimeDiff();
// await _rollCallRepository.SaveChangesAsync();
// rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
// }
// }
await _rollCallRepository.SaveChangesAsync();
return operationResult.Succcedded(); return operationResult.Succcedded();
} }

View File

@@ -5,6 +5,8 @@ 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;
@@ -1081,30 +1083,7 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
var weeklyDouble = 0.0; var weeklyDouble = 0.0;
var weekly = c.WorkingHoursWeekly; var weekly = c.WorkingHoursWeekly;
if (!string.IsNullOrWhiteSpace(weekly) && c.WorkingHoursWeekly = WeeklyHourConvertor(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);
@@ -1161,6 +1140,37 @@ 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
@@ -1506,6 +1516,195 @@ 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

@@ -1062,5 +1062,116 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
} }
#endregion public Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
{
// var leftDate = Tools.GetUndefinedDateTime();
//
// var personnelCodes = _context.PersonnelCodeSet.Include(x => x.Employee)
// .ThenInclude(x => x.EmployeeChildrenList).IgnoreQueryFilters().Where(x => x.WorkshopId == workshopId).ToList();
//
// var contractLeftWork =
// _context.LeftWorkList.Where(x => x.WorkshopId == workshopId)
// .GroupBy(x => x.EmployeeId).Select(x => x.OrderByDescending(y => y.LeftWork).First()).ToList();
//
//
//
//
// var insuranceLeftWork = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId).Select(x => new
// {
// EmployeeId = x.EmployeeId,
// FullName = x.EmployeeFullName,
// PersonnelCode = 0,
// InsurancePerson = true,
// InsuranceLeft = x.LeftWorkDate != null,
// StartWork = x.StartWorkDate,
// LeftWork = x.LeftWorkDate ?? leftDate,
// LastStartInsuranceWork = x.StartWorkDate.ToFarsi(),
// LastLeftInsuranceWork = x.LeftWorkDate != null ? x.LeftWorkDate.ToFarsi() : "-",
// LastStartContractWork = "-",
// LastLeftContractWork = "-"
// }).GroupBy(x => x.EmployeeId)
// .Select(x => x.OrderByDescending(y => y.LeftWork).First()).ToList();
//
// var leftWorkTemp = _context.LeftWorkTemps.Where(x => x.WorkshopId == workshopId).Select(x => new
// {
// WorkshopId = x.WorkshopId,
// EmployeeId = x.EmployeeId,
// PersonnelCode = 0,
// ContractPerson = true,
// ContractLeft = x.LeftWork != leftDate,
// StartWork = x.StartWork,
// LeftWork = x.LeftWork,
// LastStartContractWork = x.StartWork.ToFarsi(),
// LastLeftContractWork = x.LeftWork != leftDate ? x.LeftWork.ToFarsi() : "-",
// LastStartInsuranceWork = "-",
// LastLeftInsuranceWork = "-",
// LefWorkTemp = x.LeftWorkType == LeftWorkTempType.LeftWork,
// CreatedByClient = x.LeftWorkType == LeftWorkTempType.StartWork
// }).ToList();
//
//
// var employeeClientTemp = _context.EmployeeClientTemps.Where(x => x.WorkshopId == workshopId).Select(x => new
// {
// WorkshopId = x.WorkshopId,
// EmployeeId = x.EmployeeId,
// PersonnelCode = 0,
// CreatedByClient = true,
// ContractPerson = true
// }).ToList();
//
// var resultTemp = employeeClientTemp.Concat(leftWorkTemp).ToList().GroupBy(x => x.EmployeeId);
//
//
//
// var result = contractLeftWork.Concat(insuranceLeftWork).GroupBy(x => x.EmployeeId).ToList();
//
// result = result.Concat(resultTemp).GroupBy(x => x.First().EmployeeId).Select(x => x.First()).ToList();
//
// var employeeClientTempList = employeeClientTemp.ToList();
// var startWorkTempsForWorkshop = leftWorkTemp.Where(x => x.CreatedByClient).ToList();
// var leftWorkTempsForWorkshop = leftWorkTemp.Where(x => x.LefWorkTemp).ToList();
//
// return result.Select(x =>
// {
// var insurance = x.FirstOrDefault(y => y.InsurancePerson);
// var contract = x.FirstOrDefault(y => y.ContractPerson);
// var personnelCode = personnelCodes.FirstOrDefault(y => y.EmployeeId == x.Key);
// var employee = personnelCode.Employee;
// var employeeClient = employeeClientTempList.FirstOrDefault(t => t.EmployeeId == x.First().EmployeeId);
// var startWorkTemp = startWorkTempsForWorkshop.FirstOrDefault(s => s.EmployeeId == x.First().EmployeeId);
// var leftWorkTemp = leftWorkTempsForWorkshop.FirstOrDefault(s => s.EmployeeId == x.First().EmployeeId);
//
//
// return new GetClientEmployeeListViewModel()
// {
// EmployeeId = x.Key,
// FullName = employee.FullName,
// PersonnelCode = personnelCode?.PersonnelCode ?? 0,
// HasContractLeftWork = insurance != null,
// HasInsuranceLeftWork = contract != null,
//
// LeftWorkCompletely = (insurance?.InsuranceLeft ?? false) && (contract?.ContractLeft ?? false),
//
// LastStartInsuranceWork = insurance != null ? insurance.LastStartInsuranceWork : "-",
// LastLeftInsuranceWork = insurance != null ? insurance.LastLeftInsuranceWork : "-",
// LastStartContractWork = contract != null ? contract.LastStartContractWork : "-",
// LastLeftContractWork = contract != null ? contract.LastLeftContractWork : "-",
//
// NationalCode = employee.NationalCode,
// IdNumber = employee.IdNumber,
// MaritalStatus = employee.MaritalStatus,
// DateOfBirthFa = employee.DateOfBirth.ToFarsi(),
// FatherName = employee.FatherName,
// ChildrenCount = employee.EmployeeChildrenList.Count,
//
// PendingStartWork = employeeClient != null || startWorkTemp != null,
// PendingLeftWork = leftWorkTemp != null,
//
//
// };
// }).OrderByDescending(x => x.StartWork).ToList();
throw new NotImplementedException();
}
#endregion
} }

View File

@@ -722,34 +722,33 @@ public class EmployerRepository : RepositoryBase<long, Employer>, IEmployerRepos
public OperationResult ActiveAll(long id) public OperationResult ActiveAll(long id)
{ {
OperationResult result = new OperationResult(); OperationResult result = new OperationResult();
using (var transaction = _context.Database.BeginTransaction()) try
{ {
try var employer = _context.Employers.FirstOrDefault(x => x.id == id);
if (employer == null)
{ {
var employer = _context.Employers.FirstOrDefault(x => x.id == id); return result.Failed("کارفرما یافت نشد");
employer.Active();
var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).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());
_context.SaveChanges();
transaction.Commit();
result.Succcedded();
}
catch (Exception)
{
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
transaction.Rollback();
} }
employer.Active();
var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).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());
_context.SaveChanges();
result.Succcedded();
}
catch (Exception)
{
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
} }
return result; return result;

View File

@@ -176,18 +176,20 @@ 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 => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare)) if (!_context.CheckoutWarningMessages.Any(x =>
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();
} }
} }
} }
} }
@@ -729,7 +731,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 &&
@@ -755,20 +757,19 @@ 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 => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare)) if (!_context.CheckoutWarningMessages.Any(x => 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();
} }
} }
} }
} }
_employeeInsurancListDataRepository.SaveChanges(); _employeeInsurancListDataRepository.SaveChanges();
@@ -1777,46 +1778,76 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
return res; return res;
} }
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(InsuranceClientSearchModel searchModel) public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(
InsuranceClientSearchModel searchModel)
{ {
var workshopId = _authHelper.GetWorkshopId(); var workshopId = _authHelper.GetWorkshopId();
var query = _context.InsuranceListSet var query = _context.InsuranceListSet
.Select(x => new InsuranceClientListViewModel .Where(x => x.WorkshopId == workshopId);
{
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) if (searchModel.Year > 0)
{ {
query = query.Where(x => x.YearInt == searchModel.Year); query = query.Where(x => x.Year == searchModel.Year.ToString("0000"));
} }
if (searchModel.Month > 0) if (searchModel.Month > 0)
{ {
query = query.Where(x => x.MonthInt == searchModel.Month); query = query.Where(x => x.Month == searchModel.Month.ToString("00"));
} }
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.MonthInt), "Month-Max" => query.OrderByDescending(x => x.Month),
"Month-Min" => query.OrderBy(x => x.MonthInt), "Month-Min" => query.OrderBy(x => x.Month),
"Year-Max" => query.OrderByDescending(x => x.YearInt), "Year-Max" => query.OrderByDescending(x => x.Year),
"Year-Min" => query.OrderBy(x => x.YearInt), "Year-Min" => query.OrderBy(x => x.Year),
_ => 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;
} }
@@ -1882,10 +1913,10 @@ 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))
query = query.Where(x => x.WorkShopCode == searchModel.WorkShopCode).OrderByDescending(x => x.Year) query = query.Where(x => x.WorkShopCode == searchModel.WorkShopCode).OrderByDescending(x => x.Year)
@@ -1965,6 +1996,77 @@ 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

@@ -1,9 +1,7 @@
using _0_Framework.Application; using _0_Framework.Application;
using _0_Framework.InfraStructure; using _0_Framework.InfraStructure;
using Azure.Core;
using Company.Domain.LeaveAgg; using Company.Domain.LeaveAgg;
using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.Leave;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
@@ -11,6 +9,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace CompanyManagment.EFCore.Repository; namespace CompanyManagment.EFCore.Repository;
public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
@@ -436,15 +435,15 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
public OperationResult RemoveLeave(long id) public async Task<OperationResult> RemoveLeave(long id)
{ {
var op = new OperationResult(); var op = new OperationResult();
var item = _context.LeaveList.FirstOrDefault(x => x.id == id); var item = _context.LeaveList.FirstOrDefault(x => x.id == id);
if (item != null) if (item != null)
{ {
var checkoutExist = _context.CheckoutSet var checkoutExist =await _context.CheckoutSet
.Where(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId) .Where(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId)
.Where(x => item.StartLeave <= x.ContractEnd).ToList(); .Where(x => item.StartLeave <= x.ContractEnd).ToListAsync();
if (checkoutExist.Count > 0) if (checkoutExist.Count > 0)
{ {
return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد"); return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد");
@@ -678,6 +677,7 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
query = query.OrderByDescending(x => x.CreationDate); query = query.OrderByDescending(x => x.CreationDate);
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto() var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
{ {
@@ -796,5 +796,54 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
return leaveList; return leaveList;
} }
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
{
var result = new LeaveListPrintDto();
var timeSpanHourlyLeave = new TimeSpan();
var dailyLeaveTime = new TimeSpan();
if (ids.Any())
{
var query = _context.LeaveList.Where(x => ids.Contains(x.id)).OrderByDescending(x=>x.StartLeave).AsQueryable();
#region sumOfLeaves
var hourly = await query.Where(x => x.PaidLeaveType == "ساعتی").Select(x => x.LeaveHourses).ToListAsync();
var daily = await query.Where(x => x.PaidLeaveType == "روزانه").Select(x => x.LeaveHourses).ToListAsync();
if (hourly.Any())
timeSpanHourlyLeave = new TimeSpan(hourly.Sum(x => TimeOnly.Parse(x).Ticks));
if (daily.Any())
dailyLeaveTime = daily.Sum(x => Convert.ToInt32(x)) * TimeSpan.FromDays(1);
var sumOfLeaves = timeSpanHourlyLeave.Add(dailyLeaveTime);
result.SumOfEmployeeleaves = sumOfLeaves.ToFarsiDaysAndHoursAndMinutes();
#endregion
result.LeavePrintListItemsDto = await query.Select(item => new LeavePrintListItemsDto
{
YearStr = $"{item.Year}",
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
StartLeave = item.StartLeave.ToFarsi(),
EndLeave = item.EndLeave.ToFarsi(),
LeaveType = item.LeaveType,
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
IsAccepted = item.IsAccepted,
}).ToListAsync();
result.EmployeeFullName = query.FirstOrDefault()!.EmployeeFullName;
}
return result;
}
#endregion #endregion
} }

View File

@@ -1,8 +1,4 @@
using System; using _0_Framework.Application;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Application.Sms; using _0_Framework.Application.Sms;
using Company.Domain.SmsResultAgg; using Company.Domain.SmsResultAgg;
using CompanyManagment.App.Contracts.SmsResult; using CompanyManagment.App.Contracts.SmsResult;
@@ -10,6 +6,11 @@ using IPE.SmsIrClient;
using IPE.SmsIrClient.Models.Requests; using IPE.SmsIrClient.Models.Requests;
using IPE.SmsIrClient.Models.Results; using IPE.SmsIrClient.Models.Results;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using SmsResult = Company.Domain.SmsResultAgg.SmsResult; using SmsResult = Company.Domain.SmsResultAgg.SmsResult;
@@ -17,521 +18,531 @@ namespace CompanyManagment.EFCore.Services;
public class SmsService : ISmsService public class SmsService : ISmsService
{ {
private readonly IConfiguration _configuration; private readonly IConfiguration _configuration;
private readonly ISmsResultRepository _smsResultRepository; private readonly ISmsResultRepository _smsResultRepository;
private readonly bool _isDevEnvironment; private readonly bool _isDevEnvironment;
private readonly List<string> _testNumbers; private readonly List<string> _testNumbers;
public SmsIr SmsIr { get; set; } private readonly ILogger<SmsService> _logger;
public SmsIr SmsIr { get; set; }
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository) public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository, ILogger<SmsService> logger)
{ {
_configuration = configuration; _configuration = configuration;
_smsResultRepository = smsResultRepository; _smsResultRepository = smsResultRepository;
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); _logger = logger;
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
// خواندن تنظیمات SMS از appsettings // خواندن تنظیمات SMS از appsettings
var smsSettings = _configuration.GetSection("SmsSettings"); var smsSettings = _configuration.GetSection("SmsSettings");
_isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode"); _isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode");
_testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>(); _testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>();
} }
/// <summary> /// <summary>
/// متد مرکزی برای ارسال پیامک که محیط dev را چک می‌کند /// متد مرکزی برای ارسال پیامک که محیط dev را چک می‌کند
/// </summary> /// </summary>
private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters) private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters)
{ {
// اگر محیط dev است و شماره‌های تست وجود دارد، به شماره‌های تست ارسال می‌شود // اگر محیط dev است و شماره‌های تست وجود دارد، به شماره‌های تست ارسال می‌شود
if (_isDevEnvironment && _testNumbers is { Count: > 0 }) if (_isDevEnvironment && _testNumbers is { Count: > 0 })
{ {
// ارسال به همه شماره‌های تست // ارسال به همه شماره‌های تست
SmsIrResult<VerifySendResult> lastResult = null; SmsIrResult<VerifySendResult> lastResult = null;
foreach (var testNumber in _testNumbers) foreach (var testNumber in _testNumbers)
{ {
lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters); lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters);
} }
return lastResult; // برگرداندن نتیجه آخرین ارسال return lastResult; // برگرداندن نتیجه آخرین ارسال
} }
else else
{ {
// ارسال به شماره واقعی // ارسال به شماره واقعی
return await SmsIr.VerifySendAsync(number, templateId, parameters); return await SmsIr.VerifySendAsync(number, templateId, parameters);
} }
} }
public void Send(string number, string message) public void Send(string number, string message)
{ {
//var token = GetToken(); //var token = GetToken();
//var lines = new SmsLine().GetSmsLines(token); //var lines = new SmsLine().GetSmsLines(token);
//if (lines == null) return; //if (lines == null) return;
//var line = lines.SMSLines.Last().LineNumber.ToString(); //var line = lines.SMSLines.Last().LineNumber.ToString();
//var data = new MessageSendObject //var data = new MessageSendObject
//{ //{
// Messages = new List<string> // Messages = new List<string>
// {message}.ToArray(), // {message}.ToArray(),
// MobileNumbers = new List<string> {number}.ToArray(), // MobileNumbers = new List<string> {number}.ToArray(),
// LineNumber = line, // LineNumber = line,
// SendDateTime = DateTime.Now, // SendDateTime = DateTime.Now,
// CanContinueInCaseOfError = true // CanContinueInCaseOfError = true
//}; //};
//var messageSendResponseObject = //var messageSendResponseObject =
// new MessageSend().Send(token, data); // new MessageSend().Send(token, data);
//if (messageSendResponseObject.IsSuccessful) return; //if (messageSendResponseObject.IsSuccessful) return;
//line = lines.SMSLines.First().LineNumber.ToString(); //line = lines.SMSLines.First().LineNumber.ToString();
//data.LineNumber = line; //data.LineNumber = line;
//new MessageSend().Send(token, data); //new MessageSend().Send(token, data);
} }
public bool VerifySend(string number, string message) public bool VerifySend(string number, string message)
{ {
var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) }); var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) });
Thread.Sleep(2000); Thread.Sleep(2000);
if (verificationSendResult.IsCompletedSuccessfully) if (verificationSendResult.IsCompletedSuccessfully)
{ {
var resStartStatus = verificationSendResult.Result; var resStartStatus = verificationSendResult.Result;
var b = resStartStatus.Status; var b = resStartStatus.Status;
var resResult = verificationSendResult.Status; var resResult = verificationSendResult.Status;
var a = verificationSendResult.IsCompleted; var a = verificationSendResult.IsCompleted;
var reseExceptiont = verificationSendResult.Exception; var reseExceptiont = verificationSendResult.Exception;
return true; return true;
} }
else else
{ {
var resStartStatus = verificationSendResult.Status; var resStartStatus = verificationSendResult.Status;
var resResult = verificationSendResult.Status; var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception; var reseExceptiont = verificationSendResult.Exception;
return false; return false;
} }
} }
public bool LoginSend(string number, string message) public bool LoginSend(string number, string message)
{ {
var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) }); var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) });
Thread.Sleep(2000); Thread.Sleep(2000);
if (verificationSendResult.IsCompletedSuccessfully) if (verificationSendResult.IsCompletedSuccessfully)
{ {
var resStartStatus = verificationSendResult.Result; var resStartStatus = verificationSendResult.Result;
var b = resStartStatus.Status; var b = resStartStatus.Status;
var resResult = verificationSendResult.Status; var resResult = verificationSendResult.Status;
var a = verificationSendResult.IsCompleted; var a = verificationSendResult.IsCompleted;
var reseExceptiont = verificationSendResult.Exception; var reseExceptiont = verificationSendResult.Exception;
return true; return true;
} }
else else
{ {
var resStartStatus = verificationSendResult.Status; var resStartStatus = verificationSendResult.Status;
var resResult = verificationSendResult.Status; var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception; var reseExceptiont = verificationSendResult.Exception;
return false; return false;
} }
} }
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code) public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
{ {
var result = new SentSmsViewModel(); var result = new SentSmsViewModel();
var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) }); var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
Thread.Sleep(2000); Thread.Sleep(2000);
if (sendResult.Message == "موفق") if (sendResult.Message == "موفق")
{ {
var status = sendResult.Status; var status = sendResult.Status;
var message = sendResult.Message; var message = sendResult.Message;
var messaeId = sendResult.Data.MessageId; var messaeId = sendResult.Data.MessageId;
return result.Succedded(status, message, messaeId); return result.Succedded(status, message, messaeId);
} }
else else
{ {
var status = sendResult.Status; var status = sendResult.Status;
var message = sendResult.Message; var message = sendResult.Message;
var messaeId = sendResult.Data.MessageId; var messaeId = sendResult.Data.MessageId;
return result.Failed(status, message, messaeId); return result.Failed(status, message, messaeId);
} }
} }
public bool SendAccountsInfo(string number, string fullName, string userName) public bool SendAccountsInfo(string number, string fullName, string userName)
{ {
var checkLength = fullName.Length; var checkLength = fullName.Length;
if (checkLength > 25) if (checkLength > 25)
fullName = fullName.Substring(0, 24); fullName = fullName.Substring(0, 24);
var sendResult = VerifySendSmsAsync(number, 725814, new VerifySendParameter[] { new VerifySendParameter("FULLNAME", fullName), new VerifySendParameter("USERNAME", userName), new VerifySendParameter("PASSWORD", userName) }); var sendResult = VerifySendSmsAsync(number, 725814, new VerifySendParameter[] { new VerifySendParameter("FULLNAME", fullName), new VerifySendParameter("USERNAME", userName), new VerifySendParameter("PASSWORD", userName) });
Console.WriteLine(userName + " - " + sendResult.Result.Status); Console.WriteLine(userName + " - " + sendResult.Result.Status);
if (sendResult.IsCompletedSuccessfully) if (sendResult.IsCompletedSuccessfully)
{ {
return true; return true;
} }
else else
{ {
return false; return false;
} }
} }
public async Task<ApiResultViewModel> GetByMessageId(int messId) public async Task<ApiResultViewModel> GetByMessageId(int messId)
{ {
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var response = await smsIr.GetReportAsync(messId); var response = await smsIr.GetReportAsync(messId);
MessageReportResult messages = response.Data; MessageReportResult messages = response.Data;
var appendData = new ApiResultViewModel() var appendData = new ApiResultViewModel()
{ {
MessageId = messages.MessageId, MessageId = messages.MessageId,
LineNumber = messages.LineNumber, LineNumber = messages.LineNumber,
Mobile = messages.Mobile, Mobile = messages.Mobile,
MessageText = messages.MessageText, MessageText = messages.MessageText,
SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime), SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime),
DeliveryState = DeliveryStatus(messages.DeliveryState), DeliveryState = DeliveryStatus(messages.DeliveryState),
DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime), DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime),
DeliveryColor = DeliveryColorStatus(messages.DeliveryState), DeliveryColor = DeliveryColorStatus(messages.DeliveryState),
}; };
return appendData; return appendData;
} }
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 st = new DateTime(2024, 6, 2);
var ed = new DateTime(2024, 7, 1); var ed = new DateTime(2024, 7, 1);
if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10) if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
{ {
st = startDate.ToGeorgianDateTime(); st = startDate.ToGeorgianDateTime();
} }
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10) if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
{ {
ed = endDate.ToGeorgianDateTime(); 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;
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600 // int? fromDateUnixTime = null; // unix time - for instance: 1700598600
//int? toDateUnixTime = null; // unix time - for instance: 1703190600 //int? toDateUnixTime = null; // unix time - for instance: 1703190600
int pageNumber = 2; int pageNumber = 2;
int pageSize = 100; // max: 100 int pageSize = 100; // max: 100
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2); var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
MessageReportResult[] messages = response.Data; MessageReportResult[] messages = response.Data;
foreach (var message in messages) foreach (var message in messages)
{ {
var appendData = new ApiResultViewModel() var appendData = new ApiResultViewModel()
{ {
MessageId = message.MessageId, MessageId = message.MessageId,
LineNumber = message.LineNumber, LineNumber = message.LineNumber,
Mobile = message.Mobile, Mobile = message.Mobile,
MessageText = message.MessageText, MessageText = message.MessageText,
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime), SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
DeliveryState = DeliveryStatus(message.DeliveryState), DeliveryState = DeliveryStatus(message.DeliveryState),
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime), DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
DeliveryColor = DeliveryColorStatus(message.DeliveryState), DeliveryColor = DeliveryColorStatus(message.DeliveryState),
}; };
res.Add(appendData); res.Add(appendData);
} }
return res; return res;
} }
public string DeliveryStatus(byte? dv) public string DeliveryStatus(byte? dv)
{ {
string mess = ""; string mess = "";
switch (dv) switch (dv)
{ {
case 1: case 1:
mess = "رسیده به گوشی"; mess = "رسیده به گوشی";
break; break;
case 2: case 2:
mess = "نرسیده به گوشی"; mess = "نرسیده به گوشی";
break; break;
case 3: case 3:
mess = "پردازش در مخابرات"; mess = "پردازش در مخابرات";
break; break;
case 4: case 4:
mess = "نرسیده به مخابرات"; mess = "نرسیده به مخابرات";
break; break;
case 5: case 5:
mess = "سیده به مخابرات"; mess = "سیده به مخابرات";
break; break;
case 6: case 6:
mess = "خطا"; mess = "خطا";
break; break;
case 7: case 7:
mess = "لیست سیاه"; mess = "لیست سیاه";
break; break;
default: default:
mess = ""; mess = "";
break; break;
} }
return mess; return mess;
} }
public string DeliveryColorStatus(byte? dv) public string DeliveryColorStatus(byte? dv)
{ {
string mess = ""; string mess = "";
switch (dv) switch (dv)
{ {
case 1: case 1:
mess = "successSend"; mess = "successSend";
break; break;
case 2: case 2:
mess = "errSend"; mess = "errSend";
break; break;
case 3: case 3:
mess = "pSend"; mess = "pSend";
break; break;
case 4: case 4:
mess = "noSend"; mess = "noSend";
break; break;
case 5: case 5:
mess = "itcSend"; mess = "itcSend";
break; break;
case 6: case 6:
mess = "redSend"; mess = "redSend";
break; break;
case 7: case 7:
mess = "blockSend"; mess = "blockSend";
break; break;
default: default:
mess = ""; mess = "";
break; break;
} }
return mess; return mess;
} }
public string UnixTimeStampToDateTime(int? unixTimeStamp) public string UnixTimeStampToDateTime(int? unixTimeStamp)
{ {
if (unixTimeStamp != null) if (unixTimeStamp != null)
{ {
// Unix timestamp is seconds past epoch // Unix timestamp is seconds past epoch
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime(); dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime();
var time = dateTime.ToFarsiFull(); var time = dateTime.ToFarsiFull();
return time; return time;
} }
return ""; return "";
} }
private string GetToken() private string GetToken()
{ {
return ""; return "";
//var smsSecrets = _configuration.GetSection("SmsSecrets"); //var smsSecrets = _configuration.GetSection("SmsSecrets");
//var tokenService = new Token(); //var tokenService = new Token();
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); //return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
} }
#region Mahan #region Mahan
public async Task<double> GetCreditAmount() public async Task<double> GetCreditAmount()
{ {
try try
{ {
var credit = await SmsIr.GetCreditAsync(); var credit = await SmsIr.GetCreditAsync();
return (double)credit.Data; return (double)credit.Data;
} }
catch catch
{ {
return -1; return -1;
} }
} }
public async Task<bool> SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms) public async Task<bool> SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms)
{ {
typeOfSms = string.IsNullOrWhiteSpace(typeOfSms) ? "لینک تاییدیه ایجاد قرارداد مالی" : typeOfSms; typeOfSms = string.IsNullOrWhiteSpace(typeOfSms) ? "لینک تاییدیه ایجاد قرارداد مالی" : typeOfSms;
var full = fullName; var full = fullName;
var fullName1 = fullName; var fullName1 = fullName;
if (fullName.Length >= 25) if (fullName.Length >= 25)
{ {
fullName1 = fullName.Substring(0, 25); fullName1 = fullName.Substring(0, 25);
} }
var fullName2 = ""; var fullName2 = "";
if (full.Length > 25) if (full.Length > 25)
{ {
fullName2 = full.Substring(25); fullName2 = full.Substring(25);
if (fullName2.Length>25) if (fullName2.Length > 25)
{ {
fullName2 = fullName2.Substring(0, 25); fullName2 = fullName2.Substring(0, 25);
} }
} }
var guidStr = institutionId.ToString(); var guidStr = institutionId.ToString();
var firstPart = guidStr.Substring(0, 15); var firstPart = guidStr.Substring(0, 15);
var secondPart = guidStr.Substring(15); var secondPart = guidStr.Substring(15);
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[] var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
{ {
new("FULLNAME1", fullName1), new("FULLNAME1", fullName1),
new("FULLNAME2", fullName2), new("FULLNAME2", fullName2),
new("CODE1",firstPart), new("CODE1",firstPart),
new("CODE2",secondPart) new("CODE2",secondPart)
}); });
if (verificationSendResult.Status == 1)
{
_logger.LogInformation("ارسال لینک قراداد مالی موفق بود");
}
else
{
_logger.LogError("خطا در ارسال لینک قراداد مالی");
}
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, typeOfSms, var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, typeOfSms,
fullName, number, contractingPartyId, institutionContractId); fullName, number, contractingPartyId, institutionContractId);
await _smsResultRepository.CreateAsync(smsResult); await _smsResultRepository.CreateAsync(smsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
return verificationSendResult.Status == 0; _logger.LogInformation("ذخیره در دیتابیس موفق بود");
} return verificationSendResult.Status == 0;
}
public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId, public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId,
long contractingPartyId, long institutionContractId) long contractingPartyId, long institutionContractId)
{ {
var guidStr = institutionId.ToString(); var guidStr = institutionId.ToString();
var firstPart = guidStr.Substring(0, 15); var firstPart = guidStr.Substring(0, 15);
var secondPart = guidStr.Substring(15); var secondPart = guidStr.Substring(15);
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[] var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
{ {
new("FULLNAME", fullName), new("FULLNAME", fullName),
new("CODE1",firstPart), new("CODE1",firstPart),
new("CODE2",secondPart) new("CODE2",secondPart)
}); });
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی", var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی",
fullName, number, contractingPartyId, institutionContractId); fullName, number, contractingPartyId, institutionContractId);
await _smsResultRepository.CreateAsync(smsResult); await _smsResultRepository.CreateAsync(smsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
return verificationSendResult.Status == 0; return verificationSendResult.Status == 0;
} }
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName, public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
long contractingPartyId, long institutionContractId) long contractingPartyId, long institutionContractId)
{ {
var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[] var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[]
{ {
new("VERIFYCODE", code) new("VERIFYCODE", code)
}); });
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی", var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
contractingPartyFullName, number, contractingPartyId, institutionContractId); contractingPartyFullName, number, contractingPartyId, institutionContractId);
await _smsResultRepository.CreateAsync(smsResult); await _smsResultRepository.CreateAsync(smsResult);
await _smsResultRepository.SaveChangesAsync(); await _smsResultRepository.SaveChangesAsync();
return verificationSendResult.Status == 0; return verificationSendResult.Status == 0;
} }
public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount) public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount)
{ {
throw new NotImplementedException(); throw new NotImplementedException();
} }
#endregion #endregion
#region InstitutionContractSMS #region InstitutionContractSMS
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1, public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
string code2) string code2)
{ {
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var result = new ValueTuple<byte, string, int, bool>(); var result = new ValueTuple<byte, string, int, bool>();
var sendResult = await smsIr.VerifySendAsync(number, tamplateId, var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
new VerifySendParameter[] new VerifySendParameter[]
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2) }); { new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2) });
Thread.Sleep(500); Thread.Sleep(500);
if (sendResult.Message == "موفق") if (sendResult.Message == "موفق")
{ {
_logger.LogInformation("ارسال پیامک یادآور موفق بود");
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
return result;
}
_logger.LogError("خطا در ارسال یاد آور");
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
return result;
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true); }
return result;
}
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false); public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
return result; string aprove)
{
} var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var result = new ValueTuple<byte, string, int, bool>();
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
new VerifySendParameter[]
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("ID", id), new("APROVE", aprove) });
Thread.Sleep(500);
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
string aprove) if (sendResult.Message == "موفق")
{ {
_logger.LogInformation("ارسال پیامک یادآور موفق بود");
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
return result;
}
_logger.LogError("خطا در ارسال یاد آور");
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
return result;
}
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa"); public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
var result = new ValueTuple<byte, string, int, bool>(); string aprove)
var sendResult = await smsIr.VerifySendAsync(number, tamplateId, {
new VerifySendParameter[] var tamplateId = 117946;
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("ID", id), new("APROVE", aprove) }); var result = new ValueTuple<byte, string, int, bool>();
Thread.Sleep(500); var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
new VerifySendParameter[]
{
new("FULLNAME", fullname), new("AMOUNT", amount), new("ACCOUNTTYPE", accountType), new("ID", id),
new("APROVE", aprove)
});
Thread.Sleep(500);
if (sendResult.Message == "موفق") if (sendResult.Message == "موفق")
{ {
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true); result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
return result; return result;
} }
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false); result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
return result; return result;
} }
public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, #endregion
string aprove)
{
var tamplateId = 117946;
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("ACCOUNTTYPE", accountType), new("ID", id),
new("APROVE", aprove)
});
Thread.Sleep(500);
if (sendResult.Message == "موفق") #region AlarmMessage
{
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true); public async Task<bool> Alarm(string number, string message)
return result; {
} var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false); //var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
return result;
}
#endregion var verificationSendResult =
smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) });
Thread.Sleep(1000);
var status = verificationSendResult.Result.Status;
var mess = verificationSendResult.Result.Message;
var messaeId = verificationSendResult.Result.Data.MessageId;
if (verificationSendResult.IsCompletedSuccessfully) return true;
var resStartStatus = verificationSendResult.Result;
var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception;
#region AlarmMessage return false;
}
public async Task<bool> Alarm(string number, string message) #endregion
{
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
var verificationSendResult =
smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) });
Thread.Sleep(1000);
var status = verificationSendResult.Result.Status;
var mess = verificationSendResult.Result.Message;
var messaeId = verificationSendResult.Result.Data.MessageId;
if (verificationSendResult.IsCompletedSuccessfully) return true;
var resStartStatus = verificationSendResult.Result;
var resResult = verificationSendResult.Status;
var reseExceptiont = verificationSendResult.Exception;
return false;
}
#endregion
} }

View File

@@ -8,8 +8,6 @@ public class CreateProjectCommandValidator:AbstractValidator<CreateProjectComman
public CreateProjectCommandValidator() public CreateProjectCommandValidator()
{ {
RuleFor(x => x.Name) RuleFor(x => x.Name)
.MaximumLength(25)
.WithMessage("نام نمیتواند بیشتر از 25 کاراکتر باشد")
.NotEmpty() .NotEmpty()
.NotNull() .NotNull()
.WithMessage("نام نمیتواند خالی باشد"); .WithMessage("نام نمیتواند خالی باشد");

View File

@@ -8,14 +8,13 @@ namespace GozareshgirProgramManager.Application.Modules.Projects.Queries.Project
public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery<ProjectBoardDetailResponse>; public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery<ProjectBoardDetailResponse>;
public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTime,string RemainingTime ); public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTimeMinute,string RemainingTimeMinute );
public record ProjectBoardDetailUserResponse public record ProjectBoardDetailUserResponse
{ {
public List<ProjectBoardDetailUserHistoryResponse> Histories { get; init; } public List<ProjectBoardDetailUserHistoryResponse> Histories { get; init; }
public string UserFullName { get; init; } public string UserFullName { get; init; }
public string TotalTime { get; init; } public string SpentTimeMinute { get; init; }
public string SpentTime { get; init; }
public long UserId { get; init; } public long UserId { get; init; }
} }
@@ -24,7 +23,7 @@ public record ProjectBoardDetailUserHistoryResponse
public string Date { get; init; } public string Date { get; init; }
public string startTime { get; init; } public string startTime { get; init; }
public string EndTime { get; init; } public string EndTime { get; init; }
public string TotalTime { get; init; } public string TotalTimeMinute { get; init; }
} }
public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDetailQuery, ProjectBoardDetailResponse> public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDetailQuery, ProjectBoardDetailResponse>
@@ -68,18 +67,18 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDeta
{ {
UserId = x.Key, UserId = x.Key,
UserFullName = usersDict[x.Key], UserFullName = usersDict[x.Key],
TotalTime = TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalHours.ToString(CultureInfo.InvariantCulture), SpentTimeMinute = ((int)TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalMinutes).ToString(CultureInfo.InvariantCulture),
Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse() Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse()
{ {
Date = h.StartDate.ToFarsi(), Date = h.StartDate.ToFarsi(),
startTime = h.StartDate.ToString("HH:mm"), startTime = h.StartDate.ToString("HH:mm"),
EndTime = h.EndDate?.ToString("HH:mm") ?? "-", EndTime = h.EndDate?.ToString("HH:mm") ?? "-",
TotalTime = h.GetTimeSpent().ToString(@"hh\:mm") TotalTimeMinute = h.GetTimeSpent().TotalMinutes.ToString("F0",CultureInfo.InvariantCulture)
}).ToList() }).ToList()
}; };
}).ToList(); }).ToList();
var response = new ProjectBoardDetailResponse(users, $"{(int)totalActivityTimeSpan.TotalHours}:{totalActivityTimeSpan.Minutes:D2}", var response = new ProjectBoardDetailResponse(users, $"{(int)finalTime.TotalMinutes}",
$"{(int)remainingTimeSpan.TotalHours}:{remainingTimeSpan.Minutes:D2}"); $"{(int)remainingTimeSpan.TotalMinutes:D2}");
return OperationResult<ProjectBoardDetailResponse>.Success(response); return OperationResult<ProjectBoardDetailResponse>.Success(response);
} }
} }

View File

@@ -40,16 +40,15 @@ public class institutionContractController : AdminBaseController
private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication; private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication;
private readonly IPaymentGateway _paymentGateway; private readonly IPaymentGateway _paymentGateway;
private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks
= new ConcurrentDictionary<Guid, SemaphoreSlim>(); = new ConcurrentDictionary<Guid, SemaphoreSlim>();
public institutionContractController(IInstitutionContractApplication institutionContractApplication, public institutionContractController(IInstitutionContractApplication institutionContractApplication,
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication, IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, IEmployerApplication employerApplication, IAccountApplication accountApplication, IEmployerApplication employerApplication,
IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration, IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration,
ITemporaryClientRegistrationApplication clientRegistrationApplication,IHttpClientFactory httpClientFactory) ITemporaryClientRegistrationApplication clientRegistrationApplication, IHttpClientFactory httpClientFactory)
{ {
_institutionContractApplication = institutionContractApplication; _institutionContractApplication = institutionContractApplication;
_contractingPartyApplication = contractingPartyApplication; _contractingPartyApplication = contractingPartyApplication;
@@ -72,12 +71,13 @@ public class institutionContractController : AdminBaseController
{ {
return await _institutionContractApplication.GetList(searchModel); return await _institutionContractApplication.GetList(searchModel);
} }
[HttpGet("select-list")] [HttpGet("select-list")]
public async Task<ActionResult<List<InstitutionContractSelectListViewModel>>> GetContractingPartySelectList(string search,string selected) public async Task<ActionResult<List<InstitutionContractSelectListViewModel>>> GetContractingPartySelectList(
string search, string selected)
{ {
var result = await _institutionContractApplication var result = await _institutionContractApplication
.GetInstitutionContractSelectList(search,selected); .GetInstitutionContractSelectList(search, selected);
return result; return result;
} }
@@ -225,9 +225,8 @@ public class institutionContractController : AdminBaseController
{ {
_institutionContractApplication.RemoveContract(id); _institutionContractApplication.RemoveContract(id);
return new OperationResult().Succcedded(); return new OperationResult().Succcedded();
} }
[HttpPost("deActive/{id}")] [HttpPost("deActive/{id}")]
public ActionResult<OperationResult> DeActive(long id, string balance) public ActionResult<OperationResult> DeActive(long id, string balance)
{ {
@@ -341,7 +340,7 @@ public class institutionContractController : AdminBaseController
{ {
var institutionContractViewModels = var institutionContractViewModels =
_institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" }); _institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" });
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels); var bytes = InstitutionContractExcelGenerator.GenerateExcel(new List<InstitutionContractExcelViewModel>());
return File(bytes, return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx"); $"قرارداد های مالی.xlsx");
@@ -349,7 +348,7 @@ public class institutionContractController : AdminBaseController
[HttpPost("create/inquiry")] [HttpPost("create/inquiry")]
public async Task<ActionResult<OperationResult<ContractingPartyTempViewModel>>> CreateInquiry( public async Task<ActionResult<OperationResult<ContractingPartyTempViewModel>>> CreateInquiry(
[FromBody] CreateInquiryRequest request) [FromBody] InstitutionContractCreationInquiryRequest request)
{ {
var res = await _temporaryClientRegistration.CreateContractingPartyTemp(request.NationalCode, var res = await _temporaryClientRegistration.CreateContractingPartyTemp(request.NationalCode,
request.DateOfBirth, request.DateOfBirth,
@@ -358,7 +357,8 @@ public class institutionContractController : AdminBaseController
} }
[HttpPost("workshop-service-calculator")] [HttpPost("workshop-service-calculator")]
public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator([FromBody]CreateWorkshopTemp command) public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator(
[FromBody] CreateWorkshopTemp command)
{ {
var workshopTemp = new WorkshopTempViewModel var workshopTemp = new WorkshopTempViewModel
{ {
@@ -373,7 +373,7 @@ public class institutionContractController : AdminBaseController
}; };
var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp); var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp);
var result = new WorkshopServiceCalculatorResponse var result = new WorkshopServiceCalculatorResponse
{ {
TotalAmount = response.OnlineAndInPersonSumAmountStr TotalAmount = response.OnlineAndInPersonSumAmountStr
@@ -385,7 +385,8 @@ public class institutionContractController : AdminBaseController
public async Task<ActionResult<InstitutionPlanCalculatorResponse>> InstitutionPlanCalculator( public async Task<ActionResult<InstitutionPlanCalculatorResponse>> InstitutionPlanCalculator(
[FromBody] InstitutionPlanCalculatorRequest request) [FromBody] InstitutionPlanCalculatorRequest request)
{ {
var res = await _temporaryClientRegistration.GetTotalPaymentAndWorkshopList(request.TotalAmountMonth,duration: request.Duration,request.HasInPersonContract); var res = await _temporaryClientRegistration.GetTotalPaymentAndWorkshopList(request.TotalAmountMonth,
duration: request.Duration, request.HasInPersonContract);
var result = new InstitutionPlanCalculatorResponse() var result = new InstitutionPlanCalculatorResponse()
{ {
TotalAmountWithTax = res.OneTimeTotalPaymentStr, TotalAmountWithTax = res.OneTimeTotalPaymentStr,
@@ -403,7 +404,6 @@ public class institutionContractController : AdminBaseController
Obligation = res.OneTimeTotalPaymentStr, Obligation = res.OneTimeTotalPaymentStr,
PaymentForOneMonth = res.SumOfWorkshopsPayment, PaymentForOneMonth = res.SumOfWorkshopsPayment,
DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth
}; };
return result; return result;
} }
@@ -414,13 +414,13 @@ public class institutionContractController : AdminBaseController
/// <param name="command"></param> /// <param name="command"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<ActionResult<OperationResult>> Create([FromBody]CreateInstitutionContractRequest command) public async Task<ActionResult<OperationResult>> Create([FromBody] CreateInstitutionContractRequest command)
{ {
var res =await _institutionContractApplication.CreateAsync(command); var res = await _institutionContractApplication.CreateAsync(command);
if(!res.IsSuccedded) if (!res.IsSuccedded)
throw new BadRequestException(res.Message); throw new BadRequestException(res.Message);
return res; return res;
} }
@@ -448,22 +448,26 @@ public class institutionContractController : AdminBaseController
if (operationResult.IsSuccedded) if (operationResult.IsSuccedded)
transaction.Complete(); transaction.Complete();
return operationResult; return operationResult;
} }
[HttpPost("create/set-discount")] [HttpPost("create/set-discount")]
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request) public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract(
[FromBody] InstitutionContractSetDiscountRequest request)
{ {
var res = _institutionContractApplication.CalculateDiscount(request); var res = _institutionContractApplication.CalculateDiscount(request);
return res; return res;
} }
[HttpPost("create/reset-discount")] [HttpPost("create/reset-discount")]
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request) public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate(
[FromBody] InstitutionContractResetDiscountForCreateRequest request)
{ {
var res = _institutionContractApplication.ResetDiscountCreate(request); var res = _institutionContractApplication.ResetDiscountCreate(request);
return res; return res;
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@@ -484,15 +488,15 @@ public class institutionContractController : AdminBaseController
var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme); var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme);
var callback = Url.Action("Verify", "General", null, Request.Scheme); var callback = Url.Action("Verify", "General", null, Request.Scheme);
var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback); var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback);
if (!res.IsSuccedded) if (!res.IsSuccedded)
return new OperationResult<string>().Failed(res.Message); return new OperationResult<string>().Failed(res.Message);
var payUrl = _paymentGateway.GetStartPayUrl(res.Data); var payUrl = _paymentGateway.GetStartPayUrl(res.Data);
// URL کامل برای redirect شامل paymentUrl به عنوان query parameter // URL کامل برای redirect شامل paymentUrl به عنوان query parameter
var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}"; var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}";
return new OperationResult<string>().Succcedded(redirectUrl); return new OperationResult<string>().Succcedded(redirectUrl);
} }
@@ -504,13 +508,12 @@ public class institutionContractController : AdminBaseController
{ {
return BadRequest("Payment URL is required"); return BadRequest("Payment URL is required");
} }
// redirect به درگاه پرداخت // redirect به درگاه پرداخت
return Redirect(paymentUrl); return Redirect(paymentUrl);
} }
[HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")] [HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")]
[AllowAnonymous] [AllowAnonymous]
public async Task<ActionResult<OperationResult<OtpResultViewModel>>> SendVerifyOtp(Guid id) public async Task<ActionResult<OperationResult<OtpResultViewModel>>> SendVerifyOtp(Guid id)
@@ -528,97 +531,177 @@ public class institutionContractController : AdminBaseController
} }
} }
#region Create
[HttpPost("creation/inquiry")]
public async Task<ActionResult<InstitutionContractCreationInquiryResult>> CreationInquiry(
InstitutionContractCreationInquiryRequest request)
{
var res = await _institutionContractApplication.CreationInquiry(request);
return res;
}
[HttpGet("creation/get-representative")]
public async Task<ActionResult<InstitutionContractCreationGetRepresentativeIdResponse>> GetRepresentatives(string nationalCode)
{
var res = await _contractingPartyApplication.GetRepresentativeIdByNationalCode(nationalCode);
return new InstitutionContractCreationGetRepresentativeIdResponse()
{
RepresentativeId = res
};
}
[HttpPost("creation/workshops")]
public async Task<ActionResult<InstitutionContractCreationWorkshopsResponse>> CreationWorkshops(
[FromBody] InstitutionContractCreationWorkshopsRequest request)
{
var res = await _institutionContractApplication.GetCreationWorkshops(request);
return res;
}
[HttpPost("creation/institution-plan")]
public async Task<ActionResult<InstitutionContractCreationPlanResponse>> CreationInstitutionPlan(
[FromBody] InstitutionContractCreationPlanRequest request)
{
var res = await _institutionContractApplication.GetCreationInstitutionPlan(request);
return res;
}
[HttpPost("creation/payment-method")]
public async Task<ActionResult<InstitutionContractCreationPaymentResponse>> GetCreationPaymentMethod(
[FromBody] InstitutionContractCreationPaymentRequest request)
{
var res = await _institutionContractApplication.GetCreationPaymentMethod(request);
return res;
}
[HttpPost("creation/set-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForCreation(
[FromBody] InstitutionContractSetDiscountForCreationRequest request)
{
var res = await _institutionContractApplication.SetDiscountForCreation(request);
return res;
}
[HttpPost("creation/reset-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForCreation(
[FromBody] InstitutionContractResetDiscountForExtensionRequest request)
{
var res = await _institutionContractApplication.ResetDiscountForCreation(request);
return res;
}
[HttpPost("creation/complete")]
public async Task<ActionResult<OperationResult>> CreationComplete(
[FromBody] InstitutionContractExtensionCompleteRequest request)
{
var res = await _institutionContractApplication.CreationComplete(request);
return res;
}
#endregion
[HttpGet("extenstion/inquiry/{previousContractId}")] [HttpGet("extenstion/inquiry/{previousContractId}")]
public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId) public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId)
{ {
var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId); var res = await _institutionContractApplication.GetExtensionInquiry(previousContractId);
return res; return res;
} }
[HttpPost("extenstion/workshops")] [HttpPost("extenstion/workshops")]
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtensionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> ExtensionWorkshops(
[FromBody] InstitutionContractExtensionWorkshopsRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionWorkshops(request); var res = await _institutionContractApplication.GetExtensionWorkshops(request);
return res; return res;
} }
[HttpPost("extenstion/institution-plan")] [HttpPost("extenstion/institution-plan")]
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request) public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> ExtensionInstitutionPlan(
[FromBody] InstitutionContractExtensionPlanRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionInstitutionPlan(request); var res = await _institutionContractApplication.GetExtensionInstitutionPlan(request);
return res; return res;
} }
[HttpPost("extenstion/payment-method")] [HttpPost("extenstion/payment-method")]
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod([FromBody]InstitutionContractExtensionPaymentRequest request) public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> GetExtensionPaymentMethod(
[FromBody] InstitutionContractExtensionPaymentRequest request)
{ {
var res =await _institutionContractApplication.GetExtensionPaymentMethod(request); var res = await _institutionContractApplication.GetExtensionPaymentMethod(request);
return res; return res;
} }
[HttpPost("extension/set-discount")] [HttpPost("extension/set-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension(
[FromBody] InstitutionContractSetDiscountForExtensionRequest request)
{ {
var res =await _institutionContractApplication.SetDiscountForExtension(request); var res = await _institutionContractApplication.SetDiscountForExtension(request);
return res; return res;
} }
[HttpPost("extension/reset-discount")] [HttpPost("extension/reset-discount")]
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request) public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension(
[FromBody] InstitutionContractResetDiscountForExtensionRequest request)
{ {
var res =await _institutionContractApplication.ResetDiscountForExtension(request); var res = await _institutionContractApplication.ResetDiscountForExtension(request);
return res; return res;
} }
[HttpPost("extenstion/complete")] [HttpPost("extenstion/complete")]
public async Task<ActionResult<OperationResult>> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) public async Task<ActionResult<OperationResult>> ExtensionComplete(
[FromBody] InstitutionContractExtensionCompleteRequest request)
{ {
var res =await _institutionContractApplication.ExtensionComplete(request); var res = await _institutionContractApplication.ExtensionComplete(request);
return res; return res;
} }
[HttpGet("amendment/workshops/{institutionContractId}")] [HttpGet("amendment/workshops/{institutionContractId}")]
public async Task<ActionResult<InstitutionContractAmendmentWorkshopsResponse>> GetAmendmentWorkshops(long institutionContractId) public async Task<ActionResult<InstitutionContractAmendmentWorkshopsResponse>> GetAmendmentWorkshops(
long institutionContractId)
{ {
var res =await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId); var res = await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId);
return res; return res;
} }
[HttpPost("resend-verify-link/{institutionContractId}")] [HttpPost("resend-verify-link/{institutionContractId}")]
public async Task<OperationResult> ResendVerifyLink(long institutionContractId) public async Task<OperationResult> ResendVerifyLink(long institutionContractId)
{ {
var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId); var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId);
return res; return res;
} }
[HttpPost("amendment/insert-temp-workshops")] [HttpPost("amendment/insert-temp-workshops")]
public async Task<ActionResult<InsertAmendmentTempWorkshopResponse>> InsertAmendmentTempWorkshops([FromBody]InstitutionContractAmendmentTempWorkshopViewModel request) public async Task<ActionResult<InsertAmendmentTempWorkshopResponse>> InsertAmendmentTempWorkshops(
[FromBody] InstitutionContractAmendmentTempWorkshopViewModel request)
{ {
var res =await _institutionContractApplication.InsertAmendmentTempWorkshops(request); var res = await _institutionContractApplication.InsertAmendmentTempWorkshops(request);
return res; return res;
} }
[HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")] [HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")]
public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId) public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId)
{ {
await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId); await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId);
return Ok(); return Ok();
} }
[HttpPost("amendment/payment-details")] [HttpPost("amendment/payment-details")]
public async Task<ActionResult<InsitutionContractAmendmentPaymentResponse>> GetAmendmentPaymentDetails([FromBody]InsitutionContractAmendmentPaymentRequest request) public async Task<ActionResult<InsitutionContractAmendmentPaymentResponse>> GetAmendmentPaymentDetails(
[FromBody] InsitutionContractAmendmentPaymentRequest request)
{ {
var res =await _institutionContractApplication.GetAmendmentPaymentDetails(request); var res = await _institutionContractApplication.GetAmendmentPaymentDetails(request);
return res; return res;
} }
[HttpGet("edit-old/{id}")] [HttpGet("edit-old/{id}")]
public ActionResult<EditInstitutionContract> GetEditOldDetails(long id) public ActionResult<EditInstitutionContract> GetEditOldDetails(long id)
{ {
var representativList = new List<RepresentativeViewModel>(); var representativList = new List<RepresentativeViewModel>();
var contractingPartyList = new List<PersonalContractingPartyViewModel>(); var contractingPartyList = new List<PersonalContractingPartyViewModel>();
var res = _institutionContractApplication.GetDetails(id); var res = _institutionContractApplication.GetDetails(id);
var representative = new RepresentativeViewModel var representative = new RepresentativeViewModel
{ {
Id = res.RepresentativeId, Id = res.RepresentativeId,
@@ -683,13 +766,14 @@ public class institutionContractController : AdminBaseController
res.ContractAmountOAlone = res.ContractAmountString; res.ContractAmountOAlone = res.ContractAmountString;
res.ValueAddedTaxStr = "0"; res.ValueAddedTaxStr = "0";
} }
return res; return res;
} }
[HttpPost("edit-old")] [HttpPost("edit-old")]
public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command) public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command)
{ {
var op = new OperationResult(); var op = new OperationResult();
var phoneNumber = command.ContactInformationList.FirstOrDefault(x => var phoneNumber = command.ContactInformationList.FirstOrDefault(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId); var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
@@ -703,57 +787,58 @@ public class institutionContractController : AdminBaseController
//if (string.IsNullOrWhiteSpace(command.HasValueAddedTax)) //if (string.IsNullOrWhiteSpace(command.HasValueAddedTax))
// command.HasValueAddedTax = "false"; // command.HasValueAddedTax = "false";
var result = _institutionContractApplication.Edit(command); var result = _institutionContractApplication.Edit(command);
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId); var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
var counter = command.ContactInformationList.Count; var counter = command.ContactInformationList.Count;
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel() var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x=>x.IsActiveString == "false" || x.IsActiveString == "blue").ToList(); { ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" })
if (result.IsSuccedded && counter > 0) .Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
{ if (result.IsSuccedded && counter > 0)
{
if (getOldContarct.Count > 0) if (getOldContarct.Count > 0)
{ {
foreach (var item in getOldContarct) foreach (var item in getOldContarct)
{ {
_contactInfoApplication.RemoveContactInfo(item.Id); _contactInfoApplication.RemoveContactInfo(item.Id);
foreach (var phone in command.ContactInformationList) foreach (var phone in command.ContactInformationList)
{ {
if (phone.PhoneNumber != null) if (phone.PhoneNumber != null)
{ {
var contactinfo = new CreateContactInfo var contactinfo = new CreateContactInfo
{ {
InstitutionContractId = item.Id, InstitutionContractId = item.Id,
PhoneType = phone.PhoneType, PhoneType = phone.PhoneType,
Position = phone.Position, Position = phone.Position,
PhoneNumber = phone.PhoneNumber, PhoneNumber = phone.PhoneNumber,
FnameLname = phone.FnameLname, FnameLname = phone.FnameLname,
SendSms = phone.SendSmsString == "true" ? true : false SendSms = phone.SendSmsString == "true" ? true : false
}; };
_contactInfoApplication.Create(contactinfo); _contactInfoApplication.Create(contactinfo);
} }
Thread.Sleep(500); Thread.Sleep(500);
} }
} }
} }
_contactInfoApplication.RemoveContactInfo(command.Id);
foreach (var item in command.ContactInformationList)
{
if (item.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = item.PhoneType,
Position = item.Position,
PhoneNumber = item.PhoneNumber,
FnameLname = item.FnameLname,
SendSms = item.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500); _contactInfoApplication.RemoveContactInfo(command.Id);
} foreach (var item in command.ContactInformationList)
{
if (item.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = item.PhoneType,
Position = item.Position,
PhoneNumber = item.PhoneNumber,
FnameLname = item.FnameLname,
SendSms = item.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
//ساخت اکانت کلاینت //ساخت اکانت کلاینت
@@ -763,7 +848,6 @@ public class institutionContractController : AdminBaseController
var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass); var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass);
if (!checkExistAccount) if (!checkExistAccount)
{ {
var createAcc = new RegisterAccount var createAcc = new RegisterAccount
{ {
Fullname = conractingParty.LName, Fullname = conractingParty.LName,
@@ -774,48 +858,83 @@ public class institutionContractController : AdminBaseController
}; };
var res = _accountApplication.RegisterClient(createAcc); var res = _accountApplication.RegisterClient(createAcc);
if (res.IsSuccedded) if (res.IsSuccedded)
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId); _institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId,
res.SendId);
} }
} }
//Thread.Sleep(500); //Thread.Sleep(500);
//for (int i = 0; i <= counter - 1; i++) //for (int i = 0; i <= counter - 1; i++)
//{ //{
// if (command.ContactInformationList[i].PhoneNumber != null) // if (command.ContactInformationList[i].PhoneNumber != null)
// { // {
// var contactinfo = new CreateContactInfo() // var contactinfo = new CreateContactInfo()
// { // {
// InstitutionContractId = result.SendId, // InstitutionContractId = result.SendId,
// PhoneType = command.ContactInformationList[i].PhoneType, // PhoneType = command.ContactInformationList[i].PhoneType,
// Position = command.ContactInformationList[i].Position, // Position = command.ContactInformationList[i].Position,
// PhoneNumber = command.ContactInformationList[i].PhoneNumber, // PhoneNumber = command.ContactInformationList[i].PhoneNumber,
// FnameLname = command.ContactInformationList[i].FnameLname, // FnameLname = command.ContactInformationList[i].FnameLname,
// SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false // SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false
// }; // };
// _contactInfoApplication.Create(contactinfo); // _contactInfoApplication.Create(contactinfo);
// } // }
// Thread.Sleep(500); // Thread.Sleep(500);
//} //}
return result; return result;
} }
[HttpGet("print/{id}")] [HttpGet("print/{id}")]
public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id) public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id)
{ {
var res =await _institutionContractApplication.PrintOneAsync(id); var res = await _institutionContractApplication.PrintOneAsync(id);
return res; return res;
} }
[HttpPost("mannual-verify/{id}")] [HttpPost("mannual-verify/{id}")]
public async Task<ActionResult<OperationResult>> VerifyInstitutionContractManually(long id) public async Task<ActionResult<OperationResult>> VerifyInstitutionContractManually(long id)
{ {
var res= await _institutionContractApplication.VerifyInstitutionContractManually(id); var res = await _institutionContractApplication.VerifyInstitutionContractManually(id);
return res; return res;
} }
[HttpGet("excel-download")]
public async Task<IActionResult> ExcelDownload()
{
var searchModel = new InstitutionContractListSearchModel();
var dataVm = new List<InstitutionContractExcelViewModel>();
foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames())
{
var @enum = Enum.Parse<InstitutionContractListStatus>(name);
searchModel.Status = @enum;
searchModel.PageSize = 99999;
var data = (await (_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel()
{ Tab = @enum, GetInstitutionContractListItemsViewModels = data });
}
searchModel.Status = null;
var nullData = (await (_institutionContractApplication.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel()
{ Tab = null, GetInstitutionContractListItemsViewModels = nullData });
var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm);
return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx");
}
} }
public class InstitutionContractCreationGetRepresentativeIdResponse
{
public long RepresentativeId { get; set; }
}
public class VerifyOtpRequest public class VerifyOtpRequest
{ {
@@ -854,16 +973,11 @@ public class WorkshopServiceCalculatorResponse
public string TotalAmount { get; set; } public string TotalAmount { get; set; }
} }
public record InstitutionPlanCalculatorRequest(double TotalAmountMonth,bool HasInPersonContract, public record InstitutionPlanCalculatorRequest(
double TotalAmountMonth,
bool HasInPersonContract,
InstitutionContractDuration Duration = InstitutionContractDuration.TwelveMonths); InstitutionContractDuration Duration = InstitutionContractDuration.TwelveMonths);
public class CreateInquiryRequest
{
public string NationalCode { get; set; }
public string DateOfBirth { get; set; }
public string Mobile { get; set; }
}
public class VerifyCodeRequest public class VerifyCodeRequest
{ {
public long ContractingPartyId { get; set; } public long ContractingPartyId { get; set; }

View File

@@ -268,10 +268,10 @@
href="#showmodal=@Url.Page("./Index", "Edit", new { Id = item.Id })"> href="#showmodal=@Url.Page("./Index", "Edit", new { Id = item.Id })">
<i class="fa fa-edit faSize"></i> <i class="fa fa-edit faSize"></i>
</a> </a>
<a class="btn btn-success pull-right m-rl-5 red" @* <a class="btn btn-success pull-right m-rl-5 red" *@
href="#showmodal=@Url.Page("./Index", "AccountWorkshop", new { item.Id })"> @* href="#showmodal=@Url.Page("./Index", "AccountWorkshop", new { item.Id })"> *@
<i class="fa fa-edit faSize"></i> @* <i class="fa fa-edit faSize"></i> *@
</a> @* </a> *@
@if (item.IsActiveString == "true" && item.Role != "مدیر سیستم") @if (item.IsActiveString == "true" && item.Role != "مدیر سیستم")
{ {
<a onclick="deActive(@item.Id,'@item.Fullname')" class="btn btn-danger pull-right m-rl-5 red"> <i class="fa faSize fa-trash"></i></a> <a onclick="deActive(@item.Id,'@item.Fullname')" class="btn btn-danger pull-right m-rl-5 red"> <i class="fa faSize fa-trash"></i></a>

View File

@@ -316,14 +316,14 @@ public class IndexModel : PageModel
}); });
} }
public IActionResult OnGetAccountWorkshop(long id) // public IActionResult OnGetAccountWorkshop(long id)
{ // {
var res = _accountApplication.WorkshopList(id); // var res = _accountApplication.WorkshopList(id);
//
//
//
return Partial("AccountLeftWork", res); // return Partial("AccountLeftWork", res);
} // }
public IActionResult OnPostCreateAccountLeftWork( public IActionResult OnPostCreateAccountLeftWork(
List<WorkshopAccountlistViewModel> workshopAccountlistViewModel, List<WorkshopAccountlistViewModel> workshopAccountlistViewModel,

View File

@@ -2,6 +2,7 @@
using System.Drawing; using System.Drawing;
using _0_Framework.Application; using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Account;
using Company.Domain.InstitutionContractAgg;
using CompanyManagement.Infrastructure.Excel.InstitutionContract; using CompanyManagement.Infrastructure.Excel.InstitutionContract;
using CompanyManagment.App.Contracts.Employer; using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContract;
@@ -38,6 +39,7 @@ public class IndexModel : PageModel
private readonly IInstitutionContractApplication _institutionContract; private readonly IInstitutionContractApplication _institutionContract;
private readonly ILeftWorkApplication _leftWorkApplication; private readonly ILeftWorkApplication _leftWorkApplication;
private readonly IRepresentativeApplication _representativeApplication; private readonly IRepresentativeApplication _representativeApplication;
private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly string _viewName; private readonly string _viewName;
@@ -60,7 +62,7 @@ public class IndexModel : PageModel
IPersonalContractingPartyApp contractingPartyApplication, IPersonalContractingPartyApp contractingPartyApplication,
IRepresentativeApplication representativeApplication, IInstitutionContractApplication institutionContract, IRepresentativeApplication representativeApplication, IInstitutionContractApplication institutionContract,
ILeftWorkApplication leftWorkApplication ILeftWorkApplication leftWorkApplication
, IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication) , IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication, IInstitutionContractRepository institutionContractRepository)
{ {
_workshopApplication = workshopApplication; _workshopApplication = workshopApplication;
@@ -71,6 +73,7 @@ public class IndexModel : PageModel
_leftWorkApplication = leftWorkApplication; _leftWorkApplication = leftWorkApplication;
_contactInfoApplication = contactInfoApplication; _contactInfoApplication = contactInfoApplication;
_accountApplication = accountApplication; _accountApplication = accountApplication;
_institutionContractRepository = institutionContractRepository;
} }
public string Message { get; set; } public string Message { get; set; }
@@ -920,12 +923,27 @@ public class IndexModel : PageModel
}); });
} }
public IActionResult OnGetDownloadExcel() public async Task<IActionResult> OnGetDownloadExcel()
{ {
var institutionContractViewModels = _institutionContract.NewSearch(new() {IsActiveString = "both", TypeOfContract = "both" }); var searchModel = new InstitutionContractListSearchModel();
institutionContractViewModels= institutionContractViewModels.GroupBy(x=>x.ContractingPartyId).Select(g=>g.MaxBy(x=>x.ContractStartGr)).ToList(); var dataVm=new List<InstitutionContractExcelViewModel>();
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels);
foreach (var name in typeof(InstitutionContractListStatus).GetEnumNames())
{
var @enum = Enum.Parse<InstitutionContractListStatus>(name);
searchModel.Status = @enum;
searchModel.PageSize = 99999;
var data =( await(_institutionContractRepository.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = @enum, GetInstitutionContractListItemsViewModels = data});
}
searchModel.Status = null;
var nullData = ( await(_institutionContractRepository.GetList(searchModel))).List;
dataVm.Add(new InstitutionContractExcelViewModel(){Tab = null, GetInstitutionContractListItemsViewModels = nullData});
var bytes = InstitutionContractExcelGenerator.GenerateExcel(dataVm);
return File(bytes, return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx"); $"قرارداد های مالی.xlsx");

View File

@@ -43,6 +43,9 @@
case TypeOfSmsSetting.Warning: case TypeOfSmsSetting.Warning:
<h5 class="modal-title">ایجاد پیامک هشدار قضائی</h5> <h5 class="modal-title">ایجاد پیامک هشدار قضائی</h5>
break; break;
case TypeOfSmsSetting.InstitutionContractConfirm:
<h5 class="modal-title">ایجاد پیامک یادآور تایید قراداد</h5>
break;
} }
} }

View File

@@ -41,6 +41,10 @@
case TypeOfSmsSetting.Warning: case TypeOfSmsSetting.Warning:
<h5 class="modal-title">ویرایش پیامک هشدار قضائی</h5> <h5 class="modal-title">ویرایش پیامک هشدار قضائی</h5>
break; break;
case TypeOfSmsSetting.InstitutionContractConfirm:
<h5 class="modal-title">ویرایش پیامک یادآور تایید قراداد</h5>
break;
} }
} }
<button type="button" class="close" data-dismiss="modal" aria-label="بستن"> <button type="button" class="close" data-dismiss="modal" aria-label="بستن">
@@ -100,8 +104,8 @@
success: function (response) { success: function (response) {
if(response.isSuccess){ if(response.isSuccess){
$.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message); $.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message);
$('.close').click();
$('.close').click();
setTimeout(function () { setTimeout(function () {
if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractDebtReminder'){ if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractDebtReminder'){
$('#institutionContractDebtReminderTab').click(); $('#institutionContractDebtReminderTab').click();
@@ -114,14 +118,16 @@
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){ }else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){
$('#warningTab').click(); $('#warningTab').click();
}else if(typeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){ }else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){
$('#institutionContractConfirmTab').click(); $('#institutionContractConfirmTab').click();
} }
}, 700);
}, 500);
}else{ }else{
$.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message); $.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message);
} }

View File

@@ -52,6 +52,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
private readonly IOnlinePayment _onlinePayment; private readonly IOnlinePayment _onlinePayment;
private readonly IFaceEmbeddingService _faceEmbeddingService; private readonly IFaceEmbeddingService _faceEmbeddingService;
private readonly IAuthHelper _authHelper; private readonly IAuthHelper _authHelper;
private readonly IInstitutionContractApplication _institutionContractApplication;
[BindProperty] public IFormFile File { get; set; } [BindProperty] public IFormFile File { get; set; }
@@ -77,7 +78,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService, public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService,
CompanyContext context, AccountContext accountContext, IHttpClientFactory httpClientFactory, CompanyContext context, AccountContext accountContext, IHttpClientFactory httpClientFactory,
IOptions<AppSettingConfiguration> appSetting, IOptions<AppSettingConfiguration> appSetting,
ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment, IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper) ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment,
IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper, IInstitutionContractApplication institutionContractApplication)
{ {
_application = application; _application = application;
_rollCallDomainService = rollCallDomainService; _rollCallDomainService = rollCallDomainService;
@@ -88,6 +90,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
_onlinePayment = onlinePayment; _onlinePayment = onlinePayment;
_faceEmbeddingService = faceEmbeddingService; _faceEmbeddingService = faceEmbeddingService;
_authHelper = authHelper; _authHelper = authHelper;
_institutionContractApplication = institutionContractApplication;
_paymentGateway = new SepehrPaymentGateway(httpClientFactory); _paymentGateway = new SepehrPaymentGateway(httpClientFactory);
} }
@@ -152,31 +155,60 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
{ {
//await UpdateInstitutionContract(); //await UpdateInstitutionContract();
//await UpdateFaceEmbeddingNames(); //await UpdateFaceEmbeddingNames();
await SetInstitutionContractSigningType(); //await SetInstitutionContractSigningType();
await ReActivateInstitution();
ViewData["message"] = "تومام یک"; ViewData["message"] = "تومام یک";
return Page(); return Page();
} }
private async System.Threading.Tasks.Task ReActivateInstitution()
{
var blueInstitutionContracts = await _context.InstitutionContractSet.Where(x =>
x.IsActiveString == "blue").ToListAsync();
var blueContracts = new List<InstitutionContract>();
foreach (var blueContract in blueInstitutionContracts)
{
var verifiedContracts = await _context.InstitutionContractSet
.Where(x => x.ContractingPartyId == blueContract.ContractingPartyId
&& x.VerificationStatus == InstitutionContractVerificationStatus.Verified
&& x.ContractStartGr > blueContract.ContractEndGr)
.ToListAsync();
if (verifiedContracts.Any())
{
blueContracts.Add(blueContract);
}
}
foreach (var institutionContract in blueContracts)
{
institutionContract.DeActive();
_institutionContractApplication.ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
}
}
private async System.Threading.Tasks.Task SetInstitutionContractSigningType() private async System.Threading.Tasks.Task SetInstitutionContractSigningType()
{ {
var query = _context.InstitutionContractSet var query = _context.InstitutionContractSet
.Where(x=>x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify); .Where(x => x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify);
var otpSigned = query.Where(x=>x.VerifierFullName != null && x.LawId != 0).ToList(); var otpSigned = query.Where(x => x.VerifierFullName != null && x.LawId != 0).ToList();
foreach (var institutionContract in otpSigned) foreach (var institutionContract in otpSigned)
{ {
institutionContract.SetSigningType(InstitutionContractSigningType.OtpBased); institutionContract.SetSigningType(InstitutionContractSigningType.OtpBased);
} }
var lagacySigned = query.Where(x=>x.VerifierFullName == null && x.LawId == 0).ToList();
var lagacySigned = query.Where(x => x.VerifierFullName == null && x.LawId == 0).ToList();
foreach (var institutionContract in lagacySigned) foreach (var institutionContract in lagacySigned)
{ {
institutionContract.SetSigningType(InstitutionContractSigningType.Legacy); institutionContract.SetSigningType(InstitutionContractSigningType.Legacy);
} }
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
} }
public async Task<IActionResult> OnPostShiftDateNew2() public async Task<IActionResult> OnPostShiftDateNew2()
@@ -326,6 +358,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
//TranslateCode(result?.ErrorCode); //TranslateCode(result?.ErrorCode);
return Page(); return Page();
} }
[DisableConcurrentExecution(timeoutInSeconds: 120)] [DisableConcurrentExecution(timeoutInSeconds: 120)]
public async Task<IActionResult> OnPostUploadFrontEnd(CancellationToken cancellationToken) public async Task<IActionResult> OnPostUploadFrontEnd(CancellationToken cancellationToken)
{ {
@@ -368,8 +401,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
TempData["Message"] = "فرآیند Deploy شروع شد. لاگ را بررسی کنید."; TempData["Message"] = "فرآیند Deploy شروع شد. لاگ را بررسی کنید.";
return RedirectToPage(); return RedirectToPage();
} }
return Forbid();
return Forbid();
} }
/// <summary> /// <summary>
@@ -395,13 +428,10 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
{ {
contractingPartyIdList.Add(employer.Employer.ContractingPartyId); contractingPartyIdList.Add(employer.Employer.ContractingPartyId);
} }
} }
if (contractingPartyIdList.Count > 0) if (contractingPartyIdList.Count > 0)
{ {
if (contractingPartyIdList.Count == 1) if (contractingPartyIdList.Count == 1)
{ {
workshop.AddContractingPartyId(contractingPartyIdList[0]); workshop.AddContractingPartyId(contractingPartyIdList[0]);
@@ -422,7 +452,6 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
ViewData["message"] = "آی دی های طرف حساب اضافه شد"; ViewData["message"] = "آی دی های طرف حساب اضافه شد";
return Page(); return Page();
} }
/// <summary> /// <summary>
@@ -441,8 +470,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
var content = System.IO.File.ReadAllText(logPath, Encoding.UTF8); var content = System.IO.File.ReadAllText(logPath, Encoding.UTF8);
return Content(content); return Content(content);
} }
return Content("شما مجاز به دیدن لاگ نیستید");
return Content("شما مجاز به دیدن لاگ نیستید");
} }
@@ -1055,7 +1084,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
x.PersonnelCount, x.PersonnelCount,
x.Price, x.InstitutionContractWorkshopGroupId, x.Price, x.InstitutionContractWorkshopGroupId,
group, group,
x.WorkshopId.Value,x.id); x.WorkshopId.Value, x.id);
entity.SetEmployers(x.Employers.Select(e => e.EmployerId).ToList()); entity.SetEmployers(x.Employers.Select(e => e.EmployerId).ToList());
return entity; return entity;

View File

@@ -0,0 +1,39 @@
using _0_Framework.Application;
using Company.Domain.ContractAgg;
using CompanyManagment.App.Contracts.Contract;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Client.Controllers;
public class ContractController:ClientBaseController
{
private readonly IContractApplication _contractApplication;
public ContractController(IContractApplication contractApplication)
{
_contractApplication = contractApplication;
}
[HttpGet]
public async Task<ActionResult<PagedResult<GetContractListForClientResponse>>> GetList(
GetContractListForClientRequest searchModel)
{
var res = await _contractApplication
.GetContractListForClient(searchModel);
return res;
}
[HttpGet("print/{id}")]
public async Task<ActionResult<ContractPrintViewModel>> PrintOne(long id)
{
var res = await _contractApplication.PrintOneAsync(id);
return res;
}
[HttpGet("print")]
public async Task<ActionResult<List<ContractPrintViewModel>>> PrintAll([FromQuery] List<long> ids)
{
var res = await _contractApplication.PrintAllAsync(ids);
return res;
}
}

View File

@@ -0,0 +1,25 @@
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Employee;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Client.Controllers;
public class EmployeeController:ClientBaseController
{
private readonly IEmployeeApplication _employeeApplication;
private readonly long _workshopId;
public EmployeeController(IEmployeeApplication employeeApplication,IAuthHelper authHelper)
{
_employeeApplication = employeeApplication;
_workshopId = authHelper.GetWorkshopId();
}
[HttpGet("select-list")]
public async Task<ActionResult<List<EmployeeSelectListViewModel>>> GetEmployeeSelectList()
{
var result = await _employeeApplication.WorkedEmployeesInWorkshopSelectList(_workshopId);
return result;
}
}

View File

@@ -19,4 +19,15 @@ public class InsuranceController:ClientBaseController
var insurances =await _insuranceListApplication.GetInsuranceClientList(searchModel); var insurances =await _insuranceListApplication.GetInsuranceClientList(searchModel);
return Ok(insurances); return Ok(insurances);
} }
[HttpGet("print-one")]
public async Task<ActionResult<InsuranceClientPrintViewModel>> ClientPrintList(long id)
{
InsuranceClientPrintViewModel res = await _insuranceListApplication.ClientPrintOne(id);
return res;
}
}
public class InsuranceClientViewModel
{
} }

View File

@@ -1,5 +1,6 @@
using _0_Framework.Application; using _0_Framework.Application;
using Company.Domain.EmployeeAgg; using Company.Domain.EmployeeAgg;
using CompanyManagment.App.Contracts.InstitutionPlan;
using CompanyManagment.App.Contracts.InsuranceList; using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.Leave;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@@ -47,19 +48,125 @@ public class LeaveController : ClientBaseController
return Ok(result); return Ok(result);
} }
///// <summary>
///// چک کردن تاریخ شروع مرخصی
///// </summary>
///// <param name="startLeaveDate"></param>
///// <returns></returns>
//[HttpGet("CheckIsInvalidLeave")]
//public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate)
//{
// return await _leaveApplication.CheckIsInvalidLeave(startLeaveDate, _workshopId);
//}
/// <summary>
/// ایجاد مرخصی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("CreateLeave")]
public async Task<ActionResult<OperationResult>> CreateLeave([FromBody] CreateLeaveDto command)
{
command.WorkshopId = _workshopId;
var result = await _leaveApplication.CreateLeave(command);
return result;
}
/// <summary>
/// دریافت شیفت گردشی اگر داشت
/// در مودال ایجاد
/// </summary>
/// <param name="startLeaveDate"></param>
/// <returns></returns>
[HttpGet("GetRotatingShift")]
public async Task<OperationResult<RotatingShiftDto>> GetRotatingShift(long employeeId, string startLeaveDate)
{
return await _leaveApplication.HasRotatingShift(_workshopId, employeeId, startLeaveDate);
}
/// <summary>
/// محاسبه مدت مرخصی ساعتی
/// در مودال ایجاد
/// </summary>
/// <param name="startHours"></param>
/// <param name="endHours"></param>
/// <returns></returns>
[HttpGet("GetHourlyLeaveDuration")]
public async Task<ActionResult<string>> GetHourlyLeaveDuration(string startHours, string endHours)
{
var result =await _leaveApplication.GetHourlyLeaveDuration(startHours, endHours);
return Ok(new { LeaveDuration = result });
}
/// <summary>
/// محاسبه مدت مرخصی روزانه
/// در مودال ایجاد
/// </summary>
/// <param name="startDate"></param>
/// <param name="endDate"></param>
/// <returns></returns>
[HttpGet("GetDailyLeaveDuration")]
public async Task<ActionResult<string>> GetDailyLeaveDuration(string startDate, string endDate)
{
var result = await _leaveApplication.GetDailyLeaveDuration(startDate, endDate);
return Ok(new { LeaveDuration = result });
}
/// <summary>
/// پرینت تکی
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("print/{id}")] [HttpGet("print/{id}")]
public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id) public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
{ {
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId); var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
return leavePrint; return leavePrint;
} }
/// <summary>
/// پرینت گروهی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpGet("print")] [HttpGet("print")]
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids) public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids, LeaveListSearchModel searchModel)
{ {
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId); var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
return Ok(leavePrints); return Ok(leavePrints);
} }
/// <summary>
/// پرینت لیستی
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpGet("ListPrint")]
public async Task<ActionResult<LeaveListPrintDto>> ListPrint([FromQuery] List<long> ids)
{
var leavePrints = await _leaveApplication.ListPrint(ids);
return Ok(leavePrints);
}
/// <summary>
/// حذف مرخصی
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("RemoveLeave/{id}")]
public async Task<ActionResult<object>> RemoveLeaveAsync(long id)
{
var op =await _leaveApplication.RemoveLeaveAsync(id);
return Ok(new
{
isSuccedded = op.IsSuccedded,
message = op.Message,
});
}
} }

View File

@@ -293,9 +293,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
}); });
} }
public IActionResult OnPostReCalculateValues(List<ReCalculateRollCallValues> command) public async Task<IActionResult> OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
{ {
var result = _rollCallApplication.RecalculateValues(_workshopId, command); var result =await _rollCallApplication.RecalculateValues(_workshopId, command);
return new JsonResult(new return new JsonResult(new
{ {

View File

@@ -91,9 +91,9 @@
</span> </span>
</a> </a>
<ul class="submenu"> <ul class="submenu">
<li Permission="@SubAccountPermissionHelper.ContractListPermissionCode"><a class="selectLi" asp-page="/Company/Contracts/Index"><span>لیست قرارداد</span></a></li> <li Permission="@SubAccountPermissionHelper.ContractListPermissionCode"><a class="selectLi" href="https://client@(AppSetting.Value.Domain)/contract-list"><span>لیست قرارداد</span></a></li>
<li Permission="@SubAccountPermissionHelper.CheckoutListPermissionCode"><a class="selectLi" asp-page="/Company/Checkouts/Index"><span>لیست فیش حقوقی</span></a></li> <li Permission="@SubAccountPermissionHelper.CheckoutListPermissionCode"><a class="selectLi" asp-page="/Company/Checkouts/Index"><span>لیست فیش حقوقی</span></a></li>
<li Permission="@SubAccountPermissionHelper.InsuranceListPermissionCode"><a class="selectLi" asp-page="/Company/InsuranceList/Index"><span>لیست بیمه</span></a></li> <li Permission="@SubAccountPermissionHelper.InsuranceListPermissionCode"><a class="selectLi" href="https://client@(AppSetting.Value.Domain)/insurance-list"><span>لیست بیمه</span></a></li>
<li Permission="@SubAccountPermissionHelper.PersonnelStatusIndividualReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Employees/Index", "ContractCheckoutStatus")');"*@><span>گزارش وضعیت انفرادی پرسنل</span></a></li> <li Permission="@SubAccountPermissionHelper.PersonnelStatusIndividualReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Employees/Index", "ContractCheckoutStatus")');"*@><span>گزارش وضعیت انفرادی پرسنل</span></a></li>
<li Permission="@SubAccountPermissionHelper.PersonnelStatusGroupReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Workshop/Index", "ContractCheckoutYearlyStatus")');"*@><span>گزارش وضعیت گروهی پرسنل</span></a></li> <li Permission="@SubAccountPermissionHelper.PersonnelStatusGroupReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Workshop/Index", "ContractCheckoutYearlyStatus")');"*@><span>گزارش وضعیت گروهی پرسنل</span></a></li>
</ul> </ul>

View File

@@ -75,7 +75,7 @@ public class GeneralController : GeneralBaseController
} }
[HttpGet("/api/callback"), HttpPost("/api/callback")] [HttpGet("/api/callback"), HttpPost("/api/callback")]
public async Task<IActionResult> Verify(SepehrGatewayPayResponse payResponse) public async Task<IActionResult> Verify([FromForm]SepehrGatewayPayResponse payResponse)
{ {
if (!long.TryParse(payResponse.invoiceid, out var paymentTransactionId)) if (!long.TryParse(payResponse.invoiceid, out var paymentTransactionId))
{ {
@@ -133,7 +133,12 @@ public class GeneralController : GeneralBaseController
DigitalReceipt = payResponse.digitalreceipt DigitalReceipt = payResponse.digitalreceipt
}; };
var verifyRes = await _paymentGateway.Verify(verifyCommand, CancellationToken.None); var verifyRes = await _paymentGateway.Verify(verifyCommand, CancellationToken.None);
#if DEBUG
verifyRes.IsSuccess = true;
#endif
_financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now); _financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
if (verifyRes.IsSuccess) if (verifyRes.IsSuccess)
@@ -158,14 +163,18 @@ public class GeneralController : GeneralBaseController
payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(), payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(),
payResponse.digitalreceipt); payResponse.digitalreceipt);
if (financialInvoice.Items?.Any(x => x.Type is FinancialInvoiceItemType.BuyInstitutionContract or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false) if (financialInvoice.Items?.Any(x =>
x.Type is FinancialInvoiceItemType.BuyInstitutionContract
or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false)
{ {
var financialItems = financialInvoice.Items var financialItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract); .Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
foreach (var editFinancialInvoiceItem in financialItems) foreach (var editFinancialInvoiceItem in financialItems)
{ {
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,InstitutionContractSigningType.OtpBased); await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,
InstitutionContractSigningType.OtpBased);
} }
var financialInstallmentItems = financialInvoice.Items var financialInstallmentItems = financialInvoice.Items
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment); .Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
@@ -174,7 +183,8 @@ public class GeneralController : GeneralBaseController
var institutionContractId = var institutionContractId =
await _institutionContractApplication.GetIdByInstallmentId( await _institutionContractApplication.GetIdByInstallmentId(
editFinancialInvoiceItem.EntityId); editFinancialInvoiceItem.EntityId);
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.OtpBased); await _institutionContractApplication.SetPendingWorkflow(institutionContractId,
InstitutionContractSigningType.OtpBased);
} }
} }

View File

@@ -289,6 +289,7 @@ builder.Services.AddCors(options =>
"http://localhost:3000", "http://localhost:3000",
"http://localhost:4000", "http://localhost:4000",
"http://localhost:4001", "http://localhost:4001",
"http://localhost:4002",
"http://localhost:3001", "http://localhost:3001",
"https://gozareshgir.ir", "https://gozareshgir.ir",
"https://dad-mehr.ir", "https://dad-mehr.ir",
@@ -414,7 +415,6 @@ if (app.Environment.IsDevelopment())
} }
#endregion #endregion
//Create Http Pipeline //Create Http Pipeline
#region Create Http Pipeline #region Create Http Pipeline