Compare commits
43 Commits
Feature/Cl
...
Feature/Cl
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ed1907075 | |||
| efcf40eea8 | |||
|
|
d2acf59eba | ||
|
|
3139552217 | ||
|
|
dc4c8e9a26 | ||
|
|
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 | |||
| 30b4f52896 | |||
| 134466547e | |||
| a191968c15 | |||
| d740c36dc6 |
@@ -24,9 +24,13 @@ public class CustomExceptionHandler : IExceptionHandler
|
|||||||
|
|
||||||
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken)
|
public async ValueTask<bool> TryHandleAsync(HttpContext context, Exception exception, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_logger.LogError(
|
_logger.LogError(exception,
|
||||||
"Error Message: {exceptionMessage}, Time of occurrence {time}",
|
"Error Message: {exceptionMessage}, Type: {exceptionType}, Time: {time}, Path: {path}, TraceId: {traceId}",
|
||||||
exception.Message, DateTime.UtcNow);
|
exception.Message,
|
||||||
|
exception.GetType().FullName,
|
||||||
|
DateTime.UtcNow,
|
||||||
|
context.Request.Path,
|
||||||
|
context.TraceIdentifier);
|
||||||
|
|
||||||
(string Detail, string Title, int StatusCode, Dictionary<string, object>? Extra) details = exception switch
|
(string Detail, string Title, int StatusCode, Dictionary<string, object>? Extra) details = exception switch
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,4 +17,9 @@
|
|||||||
<ProjectReference Include="..\..\WorkFlow\Infrastructure\WorkFlow.Infrastructure.Config\WorkFlow.Infrastructure.Config.csproj" />
|
<ProjectReference Include="..\..\WorkFlow\Infrastructure\WorkFlow.Infrastructure.Config\WorkFlow.Infrastructure.Config.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Serilog.AspNetCore" Version="10.0.0" />
|
||||||
|
<PackageReference Include="Serilog.Sinks.File" Version="7.0.0" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -15,19 +15,21 @@ public class JobSchedulerRegistrator
|
|||||||
private static DateTime? _lastRunCreateTransaction;
|
private static DateTime? _lastRunCreateTransaction;
|
||||||
private static DateTime? _lastRunSendMonthlySms;
|
private static DateTime? _lastRunSendMonthlySms;
|
||||||
private readonly ISmsService _smsService;
|
private readonly ISmsService _smsService;
|
||||||
|
private readonly ILogger<JobSchedulerRegistrator> _logger;
|
||||||
|
|
||||||
|
|
||||||
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService)
|
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger)
|
||||||
{
|
{
|
||||||
_smsReminder = smsReminder;
|
_smsReminder = smsReminder;
|
||||||
_backgroundJobClient = backgroundJobClient;
|
_backgroundJobClient = backgroundJobClient;
|
||||||
_institutionContractRepository = institutionContractRepository;
|
_institutionContractRepository = institutionContractRepository;
|
||||||
_smsService = smsService;
|
_smsService = smsService;
|
||||||
|
_logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Register()
|
public void Register()
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("hangfire Started");
|
||||||
RecurringJob.AddOrUpdate(
|
RecurringJob.AddOrUpdate(
|
||||||
"InstitutionContract.CreateFinancialTransaction",
|
"InstitutionContract.CreateFinancialTransaction",
|
||||||
() => CreateFinancialTransaction(),
|
() => CreateFinancialTransaction(),
|
||||||
@@ -68,7 +70,7 @@ public class JobSchedulerRegistrator
|
|||||||
var now =DateTime.Now;
|
var now =DateTime.Now;
|
||||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||||
|
_logger.LogInformation("CreateFinancialTransaction job run");
|
||||||
if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
|
if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
|
||||||
now.Date != _lastRunCreateTransaction?.Date)
|
now.Date != _lastRunCreateTransaction?.Date)
|
||||||
{
|
{
|
||||||
@@ -113,7 +115,7 @@ public class JobSchedulerRegistrator
|
|||||||
var now = DateTime.Now;
|
var now = DateTime.Now;
|
||||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||||
|
_logger.LogInformation("SendFirstDayOfMonthSms job run");
|
||||||
if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 &&
|
if (now.Date == endOfMonthGr.Date && now.Hour >= 10 && now.Hour < 11 &&
|
||||||
now.Date != _lastRunSendMonthlySms?.Date)
|
now.Date != _lastRunSendMonthlySms?.Date)
|
||||||
{
|
{
|
||||||
@@ -141,6 +143,7 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
||||||
public async System.Threading.Tasks.Task SendReminderSms()
|
public async System.Threading.Tasks.Task SendReminderSms()
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("SendReminderSms job run");
|
||||||
await _institutionContractRepository.SendReminderSmsForBackgroundTask();
|
await _institutionContractRepository.SendReminderSmsForBackgroundTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,6 +154,7 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
public async System.Threading.Tasks.Task SendBlockSms()
|
public async System.Threading.Tasks.Task SendBlockSms()
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("SendBlockSms job run");
|
||||||
await _institutionContractRepository.SendBlockSmsForBackgroundTask();
|
await _institutionContractRepository.SendBlockSmsForBackgroundTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -162,6 +166,7 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("SendInstitutionContractConfirmSms job run");
|
||||||
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
|
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,9 +17,37 @@ using Microsoft.AspNetCore.Identity;
|
|||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
using PersonalContractingParty.Config;
|
using PersonalContractingParty.Config;
|
||||||
using Query.Bootstrapper;
|
using Query.Bootstrapper;
|
||||||
|
using Serilog;
|
||||||
|
using Serilog.Events;
|
||||||
using Shared.Contracts.PmUser.Queries;
|
using Shared.Contracts.PmUser.Queries;
|
||||||
using WorkFlow.Infrastructure.Config;
|
using WorkFlow.Infrastructure.Config;
|
||||||
|
|
||||||
|
var logDirectory = @"C:\Logs\Hangfire\BackgroundInstitutionContract\";
|
||||||
|
|
||||||
|
if (!Directory.Exists(logDirectory))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(logDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.Logger = new LoggerConfiguration()
|
||||||
|
//NO EF Core log
|
||||||
|
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
|
||||||
|
|
||||||
|
//NO DbCommand log
|
||||||
|
.MinimumLevel.Override("Microsoft.EntityFrameworkCore.Database.Command", LogEventLevel.Warning)
|
||||||
|
|
||||||
|
//NO Microsoft Public log
|
||||||
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
|
||||||
|
//.MinimumLevel.Information()
|
||||||
|
.WriteTo.File(
|
||||||
|
path: Path.Combine(logDirectory, "institution-contract-log-.txt"),
|
||||||
|
rollingInterval: RollingInterval.Day,
|
||||||
|
retainedFileCountLimit: 30,
|
||||||
|
shared: true,
|
||||||
|
outputTemplate:
|
||||||
|
"{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"
|
||||||
|
).CreateLogger();
|
||||||
|
|
||||||
var builder = WebApplication.CreateBuilder(args);
|
var builder = WebApplication.CreateBuilder(args);
|
||||||
var hangfireConnectionString = builder.Configuration.GetConnectionString("HangfireDb");
|
var hangfireConnectionString = builder.Configuration.GetConnectionString("HangfireDb");
|
||||||
builder.Services.AddHangfire(x => x.UseSqlServerStorage(hangfireConnectionString));
|
builder.Services.AddHangfire(x => x.UseSqlServerStorage(hangfireConnectionString));
|
||||||
@@ -59,7 +87,13 @@ builder.Services.AddHttpClient();
|
|||||||
builder.Services.AddHttpContextAccessor();
|
builder.Services.AddHttpContextAccessor();
|
||||||
builder.Services.AddSignalR();
|
builder.Services.AddSignalR();
|
||||||
|
|
||||||
|
|
||||||
|
builder.Host.UseSerilog();
|
||||||
|
Log.Information("SERILOG STARTED SUCCESSFULLY");
|
||||||
|
|
||||||
|
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
|
|
||||||
app.MapHub<SendSmsHub>("/sendSmsHub");
|
app.MapHub<SendSmsHub>("/sendSmsHub");
|
||||||
|
|
||||||
app.MapHangfireDashboard();
|
app.MapHangfireDashboard();
|
||||||
|
|||||||
@@ -25,8 +25,8 @@
|
|||||||
|
|
||||||
//mahan Docker
|
//mahan Docker
|
||||||
//"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;",
|
//"MesbahDb": "Data Source=localhost,5069;Initial Catalog=mesbah_db;User ID=sa;Password=YourPassword123;TrustServerCertificate=True;",
|
||||||
//"HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;",
|
"HangfireDb": "Data Source=.;Initial Catalog=hangfire_db;Integrated Security=True;TrustServerCertificate=true;",
|
||||||
"HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;"
|
//"HangfireDb": "Data Source=185.208.175.186;Initial Catalog=hangfire_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;"
|
||||||
},
|
},
|
||||||
|
|
||||||
"GoogleRecaptchaV3": {
|
"GoogleRecaptchaV3": {
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
|||||||
|
|
||||||
Employee GetIgnoreQueryFilter(long id);
|
Employee GetIgnoreQueryFilter(long id);
|
||||||
|
|
||||||
|
[Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")]
|
||||||
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
||||||
|
|
||||||
|
|
||||||
@@ -76,7 +77,33 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
|||||||
#region Api
|
#region Api
|
||||||
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
|
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
|
||||||
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
||||||
#endregion
|
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست پرسنل کلاینت
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت تجمیعی پرسنل کلاینت
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سلکت لیست پرسنل های کارگاه کلاینت
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -159,4 +159,5 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<long> GetIdByInstallmentId(long installmentId);
|
Task<long> GetIdByInstallmentId(long installmentId);
|
||||||
|
Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId);
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
|||||||
{
|
{
|
||||||
EditLeave GetDetails(long id);
|
EditLeave GetDetails(long id);
|
||||||
List<LeaveViewModel> search(LeaveSearchModel searchModel);
|
List<LeaveViewModel> search(LeaveSearchModel searchModel);
|
||||||
OperationResult RemoveLeave(long id);
|
Task<OperationResult> RemoveLeave(long id);
|
||||||
|
|
||||||
#region Pooya
|
#region Pooya
|
||||||
List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
|
List<LeaveViewModel> GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
|
||||||
@@ -54,4 +54,11 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
|||||||
/// <param name="searchModel"></param>
|
/// <param name="searchModel"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<LeaveListPrintDto> ListPrint(List<long> ids);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
using System.Diagnostics.Contracts;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست پرسنل کلاینت
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
public class EmployeeListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کامل پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد پرسنلی
|
||||||
|
/// </summary>
|
||||||
|
public int PersonnelCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت تاهل
|
||||||
|
/// </summary>
|
||||||
|
public string MaritalStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره شناسنامه
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ تولد
|
||||||
|
/// </summary>
|
||||||
|
public string DateOfBirth { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پدر
|
||||||
|
/// </summary>
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تعداد فرزندان
|
||||||
|
/// </summary>
|
||||||
|
public string NumberOfChildren { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آخرین تاریخ شروع بکار قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public string LatestContractStartDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ ترک کار قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public string ContractLeftDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آخرین تاریخ شروع بکار بیمه
|
||||||
|
/// </summary>
|
||||||
|
public string LatestInsuranceStartDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ ترک کار بیمه
|
||||||
|
/// </summary>
|
||||||
|
public string InsuranceLeftDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دارای قرارداد است؟
|
||||||
|
/// </summary>
|
||||||
|
public bool HasContract { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دارای بیمه است؟
|
||||||
|
/// </summary>
|
||||||
|
public bool HasInsurance { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت پرسنل در کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سرچ مدل پرسنل
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
public class EmployeeSearchModelDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت پرسنل در کارگاه
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
public enum EmployeeStatusInWorkshop
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد شده توسط کارفرما
|
||||||
|
/// </summary>
|
||||||
|
CreatedByClient,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ترک کار موقت
|
||||||
|
/// </summary>
|
||||||
|
LefWorkTemp,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// در حال کار در کارگاه
|
||||||
|
/// </summary>
|
||||||
|
Working,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// قطع ارتباط و ترک کار کامب
|
||||||
|
/// </summary>
|
||||||
|
HasLeft,
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت تجمیعی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public class PrintAllEmployeesInfoDtoClient
|
||||||
|
{
|
||||||
|
public PrintAllEmployeesInfoDtoClient(EmployeeListDto source)
|
||||||
|
{
|
||||||
|
Id = source.Id;
|
||||||
|
EmployeeFullName = source.EmployeeFullName;
|
||||||
|
PersonnelCode = source.PersonnelCode;
|
||||||
|
MaritalStatus = source.MaritalStatus;
|
||||||
|
NationalCode = source.NationalCode;
|
||||||
|
IdNumber = source.IdNumber;
|
||||||
|
DateOfBirth = source.DateOfBirth;
|
||||||
|
FatherName = source.FatherName;
|
||||||
|
NumberOfChildren = source.NumberOfChildren;
|
||||||
|
LatestContractStartDate = source.LatestContractStartDate;
|
||||||
|
ContractLeftDate = source.ContractLeftDate;
|
||||||
|
LatestInsuranceStartDate = source.LatestInsuranceStartDate;
|
||||||
|
InsuranceLeftDate = source.InsuranceLeftDate;
|
||||||
|
EmployeeStatusInWorkshop = source.EmployeeStatusInWorkshop;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کامل پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد پرسنلی
|
||||||
|
/// </summary>
|
||||||
|
public int PersonnelCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت تاهل
|
||||||
|
/// </summary>
|
||||||
|
public string MaritalStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره شناسنامه
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ تولد
|
||||||
|
/// </summary>
|
||||||
|
public string DateOfBirth { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پدر
|
||||||
|
/// </summary>
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تعداد فرزندان
|
||||||
|
/// </summary>
|
||||||
|
public string NumberOfChildren { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آخرین تاریخ شروع بکار قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public string LatestContractStartDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ ترک کار قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public string ContractLeftDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آخرین تاریخ شروع بکار بیمه
|
||||||
|
/// </summary>
|
||||||
|
public string LatestInsuranceStartDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ ترک کار بیمه
|
||||||
|
/// </summary>
|
||||||
|
public string InsuranceLeftDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت پرسنل در کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public EmployeeStatusInWorkshop EmployeeStatusInWorkshop { get; set; }
|
||||||
|
}
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using CompanyManagment.App.Contracts.Employee.DTO;
|
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
|
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.Employee;
|
namespace CompanyManagment.App.Contracts.Employee;
|
||||||
|
|
||||||
@@ -73,6 +75,7 @@ public interface IEmployeeApplication
|
|||||||
long workshopId);
|
long workshopId);
|
||||||
Task<OperationResult> EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command);
|
Task<OperationResult> EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command);
|
||||||
|
|
||||||
|
[Obsolete("این متد منسوخ شده است و از متد WorkedEmployeesInWorkshopSelectList استفاده کنید")]
|
||||||
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
Task<List<EmployeeSelectListViewModel>> WorkedEmployeesInWorkshopSelectList(long workshopId);
|
||||||
|
|
||||||
Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate);
|
Task<OperationResult<EmployeeDataFromApiViewModel>> GetEmployeeDataFromApi(string nationalCode, string birthDate);
|
||||||
@@ -95,6 +98,59 @@ public interface IEmployeeApplication
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
||||||
|
|
||||||
#endregion
|
/// <summary>
|
||||||
|
/// لیست کل پرسنل کلاینت
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست پرسنل کلاینت
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت تجمیعی پرسنل کلاینت
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetClientEmployeeListSearchModel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public class 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 IsInPersonContract { get; set; }
|
||||||
|
|
||||||
public bool IsOldContract { get; set; }
|
public bool IsOldContract { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ قسط
|
||||||
|
/// </summary>
|
||||||
|
public double InstallmentAmount { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class InstitutionContractListWorkshop
|
public class InstitutionContractListWorkshop
|
||||||
|
|||||||
@@ -18,6 +18,16 @@ public class InstitutionContractPaymentOneTimeViewModel
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string PaymentAmount { get; set; }
|
public string PaymentAmount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مجموع مبالغ بدون تخفیف
|
||||||
|
/// </summary>
|
||||||
|
public string TotalAmountWithoutDiscount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ یک ماه بدون تخفیف
|
||||||
|
/// </summary>
|
||||||
|
public string OneMonthPaymentWithoutDiscount { get; set; }
|
||||||
|
|
||||||
public string DiscountedAmount { get; set; }
|
public string DiscountedAmount { get; set; }
|
||||||
public int DiscountPercetage { get; set; }
|
public int DiscountPercetage { get; set; }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ public interface ILeaveApplication
|
|||||||
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
|
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
|
||||||
|
|
||||||
OperationResult RemoveLeave(long id);
|
OperationResult RemoveLeave(long id);
|
||||||
|
Task<OperationResult> RemoveLeaveAsync(long id);
|
||||||
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
|
LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId);
|
||||||
List<LeaveMainViewModel> searchClient(LeaveSearchModel search);
|
List<LeaveMainViewModel> searchClient(LeaveSearchModel search);
|
||||||
|
|
||||||
@@ -71,6 +72,56 @@ public interface ILeaveApplication
|
|||||||
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||||
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
|
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// چک میکند که تاریخ وارد شده در شروع مرخصی تعطیل است یا خیر
|
||||||
|
/// دارای/فاقد اعتبار فیش غیررسمی را چک میکند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startLeaveDate"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد مرخصی از ای پی آی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult> CreateLeave(CreateLeaveDto command);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// چک میکند که آیا پرسنل حضور غیاب دارای شیفت گردشی دارد یا خیر
|
||||||
|
/// اگر داشت دریافت شیف گردشی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <param name="employeeId"></param>
|
||||||
|
/// <param name="startLeaveDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId, long employeeId, string startLeaveDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<LeaveListPrintDto> ListPrint(List<long> ids);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی ساعتی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startHours"></param>
|
||||||
|
/// <param name="endHours"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<string> GetHourlyLeaveDuration(string startHours, string endHours);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی روزانه
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <param name="endDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<string> GetDailyLeaveDuration(string startDate, string endDate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LeavePrintResponseViewModel
|
public class LeavePrintResponseViewModel
|
||||||
|
|||||||
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; }
|
||||||
|
|
||||||
|
}
|
||||||
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; }
|
||||||
|
}
|
||||||
@@ -124,7 +124,7 @@ namespace CompanyManagment.App.Contracts.RollCall
|
|||||||
/// <param name="workshopId"></param>
|
/// <param name="workshopId"></param>
|
||||||
/// <param name="command"></param>
|
/// <param name="command"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||||
}
|
}
|
||||||
public class ReCalculateRollCallValues
|
public class ReCalculateRollCallValues
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
using System.Collections.Generic;
|
using _0_Framework.Application;
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using AccountManagement.Application.Contracts.Account;
|
using AccountManagement.Application.Contracts.Account;
|
||||||
|
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
using CompanyManagment.App.Contracts.Workshop.DTOs;
|
using CompanyManagment.App.Contracts.Workshop.DTOs;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.Workshop;
|
namespace CompanyManagment.App.Contracts.Workshop;
|
||||||
|
|
||||||
@@ -92,6 +93,8 @@ public interface IWorkshopApplication
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command);
|
Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreateWorkshopWorkflowRegistration
|
public class CreateWorkshopWorkflowRegistration
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using Microsoft.EntityFrameworkCore.Query;
|
|||||||
using Company.Domain.CheckoutAgg;
|
using Company.Domain.CheckoutAgg;
|
||||||
using Company.Domain.CustomizeCheckoutAgg;
|
using Company.Domain.CustomizeCheckoutAgg;
|
||||||
using Company.Domain.CustomizeCheckoutTempAgg;
|
using Company.Domain.CustomizeCheckoutTempAgg;
|
||||||
|
using Company.Domain.RollCallAgg;
|
||||||
using CompanyManagment.EFCore.Repository;
|
using CompanyManagment.EFCore.Repository;
|
||||||
|
|
||||||
|
|
||||||
@@ -38,7 +39,8 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
|||||||
IRollCallApplication rollCallAppllication,
|
IRollCallApplication rollCallAppllication,
|
||||||
ICheckoutRepository checkoutRepository,
|
ICheckoutRepository checkoutRepository,
|
||||||
ICustomizeCheckoutRepository customizeCheckoutRepository,
|
ICustomizeCheckoutRepository customizeCheckoutRepository,
|
||||||
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
|
ICustomizeCheckoutTempRepository customizeCheckoutTempRepository,
|
||||||
|
IRollCallRepository rollCallRepository)
|
||||||
: ICustomizeWorkshopSettingsApplication
|
: ICustomizeWorkshopSettingsApplication
|
||||||
{
|
{
|
||||||
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
|
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
|
||||||
@@ -53,6 +55,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
|||||||
private readonly ICheckoutRepository _checkoutRepository = checkoutRepository;
|
private readonly ICheckoutRepository _checkoutRepository = checkoutRepository;
|
||||||
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository;
|
private readonly ICustomizeCheckoutRepository _customizeCheckoutRepository = customizeCheckoutRepository;
|
||||||
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository;
|
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository = customizeCheckoutTempRepository;
|
||||||
|
private readonly IRollCallRepository _rollCallRepository = rollCallRepository;
|
||||||
|
|
||||||
#region RollCallShifts
|
#region RollCallShifts
|
||||||
|
|
||||||
@@ -822,14 +825,19 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
|||||||
|
|
||||||
var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId));
|
var notSelectedEmployeeSettings = employeeSettings.Where(x => !selectedEmployeesIds.Contains(x.EmployeeId));
|
||||||
|
|
||||||
var weeklyOffDays = command.OffDayOfWeeks?.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
var weeklyOffDays = command.OffDayOfWeeks?
|
||||||
using var transaction = new TransactionScope();
|
.Select(x => new WeeklyOffDay(x)).ToList() ?? [];
|
||||||
|
|
||||||
|
using var rollCallTransaction = _rollCallRepository.BeginTransactionAsync()
|
||||||
|
.GetAwaiter().GetResult();
|
||||||
|
|
||||||
entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus,
|
entity.EditSimpleAndOverwriteOnEmployee(command.Name, selectedEmployeesIds, groupSettingsShifts, command.WorkshopShiftStatus,
|
||||||
command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays);
|
command.IrregularShift, breakTime, isChanged, command.HolidayWork, rotatingShift, weeklyOffDays);
|
||||||
if (reCalculateCommand.Count > 0)
|
if (reCalculateCommand.Count > 0)
|
||||||
{
|
{
|
||||||
var result = _rollCallApplication.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand);
|
var result = _rollCallApplication
|
||||||
|
.RecalculateValues(workshopSettings.WorkshopId, reCalculateCommand)
|
||||||
|
.GetAwaiter().GetResult();
|
||||||
|
|
||||||
if (result.IsSuccedded == false)
|
if (result.IsSuccedded == false)
|
||||||
{
|
{
|
||||||
@@ -844,7 +852,7 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
|||||||
|
|
||||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||||
|
|
||||||
transaction.Complete();
|
rollCallTransaction.Commit();
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
}
|
}
|
||||||
public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
|
public OperationResult EditSimpleRollCallEmployeeSetting(EditCustomizeEmployeeSettings command,
|
||||||
@@ -1043,7 +1051,9 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
|
|||||||
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
_customizeWorkshopGroupSettingsRepository.SaveChanges();
|
||||||
if (reCalculateCommand.Count > 0)
|
if (reCalculateCommand.Count > 0)
|
||||||
{
|
{
|
||||||
var result = _rollCallApplication.RecalculateValues(command.WorkshopId, reCalculateCommand);
|
var result = _rollCallApplication
|
||||||
|
.RecalculateValues(command.WorkshopId, reCalculateCommand)
|
||||||
|
.GetAwaiter().GetResult();
|
||||||
|
|
||||||
if (result.IsSuccedded == false)
|
if (result.IsSuccedded == false)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1729,5 +1729,25 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
|||||||
return await _EmployeeRepository.GetList(searchModel);
|
return await _EmployeeRepository.GetList(searchModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
|
||||||
|
{
|
||||||
|
return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId)
|
||||||
|
{
|
||||||
|
return await _EmployeeRepository.ListOfAllEmployeesClient(searchModel, workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId)
|
||||||
|
{
|
||||||
|
return await _EmployeeRepository.PrintAllEmployeesInfoClient(workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId)
|
||||||
|
{
|
||||||
|
return await _EmployeeRepository.GetWorkingEmployeesSelectList(workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1608,7 +1608,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
institutionContract.SetSigningType(signingType);
|
institutionContract.SetSigningType(signingType);
|
||||||
|
var previousInstitutionContract = await _institutionContractRepository
|
||||||
|
.GetPreviousContract(institutionContract.id);
|
||||||
|
previousInstitutionContract?.DeActive();
|
||||||
|
ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
|
||||||
await _institutionContractRepository.SaveChangesAsync();
|
await _institutionContractRepository.SaveChangesAsync();
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,25 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||||
|
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
|
||||||
|
using Company.Domain.EmployeeAgg;
|
||||||
|
using Company.Domain.HolidayItemAgg;
|
||||||
|
using Company.Domain.LeaveAgg;
|
||||||
|
using Company.Domain.RollCallAgg;
|
||||||
|
using Company.Domain.RollCallServiceAgg;
|
||||||
|
using Company.Domain.WorkshopAgg;
|
||||||
|
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
|
||||||
|
using CompanyManagment.App.Contracts.HolidayItem;
|
||||||
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
|
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
|
||||||
|
using CompanyManagment.App.Contracts.RollCallService;
|
||||||
|
using CompanyManagment.EFCore.Migrations;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
|
||||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
|
||||||
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
|
|
||||||
using Company.Domain.EmployeeAgg;
|
|
||||||
using Company.Domain.LeaveAgg;
|
|
||||||
using Company.Domain.RollCallAgg;
|
|
||||||
using Company.Domain.WorkshopAgg;
|
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
|
||||||
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
|
|
||||||
|
|
||||||
namespace CompanyManagment.Application;
|
namespace CompanyManagment.Application;
|
||||||
|
|
||||||
@@ -24,9 +31,12 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
private readonly IRollCallRepository _rollCallRepository;
|
private readonly IRollCallRepository _rollCallRepository;
|
||||||
private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository;
|
private readonly ICustomizeWorkshopEmployeeSettingsRepository _employeeSettingsRepository;
|
||||||
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
|
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
|
||||||
|
private readonly IHolidayItemRepository _holidayItemRepository;
|
||||||
|
private readonly IRollCallServiceRepository _rollCallServiceRepository;
|
||||||
|
|
||||||
|
|
||||||
public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication)
|
|
||||||
|
public LeaveApplication(ILeaveRepository leaveRepository, IEmployeeRepository employeeRepository, IWorkshopRepository workshopRepository, IRollCallRepository rollCallRepository, ICustomizeWorkshopEmployeeSettingsRepository employeeSettingsRepository, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IHolidayItemRepository holidayItemRepository, IRollCallServiceRepository rollCallServiceRepository)
|
||||||
{
|
{
|
||||||
_leaveRepository = leaveRepository;
|
_leaveRepository = leaveRepository;
|
||||||
_employeeRepository = employeeRepository;
|
_employeeRepository = employeeRepository;
|
||||||
@@ -34,6 +44,8 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
_rollCallRepository = rollCallRepository;
|
_rollCallRepository = rollCallRepository;
|
||||||
_employeeSettingsRepository = employeeSettingsRepository;
|
_employeeSettingsRepository = employeeSettingsRepository;
|
||||||
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
|
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
|
||||||
|
_holidayItemRepository = holidayItemRepository;
|
||||||
|
_rollCallServiceRepository = rollCallServiceRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult Create(CreateLeave command)
|
public OperationResult Create(CreateLeave command)
|
||||||
@@ -238,7 +250,7 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
|
|
||||||
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||||
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
|
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
|
||||||
var leave = new Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
|
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
|
||||||
, command.PaidLeaveType, command.LeaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
|
, command.PaidLeaveType, command.LeaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
|
||||||
year, month, shiftDuration, hasShiftDuration,command.IsInvallid);
|
year, month, shiftDuration, hasShiftDuration,command.IsInvallid);
|
||||||
_leaveRepository.Create(leave);
|
_leaveRepository.Create(leave);
|
||||||
@@ -510,7 +522,12 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
|
|
||||||
public OperationResult RemoveLeave(long id)
|
public OperationResult RemoveLeave(long id)
|
||||||
{
|
{
|
||||||
return _leaveRepository.RemoveLeave(id);
|
return _leaveRepository.RemoveLeave(id).GetAwaiter().GetResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<OperationResult> RemoveLeaveAsync(long id)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.RemoveLeave(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId)
|
public LeaveViewModel LeavOnChekout(DateTime starContract, DateTime endContract, long employeeId, long workshopId)
|
||||||
@@ -672,5 +689,354 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
|
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId)
|
||||||
|
{
|
||||||
|
var op = new OperationResult<CheckIsInvalidLeaveDto>();
|
||||||
|
var result = new CheckIsInvalidLeaveDto();
|
||||||
|
if (startLeaveDate.TryToGeorgianDateTime(out var startLeaveDateGr) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ وارد شده صحیح نیست");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startLeaveDateGr.DayOfWeek == DayOfWeek.Friday || _holidayItemRepository.GetHoliday(startLeaveDateGr))
|
||||||
|
{
|
||||||
|
result.IsHoliday = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.IsHoliday)
|
||||||
|
{
|
||||||
|
var rollCallService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(workshopId);
|
||||||
|
if (rollCallService != null)
|
||||||
|
{
|
||||||
|
result.CanCreateInvalid = rollCallService.HasCustomizeCheckoutService == "true";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult> CreateLeave(CreateLeaveDto command)
|
||||||
|
{
|
||||||
|
TimeSpan shiftDuration = TimeSpan.Zero;
|
||||||
|
bool hasShiftDuration = false;
|
||||||
|
var startH = new TimeSpan();
|
||||||
|
var endH = new TimeSpan();
|
||||||
|
var op = new OperationResult();
|
||||||
|
if ((command.PaidLeaveType == PaidLeaveType.Daily && command.LeaveType == LeaveType.PaidLeave) || command.LeaveType == LeaveType.SickLeave)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
}
|
||||||
|
if (string.IsNullOrWhiteSpace(command.EndLeave))
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا تاریخ پایان را وارد کنید");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (command.PaidLeaveType == PaidLeaveType.Hourly)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartHoures) || string.IsNullOrWhiteSpace(command.EndHours))
|
||||||
|
return op.Failed("ساعت شروع و پایان نمیتواند خالی باشد");
|
||||||
|
|
||||||
|
string pattern = @"^([01]\d|2[0-3]):[0-5]\d$";
|
||||||
|
|
||||||
|
if (!Regex.IsMatch(command.StartHoures, pattern))
|
||||||
|
return op.Failed("لطفا ساعت شروع را به درستی وارد کنید");
|
||||||
|
|
||||||
|
if (!Regex.IsMatch(command.EndHours, pattern))
|
||||||
|
return op.Failed("لطفا ساعت پایان را به درستی وارد کنید");
|
||||||
|
|
||||||
|
startH = TimeSpan.Parse(command.StartHoures);
|
||||||
|
endH = TimeSpan.Parse(command.EndHours);
|
||||||
|
if (startH == endH)
|
||||||
|
return op.Failed("ساعت شروع و پایان نباید برابر باشد");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
// return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.EndLeave))
|
||||||
|
// return op.Failed("لطفا تاریخ پایان را وارد کنید");
|
||||||
|
|
||||||
|
|
||||||
|
if (command.StartLeave.TryToGeorgianDateTime(out var start) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ شروع صحیح نیست");
|
||||||
|
}
|
||||||
|
|
||||||
|
var end = new DateTime();
|
||||||
|
if (command.PaidLeaveType == PaidLeaveType.Daily)
|
||||||
|
{
|
||||||
|
if (command.EndLeave.TryToGeorgianDateTime(out end) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ پایان صحیح نیست");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end = start;
|
||||||
|
|
||||||
|
|
||||||
|
var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId, command.IsInvallid);
|
||||||
|
|
||||||
|
|
||||||
|
if (checkErr.HasChekout)
|
||||||
|
return op.Failed(checkErr.CheckoutErrMessage);
|
||||||
|
if (checkErr.HasNotContract)
|
||||||
|
return op.Failed(checkErr.ContractErrMessage);
|
||||||
|
if (checkErr.HasLeftWork)
|
||||||
|
return op.Failed(checkErr.LeftWorlErrMessage);
|
||||||
|
|
||||||
|
if (start > end)
|
||||||
|
return op.Failed("تارخ شروع از پایان بزرگتر است");
|
||||||
|
|
||||||
|
|
||||||
|
var totalhourses = "-";
|
||||||
|
if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Hourly)
|
||||||
|
{
|
||||||
|
|
||||||
|
start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds);
|
||||||
|
end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds);
|
||||||
|
if (start > end)
|
||||||
|
end = end.AddDays(1);
|
||||||
|
|
||||||
|
var totalLeavHourses = (end - start);
|
||||||
|
var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}";
|
||||||
|
var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}";
|
||||||
|
totalhourses = $"{h}:{m}";
|
||||||
|
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
|
||||||
|
var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end;
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
(x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
}
|
||||||
|
else if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Daily)
|
||||||
|
{
|
||||||
|
var totalLeavHourses = (end - start).TotalDays + 1;
|
||||||
|
totalhourses = $"{(int)totalLeavHourses}";
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
|
||||||
|
|
||||||
|
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(command.WorkshopId, command.EmployeeId);
|
||||||
|
|
||||||
|
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(command.EmployeeId, command.WorkshopId, start, end);
|
||||||
|
var hasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
|
||||||
|
if (hasRollCall)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((end - start).TotalDays > 1 && employeeSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular)
|
||||||
|
{
|
||||||
|
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating &&
|
||||||
|
command.SelectedShift == null)
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا شیفت پرسنل را انتخاب کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command.SelectedShift != null)
|
||||||
|
{
|
||||||
|
var validShiftStart = TimeOnly.TryParse(command.SelectedShift.StartTime, out var shiftStart);
|
||||||
|
var validShiftEnd = TimeOnly.TryParse(command.SelectedShift.EndTime, out var shiftEnd);
|
||||||
|
|
||||||
|
if (validShiftStart == false && validShiftEnd == false)
|
||||||
|
{
|
||||||
|
return op.Failed("شیفت های انتخاب شده معتبر نمیباشد");
|
||||||
|
}
|
||||||
|
|
||||||
|
var shiftStartDateTime = new DateTime(new DateOnly(), shiftStart);
|
||||||
|
var shiftEndDateTime = new DateTime(new DateOnly(), shiftEnd);
|
||||||
|
if (shiftEndDateTime <= shiftStartDateTime)
|
||||||
|
shiftEndDateTime = shiftEndDateTime.AddDays(1);
|
||||||
|
shiftDuration = shiftEndDateTime - shiftStartDateTime;
|
||||||
|
hasShiftDuration = true;
|
||||||
|
}
|
||||||
|
else if (employeeSettings is { WorkshopShiftStatus: WorkshopShiftStatus.Irregular })
|
||||||
|
{
|
||||||
|
if ((end - start).TotalDays > 1)
|
||||||
|
{
|
||||||
|
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isActive)
|
||||||
|
{
|
||||||
|
shiftDuration = employeeSettings.IrregularShift.WorkshopIrregularShifts switch
|
||||||
|
{
|
||||||
|
WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(12),
|
||||||
|
WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(12),
|
||||||
|
WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(24),
|
||||||
|
WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(24),
|
||||||
|
_ => new TimeSpan()
|
||||||
|
};
|
||||||
|
hasShiftDuration = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command.LeaveType == LeaveType.SickLeave)
|
||||||
|
{
|
||||||
|
var totalLeavHourses = (end - start).TotalDays + 1;
|
||||||
|
totalhourses = $"{(int)totalLeavHourses}";
|
||||||
|
command.PaidLeaveType = PaidLeaveType.Daily;
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
|
||||||
|
}
|
||||||
|
var year = Convert.ToInt32(command.StartLeave.Substring(0, 4));
|
||||||
|
var month = Convert.ToInt32(command.StartLeave.Substring(5, 2));
|
||||||
|
var paidLeaveType = command.PaidLeaveType == PaidLeaveType.Daily ? "روزانه" : "ساعتی";
|
||||||
|
var leaveType = command.LeaveType == LeaveType.PaidLeave ? "استحقاقی" : "استعلاجی";
|
||||||
|
var validation = ValidateNewLeaveWithExistingRollCalls(command.WorkshopId, command.EmployeeId, paidLeaveType, start, end);
|
||||||
|
if (validation.IsSuccedded == false)
|
||||||
|
return validation;
|
||||||
|
|
||||||
|
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||||
|
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
|
||||||
|
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
|
||||||
|
, paidLeaveType, leaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
|
||||||
|
year, month, shiftDuration, hasShiftDuration, command.IsInvallid);
|
||||||
|
await _leaveRepository.CreateAsync(leave);
|
||||||
|
await _leaveRepository.SaveChangesAsync();
|
||||||
|
return op.Succcedded();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId,long employeeId, string startLeaveDate)
|
||||||
|
{
|
||||||
|
var op = new OperationResult<RotatingShiftDto>();
|
||||||
|
var result = new RotatingShiftDto();
|
||||||
|
if (startLeaveDate.TryToGeorgianDateTime(out var startDateTimeGr) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ شروع صحیح نیست");
|
||||||
|
}
|
||||||
|
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId);
|
||||||
|
//اگر گروه بندی نداشت
|
||||||
|
if (employeeSettings == null)
|
||||||
|
{
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(employeeId, workshopId, startDateTimeGr, startDateTimeGr);
|
||||||
|
|
||||||
|
result.HasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
|
||||||
|
result.RotatingShifts = employeeSettings.CustomizeRotatingShifts.Select(x =>
|
||||||
|
new CustomizeRotatingShiftsViewModel()
|
||||||
|
{
|
||||||
|
EndTime = x.EndTime.ToString("HH:mm"),
|
||||||
|
StartTime = x.StartTime.ToString("HH:mm")
|
||||||
|
}).ToList();
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.ListPrint(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<string> GetHourlyLeaveDuration(string startHours, string endHours)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(startHours) || string.IsNullOrWhiteSpace(endHours))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
var start = new DateTime();
|
||||||
|
var end = new DateTime();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
start = Convert.ToDateTime(startHours);
|
||||||
|
end = Convert.ToDateTime(endHours);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (start > end || start == end)
|
||||||
|
{
|
||||||
|
end = end.AddDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var HourlyDate = (end - start);
|
||||||
|
var hours = (int)HourlyDate.TotalHours;
|
||||||
|
var minutes = HourlyDate.TotalMinutes % 60;
|
||||||
|
|
||||||
|
if (hours > 0 && minutes > 0)
|
||||||
|
{
|
||||||
|
return (hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه");
|
||||||
|
}
|
||||||
|
else if (hours > 0 && minutes == 0)
|
||||||
|
{
|
||||||
|
return (hours + " " + "ساعت ");
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (hours == 0 && minutes > 0)
|
||||||
|
{
|
||||||
|
return (minutes + " " + "دقیقه");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($"{hours}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> GetDailyLeaveDuration(string startDate, string endDate)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(startDate) || string.IsNullOrWhiteSpace(endDate))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
if (startDate.TryToGeorgianDateTime(out var start) == false || endDate.TryToGeorgianDateTime(out var end) == false)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (end >= start)
|
||||||
|
{
|
||||||
|
var daysSpan = (end - start).TotalDays + 1;
|
||||||
|
return $"{(int)daysSpan} روز";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "تاریخ پایان از تاریخ شروع کوچکتر است.";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -788,7 +788,7 @@ public class RollCallApplication : IRollCallApplication
|
|||||||
return _rollCallRepository.CheckRepeat(employeeId, workshopId);
|
return _rollCallRepository.CheckRepeat(employeeId, workshopId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
|
public async Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> commands)
|
||||||
{
|
{
|
||||||
var operationResult = new OperationResult();
|
var operationResult = new OperationResult();
|
||||||
try
|
try
|
||||||
@@ -812,24 +812,43 @@ public class RollCallApplication : IRollCallApplication
|
|||||||
|
|
||||||
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
|
var oldestDate = commands.MinBy(x => x.FromDate).FromDate.ToGeorgianDateTime();
|
||||||
|
|
||||||
var allRollCalls = _rollCallRepository
|
var allRollCalls = await _rollCallRepository
|
||||||
.GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(),
|
.GetRollCallsUntilNowWithWorkshopIdEmployeeIds(workshopId, commands.Select(x => x.EmployeeId).ToList(),
|
||||||
oldestDate).GetAwaiter().GetResult();
|
oldestDate);
|
||||||
|
|
||||||
|
var rollCalls =
|
||||||
|
commands.SelectMany(command =>
|
||||||
|
allRollCalls.Where(x =>
|
||||||
|
x.EmployeeId == command.EmployeeId &&
|
||||||
|
x.ShiftDate >= command.FromDate.ToGeorgianDateTime()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
foreach (var command in commands)
|
foreach (var rollCall in rollCalls)
|
||||||
{
|
{
|
||||||
var rollCalls = allRollCalls
|
rollCall.ClearTimeDiff();
|
||||||
.Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
|
|
||||||
|
|
||||||
foreach (var rollCall in rollCalls)
|
await _rollCallRepository.SaveChangesAsync();
|
||||||
{
|
|
||||||
rollCall.ClearTimeDiff();
|
rollCall.SetEndDateTime(
|
||||||
_rollCallRepository.SaveChanges();
|
rollCall.EndDate!.Value,
|
||||||
rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
|
_rollCallDomainService
|
||||||
}
|
);
|
||||||
}
|
}
|
||||||
_rollCallRepository.SaveChanges();
|
|
||||||
|
// foreach (var command in commands)
|
||||||
|
// {
|
||||||
|
// var rollCalls = allRollCalls
|
||||||
|
// .Where(x => x.EmployeeId == command.EmployeeId && x.ShiftDate >= command.FromDate.ToGeorgianDateTime()).ToList();
|
||||||
|
//
|
||||||
|
// foreach (var rollCall in rollCalls)
|
||||||
|
// {
|
||||||
|
// rollCall.ClearTimeDiff();
|
||||||
|
// await _rollCallRepository.SaveChangesAsync();
|
||||||
|
// rollCall.SetEndDateTime(rollCall.EndDate!.Value, _rollCallDomainService);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
await _rollCallRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return operationResult.Succcedded();
|
return operationResult.Succcedded();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ using Company.Domain.LeftWorkAgg;
|
|||||||
using Company.Domain.LeftWorkInsuranceAgg;
|
using Company.Domain.LeftWorkInsuranceAgg;
|
||||||
using Company.Domain.WorkshopAgg;
|
using Company.Domain.WorkshopAgg;
|
||||||
using CompanyManagment.App.Contracts.Employee;
|
using CompanyManagment.App.Contracts.Employee;
|
||||||
|
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
using CompanyManagment.App.Contracts.EmployeeChildren;
|
using CompanyManagment.App.Contracts.EmployeeChildren;
|
||||||
using CompanyManagment.App.Contracts.LeftWork;
|
using CompanyManagment.App.Contracts.LeftWork;
|
||||||
using CompanyManagment.App.Contracts.RollCallService;
|
using CompanyManagment.App.Contracts.RollCallService;
|
||||||
@@ -1126,5 +1127,6 @@ public class WorkshopAppliction : IWorkshopApplication
|
|||||||
return operation.Succcedded();
|
return operation.Succcedded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1,23 +1,24 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
using System.Collections.Generic;
|
using _0_Framework.Application.Enums;
|
||||||
using System.Data;
|
using _0_Framework.Exceptions;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using _0_Framework.InfraStructure;
|
using _0_Framework.InfraStructure;
|
||||||
using Company.Domain.ClientEmployeeWorkshopAgg;
|
using Company.Domain.ClientEmployeeWorkshopAgg;
|
||||||
using Company.Domain.EmployeeAccountAgg;
|
using Company.Domain.EmployeeAccountAgg;
|
||||||
using Company.Domain.EmployeeAgg;
|
using Company.Domain.EmployeeAgg;
|
||||||
using CompanyManagment.App.Contracts.Employee;
|
|
||||||
using Company.Domain.EmployeeInsuranceRecordAgg;
|
using Company.Domain.EmployeeInsuranceRecordAgg;
|
||||||
|
using Company.Domain.InsuranceListAgg;
|
||||||
|
using CompanyManagment.App.Contracts.Employee;
|
||||||
|
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
|
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
|
||||||
|
using CompanyManagment.App.Contracts.LeftWorkTemp;
|
||||||
using Microsoft.Data.SqlClient;
|
using Microsoft.Data.SqlClient;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
using CompanyManagment.App.Contracts.Employee.DTO;
|
using System;
|
||||||
using CompanyManagment.App.Contracts.LeftWorkTemp;
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Application.Enums;
|
using System.Data;
|
||||||
using _0_Framework.Exceptions;
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace CompanyManagment.EFCore.Repository;
|
namespace CompanyManagment.EFCore.Repository;
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
public bool city = true;
|
public bool city = true;
|
||||||
public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000);
|
public DateTime initial = new DateTime(1922, 01, 01, 00, 00, 00, 0000000);
|
||||||
private readonly IAuthHelper _authHelper;
|
private readonly IAuthHelper _authHelper;
|
||||||
public EmployeeRepository(CompanyContext context, IConfiguration configuration, IAuthHelper authHelper) :base(context)
|
public EmployeeRepository(CompanyContext context, IConfiguration configuration, IAuthHelper authHelper) : base(context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
@@ -42,13 +43,13 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
|
|
||||||
public List<EmployeeViewModel> GetEmployee()
|
public List<EmployeeViewModel> GetEmployee()
|
||||||
{
|
{
|
||||||
return _context.Employees.Where(x=>x.IsActive).Select(x => new EmployeeViewModel
|
return _context.Employees.Where(x => x.IsActive).Select(x => new EmployeeViewModel
|
||||||
{
|
{
|
||||||
Id = x.id,
|
Id = x.id,
|
||||||
FName = x.FName,
|
FName = x.FName,
|
||||||
|
|
||||||
LName = x.LName,
|
LName = x.LName,
|
||||||
EmployeeFullName = x.FName +" "+x.LName,
|
EmployeeFullName = x.FName + " " + x.LName,
|
||||||
FatherName = x.FatherName,
|
FatherName = x.FatherName,
|
||||||
NationalCode = x.NationalCode,
|
NationalCode = x.NationalCode,
|
||||||
IdNumber = x.IdNumber,
|
IdNumber = x.IdNumber,
|
||||||
@@ -61,46 +62,46 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
public EditEmployee GetDetails(long id)
|
public EditEmployee GetDetails(long id)
|
||||||
{
|
{
|
||||||
return _context.Employees.Select(x => new EditEmployee
|
return _context.Employees.Select(x => new EditEmployee
|
||||||
{
|
{
|
||||||
Id = x.id,
|
Id = x.id,
|
||||||
FName = x.FName,
|
FName = x.FName,
|
||||||
LName = x.LName,
|
LName = x.LName,
|
||||||
Gender = x.Gender,
|
Gender = x.Gender,
|
||||||
NationalCode = x.NationalCode,
|
NationalCode = x.NationalCode,
|
||||||
IdNumber = x.IdNumber,
|
IdNumber = x.IdNumber,
|
||||||
Nationality = x.Nationality,
|
Nationality = x.Nationality,
|
||||||
FatherName = x.FatherName,
|
FatherName = x.FatherName,
|
||||||
DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(),
|
DateOfBirth = x.DateOfBirth == initial ? "" : x.DateOfBirth.ToFarsi(),
|
||||||
DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(),
|
DateOfIssue = x.DateOfIssue == initial ? "" : x.DateOfIssue.ToFarsi(),
|
||||||
PlaceOfIssue = x.PlaceOfIssue,
|
PlaceOfIssue = x.PlaceOfIssue,
|
||||||
Phone = x.Phone,
|
Phone = x.Phone,
|
||||||
Address = x.Address,
|
Address = x.Address,
|
||||||
State = x.State,
|
State = x.State,
|
||||||
City = x.City,
|
City = x.City,
|
||||||
MaritalStatus = x.MaritalStatus,
|
MaritalStatus = x.MaritalStatus,
|
||||||
MilitaryService = x.MilitaryService,
|
MilitaryService = x.MilitaryService,
|
||||||
LevelOfEducation = x.LevelOfEducation,
|
LevelOfEducation = x.LevelOfEducation,
|
||||||
FieldOfStudy = x.FieldOfStudy,
|
FieldOfStudy = x.FieldOfStudy,
|
||||||
BankCardNumber = x.BankCardNumber,
|
BankCardNumber = x.BankCardNumber,
|
||||||
BankBranch = x.BankBranch,
|
BankBranch = x.BankBranch,
|
||||||
InsuranceCode = x.InsuranceCode,
|
InsuranceCode = x.InsuranceCode,
|
||||||
InsuranceHistoryByYear = x.InsuranceHistoryByYear,
|
InsuranceHistoryByYear = x.InsuranceHistoryByYear,
|
||||||
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
|
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
|
||||||
NumberOfChildren = x.NumberOfChildren,
|
NumberOfChildren = x.NumberOfChildren,
|
||||||
OfficePhone = x.OfficePhone,
|
OfficePhone = x.OfficePhone,
|
||||||
EmployeeFullName = x.FName + " " + x.LName,
|
EmployeeFullName = x.FName + " " + x.LName,
|
||||||
MclsUserName =x.MclsUserName,
|
MclsUserName = x.MclsUserName,
|
||||||
MclsPassword = x.MclsPassword,
|
MclsPassword = x.MclsPassword,
|
||||||
EserviceUserName = x.EserviceUserName,
|
EserviceUserName = x.EserviceUserName,
|
||||||
EservicePassword = x.EservicePassword,
|
EservicePassword = x.EservicePassword,
|
||||||
TaxOfficeUserName = x.TaxOfficeUserName,
|
TaxOfficeUserName = x.TaxOfficeUserName,
|
||||||
TaxOfficepassword = x.TaxOfficepassword,
|
TaxOfficepassword = x.TaxOfficepassword,
|
||||||
SanaUserName = x.SanaUserName,
|
SanaUserName = x.SanaUserName,
|
||||||
SanaPassword = x.SanaPassword,
|
SanaPassword = x.SanaPassword,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
.FirstOrDefault(x => x.Id == id);
|
.FirstOrDefault(x => x.Id == id);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -182,7 +183,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
return query.OrderByDescending(x => x.Id).Take(100).ToList();
|
return query.OrderByDescending(x => x.Id).Take(100).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<EmployeeSelectListViewModel>> GetEmployeeToList()
|
public async Task<List<EmployeeSelectListViewModel>> GetEmployeeToList()
|
||||||
{
|
{
|
||||||
var watch = System.Diagnostics.Stopwatch.StartNew();
|
var watch = System.Diagnostics.Stopwatch.StartNew();
|
||||||
|
|
||||||
@@ -273,45 +274,45 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
public EditEmployee GetDetailsByADDate(long id)
|
public EditEmployee GetDetailsByADDate(long id)
|
||||||
{
|
{
|
||||||
return _context.Employees.Select(x => new EditEmployee
|
return _context.Employees.Select(x => new EditEmployee
|
||||||
{
|
{
|
||||||
Id = x.id,
|
Id = x.id,
|
||||||
FName = x.FName,
|
FName = x.FName,
|
||||||
LName = x.LName,
|
LName = x.LName,
|
||||||
Gender = x.Gender,
|
Gender = x.Gender,
|
||||||
NationalCode = x.NationalCode,
|
NationalCode = x.NationalCode,
|
||||||
IdNumber = x.IdNumber,
|
IdNumber = x.IdNumber,
|
||||||
Nationality = x.Nationality,
|
Nationality = x.Nationality,
|
||||||
FatherName = x.FatherName,
|
FatherName = x.FatherName,
|
||||||
DateOfBirthGr = x.DateOfBirth ,
|
DateOfBirthGr = x.DateOfBirth,
|
||||||
DateOfIssueGr = x.DateOfIssue ,
|
DateOfIssueGr = x.DateOfIssue,
|
||||||
DateOfBirth = x.DateOfBirth.ToFarsi(),
|
DateOfBirth = x.DateOfBirth.ToFarsi(),
|
||||||
DateOfIssue = x.DateOfIssue.ToFarsi(),
|
DateOfIssue = x.DateOfIssue.ToFarsi(),
|
||||||
PlaceOfIssue = x.PlaceOfIssue,
|
PlaceOfIssue = x.PlaceOfIssue,
|
||||||
Phone = x.Phone,
|
Phone = x.Phone,
|
||||||
Address = x.Address,
|
Address = x.Address,
|
||||||
State = x.State,
|
State = x.State,
|
||||||
City = x.City,
|
City = x.City,
|
||||||
MaritalStatus = x.MaritalStatus,
|
MaritalStatus = x.MaritalStatus,
|
||||||
MilitaryService = x.MilitaryService,
|
MilitaryService = x.MilitaryService,
|
||||||
LevelOfEducation = x.LevelOfEducation,
|
LevelOfEducation = x.LevelOfEducation,
|
||||||
FieldOfStudy = x.FieldOfStudy,
|
FieldOfStudy = x.FieldOfStudy,
|
||||||
BankCardNumber = x.BankCardNumber,
|
BankCardNumber = x.BankCardNumber,
|
||||||
BankBranch = x.BankBranch,
|
BankBranch = x.BankBranch,
|
||||||
InsuranceCode = x.InsuranceCode,
|
InsuranceCode = x.InsuranceCode,
|
||||||
InsuranceHistoryByYear = x.InsuranceHistoryByYear,
|
InsuranceHistoryByYear = x.InsuranceHistoryByYear,
|
||||||
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
|
InsuranceHistoryByMonth = x.InsuranceHistoryByMonth,
|
||||||
NumberOfChildren = x.NumberOfChildren,
|
NumberOfChildren = x.NumberOfChildren,
|
||||||
OfficePhone = x.OfficePhone,
|
OfficePhone = x.OfficePhone,
|
||||||
EmployeeFullName = x.FName + " " + x.LName,
|
EmployeeFullName = x.FName + " " + x.LName,
|
||||||
MclsUserName = x.MclsUserName,
|
MclsUserName = x.MclsUserName,
|
||||||
MclsPassword = x.MclsPassword,
|
MclsPassword = x.MclsPassword,
|
||||||
EserviceUserName = x.EserviceUserName,
|
EserviceUserName = x.EserviceUserName,
|
||||||
EservicePassword = x.EservicePassword,
|
EservicePassword = x.EservicePassword,
|
||||||
TaxOfficeUserName = x.TaxOfficeUserName,
|
TaxOfficeUserName = x.TaxOfficeUserName,
|
||||||
TaxOfficepassword = x.TaxOfficepassword,
|
TaxOfficepassword = x.TaxOfficepassword,
|
||||||
SanaUserName = x.SanaUserName,
|
SanaUserName = x.SanaUserName,
|
||||||
SanaPassword = x.SanaPassword,
|
SanaPassword = x.SanaPassword,
|
||||||
})
|
})
|
||||||
.FirstOrDefault(x => x.Id == id);
|
.FirstOrDefault(x => x.Id == id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,7 +325,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
EmployeeFullName = x.FName + " " + x.LName,
|
EmployeeFullName = x.FName + " " + x.LName,
|
||||||
IsActive = x.IsActive
|
IsActive = x.IsActive
|
||||||
|
|
||||||
}).Where(x=>x.IsActive).ToList();
|
}).Where(x => x.IsActive).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Client
|
#region Client
|
||||||
@@ -452,7 +453,7 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
|
|
||||||
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
|
var employeeData = new Employee(command.FName, command.LName, command.FatherName, dateOfBirth,
|
||||||
dateOfIssue,
|
dateOfIssue,
|
||||||
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality,command.IdNumberSerial,command.IdNumberSeri,
|
command.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender, command.Nationality, command.IdNumberSerial, command.IdNumberSeri,
|
||||||
command.Phone, command.Address,
|
command.Phone, command.Address,
|
||||||
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
|
command.State, command.City, command.MaritalStatus, command.MilitaryService, command.LevelOfEducation,
|
||||||
command.FieldOfStudy, command.BankCardNumber,
|
command.FieldOfStudy, command.BankCardNumber,
|
||||||
@@ -706,18 +707,18 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
{
|
{
|
||||||
case null:
|
case null:
|
||||||
case "":
|
case "":
|
||||||
query = query.Where(x => x.IsActive == true).ToList();
|
query = query.Where(x => x.IsActive == true).ToList();
|
||||||
break;
|
break;
|
||||||
case "false":
|
case "false":
|
||||||
query = query.Where(x => x.IsActive == false).ToList();
|
query = query.Where(x => x.IsActive == false).ToList();
|
||||||
hasSearch = true;
|
hasSearch = true;
|
||||||
break;
|
break;
|
||||||
case "both":
|
case "both":
|
||||||
query = query.Where(x => x.IsActive == true || x.IsActive == false).ToList();
|
query = query.Where(x => x.IsActive == true || x.IsActive == false).ToList();
|
||||||
hasSearch = true;
|
hasSearch = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (hasSearch)
|
if (hasSearch)
|
||||||
@@ -816,11 +817,11 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
var employeesQuery = _context.Employees.Where(x =>
|
var employeesQuery = _context.Employees.Where(x =>
|
||||||
workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
|
workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
|
||||||
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)).Select(x => new
|
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id)).Select(x => new
|
||||||
{
|
{
|
||||||
leftWork = workshopActiveLeftWorksQuery.Where(l => l.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
|
leftWork = workshopActiveLeftWorksQuery.Where(l => l.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
|
||||||
insuranceLeftWork = workshopActiveInsuranceLeftWorksQuery.Where(i => i.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
|
insuranceLeftWork = workshopActiveInsuranceLeftWorksQuery.Where(i => i.EmployeeId == x.id).OrderByDescending(i => i.StartWorkDate).FirstOrDefault(),
|
||||||
Employee = x
|
Employee = x
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -946,13 +947,13 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Api
|
#region Api
|
||||||
|
|
||||||
public async Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id)
|
public async Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText, long id)
|
||||||
{
|
{
|
||||||
var query = _context.Employees.AsQueryable();
|
var query = _context.Employees.AsQueryable();
|
||||||
EmployeeSelectListViewModel idSelected = null;
|
EmployeeSelectListViewModel idSelected = null;
|
||||||
if (id > 0)
|
if (id > 0)
|
||||||
{
|
{
|
||||||
@@ -963,104 +964,352 @@ public class EmployeeRepository : RepositoryBase<long, Employee>, IEmployeeRepos
|
|||||||
}).FirstOrDefaultAsync(x => x.Id == id);
|
}).FirstOrDefaultAsync(x => x.Id == id);
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrWhiteSpace(searchText))
|
if (!string.IsNullOrWhiteSpace(searchText))
|
||||||
{
|
{
|
||||||
query = query.Where(x => (x.FName + " " + x.LName).Contains(searchText));
|
query = query.Where(x => (x.FName + " " + x.LName).Contains(searchText));
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = await query.Take(100).Select(x => new EmployeeSelectListViewModel()
|
var list = await query.Take(100).Select(x => new EmployeeSelectListViewModel()
|
||||||
{
|
{
|
||||||
Id = x.id,
|
Id = x.id,
|
||||||
EmployeeFullName = x.FName + " " + x.LName
|
EmployeeFullName = x.FName + " " + x.LName
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
if (idSelected != null)
|
if (idSelected != null)
|
||||||
list.Add(idSelected);
|
list.Add(idSelected);
|
||||||
|
|
||||||
return list.DistinctBy(x=>x.Id).ToList();
|
return list.DistinctBy(x => x.Id).ToList();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel)
|
public async Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel)
|
||||||
{
|
{
|
||||||
var query = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances).AsQueryable();
|
var query = _context.Employees.Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances).AsQueryable();
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
|
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode));
|
query = query.Where(x => x.NationalCode.Contains(searchModel.NationalCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchModel.EmployeeId > 0)
|
if (searchModel.EmployeeId > 0)
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.id == searchModel.EmployeeId);
|
query = query.Where(x => x.id == searchModel.EmployeeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchModel.WorkshopId > 0)
|
if (searchModel.WorkshopId > 0)
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.LeftWorks.Any(l => l.WorkshopId == searchModel.WorkshopId) || x.LeftWorkInsurances.Any(l => l.WorkshopId == searchModel.WorkshopId));
|
query = query.Where(x => x.LeftWorks.Any(l => l.WorkshopId == searchModel.WorkshopId) || x.LeftWorkInsurances.Any(l => l.WorkshopId == searchModel.WorkshopId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region employer
|
#region employer
|
||||||
|
|
||||||
if (searchModel.EmployerId > 0)
|
if (searchModel.EmployerId > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
var workshopIdsByEmployer = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId)
|
var workshopIdsByEmployer = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId)
|
||||||
.Include(x => x.Workshop).Select(x => x.Workshop.id).AsQueryable();
|
.Include(x => x.Workshop).Select(x => x.Workshop.id).AsQueryable();
|
||||||
|
|
||||||
query = query.Where(x =>
|
query = query.Where(x =>
|
||||||
x.LeftWorks.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)) ||
|
x.LeftWorks.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)) ||
|
||||||
x.LeftWorkInsurances.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)));
|
x.LeftWorkInsurances.Any(l => workshopIdsByEmployer.Contains(l.WorkshopId)));
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(searchModel.InsuranceCode))
|
if (!string.IsNullOrEmpty(searchModel.InsuranceCode))
|
||||||
{
|
{
|
||||||
query = query.Where(x => x.InsuranceCode.Contains(searchModel.InsuranceCode));
|
query = query.Where(x => x.InsuranceCode.Contains(searchModel.InsuranceCode));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (searchModel.EmployeeStatus != ActivationStatus.None)
|
if (searchModel.EmployeeStatus != ActivationStatus.None)
|
||||||
{
|
{
|
||||||
var status = searchModel.EmployeeStatus switch
|
var status = searchModel.EmployeeStatus switch
|
||||||
{
|
{
|
||||||
ActivationStatus.Active => true,
|
ActivationStatus.Active => true,
|
||||||
ActivationStatus.DeActive => false,
|
ActivationStatus.DeActive => false,
|
||||||
_ => throw new BadRequestException("پارامتر جستجو نامعتبر است")
|
_ => throw new BadRequestException("پارامتر جستجو نامعتبر است")
|
||||||
};
|
};
|
||||||
query = query.Where(x => x.IsActiveString == status.ToString() || x.IsActive == status);
|
query = query.Where(x => x.IsActiveString == status.ToString() || x.IsActive == status);
|
||||||
}
|
}
|
||||||
|
|
||||||
var list = await query.Skip(searchModel.PageIndex).Take(30).ToListAsync();
|
var list = await query.Skip(searchModel.PageIndex).Take(30).ToListAsync();
|
||||||
|
|
||||||
var employeeIds = list.Select(x => x.id);
|
var employeeIds = list.Select(x => x.id);
|
||||||
|
|
||||||
var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync();
|
var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync();
|
||||||
|
|
||||||
var result = list.Select(x => new GetEmployeeListViewModel()
|
var result = list.Select(x => new GetEmployeeListViewModel()
|
||||||
{
|
{
|
||||||
BirthDate = x.DateOfBirth.ToFarsi(),
|
BirthDate = x.DateOfBirth.ToFarsi(),
|
||||||
ChildrenCount = children.Count(c => c.EmployeeId == x.id).ToString(),
|
ChildrenCount = children.Count(c => c.EmployeeId == x.id).ToString(),
|
||||||
EmployeeFullName = x.FullName,
|
EmployeeFullName = x.FullName,
|
||||||
EmployeeStatus = x.IsActive switch
|
EmployeeStatus = x.IsActive switch
|
||||||
{
|
{
|
||||||
true => ActivationStatus.Active,
|
true => ActivationStatus.Active,
|
||||||
false => ActivationStatus.DeActive
|
false => ActivationStatus.DeActive
|
||||||
},
|
},
|
||||||
Gender = x.Gender switch
|
Gender = x.Gender switch
|
||||||
{
|
{
|
||||||
"مرد" => Gender.Male,
|
"مرد" => Gender.Male,
|
||||||
"زن" => Gender.Female,
|
"زن" => Gender.Female,
|
||||||
_ => Gender.None
|
_ => Gender.None
|
||||||
},
|
},
|
||||||
Id = x.id,
|
Id = x.id,
|
||||||
InsuranceCode = x.InsuranceCode,
|
InsuranceCode = x.InsuranceCode,
|
||||||
NationalCode = x.NationalCode
|
NationalCode = x.NationalCode
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<List<EmployeeListDto>> ListOfAllEmployeesClient(EmployeeSearchModelDto searchModel, long workshopId)
|
||||||
|
{
|
||||||
|
var hasNotStoppedWorkingYet = Tools.GetUndefinedDateTime();
|
||||||
|
|
||||||
|
var baseQuery = await
|
||||||
|
(
|
||||||
|
from personnelCode in _context.PersonnelCodeSet
|
||||||
|
join employee in _context.Employees
|
||||||
|
on personnelCode.EmployeeId equals employee.id
|
||||||
|
where personnelCode.WorkshopId == workshopId
|
||||||
|
select new
|
||||||
|
{
|
||||||
|
Employee = employee,
|
||||||
|
PersonnelCode = personnelCode
|
||||||
|
}
|
||||||
|
).ToListAsync();
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName))
|
||||||
|
baseQuery = baseQuery.Where(x => x.Employee.FullName.Contains(searchModel.EmployeeFullName)).ToList();
|
||||||
|
if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
|
||||||
|
baseQuery = baseQuery.Where(x => x.Employee.NationalCode.Contains(searchModel.NationalCode)).ToList();
|
||||||
|
|
||||||
|
var employeeIds = baseQuery.Select(x => x.Employee.id).ToList();
|
||||||
|
|
||||||
|
var leftWorks = await _context.LeftWorkList
|
||||||
|
.Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var insuranceLeftWorks = await _context.LeftWorkInsuranceList
|
||||||
|
.Where(x => x.WorkshopId == workshopId && employeeIds.Contains(x.EmployeeId))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
var children = await _context.EmployeeChildrenSet.Where(x => employeeIds.Contains(x.EmployeeId)).ToListAsync();
|
||||||
|
|
||||||
|
var clientTemp = await _context.EmployeeClientTemps.Where(x => x.WorkshopId == workshopId)
|
||||||
|
.Select(x => x.EmployeeId).ToListAsync();
|
||||||
|
var leftWorkTempData = await _context.LeftWorkTemps.Where(x => x.WorkshopId == workshopId).ToListAsync();
|
||||||
|
var startWorkTemp = leftWorkTempData.Where(x => x.LeftWorkType == LeftWorkTempType.StartWork).ToList();
|
||||||
|
var leftWorkTemp = leftWorkTempData.Where(x => x.LeftWorkType == LeftWorkTempType.LeftWork).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var result = baseQuery.Select(x =>
|
||||||
|
{
|
||||||
|
var left = leftWorks
|
||||||
|
.Where(l => l.EmployeeId == x.Employee.id)
|
||||||
|
.MaxBy(l => l.StartWorkDate);
|
||||||
|
|
||||||
|
var insuranceLeftWork = insuranceLeftWorks
|
||||||
|
.Where(l => l.EmployeeId == x.Employee.id).MaxBy(l => l.StartWorkDate);
|
||||||
|
|
||||||
|
var contractStart = left != null ? left.StartWorkDate.ToFarsi() : "";
|
||||||
|
var contractLeft = left != null
|
||||||
|
? left.LeftWorkDate != hasNotStoppedWorkingYet ? left.LeftWorkDate.ToFarsi() : ""
|
||||||
|
: "";
|
||||||
|
|
||||||
|
var insuranceStart = insuranceLeftWork != null ? insuranceLeftWork.StartWorkDate.ToFarsi() : "";
|
||||||
|
var insuranceLeft = insuranceLeftWork != null
|
||||||
|
? insuranceLeftWork.LeftWorkDate != null ? insuranceLeftWork.LeftWorkDate.ToFarsi() : ""
|
||||||
|
: "";
|
||||||
|
int personnelCode = Convert.ToInt32($"{x.PersonnelCode.PersonnelCode}");
|
||||||
|
|
||||||
|
int numberOfChildren = children.Count(ch => ch.EmployeeId == x.Employee.id);
|
||||||
|
|
||||||
|
bool employeeHasLeft =
|
||||||
|
(!string.IsNullOrWhiteSpace(insuranceLeft) && !string.IsNullOrWhiteSpace(contractLeft))
|
||||||
|
|| (left == null && !string.IsNullOrWhiteSpace(insuranceLeft))
|
||||||
|
|| (insuranceLeftWork == null && !string.IsNullOrWhiteSpace(contractLeft));
|
||||||
|
bool hasClientTemp = clientTemp.Any(c => c == x.Employee.id);
|
||||||
|
bool hasStartWorkTemp = startWorkTemp.Any(st => st.EmployeeId == x.Employee.id);
|
||||||
|
bool hasLeftWorkTemp = leftWorkTemp.Any(lf => lf.EmployeeId == x.Employee.id);
|
||||||
|
return new EmployeeListDto
|
||||||
|
{
|
||||||
|
Id = x.Employee.id,
|
||||||
|
EmployeeFullName = x.Employee.FullName,
|
||||||
|
PersonnelCode = personnelCode,
|
||||||
|
MaritalStatus = x.Employee.MaritalStatus,
|
||||||
|
NationalCode = x.Employee.NationalCode,
|
||||||
|
IdNumber = x.Employee.IdNumber,
|
||||||
|
DateOfBirth = x.Employee.DateOfBirth.ToFarsi(),
|
||||||
|
FatherName = x.Employee.FatherName,
|
||||||
|
NumberOfChildren = $"{numberOfChildren}",
|
||||||
|
LatestContractStartDate = contractStart,
|
||||||
|
ContractLeftDate = contractLeft,
|
||||||
|
LatestInsuranceStartDate = insuranceStart,
|
||||||
|
InsuranceLeftDate = insuranceLeft,
|
||||||
|
HasContract = !string.IsNullOrWhiteSpace(contractStart),
|
||||||
|
HasInsurance = !string.IsNullOrWhiteSpace(insuranceStart),
|
||||||
|
EmployeeStatusInWorkshop =
|
||||||
|
hasClientTemp || hasStartWorkTemp ? EmployeeStatusInWorkshop.CreatedByClient :
|
||||||
|
hasLeftWorkTemp ? EmployeeStatusInWorkshop.LefWorkTemp :
|
||||||
|
employeeHasLeft ? EmployeeStatusInWorkshop.HasLeft : EmployeeStatusInWorkshop.Working,
|
||||||
|
|
||||||
|
};
|
||||||
|
}).OrderBy(x => x.EmployeeStatusInWorkshop).ThenBy(x => x.PersonnelCode).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<List<PrintAllEmployeesInfoDtoClient>> PrintAllEmployeesInfoClient(long workshopId)
|
||||||
|
{
|
||||||
|
var res = await ListOfAllEmployeesClient(new EmployeeSearchModelDto(), workshopId);
|
||||||
|
|
||||||
|
return res
|
||||||
|
.Where(x=>x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.CreatedByClient
|
||||||
|
&& x.EmployeeStatusInWorkshop != EmployeeStatusInWorkshop.LefWorkTemp)
|
||||||
|
.Select(x => new PrintAllEmployeesInfoDtoClient(x)).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<EmployeeSelectListViewModel>> GetWorkingEmployeesSelectList(long workshopId)
|
||||||
|
{
|
||||||
|
var dateNow = DateTime.Now.Date;
|
||||||
|
|
||||||
|
|
||||||
|
var workshopActiveLeftWorksQuery = _context.LeftWorkList.Where(x => x.WorkshopId == workshopId &&
|
||||||
|
x.StartWorkDate <= dateNow && x.LeftWorkDate > dateNow);
|
||||||
|
|
||||||
|
|
||||||
|
var workshopActiveInsuranceLeftWorksQuery = _context.LeftWorkInsuranceList.Where(x => x.WorkshopId == workshopId &&
|
||||||
|
x.StartWorkDate <= dateNow && (x.LeftWorkDate > dateNow || x.LeftWorkDate == null));
|
||||||
|
|
||||||
|
|
||||||
|
var employeesQuery = _context.Employees.Where(x => workshopActiveLeftWorksQuery.Any(y => y.EmployeeId == x.id) ||
|
||||||
|
workshopActiveInsuranceLeftWorksQuery.Any(y => y.EmployeeId == x.id));
|
||||||
|
|
||||||
|
|
||||||
|
return await employeesQuery.Select(x => new EmployeeSelectListViewModel()
|
||||||
|
{
|
||||||
|
Id = x.id,
|
||||||
|
EmployeeFullName = x.FullName
|
||||||
|
}).ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -722,34 +722,33 @@ public class EmployerRepository : RepositoryBase<long, Employer>, IEmployerRepos
|
|||||||
public OperationResult ActiveAll(long id)
|
public OperationResult ActiveAll(long id)
|
||||||
{
|
{
|
||||||
OperationResult result = new OperationResult();
|
OperationResult result = new OperationResult();
|
||||||
using (var transaction = _context.Database.BeginTransaction())
|
try
|
||||||
{
|
{
|
||||||
try
|
var employer = _context.Employers.FirstOrDefault(x => x.id == id);
|
||||||
|
if (employer == null)
|
||||||
{
|
{
|
||||||
var employer = _context.Employers.FirstOrDefault(x => x.id == id);
|
return result.Failed("کارفرما یافت نشد");
|
||||||
employer.Active();
|
|
||||||
|
|
||||||
var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId)
|
|
||||||
.ToList();
|
|
||||||
var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList();
|
|
||||||
workshops.ForEach(x => x.Active(x.ArchiveCode));
|
|
||||||
|
|
||||||
var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList();
|
|
||||||
contracts.ForEach(x => x.Active());
|
|
||||||
|
|
||||||
var contractIds = contracts.Select(x => x.id).ToList();
|
|
||||||
var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList();
|
|
||||||
checkouts.ForEach(x => x.Active());
|
|
||||||
|
|
||||||
_context.SaveChanges();
|
|
||||||
transaction.Commit();
|
|
||||||
result.Succcedded();
|
|
||||||
}
|
|
||||||
catch (Exception)
|
|
||||||
{
|
|
||||||
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
|
|
||||||
transaction.Rollback();
|
|
||||||
}
|
}
|
||||||
|
employer.Active();
|
||||||
|
|
||||||
|
var workshopIds = _context.WorkshopEmployers.Where(x => x.EmployerId == id).Select(x => x.WorkshopId)
|
||||||
|
.ToList();
|
||||||
|
var workshops = _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToList();
|
||||||
|
workshops.ForEach(x => x.Active(x.ArchiveCode));
|
||||||
|
|
||||||
|
var contracts = _context.Contracts.Where(x => workshopIds.Contains(x.WorkshopIds)).ToList();
|
||||||
|
contracts.ForEach(x => x.Active());
|
||||||
|
|
||||||
|
var contractIds = contracts.Select(x => x.id).ToList();
|
||||||
|
var checkouts = _context.CheckoutSet.Where(x => contractIds.Contains(x.ContractId)).ToList();
|
||||||
|
checkouts.ForEach(x => x.Active());
|
||||||
|
|
||||||
|
_context.SaveChanges();
|
||||||
|
result.Succcedded();
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
result.Failed("فعال کردن کارفرما با خطا مواجه شد");
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
|||||||
using CompanyManagment.App.Contracts.Workshop;
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using MongoDB.Driver;
|
using MongoDB.Driver;
|
||||||
using PersianTools.Core;
|
using PersianTools.Core;
|
||||||
using System;
|
using System;
|
||||||
@@ -54,6 +55,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
private readonly IFinancialTransactionRepository _financialTransactionRepository;
|
private readonly IFinancialTransactionRepository _financialTransactionRepository;
|
||||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||||
private readonly IHubContext<SendSmsHub> _hubContext;
|
private readonly IHubContext<SendSmsHub> _hubContext;
|
||||||
|
private readonly ILogger<InstitutionContractRepository> _logger;
|
||||||
|
|
||||||
private readonly InstitutionContratVerificationParty _firstParty = new()
|
private readonly InstitutionContratVerificationParty _firstParty = new()
|
||||||
{
|
{
|
||||||
@@ -69,7 +71,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
IWorkshopRepository workshopRepository, IMongoDatabase database,
|
IWorkshopRepository workshopRepository, IMongoDatabase database,
|
||||||
IPlanPercentageRepository planPercentageRepository, ISmsService smsService,
|
IPlanPercentageRepository planPercentageRepository, ISmsService smsService,
|
||||||
ISmsResultRepository smsResultRepository, IFinancialTransactionRepository financialTransactionRepository,
|
ISmsResultRepository smsResultRepository, IFinancialTransactionRepository financialTransactionRepository,
|
||||||
IFinancialStatmentRepository financialStatmentRepository, IHubContext<SendSmsHub> hubContext) : base(context)
|
IFinancialStatmentRepository financialStatmentRepository, IHubContext<SendSmsHub> hubContext, ILogger<InstitutionContractRepository> logger) : base(context)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_employerRepository = employerRepository;
|
_employerRepository = employerRepository;
|
||||||
@@ -80,6 +82,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
_financialTransactionRepository = financialTransactionRepository;
|
_financialTransactionRepository = financialTransactionRepository;
|
||||||
_financialStatmentRepository = financialStatmentRepository;
|
_financialStatmentRepository = financialStatmentRepository;
|
||||||
_hubContext = hubContext;
|
_hubContext = hubContext;
|
||||||
|
_logger = logger;
|
||||||
_institutionExtensionTemp =
|
_institutionExtensionTemp =
|
||||||
database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtensionTemp");
|
database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtensionTemp");
|
||||||
_institutionAmendmentTemp =
|
_institutionAmendmentTemp =
|
||||||
@@ -1095,26 +1098,41 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
public async Task<PagedResult<GetInstitutionContractListItemsViewModel>> GetList(
|
public async Task<PagedResult<GetInstitutionContractListItemsViewModel>> GetList(
|
||||||
InstitutionContractListSearchModel searchModel)
|
InstitutionContractListSearchModel searchModel)
|
||||||
{
|
{
|
||||||
var query = _context.InstitutionContractSet
|
|
||||||
.Include(x => x.WorkshopGroup)
|
|
||||||
.ThenInclude(x => x.InitialWorkshops)
|
|
||||||
.Include(x => x.WorkshopGroup)
|
|
||||||
.ThenInclude(x => x.CurrentWorkshops)
|
|
||||||
.Include(x => x.ContactInfoList).AsNoTracking();
|
|
||||||
|
|
||||||
var now = DateTime.Today;
|
var now = DateTime.Today;
|
||||||
var nowFa = now.ToFarsi();
|
var nowFa = now.ToFarsi();
|
||||||
var endFa = nowFa.FindeEndOfMonth();
|
var endFa = nowFa.FindeEndOfMonth();
|
||||||
var endThisMontGr = endFa.ToGeorgianDateTime();
|
var endThisMontGr = endFa.ToGeorgianDateTime();
|
||||||
|
|
||||||
var joinedQuery = query.Join(_context.PersonalContractingParties
|
var contractsWithExtension = await _context.InstitutionContractSet
|
||||||
|
.Where(x => x.IsActiveString == "true")
|
||||||
|
.Select(x => new { x.ContractingPartyId, x.ExtensionNo })
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
// var contractsWithExtensionLookup = contractsWithExtension
|
||||||
|
// .GroupBy(x => x.ContractingPartyId)
|
||||||
|
// .ToDictionary(
|
||||||
|
// g => g.Key,
|
||||||
|
// g => g.Max(x => x.ExtensionNo)
|
||||||
|
// );
|
||||||
|
|
||||||
|
var rawQuery = _context.InstitutionContractSet
|
||||||
|
.Include(x=>x.Installments)
|
||||||
|
.AsNoTracking()
|
||||||
|
.Join(_context.PersonalContractingParties
|
||||||
|
.AsNoTracking()
|
||||||
.Include(x => x.Employers)
|
.Include(x => x.Employers)
|
||||||
.ThenInclude(x => x.WorkshopEmployers)
|
.ThenInclude(x => x.WorkshopEmployers)
|
||||||
.ThenInclude(x => x.Workshop),
|
.ThenInclude(x => x.Workshop),
|
||||||
contract => contract.ContractingPartyId,
|
contract => contract.ContractingPartyId,
|
||||||
contractingParty => contractingParty.id,
|
contractingParty => contractingParty.id,
|
||||||
(contract, contractingParty) => new { contract, contractingParty })
|
(contract, contractingParty) => new { contract, contractingParty });
|
||||||
.Select(x => new
|
|
||||||
|
// var pendingForRenewalContracts = _context.InstitutionContractSet.AsNoTracking()
|
||||||
|
// .Where(c => c.IsActiveString == "true" &&
|
||||||
|
// c.ContractEndGr >= now &&
|
||||||
|
// c.ContractEndGr <= endThisMontGr);
|
||||||
|
|
||||||
|
var joinedQuery = rawQuery.Select(x => new
|
||||||
{
|
{
|
||||||
x.contract,
|
x.contract,
|
||||||
x.contractingParty,
|
x.contractingParty,
|
||||||
@@ -1135,7 +1153,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
: x.contract.ContractAmount == 0
|
: x.contract.ContractAmount == 0
|
||||||
? (int)InstitutionContractListStatus.Free
|
? (int)InstitutionContractListStatus.Free
|
||||||
: !x.contractingParty.Employers
|
: !x.contractingParty.Employers
|
||||||
.SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).Any()
|
.SelectMany(e => e.WorkshopEmployers
|
||||||
|
.Select(we => we.Workshop)).Any()
|
||||||
? (int)InstitutionContractListStatus.WithoutWorkshop
|
? (int)InstitutionContractListStatus.WithoutWorkshop
|
||||||
: (int)InstitutionContractListStatus.Active
|
: (int)InstitutionContractListStatus.Active
|
||||||
});
|
});
|
||||||
@@ -1298,6 +1317,15 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
|
|
||||||
var list = await orderedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
var list = await orderedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||||
var contractingPartyIds = list.Select(x => x.contractingParty.id).ToList();
|
var contractingPartyIds = list.Select(x => x.contractingParty.id).ToList();
|
||||||
|
var contractIds = list.Select(x => x.contract.id).ToList();
|
||||||
|
|
||||||
|
// بارگذاری WorkshopGroups فقط برای قراردادهای صفحه فعلی
|
||||||
|
var workshopGroups = await _context.InstitutionContractWorkshopGroups
|
||||||
|
.AsNoTracking()
|
||||||
|
.Include(x=>x.InitialWorkshops )
|
||||||
|
.Include(x => x.CurrentWorkshops)
|
||||||
|
.Where(x => contractIds.Contains(x.InstitutionContractId))
|
||||||
|
.ToDictionaryAsync(x => x.InstitutionContractId, x => x);
|
||||||
|
|
||||||
var financialStatements = _context.FinancialStatments.Include(x => x.FinancialTransactionList)
|
var financialStatements = _context.FinancialStatments.Include(x => x.FinancialTransactionList)
|
||||||
.Where(x => contractingPartyIds.Contains(x.ContractingPartyId)).ToList();
|
.Where(x => contractingPartyIds.Contains(x.ContractingPartyId)).ToList();
|
||||||
@@ -1321,13 +1349,19 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
|
|
||||||
var archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode;
|
var archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode;
|
||||||
var status = Enum.Parse<InstitutionContractListStatus>(x.StatusPriority.ToString());
|
var status = Enum.Parse<InstitutionContractListStatus>(x.StatusPriority.ToString());
|
||||||
List<InstitutionContractWorkshopBase> currentStateWorkshops = x.contract.WorkshopGroup?.CurrentWorkshops
|
|
||||||
|
// دریافت WorkshopGroup از dictionary بارگذاری شده
|
||||||
|
workshopGroups.TryGetValue(x.contract.id, out var workshopGroup);
|
||||||
|
|
||||||
|
List<InstitutionContractWorkshopBase> currentStateWorkshops = workshopGroup?.CurrentWorkshops
|
||||||
.Cast<InstitutionContractWorkshopBase>().ToList();
|
.Cast<InstitutionContractWorkshopBase>().ToList();
|
||||||
|
|
||||||
var statement = financialStatements.FirstOrDefault(f => f.ContractingPartyId == x.contractingParty.id);
|
var statement = financialStatements.FirstOrDefault(f => f.ContractingPartyId == x.contractingParty.id);
|
||||||
|
|
||||||
currentStateWorkshops?.AddRange(
|
if (currentStateWorkshops != null && workshopGroup != null)
|
||||||
x.contract.WorkshopGroup?.InitialWorkshops.Where(w => !w.WorkshopCreated) ?? []);
|
{
|
||||||
|
currentStateWorkshops.AddRange(workshopGroup.InitialWorkshops.Where(w => !w.WorkshopCreated));
|
||||||
|
}
|
||||||
|
|
||||||
var workshopDetails = currentStateWorkshops?.Select(w =>
|
var workshopDetails = currentStateWorkshops?.Select(w =>
|
||||||
{
|
{
|
||||||
@@ -1357,9 +1391,28 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
var employeesCount = _context.LeftWorkList
|
var employeesCount = _context.LeftWorkList
|
||||||
.Where(l => workshops.Select(w => w.id).Contains(l.WorkshopId))
|
.Where(l => workshops.Select(w => w.id).Contains(l.WorkshopId))
|
||||||
.Count(l => l.StartWorkDate <= DateTime.Now && l.LeftWorkDate >= DateTime.Now);
|
.Count(l => l.StartWorkDate <= DateTime.Now && l.LeftWorkDate >= DateTime.Now);
|
||||||
|
|
||||||
|
|
||||||
|
var contractAmount = x.contract.SigningType is not InstitutionContractSigningType.Legacy
|
||||||
|
&& !x.contract.IsInstallment?
|
||||||
|
x.contract.TotalAmount:0;
|
||||||
|
|
||||||
|
var installmentAmount = 0d;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
installmentAmount =x.contract.SigningType == InstitutionContractSigningType.Legacy
|
||||||
|
?x.contract.ContractAmount : x.contract.IsInstallment ? x.contract.Installments.First().Amount :0;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Console.WriteLine(e);
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
|
||||||
return new GetInstitutionContractListItemsViewModel()
|
return new GetInstitutionContractListItemsViewModel()
|
||||||
{
|
{
|
||||||
ContractAmount = x.contract.ContractAmountWithTax,
|
ContractAmount = contractAmount,
|
||||||
|
InstallmentAmount = installmentAmount,
|
||||||
Balance = statement?.FinancialTransactionList.Sum(ft => ft.Deptor - ft.Creditor) ?? 0,
|
Balance = statement?.FinancialTransactionList.Sum(ft => ft.Deptor - ft.Creditor) ?? 0,
|
||||||
WorkshopsCount = workshops.Count(),
|
WorkshopsCount = workshops.Count(),
|
||||||
ContractStartFa = x.contract.ContractStartGr.ToFarsi(),
|
ContractStartFa = x.contract.ContractStartGr.ToFarsi(),
|
||||||
@@ -1377,7 +1430,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
IsExpired = x.contract.ContractEndGr <= endThisMontGr,
|
IsExpired = x.contract.ContractEndGr <= endThisMontGr,
|
||||||
ContractingPartyId = x.contractingParty.id,
|
ContractingPartyId = x.contractingParty.id,
|
||||||
Workshops = workshopDetails,
|
Workshops = workshopDetails,
|
||||||
IsInPersonContract = x.contract.WorkshopGroup?.CurrentWorkshops
|
IsInPersonContract = workshopGroup?.CurrentWorkshops
|
||||||
.Any(y => y.Services.ContractInPerson) ?? true,
|
.Any(y => y.Services.ContractInPerson) ?? true,
|
||||||
IsOldContract = x.contract.SigningType == InstitutionContractSigningType.Legacy
|
IsOldContract = x.contract.SigningType == InstitutionContractSigningType.Legacy
|
||||||
};
|
};
|
||||||
@@ -1754,6 +1807,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
.ThenInclude(x => x.InitialWorkshops)
|
.ThenInclude(x => x.InitialWorkshops)
|
||||||
.Include(x => x.WorkshopGroup)
|
.Include(x => x.WorkshopGroup)
|
||||||
.ThenInclude(x => x.CurrentWorkshops)
|
.ThenInclude(x => x.CurrentWorkshops)
|
||||||
|
.Include(x=>x.Installments)
|
||||||
.FirstOrDefaultAsync(x => x.id == institutionContractId);
|
.FirstOrDefaultAsync(x => x.id == institutionContractId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2154,6 +2208,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
.Include(x => x.WorkshopGroup)
|
.Include(x => x.WorkshopGroup)
|
||||||
.ThenInclude(institutionContractWorkshopGroup => institutionContractWorkshopGroup.CurrentWorkshops)
|
.ThenInclude(institutionContractWorkshopGroup => institutionContractWorkshopGroup.CurrentWorkshops)
|
||||||
.FirstOrDefaultAsync(x => x.id == extenstionTemp.PreviousId);
|
.FirstOrDefaultAsync(x => x.id == extenstionTemp.PreviousId);
|
||||||
|
|
||||||
|
var employerWorkshopIds = _context.Employers.Where(x=>x.ContractingPartyId == prevInstitutionContracts.ContractingPartyId).Include(x=>x.WorkshopEmployers)
|
||||||
|
.SelectMany(x=>x.WorkshopEmployers).Select(x=>x.WorkshopId).Distinct().ToList();
|
||||||
|
|
||||||
if (prevInstitutionContracts == null)
|
if (prevInstitutionContracts == null)
|
||||||
{
|
{
|
||||||
throw new BadRequestException("قرارداد مالی قبلی یافت نشد");
|
throw new BadRequestException("قرارداد مالی قبلی یافت نشد");
|
||||||
@@ -2166,7 +2224,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
);
|
);
|
||||||
|
|
||||||
var workshopIds = prevInstitutionContracts.WorkshopGroup.CurrentWorkshops.Select(x => x.WorkshopId.Value);
|
var workshopIds = prevInstitutionContracts.WorkshopGroup.CurrentWorkshops.Select(x => x.WorkshopId.Value);
|
||||||
var workshops = await _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToListAsync();
|
|
||||||
|
var workshopsNotInInstitution = employerWorkshopIds.Where(x=> !workshopIds.Contains(x)).ToList();
|
||||||
|
|
||||||
|
var workshops = await _context.Workshops.Where(x => workshopIds.Contains(x.id) || employerWorkshopIds.Contains(x.id))
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
var workshopDetails = prevInstitutionContracts.WorkshopGroup.CurrentWorkshops
|
var workshopDetails = prevInstitutionContracts.WorkshopGroup.CurrentWorkshops
|
||||||
.Select(x =>
|
.Select(x =>
|
||||||
{
|
{
|
||||||
@@ -2208,6 +2271,32 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
RollCallInPerson = service.RollCallInPerson
|
RollCallInPerson = service.RollCallInPerson
|
||||||
};
|
};
|
||||||
}).ToList();
|
}).ToList();
|
||||||
|
var notIncludeWorskhopsLeftWork =await _context.LeftWorkList
|
||||||
|
.Where(x => workshopsNotInInstitution.Contains(x.WorkshopId) && x.StartWorkDate <= DateTime.Now &&
|
||||||
|
x.LeftWorkDate >= DateTime.Now)
|
||||||
|
.GroupBy(x => x.WorkshopId).ToListAsync();
|
||||||
|
var notIncludeWorskhopsInContract = workshopsNotInInstitution.Select(x =>
|
||||||
|
{
|
||||||
|
var workshop = workshops.FirstOrDefault(w => w.id == x);
|
||||||
|
var leftWorks = notIncludeWorskhopsLeftWork.FirstOrDefault(l=>l.Key ==x);
|
||||||
|
return new WorkshopTempViewModel()
|
||||||
|
{
|
||||||
|
WorkshopName = workshop?.WorkshopName ?? "فاقد کارگاه",
|
||||||
|
WorkshopServicesAmount = 0,
|
||||||
|
WorkshopServicesAmountStr = "0",
|
||||||
|
WorkshopId = x,
|
||||||
|
Id = 0,
|
||||||
|
ContractAndCheckout = false,
|
||||||
|
ContractAndCheckoutInPerson = false,
|
||||||
|
CustomizeCheckout = false,
|
||||||
|
CountPerson = leftWorks?.Count()??0,
|
||||||
|
Insurance = false,
|
||||||
|
InsuranceInPerson = false,
|
||||||
|
RollCall = false,
|
||||||
|
RollCallInPerson = false,
|
||||||
|
};
|
||||||
|
}).ToList();
|
||||||
|
workshopDetails = workshopDetails.Concat(notIncludeWorskhopsInContract).ToList();
|
||||||
var res = new InstitutionContractExtensionWorkshopsResponse()
|
var res = new InstitutionContractExtensionWorkshopsResponse()
|
||||||
{
|
{
|
||||||
TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(),
|
TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(),
|
||||||
@@ -2322,6 +2411,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
{
|
{
|
||||||
if (request.DiscountPercentage <= 0)
|
if (request.DiscountPercentage <= 0)
|
||||||
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا کمتر از صفر باشد");
|
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا کمتر از صفر باشد");
|
||||||
|
if (request.DiscountPercentage>=100)
|
||||||
|
{
|
||||||
|
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا بیشتر از صد باشد");
|
||||||
|
}
|
||||||
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
|
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
|
||||||
.FirstOrDefaultAsync();
|
.FirstOrDefaultAsync();
|
||||||
if (institutionTemp == null)
|
if (institutionTemp == null)
|
||||||
@@ -2362,6 +2455,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
if (request.IsInstallment)
|
if (request.IsInstallment)
|
||||||
{
|
{
|
||||||
var onetime = institutionTemp.OneTimePayment;
|
var onetime = institutionTemp.OneTimePayment;
|
||||||
|
onetime.TotalAmountWithoutDiscount = onetime.TotalAmount;
|
||||||
|
|
||||||
|
onetime.OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted;
|
||||||
|
institutionTemp.OneTimePayment.TotalAmountWithoutDiscount = onetime.TotalAmount;
|
||||||
|
institutionTemp.OneTimePayment.OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted;
|
||||||
|
|
||||||
res.OneTime = new()
|
res.OneTime = new()
|
||||||
{
|
{
|
||||||
PaymentAmount = onetime.PaymentAmount,
|
PaymentAmount = onetime.PaymentAmount,
|
||||||
@@ -2370,6 +2469,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
DiscountedAmount = onetime.DiscountedAmount,
|
DiscountedAmount = onetime.DiscountedAmount,
|
||||||
DiscountPercetage = onetime.DiscountPercetage,
|
DiscountPercetage = onetime.DiscountPercetage,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
institutionTemp.MonthlyPayment = new()
|
institutionTemp.MonthlyPayment = new()
|
||||||
{
|
{
|
||||||
Installments = res.Monthly.Installments,
|
Installments = res.Monthly.Installments,
|
||||||
@@ -2378,6 +2480,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
TotalAmount = res.Monthly.TotalAmount,
|
TotalAmount = res.Monthly.TotalAmount,
|
||||||
DiscountedAmount = res.Monthly.DiscountedAmount,
|
DiscountedAmount = res.Monthly.DiscountedAmount,
|
||||||
DiscountPercetage = res.Monthly.DiscountPercetage,
|
DiscountPercetage = res.Monthly.DiscountPercetage,
|
||||||
|
TotalAmountWithoutDiscount = institutionTemp.MonthlyPayment.TotalAmount,
|
||||||
|
OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted,
|
||||||
};
|
};
|
||||||
|
|
||||||
selectedPlan.TotalPayment = res.Monthly.TotalAmount;
|
selectedPlan.TotalPayment = res.Monthly.TotalAmount;
|
||||||
@@ -2388,6 +2492,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var monthly = institutionTemp.MonthlyPayment;
|
var monthly = institutionTemp.MonthlyPayment;
|
||||||
|
|
||||||
|
institutionTemp.MonthlyPayment.TotalAmountWithoutDiscount = monthly.TotalAmount;
|
||||||
|
|
||||||
res.Monthly = new()
|
res.Monthly = new()
|
||||||
{
|
{
|
||||||
PaymentAmount = monthly.PaymentAmount,
|
PaymentAmount = monthly.PaymentAmount,
|
||||||
@@ -2397,6 +2504,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
DiscountPercetage = monthly.DiscountPercetage,
|
DiscountPercetage = monthly.DiscountPercetage,
|
||||||
Installments = monthly.Installments,
|
Installments = monthly.Installments,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
institutionTemp.OneTimePayment = new()
|
institutionTemp.OneTimePayment = new()
|
||||||
{
|
{
|
||||||
PaymentAmount = res.OneTime.PaymentAmount,
|
PaymentAmount = res.OneTime.PaymentAmount,
|
||||||
@@ -2404,6 +2513,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
TotalAmount = res.OneTime.TotalAmount,
|
TotalAmount = res.OneTime.TotalAmount,
|
||||||
DiscountedAmount = res.OneTime.DiscountedAmount,
|
DiscountedAmount = res.OneTime.DiscountedAmount,
|
||||||
DiscountPercetage = res.OneTime.DiscountPercetage,
|
DiscountPercetage = res.OneTime.DiscountPercetage,
|
||||||
|
TotalAmountWithoutDiscount = institutionTemp.OneTimePayment.TotalAmount,
|
||||||
|
OneMonthPaymentWithoutDiscount = selectedPlan.OneMonthPaymentDiscounted,
|
||||||
};
|
};
|
||||||
selectedPlan.TotalPayment = res.OneTime.TotalAmount;
|
selectedPlan.TotalPayment = res.OneTime.TotalAmount;
|
||||||
selectedPlan.Obligation = res.OneTime.Obligation;
|
selectedPlan.Obligation = res.OneTime.Obligation;
|
||||||
@@ -2462,12 +2573,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
if (request.IsInstallment)
|
if (request.IsInstallment)
|
||||||
{
|
{
|
||||||
var prevMonthlyPayment = institutionTemp.MonthlyPayment;
|
var prevMonthlyPayment = institutionTemp.MonthlyPayment;
|
||||||
var resetTotalAmount = prevMonthlyPayment.TotalAmount.MoneyToDouble() /
|
var resetTotalAmount = prevMonthlyPayment.TotalAmountWithoutDiscount.MoneyToDouble();
|
||||||
(1 - (prevMonthlyPayment.DiscountPercetage / 100.0));
|
|
||||||
var resetTax = (resetTotalAmount * 0.10);
|
var resetTax = (resetTotalAmount * 0.10);
|
||||||
var paymentAmount = (resetTotalAmount + resetTax);
|
var paymentAmount = (resetTotalAmount + resetTax);
|
||||||
var newOneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble() /
|
var newOneMonthAmount = prevMonthlyPayment.OneMonthPaymentWithoutDiscount.MoneyToDouble();
|
||||||
(1 - (prevMonthlyPayment.DiscountPercetage / 100));
|
|
||||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||||
{
|
{
|
||||||
DiscountPercetage = 0,
|
DiscountPercetage = 0,
|
||||||
@@ -2518,11 +2627,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
var prevOneTimePayment = institutionTemp.OneTimePayment;
|
var prevOneTimePayment = institutionTemp.OneTimePayment;
|
||||||
var resetTotalAmount = prevOneTimePayment.TotalAmount.MoneyToDouble() /
|
var resetTotalAmount = prevOneTimePayment.TotalAmountWithoutDiscount.MoneyToDouble();
|
||||||
(1 - (prevOneTimePayment.DiscountPercetage / 100.0));
|
|
||||||
var resetTax = (resetTotalAmount * 0.10);
|
var resetTax = (resetTotalAmount * 0.10);
|
||||||
var newOneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble() /
|
var newOneMonthAmount = prevOneTimePayment.OneMonthPaymentWithoutDiscount.MoneyToDouble();
|
||||||
(1 - (prevOneTimePayment.DiscountPercetage / 100));
|
|
||||||
|
|
||||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||||
{
|
{
|
||||||
@@ -2541,8 +2648,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
TotalAmount = oneTimePayment.TotalAmount,
|
TotalAmount = oneTimePayment.TotalAmount,
|
||||||
DiscountedAmount = oneTimePayment.DiscountedAmount,
|
DiscountedAmount = oneTimePayment.DiscountedAmount,
|
||||||
DiscountPercetage = oneTimePayment.DiscountPercetage,
|
DiscountPercetage = oneTimePayment.DiscountPercetage,
|
||||||
|
TotalAmountWithoutDiscount = institutionTemp.OneTimePayment.TotalAmount,
|
||||||
|
OneMonthPaymentWithoutDiscount = institutionTemp.OneTimePayment.OneMonthPaymentWithoutDiscount
|
||||||
};
|
};
|
||||||
selectedPlan.TotalPayment = oneTimePayment.TotalAmount;
|
selectedPlan.TotalPayment = institutionTemp.HasContractInPerson?
|
||||||
|
(oneTimePayment.TotalAmount.MoneyToDouble()/(0.9)).ToMoney()
|
||||||
|
:oneTimePayment.TotalAmount;
|
||||||
selectedPlan.Obligation = oneTimePayment.Obligation;
|
selectedPlan.Obligation = oneTimePayment.Obligation;
|
||||||
selectedPlan.OneMonthPaymentDiscounted = oneTimePayment.OneMonthAmount;
|
selectedPlan.OneMonthPaymentDiscounted = oneTimePayment.OneMonthAmount;
|
||||||
selectedPlan.DailyCompenseation = (oneTimePayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
selectedPlan.DailyCompenseation = (oneTimePayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||||
@@ -2798,7 +2909,6 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
_context.InstitutionContractContactInfos.Add(contactinfo);
|
_context.InstitutionContractContactInfos.Add(contactinfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await SaveChangesAsync();
|
await SaveChangesAsync();
|
||||||
|
|
||||||
await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
||||||
@@ -2810,6 +2920,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
return opration.Succcedded();
|
return opration.Succcedded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
public async Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId)
|
public async Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId)
|
||||||
@@ -3415,7 +3526,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
public async Task<bool> SendReminderSmsForBackgroundTask()
|
public async Task<bool> SendReminderSmsForBackgroundTask()
|
||||||
{
|
{
|
||||||
var now = DateTime.Now;
|
var now = DateTime.Now;
|
||||||
|
_logger.LogInformation("================>> SendReminderSmsForBackgroundTask job run");
|
||||||
|
|
||||||
// تبدیل تاریخ میلادی به شمسی
|
// تبدیل تاریخ میلادی به شمسی
|
||||||
var persianNow = now.ToFarsi();
|
var persianNow = now.ToFarsi();
|
||||||
@@ -3454,7 +3565,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
if (checkAnyToExecute)
|
if (checkAnyToExecute)
|
||||||
{
|
{
|
||||||
//اجرای تسک
|
//اجرای تسک
|
||||||
|
_logger.LogInformation("اجرای تسک پیامک های یاد آور SendReminderSmsForBackgroundTask" + persianNow + " - " + hour + ":" + minute);
|
||||||
//دریافت لیست بدهکاران
|
//دریافت لیست بدهکاران
|
||||||
var smsListData = await GetSmsListData(now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
var smsListData = await GetSmsListData(now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
||||||
string typeOfSms = "یادآور بدهی ماهانه";
|
string typeOfSms = "یادآور بدهی ماهانه";
|
||||||
@@ -4229,6 +4340,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
{
|
{
|
||||||
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
|
string name = item.PartyName.Length > 18 ? item.PartyName.Substring(0, 18) : item.PartyName;
|
||||||
string errMess = $"{name}-خطا";
|
string errMess = $"{name}-خطا";
|
||||||
|
_logger.LogError(errMess);
|
||||||
await _smsService.Alarm("09114221321", errMess);
|
await _smsService.Alarm("09114221321", errMess);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4342,7 +4454,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
if (checkAnyToExecute)
|
if (checkAnyToExecute)
|
||||||
{
|
{
|
||||||
//اجرای تسک
|
//اجرای تسک
|
||||||
|
_logger.LogInformation("اجرای تسک ارسال یاد آور تایید قراداد مالی SendInstitutionContractConfirmSms" + persianNow + " - " + hour + ":" + minute);
|
||||||
//دریافت لیست قراداد های تایید نشده
|
//دریافت لیست قراداد های تایید نشده
|
||||||
var fromAmonthAgo = now.AddDays(-30);
|
var fromAmonthAgo = now.AddDays(-30);
|
||||||
var pendingContracts = await _context.InstitutionContractSet
|
var pendingContracts = await _context.InstitutionContractSet
|
||||||
@@ -4362,6 +4474,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
string typeOfSms = "یادآور تایید قرارداد مالی";
|
string typeOfSms = "یادآور تایید قرارداد مالی";
|
||||||
foreach (var item in pendingContracts)
|
foreach (var item in pendingContracts)
|
||||||
{
|
{
|
||||||
|
|
||||||
var sendResult = await _smsService.SendInstitutionCreationVerificationLink(item.Number, item.FullName,
|
var sendResult = await _smsService.SendInstitutionCreationVerificationLink(item.Number, item.FullName,
|
||||||
item.InstitutionId, item.ContractingPartyId, item.InstitutionContractId, typeOfSms);
|
item.InstitutionId, item.ContractingPartyId, item.InstitutionContractId, typeOfSms);
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
@@ -4771,6 +4884,19 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
|||||||
.Select(x => x.id).FirstOrDefaultAsync();
|
.Select(x => x.id).FirstOrDefaultAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId)
|
||||||
|
{
|
||||||
|
var institutionContract =await _context.InstitutionContractSet
|
||||||
|
.FirstOrDefaultAsync(x=>x.id ==currentInstitutionContractId);
|
||||||
|
if (institutionContract == null)
|
||||||
|
return null;
|
||||||
|
var previousContract = await _context.InstitutionContractSet
|
||||||
|
.Where(x => x.ContractingPartyId == institutionContract.ContractingPartyId)
|
||||||
|
.Where(x => x.ContractStartGr < institutionContract.ContractStartGr)
|
||||||
|
.OrderByDescending(x => x.ContractEndGr)
|
||||||
|
.FirstOrDefaultAsync();
|
||||||
|
return previousContract;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
@@ -755,7 +755,7 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
|||||||
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
|
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
|
||||||
{
|
{
|
||||||
checkout.SetUpdateNeeded();
|
checkout.SetUpdateNeeded();
|
||||||
if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare))
|
if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning == TypeOfCheckoutWarning.InsuranceEmployeeShare))
|
||||||
{
|
{
|
||||||
var createWarrning =
|
var createWarrning =
|
||||||
new CheckoutWarningMessage(
|
new CheckoutWarningMessage(
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.InfraStructure;
|
using _0_Framework.InfraStructure;
|
||||||
using Azure.Core;
|
|
||||||
using Company.Domain.LeaveAgg;
|
using Company.Domain.LeaveAgg;
|
||||||
using CompanyManagment.App.Contracts.Checkout;
|
using CompanyManagment.App.Contracts.Checkout;
|
||||||
using CompanyManagment.App.Contracts.InstitutionPlan;
|
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
using System;
|
||||||
@@ -11,6 +9,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
namespace CompanyManagment.EFCore.Repository;
|
namespace CompanyManagment.EFCore.Repository;
|
||||||
|
|
||||||
public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
||||||
@@ -436,15 +435,15 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
public OperationResult RemoveLeave(long id)
|
public async Task<OperationResult> RemoveLeave(long id)
|
||||||
{
|
{
|
||||||
var op = new OperationResult();
|
var op = new OperationResult();
|
||||||
var item = _context.LeaveList.FirstOrDefault(x => x.id == id);
|
var item = _context.LeaveList.FirstOrDefault(x => x.id == id);
|
||||||
if (item != null)
|
if (item != null)
|
||||||
{
|
{
|
||||||
var checkoutExist = _context.CheckoutSet
|
var checkoutExist =await _context.CheckoutSet
|
||||||
.Where(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId)
|
.Where(x => x.WorkshopId == item.WorkshopId && x.EmployeeId == item.EmployeeId)
|
||||||
.Where(x => item.StartLeave <= x.ContractEnd).ToList();
|
.Where(x => item.StartLeave <= x.ContractEnd).ToListAsync();
|
||||||
if (checkoutExist.Count > 0)
|
if (checkoutExist.Count > 0)
|
||||||
{
|
{
|
||||||
return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد");
|
return op.Failed("در بازه زمانی این مرخصی و یا بعد از آن فیش حقوقی وجود دارد");
|
||||||
@@ -679,6 +678,7 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
|||||||
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
var queryPaginationFilter = await query.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
|
var leaveResult = queryPaginationFilter.Select(item => new leaveListDto()
|
||||||
{
|
{
|
||||||
Id = item.id,
|
Id = item.id,
|
||||||
@@ -796,5 +796,54 @@ public class LeaveRepository : RepositoryBase<long, Leave>, ILeaveRepository
|
|||||||
|
|
||||||
return leaveList;
|
return leaveList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
|
||||||
|
{
|
||||||
|
var result = new LeaveListPrintDto();
|
||||||
|
var timeSpanHourlyLeave = new TimeSpan();
|
||||||
|
var dailyLeaveTime = new TimeSpan();
|
||||||
|
if (ids.Any())
|
||||||
|
{
|
||||||
|
var query = _context.LeaveList.Where(x => ids.Contains(x.id)).OrderByDescending(x=>x.StartLeave).AsQueryable();
|
||||||
|
|
||||||
|
#region sumOfLeaves
|
||||||
|
|
||||||
|
var hourly = await query.Where(x => x.PaidLeaveType == "ساعتی").Select(x => x.LeaveHourses).ToListAsync();
|
||||||
|
var daily = await query.Where(x => x.PaidLeaveType == "روزانه").Select(x => x.LeaveHourses).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
if (hourly.Any())
|
||||||
|
timeSpanHourlyLeave = new TimeSpan(hourly.Sum(x => TimeOnly.Parse(x).Ticks));
|
||||||
|
if (daily.Any())
|
||||||
|
dailyLeaveTime = daily.Sum(x => Convert.ToInt32(x)) * TimeSpan.FromDays(1);
|
||||||
|
|
||||||
|
var sumOfLeaves = timeSpanHourlyLeave.Add(dailyLeaveTime);
|
||||||
|
|
||||||
|
result.SumOfEmployeeleaves = sumOfLeaves.ToFarsiDaysAndHoursAndMinutes();
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
result.LeavePrintListItemsDto = await query.Select(item => new LeavePrintListItemsDto
|
||||||
|
{
|
||||||
|
YearStr = $"{item.Year}",
|
||||||
|
MonthStr = item.Month.ToFarsiMonthByIntNumber(),
|
||||||
|
StartLeave = item.StartLeave.ToFarsi(),
|
||||||
|
EndLeave = item.EndLeave.ToFarsi(),
|
||||||
|
LeaveType = item.LeaveType,
|
||||||
|
HourlyInterval = item.PaidLeaveType == "ساعتی" ? $"{item.StartLeave.TimeOfDay:hh\\:mm} الی {item.EndLeave.TimeOfDay:hh\\:mm}" : "-",
|
||||||
|
LeaveDuration = Tools.CalculateLeaveHoursAndDays(item.PaidLeaveType, item.LeaveHourses),
|
||||||
|
IsAccepted = item.IsAccepted,
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
result.EmployeeFullName = query.FirstOrDefault()!.EmployeeFullName;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using _0_Framework.Application.Sms;
|
using _0_Framework.Application.Sms;
|
||||||
using Company.Domain.SmsResultAgg;
|
using Company.Domain.SmsResultAgg;
|
||||||
using CompanyManagment.App.Contracts.SmsResult;
|
using CompanyManagment.App.Contracts.SmsResult;
|
||||||
@@ -10,6 +6,11 @@ using IPE.SmsIrClient;
|
|||||||
using IPE.SmsIrClient.Models.Requests;
|
using IPE.SmsIrClient.Models.Requests;
|
||||||
using IPE.SmsIrClient.Models.Results;
|
using IPE.SmsIrClient.Models.Results;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
using SmsResult = Company.Domain.SmsResultAgg.SmsResult;
|
using SmsResult = Company.Domain.SmsResultAgg.SmsResult;
|
||||||
|
|
||||||
|
|
||||||
@@ -17,521 +18,531 @@ namespace CompanyManagment.EFCore.Services;
|
|||||||
|
|
||||||
public class SmsService : ISmsService
|
public class SmsService : ISmsService
|
||||||
{
|
{
|
||||||
private readonly IConfiguration _configuration;
|
private readonly IConfiguration _configuration;
|
||||||
private readonly ISmsResultRepository _smsResultRepository;
|
private readonly ISmsResultRepository _smsResultRepository;
|
||||||
private readonly bool _isDevEnvironment;
|
private readonly bool _isDevEnvironment;
|
||||||
private readonly List<string> _testNumbers;
|
private readonly List<string> _testNumbers;
|
||||||
public SmsIr SmsIr { get; set; }
|
private readonly ILogger<SmsService> _logger;
|
||||||
|
public SmsIr SmsIr { get; set; }
|
||||||
|
|
||||||
|
|
||||||
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository)
|
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository, ILogger<SmsService> logger)
|
||||||
{
|
{
|
||||||
_configuration = configuration;
|
_configuration = configuration;
|
||||||
_smsResultRepository = smsResultRepository;
|
_smsResultRepository = smsResultRepository;
|
||||||
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
_logger = logger;
|
||||||
|
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
|
|
||||||
// خواندن تنظیمات SMS از appsettings
|
// خواندن تنظیمات SMS از appsettings
|
||||||
var smsSettings = _configuration.GetSection("SmsSettings");
|
var smsSettings = _configuration.GetSection("SmsSettings");
|
||||||
_isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode");
|
_isDevEnvironment = smsSettings.GetValue<bool>("IsTestMode");
|
||||||
_testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>();
|
_testNumbers = smsSettings.GetSection("TestNumbers").Get<List<string>>() ?? new List<string>();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// متد مرکزی برای ارسال پیامک که محیط dev را چک میکند
|
/// متد مرکزی برای ارسال پیامک که محیط dev را چک میکند
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters)
|
private async Task<SmsIrResult<VerifySendResult>> VerifySendSmsAsync(string number, int templateId, VerifySendParameter[] parameters)
|
||||||
{
|
{
|
||||||
// اگر محیط dev است و شمارههای تست وجود دارد، به شمارههای تست ارسال میشود
|
// اگر محیط dev است و شمارههای تست وجود دارد، به شمارههای تست ارسال میشود
|
||||||
if (_isDevEnvironment && _testNumbers is { Count: > 0 })
|
if (_isDevEnvironment && _testNumbers is { Count: > 0 })
|
||||||
{
|
{
|
||||||
// ارسال به همه شمارههای تست
|
// ارسال به همه شمارههای تست
|
||||||
SmsIrResult<VerifySendResult> lastResult = null;
|
SmsIrResult<VerifySendResult> lastResult = null;
|
||||||
foreach (var testNumber in _testNumbers)
|
foreach (var testNumber in _testNumbers)
|
||||||
{
|
{
|
||||||
lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters);
|
lastResult = await SmsIr.VerifySendAsync(testNumber, templateId, parameters);
|
||||||
}
|
}
|
||||||
return lastResult; // برگرداندن نتیجه آخرین ارسال
|
return lastResult; // برگرداندن نتیجه آخرین ارسال
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// ارسال به شماره واقعی
|
// ارسال به شماره واقعی
|
||||||
return await SmsIr.VerifySendAsync(number, templateId, parameters);
|
return await SmsIr.VerifySendAsync(number, templateId, parameters);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Send(string number, string message)
|
public void Send(string number, string message)
|
||||||
{
|
{
|
||||||
//var token = GetToken();
|
//var token = GetToken();
|
||||||
//var lines = new SmsLine().GetSmsLines(token);
|
//var lines = new SmsLine().GetSmsLines(token);
|
||||||
//if (lines == null) return;
|
//if (lines == null) return;
|
||||||
|
|
||||||
//var line = lines.SMSLines.Last().LineNumber.ToString();
|
//var line = lines.SMSLines.Last().LineNumber.ToString();
|
||||||
//var data = new MessageSendObject
|
//var data = new MessageSendObject
|
||||||
//{
|
//{
|
||||||
// Messages = new List<string>
|
// Messages = new List<string>
|
||||||
// {message}.ToArray(),
|
// {message}.ToArray(),
|
||||||
// MobileNumbers = new List<string> {number}.ToArray(),
|
// MobileNumbers = new List<string> {number}.ToArray(),
|
||||||
// LineNumber = line,
|
// LineNumber = line,
|
||||||
// SendDateTime = DateTime.Now,
|
// SendDateTime = DateTime.Now,
|
||||||
// CanContinueInCaseOfError = true
|
// CanContinueInCaseOfError = true
|
||||||
//};
|
//};
|
||||||
//var messageSendResponseObject =
|
//var messageSendResponseObject =
|
||||||
// new MessageSend().Send(token, data);
|
// new MessageSend().Send(token, data);
|
||||||
|
|
||||||
//if (messageSendResponseObject.IsSuccessful) return;
|
//if (messageSendResponseObject.IsSuccessful) return;
|
||||||
|
|
||||||
//line = lines.SMSLines.First().LineNumber.ToString();
|
//line = lines.SMSLines.First().LineNumber.ToString();
|
||||||
//data.LineNumber = line;
|
//data.LineNumber = line;
|
||||||
//new MessageSend().Send(token, data);
|
//new MessageSend().Send(token, data);
|
||||||
}
|
}
|
||||||
public bool VerifySend(string number, string message)
|
public bool VerifySend(string number, string message)
|
||||||
{
|
{
|
||||||
var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) });
|
var verificationSendResult = VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", message) });
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
if (verificationSendResult.IsCompletedSuccessfully)
|
if (verificationSendResult.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
|
|
||||||
var resStartStatus = verificationSendResult.Result;
|
var resStartStatus = verificationSendResult.Result;
|
||||||
var b = resStartStatus.Status;
|
var b = resStartStatus.Status;
|
||||||
var resResult = verificationSendResult.Status;
|
var resResult = verificationSendResult.Status;
|
||||||
var a = verificationSendResult.IsCompleted;
|
var a = verificationSendResult.IsCompleted;
|
||||||
var reseExceptiont = verificationSendResult.Exception;
|
var reseExceptiont = verificationSendResult.Exception;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
var resStartStatus = verificationSendResult.Status;
|
var resStartStatus = verificationSendResult.Status;
|
||||||
var resResult = verificationSendResult.Status;
|
var resResult = verificationSendResult.Status;
|
||||||
var reseExceptiont = verificationSendResult.Exception;
|
var reseExceptiont = verificationSendResult.Exception;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool LoginSend(string number, string message)
|
public bool LoginSend(string number, string message)
|
||||||
{
|
{
|
||||||
var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) });
|
var verificationSendResult = VerifySendSmsAsync(number, 635330, new VerifySendParameter[] { new VerifySendParameter("LOGINCODE", message) });
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
if (verificationSendResult.IsCompletedSuccessfully)
|
if (verificationSendResult.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
|
|
||||||
var resStartStatus = verificationSendResult.Result;
|
var resStartStatus = verificationSendResult.Result;
|
||||||
var b = resStartStatus.Status;
|
var b = resStartStatus.Status;
|
||||||
var resResult = verificationSendResult.Status;
|
var resResult = verificationSendResult.Status;
|
||||||
var a = verificationSendResult.IsCompleted;
|
var a = verificationSendResult.IsCompleted;
|
||||||
var reseExceptiont = verificationSendResult.Exception;
|
var reseExceptiont = verificationSendResult.Exception;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
var resStartStatus = verificationSendResult.Status;
|
var resStartStatus = verificationSendResult.Status;
|
||||||
var resResult = verificationSendResult.Status;
|
var resResult = verificationSendResult.Status;
|
||||||
var reseExceptiont = verificationSendResult.Exception;
|
var reseExceptiont = verificationSendResult.Exception;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
|
public async Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code)
|
||||||
{
|
{
|
||||||
var result = new SentSmsViewModel();
|
var result = new SentSmsViewModel();
|
||||||
var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
|
var sendResult = await VerifySendSmsAsync(number, 768382, new VerifySendParameter[] { new VerifySendParameter("VerificationCode", code) });
|
||||||
Thread.Sleep(2000);
|
Thread.Sleep(2000);
|
||||||
|
|
||||||
if (sendResult.Message == "موفق")
|
if (sendResult.Message == "موفق")
|
||||||
{
|
{
|
||||||
var status = sendResult.Status;
|
var status = sendResult.Status;
|
||||||
var message = sendResult.Message;
|
var message = sendResult.Message;
|
||||||
var messaeId = sendResult.Data.MessageId;
|
var messaeId = sendResult.Data.MessageId;
|
||||||
return result.Succedded(status, message, messaeId);
|
return result.Succedded(status, message, messaeId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var status = sendResult.Status;
|
var status = sendResult.Status;
|
||||||
var message = sendResult.Message;
|
var message = sendResult.Message;
|
||||||
var messaeId = sendResult.Data.MessageId;
|
var messaeId = sendResult.Data.MessageId;
|
||||||
return result.Failed(status, message, messaeId);
|
return result.Failed(status, message, messaeId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SendAccountsInfo(string number, string fullName, string userName)
|
public bool SendAccountsInfo(string number, string fullName, string userName)
|
||||||
{
|
{
|
||||||
|
|
||||||
var checkLength = fullName.Length;
|
var checkLength = fullName.Length;
|
||||||
if (checkLength > 25)
|
if (checkLength > 25)
|
||||||
fullName = fullName.Substring(0, 24);
|
fullName = fullName.Substring(0, 24);
|
||||||
|
|
||||||
var sendResult = VerifySendSmsAsync(number, 725814, new VerifySendParameter[] { new VerifySendParameter("FULLNAME", fullName), new VerifySendParameter("USERNAME", userName), new VerifySendParameter("PASSWORD", userName) });
|
var sendResult = VerifySendSmsAsync(number, 725814, new VerifySendParameter[] { new VerifySendParameter("FULLNAME", fullName), new VerifySendParameter("USERNAME", userName), new VerifySendParameter("PASSWORD", userName) });
|
||||||
|
|
||||||
|
|
||||||
Console.WriteLine(userName + " - " + sendResult.Result.Status);
|
Console.WriteLine(userName + " - " + sendResult.Result.Status);
|
||||||
if (sendResult.IsCompletedSuccessfully)
|
if (sendResult.IsCompletedSuccessfully)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<ApiResultViewModel> GetByMessageId(int messId)
|
public async Task<ApiResultViewModel> GetByMessageId(int messId)
|
||||||
{
|
{
|
||||||
|
|
||||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
var response = await smsIr.GetReportAsync(messId);
|
var response = await smsIr.GetReportAsync(messId);
|
||||||
MessageReportResult messages = response.Data;
|
MessageReportResult messages = response.Data;
|
||||||
|
|
||||||
var appendData = new ApiResultViewModel()
|
var appendData = new ApiResultViewModel()
|
||||||
{
|
{
|
||||||
MessageId = messages.MessageId,
|
MessageId = messages.MessageId,
|
||||||
LineNumber = messages.LineNumber,
|
LineNumber = messages.LineNumber,
|
||||||
Mobile = messages.Mobile,
|
Mobile = messages.Mobile,
|
||||||
MessageText = messages.MessageText,
|
MessageText = messages.MessageText,
|
||||||
SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime),
|
SendUnixTime = UnixTimeStampToDateTime(messages.SendDateTime),
|
||||||
DeliveryState = DeliveryStatus(messages.DeliveryState),
|
DeliveryState = DeliveryStatus(messages.DeliveryState),
|
||||||
DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime),
|
DeliveryUnixTime = UnixTimeStampToDateTime(messages.DeliveryDateTime),
|
||||||
DeliveryColor = DeliveryColorStatus(messages.DeliveryState),
|
DeliveryColor = DeliveryColorStatus(messages.DeliveryState),
|
||||||
};
|
};
|
||||||
return appendData;
|
return appendData;
|
||||||
}
|
}
|
||||||
public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate)
|
public async Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate)
|
||||||
{
|
{
|
||||||
var st = new DateTime(2024, 6, 2);
|
var st = new DateTime(2024, 6, 2);
|
||||||
var ed = new DateTime(2024, 7, 1);
|
var ed = new DateTime(2024, 7, 1);
|
||||||
if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
|
if (!string.IsNullOrWhiteSpace(startDate) && startDate.Length == 10)
|
||||||
{
|
{
|
||||||
st = startDate.ToGeorgianDateTime();
|
st = startDate.ToGeorgianDateTime();
|
||||||
}
|
}
|
||||||
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
|
if (!string.IsNullOrWhiteSpace(endDate) && endDate.Length == 10)
|
||||||
{
|
{
|
||||||
ed = endDate.ToGeorgianDateTime();
|
ed = endDate.ToGeorgianDateTime();
|
||||||
}
|
}
|
||||||
var res = new List<ApiResultViewModel>();
|
var res = new List<ApiResultViewModel>();
|
||||||
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
Int32 unixTimestamp = (int)st.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||||
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
Int32 unixTimestamp2 = (int)ed.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||||
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600
|
// int? fromDateUnixTime = null; // unix time - for instance: 1700598600
|
||||||
//int? toDateUnixTime = null; // unix time - for instance: 1703190600
|
//int? toDateUnixTime = null; // unix time - for instance: 1703190600
|
||||||
int pageNumber = 2;
|
int pageNumber = 2;
|
||||||
int pageSize = 100; // max: 100
|
int pageSize = 100; // max: 100
|
||||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
|
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
|
||||||
|
|
||||||
MessageReportResult[] messages = response.Data;
|
MessageReportResult[] messages = response.Data;
|
||||||
foreach (var message in messages)
|
foreach (var message in messages)
|
||||||
{
|
{
|
||||||
var appendData = new ApiResultViewModel()
|
var appendData = new ApiResultViewModel()
|
||||||
{
|
{
|
||||||
MessageId = message.MessageId,
|
MessageId = message.MessageId,
|
||||||
LineNumber = message.LineNumber,
|
LineNumber = message.LineNumber,
|
||||||
Mobile = message.Mobile,
|
Mobile = message.Mobile,
|
||||||
MessageText = message.MessageText,
|
MessageText = message.MessageText,
|
||||||
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
|
SendUnixTime = UnixTimeStampToDateTime(message.SendDateTime),
|
||||||
DeliveryState = DeliveryStatus(message.DeliveryState),
|
DeliveryState = DeliveryStatus(message.DeliveryState),
|
||||||
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
|
DeliveryUnixTime = UnixTimeStampToDateTime(message.DeliveryDateTime),
|
||||||
DeliveryColor = DeliveryColorStatus(message.DeliveryState),
|
DeliveryColor = DeliveryColorStatus(message.DeliveryState),
|
||||||
};
|
};
|
||||||
res.Add(appendData);
|
res.Add(appendData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string DeliveryStatus(byte? dv)
|
public string DeliveryStatus(byte? dv)
|
||||||
{
|
{
|
||||||
string mess = "";
|
string mess = "";
|
||||||
switch (dv)
|
switch (dv)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
mess = "رسیده به گوشی";
|
mess = "رسیده به گوشی";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mess = "نرسیده به گوشی";
|
mess = "نرسیده به گوشی";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mess = "پردازش در مخابرات";
|
mess = "پردازش در مخابرات";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mess = "نرسیده به مخابرات";
|
mess = "نرسیده به مخابرات";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
mess = "سیده به مخابرات";
|
mess = "سیده به مخابرات";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
mess = "خطا";
|
mess = "خطا";
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
mess = "لیست سیاه";
|
mess = "لیست سیاه";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mess = "";
|
mess = "";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mess;
|
return mess;
|
||||||
}
|
}
|
||||||
public string DeliveryColorStatus(byte? dv)
|
public string DeliveryColorStatus(byte? dv)
|
||||||
{
|
{
|
||||||
string mess = "";
|
string mess = "";
|
||||||
switch (dv)
|
switch (dv)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
mess = "successSend";
|
mess = "successSend";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mess = "errSend";
|
mess = "errSend";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mess = "pSend";
|
mess = "pSend";
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
mess = "noSend";
|
mess = "noSend";
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
mess = "itcSend";
|
mess = "itcSend";
|
||||||
break;
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
mess = "redSend";
|
mess = "redSend";
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
mess = "blockSend";
|
mess = "blockSend";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
mess = "";
|
mess = "";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return mess;
|
return mess;
|
||||||
}
|
}
|
||||||
public string UnixTimeStampToDateTime(int? unixTimeStamp)
|
public string UnixTimeStampToDateTime(int? unixTimeStamp)
|
||||||
{
|
{
|
||||||
if (unixTimeStamp != null)
|
if (unixTimeStamp != null)
|
||||||
{
|
{
|
||||||
// Unix timestamp is seconds past epoch
|
// Unix timestamp is seconds past epoch
|
||||||
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
|
||||||
dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime();
|
dateTime = dateTime.AddSeconds(Convert.ToDouble(unixTimeStamp)).ToLocalTime();
|
||||||
var time = dateTime.ToFarsiFull();
|
var time = dateTime.ToFarsiFull();
|
||||||
return time;
|
return time;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
private string GetToken()
|
private string GetToken()
|
||||||
{
|
{
|
||||||
return "";
|
return "";
|
||||||
//var smsSecrets = _configuration.GetSection("SmsSecrets");
|
//var smsSecrets = _configuration.GetSection("SmsSecrets");
|
||||||
//var tokenService = new Token();
|
//var tokenService = new Token();
|
||||||
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
//return tokenService.GetToken("x-api-key", "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Mahan
|
#region Mahan
|
||||||
|
|
||||||
public async Task<double> GetCreditAmount()
|
public async Task<double> GetCreditAmount()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var credit = await SmsIr.GetCreditAsync();
|
var credit = await SmsIr.GetCreditAsync();
|
||||||
return (double)credit.Data;
|
return (double)credit.Data;
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms)
|
public async Task<bool> SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms)
|
||||||
{
|
{
|
||||||
typeOfSms = string.IsNullOrWhiteSpace(typeOfSms) ? "لینک تاییدیه ایجاد قرارداد مالی" : typeOfSms;
|
typeOfSms = string.IsNullOrWhiteSpace(typeOfSms) ? "لینک تاییدیه ایجاد قرارداد مالی" : typeOfSms;
|
||||||
|
|
||||||
|
|
||||||
var full = fullName;
|
var full = fullName;
|
||||||
var fullName1 = fullName;
|
var fullName1 = fullName;
|
||||||
if (fullName.Length >= 25)
|
if (fullName.Length >= 25)
|
||||||
{
|
{
|
||||||
fullName1 = fullName.Substring(0, 25);
|
fullName1 = fullName.Substring(0, 25);
|
||||||
}
|
}
|
||||||
var fullName2 = "";
|
var fullName2 = "";
|
||||||
if (full.Length > 25)
|
if (full.Length > 25)
|
||||||
{
|
{
|
||||||
fullName2 = full.Substring(25);
|
fullName2 = full.Substring(25);
|
||||||
if (fullName2.Length>25)
|
if (fullName2.Length > 25)
|
||||||
{
|
{
|
||||||
fullName2 = fullName2.Substring(0, 25);
|
fullName2 = fullName2.Substring(0, 25);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var guidStr = institutionId.ToString();
|
var guidStr = institutionId.ToString();
|
||||||
var firstPart = guidStr.Substring(0, 15);
|
var firstPart = guidStr.Substring(0, 15);
|
||||||
var secondPart = guidStr.Substring(15);
|
var secondPart = guidStr.Substring(15);
|
||||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||||
{
|
{
|
||||||
new("FULLNAME1", fullName1),
|
new("FULLNAME1", fullName1),
|
||||||
new("FULLNAME2", fullName2),
|
new("FULLNAME2", fullName2),
|
||||||
new("CODE1",firstPart),
|
new("CODE1",firstPart),
|
||||||
new("CODE2",secondPart)
|
new("CODE2",secondPart)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (verificationSendResult.Status == 1)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("ارسال لینک قراداد مالی موفق بود");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.LogError("خطا در ارسال لینک قراداد مالی");
|
||||||
|
}
|
||||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, typeOfSms,
|
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, typeOfSms,
|
||||||
fullName, number, contractingPartyId, institutionContractId);
|
fullName, number, contractingPartyId, institutionContractId);
|
||||||
await _smsResultRepository.CreateAsync(smsResult);
|
await _smsResultRepository.CreateAsync(smsResult);
|
||||||
await _smsResultRepository.SaveChangesAsync();
|
await _smsResultRepository.SaveChangesAsync();
|
||||||
return verificationSendResult.Status == 0;
|
_logger.LogInformation("ذخیره در دیتابیس موفق بود");
|
||||||
}
|
return verificationSendResult.Status == 0;
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId,
|
public async Task<bool> SendInstitutionAmendmentVerificationLink(string number, string fullName, Guid institutionId,
|
||||||
long contractingPartyId, long institutionContractId)
|
long contractingPartyId, long institutionContractId)
|
||||||
{
|
{
|
||||||
var guidStr = institutionId.ToString();
|
var guidStr = institutionId.ToString();
|
||||||
var firstPart = guidStr.Substring(0, 15);
|
var firstPart = guidStr.Substring(0, 15);
|
||||||
var secondPart = guidStr.Substring(15);
|
var secondPart = guidStr.Substring(15);
|
||||||
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
var verificationSendResult = await VerifySendSmsAsync(number, 527519, new VerifySendParameter[]
|
||||||
{
|
{
|
||||||
new("FULLNAME", fullName),
|
new("FULLNAME", fullName),
|
||||||
new("CODE1",firstPart),
|
new("CODE1",firstPart),
|
||||||
new("CODE2",secondPart)
|
new("CODE2",secondPart)
|
||||||
});
|
});
|
||||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی",
|
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه ارتقا قرارداد مالی",
|
||||||
fullName, number, contractingPartyId, institutionContractId);
|
fullName, number, contractingPartyId, institutionContractId);
|
||||||
await _smsResultRepository.CreateAsync(smsResult);
|
await _smsResultRepository.CreateAsync(smsResult);
|
||||||
await _smsResultRepository.SaveChangesAsync();
|
await _smsResultRepository.SaveChangesAsync();
|
||||||
return verificationSendResult.Status == 0;
|
return verificationSendResult.Status == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||||
long contractingPartyId, long institutionContractId)
|
long contractingPartyId, long institutionContractId)
|
||||||
{
|
{
|
||||||
var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[]
|
var verificationSendResult = await VerifySendSmsAsync(number, 965348, new VerifySendParameter[]
|
||||||
{
|
{
|
||||||
new("VERIFYCODE", code)
|
new("VERIFYCODE", code)
|
||||||
});
|
});
|
||||||
|
|
||||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
|
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
|
||||||
contractingPartyFullName, number, contractingPartyId, institutionContractId);
|
contractingPartyFullName, number, contractingPartyId, institutionContractId);
|
||||||
await _smsResultRepository.CreateAsync(smsResult);
|
await _smsResultRepository.CreateAsync(smsResult);
|
||||||
await _smsResultRepository.SaveChangesAsync();
|
await _smsResultRepository.SaveChangesAsync();
|
||||||
return verificationSendResult.Status == 0;
|
return verificationSendResult.Status == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount)
|
public _0_Framework.Application.Sms.SmsResult TaskReminderSms(string number, string taskCount)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region InstitutionContractSMS
|
#region InstitutionContractSMS
|
||||||
|
|
||||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
|
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBillNew(string number, int tamplateId, string fullname, string amount, string code1,
|
||||||
string code2)
|
string code2)
|
||||||
{
|
{
|
||||||
|
|
||||||
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
var result = new ValueTuple<byte, string, int, bool>();
|
var result = new ValueTuple<byte, string, int, bool>();
|
||||||
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
|
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
|
||||||
new VerifySendParameter[]
|
new VerifySendParameter[]
|
||||||
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2) });
|
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("CODE1", code1), new("CODE2", code2) });
|
||||||
Thread.Sleep(500);
|
Thread.Sleep(500);
|
||||||
|
|
||||||
|
|
||||||
if (sendResult.Message == "موفق")
|
if (sendResult.Message == "موفق")
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("ارسال پیامک یادآور موفق بود");
|
||||||
|
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
_logger.LogError("خطا در ارسال یاد آور");
|
||||||
|
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
||||||
|
return result;
|
||||||
|
|
||||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
}
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
|
||||||
return result;
|
string aprove)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
|
var result = new ValueTuple<byte, string, int, bool>();
|
||||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id,
|
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
|
||||||
string aprove)
|
new VerifySendParameter[]
|
||||||
{
|
{ new("FULLNAME", fullname), new("AMOUNT", amount), new("ID", id), new("APROVE", aprove) });
|
||||||
|
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("ID", id), new("APROVE", aprove) });
|
|
||||||
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);
|
public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
|
||||||
return result;
|
string aprove)
|
||||||
}
|
{
|
||||||
|
var tamplateId = 117946;
|
||||||
|
var result = new ValueTuple<byte, string, int, bool>();
|
||||||
|
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
|
|
||||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
var sendResult = await smsIr.VerifySendAsync(number, tamplateId,
|
||||||
return result;
|
new VerifySendParameter[]
|
||||||
}
|
{
|
||||||
|
new("FULLNAME", fullname), new("AMOUNT", amount), new("ACCOUNTTYPE", accountType), new("ID", id),
|
||||||
public async Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id,
|
new("APROVE", aprove)
|
||||||
string aprove)
|
});
|
||||||
{
|
Thread.Sleep(500);
|
||||||
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);
|
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
result = (sendResult.Status, sendResult.Message, sendResult.Data.MessageId, false);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region AlarmMessage
|
#region AlarmMessage
|
||||||
|
|
||||||
public async Task<bool> Alarm(string number, string message)
|
public async Task<bool> Alarm(string number, string message)
|
||||||
{
|
{
|
||||||
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
var smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||||
|
|
||||||
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
|
//var bulkSendResult = smsIr.BulkSendAsync(95007079000006, "your text message", new string[] { "9120000000" });
|
||||||
|
|
||||||
var verificationSendResult =
|
var verificationSendResult =
|
||||||
smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) });
|
smsIr.VerifySendAsync(number, 662874, new VerifySendParameter[] { new("ALARM", message) });
|
||||||
Thread.Sleep(1000);
|
Thread.Sleep(1000);
|
||||||
var status = verificationSendResult.Result.Status;
|
var status = verificationSendResult.Result.Status;
|
||||||
var mess = verificationSendResult.Result.Message;
|
var mess = verificationSendResult.Result.Message;
|
||||||
var messaeId = verificationSendResult.Result.Data.MessageId;
|
var messaeId = verificationSendResult.Result.Data.MessageId;
|
||||||
if (verificationSendResult.IsCompletedSuccessfully) return true;
|
if (verificationSendResult.IsCompletedSuccessfully) return true;
|
||||||
|
|
||||||
var resStartStatus = verificationSendResult.Result;
|
var resStartStatus = verificationSendResult.Result;
|
||||||
var resResult = verificationSendResult.Status;
|
var resResult = verificationSendResult.Status;
|
||||||
var reseExceptiont = verificationSendResult.Exception;
|
var reseExceptiont = verificationSendResult.Exception;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,6 @@ public class CreateProjectCommandValidator:AbstractValidator<CreateProjectComman
|
|||||||
public CreateProjectCommandValidator()
|
public CreateProjectCommandValidator()
|
||||||
{
|
{
|
||||||
RuleFor(x => x.Name)
|
RuleFor(x => x.Name)
|
||||||
.MaximumLength(25)
|
|
||||||
.WithMessage("نام نمیتواند بیشتر از 25 کاراکتر باشد")
|
|
||||||
.NotEmpty()
|
.NotEmpty()
|
||||||
.NotNull()
|
.NotNull()
|
||||||
.WithMessage("نام نمیتواند خالی باشد");
|
.WithMessage("نام نمیتواند خالی باشد");
|
||||||
|
|||||||
@@ -8,14 +8,13 @@ namespace GozareshgirProgramManager.Application.Modules.Projects.Queries.Project
|
|||||||
|
|
||||||
public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery<ProjectBoardDetailResponse>;
|
public record ProjectBoardDetailQuery(Guid SectionId) : IBaseQuery<ProjectBoardDetailResponse>;
|
||||||
|
|
||||||
public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTime,string RemainingTime );
|
public record ProjectBoardDetailResponse(List<ProjectBoardDetailUserResponse> Users, string TotalTimeMinute,string RemainingTimeMinute );
|
||||||
|
|
||||||
public record ProjectBoardDetailUserResponse
|
public record ProjectBoardDetailUserResponse
|
||||||
{
|
{
|
||||||
public List<ProjectBoardDetailUserHistoryResponse> Histories { get; init; }
|
public List<ProjectBoardDetailUserHistoryResponse> Histories { get; init; }
|
||||||
public string UserFullName { get; init; }
|
public string UserFullName { get; init; }
|
||||||
public string TotalTime { get; init; }
|
public string SpentTimeMinute { get; init; }
|
||||||
public string SpentTime { get; init; }
|
|
||||||
public long UserId { get; init; }
|
public long UserId { get; init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -24,7 +23,7 @@ public record ProjectBoardDetailUserHistoryResponse
|
|||||||
public string Date { get; init; }
|
public string Date { get; init; }
|
||||||
public string startTime { get; init; }
|
public string startTime { get; init; }
|
||||||
public string EndTime { get; init; }
|
public string EndTime { get; init; }
|
||||||
public string TotalTime { get; init; }
|
public string TotalTimeMinute { get; init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDetailQuery, ProjectBoardDetailResponse>
|
public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDetailQuery, ProjectBoardDetailResponse>
|
||||||
@@ -68,18 +67,18 @@ public class ProjectBoardDetailQueryHandler : IBaseQueryHandler<ProjectBoardDeta
|
|||||||
{
|
{
|
||||||
UserId = x.Key,
|
UserId = x.Key,
|
||||||
UserFullName = usersDict[x.Key],
|
UserFullName = usersDict[x.Key],
|
||||||
TotalTime = TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalHours.ToString(CultureInfo.InvariantCulture),
|
SpentTimeMinute = ((int)TimeSpan.FromTicks(x.Sum(h=>h.GetTimeSpent().Ticks)).TotalMinutes).ToString(CultureInfo.InvariantCulture),
|
||||||
Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse()
|
Histories = x.Select(h => new ProjectBoardDetailUserHistoryResponse()
|
||||||
{
|
{
|
||||||
Date = h.StartDate.ToFarsi(),
|
Date = h.StartDate.ToFarsi(),
|
||||||
startTime = h.StartDate.ToString("HH:mm"),
|
startTime = h.StartDate.ToString("HH:mm"),
|
||||||
EndTime = h.EndDate?.ToString("HH:mm") ?? "-",
|
EndTime = h.EndDate?.ToString("HH:mm") ?? "-",
|
||||||
TotalTime = h.GetTimeSpent().ToString(@"hh\:mm")
|
TotalTimeMinute = h.GetTimeSpent().TotalMinutes.ToString("F0",CultureInfo.InvariantCulture)
|
||||||
}).ToList()
|
}).ToList()
|
||||||
};
|
};
|
||||||
}).ToList();
|
}).ToList();
|
||||||
var response = new ProjectBoardDetailResponse(users, $"{(int)totalActivityTimeSpan.TotalHours}:{totalActivityTimeSpan.Minutes:D2}",
|
var response = new ProjectBoardDetailResponse(users, $"{(int)finalTime.TotalMinutes}",
|
||||||
$"{(int)remainingTimeSpan.TotalHours}:{remainingTimeSpan.Minutes:D2}");
|
$"{(int)remainingTimeSpan.TotalMinutes:D2}");
|
||||||
return OperationResult<ProjectBoardDetailResponse>.Success(response);
|
return OperationResult<ProjectBoardDetailResponse>.Success(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -43,6 +43,9 @@
|
|||||||
case TypeOfSmsSetting.Warning:
|
case TypeOfSmsSetting.Warning:
|
||||||
<h5 class="modal-title">ایجاد پیامک هشدار قضائی</h5>
|
<h5 class="modal-title">ایجاد پیامک هشدار قضائی</h5>
|
||||||
break;
|
break;
|
||||||
|
case TypeOfSmsSetting.InstitutionContractConfirm:
|
||||||
|
<h5 class="modal-title">ایجاد پیامک یادآور تایید قراداد</h5>
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,10 @@
|
|||||||
case TypeOfSmsSetting.Warning:
|
case TypeOfSmsSetting.Warning:
|
||||||
<h5 class="modal-title">ویرایش پیامک هشدار قضائی</h5>
|
<h5 class="modal-title">ویرایش پیامک هشدار قضائی</h5>
|
||||||
break;
|
break;
|
||||||
|
case TypeOfSmsSetting.InstitutionContractConfirm:
|
||||||
|
<h5 class="modal-title">ویرایش پیامک یادآور تایید قراداد</h5>
|
||||||
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="بستن">
|
<button type="button" class="close" data-dismiss="modal" aria-label="بستن">
|
||||||
@@ -100,8 +104,8 @@
|
|||||||
success: function (response) {
|
success: function (response) {
|
||||||
if(response.isSuccess){
|
if(response.isSuccess){
|
||||||
$.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message);
|
$.Notification.autoHideNotify('success', 'top center', 'پیام سیستم ', response.message);
|
||||||
$('.close').click();
|
|
||||||
|
|
||||||
|
$('.close').click();
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractDebtReminder'){
|
if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractDebtReminder'){
|
||||||
$('#institutionContractDebtReminderTab').click();
|
$('#institutionContractDebtReminderTab').click();
|
||||||
@@ -114,14 +118,16 @@
|
|||||||
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){
|
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.Warning'){
|
||||||
$('#warningTab').click();
|
$('#warningTab').click();
|
||||||
|
|
||||||
}else if(typeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){
|
}else if(modelTypeOfSmsSetting == '@TypeOfSmsSetting.InstitutionContractConfirm'){
|
||||||
|
|
||||||
$('#institutionContractConfirmTab').click();
|
$('#institutionContractConfirmTab').click();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}, 500);
|
}, 700);
|
||||||
|
|
||||||
}else{
|
}else{
|
||||||
$.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message);
|
$.Notification.autoHideNotify('error', 'top center', 'پیام سیستم ', response.message);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
private readonly IOnlinePayment _onlinePayment;
|
private readonly IOnlinePayment _onlinePayment;
|
||||||
private readonly IFaceEmbeddingService _faceEmbeddingService;
|
private readonly IFaceEmbeddingService _faceEmbeddingService;
|
||||||
private readonly IAuthHelper _authHelper;
|
private readonly IAuthHelper _authHelper;
|
||||||
|
private readonly IInstitutionContractApplication _institutionContractApplication;
|
||||||
|
|
||||||
|
|
||||||
[BindProperty] public IFormFile File { get; set; }
|
[BindProperty] public IFormFile File { get; set; }
|
||||||
@@ -77,7 +78,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService,
|
public IndexModel(IAndroidApkVersionApplication application, IRollCallDomainService rollCallDomainService,
|
||||||
CompanyContext context, AccountContext accountContext, IHttpClientFactory httpClientFactory,
|
CompanyContext context, AccountContext accountContext, IHttpClientFactory httpClientFactory,
|
||||||
IOptions<AppSettingConfiguration> appSetting,
|
IOptions<AppSettingConfiguration> appSetting,
|
||||||
ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment, IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper)
|
ITemporaryClientRegistrationApplication clientRegistrationApplication, IOnlinePayment onlinePayment,
|
||||||
|
IFaceEmbeddingService faceEmbeddingService, IAuthHelper authHelper, IInstitutionContractApplication institutionContractApplication)
|
||||||
{
|
{
|
||||||
_application = application;
|
_application = application;
|
||||||
_rollCallDomainService = rollCallDomainService;
|
_rollCallDomainService = rollCallDomainService;
|
||||||
@@ -88,6 +90,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
_onlinePayment = onlinePayment;
|
_onlinePayment = onlinePayment;
|
||||||
_faceEmbeddingService = faceEmbeddingService;
|
_faceEmbeddingService = faceEmbeddingService;
|
||||||
_authHelper = authHelper;
|
_authHelper = authHelper;
|
||||||
|
_institutionContractApplication = institutionContractApplication;
|
||||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,31 +155,60 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
{
|
{
|
||||||
//await UpdateInstitutionContract();
|
//await UpdateInstitutionContract();
|
||||||
//await UpdateFaceEmbeddingNames();
|
//await UpdateFaceEmbeddingNames();
|
||||||
await SetInstitutionContractSigningType();
|
//await SetInstitutionContractSigningType();
|
||||||
|
await ReActivateInstitution();
|
||||||
ViewData["message"] = "تومام یک";
|
ViewData["message"] = "تومام یک";
|
||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async System.Threading.Tasks.Task ReActivateInstitution()
|
||||||
|
{
|
||||||
|
var blueInstitutionContracts = await _context.InstitutionContractSet.Where(x =>
|
||||||
|
x.IsActiveString == "blue").ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
var blueContracts = new List<InstitutionContract>();
|
||||||
|
|
||||||
|
foreach (var blueContract in blueInstitutionContracts)
|
||||||
|
{
|
||||||
|
var verifiedContracts = await _context.InstitutionContractSet
|
||||||
|
.Where(x => x.ContractingPartyId == blueContract.ContractingPartyId
|
||||||
|
&& x.VerificationStatus == InstitutionContractVerificationStatus.Verified
|
||||||
|
&& x.ContractStartGr > blueContract.ContractEndGr)
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (verifiedContracts.Any())
|
||||||
|
{
|
||||||
|
blueContracts.Add(blueContract);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var institutionContract in blueContracts)
|
||||||
|
{
|
||||||
|
institutionContract.DeActive();
|
||||||
|
_institutionContractApplication.ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async System.Threading.Tasks.Task SetInstitutionContractSigningType()
|
private async System.Threading.Tasks.Task SetInstitutionContractSigningType()
|
||||||
{
|
{
|
||||||
var query = _context.InstitutionContractSet
|
var query = _context.InstitutionContractSet
|
||||||
.Where(x=>x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify);
|
.Where(x => x.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify);
|
||||||
|
|
||||||
|
|
||||||
var otpSigned = query.Where(x=>x.VerifierFullName != null && x.LawId != 0).ToList();
|
var otpSigned = query.Where(x => x.VerifierFullName != null && x.LawId != 0).ToList();
|
||||||
foreach (var institutionContract in otpSigned)
|
foreach (var institutionContract in otpSigned)
|
||||||
{
|
{
|
||||||
institutionContract.SetSigningType(InstitutionContractSigningType.OtpBased);
|
institutionContract.SetSigningType(InstitutionContractSigningType.OtpBased);
|
||||||
}
|
}
|
||||||
var lagacySigned = query.Where(x=>x.VerifierFullName == null && x.LawId == 0).ToList();
|
|
||||||
|
var lagacySigned = query.Where(x => x.VerifierFullName == null && x.LawId == 0).ToList();
|
||||||
foreach (var institutionContract in lagacySigned)
|
foreach (var institutionContract in lagacySigned)
|
||||||
{
|
{
|
||||||
institutionContract.SetSigningType(InstitutionContractSigningType.Legacy);
|
institutionContract.SetSigningType(InstitutionContractSigningType.Legacy);
|
||||||
}
|
}
|
||||||
|
|
||||||
await _context.SaveChangesAsync();
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IActionResult> OnPostShiftDateNew2()
|
public async Task<IActionResult> OnPostShiftDateNew2()
|
||||||
@@ -326,6 +358,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
//TranslateCode(result?.ErrorCode);
|
//TranslateCode(result?.ErrorCode);
|
||||||
return Page();
|
return Page();
|
||||||
}
|
}
|
||||||
|
|
||||||
[DisableConcurrentExecution(timeoutInSeconds: 120)]
|
[DisableConcurrentExecution(timeoutInSeconds: 120)]
|
||||||
public async Task<IActionResult> OnPostUploadFrontEnd(CancellationToken cancellationToken)
|
public async Task<IActionResult> OnPostUploadFrontEnd(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
@@ -368,8 +401,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
TempData["Message"] = "فرآیند Deploy شروع شد. لاگ را بررسی کنید.";
|
TempData["Message"] = "فرآیند Deploy شروع شد. لاگ را بررسی کنید.";
|
||||||
return RedirectToPage();
|
return RedirectToPage();
|
||||||
}
|
}
|
||||||
return Forbid();
|
|
||||||
|
|
||||||
|
return Forbid();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -395,13 +428,10 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
{
|
{
|
||||||
contractingPartyIdList.Add(employer.Employer.ContractingPartyId);
|
contractingPartyIdList.Add(employer.Employer.ContractingPartyId);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (contractingPartyIdList.Count > 0)
|
if (contractingPartyIdList.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if (contractingPartyIdList.Count == 1)
|
if (contractingPartyIdList.Count == 1)
|
||||||
{
|
{
|
||||||
workshop.AddContractingPartyId(contractingPartyIdList[0]);
|
workshop.AddContractingPartyId(contractingPartyIdList[0]);
|
||||||
@@ -422,7 +452,6 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
|
|
||||||
ViewData["message"] = "آی دی های طرف حساب اضافه شد";
|
ViewData["message"] = "آی دی های طرف حساب اضافه شد";
|
||||||
return Page();
|
return Page();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -441,8 +470,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
var content = System.IO.File.ReadAllText(logPath, Encoding.UTF8);
|
var content = System.IO.File.ReadAllText(logPath, Encoding.UTF8);
|
||||||
return Content(content);
|
return Content(content);
|
||||||
}
|
}
|
||||||
return Content("شما مجاز به دیدن لاگ نیستید");
|
|
||||||
|
|
||||||
|
return Content("شما مجاز به دیدن لاگ نیستید");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1055,7 +1084,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
|
|||||||
x.PersonnelCount,
|
x.PersonnelCount,
|
||||||
x.Price, x.InstitutionContractWorkshopGroupId,
|
x.Price, x.InstitutionContractWorkshopGroupId,
|
||||||
group,
|
group,
|
||||||
x.WorkshopId.Value,x.id);
|
x.WorkshopId.Value, x.id);
|
||||||
entity.SetEmployers(x.Employers.Select(e => e.EmployerId).ToList());
|
entity.SetEmployers(x.Employers.Select(e => e.EmployerId).ToList());
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
|
|||||||
54
ServiceHost/Areas/Client/Controllers/EmployeeController.cs
Normal file
54
ServiceHost/Areas/Client/Controllers/EmployeeController.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
using CompanyManagment.App.Contracts.Employee;
|
||||||
|
using CompanyManagment.App.Contracts.Employee.DTO;
|
||||||
|
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.GetWorkingEmployeesSelectList(_workshopId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست پرسنل
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
public async Task<ActionResult<List<EmployeeListDto>>> GetList(EmployeeSearchModelDto searchModel)
|
||||||
|
{
|
||||||
|
var result = await _employeeApplication.ListOfAllEmployeesClient(searchModel, _workshopId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت تجمیعی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("PrintAllEmployeesInfo")]
|
||||||
|
public async Task<ActionResult<List<PrintAllEmployeesInfoDtoClient>>> PrintAllEmployeesInfo()
|
||||||
|
{
|
||||||
|
var result = await _employeeApplication.PrintAllEmployeesInfoClient(_workshopId);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using Company.Domain.EmployeeAgg;
|
using Company.Domain.EmployeeAgg;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||||
using CompanyManagment.App.Contracts.InsuranceList;
|
using CompanyManagment.App.Contracts.InsuranceList;
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
@@ -47,19 +48,125 @@ public class LeaveController : ClientBaseController
|
|||||||
return Ok(result);
|
return Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///// <summary>
|
||||||
|
///// چک کردن تاریخ شروع مرخصی
|
||||||
|
///// </summary>
|
||||||
|
///// <param name="startLeaveDate"></param>
|
||||||
|
///// <returns></returns>
|
||||||
|
//[HttpGet("CheckIsInvalidLeave")]
|
||||||
|
//public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate)
|
||||||
|
//{
|
||||||
|
// return await _leaveApplication.CheckIsInvalidLeave(startLeaveDate, _workshopId);
|
||||||
|
//}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد مرخصی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("CreateLeave")]
|
||||||
|
public async Task<ActionResult<OperationResult>> CreateLeave([FromBody] CreateLeaveDto command)
|
||||||
|
{
|
||||||
|
command.WorkshopId = _workshopId;
|
||||||
|
|
||||||
|
var result = await _leaveApplication.CreateLeave(command);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت شیفت گردشی اگر داشت
|
||||||
|
/// در مودال ایجاد
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startLeaveDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("GetRotatingShift")]
|
||||||
|
public async Task<OperationResult<RotatingShiftDto>> GetRotatingShift(long employeeId, string startLeaveDate)
|
||||||
|
{
|
||||||
|
|
||||||
|
return await _leaveApplication.HasRotatingShift(_workshopId, employeeId, startLeaveDate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی ساعتی
|
||||||
|
/// در مودال ایجاد
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startHours"></param>
|
||||||
|
/// <param name="endHours"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("GetHourlyLeaveDuration")]
|
||||||
|
public async Task<ActionResult<string>> GetHourlyLeaveDuration(string startHours, string endHours)
|
||||||
|
{
|
||||||
|
var result =await _leaveApplication.GetHourlyLeaveDuration(startHours, endHours);
|
||||||
|
return Ok(new { LeaveDuration = result });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی روزانه
|
||||||
|
/// در مودال ایجاد
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <param name="endDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("GetDailyLeaveDuration")]
|
||||||
|
public async Task<ActionResult<string>> GetDailyLeaveDuration(string startDate, string endDate)
|
||||||
|
{
|
||||||
|
var result = await _leaveApplication.GetDailyLeaveDuration(startDate, endDate);
|
||||||
|
return Ok(new { LeaveDuration = result });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت تکی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[HttpGet("print/{id}")]
|
[HttpGet("print/{id}")]
|
||||||
public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
|
public async Task<ActionResult<LeavePrintResponseViewModel>> PrintOneAsync(long id)
|
||||||
{
|
{
|
||||||
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
|
var leavePrint = await _leaveApplication.PrintOneAsync(id, _workshopId);
|
||||||
return leavePrint;
|
return leavePrint;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت گروهی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[HttpGet("print")]
|
[HttpGet("print")]
|
||||||
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids)
|
public async Task<ActionResult<List<LeavePrintResponseViewModel>>> PrintAllAsync([FromQuery] List<long> ids, LeaveListSearchModel searchModel)
|
||||||
{
|
{
|
||||||
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
|
var leavePrints = await _leaveApplication.PrintAllAsync(ids, _workshopId);
|
||||||
return Ok(leavePrints);
|
return Ok(leavePrints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("ListPrint")]
|
||||||
|
public async Task<ActionResult<LeaveListPrintDto>> ListPrint([FromQuery] List<long> ids)
|
||||||
|
{
|
||||||
|
var leavePrints = await _leaveApplication.ListPrint(ids);
|
||||||
|
return Ok(leavePrints);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// حذف مرخصی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpDelete("RemoveLeave/{id}")]
|
||||||
|
public async Task<ActionResult<object>> RemoveLeaveAsync(long id)
|
||||||
|
{
|
||||||
|
var op =await _leaveApplication.RemoveLeaveAsync(id);
|
||||||
|
return Ok(new
|
||||||
|
{
|
||||||
|
isSuccedded = op.IsSuccedded,
|
||||||
|
message = op.Message,
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -293,9 +293,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
|
public async Task<IActionResult> OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
|
||||||
{
|
{
|
||||||
var result = _rollCallApplication.RecalculateValues(_workshopId, command);
|
var result =await _rollCallApplication.RecalculateValues(_workshopId, command);
|
||||||
|
|
||||||
return new JsonResult(new
|
return new JsonResult(new
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ public class GeneralController : GeneralBaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("/api/callback"), HttpPost("/api/callback")]
|
[HttpGet("/api/callback"), HttpPost("/api/callback")]
|
||||||
public async Task<IActionResult> Verify(SepehrGatewayPayResponse payResponse)
|
public async Task<IActionResult> Verify([FromForm]SepehrGatewayPayResponse payResponse)
|
||||||
{
|
{
|
||||||
if (!long.TryParse(payResponse.invoiceid, out var paymentTransactionId))
|
if (!long.TryParse(payResponse.invoiceid, out var paymentTransactionId))
|
||||||
{
|
{
|
||||||
@@ -133,7 +133,12 @@ public class GeneralController : GeneralBaseController
|
|||||||
DigitalReceipt = payResponse.digitalreceipt
|
DigitalReceipt = payResponse.digitalreceipt
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
var verifyRes = await _paymentGateway.Verify(verifyCommand, CancellationToken.None);
|
var verifyRes = await _paymentGateway.Verify(verifyCommand, CancellationToken.None);
|
||||||
|
#if DEBUG
|
||||||
|
verifyRes.IsSuccess = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
_financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
|
_financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
|
||||||
|
|
||||||
if (verifyRes.IsSuccess)
|
if (verifyRes.IsSuccess)
|
||||||
@@ -158,14 +163,18 @@ public class GeneralController : GeneralBaseController
|
|||||||
payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(),
|
payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(),
|
||||||
payResponse.digitalreceipt);
|
payResponse.digitalreceipt);
|
||||||
|
|
||||||
if (financialInvoice.Items?.Any(x => x.Type is FinancialInvoiceItemType.BuyInstitutionContract or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false)
|
if (financialInvoice.Items?.Any(x =>
|
||||||
|
x.Type is FinancialInvoiceItemType.BuyInstitutionContract
|
||||||
|
or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false)
|
||||||
{
|
{
|
||||||
var financialItems = financialInvoice.Items
|
var financialItems = financialInvoice.Items
|
||||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
|
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
|
||||||
foreach (var editFinancialInvoiceItem in financialItems)
|
foreach (var editFinancialInvoiceItem in financialItems)
|
||||||
{
|
{
|
||||||
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,InstitutionContractSigningType.OtpBased);
|
await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId,
|
||||||
|
InstitutionContractSigningType.OtpBased);
|
||||||
}
|
}
|
||||||
|
|
||||||
var financialInstallmentItems = financialInvoice.Items
|
var financialInstallmentItems = financialInvoice.Items
|
||||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
||||||
|
|
||||||
@@ -174,7 +183,8 @@ public class GeneralController : GeneralBaseController
|
|||||||
var institutionContractId =
|
var institutionContractId =
|
||||||
await _institutionContractApplication.GetIdByInstallmentId(
|
await _institutionContractApplication.GetIdByInstallmentId(
|
||||||
editFinancialInvoiceItem.EntityId);
|
editFinancialInvoiceItem.EntityId);
|
||||||
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.OtpBased);
|
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,
|
||||||
|
InstitutionContractSigningType.OtpBased);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user