Compare commits
100 Commits
ServiceAmo
...
Feature/in
| Author | SHA1 | Date | |
|---|---|---|---|
| 147621de34 | |||
| d663857de1 | |||
| 9bbdff9bc6 | |||
| d11fdcf106 | |||
| 12318a6a51 | |||
| 836e721b6f | |||
| 8fca1f3a91 | |||
| 2feca1f7f8 | |||
| 4e9cecbb74 | |||
| adf297455f | |||
| 1d656a590f | |||
|
|
a33d7c019c | ||
|
|
d62b5ca155 | ||
|
|
18a4334d8a | ||
| 84416fe1f5 | |||
|
|
bd1c1fa814 | ||
|
|
8496b52013 | ||
|
|
5c1547dced | ||
|
|
c09321d89d | ||
| 219e64c0f7 | |||
| b42217ed94 | |||
| 8b6786c09a | |||
| 45c5d20323 | |||
| ad6f872145 | |||
| d22805892a | |||
| 4da496cab8 | |||
| aa0eae6c83 | |||
|
|
4b40580658 | ||
|
|
8bc9e044ae | ||
|
|
cddaf2f709 | ||
|
|
337cd40a4e | ||
|
|
a98300cacd | ||
|
|
daded35ab1 | ||
|
|
ba778bb519 | ||
|
|
27e8d302d9 | ||
|
|
54c67fe8f7 | ||
| 92e1d6de5c | |||
| c488f61a09 | |||
|
|
dc703fad3c | ||
| 54e5904951 | |||
|
|
a638913172 | ||
| a986212834 | |||
| 649242fc76 | |||
|
|
d254da1393 | ||
| ad4b0be033 | |||
| 733f39db9f | |||
| 94237434c5 | |||
| 2da8bc8a20 | |||
| 8b217f6cd0 | |||
|
|
74bd802a3d | ||
| b58481a36f | |||
|
|
3fd17299f9 | ||
|
|
fc315cc908 | ||
|
|
abe07e1c4b | ||
|
|
6046f55ece | ||
| d80a36ec35 | |||
|
|
7b648b135e | ||
|
|
5998bd212f | ||
|
|
d77bffabdd | ||
| 4f0e5a34a4 | |||
| 5faa2062b9 | |||
|
|
69476f3f2d | ||
|
|
4bc65e500d | ||
| 07587d162f | |||
| 30b4f52896 | |||
| 134466547e | |||
| a191968c15 | |||
|
|
59bbb7aae6 | ||
| d740c36dc6 | |||
|
|
89de3162de | ||
|
|
132c8ac5a4 | ||
|
|
f00fde4084 | ||
|
|
e8b3700cdf | ||
| 0ca35e3295 | |||
| 1a91743916 | |||
|
|
dd68473150 | ||
|
|
72e3859d2c | ||
| 46d193b45e | |||
| 1bfe41418b | |||
| 6a446d5972 | |||
|
|
acec101c4c | ||
|
|
7d92321d1c | ||
|
|
19f78a230c | ||
| 0e91e6f287 | |||
| 9df56ee19b | |||
| 8750604d96 | |||
| f27ce460fd | |||
|
|
934019c6c6 | ||
| 8e5d4c312e | |||
| 4b39994de6 | |||
| 0dd2dc7c43 | |||
| 20c00893b6 | |||
| b0d174a575 | |||
| 293ea0f6f4 | |||
| 3ce4cf3966 | |||
| 0fbd5c9d3e | |||
| 8436f70aa0 | |||
| 9cf8447a83 | |||
| e124a4d5d9 | |||
| 7b9e7881c6 |
9
.github/workflows/dotnet-developPublish.yml
vendored
9
.github/workflows/dotnet-developPublish.yml
vendored
@@ -5,8 +5,6 @@ on:
|
||||
branches:
|
||||
- Main
|
||||
|
||||
env:
|
||||
DOTNET_ENVIRONMENT: Development
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
@@ -37,12 +35,11 @@ jobs:
|
||||
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
|
||||
-verb:sync `
|
||||
-source:contentPath="$publishFolder" `
|
||||
-dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R2rNpdnetP3j>q5b18",authType="Basic" `
|
||||
-dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" `
|
||||
-allowUntrusted `
|
||||
-enableRule:AppOffline
|
||||
|
||||
|
||||
|
||||
env:
|
||||
SERVER_HOST: your-server-ip-or-domain
|
||||
SERVER_HOST: 171.22.24.15
|
||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
|
||||
|
||||
@@ -39,4 +39,15 @@ public static class StaticWorkshopAccounts
|
||||
/// که کاربر همچنان به کارگاه دسترسی دارد
|
||||
/// </summary>
|
||||
public static DateTime ContinuesWorkingDate = new DateTime(2150, 1, 1);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// لیستی آی دی نقش هایی که مسئول بیمه کارگاه هستند
|
||||
/// 7 : بیمه ارشد
|
||||
/// 8 : بیمه ساده
|
||||
/// </summary>
|
||||
public static List<long> InsuranceAccountsRoleIds = [7, 8];
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -24,9 +24,13 @@ public class CustomExceptionHandler : IExceptionHandler
|
||||
|
||||
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken)
|
||||
{
|
||||
_logger.LogError(
|
||||
"Error Message: {exceptionMessage}, Time of occurrence {time}",
|
||||
exception.Message, DateTime.UtcNow);
|
||||
_logger.LogError(exception,
|
||||
"Error Message: {exceptionMessage}, Type: {exceptionType}, Time: {time}, Path: {path}, TraceId: {traceId}",
|
||||
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
|
||||
{
|
||||
|
||||
@@ -34,7 +34,7 @@ public interface IAccountApplication
|
||||
OperationResult DeActive(long id);
|
||||
OperationResult DirectLogin(long id);
|
||||
|
||||
AccountLeftWorkViewModel WorkshopList(long accountId);
|
||||
// AccountLeftWorkViewModel WorkshopList(long accountId);
|
||||
OperationResult SaveWorkshopAccount(
|
||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||
string startDate,
|
||||
|
||||
@@ -745,25 +745,25 @@ public class AccountApplication : IAccountApplication
|
||||
}
|
||||
|
||||
|
||||
public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
{
|
||||
string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||
List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
||||
List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
||||
List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
||||
List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
||||
(string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
||||
return new AccountLeftWorkViewModel()
|
||||
{
|
||||
AccountId = accountId,
|
||||
AccountFullName = fullname,
|
||||
StartDateFa = byAccountId.StartWorkFa,
|
||||
LeftDateFa = byAccountId.LeftWorkFa,
|
||||
WorkshopAccountlist = source,
|
||||
WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
||||
AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
||||
};
|
||||
}
|
||||
// public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
// {
|
||||
// string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||
// List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
||||
// List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
||||
// List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
||||
// List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
||||
// (string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
||||
// return new AccountLeftWorkViewModel()
|
||||
// {
|
||||
// AccountId = accountId,
|
||||
// AccountFullName = fullname,
|
||||
// StartDateFa = byAccountId.StartWorkFa,
|
||||
// LeftDateFa = byAccountId.LeftWorkFa,
|
||||
// WorkshopAccountlist = source,
|
||||
// WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
||||
// AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
||||
// };
|
||||
// }
|
||||
|
||||
public OperationResult SaveWorkshopAccount(
|
||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||
|
||||
@@ -10,7 +10,7 @@ public interface IAccountLeftworkRepository : IRepository<long, AccountLeftWork>
|
||||
{
|
||||
(string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId);
|
||||
List<WorkshopAccountlistViewModel> WorkshopList(long accountId);
|
||||
List<WorkshopSelectList> GetAllWorkshops();
|
||||
// List<WorkshopSelectList> GetAllWorkshops();
|
||||
|
||||
OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId);
|
||||
|
||||
|
||||
@@ -18,14 +18,13 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
||||
{
|
||||
private readonly AccountContext _accountContext;
|
||||
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;
|
||||
_workshopAccountRepository = workshopAccountRepository;
|
||||
_workshopApplication = workshopApplication;
|
||||
}
|
||||
}
|
||||
|
||||
public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId)
|
||||
{
|
||||
@@ -58,14 +57,14 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
public List<WorkshopSelectList> GetAllWorkshops()
|
||||
{
|
||||
return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
||||
{
|
||||
Id = x.Id,
|
||||
WorkshopFullName = x.WorkshopFullName
|
||||
}).ToList();
|
||||
}
|
||||
// public List<WorkshopSelectList> GetAllWorkshops()
|
||||
// {
|
||||
// return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
||||
// {
|
||||
// Id = x.Id,
|
||||
// WorkshopFullName = x.WorkshopFullName
|
||||
// }).ToList();
|
||||
// }
|
||||
|
||||
public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId)
|
||||
{
|
||||
|
||||
@@ -17,4 +17,9 @@
|
||||
<ProjectReference Include="..\..\WorkFlow\Infrastructure\WorkFlow.Infrastructure.Config\WorkFlow.Infrastructure.Config.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
|
||||
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -15,19 +15,21 @@ public class JobSchedulerRegistrator
|
||||
private static DateTime? _lastRunCreateTransaction;
|
||||
private static DateTime? _lastRunSendMonthlySms;
|
||||
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;
|
||||
_backgroundJobClient = backgroundJobClient;
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_smsService = smsService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public void Register()
|
||||
{
|
||||
|
||||
_logger.LogInformation("hangfire Started");
|
||||
RecurringJob.AddOrUpdate(
|
||||
"InstitutionContract.CreateFinancialTransaction",
|
||||
() => CreateFinancialTransaction(),
|
||||
@@ -68,7 +70,7 @@ public class JobSchedulerRegistrator
|
||||
var now =DateTime.Now;
|
||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||
|
||||
_logger.LogInformation("CreateFinancialTransaction job run");
|
||||
if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
|
||||
now.Date != _lastRunCreateTransaction?.Date)
|
||||
{
|
||||
@@ -113,7 +115,7 @@ public class JobSchedulerRegistrator
|
||||
var now = DateTime.Now;
|
||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||
|
||||
_logger.LogInformation("SendFirstDayOfMonthSms job run");
|
||||
if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 &&
|
||||
now.Date != _lastRunSendMonthlySms?.Date)
|
||||
{
|
||||
@@ -141,6 +143,7 @@ public class JobSchedulerRegistrator
|
||||
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
||||
public async System.Threading.Tasks.Task SendReminderSms()
|
||||
{
|
||||
_logger.LogInformation("SendReminderSms job run");
|
||||
await _institutionContractRepository.SendReminderSmsForBackgroundTask();
|
||||
}
|
||||
|
||||
@@ -151,6 +154,7 @@ public class JobSchedulerRegistrator
|
||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||
public async System.Threading.Tasks.Task SendBlockSms()
|
||||
{
|
||||
_logger.LogInformation("SendBlockSms job run");
|
||||
await _institutionContractRepository.SendBlockSmsForBackgroundTask();
|
||||
}
|
||||
|
||||
@@ -162,6 +166,7 @@ public class JobSchedulerRegistrator
|
||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
||||
{
|
||||
_logger.LogInformation("SendInstitutionContractConfirmSms job run");
|
||||
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
|
||||
}
|
||||
|
||||
|
||||
@@ -17,9 +17,37 @@ using Microsoft.AspNetCore.Identity;
|
||||
using MongoDB.Driver;
|
||||
using PersonalContractingParty.Config;
|
||||
using Query.Bootstrapper;
|
||||
using Serilog;
|
||||
using Serilog.Events;
|
||||
using Shared.Contracts.PmUser.Queries;
|
||||
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 hangfireConnectionString = builder.Configuration.GetConnectionString("HangfireDb");
|
||||
builder.Services.AddHangfire(x => x.UseSqlServerStorage(hangfireConnectionString));
|
||||
@@ -59,7 +87,13 @@ builder.Services.AddHttpClient();
|
||||
builder.Services.AddHttpContextAccessor();
|
||||
builder.Services.AddSignalR();
|
||||
|
||||
|
||||
builder.Host.UseSerilog();
|
||||
Log.Information("SERILOG STARTED SUCCESSFULLY");
|
||||
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
app.MapHub<SendSmsHub>("/sendSmsHub");
|
||||
|
||||
app.MapHangfireDashboard();
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
|
||||
//mahan Docker
|
||||
//"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=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=.;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;"
|
||||
},
|
||||
|
||||
"GoogleRecaptchaV3": {
|
||||
|
||||
@@ -48,6 +48,10 @@ public interface IContractRepository : IRepository<long, Contract>
|
||||
bool Remove(long id);
|
||||
|
||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||
|
||||
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||
|
||||
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||
#endregion
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -63,4 +67,8 @@ public interface IContractRepository : IRepository<long, Contract>
|
||||
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
||||
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
||||
#region Api
|
||||
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
|
||||
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
||||
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
@@ -56,9 +56,13 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
void UpdateStatusIfNeeded(long institutionContractId);
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request,string contractStart = null);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
#region Creation
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Extension
|
||||
|
||||
@@ -159,4 +163,12 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
#endregion
|
||||
|
||||
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);
|
||||
}
|
||||
@@ -23,6 +23,8 @@ public class InstitutionContractWorkshopGroup : EntityBase
|
||||
!InitialWorkshops.Cast<InstitutionContractWorkshopBase>()
|
||||
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
|
||||
|
||||
public bool IsInPersonContract => InitialWorkshops.Any(x => x.Services.ContractInPerson);
|
||||
|
||||
public InstitutionContractWorkshopGroup(long institutionContractId,
|
||||
List<InstitutionContractWorkshopInitial> initialDetails)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,7 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
|
||||
#endregion
|
||||
|
||||
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
||||
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.LeaveAgg;
|
||||
|
||||
@@ -10,7 +12,7 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
||||
{
|
||||
EditLeave GetDetails(long id);
|
||||
List<LeaveViewModel> search(LeaveSearchModel searchModel);
|
||||
OperationResult RemoveLeave(long id);
|
||||
Task<OperationResult> RemoveLeave(long id);
|
||||
|
||||
#region Pooya
|
||||
List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
|
||||
@@ -27,6 +29,8 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
||||
List<LeaveMainViewModel> searchClient(LeaveSearchModel searchModel);
|
||||
LeavePrintViewModel PrintOne(long id);
|
||||
List<LeavePrintViewModel> PrintAll(List<long> id);
|
||||
|
||||
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||
|
||||
#region Vafa
|
||||
|
||||
@@ -34,4 +38,27 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
||||
|
||||
#endregion
|
||||
bool CheckIfValidToEdit(long id);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها در کلاینت
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<leaveListDto>> GetList(
|
||||
LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست گروه بندی شده
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// پرینت لیستی
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
Task<LeaveListPrintDto> ListPrint(List<long> ids);
|
||||
}
|
||||
@@ -8,86 +8,129 @@ using System.Text.RegularExpressions;
|
||||
|
||||
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
|
||||
{
|
||||
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");
|
||||
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);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList();
|
||||
|
||||
var yellowContracts = institutionContractViewModels
|
||||
.Where(x => string.IsNullOrWhiteSpace(x.ExpireColor) && x.WorkshopCount == "0").ToList();
|
||||
CreateExcelSheet(yellowContracts, yellowWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(yellowContracts).ToList();
|
||||
|
||||
var otherContracts = institutionContractViewModels;
|
||||
CreateExcelSheet(otherContracts, whiteWorksheet);
|
||||
// ایجاد شیت برای هر تب با دادههای مربوطه
|
||||
foreach (var viewModel in contractViewModels)
|
||||
{
|
||||
var worksheet = CreateWorksheet(package, viewModel.Tab);
|
||||
CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet);
|
||||
}
|
||||
|
||||
return package.GetAsByteArray();
|
||||
}
|
||||
|
||||
private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet)
|
||||
/// <summary>
|
||||
/// ایجاد شیت بر اساس نوع تب
|
||||
/// </summary>
|
||||
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
|
||||
{
|
||||
// Headers
|
||||
worksheet.Cells[1, 1].Value = "شماره قرارداد";
|
||||
worksheet.Cells[1, 2].Value = "طرف حساب";
|
||||
worksheet.Cells[1, 3].Value = "شماره کارفرما";
|
||||
worksheet.Cells[1, 4].Value = "کارفرما ها";
|
||||
worksheet.Cells[1, 5].Value = "کارگاه ها";
|
||||
worksheet.Cells[1, 6].Value = "مجبوع پرسنل";
|
||||
worksheet.Cells[1, 7].Value = "شروع قرارداد";
|
||||
worksheet.Cells[1, 8].Value = "پایان قرارداد";
|
||||
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)";
|
||||
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
|
||||
worksheet.Cells[1, 11].Value = "وضعیت مالی";
|
||||
return status switch
|
||||
{
|
||||
InstitutionContractListStatus.DeactiveWithDebt =>
|
||||
CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue),
|
||||
|
||||
InstitutionContractListStatus.Deactive =>
|
||||
CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
|
||||
|
||||
InstitutionContractListStatus.PendingForRenewal =>
|
||||
CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
|
||||
|
||||
InstitutionContractListStatus.Free =>
|
||||
CreateColoredWorksheet(package, "بنفش", Color.MediumPurple),
|
||||
|
||||
InstitutionContractListStatus.Block =>
|
||||
CreateColoredWorksheet(package, "بلاک", Color.DimGray),
|
||||
|
||||
InstitutionContractListStatus.WithoutWorkshop =>
|
||||
CreateColoredWorksheet(package, "بدون کارگاه", Color.Yellow),
|
||||
|
||||
InstitutionContractListStatus.Active =>
|
||||
CreateColoredWorksheet(package, "فعال", Color.White),
|
||||
|
||||
InstitutionContractListStatus.PendingForVerify =>
|
||||
CreateColoredWorksheet(package, "در انتظار تایید", Color.OrangeRed),
|
||||
|
||||
null => CreateColoredWorksheet(package, "کل قرارداد ها", Color.White),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
|
||||
};
|
||||
}
|
||||
|
||||
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.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||
@@ -110,30 +153,35 @@ public class InstitutionContractExcelGenerator
|
||||
|
||||
int row = 2;
|
||||
|
||||
for (int i = 0; i < institutionContractViewModels.Count; i++)
|
||||
for (int i = 0; i < contractItems.Count; i++)
|
||||
{
|
||||
var contract = institutionContractViewModels[i];
|
||||
var employers = contract.EmployerViewModels?.ToList() ?? new();
|
||||
var workshops = contract.WorkshopViewModels?.ToList() ?? new();
|
||||
var contract = contractItems[i];
|
||||
var employers = contract.EmployerNames?.ToList() ?? new();
|
||||
var workshops = contract.WorkshopNames?.ToList() ?? new();
|
||||
|
||||
int maxRows = Math.Max(employers.Count, workshops.Count);
|
||||
maxRows = Math.Max(1, maxRows);
|
||||
int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست
|
||||
|
||||
int startRow = row;
|
||||
int endRow = row + maxRows - 1;
|
||||
|
||||
// 🎨 دریافت رنگ پسزمینه از مقدار رنگ موجود در داده
|
||||
string colorName = contract.ExpireColor.ToLower();
|
||||
var fillColor = GetColorByName(colorName, contract.WorkshopCount, contract.IsContractingPartyBlock);
|
||||
// 🎨 دریافت رنگ پسزمینه بر اساس وضعیت قرارداد
|
||||
var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount);
|
||||
|
||||
for (int j = 0; j < maxRows; j++)
|
||||
{
|
||||
int currentRow = row + j;
|
||||
|
||||
worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null;
|
||||
worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null;
|
||||
// پر کردن ستونهای employer و workshop
|
||||
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];
|
||||
|
||||
@@ -154,109 +202,235 @@ public class InstitutionContractExcelGenerator
|
||||
}
|
||||
|
||||
// 🧱 مرج و مقداردهی ستونهای اصلی
|
||||
worksheet.Cells[startRow, 1, endRow, 1].Merge = true;
|
||||
worksheet.Cells[startRow, 1].Value = contract.ContractNo;
|
||||
|
||||
worksheet.Cells[startRow, 2, endRow, 2].Merge = true;
|
||||
worksheet.Cells[startRow, 2].Value = contract.ContractingPartyName;
|
||||
|
||||
worksheet.Cells[startRow, 3, endRow, 3].Merge = true;
|
||||
worksheet.Cells[startRow, 3].Value = contract.ArchiveCode;
|
||||
|
||||
worksheet.Cells[startRow, 6, endRow, 6].Merge = true;
|
||||
worksheet.Cells[startRow, 6].Value = contract.EmployeeCount;
|
||||
|
||||
worksheet.Cells[startRow, 7, endRow, 7].Merge = true;
|
||||
worksheet.Cells[startRow, 7].Value = contract.ContractStartFa;
|
||||
|
||||
worksheet.Cells[startRow, 8, endRow, 8].Merge = true;
|
||||
worksheet.Cells[startRow, 8].Value = contract.ContractEndFa;
|
||||
|
||||
worksheet.Cells[startRow, 9, endRow, 9].Merge = true;
|
||||
var contractWithoutWorkshopAmountCell = worksheet.Cells[startRow, 9];
|
||||
contractWithoutWorkshopAmountCell.Value = contract.WorkshopCount == "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
||||
contractWithoutWorkshopAmountCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
|
||||
worksheet.Cells[startRow, 10, endRow, 10].Merge = true;
|
||||
var contractAmountCell = worksheet.Cells[startRow, 10];
|
||||
contractAmountCell.Value = contract.WorkshopCount != "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
||||
contractAmountCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
|
||||
worksheet.Cells[startRow, 11, endRow, 11].Merge = true;
|
||||
var balance = MoneyToDouble(contract.BalanceStr);
|
||||
var balanceCell = worksheet.Cells[startRow, 11];
|
||||
balanceCell.Value = balance;
|
||||
balanceCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
if (balance > 0)
|
||||
balanceCell.Style.Font.Color.SetColor(Color.Red);
|
||||
else if (balance < 0)
|
||||
balanceCell.Style.Font.Color.SetColor(Color.Green);
|
||||
FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices);
|
||||
|
||||
// 📦 بوردر ضخیم خارجی برای هر سطر
|
||||
var boldRange = worksheet.Cells[startRow, 1, endRow, 11];
|
||||
var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount];
|
||||
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
|
||||
|
||||
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.Orientation = eOrientation.Landscape;
|
||||
worksheet.PrinterSettings.FitToPage = true;
|
||||
worksheet.PrinterSettings.FitToWidth = 1;
|
||||
worksheet.PrinterSettings.FitToHeight = 0;
|
||||
worksheet.PrinterSettings.Scale = 85;
|
||||
int contractNoCol = 1;
|
||||
int contractingPartyNameCol = 2;
|
||||
int archiveNoCol = 3;
|
||||
int employersCol = 4;
|
||||
int workshopsCol = 5;
|
||||
int employeeCountCol = 6;
|
||||
int startContractCol = 7;
|
||||
int endContractCol = 8;
|
||||
int contractWithoutWorkshopAmountCol = 9;
|
||||
int contractAmountCol = 10;
|
||||
int balanceCol = 11;
|
||||
worksheet.Columns[contractNoCol].Width = 17;
|
||||
worksheet.Columns[contractingPartyNameCol].Width = 40;
|
||||
worksheet.Columns[archiveNoCol].Width = 10;
|
||||
worksheet.Columns[employersCol].Width = 40;
|
||||
worksheet.Columns[workshopsCol].Width = 45;
|
||||
worksheet.Columns[employeeCountCol].Width = 12;
|
||||
worksheet.Columns[startContractCol].Width = 12;
|
||||
worksheet.Columns[endContractCol].Width = 12;
|
||||
worksheet.Columns[contractWithoutWorkshopAmountCol].Width = 18;
|
||||
worksheet.Columns[contractAmountCol].Width = 12;
|
||||
worksheet.Columns[balanceCol].Width = 12;
|
||||
|
||||
// تنظیم عرض ستونها بر اساس نوع ستون
|
||||
for (int i = 0; i < visibleColumns.Count; i++)
|
||||
{
|
||||
int columnIndex = i + 1;
|
||||
worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
Console.WriteLine(value);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return 0;
|
||||
|
||||
var min = value.Length > 1 ? value.Substring(0, 2) : "";
|
||||
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
|
||||
|
||||
Console.WriteLine(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,
|
||||
_ when IsContractingPartyBlock == "true" => Color.LightGray,
|
||||
"red" => Color.LightCoral,
|
||||
"purple" => Color.MediumPurple,
|
||||
"black" => Color.DimGray,
|
||||
var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow,
|
||||
InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue,
|
||||
InstitutionContractListStatus.Deactive => Color.LightGray,
|
||||
InstitutionContractListStatus.PendingForRenewal => Color.LightCoral,
|
||||
InstitutionContractListStatus.Free => Color.MediumPurple,
|
||||
InstitutionContractListStatus.Block => Color.DimGray,
|
||||
InstitutionContractListStatus.WithoutWorkshop => Color.Yellow,
|
||||
InstitutionContractListStatus.Active => Color.White,
|
||||
_ => Color.White
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class InstitutionContractExcelViewModel
|
||||
{
|
||||
public InstitutionContractListStatus? Tab { get; set; }
|
||||
public List<GetInstitutionContractListItemsViewModel> GetInstitutionContractListItemsViewModels { get; set; }
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<NoWarn>$(NoWarn);1591</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public enum ContractListOrderType
|
||||
{
|
||||
ByContractCreationDate,
|
||||
BySignedContract,
|
||||
ByUnSignedContract,
|
||||
ByPersonnelCode,
|
||||
ByPersonnelCodeDescending,
|
||||
ByContractStartDate,
|
||||
ByContractStartDateDescending
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application.Enums;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public interface IContractApplication
|
||||
@@ -45,16 +47,101 @@ public interface IContractApplication
|
||||
#region Client
|
||||
|
||||
OperationResult Remove(long id);
|
||||
|
||||
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
|
||||
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);
|
||||
List<long> CheckHasCheckout(List<long> ids);
|
||||
List<long> CheckHasSignature(List<long> ids);
|
||||
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
|
||||
|
||||
#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; }
|
||||
}
|
||||
@@ -94,7 +94,42 @@ public interface IEmployeeApplication
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
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
|
||||
|
||||
}
|
||||
|
||||
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; }
|
||||
}
|
||||
@@ -91,6 +91,11 @@ public class GetInstitutionContractListItemsViewModel
|
||||
public bool IsInPersonContract { get; set; }
|
||||
|
||||
public bool IsOldContract { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مبلغ قسط
|
||||
/// </summary>
|
||||
public double InstallmentAmount { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractListWorkshop
|
||||
|
||||
@@ -5,8 +5,10 @@ using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.Sms;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||
@@ -26,21 +28,21 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="command">اطلاعات قرارداد جدید</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Create(CreateInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تمدید قرارداد موجود
|
||||
/// </summary>
|
||||
/// <param name="command">اطلاعات قرارداد برای تمدید</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Extension(CreateInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ویرایش قرارداد موجود
|
||||
/// </summary>
|
||||
/// <param name="command">اطلاعات جدید قرارداد</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Edit(EditInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت جزئیات قرارداد برای ویرایش
|
||||
/// </summary>
|
||||
@@ -54,7 +56,7 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="searchModel">مدل جستجو</param>
|
||||
/// <returns>لیست قراردادها</returns>
|
||||
List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// جستجوی جدید در قراردادها
|
||||
/// </summary>
|
||||
@@ -76,7 +78,7 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="id">لیست شناسه قراردادها</param>
|
||||
/// <returns>لیست قراردادها برای چاپ</returns>
|
||||
List<InstitutionContractViewModel> PrintAll(List<long> id);
|
||||
|
||||
|
||||
|
||||
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
|
||||
/// <summary>
|
||||
@@ -146,7 +148,7 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="id">شناسه قرارداد</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult UnSign(long id);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ایجاد حساب کاربری برای طرف قرارداد
|
||||
/// </summary>
|
||||
@@ -191,32 +193,56 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
|
||||
/// جهت نمایش در کارپوشه
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
|
||||
|
||||
/// <summary>
|
||||
/// دریافت آیتم های کارپوشه ثبت نام
|
||||
/// </summary>
|
||||
/// <param name="institutionContractId"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
||||
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
||||
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest 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
|
||||
|
||||
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
|
||||
@@ -229,25 +255,31 @@ public interface IInstitutionContractApplication
|
||||
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
||||
InstitutionContractExtensionPaymentRequest request);
|
||||
|
||||
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Upgrade (Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
|
||||
InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
|
||||
InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
#endregion
|
||||
|
||||
Task<OperationResult> ResendVerifyLink(long institutionContractId);
|
||||
@@ -259,8 +291,9 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
||||
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId,InstitutionContractSigningType signingType);
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId, InstitutionContractSigningType signingType);
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
|
||||
/// <summary>
|
||||
/// تایید قرارداد مالی به صورت دستی
|
||||
/// </summary>
|
||||
@@ -268,4 +301,42 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -3,6 +3,13 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
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 bool IsInstallment { get; set; }
|
||||
|
||||
@@ -24,4 +24,21 @@ public class InstitutionContractExtensionInquiryResult
|
||||
public string Province { get; set; }
|
||||
public List<EditContactInfo> ContactInfoViewModels { 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; }
|
||||
}
|
||||
@@ -3,6 +3,11 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractExtensionPaymentRequest
|
||||
{
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
public class InstitutionContractCreationPaymentRequest
|
||||
{
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
|
||||
@@ -5,4 +5,11 @@ public class InstitutionContractExtensionPaymentResponse
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPaymentResponse
|
||||
{
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
@@ -5,6 +5,13 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
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 string TotalAmount { get; set; }
|
||||
|
||||
@@ -7,7 +7,18 @@ public class InstitutionContractExtensionPlanResponse
|
||||
public InstitutionContractExtensionPlanDetail SixMonths { 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 ContractEnd { get; set; }
|
||||
|
||||
@@ -18,10 +18,20 @@ public class InstitutionContractPaymentOneTimeViewModel
|
||||
/// </summary>
|
||||
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 int DiscountPercetage { get; set; }
|
||||
}
|
||||
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
|
||||
{
|
||||
public List<MonthlyInstallment> Installments { get; set; }
|
||||
public List<MonthlyInstallment> Installments { get; set; } = [];
|
||||
}
|
||||
@@ -3,6 +3,11 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractResetDiscountForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractResetCreationForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
|
||||
@@ -3,6 +3,13 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
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 int DiscountPercentage { get; set; }
|
||||
|
||||
@@ -5,7 +5,7 @@ namespace CompanyManagment.App.Contracts.InstitutionPlan;
|
||||
public class InstitutionPlanSearchModel : PaginationRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// تعدلد پرسنل برای جستجو
|
||||
/// تعداد پرسنل برای جستجو
|
||||
/// </summary>
|
||||
public int CountPeron { get; set; }
|
||||
public int CountPerson { get; set; }
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.InsuranceList;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
@@ -96,6 +97,94 @@ public interface IInsuranceListApplication
|
||||
#endregion
|
||||
|
||||
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
|
||||
@@ -113,4 +202,11 @@ public class InsuranceClientListViewModel
|
||||
public int YearInt { get; set; }
|
||||
public string MonthName { 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; }
|
||||
|
||||
}
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
78
CompanyManagment.App.Contracts/Leave/CreateLeaveDto.cs
Normal file
78
CompanyManagment.App.Contracts/Leave/CreateLeaveDto.cs
Normal 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; }
|
||||
|
||||
}
|
||||
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
@@ -0,0 +1,88 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class GroupLeaveListDto
|
||||
{
|
||||
/// <summary>
|
||||
/// سال مرخصی
|
||||
/// </summary>
|
||||
public string YearStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ماه مرخصی
|
||||
/// </summary>
|
||||
public string MonthStr { get; set; }
|
||||
/// <summary>
|
||||
/// آیتم های هر گروه
|
||||
/// </summary>
|
||||
public List<LeaveListItemsDto> LeaveListItemsDto { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// آیتم های هر گروه
|
||||
/// </summary>
|
||||
public class LeaveListItemsDto
|
||||
{
|
||||
/// <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; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی گارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; set; }
|
||||
}
|
||||
@@ -19,6 +19,7 @@ public interface ILeaveApplication
|
||||
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
|
||||
|
||||
OperationResult RemoveLeave(long id);
|
||||
Task<OperationResult> RemoveLeaveAsync(long id);
|
||||
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
|
||||
List<LeaveMainViewModel> searchClient(LeaveSearchModel search);
|
||||
|
||||
@@ -36,5 +37,117 @@ public interface ILeaveApplication
|
||||
TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,
|
||||
string type);
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها در کلاینت
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<leaveListDto>> GetList(
|
||||
LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست گروه بندی شده
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت مجکوع مرخصی پرسنل
|
||||
/// اگر آی دی پرسنل، سال و ماه خالی نباشد
|
||||
/// </summary>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="yearStr"></param>
|
||||
/// <param name="monthStr"></param>
|
||||
/// <param name="leaveType"></param>
|
||||
/// <returns></returns>
|
||||
TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr,
|
||||
LeaveType leaveType);
|
||||
|
||||
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, 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 string FullName { get; set; }
|
||||
public string NationalCode { get; set; }
|
||||
public string WorkshopName { get; set; }
|
||||
public List<string> EmployerNames { get; set; }
|
||||
public string PaidLeaveType { get; set; }
|
||||
public string ContractNo { get; set; }
|
||||
public LeavePrintHourlyResponseViewModel HourlyLeave { get; set; }
|
||||
public LeavePrintDailyResponseViewModel DailyLeave { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class LeavePrintDailyResponseViewModel
|
||||
{
|
||||
public string StartLeave { get; set; }
|
||||
public string EndLeave { get; set; }
|
||||
public string TotalDay { get; set; }
|
||||
}
|
||||
|
||||
public class LeavePrintHourlyResponseViewModel
|
||||
{
|
||||
public string LeaveDate { get; set; }
|
||||
public string StartHour { get; set; }
|
||||
public string EndHour { get; set; }
|
||||
public string TotalHour { get; set; }
|
||||
}
|
||||
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
using _0_Framework.Application;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class LeaveListMultipleDto
|
||||
{
|
||||
/// <summary>
|
||||
/// لیست گروهبندی شده بر اساس سال و ماه
|
||||
/// اگر در جستجو پرسنل انتخاب شود
|
||||
/// </summary>
|
||||
public List<GroupLeaveListDto>? GroupLeaveListDto { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// لیست نرمال PageResult
|
||||
/// </summary>
|
||||
public PagedResult<leaveListDto>? leaveListDto { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مجموع مرخصی پرسنل
|
||||
/// اگر پرسنل انتخاب شده باشد
|
||||
/// </summary>
|
||||
public string? SumOfEmployeeleaves { get; set; }
|
||||
}
|
||||
77
CompanyManagment.App.Contracts/Leave/LeaveListPrintDto.cs
Normal file
77
CompanyManagment.App.Contracts/Leave/LeaveListPrintDto.cs
Normal 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; }
|
||||
|
||||
}
|
||||
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
@@ -0,0 +1,45 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class LeaveListSearchModel : PaginationRequest
|
||||
{
|
||||
/// <summary>
|
||||
/// آی دی کارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
/// <summary>
|
||||
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||
/// </summary>
|
||||
public LeaveType LeaveType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// سال مرخصی
|
||||
/// </summary>
|
||||
public string YearStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// ماه مرخصی
|
||||
/// </summary>
|
||||
public string MonthStr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ شروع مرخصی
|
||||
/// </summary>
|
||||
public string StartLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ پایان مرخصی
|
||||
/// </summary>
|
||||
public string EndLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
}
|
||||
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public enum LeaveType
|
||||
{
|
||||
/// <summary>
|
||||
/// هر دو
|
||||
/// </summary>
|
||||
Both,
|
||||
/// <summary>
|
||||
/// مرخصی استعلاجی
|
||||
/// </summary>
|
||||
SickLeave,
|
||||
|
||||
/// <summary>
|
||||
/// مرخصی استحقاقی
|
||||
/// </summary>
|
||||
PaidLeave
|
||||
}
|
||||
17
CompanyManagment.App.Contracts/Leave/PaidLeaveType.cs
Normal file
17
CompanyManagment.App.Contracts/Leave/PaidLeaveType.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
/// <summary>
|
||||
/// نوع مدت مرخصی
|
||||
/// </summary>
|
||||
public enum PaidLeaveType
|
||||
{
|
||||
/// <summary>
|
||||
/// روزانه
|
||||
/// </summary>
|
||||
Daily,
|
||||
|
||||
/// <summary>
|
||||
/// ساعتی
|
||||
/// </summary>
|
||||
Hourly,
|
||||
}
|
||||
17
CompanyManagment.App.Contracts/Leave/RotatingShiftDto.cs
Normal file
17
CompanyManagment.App.Contracts/Leave/RotatingShiftDto.cs
Normal 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; }
|
||||
}
|
||||
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
@@ -0,0 +1,84 @@
|
||||
namespace CompanyManagment.App.Contracts.Leave;
|
||||
|
||||
public class leaveListDto
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// نام کامل پرسنل
|
||||
/// </summary>
|
||||
public string EmployeeFullName { get; set; }
|
||||
|
||||
|
||||
/// <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; }
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی گارگاه
|
||||
/// </summary>
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پرسنل
|
||||
/// </summary>
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||
/// </summary>
|
||||
public bool IsInvalid { get; set; }
|
||||
}
|
||||
@@ -132,4 +132,5 @@ public interface IPersonalContractingPartyApp
|
||||
|
||||
#endregion
|
||||
|
||||
Task<long> GetRepresentativeIdByNationalCode(string nationalCode);
|
||||
}
|
||||
@@ -124,7 +124,7 @@ namespace CompanyManagment.App.Contracts.RollCall
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||
Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||
}
|
||||
public class ReCalculateRollCallValues
|
||||
{
|
||||
|
||||
@@ -2712,7 +2712,9 @@ public class ContractApplication : IContractApplication
|
||||
|
||||
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
|
||||
.Select(x => x.EmployerId).ToList();
|
||||
|
||||
res.Employers = _employerRepository.GetEmployers(emp);
|
||||
|
||||
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
|
||||
var workshop = new WorkshopViewModel()
|
||||
{
|
||||
@@ -3107,6 +3109,21 @@ public class ContractApplication : IContractApplication
|
||||
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
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -25,6 +25,7 @@ using Microsoft.EntityFrameworkCore.Query;
|
||||
using Company.Domain.CheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutTempAgg;
|
||||
using Company.Domain.RollCallAgg;
|
||||
using CompanyManagment.EFCore.Repository;
|
||||
|
||||
|
||||
@@ -38,7 +39,8 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
IRollCallApplication rollCallAppllication,
|
||||
ICheckoutRepository checkoutRepository,
|
||||
ICustomizeCheckoutRepository customizeCheckoutRepository,
|
||||
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
|
||||
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository,
|
||||
IRollCallRepository rollCallRepository)
|
||||
: ICustomizeWorkshopSettingsApplication
|
||||
{
|
||||
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
|
||||
@@ -53,6 +55,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
private readonly ICheckoutRepository _checkoutRepository = checkoutRepository;
|
||||
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository;
|
||||
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository;
|
||||
private readonly IRollCallRepository _rollCallRepository = rollCallRepository;
|
||||
|
||||
#region RollCallShifts
|
||||
|
||||
@@ -822,14 +825,19 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
|
||||
var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId));
|
||||
|
||||
var weeklyOffDays = command.OffDayOfWeeks?.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
||||
using var transaction = new TransactionScope();
|
||||
var weeklyOffDays = command.OffDayOfWeeks?
|
||||
.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
||||
|
||||
using var rollCallTransaction = _rollCallRepository.BeginTransactionAsync()
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus,
|
||||
command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays);
|
||||
if (reCalculateCommand.Count > 0)
|
||||
{
|
||||
var result = _rollCallApplication.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand);
|
||||
var result = _rollCallApplication
|
||||
.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand)
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
if (result.IsSuccedded == false)
|
||||
{
|
||||
@@ -844,7 +852,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
|
||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||
|
||||
transaction.Complete();
|
||||
rollCallTransaction.Commit();
|
||||
return op.Succcedded();
|
||||
}
|
||||
public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
|
||||
@@ -1043,7 +1051,9 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||
if (reCalculateCommand.Count > 0)
|
||||
{
|
||||
var result = _rollCallApplication.RecalculateValues(command.WorkshopId, reCalculateCommand);
|
||||
var result = _rollCallApplication
|
||||
.RecalculateValues(command.WorkshopId, reCalculateCommand)
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
if (result.IsSuccedded == false)
|
||||
{
|
||||
|
||||
@@ -1729,5 +1729,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
||||
return await _EmployeeRepository.GetList(searchModel);
|
||||
}
|
||||
|
||||
public async Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
|
||||
{
|
||||
return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -22,6 +22,7 @@ using Company.Domain.InstitutionContractAgg;
|
||||
using Company.Domain.LeftWorkAgg;
|
||||
using Company.Domain.PaymentTransactionAgg;
|
||||
using Company.Domain.RepresentativeAgg;
|
||||
using Company.Domain.RollCallServiceAgg;
|
||||
using Company.Domain.TemporaryClientRegistrationAgg;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||
@@ -59,6 +60,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||
private readonly IPaymentGateway _paymentGateway;
|
||||
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
|
||||
private readonly IRollCallServiceRepository _rollCallServiceRepository;
|
||||
|
||||
|
||||
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
|
||||
@@ -70,7 +72,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
|
||||
IAccountApplication accountApplication, ISmsService smsService, IUidService uidService,
|
||||
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
|
||||
IPaymentTransactionRepository paymentTransactionRepository)
|
||||
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository)
|
||||
{
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_contractingPartyRepository = contractingPartyRepository;
|
||||
@@ -88,6 +90,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
_uidService = uidService;
|
||||
_financialInvoiceRepository = financialInvoiceRepository;
|
||||
_paymentTransactionRepository = paymentTransactionRepository;
|
||||
_rollCallServiceRepository = rollCallServiceRepository;
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
||||
}
|
||||
|
||||
@@ -1441,6 +1444,22 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
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)
|
||||
{
|
||||
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
|
||||
@@ -1555,28 +1574,48 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
.Where(x => x.WorkshopCreated && x.WorkshopId is > 0).ToList();
|
||||
|
||||
var currentWorkshops = institutionContract.WorkshopGroup.CurrentWorkshops.ToList();
|
||||
var accountId = _contractingPartyRepository
|
||||
.GetAccountByPersonalContractingParty(institutionContract.ContractingPartyId).Id;
|
||||
foreach (var createdWorkshop in initialCreatedWorkshops)
|
||||
{
|
||||
if (currentWorkshops.Any(x => x.WorkshopId == createdWorkshop.WorkshopId))
|
||||
{
|
||||
continue;
|
||||
//rollcall serviecs
|
||||
if (createdWorkshop.Services.RollCall)
|
||||
{
|
||||
var ActiveService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(createdWorkshop.WorkshopId!.Value);
|
||||
var startTime = institutionContract.ContractStartGr;
|
||||
var endTime = institutionContract.ContractEndGr;
|
||||
if (ActiveService != null)
|
||||
{
|
||||
if (ActiveService.EndService> startTime)
|
||||
{
|
||||
startTime = ActiveService.EndService;
|
||||
}
|
||||
|
||||
}
|
||||
var rollCallService = new RollCallService("BasedOnIC",
|
||||
startTime, endTime, createdWorkshop.WorkshopId.Value,accountId,createdWorkshop.PersonnelCount,
|
||||
0,"12");
|
||||
await _rollCallServiceRepository.CreateAsync(rollCallService);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var currentWorkshop = new InstitutionContractWorkshopCurrent(createdWorkshop.WorkshopName,
|
||||
createdWorkshop.Services.RollCall, createdWorkshop.Services.RollCallInPerson,
|
||||
createdWorkshop.Services.CustomizeCheckout, createdWorkshop.Services.Contract,
|
||||
createdWorkshop.Services.ContractInPerson, createdWorkshop.Services.Insurance,
|
||||
createdWorkshop.Services.InsuranceInPerson,createdWorkshop.PersonnelCount, createdWorkshop.Price,
|
||||
createdWorkshop.InstitutionContractWorkshopGroupId,createdWorkshop.WorkshopGroup,
|
||||
createdWorkshop.WorkshopId!.Value, createdWorkshop.id);
|
||||
institutionContract.WorkshopGroup.AddCurrentWorkshop(currentWorkshop);
|
||||
}
|
||||
|
||||
var currentWorkshop = new InstitutionContractWorkshopCurrent(createdWorkshop.WorkshopName,
|
||||
createdWorkshop.Services.RollCall, createdWorkshop.Services.RollCallInPerson,
|
||||
createdWorkshop.Services.CustomizeCheckout, createdWorkshop.Services.Contract,
|
||||
createdWorkshop.Services.ContractInPerson, createdWorkshop.Services.Insurance,
|
||||
createdWorkshop.Services.InsuranceInPerson,createdWorkshop.PersonnelCount, createdWorkshop.Price,
|
||||
createdWorkshop.InstitutionContractWorkshopGroupId,createdWorkshop.WorkshopGroup,
|
||||
createdWorkshop.WorkshopId!.Value, createdWorkshop.id);
|
||||
institutionContract.WorkshopGroup.AddCurrentWorkshop(currentWorkshop);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (institutionContract.WorkshopGroup.InitialWorkshops.All(x => x.WorkshopCreated && x.WorkshopId is > 0))
|
||||
{
|
||||
|
||||
institutionContract.Verified();
|
||||
}
|
||||
else
|
||||
@@ -1585,7 +1624,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
}
|
||||
|
||||
institutionContract.SetSigningType(signingType);
|
||||
|
||||
var previousInstitutionContract = await _institutionContractRepository
|
||||
.GetPreviousContract(institutionContract.id);
|
||||
previousInstitutionContract?.DeActive();
|
||||
ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
|
||||
await _institutionContractRepository.SaveChangesAsync();
|
||||
return op.Succcedded();
|
||||
}
|
||||
@@ -1608,15 +1650,56 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
|
||||
return op.Failed("قرارداد مالی قبلا تایید شده است");
|
||||
|
||||
if (!institutionContract.WorkshopGroup.IsInPersonContract)
|
||||
{
|
||||
return op.Failed("قرارداد مالی غیر حضوری نمی تواند به صورت دستی تایید شود");
|
||||
}
|
||||
|
||||
var transaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);
|
||||
|
||||
var financialStatement = await _financialStatmentRepository
|
||||
.GetByContractingPartyId(institutionContract.ContractingPartyId);
|
||||
|
||||
DateTime today = DateTime.Today;
|
||||
var description = institutionContract.IsInstallment
|
||||
? "قسط اول سرویس"
|
||||
: "پرداخت کل سرویس";
|
||||
var debtorAmount = institutionContract.IsInstallment
|
||||
? institutionContract.Installments.First().Amount
|
||||
: institutionContract.TotalAmount;
|
||||
|
||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
||||
description, "debt", "بابت خدمات", debtorAmount, 0, 0);
|
||||
financialStatement.AddFinancialTransaction(financialTransaction);
|
||||
|
||||
await transaction.CommitAsync();
|
||||
await _institutionContractRepository.SaveChangesAsync();
|
||||
await transaction.CommitAsync();
|
||||
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(
|
||||
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
||||
string state)
|
||||
|
||||
@@ -2381,5 +2381,10 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
|
||||
}
|
||||
|
||||
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
|
||||
{
|
||||
return await _insuranceListRepositpry.ClientPrintOne(id);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -1,17 +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.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
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;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
@@ -23,9 +31,12 @@ public class LeaveApplication : ILeaveApplication
|
||||
private readonly IRollCallRepository _rollCallRepository;
|
||||
private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository;
|
||||
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;
|
||||
_employeeRepository = employeeRepository;
|
||||
@@ -33,6 +44,8 @@ public class LeaveApplication : ILeaveApplication
|
||||
_rollCallRepository = rollCallRepository;
|
||||
_employeeSettingsRepository = employeeSettingsRepository;
|
||||
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
|
||||
_holidayItemRepository = holidayItemRepository;
|
||||
_rollCallServiceRepository = rollCallServiceRepository;
|
||||
}
|
||||
|
||||
public OperationResult Create(CreateLeave command)
|
||||
@@ -237,7 +250,7 @@ public class LeaveApplication : ILeaveApplication
|
||||
|
||||
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||
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,
|
||||
year, month, shiftDuration, hasShiftDuration,command.IsInvallid);
|
||||
_leaveRepository.Create(leave);
|
||||
@@ -509,7 +522,12 @@ public class LeaveApplication : ILeaveApplication
|
||||
|
||||
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)
|
||||
@@ -590,11 +608,435 @@ public class LeaveApplication : ILeaveApplication
|
||||
return leaveTotalTimeSpan;
|
||||
}
|
||||
|
||||
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
||||
|
||||
|
||||
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
||||
{
|
||||
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
|
||||
var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
|
||||
return timeSpanHourlyLeave + dailyLeaveCount;
|
||||
}
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
return await _leaveRepository.GetList(searchModel);
|
||||
}
|
||||
|
||||
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
return await _leaveRepository.GetGroupList(searchModel);
|
||||
}
|
||||
|
||||
public TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr, LeaveType leaveType)
|
||||
{
|
||||
|
||||
|
||||
var startFa = $"{yearStr}/{monthStr:00}/01";
|
||||
var endFa = startFa.FindeEndOfMonth();
|
||||
|
||||
if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false)
|
||||
return TimeSpan.Zero;
|
||||
|
||||
var leaveTotalTimeSpan = TimeSpan.Zero;
|
||||
|
||||
var leaves = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, start, end);
|
||||
//var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
|
||||
//var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
|
||||
|
||||
if (leaveType == LeaveType.PaidLeave)
|
||||
{
|
||||
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استحقاقی")
|
||||
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استحقاقی")
|
||||
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||
|
||||
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||
}
|
||||
else if (leaveType == LeaveType.SickLeave)
|
||||
{
|
||||
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استعلاجی")
|
||||
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||
|
||||
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استعلاجی")
|
||||
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||
|
||||
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||
}
|
||||
else
|
||||
{
|
||||
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی").Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه").Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return leaveTotalTimeSpan;
|
||||
}
|
||||
|
||||
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids,long workshopId)
|
||||
{
|
||||
return await _leaveRepository.PrintAllAsync(ids,workshopId);
|
||||
}
|
||||
|
||||
public async Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId)
|
||||
{
|
||||
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
|
||||
|
||||
|
||||
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 "تاریخ پایان از تاریخ شروع کوچکتر است.";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -722,5 +722,11 @@ public class PersonalContractingPartyApplication : IPersonalContractingPartyApp
|
||||
return await _personalContractingPartyRepository.GetLegalDetails(id);
|
||||
}
|
||||
|
||||
public async Task<long> GetRepresentativeIdByNationalCode(string nationalCode)
|
||||
{
|
||||
var entity = await _personalContractingPartyRepository.GetByNationalCode(nationalCode);
|
||||
return entity?.RepresentativeId??0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -788,7 +788,7 @@ public class RollCallApplication : IRollCallApplication
|
||||
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();
|
||||
try
|
||||
@@ -812,24 +812,43 @@ public class RollCallApplication : IRollCallApplication
|
||||
|
||||
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
|
||||
|
||||
var allRollCalls = _rollCallRepository
|
||||
var allRollCalls = await _rollCallRepository
|
||||
.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 command in commands)
|
||||
foreach (var rollCall in rollCalls)
|
||||
{
|
||||
var rollCalls = allRollCalls
|
||||
.Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
|
||||
rollCall.ClearTimeDiff();
|
||||
|
||||
foreach (var rollCall in rollCalls)
|
||||
{
|
||||
rollCall.ClearTimeDiff();
|
||||
_rollCallRepository.SaveChanges();
|
||||
rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
|
||||
}
|
||||
await _rollCallRepository.SaveChangesAsync();
|
||||
|
||||
rollCall.SetEndDateTime(
|
||||
rollCall.EndDate!.Value,
|
||||
_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();
|
||||
}
|
||||
|
||||
@@ -1092,7 +1092,9 @@ public class WorkshopAppliction : IWorkshopApplication
|
||||
Amount = 1000,
|
||||
MaxPersonValid = 500,
|
||||
Duration = "12",
|
||||
HasCustomizeCheckoutService = command.HasCustomizeCheckoutService
|
||||
HasCustomizeCheckoutService = command.HasCustomizeCheckoutService,
|
||||
StartService = institutionContract.ContractStartGr,
|
||||
|
||||
};
|
||||
_rollCallServiceApplication.Create(commandSave);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Exceptions;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Company.Domain.ContractAgg;
|
||||
using Company.Domain.empolyerAgg;
|
||||
@@ -1081,30 +1083,7 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
|
||||
var weeklyDouble = 0.0;
|
||||
var weekly = c.WorkingHoursWeekly;
|
||||
if (!string.IsNullOrWhiteSpace(weekly) &&
|
||||
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
|
||||
{
|
||||
if (weekly.Contains("/"))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else if (weekly.Contains("."))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else
|
||||
{
|
||||
c.WorkingHoursWeekly = c.WorkingHoursWeekly + " " + "ساعت";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
c.WorkingHoursWeekly = WeeklyHourConvertor(weekly);
|
||||
var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds)
|
||||
.Select(x => x.EmployerId).ToList();
|
||||
c.Employers = _employerRepository.GetEmployers(emp);
|
||||
@@ -1161,6 +1140,37 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
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()
|
||||
{
|
||||
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
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -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
|
||||
}
|
||||
@@ -722,34 +722,33 @@ public class EmployerRepository : RepositoryBase<long, Employer>, IEmployerRepos
|
||||
public OperationResult ActiveAll(long id)
|
||||
{
|
||||
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);
|
||||
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();
|
||||
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();
|
||||
result.Succcedded();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -176,18 +176,20 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
|
||||
{
|
||||
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 =
|
||||
new CheckoutWarningMessage(
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد",
|
||||
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
_context.CheckoutWarningMessages.Add(createWarrning);
|
||||
}
|
||||
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -729,7 +731,7 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
var id = insuranceListObj.id;
|
||||
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 =>
|
||||
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())
|
||||
{
|
||||
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 =
|
||||
new CheckoutWarningMessage(
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد",
|
||||
checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
_context.CheckoutWarningMessages.Add(createWarrning);
|
||||
}
|
||||
|
||||
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_employeeInsurancListDataRepository.SaveChanges();
|
||||
@@ -1777,62 +1778,97 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(InsuranceClientSearchModel searchModel)
|
||||
public async Task<PagedResult<InsuranceClientListViewModel>> GetInsuranceClientList(
|
||||
InsuranceClientSearchModel searchModel)
|
||||
{
|
||||
var workshopId = _authHelper.GetWorkshopId();
|
||||
var query = _context.InsuranceListSet
|
||||
.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),
|
||||
}).Where(x => x.WorkShopId == workshopId);
|
||||
.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)
|
||||
{
|
||||
query = query.Where(x => x.MonthInt == searchModel.Month);
|
||||
query = query.Where(x => x.Month == searchModel.Month.ToString("00"));
|
||||
}
|
||||
|
||||
var res = new PagedResult<InsuranceClientListViewModel>
|
||||
{
|
||||
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
|
||||
{
|
||||
"CreationDate-Max" => query.OrderByDescending(x => x.Id),
|
||||
"CreationDate-Min" => query.OrderBy(x => x.Id),
|
||||
"Month-Max" => query.OrderByDescending(x => x.MonthInt),
|
||||
"Month-Min" => query.OrderBy(x => x.MonthInt),
|
||||
"Year-Max" => query.OrderByDescending(x => x.YearInt),
|
||||
"Year-Min" => query.OrderBy(x => x.YearInt),
|
||||
_ => query.OrderByDescending(x => x.Id),
|
||||
"CreationDate-Max" => query.OrderByDescending(x => x.id),
|
||||
"CreationDate-Min" => query.OrderBy(x => x.id),
|
||||
"Month-Max" => query.OrderByDescending(x => x.Month),
|
||||
"Month-Min" => query.OrderBy(x => x.Month),
|
||||
"Year-Max" => query.OrderByDescending(x => x.Year),
|
||||
"Year-Min" => query.OrderBy(x => x.Year),
|
||||
_ => 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;
|
||||
}
|
||||
|
||||
public async Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel)
|
||||
public async Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel)
|
||||
{
|
||||
if (string.IsNullOrEmpty(searchModel.Month) || string.IsNullOrEmpty(searchModel.Year))
|
||||
{
|
||||
return [];
|
||||
}
|
||||
|
||||
|
||||
var workshopsHasInsuranceAccount = await _accountContext
|
||||
.AccountLeftWorks
|
||||
.Where(x => StaticWorkshopAccounts.InsuranceAccountsRoleIds.Contains(x.RoleId) && x.IsActive)
|
||||
.Select(x => x.WorkshopId).Distinct().ToListAsync();
|
||||
var acountId = _authHelper.CurrentAccountId();
|
||||
var accountWorkshopIds = _context.WorkshopAccounts.Where(x => x.AccountId == acountId)
|
||||
var accountWorkshopIds = _context.WorkshopAccounts.Where(x => x.AccountId == acountId && workshopsHasInsuranceAccount.Contains(x.WorkshopId))
|
||||
.Select(x => x.WorkshopId);
|
||||
var firstDayOfMonth = $"{searchModel.Year}/{searchModel.Month}/01".ToGeorgianDateTime();
|
||||
var insuranceWorkshops = _context.Workshops
|
||||
.Where(x => x.InsuranceCode != null && x.InsuranceCode.Length >= 10 && accountWorkshopIds.Contains(x.id) &&
|
||||
.Where(x => accountWorkshopIds.Contains(x.id) &&
|
||||
x.IsActiveString == "true");
|
||||
|
||||
|
||||
@@ -1855,7 +1891,7 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
WorkShopId = result.id,
|
||||
WorkShopCode = result.InsuranceWorkshopInfo != null
|
||||
? result.InsuranceWorkshopInfo.InsuranceCode
|
||||
: result.InsuranceCode,
|
||||
: string.IsNullOrWhiteSpace(result.InsuranceCode) ? "کد کارگاهی ندارد" : result.InsuranceCode,
|
||||
WorkShopName = result.InsuranceWorkshopInfo != null
|
||||
? result.InsuranceWorkshopInfo.WorkshopName
|
||||
: result.WorkshopFullName,
|
||||
@@ -1877,10 +1913,10 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
query = query.Where(x => x.Month == searchModel.Month).OrderByDescending(x => x.WorkShopName)
|
||||
.ThenByDescending(x => x.EmployerName).ThenByDescending(x => x.Year);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
|
||||
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
|
||||
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
|
||||
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
|
||||
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.WorkShopCode))
|
||||
query = query.Where(x => x.WorkShopCode == searchModel.WorkShopCode).OrderByDescending(x => x.Year)
|
||||
@@ -1960,6 +1996,77 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
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>
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Company.Domain.LeaveAgg;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
|
||||
namespace CompanyManagment.EFCore.Repository;
|
||||
|
||||
@@ -17,6 +19,7 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
public LeaveRepository(CompanyContext context) : base(context)
|
||||
{
|
||||
_context = context;
|
||||
|
||||
}
|
||||
|
||||
public EditLeave GetDetails(long id)
|
||||
@@ -290,6 +293,65 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
return query;
|
||||
}
|
||||
|
||||
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId)
|
||||
{
|
||||
var leaves =await _context
|
||||
.LeaveList.Where(x => ids.Contains(x.id) && x.WorkshopId == workshopId).ToListAsync();
|
||||
|
||||
var minLeave = leaves.Min(x => x.StartLeave);
|
||||
var maxLeave = leaves.Max(x => x.EndLeave);
|
||||
|
||||
var employeeIds = leaves.Select(x => x.EmployeeId).Distinct().ToList();
|
||||
|
||||
var contracts = await _context.Contracts
|
||||
.Where(x => x.WorkshopIds == workshopId && employeeIds.Contains(x.EmployeeId)
|
||||
&& x.ContarctStart<= maxLeave && x.ContractEnd>= minLeave)
|
||||
.ToListAsync();
|
||||
|
||||
var employees = await _context
|
||||
.Employees.Where(x=> employeeIds.Contains(x.id)).ToListAsync();
|
||||
|
||||
var employerNames = _context.WorkshopEmployers.Include(x=>x.Employer)
|
||||
.Where(x=>x.WorkshopId == workshopId).Select(x=>x.Employer.FName+" "+x.Employer.LName).ToList();
|
||||
|
||||
var workshopName = _context.Workshops.FirstOrDefault(x => x.id == workshopId)?.WorkshopName;
|
||||
|
||||
var res = leaves.Select(leave =>
|
||||
{
|
||||
var employee = employees.FirstOrDefault(x => x.id == leave.EmployeeId);
|
||||
return new LeavePrintResponseViewModel
|
||||
{
|
||||
FullName = employee?.FName + " " +
|
||||
employee?.LName,
|
||||
NationalCode = employee?.NationalCode,
|
||||
WorkshopName = workshopName,
|
||||
EmployerNames = employerNames,
|
||||
PaidLeaveType = leave.PaidLeaveType,
|
||||
ContractNo = contracts.FirstOrDefault(x =>
|
||||
x.EmployeeId == leave.EmployeeId &&
|
||||
x.ContarctStart <= leave.StartLeave &&
|
||||
x.ContractEnd >= leave.EndLeave)?.ContractNo,
|
||||
DailyLeave = leave.PaidLeaveType == "روزانه" ? new LeavePrintDailyResponseViewModel
|
||||
{
|
||||
StartLeave = leave.StartLeave.ToFarsi(),
|
||||
EndLeave = leave.EndLeave.ToFarsi(),
|
||||
TotalDay = leave.LeaveHourses
|
||||
} : null,
|
||||
|
||||
HourlyLeave = leave.PaidLeaveType == "ساعتی" ?
|
||||
new LeavePrintHourlyResponseViewModel
|
||||
{
|
||||
LeaveDate = leave.StartLeave.ToFarsi(),
|
||||
StartHour = leave.StartLeave.ToString("HH:mm"),
|
||||
EndHour = leave.EndLeave.ToString("HH:mm"),
|
||||
TotalHour = TimeSpan.Parse(leave.LeaveHourses)
|
||||
.TotalHours.ToString("F0")
|
||||
} : null
|
||||
};
|
||||
}).ToList();
|
||||
return res;
|
||||
}
|
||||
|
||||
#region Vafa
|
||||
|
||||
public List<LeaveViewModel> LastLeaveMain(LeaveSearchModel searchModel)
|
||||
@@ -371,15 +433,17 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
}
|
||||
}
|
||||
|
||||
public OperationResult RemoveLeave(long id)
|
||||
|
||||
|
||||
public async Task<OperationResult> RemoveLeave(long id)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
var item = _context.LeaveList.FirstOrDefault(x => x.id == id);
|
||||
if (item != null)
|
||||
{
|
||||
var checkoutExist = _context.CheckoutSet
|
||||
var checkoutExist =await _context.CheckoutSet
|
||||
.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)
|
||||
{
|
||||
return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد");
|
||||
@@ -536,4 +600,250 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||
(starContract >= x.StartLeaveGr && starContract <= x.EndLeaveGr) ||
|
||||
(endContract >= x.StartLeaveGr && endContract <= x.EndLeaveGr));
|
||||
}
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId);
|
||||
|
||||
if (searchModel.EmployeeId != 0)
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.PaidLeave)
|
||||
query = query.Where(x => x.LeaveType == "استحقاقی");
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.SickLeave)
|
||||
query = query.Where(x => x.LeaveType == "استعلاجی");
|
||||
|
||||
if (searchModel.IsInvalid)
|
||||
{
|
||||
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
|
||||
{
|
||||
var start = new DateTime();
|
||||
var end = new DateTime();
|
||||
try
|
||||
{
|
||||
start = searchModel.StartLeave.ToGeorgianDateTime();
|
||||
end = searchModel.EndLeave.ToGeorgianDateTime();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int year = Convert.ToInt32(searchModel.YearStr);
|
||||
query = query.Where(x => x.Year == year);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int month = Convert.ToInt32(searchModel.MonthStr);
|
||||
query = query.Where(x => x.Month == month);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new PagedResult<leaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
var count = await query.CountAsync();
|
||||
query = query.OrderByDescending(x => x.CreationDate);
|
||||
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
|
||||
|
||||
|
||||
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
|
||||
{
|
||||
Id = item.id,
|
||||
EmployeeFullName = item.EmployeeFullName,
|
||||
YearStr = $"{item.Year}",
|
||||
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
|
||||
IsInvalid = item.IsInvalid,
|
||||
LeaveType = item.LeaveType,
|
||||
StartLeave = item.StartLeave.ToFarsi(),
|
||||
EndLeave = item.EndLeave.ToFarsi(),
|
||||
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
|
||||
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
|
||||
IsAccepted = item.IsAccepted,
|
||||
WorkshopId = item.WorkshopId,
|
||||
EmployeeId = item.EmployeeId,
|
||||
|
||||
}).ToList();
|
||||
return new PagedResult<leaveListDto>()
|
||||
{
|
||||
TotalCount = count,
|
||||
List = leaveResult
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var query = _context.LeaveList.Where(x => x.WorkshopId == searchModel.WorkshopId && x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.PaidLeave)
|
||||
query = query.Where(x => x.LeaveType == "استحقاقی");
|
||||
|
||||
if (searchModel.LeaveType == LeaveType.SickLeave)
|
||||
query = query.Where(x => x.LeaveType == "استعلاجی");
|
||||
|
||||
if (searchModel.IsInvalid)
|
||||
{
|
||||
query = query.IgnoreQueryFilters().Where(x => x.IsInvalid);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartLeave) && !string.IsNullOrWhiteSpace(searchModel.EndLeave))
|
||||
{
|
||||
var start = new DateTime();
|
||||
var end = new DateTime();
|
||||
try
|
||||
{
|
||||
start = searchModel.StartLeave.ToGeorgianDateTime();
|
||||
end = searchModel.EndLeave.ToGeorgianDateTime();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
query = query.Where(x => x.StartLeave >= start && x.EndLeave <= end);
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchModel.YearStr) || !string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.YearStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int year = Convert.ToInt32(searchModel.YearStr);
|
||||
query = query.Where(x => x.Year == year);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
try
|
||||
{
|
||||
int month = Convert.ToInt32(searchModel.MonthStr);
|
||||
query = query.Where(x => x.Month == month);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
return new List<GroupLeaveListDto>();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
var leaveList = await query.GroupBy(x => new { x.Year, x.Month })
|
||||
.OrderByDescending(group => group.Key.Year)
|
||||
.ThenByDescending(group => group.Key.Month)
|
||||
.Select(group => new GroupLeaveListDto
|
||||
{
|
||||
YearStr = $"{group.Key.Year}",
|
||||
MonthStr = group.Key.Month.ToFarsiMonthByIntNumber(),
|
||||
LeaveListItemsDto = group.OrderByDescending(x=>x.StartLeave).Select(item => new LeaveListItemsDto
|
||||
{
|
||||
Id = item.id,
|
||||
IsInvalid = item.IsInvalid,
|
||||
LeaveType = item.LeaveType,
|
||||
StartLeave = item.StartLeave.ToFarsi(),
|
||||
EndLeave = item.EndLeave.ToFarsi(),
|
||||
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
|
||||
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
|
||||
IsAccepted = item.IsAccepted,
|
||||
WorkshopId = item.WorkshopId,
|
||||
EmployeeId = item.EmployeeId,
|
||||
}).ToList()
|
||||
}).ToListAsync();
|
||||
|
||||
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
|
||||
}
|
||||
@@ -340,8 +340,10 @@ public class PlanPercentageRepository : RepositoryBase<long, PlanPercentage>, IP
|
||||
.Select(x => x.ItemValue).FirstOrDefault();
|
||||
|
||||
var plans = _context.InstitutionPlans.AsQueryable();
|
||||
if (searchModel.CountPeron > 0)
|
||||
plans = plans.Where(x => x.CountPerson == searchModel.CountPeron);
|
||||
if (searchModel.CountPerson > 0)
|
||||
plans = plans.Where(x => x.CountPerson == searchModel.CountPerson);
|
||||
|
||||
var count = await plans.CountAsync();
|
||||
|
||||
var planQueryFilter =await plans.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
var planResult = planQueryFilter.Select(plan =>
|
||||
@@ -403,7 +405,7 @@ public class PlanPercentageRepository : RepositoryBase<long, PlanPercentage>, IP
|
||||
|
||||
return new PagedResult<InstitutionPlanListDto>()
|
||||
{
|
||||
TotalCount = finalResult.Count,
|
||||
TotalCount = count,
|
||||
List = finalResult
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Sms;
|
||||
using Company.Domain.SmsResultAgg;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
@@ -10,6 +6,11 @@ using IPE.SmsIrClient;
|
||||
using IPE.SmsIrClient.Models.Requests;
|
||||
using IPE.SmsIrClient.Models.Results;
|
||||
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;
|
||||
|
||||
|
||||
@@ -17,521 +18,531 @@ namespace CompanyManagment.EFCore.Services;
|
||||
|
||||
public class SmsService : ISmsService
|
||||
{
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ISmsResultRepository _smsResultRepository;
|
||||
private readonly bool _isDevEnvironment;
|
||||
private readonly List<string> _testNumbers;
|
||||
public SmsIr SmsIr { get; set; }
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ISmsResultRepository _smsResultRepository;
|
||||
private readonly bool _isDevEnvironment;
|
||||
private readonly List<string> _testNumbers;
|
||||
private readonly ILogger<SmsService> _logger;
|
||||
public SmsIr SmsIr { get; set; }
|
||||
|
||||
|
||||
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_smsResultRepository = smsResultRepository;
|
||||
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository, ILogger<SmsService> logger)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_smsResultRepository = smsResultRepository;
|
||||
_logger = logger;
|
||||
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
|
||||
// خواندن تنظیمات SMS از appsettings
|
||||
var smsSettings = _configuration.GetSection("SmsSettings");
|
||||
_isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode");
|
||||
_testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>();
|
||||
}
|
||||
// خواندن تنظیمات SMS از appsettings
|
||||
var smsSettings = _configuration.GetSection("SmsSettings");
|
||||
_isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode");
|
||||
_testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// متد مرکزی برای ارسال پیامک که محیط dev را چک میکند
|
||||
/// </summary>
|
||||
private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters)
|
||||
{
|
||||
// اگر محیط dev است و شمارههای تست وجود دارد، به شمارههای تست ارسال میشود
|
||||
if (_isDevEnvironment && _testNumbers is { Count: > 0 })
|
||||
{
|
||||
// ارسال به همه شمارههای تست
|
||||
SmsIrResult<VerifySendResult> lastResult = null;
|
||||
foreach (var testNumber in _testNumbers)
|
||||
{
|
||||
lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters);
|
||||
}
|
||||
return lastResult; // برگرداندن نتیجه آخرین ارسال
|
||||
}
|
||||
else
|
||||
{
|
||||
// ارسال به شماره واقعی
|
||||
return await SmsIr.VerifySendAsync(number, templateId, parameters);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// متد مرکزی برای ارسال پیامک که محیط dev را چک میکند
|
||||
/// </summary>
|
||||
private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters)
|
||||
{
|
||||
// اگر محیط dev است و شمارههای تست وجود دارد، به شمارههای تست ارسال میشود
|
||||
if (_isDevEnvironment && _testNumbers is { Count: > 0 })
|
||||
{
|
||||
// ارسال به همه شمارههای تست
|
||||
SmsIrResult<VerifySendResult> lastResult = null;
|
||||
foreach (var testNumber in _testNumbers)
|
||||
{
|
||||
lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters);
|
||||
}
|
||||
return lastResult; // برگرداندن نتیجه آخرین ارسال
|
||||
}
|
||||
else
|
||||
{
|
||||
// ارسال به شماره واقعی
|
||||
return await SmsIr.VerifySendAsync(number, templateId, parameters);
|
||||
}
|
||||
}
|
||||
|
||||
public void Send(string number, string message)
|
||||
{
|
||||
//var token = GetToken();
|
||||
//var lines = new SmsLine().GetSmsLines(token);
|
||||
//if (lines == null) return;
|
||||
public void Send(string number, string message)
|
||||
{
|
||||
//var token = GetToken();
|
||||
//var lines = new SmsLine().GetSmsLines(token);
|
||||
//if (lines == null) return;
|
||||
|
||||
//var line = lines.SMSLines.Last().LineNumber.ToString();
|
||||
//var data = new MessageSendObject
|
||||
//{
|
||||
// Messages = new List<string>
|
||||
// {message}.ToArray(),
|
||||
// MobileNumbers = new List<string> {number}.ToArray(),
|
||||
// LineNumber = line,
|
||||
// SendDateTime = DateTime.Now,
|
||||
// CanContinueInCaseOfError = true
|
||||
//};
|
||||
//var messageSendResponseObject =
|
||||
// new MessageSend().Send(token, data);
|
||||
//var line = lines.SMSLines.Last().LineNumber.ToString();
|
||||
//var data = new MessageSendObject
|
||||
//{
|
||||
// Messages = new List<string>
|
||||
// {message}.ToArray(),
|
||||
// MobileNumbers = new List<string> {number}.ToArray(),
|
||||
// LineNumber = line,
|
||||
// SendDateTime = DateTime.Now,
|
||||
// CanContinueInCaseOfError = true
|
||||
//};
|
||||
//var messageSendResponseObject =
|
||||
// new MessageSend().Send(token, data);
|
||||
|
||||
//if (messageSendResponseObject.IsSuccessful) return;
|
||||
//if (messageSendResponseObject.IsSuccessful) return;
|
||||
|
||||
//line = lines.SMSLines.First().LineNumber.ToString();
|
||||
//data.LineNumber = line;
|
||||
//new MessageSend().Send(token, data);
|
||||
}
|
||||
public bool VerifySend(string number, string message)
|
||||
{
|
||||
var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) });
|
||||
Thread.Sleep(2000);
|
||||
if (verificationSendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
//line = lines.SMSLines.First().LineNumber.ToString();
|
||||
//data.LineNumber = line;
|
||||
//new MessageSend().Send(token, data);
|
||||
}
|
||||
public bool VerifySend(string number, string message)
|
||||
{
|
||||
var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) });
|
||||
Thread.Sleep(2000);
|
||||
if (verificationSendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
|
||||
var resStartStatus = verificationSendResult.Result;
|
||||
var b = resStartStatus.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var a = verificationSendResult.IsCompleted;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var resStartStatus = verificationSendResult.Result;
|
||||
var b = resStartStatus.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var a = verificationSendResult.IsCompleted;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var resStartStatus = verificationSendResult.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
var resStartStatus = verificationSendResult.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public bool LoginSend(string number, string message)
|
||||
{
|
||||
var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) });
|
||||
Thread.Sleep(2000);
|
||||
if (verificationSendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
public bool LoginSend(string number, string message)
|
||||
{
|
||||
var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) });
|
||||
Thread.Sleep(2000);
|
||||
if (verificationSendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
|
||||
var resStartStatus = verificationSendResult.Result;
|
||||
var b = resStartStatus.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var a = verificationSendResult.IsCompleted;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
var resStartStatus = verificationSendResult.Result;
|
||||
var b = resStartStatus.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var a = verificationSendResult.IsCompleted;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var resStartStatus = verificationSendResult.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
var resStartStatus = verificationSendResult.Status;
|
||||
var resResult = verificationSendResult.Status;
|
||||
var reseExceptiont = verificationSendResult.Exception;
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
|
||||
{
|
||||
var result = new SentSmsViewModel();
|
||||
var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
|
||||
Thread.Sleep(2000);
|
||||
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
|
||||
{
|
||||
var result = new SentSmsViewModel();
|
||||
var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
|
||||
Thread.Sleep(2000);
|
||||
|
||||
if (sendResult.Message == "موفق")
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
return result.Succedded(status, message, messaeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
return result.Failed(status, message, messaeId);
|
||||
}
|
||||
}
|
||||
if (sendResult.Message == "موفق")
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
return result.Succedded(status, message, messaeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
var status = sendResult.Status;
|
||||
var message = sendResult.Message;
|
||||
var messaeId = sendResult.Data.MessageId;
|
||||
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;
|
||||
if (checkLength > 25)
|
||||
fullName = fullName.Substring(0, 24);
|
||||
var checkLength = fullName.Length;
|
||||
if (checkLength > 25)
|
||||
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);
|
||||
if (sendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
Console.WriteLine(userName + " - " + sendResult.Result.Status);
|
||||
if (sendResult.IsCompletedSuccessfully)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ApiResultViewModel> GetByMessageId(int messId)
|
||||
{
|
||||
public async Task<ApiResultViewModel> GetByMessageId(int messId)
|
||||
{
|
||||
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var response = await smsIr.GetReportAsync(messId);
|
||||
MessageReportResult messages = response.Data;
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var response = await smsIr.GetReportAsync(messId);
|
||||
MessageReportResult messages = response.Data;
|
||||
|
||||
var appendData = new ApiResultViewModel()
|
||||
{
|
||||
MessageId = messages.MessageId,
|
||||
LineNumber = messages.LineNumber,
|
||||
Mobile = messages.Mobile,
|
||||
MessageText = messages.MessageText,
|
||||
SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime),
|
||||
DeliveryState = DeliveryStatus(messages.DeliveryState),
|
||||
DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime),
|
||||
DeliveryColor = DeliveryColorStatus(messages.DeliveryState),
|
||||
};
|
||||
return appendData;
|
||||
}
|
||||
public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate)
|
||||
{
|
||||
var st = new DateTime(2024, 6, 2);
|
||||
var ed = new DateTime(2024, 7, 1);
|
||||
if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
|
||||
{
|
||||
st = startDate.ToGeorgianDateTime();
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
|
||||
{
|
||||
ed = endDate.ToGeorgianDateTime();
|
||||
}
|
||||
var res = new List<ApiResultViewModel>();
|
||||
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600
|
||||
//int? toDateUnixTime = null; // unix time - for instance: 1703190600
|
||||
int pageNumber = 2;
|
||||
int pageSize = 100; // max: 100
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
|
||||
var appendData = new ApiResultViewModel()
|
||||
{
|
||||
MessageId = messages.MessageId,
|
||||
LineNumber = messages.LineNumber,
|
||||
Mobile = messages.Mobile,
|
||||
MessageText = messages.MessageText,
|
||||
SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime),
|
||||
DeliveryState = DeliveryStatus(messages.DeliveryState),
|
||||
DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime),
|
||||
DeliveryColor = DeliveryColorStatus(messages.DeliveryState),
|
||||
};
|
||||
return appendData;
|
||||
}
|
||||
public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate)
|
||||
{
|
||||
var st = new DateTime(2024, 6, 2);
|
||||
var ed = new DateTime(2024, 7, 1);
|
||||
if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
|
||||
{
|
||||
st = startDate.ToGeorgianDateTime();
|
||||
}
|
||||
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
|
||||
{
|
||||
ed = endDate.ToGeorgianDateTime();
|
||||
}
|
||||
var res = new List<ApiResultViewModel>();
|
||||
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600
|
||||
//int? toDateUnixTime = null; // unix time - for instance: 1703190600
|
||||
int pageNumber = 2;
|
||||
int pageSize = 100; // max: 100
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
|
||||
|
||||
MessageReportResult[] messages = response.Data;
|
||||
foreach (var message in messages)
|
||||
{
|
||||
var appendData = new ApiResultViewModel()
|
||||
{
|
||||
MessageId = message.MessageId,
|
||||
LineNumber = message.LineNumber,
|
||||
Mobile = message.Mobile,
|
||||
MessageText = message.MessageText,
|
||||
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
|
||||
DeliveryState = DeliveryStatus(message.DeliveryState),
|
||||
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
|
||||
DeliveryColor = DeliveryColorStatus(message.DeliveryState),
|
||||
};
|
||||
res.Add(appendData);
|
||||
}
|
||||
MessageReportResult[] messages = response.Data;
|
||||
foreach (var message in messages)
|
||||
{
|
||||
var appendData = new ApiResultViewModel()
|
||||
{
|
||||
MessageId = message.MessageId,
|
||||
LineNumber = message.LineNumber,
|
||||
Mobile = message.Mobile,
|
||||
MessageText = message.MessageText,
|
||||
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
|
||||
DeliveryState = DeliveryStatus(message.DeliveryState),
|
||||
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
|
||||
DeliveryColor = DeliveryColorStatus(message.DeliveryState),
|
||||
};
|
||||
res.Add(appendData);
|
||||
}
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public string DeliveryStatus(byte? dv)
|
||||
{
|
||||
string mess = "";
|
||||
switch (dv)
|
||||
{
|
||||
case 1:
|
||||
mess = "رسیده به گوشی";
|
||||
break;
|
||||
case 2:
|
||||
mess = "نرسیده به گوشی";
|
||||
break;
|
||||
case 3:
|
||||
mess = "پردازش در مخابرات";
|
||||
break;
|
||||
case 4:
|
||||
mess = "نرسیده به مخابرات";
|
||||
break;
|
||||
case 5:
|
||||
mess = "سیده به مخابرات";
|
||||
break;
|
||||
case 6:
|
||||
mess = "خطا";
|
||||
break;
|
||||
case 7:
|
||||
mess = "لیست سیاه";
|
||||
break;
|
||||
default:
|
||||
mess = "";
|
||||
break;
|
||||
public string DeliveryStatus(byte? dv)
|
||||
{
|
||||
string mess = "";
|
||||
switch (dv)
|
||||
{
|
||||
case 1:
|
||||
mess = "رسیده به گوشی";
|
||||
break;
|
||||
case 2:
|
||||
mess = "نرسیده به گوشی";
|
||||
break;
|
||||
case 3:
|
||||
mess = "پردازش در مخابرات";
|
||||
break;
|
||||
case 4:
|
||||
mess = "نرسیده به مخابرات";
|
||||
break;
|
||||
case 5:
|
||||
mess = "سیده به مخابرات";
|
||||
break;
|
||||
case 6:
|
||||
mess = "خطا";
|
||||
break;
|
||||
case 7:
|
||||
mess = "لیست سیاه";
|
||||
break;
|
||||
default:
|
||||
mess = "";
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return mess;
|
||||
}
|
||||
public string DeliveryColorStatus(byte? dv)
|
||||
{
|
||||
string mess = "";
|
||||
switch (dv)
|
||||
{
|
||||
case 1:
|
||||
mess = "successSend";
|
||||
break;
|
||||
case 2:
|
||||
mess = "errSend";
|
||||
break;
|
||||
case 3:
|
||||
mess = "pSend";
|
||||
break;
|
||||
case 4:
|
||||
mess = "noSend";
|
||||
break;
|
||||
case 5:
|
||||
mess = "itcSend";
|
||||
break;
|
||||
case 6:
|
||||
mess = "redSend";
|
||||
break;
|
||||
case 7:
|
||||
mess = "blockSend";
|
||||
break;
|
||||
default:
|
||||
mess = "";
|
||||
break;
|
||||
return mess;
|
||||
}
|
||||
public string DeliveryColorStatus(byte? dv)
|
||||
{
|
||||
string mess = "";
|
||||
switch (dv)
|
||||
{
|
||||
case 1:
|
||||
mess = "successSend";
|
||||
break;
|
||||
case 2:
|
||||
mess = "errSend";
|
||||
break;
|
||||
case 3:
|
||||
mess = "pSend";
|
||||
break;
|
||||
case 4:
|
||||
mess = "noSend";
|
||||
break;
|
||||
case 5:
|
||||
mess = "itcSend";
|
||||
break;
|
||||
case 6:
|
||||
mess = "redSend";
|
||||
break;
|
||||
case 7:
|
||||
mess = "blockSend";
|
||||
break;
|
||||
default:
|
||||
mess = "";
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return mess;
|
||||
}
|
||||
public string UnixTimeStampToDateTime(int? unixTimeStamp)
|
||||
{
|
||||
if (unixTimeStamp != null)
|
||||
{
|
||||
// Unix timestamp is seconds past epoch
|
||||
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
||||
dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime();
|
||||
var time = dateTime.ToFarsiFull();
|
||||
return time;
|
||||
}
|
||||
return mess;
|
||||
}
|
||||
public string UnixTimeStampToDateTime(int? unixTimeStamp)
|
||||
{
|
||||
if (unixTimeStamp != null)
|
||||
{
|
||||
// Unix timestamp is seconds past epoch
|
||||
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
||||
dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime();
|
||||
var time = dateTime.ToFarsiFull();
|
||||
return time;
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
private string GetToken()
|
||||
{
|
||||
return "";
|
||||
//var smsSecrets = _configuration.GetSection("SmsSecrets");
|
||||
//var tokenService = new Token();
|
||||
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
}
|
||||
return "";
|
||||
}
|
||||
private string GetToken()
|
||||
{
|
||||
return "";
|
||||
//var smsSecrets = _configuration.GetSection("SmsSecrets");
|
||||
//var tokenService = new Token();
|
||||
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
}
|
||||
|
||||
#region Mahan
|
||||
#region Mahan
|
||||
|
||||
public async Task<double> GetCreditAmount()
|
||||
{
|
||||
try
|
||||
{
|
||||
var credit = await SmsIr.GetCreditAsync();
|
||||
return (double)credit.Data;
|
||||
}
|
||||
catch
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
public async Task<double> GetCreditAmount()
|
||||
{
|
||||
try
|
||||
{
|
||||
var credit = await SmsIr.GetCreditAsync();
|
||||
return (double)credit.Data;
|
||||
}
|
||||
catch
|
||||
{
|
||||
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;
|
||||
|
||||
|
||||
|
||||
|
||||
var full = fullName;
|
||||
var fullName1 = fullName;
|
||||
if (fullName.Length >= 25)
|
||||
{
|
||||
fullName1 = fullName.Substring(0, 25);
|
||||
}
|
||||
var fullName2 = "";
|
||||
if (full.Length > 25)
|
||||
{
|
||||
fullName2 = full.Substring(25);
|
||||
if (fullName2.Length>25)
|
||||
{
|
||||
fullName2 = fullName2.Substring(0, 25);
|
||||
}
|
||||
}
|
||||
var guidStr = institutionId.ToString();
|
||||
var firstPart = guidStr.Substring(0, 15);
|
||||
var secondPart = guidStr.Substring(15);
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||
{
|
||||
new("FULLNAME1", fullName1),
|
||||
new("FULLNAME2", fullName2),
|
||||
new("CODE1",firstPart),
|
||||
new("CODE2",secondPart)
|
||||
});
|
||||
|
||||
var fullName1 = fullName;
|
||||
if (fullName.Length >= 25)
|
||||
{
|
||||
fullName1 = fullName.Substring(0, 25);
|
||||
}
|
||||
var fullName2 = "";
|
||||
if (full.Length > 25)
|
||||
{
|
||||
fullName2 = full.Substring(25);
|
||||
if (fullName2.Length > 25)
|
||||
{
|
||||
fullName2 = fullName2.Substring(0, 25);
|
||||
}
|
||||
}
|
||||
var guidStr = institutionId.ToString();
|
||||
var firstPart = guidStr.Substring(0, 15);
|
||||
var secondPart = guidStr.Substring(15);
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||
{
|
||||
new("FULLNAME1", fullName1),
|
||||
new("FULLNAME2", fullName2),
|
||||
new("CODE1",firstPart),
|
||||
new("CODE2",secondPart)
|
||||
});
|
||||
|
||||
if (verificationSendResult.Status == 1)
|
||||
{
|
||||
_logger.LogInformation("ارسال لینک قراداد مالی موفق بود");
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogError("خطا در ارسال لینک قراداد مالی");
|
||||
}
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, typeOfSms,
|
||||
fullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
fullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
_logger.LogInformation("ذخیره در دیتابیس موفق بود");
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
|
||||
public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId,
|
||||
long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var guidStr = institutionId.ToString();
|
||||
var firstPart = guidStr.Substring(0, 15);
|
||||
var secondPart = guidStr.Substring(15);
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||
{
|
||||
new("FULLNAME", fullName),
|
||||
new("CODE1",firstPart),
|
||||
new("CODE2",secondPart)
|
||||
});
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی",
|
||||
fullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId,
|
||||
long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var guidStr = institutionId.ToString();
|
||||
var firstPart = guidStr.Substring(0, 15);
|
||||
var secondPart = guidStr.Substring(15);
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||
{
|
||||
new("FULLNAME", fullName),
|
||||
new("CODE1",firstPart),
|
||||
new("CODE2",secondPart)
|
||||
});
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی",
|
||||
fullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
|
||||
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||
long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[]
|
||||
{
|
||||
new("VERIFYCODE", code)
|
||||
});
|
||||
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||
long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[]
|
||||
{
|
||||
new("VERIFYCODE", code)
|
||||
});
|
||||
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
|
||||
contractingPartyFullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
|
||||
contractingPartyFullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
|
||||
public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount)
|
||||
{
|
||||
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,
|
||||
string code2)
|
||||
{
|
||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
|
||||
string code2)
|
||||
{
|
||||
|
||||
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("CODE1", code1), new("CODE2", code2) });
|
||||
Thread.Sleep(500);
|
||||
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("CODE1", code1), new("CODE2", code2) });
|
||||
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);
|
||||
return result;
|
||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
|
||||
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");
|
||||
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)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
|
||||
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 == "موفق")
|
||||
{
|
||||
if (sendResult.Message == "موفق")
|
||||
{
|
||||
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
||||
return result;
|
||||
}
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
||||
return result;
|
||||
}
|
||||
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
||||
return result;
|
||||
}
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
|
||||
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);
|
||||
#endregion
|
||||
|
||||
|
||||
if (sendResult.Message == "موفق")
|
||||
{
|
||||
#region AlarmMessage
|
||||
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
||||
return result;
|
||||
}
|
||||
public async Task<bool> Alarm(string number, string message)
|
||||
{
|
||||
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
|
||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
||||
return result;
|
||||
}
|
||||
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
|
||||
|
||||
#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)
|
||||
{
|
||||
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
|
||||
#endregion
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
using GozareshgirProgramManager.Application._Common.Interfaces;
|
||||
using GozareshgirProgramManager.Application._Common.Models;
|
||||
using GozareshgirProgramManager.Domain._Common;
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Enums;
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Repositories;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace GozareshgirProgramManager.Application.Modules.Projects.Commands.AutoStopOverTimeTaskSections;
|
||||
|
||||
public record AutoStopOverTimeTaskSectionsCommand : IBaseCommand;
|
||||
|
||||
public class AutoStopOverTimeTaskSectionsCommandHandler : IBaseCommandHandler<AutoStopOverTimeTaskSectionsCommand>
|
||||
{
|
||||
private readonly ITaskSectionRepository _taskSectionRepository;
|
||||
private readonly IUnitOfWork _unitOfWork;
|
||||
|
||||
public AutoStopOverTimeTaskSectionsCommandHandler(ITaskSectionRepository taskSectionRepository,
|
||||
IUnitOfWork unitOfWork)
|
||||
{
|
||||
_taskSectionRepository = taskSectionRepository;
|
||||
_unitOfWork = unitOfWork;
|
||||
}
|
||||
|
||||
public async Task<OperationResult> Handle(AutoStopOverTimeTaskSectionsCommand request,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
// دریافت تمام تسکهای در حال انجام
|
||||
var taskSections = await _taskSectionRepository.GetActiveSectionsIncludeAllAsync(cancellationToken);
|
||||
|
||||
|
||||
foreach (var taskSection in taskSections)
|
||||
{
|
||||
// استفاده از متد Domain برای بررسی و متوقف کردن خودکار
|
||||
taskSection.AutoStopIfOverTime();
|
||||
}
|
||||
|
||||
// ذخیره تغییرات در دیتابیس
|
||||
await _unitOfWork.SaveChangesAsync(cancellationToken);
|
||||
|
||||
return OperationResult.Success();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return OperationResult.Failure($"خطا در ناتمام کردن تسکهای overtime: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,8 +8,6 @@ public class CreateProjectCommandValidator:AbstractValidator<CreateProjectComman
|
||||
public CreateProjectCommandValidator()
|
||||
{
|
||||
RuleFor(x => x.Name)
|
||||
.MaximumLength(25)
|
||||
.WithMessage("نام نمیتواند بیشتر از 25 کاراکتر باشد")
|
||||
.NotEmpty()
|
||||
.NotNull()
|
||||
.WithMessage("نام نمیتواند خالی باشد");
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Globalization;
|
||||
using GozareshgirProgramManager.Application._Common.Interfaces;
|
||||
using GozareshgirProgramManager.Application._Common.Models;
|
||||
using GozareshgirProgramManager.Domain._Common;
|
||||
@@ -7,21 +8,22 @@ namespace GozareshgirProgramManager.Application.Modules.Projects.Queries.Project
|
||||
|
||||
public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery<ProjectBoardDetailResponse>;
|
||||
|
||||
public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTime);
|
||||
public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTimeMinute,string RemainingTimeMinute );
|
||||
|
||||
public record ProjectBoardDetailUserResponse
|
||||
{
|
||||
public List<ProjectBoardDetailUserHistoryResponse> Histories { get; set; } = new();
|
||||
public string UserFullName { get; set; }
|
||||
public long UserId { get; set; }
|
||||
public List<ProjectBoardDetailUserHistoryResponse> Histories { get; init; }
|
||||
public string UserFullName { get; init; }
|
||||
public string SpentTimeMinute { get; init; }
|
||||
public long UserId { get; init; }
|
||||
}
|
||||
|
||||
public class ProjectBoardDetailUserHistoryResponse
|
||||
public record ProjectBoardDetailUserHistoryResponse
|
||||
{
|
||||
public string Date { get; set; }
|
||||
public string startTime { get; set; }
|
||||
public string EndTime { get; set; }
|
||||
public string TotalTime { get; set; }
|
||||
public string Date { get; init; }
|
||||
public string startTime { get; init; }
|
||||
public string EndTime { get; init; }
|
||||
public string TotalTimeMinute { get; init; }
|
||||
}
|
||||
|
||||
public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDetailQuery, ProjectBoardDetailResponse>
|
||||
@@ -38,6 +40,7 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDeta
|
||||
{
|
||||
var section = await _programManagerDbContext.TaskSections
|
||||
.Include(x => x.Activities)
|
||||
.Include(x=>x.AdditionalTimes)
|
||||
.FirstOrDefaultAsync(x => x.Id == request.SectionId, cancellationToken: cancellationToken);
|
||||
|
||||
if (section == null)
|
||||
@@ -49,26 +52,33 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDeta
|
||||
.Where(x => userIds.Contains(x.Id))
|
||||
.ToDictionaryAsync(x => x.Id, x => x.FullName, cancellationToken);
|
||||
|
||||
var totalTimeSpan = section.Activities
|
||||
var totalActivityTimeSpan = section.Activities
|
||||
.Select(x => x.GetTimeSpent())
|
||||
.Aggregate(TimeSpan.Zero, (sum, next) => sum.Add(next));
|
||||
|
||||
var finalTime = section.FinalEstimatedHours;
|
||||
|
||||
var remainingTimeSpan = finalTime >= totalActivityTimeSpan
|
||||
? TimeSpan.FromTicks(finalTime.Ticks - totalActivityTimeSpan.Ticks)
|
||||
: TimeSpan.Zero;
|
||||
var users = section.Activities.GroupBy(x => x.UserId).Select(x =>
|
||||
{
|
||||
return new ProjectBoardDetailUserResponse()
|
||||
{
|
||||
UserId = x.Key,
|
||||
UserFullName = usersDict[x.Key],
|
||||
SpentTimeMinute = ((int)TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalMinutes).ToString(CultureInfo.InvariantCulture),
|
||||
Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse()
|
||||
{
|
||||
Date = h.StartDate.ToFarsi(),
|
||||
startTime = h.StartDate.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();
|
||||
var response = new ProjectBoardDetailResponse(users, $"{(int)totalTimeSpan.TotalHours}:{totalTimeSpan.Minutes:D2}");
|
||||
var response = new ProjectBoardDetailResponse(users, $"{(int)finalTime.TotalMinutes}",
|
||||
$"{(int)remainingTimeSpan.TotalMinutes:D2}");
|
||||
return OperationResult<ProjectBoardDetailResponse>.Success(response);
|
||||
}
|
||||
}
|
||||
@@ -217,4 +217,39 @@ public class TaskSection : EntityBase<Guid>
|
||||
var finalEstimate = FinalEstimatedHours;
|
||||
return totalSpent < finalEstimate;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// اگر زمان کار شده بیش از تایم تعیین شده باشد، تسک را متوقف میکند
|
||||
/// و EndDate را به طوری تنظیم میکند که کل زمان برابر با FinalEstimatedHours شود
|
||||
/// </summary>
|
||||
public void AutoStopIfOverTime()
|
||||
{
|
||||
if (Status != TaskSectionStatus.InProgress)
|
||||
return;
|
||||
|
||||
var activeActivity = _activities.FirstOrDefault(a => a.IsActive);
|
||||
if (activeActivity == null)
|
||||
return;
|
||||
|
||||
// محاسبه کل زمان صرف شده تا کنون (بدون فعالیت فعال)
|
||||
var totalTimeSpentExcludingActive = _activities.Where(a => !a.IsActive).Sum(a => a.GetTimeSpent().Ticks);
|
||||
var totalTimeSpentTimeSpan = TimeSpan.FromTicks(totalTimeSpentExcludingActive);
|
||||
var finalEstimate = FinalEstimatedHours;
|
||||
|
||||
// اگر زمان صرف شده (بدون فعالیت فعال) + فعالیت فعال > تایم تعیین شده
|
||||
var activeTimeSpent = activeActivity.GetTimeSpent();
|
||||
if (totalTimeSpentTimeSpan + activeTimeSpent > finalEstimate)
|
||||
{
|
||||
// محاسبه مدت زمانی که این فعالیت باید برای رسیدن به FinalEstimatedHours داشته باشد
|
||||
var remainingTime = finalEstimate - totalTimeSpentTimeSpan;
|
||||
|
||||
// EndDate = StartDate + remainingTime
|
||||
var adjustedEndDate = activeActivity.StartDate.Add(remainingTime);
|
||||
|
||||
// متوقف کردن فعالیت با EndDate دقیق شده
|
||||
activeActivity.StopWorkWithSpecificTime(adjustedEndDate, "متوقف خودکار - بیش از تایم تعیین شده");
|
||||
|
||||
UpdateStatus(TaskSectionStatus.Incomplete);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,6 +40,22 @@ public class TaskSectionActivity : EntityBase<Guid>
|
||||
IsActive = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// متوقف کردن فعالیت با مشخص کردن EndDate دقیق
|
||||
/// </summary>
|
||||
public void StopWorkWithSpecificTime(DateTime endDate, string? endNotes = null)
|
||||
{
|
||||
if (!IsActive)
|
||||
throw new InvalidOperationException("این فعالیت قبلاً متوقف شده است.");
|
||||
|
||||
if (endDate < StartDate)
|
||||
throw new InvalidOperationException("تاریخ پایان نمیتواند قبل از تاریخ شروع باشد.");
|
||||
|
||||
EndDate = endDate;
|
||||
EndNotes = endNotes;
|
||||
IsActive = false;
|
||||
}
|
||||
|
||||
public TimeSpan GetTimeSpent()
|
||||
{
|
||||
if (IsActive)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System.Collections;
|
||||
using GozareshgirProgramManager.Domain._Common;
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Entities;
|
||||
|
||||
@@ -11,4 +12,5 @@ public interface ITaskSectionRepository: IRepository<Guid,TaskSection>
|
||||
Task<TaskSection?> GetByIdWithFullDataAsync(Guid id, CancellationToken cancellationToken = default);
|
||||
|
||||
Task<List<TaskSection>> GetAssignedToUserAsync(long userId);
|
||||
Task<List<TaskSection>> GetActiveSectionsIncludeAllAsync(CancellationToken cancellationToken);
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Entities;
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Enums;
|
||||
using GozareshgirProgramManager.Domain.ProjectAgg.Repositories;
|
||||
using GozareshgirProgramManager.Infrastructure.Persistence._Common;
|
||||
using GozareshgirProgramManager.Infrastructure.Persistence.Context;
|
||||
@@ -35,4 +36,13 @@ public class TaskSectionRepository:RepositoryBase<Guid,TaskSection>,ITaskSection
|
||||
.Where(x => x.CurrentAssignedUserId == userId)
|
||||
.ToListAsync();
|
||||
}
|
||||
|
||||
public Task<List<TaskSection>> GetActiveSectionsIncludeAllAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
return _context.TaskSections
|
||||
.Where(x => x.Status == TaskSectionStatus.InProgress)
|
||||
.Include(x => x.Activities)
|
||||
.Include(x => x.AdditionalTimes)
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using System.Runtime.InteropServices;
|
||||
using GozareshgirProgramManager.Application._Common.Models;
|
||||
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AssignProject;
|
||||
using GozareshgirProgramManager.Application.Modules.Projects.Commands.AutoStopOverTimeTaskSections;
|
||||
using GozareshgirProgramManager.Application.Modules.Projects.Commands.ChangeStatusSection;
|
||||
using GozareshgirProgramManager.Application.Modules.Projects.Commands.CreateProject;
|
||||
using GozareshgirProgramManager.Application.Modules.Projects.Commands.DeleteProject;
|
||||
@@ -98,6 +99,9 @@ public class ProjectController : ProgramManagerBaseController
|
||||
[HttpGet("board")]
|
||||
public async Task<ActionResult<OperationResult<List<ProjectBoardListResponse>>>> GetProjectBoard([FromQuery] ProjectBoardListQuery query)
|
||||
{
|
||||
// اجرای Command برای متوقف کردن تسکهای overtime قبل از نمایش
|
||||
await _mediator.Send(new AutoStopOverTimeTaskSectionsCommand());
|
||||
|
||||
var res = await _mediator.Send(query);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -40,16 +40,15 @@ public class institutionContractController : AdminBaseController
|
||||
private readonly ITemporaryClientRegistrationApplication _clientRegistrationApplication;
|
||||
private readonly IPaymentGateway _paymentGateway;
|
||||
|
||||
private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks
|
||||
private static readonly ConcurrentDictionary<Guid, SemaphoreSlim> _locks
|
||||
= new ConcurrentDictionary<Guid, SemaphoreSlim>();
|
||||
|
||||
|
||||
|
||||
public institutionContractController(IInstitutionContractApplication institutionContractApplication,
|
||||
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
|
||||
IAccountApplication accountApplication, IEmployerApplication employerApplication,
|
||||
IWorkshopApplication workshopApplication, ITemporaryClientRegistrationApplication temporaryClientRegistration,
|
||||
ITemporaryClientRegistrationApplication clientRegistrationApplication,IHttpClientFactory httpClientFactory)
|
||||
ITemporaryClientRegistrationApplication clientRegistrationApplication, IHttpClientFactory httpClientFactory)
|
||||
{
|
||||
_institutionContractApplication = institutionContractApplication;
|
||||
_contractingPartyApplication = contractingPartyApplication;
|
||||
@@ -72,12 +71,13 @@ public class institutionContractController : AdminBaseController
|
||||
{
|
||||
return await _institutionContractApplication.GetList(searchModel);
|
||||
}
|
||||
|
||||
|
||||
[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
|
||||
.GetInstitutionContractSelectList(search,selected);
|
||||
.GetInstitutionContractSelectList(search, selected);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -225,9 +225,8 @@ public class institutionContractController : AdminBaseController
|
||||
{
|
||||
_institutionContractApplication.RemoveContract(id);
|
||||
return new OperationResult().Succcedded();
|
||||
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("deActive/{id}")]
|
||||
public ActionResult<OperationResult> DeActive(long id, string balance)
|
||||
{
|
||||
@@ -341,7 +340,7 @@ public class institutionContractController : AdminBaseController
|
||||
{
|
||||
var institutionContractViewModels =
|
||||
_institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" });
|
||||
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels);
|
||||
var bytes = InstitutionContractExcelGenerator.GenerateExcel(new List<InstitutionContractExcelViewModel>());
|
||||
return File(bytes,
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
$"قرارداد های مالی.xlsx");
|
||||
@@ -349,7 +348,7 @@ public class institutionContractController : AdminBaseController
|
||||
|
||||
[HttpPost("create/inquiry")]
|
||||
public async Task<ActionResult<OperationResult<ContractingPartyTempViewModel>>> CreateInquiry(
|
||||
[FromBody] CreateInquiryRequest request)
|
||||
[FromBody] InstitutionContractCreationInquiryRequest request)
|
||||
{
|
||||
var res = await _temporaryClientRegistration.CreateContractingPartyTemp(request.NationalCode,
|
||||
request.DateOfBirth,
|
||||
@@ -358,7 +357,8 @@ public class institutionContractController : AdminBaseController
|
||||
}
|
||||
|
||||
[HttpPost("workshop-service-calculator")]
|
||||
public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator([FromBody]CreateWorkshopTemp command)
|
||||
public ActionResult<WorkshopServiceCalculatorResponse> WorkshopServiceCalculator(
|
||||
[FromBody] CreateWorkshopTemp command)
|
||||
{
|
||||
var workshopTemp = new WorkshopTempViewModel
|
||||
{
|
||||
@@ -373,7 +373,7 @@ public class institutionContractController : AdminBaseController
|
||||
};
|
||||
|
||||
var response = _temporaryClientRegistration.GetInstitutionPlanForWorkshop(workshopTemp);
|
||||
|
||||
|
||||
var result = new WorkshopServiceCalculatorResponse
|
||||
{
|
||||
TotalAmount = response.OnlineAndInPersonSumAmountStr
|
||||
@@ -385,7 +385,8 @@ public class institutionContractController : AdminBaseController
|
||||
public async Task<ActionResult<InstitutionPlanCalculatorResponse>> InstitutionPlanCalculator(
|
||||
[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()
|
||||
{
|
||||
TotalAmountWithTax = res.OneTimeTotalPaymentStr,
|
||||
@@ -403,7 +404,6 @@ public class institutionContractController : AdminBaseController
|
||||
Obligation = res.OneTimeTotalPaymentStr,
|
||||
PaymentForOneMonth = res.SumOfWorkshopsPayment,
|
||||
DiscountedAmountForOneMonth = res.DiscountedAmountForOneMonth
|
||||
|
||||
};
|
||||
return result;
|
||||
}
|
||||
@@ -414,13 +414,13 @@ public class institutionContractController : AdminBaseController
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
[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);
|
||||
|
||||
if(!res.IsSuccedded)
|
||||
var res = await _institutionContractApplication.CreateAsync(command);
|
||||
|
||||
if (!res.IsSuccedded)
|
||||
throw new BadRequestException(res.Message);
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -448,22 +448,26 @@ public class institutionContractController : AdminBaseController
|
||||
|
||||
if (operationResult.IsSuccedded)
|
||||
transaction.Complete();
|
||||
|
||||
|
||||
return operationResult;
|
||||
}
|
||||
|
||||
[HttpPost("create/set-discount")]
|
||||
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request)
|
||||
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract(
|
||||
[FromBody] InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.CalculateDiscount(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("create/reset-discount")]
|
||||
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request)
|
||||
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate(
|
||||
[FromBody] InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.ResetDiscountCreate(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -484,15 +488,15 @@ public class institutionContractController : AdminBaseController
|
||||
var paymentRedirectUrl = Url.Action("ProcessPayment", "institutionContract", null, Request.Scheme);
|
||||
var callback = Url.Action("Verify", "General", null, Request.Scheme);
|
||||
var res = await _institutionContractApplication.VerifyOtpAndMakeGateway(command.Id, command.Code, callback);
|
||||
|
||||
|
||||
if (!res.IsSuccedded)
|
||||
return new OperationResult<string>().Failed(res.Message);
|
||||
|
||||
|
||||
var payUrl = _paymentGateway.GetStartPayUrl(res.Data);
|
||||
|
||||
|
||||
// URL کامل برای redirect شامل paymentUrl به عنوان query parameter
|
||||
var redirectUrl = $"{paymentRedirectUrl}?paymentUrl={Uri.EscapeDataString(payUrl)}";
|
||||
|
||||
|
||||
return new OperationResult<string>().Succcedded(redirectUrl);
|
||||
}
|
||||
|
||||
@@ -504,13 +508,12 @@ public class institutionContractController : AdminBaseController
|
||||
{
|
||||
return BadRequest("Payment URL is required");
|
||||
}
|
||||
|
||||
|
||||
// redirect به درگاه پرداخت
|
||||
return Redirect(paymentUrl);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
[HttpPost("/api/institutionContract/Verification/{id:guid}/send-otp")]
|
||||
[AllowAnonymous]
|
||||
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}")]
|
||||
public async Task<ActionResult<InstitutionContractExtensionInquiryResult>> ExtensionInquiry(long previousContractId)
|
||||
{
|
||||
var res= await _institutionContractApplication.GetExtensionInquiry(previousContractId);
|
||||
var res = await _institutionContractApplication.GetExtensionInquiry(previousContractId);
|
||||
return res;
|
||||
}
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("resend-verify-link/{institutionContractId}")]
|
||||
public async Task<OperationResult> ResendVerifyLink(long institutionContractId)
|
||||
{
|
||||
var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
[HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")]
|
||||
public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId)
|
||||
{
|
||||
{
|
||||
await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
[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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
[HttpGet("edit-old/{id}")]
|
||||
public ActionResult<EditInstitutionContract> GetEditOldDetails(long id)
|
||||
public ActionResult<EditInstitutionContract> GetEditOldDetails(long id)
|
||||
{
|
||||
var representativList = new List<RepresentativeViewModel>();
|
||||
var contractingPartyList = new List<PersonalContractingPartyViewModel>();
|
||||
var res = _institutionContractApplication.GetDetails(id);
|
||||
|
||||
|
||||
var representative = new RepresentativeViewModel
|
||||
{
|
||||
Id = res.RepresentativeId,
|
||||
@@ -683,13 +766,14 @@ public class institutionContractController : AdminBaseController
|
||||
res.ContractAmountOAlone = res.ContractAmountString;
|
||||
res.ValueAddedTaxStr = "0";
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("edit-old")]
|
||||
public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
var op = new OperationResult();
|
||||
var phoneNumber = command.ContactInformationList.FirstOrDefault(x =>
|
||||
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
|
||||
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
|
||||
@@ -703,57 +787,58 @@ public class institutionContractController : AdminBaseController
|
||||
//if (string.IsNullOrWhiteSpace(command.HasValueAddedTax))
|
||||
// command.HasValueAddedTax = "false";
|
||||
var result = _institutionContractApplication.Edit(command);
|
||||
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
|
||||
var counter = command.ContactInformationList.Count;
|
||||
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
|
||||
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x=>x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
|
||||
if (result.IsSuccedded && counter > 0)
|
||||
{
|
||||
|
||||
if (getOldContarct.Count > 0)
|
||||
{
|
||||
foreach (var item in getOldContarct)
|
||||
{
|
||||
_contactInfoApplication.RemoveContactInfo(item.Id);
|
||||
foreach (var phone in command.ContactInformationList)
|
||||
{
|
||||
if (phone.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = item.Id,
|
||||
PhoneType = phone.PhoneType,
|
||||
Position = phone.Position,
|
||||
PhoneNumber = phone.PhoneNumber,
|
||||
FnameLname = phone.FnameLname,
|
||||
SendSms = phone.SendSmsString == "true" ? true : false
|
||||
};
|
||||
_contactInfoApplication.Create(contactinfo);
|
||||
}
|
||||
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
|
||||
var counter = command.ContactInformationList.Count;
|
||||
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
|
||||
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" })
|
||||
.Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
|
||||
if (result.IsSuccedded && counter > 0)
|
||||
{
|
||||
if (getOldContarct.Count > 0)
|
||||
{
|
||||
foreach (var item in getOldContarct)
|
||||
{
|
||||
_contactInfoApplication.RemoveContactInfo(item.Id);
|
||||
foreach (var phone in command.ContactInformationList)
|
||||
{
|
||||
if (phone.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = item.Id,
|
||||
PhoneType = phone.PhoneType,
|
||||
Position = phone.Position,
|
||||
PhoneNumber = phone.PhoneNumber,
|
||||
FnameLname = phone.FnameLname,
|
||||
SendSms = phone.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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
if (!checkExistAccount)
|
||||
{
|
||||
|
||||
var createAcc = new RegisterAccount
|
||||
{
|
||||
Fullname = conractingParty.LName,
|
||||
@@ -774,48 +858,83 @@ public class institutionContractController : AdminBaseController
|
||||
};
|
||||
var res = _accountApplication.RegisterClient(createAcc);
|
||||
if (res.IsSuccedded)
|
||||
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId);
|
||||
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId,
|
||||
res.SendId);
|
||||
}
|
||||
}
|
||||
//Thread.Sleep(500);
|
||||
//for (int i = 0; i <= counter - 1; i++)
|
||||
//{
|
||||
// if (command.ContactInformationList[i].PhoneNumber != null)
|
||||
// {
|
||||
//Thread.Sleep(500);
|
||||
//for (int i = 0; i <= counter - 1; i++)
|
||||
//{
|
||||
// if (command.ContactInformationList[i].PhoneNumber != null)
|
||||
// {
|
||||
|
||||
// var contactinfo = new CreateContactInfo()
|
||||
// {
|
||||
// InstitutionContractId = result.SendId,
|
||||
// PhoneType = command.ContactInformationList[i].PhoneType,
|
||||
// Position = command.ContactInformationList[i].Position,
|
||||
// PhoneNumber = command.ContactInformationList[i].PhoneNumber,
|
||||
// FnameLname = command.ContactInformationList[i].FnameLname,
|
||||
// SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false
|
||||
// };
|
||||
// _contactInfoApplication.Create(contactinfo);
|
||||
// var contactinfo = new CreateContactInfo()
|
||||
// {
|
||||
// InstitutionContractId = result.SendId,
|
||||
// PhoneType = command.ContactInformationList[i].PhoneType,
|
||||
// Position = command.ContactInformationList[i].Position,
|
||||
// PhoneNumber = command.ContactInformationList[i].PhoneNumber,
|
||||
// FnameLname = command.ContactInformationList[i].FnameLname,
|
||||
// SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false
|
||||
// };
|
||||
// _contactInfoApplication.Create(contactinfo);
|
||||
|
||||
// }
|
||||
// Thread.Sleep(500);
|
||||
//}
|
||||
// }
|
||||
// Thread.Sleep(500);
|
||||
//}
|
||||
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet("print/{id}")]
|
||||
public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id)
|
||||
{
|
||||
var res =await _institutionContractApplication.PrintOneAsync(id);
|
||||
var res = await _institutionContractApplication.PrintOneAsync(id);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("mannual-verify/{id}")]
|
||||
public async Task<ActionResult<OperationResult>> VerifyInstitutionContractMannualy(long id)
|
||||
public async Task<ActionResult<OperationResult>> VerifyInstitutionContractManually(long id)
|
||||
{
|
||||
var res= await _institutionContractApplication.VerifyInstitutionContractManually(id);
|
||||
var res = await _institutionContractApplication.VerifyInstitutionContractManually(id);
|
||||
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
|
||||
{
|
||||
@@ -854,16 +973,11 @@ public class WorkshopServiceCalculatorResponse
|
||||
public string TotalAmount { get; set; }
|
||||
}
|
||||
|
||||
public record InstitutionPlanCalculatorRequest(double TotalAmountMonth,bool HasInPersonContract,
|
||||
public record InstitutionPlanCalculatorRequest(
|
||||
double TotalAmountMonth,
|
||||
bool HasInPersonContract,
|
||||
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 long ContractingPartyId { get; set; }
|
||||
|
||||
@@ -268,10 +268,10 @@
|
||||
href="#showmodal=@Url.Page("./Index", "Edit", new { Id = item.Id })">
|
||||
<i class="fa fa-edit faSize"></i>
|
||||
</a>
|
||||
<a class="btn btn-success pull-right m-rl-5 red"
|
||||
href="#showmodal=@Url.Page("./Index", "AccountWorkshop", new { item.Id })">
|
||||
<i class="fa fa-edit faSize"></i>
|
||||
</a>
|
||||
@* <a class="btn btn-success pull-right m-rl-5 red" *@
|
||||
@* href="#showmodal=@Url.Page("./Index", "AccountWorkshop", new { item.Id })"> *@
|
||||
@* <i class="fa fa-edit faSize"></i> *@
|
||||
@* </a> *@
|
||||
@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>
|
||||
|
||||
@@ -316,14 +316,14 @@ public class IndexModel : PageModel
|
||||
});
|
||||
}
|
||||
|
||||
public IActionResult OnGetAccountWorkshop(long id)
|
||||
{
|
||||
var res = _accountApplication.WorkshopList(id);
|
||||
|
||||
|
||||
|
||||
return Partial("AccountLeftWork", res);
|
||||
}
|
||||
// public IActionResult OnGetAccountWorkshop(long id)
|
||||
// {
|
||||
// var res = _accountApplication.WorkshopList(id);
|
||||
//
|
||||
//
|
||||
//
|
||||
// return Partial("AccountLeftWork", res);
|
||||
// }
|
||||
|
||||
public IActionResult OnPostCreateAccountLeftWork(
|
||||
List<WorkshopAccountlistViewModel> workshopAccountlistViewModel,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
using System.Drawing;
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
using CompanyManagement.Infrastructure.Excel.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.Employer;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
@@ -38,6 +39,7 @@ public class IndexModel : PageModel
|
||||
private readonly IInstitutionContractApplication _institutionContract;
|
||||
private readonly ILeftWorkApplication _leftWorkApplication;
|
||||
private readonly IRepresentativeApplication _representativeApplication;
|
||||
private readonly IInstitutionContractRepository _institutionContractRepository;
|
||||
|
||||
|
||||
private readonly string _viewName;
|
||||
@@ -60,7 +62,7 @@ public class IndexModel : PageModel
|
||||
IPersonalContractingPartyApp contractingPartyApplication,
|
||||
IRepresentativeApplication representativeApplication, IInstitutionContractApplication institutionContract,
|
||||
ILeftWorkApplication leftWorkApplication
|
||||
, IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication)
|
||||
, IContactInfoApplication contactInfoApplication, IAccountApplication accountApplication, IInstitutionContractRepository institutionContractRepository)
|
||||
|
||||
{
|
||||
_workshopApplication = workshopApplication;
|
||||
@@ -71,6 +73,7 @@ public class IndexModel : PageModel
|
||||
_leftWorkApplication = leftWorkApplication;
|
||||
_contactInfoApplication = contactInfoApplication;
|
||||
_accountApplication = accountApplication;
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
}
|
||||
|
||||
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" });
|
||||
|
||||
institutionContractViewModels= institutionContractViewModels.GroupBy(x=>x.ContractingPartyId).Select(g=>g.MaxBy(x=>x.ContractStartGr)).ToList();
|
||||
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels);
|
||||
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(_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,
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
$"قرارداد های مالی.xlsx");
|
||||
|
||||
@@ -43,6 +43,9 @@
|
||||
case TypeOfSmsSetting.Warning:
|
||||
<h5 class="modal-title">ایجاد پیامک هشدار قضائی</h5>
|
||||
break;
|
||||
case TypeOfSmsSetting.InstitutionContractConfirm:
|
||||
<h5 class="modal-title">ایجاد پیامک یادآور تایید قراداد</h5>
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -41,6 +41,10 @@
|
||||
case TypeOfSmsSetting.Warning:
|
||||
<h5 class="modal-title">ویرایش پیامک هشدار قضائی</h5>
|
||||
break;
|
||||
case TypeOfSmsSetting.InstitutionContractConfirm:
|
||||
<h5 class="modal-title">ویرایش پیامک یادآور تایید قراداد</h5>
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="بستن">
|
||||
@@ -100,8 +104,8 @@
|
||||
success: function (response) {
|
||||
if(response.isSuccess){
|
||||
$.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message);
|
||||
$('.close').click();
|
||||
|
||||
|
||||
$('.close').click();
|
||||
setTimeout(function () {
|
||||
if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractDebtReminder'){
|
||||
$('#institutionContractDebtReminderTab').click();
|
||||
@@ -114,14 +118,16 @@
|
||||
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){
|
||||
$('#warningTab').click();
|
||||
|
||||
}else if(typeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){
|
||||
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){
|
||||
|
||||
$('#institutionContractConfirmTab').click();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}, 500);
|
||||
}, 700);
|
||||
|
||||
}else{
|
||||
$.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message);
|
||||
}
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
</form>
|
||||
<div class="lineDiv"></div>
|
||||
<div class="row m-t-20">
|
||||
<div class="col-4"></div>
|
||||
<div class="col-2">
|
||||
<div class="col-md-4 visible-md visible-lg"></div>
|
||||
<div class="col-6 col-md-2">
|
||||
<form asp-page-handler="UploadFrontEnd" id="12" method="post">
|
||||
<button type="submit"
|
||||
class="btn btn-danger"
|
||||
@@ -84,14 +84,14 @@
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<div class="col-6 col-md-2">
|
||||
<button type="button" class="btn btn-outline-secondary"
|
||||
data-bs-toggle="modal"
|
||||
data-bs-target="#logModal">
|
||||
مشاهده لاگ Deploy
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-4"></div>
|
||||
<div class="col-md-4 visible-md visible-lg"></div>
|
||||
</div>
|
||||
<div class="lineDiv"></div>
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
private readonly IOnlinePayment _onlinePayment;
|
||||
private readonly IFaceEmbeddingService _faceEmbeddingService;
|
||||
private readonly IAuthHelper _authHelper;
|
||||
private readonly IInstitutionContractApplication _institutionContractApplication;
|
||||
|
||||
|
||||
[BindProperty] public IFormFile File { get; set; }
|
||||
@@ -77,7 +78,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService,
|
||||
CompanyContext context, AccountContext accountContext, IHttpClientFactory httpClientFactory,
|
||||
IOptions<AppSettingConfiguration> appSetting,
|
||||
ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment, IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper)
|
||||
ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment,
|
||||
IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper, IInstitutionContractApplication institutionContractApplication)
|
||||
{
|
||||
_application = application;
|
||||
_rollCallDomainService = rollCallDomainService;
|
||||
@@ -88,6 +90,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
_onlinePayment = onlinePayment;
|
||||
_faceEmbeddingService = faceEmbeddingService;
|
||||
_authHelper = authHelper;
|
||||
_institutionContractApplication = institutionContractApplication;
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
||||
}
|
||||
|
||||
@@ -152,31 +155,60 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
{
|
||||
//await UpdateInstitutionContract();
|
||||
//await UpdateFaceEmbeddingNames();
|
||||
await SetInstitutionContractSigningType();
|
||||
//await SetInstitutionContractSigningType();
|
||||
await ReActivateInstitution();
|
||||
ViewData["message"] = "تومام یک";
|
||||
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()
|
||||
{
|
||||
var query = _context.InstitutionContractSet
|
||||
.Where(x=>x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify);
|
||||
|
||||
|
||||
var otpSigned = query.Where(x=>x.VerifierFullName != null && x.LawId != 0).ToList();
|
||||
.Where(x => x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify);
|
||||
|
||||
|
||||
var otpSigned = query.Where(x => x.VerifierFullName != null && x.LawId != 0).ToList();
|
||||
foreach (var institutionContract in otpSigned)
|
||||
{
|
||||
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)
|
||||
{
|
||||
institutionContract.SetSigningType(InstitutionContractSigningType.Legacy);
|
||||
}
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
|
||||
}
|
||||
|
||||
public async Task<IActionResult> OnPostShiftDateNew2()
|
||||
@@ -326,30 +358,51 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
//TranslateCode(result?.ErrorCode);
|
||||
return Page();
|
||||
}
|
||||
|
||||
[DisableConcurrentExecution(timeoutInSeconds: 120)]
|
||||
public async Task<IActionResult> OnPostUploadFrontEnd(CancellationToken cancellationToken)
|
||||
{
|
||||
var validAccountId = _authHelper.CurrentAccountId();
|
||||
if (validAccountId == 2 || validAccountId == 322)
|
||||
{
|
||||
var batPath = @"C:\next-ui\deploy-next-ui.bat";
|
||||
//var batPath = @"C:\next-ui\deploy-next-ui.bat";
|
||||
|
||||
//var psi = new ProcessStartInfo
|
||||
//{
|
||||
// FileName = batPath,
|
||||
// UseShellExecute = true, // خیلی مهم
|
||||
// Verb = "runas", // اجرای Administrator
|
||||
// CreateNoWindow = true,
|
||||
// WindowStyle = ProcessWindowStyle.Hidden
|
||||
//};
|
||||
|
||||
//Process.Start(psi);
|
||||
|
||||
var psi = new ProcessStartInfo
|
||||
{
|
||||
FileName = batPath,
|
||||
UseShellExecute = true, // خیلی مهم
|
||||
Verb = "runas", // اجرای Administrator
|
||||
CreateNoWindow = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
FileName = "cmd.exe",
|
||||
Arguments = "/c schtasks /run /tn \"DeployNextUI\"",
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true
|
||||
};
|
||||
|
||||
Process.Start(psi);
|
||||
|
||||
//var psi = new ProcessStartInfo
|
||||
//{
|
||||
// FileName = @"C:\next-ui\deploy-next-ui.bat",
|
||||
// UseShellExecute = false,
|
||||
// CreateNoWindow = false
|
||||
//};
|
||||
|
||||
//Process.Start(psi);
|
||||
|
||||
|
||||
TempData["Message"] = "فرآیند Deploy شروع شد. لاگ را بررسی کنید.";
|
||||
return RedirectToPage();
|
||||
}
|
||||
return Forbid();
|
||||
|
||||
return Forbid();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -375,13 +428,10 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
{
|
||||
contractingPartyIdList.Add(employer.Employer.ContractingPartyId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (contractingPartyIdList.Count > 0)
|
||||
{
|
||||
|
||||
|
||||
if (contractingPartyIdList.Count == 1)
|
||||
{
|
||||
workshop.AddContractingPartyId(contractingPartyIdList[0]);
|
||||
@@ -402,7 +452,6 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
|
||||
ViewData["message"] = "آی دی های طرف حساب اضافه شد";
|
||||
return Page();
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -421,8 +470,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
var content = System.IO.File.ReadAllText(logPath, Encoding.UTF8);
|
||||
return Content(content);
|
||||
}
|
||||
return Content("شما مجاز به دیدن لاگ نیستید");
|
||||
|
||||
return Content("شما مجاز به دیدن لاگ نیستید");
|
||||
}
|
||||
|
||||
|
||||
@@ -1035,7 +1084,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
||||
x.PersonnelCount,
|
||||
x.Price, x.InstitutionContractWorkshopGroupId,
|
||||
group,
|
||||
x.WorkshopId.Value,x.id);
|
||||
x.WorkshopId.Value, x.id);
|
||||
entity.SetEmployers(x.Employers.Select(e => e.EmployerId).ToList());
|
||||
|
||||
return entity;
|
||||
|
||||
39
ServiceHost/Areas/Client/Controllers/ContractController.cs
Normal file
39
ServiceHost/Areas/Client/Controllers/ContractController.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
25
ServiceHost/Areas/Client/Controllers/EmployeeController.cs
Normal file
25
ServiceHost/Areas/Client/Controllers/EmployeeController.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -19,4 +19,15 @@ public class InsuranceController:ClientBaseController
|
||||
var insurances =await _insuranceListApplication.GetInsuranceClientList(searchModel);
|
||||
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
|
||||
{
|
||||
}
|
||||
|
||||
172
ServiceHost/Areas/Client/Controllers/LeaveController.cs
Normal file
172
ServiceHost/Areas/Client/Controllers/LeaveController.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
using _0_Framework.Application;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||
using CompanyManagment.App.Contracts.InsuranceList;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ServiceHost.BaseControllers;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace ServiceHost.Areas.Client.Controllers;
|
||||
|
||||
public class LeaveController : ClientBaseController
|
||||
{
|
||||
private readonly ILeaveApplication _leaveApplication;
|
||||
private long _workshopId;
|
||||
public LeaveController(ILeaveApplication leaveApplication, IAuthHelper authHelper)
|
||||
{
|
||||
_leaveApplication = leaveApplication;
|
||||
_workshopId = authHelper.GetWorkshopId();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست مرخصی ها
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("GetLeaveList")]
|
||||
public async Task<ActionResult<LeaveListMultipleDto>> GetLeaveList(LeaveListSearchModel searchModel)
|
||||
{
|
||||
var result = new LeaveListMultipleDto();
|
||||
searchModel.WorkshopId = _workshopId;
|
||||
if (searchModel.EmployeeId > 0)
|
||||
{
|
||||
//لیست گروه بندی شده
|
||||
result.GroupLeaveListDto = await _leaveApplication.GetGroupList(searchModel);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.YearStr) && !string.IsNullOrWhiteSpace(searchModel.MonthStr))
|
||||
{
|
||||
TimeSpan timeSpan = _leaveApplication.SumOfEmployeeLeaveTimeSpanInDates(_workshopId, searchModel.EmployeeId, searchModel.YearStr, searchModel.MonthStr, searchModel.LeaveType);
|
||||
//مجموع مرخصی پرسنل
|
||||
result.SumOfEmployeeleaves = timeSpan.ToFarsiDaysAndHoursAndMinutes();
|
||||
}
|
||||
|
||||
return Ok(result);
|
||||
}
|
||||
//لیست نرمال PageResult
|
||||
result.leaveListDto = await _leaveApplication.GetList(searchModel);
|
||||
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}")]
|
||||
public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
|
||||
{
|
||||
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
|
||||
return leavePrint;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// پرینت گروهی
|
||||
/// </summary>
|
||||
/// <param name="ids"></param>
|
||||
/// <returns></returns>
|
||||
[HttpGet("print")]
|
||||
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids, LeaveListSearchModel searchModel)
|
||||
{
|
||||
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
|
||||
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,
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -91,9 +91,9 @@
|
||||
</span>
|
||||
</a>
|
||||
<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.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.PersonnelStatusGroupReportPermissionCode"><a class="selectLi disable" @*onclick="AjaxUrlContentModal('@Url.Page("/Company/Workshop/Index", "ContractCheckoutYearlyStatus")');"*@><span>گزارش وضعیت گروهی پرسنل</span></a></li>
|
||||
</ul>
|
||||
|
||||
@@ -75,7 +75,7 @@ public class GeneralController : GeneralBaseController
|
||||
}
|
||||
|
||||
[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))
|
||||
{
|
||||
@@ -133,7 +133,12 @@ public class GeneralController : GeneralBaseController
|
||||
DigitalReceipt = payResponse.digitalreceipt
|
||||
};
|
||||
|
||||
|
||||
var verifyRes = await _paymentGateway.Verify(verifyCommand, CancellationToken.None);
|
||||
#if DEBUG
|
||||
verifyRes.IsSuccess = true;
|
||||
#endif
|
||||
|
||||
_financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
|
||||
|
||||
if (verifyRes.IsSuccess)
|
||||
@@ -158,14 +163,18 @@ public class GeneralController : GeneralBaseController
|
||||
payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(),
|
||||
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
|
||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
|
||||
foreach (var editFinancialInvoiceItem in financialItems)
|
||||
{
|
||||
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,InstitutionContractSigningType.OtpBased);
|
||||
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,
|
||||
InstitutionContractSigningType.OtpBased);
|
||||
}
|
||||
|
||||
var financialInstallmentItems = financialInvoice.Items
|
||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
||||
|
||||
@@ -174,7 +183,8 @@ public class GeneralController : GeneralBaseController
|
||||
var institutionContractId =
|
||||
await _institutionContractApplication.GetIdByInstallmentId(
|
||||
editFinancialInvoiceItem.EntityId);
|
||||
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.OtpBased);
|
||||
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,
|
||||
InstitutionContractSigningType.OtpBased);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -289,6 +289,7 @@ builder.Services.AddCors(options =>
|
||||
"http://localhost:3000",
|
||||
"http://localhost:4000",
|
||||
"http://localhost:4001",
|
||||
"http://localhost:4002",
|
||||
"http://localhost:3001",
|
||||
"https://gozareshgir.ir",
|
||||
"https://dad-mehr.ir",
|
||||
@@ -414,7 +415,6 @@ if (app.Environment.IsDevelopment())
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
//Create Http Pipeline
|
||||
|
||||
#region Create Http Pipeline
|
||||
|
||||
Reference in New Issue
Block a user