Compare commits
249 Commits
ServiceAmo
...
AdminCheck
| Author | SHA1 | Date | |
|---|---|---|---|
| a68b879e95 | |||
| 161f3a92a7 | |||
| 5a1ec104a1 | |||
|
|
5b6f967fca | ||
|
|
3317bde6d6 | ||
|
|
5cd30e5910 | ||
|
|
4463fdc177 | ||
|
|
2ce63d1e0f | ||
|
|
21302803b6 | ||
|
|
38603b2249 | ||
|
|
bf03247f81 | ||
|
|
12af5dcb56 | ||
|
|
8ec13ffae1 | ||
|
|
5508d4e88f | ||
| 43abb74c61 | |||
| 73e6681baa | |||
| 90b2fd2eab | |||
| d9c431e20e | |||
|
|
2746bf69ea | ||
|
|
77dbb50512 | ||
|
|
1c7e8824c7 | ||
| 0eff1b9a66 | |||
|
|
0d33d79620 | ||
|
|
e4355faffc | ||
|
|
577fe5db76 | ||
| 587fa40d81 | |||
| b741ab9ed2 | |||
| b6fde4903a | |||
| 0772604432 | |||
|
|
ec8333c715 | ||
|
|
8aa93e089a | ||
| 59891d1199 | |||
| 7cb39b1b92 | |||
|
|
5580d56874 | ||
|
|
423b49e6e7 | ||
|
|
0ab3052251 | ||
| 38027352d6 | |||
| 43562fb49c | |||
|
|
5202779d9f | ||
| 80a58f8cdc | |||
| 7c611825a4 | |||
|
|
67a85735f0 | ||
|
|
bf46dfd1dc | ||
|
|
a1ed3ad648 | ||
|
|
35e6355069 | ||
| 8679abb1e7 | |||
| c8dddabdff | |||
| 6f076bdc77 | |||
|
|
4de2e12ac5 | ||
| 380ed8f6b1 | |||
| 7423391003 | |||
|
|
23b65cfbfe | ||
| 572f66f905 | |||
|
|
48b75d2baa | ||
| 140414b866 | |||
| 4ade9e12a6 | |||
|
|
63edb33bf5 | ||
| dd7e816767 | |||
| 1deeff996f | |||
| 2bea265989 | |||
| ef9b78b924 | |||
| 8ad296fe61 | |||
|
|
823110ea74 | ||
| 061058cbeb | |||
| 95d66c2d89 | |||
| 609daf4353 | |||
| a81e01ce2b | |||
| 2cd838a5e3 | |||
| c6ed46d8b7 | |||
| 3da7453ece | |||
|
|
9a591fabff | ||
| 9d09ef60f8 | |||
| 0757ac7e74 | |||
| a9789023ac | |||
| 34bd7ba444 | |||
| 16b11a8bb8 | |||
|
|
dd5455d80a | ||
| 9360dcad71 | |||
| 1971252713 | |||
| 02cc099104 | |||
| 43b124664e | |||
| d2dd67343b | |||
| 3d2b5ff6bd | |||
| 209aa5912d | |||
| 340685a06c | |||
| b20a56df26 | |||
| 8d93fa4fc6 | |||
| 8f10f7057c | |||
| 00b5066f6f | |||
| abd221cb55 | |||
| 33833a408c | |||
| c2fca9f9eb | |||
| a16c20440b | |||
| 1f365f3642 | |||
| 0bfcde6a3f | |||
| 4ada29a98a | |||
| 6f64ee1ce4 | |||
| 582da511c6 | |||
| 3340edcc17 | |||
| 385a885c93 | |||
| f99f199a77 | |||
| 287b31e356 | |||
| 5f8232809a | |||
| 3c72311096 | |||
| 250d17eba2 | |||
| 5db8e7d319 | |||
|
|
3300f60845 | ||
|
|
7537cfe5b8 | ||
|
|
3c1bf7dff0 | ||
| 6909fcf715 | |||
| fe66ff5aa3 | |||
| ce305edac4 | |||
| a49b825ce9 | |||
| fb62523a23 | |||
|
|
e171a4749c | ||
| 9b6c0d4cc4 | |||
| f8126b4000 | |||
|
|
cf62d75f0e | ||
|
|
f93e59b77c | ||
|
|
8f37d9f388 | ||
| 8e72b56758 | |||
| a6e1251445 | |||
| 490a1a69d5 | |||
| 7e3ea39d5b | |||
| 66a6c411d6 | |||
|
|
b03a806dfb | ||
| 14ff0a2e59 | |||
| 58f695fe95 | |||
| b4ccacd37e | |||
| 1fef8e355a | |||
| 147621de34 | |||
| d663857de1 | |||
|
|
4d326b1983 | ||
| aa37ca4b28 | |||
| 9bbdff9bc6 | |||
| 45615684ed | |||
| d11fdcf106 | |||
| eb9a3e52fe | |||
| 94955ea1b4 | |||
| 16c1ae04a9 | |||
| 656bb49fab | |||
| cf3f0564f9 | |||
| fb5b98bf25 | |||
| 12318a6a51 | |||
| 1e733f3f20 | |||
| 836e721b6f | |||
| 8fca1f3a91 | |||
| 2feca1f7f8 | |||
| 4e9cecbb74 | |||
| adf297455f | |||
| 1d656a590f | |||
|
|
a33d7c019c | ||
|
|
d62b5ca155 | ||
|
|
18a4334d8a | ||
| 84416fe1f5 | |||
|
|
bd1c1fa814 | ||
| d855684cd7 | |||
| 9e5e8d8e5d | |||
|
|
8496b52013 | ||
| 9eefdd8fd1 | |||
|
|
5c1547dced | ||
|
|
c09321d89d | ||
| 219e64c0f7 | |||
| b42217ed94 | |||
| 8b6786c09a | |||
| 45c5d20323 | |||
| ad6f872145 | |||
| d22805892a | |||
| 4da496cab8 | |||
| aa0eae6c83 | |||
| 2159901614 | |||
|
|
4b40580658 | ||
|
|
8bc9e044ae | ||
|
|
cddaf2f709 | ||
|
|
337cd40a4e | ||
| 7ce7854091 | |||
|
|
a98300cacd | ||
|
|
daded35ab1 | ||
|
|
ba778bb519 | ||
| 4c638cbdae | |||
|
|
27e8d302d9 | ||
|
|
54c67fe8f7 | ||
| 92e1d6de5c | |||
| c488f61a09 | |||
|
|
dc703fad3c | ||
| 54e5904951 | |||
|
|
a638913172 | ||
| a986212834 | |||
| 649242fc76 | |||
|
|
d254da1393 | ||
| ad4b0be033 | |||
| 733f39db9f | |||
| 94237434c5 | |||
| 2da8bc8a20 | |||
| 39a5918a11 | |||
| 8b217f6cd0 | |||
|
|
74bd802a3d | ||
| b58481a36f | |||
|
|
3fd17299f9 | ||
|
|
fc315cc908 | ||
|
|
abe07e1c4b | ||
|
|
6046f55ece | ||
| d80a36ec35 | |||
|
|
7b648b135e | ||
|
|
5998bd212f | ||
|
|
d77bffabdd | ||
| 4f0e5a34a4 | |||
| 5faa2062b9 | |||
|
|
69476f3f2d | ||
|
|
4bc65e500d | ||
| 07587d162f | |||
| 30b4f52896 | |||
| 134466547e | |||
| a191968c15 | |||
|
|
59bbb7aae6 | ||
| d740c36dc6 | |||
|
|
89de3162de | ||
|
|
132c8ac5a4 | ||
| b9e271de1a | |||
| e661bc2dcb | |||
|
|
f00fde4084 | ||
|
|
e8b3700cdf | ||
| 0ca35e3295 | |||
| 1a91743916 | |||
|
|
dd68473150 | ||
|
|
72e3859d2c | ||
| 46d193b45e | |||
| 1bfe41418b | |||
| 6a446d5972 | |||
|
|
acec101c4c | ||
|
|
7d92321d1c | ||
|
|
19f78a230c | ||
| 0e91e6f287 | |||
| 9df56ee19b | |||
| 8750604d96 | |||
| f27ce460fd | |||
|
|
934019c6c6 | ||
| 8e5d4c312e | |||
| 4b39994de6 | |||
| 0dd2dc7c43 | |||
| 20c00893b6 | |||
| b0d174a575 | |||
| 293ea0f6f4 | |||
| 3ce4cf3966 | |||
| 0fbd5c9d3e | |||
| 8436f70aa0 | |||
| 9cf8447a83 | |||
| e124a4d5d9 | |||
| 7b9e7881c6 |
9
.github/workflows/dotnet-developPublish.yml
vendored
9
.github/workflows/dotnet-developPublish.yml
vendored
@@ -5,8 +5,6 @@ on:
|
|||||||
branches:
|
branches:
|
||||||
- Main
|
- Main
|
||||||
|
|
||||||
env:
|
|
||||||
DOTNET_ENVIRONMENT: Development
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build-and-deploy:
|
build-and-deploy:
|
||||||
@@ -37,12 +35,11 @@ jobs:
|
|||||||
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
|
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
|
||||||
-verb:sync `
|
-verb:sync `
|
||||||
-source:contentPath="$publishFolder" `
|
-source:contentPath="$publishFolder" `
|
||||||
-dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R2rNpdnetP3j>q5b18",authType="Basic" `
|
-dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" `
|
||||||
-allowUntrusted `
|
-allowUntrusted `
|
||||||
-enableRule:AppOffline
|
-enableRule:AppOffline
|
||||||
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
SERVER_HOST: your-server-ip-or-domain
|
SERVER_HOST: 171.22.24.15
|
||||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||||
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
|
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
|
||||||
|
|||||||
6
.gitignore
vendored
6
.gitignore
vendored
@@ -362,3 +362,9 @@ MigrationBackup/
|
|||||||
# # Fody - auto-generated XML schema
|
# # Fody - auto-generated XML schema
|
||||||
# FodyWeavers.xsd
|
# FodyWeavers.xsd
|
||||||
.idea
|
.idea
|
||||||
|
/ServiceHost/appsettings.Development.json
|
||||||
|
/ServiceHost/appsettings.json
|
||||||
|
|
||||||
|
# Storage folder - ignore all uploaded files, thumbnails, and temporary files
|
||||||
|
ServiceHost/Storage
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
public enum TypeOfSmsSetting
|
public enum TypeOfSmsSetting
|
||||||
{
|
{
|
||||||
|
//همه انواع پیامک
|
||||||
|
All = 0,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// پیامک
|
/// پیامک
|
||||||
@@ -23,7 +25,7 @@ public enum TypeOfSmsSetting
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// پیامک
|
/// پیامک
|
||||||
/// هشدار اول
|
/// هشدار بدهی
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Warning,
|
Warning,
|
||||||
|
|
||||||
@@ -38,4 +40,14 @@ public enum TypeOfSmsSetting
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
InstitutionContractConfirm,
|
InstitutionContractConfirm,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال کد تاییدیه قرارداد مالی
|
||||||
|
/// </summary>
|
||||||
|
SendInstitutionContractConfirmationCode,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// یادآور وظایف
|
||||||
|
/// </summary>
|
||||||
|
TaskReminder,
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ using System.Net.Http;
|
|||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace _0_Framework.Application.PaymentGateway;
|
namespace _0_Framework.Application.PaymentGateway;
|
||||||
@@ -12,18 +13,24 @@ public class SepehrPaymentGateway:IPaymentGateway
|
|||||||
{
|
{
|
||||||
private readonly HttpClient _httpClient;
|
private readonly HttpClient _httpClient;
|
||||||
private const long TerminalId = 99213700;
|
private const long TerminalId = 99213700;
|
||||||
|
private readonly ILogger<SepehrPaymentGateway> _logger;
|
||||||
|
|
||||||
public SepehrPaymentGateway(IHttpClientFactory httpClient)
|
public SepehrPaymentGateway(IHttpClientFactory httpClient, ILogger<SepehrPaymentGateway> logger)
|
||||||
{
|
{
|
||||||
|
_logger = logger;
|
||||||
_httpClient = httpClient.CreateClient();
|
_httpClient = httpClient.CreateClient();
|
||||||
_httpClient.BaseAddress = new Uri("https://sepehr.shaparak.ir/Rest/V1/PeymentApi/");
|
_httpClient.BaseAddress = new Uri("https://sepehr.shaparak.ir/Rest/V1/PeymentApi/");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<PaymentGatewayResponse> Create(CreatePaymentGatewayRequest command, CancellationToken cancellationToken = default)
|
public async Task<PaymentGatewayResponse> Create(CreatePaymentGatewayRequest command, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("Create payment started. TransactionId: {TransactionId}, Amount: {Amount}", command.TransactionId, command.Amount);
|
||||||
command.ExtraData ??= new Dictionary<string, object>();
|
command.ExtraData ??= new Dictionary<string, object>();
|
||||||
|
_logger.LogInformation("Initializing extra data with FinancialInvoiceId: {FinancialInvoiceId}", command.FinancialInvoiceId);
|
||||||
command.ExtraData.Add("financialInvoiceId", command.FinancialInvoiceId);
|
command.ExtraData.Add("financialInvoiceId", command.FinancialInvoiceId);
|
||||||
var extraData = JsonConvert.SerializeObject(command.ExtraData);
|
var extraData = JsonConvert.SerializeObject(command.ExtraData);
|
||||||
|
_logger.LogInformation("Serialized extra data payload: {Payload}", extraData);
|
||||||
|
|
||||||
var res = await _httpClient.PostAsJsonAsync("GetToken", new
|
var res = await _httpClient.PostAsJsonAsync("GetToken", new
|
||||||
{
|
{
|
||||||
TerminalID = TerminalId,
|
TerminalID = TerminalId,
|
||||||
@@ -32,21 +39,25 @@ public class SepehrPaymentGateway:IPaymentGateway
|
|||||||
callbackURL = command.CallBackUrl,
|
callbackURL = command.CallBackUrl,
|
||||||
payload = extraData
|
payload = extraData
|
||||||
}, cancellationToken: cancellationToken);
|
}, cancellationToken: cancellationToken);
|
||||||
|
_logger.LogInformation("Create payment request sent. StatusCode: {StatusCode}", res.StatusCode);
|
||||||
// خواندن محتوای پاسخ
|
// خواندن محتوای پاسخ
|
||||||
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
||||||
|
_logger.LogInformation("Create payment response content: {Content}", content);
|
||||||
|
|
||||||
// تبدیل پاسخ JSON به آبجکت داتنت
|
// تبدیل پاسخ JSON به آبجکت داتنت
|
||||||
var json = System.Text.Json.JsonDocument.Parse(content);
|
var json = System.Text.Json.JsonDocument.Parse(content);
|
||||||
|
_logger.LogInformation("Create payment JSON parsed successfully.");
|
||||||
|
|
||||||
// گرفتن مقدار AccessToken
|
// گرفتن مقدار AccessToken
|
||||||
var accessToken = json.RootElement.GetProperty("Accesstoken").ToString();
|
var accessToken = json.RootElement.GetProperty("Accesstoken").ToString();
|
||||||
var status = json.RootElement.GetProperty("Status").ToString();
|
var status = json.RootElement.GetProperty("Status").ToString();
|
||||||
|
_logger.LogInformation("Create payment parsed values. Status: {Status}, AccessToken: {AccessToken}", status, accessToken);
|
||||||
|
|
||||||
return new PaymentGatewayResponse
|
return new PaymentGatewayResponse
|
||||||
{
|
{
|
||||||
Status = status,
|
Status = status,
|
||||||
IsSuccess = status == "0",
|
IsSuccess = status == "0",
|
||||||
Token = accessToken
|
Token = accessToken,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,21 +66,24 @@ public class SepehrPaymentGateway:IPaymentGateway
|
|||||||
|
|
||||||
public async Task<PaymentGatewayResponse> Verify(VerifyPaymentGateWayRequest command, CancellationToken cancellationToken = default)
|
public async Task<PaymentGatewayResponse> Verify(VerifyPaymentGateWayRequest command, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("Verify payment started. DigitalReceipt: {DigitalReceipt}", command.DigitalReceipt);
|
||||||
var res = await _httpClient.PostAsJsonAsync("Advice", new
|
var res = await _httpClient.PostAsJsonAsync("Advice", new
|
||||||
{
|
{
|
||||||
digitalreceipt = command.DigitalReceipt,
|
digitalreceipt = command.DigitalReceipt,
|
||||||
Tid = TerminalId,
|
Tid = TerminalId,
|
||||||
}, cancellationToken: cancellationToken);
|
}, cancellationToken: cancellationToken);
|
||||||
|
_logger.LogInformation("Verify payment request sent. StatusCode: {StatusCode}", res.StatusCode);
|
||||||
// خواندن محتوای پاسخ
|
// خواندن محتوای پاسخ
|
||||||
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
||||||
|
_logger.LogInformation("Verify payment response content: {Content}", content);
|
||||||
|
|
||||||
// تبدیل پاسخ JSON به آبجکت داتنت
|
// تبدیل پاسخ JSON به آبجکت داتنت
|
||||||
var json = System.Text.Json.JsonDocument.Parse(content);
|
var json = System.Text.Json.JsonDocument.Parse(content);
|
||||||
|
_logger.LogInformation("Verify payment JSON parsed successfully.");
|
||||||
|
|
||||||
var message = json.RootElement.GetProperty("Message").GetString();
|
var message = json.RootElement.GetProperty("Message").GetString();
|
||||||
var status = json.RootElement.GetProperty("Status").GetString();
|
var status = json.RootElement.GetProperty("Status").GetString();
|
||||||
|
_logger.LogInformation("Verify payment parsed values. Status: {Status}, Message: {Message}", status, message);
|
||||||
return new PaymentGatewayResponse
|
return new PaymentGatewayResponse
|
||||||
{
|
{
|
||||||
Status = status,
|
Status = status,
|
||||||
|
|||||||
@@ -17,4 +17,18 @@ public class ApiResultViewModel
|
|||||||
public string DeliveryUnixTime { get; set; }
|
public string DeliveryUnixTime { get; set; }
|
||||||
public string DeliveryColor { get; set; }
|
public string DeliveryColor { get; set; }
|
||||||
public string FullName { get; set; }
|
public string FullName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class ApiReportDto
|
||||||
|
{
|
||||||
|
public int MessageId { get; set; }
|
||||||
|
|
||||||
|
public long Mobile { get; set; }
|
||||||
|
|
||||||
|
public string SendUnixTime { get; set; }
|
||||||
|
public string DeliveryState { get; set; }
|
||||||
|
public string DeliveryUnixTime { get; set; }
|
||||||
|
public string DeliveryColor { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -19,6 +19,13 @@ public interface ISmsService
|
|||||||
bool SendAccountsInfo(string number,string fullName, string userName);
|
bool SendAccountsInfo(string number,string fullName, string userName);
|
||||||
Task<ApiResultViewModel> GetByMessageId(int messId);
|
Task<ApiResultViewModel> GetByMessageId(int messId);
|
||||||
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);
|
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
Task<List<ApiReportDto>> GetApiReport(string startDate, string endDate);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
string DeliveryStatus(byte? dv);
|
string DeliveryStatus(byte? dv);
|
||||||
string DeliveryColorStatus(byte? dv);
|
string DeliveryColorStatus(byte? dv);
|
||||||
string UnixTimeStampToDateTime(int? unixTimeStamp);
|
string UnixTimeStampToDateTime(int? unixTimeStamp);
|
||||||
@@ -64,6 +71,7 @@ public interface ISmsService
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// پیامک مسدودی طرف حساب
|
/// پیامک مسدودی طرف حساب
|
||||||
|
/// قراردادهای قدیم
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="number"></param>
|
/// <param name="number"></param>
|
||||||
/// <param name="fullname"></param>
|
/// <param name="fullname"></param>
|
||||||
@@ -74,6 +82,19 @@ public interface ISmsService
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, string aprove);
|
Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessage(string number, string fullname, string amount, string accountType, string id, string aprove);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیامک مسدودی طرف حساب
|
||||||
|
/// قرارداد های جدید
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="number"></param>
|
||||||
|
/// <param name="fullname"></param>
|
||||||
|
/// <param name="amount"></param>
|
||||||
|
/// <param name="code1"></param>
|
||||||
|
/// <param name="code2"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<(byte status, string message, int messaeId, bool isSucceded)> BlockMessageForElectronicContract(string number,
|
||||||
|
string fullname,
|
||||||
|
string amount, string code1, string code2);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region AlarmMessage
|
#region AlarmMessage
|
||||||
|
|||||||
@@ -39,4 +39,15 @@ public static class StaticWorkshopAccounts
|
|||||||
/// که کاربر همچنان به کارگاه دسترسی دارد
|
/// که کاربر همچنان به کارگاه دسترسی دارد
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static DateTime ContinuesWorkingDate = new DateTime(2150, 1, 1);
|
public static DateTime ContinuesWorkingDate = new DateTime(2150, 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیستی آی دی نقش هایی که مسئول بیمه کارگاه هستند
|
||||||
|
/// 7 : بیمه ارشد
|
||||||
|
/// 8 : بیمه ساده
|
||||||
|
/// </summary>
|
||||||
|
public static List<long> InsuranceAccountsRoleIds = [7, 8];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -445,6 +445,30 @@ public static class Tools
|
|||||||
|
|
||||||
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
|
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اگر مبلغ صفر باشد خط تیره برمیگرداند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="myMoney"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string ToMoneyCheckZero(this double myMoney)
|
||||||
|
{
|
||||||
|
if (myMoney == 0)
|
||||||
|
return "-";
|
||||||
|
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اگر مبلغ صفر یا نال باشد خط تیره برمیگرداند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="myMoney"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string ToMoneyCheckZeroNullable(this double? myMoney)
|
||||||
|
{
|
||||||
|
if (myMoney == 0 || myMoney == null)
|
||||||
|
return "-";
|
||||||
|
return myMoney?.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
|
||||||
|
}
|
||||||
public static string ToMoneyNullable(this double? myMoney)
|
public static string ToMoneyNullable(this double? myMoney)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public interface IAccountApplication
|
|||||||
OperationResult DeActive(long id);
|
OperationResult DeActive(long id);
|
||||||
OperationResult DirectLogin(long id);
|
OperationResult DirectLogin(long id);
|
||||||
|
|
||||||
AccountLeftWorkViewModel WorkshopList(long accountId);
|
// AccountLeftWorkViewModel WorkshopList(long accountId);
|
||||||
OperationResult SaveWorkshopAccount(
|
OperationResult SaveWorkshopAccount(
|
||||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||||
string startDate,
|
string startDate,
|
||||||
@@ -75,7 +75,6 @@ public interface IAccountApplication
|
|||||||
void CameraLogin(CameraLoginRequest request);
|
void CameraLogin(CameraLoginRequest request);
|
||||||
|
|
||||||
Task<GetPmUserDto> GetPmUserAsync(long accountId);
|
Task<GetPmUserDto> GetPmUserAsync(long accountId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CameraLoginRequest
|
public class CameraLoginRequest
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using Shared.Contracts.PmUser.Commands;
|
using Shared.Contracts.PmUser.Commands;
|
||||||
using Shared.Contracts.PmUser.Queries;
|
using Shared.Contracts.PmUser.Queries;
|
||||||
|
|
||||||
@@ -48,7 +47,13 @@ public class AccountApplication : IAccountApplication
|
|||||||
private readonly IPmUserCommandService _pmUserCommandService;
|
private readonly IPmUserCommandService _pmUserCommandService;
|
||||||
|
|
||||||
public AccountApplication(IAccountRepository accountRepository, IPasswordHasher passwordHasher,
|
public AccountApplication(IAccountRepository accountRepository, IPasswordHasher passwordHasher,
|
||||||
IFileUploader fileUploader, IAuthHelper authHelper, IRoleRepository roleRepository, IWorker worker, ISmsService smsService, ICameraAccountRepository cameraAccountRepository, IPositionRepository positionRepository, IAccountLeftworkRepository accountLeftworkRepository, IWorkshopRepository workshopRepository, ISubAccountRepository subAccountRepository, ISubAccountRoleRepository subAccountRoleRepository, IWorkshopSubAccountRepository workshopSubAccountRepository, ISubAccountPermissionSubtitle1Repository accountPermissionSubtitle1Repository, IUnitOfWork unitOfWork, IPmUserQueryService pmUserQueryService, IPmUserCommandService pmUserCommandService)
|
IFileUploader fileUploader, IAuthHelper authHelper, IRoleRepository roleRepository, IWorker worker,
|
||||||
|
ISmsService smsService, ICameraAccountRepository cameraAccountRepository,
|
||||||
|
IPositionRepository positionRepository, IAccountLeftworkRepository accountLeftworkRepository,
|
||||||
|
IWorkshopRepository workshopRepository, ISubAccountRepository subAccountRepository,
|
||||||
|
ISubAccountRoleRepository subAccountRoleRepository, IWorkshopSubAccountRepository workshopSubAccountRepository,
|
||||||
|
ISubAccountPermissionSubtitle1Repository accountPermissionSubtitle1Repository, IUnitOfWork unitOfWork,
|
||||||
|
IPmUserQueryService pmUserQueryService, IPmUserCommandService pmUserCommandService)
|
||||||
{
|
{
|
||||||
_authHelper = authHelper;
|
_authHelper = authHelper;
|
||||||
_roleRepository = roleRepository;
|
_roleRepository = roleRepository;
|
||||||
@@ -68,7 +73,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
_fileUploader = fileUploader;
|
_fileUploader = fileUploader;
|
||||||
_passwordHasher = passwordHasher;
|
_passwordHasher = passwordHasher;
|
||||||
_accountRepository = accountRepository;
|
_accountRepository = accountRepository;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult EditClient(EditClientAccount command)
|
public OperationResult EditClient(EditClientAccount command)
|
||||||
@@ -89,7 +93,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
(x.Mobile == command.Mobile && x.id != command.Id)))
|
(x.Mobile == command.Mobile && x.id != command.Id)))
|
||||||
return opreation.Failed("شماره موبایل تکراری است");
|
return opreation.Failed("شماره موبایل تکراری است");
|
||||||
if (_accountRepository.Exists(x =>
|
if (_accountRepository.Exists(x =>
|
||||||
(x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(x.NationalCode) && x.id != command.Id)))
|
(x.NationalCode == command.NationalCode && !string.IsNullOrWhiteSpace(x.NationalCode) &&
|
||||||
|
x.id != command.Id)))
|
||||||
return opreation.Failed("کد ملی تکراری است");
|
return opreation.Failed("کد ملی تکراری است");
|
||||||
if (_accountRepository.Exists(x =>
|
if (_accountRepository.Exists(x =>
|
||||||
(x.Email == command.Email && !string.IsNullOrWhiteSpace(x.Email) && x.id != command.Id)))
|
(x.Email == command.Email && !string.IsNullOrWhiteSpace(x.Email) && x.id != command.Id)))
|
||||||
@@ -97,7 +102,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
var path = $"profilePhotos";
|
var path = $"profilePhotos";
|
||||||
var picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
|
var picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
|
||||||
editAccount.EditClient(command.Fullname, command.Username, command.Mobile, picturePath, command.Email, command.NationalCode);
|
editAccount.EditClient(command.Fullname, command.Username, command.Mobile, picturePath, command.Email,
|
||||||
|
command.NationalCode);
|
||||||
_accountRepository.SaveChanges();
|
_accountRepository.SaveChanges();
|
||||||
return opreation.Succcedded();
|
return opreation.Succcedded();
|
||||||
}
|
}
|
||||||
@@ -142,8 +148,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
if (_fileUploader != null)
|
if (_fileUploader != null)
|
||||||
{
|
{
|
||||||
picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
|
picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId,
|
var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId,
|
||||||
picturePath, roleName.Name, "true", "false");
|
picturePath, roleName.Name, "true", "false");
|
||||||
|
|
||||||
@@ -158,7 +164,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
if (command.UserRoles == null)
|
if (command.UserRoles == null)
|
||||||
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
||||||
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
|
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
|
||||||
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username, account.Password, command.Mobile,
|
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username,
|
||||||
|
account.Password, command.Mobile,
|
||||||
null, account.id, pmUserRoles));
|
null, account.id, pmUserRoles));
|
||||||
if (!createPm.isSuccess)
|
if (!createPm.isSuccess)
|
||||||
{
|
{
|
||||||
@@ -167,7 +174,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//var url = "api/user/create";
|
//var url = "api/user/create";
|
||||||
//var key = SecretKeys.ProgramManagerInternalApi;
|
//var key = SecretKeys.ProgramManagerInternalApi;
|
||||||
|
|
||||||
@@ -252,29 +258,30 @@ public class AccountApplication : IAccountApplication
|
|||||||
// $"api/user/{account.id}",
|
// $"api/user/{account.id}",
|
||||||
// key
|
// key
|
||||||
//);
|
//);
|
||||||
var userResult =await _pmUserQueryService.GetPmUserDataByAccountId(account.id);
|
var userResult = await _pmUserQueryService.GetPmUserDataByAccountId(account.id);
|
||||||
|
|
||||||
if (command.UserRoles == null)
|
if (command.UserRoles == null)
|
||||||
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
||||||
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
|
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
|
||||||
|
|
||||||
//اگر کاربر در پروگرام منیجر قبلا ایجاد شده
|
//اگر کاربر در پروگرام منیجر قبلا ایجاد شده
|
||||||
if (userResult.Id >0)
|
if (userResult.Id > 0)
|
||||||
{
|
{
|
||||||
if (!command.UserRoles.Any())
|
if (!command.UserRoles.Any())
|
||||||
{
|
{
|
||||||
_unitOfWork.RollbackAccountContext();
|
_unitOfWork.RollbackAccountContext();
|
||||||
return operation.Failed("حداقل یک نقش باید انتخاب شود");
|
return operation.Failed("حداقل یک نقش باید انتخاب شود");
|
||||||
}
|
}
|
||||||
|
|
||||||
var editPm =await _pmUserCommandService.Edit(new EditPmUserDto(command.Fullname, command.Username, command.Mobile, account.id, pmUserRoles,
|
var editPm = await _pmUserCommandService.Edit(new EditPmUserDto(command.Fullname, command.Username,
|
||||||
|
command.Mobile, account.id, pmUserRoles,
|
||||||
command.IsProgramManagerUser));
|
command.IsProgramManagerUser));
|
||||||
if (!editPm.isSuccess)
|
if (!editPm.isSuccess)
|
||||||
{
|
{
|
||||||
_unitOfWork.RollbackAccountContext();
|
_unitOfWork.RollbackAccountContext();
|
||||||
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
||||||
}
|
}
|
||||||
|
|
||||||
//var parameters = new EditUserCommand(
|
//var parameters = new EditUserCommand(
|
||||||
// command.Fullname,
|
// command.Fullname,
|
||||||
// command.Username,
|
// command.Username,
|
||||||
@@ -302,7 +309,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
// _unitOfWork.RollbackAccountContext();
|
// _unitOfWork.RollbackAccountContext();
|
||||||
// return operation.Failed(response.Error);
|
// return operation.Failed(response.Error);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
}
|
}
|
||||||
else //اگر کاربر قبلا ایجاد نشده
|
else //اگر کاربر قبلا ایجاد نشده
|
||||||
{
|
{
|
||||||
@@ -315,19 +321,15 @@ public class AccountApplication : IAccountApplication
|
|||||||
return operation.Failed("حداقل یک نقش باید انتخاب شود");
|
return operation.Failed("حداقل یک نقش باید انتخاب شود");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname,
|
||||||
|
command.Username, account.Password, command.Mobile,
|
||||||
|
|
||||||
var createPm = await _pmUserCommandService.Create(new CreatePmUserDto(command.Fullname, command.Username, account.Password, command.Mobile,
|
|
||||||
null, account.id, pmUserRoles));
|
null, account.id, pmUserRoles));
|
||||||
if (!createPm.isSuccess)
|
if (!createPm.isSuccess)
|
||||||
{
|
{
|
||||||
_unitOfWork.RollbackAccountContext();
|
_unitOfWork.RollbackAccountContext();
|
||||||
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//var parameters = new CreateProgramManagerUser(
|
//var parameters = new CreateProgramManagerUser(
|
||||||
@@ -362,7 +364,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
// return operation.Failed(response.Error);
|
// return operation.Failed(response.Error);
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_unitOfWork.CommitAccountContext();
|
_unitOfWork.CommitAccountContext();
|
||||||
@@ -376,7 +377,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
public OperationResult Login(Login command)
|
public OperationResult Login(Login command)
|
||||||
{
|
{
|
||||||
|
|
||||||
long idAutoriz = 0;
|
long idAutoriz = 0;
|
||||||
var operation = new OperationResult();
|
var operation = new OperationResult();
|
||||||
if (string.IsNullOrWhiteSpace(command.Password))
|
if (string.IsNullOrWhiteSpace(command.Password))
|
||||||
@@ -401,21 +401,27 @@ public class AccountApplication : IAccountApplication
|
|||||||
.Select(x => x.Code)
|
.Select(x => x.Code)
|
||||||
.ToList();
|
.ToList();
|
||||||
//PmPermission
|
//PmPermission
|
||||||
var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id).GetAwaiter().GetResult();
|
var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id)
|
||||||
if (PmUserData.AccountId > 0 && PmUserData.IsActive)
|
.GetAwaiter().GetResult();
|
||||||
|
long? pmUserId = null;
|
||||||
|
if (PmUserData != null)
|
||||||
{
|
{
|
||||||
|
if (PmUserData.AccountId > 0 && PmUserData.IsActive)
|
||||||
var pmUserPermissions =
|
{
|
||||||
PmUserData.RoleListDto != null
|
var pmUserPermissions =
|
||||||
? PmUserData.RoleListDto
|
PmUserData.RoleListDto != null
|
||||||
.SelectMany(x => x.Permissions)
|
? PmUserData.RoleListDto
|
||||||
.Where(p => p != 99)
|
.SelectMany(x => x.Permissions)
|
||||||
.Distinct()
|
.Where(p => p != 99)
|
||||||
.ToList()
|
.Distinct()
|
||||||
: new List<int>();
|
.ToList()
|
||||||
permissions.AddRange(pmUserPermissions);
|
: new List<int>();
|
||||||
|
permissions.AddRange(pmUserPermissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
pmUserId = PmUserData.Id > 0 ? PmUserData.Id : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int? positionValue;
|
int? positionValue;
|
||||||
if (account.PositionId != null)
|
if (account.PositionId != null)
|
||||||
@@ -426,24 +432,25 @@ public class AccountApplication : IAccountApplication
|
|||||||
{
|
{
|
||||||
positionValue = null;
|
positionValue = null;
|
||||||
}
|
}
|
||||||
var pmUserId = PmUserData.AccountId > 0 ? PmUserData.AccountId : null;
|
|
||||||
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
||||||
, account.Username, account.Mobile, account.ProfilePhoto,
|
, account.Username, account.Mobile, account.ProfilePhoto,
|
||||||
permissions, account.RoleName, account.AdminAreaPermission,
|
permissions, account.RoleName, account.AdminAreaPermission,
|
||||||
account.ClientAriaPermission, positionValue,0,pmUserId);
|
account.ClientAriaPermission, positionValue, 0, pmUserId);
|
||||||
|
|
||||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
||||||
account.IsActiveString == "true")
|
account.IsActiveString == "true")
|
||||||
{
|
{
|
||||||
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
||||||
authViewModel.Permissions = clientPermissions;
|
authViewModel.Permissions = clientPermissions;
|
||||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x =>
|
||||||
{
|
new WorkshopClaim
|
||||||
PersonnelCount = x.PersonnelCount,
|
{
|
||||||
Id = x.Id,
|
PersonnelCount = x.PersonnelCount,
|
||||||
Name = x.WorkshopFullName,
|
Id = x.Id,
|
||||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
Name = x.WorkshopFullName,
|
||||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||||
|
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||||
authViewModel.WorkshopList = workshopList;
|
authViewModel.WorkshopList = workshopList;
|
||||||
if (workshopList.Any())
|
if (workshopList.Any())
|
||||||
{
|
{
|
||||||
@@ -456,10 +463,14 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
_authHelper.Signin(authViewModel);
|
_authHelper.Signin(authViewModel);
|
||||||
|
|
||||||
if ((account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" && account.IsActiveString == "true") || (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false" && account.IsActiveString == "true"))
|
if ((account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" &&
|
||||||
|
account.IsActiveString == "true") || (account.AdminAreaPermission == "true" &&
|
||||||
|
account.ClientAriaPermission == "false" &&
|
||||||
|
account.IsActiveString == "true"))
|
||||||
idAutoriz = 1;
|
idAutoriz = 1;
|
||||||
|
|
||||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && account.IsActiveString == "true")
|
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
||||||
|
account.IsActiveString == "true")
|
||||||
idAutoriz = 2;
|
idAutoriz = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -471,7 +482,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
||||||
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
|
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
|
||||||
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting);
|
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId,
|
||||||
|
cameraAccount.IsActiveSting);
|
||||||
if (cameraAccount.IsActiveSting == "true")
|
if (cameraAccount.IsActiveSting == "true")
|
||||||
{
|
{
|
||||||
_authHelper.CameraSignIn(authViewModel);
|
_authHelper.CameraSignIn(authViewModel);
|
||||||
@@ -481,7 +493,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
{
|
{
|
||||||
idAutoriz = 0;
|
idAutoriz = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (subAccount != null)
|
if (subAccount != null)
|
||||||
@@ -511,12 +522,14 @@ public class AccountApplication : IAccountApplication
|
|||||||
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId);
|
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId);
|
||||||
authViewModel.WorkshopId = workshop.WorkshopId;
|
authViewModel.WorkshopId = workshop.WorkshopId;
|
||||||
}
|
}
|
||||||
|
|
||||||
_authHelper.Signin(authViewModel);
|
_authHelper.Signin(authViewModel);
|
||||||
idAutoriz = 2;
|
idAutoriz = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
return operation.Succcedded(idAutoriz);
|
return operation.Succcedded(idAutoriz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult LoginWithMobile(long id)
|
public OperationResult LoginWithMobile(long id)
|
||||||
{
|
{
|
||||||
var operation = new OperationResult();
|
var operation = new OperationResult();
|
||||||
@@ -525,7 +538,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
return operation.Failed(ApplicationMessages.WrongUserPass);
|
return operation.Failed(ApplicationMessages.WrongUserPass);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var permissions = _roleRepository.Get(account.RoleId)
|
var permissions = _roleRepository.Get(account.RoleId)
|
||||||
.Permissions
|
.Permissions
|
||||||
.Select(x => x.Code)
|
.Select(x => x.Code)
|
||||||
@@ -541,20 +553,22 @@ public class AccountApplication : IAccountApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
||||||
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, account.AdminAreaPermission, account.ClientAriaPermission, positionValue);
|
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName,
|
||||||
|
account.AdminAreaPermission, account.ClientAriaPermission, positionValue);
|
||||||
|
|
||||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
||||||
account.IsActiveString == "true")
|
account.IsActiveString == "true")
|
||||||
{
|
{
|
||||||
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
||||||
authViewModel.Permissions = clientPermissions;
|
authViewModel.Permissions = clientPermissions;
|
||||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x =>
|
||||||
{
|
new WorkshopClaim
|
||||||
PersonnelCount = x.PersonnelCount,
|
{
|
||||||
Id = x.Id,
|
PersonnelCount = x.PersonnelCount,
|
||||||
Name = x.WorkshopFullName,
|
Id = x.Id,
|
||||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
Name = x.WorkshopFullName,
|
||||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||||
|
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||||
authViewModel.WorkshopList = workshopList;
|
authViewModel.WorkshopList = workshopList;
|
||||||
if (workshopList.Any())
|
if (workshopList.Any())
|
||||||
{
|
{
|
||||||
@@ -567,13 +581,15 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
_authHelper.Signin(authViewModel);
|
_authHelper.Signin(authViewModel);
|
||||||
long idAutoriz = 0;
|
long idAutoriz = 0;
|
||||||
if (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" || account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false")
|
if (account.AdminAreaPermission == "true" && account.ClientAriaPermission == "true" ||
|
||||||
|
account.AdminAreaPermission == "true" && account.ClientAriaPermission == "false")
|
||||||
idAutoriz = 1;
|
idAutoriz = 1;
|
||||||
|
|
||||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false")
|
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false")
|
||||||
idAutoriz = 2;
|
idAutoriz = 2;
|
||||||
return operation.Succcedded(idAutoriz);
|
return operation.Succcedded(idAutoriz);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Logout()
|
public void Logout()
|
||||||
{
|
{
|
||||||
_authHelper.SignOut();
|
_authHelper.SignOut();
|
||||||
@@ -609,6 +625,7 @@ public class AccountApplication : IAccountApplication
|
|||||||
_accountRepository.SaveChanges();
|
_accountRepository.SaveChanges();
|
||||||
return operation.Succcedded();
|
return operation.Succcedded();
|
||||||
}
|
}
|
||||||
|
|
||||||
public EditAccount GetByVerifyCode(string code, string phone)
|
public EditAccount GetByVerifyCode(string code, string phone)
|
||||||
{
|
{
|
||||||
return _accountRepository.GetByVerifyCode(code, phone);
|
return _accountRepository.GetByVerifyCode(code, phone);
|
||||||
@@ -637,7 +654,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
await _accountRepository.RemoveCode(id);
|
await _accountRepository.RemoveCode(id);
|
||||||
|
|
||||||
return operation.Succcedded();
|
return operation.Succcedded();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -682,7 +698,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
return operation.Failed("این اکانت وجود ندارد");
|
return operation.Failed("این اکانت وجود ندارد");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var permissions = _roleRepository.Get(account.RoleId)
|
var permissions = _roleRepository.Get(account.RoleId)
|
||||||
.Permissions
|
.Permissions
|
||||||
.Select(x => x.Code)
|
.Select(x => x.Code)
|
||||||
@@ -691,7 +706,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
_authHelper.SignOut();
|
_authHelper.SignOut();
|
||||||
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
||||||
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true", null);
|
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, "false", "true",
|
||||||
|
null);
|
||||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
||||||
{
|
{
|
||||||
PersonnelCount = x.PersonnelCount,
|
PersonnelCount = x.PersonnelCount,
|
||||||
@@ -711,9 +727,11 @@ public class AccountApplication : IAccountApplication
|
|||||||
authViewModel.WorkshopName = workshop.Name;
|
authViewModel.WorkshopName = workshop.Name;
|
||||||
authViewModel.WorkshopId = workshop.Id;
|
authViewModel.WorkshopId = workshop.Id;
|
||||||
}
|
}
|
||||||
|
|
||||||
_authHelper.Signin(authViewModel);
|
_authHelper.Signin(authViewModel);
|
||||||
return operation.Succcedded(2);
|
return operation.Succcedded(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult DirectCameraLogin(long cameraAccountId)
|
public OperationResult DirectCameraLogin(long cameraAccountId)
|
||||||
{
|
{
|
||||||
var prAcc = _authHelper.CurrentAccountInfo();
|
var prAcc = _authHelper.CurrentAccountInfo();
|
||||||
@@ -723,47 +741,45 @@ public class AccountApplication : IAccountApplication
|
|||||||
return operation.Failed("این اکانت وجود ندارد");
|
return operation.Failed("این اکانت وجود ندارد");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
_authHelper.SignOut();
|
_authHelper.SignOut();
|
||||||
|
|
||||||
|
|
||||||
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
||||||
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
|
var authViewModel = new CameraAuthViewModel(cameraAccount.id, cameraAccount.WorkshopId,
|
||||||
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId, cameraAccount.IsActiveSting);
|
cameraAccount.Username, mobile, cameraAccount.WorkshopName, cameraAccount.AccountId,
|
||||||
|
cameraAccount.IsActiveSting);
|
||||||
if (cameraAccount.IsActiveSting == "true")
|
if (cameraAccount.IsActiveSting == "true")
|
||||||
{
|
{
|
||||||
_authHelper.CameraSignIn(authViewModel);
|
_authHelper.CameraSignIn(authViewModel);
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return operation.Failed("این اکانت غیر فعال شده است");
|
return operation.Failed("این اکانت غیر فعال شده است");
|
||||||
}
|
}
|
||||||
|
|
||||||
return operation.Succcedded(2);
|
return operation.Succcedded(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public AccountLeftWorkViewModel WorkshopList(long accountId)
|
// public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||||
{
|
// {
|
||||||
string fullname = this._accountRepository.GetById(accountId).Fullname;
|
// string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||||
List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
// List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
||||||
List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
// List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
||||||
List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
// List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
||||||
List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
// List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
||||||
(string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
// (string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
||||||
return new AccountLeftWorkViewModel()
|
// return new AccountLeftWorkViewModel()
|
||||||
{
|
// {
|
||||||
AccountId = accountId,
|
// AccountId = accountId,
|
||||||
AccountFullName = fullname,
|
// AccountFullName = fullname,
|
||||||
StartDateFa = byAccountId.StartWorkFa,
|
// StartDateFa = byAccountId.StartWorkFa,
|
||||||
LeftDateFa = byAccountId.LeftWorkFa,
|
// LeftDateFa = byAccountId.LeftWorkFa,
|
||||||
WorkshopAccountlist = source,
|
// WorkshopAccountlist = source,
|
||||||
WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
// WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
||||||
AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
// AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
|
|
||||||
public OperationResult SaveWorkshopAccount(
|
public OperationResult SaveWorkshopAccount(
|
||||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||||
@@ -773,10 +789,12 @@ public class AccountApplication : IAccountApplication
|
|||||||
{
|
{
|
||||||
return this._accountLeftworkRepository.SaveWorkshopAccount(workshopAccountList, startDate, leftDate, accountId);
|
return this._accountLeftworkRepository.SaveWorkshopAccount(workshopAccountList, startDate, leftDate, accountId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult CreateNewWorkshopAccount(long currentAccountId, long newAccountId)
|
public OperationResult CreateNewWorkshopAccount(long currentAccountId, long newAccountId)
|
||||||
{
|
{
|
||||||
return this._accountLeftworkRepository.CopyWorkshopToNewAccount(currentAccountId, newAccountId);
|
return this._accountLeftworkRepository.CopyWorkshopToNewAccount(currentAccountId, newAccountId);
|
||||||
}
|
}
|
||||||
|
|
||||||
#region Mahan
|
#region Mahan
|
||||||
|
|
||||||
public List<AccountViewModel> AccountsForAssign(long taskId)
|
public List<AccountViewModel> AccountsForAssign(long taskId)
|
||||||
@@ -790,6 +808,7 @@ public class AccountApplication : IAccountApplication
|
|||||||
{
|
{
|
||||||
return new List<AccountViewModel>();
|
return new List<AccountViewModel>();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _accountRepository.GetAccountsByPositionId(positionId);
|
return _accountRepository.GetAccountsByPositionId(positionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -807,7 +826,6 @@ public class AccountApplication : IAccountApplication
|
|||||||
return operation.Failed("این اکانت وجود ندارد");
|
return operation.Failed("این اکانت وجود ندارد");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var permissions = _roleRepository.Get(account.RoleId)
|
var permissions = _roleRepository.Get(account.RoleId)
|
||||||
.Permissions
|
.Permissions
|
||||||
.Select(x => x.Code)
|
.Select(x => x.Code)
|
||||||
@@ -816,10 +834,10 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
_authHelper.SignOut();
|
_authHelper.SignOut();
|
||||||
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
||||||
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName, account.AdminAreaPermission, account.ClientAriaPermission, account.Position.PositionValue);
|
, account.Username, account.Mobile, account.ProfilePhoto, permissions, account.RoleName,
|
||||||
|
account.AdminAreaPermission, account.ClientAriaPermission, account.Position.PositionValue);
|
||||||
_authHelper.Signin(authViewModel);
|
_authHelper.Signin(authViewModel);
|
||||||
return operation.Succcedded(2);
|
return operation.Succcedded(2);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
||||||
@@ -828,8 +846,11 @@ public class AccountApplication : IAccountApplication
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Pooya
|
#region Pooya
|
||||||
public OperationResult IsPhoneNumberAndPasswordValid(long accountId, string phoneNumber, string password, string rePassword)
|
|
||||||
|
public OperationResult IsPhoneNumberAndPasswordValid(long accountId, string phoneNumber, string password,
|
||||||
|
string rePassword)
|
||||||
{
|
{
|
||||||
OperationResult op = new();
|
OperationResult op = new();
|
||||||
|
|
||||||
@@ -847,7 +868,8 @@ public class AccountApplication : IAccountApplication
|
|||||||
return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد");
|
return op.Failed("رمز عبور نمی تواند کمتر از 8 کاراکتر باشد");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) && string.IsNullOrWhiteSpace(rePassword))
|
if ((string.IsNullOrWhiteSpace(phoneNumber) || entity.Mobile == phoneNumber) &&
|
||||||
|
string.IsNullOrWhiteSpace(rePassword))
|
||||||
return op.Failed("چیزی برای تغییر وجود ندارد");
|
return op.Failed("چیزی برای تغییر وجود ندارد");
|
||||||
|
|
||||||
|
|
||||||
@@ -873,20 +895,22 @@ public class AccountApplication : IAccountApplication
|
|||||||
var entity = _accountRepository.Get(command.AccountId);
|
var entity = _accountRepository.Get(command.AccountId);
|
||||||
if (entity == null)
|
if (entity == null)
|
||||||
return op.Failed(ApplicationMessages.RecordNotFound);
|
return op.Failed(ApplicationMessages.RecordNotFound);
|
||||||
var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password, command.RePassword);
|
var validationResult = IsPhoneNumberAndPasswordValid(command.AccountId, command.PhoneNumber, command.Password,
|
||||||
|
command.RePassword);
|
||||||
if (validationResult.IsSuccedded == false)
|
if (validationResult.IsSuccedded == false)
|
||||||
return validationResult;
|
return validationResult;
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(command.RePassword))
|
if (!string.IsNullOrWhiteSpace(command.RePassword))
|
||||||
{
|
{
|
||||||
|
|
||||||
entity.ChangePassword(_passwordHasher.Hash(command.Password));
|
entity.ChangePassword(_passwordHasher.Hash(command.Password));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(command.PhoneNumber))
|
if (!string.IsNullOrWhiteSpace(command.PhoneNumber))
|
||||||
{
|
{
|
||||||
entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto, entity.RoleName);
|
entity.Edit(entity.Fullname, entity.Username, command.PhoneNumber, entity.RoleId, entity.ProfilePhoto,
|
||||||
|
entity.RoleName);
|
||||||
}
|
}
|
||||||
|
|
||||||
_accountRepository.SaveChanges();
|
_accountRepository.SaveChanges();
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
}
|
}
|
||||||
@@ -982,6 +1006,7 @@ public class AccountApplication : IAccountApplication
|
|||||||
|
|
||||||
// return claimsResponse.Failed(ApplicationMessages.WrongUserPass);
|
// return claimsResponse.Failed(ApplicationMessages.WrongUserPass);
|
||||||
//}
|
//}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public interface IAccountLeftworkRepository : IRepository<long, AccountLeftWork>
|
|||||||
{
|
{
|
||||||
(string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId);
|
(string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId);
|
||||||
List<WorkshopAccountlistViewModel> WorkshopList(long accountId);
|
List<WorkshopAccountlistViewModel> WorkshopList(long accountId);
|
||||||
List<WorkshopSelectList> GetAllWorkshops();
|
// List<WorkshopSelectList> GetAllWorkshops();
|
||||||
|
|
||||||
OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId);
|
OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId);
|
||||||
|
|
||||||
|
|||||||
@@ -18,14 +18,13 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
|||||||
{
|
{
|
||||||
private readonly AccountContext _accountContext;
|
private readonly AccountContext _accountContext;
|
||||||
private readonly IWorkshopAccountRepository _workshopAccountRepository;
|
private readonly IWorkshopAccountRepository _workshopAccountRepository;
|
||||||
private readonly IWorkshopApplication _workshopApplication;
|
|
||||||
|
|
||||||
public AccountLeftworkRepository(AccountContext accountContext, IWorkshopAccountRepository workshopAccountRepository, IWorkshopApplication workshopApplication) : base(accountContext)
|
public AccountLeftworkRepository(AccountContext accountContext,
|
||||||
|
IWorkshopAccountRepository workshopAccountRepository) : base(accountContext)
|
||||||
{
|
{
|
||||||
_accountContext = accountContext;
|
_accountContext = accountContext;
|
||||||
_workshopAccountRepository = workshopAccountRepository;
|
_workshopAccountRepository = workshopAccountRepository;
|
||||||
_workshopApplication = workshopApplication;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId)
|
public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId)
|
||||||
{
|
{
|
||||||
@@ -58,14 +57,14 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
|||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<WorkshopSelectList> GetAllWorkshops()
|
// public List<WorkshopSelectList> GetAllWorkshops()
|
||||||
{
|
// {
|
||||||
return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
// return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
||||||
{
|
// {
|
||||||
Id = x.Id,
|
// Id = x.Id,
|
||||||
WorkshopFullName = x.WorkshopFullName
|
// WorkshopFullName = x.WorkshopFullName
|
||||||
}).ToList();
|
// }).ToList();
|
||||||
}
|
// }
|
||||||
|
|
||||||
public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId)
|
public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
|
using _0_Framework.Application.Enums;
|
||||||
using _0_Framework.Application.Sms;
|
using _0_Framework.Application.Sms;
|
||||||
using Company.Domain.ContarctingPartyAgg;
|
using Company.Domain.ContarctingPartyAgg;
|
||||||
using Company.Domain.InstitutionContractAgg;
|
using Company.Domain.InstitutionContractAgg;
|
||||||
@@ -12,22 +13,26 @@ public class JobSchedulerRegistrator
|
|||||||
private readonly IBackgroundJobClient _backgroundJobClient;
|
private readonly IBackgroundJobClient _backgroundJobClient;
|
||||||
private readonly SmsReminder _smsReminder;
|
private readonly SmsReminder _smsReminder;
|
||||||
private readonly IInstitutionContractRepository _institutionContractRepository;
|
private readonly IInstitutionContractRepository _institutionContractRepository;
|
||||||
|
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
|
||||||
private static DateTime? _lastRunCreateTransaction;
|
private static DateTime? _lastRunCreateTransaction;
|
||||||
private static DateTime? _lastRunSendMonthlySms;
|
private static DateTime? _lastRunSendMonthlySms;
|
||||||
private readonly ISmsService _smsService;
|
private readonly ISmsService _smsService;
|
||||||
|
private readonly ILogger<JobSchedulerRegistrator> _logger;
|
||||||
|
|
||||||
|
|
||||||
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService)
|
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository)
|
||||||
{
|
{
|
||||||
_smsReminder = smsReminder;
|
_smsReminder = smsReminder;
|
||||||
_backgroundJobClient = backgroundJobClient;
|
_backgroundJobClient = backgroundJobClient;
|
||||||
_institutionContractRepository = institutionContractRepository;
|
_institutionContractRepository = institutionContractRepository;
|
||||||
_smsService = smsService;
|
_smsService = smsService;
|
||||||
|
_logger = logger;
|
||||||
|
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Register()
|
public void Register()
|
||||||
{
|
{
|
||||||
|
_logger.LogInformation("hangfire Started");
|
||||||
RecurringJob.AddOrUpdate(
|
RecurringJob.AddOrUpdate(
|
||||||
"InstitutionContract.CreateFinancialTransaction",
|
"InstitutionContract.CreateFinancialTransaction",
|
||||||
() => CreateFinancialTransaction(),
|
() => CreateFinancialTransaction(),
|
||||||
@@ -55,6 +60,44 @@ public class JobSchedulerRegistrator
|
|||||||
() => SendInstitutionContractConfirmSms(),
|
() => SendInstitutionContractConfirmSms(),
|
||||||
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
|
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
|
||||||
);
|
);
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.SendWarningSms",
|
||||||
|
() => SendWarningSms(),
|
||||||
|
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
|
||||||
|
);
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.SendLegalActionSms",
|
||||||
|
() => SendLegalActionSms(),
|
||||||
|
"*/1 * * * *" // هر 1 دقیقه یکبار چک کن
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.Block",
|
||||||
|
() => Block(),
|
||||||
|
"*/30 * * * *" // هر 30 دقیقه یکبار چک کن
|
||||||
|
);
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.UnBlock",
|
||||||
|
() => UnBlock(),
|
||||||
|
"*/10 * * * *"
|
||||||
|
);
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.DeActiveInstitutionEndOfContract",
|
||||||
|
() => DeActiveInstitutionEndOfContract(),
|
||||||
|
"*/30 * * * *"
|
||||||
|
);
|
||||||
|
|
||||||
|
RecurringJob.AddOrUpdate(
|
||||||
|
"InstitutionContract.BlueDeActiveAfterZeroDebt",
|
||||||
|
() => BlueDeActiveAfterZeroDebt(),
|
||||||
|
"*/10 * * * *"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -65,14 +108,14 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
||||||
public async System.Threading.Tasks.Task CreateFinancialTransaction()
|
public async System.Threading.Tasks.Task CreateFinancialTransaction()
|
||||||
{
|
{
|
||||||
var now =DateTime.Now;
|
var now = DateTime.Now;
|
||||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||||
|
_logger.LogInformation("CreateFinancialTransaction job run");
|
||||||
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)
|
||||||
{
|
{
|
||||||
|
|
||||||
var month = endOfMonth.Substring(5, 2);
|
var month = endOfMonth.Substring(5, 2);
|
||||||
var year = endOfMonth.Substring(0, 4);
|
var year = endOfMonth.Substring(0, 4);
|
||||||
var monthName = month.ToFarsiMonthByNumber();
|
var monthName = month.ToFarsiMonthByNumber();
|
||||||
@@ -87,17 +130,17 @@ public class JobSchedulerRegistrator
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
|
await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
|
||||||
_lastRunCreateTransaction = now;
|
_lastRunCreateTransaction = now;
|
||||||
Console.WriteLine("CreateTransAction executed");
|
Console.WriteLine("CreateTransAction executed");
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
await _smsService.Alarm("09114221321", "خطا-ایجاد سند مالی");
|
await _smsService.Alarm("09114221321", "خطا-ایجاد سند مالی");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,14 +156,14 @@ 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)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _institutionContractRepository.SendMonthlySms(now);
|
await _institutionContractSmsServiceRepository.SendMonthlySms(now);
|
||||||
_lastRunSendMonthlySms = now;
|
_lastRunSendMonthlySms = now;
|
||||||
Console.WriteLine("Send Monthly sms executed");
|
Console.WriteLine("Send Monthly sms executed");
|
||||||
|
|
||||||
@@ -141,7 +184,8 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
||||||
public async System.Threading.Tasks.Task SendReminderSms()
|
public async System.Threading.Tasks.Task SendReminderSms()
|
||||||
{
|
{
|
||||||
await _institutionContractRepository.SendReminderSmsForBackgroundTask();
|
_logger.LogInformation("SendReminderSms job run");
|
||||||
|
await _institutionContractSmsServiceRepository.SendReminderSmsForBackgroundTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -151,7 +195,8 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
public async System.Threading.Tasks.Task SendBlockSms()
|
public async System.Threading.Tasks.Task SendBlockSms()
|
||||||
{
|
{
|
||||||
await _institutionContractRepository.SendBlockSmsForBackgroundTask();
|
_logger.LogInformation("SendBlockSms job run");
|
||||||
|
await _institutionContractSmsServiceRepository.SendBlockSmsForBackgroundTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -162,7 +207,98 @@ public class JobSchedulerRegistrator
|
|||||||
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
||||||
{
|
{
|
||||||
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
|
_logger.LogInformation("SendInstitutionContractConfirmSms job run");
|
||||||
|
await _institutionContractSmsServiceRepository.SendInstitutionContractConfirmSmsTask();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک هشدار
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
|
public async System.Threading.Tasks.Task SendWarningSms()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("SendWarningSms job run");
|
||||||
|
await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.Warning);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پیامک اقدام قضایی
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
|
public async System.Threading.Tasks.Task SendLegalActionSms()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("SendWarningSms job run");
|
||||||
|
await _institutionContractSmsServiceRepository.SendWarningOrLegalActionSmsTask(TypeOfSmsSetting.LegalAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بلاگ سازی
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
|
public async System.Threading.Tasks.Task Block()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("block job run");
|
||||||
|
var now = DateTime.Now;
|
||||||
|
var executeDate = now.ToFarsi().Substring(8, 2);
|
||||||
|
if (executeDate == "20")
|
||||||
|
{
|
||||||
|
if (now.Hour >= 9 && now.Hour < 10)
|
||||||
|
{
|
||||||
|
await _institutionContractSmsServiceRepository.Block(now);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آنبلاک
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
|
public async System.Threading.Tasks.Task UnBlock()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("UnBlock job run");
|
||||||
|
|
||||||
|
await _institutionContractSmsServiceRepository.UnBlock();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// غیر فعال سازی قراداد های پایان یافته
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 100)]
|
||||||
|
public async System.Threading.Tasks.Task DeActiveInstitutionEndOfContract()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("DeActiveInstitutionEndOfContract job run");
|
||||||
|
|
||||||
|
|
||||||
|
var now = DateTime.Now;
|
||||||
|
var executeDate = now.ToFarsi().Substring(8, 2);
|
||||||
|
if (executeDate == "01")
|
||||||
|
{
|
||||||
|
if (now.Hour >= 9 && now.Hour < 10)
|
||||||
|
{
|
||||||
|
await _institutionContractSmsServiceRepository.DeActiveInstitutionEndOfContract(now);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// غیرفعال سازس قرارداد های آبی که بدهی ندارند
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[DisableConcurrentExecution(timeoutInSeconds: 800)]
|
||||||
|
public async System.Threading.Tasks.Task BlueDeActiveAfterZeroDebt()
|
||||||
|
{
|
||||||
|
_logger.LogInformation("BlueDeActiveAfterZeroDebt job run");
|
||||||
|
await _institutionContractSmsServiceRepository.BlueDeActiveAfterZeroDebt();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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": {
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
using CompanyManagment.App.Contracts.Checkout;
|
using CompanyManagment.App.Contracts.Checkout;
|
||||||
|
using CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
namespace Company.Domain.CheckoutAgg;
|
namespace Company.Domain.CheckoutAgg;
|
||||||
@@ -80,4 +81,31 @@ public interface ICheckoutRepository : IRepository<long, Checkout>
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
|
Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت سلکت لیست پرسنل کارگاه
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<EmployeeSelectListDto>> GetEmployeeSelectListByWorkshopId(long id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست فیش حقوقی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PagedResult<CheckoutDto>> GetList(CheckoutSearchModelDto searchModel);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت فیش حقوقی
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<CheckoutPrintDto>> CheckoutPrint(List<long> ids);
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
using System;
|
||||||
|
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
@@ -32,7 +33,9 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
|
|||||||
List<PersonalContractingPartyViewModel> SearchForMain(PersonalContractingPartySearchModel searchModel2);
|
List<PersonalContractingPartyViewModel> SearchForMain(PersonalContractingPartySearchModel searchModel2);
|
||||||
OperationResult DeletePersonalContractingParties(long id);
|
OperationResult DeletePersonalContractingParties(long id);
|
||||||
bool GetHasContract(long id);
|
bool GetHasContract(long id);
|
||||||
|
[Obsolete("از متدهای async استفاده کنید")]
|
||||||
OperationResult DeActiveAll(long id);
|
OperationResult DeActiveAll(long id);
|
||||||
|
[Obsolete("از متدهای async استفاده کنید")]
|
||||||
OperationResult ActiveAll(long id);
|
OperationResult ActiveAll(long id);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@@ -76,4 +79,9 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
|
|||||||
|
|
||||||
Task<PersonalContractingParty> GetByNationalCode(string nationalCode);
|
Task<PersonalContractingParty> GetByNationalCode(string nationalCode);
|
||||||
Task<PersonalContractingParty> GetByNationalId(string registerId);
|
Task<PersonalContractingParty> GetByNationalId(string registerId);
|
||||||
|
|
||||||
|
Task<OperationResult> DeActiveAllAsync(long id);
|
||||||
|
Task<OperationResult> ActiveAllAsync(long id);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -48,6 +48,10 @@ public interface IContractRepository : IRepository<long, Contract>
|
|||||||
bool Remove(long id);
|
bool Remove(long id);
|
||||||
|
|
||||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||||
|
|
||||||
|
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||||
|
|
||||||
|
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||||
#endregion
|
#endregion
|
||||||
#region NewChangeByHeydari
|
#region NewChangeByHeydari
|
||||||
|
|
||||||
@@ -63,4 +67,8 @@ public interface IContractRepository : IRepository<long, Contract>
|
|||||||
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
||||||
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
|
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||||
#endregion
|
#endregion
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ public interface IEmployeeRepository : IRepository<long, Employee>
|
|||||||
#region Api
|
#region Api
|
||||||
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
|
Task<List<EmployeeSelectListViewModel>> GetSelectList(string searchText,long id);
|
||||||
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
||||||
|
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,4 +10,6 @@ public interface IFinancialInvoiceRepository : IRepository<long, FinancialInvoic
|
|||||||
EditFinancialInvoice GetDetails(long id);
|
EditFinancialInvoice GetDetails(long id);
|
||||||
List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel);
|
List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel);
|
||||||
Task<FinancialInvoice> GetUnPaidByEntityId(long entityId, FinancialInvoiceItemType financialInvoiceItemType);
|
Task<FinancialInvoice> GetUnPaidByEntityId(long entityId, FinancialInvoiceItemType financialInvoiceItemType);
|
||||||
|
Task<FinancialInvoice> GetUnPaidFinancialInvoiceByContractingPartyIdAndAmount(long contractingPartyId,
|
||||||
|
double amount);
|
||||||
}
|
}
|
||||||
@@ -13,7 +13,7 @@ namespace Company.Domain.InstitutionContractAgg;
|
|||||||
|
|
||||||
public interface IInstitutionContractRepository : IRepository<long, InstitutionContract>
|
public interface IInstitutionContractRepository : IRepository<long, InstitutionContract>
|
||||||
{
|
{
|
||||||
|
|
||||||
EditInstitutionContract GetDetails(long id);
|
EditInstitutionContract GetDetails(long id);
|
||||||
EditInstitutionContract GetFirstContract(long contractingPartyId, string typeOfContract);
|
EditInstitutionContract GetFirstContract(long contractingPartyId, string typeOfContract);
|
||||||
List<InstitutionContractViewModel> InstitutionContractsWithoutAccount();
|
List<InstitutionContractViewModel> InstitutionContractsWithoutAccount();
|
||||||
@@ -56,9 +56,13 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
|||||||
void UpdateStatusIfNeeded(long institutionContractId);
|
void UpdateStatusIfNeeded(long institutionContractId);
|
||||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||||
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
||||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request, string contractStart = null);
|
||||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||||
|
|
||||||
|
#region Creation
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Extension
|
#region Extension
|
||||||
|
|
||||||
@@ -69,83 +73,25 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
|||||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||||
InstitutionContractSetDiscountForExtensionRequest request);
|
InstitutionContractSetDiscountForExtensionRequest request);
|
||||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||||
|
|
||||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Upgrade(Amendment)
|
#region Upgrade(Amendment)
|
||||||
|
|
||||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||||
|
|
||||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||||
Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||||
|
|
||||||
|
|
||||||
#region ReminderSMS
|
|
||||||
/// <summary>
|
|
||||||
/// دریافت لیست - ارسال پیامک
|
|
||||||
/// فراخوانی از سمت بک گراند سرویس
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task<bool> SendReminderSmsForBackgroundTask();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ارسال پیامک صورت حساب ماهانه
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="now"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task SendMonthlySms(DateTime now);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ارسال پیامک مسدودی از طرف بک گراند سرویس
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task SendBlockSmsForBackgroundTask();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// دریافت لیست واجد شرایط بلاک
|
|
||||||
/// جهت ارسال پیامک مسدودی
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="checkDate"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task<List<BlockSmsListData>> GetBlockListData(DateTime checkDate);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ارسال پیامک مسدودی
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="smsListData"></param>
|
|
||||||
/// <param name="typeOfSms"></param>
|
|
||||||
/// <param name="sendMessStart"></param>
|
|
||||||
/// <param name="sendMessEnd"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
|
|
||||||
string sendMessStart, string sendMessEnd);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
///دریافت لیست بدهکارن
|
|
||||||
/// جهت ارسال پیامک
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task<List<SmsListData>> GetSmsListData(DateTime checkDate, TypeOfSmsSetting typeOfSmsSetting);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ارسال پیامک های یاد آور بدهی
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task SendReminderSmsToContractingParties(List<SmsListData> smsListData, string typeOfSms, string sendMessStart, string sendMessEnd);
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// ارسال پیامک یادآور تایید قراداد مالی
|
|
||||||
/// </summary>
|
|
||||||
/// <returns></returns>
|
|
||||||
Task SendInstitutionContractConfirmSmsTask();
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region CreateMontlyTransaction
|
#region CreateMontlyTransaction
|
||||||
|
|
||||||
@@ -158,5 +104,21 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Task<long> GetIdByInstallmentId(long installmentId);
|
Task<long> GetIdByInstallmentId(long installmentId);
|
||||||
|
Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId);
|
||||||
|
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||||
|
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request);
|
||||||
|
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||||
|
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||||
|
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||||
|
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||||
|
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||||
|
Task<InstitutionContract> GetIncludeInstallments(long id);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,145 @@
|
|||||||
|
using _0_Framework.Application.Enums;
|
||||||
|
using _0_Framework.Domain;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Company.Domain.InstitutionContractAgg;
|
||||||
|
|
||||||
|
public interface IInstitutionContractSmsServiceRepository : IRepository<long, InstitutionContract>
|
||||||
|
{
|
||||||
|
#region reminderSMs
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک یادآور تایید قراداد مالی
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendInstitutionContractConfirmSmsTask();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//هشدار و اقدام قضایی
|
||||||
|
#region WarningOrLegalActionSmsListData
|
||||||
|
/// <summary>
|
||||||
|
/// اجرای تسک پیامک هشدار یا اقدام قضایی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="typeOfSmsSetting"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendWarningOrLegalActionSmsTask(TypeOfSmsSetting typeOfSmsSetting);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست بدهکاران آبی جهت هشدار یا اقدام قضایی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="typeOfSmsSetting"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsListData>> GetWarningOrLegalActionSmsListData(TypeOfSmsSetting typeOfSmsSetting);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک هشدار یا اقدام قضایی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="smsListData"></param>
|
||||||
|
/// <param name="typeOfSmsSetting"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendWarningOrLegalActionSms(List<SmsListData> smsListData, TypeOfSmsSetting typeOfSmsSetting);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//بلاک - آنبلاک - پیامک بلاک -
|
||||||
|
// غیر فعال سازی قراداد های پایان یافته
|
||||||
|
#region Block
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک مسدودی از طرف بک گراند سرویس
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendBlockSmsForBackgroundTask();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست واجد شرایط بلاک
|
||||||
|
/// جهت ارسال پیامک مسدودی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="checkDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<BlockSmsListData>> GetBlockListData(DateTime checkDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک مسدودی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="smsListData"></param>
|
||||||
|
/// <param name="typeOfSms"></param>
|
||||||
|
/// <param name="sendMessStart"></param>
|
||||||
|
/// <param name="sendMessEnd"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendBlockSmsToContractingParties(List<BlockSmsListData> smsListData, string typeOfSms,
|
||||||
|
string sendMessStart, string sendMessEnd);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بلاک سازی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="checkDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task Block(DateTime checkDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست بدهکارانی که باید بلاک شوند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="checkDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<long>> GetToBeBlockList(DateTime checkDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آنبلاک
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task UnBlock();
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// غیر فعالسازی قرارداد های پایان یافته
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="checkDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task DeActiveInstitutionEndOfContract(DateTime checkDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// غیرفعال سازس قرارداد های آبی که بدهی ندارند
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task BlueDeActiveAfterZeroDebt();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region ReminderSMS
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست - ارسال پیامک
|
||||||
|
/// فراخوانی از سمت بک گراند سرویس
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<bool> SendReminderSmsForBackgroundTask();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک صورت حساب ماهانه
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="now"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendMonthlySms(DateTime now);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///دریافت لیست بدهکارن
|
||||||
|
/// جهت ارسال پیامک
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsListData>> GetSmsListData(DateTime checkDate, TypeOfSmsSetting typeOfSmsSetting);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ارسال پیامک های یاد آور بدهی
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task SendReminderSmsToContractingParties(List<SmsListData> smsListData, string typeOfSms, string sendMessStart, string sendMessEnd);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
@@ -23,6 +23,8 @@ public class InstitutionContractWorkshopGroup : EntityBase
|
|||||||
!InitialWorkshops.Cast<InstitutionContractWorkshopBase>()
|
!InitialWorkshops.Cast<InstitutionContractWorkshopBase>()
|
||||||
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
|
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
|
||||||
|
|
||||||
|
public bool IsInPersonContract => InitialWorkshops.Any(x => x.Services.ContractInPerson);
|
||||||
|
|
||||||
public InstitutionContractWorkshopGroup(long institutionContractId,
|
public InstitutionContractWorkshopGroup(long institutionContractId,
|
||||||
List<InstitutionContractWorkshopInitial> initialDetails)
|
List<InstitutionContractWorkshopInitial> initialDetails)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,340 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using _0_Framework.Application;
|
||||||
|
using _0_Framework.Application.Enums;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
|
||||||
|
namespace Company.Domain.InstitutionContractCreationTempAgg;
|
||||||
|
|
||||||
|
public class InstitutionContractCreationTemp
|
||||||
|
{
|
||||||
|
public InstitutionContractCreationTemp()
|
||||||
|
{
|
||||||
|
Id = Guid.NewGuid();
|
||||||
|
}
|
||||||
|
|
||||||
|
[BsonId] // Specifies this field as the _id in MongoDB
|
||||||
|
[BsonRepresentation(BsonType.String)] // Ensures the GUID is stored as a string
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع حقوقی طرف قرارداد (حقیقی یا حقوقی)
|
||||||
|
/// </summary>
|
||||||
|
public LegalType ContractingPartyLegalType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقیقی
|
||||||
|
/// </summary>
|
||||||
|
public InstitutionContractCreationTempRealParty RealParty { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقوقی
|
||||||
|
/// </summary>
|
||||||
|
public InstitutionContractCreationTempLegalParty LegalParty { get; set; }
|
||||||
|
|
||||||
|
public string Address { get; set; }
|
||||||
|
public string City { get; set; }
|
||||||
|
public string Province { get; set; }
|
||||||
|
public List<EditContactInfo> ContactInfos { get; set; }
|
||||||
|
public long RepresentativeId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<InstitutionContractCreationTempWorkshop> Workshops { get; set; }
|
||||||
|
|
||||||
|
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail TwelveMonths { get; set; }
|
||||||
|
public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; }
|
||||||
|
public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; }
|
||||||
|
|
||||||
|
public bool HasContractInPerson { get; set; }
|
||||||
|
|
||||||
|
public InstitutionContractDuration? Duration { get; set; }
|
||||||
|
|
||||||
|
public void SetContractingPartyInfo(LegalType legalType,
|
||||||
|
InstitutionContractCreationTempRealParty realParty,
|
||||||
|
InstitutionContractCreationTempLegalParty legalParty)
|
||||||
|
{
|
||||||
|
ContractingPartyLegalType = legalType;
|
||||||
|
RealParty = realParty;
|
||||||
|
LegalParty = legalParty;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetWorkshopsAndPlanAmounts(List<InstitutionContractCreationTempWorkshop> workshops,
|
||||||
|
InstitutionContractCreationPlanDetail oneMonth,
|
||||||
|
InstitutionContractCreationPlanDetail threeMonth, InstitutionContractCreationPlanDetail sixMonth,
|
||||||
|
InstitutionContractCreationPlanDetail twelveMonth, bool hasContractInPerson)
|
||||||
|
{
|
||||||
|
Workshops = workshops;
|
||||||
|
OneMonth = oneMonth;
|
||||||
|
ThreeMonths = threeMonth;
|
||||||
|
SixMonths = sixMonth;
|
||||||
|
TwelveMonths = twelveMonth;
|
||||||
|
HasContractInPerson = hasContractInPerson;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractPaymentMonthlyViewModel monthly,
|
||||||
|
InstitutionContractPaymentOneTimeViewModel oneTime)
|
||||||
|
{
|
||||||
|
Duration = duration;
|
||||||
|
MonthlyPayment = monthly;
|
||||||
|
OneTimePayment = oneTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void SetContractingPartyContactInfo(string address, string city, string province, List<EditContactInfo> requestContactInfos,long representativeId)
|
||||||
|
{
|
||||||
|
Address = address;
|
||||||
|
City = city;
|
||||||
|
Province = province;
|
||||||
|
ContactInfos = requestContactInfos;
|
||||||
|
RepresentativeId = representativeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationTempLegalParty
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام شرکت
|
||||||
|
/// </summary>
|
||||||
|
public string CompanyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره ثبت
|
||||||
|
/// </summary>
|
||||||
|
public string RegisterId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه ملی شرکت
|
||||||
|
/// </summary>
|
||||||
|
public string NationalId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره تلفن شرکت
|
||||||
|
/// </summary>
|
||||||
|
public string PhoneNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه موقت طرف قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public long ContractingPartyTempId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد ملی نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ تولد نماینده قانونی فارسی
|
||||||
|
/// </summary>
|
||||||
|
public string BirthDateFa { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public string FName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام خانوادگی نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public string LName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پدر نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره شناسنامه نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت احراز هویت نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAuth { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سمت نماینده قانونی در شرکت
|
||||||
|
/// </summary>
|
||||||
|
public string Position { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// جنسیت نماینده قانونی
|
||||||
|
/// </summary>
|
||||||
|
public Gender Gender { get; set; }
|
||||||
|
|
||||||
|
public string IdNumberSeri { get; set; }
|
||||||
|
|
||||||
|
public string IdNumberSerial { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationTempRealParty
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ تولد فارسی
|
||||||
|
/// </summary>
|
||||||
|
public string BirthDateFa { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره تلفن
|
||||||
|
/// </summary>
|
||||||
|
public string PhoneNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت احراز هویت
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAuth { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام
|
||||||
|
/// </summary>
|
||||||
|
public string FName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام خانوادگی
|
||||||
|
/// </summary>
|
||||||
|
public string LName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پدر
|
||||||
|
/// </summary>
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره شناسنامه
|
||||||
|
/// </summary>
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه موقت طرف قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public long ContractingPartyTempId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// جنسیت
|
||||||
|
/// </summary>
|
||||||
|
public Gender Gender { get; set; }
|
||||||
|
|
||||||
|
public string IdNumberSeri { get; set; }
|
||||||
|
|
||||||
|
public string IdNumberSerial { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationTempPlan
|
||||||
|
{
|
||||||
|
public InstitutionContractCreationTempPlan(string contractStart, string contractEnd,
|
||||||
|
string oneMonthPaymentDiscounted, string oneMonthDiscount, string oneMonthOriginalPayment,
|
||||||
|
string totalPayment, string dailyCompensation, string obligation)
|
||||||
|
{
|
||||||
|
ContractStart = contractStart;
|
||||||
|
ContractEnd = contractEnd;
|
||||||
|
OneMonthPaymentDiscounted = oneMonthPaymentDiscounted;
|
||||||
|
OneMonthDiscount = oneMonthDiscount;
|
||||||
|
OneMonthOriginalPayment = oneMonthOriginalPayment;
|
||||||
|
TotalPayment = totalPayment;
|
||||||
|
DailyCompensation = dailyCompensation;
|
||||||
|
Obligation = obligation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string ContractStart { get; set; }
|
||||||
|
public string ContractEnd { get; set; }
|
||||||
|
public string OneMonthPaymentDiscounted { get; set; }
|
||||||
|
public string OneMonthDiscount { get; set; }
|
||||||
|
public string OneMonthOriginalPayment { get; set; }
|
||||||
|
public string TotalPayment { get; set; }
|
||||||
|
public string DailyCompensation { get; set; }
|
||||||
|
public string Obligation { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationTempWorkshop
|
||||||
|
{
|
||||||
|
public InstitutionContractCreationTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
|
||||||
|
bool insurance, bool insuranceInPerson,
|
||||||
|
bool rollCall,bool rollCallInPerson, bool customizeCheckout,double price,long workshopId)
|
||||||
|
{
|
||||||
|
WorkshopName = workshopName;
|
||||||
|
CountPerson = countPerson;
|
||||||
|
ContractAndCheckout = contractAndCheckout;
|
||||||
|
Insurance = insurance;
|
||||||
|
RollCall = rollCall;
|
||||||
|
CustomizeCheckout = customizeCheckout;
|
||||||
|
ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
|
||||||
|
InsuranceInPerson = insuranceInPerson;
|
||||||
|
RollCallInPerson = rollCallInPerson;
|
||||||
|
Price = price;
|
||||||
|
WorkshopId = workshopId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string WorkshopName { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تعداد پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public int CountPerson { get; private set; }
|
||||||
|
|
||||||
|
|
||||||
|
#region ServiceSelection
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// قرارداد و تصفیه
|
||||||
|
/// </summary>
|
||||||
|
public bool ContractAndCheckout { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بیمه
|
||||||
|
/// </summary>
|
||||||
|
public bool Insurance { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// حضورغباب
|
||||||
|
/// </summary>
|
||||||
|
public bool RollCall { get; private set; }
|
||||||
|
|
||||||
|
public bool RollCallInPerson { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فیش غیر رسمی
|
||||||
|
/// </summary>
|
||||||
|
public bool CustomizeCheckout { get;private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// خدمات حضوری قرداد و تصفیه
|
||||||
|
/// </summary>
|
||||||
|
public bool ContractAndCheckoutInPerson { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// خدمات حضوری بیمه
|
||||||
|
/// </summary>
|
||||||
|
public bool InsuranceInPerson { get; private set; }
|
||||||
|
|
||||||
|
public double Price{ get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Company.Domain.InstitutionContractSendFlagAgg;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Interface برای Repository مربوط به فلگ ارسال قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public interface IInstitutionContractSendFlagRepository
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد یک رکورد جدید برای فلگ ارسال قرارداد
|
||||||
|
/// </summary>
|
||||||
|
Task Create(InstitutionContractSendFlag flag);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بازیابی فلگ بر اساس شناسه قرارداد
|
||||||
|
/// </summary>
|
||||||
|
Task<InstitutionContractSendFlag> GetByContractId(long contractId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بهروزرسانی فلگ ارسال
|
||||||
|
/// </summary>
|
||||||
|
Task Update(InstitutionContractSendFlag flag);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بررسی اینکه آیا قرارداد ارسال شده است
|
||||||
|
/// </summary>
|
||||||
|
Task<bool> IsContractSent(long contractId);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
using System;
|
||||||
|
using MongoDB.Bson;
|
||||||
|
using MongoDB.Bson.Serialization.Attributes;
|
||||||
|
|
||||||
|
namespace Company.Domain.InstitutionContractSendFlagAgg;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نمایندگی فلگ ارسال قرارداد در MongoDB
|
||||||
|
/// این موجودیت برای ردیابی اینکه آیا قرارداد ارسال شده است استفاده میشود
|
||||||
|
/// </summary>
|
||||||
|
public class InstitutionContractSendFlag
|
||||||
|
{
|
||||||
|
public InstitutionContractSendFlag(long institutionContractId,bool isSent)
|
||||||
|
{
|
||||||
|
Id = Guid.NewGuid();
|
||||||
|
InstitutionContractId = institutionContractId;
|
||||||
|
IsSent = isSent;
|
||||||
|
CreatedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه یکتای MongoDB
|
||||||
|
/// </summary>
|
||||||
|
[BsonId]
|
||||||
|
[BsonRepresentation(BsonType.String)]
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه قرارداد در SQL
|
||||||
|
/// </summary>
|
||||||
|
public long InstitutionContractId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا قرارداد ارسال شده است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsSent { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ و زمان ارسال
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? SentDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ و زمان ایجاد رکورد
|
||||||
|
/// </summary>
|
||||||
|
public DateTime CreatedDate { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ و زمان آخرین بهروزرسانی
|
||||||
|
/// </summary>
|
||||||
|
public DateTime? LastModifiedDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// علامتگذاری قرارداد به عنوان ارسالشده
|
||||||
|
/// </summary>
|
||||||
|
public void MarkAsSent()
|
||||||
|
{
|
||||||
|
IsSent = true;
|
||||||
|
SentDate = DateTime.Now;
|
||||||
|
LastModifiedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بازگردانی علامت ارسال
|
||||||
|
/// </summary>
|
||||||
|
public void MarkAsNotSent()
|
||||||
|
{
|
||||||
|
IsSent = false;
|
||||||
|
SentDate = null;
|
||||||
|
LastModifiedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بهروزرسانی علامت آخری اصلاح
|
||||||
|
/// </summary>
|
||||||
|
public void UpdateLastModified()
|
||||||
|
{
|
||||||
|
LastModifiedDate = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -78,6 +78,7 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
||||||
|
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
using System.Collections.Generic;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using _0_Framework.Domain;
|
using _0_Framework.Domain;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionPlan;
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Company.Domain.LeaveAgg;
|
namespace Company.Domain.LeaveAgg;
|
||||||
|
|
||||||
@@ -10,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);
|
||||||
@@ -27,6 +29,8 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
|||||||
List<LeaveMainViewModel> searchClient(LeaveSearchModel searchModel);
|
List<LeaveMainViewModel> searchClient(LeaveSearchModel searchModel);
|
||||||
LeavePrintViewModel PrintOne(long id);
|
LeavePrintViewModel PrintOne(long id);
|
||||||
List<LeavePrintViewModel> PrintAll(List<long> id);
|
List<LeavePrintViewModel> PrintAll(List<long> id);
|
||||||
|
|
||||||
|
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||||
|
|
||||||
#region Vafa
|
#region Vafa
|
||||||
|
|
||||||
@@ -34,4 +38,27 @@ public interface ILeaveRepository : IRepository<long, Leave>
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
bool CheckIfValidToEdit(long id);
|
bool CheckIfValidToEdit(long id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست مرخصی ها در کلاینت
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PagedResult<leaveListDto>> GetList(
|
||||||
|
LeaveListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست گروه بندی شده
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<LeaveListPrintDto> ListPrint(List<long> ids);
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,30 @@
|
|||||||
using CompanyManagment.App.Contracts.SmsResult;
|
using _0_Framework.Domain;
|
||||||
|
using CompanyManagment.App.Contracts.SmsResult;
|
||||||
|
using CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using _0_Framework.Domain;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Company.Domain.SmsResultAgg;
|
namespace Company.Domain.SmsResultAgg;
|
||||||
|
|
||||||
public interface ISmsResultRepository : IRepository<long, SmsResult>
|
public interface ISmsResultRepository : IRepository<long, SmsResult>
|
||||||
{
|
{
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست پیامکها
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت اکسپند لیست هر تاریخ
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="date"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date);
|
||||||
|
|
||||||
|
#endregion
|
||||||
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
||||||
}
|
}
|
||||||
@@ -106,4 +106,14 @@ public interface IWorkshopRepository : IRepository<long, Workshop>
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست کارگاه های ادمین برای سلکت تو
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<AdminWorkshopSelectListDto>> GetAdminWorkshopSelectList();
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -8,86 +8,129 @@ using System.Text.RegularExpressions;
|
|||||||
|
|
||||||
namespace CompanyManagement.Infrastructure.Excel.InstitutionContract;
|
namespace CompanyManagement.Infrastructure.Excel.InstitutionContract;
|
||||||
|
|
||||||
|
// Enum برای تعریف ستونهای موجود
|
||||||
|
public enum ExcelColumnType
|
||||||
|
{
|
||||||
|
RowNumber, // ردیف
|
||||||
|
PhysicalContract, // قرارداد فیزیکی
|
||||||
|
ContractNo, // شماره قرارداد
|
||||||
|
Representative, // معرف
|
||||||
|
ContractingPartyName, // طرف حساب
|
||||||
|
ArchiveCode, // شماره کارفرما
|
||||||
|
EmployerName, // کارفرما
|
||||||
|
WorkshopName, // کارگاهها (چندخطی)
|
||||||
|
WorkshopCount, // تعداد کارگاه
|
||||||
|
EmployeeCount, // مجموع پرسنل
|
||||||
|
ContractStartDate, // شروع قرارداد
|
||||||
|
ContractEndDate, // پایان قرارداد
|
||||||
|
InstallmentAmount, // مبلغ قسط
|
||||||
|
ContractAmount, // مبلغ قرارداد
|
||||||
|
FinancialStatus // وضعیت مالی
|
||||||
|
}
|
||||||
|
|
||||||
|
// کلاس کانفیگ برای تنظیم ستونهای نمایشی
|
||||||
|
public class ExcelColumnConfig
|
||||||
|
{
|
||||||
|
public List<ExcelColumnType> VisibleColumns { get; set; }
|
||||||
|
|
||||||
|
public ExcelColumnConfig()
|
||||||
|
{
|
||||||
|
// فعلاً تمام ستونها فعال هستند
|
||||||
|
VisibleColumns = new List<ExcelColumnType>
|
||||||
|
{
|
||||||
|
ExcelColumnType.PhysicalContract,
|
||||||
|
ExcelColumnType.ContractNo,
|
||||||
|
ExcelColumnType.Representative,
|
||||||
|
ExcelColumnType.ContractingPartyName,
|
||||||
|
ExcelColumnType.ArchiveCode,
|
||||||
|
ExcelColumnType.EmployerName,
|
||||||
|
ExcelColumnType.WorkshopName,
|
||||||
|
ExcelColumnType.WorkshopCount,
|
||||||
|
ExcelColumnType.EmployeeCount,
|
||||||
|
ExcelColumnType.ContractStartDate,
|
||||||
|
ExcelColumnType.ContractEndDate,
|
||||||
|
ExcelColumnType.InstallmentAmount,
|
||||||
|
ExcelColumnType.ContractAmount,
|
||||||
|
ExcelColumnType.FinancialStatus
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public class InstitutionContractExcelGenerator
|
public class InstitutionContractExcelGenerator
|
||||||
{
|
{
|
||||||
|
private static ExcelColumnConfig _columnConfig = new ExcelColumnConfig();
|
||||||
|
|
||||||
public static byte[] GenerateExcel(List<InstitutionContractViewModel> institutionContractViewModels)
|
public static byte[] GenerateExcel(List<InstitutionContractExcelViewModel> contractViewModels)
|
||||||
{
|
{
|
||||||
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
|
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
|
||||||
using var package = new ExcelPackage();
|
using var package = new ExcelPackage();
|
||||||
var allWorksheet = package.Workbook.Worksheets.Add("همه");
|
|
||||||
|
|
||||||
var blueWorksheet = package.Workbook.Worksheets.Add("آبی");
|
|
||||||
blueWorksheet.TabColor = Color.LightBlue;
|
|
||||||
|
|
||||||
var grayWorksheet = package.Workbook.Worksheets.Add("خاکستری");
|
|
||||||
grayWorksheet.TabColor = Color.LightGray;
|
|
||||||
|
|
||||||
var redWorksheet = package.Workbook.Worksheets.Add("قرمز");
|
|
||||||
redWorksheet.TabColor = Color.LightCoral;
|
|
||||||
|
|
||||||
var purpleWorksheet = package.Workbook.Worksheets.Add("بنفش");
|
|
||||||
purpleWorksheet.TabColor = Color.MediumPurple;
|
|
||||||
|
|
||||||
var blackWorksheet = package.Workbook.Worksheets.Add("مشکی");
|
|
||||||
blackWorksheet.TabColor = Color.DimGray;
|
|
||||||
|
|
||||||
var yellowWorksheet = package.Workbook.Worksheets.Add("زرد");
|
|
||||||
yellowWorksheet.TabColor = Color.Yellow;
|
|
||||||
|
|
||||||
var whiteWorksheet = package.Workbook.Worksheets.Add("سفید");
|
|
||||||
whiteWorksheet.TabColor = Color.White;
|
|
||||||
|
|
||||||
|
|
||||||
CreateExcelSheet(institutionContractViewModels, allWorksheet);
|
|
||||||
|
|
||||||
var blueContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "blue").ToList();
|
|
||||||
CreateExcelSheet(blueContracts, blueWorksheet);
|
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(blueContracts).ToList();
|
|
||||||
|
|
||||||
var grayContracts = institutionContractViewModels.Where(x => x.IsContractingPartyBlock == "true").ToList();
|
|
||||||
CreateExcelSheet(grayContracts, grayWorksheet);
|
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(grayContracts).ToList();
|
|
||||||
|
|
||||||
var redContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "red").ToList();
|
|
||||||
CreateExcelSheet(redContracts, redWorksheet);
|
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(redContracts).ToList();
|
|
||||||
|
|
||||||
var purpleContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "purple").ToList();
|
|
||||||
CreateExcelSheet(purpleContracts, purpleWorksheet);
|
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(purpleContracts).ToList();
|
|
||||||
|
|
||||||
var blackContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "black").ToList();
|
// ایجاد شیت برای هر تب با دادههای مربوطه
|
||||||
CreateExcelSheet(blackContracts, blackWorksheet);
|
foreach (var viewModel in contractViewModels)
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList();
|
{
|
||||||
|
var worksheet = CreateWorksheet(package, viewModel.Tab);
|
||||||
var yellowContracts = institutionContractViewModels
|
CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet);
|
||||||
.Where(x => string.IsNullOrWhiteSpace(x.ExpireColor) && x.WorkshopCount == "0").ToList();
|
}
|
||||||
CreateExcelSheet(yellowContracts, yellowWorksheet);
|
|
||||||
institutionContractViewModels = institutionContractViewModels.Except(yellowContracts).ToList();
|
|
||||||
|
|
||||||
var otherContracts = institutionContractViewModels;
|
|
||||||
CreateExcelSheet(otherContracts, whiteWorksheet);
|
|
||||||
|
|
||||||
return package.GetAsByteArray();
|
return package.GetAsByteArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet)
|
/// <summary>
|
||||||
|
/// ایجاد شیت بر اساس نوع تب
|
||||||
|
/// </summary>
|
||||||
|
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
|
||||||
{
|
{
|
||||||
// Headers
|
return status switch
|
||||||
worksheet.Cells[1, 1].Value = "شماره قرارداد";
|
{
|
||||||
worksheet.Cells[1, 2].Value = "طرف حساب";
|
InstitutionContractListStatus.DeactiveWithDebt =>
|
||||||
worksheet.Cells[1, 3].Value = "شماره کارفرما";
|
CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue),
|
||||||
worksheet.Cells[1, 4].Value = "کارفرما ها";
|
|
||||||
worksheet.Cells[1, 5].Value = "کارگاه ها";
|
InstitutionContractListStatus.Deactive =>
|
||||||
worksheet.Cells[1, 6].Value = "مجبوع پرسنل";
|
CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
|
||||||
worksheet.Cells[1, 7].Value = "شروع قرارداد";
|
|
||||||
worksheet.Cells[1, 8].Value = "پایان قرارداد";
|
InstitutionContractListStatus.PendingForRenewal =>
|
||||||
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)";
|
CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
|
||||||
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
|
|
||||||
worksheet.Cells[1, 11].Value = "وضعیت مالی";
|
InstitutionContractListStatus.Free =>
|
||||||
|
CreateColoredWorksheet(package, "بنفش", Color.MediumPurple),
|
||||||
|
|
||||||
|
InstitutionContractListStatus.Block =>
|
||||||
|
CreateColoredWorksheet(package, "بلاک", Color.DimGray),
|
||||||
|
|
||||||
|
InstitutionContractListStatus.WithoutWorkshop =>
|
||||||
|
CreateColoredWorksheet(package, "بدون کارگاه", Color.Yellow),
|
||||||
|
|
||||||
|
InstitutionContractListStatus.Active =>
|
||||||
|
CreateColoredWorksheet(package, "فعال", Color.White),
|
||||||
|
|
||||||
|
InstitutionContractListStatus.PendingForVerify =>
|
||||||
|
CreateColoredWorksheet(package, "در انتظار تایید", Color.OrangeRed),
|
||||||
|
|
||||||
|
null => CreateColoredWorksheet(package, "کل قرارداد ها", Color.White),
|
||||||
|
_ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
using (var range = worksheet.Cells[1, 1, 1, 11])
|
/// <summary>
|
||||||
|
/// ایجاد شیت با رنگ تب
|
||||||
|
/// </summary>
|
||||||
|
private static ExcelWorksheet CreateColoredWorksheet(ExcelPackage package, string sheetName, Color tabColor)
|
||||||
|
{
|
||||||
|
var worksheet = package.Workbook.Worksheets.Add(sheetName);
|
||||||
|
worksheet.TabColor = tabColor;
|
||||||
|
return worksheet;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void CreateExcelSheet(List<GetInstitutionContractListItemsViewModel> contractItems, ExcelWorksheet worksheet)
|
||||||
|
{
|
||||||
|
// دریافت نقشه ستونهای مرئی
|
||||||
|
var visibleColumnIndices = GetVisibleColumnIndices();
|
||||||
|
int columnCount = visibleColumnIndices.Count;
|
||||||
|
|
||||||
|
// تنظیم Headers
|
||||||
|
SetupHeaders(worksheet, visibleColumnIndices, columnCount);
|
||||||
|
|
||||||
|
using (var range = worksheet.Cells[1, 1, 1, columnCount])
|
||||||
{
|
{
|
||||||
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||||
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||||
@@ -110,30 +153,35 @@ public class InstitutionContractExcelGenerator
|
|||||||
|
|
||||||
int row = 2;
|
int row = 2;
|
||||||
|
|
||||||
for (int i = 0; i < institutionContractViewModels.Count; i++)
|
for (int i = 0; i < contractItems.Count; i++)
|
||||||
{
|
{
|
||||||
var contract = institutionContractViewModels[i];
|
var contract = contractItems[i];
|
||||||
var employers = contract.EmployerViewModels?.ToList() ?? new();
|
var employers = contract.EmployerNames?.ToList() ?? new();
|
||||||
var workshops = contract.WorkshopViewModels?.ToList() ?? new();
|
var workshops = contract.WorkshopNames?.ToList() ?? new();
|
||||||
|
|
||||||
int maxRows = Math.Max(employers.Count, workshops.Count);
|
int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست
|
||||||
maxRows = Math.Max(1, maxRows);
|
|
||||||
|
|
||||||
int startRow = row;
|
int startRow = row;
|
||||||
int endRow = row + maxRows - 1;
|
int endRow = row + maxRows - 1;
|
||||||
|
|
||||||
// 🎨 دریافت رنگ پسزمینه از مقدار رنگ موجود در داده
|
// 🎨 دریافت رنگ پسزمینه بر اساس وضعیت قرارداد
|
||||||
string colorName = contract.ExpireColor.ToLower();
|
var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount);
|
||||||
var fillColor = GetColorByName(colorName, contract.WorkshopCount, contract.IsContractingPartyBlock);
|
|
||||||
|
|
||||||
for (int j = 0; j < maxRows; j++)
|
for (int j = 0; j < maxRows; j++)
|
||||||
{
|
{
|
||||||
int currentRow = row + j;
|
int currentRow = row + j;
|
||||||
|
|
||||||
worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null;
|
// پر کردن ستونهای employer و workshop
|
||||||
worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null;
|
var employerColIndex = GetColumnIndexForType(ExcelColumnType.EmployerName, visibleColumnIndices);
|
||||||
|
var workshopColIndex = GetColumnIndexForType(ExcelColumnType.WorkshopName, visibleColumnIndices);
|
||||||
|
|
||||||
for (int col = 1; col <= 11; col++)
|
if (employerColIndex > 0)
|
||||||
|
worksheet.Cells[currentRow, employerColIndex].Value = j < employers.Count ? employers[j] : null;
|
||||||
|
|
||||||
|
if (workshopColIndex > 0)
|
||||||
|
worksheet.Cells[currentRow, workshopColIndex].Value = j < workshops.Count ? workshops[j] : null;
|
||||||
|
|
||||||
|
for (int col = 1; col <= columnCount; col++)
|
||||||
{
|
{
|
||||||
var cell = worksheet.Cells[currentRow, col];
|
var cell = worksheet.Cells[currentRow, col];
|
||||||
|
|
||||||
@@ -154,109 +202,235 @@ public class InstitutionContractExcelGenerator
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 🧱 مرج و مقداردهی ستونهای اصلی
|
// 🧱 مرج و مقداردهی ستونهای اصلی
|
||||||
worksheet.Cells[startRow, 1, endRow, 1].Merge = true;
|
FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices);
|
||||||
worksheet.Cells[startRow, 1].Value = contract.ContractNo;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 2, endRow, 2].Merge = true;
|
|
||||||
worksheet.Cells[startRow, 2].Value = contract.ContractingPartyName;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 3, endRow, 3].Merge = true;
|
|
||||||
worksheet.Cells[startRow, 3].Value = contract.ArchiveCode;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 6, endRow, 6].Merge = true;
|
|
||||||
worksheet.Cells[startRow, 6].Value = contract.EmployeeCount;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 7, endRow, 7].Merge = true;
|
|
||||||
worksheet.Cells[startRow, 7].Value = contract.ContractStartFa;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 8, endRow, 8].Merge = true;
|
|
||||||
worksheet.Cells[startRow, 8].Value = contract.ContractEndFa;
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 9, endRow, 9].Merge = true;
|
|
||||||
var contractWithoutWorkshopAmountCell = worksheet.Cells[startRow, 9];
|
|
||||||
contractWithoutWorkshopAmountCell.Value = contract.WorkshopCount == "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
|
||||||
contractWithoutWorkshopAmountCell.Style.Numberformat.Format = "#,##0";
|
|
||||||
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 10, endRow, 10].Merge = true;
|
|
||||||
var contractAmountCell = worksheet.Cells[startRow, 10];
|
|
||||||
contractAmountCell.Value = contract.WorkshopCount != "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
|
||||||
contractAmountCell.Style.Numberformat.Format = "#,##0";
|
|
||||||
|
|
||||||
|
|
||||||
worksheet.Cells[startRow, 11, endRow, 11].Merge = true;
|
|
||||||
var balance = MoneyToDouble(contract.BalanceStr);
|
|
||||||
var balanceCell = worksheet.Cells[startRow, 11];
|
|
||||||
balanceCell.Value = balance;
|
|
||||||
balanceCell.Style.Numberformat.Format = "#,##0";
|
|
||||||
|
|
||||||
if (balance > 0)
|
|
||||||
balanceCell.Style.Font.Color.SetColor(Color.Red);
|
|
||||||
else if (balance < 0)
|
|
||||||
balanceCell.Style.Font.Color.SetColor(Color.Green);
|
|
||||||
|
|
||||||
// 📦 بوردر ضخیم خارجی برای هر سطر
|
// 📦 بوردر ضخیم خارجی برای هر سطر
|
||||||
var boldRange = worksheet.Cells[startRow, 1, endRow, 11];
|
var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount];
|
||||||
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
|
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
|
||||||
|
|
||||||
row += maxRows;
|
row += maxRows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SetupPrintSettings(worksheet, visibleColumnIndices, columnCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت فهرست ستونهای مرئی بر اساس کانفیگ
|
||||||
|
/// </summary>
|
||||||
|
private static List<ExcelColumnType> GetVisibleColumnIndices()
|
||||||
|
{
|
||||||
|
return _columnConfig.VisibleColumns;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت شماره ستون برای یک نوع ستون خاص
|
||||||
|
/// </summary>
|
||||||
|
private static int GetColumnIndexForType(ExcelColumnType columnType, List<ExcelColumnType> visibleColumns)
|
||||||
|
{
|
||||||
|
var index = visibleColumns.IndexOf(columnType);
|
||||||
|
return index >= 0 ? index + 1 : 0; // 1-based indexing
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت متن header برای یک نوع ستون
|
||||||
|
/// </summary>
|
||||||
|
private static string GetColumnHeader(ExcelColumnType columnType)
|
||||||
|
{
|
||||||
|
return columnType switch
|
||||||
|
{
|
||||||
|
ExcelColumnType.RowNumber => "ردیف",
|
||||||
|
ExcelColumnType.PhysicalContract => "قرارداد فیزیکی",
|
||||||
|
ExcelColumnType.ContractNo => "شماره قرارداد",
|
||||||
|
ExcelColumnType.Representative => "معرف",
|
||||||
|
ExcelColumnType.ContractingPartyName => "طرف حساب",
|
||||||
|
ExcelColumnType.ArchiveCode => "شماره کارفرما",
|
||||||
|
ExcelColumnType.EmployerName => "کارفرما",
|
||||||
|
ExcelColumnType.WorkshopName => "کارگاهها",
|
||||||
|
ExcelColumnType.WorkshopCount => "تعداد کارگاه",
|
||||||
|
ExcelColumnType.EmployeeCount => "مجموع پرسنل",
|
||||||
|
ExcelColumnType.ContractStartDate => "شروع قرارداد",
|
||||||
|
ExcelColumnType.ContractEndDate => "پایان قرارداد",
|
||||||
|
ExcelColumnType.InstallmentAmount => "مبلغ قسط",
|
||||||
|
ExcelColumnType.ContractAmount => "مبلغ قرارداد",
|
||||||
|
ExcelColumnType.FinancialStatus => "وضعیت مالی",
|
||||||
|
_ => ""
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تنظیم Headerهای ستونها
|
||||||
|
/// </summary>
|
||||||
|
private static void SetupHeaders(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < visibleColumns.Count; i++)
|
||||||
|
{
|
||||||
|
worksheet.Cells[1, i + 1].Value = GetColumnHeader(visibleColumns[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پر کردن دادههای ستونها برای یک قرارداد
|
||||||
|
/// </summary>
|
||||||
|
private static void FillColumnData(ExcelWorksheet worksheet, GetInstitutionContractListItemsViewModel contract, int startRow, int endRow, List<ExcelColumnType> visibleColumns)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < visibleColumns.Count; i++)
|
||||||
|
{
|
||||||
|
int columnIndex = i + 1; // 1-based indexing
|
||||||
|
var columnType = visibleColumns[i];
|
||||||
|
|
||||||
|
// Merge cells for non-repeating columns
|
||||||
|
worksheet.Cells[startRow, columnIndex, endRow, columnIndex].Merge = true;
|
||||||
|
|
||||||
|
var cell = worksheet.Cells[startRow, columnIndex];
|
||||||
|
|
||||||
|
switch (columnType)
|
||||||
|
{
|
||||||
|
case ExcelColumnType.PhysicalContract:
|
||||||
|
var physicalText = contract.IsOldContract
|
||||||
|
? (contract.HasSigniture ? "موجود" : "ناموجود")
|
||||||
|
: (contract.IsInPersonContract ? "الکترونیکی حضوری" : "الکترونیکی غیر حضوری");
|
||||||
|
|
||||||
|
cell.Value = physicalText;
|
||||||
|
cell.Style.Font.Bold = true;
|
||||||
|
cell.Style.Font.Color.SetColor(physicalText switch
|
||||||
|
{
|
||||||
|
"موجود" => Color.Green,
|
||||||
|
"ناموجود" => Color.Red,
|
||||||
|
"الکترونیکی حضوری" => Color.Purple,
|
||||||
|
_ => Color.Blue
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ContractNo:
|
||||||
|
cell.Value = contract.ContractNo;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.Representative:
|
||||||
|
cell.Value = contract.RepresentativeName;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ContractingPartyName:
|
||||||
|
cell.Value = contract.ContractingPartyName;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ArchiveCode:
|
||||||
|
cell.Value = contract.ArchiveNo;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.EmployerName:
|
||||||
|
// این ستون چندخطی است و داخل loop پر میشود
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.WorkshopName:
|
||||||
|
// این ستون چندخطی است و داخل loop پر میشود
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.WorkshopCount:
|
||||||
|
cell.Value = contract.WorkshopsCount;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.EmployeeCount:
|
||||||
|
cell.Value = contract.EmployeesCount;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ContractStartDate:
|
||||||
|
cell.Value = contract.ContractStartFa;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ContractEndDate:
|
||||||
|
cell.Value = contract.ContractEndFa;
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.InstallmentAmount:
|
||||||
|
cell.Value = contract.InstallmentAmount;
|
||||||
|
cell.Style.Numberformat.Format = "#,##0";
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.ContractAmount:
|
||||||
|
cell.Value = contract.ContractAmount;
|
||||||
|
cell.Style.Numberformat.Format = "#,##0";
|
||||||
|
break;
|
||||||
|
case ExcelColumnType.FinancialStatus:
|
||||||
|
cell.Value = contract.Balance;
|
||||||
|
cell.Style.Numberformat.Format = "#,##0";
|
||||||
|
|
||||||
|
if (contract.Balance > 0)
|
||||||
|
cell.Style.Font.Color.SetColor(Color.Red);
|
||||||
|
else if (contract.Balance < 0)
|
||||||
|
cell.Style.Font.Color.SetColor(Color.Green);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تنظیم تنظیمات چاپ و عرض ستونها
|
||||||
|
/// </summary>
|
||||||
|
private static void SetupPrintSettings(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
|
||||||
|
{
|
||||||
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
|
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
|
||||||
worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
|
worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
|
||||||
worksheet.PrinterSettings.FitToPage = true;
|
worksheet.PrinterSettings.FitToPage = true;
|
||||||
worksheet.PrinterSettings.FitToWidth = 1;
|
worksheet.PrinterSettings.FitToWidth = 1;
|
||||||
worksheet.PrinterSettings.FitToHeight = 0;
|
worksheet.PrinterSettings.FitToHeight = 0;
|
||||||
worksheet.PrinterSettings.Scale = 85;
|
worksheet.PrinterSettings.Scale = 85;
|
||||||
int contractNoCol = 1;
|
|
||||||
int contractingPartyNameCol = 2;
|
// تنظیم عرض ستونها بر اساس نوع ستون
|
||||||
int archiveNoCol = 3;
|
for (int i = 0; i < visibleColumns.Count; i++)
|
||||||
int employersCol = 4;
|
{
|
||||||
int workshopsCol = 5;
|
int columnIndex = i + 1;
|
||||||
int employeeCountCol = 6;
|
worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]);
|
||||||
int startContractCol = 7;
|
}
|
||||||
int endContractCol = 8;
|
|
||||||
int contractWithoutWorkshopAmountCol = 9;
|
|
||||||
int contractAmountCol = 10;
|
|
||||||
int balanceCol = 11;
|
|
||||||
worksheet.Columns[contractNoCol].Width = 17;
|
|
||||||
worksheet.Columns[contractingPartyNameCol].Width = 40;
|
|
||||||
worksheet.Columns[archiveNoCol].Width = 10;
|
|
||||||
worksheet.Columns[employersCol].Width = 40;
|
|
||||||
worksheet.Columns[workshopsCol].Width = 45;
|
|
||||||
worksheet.Columns[employeeCountCol].Width = 12;
|
|
||||||
worksheet.Columns[startContractCol].Width = 12;
|
|
||||||
worksheet.Columns[endContractCol].Width = 12;
|
|
||||||
worksheet.Columns[contractWithoutWorkshopAmountCol].Width = 18;
|
|
||||||
worksheet.Columns[contractAmountCol].Width = 12;
|
|
||||||
worksheet.Columns[balanceCol].Width = 12;
|
|
||||||
worksheet.View.RightToLeft = true; // فارسی
|
worksheet.View.RightToLeft = true; // فارسی
|
||||||
//worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت عرض ستون پیشفرض برای هر نوع ستون
|
||||||
|
/// </summary>
|
||||||
|
private static double GetColumnWidth(ExcelColumnType columnType)
|
||||||
|
{
|
||||||
|
return columnType switch
|
||||||
|
{
|
||||||
|
ExcelColumnType.RowNumber => 8,
|
||||||
|
ExcelColumnType.PhysicalContract => 15,
|
||||||
|
ExcelColumnType.ContractNo => 17,
|
||||||
|
ExcelColumnType.Representative => 15,
|
||||||
|
ExcelColumnType.ContractingPartyName => 40,
|
||||||
|
ExcelColumnType.ArchiveCode => 10,
|
||||||
|
ExcelColumnType.EmployerName => 40,
|
||||||
|
ExcelColumnType.WorkshopName => 45,
|
||||||
|
ExcelColumnType.WorkshopCount => 12,
|
||||||
|
ExcelColumnType.EmployeeCount => 12,
|
||||||
|
ExcelColumnType.ContractStartDate => 12,
|
||||||
|
ExcelColumnType.ContractEndDate => 12,
|
||||||
|
ExcelColumnType.InstallmentAmount => 15,
|
||||||
|
ExcelColumnType.ContractAmount => 15,
|
||||||
|
ExcelColumnType.FinancialStatus => 12,
|
||||||
|
_ => 12
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double MoneyToDouble(string value)
|
private static double MoneyToDouble(string value)
|
||||||
{
|
{
|
||||||
Console.WriteLine(value);
|
if (string.IsNullOrEmpty(value))
|
||||||
|
return 0;
|
||||||
|
|
||||||
var min = value.Length > 1 ? value.Substring(0, 2) : "";
|
var min = value.Length > 1 ? value.Substring(0, 2) : "";
|
||||||
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
|
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
|
||||||
|
|
||||||
Console.WriteLine(test);
|
|
||||||
return test;
|
return test;
|
||||||
}
|
}
|
||||||
private static Color GetColorByName(string name, string workshopCount, string IsContractingPartyBlock)
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت رنگ بر اساس وضعیت قرارداد
|
||||||
|
/// </summary>
|
||||||
|
private static Color GetColorByStatus(InstitutionContractListStatus status, int workshopsCount)
|
||||||
{
|
{
|
||||||
return name switch
|
return status switch
|
||||||
{
|
{
|
||||||
"blue" => Color.LightBlue,
|
InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue,
|
||||||
_ when IsContractingPartyBlock == "true" => Color.LightGray,
|
InstitutionContractListStatus.Deactive => Color.LightGray,
|
||||||
"red" => Color.LightCoral,
|
InstitutionContractListStatus.PendingForRenewal => Color.LightCoral,
|
||||||
"purple" => Color.MediumPurple,
|
InstitutionContractListStatus.Free => Color.MediumPurple,
|
||||||
"black" => Color.DimGray,
|
InstitutionContractListStatus.Block => Color.DimGray,
|
||||||
var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow,
|
InstitutionContractListStatus.WithoutWorkshop => Color.Yellow,
|
||||||
|
InstitutionContractListStatus.Active => Color.White,
|
||||||
_ => Color.White
|
_ => Color.White
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractExcelViewModel
|
||||||
|
{
|
||||||
|
public InstitutionContractListStatus? Tab { get; set; }
|
||||||
|
public List<GetInstitutionContractListItemsViewModel> GetInstitutionContractListItemsViewModels { get; set; }
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Company.Domain.InstitutionContractSendFlagAgg;
|
||||||
|
using MongoDB.Driver;
|
||||||
|
|
||||||
|
namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Repository برای مدیریت فلگ ارسال قرارداد در MongoDB
|
||||||
|
/// </summary>
|
||||||
|
public class InstitutionContractSendFlagRepository : IInstitutionContractSendFlagRepository
|
||||||
|
{
|
||||||
|
private readonly IMongoCollection<InstitutionContractSendFlag> _collection;
|
||||||
|
|
||||||
|
public InstitutionContractSendFlagRepository(IMongoDatabase database)
|
||||||
|
{
|
||||||
|
_collection = database.GetCollection<InstitutionContractSendFlag>("InstitutionContractSendFlag");
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task Create(InstitutionContractSendFlag flag)
|
||||||
|
{
|
||||||
|
await _collection.InsertOneAsync(flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<InstitutionContractSendFlag> GetByContractId(long contractId)
|
||||||
|
{
|
||||||
|
var filter = Builders<InstitutionContractSendFlag>.Filter
|
||||||
|
.Eq(x => x.InstitutionContractId, contractId);
|
||||||
|
|
||||||
|
return await _collection.Find(filter).FirstOrDefaultAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task Update(InstitutionContractSendFlag flag)
|
||||||
|
{
|
||||||
|
var filter = Builders<InstitutionContractSendFlag>.Filter
|
||||||
|
.Eq(x => x.InstitutionContractId, flag.InstitutionContractId);
|
||||||
|
|
||||||
|
await _collection.ReplaceOneAsync(filter, flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> IsContractSent(long contractId)
|
||||||
|
{
|
||||||
|
var flag = await GetByContractId(contractId);
|
||||||
|
return flag != null && flag.IsSent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task Remove(long contractId)
|
||||||
|
{
|
||||||
|
var filter = Builders<InstitutionContractSendFlag>.Filter
|
||||||
|
.Eq(x => x.InstitutionContractId, contractId);
|
||||||
|
|
||||||
|
await _collection.DeleteOneAsync(filter);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using Company.Application.Contracts.AuthorizedBankDetails;
|
using Company.Application.Contracts.AuthorizedBankDetails;
|
||||||
|
|
||||||
namespace Company.Application.Contracts.AuthorizedBankDetails
|
namespace CompanyManagment.App.Contracts.AuthorizedBankDetails
|
||||||
{
|
{
|
||||||
public interface IAuthorizedBankDetailsApplication
|
public interface IAuthorizedBankDetailsApplication
|
||||||
{
|
{
|
||||||
|
|||||||
92
CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs
Normal file
92
CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
|
||||||
|
public class CheckoutDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی فیش
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره قراداد
|
||||||
|
/// </summary>
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع فیش
|
||||||
|
/// </summary>
|
||||||
|
public string ContractStart { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان فیش
|
||||||
|
/// </summary>
|
||||||
|
public string ContractEnd { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه
|
||||||
|
/// </summary>
|
||||||
|
public string Month { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال
|
||||||
|
/// </summary>
|
||||||
|
public string Year { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// روزهای کارکرد
|
||||||
|
/// </summary>
|
||||||
|
public string SumOfWorkingDays { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string ArchiveCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد پرسنلی
|
||||||
|
/// </summary>
|
||||||
|
public string PersonnelCode { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// فعال/غیرفعال
|
||||||
|
/// </summary>
|
||||||
|
public bool IsActive { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// امضاء فیش
|
||||||
|
/// </summary>
|
||||||
|
public bool Signature { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public string EmployerName { get; set; }
|
||||||
|
public bool IsBlockCantracingParty { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// آیا فیش نیاز به بروزرسانی دارد
|
||||||
|
/// </summary>
|
||||||
|
public bool IsUpdateNeeded { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// لیست پیام های هشدار فیش حقوقی
|
||||||
|
/// </summary>
|
||||||
|
public List<CheckoutWarningMessageModel> CheckoutWarningMessageList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نیاز به امزا دارد یا خیر
|
||||||
|
/// </summary>
|
||||||
|
public bool HasSignCheckoutOption { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
247
CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs
Normal file
247
CompanyManagment.App.Contracts/Checkout/Dto/CheckoutPrintDto.cs
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
using System;
|
||||||
|
using CompanyManagment.App.Contracts.Loan;
|
||||||
|
using CompanyManagment.App.Contracts.RollCall;
|
||||||
|
using CompanyManagment.App.Contracts.SalaryAid;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
|
||||||
|
public class CheckoutPrintDto
|
||||||
|
{
|
||||||
|
// هدر فیش
|
||||||
|
// اطلاعات هویتی
|
||||||
|
// اطلاعات کارگاه
|
||||||
|
#region Header
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پدر
|
||||||
|
/// </summary>
|
||||||
|
public string FathersName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ تولد
|
||||||
|
/// </summary>
|
||||||
|
public string DateOfBirth { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره قراداد
|
||||||
|
/// </summary>
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه
|
||||||
|
/// </summary>
|
||||||
|
public string Month { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال
|
||||||
|
/// </summary>
|
||||||
|
public string Year { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public List<CheckoutEmployersList> EmployersLists { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا کارقرما حقوقی است
|
||||||
|
/// </summary>
|
||||||
|
public bool EmployerIslegal { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا ترک کار کرده
|
||||||
|
/// </summary>
|
||||||
|
public bool HasLeft { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آخرین روز کاری
|
||||||
|
/// </summary>
|
||||||
|
public string LastDayOfWork { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// روز ترک کار
|
||||||
|
/// </summary>
|
||||||
|
public string LeftWorkDate { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//جدول مطالبات و کسورات
|
||||||
|
#region PaymentAndDeductionTable
|
||||||
|
/// <summary>
|
||||||
|
/// مطالبات
|
||||||
|
/// </summary>
|
||||||
|
public List<PaymentAndDeductionList> PaymentList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کسورات
|
||||||
|
/// </summary>
|
||||||
|
public List<PaymentAndDeductionList> DeductionList { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// جمع مطالبات
|
||||||
|
/// </summary>
|
||||||
|
public string TotalPayment { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// جمع کسورات
|
||||||
|
/// </summary>
|
||||||
|
public string TotalDeductions { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ قابل پرداخت
|
||||||
|
/// </summary>
|
||||||
|
public string TotalClaims { get; set; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//لیست ورود و خروج پرسنل
|
||||||
|
//اطلاعات ساعات کار و موظقی
|
||||||
|
#region RollCallData
|
||||||
|
/// <summary>
|
||||||
|
/// لیست حضورغیاب
|
||||||
|
/// </summary>
|
||||||
|
public List<CheckoutPrintRollCallDto> MonthlyRollCall { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دیتای جدول حضورغیاب
|
||||||
|
/// </summary>
|
||||||
|
public CheckoutRollCallViewModel CheckoutRollCall { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//اقساط - مساعده
|
||||||
|
#region SalaryAidAndInstallmentData
|
||||||
|
|
||||||
|
public List<CheckoutPrintInstallmentDto> Installments { get; set; }
|
||||||
|
public List<CheckoutPrintSalaryAidDto> SalaryAids { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کسورات
|
||||||
|
/// </summary>
|
||||||
|
public class PaymentData
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// حقوق و مزد
|
||||||
|
/// </summary>
|
||||||
|
public string MonthlySalary { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پایه سنوات
|
||||||
|
/// </summary>
|
||||||
|
public string BaseYearsPay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کمک هزینه اقلام مصرفی
|
||||||
|
/// </summary>
|
||||||
|
public string ConsumableItems { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کمک هزینه مسکن
|
||||||
|
/// </summary>
|
||||||
|
public string HousingAllowance { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فوق العاده اضافه کاری
|
||||||
|
/// </summary>
|
||||||
|
public string OvertimePay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فوق العاده شبکاری
|
||||||
|
/// </summary>
|
||||||
|
public string NightworkPay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فوق العاده جمعه کاری
|
||||||
|
/// </summary>
|
||||||
|
public string FridayPay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فوق العاده ماموریت
|
||||||
|
/// </summary>
|
||||||
|
public string MissionPay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فوق العاده نوبت کاری
|
||||||
|
/// </summary>
|
||||||
|
public string ShiftPay { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کمک هزینه عائله مندی
|
||||||
|
/// </summary>
|
||||||
|
public string FamilyAllowance { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// حق تاهل
|
||||||
|
/// </summary>
|
||||||
|
public string MarriedAllowance { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کسورات
|
||||||
|
/// </summary>
|
||||||
|
public class DeductionData
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class PaymentAndDeductionList
|
||||||
|
{
|
||||||
|
public int RowNumber { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// عنوان
|
||||||
|
/// </summary>
|
||||||
|
public string Title { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مقدار/روز/ساعت
|
||||||
|
/// </summary>
|
||||||
|
public string Value { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ
|
||||||
|
/// </summary>
|
||||||
|
public string Amount { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public class CheckoutEmployersList
|
||||||
|
{
|
||||||
|
public string IsLegal { get; set; }
|
||||||
|
public string EmployerFullName { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public class CheckoutGetData : CheckoutPrintDto
|
||||||
|
{
|
||||||
|
public DateTime ContractStart { get; set; }
|
||||||
|
|
||||||
|
public int PersonnelCode { get; set; }
|
||||||
|
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
|
||||||
|
public class CheckoutSearchModelDto : PaginationRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع فیش
|
||||||
|
/// </summary>
|
||||||
|
public string ContractStart { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پاین فیش
|
||||||
|
/// </summary>
|
||||||
|
public string ContractEnd { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه
|
||||||
|
/// </summary>
|
||||||
|
public string Month { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال
|
||||||
|
/// </summary>
|
||||||
|
public string Year { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی گارفرما
|
||||||
|
/// </summary>
|
||||||
|
public long EmployerId { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
|
||||||
|
public class EmployeeSelectListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
|
||||||
|
public class RotatingShiftOfCheckoutDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// نام پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string FullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت نوبتکاری
|
||||||
|
/// </summary>
|
||||||
|
public string RotatingShiftStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا نوبت کاری دارد
|
||||||
|
/// </summary>
|
||||||
|
public bool HasRotatingShift { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال و ماه
|
||||||
|
/// </summary>
|
||||||
|
public string YearAndMonth { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع ساعت کاری
|
||||||
|
/// </summary>
|
||||||
|
public string TypeOfWorkingHours { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست نوبت کاری
|
||||||
|
/// </summary>
|
||||||
|
public List<RotatingShiftListDto> RotatingShiftList { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class RotatingShiftListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// بازه کاری صبح
|
||||||
|
/// </summary>
|
||||||
|
public string MorningShiftSpan { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بازه کاری عصر
|
||||||
|
/// </summary>
|
||||||
|
public string EveningShiftSpan { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بازه کاری شب
|
||||||
|
/// </summary>
|
||||||
|
public string NightShiftSpan { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا صبح کاری داشته
|
||||||
|
/// </summary>
|
||||||
|
public bool IsMorningShift { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا عصرکاری داشته
|
||||||
|
/// </summary>
|
||||||
|
public bool IsEveningShift { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا شبکاری داشته
|
||||||
|
/// </summary>
|
||||||
|
public bool IsNightShift { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شیفت
|
||||||
|
/// </summary>
|
||||||
|
public string ShiftDate { get; set; }
|
||||||
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
|
using CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.Checkout;
|
namespace CompanyManagment.App.Contracts.Checkout;
|
||||||
|
|
||||||
@@ -62,4 +63,49 @@ public interface ICheckoutApplication
|
|||||||
long workshopId, DateTime start, DateTime end);
|
long workshopId, DateTime start, DateTime end);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت سلکت لیست پرسنل کارگاه
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<EmployeeSelectListDto>> GetEmployeeSelectListByWorkshopId(long id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست فیش های حقوقی ادمین
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PagedResult<CheckoutDto>> GetList(CheckoutSearchModelDto searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت نوبتکاری
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<RotatingShiftOfCheckoutDto> GetRotatingShiftApi(long id);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت فیش حقوقی
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<CheckoutPrintDto>> CheckoutPrint(List<long> ids);
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CheckoutPrintInstallmentDto
|
||||||
|
{
|
||||||
|
public string RemainingAmount { get; set; }
|
||||||
|
public string LoanAmount { get; set; }
|
||||||
|
public string Amount { get; set; }
|
||||||
|
}
|
||||||
|
public class CheckoutPrintSalaryAidDto
|
||||||
|
{
|
||||||
|
public string Amount { get; set; }
|
||||||
|
public string SalaryAidDateTimeFa { get; set; }
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net10.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||||
|
<NoWarn>$(NoWarn);1591</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Contract;
|
||||||
|
|
||||||
|
public enum ContractListOrderType
|
||||||
|
{
|
||||||
|
ByContractCreationDate,
|
||||||
|
BySignedContract,
|
||||||
|
ByUnSignedContract,
|
||||||
|
ByPersonnelCode,
|
||||||
|
ByPersonnelCodeDescending,
|
||||||
|
ByContractStartDate,
|
||||||
|
ByContractStartDateDescending
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Contract;
|
||||||
|
|
||||||
|
public class GetContractListForClientRequest: PaginationRequest
|
||||||
|
{
|
||||||
|
public int Year { get; set; }
|
||||||
|
public int Month { get; set; }
|
||||||
|
public string StartDate { get; set; }
|
||||||
|
public string EndDate { get; set; }
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
public ContractListOrderType? OrderType { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Contract;
|
||||||
|
|
||||||
|
public class GetContractListForClientResponse
|
||||||
|
{
|
||||||
|
public long Id { get; set; }
|
||||||
|
public string PersonnelCode { get; set; }
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
public string ContractStart { get; set; }
|
||||||
|
public string ContractEnd { get; set; }
|
||||||
|
public bool IsSigned { get; set; }
|
||||||
|
public string DailyWage { get; set; }
|
||||||
|
public string AvgWorkingHour { get; set; }
|
||||||
|
public string FamilyAllowance { get; set; }
|
||||||
|
}
|
||||||
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using CompanyManagment.App.Contracts.Workshop;
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using _0_Framework.Application.Enums;
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.Contract;
|
namespace CompanyManagment.App.Contracts.Contract;
|
||||||
|
|
||||||
public interface IContractApplication
|
public interface IContractApplication
|
||||||
@@ -45,16 +47,101 @@ public interface IContractApplication
|
|||||||
#region Client
|
#region Client
|
||||||
|
|
||||||
OperationResult Remove(long id);
|
OperationResult Remove(long id);
|
||||||
|
|
||||||
|
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
|
||||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||||
#endregion
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست قراردادها برای کلاینت
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PagedResult<GetContractListForClientResponse>>
|
||||||
|
GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||||
|
Task<ContractPrintViewModel> PrintOneAsync(long id);
|
||||||
|
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||||
|
|
||||||
#region NewChangeByHeydari
|
#endregion
|
||||||
|
|
||||||
OperationResult DeleteAllContarcts(List<long> ids);
|
#region NewChangeByHeydari
|
||||||
|
|
||||||
|
OperationResult DeleteAllContarcts(List<long> ids);
|
||||||
OperationResult DeleteContarcts(long id);
|
OperationResult DeleteContarcts(long id);
|
||||||
List<long> CheckHasCheckout(List<long> ids);
|
List<long> CheckHasCheckout(List<long> ids);
|
||||||
List<long> CheckHasSignature(List<long> ids);
|
List<long> CheckHasSignature(List<long> ids);
|
||||||
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
|
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintViewModel
|
||||||
|
{
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
public ContractPrintEmployerViewModel Employer { get; set; }
|
||||||
|
public ContractPrintEmployeeViewModel Employee { get; set; }
|
||||||
|
public ContractPrintTypeOfContractViewModel TypeOfContract { get; set; }
|
||||||
|
public ContractPrintFeesViewModel Fees { get; set; }
|
||||||
|
public string ConditionAndDetials { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintFeesViewModel
|
||||||
|
{
|
||||||
|
public string DailyWage { get; set; }
|
||||||
|
public string FamilyAllowance { get; set; }
|
||||||
|
public string ConsumableItems { get; set; }
|
||||||
|
public string HousingAllowance { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintTypeOfContractViewModel
|
||||||
|
{
|
||||||
|
public string ContractType { get; set; }
|
||||||
|
public string JobName { get; set; }
|
||||||
|
public string SetContractDate { get; set; }
|
||||||
|
public string ContarctStart { get; set; }
|
||||||
|
public string ContractEnd { get; set; }
|
||||||
|
public string WorkingHoursWeekly { get; set; }
|
||||||
|
public List<string> WorkshopAddress { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintEmployeeViewModel
|
||||||
|
{
|
||||||
|
public string FullName { get; set; }
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
public string DateOfBirth { get; set; }
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
public string LevelOfEducation { get; set; }
|
||||||
|
public string Address { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintEmployerViewModel
|
||||||
|
{
|
||||||
|
public LegalType LegalType { get; set; }
|
||||||
|
public ContractPrintRealEmployerViewModel RealEmployer { get; set; }
|
||||||
|
public ContractPrintLegalEmployerViewModel LegalEmployer { get; set; }
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
public string Address { get; set; }
|
||||||
|
public string WorkshopCode { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintLegalEmployerViewModel
|
||||||
|
{
|
||||||
|
public string CompanyName { get; set; }
|
||||||
|
public string NationalId { get; set; }
|
||||||
|
public string RegisterId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ContractPrintRealEmployerViewModel
|
||||||
|
{
|
||||||
|
public string FullName { get; set; }
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
public string IdNumber { get; set; }
|
||||||
}
|
}
|
||||||
@@ -94,7 +94,42 @@ public interface IEmployeeApplication
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
Task<List<GetEmployeeListViewModel>> GetList(GetEmployeeListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست کل پرسنل کلاینت
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetClientEmployeeListSearchModel
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public class GetClientEmployeeListViewModel
|
||||||
|
{
|
||||||
|
public string FullName { get; set; }
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
public long PersonnelCode { get; set; }
|
||||||
|
public string MaritalStatus { get; set; }
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
public string IdNumber { get; set; }
|
||||||
|
public string DateOfBirthFa { get; set; }
|
||||||
|
public string FatherName { get; set; }
|
||||||
|
public int ChildrenCount { get; set; }
|
||||||
|
public string LastStartInsuranceWork { get; set; }
|
||||||
|
public string LastLeftInsuranceWork { get; set; }
|
||||||
|
public string LastStartContractWork { get; set; }
|
||||||
|
public string LastLeftContractWork { get; set; }
|
||||||
|
public bool HasContractLeftWork { get; set; }
|
||||||
|
public bool HasInsuranceLeftWork { get; set; }
|
||||||
|
public bool LeftWorkCompletely { get; set; }
|
||||||
|
public bool PendingStartWork { get; set; }
|
||||||
|
public bool PendingLeftWork { get; set; }
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@ public class CreateFinancialInvoice
|
|||||||
public double Amount { get; set; }
|
public double Amount { get; set; }
|
||||||
public long ContractingPartyId { get; set; }
|
public long ContractingPartyId { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public List<CreateFinancialInvoiceItem>? Items { get; set; }
|
public List<CreateFinancialInvoiceItem> Items { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreateFinancialInvoiceItem
|
public class CreateFinancialInvoiceItem
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ public class EditFinancialInvoice
|
|||||||
public double Amount { get; set; }
|
public double Amount { get; set; }
|
||||||
public FinancialInvoiceStatus Status { get; set; }
|
public FinancialInvoiceStatus Status { get; set; }
|
||||||
|
|
||||||
public List<EditFinancialInvoiceItem>? Items { get; set; }
|
public List<EditFinancialInvoiceItem> Items { get; set; }
|
||||||
|
public long ContractingPartyId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class EditFinancialInvoiceItem
|
public class EditFinancialInvoiceItem
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.FinancialStatment;
|
namespace CompanyManagment.App.Contracts.FinancialStatment;
|
||||||
|
|
||||||
@@ -62,7 +63,17 @@ public interface IFinancialStatmentApplication
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,
|
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,
|
||||||
FinancialStatementSearchModel searchModel);
|
FinancialStatementSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پردازش شارژ حساب از طریق درگاه پرداخت سپهر
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <param name="gateWayCallBackUrl">مسیر برگشت درگاه پرداخت</param>
|
||||||
|
///
|
||||||
|
Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreatePaymentGateWayAndCreateInvoice(
|
||||||
|
CreateFinancialPayRequest request, string gateWayCallBackUrl);
|
||||||
}
|
}
|
||||||
|
public record CreateFinancialPayRequest(long Id, string BaseUrl);
|
||||||
|
|
||||||
public class FinancialStatmentDetailsByContractingPartyViewModel
|
public class FinancialStatmentDetailsByContractingPartyViewModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -91,6 +91,13 @@ 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 bool InstitutionContractIsSentFlag { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class InstitutionContractListWorkshop
|
public class InstitutionContractListWorkshop
|
||||||
|
|||||||
@@ -5,8 +5,10 @@ using System.Drawing;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
|
using _0_Framework.Application.Enums;
|
||||||
using _0_Framework.Application.Sms;
|
using _0_Framework.Application.Sms;
|
||||||
using CompanyManagment.App.Contracts.Checkout;
|
using CompanyManagment.App.Contracts.Checkout;
|
||||||
|
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||||
using CompanyManagment.App.Contracts.Workshop;
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||||
@@ -26,21 +28,21 @@ public interface IInstitutionContractApplication
|
|||||||
/// <param name="command">اطلاعات قرارداد جدید</param>
|
/// <param name="command">اطلاعات قرارداد جدید</param>
|
||||||
/// <returns>نتیجه عملیات</returns>
|
/// <returns>نتیجه عملیات</returns>
|
||||||
OperationResult Create(CreateInstitutionContract command);
|
OperationResult Create(CreateInstitutionContract command);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// تمدید قرارداد موجود
|
/// تمدید قرارداد موجود
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="command">اطلاعات قرارداد برای تمدید</param>
|
/// <param name="command">اطلاعات قرارداد برای تمدید</param>
|
||||||
/// <returns>نتیجه عملیات</returns>
|
/// <returns>نتیجه عملیات</returns>
|
||||||
OperationResult Extension(CreateInstitutionContract command);
|
OperationResult Extension(CreateInstitutionContract command);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ویرایش قرارداد موجود
|
/// ویرایش قرارداد موجود
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="command">اطلاعات جدید قرارداد</param>
|
/// <param name="command">اطلاعات جدید قرارداد</param>
|
||||||
/// <returns>نتیجه عملیات</returns>
|
/// <returns>نتیجه عملیات</returns>
|
||||||
OperationResult Edit(EditInstitutionContract command);
|
OperationResult Edit(EditInstitutionContract command);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// دریافت جزئیات قرارداد برای ویرایش
|
/// دریافت جزئیات قرارداد برای ویرایش
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -54,7 +56,7 @@ public interface IInstitutionContractApplication
|
|||||||
/// <param name="searchModel">مدل جستجو</param>
|
/// <param name="searchModel">مدل جستجو</param>
|
||||||
/// <returns>لیست قراردادها</returns>
|
/// <returns>لیست قراردادها</returns>
|
||||||
List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel);
|
List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// جستجوی جدید در قراردادها
|
/// جستجوی جدید در قراردادها
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -76,7 +78,7 @@ public interface IInstitutionContractApplication
|
|||||||
/// <param name="id">لیست شناسه قراردادها</param>
|
/// <param name="id">لیست شناسه قراردادها</param>
|
||||||
/// <returns>لیست قراردادها برای چاپ</returns>
|
/// <returns>لیست قراردادها برای چاپ</returns>
|
||||||
List<InstitutionContractViewModel> PrintAll(List<long> id);
|
List<InstitutionContractViewModel> PrintAll(List<long> id);
|
||||||
|
|
||||||
|
|
||||||
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
|
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -191,32 +193,56 @@ public interface IInstitutionContractApplication
|
|||||||
/// <param name="command"></param>
|
/// <param name="command"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
|
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
|
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
|
||||||
/// جهت نمایش در کارپوشه
|
/// جهت نمایش در کارپوشه
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
|
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// دریافت آیتم های کارپوشه ثبت نام
|
/// دریافت آیتم های کارپوشه ثبت نام
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="institutionContractId"></param>
|
/// <param name="institutionContractId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
|
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||||
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
||||||
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
||||||
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
||||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||||
|
|
||||||
|
#region Creation
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تب ایجاد قرارداد مؤسسه - احراز هویت
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تب ایجاد قرارداد مؤسسه -مشخصات طرف قرارداد و انتخاب کارگاه ها
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(
|
||||||
|
InstitutionContractCreationWorkshopsRequest request);
|
||||||
|
/// <summary>
|
||||||
|
/// تب ایجاد قرارداد مؤسسه - مالی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Extension
|
#region Extension
|
||||||
|
|
||||||
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
|
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
|
||||||
@@ -229,25 +255,31 @@ public interface IInstitutionContractApplication
|
|||||||
|
|
||||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
||||||
InstitutionContractExtensionPaymentRequest request);
|
InstitutionContractExtensionPaymentRequest request);
|
||||||
|
|
||||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||||
InstitutionContractSetDiscountForExtensionRequest request);
|
InstitutionContractSetDiscountForExtensionRequest request);
|
||||||
|
|
||||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||||
InstitutionContractResetDiscountForExtensionRequest request);
|
InstitutionContractResetDiscountForExtensionRequest request);
|
||||||
|
|
||||||
|
|
||||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
|
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Upgrade (Amendment)
|
#region Upgrade (Amendment)
|
||||||
|
|
||||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
|
||||||
|
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
|
||||||
|
InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||||
|
|
||||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
|
||||||
|
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
|
||||||
|
InsitutionContractAmendmentPaymentRequest request);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<OperationResult> ResendVerifyLink(long institutionContractId);
|
Task<OperationResult> ResendVerifyLink(long institutionContractId);
|
||||||
@@ -259,8 +291,9 @@ public interface IInstitutionContractApplication
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
||||||
|
|
||||||
Task<OperationResult> SetPendingWorkflow(long entityId,InstitutionContractSigningType signingType);
|
Task<OperationResult> SetPendingWorkflow(long entityId, InstitutionContractSigningType signingType);
|
||||||
Task<long> GetIdByInstallmentId(long installmentId);
|
Task<long> GetIdByInstallmentId(long installmentId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// تایید قرارداد مالی به صورت دستی
|
/// تایید قرارداد مالی به صورت دستی
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -268,4 +301,50 @@ public interface IInstitutionContractApplication
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId);
|
Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId);
|
||||||
|
|
||||||
|
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||||
|
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||||
|
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||||
|
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تعیین فلگ ارسال قرارداد در MongoDB
|
||||||
|
/// اگر فلگ وجود نداشتند ایجاد میکند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request">درخواست تعیین فلگ</param>
|
||||||
|
/// <returns>نتیجه عملیات</returns>
|
||||||
|
Task<OperationResult> SetContractSendFlag(SetInstitutionContractSendFlagRequest request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class CreationSetContractingPartyResponse
|
||||||
|
{
|
||||||
|
public long RepresentativeId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationWorkshopsResponse
|
||||||
|
{
|
||||||
|
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||||
|
public string TotalAmount { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationWorkshopsRequest
|
||||||
|
{
|
||||||
|
public Guid TempId { get; set; }
|
||||||
|
public string City { get; set; }
|
||||||
|
public string Province { get; set; }
|
||||||
|
public string Address { get; set; }
|
||||||
|
public List<EditContactInfo> ContactInfos { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقیقی
|
||||||
|
/// </summary>
|
||||||
|
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقوقی
|
||||||
|
/// </summary>
|
||||||
|
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
|
||||||
|
|
||||||
|
public LegalType LegalType { get; set; }
|
||||||
|
|
||||||
|
public long RepresentativeId { get; set; }
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
using _0_Framework.Application.Enums;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
|
public class InstitutionContractCreationInquiryRequest
|
||||||
|
{
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
public string DateOfBirth { get; set; }
|
||||||
|
public string Mobile { get; set; }
|
||||||
|
public LegalType LegalType { get; set; }
|
||||||
|
}
|
||||||
@@ -3,6 +3,13 @@ using System;
|
|||||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
public class InstitutionContractExtensionCompleteRequest
|
public class InstitutionContractExtensionCompleteRequest
|
||||||
|
{
|
||||||
|
public Guid TemporaryId { get; set; }
|
||||||
|
public bool IsInstallment { get; set; }
|
||||||
|
public long LawId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationCompleteRequest
|
||||||
{
|
{
|
||||||
public Guid TemporaryId { get; set; }
|
public Guid TemporaryId { get; set; }
|
||||||
public bool IsInstallment { get; set; }
|
public bool IsInstallment { get; set; }
|
||||||
|
|||||||
@@ -24,4 +24,21 @@ public class InstitutionContractExtensionInquiryResult
|
|||||||
public string Province { get; set; }
|
public string Province { get; set; }
|
||||||
public List<EditContactInfo> ContactInfoViewModels { get; set; }
|
public List<EditContactInfo> ContactInfoViewModels { get; set; }
|
||||||
public long RepresentativeId { get; set; }
|
public long RepresentativeId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationInquiryResult
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقیقی
|
||||||
|
/// </summary>
|
||||||
|
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اطلاعات شخص حقوقی
|
||||||
|
/// </summary>
|
||||||
|
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
|
||||||
|
|
||||||
|
public LegalType LegalType { get; set; }
|
||||||
|
|
||||||
|
public Guid TempId { get; set; }
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,11 @@ using System;
|
|||||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
public class InstitutionContractExtensionPaymentRequest
|
public class InstitutionContractExtensionPaymentRequest
|
||||||
|
{
|
||||||
|
public InstitutionContractDuration Duration { get; set; }
|
||||||
|
public Guid TempId { get; set; }
|
||||||
|
}
|
||||||
|
public class InstitutionContractCreationPaymentRequest
|
||||||
{
|
{
|
||||||
public InstitutionContractDuration Duration { get; set; }
|
public InstitutionContractDuration Duration { get; set; }
|
||||||
public Guid TempId { get; set; }
|
public Guid TempId { get; set; }
|
||||||
|
|||||||
@@ -5,4 +5,11 @@ public class InstitutionContractExtensionPaymentResponse
|
|||||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationPaymentResponse
|
||||||
|
{
|
||||||
|
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||||
|
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,13 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
|||||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
public class InstitutionContractExtensionPlanRequest
|
public class InstitutionContractExtensionPlanRequest
|
||||||
|
{
|
||||||
|
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||||
|
public string TotalAmount { get; set; }
|
||||||
|
public Guid TempId { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationPlanRequest
|
||||||
{
|
{
|
||||||
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||||
public string TotalAmount { get; set; }
|
public string TotalAmount { get; set; }
|
||||||
|
|||||||
@@ -7,7 +7,18 @@ public class InstitutionContractExtensionPlanResponse
|
|||||||
public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
|
public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
|
||||||
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
|
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
|
||||||
}
|
}
|
||||||
public class InstitutionContractExtensionPlanDetail
|
public class InstitutionContractExtensionPlanDetail:InstitutionContractCreationPlanDetail
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InstitutionContractCreationPlanResponse
|
||||||
|
{
|
||||||
|
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
|
||||||
|
public InstitutionContractCreationPlanDetail TwelveMonths { get; set; }
|
||||||
|
}
|
||||||
|
public class InstitutionContractCreationPlanDetail
|
||||||
{
|
{
|
||||||
public string ContractStart { get; set; }
|
public string ContractStart { get; set; }
|
||||||
public string ContractEnd { get; set; }
|
public string ContractEnd { get; set; }
|
||||||
|
|||||||
@@ -18,10 +18,20 @@ public class InstitutionContractPaymentOneTimeViewModel
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string PaymentAmount { get; set; }
|
public string PaymentAmount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مجموع مبالغ بدون تخفیف
|
||||||
|
/// </summary>
|
||||||
|
public string TotalAmountWithoutDiscount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ یک ماه بدون تخفیف
|
||||||
|
/// </summary>
|
||||||
|
public string OneMonthPaymentWithoutDiscount { get; set; }
|
||||||
|
|
||||||
public string DiscountedAmount { get; set; }
|
public string DiscountedAmount { get; set; }
|
||||||
public int DiscountPercetage { get; set; }
|
public int DiscountPercetage { get; set; }
|
||||||
}
|
}
|
||||||
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
|
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
|
||||||
{
|
{
|
||||||
public List<MonthlyInstallment> Installments { get; set; }
|
public List<MonthlyInstallment> Installments { get; set; } = [];
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,11 @@ using System;
|
|||||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
public class InstitutionContractResetDiscountForExtensionRequest
|
public class InstitutionContractResetDiscountForExtensionRequest
|
||||||
|
{
|
||||||
|
public Guid TempId { get; set; }
|
||||||
|
public bool IsInstallment { get; set; }
|
||||||
|
}
|
||||||
|
public class InstitutionContractResetCreationForExtensionRequest
|
||||||
{
|
{
|
||||||
public Guid TempId { get; set; }
|
public Guid TempId { get; set; }
|
||||||
public bool IsInstallment { get; set; }
|
public bool IsInstallment { get; set; }
|
||||||
|
|||||||
@@ -3,6 +3,13 @@ using System;
|
|||||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
public class InstitutionContractSetDiscountForExtensionRequest
|
public class InstitutionContractSetDiscountForExtensionRequest
|
||||||
|
{
|
||||||
|
public Guid TempId { get; set; }
|
||||||
|
public int DiscountPercentage { get; set; }
|
||||||
|
public double TotalAmount { get; set; }
|
||||||
|
public bool IsInstallment { get; set; }
|
||||||
|
}
|
||||||
|
public class InstitutionContractSetDiscountForCreationRequest
|
||||||
{
|
{
|
||||||
public Guid TempId { get; set; }
|
public Guid TempId { get; set; }
|
||||||
public int DiscountPercentage { get; set; }
|
public int DiscountPercentage { get; set; }
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// درخواست برای تعیین فلگ ارسال قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public class SetInstitutionContractSendFlagRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه قرارداد
|
||||||
|
/// </summary>
|
||||||
|
public long InstitutionContractId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا قرارداد ارسال شده است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsSent { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -94,4 +94,29 @@ public class BlockSmsListData
|
|||||||
/// آی دی صورت حساب مالی
|
/// آی دی صورت حساب مالی
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string AproveId { get; set; }
|
public string AproveId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا قرداد مالی قدیمی است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsElectronicContract { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پابلیک آی دی بخش یک
|
||||||
|
/// </summary>
|
||||||
|
public string Code1 { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پابلیک آی دی بخش دو
|
||||||
|
/// </summary>
|
||||||
|
public string Code2 { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست قراداد های آبی
|
||||||
|
/// جهت ارسال هشدار یا اقدام قضائی
|
||||||
|
/// </summary>
|
||||||
|
public class BlueWarningSmsData
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ namespace CompanyManagment.App.Contracts.InstitutionPlan;
|
|||||||
public class InstitutionPlanSearchModel : PaginationRequest
|
public class InstitutionPlanSearchModel : PaginationRequest
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// تعدلد پرسنل برای جستجو
|
/// تعداد پرسنل برای جستجو
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int CountPeron { get; set; }
|
public int CountPerson { get; set; }
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ using System.Text;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using CompanyManagment.App.Contracts.InsuranceList;
|
using CompanyManagment.App.Contracts.InsuranceList;
|
||||||
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
@@ -96,6 +97,94 @@ public interface IInsuranceListApplication
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
||||||
|
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public class InsuranceClientPrintViewModel
|
||||||
|
{
|
||||||
|
public string Month { get; set; }
|
||||||
|
public string Year { get; set; }
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
public string ListNo { get; set; }
|
||||||
|
public string AgreementNumber { get; set; }
|
||||||
|
public string WorkshopInsuranceCode { get; set; }
|
||||||
|
public string WorkshopEmployerName { get; set; }
|
||||||
|
public string WorkshopAddress { get; set; }
|
||||||
|
public List<InsuranceClientPrintItemsViewModel> Items { get; set; }
|
||||||
|
public string EmployerShare { get; set; }
|
||||||
|
public string InsuredShare { get; set; }
|
||||||
|
public string UnEmploymentInsurance { get; set; }
|
||||||
|
public string AllInsuredShare { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
public class InsuranceClientPrintItemsViewModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// شماره بیمه
|
||||||
|
/// </summary>
|
||||||
|
public string InsuranceCode { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// نام و نام خانوادگی
|
||||||
|
/// </summary>
|
||||||
|
public string FullName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// شغل
|
||||||
|
/// </summary>
|
||||||
|
public string JobName { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// کد ملی
|
||||||
|
/// </summary>
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// شروع به کار
|
||||||
|
/// </summary>
|
||||||
|
public string StartWork { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// ترک کار
|
||||||
|
/// </summary>
|
||||||
|
public string LeftWork { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// روزهای کارکرد
|
||||||
|
/// </summary>
|
||||||
|
public string WorkingDays { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// دستمزد روزانه
|
||||||
|
/// </summary>
|
||||||
|
public string DailyWage { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// پایه سنوات روزانه
|
||||||
|
/// </summary>
|
||||||
|
public string BaseYears { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// دستمزد ماهانه
|
||||||
|
/// </summary>
|
||||||
|
public string MonthlySalary { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// مزایای ماهیانه مشمول
|
||||||
|
/// </summary>
|
||||||
|
public string MonthlyBenefits { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// حق تاهل
|
||||||
|
/// </summary>
|
||||||
|
public string MarriedAllowance { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// حقوق و مزایای ماهیانه مشمول
|
||||||
|
/// </summary>
|
||||||
|
public string BenefitsIncludedContinuous { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// حقوق و مزایای ماهیانه غیر مشمول
|
||||||
|
/// </summary>
|
||||||
|
public string BenefitsIncludedNonContinuous { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// مجموع مزایای ماهیانه مشمول و غیر مشمول
|
||||||
|
/// </summary>
|
||||||
|
public string IncludedAndNotIncluded { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// حق بیمه سهم بیمه شده
|
||||||
|
/// </summary>
|
||||||
|
public string InsuranceShare { get; set; }
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class InsuranceClientSearchModel:PaginationRequest
|
public class InsuranceClientSearchModel:PaginationRequest
|
||||||
@@ -113,4 +202,11 @@ public class InsuranceClientListViewModel
|
|||||||
public int YearInt { get; set; }
|
public int YearInt { get; set; }
|
||||||
public string MonthName { get; set; }
|
public string MonthName { get; set; }
|
||||||
public int MonthInt { get; set; }
|
public int MonthInt { get; set; }
|
||||||
|
public int PersonnelCount { get; set; }
|
||||||
|
public int LeftWorkCount { get; set; }
|
||||||
|
public string AllInsuredShare { get; set; }
|
||||||
|
public string InsuredShare { get; set; }
|
||||||
|
public string EmployerShare { get; set; }
|
||||||
|
public string UnEmploymentInsurance { get; set; }
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class CheckIsInvalidLeaveDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آیا تعطیل است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsHoliday { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// فاقد/دارای اعتبار فیش غیر رسمی
|
||||||
|
/// </summary>
|
||||||
|
public bool CanCreateInvalid { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
78
CompanyManagment.App.Contracts/Leave/CreateLeaveDto.cs
Normal file
78
CompanyManagment.App.Contracts/Leave/CreateLeaveDto.cs
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class CreateLeaveDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "این مقدار نمی تواند خالی باشد")]
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مدت مرخص روزانه/ ساعتی
|
||||||
|
/// </summary>
|
||||||
|
public PaidLeaveType PaidLeaveType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مرخصی استحقاقی/استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
public LeaveType LeaveType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کامل کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ساعت شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string StartHoures { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ساعت پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string EndHours { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// موافقت / عدم موافقت کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAccepted { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// توضیحات
|
||||||
|
/// </summary>
|
||||||
|
public string Decription { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دارای اعتبار / فاقد اعتبار فیش غیررسمی
|
||||||
|
/// </summary>
|
||||||
|
public bool IsInvallid { get; set; }
|
||||||
|
public CustomizeRotatingShiftsViewModel SelectedShift { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
88
CompanyManagment.App.Contracts/Leave/GroupLeaveListDto.cs
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class GroupLeaveListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// سال مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string YearStr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string MonthStr { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// آیتم های هر گروه
|
||||||
|
/// </summary>
|
||||||
|
public List<LeaveListItemsDto> LeaveListItemsDto { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیتم های هر گروه
|
||||||
|
/// </summary>
|
||||||
|
public class LeaveListItemsDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// زمان مرخصی
|
||||||
|
/// بازه مرخصی ساعتی
|
||||||
|
/// </summary>
|
||||||
|
public string HourlyInterval { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مدت مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveDuration { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// موافقت/عدم موافقت کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAccepted { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی گارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||||
|
/// </summary>
|
||||||
|
public bool IsInvalid { get; set; }
|
||||||
|
}
|
||||||
@@ -19,6 +19,7 @@ public interface ILeaveApplication
|
|||||||
GroupLeavePrintViewModel PrintPersonnelLeaveList(List<long> id);
|
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);
|
||||||
|
|
||||||
@@ -36,5 +37,117 @@ public interface ILeaveApplication
|
|||||||
TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,
|
TimeSpan GetEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string startFa, string endFa,
|
||||||
string type);
|
string type);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست مرخصی ها در کلاینت
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<PagedResult<leaveListDto>> GetList(
|
||||||
|
LeaveListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست گروه بندی شده
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت مجکوع مرخصی پرسنل
|
||||||
|
/// اگر آی دی پرسنل، سال و ماه خالی نباشد
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <param name="employeeId"></param>
|
||||||
|
/// <param name="yearStr"></param>
|
||||||
|
/// <param name="monthStr"></param>
|
||||||
|
/// <param name="leaveType"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr,
|
||||||
|
LeaveType leaveType);
|
||||||
|
|
||||||
|
Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids, long workshopId);
|
||||||
|
Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// چک میکند که تاریخ وارد شده در شروع مرخصی تعطیل است یا خیر
|
||||||
|
/// دارای/فاقد اعتبار فیش غیررسمی را چک میکند
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startLeaveDate"></param>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد مرخصی از ای پی آی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult> CreateLeave(CreateLeaveDto command);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// چک میکند که آیا پرسنل حضور غیاب دارای شیفت گردشی دارد یا خیر
|
||||||
|
/// اگر داشت دریافت شیف گردشی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="workshopId"></param>
|
||||||
|
/// <param name="employeeId"></param>
|
||||||
|
/// <param name="startLeaveDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId, long employeeId, string startLeaveDate);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="ids"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<LeaveListPrintDto> ListPrint(List<long> ids);
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی ساعتی
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startHours"></param>
|
||||||
|
/// <param name="endHours"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<string> GetHourlyLeaveDuration(string startHours, string endHours);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// محاسبه مدت مرخصی روزانه
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="startDate"></param>
|
||||||
|
/// <param name="endDate"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<string> GetDailyLeaveDuration(string startDate, string endDate);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LeavePrintResponseViewModel
|
||||||
|
{
|
||||||
|
public string FullName { get; set; }
|
||||||
|
public string NationalCode { get; set; }
|
||||||
|
public string WorkshopName { get; set; }
|
||||||
|
public List<string> EmployerNames { get; set; }
|
||||||
|
public string PaidLeaveType { get; set; }
|
||||||
|
public string ContractNo { get; set; }
|
||||||
|
public LeavePrintHourlyResponseViewModel HourlyLeave { get; set; }
|
||||||
|
public LeavePrintDailyResponseViewModel DailyLeave { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LeavePrintDailyResponseViewModel
|
||||||
|
{
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
public string TotalDay { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LeavePrintHourlyResponseViewModel
|
||||||
|
{
|
||||||
|
public string LeaveDate { get; set; }
|
||||||
|
public string StartHour { get; set; }
|
||||||
|
public string EndHour { get; set; }
|
||||||
|
public string TotalHour { get; set; }
|
||||||
}
|
}
|
||||||
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
24
CompanyManagment.App.Contracts/Leave/LeaveListMultipleDto.cs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class LeaveListMultipleDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// لیست گروهبندی شده بر اساس سال و ماه
|
||||||
|
/// اگر در جستجو پرسنل انتخاب شود
|
||||||
|
/// </summary>
|
||||||
|
public List<GroupLeaveListDto>? GroupLeaveListDto { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست نرمال PageResult
|
||||||
|
/// </summary>
|
||||||
|
public PagedResult<leaveListDto>? leaveListDto { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مجموع مرخصی پرسنل
|
||||||
|
/// اگر پرسنل انتخاب شده باشد
|
||||||
|
/// </summary>
|
||||||
|
public string? SumOfEmployeeleaves { get; set; }
|
||||||
|
}
|
||||||
77
CompanyManagment.App.Contracts/Leave/LeaveListPrintDto.cs
Normal file
77
CompanyManagment.App.Contracts/Leave/LeaveListPrintDto.cs
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پرینت لیستی
|
||||||
|
/// api
|
||||||
|
/// </summary>
|
||||||
|
public class LeaveListPrintDto
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کامل پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مجموع مرخصی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string? SumOfEmployeeleaves { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public List<LeavePrintListItemsDto> LeavePrintListItemsDto { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LeavePrintListItemsDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// سال مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string YearStr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string MonthStr { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// زمان مرخصی
|
||||||
|
/// بازه مرخصی ساعتی
|
||||||
|
/// </summary>
|
||||||
|
public string HourlyInterval { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مدت مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveDuration { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// موافقت/عدم موافقت کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAccepted { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
45
CompanyManagment.App.Contracts/Leave/LeaveListSearchModel.cs
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class LeaveListSearchModel : PaginationRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
public LeaveType LeaveType { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string YearStr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string MonthStr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||||
|
/// </summary>
|
||||||
|
public bool IsInvalid { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
}
|
||||||
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
18
CompanyManagment.App.Contracts/Leave/LeaveType.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public enum LeaveType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// هر دو
|
||||||
|
/// </summary>
|
||||||
|
Both,
|
||||||
|
/// <summary>
|
||||||
|
/// مرخصی استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
SickLeave,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مرخصی استحقاقی
|
||||||
|
/// </summary>
|
||||||
|
PaidLeave
|
||||||
|
}
|
||||||
17
CompanyManagment.App.Contracts/Leave/PaidLeaveType.cs
Normal file
17
CompanyManagment.App.Contracts/Leave/PaidLeaveType.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مدت مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public enum PaidLeaveType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// روزانه
|
||||||
|
/// </summary>
|
||||||
|
Daily,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ساعتی
|
||||||
|
/// </summary>
|
||||||
|
Hourly,
|
||||||
|
}
|
||||||
17
CompanyManagment.App.Contracts/Leave/RotatingShiftDto.cs
Normal file
17
CompanyManagment.App.Contracts/Leave/RotatingShiftDto.cs
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class RotatingShiftDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آیا حضورغیاب به همراه گروهبندی گردشی دارد
|
||||||
|
/// </summary>
|
||||||
|
public bool HasRollCall {get; set;}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// لیست شیفت های گردشی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public List<CustomizeRotatingShiftsViewModel> RotatingShifts { get; set; }
|
||||||
|
}
|
||||||
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
84
CompanyManagment.App.Contracts/Leave/leaveListDto.cs
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Leave;
|
||||||
|
|
||||||
|
public class leaveListDto
|
||||||
|
{
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کامل پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public string EmployeeFullName { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string YearStr { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ماه مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string MonthStr { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع مرخصی، استحقاقی/استعلاجی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveType { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string StartLeave { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string EndLeave { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// زمان مرخصی
|
||||||
|
/// بازه مرخصی ساعتی
|
||||||
|
/// </summary>
|
||||||
|
public string HourlyInterval { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مدت مرخصی
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveDuration { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// موافقت/عدم موافقت کارفرما
|
||||||
|
/// </summary>
|
||||||
|
public bool IsAccepted { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی گارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long WorkshopId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پرسنل
|
||||||
|
/// </summary>
|
||||||
|
public long EmployeeId { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///آیا فاقد اعتبار است. فاقد اعتبار ها فقط برای فیش های غیررسمی مورد استفاده قرار میگیرند
|
||||||
|
/// </summary>
|
||||||
|
public bool IsInvalid { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.PaymentCallback;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// رابط برای مدیریت Callback درگاههای پرداخت
|
||||||
|
/// </summary>
|
||||||
|
public interface IPaymentCallbackHandler
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// تأیید و پردازش callback درگاه پرداخت سپهر
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="command">دادههای callback درگاه</param>
|
||||||
|
/// <param name="cancellationToken">توکن لغو عملیات</param>
|
||||||
|
/// <returns>نتیجه عملیات</returns>
|
||||||
|
Task<OperationResult> VerifySepehrPaymentCallback(VerifyPaymentCallbackCommand command,
|
||||||
|
CancellationToken cancellationToken = default);
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.PaymentCallback;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دستور تأیید callback درگاه پرداخت
|
||||||
|
/// </summary>
|
||||||
|
public class VerifyPaymentCallbackCommand
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// کد پاسخ درگاه (0 = موفق)
|
||||||
|
/// </summary>
|
||||||
|
public int ResponseCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه فاکتور/تراکنش
|
||||||
|
/// </summary>
|
||||||
|
public long InvoiceId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دادههای اضافی JSON
|
||||||
|
/// </summary>
|
||||||
|
public string Payload { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// مبلغ تراکنش
|
||||||
|
/// </summary>
|
||||||
|
public long Amount { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره پیگیری درگاه
|
||||||
|
/// </summary>
|
||||||
|
public long TraceNumber { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره سند بانکی (RRN)
|
||||||
|
/// </summary>
|
||||||
|
public long Rrn { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// رسید دیجیتال
|
||||||
|
/// </summary>
|
||||||
|
public string DigitalReceipt { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// بانک صادر کننده کارت
|
||||||
|
/// </summary>
|
||||||
|
public string IssuerBank { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره کارت
|
||||||
|
/// </summary>
|
||||||
|
public string CardNumber { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
@@ -132,4 +132,5 @@ public interface IPersonalContractingPartyApp
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
Task<long> GetRepresentativeIdByNationalCode(string nationalCode);
|
||||||
}
|
}
|
||||||
@@ -45,4 +45,42 @@ namespace CompanyManagment.App.Contracts.RollCall
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public class CheckoutPrintRollCallDto
|
||||||
|
{
|
||||||
|
|
||||||
|
public string RollCallDateFa { get; set; }
|
||||||
|
public string StartDate1 { get; set; }
|
||||||
|
public string EndDate1 { get; set; }
|
||||||
|
|
||||||
|
public string StartDate2 { get; set; }
|
||||||
|
public string EndDate2 { get; set; }
|
||||||
|
|
||||||
|
//منقطع بودن شیفت کاری
|
||||||
|
public bool IsSliced { get; set; }
|
||||||
|
|
||||||
|
public string TotalWorkingHours { get; set; }
|
||||||
|
|
||||||
|
public string DayOfWeek { get; set; }
|
||||||
|
|
||||||
|
public string BreakTimeString { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// اگر مرخصی نداشته باشد خالی خواهد بود، اگر داشته باشد نوع مرخصی جانشانی می شود
|
||||||
|
/// </summary>
|
||||||
|
public string LeaveType { get; set; }
|
||||||
|
|
||||||
|
public bool IsAbsent { get; set; }
|
||||||
|
public bool IsFriday { get; set; }
|
||||||
|
public bool IsHoliday { get; set; }
|
||||||
|
public bool IsBirthDay { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public string EnterDifferencesMinutes1 { get; set; }
|
||||||
|
public string ExitDifferencesMinutes1 { get; set; }
|
||||||
|
|
||||||
|
public string EnterDifferencesMinutes2 { get; set; }
|
||||||
|
public string ExitDifferencesMinutes2 { 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
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// پاسخ ایجاد درگاه پرداخت سپهر
|
||||||
|
/// </summary>
|
||||||
|
public class CreateSepehrPaymentGatewayResponse
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// توکن درگاه
|
||||||
|
/// </summary>
|
||||||
|
public string Token { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شناسه تراکنش
|
||||||
|
/// </summary>
|
||||||
|
public long TransactionId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// URL درگاه پرداخت
|
||||||
|
/// </summary>
|
||||||
|
public string PaymentUrl { get; set; }
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
using _0_Framework.Application;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// رابط برای سرویس مشترک ایجاد درگاه پرداخت سپهر
|
||||||
|
/// </summary>
|
||||||
|
public interface ISepehrPaymentGatewayService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ایجاد درگاه پرداخت سپهر برای یک تراکنش
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="amount">مبلغ</param>
|
||||||
|
/// <param name="contractingPartyId">شناسه طرف قرارداد</param>
|
||||||
|
/// <param name="frontCallbackUrl">آدرس بازگشتی به فرانت برای نمایش نتیجه</param>
|
||||||
|
/// <param name="gatewayCallbackUrl">آدرس بازگشتی درگاه پرداخت</param>
|
||||||
|
/// <param name="financialInvoiceId">شناسه فاکتور مالی (اختیاری) - این پارامتر مستقیماً به درگاه فرستاده میشود</param>
|
||||||
|
/// <param name="extraData">دادههای اضافی سفارشی برای payload (اختیاری)</param>
|
||||||
|
/// <param name="cancellationToken">توکن لغو</param>
|
||||||
|
/// <returns>شامل Token درگاه یا OperationResult با خطا</returns>
|
||||||
|
Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreateSepehrPaymentGateway(
|
||||||
|
double amount,
|
||||||
|
long contractingPartyId,
|
||||||
|
long financialInvoiceId,
|
||||||
|
string gatewayCallbackUrl,
|
||||||
|
string frontCallbackUrl="https://client.gozareshgir.ir",
|
||||||
|
Dictionary<string, object> extraData = null,
|
||||||
|
CancellationToken cancellationToken = default);
|
||||||
|
}
|
||||||
15
CompanyManagment.App.Contracts/SmsResult/Dto/SendStatus.cs
Normal file
15
CompanyManagment.App.Contracts/SmsResult/Dto/SendStatus.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت ارسال پیامک
|
||||||
|
/// </summary>
|
||||||
|
public enum SendStatus
|
||||||
|
{
|
||||||
|
All=0,
|
||||||
|
/// <summary>
|
||||||
|
/// موفق
|
||||||
|
/// </summary>
|
||||||
|
Success,
|
||||||
|
//ناموفق
|
||||||
|
Failed,
|
||||||
|
}
|
||||||
54
CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs
Normal file
54
CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||||
|
|
||||||
|
public class SmsReportDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ ارسال
|
||||||
|
/// </summary>
|
||||||
|
public string SentDate { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class SmsReportListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی پیامک در sms.ir
|
||||||
|
/// </summary>
|
||||||
|
public int MessageId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت ارسال
|
||||||
|
/// </summary>
|
||||||
|
public string Status { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نوع پیامک
|
||||||
|
/// </summary>
|
||||||
|
public string TypeOfSms { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام طرف حساب
|
||||||
|
/// </summary>
|
||||||
|
public string ContractingPartyName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره موبایل
|
||||||
|
/// </summary>
|
||||||
|
public string Mobile { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ساعت و دقیقه
|
||||||
|
/// </summary>
|
||||||
|
public string HourAndMinute { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
using _0_Framework.Application.Enums;
|
||||||
|
|
||||||
|
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||||
|
|
||||||
|
public class SmsReportSearchModel
|
||||||
|
{
|
||||||
|
//نوع پیامک
|
||||||
|
public TypeOfSmsSetting TypeOfSms { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// وضعیت ارسال پیامک
|
||||||
|
/// </summary>
|
||||||
|
public SendStatus SendStatus { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// شماره موبایل
|
||||||
|
/// </summary>
|
||||||
|
public string Mobile { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی طرف حساب
|
||||||
|
/// </summary>
|
||||||
|
public long ContractingPatyId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// سال
|
||||||
|
/// </summary>
|
||||||
|
public string Year { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// ماه
|
||||||
|
/// </summary>
|
||||||
|
public string Month { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ شروع
|
||||||
|
/// </summary>
|
||||||
|
public string StartDateFa { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// تاریخ پایان
|
||||||
|
/// </summary>
|
||||||
|
public string EndDateFa { get; set; }
|
||||||
|
}
|
||||||
@@ -1,14 +1,34 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
|
using CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
|
||||||
|
|
||||||
namespace CompanyManagment.App.Contracts.SmsResult;
|
namespace CompanyManagment.App.Contracts.SmsResult;
|
||||||
|
|
||||||
public interface ISmsResultApplication
|
public interface ISmsResultApplication
|
||||||
{
|
{
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست پیامکها
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت اکسپند لیست هر تاریخ
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="searchModel"></param>
|
||||||
|
/// <param name="date"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
OperationResult Create(CreateSmsResult command);
|
OperationResult Create(CreateSmsResult command);
|
||||||
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
namespace CompanyManagment.App.Contracts.Workshop.DTOs;
|
||||||
|
|
||||||
|
public class AdminWorkshopSelectListDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// آی دی کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public long Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// نام کارگاه
|
||||||
|
/// </summary>
|
||||||
|
public string WorkshopFullName { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// کد بایگانی
|
||||||
|
/// </summary>
|
||||||
|
public string ArchiveCode { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// آیا بلاک شده است
|
||||||
|
/// </summary>
|
||||||
|
public bool IsBlock { get; set; }
|
||||||
|
}
|
||||||
@@ -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.Checkout.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,19 @@ public interface IWorkshopApplication
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command);
|
Task<ActionResult<OperationResult>> CreateWorkshopWorkflowRegistration(CreateWorkshopWorkflowRegistration command);
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// دریافت لیست کارگاه های ادمین برای سلکت تو
|
||||||
|
/// Api
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<List<AdminWorkshopSelectListDto>> GetAdminWorkshopSelectList();
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
public class CreateWorkshopWorkflowRegistration
|
public class CreateWorkshopWorkflowRegistration
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using Company.Application.Contracts.AuthorizedBankDetails;
|
using Company.Application.Contracts.AuthorizedBankDetails;
|
||||||
using Company.Domain.AuthorizedBankDetailsAgg;
|
using Company.Domain.AuthorizedBankDetailsAgg;
|
||||||
|
using CompanyManagment.App.Contracts.AuthorizedBankDetails;
|
||||||
|
|
||||||
namespace CompanyManagment.Application
|
namespace CompanyManagment.Application
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,28 +1,34 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
using System.Collections.Generic;
|
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using _0_Framework.Application;
|
|
||||||
using Company.Domain.CheckoutAgg;
|
using Company.Domain.CheckoutAgg;
|
||||||
using Company.Domain.CheckoutAgg.ValueObjects;
|
using Company.Domain.CheckoutAgg.ValueObjects;
|
||||||
using Company.Domain.LeftWorkAgg;
|
using Company.Domain.EmployeeAgg;
|
||||||
using Company.Domain.YearlySalaryAgg;
|
|
||||||
using Company.Domain.empolyerAgg;
|
using Company.Domain.empolyerAgg;
|
||||||
|
using Company.Domain.LeaveAgg;
|
||||||
|
using Company.Domain.LeftWorkAgg;
|
||||||
using Company.Domain.RollCallAgg;
|
using Company.Domain.RollCallAgg;
|
||||||
|
using Company.Domain.WorkingHoursTempAgg;
|
||||||
|
using Company.Domain.WorkshopAgg;
|
||||||
|
using Company.Domain.YearlySalaryAgg;
|
||||||
using CompanyManagment.App.Contracts.Checkout;
|
using CompanyManagment.App.Contracts.Checkout;
|
||||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
using CompanyManagment.App.Contracts.Checkout.Dto;
|
||||||
|
using CompanyManagment.App.Contracts.Contract;
|
||||||
|
using CompanyManagment.App.Contracts.HolidayItem;
|
||||||
using CompanyManagment.App.Contracts.Leave;
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
using CompanyManagment.App.Contracts.MandantoryHours;
|
using CompanyManagment.App.Contracts.MandantoryHours;
|
||||||
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||||
using Company.Domain.EmployeeAgg;
|
|
||||||
using CompanyManagment.App.Contracts.HolidayItem;
|
|
||||||
using CompanyManagment.App.Contracts.RollCall;
|
using CompanyManagment.App.Contracts.RollCall;
|
||||||
|
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
||||||
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using CompanyManagment.EFCore.Migrations;
|
using CompanyManagment.EFCore.Migrations;
|
||||||
using CompanyManagment.EFCore.Repository;
|
using CompanyManagment.EFCore.Repository;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using Company.Domain.LeaveAgg;
|
using System.Linq;
|
||||||
using Company.Domain.WorkshopAgg;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
|
||||||
namespace CompanyManagment.Application;
|
namespace CompanyManagment.Application;
|
||||||
|
|
||||||
@@ -38,11 +44,14 @@ public class CheckoutApplication : ICheckoutApplication
|
|||||||
private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository;
|
private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository;
|
||||||
private readonly IRollCallRepository _rollCallRepository;
|
private readonly IRollCallRepository _rollCallRepository;
|
||||||
private readonly IHolidayItemApplication _holidayItemApplication;
|
private readonly IHolidayItemApplication _holidayItemApplication;
|
||||||
|
private readonly IWorkingHoursTempRepository _workingHoursTempRepository;
|
||||||
|
private readonly IWorkshopRepository _workshopRepository;
|
||||||
|
|
||||||
|
|
||||||
public CheckoutApplication(ICheckoutRepository checkoutRepository, IYearlySalaryRepository yearlySalaryRepository,
|
|
||||||
|
public CheckoutApplication(ICheckoutRepository checkoutRepository, IYearlySalaryRepository yearlySalaryRepository,
|
||||||
ILeftWorkRepository leftWorkRepository,
|
ILeftWorkRepository leftWorkRepository,
|
||||||
IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication)
|
IEmployerRepository employerRepository, IPersonalContractingPartyApp contractingPartyApp, ILeaveApplication leaveApplication, IMandatoryHoursApplication mandatoryHoursApplication, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallRepository rollCallRepository, IHolidayItemApplication holidayItemApplication, IWorkingHoursTempRepository workingHoursTempRepository, IWorkshopRepository workshopRepository)
|
||||||
{
|
{
|
||||||
_checkoutRepository = checkoutRepository;
|
_checkoutRepository = checkoutRepository;
|
||||||
_yearlySalaryRepository = yearlySalaryRepository;
|
_yearlySalaryRepository = yearlySalaryRepository;
|
||||||
@@ -54,7 +63,9 @@ public class CheckoutApplication : ICheckoutApplication
|
|||||||
_rollCallMandatoryRepository = rollCallMandatoryRepository;
|
_rollCallMandatoryRepository = rollCallMandatoryRepository;
|
||||||
_rollCallRepository = rollCallRepository;
|
_rollCallRepository = rollCallRepository;
|
||||||
_holidayItemApplication = holidayItemApplication;
|
_holidayItemApplication = holidayItemApplication;
|
||||||
}
|
_workingHoursTempRepository = workingHoursTempRepository;
|
||||||
|
_workshopRepository = workshopRepository;
|
||||||
|
}
|
||||||
|
|
||||||
[SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")]
|
[SuppressMessage("ReSharper.DPA", "DPA0007: Large number of DB records", MessageId = "count: 241")]
|
||||||
public void Create(CreateCheckout command)
|
public void Create(CreateCheckout command)
|
||||||
@@ -706,5 +717,69 @@ public class CheckoutApplication : ICheckoutApplication
|
|||||||
return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end);
|
return _checkoutRepository.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, start, end);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
public async Task<List<EmployeeSelectListDto>> GetEmployeeSelectListByWorkshopId(long id)
|
||||||
|
{
|
||||||
|
return await _checkoutRepository.GetEmployeeSelectListByWorkshopId(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
public async Task<PagedResult<CheckoutDto>> GetList(CheckoutSearchModelDto searchModel)
|
||||||
|
{
|
||||||
|
return await _checkoutRepository.GetList(searchModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<RotatingShiftOfCheckoutDto> GetRotatingShiftApi(long id)
|
||||||
|
{
|
||||||
|
var result = new ComputingViewModel();
|
||||||
|
var checkout = GetDetails(id);
|
||||||
|
var workingHours = _workingHoursTempRepository.GetByContractIdConvertToShiftwork4(checkout.ContractId);
|
||||||
|
var typeOfWorkingHours = "";
|
||||||
|
if (checkout.HasRollCall)
|
||||||
|
{
|
||||||
|
result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, true, workingHours, false);
|
||||||
|
typeOfWorkingHours = "دارای حضورغیاب";
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var workshop = _workshopRepository.GetDetails(checkout.WorkshopId);
|
||||||
|
result = await _rollCallMandatoryRepository.RotatingShiftReport(checkout.WorkshopId, checkout.EmployeeId, checkout.ContractStartGr, checkout.ContractEndGr, workingHours.ShiftWork, false, workingHours, workshop.WorkshopHolidayWorking);
|
||||||
|
typeOfWorkingHours = "بدون حضورغیاب";
|
||||||
|
}
|
||||||
|
|
||||||
|
var items = result.RotatingResultList.Select(x => new RotatingShiftListDto()
|
||||||
|
{
|
||||||
|
MorningShiftSpan = x.MorningString,
|
||||||
|
EveningShiftSpan = x.EveningString,
|
||||||
|
NightShiftSpan = x.NightString,
|
||||||
|
|
||||||
|
IsMorningShift = x.IsMorningShift,
|
||||||
|
IsEveningShift = x.IsEveningShift,
|
||||||
|
IsNightShift = x.IsNightShift,
|
||||||
|
|
||||||
|
ShiftDate = x.RotatingDate
|
||||||
|
}).ToList();
|
||||||
|
return new RotatingShiftOfCheckoutDto()
|
||||||
|
{
|
||||||
|
FullName = checkout.EmployeeFullName,
|
||||||
|
YearAndMonth = $"{checkout.Month} {checkout.Year}",
|
||||||
|
HasRotatingShift = result.RotatingStatus != "نوبت کاری ندارد",
|
||||||
|
RotatingShiftStatus = result.RotatingStatus,
|
||||||
|
TypeOfWorkingHours = typeOfWorkingHours,
|
||||||
|
RotatingShiftList = items
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<List<CheckoutPrintDto>> CheckoutPrint(List<long> ids)
|
||||||
|
{
|
||||||
|
return _checkoutRepository.CheckoutPrint(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -2712,7 +2712,9 @@ public class ContractApplication : IContractApplication
|
|||||||
|
|
||||||
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
|
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
|
||||||
.Select(x => x.EmployerId).ToList();
|
.Select(x => x.EmployerId).ToList();
|
||||||
|
|
||||||
res.Employers = _employerRepository.GetEmployers(emp);
|
res.Employers = _employerRepository.GetEmployers(emp);
|
||||||
|
|
||||||
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
|
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
|
||||||
var workshop = new WorkshopViewModel()
|
var workshop = new WorkshopViewModel()
|
||||||
{
|
{
|
||||||
@@ -3107,6 +3109,21 @@ public class ContractApplication : IContractApplication
|
|||||||
return _contractRepository.SearchForClient(searchModel);
|
return _contractRepository.SearchForClient(searchModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
|
||||||
|
{
|
||||||
|
return await _contractRepository.GetContractListForClient(searchModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<ContractPrintViewModel> PrintOneAsync(long id)
|
||||||
|
{
|
||||||
|
return (await _contractRepository.PrintAllAsync([id])).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
|
||||||
|
{
|
||||||
|
return await _contractRepository.PrintAllAsync(ids);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region NewChangeByHeydari
|
#region NewChangeByHeydari
|
||||||
|
|||||||
@@ -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,10 @@ public class EmployeeAplication : RepositoryBase<long, Employee>, IEmployeeAppli
|
|||||||
return await _EmployeeRepository.GetList(searchModel);
|
return await _EmployeeRepository.GetList(searchModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<List<GetClientEmployeeListViewModel>> GetClientEmployeeList(GetClientEmployeeListSearchModel searchModel, long workshopId)
|
||||||
|
{
|
||||||
|
return await _EmployeeRepository.GetClientEmployeeList(searchModel, workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -9,15 +9,13 @@ using CompanyManagment.EFCore;
|
|||||||
|
|
||||||
namespace CompanyManagment.Application;
|
namespace CompanyManagment.Application;
|
||||||
|
|
||||||
public class FinancialInvoiceApplication : RepositoryBase<long, FinancialInvoice>, IFinancialInvoiceApplication
|
public class FinancialInvoiceApplication : IFinancialInvoiceApplication
|
||||||
{
|
{
|
||||||
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||||
private readonly CompanyContext _context;
|
|
||||||
|
|
||||||
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository, CompanyContext context) : base(context)
|
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository)
|
||||||
{
|
{
|
||||||
_financialInvoiceRepository = financialInvoiceRepository;
|
_financialInvoiceRepository = financialInvoiceRepository;
|
||||||
_context = context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult Create(CreateFinancialInvoice command)
|
public OperationResult Create(CreateFinancialInvoice command)
|
||||||
@@ -185,6 +183,7 @@ public class FinancialInvoiceApplication : RepositoryBase<long, FinancialInvoice
|
|||||||
{
|
{
|
||||||
return _financialInvoiceRepository.Search(searchModel);
|
return _financialInvoiceRepository.Search(searchModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//public OperationResult Remove(long id)
|
//public OperationResult Remove(long id)
|
||||||
//{
|
//{
|
||||||
|
|||||||
@@ -3,9 +3,12 @@ using System.Collections.Generic;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using Company.Domain.ContarctingPartyAgg;
|
using Company.Domain.ContarctingPartyAgg;
|
||||||
|
using Company.Domain.FinancialInvoiceAgg;
|
||||||
using Company.Domain.FinancialStatmentAgg;
|
using Company.Domain.FinancialStatmentAgg;
|
||||||
|
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||||
using CompanyManagment.App.Contracts.FinancialStatment;
|
using CompanyManagment.App.Contracts.FinancialStatment;
|
||||||
using CompanyManagment.App.Contracts.FinancilTransaction;
|
using CompanyManagment.App.Contracts.FinancilTransaction;
|
||||||
|
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||||
using Microsoft.AspNetCore.Components.Forms;
|
using Microsoft.AspNetCore.Components.Forms;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
|
||||||
@@ -16,12 +19,20 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||||
private readonly IFinancialTransactionApplication _financialTransactionApplication;
|
private readonly IFinancialTransactionApplication _financialTransactionApplication;
|
||||||
private readonly IPersonalContractingPartyRepository _contractingPartyRepository;
|
private readonly IPersonalContractingPartyRepository _contractingPartyRepository;
|
||||||
|
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||||
|
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
|
||||||
|
|
||||||
public FinancialStatmentApplication(IFinancialStatmentRepository financialStatmentRepository, IFinancialTransactionApplication financialTransactionApplication, IPersonalContractingPartyRepository contractingPartyRepository)
|
public FinancialStatmentApplication(IFinancialStatmentRepository financialStatmentRepository,
|
||||||
|
IFinancialTransactionApplication financialTransactionApplication,
|
||||||
|
IPersonalContractingPartyRepository contractingPartyRepository,
|
||||||
|
IFinancialInvoiceRepository financialInvoiceRepository,
|
||||||
|
ISepehrPaymentGatewayService sepehrPaymentGatewayService)
|
||||||
{
|
{
|
||||||
_financialStatmentRepository = financialStatmentRepository;
|
_financialStatmentRepository = financialStatmentRepository;
|
||||||
_financialTransactionApplication = financialTransactionApplication;
|
_financialTransactionApplication = financialTransactionApplication;
|
||||||
_contractingPartyRepository = contractingPartyRepository;
|
_contractingPartyRepository = contractingPartyRepository;
|
||||||
|
_financialInvoiceRepository = financialInvoiceRepository;
|
||||||
|
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult CreateFromBankGateway(CreateFinancialStatment command)
|
public OperationResult CreateFromBankGateway(CreateFinancialStatment command)
|
||||||
@@ -51,7 +62,6 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
if (createTransaction.IsSuccedded)
|
if (createTransaction.IsSuccedded)
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
return op.Failed("خطا در انجام عملیات");
|
return op.Failed("خطا در انجام عملیات");
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -71,8 +81,6 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
Balance = 0,
|
Balance = 0,
|
||||||
TypeOfTransaction = command.TypeOfTransaction,
|
TypeOfTransaction = command.TypeOfTransaction,
|
||||||
DescriptionOption = command.DescriptionOption
|
DescriptionOption = command.DescriptionOption
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||||
if (createTransaction.IsSuccedded)
|
if (createTransaction.IsSuccedded)
|
||||||
@@ -98,22 +106,22 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
{
|
{
|
||||||
debtor = 0;
|
debtor = 0;
|
||||||
creditor = command.CreditorString.MoneyToDouble();
|
creditor = command.CreditorString.MoneyToDouble();
|
||||||
|
|
||||||
}
|
}
|
||||||
else if (command.TypeOfTransaction == "debt")
|
else if (command.TypeOfTransaction == "debt")
|
||||||
{
|
{
|
||||||
creditor = 0;
|
creditor = 0;
|
||||||
debtor = command.DeptorString.MoneyToDouble();
|
debtor = command.DeptorString.MoneyToDouble();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
|
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
|
||||||
{
|
{
|
||||||
return op.Failed("تاریخ وارد شده صحیح نمی باشد");
|
return op.Failed("تاریخ وارد شده صحیح نمی باشد");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
||||||
{
|
{
|
||||||
var financialStatment = _financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
var financialStatment =
|
||||||
|
_financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
||||||
var transaction = new CreateFinancialTransaction()
|
var transaction = new CreateFinancialTransaction()
|
||||||
{
|
{
|
||||||
FinancialStatementId = financialStatment.Id,
|
FinancialStatementId = financialStatment.Id,
|
||||||
@@ -124,20 +132,15 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
Creditor = creditor,
|
Creditor = creditor,
|
||||||
TypeOfTransaction = command.TypeOfTransaction,
|
TypeOfTransaction = command.TypeOfTransaction,
|
||||||
DescriptionOption = command.DescriptionOption
|
DescriptionOption = command.DescriptionOption
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||||
if (createTransaction.IsSuccedded)
|
if (createTransaction.IsSuccedded)
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
return op.Failed("خطا در انجام عملیات");
|
return op.Failed("خطا در انجام عملیات");
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName);
|
var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName);
|
||||||
_financialStatmentRepository.Create(statement);
|
_financialStatmentRepository.Create(statement);
|
||||||
_financialStatmentRepository.SaveChanges();
|
_financialStatmentRepository.SaveChanges();
|
||||||
@@ -153,20 +156,14 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
Balance = 0,
|
Balance = 0,
|
||||||
TypeOfTransaction = command.TypeOfTransaction,
|
TypeOfTransaction = command.TypeOfTransaction,
|
||||||
DescriptionOption = command.DescriptionOption
|
DescriptionOption = command.DescriptionOption
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||||
if (createTransaction.IsSuccedded)
|
if (createTransaction.IsSuccedded)
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
return op.Failed("خطا در انجام عملیات");
|
return op.Failed("خطا در انجام عملیات");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel)
|
public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel)
|
||||||
{
|
{
|
||||||
@@ -203,6 +200,45 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|||||||
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
|
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
|
||||||
long contractingPartyId, FinancialStatementSearchModel searchModel)
|
long contractingPartyId, FinancialStatementSearchModel searchModel)
|
||||||
{
|
{
|
||||||
return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId,searchModel);
|
return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId, searchModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreatePaymentGateWayAndCreateInvoice(
|
||||||
|
CreateFinancialPayRequest request, string gateWayCallBackUrl)
|
||||||
|
{
|
||||||
|
var op = new OperationResult<CreateSepehrPaymentGatewayResponse>();
|
||||||
|
// گام 1: دریافت موجودی حساب
|
||||||
|
var balanceAmount = await GetBalanceAmount(request.Id);
|
||||||
|
if (balanceAmount.Amount <= 0)
|
||||||
|
{
|
||||||
|
return op.Failed("موجودی حساب شما صفر است");
|
||||||
|
}
|
||||||
|
// گام 2: ایجاد درگاه پرداخت سپهر
|
||||||
|
|
||||||
|
var financialInvoice = await _financialInvoiceRepository
|
||||||
|
.GetUnPaidFinancialInvoiceByContractingPartyIdAndAmount(balanceAmount.ContractingPartyId,
|
||||||
|
balanceAmount.Amount);
|
||||||
|
|
||||||
|
if (financialInvoice == null)
|
||||||
|
{
|
||||||
|
financialInvoice = new FinancialInvoice(balanceAmount.Amount, balanceAmount.ContractingPartyId,
|
||||||
|
"پرداخت بدهی صورت حساب مالی");
|
||||||
|
|
||||||
|
var items = new FinancialInvoiceItem("پرداخت بدهی صورت حساب مالی", balanceAmount.Amount,
|
||||||
|
financialInvoice.id, FinancialInvoiceItemType.PreviousDebt, 0);
|
||||||
|
financialInvoice.AddItem(items);
|
||||||
|
await _financialInvoiceRepository.CreateAsync(financialInvoice);
|
||||||
|
await _financialInvoiceRepository.SaveChangesAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
var gatewayResult = await _sepehrPaymentGatewayService.CreateSepehrPaymentGateway(
|
||||||
|
amount: balanceAmount.Amount,
|
||||||
|
contractingPartyId: balanceAmount.ContractingPartyId,
|
||||||
|
frontCallbackUrl: request.BaseUrl,
|
||||||
|
gatewayCallbackUrl: gateWayCallBackUrl,
|
||||||
|
financialInvoiceId: financialInvoice.id,
|
||||||
|
extraData: null);
|
||||||
|
|
||||||
|
return gatewayResult;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,39 +1,33 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
using System.Threading;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using _0_Framework.Application;
|
using _0_Framework.Application;
|
||||||
using _0_Framework.Application.Enums;
|
using _0_Framework.Application.Enums;
|
||||||
using _0_Framework.Application.PaymentGateway;
|
using _0_Framework.Application.PaymentGateway;
|
||||||
using _0_Framework.Application.Sms;
|
using _0_Framework.Application.Sms;
|
||||||
using _0_Framework.Application.UID;
|
|
||||||
using _0_Framework.Exceptions;
|
using _0_Framework.Exceptions;
|
||||||
using AccountManagement.Application.Contracts.Account;
|
using AccountManagement.Application.Contracts.Account;
|
||||||
using Company.Domain.ContarctingPartyAgg;
|
using Company.Domain.ContarctingPartyAgg;
|
||||||
using Company.Domain.EmployeeAgg;
|
|
||||||
using Company.Domain.empolyerAgg;
|
using Company.Domain.empolyerAgg;
|
||||||
using Company.Domain.FinancialInvoiceAgg;
|
using Company.Domain.FinancialInvoiceAgg;
|
||||||
using Company.Domain.FinancialStatmentAgg;
|
using Company.Domain.FinancialStatmentAgg;
|
||||||
using Company.Domain.FinancialTransactionAgg;
|
using Company.Domain.FinancialTransactionAgg;
|
||||||
using Company.Domain.InstitutionContractAgg;
|
using Company.Domain.InstitutionContractAgg;
|
||||||
using Company.Domain.LeftWorkAgg;
|
|
||||||
using Company.Domain.PaymentTransactionAgg;
|
using Company.Domain.PaymentTransactionAgg;
|
||||||
using Company.Domain.RepresentativeAgg;
|
using Company.Domain.RepresentativeAgg;
|
||||||
using Company.Domain.TemporaryClientRegistrationAgg;
|
using Company.Domain.RollCallServiceAgg;
|
||||||
using Company.Domain.WorkshopAgg;
|
using Company.Domain.WorkshopAgg;
|
||||||
|
using Company.Domain.InstitutionContractSendFlagAgg;
|
||||||
using CompanyManagment.App.Contracts.FinancialInvoice;
|
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||||
using CompanyManagment.App.Contracts.FinancialStatment;
|
using CompanyManagment.App.Contracts.FinancialStatment;
|
||||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||||
using CompanyManagment.App.Contracts.PaymentTransaction;
|
using CompanyManagment.App.Contracts.PaymentTransaction;
|
||||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||||
using CompanyManagment.App.Contracts.Workshop;
|
using CompanyManagment.App.Contracts.Workshop;
|
||||||
using CompanyManagment.EFCore.Migrations;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
|
||||||
using OfficeOpenXml.Packaging.Ionic.Zip;
|
|
||||||
using PersianTools.Core;
|
using PersianTools.Core;
|
||||||
using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel;
|
using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel;
|
||||||
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
|
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
|
||||||
@@ -48,47 +42,48 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
private readonly IFinancialStatmentApplication _financialStatmentApplication;
|
private readonly IFinancialStatmentApplication _financialStatmentApplication;
|
||||||
private readonly IEmployerRepository _employerRepository;
|
private readonly IEmployerRepository _employerRepository;
|
||||||
private readonly IWorkshopRepository _workshopRepository;
|
private readonly IWorkshopRepository _workshopRepository;
|
||||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
|
||||||
private readonly IWorkshopApplication _workshopApplication;
|
private readonly IWorkshopApplication _workshopApplication;
|
||||||
private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
|
|
||||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||||
private readonly IContactInfoApplication _contactInfoApplication;
|
private readonly IContactInfoApplication _contactInfoApplication;
|
||||||
private readonly IAccountApplication _accountApplication;
|
private readonly IAccountApplication _accountApplication;
|
||||||
private readonly ISmsService _smsService;
|
private readonly ISmsService _smsService;
|
||||||
private readonly IUidService _uidService;
|
|
||||||
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||||
private readonly IPaymentGateway _paymentGateway;
|
private readonly IPaymentGateway _paymentGateway;
|
||||||
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
|
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
|
||||||
|
private readonly IRollCallServiceRepository _rollCallServiceRepository;
|
||||||
|
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
|
||||||
|
private readonly IInstitutionContractSendFlagRepository _institutionContractSendFlagRepository;
|
||||||
|
|
||||||
|
|
||||||
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
|
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
|
||||||
IPersonalContractingPartyRepository contractingPartyRepository,
|
IPersonalContractingPartyRepository contractingPartyRepository,
|
||||||
IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository,
|
IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository,
|
||||||
IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository,
|
IWorkshopRepository workshopRepository,
|
||||||
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication,
|
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication,
|
||||||
IContractingPartyTempRepository contractingPartyTempRepository,
|
|
||||||
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
|
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
|
||||||
IAccountApplication accountApplication, ISmsService smsService, IUidService uidService,
|
IAccountApplication accountApplication, ISmsService smsService,
|
||||||
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
|
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
|
||||||
IPaymentTransactionRepository paymentTransactionRepository)
|
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository,
|
||||||
|
ISepehrPaymentGatewayService sepehrPaymentGatewayService,ILogger<SepehrPaymentGateway> sepehrGatewayLogger,
|
||||||
|
IInstitutionContractSendFlagRepository institutionContractSendFlagRepository)
|
||||||
{
|
{
|
||||||
_institutionContractRepository = institutionContractRepository;
|
_institutionContractRepository = institutionContractRepository;
|
||||||
_contractingPartyRepository = contractingPartyRepository;
|
_contractingPartyRepository = contractingPartyRepository;
|
||||||
_representativeRepository = representativeRepository;
|
_representativeRepository = representativeRepository;
|
||||||
_employerRepository = employerRepository;
|
_employerRepository = employerRepository;
|
||||||
_workshopRepository = workshopRepository;
|
_workshopRepository = workshopRepository;
|
||||||
_leftWorkRepository = leftWorkRepository;
|
|
||||||
_financialStatmentApplication = financialStatmentApplication;
|
_financialStatmentApplication = financialStatmentApplication;
|
||||||
_workshopApplication = workshopApplication;
|
_workshopApplication = workshopApplication;
|
||||||
_contractingPartyTempRepository = contractingPartyTempRepository;
|
|
||||||
_financialStatmentRepository = financialStatmentRepository;
|
_financialStatmentRepository = financialStatmentRepository;
|
||||||
_contactInfoApplication = contactInfoApplication;
|
_contactInfoApplication = contactInfoApplication;
|
||||||
_accountApplication = accountApplication;
|
_accountApplication = accountApplication;
|
||||||
_smsService = smsService;
|
_smsService = smsService;
|
||||||
_uidService = uidService;
|
|
||||||
_financialInvoiceRepository = financialInvoiceRepository;
|
_financialInvoiceRepository = financialInvoiceRepository;
|
||||||
_paymentTransactionRepository = paymentTransactionRepository;
|
_paymentTransactionRepository = paymentTransactionRepository;
|
||||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
_rollCallServiceRepository = rollCallServiceRepository;
|
||||||
|
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
|
||||||
|
_paymentGateway = new SepehrPaymentGateway(httpClientFactory,sepehrGatewayLogger);
|
||||||
|
_institutionContractSendFlagRepository = institutionContractSendFlagRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OperationResult Create(CreateInstitutionContract command)
|
public OperationResult Create(CreateInstitutionContract command)
|
||||||
@@ -814,20 +809,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
||||||
if (contractingParty != null)
|
if (contractingParty != null)
|
||||||
{
|
{
|
||||||
contractingParty.DeActive();
|
var accountsDeActiveRes = _contractingPartyRepository.DeActiveAllAsync(contractingParty.id)
|
||||||
_contractingPartyRepository.SaveChanges();
|
.GetAwaiter().GetResult();
|
||||||
var employers =
|
|
||||||
_employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
|
if (!accountsDeActiveRes.IsSuccedded)
|
||||||
//var employersIdList = employers.Select(x => x.Id).ToList();
|
return opration.Failed(accountsDeActiveRes.Message);
|
||||||
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
|
|
||||||
//foreach (var workshop in workshops)
|
|
||||||
//{
|
|
||||||
// var res = _workshopApplication.DeActive(workshop.Id);
|
|
||||||
//}
|
|
||||||
foreach (var employer in employers)
|
|
||||||
{
|
|
||||||
var res = _employerRepository.DeActiveAll(employer.Id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return opration.Succcedded();
|
return opration.Succcedded();
|
||||||
@@ -844,20 +830,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
||||||
if (contractingParty != null)
|
if (contractingParty != null)
|
||||||
{
|
{
|
||||||
contractingParty.Active();
|
var activeRes = _contractingPartyRepository.ActiveAllAsync(contractingParty.id).GetAwaiter()
|
||||||
_contractingPartyRepository.SaveChanges();
|
.GetResult();
|
||||||
var employers =
|
if (!activeRes.IsSuccedded)
|
||||||
_employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
|
return opration.Failed(activeRes.Message);
|
||||||
//var employersIdList = employers.Select(x => x.Id).ToList();
|
|
||||||
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
|
|
||||||
//foreach (var workshop in workshops)
|
|
||||||
//{
|
|
||||||
// var res = _workshopApplication.DeActive(workshop.Id);
|
|
||||||
//}
|
|
||||||
foreach (var employer in employers)
|
|
||||||
{
|
|
||||||
var res = _employerRepository.ActiveAll(employer.Id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return opration.Succcedded();
|
return opration.Succcedded();
|
||||||
@@ -922,6 +898,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
return opration.Succcedded();
|
return opration.Succcedded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
|
public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
|
||||||
{
|
{
|
||||||
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
|
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
|
||||||
@@ -1291,119 +1268,87 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
if (contractingParty == null)
|
if (contractingParty == null)
|
||||||
throw new NotFoundException("طرف قرارداد یافت نشد");
|
throw new NotFoundException("طرف قرارداد یافت نشد");
|
||||||
|
|
||||||
if (institutionContract.VerifyCode != code)
|
if (institutionContract.VerifyCode != code)
|
||||||
return op.Failed("کد وارد شده صحیح نمی باشد");
|
return op.Failed("کد وارد شده صحیح نمی باشد");
|
||||||
|
|
||||||
var financialStatement =await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id);
|
|
||||||
|
|
||||||
var dbTransaction = await _institutionContractRepository.BeginTransactionAsync();
|
var financialStatement = await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id);
|
||||||
FinancialInvoice financialInvoice;
|
|
||||||
FinancialInvoiceItem financialInvoiceItem;
|
|
||||||
var today = DateTime.Today;
|
|
||||||
double invoiceAmount = 0;
|
|
||||||
string invoiceItemDescription = string.Empty;
|
|
||||||
FinancialInvoiceItemType invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
|
|
||||||
long invoiceItemEntityId = 0;
|
|
||||||
|
|
||||||
if (institutionContract.IsInstallment)
|
var dbTransaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||||
{
|
FinancialInvoice financialInvoice;
|
||||||
var firstInstallment = institutionContract.Installments.First();
|
FinancialInvoiceItem financialInvoiceItem;
|
||||||
var firstInstallmentAmount = firstInstallment.Amount;
|
var today = DateTime.Today;
|
||||||
|
double invoiceAmount = 0;
|
||||||
|
string invoiceItemDescription = string.Empty;
|
||||||
|
FinancialInvoiceItemType invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
|
||||||
|
long invoiceItemEntityId = 0;
|
||||||
|
|
||||||
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(firstInstallment.Id, FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
if (institutionContract.IsInstallment)
|
||||||
if (financialInvoice == null)
|
{
|
||||||
{
|
var firstInstallment = institutionContract.Installments.First();
|
||||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
var firstInstallmentAmount = firstInstallment.Amount;
|
||||||
"قسط اول سرویس", "debt", "بابت خدمات", firstInstallmentAmount, 0, 0);
|
|
||||||
financialStatement.AddFinancialTransaction(financialTransaction);
|
|
||||||
invoiceAmount = firstInstallmentAmount;
|
|
||||||
invoiceItemDescription = $"پرداخت قسط اول قرارداد شماره {institutionContract.ContractNo}";
|
|
||||||
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContractInstallment;
|
|
||||||
invoiceItemEntityId = firstInstallment.Id;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
invoiceAmount = financialInvoice.Amount;
|
|
||||||
invoiceItemDescription = financialInvoice.Items.First().Description;
|
|
||||||
invoiceItemType = financialInvoice.Items.First().Type;
|
|
||||||
invoiceItemEntityId = financialInvoice.Items.First().EntityId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(institutionContract.id, FinancialInvoiceItemType.BuyInstitutionContract);
|
|
||||||
if (financialInvoice == null)
|
|
||||||
{
|
|
||||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
|
||||||
"پرداخت کل سرویس", "debt", "بابت خدمات", institutionContract.TotalAmount, 0, 0);
|
|
||||||
financialStatement.AddFinancialTransaction(financialTransaction);
|
|
||||||
invoiceAmount = institutionContract.TotalAmount;
|
|
||||||
invoiceItemDescription = $"پرداخت کل قرارداد شماره {institutionContract.ContractNo}";
|
|
||||||
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
|
|
||||||
invoiceItemEntityId = institutionContract.id;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
invoiceAmount = financialInvoice.Amount;
|
|
||||||
invoiceItemDescription = financialInvoice.Items.First().Description;
|
|
||||||
invoiceItemType = financialInvoice.Items.First().Type;
|
|
||||||
invoiceItemEntityId = financialInvoice.Items.First().EntityId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (financialInvoice == null)
|
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(firstInstallment.Id, FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
||||||
{
|
if (financialInvoice == null)
|
||||||
financialInvoice = new FinancialInvoice(invoiceAmount, contractingParty.id, $"خرید قرارداد مالی شماره {institutionContract.ContractNo}");
|
{
|
||||||
financialInvoiceItem = new FinancialInvoiceItem(invoiceItemDescription, invoiceAmount, 0, invoiceItemType, invoiceItemEntityId);
|
invoiceAmount = firstInstallmentAmount;
|
||||||
financialInvoice.AddItem(financialInvoiceItem);
|
invoiceItemDescription = $"پرداخت قسط اول قرارداد شماره {institutionContract.ContractNo}";
|
||||||
await _financialInvoiceRepository.CreateAsync(financialInvoice);
|
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContractInstallment;
|
||||||
}
|
invoiceItemEntityId = firstInstallment.Id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
invoiceAmount = financialInvoice.Amount;
|
||||||
|
invoiceItemDescription = financialInvoice.Items.First().Description;
|
||||||
|
invoiceItemType = financialInvoice.Items.First().Type;
|
||||||
|
invoiceItemEntityId = financialInvoice.Items.First().EntityId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(institutionContract.id, FinancialInvoiceItemType.BuyInstitutionContract);
|
||||||
|
if (financialInvoice == null)
|
||||||
|
{
|
||||||
|
invoiceAmount = institutionContract.TotalAmount;
|
||||||
|
invoiceItemDescription = $"پرداخت کل قرارداد شماره {institutionContract.ContractNo}";
|
||||||
|
invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
|
||||||
|
invoiceItemEntityId = institutionContract.id;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
invoiceAmount = financialInvoice.Amount;
|
||||||
|
invoiceItemDescription = financialInvoice.Items.First().Description;
|
||||||
|
invoiceItemType = financialInvoice.Items.First().Type;
|
||||||
|
invoiceItemEntityId = financialInvoice.Items.First().EntityId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
await _financialInvoiceRepository.SaveChangesAsync();
|
if (financialInvoice == null)
|
||||||
|
{
|
||||||
|
financialInvoice = new FinancialInvoice(invoiceAmount, contractingParty.id, $"خرید قرارداد مالی شماره {institutionContract.ContractNo}");
|
||||||
|
financialInvoiceItem = new FinancialInvoiceItem(invoiceItemDescription, invoiceAmount, 0, invoiceItemType, invoiceItemEntityId);
|
||||||
|
financialInvoice.AddItem(financialInvoiceItem);
|
||||||
|
await _financialInvoiceRepository.CreateAsync(financialInvoice);
|
||||||
|
}
|
||||||
|
|
||||||
var transaction = new PaymentTransaction(institutionContract.ContractingPartyId, invoiceAmount,
|
await _financialInvoiceRepository.SaveChangesAsync();
|
||||||
institutionContract.ContractingPartyName, "https://client.gozareshgir.ir",
|
|
||||||
PaymentTransactionGateWay.SepehrPay);
|
|
||||||
await _paymentTransactionRepository.CreateAsync(transaction);
|
|
||||||
await _financialInvoiceRepository.SaveChangesAsync();
|
|
||||||
|
|
||||||
var createPayment = new CreatePaymentGatewayRequest()
|
// استفاده از سرویس مشترک برای ایجاد درگاه پرداخت
|
||||||
{
|
var gatewayResult = await _sepehrPaymentGatewayService.CreateSepehrPaymentGateway(
|
||||||
Amount = invoiceAmount,
|
amount: (long)invoiceAmount,
|
||||||
TransactionId = transaction.id.ToString(),
|
contractingPartyId: institutionContract.ContractingPartyId,
|
||||||
CallBackUrl = callbackUrl,
|
gatewayCallbackUrl: callbackUrl,
|
||||||
FinancialInvoiceId = financialInvoice.id,
|
financialInvoiceId: financialInvoice.id,
|
||||||
};
|
extraData: null);
|
||||||
var gatewayResponse = await _paymentGateway.Create(createPayment);
|
|
||||||
if (!gatewayResponse.IsSuccess)
|
|
||||||
return op.Failed("خطا در ایجاد درگاه پرداخت: " + gatewayResponse.Message + gatewayResponse.ErrorCode);
|
|
||||||
|
|
||||||
|
if (!gatewayResult.IsSuccedded)
|
||||||
// institutionContract.SetPendingWorkflow();
|
{
|
||||||
//
|
await dbTransaction.RollbackAsync();
|
||||||
// var phone = institutionContract.ContactInfoList.FirstOrDefault(x =>
|
return op.Failed(gatewayResult.Message);
|
||||||
// x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
|
}
|
||||||
// if (phone !=null)
|
|
||||||
// {
|
|
||||||
// var userPass = contractingParty.IsLegal == "حقیقی"
|
|
||||||
// ? contractingParty.Nationalcode
|
|
||||||
// : contractingParty.NationalId;
|
|
||||||
// var createAcc = new RegisterAccount
|
|
||||||
// {
|
|
||||||
// Fullname = contractingParty.LName,
|
|
||||||
// Username = userPass,
|
|
||||||
// Password = userPass,
|
|
||||||
// Mobile = phone.PhoneNumber,
|
|
||||||
// NationalCode = userPass
|
|
||||||
// };
|
|
||||||
// var res = _accountApplication.RegisterClient(createAcc);
|
|
||||||
// if (res.IsSuccedded)
|
|
||||||
// CreateContractingPartyAccount(contractingParty.id, res.SendId);
|
|
||||||
// }
|
|
||||||
|
|
||||||
await dbTransaction.CommitAsync();
|
await dbTransaction.CommitAsync();
|
||||||
await _institutionContractRepository.SaveChangesAsync();
|
await _institutionContractRepository.SaveChangesAsync();
|
||||||
return op.Succcedded(gatewayResponse.Token);
|
return op.Succcedded(gatewayResult.Data.Token);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId)
|
public async Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId)
|
||||||
@@ -1441,6 +1386,22 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
return _institutionContractRepository.ResetDiscountCreate(request);
|
return _institutionContractRepository.ResetDiscountCreate(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.CreationInquiry(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.GetCreationWorkshops(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.GetCreationInstitutionPlan(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
||||||
{
|
{
|
||||||
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
|
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
|
||||||
@@ -1555,28 +1516,48 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
.Where(x => x.WorkshopCreated && x.WorkshopId is > 0).ToList();
|
.Where(x => x.WorkshopCreated && x.WorkshopId is > 0).ToList();
|
||||||
|
|
||||||
var currentWorkshops = institutionContract.WorkshopGroup.CurrentWorkshops.ToList();
|
var currentWorkshops = institutionContract.WorkshopGroup.CurrentWorkshops.ToList();
|
||||||
|
var accountId = _contractingPartyRepository
|
||||||
|
.GetAccountByPersonalContractingParty(institutionContract.ContractingPartyId).Id;
|
||||||
foreach (var createdWorkshop in initialCreatedWorkshops)
|
foreach (var createdWorkshop in initialCreatedWorkshops)
|
||||||
{
|
{
|
||||||
if (currentWorkshops.Any(x => x.WorkshopId == createdWorkshop.WorkshopId))
|
if (currentWorkshops.Any(x => x.WorkshopId == createdWorkshop.WorkshopId))
|
||||||
{
|
{
|
||||||
continue;
|
//rollcall serviecs
|
||||||
|
if (createdWorkshop.Services.RollCall)
|
||||||
|
{
|
||||||
|
var ActiveService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(createdWorkshop.WorkshopId!.Value);
|
||||||
|
var startTime = institutionContract.ContractStartGr;
|
||||||
|
var endTime = institutionContract.ContractEndGr;
|
||||||
|
if (ActiveService != null)
|
||||||
|
{
|
||||||
|
if (ActiveService.EndService> startTime)
|
||||||
|
{
|
||||||
|
startTime = ActiveService.EndService;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
var rollCallService = new RollCallService("BasedOnIC",
|
||||||
|
startTime, endTime, createdWorkshop.WorkshopId.Value,accountId,createdWorkshop.PersonnelCount,
|
||||||
|
0,"12");
|
||||||
|
await _rollCallServiceRepository.CreateAsync(rollCallService);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var currentWorkshop = new InstitutionContractWorkshopCurrent(createdWorkshop.WorkshopName,
|
||||||
|
createdWorkshop.Services.RollCall, createdWorkshop.Services.RollCallInPerson,
|
||||||
|
createdWorkshop.Services.CustomizeCheckout, createdWorkshop.Services.Contract,
|
||||||
|
createdWorkshop.Services.ContractInPerson, createdWorkshop.Services.Insurance,
|
||||||
|
createdWorkshop.Services.InsuranceInPerson,createdWorkshop.PersonnelCount, createdWorkshop.Price,
|
||||||
|
createdWorkshop.InstitutionContractWorkshopGroupId,createdWorkshop.WorkshopGroup,
|
||||||
|
createdWorkshop.WorkshopId!.Value, createdWorkshop.id);
|
||||||
|
institutionContract.WorkshopGroup.AddCurrentWorkshop(currentWorkshop);
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentWorkshop = new InstitutionContractWorkshopCurrent(createdWorkshop.WorkshopName,
|
|
||||||
createdWorkshop.Services.RollCall, createdWorkshop.Services.RollCallInPerson,
|
|
||||||
createdWorkshop.Services.CustomizeCheckout, createdWorkshop.Services.Contract,
|
|
||||||
createdWorkshop.Services.ContractInPerson, createdWorkshop.Services.Insurance,
|
|
||||||
createdWorkshop.Services.InsuranceInPerson,createdWorkshop.PersonnelCount, createdWorkshop.Price,
|
|
||||||
createdWorkshop.InstitutionContractWorkshopGroupId,createdWorkshop.WorkshopGroup,
|
|
||||||
createdWorkshop.WorkshopId!.Value, createdWorkshop.id);
|
|
||||||
institutionContract.WorkshopGroup.AddCurrentWorkshop(currentWorkshop);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (institutionContract.WorkshopGroup.InitialWorkshops.All(x => x.WorkshopCreated && x.WorkshopId is > 0))
|
if (institutionContract.WorkshopGroup.InitialWorkshops.All(x => x.WorkshopCreated && x.WorkshopId is > 0))
|
||||||
{
|
{
|
||||||
|
|
||||||
institutionContract.Verified();
|
institutionContract.Verified();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1585,7 +1566,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();
|
||||||
}
|
}
|
||||||
@@ -1608,15 +1592,56 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
|
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
|
||||||
return op.Failed("قرارداد مالی قبلا تایید شده است");
|
return op.Failed("قرارداد مالی قبلا تایید شده است");
|
||||||
|
|
||||||
|
if (!institutionContract.WorkshopGroup.IsInPersonContract)
|
||||||
|
{
|
||||||
|
return op.Failed("قرارداد مالی غیر حضوری نمی تواند به صورت دستی تایید شود");
|
||||||
|
}
|
||||||
|
|
||||||
var transaction = await _institutionContractRepository.BeginTransactionAsync();
|
var transaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||||
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);
|
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);
|
||||||
|
|
||||||
|
var financialStatement = await _financialStatmentRepository
|
||||||
|
.GetByContractingPartyId(institutionContract.ContractingPartyId);
|
||||||
|
|
||||||
|
DateTime today = DateTime.Today;
|
||||||
|
var description = institutionContract.IsInstallment
|
||||||
|
? "قسط اول سرویس"
|
||||||
|
: "پرداخت کل سرویس";
|
||||||
|
var debtorAmount = institutionContract.IsInstallment
|
||||||
|
? institutionContract.Installments.First().Amount
|
||||||
|
: institutionContract.TotalAmount;
|
||||||
|
|
||||||
|
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
||||||
|
description, "debt", "بابت خدمات", debtorAmount, 0, 0);
|
||||||
|
financialStatement.AddFinancialTransaction(financialTransaction);
|
||||||
|
|
||||||
await transaction.CommitAsync();
|
|
||||||
await _institutionContractRepository.SaveChangesAsync();
|
await _institutionContractRepository.SaveChangesAsync();
|
||||||
|
await transaction.CommitAsync();
|
||||||
return op.Succcedded();
|
return op.Succcedded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.GetCreationPaymentMethod(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.SetDiscountForCreation(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.ResetDiscountForCreation(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request)
|
||||||
|
{
|
||||||
|
return _institutionContractRepository.CreationComplete(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
||||||
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
||||||
string state)
|
string state)
|
||||||
@@ -1800,7 +1825,60 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
|||||||
installments.Add(lastInstallment);
|
installments.Add(lastInstallment);
|
||||||
return installments;
|
return installments;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// تعیین فلگ ارسال قرارداد
|
||||||
|
/// اگر فلگ وجود نداشتند ایجاد میکند
|
||||||
|
/// </summary>
|
||||||
|
public async Task<OperationResult> SetContractSendFlag(SetInstitutionContractSendFlagRequest request)
|
||||||
|
{
|
||||||
|
var operationResult = new OperationResult();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// بازیابی قرارداد از SQL
|
||||||
|
var contract = _institutionContractRepository.Get(request.InstitutionContractId);
|
||||||
|
if (contract == null)
|
||||||
|
return operationResult.Failed("قرارداد مورد نظر یافت نشد");
|
||||||
|
|
||||||
|
// بررسی اینکه آیا فلگ در MongoDB وجود دارد
|
||||||
|
var existingFlag = await _institutionContractSendFlagRepository
|
||||||
|
.GetByContractId(request.InstitutionContractId);
|
||||||
|
|
||||||
|
if (existingFlag != null)
|
||||||
|
{
|
||||||
|
// اگر فلگ وجود داشتند، آن را اپدیت کنیم
|
||||||
|
if (request.IsSent)
|
||||||
|
{
|
||||||
|
existingFlag.MarkAsSent();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
existingFlag.MarkAsNotSent();
|
||||||
|
}
|
||||||
|
existingFlag.UpdateLastModified();
|
||||||
|
await _institutionContractSendFlagRepository.Update(existingFlag);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// اگر فلگ وجود ندارد، آن را ایجاد کنیم
|
||||||
|
var newFlag = new InstitutionContractSendFlag(
|
||||||
|
request.InstitutionContractId,
|
||||||
|
request.IsSent
|
||||||
|
);
|
||||||
|
|
||||||
|
await _institutionContractSendFlagRepository.Create(newFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
return operationResult.Succcedded();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return operationResult.Failed($"خطا در تعیین فلگ ارسال: {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#region CustomViewModels
|
#region CustomViewModels
|
||||||
|
|||||||
@@ -1524,7 +1524,8 @@ public class InsuranceListApplication : IInsuranceListApplication
|
|||||||
var dateOfBirth = employeeData.DateOfBirthGr.ToFarsi();
|
var dateOfBirth = employeeData.DateOfBirthGr.ToFarsi();
|
||||||
var dateOfIssue = employeeData.DateOfIssueGr.ToFarsi();
|
var dateOfIssue = employeeData.DateOfIssueGr.ToFarsi();
|
||||||
var leftDate = employeeData.LeftWorkDateGr != null ? employeeData.LeftWorkDateGr.Value.AddDays(-1) : new DateTime();
|
var leftDate = employeeData.LeftWorkDateGr != null ? employeeData.LeftWorkDateGr.Value.AddDays(-1) : new DateTime();
|
||||||
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(employeeData.StartWorkDateGr, leftDate, startDateGr, endDateGr, employeeData.EmployeeId);
|
|
||||||
|
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(employeeData.StartWorkDateGr, leftDate, startDateGr, endDateGr, employeeData.EmployeeId);
|
||||||
var leftWorkFa = workingDays.hasLeftWorkInMonth ? employeeData.LeftWorkDateGr.ToFarsi() : "";
|
var leftWorkFa = workingDays.hasLeftWorkInMonth ? employeeData.LeftWorkDateGr.ToFarsi() : "";
|
||||||
var startWorkFa = employeeData.StartWorkDateGr.ToFarsi();
|
var startWorkFa = employeeData.StartWorkDateGr.ToFarsi();
|
||||||
var workshop = _workShopRepository.GetDetails(workshopId);
|
var workshop = _workShopRepository.GetDetails(workshopId);
|
||||||
@@ -1606,7 +1607,7 @@ public class InsuranceListApplication : IInsuranceListApplication
|
|||||||
MaritalStatus = employeeData.MaritalStatus,
|
MaritalStatus = employeeData.MaritalStatus,
|
||||||
|
|
||||||
StartMonthCurrent = startMonthFa,
|
StartMonthCurrent = startMonthFa,
|
||||||
WorkingDays = workingDays.countWorkingDays,
|
WorkingDays = employeeData.WorkingDays,
|
||||||
StartWorkDate = startWorkFa,
|
StartWorkDate = startWorkFa,
|
||||||
StartWorkDateGr = employeeData.StartWorkDateGr,
|
StartWorkDateGr = employeeData.StartWorkDateGr,
|
||||||
LeftWorkDate = leftWorkFa,
|
LeftWorkDate = leftWorkFa,
|
||||||
@@ -2381,5 +2382,10 @@ public class InsuranceListApplication : IInsuranceListApplication
|
|||||||
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
|
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
|
||||||
|
{
|
||||||
|
return await _insuranceListRepositpry.ClientPrintOne(id);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
@@ -1,17 +1,25 @@
|
|||||||
using System;
|
using _0_Framework.Application;
|
||||||
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||||
|
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
|
||||||
|
using Company.Domain.EmployeeAgg;
|
||||||
|
using Company.Domain.HolidayItemAgg;
|
||||||
|
using Company.Domain.LeaveAgg;
|
||||||
|
using Company.Domain.RollCallAgg;
|
||||||
|
using Company.Domain.RollCallServiceAgg;
|
||||||
|
using Company.Domain.WorkshopAgg;
|
||||||
|
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
|
||||||
|
using CompanyManagment.App.Contracts.HolidayItem;
|
||||||
|
using CompanyManagment.App.Contracts.Leave;
|
||||||
|
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
|
||||||
|
using CompanyManagment.App.Contracts.RollCallService;
|
||||||
|
using CompanyManagment.EFCore.Migrations;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using _0_Framework.Application;
|
using System.Threading.Tasks;
|
||||||
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;
|
||||||
|
|
||||||
@@ -23,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;
|
||||||
@@ -33,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)
|
||||||
@@ -237,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);
|
||||||
@@ -509,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)
|
||||||
@@ -590,11 +608,435 @@ public class LeaveApplication : ILeaveApplication
|
|||||||
return leaveTotalTimeSpan;
|
return leaveTotalTimeSpan;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
|
||||||
|
|
||||||
|
private TimeSpan CalculateTotalLeaveTimeSpan(List<LeavePrintViewModel> leaves)
|
||||||
{
|
{
|
||||||
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
|
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
|
||||||
var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
|
var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
|
||||||
return timeSpanHourlyLeave + dailyLeaveCount;
|
return timeSpanHourlyLeave + dailyLeaveCount;
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
#region ForApi
|
||||||
|
|
||||||
|
public async Task<PagedResult<leaveListDto>> GetList(LeaveListSearchModel searchModel)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.GetList(searchModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<GroupLeaveListDto>> GetGroupList(LeaveListSearchModel searchModel)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.GetGroupList(searchModel);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TimeSpan SumOfEmployeeLeaveTimeSpanInDates(long workshopId, long employeeId, string yearStr, string monthStr, LeaveType leaveType)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
var startFa = $"{yearStr}/{monthStr:00}/01";
|
||||||
|
var endFa = startFa.FindeEndOfMonth();
|
||||||
|
|
||||||
|
if (startFa.TryToGeorgianDateTime(out var start) == false || endFa.TryToGeorgianDateTime(out var end) == false)
|
||||||
|
return TimeSpan.Zero;
|
||||||
|
|
||||||
|
var leaveTotalTimeSpan = TimeSpan.Zero;
|
||||||
|
|
||||||
|
var leaves = _leaveRepository.GetByWorkshopIdEmployeeIdInDates(workshopId, employeeId, start, end);
|
||||||
|
//var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType != "روزانه").Sum(x => (x.EndLeaveGr - x.StartLeaveGr).Ticks));
|
||||||
|
//var dailyLeaveCount = leaves.Count(x => x.PaidLeaveType == "روزانه") * new TimeSpan(1, 0, 0, 0);
|
||||||
|
|
||||||
|
if (leaveType == LeaveType.PaidLeave)
|
||||||
|
{
|
||||||
|
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استحقاقی")
|
||||||
|
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||||
|
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استحقاقی")
|
||||||
|
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||||
|
|
||||||
|
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||||
|
}
|
||||||
|
else if (leaveType == LeaveType.SickLeave)
|
||||||
|
{
|
||||||
|
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی" && x.LeaveType == "استعلاجی")
|
||||||
|
.Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||||
|
|
||||||
|
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه" && x.LeaveType == "استعلاجی")
|
||||||
|
.Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||||
|
|
||||||
|
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var timeSpanHourlyLeave = new TimeSpan(leaves.Where(x => x.PaidLeaveType == "ساعتی").Sum(x => TimeOnly.Parse(x.LeaveHourses).Ticks));
|
||||||
|
var dailyLeaveTime = leaves.Where(x => x.PaidLeaveType == "روزانه").Sum(x => Convert.ToInt32(x.LeaveHourses)) * TimeSpan.FromDays(1);
|
||||||
|
leaveTotalTimeSpan = timeSpanHourlyLeave + dailyLeaveTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return leaveTotalTimeSpan;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<LeavePrintResponseViewModel>> PrintAllAsync(List<long> ids,long workshopId)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.PrintAllAsync(ids,workshopId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<LeavePrintResponseViewModel> PrintOneAsync(long id, long workshopId)
|
||||||
|
{
|
||||||
|
return (await _leaveRepository.PrintAllAsync([id],workshopId)).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult<CheckIsInvalidLeaveDto>> CheckIsInvalidLeave(string startLeaveDate, long workshopId)
|
||||||
|
{
|
||||||
|
var op = new OperationResult<CheckIsInvalidLeaveDto>();
|
||||||
|
var result = new CheckIsInvalidLeaveDto();
|
||||||
|
if (startLeaveDate.TryToGeorgianDateTime(out var startLeaveDateGr) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ وارد شده صحیح نیست");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (startLeaveDateGr.DayOfWeek == DayOfWeek.Friday || _holidayItemRepository.GetHoliday(startLeaveDateGr))
|
||||||
|
{
|
||||||
|
result.IsHoliday = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result.IsHoliday)
|
||||||
|
{
|
||||||
|
var rollCallService = _rollCallServiceRepository.GetActiveServiceByWorkshopId(workshopId);
|
||||||
|
if (rollCallService != null)
|
||||||
|
{
|
||||||
|
result.CanCreateInvalid = rollCallService.HasCustomizeCheckoutService == "true";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult> CreateLeave(CreateLeaveDto command)
|
||||||
|
{
|
||||||
|
TimeSpan shiftDuration = TimeSpan.Zero;
|
||||||
|
bool hasShiftDuration = false;
|
||||||
|
var startH = new TimeSpan();
|
||||||
|
var endH = new TimeSpan();
|
||||||
|
var op = new OperationResult();
|
||||||
|
if ((command.PaidLeaveType == PaidLeaveType.Daily && command.LeaveType == LeaveType.PaidLeave) || command.LeaveType == LeaveType.SickLeave)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
}
|
||||||
|
if (string.IsNullOrWhiteSpace(command.EndLeave))
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا تاریخ پایان را وارد کنید");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (command.PaidLeaveType == PaidLeaveType.Hourly)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
if (string.IsNullOrWhiteSpace(command.StartHoures) || string.IsNullOrWhiteSpace(command.EndHours))
|
||||||
|
return op.Failed("ساعت شروع و پایان نمیتواند خالی باشد");
|
||||||
|
|
||||||
|
string pattern = @"^([01]\d|2[0-3]):[0-5]\d$";
|
||||||
|
|
||||||
|
if (!Regex.IsMatch(command.StartHoures, pattern))
|
||||||
|
return op.Failed("لطفا ساعت شروع را به درستی وارد کنید");
|
||||||
|
|
||||||
|
if (!Regex.IsMatch(command.EndHours, pattern))
|
||||||
|
return op.Failed("لطفا ساعت پایان را به درستی وارد کنید");
|
||||||
|
|
||||||
|
startH = TimeSpan.Parse(command.StartHoures);
|
||||||
|
endH = TimeSpan.Parse(command.EndHours);
|
||||||
|
if (startH == endH)
|
||||||
|
return op.Failed("ساعت شروع و پایان نباید برابر باشد");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.StartLeave))
|
||||||
|
// return op.Failed("لطفا تاریخ شروع را وارد کنید");
|
||||||
|
//if (command.LeaveType == LeaveType.SickLeave && string.IsNullOrWhiteSpace(command.EndLeave))
|
||||||
|
// return op.Failed("لطفا تاریخ پایان را وارد کنید");
|
||||||
|
|
||||||
|
|
||||||
|
if (command.StartLeave.TryToGeorgianDateTime(out var start) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ شروع صحیح نیست");
|
||||||
|
}
|
||||||
|
|
||||||
|
var end = new DateTime();
|
||||||
|
if (command.PaidLeaveType == PaidLeaveType.Daily)
|
||||||
|
{
|
||||||
|
if (command.EndLeave.TryToGeorgianDateTime(out end) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ پایان صحیح نیست");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end = start;
|
||||||
|
|
||||||
|
|
||||||
|
var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId, command.IsInvallid);
|
||||||
|
|
||||||
|
|
||||||
|
if (checkErr.HasChekout)
|
||||||
|
return op.Failed(checkErr.CheckoutErrMessage);
|
||||||
|
if (checkErr.HasNotContract)
|
||||||
|
return op.Failed(checkErr.ContractErrMessage);
|
||||||
|
if (checkErr.HasLeftWork)
|
||||||
|
return op.Failed(checkErr.LeftWorlErrMessage);
|
||||||
|
|
||||||
|
if (start > end)
|
||||||
|
return op.Failed("تارخ شروع از پایان بزرگتر است");
|
||||||
|
|
||||||
|
|
||||||
|
var totalhourses = "-";
|
||||||
|
if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Hourly)
|
||||||
|
{
|
||||||
|
|
||||||
|
start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds);
|
||||||
|
end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds);
|
||||||
|
if (start > end)
|
||||||
|
end = end.AddDays(1);
|
||||||
|
|
||||||
|
var totalLeavHourses = (end - start);
|
||||||
|
var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}";
|
||||||
|
var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}";
|
||||||
|
totalhourses = $"{h}:{m}";
|
||||||
|
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
|
||||||
|
var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end;
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
(x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
}
|
||||||
|
else if (command.LeaveType == LeaveType.PaidLeave && command.PaidLeaveType == PaidLeaveType.Daily)
|
||||||
|
{
|
||||||
|
var totalLeavHourses = (end - start).TotalDays + 1;
|
||||||
|
totalhourses = $"{(int)totalLeavHourses}";
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
|
||||||
|
|
||||||
|
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(command.WorkshopId, command.EmployeeId);
|
||||||
|
|
||||||
|
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(command.EmployeeId, command.WorkshopId, start, end);
|
||||||
|
var hasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
|
||||||
|
if (hasRollCall)
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((end - start).TotalDays > 1 && employeeSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular)
|
||||||
|
{
|
||||||
|
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating &&
|
||||||
|
command.SelectedShift == null)
|
||||||
|
{
|
||||||
|
return op.Failed("لطفا شیفت پرسنل را انتخاب کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command.SelectedShift != null)
|
||||||
|
{
|
||||||
|
var validShiftStart = TimeOnly.TryParse(command.SelectedShift.StartTime, out var shiftStart);
|
||||||
|
var validShiftEnd = TimeOnly.TryParse(command.SelectedShift.EndTime, out var shiftEnd);
|
||||||
|
|
||||||
|
if (validShiftStart == false && validShiftEnd == false)
|
||||||
|
{
|
||||||
|
return op.Failed("شیفت های انتخاب شده معتبر نمیباشد");
|
||||||
|
}
|
||||||
|
|
||||||
|
var shiftStartDateTime = new DateTime(new DateOnly(), shiftStart);
|
||||||
|
var shiftEndDateTime = new DateTime(new DateOnly(), shiftEnd);
|
||||||
|
if (shiftEndDateTime <= shiftStartDateTime)
|
||||||
|
shiftEndDateTime = shiftEndDateTime.AddDays(1);
|
||||||
|
shiftDuration = shiftEndDateTime - shiftStartDateTime;
|
||||||
|
hasShiftDuration = true;
|
||||||
|
}
|
||||||
|
else if (employeeSettings is { WorkshopShiftStatus: WorkshopShiftStatus.Irregular })
|
||||||
|
{
|
||||||
|
if ((end - start).TotalDays > 1)
|
||||||
|
{
|
||||||
|
return op.Failed("شما نمیتوانید بیشتر از یک روز مرخصی روزانه ثبت کنید");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (isActive)
|
||||||
|
{
|
||||||
|
shiftDuration = employeeSettings.IrregularShift.WorkshopIrregularShifts switch
|
||||||
|
{
|
||||||
|
WorkshopIrregularShifts.TwelveThirtySix => TimeSpan.FromHours(12),
|
||||||
|
WorkshopIrregularShifts.TwelveTwentyFour => TimeSpan.FromHours(12),
|
||||||
|
WorkshopIrregularShifts.TwentyFourFortyEight => TimeSpan.FromHours(24),
|
||||||
|
WorkshopIrregularShifts.TwentyFourTwentyFour => TimeSpan.FromHours(24),
|
||||||
|
_ => new TimeSpan()
|
||||||
|
};
|
||||||
|
hasShiftDuration = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command.LeaveType == LeaveType.SickLeave)
|
||||||
|
{
|
||||||
|
var totalLeavHourses = (end - start).TotalDays + 1;
|
||||||
|
totalhourses = $"{(int)totalLeavHourses}";
|
||||||
|
command.PaidLeaveType = PaidLeaveType.Daily;
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))
|
||||||
|
return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است");
|
||||||
|
if (_leaveRepository.Exists(x =>
|
||||||
|
x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی"))
|
||||||
|
return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است");
|
||||||
|
}
|
||||||
|
var year = Convert.ToInt32(command.StartLeave.Substring(0, 4));
|
||||||
|
var month = Convert.ToInt32(command.StartLeave.Substring(5, 2));
|
||||||
|
var paidLeaveType = command.PaidLeaveType == PaidLeaveType.Daily ? "روزانه" : "ساعتی";
|
||||||
|
var leaveType = command.LeaveType == LeaveType.PaidLeave ? "استحقاقی" : "استعلاجی";
|
||||||
|
var validation = ValidateNewLeaveWithExistingRollCalls(command.WorkshopId, command.EmployeeId, paidLeaveType, start, end);
|
||||||
|
if (validation.IsSuccedded == false)
|
||||||
|
return validation;
|
||||||
|
|
||||||
|
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||||
|
var workshopName = _workshopRepository.GetDetails(command.WorkshopId).WorkshopName;
|
||||||
|
var leave = new Company.Domain.LeaveAgg.Leave(start, end, totalhourses, command.WorkshopId, command.EmployeeId
|
||||||
|
, paidLeaveType, leaveType, employeeFullName, workshopName, command.IsAccepted, command.Decription,
|
||||||
|
year, month, shiftDuration, hasShiftDuration, command.IsInvallid);
|
||||||
|
await _leaveRepository.CreateAsync(leave);
|
||||||
|
await _leaveRepository.SaveChangesAsync();
|
||||||
|
return op.Succcedded();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<OperationResult<RotatingShiftDto>> HasRotatingShift(long workshopId,long employeeId, string startLeaveDate)
|
||||||
|
{
|
||||||
|
var op = new OperationResult<RotatingShiftDto>();
|
||||||
|
var result = new RotatingShiftDto();
|
||||||
|
if (startLeaveDate.TryToGeorgianDateTime(out var startDateTimeGr) == false)
|
||||||
|
{
|
||||||
|
return op.Failed("تاریخ شروع صحیح نیست");
|
||||||
|
}
|
||||||
|
var employeeSettings = _employeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(workshopId, employeeId);
|
||||||
|
//اگر گروه بندی نداشت
|
||||||
|
if (employeeSettings == null)
|
||||||
|
{
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
var isActive = _rollCallEmployeeStatusApplication.IsActiveInPeriod(employeeId, workshopId, startDateTimeGr, startDateTimeGr);
|
||||||
|
|
||||||
|
result.HasRollCall = isActive && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Rotating;
|
||||||
|
result.RotatingShifts = employeeSettings.CustomizeRotatingShifts.Select(x =>
|
||||||
|
new CustomizeRotatingShiftsViewModel()
|
||||||
|
{
|
||||||
|
EndTime = x.EndTime.ToString("HH:mm"),
|
||||||
|
StartTime = x.StartTime.ToString("HH:mm")
|
||||||
|
}).ToList();
|
||||||
|
return op.Succcedded(result);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<LeaveListPrintDto> ListPrint(List<long> ids)
|
||||||
|
{
|
||||||
|
return await _leaveRepository.ListPrint(ids);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public async Task<string> GetHourlyLeaveDuration(string startHours, string endHours)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(startHours) || string.IsNullOrWhiteSpace(endHours))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
var start = new DateTime();
|
||||||
|
var end = new DateTime();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
start = Convert.ToDateTime(startHours);
|
||||||
|
end = Convert.ToDateTime(endHours);
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
if (start > end || start == end)
|
||||||
|
{
|
||||||
|
end = end.AddDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
var HourlyDate = (end - start);
|
||||||
|
var hours = (int)HourlyDate.TotalHours;
|
||||||
|
var minutes = HourlyDate.TotalMinutes % 60;
|
||||||
|
|
||||||
|
if (hours > 0 && minutes > 0)
|
||||||
|
{
|
||||||
|
return (hours + " " + "ساعت و" + " " + minutes + " " + "دقیقه");
|
||||||
|
}
|
||||||
|
else if (hours > 0 && minutes == 0)
|
||||||
|
{
|
||||||
|
return (hours + " " + "ساعت ");
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (hours == 0 && minutes > 0)
|
||||||
|
{
|
||||||
|
return (minutes + " " + "دقیقه");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return ($"{hours}");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<string> GetDailyLeaveDuration(string startDate, string endDate)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(startDate) || string.IsNullOrWhiteSpace(endDate))
|
||||||
|
return "";
|
||||||
|
|
||||||
|
if (startDate.TryToGeorgianDateTime(out var start) == false || endDate.TryToGeorgianDateTime(out var end) == false)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (end >= start)
|
||||||
|
{
|
||||||
|
var daysSpan = (end - start).TotalDays + 1;
|
||||||
|
return $"{(int)daysSpan} روز";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return "تاریخ پایان از تاریخ شروع کوچکتر است.";
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user