Compare commits
265 Commits
Feature/Cl
...
3f55446f82
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f55446f82 | |||
| 3b4f880d54 | |||
| fb239e3159 | |||
| c844867cab | |||
| 779514f5c0 | |||
| bc491eec18 | |||
| 67910d2fa5 | |||
| 9475c786d3 | |||
| db32b1e6ea | |||
| 79a9d72b86 | |||
| dddc4b143a | |||
| a8cb226d20 | |||
| ffe8fa67e2 | |||
| a0d2023a6c | |||
| c2fdc217b9 | |||
| db0047d3d3 | |||
| fa4c39904a | |||
|
|
a14a78309e | ||
|
|
4ccade4c7a | ||
| 085d138bc5 | |||
| 3dace574ff | |||
| bf2a102a55 | |||
| 88744bd4cf | |||
| 5942075dd6 | |||
| 61015ae5c1 | |||
| 57a5000124 | |||
| 7cbb9eef69 | |||
|
|
7a065e9d16 | ||
| 0e7787dd56 | |||
|
|
e2bab8c1ce | ||
|
|
b088d3089d | ||
|
|
45b4690066 | ||
| 179de86840 | |||
| e0d10510e0 | |||
| a55492b16a | |||
| 9596c8f8b6 | |||
| 8622f12f12 | |||
| a20a847065 | |||
| 258a809451 | |||
|
|
6285c7320e | ||
| 9bca1b81d6 | |||
| 9ff6b5cf56 | |||
|
|
04642b7257 | ||
| c1c9fe51cb | |||
|
|
0d2ac58bbb | ||
| 43ccb3a1dd | |||
| 0134111aba | |||
|
|
3cc7adae35 | ||
|
|
c97ea5356f | ||
| 69f4819bf6 | |||
|
|
1257e15b62 | ||
|
|
331fb24a99 | ||
| 3be1547137 | |||
| 900b4b3f4d | |||
| bdc6f95af8 | |||
| 7a73e69afa | |||
| 5c3c9739d1 | |||
|
|
21302803b6 | ||
| 355ec72140 | |||
| b22aa86aea | |||
| f0feac9601 | |||
|
|
8ec13ffae1 | ||
|
|
5508d4e88f | ||
| 43abb74c61 | |||
| 73e6681baa | |||
| 90fa0ac8f8 | |||
| 90b2fd2eab | |||
| eb8352e8fc | |||
| 4c7599b568 | |||
| d179c90c48 | |||
|
|
2fc124bf6d | ||
|
|
1d88ca0fbb | ||
|
|
e2911dfc2a | ||
|
|
cfb96d1277 | ||
|
|
b5c5be2cb6 | ||
| 8850328fd4 | |||
| b7172630e2 | |||
|
|
f5c8888137 | ||
|
|
4d7923936e | ||
| 0604514190 | |||
| 915f16c7c0 | |||
|
|
532065e3a8 | ||
|
|
f7bfa37a77 | ||
| 87c3cebb60 | |||
| d9c431e20e | |||
| ff5180eb75 | |||
| a1c9335487 | |||
|
|
2746bf69ea | ||
|
|
77dbb50512 | ||
|
|
1c7e8824c7 | ||
| 20ece4886c | |||
| 0eff1b9a66 | |||
| 0d72392701 | |||
|
|
0d33d79620 | ||
|
|
e4355faffc | ||
| 8f6007835c | |||
| 05d860795e | |||
|
|
577fe5db76 | ||
| 607c0780b6 | |||
| 587fa40d81 | |||
| b741ab9ed2 | |||
| b6fde4903a | |||
| 0772604432 | |||
|
|
ec8333c715 | ||
|
|
8aa93e089a | ||
| 59891d1199 | |||
| 7cb39b1b92 | |||
|
|
5580d56874 | ||
|
|
423b49e6e7 | ||
|
|
0ab3052251 | ||
| 38027352d6 | |||
| 43562fb49c | |||
|
|
5202779d9f | ||
| 80a58f8cdc | |||
| 7c611825a4 | |||
| ef49302f8a | |||
|
|
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 | |||
| 4ab9f60932 | |||
| 385a885c93 | |||
| f99f199a77 | |||
| 9cfae54db3 | |||
| 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 | |||
| 7ce7854091 | |||
| 4c638cbdae | |||
| 39a5918a11 | |||
| b9e271de1a | |||
| e661bc2dcb | |||
| 8e5d4c312e | |||
| 4b39994de6 | |||
| 0dd2dc7c43 | |||
| 20c00893b6 | |||
| b0d174a575 | |||
| 293ea0f6f4 | |||
| 3ce4cf3966 | |||
| 0fbd5c9d3e | |||
| 8436f70aa0 | |||
| 9cf8447a83 | |||
| e124a4d5d9 | |||
| 7b9e7881c6 |
9
.github/workflows/dotnet-developPublish.yml
vendored
9
.github/workflows/dotnet-developPublish.yml
vendored
@@ -5,8 +5,6 @@ on:
|
||||
branches:
|
||||
- Main
|
||||
|
||||
env:
|
||||
DOTNET_ENVIRONMENT: Development
|
||||
|
||||
jobs:
|
||||
build-and-deploy:
|
||||
@@ -37,12 +35,11 @@ jobs:
|
||||
& "C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" `
|
||||
-verb:sync `
|
||||
-source:contentPath="$publishFolder" `
|
||||
-dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName="Administrator",password="R",authType="Basic" `
|
||||
-dest:contentPath="dadmehrg",computerName="https://$env:SERVER_HOST:8172/msdeploy.axd?site=gozareshgir",userName="$env:DEPLOY_USER",password="$env:DEPLOY_PASSWORD",authType="Basic" `
|
||||
-allowUntrusted `
|
||||
-enableRule:AppOffline
|
||||
|
||||
|
||||
|
||||
env:
|
||||
SERVER_HOST: your-server-ip-or-domain
|
||||
SERVER_HOST: 171.22.24.15
|
||||
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
|
||||
DEPLOY_PASSWORD: ${{ secrets.DEPLOY_PASSWORD }}
|
||||
|
||||
9
.gitignore
vendored
9
.gitignore
vendored
@@ -362,3 +362,12 @@ MigrationBackup/
|
||||
# # Fody - auto-generated XML schema
|
||||
# FodyWeavers.xsd
|
||||
.idea
|
||||
/ServiceHost/appsettings.Development.json
|
||||
/ServiceHost/appsettings.json
|
||||
|
||||
# Storage folder - ignore all uploaded files, thumbnails, and temporary files
|
||||
ServiceHost/Storage
|
||||
|
||||
.env
|
||||
.env.*
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
public enum TypeOfSmsSetting
|
||||
{
|
||||
//همه انواع پیامک
|
||||
All = 0,
|
||||
|
||||
/// <summary>
|
||||
/// پیامک
|
||||
@@ -23,7 +25,7 @@ public enum TypeOfSmsSetting
|
||||
|
||||
/// <summary>
|
||||
/// پیامک
|
||||
/// هشدار اول
|
||||
/// هشدار بدهی
|
||||
/// </summary>
|
||||
Warning,
|
||||
|
||||
@@ -38,4 +40,19 @@ public enum TypeOfSmsSetting
|
||||
/// </summary>
|
||||
InstitutionContractConfirm,
|
||||
|
||||
/// <summary>
|
||||
/// ارسال کد تاییدیه قرارداد مالی
|
||||
/// </summary>
|
||||
SendInstitutionContractConfirmationCode,
|
||||
|
||||
/// <summary>
|
||||
/// لینک تاییدیه ایجاد قرارداد مالی
|
||||
/// </summary>
|
||||
SendInstitutionContractConfirmationLink,
|
||||
|
||||
/// <summary>
|
||||
/// یادآور وظایف
|
||||
/// </summary>
|
||||
TaskReminder,
|
||||
|
||||
}
|
||||
@@ -7,7 +7,7 @@ namespace _0_Framework.Application;
|
||||
public class PagedResult<T> where T : class
|
||||
{
|
||||
public int TotalCount { get; set; }
|
||||
public List<T> List { get; set; }
|
||||
public List<T> List { get; set; } = [];
|
||||
}
|
||||
public class PagedResult<T,TMeta>:PagedResult<T> where T : class
|
||||
{
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Net.Http;
|
||||
using System.Net.Http.Json;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace _0_Framework.Application.PaymentGateway;
|
||||
@@ -12,18 +13,24 @@ public class SepehrPaymentGateway:IPaymentGateway
|
||||
{
|
||||
private readonly HttpClient _httpClient;
|
||||
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.BaseAddress = new Uri("https://sepehr.shaparak.ir/Rest/V1/PeymentApi/");
|
||||
}
|
||||
|
||||
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>();
|
||||
_logger.LogInformation("Initializing extra data with FinancialInvoiceId: {FinancialInvoiceId}", command.FinancialInvoiceId);
|
||||
command.ExtraData.Add("financialInvoiceId", command.FinancialInvoiceId);
|
||||
var extraData = JsonConvert.SerializeObject(command.ExtraData);
|
||||
_logger.LogInformation("Serialized extra data payload: {Payload}", extraData);
|
||||
|
||||
var res = await _httpClient.PostAsJsonAsync("GetToken", new
|
||||
{
|
||||
TerminalID = TerminalId,
|
||||
@@ -32,21 +39,25 @@ public class SepehrPaymentGateway:IPaymentGateway
|
||||
callbackURL = command.CallBackUrl,
|
||||
payload = extraData
|
||||
}, cancellationToken: cancellationToken);
|
||||
_logger.LogInformation("Create payment request sent. StatusCode: {StatusCode}", res.StatusCode);
|
||||
// خواندن محتوای پاسخ
|
||||
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
||||
|
||||
_logger.LogInformation("Create payment response content: {Content}", content);
|
||||
|
||||
// تبدیل پاسخ JSON به آبجکت داتنت
|
||||
var json = System.Text.Json.JsonDocument.Parse(content);
|
||||
_logger.LogInformation("Create payment JSON parsed successfully.");
|
||||
|
||||
// گرفتن مقدار AccessToken
|
||||
var accessToken = json.RootElement.GetProperty("Accesstoken").ToString();
|
||||
var status = json.RootElement.GetProperty("Status").ToString();
|
||||
|
||||
_logger.LogInformation("Create payment parsed values. Status: {Status}, AccessToken: {AccessToken}", status, accessToken);
|
||||
|
||||
return new PaymentGatewayResponse
|
||||
{
|
||||
Status = status,
|
||||
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)
|
||||
{
|
||||
_logger.LogInformation("Verify payment started. DigitalReceipt: {DigitalReceipt}", command.DigitalReceipt);
|
||||
var res = await _httpClient.PostAsJsonAsync("Advice", new
|
||||
{
|
||||
digitalreceipt = command.DigitalReceipt,
|
||||
Tid = TerminalId,
|
||||
}, cancellationToken: cancellationToken);
|
||||
|
||||
_logger.LogInformation("Verify payment request sent. StatusCode: {StatusCode}", res.StatusCode);
|
||||
// خواندن محتوای پاسخ
|
||||
var content = await res.Content.ReadAsStringAsync(cancellationToken);
|
||||
|
||||
_logger.LogInformation("Verify payment response content: {Content}", content);
|
||||
|
||||
// تبدیل پاسخ JSON به آبجکت داتنت
|
||||
var json = System.Text.Json.JsonDocument.Parse(content);
|
||||
|
||||
|
||||
_logger.LogInformation("Verify payment JSON parsed successfully.");
|
||||
|
||||
var message = json.RootElement.GetProperty("Message").GetString();
|
||||
var status = json.RootElement.GetProperty("Status").GetString();
|
||||
_logger.LogInformation("Verify payment parsed values. Status: {Status}, Message: {Message}", status, message);
|
||||
return new PaymentGatewayResponse
|
||||
{
|
||||
Status = status,
|
||||
|
||||
@@ -17,4 +17,35 @@ public class ApiResultViewModel
|
||||
public string DeliveryUnixTime { get; set; }
|
||||
public string DeliveryColor { 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; }
|
||||
public string FullName { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class SmsDetailsDto
|
||||
{
|
||||
|
||||
|
||||
public string MessageText { 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; }
|
||||
public string FullName { get; set; }
|
||||
|
||||
}
|
||||
@@ -16,9 +16,22 @@ public interface ISmsService
|
||||
/// <param name="code"></param>
|
||||
/// <returns></returns>
|
||||
Task<SentSmsViewModel> SendVerifyCodeToClient(string number, string code);
|
||||
bool SendAccountsInfo(string number,string fullName, string userName);
|
||||
bool SendAccountsInfo(string number, string fullName, string userName);
|
||||
Task<ApiResultViewModel> GetByMessageId(int messId);
|
||||
Task<List<ApiResultViewModel>> GetApiResult(string startDate, string endDate);
|
||||
|
||||
#region ForApi
|
||||
|
||||
Task<List<ApiReportDto>> GetApiReport(string startDate, string endDate);
|
||||
/// <summary>
|
||||
/// دریافت جزئیات پیامک
|
||||
/// </summary>
|
||||
/// <param name="messId"></param>
|
||||
/// <param name="fullName"></param>
|
||||
/// <returns></returns>
|
||||
Task<SmsDetailsDto> GetSmsDetailsByMessageId(int messId, string fullName);
|
||||
#endregion
|
||||
|
||||
string DeliveryStatus(byte? dv);
|
||||
string DeliveryColorStatus(byte? dv);
|
||||
string UnixTimeStampToDateTime(int? unixTimeStamp);
|
||||
@@ -26,9 +39,9 @@ public interface ISmsService
|
||||
#region Mahan
|
||||
|
||||
Task<double> GetCreditAmount();
|
||||
|
||||
|
||||
public Task<bool> SendInstitutionCreationVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId, string typeOfSms = null);
|
||||
|
||||
|
||||
public Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||
long contractingPartyId, long institutionContractId);
|
||||
|
||||
@@ -61,9 +74,10 @@ public interface ISmsService
|
||||
/// <param name="aprove"></param>
|
||||
/// <returns></returns>
|
||||
Task<(byte status, string message, int messaeId, bool isSucceded)> MonthlyBill(string number, int tamplateId, string fullname, string amount, string id, string aprove);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// پیامک مسدودی طرف حساب
|
||||
/// قراردادهای قدیم
|
||||
/// </summary>
|
||||
/// <param name="number"></param>
|
||||
/// <param name="fullname"></param>
|
||||
@@ -74,6 +88,19 @@ public interface ISmsService
|
||||
/// <returns></returns>
|
||||
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
|
||||
|
||||
#region AlarmMessage
|
||||
|
||||
@@ -31,8 +31,9 @@ public static class StaticWorkshopAccounts
|
||||
/// 381 - مهدی قربانی
|
||||
/// 392 - عمار حسن دوست
|
||||
/// 20 - سمیرا الهی نیا
|
||||
/// 322 - ماهان چمنی
|
||||
/// </summary>
|
||||
public static List<long> StaticAccountIds = [2, 3, 380, 381, 392, 20, 476];
|
||||
public static List<long> StaticAccountIds = [2, 3, 380, 381, 392, 20, 476,322];
|
||||
|
||||
/// <summary>
|
||||
/// این تاریخ در جدول اکانت لفت ورک به این معنیست
|
||||
|
||||
@@ -34,7 +34,7 @@ public interface IAccountApplication
|
||||
OperationResult DeActive(long id);
|
||||
OperationResult DirectLogin(long id);
|
||||
|
||||
AccountLeftWorkViewModel WorkshopList(long accountId);
|
||||
// AccountLeftWorkViewModel WorkshopList(long accountId);
|
||||
OperationResult SaveWorkshopAccount(
|
||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||
string startDate,
|
||||
@@ -75,7 +75,6 @@ public interface IAccountApplication
|
||||
void CameraLogin(CameraLoginRequest request);
|
||||
|
||||
Task<GetPmUserDto> GetPmUserAsync(long accountId);
|
||||
|
||||
}
|
||||
|
||||
public class CameraLoginRequest
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<NuGetAudit>false</NuGetAudit>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -18,7 +18,6 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
using Shared.Contracts.PmUser.Commands;
|
||||
using Shared.Contracts.PmUser.Queries;
|
||||
|
||||
@@ -48,7 +47,13 @@ public class AccountApplication : IAccountApplication
|
||||
private readonly IPmUserCommandService _pmUserCommandService;
|
||||
|
||||
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;
|
||||
_roleRepository = roleRepository;
|
||||
@@ -68,7 +73,6 @@ public class AccountApplication : IAccountApplication
|
||||
_fileUploader = fileUploader;
|
||||
_passwordHasher = passwordHasher;
|
||||
_accountRepository = accountRepository;
|
||||
|
||||
}
|
||||
|
||||
public OperationResult EditClient(EditClientAccount command)
|
||||
@@ -89,7 +93,8 @@ public class AccountApplication : IAccountApplication
|
||||
(x.Mobile == command.Mobile && x.id != command.Id)))
|
||||
return opreation.Failed("شماره موبایل تکراری است");
|
||||
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("کد ملی تکراری است");
|
||||
if (_accountRepository.Exists(x =>
|
||||
(x.Email == command.Email && !string.IsNullOrWhiteSpace(x.Email) && x.id != command.Id)))
|
||||
@@ -97,7 +102,8 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
var path = $"profilePhotos";
|
||||
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();
|
||||
return opreation.Succcedded();
|
||||
}
|
||||
@@ -142,8 +148,8 @@ public class AccountApplication : IAccountApplication
|
||||
if (_fileUploader != null)
|
||||
{
|
||||
picturePath = _fileUploader.Upload(command.ProfilePhoto, path);
|
||||
|
||||
}
|
||||
|
||||
var account = new Account(command.Fullname, command.Username, password, command.Mobile, command.RoleId,
|
||||
picturePath, roleName.Name, "true", "false");
|
||||
|
||||
@@ -158,7 +164,8 @@ public class AccountApplication : IAccountApplication
|
||||
if (command.UserRoles == null)
|
||||
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
||||
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));
|
||||
if (!createPm.isSuccess)
|
||||
{
|
||||
@@ -167,7 +174,6 @@ public class AccountApplication : IAccountApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var url = "api/user/create";
|
||||
//var key = SecretKeys.ProgramManagerInternalApi;
|
||||
|
||||
@@ -252,29 +258,30 @@ public class AccountApplication : IAccountApplication
|
||||
// $"api/user/{account.id}",
|
||||
// key
|
||||
//);
|
||||
var userResult =await _pmUserQueryService.GetPmUserDataByAccountId(account.id);
|
||||
var userResult = await _pmUserQueryService.GetPmUserDataByAccountId(account.id);
|
||||
|
||||
if (command.UserRoles == null)
|
||||
return operation.Failed("حداقل یک نقش برای کاربر مدیریت پروژه لازم است");
|
||||
var pmUserRoles = command.UserRoles.Where(x => x > 0).ToList();
|
||||
|
||||
//اگر کاربر در پروگرام منیجر قبلا ایجاد شده
|
||||
if (userResult.Id >0)
|
||||
if (userResult.Id > 0)
|
||||
{
|
||||
if (!command.UserRoles.Any())
|
||||
{
|
||||
_unitOfWork.RollbackAccountContext();
|
||||
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));
|
||||
if (!editPm.isSuccess)
|
||||
{
|
||||
_unitOfWork.RollbackAccountContext();
|
||||
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
||||
}
|
||||
|
||||
|
||||
//var parameters = new EditUserCommand(
|
||||
// command.Fullname,
|
||||
// command.Username,
|
||||
@@ -302,7 +309,6 @@ public class AccountApplication : IAccountApplication
|
||||
// _unitOfWork.RollbackAccountContext();
|
||||
// return operation.Failed(response.Error);
|
||||
//}
|
||||
|
||||
}
|
||||
else //اگر کاربر قبلا ایجاد نشده
|
||||
{
|
||||
@@ -315,19 +321,15 @@ public class AccountApplication : IAccountApplication
|
||||
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));
|
||||
if (!createPm.isSuccess)
|
||||
{
|
||||
_unitOfWork.RollbackAccountContext();
|
||||
return operation.Failed("خطا در ویرایش کاربر پروگرام منیجر");
|
||||
}
|
||||
|
||||
|
||||
|
||||
//var parameters = new CreateProgramManagerUser(
|
||||
@@ -362,7 +364,6 @@ public class AccountApplication : IAccountApplication
|
||||
// return operation.Failed(response.Error);
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_unitOfWork.CommitAccountContext();
|
||||
@@ -376,7 +377,6 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
public OperationResult Login(Login command)
|
||||
{
|
||||
|
||||
long idAutoriz = 0;
|
||||
var operation = new OperationResult();
|
||||
if (string.IsNullOrWhiteSpace(command.Password))
|
||||
@@ -401,21 +401,27 @@ public class AccountApplication : IAccountApplication
|
||||
.Select(x => x.Code)
|
||||
.ToList();
|
||||
//PmPermission
|
||||
var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id).GetAwaiter().GetResult();
|
||||
if (PmUserData.AccountId > 0 && PmUserData.IsActive)
|
||||
var PmUserData = _pmUserQueryService.GetPmUserDataByAccountId(account.id)
|
||||
.GetAwaiter().GetResult();
|
||||
long? pmUserId = null;
|
||||
if (PmUserData != null)
|
||||
{
|
||||
|
||||
var pmUserPermissions =
|
||||
PmUserData.RoleListDto != null
|
||||
? PmUserData.RoleListDto
|
||||
.SelectMany(x => x.Permissions)
|
||||
.Where(p => p != 99)
|
||||
.Distinct()
|
||||
.ToList()
|
||||
: new List<int>();
|
||||
permissions.AddRange(pmUserPermissions);
|
||||
if (PmUserData.AccountId > 0 && PmUserData.IsActive)
|
||||
{
|
||||
var pmUserPermissions =
|
||||
PmUserData.RoleListDto != null
|
||||
? PmUserData.RoleListDto
|
||||
.SelectMany(x => x.Permissions)
|
||||
.Where(p => p != 99)
|
||||
.Distinct()
|
||||
.ToList()
|
||||
: new List<int>();
|
||||
permissions.AddRange(pmUserPermissions);
|
||||
}
|
||||
|
||||
pmUserId = PmUserData.Id > 0 ? PmUserData.Id : null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int? positionValue;
|
||||
if (account.PositionId != null)
|
||||
@@ -426,24 +432,25 @@ public class AccountApplication : IAccountApplication
|
||||
{
|
||||
positionValue = null;
|
||||
}
|
||||
var pmUserId = PmUserData.AccountId > 0 ? PmUserData.AccountId : null;
|
||||
|
||||
var authViewModel = new AuthViewModel(account.id, account.RoleId, account.Fullname
|
||||
, account.Username, account.Mobile, account.ProfilePhoto,
|
||||
permissions, account.RoleName, account.AdminAreaPermission,
|
||||
account.ClientAriaPermission, positionValue,0,pmUserId);
|
||||
permissions, account.RoleName, account.AdminAreaPermission,
|
||||
account.ClientAriaPermission, positionValue, 0, pmUserId);
|
||||
|
||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
||||
account.IsActiveString == "true")
|
||||
{
|
||||
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
||||
authViewModel.Permissions = clientPermissions;
|
||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
||||
{
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Id = x.Id,
|
||||
Name = x.WorkshopFullName,
|
||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x =>
|
||||
new WorkshopClaim
|
||||
{
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Id = x.Id,
|
||||
Name = x.WorkshopFullName,
|
||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||
authViewModel.WorkshopList = workshopList;
|
||||
if (workshopList.Any())
|
||||
{
|
||||
@@ -456,10 +463,14 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
_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;
|
||||
|
||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" && account.IsActiveString == "true")
|
||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false" &&
|
||||
account.IsActiveString == "true")
|
||||
idAutoriz = 2;
|
||||
}
|
||||
|
||||
@@ -471,7 +482,8 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
||||
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")
|
||||
{
|
||||
_authHelper.CameraSignIn(authViewModel);
|
||||
@@ -481,7 +493,6 @@ public class AccountApplication : IAccountApplication
|
||||
{
|
||||
idAutoriz = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (subAccount != null)
|
||||
@@ -511,12 +522,14 @@ public class AccountApplication : IAccountApplication
|
||||
authViewModel.WorkshopSlug = _passwordHasher.SlugHasher(workshop.WorkshopId);
|
||||
authViewModel.WorkshopId = workshop.WorkshopId;
|
||||
}
|
||||
|
||||
_authHelper.Signin(authViewModel);
|
||||
idAutoriz = 2;
|
||||
}
|
||||
|
||||
return operation.Succcedded(idAutoriz);
|
||||
}
|
||||
|
||||
public OperationResult LoginWithMobile(long id)
|
||||
{
|
||||
var operation = new OperationResult();
|
||||
@@ -525,7 +538,6 @@ public class AccountApplication : IAccountApplication
|
||||
return operation.Failed(ApplicationMessages.WrongUserPass);
|
||||
|
||||
|
||||
|
||||
var permissions = _roleRepository.Get(account.RoleId)
|
||||
.Permissions
|
||||
.Select(x => x.Code)
|
||||
@@ -541,20 +553,22 @@ public class AccountApplication : IAccountApplication
|
||||
}
|
||||
|
||||
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" &&
|
||||
account.IsActiveString == "true")
|
||||
{
|
||||
var clientPermissions = _accountPermissionSubtitle1Repository.GetAllPermissionCodes();
|
||||
authViewModel.Permissions = clientPermissions;
|
||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x => new WorkshopClaim
|
||||
{
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Id = x.Id,
|
||||
Name = x.WorkshopFullName,
|
||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||
var workshopList = _workshopRepository.GetWorkshopsByClientAccountId(account.id).Select(x =>
|
||||
new WorkshopClaim
|
||||
{
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Id = x.Id,
|
||||
Name = x.WorkshopFullName,
|
||||
Slug = _passwordHasher.SlugHasher(x.Id)
|
||||
}).OrderByDescending(x => x.PersonnelCount).ToList();
|
||||
authViewModel.WorkshopList = workshopList;
|
||||
if (workshopList.Any())
|
||||
{
|
||||
@@ -567,13 +581,15 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
_authHelper.Signin(authViewModel);
|
||||
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;
|
||||
|
||||
if (account.ClientAriaPermission == "true" && account.AdminAreaPermission == "false")
|
||||
idAutoriz = 2;
|
||||
return operation.Succcedded(idAutoriz);
|
||||
}
|
||||
|
||||
public void Logout()
|
||||
{
|
||||
_authHelper.SignOut();
|
||||
@@ -609,6 +625,7 @@ public class AccountApplication : IAccountApplication
|
||||
_accountRepository.SaveChanges();
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
public EditAccount GetByVerifyCode(string code, string phone)
|
||||
{
|
||||
return _accountRepository.GetByVerifyCode(code, phone);
|
||||
@@ -637,7 +654,6 @@ public class AccountApplication : IAccountApplication
|
||||
await _accountRepository.RemoveCode(id);
|
||||
|
||||
return operation.Succcedded();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -682,7 +698,6 @@ public class AccountApplication : IAccountApplication
|
||||
return operation.Failed("این اکانت وجود ندارد");
|
||||
|
||||
|
||||
|
||||
var permissions = _roleRepository.Get(account.RoleId)
|
||||
.Permissions
|
||||
.Select(x => x.Code)
|
||||
@@ -691,7 +706,8 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
_authHelper.SignOut();
|
||||
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
|
||||
{
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
@@ -711,9 +727,11 @@ public class AccountApplication : IAccountApplication
|
||||
authViewModel.WorkshopName = workshop.Name;
|
||||
authViewModel.WorkshopId = workshop.Id;
|
||||
}
|
||||
|
||||
_authHelper.Signin(authViewModel);
|
||||
return operation.Succcedded(2);
|
||||
}
|
||||
|
||||
public OperationResult DirectCameraLogin(long cameraAccountId)
|
||||
{
|
||||
var prAcc = _authHelper.CurrentAccountInfo();
|
||||
@@ -723,47 +741,45 @@ public class AccountApplication : IAccountApplication
|
||||
return operation.Failed("این اکانت وجود ندارد");
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
_authHelper.SignOut();
|
||||
|
||||
|
||||
var mobile = string.IsNullOrWhiteSpace(cameraAccount.Mobile) ? " " : cameraAccount.Mobile;
|
||||
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")
|
||||
{
|
||||
_authHelper.CameraSignIn(authViewModel);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
return operation.Failed("این اکانت غیر فعال شده است");
|
||||
}
|
||||
|
||||
return operation.Succcedded(2);
|
||||
}
|
||||
|
||||
|
||||
public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
{
|
||||
string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||
List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
||||
List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
||||
List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
||||
List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
||||
(string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
||||
return new AccountLeftWorkViewModel()
|
||||
{
|
||||
AccountId = accountId,
|
||||
AccountFullName = fullname,
|
||||
StartDateFa = byAccountId.StartWorkFa,
|
||||
LeftDateFa = byAccountId.LeftWorkFa,
|
||||
WorkshopAccountlist = source,
|
||||
WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
||||
AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
||||
};
|
||||
}
|
||||
// public AccountLeftWorkViewModel WorkshopList(long accountId)
|
||||
// {
|
||||
// string fullname = this._accountRepository.GetById(accountId).Fullname;
|
||||
// List<WorkshopAccountlistViewModel> source = _accountLeftworkRepository.WorkshopList(accountId);
|
||||
// List<long> userWorkshopIds = source.Select(x => x.WorkshopId).ToList();
|
||||
// List<WorkshopSelectList> allWorkshops = this._accountLeftworkRepository.GetAllWorkshops();
|
||||
// List<AccountViewModel> accountSelectList = this._accountRepository.GetAdminAccountSelectList();
|
||||
// (string StartWorkFa, string LeftWorkFa) byAccountId = this._accountLeftworkRepository.GetByAccountId(accountId);
|
||||
// return new AccountLeftWorkViewModel()
|
||||
// {
|
||||
// AccountId = accountId,
|
||||
// AccountFullName = fullname,
|
||||
// StartDateFa = byAccountId.StartWorkFa,
|
||||
// LeftDateFa = byAccountId.LeftWorkFa,
|
||||
// WorkshopAccountlist = source,
|
||||
// WorkshopSelectList = new SelectList(allWorkshops.Where(x => !userWorkshopIds.Contains(x.Id)), "Id", "WorkshopFullName"),
|
||||
// AccountSelectList = new SelectList(accountSelectList, "Id", "Fullname")
|
||||
// };
|
||||
// }
|
||||
|
||||
public OperationResult SaveWorkshopAccount(
|
||||
List<WorkshopAccountlistViewModel> workshopAccountList,
|
||||
@@ -773,10 +789,12 @@ public class AccountApplication : IAccountApplication
|
||||
{
|
||||
return this._accountLeftworkRepository.SaveWorkshopAccount(workshopAccountList, startDate, leftDate, accountId);
|
||||
}
|
||||
|
||||
public OperationResult CreateNewWorkshopAccount(long currentAccountId, long newAccountId)
|
||||
{
|
||||
return this._accountLeftworkRepository.CopyWorkshopToNewAccount(currentAccountId, newAccountId);
|
||||
}
|
||||
|
||||
#region Mahan
|
||||
|
||||
public List<AccountViewModel> AccountsForAssign(long taskId)
|
||||
@@ -790,6 +808,7 @@ public class AccountApplication : IAccountApplication
|
||||
{
|
||||
return new List<AccountViewModel>();
|
||||
}
|
||||
|
||||
return _accountRepository.GetAccountsByPositionId(positionId);
|
||||
}
|
||||
|
||||
@@ -807,7 +826,6 @@ public class AccountApplication : IAccountApplication
|
||||
return operation.Failed("این اکانت وجود ندارد");
|
||||
|
||||
|
||||
|
||||
var permissions = _roleRepository.Get(account.RoleId)
|
||||
.Permissions
|
||||
.Select(x => x.Code)
|
||||
@@ -816,10 +834,10 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
_authHelper.SignOut();
|
||||
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);
|
||||
return operation.Succcedded(2);
|
||||
|
||||
}
|
||||
|
||||
public async Task<List<AccountSelectListViewModel>> GetAdminSelectList()
|
||||
@@ -828,8 +846,11 @@ public class AccountApplication : IAccountApplication
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#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();
|
||||
|
||||
@@ -847,7 +868,8 @@ public class AccountApplication : IAccountApplication
|
||||
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("چیزی برای تغییر وجود ندارد");
|
||||
|
||||
|
||||
@@ -873,20 +895,22 @@ public class AccountApplication : IAccountApplication
|
||||
var entity = _accountRepository.Get(command.AccountId);
|
||||
if (entity == null)
|
||||
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)
|
||||
return validationResult;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(command.RePassword))
|
||||
{
|
||||
|
||||
entity.ChangePassword(_passwordHasher.Hash(command.Password));
|
||||
}
|
||||
|
||||
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();
|
||||
return op.Succcedded();
|
||||
}
|
||||
@@ -982,6 +1006,7 @@ public class AccountApplication : IAccountApplication
|
||||
|
||||
// return claimsResponse.Failed(ApplicationMessages.WrongUserPass);
|
||||
//}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ public interface IAccountLeftworkRepository : IRepository<long, AccountLeftWork>
|
||||
{
|
||||
(string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId);
|
||||
List<WorkshopAccountlistViewModel> WorkshopList(long accountId);
|
||||
List<WorkshopSelectList> GetAllWorkshops();
|
||||
// List<WorkshopSelectList> GetAllWorkshops();
|
||||
|
||||
OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId);
|
||||
|
||||
|
||||
@@ -18,14 +18,13 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
||||
{
|
||||
private readonly AccountContext _accountContext;
|
||||
private readonly IWorkshopAccountRepository _workshopAccountRepository;
|
||||
private readonly IWorkshopApplication _workshopApplication;
|
||||
|
||||
public AccountLeftworkRepository(AccountContext accountContext, IWorkshopAccountRepository workshopAccountRepository, IWorkshopApplication workshopApplication) : base(accountContext)
|
||||
public AccountLeftworkRepository(AccountContext accountContext,
|
||||
IWorkshopAccountRepository workshopAccountRepository) : base(accountContext)
|
||||
{
|
||||
_accountContext = accountContext;
|
||||
_workshopAccountRepository = workshopAccountRepository;
|
||||
_workshopApplication = workshopApplication;
|
||||
}
|
||||
}
|
||||
|
||||
public (string StartWorkFa, string LeftWorkFa) GetByAccountId(long accountId)
|
||||
{
|
||||
@@ -58,14 +57,14 @@ public class AccountLeftworkRepository : RepositoryBase<long, AccountLeftWork>,
|
||||
}).ToList();
|
||||
}
|
||||
|
||||
public List<WorkshopSelectList> GetAllWorkshops()
|
||||
{
|
||||
return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
||||
{
|
||||
Id = x.Id,
|
||||
WorkshopFullName = x.WorkshopFullName
|
||||
}).ToList();
|
||||
}
|
||||
// public List<WorkshopSelectList> GetAllWorkshops()
|
||||
// {
|
||||
// return this._workshopApplication.GetWorkshopAll().Select(x => new WorkshopSelectList()
|
||||
// {
|
||||
// Id = x.Id,
|
||||
// WorkshopFullName = x.WorkshopFullName
|
||||
// }).ToList();
|
||||
// }
|
||||
|
||||
public OperationResult CopyWorkshopToNewAccount(long currentAccountId, long newAccountId)
|
||||
{
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.Sms;
|
||||
using Company.Domain.ContarctingPartyAgg;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
@@ -12,19 +13,21 @@ public class JobSchedulerRegistrator
|
||||
private readonly IBackgroundJobClient _backgroundJobClient;
|
||||
private readonly SmsReminder _smsReminder;
|
||||
private readonly IInstitutionContractRepository _institutionContractRepository;
|
||||
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
|
||||
private static DateTime? _lastRunCreateTransaction;
|
||||
private static DateTime? _lastRunSendMonthlySms;
|
||||
private readonly ISmsService _smsService;
|
||||
private readonly ILogger<JobSchedulerRegistrator> _logger;
|
||||
|
||||
|
||||
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger)
|
||||
public JobSchedulerRegistrator(SmsReminder smsReminder, IBackgroundJobClient backgroundJobClient, IInstitutionContractRepository institutionContractRepository, ISmsService smsService, ILogger<JobSchedulerRegistrator> logger, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository)
|
||||
{
|
||||
_smsReminder = smsReminder;
|
||||
_backgroundJobClient = backgroundJobClient;
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_smsService = smsService;
|
||||
_logger = logger;
|
||||
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
|
||||
}
|
||||
|
||||
public void Register()
|
||||
@@ -57,6 +60,44 @@ public class JobSchedulerRegistrator
|
||||
() => SendInstitutionContractConfirmSms(),
|
||||
"*/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 * * * *"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -67,14 +108,14 @@ public class JobSchedulerRegistrator
|
||||
[DisableConcurrentExecution(timeoutInSeconds: 1200)]
|
||||
public async System.Threading.Tasks.Task CreateFinancialTransaction()
|
||||
{
|
||||
var now =DateTime.Now;
|
||||
var now = DateTime.Now;
|
||||
var endOfMonth = now.ToFarsi().FindeEndOfMonth();
|
||||
var endOfMonthGr = endOfMonth.ToGeorgianDateTime();
|
||||
_logger.LogInformation("CreateFinancialTransaction job run");
|
||||
if (now.Date == endOfMonthGr.Date && now.Hour >= 2 && now.Hour < 4 &&
|
||||
now.Date != _lastRunCreateTransaction?.Date)
|
||||
{
|
||||
|
||||
|
||||
var month = endOfMonth.Substring(5, 2);
|
||||
var year = endOfMonth.Substring(0, 4);
|
||||
var monthName = month.ToFarsiMonthByNumber();
|
||||
@@ -89,17 +130,17 @@ public class JobSchedulerRegistrator
|
||||
|
||||
try
|
||||
{
|
||||
await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
|
||||
await _institutionContractRepository.CreateTransactionForInstitutionContracts(endNewGr, endNewFa, description);
|
||||
_lastRunCreateTransaction = now;
|
||||
Console.WriteLine("CreateTransAction executed");
|
||||
|
||||
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
await _smsService.Alarm("09114221321", "خطا-ایجاد سند مالی");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,7 +163,7 @@ public class JobSchedulerRegistrator
|
||||
|
||||
try
|
||||
{
|
||||
await _institutionContractRepository.SendMonthlySms(now);
|
||||
await _institutionContractSmsServiceRepository.SendMonthlySms(now);
|
||||
_lastRunSendMonthlySms = now;
|
||||
Console.WriteLine("Send Monthly sms executed");
|
||||
|
||||
@@ -144,7 +185,7 @@ public class JobSchedulerRegistrator
|
||||
public async System.Threading.Tasks.Task SendReminderSms()
|
||||
{
|
||||
_logger.LogInformation("SendReminderSms job run");
|
||||
await _institutionContractRepository.SendReminderSmsForBackgroundTask();
|
||||
await _institutionContractSmsServiceRepository.SendReminderSmsForBackgroundTask();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -155,7 +196,7 @@ public class JobSchedulerRegistrator
|
||||
public async System.Threading.Tasks.Task SendBlockSms()
|
||||
{
|
||||
_logger.LogInformation("SendBlockSms job run");
|
||||
await _institutionContractRepository.SendBlockSmsForBackgroundTask();
|
||||
await _institutionContractSmsServiceRepository.SendBlockSmsForBackgroundTask();
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +208,97 @@ public class JobSchedulerRegistrator
|
||||
public async System.Threading.Tasks.Task SendInstitutionContractConfirmSms()
|
||||
{
|
||||
_logger.LogInformation("SendInstitutionContractConfirmSms job run");
|
||||
await _institutionContractRepository.SendInstitutionContractConfirmSmsTask();
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -31,7 +31,7 @@ public class Checkout : EntityBase
|
||||
string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue,
|
||||
string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute,
|
||||
ICollection<CheckoutLoanInstallment> loanInstallments,
|
||||
ICollection<CheckoutSalaryAid> salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList)
|
||||
ICollection<CheckoutSalaryAid> salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList, ICollection<CheckoutReward> rewards,double rewardPay)
|
||||
{
|
||||
EmployeeFullName = employeeFullName;
|
||||
FathersName = fathersName;
|
||||
@@ -71,7 +71,7 @@ public class Checkout : EntityBase
|
||||
TotalClaims = totalClaims;
|
||||
TotalDeductions = totalDeductions;
|
||||
TotalPayment = totalPayment;
|
||||
RewardPay = 0;
|
||||
RewardPay = rewardPay;
|
||||
IsActiveString = "true";
|
||||
Signature = signature;
|
||||
MarriedAllowance = marriedAllowance;
|
||||
@@ -93,6 +93,7 @@ public class Checkout : EntityBase
|
||||
CheckoutRollCall = checkoutRollCall;
|
||||
EmployeeMandatoryHours = employeeMandatoryHours;
|
||||
HasInsuranceShareTheSameAsList = hasInsuranceShareTheSameAsList;
|
||||
Rewards = rewards;
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +131,7 @@ public class Checkout : EntityBase
|
||||
public double BonusesPay { get; private set; }
|
||||
public double YearsPay { get; private set; }
|
||||
public double LeavePay { get; private set; }
|
||||
public double? RewardPay { get; private set; }
|
||||
public double RewardPay { get; private set; }
|
||||
public double InsuranceDeduction { get; private set; }
|
||||
public double TaxDeducation { get; private set; }
|
||||
public double InstallmentDeduction { get; private set; }
|
||||
@@ -223,6 +224,8 @@ public class Checkout : EntityBase
|
||||
|
||||
public ICollection<CheckoutLoanInstallment> LoanInstallments { get; set; } = [];
|
||||
public ICollection<CheckoutSalaryAid> SalaryAids { get; set; } = [];
|
||||
|
||||
public ICollection<CheckoutReward> Rewards { get; set; } = [];
|
||||
public CheckoutRollCall CheckoutRollCall { get; private set; }
|
||||
#endregion
|
||||
|
||||
@@ -239,7 +242,7 @@ public class Checkout : EntityBase
|
||||
double insuranceDeduction, double taxDeducation, double installmentDeduction,
|
||||
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
|
||||
, string archiveCode, string personnelCode,
|
||||
string totalClaims, string totalDeductions, double totalPayment, double? rewardPay)
|
||||
string totalClaims, string totalDeductions, double totalPayment, double rewardPay)
|
||||
{
|
||||
EmployeeFullName = employeeFullName;
|
||||
FathersName = fathersName;
|
||||
@@ -337,6 +340,11 @@ public class Checkout : EntityBase
|
||||
InstallmentDeduction = installmentsAmount;
|
||||
}
|
||||
|
||||
public void SetReward(ICollection<CheckoutReward> rewards, double rewardAmount)
|
||||
{
|
||||
RewardPay = rewardAmount;
|
||||
Rewards = rewards;
|
||||
}
|
||||
public void SetCheckoutRollCall(CheckoutRollCall checkoutRollCall)
|
||||
{
|
||||
CheckoutRollCall = checkoutRollCall;
|
||||
|
||||
57
Company.Domain/CheckoutAgg/ValueObjects/CheckoutReward.cs
Normal file
57
Company.Domain/CheckoutAgg/ValueObjects/CheckoutReward.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
|
||||
namespace Company.Domain.CheckoutAgg.ValueObjects;
|
||||
|
||||
public class CheckoutReward
|
||||
{
|
||||
public CheckoutReward(string amount, double amountDouble, string grantDateFa, DateTime grantDateGr, string description, string title, long entityId)
|
||||
{
|
||||
Amount = amount;
|
||||
AmountDouble = amountDouble;
|
||||
GrantDateFa = grantDateFa;
|
||||
GrantDateGr = grantDateGr;
|
||||
Description = description;
|
||||
Title = title;
|
||||
EntityId = entityId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// مبلغ پاداش
|
||||
/// string
|
||||
/// </summary>
|
||||
public string Amount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مبلغ پاداش
|
||||
/// double
|
||||
/// </summary>
|
||||
public double AmountDouble { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ اعطاء
|
||||
/// شمسی
|
||||
/// </summary>
|
||||
public string GrantDateFa { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ اعطاء
|
||||
/// میلادی
|
||||
/// </summary>
|
||||
public DateTime GrantDateGr { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// توضیحات
|
||||
/// </summary>
|
||||
public string Description { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// عنوان
|
||||
/// </summary>
|
||||
public string Title { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی پاداش
|
||||
/// </summary>
|
||||
public long EntityId { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||
using System;
|
||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
@@ -32,7 +33,9 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
|
||||
List<PersonalContractingPartyViewModel> SearchForMain(PersonalContractingPartySearchModel searchModel2);
|
||||
OperationResult DeletePersonalContractingParties(long id);
|
||||
bool GetHasContract(long id);
|
||||
[Obsolete("از متدهای async استفاده کنید")]
|
||||
OperationResult DeActiveAll(long id);
|
||||
[Obsolete("از متدهای async استفاده کنید")]
|
||||
OperationResult ActiveAll(long id);
|
||||
|
||||
#endregion
|
||||
@@ -76,4 +79,9 @@ public interface IPersonalContractingPartyRepository :IRepository<long, Personal
|
||||
|
||||
Task<PersonalContractingParty> GetByNationalCode(string nationalCode);
|
||||
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);
|
||||
|
||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||
|
||||
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||
|
||||
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||
#endregion
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -63,4 +67,8 @@ public interface IContractRepository : IRepository<long, Contract>
|
||||
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
||||
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||
#endregion
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -10,4 +10,6 @@ public interface IFinancialInvoiceRepository : IRepository<long, FinancialInvoic
|
||||
EditFinancialInvoice GetDetails(long id);
|
||||
List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel);
|
||||
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>
|
||||
{
|
||||
|
||||
|
||||
EditInstitutionContract GetDetails(long id);
|
||||
EditInstitutionContract GetFirstContract(long contractingPartyId, string typeOfContract);
|
||||
List<InstitutionContractViewModel> InstitutionContractsWithoutAccount();
|
||||
@@ -56,9 +56,13 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
void UpdateStatusIfNeeded(long institutionContractId);
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request,string contractStart = null);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request, string contractStart = null);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
|
||||
#region Creation
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Extension
|
||||
|
||||
@@ -69,83 +73,25 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Upgrade(Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
#endregion
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
#endregion
|
||||
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||
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
|
||||
|
||||
@@ -158,6 +104,21 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
Task<InstitutionContract> GetPreviousContract(long currentInstitutionContractId);
|
||||
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request);
|
||||
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
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>()
|
||||
.SequenceEqual(CurrentWorkshops.Cast<InstitutionContractWorkshopBase>());
|
||||
|
||||
public bool IsInPersonContract => InitialWorkshops.Any(x => x.Services.ContractInPerson);
|
||||
|
||||
public InstitutionContractWorkshopGroup(long institutionContractId,
|
||||
List<InstitutionContractWorkshopInitial> initialDetails)
|
||||
{
|
||||
|
||||
@@ -0,0 +1,340 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Company.Domain.InstitutionContractCreationTempAgg;
|
||||
|
||||
public class InstitutionContractCreationTemp
|
||||
{
|
||||
public InstitutionContractCreationTemp()
|
||||
{
|
||||
Id = Guid.NewGuid();
|
||||
}
|
||||
|
||||
[BsonId] // Specifies this field as the _id in MongoDB
|
||||
[BsonRepresentation(BsonType.String)] // Ensures the GUID is stored as a string
|
||||
public Guid Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نوع حقوقی طرف قرارداد (حقیقی یا حقوقی)
|
||||
/// </summary>
|
||||
public LegalType ContractingPartyLegalType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقیقی
|
||||
/// </summary>
|
||||
public InstitutionContractCreationTempRealParty RealParty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقوقی
|
||||
/// </summary>
|
||||
public InstitutionContractCreationTempLegalParty LegalParty { get; set; }
|
||||
|
||||
public string Address { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Province { get; set; }
|
||||
public List<EditContactInfo> ContactInfos { get; set; }
|
||||
public long RepresentativeId { get; set; }
|
||||
|
||||
|
||||
public List<InstitutionContractCreationTempWorkshop> Workshops { get; set; }
|
||||
|
||||
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
|
||||
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
|
||||
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
|
||||
public InstitutionContractCreationPlanDetail TwelveMonths { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; }
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; }
|
||||
|
||||
public bool HasContractInPerson { get; set; }
|
||||
|
||||
public InstitutionContractDuration? Duration { get; set; }
|
||||
|
||||
public void SetContractingPartyInfo(LegalType legalType,
|
||||
InstitutionContractCreationTempRealParty realParty,
|
||||
InstitutionContractCreationTempLegalParty legalParty)
|
||||
{
|
||||
ContractingPartyLegalType = legalType;
|
||||
RealParty = realParty;
|
||||
LegalParty = legalParty;
|
||||
}
|
||||
|
||||
public void SetWorkshopsAndPlanAmounts(List<InstitutionContractCreationTempWorkshop> workshops,
|
||||
InstitutionContractCreationPlanDetail oneMonth,
|
||||
InstitutionContractCreationPlanDetail threeMonth, InstitutionContractCreationPlanDetail sixMonth,
|
||||
InstitutionContractCreationPlanDetail twelveMonth, bool hasContractInPerson)
|
||||
{
|
||||
Workshops = workshops;
|
||||
OneMonth = oneMonth;
|
||||
ThreeMonths = threeMonth;
|
||||
SixMonths = sixMonth;
|
||||
TwelveMonths = twelveMonth;
|
||||
HasContractInPerson = hasContractInPerson;
|
||||
}
|
||||
|
||||
public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractPaymentMonthlyViewModel monthly,
|
||||
InstitutionContractPaymentOneTimeViewModel oneTime)
|
||||
{
|
||||
Duration = duration;
|
||||
MonthlyPayment = monthly;
|
||||
OneTimePayment = oneTime;
|
||||
}
|
||||
|
||||
|
||||
public void SetContractingPartyContactInfo(string address, string city, string province, List<EditContactInfo> requestContactInfos,long representativeId)
|
||||
{
|
||||
Address = address;
|
||||
City = city;
|
||||
Province = province;
|
||||
ContactInfos = requestContactInfos;
|
||||
RepresentativeId = representativeId;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationTempLegalParty
|
||||
{
|
||||
/// <summary>
|
||||
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام شرکت
|
||||
/// </summary>
|
||||
public string CompanyName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره ثبت
|
||||
/// </summary>
|
||||
public string RegisterId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شناسه ملی شرکت
|
||||
/// </summary>
|
||||
public string NationalId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره تلفن شرکت
|
||||
/// </summary>
|
||||
public string PhoneNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شناسه موقت طرف قرارداد
|
||||
/// </summary>
|
||||
public long ContractingPartyTempId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// کد ملی نماینده قانونی
|
||||
/// </summary>
|
||||
public string NationalCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ تولد نماینده قانونی فارسی
|
||||
/// </summary>
|
||||
public string BirthDateFa { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام نماینده قانونی
|
||||
/// </summary>
|
||||
public string FName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام خانوادگی نماینده قانونی
|
||||
/// </summary>
|
||||
public string LName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام پدر نماینده قانونی
|
||||
/// </summary>
|
||||
public string FatherName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره شناسنامه نماینده قانونی
|
||||
/// </summary>
|
||||
public string IdNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// وضعیت احراز هویت نماینده قانونی
|
||||
/// </summary>
|
||||
public bool IsAuth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// سمت نماینده قانونی در شرکت
|
||||
/// </summary>
|
||||
public string Position { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// جنسیت نماینده قانونی
|
||||
/// </summary>
|
||||
public Gender Gender { get; set; }
|
||||
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
public string IdNumberSerial { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationTempRealParty
|
||||
{
|
||||
/// <summary>
|
||||
/// آیدی طرف حساب در صورتی که از قبل ایجاد شده باشد
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
/// <summary>
|
||||
/// کد ملی
|
||||
/// </summary>
|
||||
public string NationalCode { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ تولد فارسی
|
||||
/// </summary>
|
||||
public string BirthDateFa { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره تلفن
|
||||
/// </summary>
|
||||
public string PhoneNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// وضعیت احراز هویت
|
||||
/// </summary>
|
||||
public bool IsAuth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام
|
||||
/// </summary>
|
||||
public string FName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام خانوادگی
|
||||
/// </summary>
|
||||
public string LName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام پدر
|
||||
/// </summary>
|
||||
public string FatherName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شماره شناسنامه
|
||||
/// </summary>
|
||||
public string IdNumber { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// شناسه موقت طرف قرارداد
|
||||
/// </summary>
|
||||
public long ContractingPartyTempId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// جنسیت
|
||||
/// </summary>
|
||||
public Gender Gender { get; set; }
|
||||
|
||||
public string IdNumberSeri { get; set; }
|
||||
|
||||
public string IdNumberSerial { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationTempPlan
|
||||
{
|
||||
public InstitutionContractCreationTempPlan(string contractStart, string contractEnd,
|
||||
string oneMonthPaymentDiscounted, string oneMonthDiscount, string oneMonthOriginalPayment,
|
||||
string totalPayment, string dailyCompensation, string obligation)
|
||||
{
|
||||
ContractStart = contractStart;
|
||||
ContractEnd = contractEnd;
|
||||
OneMonthPaymentDiscounted = oneMonthPaymentDiscounted;
|
||||
OneMonthDiscount = oneMonthDiscount;
|
||||
OneMonthOriginalPayment = oneMonthOriginalPayment;
|
||||
TotalPayment = totalPayment;
|
||||
DailyCompensation = dailyCompensation;
|
||||
Obligation = obligation;
|
||||
}
|
||||
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public string OneMonthPaymentDiscounted { get; set; }
|
||||
public string OneMonthDiscount { get; set; }
|
||||
public string OneMonthOriginalPayment { get; set; }
|
||||
public string TotalPayment { get; set; }
|
||||
public string DailyCompensation { get; set; }
|
||||
public string Obligation { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationTempWorkshop
|
||||
{
|
||||
public InstitutionContractCreationTempWorkshop(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
|
||||
bool insurance, bool insuranceInPerson,
|
||||
bool rollCall,bool rollCallInPerson, bool customizeCheckout,double price,long workshopId)
|
||||
{
|
||||
WorkshopName = workshopName;
|
||||
CountPerson = countPerson;
|
||||
ContractAndCheckout = contractAndCheckout;
|
||||
Insurance = insurance;
|
||||
RollCall = rollCall;
|
||||
CustomizeCheckout = customizeCheckout;
|
||||
ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
|
||||
InsuranceInPerson = insuranceInPerson;
|
||||
RollCallInPerson = rollCallInPerson;
|
||||
Price = price;
|
||||
WorkshopId = workshopId;
|
||||
}
|
||||
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام کارگاه
|
||||
/// </summary>
|
||||
public string WorkshopName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تعداد پرسنل
|
||||
/// </summary>
|
||||
public int CountPerson { get; private set; }
|
||||
|
||||
|
||||
#region ServiceSelection
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckout { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// بیمه
|
||||
/// </summary>
|
||||
public bool Insurance { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// حضورغباب
|
||||
/// </summary>
|
||||
public bool RollCall { get; private set; }
|
||||
|
||||
public bool RollCallInPerson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیش غیر رسمی
|
||||
/// </summary>
|
||||
public bool CustomizeCheckout { get;private set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری قرداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckoutInPerson { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری بیمه
|
||||
/// </summary>
|
||||
public bool InsuranceInPerson { get; private set; }
|
||||
|
||||
public double Price{ get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
||||
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Domain;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities;
|
||||
using CompanyManagment.App.Contracts.Contract;
|
||||
using CompanyManagment.App.Contracts.CustomizeCheckout;
|
||||
using CompanyManagment.App.Contracts.Leave;
|
||||
using CompanyManagment.App.Contracts.Loan;
|
||||
using CompanyManagment.App.Contracts.Reward;
|
||||
using CompanyManagment.App.Contracts.RollCall;
|
||||
using CompanyManagment.App.Contracts.SalaryAid;
|
||||
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.RollCallAgg;
|
||||
|
||||
@@ -53,6 +54,9 @@ public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
|
||||
List<SalaryAidViewModel> SalaryAidsForCheckout(long employeeId, long workshopId, DateTime checkoutStart,
|
||||
DateTime checkoutEnd);
|
||||
|
||||
List<RewardViewModel> RewardForCheckout(long employeeId, long workshopId, DateTime checkoutEnd,
|
||||
DateTime checkoutStart);
|
||||
|
||||
Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart,
|
||||
DateTime contractEnd, string shiftwork, bool hasRollCall, CreateWorkingHoursTemp command,bool holidayWorking);
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.RollCall;
|
||||
using CompanyManagment.App.Contracts.WorkingHoursTemp;
|
||||
@@ -91,5 +92,9 @@ namespace Company.Domain.RollCallAgg
|
||||
Task<List<RollCall>> GetRollCallsUntilNowWithWorkshopIdEmployeeIds(long workshopId, List<long> employeeIds,
|
||||
DateTime fromDate);
|
||||
#endregion
|
||||
|
||||
Task<PagedResult<RollCallCaseHistoryTitleDto>> GetCaseHistoryTitles(long workshopId,RollCallCaseHistorySearchModel searchModel);
|
||||
Task<List<RollCallCaseHistoryDetail>> GetCaseHistoryDetails(long workshopId,
|
||||
string titleId, RollCallCaseHistorySearchModel searchModel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,32 @@
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.SmsResultAgg;
|
||||
|
||||
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>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting);
|
||||
|
||||
#endregion
|
||||
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Company.Domain.SmsResultAgg;
|
||||
@@ -27,4 +28,25 @@ public interface ISmsSettingsRepository : IRepository<long, SmsSetting>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task RemoveItem(long id);
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست پیامک های خودکار بر اساس نوع آن
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<SmsSettingDto>> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting);
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت اطلاعات تنظیمات پیامک جهت ویرایش
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<SmsSettingDto> GetSmsSettingDataToEdit(long id);
|
||||
#endregion
|
||||
}
|
||||
@@ -8,86 +8,129 @@ using System.Text.RegularExpressions;
|
||||
|
||||
namespace CompanyManagement.Infrastructure.Excel.InstitutionContract;
|
||||
|
||||
// Enum برای تعریف ستونهای موجود
|
||||
public enum ExcelColumnType
|
||||
{
|
||||
RowNumber, // ردیف
|
||||
PhysicalContract, // قرارداد فیزیکی
|
||||
ContractNo, // شماره قرارداد
|
||||
Representative, // معرف
|
||||
ContractingPartyName, // طرف حساب
|
||||
ArchiveCode, // شماره کارفرما
|
||||
EmployerName, // کارفرما
|
||||
WorkshopName, // کارگاهها (چندخطی)
|
||||
WorkshopCount, // تعداد کارگاه
|
||||
EmployeeCount, // مجموع پرسنل
|
||||
ContractStartDate, // شروع قرارداد
|
||||
ContractEndDate, // پایان قرارداد
|
||||
InstallmentAmount, // مبلغ قسط
|
||||
ContractAmount, // مبلغ قرارداد
|
||||
FinancialStatus // وضعیت مالی
|
||||
}
|
||||
|
||||
// کلاس کانفیگ برای تنظیم ستونهای نمایشی
|
||||
public class ExcelColumnConfig
|
||||
{
|
||||
public List<ExcelColumnType> VisibleColumns { get; set; }
|
||||
|
||||
public ExcelColumnConfig()
|
||||
{
|
||||
// فعلاً تمام ستونها فعال هستند
|
||||
VisibleColumns = new List<ExcelColumnType>
|
||||
{
|
||||
ExcelColumnType.PhysicalContract,
|
||||
ExcelColumnType.ContractNo,
|
||||
ExcelColumnType.Representative,
|
||||
ExcelColumnType.ContractingPartyName,
|
||||
ExcelColumnType.ArchiveCode,
|
||||
ExcelColumnType.EmployerName,
|
||||
ExcelColumnType.WorkshopName,
|
||||
ExcelColumnType.WorkshopCount,
|
||||
ExcelColumnType.EmployeeCount,
|
||||
ExcelColumnType.ContractStartDate,
|
||||
ExcelColumnType.ContractEndDate,
|
||||
ExcelColumnType.InstallmentAmount,
|
||||
ExcelColumnType.ContractAmount,
|
||||
ExcelColumnType.FinancialStatus
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class InstitutionContractExcelGenerator
|
||||
{
|
||||
private static ExcelColumnConfig _columnConfig = new ExcelColumnConfig();
|
||||
|
||||
public static byte[] GenerateExcel(List<InstitutionContractViewModel> institutionContractViewModels)
|
||||
public static byte[] GenerateExcel(List<InstitutionContractExcelViewModel> contractViewModels)
|
||||
{
|
||||
ExcelPackage.License.SetNonCommercialOrganization("Gozareshgir Noncommercial organization");
|
||||
using var package = new ExcelPackage();
|
||||
var allWorksheet = package.Workbook.Worksheets.Add("همه");
|
||||
|
||||
var blueWorksheet = package.Workbook.Worksheets.Add("آبی");
|
||||
blueWorksheet.TabColor = Color.LightBlue;
|
||||
|
||||
var grayWorksheet = package.Workbook.Worksheets.Add("خاکستری");
|
||||
grayWorksheet.TabColor = Color.LightGray;
|
||||
|
||||
var redWorksheet = package.Workbook.Worksheets.Add("قرمز");
|
||||
redWorksheet.TabColor = Color.LightCoral;
|
||||
|
||||
var purpleWorksheet = package.Workbook.Worksheets.Add("بنفش");
|
||||
purpleWorksheet.TabColor = Color.MediumPurple;
|
||||
|
||||
var blackWorksheet = package.Workbook.Worksheets.Add("مشکی");
|
||||
blackWorksheet.TabColor = Color.DimGray;
|
||||
|
||||
var yellowWorksheet = package.Workbook.Worksheets.Add("زرد");
|
||||
yellowWorksheet.TabColor = Color.Yellow;
|
||||
|
||||
var whiteWorksheet = package.Workbook.Worksheets.Add("سفید");
|
||||
whiteWorksheet.TabColor = Color.White;
|
||||
|
||||
|
||||
CreateExcelSheet(institutionContractViewModels, allWorksheet);
|
||||
|
||||
var blueContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "blue").ToList();
|
||||
CreateExcelSheet(blueContracts, blueWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(blueContracts).ToList();
|
||||
|
||||
var grayContracts = institutionContractViewModels.Where(x => x.IsContractingPartyBlock == "true").ToList();
|
||||
CreateExcelSheet(grayContracts, grayWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(grayContracts).ToList();
|
||||
|
||||
var redContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "red").ToList();
|
||||
CreateExcelSheet(redContracts, redWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(redContracts).ToList();
|
||||
|
||||
var purpleContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "purple").ToList();
|
||||
CreateExcelSheet(purpleContracts, purpleWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(purpleContracts).ToList();
|
||||
|
||||
var blackContracts = institutionContractViewModels.Where(x=>x.ExpireColor == "black").ToList();
|
||||
CreateExcelSheet(blackContracts, blackWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(blackContracts).ToList();
|
||||
|
||||
var yellowContracts = institutionContractViewModels
|
||||
.Where(x => string.IsNullOrWhiteSpace(x.ExpireColor) && x.WorkshopCount == "0").ToList();
|
||||
CreateExcelSheet(yellowContracts, yellowWorksheet);
|
||||
institutionContractViewModels = institutionContractViewModels.Except(yellowContracts).ToList();
|
||||
|
||||
var otherContracts = institutionContractViewModels;
|
||||
CreateExcelSheet(otherContracts, whiteWorksheet);
|
||||
// ایجاد شیت برای هر تب با دادههای مربوطه
|
||||
foreach (var viewModel in contractViewModels)
|
||||
{
|
||||
var worksheet = CreateWorksheet(package, viewModel.Tab);
|
||||
CreateExcelSheet(viewModel.GetInstitutionContractListItemsViewModels ?? new List<GetInstitutionContractListItemsViewModel>(), worksheet);
|
||||
}
|
||||
|
||||
return package.GetAsByteArray();
|
||||
}
|
||||
|
||||
private static void CreateExcelSheet(List<InstitutionContractViewModel> institutionContractViewModels, ExcelWorksheet worksheet)
|
||||
/// <summary>
|
||||
/// ایجاد شیت بر اساس نوع تب
|
||||
/// </summary>
|
||||
private static ExcelWorksheet CreateWorksheet(ExcelPackage package, InstitutionContractListStatus? status)
|
||||
{
|
||||
// Headers
|
||||
worksheet.Cells[1, 1].Value = "شماره قرارداد";
|
||||
worksheet.Cells[1, 2].Value = "طرف حساب";
|
||||
worksheet.Cells[1, 3].Value = "شماره کارفرما";
|
||||
worksheet.Cells[1, 4].Value = "کارفرما ها";
|
||||
worksheet.Cells[1, 5].Value = "کارگاه ها";
|
||||
worksheet.Cells[1, 6].Value = "مجبوع پرسنل";
|
||||
worksheet.Cells[1, 7].Value = "شروع قرارداد";
|
||||
worksheet.Cells[1, 8].Value = "پایان قرارداد";
|
||||
worksheet.Cells[1, 9].Value = "مبلغ قرارداد (بدون کارگاه)";
|
||||
worksheet.Cells[1, 10].Value = "مبلغ قرارداد";
|
||||
worksheet.Cells[1, 11].Value = "وضعیت مالی";
|
||||
return status switch
|
||||
{
|
||||
InstitutionContractListStatus.DeactiveWithDebt =>
|
||||
CreateColoredWorksheet(package, "غیرفعال دارای بدهی", Color.LightBlue),
|
||||
|
||||
InstitutionContractListStatus.Deactive =>
|
||||
CreateColoredWorksheet(package, "غیرفعال", Color.LightGray),
|
||||
|
||||
InstitutionContractListStatus.PendingForRenewal =>
|
||||
CreateColoredWorksheet(package, "در انتظار تمدید", Color.LightCoral),
|
||||
|
||||
InstitutionContractListStatus.Free =>
|
||||
CreateColoredWorksheet(package, "بنفش", Color.MediumPurple),
|
||||
|
||||
InstitutionContractListStatus.Block =>
|
||||
CreateColoredWorksheet(package, "بلاک", Color.DimGray),
|
||||
|
||||
InstitutionContractListStatus.WithoutWorkshop =>
|
||||
CreateColoredWorksheet(package, "بدون کارگاه", Color.Yellow),
|
||||
|
||||
InstitutionContractListStatus.Active =>
|
||||
CreateColoredWorksheet(package, "فعال", Color.White),
|
||||
|
||||
InstitutionContractListStatus.PendingForVerify =>
|
||||
CreateColoredWorksheet(package, "در انتظار تایید", Color.OrangeRed),
|
||||
|
||||
null => CreateColoredWorksheet(package, "کل قرارداد ها", Color.White),
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(status), status, null)
|
||||
};
|
||||
}
|
||||
|
||||
using (var range = worksheet.Cells[1, 1, 1, 11])
|
||||
/// <summary>
|
||||
/// ایجاد شیت با رنگ تب
|
||||
/// </summary>
|
||||
private static ExcelWorksheet CreateColoredWorksheet(ExcelPackage package, string sheetName, Color tabColor)
|
||||
{
|
||||
var worksheet = package.Workbook.Worksheets.Add(sheetName);
|
||||
worksheet.TabColor = tabColor;
|
||||
return worksheet;
|
||||
}
|
||||
|
||||
private static void CreateExcelSheet(List<GetInstitutionContractListItemsViewModel> contractItems, ExcelWorksheet worksheet)
|
||||
{
|
||||
// دریافت نقشه ستونهای مرئی
|
||||
var visibleColumnIndices = GetVisibleColumnIndices();
|
||||
int columnCount = visibleColumnIndices.Count;
|
||||
|
||||
// تنظیم Headers
|
||||
SetupHeaders(worksheet, visibleColumnIndices, columnCount);
|
||||
|
||||
using (var range = worksheet.Cells[1, 1, 1, columnCount])
|
||||
{
|
||||
range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
|
||||
range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
|
||||
@@ -110,30 +153,35 @@ public class InstitutionContractExcelGenerator
|
||||
|
||||
int row = 2;
|
||||
|
||||
for (int i = 0; i < institutionContractViewModels.Count; i++)
|
||||
for (int i = 0; i < contractItems.Count; i++)
|
||||
{
|
||||
var contract = institutionContractViewModels[i];
|
||||
var employers = contract.EmployerViewModels?.ToList() ?? new();
|
||||
var workshops = contract.WorkshopViewModels?.ToList() ?? new();
|
||||
var contract = contractItems[i];
|
||||
var employers = contract.EmployerNames?.ToList() ?? new();
|
||||
var workshops = contract.WorkshopNames?.ToList() ?? new();
|
||||
|
||||
int maxRows = Math.Max(employers.Count, workshops.Count);
|
||||
maxRows = Math.Max(1, maxRows);
|
||||
int maxRows = 1; // هر قرارداد فقط یک ردیف؛ نیازی به مرج عمودی نیست
|
||||
|
||||
int startRow = row;
|
||||
int endRow = row + maxRows - 1;
|
||||
|
||||
// 🎨 دریافت رنگ پسزمینه از مقدار رنگ موجود در داده
|
||||
string colorName = contract.ExpireColor.ToLower();
|
||||
var fillColor = GetColorByName(colorName, contract.WorkshopCount, contract.IsContractingPartyBlock);
|
||||
// 🎨 دریافت رنگ پسزمینه بر اساس وضعیت قرارداد
|
||||
var fillColor = GetColorByStatus(contract.ListStatus, contract.WorkshopsCount);
|
||||
|
||||
for (int j = 0; j < maxRows; j++)
|
||||
{
|
||||
int currentRow = row + j;
|
||||
|
||||
worksheet.Cells[currentRow, 4].Value = j < employers.Count ? employers[j].FullName : null;
|
||||
worksheet.Cells[currentRow, 5].Value = j < workshops.Count ? workshops[j].WorkshopFullName : null;
|
||||
// پر کردن ستونهای employer و workshop
|
||||
var employerColIndex = GetColumnIndexForType(ExcelColumnType.EmployerName, visibleColumnIndices);
|
||||
var workshopColIndex = GetColumnIndexForType(ExcelColumnType.WorkshopName, visibleColumnIndices);
|
||||
|
||||
for (int col = 1; col <= 11; col++)
|
||||
if (employerColIndex > 0)
|
||||
worksheet.Cells[currentRow, employerColIndex].Value = j < employers.Count ? employers[j] : null;
|
||||
|
||||
if (workshopColIndex > 0)
|
||||
worksheet.Cells[currentRow, workshopColIndex].Value = j < workshops.Count ? workshops[j] : null;
|
||||
|
||||
for (int col = 1; col <= columnCount; col++)
|
||||
{
|
||||
var cell = worksheet.Cells[currentRow, col];
|
||||
|
||||
@@ -154,109 +202,235 @@ public class InstitutionContractExcelGenerator
|
||||
}
|
||||
|
||||
// 🧱 مرج و مقداردهی ستونهای اصلی
|
||||
worksheet.Cells[startRow, 1, endRow, 1].Merge = true;
|
||||
worksheet.Cells[startRow, 1].Value = contract.ContractNo;
|
||||
|
||||
worksheet.Cells[startRow, 2, endRow, 2].Merge = true;
|
||||
worksheet.Cells[startRow, 2].Value = contract.ContractingPartyName;
|
||||
|
||||
worksheet.Cells[startRow, 3, endRow, 3].Merge = true;
|
||||
worksheet.Cells[startRow, 3].Value = contract.ArchiveCode;
|
||||
|
||||
worksheet.Cells[startRow, 6, endRow, 6].Merge = true;
|
||||
worksheet.Cells[startRow, 6].Value = contract.EmployeeCount;
|
||||
|
||||
worksheet.Cells[startRow, 7, endRow, 7].Merge = true;
|
||||
worksheet.Cells[startRow, 7].Value = contract.ContractStartFa;
|
||||
|
||||
worksheet.Cells[startRow, 8, endRow, 8].Merge = true;
|
||||
worksheet.Cells[startRow, 8].Value = contract.ContractEndFa;
|
||||
|
||||
worksheet.Cells[startRow, 9, endRow, 9].Merge = true;
|
||||
var contractWithoutWorkshopAmountCell = worksheet.Cells[startRow, 9];
|
||||
contractWithoutWorkshopAmountCell.Value = contract.WorkshopCount == "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
||||
contractWithoutWorkshopAmountCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
|
||||
worksheet.Cells[startRow, 10, endRow, 10].Merge = true;
|
||||
var contractAmountCell = worksheet.Cells[startRow, 10];
|
||||
contractAmountCell.Value = contract.WorkshopCount != "0" ? MoneyToDouble(contract.ContractAmount) : "";
|
||||
contractAmountCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
|
||||
worksheet.Cells[startRow, 11, endRow, 11].Merge = true;
|
||||
var balance = MoneyToDouble(contract.BalanceStr);
|
||||
var balanceCell = worksheet.Cells[startRow, 11];
|
||||
balanceCell.Value = balance;
|
||||
balanceCell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
if (balance > 0)
|
||||
balanceCell.Style.Font.Color.SetColor(Color.Red);
|
||||
else if (balance < 0)
|
||||
balanceCell.Style.Font.Color.SetColor(Color.Green);
|
||||
FillColumnData(worksheet, contract, startRow, endRow, visibleColumnIndices);
|
||||
|
||||
// 📦 بوردر ضخیم خارجی برای هر سطر
|
||||
var boldRange = worksheet.Cells[startRow, 1, endRow, 11];
|
||||
var boldRange = worksheet.Cells[startRow, 1, endRow, columnCount];
|
||||
boldRange.Style.Border.BorderAround(ExcelBorderStyle.Medium);
|
||||
|
||||
row += maxRows;
|
||||
}
|
||||
|
||||
SetupPrintSettings(worksheet, visibleColumnIndices, columnCount);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت فهرست ستونهای مرئی بر اساس کانفیگ
|
||||
/// </summary>
|
||||
private static List<ExcelColumnType> GetVisibleColumnIndices()
|
||||
{
|
||||
return _columnConfig.VisibleColumns;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت شماره ستون برای یک نوع ستون خاص
|
||||
/// </summary>
|
||||
private static int GetColumnIndexForType(ExcelColumnType columnType, List<ExcelColumnType> visibleColumns)
|
||||
{
|
||||
var index = visibleColumns.IndexOf(columnType);
|
||||
return index >= 0 ? index + 1 : 0; // 1-based indexing
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت متن header برای یک نوع ستون
|
||||
/// </summary>
|
||||
private static string GetColumnHeader(ExcelColumnType columnType)
|
||||
{
|
||||
return columnType switch
|
||||
{
|
||||
ExcelColumnType.RowNumber => "ردیف",
|
||||
ExcelColumnType.PhysicalContract => "قرارداد فیزیکی",
|
||||
ExcelColumnType.ContractNo => "شماره قرارداد",
|
||||
ExcelColumnType.Representative => "معرف",
|
||||
ExcelColumnType.ContractingPartyName => "طرف حساب",
|
||||
ExcelColumnType.ArchiveCode => "شماره کارفرما",
|
||||
ExcelColumnType.EmployerName => "کارفرما",
|
||||
ExcelColumnType.WorkshopName => "کارگاهها",
|
||||
ExcelColumnType.WorkshopCount => "تعداد کارگاه",
|
||||
ExcelColumnType.EmployeeCount => "مجموع پرسنل",
|
||||
ExcelColumnType.ContractStartDate => "شروع قرارداد",
|
||||
ExcelColumnType.ContractEndDate => "پایان قرارداد",
|
||||
ExcelColumnType.InstallmentAmount => "مبلغ قسط",
|
||||
ExcelColumnType.ContractAmount => "مبلغ قرارداد",
|
||||
ExcelColumnType.FinancialStatus => "وضعیت مالی",
|
||||
_ => ""
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// تنظیم Headerهای ستونها
|
||||
/// </summary>
|
||||
private static void SetupHeaders(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
|
||||
{
|
||||
for (int i = 0; i < visibleColumns.Count; i++)
|
||||
{
|
||||
worksheet.Cells[1, i + 1].Value = GetColumnHeader(visibleColumns[i]);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// پر کردن دادههای ستونها برای یک قرارداد
|
||||
/// </summary>
|
||||
private static void FillColumnData(ExcelWorksheet worksheet, GetInstitutionContractListItemsViewModel contract, int startRow, int endRow, List<ExcelColumnType> visibleColumns)
|
||||
{
|
||||
for (int i = 0; i < visibleColumns.Count; i++)
|
||||
{
|
||||
int columnIndex = i + 1; // 1-based indexing
|
||||
var columnType = visibleColumns[i];
|
||||
|
||||
// Merge cells for non-repeating columns
|
||||
worksheet.Cells[startRow, columnIndex, endRow, columnIndex].Merge = true;
|
||||
|
||||
var cell = worksheet.Cells[startRow, columnIndex];
|
||||
|
||||
switch (columnType)
|
||||
{
|
||||
case ExcelColumnType.PhysicalContract:
|
||||
var physicalText = contract.IsOldContract
|
||||
? (contract.HasSigniture ? "موجود" : "ناموجود")
|
||||
: (contract.IsInPersonContract ? "الکترونیکی حضوری" : "الکترونیکی غیر حضوری");
|
||||
|
||||
cell.Value = physicalText;
|
||||
cell.Style.Font.Bold = true;
|
||||
cell.Style.Font.Color.SetColor(physicalText switch
|
||||
{
|
||||
"موجود" => Color.Green,
|
||||
"ناموجود" => Color.Red,
|
||||
"الکترونیکی حضوری" => Color.Purple,
|
||||
_ => Color.Blue
|
||||
});
|
||||
break;
|
||||
case ExcelColumnType.ContractNo:
|
||||
cell.Value = contract.ContractNo;
|
||||
break;
|
||||
case ExcelColumnType.Representative:
|
||||
cell.Value = contract.RepresentativeName;
|
||||
break;
|
||||
case ExcelColumnType.ContractingPartyName:
|
||||
cell.Value = contract.ContractingPartyName;
|
||||
break;
|
||||
case ExcelColumnType.ArchiveCode:
|
||||
cell.Value = contract.ArchiveNo;
|
||||
break;
|
||||
case ExcelColumnType.EmployerName:
|
||||
// این ستون چندخطی است و داخل loop پر میشود
|
||||
break;
|
||||
case ExcelColumnType.WorkshopName:
|
||||
// این ستون چندخطی است و داخل loop پر میشود
|
||||
break;
|
||||
case ExcelColumnType.WorkshopCount:
|
||||
cell.Value = contract.WorkshopsCount;
|
||||
break;
|
||||
case ExcelColumnType.EmployeeCount:
|
||||
cell.Value = contract.EmployeesCount;
|
||||
break;
|
||||
case ExcelColumnType.ContractStartDate:
|
||||
cell.Value = contract.ContractStartFa;
|
||||
break;
|
||||
case ExcelColumnType.ContractEndDate:
|
||||
cell.Value = contract.ContractEndFa;
|
||||
break;
|
||||
case ExcelColumnType.InstallmentAmount:
|
||||
cell.Value = contract.InstallmentAmount;
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case ExcelColumnType.ContractAmount:
|
||||
cell.Value = contract.ContractAmount;
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
break;
|
||||
case ExcelColumnType.FinancialStatus:
|
||||
cell.Value = contract.Balance;
|
||||
cell.Style.Numberformat.Format = "#,##0";
|
||||
|
||||
if (contract.Balance > 0)
|
||||
cell.Style.Font.Color.SetColor(Color.Red);
|
||||
else if (contract.Balance < 0)
|
||||
cell.Style.Font.Color.SetColor(Color.Green);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// تنظیم تنظیمات چاپ و عرض ستونها
|
||||
/// </summary>
|
||||
private static void SetupPrintSettings(ExcelWorksheet worksheet, List<ExcelColumnType> visibleColumns, int columnCount)
|
||||
{
|
||||
worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
|
||||
worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
|
||||
worksheet.PrinterSettings.FitToPage = true;
|
||||
worksheet.PrinterSettings.FitToWidth = 1;
|
||||
worksheet.PrinterSettings.FitToHeight = 0;
|
||||
worksheet.PrinterSettings.Scale = 85;
|
||||
int contractNoCol = 1;
|
||||
int contractingPartyNameCol = 2;
|
||||
int archiveNoCol = 3;
|
||||
int employersCol = 4;
|
||||
int workshopsCol = 5;
|
||||
int employeeCountCol = 6;
|
||||
int startContractCol = 7;
|
||||
int endContractCol = 8;
|
||||
int contractWithoutWorkshopAmountCol = 9;
|
||||
int contractAmountCol = 10;
|
||||
int balanceCol = 11;
|
||||
worksheet.Columns[contractNoCol].Width = 17;
|
||||
worksheet.Columns[contractingPartyNameCol].Width = 40;
|
||||
worksheet.Columns[archiveNoCol].Width = 10;
|
||||
worksheet.Columns[employersCol].Width = 40;
|
||||
worksheet.Columns[workshopsCol].Width = 45;
|
||||
worksheet.Columns[employeeCountCol].Width = 12;
|
||||
worksheet.Columns[startContractCol].Width = 12;
|
||||
worksheet.Columns[endContractCol].Width = 12;
|
||||
worksheet.Columns[contractWithoutWorkshopAmountCol].Width = 18;
|
||||
worksheet.Columns[contractAmountCol].Width = 12;
|
||||
worksheet.Columns[balanceCol].Width = 12;
|
||||
|
||||
// تنظیم عرض ستونها بر اساس نوع ستون
|
||||
for (int i = 0; i < visibleColumns.Count; i++)
|
||||
{
|
||||
int columnIndex = i + 1;
|
||||
worksheet.Columns[columnIndex].Width = GetColumnWidth(visibleColumns[i]);
|
||||
}
|
||||
|
||||
worksheet.View.RightToLeft = true; // فارسی
|
||||
//worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// دریافت عرض ستون پیشفرض برای هر نوع ستون
|
||||
/// </summary>
|
||||
private static double GetColumnWidth(ExcelColumnType columnType)
|
||||
{
|
||||
return columnType switch
|
||||
{
|
||||
ExcelColumnType.RowNumber => 8,
|
||||
ExcelColumnType.PhysicalContract => 15,
|
||||
ExcelColumnType.ContractNo => 17,
|
||||
ExcelColumnType.Representative => 15,
|
||||
ExcelColumnType.ContractingPartyName => 40,
|
||||
ExcelColumnType.ArchiveCode => 10,
|
||||
ExcelColumnType.EmployerName => 40,
|
||||
ExcelColumnType.WorkshopName => 45,
|
||||
ExcelColumnType.WorkshopCount => 12,
|
||||
ExcelColumnType.EmployeeCount => 12,
|
||||
ExcelColumnType.ContractStartDate => 12,
|
||||
ExcelColumnType.ContractEndDate => 12,
|
||||
ExcelColumnType.InstallmentAmount => 15,
|
||||
ExcelColumnType.ContractAmount => 15,
|
||||
ExcelColumnType.FinancialStatus => 12,
|
||||
_ => 12
|
||||
};
|
||||
}
|
||||
|
||||
private static double MoneyToDouble(string value)
|
||||
{
|
||||
Console.WriteLine(value);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return 0;
|
||||
|
||||
var min = value.Length > 1 ? value.Substring(0, 2) : "";
|
||||
var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
|
||||
|
||||
Console.WriteLine(test);
|
||||
return test;
|
||||
}
|
||||
private static Color GetColorByName(string name, string workshopCount, string IsContractingPartyBlock)
|
||||
|
||||
/// <summary>
|
||||
/// دریافت رنگ بر اساس وضعیت قرارداد
|
||||
/// </summary>
|
||||
private static Color GetColorByStatus(InstitutionContractListStatus status, int workshopsCount)
|
||||
{
|
||||
return name switch
|
||||
return status switch
|
||||
{
|
||||
"blue" => Color.LightBlue,
|
||||
_ when IsContractingPartyBlock == "true" => Color.LightGray,
|
||||
"red" => Color.LightCoral,
|
||||
"purple" => Color.MediumPurple,
|
||||
"black" => Color.DimGray,
|
||||
var n when string.IsNullOrWhiteSpace(n) && workshopCount == "0" => Color.Yellow,
|
||||
InstitutionContractListStatus.DeactiveWithDebt => Color.LightBlue,
|
||||
InstitutionContractListStatus.Deactive => Color.LightGray,
|
||||
InstitutionContractListStatus.PendingForRenewal => Color.LightCoral,
|
||||
InstitutionContractListStatus.Free => Color.MediumPurple,
|
||||
InstitutionContractListStatus.Block => Color.DimGray,
|
||||
InstitutionContractListStatus.WithoutWorkshop => Color.Yellow,
|
||||
InstitutionContractListStatus.Active => Color.White,
|
||||
_ => Color.White
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public class InstitutionContractExcelViewModel
|
||||
{
|
||||
public InstitutionContractListStatus? Tab { get; set; }
|
||||
public List<GetInstitutionContractListItemsViewModel> GetInstitutionContractListItemsViewModels { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
using _0_Framework.Excel;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.RollCall;
|
||||
using OfficeOpenXml;
|
||||
using OfficeOpenXml.Drawing;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace CompanyManagement.Infrastructure.Excel.RollCall;
|
||||
|
||||
@@ -308,6 +314,111 @@ public class RollCallExcelGenerator : ExcelGenerator
|
||||
return package.GetAsByteArray();
|
||||
}
|
||||
|
||||
public static byte[] CaseHistoryExcelForEmployee(List<RollCallCaseHistoryDetail> data, string titleId)
|
||||
{
|
||||
if (!Regex.IsMatch(titleId, @"^\d{4}_\d{2}$"))
|
||||
throw new ArgumentException("Invalid titleId format.", nameof(titleId));
|
||||
|
||||
var splitDate = titleId.Split("_");
|
||||
var year = Convert.ToInt32(splitDate.First());
|
||||
var month = Convert.ToInt32(splitDate.Last());
|
||||
|
||||
var startDateFa = $"{year:D4}/{month:D2}/01";
|
||||
var startDate = startDateFa.ToGeorgianDateTime();
|
||||
var endDateFa = startDateFa.FindeEndOfMonth();
|
||||
var endDate = endDateFa.ToGeorgianDateTime();
|
||||
|
||||
var dateRange = (int)(endDate.Date - startDate.Date).TotalDays + 1;
|
||||
var dates = Enumerable.Range(0, dateRange).Select(x => startDate.AddDays(x)).ToList();
|
||||
|
||||
var safeData = data ?? new List<RollCallCaseHistoryDetail>();
|
||||
var first = safeData.FirstOrDefault();
|
||||
var totalWorkingTime = new TimeSpan(safeData.Sum(x => x.TotalWorkingTime.Ticks));
|
||||
|
||||
var viewModel = new CaseHistoryRollCallExcelForEmployeeViewModel
|
||||
{
|
||||
EmployeeId = first?.EmployeeId ?? 0,
|
||||
DateGr = startDate,
|
||||
PersonnelCode = first?.PersonnelCode,
|
||||
EmployeeFullName = first?.EmployeeFullName,
|
||||
PersianMonthName = month.ToFarsiMonthByIntNumber(),
|
||||
PersianYear = year.ToString(),
|
||||
TotalWorkingHoursFa = totalWorkingTime.ToFarsiHoursAndMinutes("-"),
|
||||
TotalWorkingTimeSpan = $"{(int)totalWorkingTime.TotalHours}:{totalWorkingTime.Minutes:00}",
|
||||
RollCalls = dates.Select((date, index) =>
|
||||
{
|
||||
var item = index < safeData.Count ? safeData[index] : null;
|
||||
var records = item?.Records ?? new List<RollCallCaseHistoryDetailRecord>();
|
||||
|
||||
return new RollCallItemForEmployeeExcelViewModel
|
||||
{
|
||||
DateGr = date,
|
||||
DateFa = date.ToFarsi(),
|
||||
DayOfWeekFa = date.DayOfWeek.DayOfWeeKToPersian(),
|
||||
PersonnelCode = item?.PersonnelCode,
|
||||
EmployeeFullName = item?.EmployeeFullName,
|
||||
IsAbsent = item?.Status == RollCallRecordStatus.Absent,
|
||||
HasLeave = item?.Status == RollCallRecordStatus.Leaved,
|
||||
IsHoliday = false,
|
||||
TotalWorkingHours = (item?.TotalWorkingTime ?? TimeSpan.Zero).ToFarsiHoursAndMinutes("-"),
|
||||
StartsItems = JoinRecords(records, r => r.StartTime),
|
||||
EndsItems = JoinRecords(records, r => r.EndTime),
|
||||
EnterTimeDifferences = JoinRecords(records, r => FormatSignedTimeSpan(r.EntryTimeDifference)),
|
||||
ExitTimeDifferences = JoinRecords(records, r => FormatSignedTimeSpan(r.ExitTimeDifference))
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
return CaseHistoryExcelForEmployee(viewModel);
|
||||
}
|
||||
|
||||
public static byte[] CaseHistoryExcelForOneDay(List<RollCallCaseHistoryDetail> data, string titleId)
|
||||
{
|
||||
if (!Regex.IsMatch(titleId, @"^\d{4}/\d{2}/\d{2}$"))
|
||||
throw new ArgumentException("Invalid titleId format.", nameof(titleId));
|
||||
|
||||
var dateGr = titleId.ToGeorgianDateTime();
|
||||
var safeData = data ?? new List<RollCallCaseHistoryDetail>();
|
||||
|
||||
var viewModel = new CaseHistoryRollCallForOneDayViewModel
|
||||
{
|
||||
DateFa = titleId,
|
||||
DateGr = dateGr,
|
||||
DayOfWeekFa = dateGr.DayOfWeek.DayOfWeeKToPersian(),
|
||||
RollCalls = safeData.Select(item =>
|
||||
{
|
||||
var records = item.Records ?? new List<RollCallCaseHistoryDetailRecord>();
|
||||
return new RollCallItemForOneDayExcelViewModel
|
||||
{
|
||||
EmployeeFullName = item.EmployeeFullName,
|
||||
PersonnelCode = item.PersonnelCode,
|
||||
StartsItems = JoinRecords(records, r => r.StartTime),
|
||||
EndsItems = JoinRecords(records, r => r.EndTime),
|
||||
TotalWorkingHours = item.TotalWorkingTime.ToFarsiHoursAndMinutes("-")
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
return CaseHistoryExcelForOneDay(viewModel);
|
||||
}
|
||||
|
||||
private static string JoinRecords(IEnumerable<RollCallCaseHistoryDetailRecord> records, Func<RollCallCaseHistoryDetailRecord, string> selector)
|
||||
{
|
||||
var safeRecords = records ?? Enumerable.Empty<RollCallCaseHistoryDetailRecord>();
|
||||
var values = safeRecords.Select(selector).Where(x => !string.IsNullOrWhiteSpace(x)).ToList();
|
||||
return values.Count == 0 ? string.Empty : string.Join(Environment.NewLine, values);
|
||||
}
|
||||
|
||||
private static string FormatSignedTimeSpan(TimeSpan value)
|
||||
{
|
||||
if (value == TimeSpan.Zero)
|
||||
return "-";
|
||||
|
||||
var abs = value.Duration();
|
||||
var sign = value.Ticks < 0 ? "-" : "+";
|
||||
return $"{(int)abs.TotalHours}:{abs.Minutes:00}{sign}";
|
||||
}
|
||||
|
||||
private string CalculateExitMinuteDifference(TimeSpan early, TimeSpan late)
|
||||
{
|
||||
if (early == TimeSpan.Zero && late == TimeSpan.Zero)
|
||||
|
||||
@@ -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 Company.Application.Contracts.AuthorizedBankDetails;
|
||||
|
||||
namespace Company.Application.Contracts.AuthorizedBankDetails
|
||||
namespace CompanyManagment.App.Contracts.AuthorizedBankDetails
|
||||
{
|
||||
public interface IAuthorizedBankDetailsApplication
|
||||
{
|
||||
|
||||
@@ -193,4 +193,9 @@ public class CreateCheckout
|
||||
/// پایه سنوات قبل از تاثیر ساعت کار
|
||||
/// </summary>
|
||||
public double BaseYearUnAffected { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا برای محاسبه پاداش مجاز است
|
||||
/// </summary>
|
||||
public bool RewardPayCompute { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,8 @@
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
<GenerateDocumentationFile>true</GenerateDocumentationFile>
|
||||
<NoWarn>$(NoWarn);1591</NoWarn>
|
||||
<NuGetAudit>false</NuGetAudit>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public enum ContractListOrderType
|
||||
{
|
||||
ByContractCreationDate,
|
||||
BySignedContract,
|
||||
ByUnSignedContract,
|
||||
ByPersonnelCode,
|
||||
ByPersonnelCodeDescending,
|
||||
ByContractStartDate,
|
||||
ByContractStartDateDescending
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public class GetContractListForClientRequest: PaginationRequest
|
||||
{
|
||||
public int Year { get; set; }
|
||||
public int Month { get; set; }
|
||||
public string StartDate { get; set; }
|
||||
public string EndDate { get; set; }
|
||||
public long EmployeeId { get; set; }
|
||||
public ContractListOrderType? OrderType { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public class GetContractListForClientResponse
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string PersonnelCode { get; set; }
|
||||
public string ContractNo { get; set; }
|
||||
public string EmployeeFullName { get; set; }
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public bool IsSigned { get; set; }
|
||||
public string DailyWage { get; set; }
|
||||
public string AvgWorkingHour { get; set; }
|
||||
public string FamilyAllowance { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,8 @@ using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application.Enums;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public interface IContractApplication
|
||||
@@ -45,16 +47,101 @@ public interface IContractApplication
|
||||
#region Client
|
||||
|
||||
OperationResult Remove(long id);
|
||||
|
||||
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
|
||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// لیست قراردادها برای کلاینت
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<GetContractListForClientResponse>>
|
||||
GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||
Task<ContractPrintViewModel> PrintOneAsync(long id);
|
||||
Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||
|
||||
#region NewChangeByHeydari
|
||||
#endregion
|
||||
|
||||
OperationResult DeleteAllContarcts(List<long> ids);
|
||||
#region NewChangeByHeydari
|
||||
|
||||
OperationResult DeleteAllContarcts(List<long> ids);
|
||||
OperationResult DeleteContarcts(long id);
|
||||
List<long> CheckHasCheckout(List<long> ids);
|
||||
List<long> CheckHasSignature(List<long> ids);
|
||||
List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class ContractPrintViewModel
|
||||
{
|
||||
public string ContractNo { get; set; }
|
||||
public ContractPrintEmployerViewModel Employer { get; set; }
|
||||
public ContractPrintEmployeeViewModel Employee { get; set; }
|
||||
public ContractPrintTypeOfContractViewModel TypeOfContract { get; set; }
|
||||
public ContractPrintFeesViewModel Fees { get; set; }
|
||||
public string ConditionAndDetials { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class ContractPrintFeesViewModel
|
||||
{
|
||||
public string DailyWage { get; set; }
|
||||
public string FamilyAllowance { get; set; }
|
||||
public string ConsumableItems { get; set; }
|
||||
public string HousingAllowance { get; set; }
|
||||
}
|
||||
|
||||
public class ContractPrintTypeOfContractViewModel
|
||||
{
|
||||
public string ContractType { get; set; }
|
||||
public string JobName { get; set; }
|
||||
public string SetContractDate { get; set; }
|
||||
public string ContarctStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public string WorkingHoursWeekly { get; set; }
|
||||
public List<string> WorkshopAddress { get; set; }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class ContractPrintEmployeeViewModel
|
||||
{
|
||||
public string FullName { get; set; }
|
||||
public string NationalCode { get; set; }
|
||||
public string IdNumber { get; set; }
|
||||
public string DateOfBirth { get; set; }
|
||||
public string FatherName { get; set; }
|
||||
public string LevelOfEducation { get; set; }
|
||||
public string Address { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class ContractPrintEmployerViewModel
|
||||
{
|
||||
public LegalType LegalType { get; set; }
|
||||
public ContractPrintRealEmployerViewModel RealEmployer { get; set; }
|
||||
public ContractPrintLegalEmployerViewModel LegalEmployer { get; set; }
|
||||
public string WorkshopName { get; set; }
|
||||
public string Address { get; set; }
|
||||
public string WorkshopCode { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class ContractPrintLegalEmployerViewModel
|
||||
{
|
||||
public string CompanyName { get; set; }
|
||||
public string NationalId { get; set; }
|
||||
public string RegisterId { get; set; }
|
||||
}
|
||||
|
||||
public class ContractPrintRealEmployerViewModel
|
||||
{
|
||||
public string FullName { get; set; }
|
||||
public string NationalCode { get; set; }
|
||||
public string IdNumber { get; set; }
|
||||
}
|
||||
@@ -8,7 +8,7 @@ public class CreateFinancialInvoice
|
||||
public double Amount { get; set; }
|
||||
public long ContractingPartyId { get; set; }
|
||||
public string Description { get; set; }
|
||||
public List<CreateFinancialInvoiceItem>? Items { get; set; }
|
||||
public List<CreateFinancialInvoiceItem> Items { get; set; }
|
||||
}
|
||||
|
||||
public class CreateFinancialInvoiceItem
|
||||
|
||||
@@ -10,7 +10,8 @@ public class EditFinancialInvoice
|
||||
public double Amount { 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
|
||||
|
||||
@@ -6,6 +6,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.FinancialStatment;
|
||||
|
||||
@@ -62,7 +63,17 @@ public interface IFinancialStatmentApplication
|
||||
/// <returns></returns>
|
||||
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,
|
||||
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
|
||||
{
|
||||
|
||||
@@ -96,6 +96,8 @@ public class GetInstitutionContractListItemsViewModel
|
||||
/// مبلغ قسط
|
||||
/// </summary>
|
||||
public double InstallmentAmount { get; set; }
|
||||
|
||||
public bool InstitutionContractIsSentFlag { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractListWorkshop
|
||||
|
||||
@@ -5,8 +5,10 @@ using System.Drawing;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.Sms;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||
@@ -26,21 +28,21 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="command">اطلاعات قرارداد جدید</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Create(CreateInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// تمدید قرارداد موجود
|
||||
/// </summary>
|
||||
/// <param name="command">اطلاعات قرارداد برای تمدید</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Extension(CreateInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// ویرایش قرارداد موجود
|
||||
/// </summary>
|
||||
/// <param name="command">اطلاعات جدید قرارداد</param>
|
||||
/// <returns>نتیجه عملیات</returns>
|
||||
OperationResult Edit(EditInstitutionContract command);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت جزئیات قرارداد برای ویرایش
|
||||
/// </summary>
|
||||
@@ -54,7 +56,7 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="searchModel">مدل جستجو</param>
|
||||
/// <returns>لیست قراردادها</returns>
|
||||
List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// جستجوی جدید در قراردادها
|
||||
/// </summary>
|
||||
@@ -76,7 +78,7 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="id">لیست شناسه قراردادها</param>
|
||||
/// <returns>لیست قراردادها برای چاپ</returns>
|
||||
List<InstitutionContractViewModel> PrintAll(List<long> id);
|
||||
|
||||
|
||||
|
||||
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
|
||||
/// <summary>
|
||||
@@ -191,32 +193,56 @@ public interface IInstitutionContractApplication
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
|
||||
/// جهت نمایش در کارپوشه
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowMainListViewModel>> RegistrationWorkflowMainList();
|
||||
|
||||
/// <summary>
|
||||
/// دریافت آیتم های کارپوشه ثبت نام
|
||||
/// </summary>
|
||||
/// <param name="institutionContractId"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<RegistrationWorkflowItemsViewModel>> RegistrationWorkflowItems(long institutionContractId);
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
||||
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
||||
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
|
||||
#region Creation
|
||||
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه - احراز هویت
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request);
|
||||
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه -مشخصات طرف قرارداد و انتخاب کارگاه ها
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(
|
||||
InstitutionContractCreationWorkshopsRequest request);
|
||||
/// <summary>
|
||||
/// تب ایجاد قرارداد مؤسسه - مالی
|
||||
/// </summary>
|
||||
/// <param name="request"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Extension
|
||||
|
||||
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
|
||||
@@ -229,25 +255,31 @@ public interface IInstitutionContractApplication
|
||||
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
||||
InstitutionContractExtensionPaymentRequest request);
|
||||
|
||||
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Upgrade (Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
|
||||
InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
|
||||
InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
#endregion
|
||||
|
||||
Task<OperationResult> ResendVerifyLink(long institutionContractId);
|
||||
@@ -259,8 +291,9 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
||||
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId,InstitutionContractSigningType signingType);
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId, InstitutionContractSigningType signingType);
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
|
||||
/// <summary>
|
||||
/// تایید قرارداد مالی به صورت دستی
|
||||
/// </summary>
|
||||
@@ -268,4 +301,51 @@ public interface IInstitutionContractApplication
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> VerifyInstitutionContractManually(long institutionContractId);
|
||||
|
||||
Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
|
||||
/// <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 Guid TempId { 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,14 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractExtensionCompleteRequest
|
||||
{
|
||||
public Guid TemporaryId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
public long LawId { get; set; }
|
||||
public bool CancelSendVerificationSms { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationCompleteRequest
|
||||
{
|
||||
public Guid TemporaryId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
|
||||
@@ -24,4 +24,21 @@ public class InstitutionContractExtensionInquiryResult
|
||||
public string Province { get; set; }
|
||||
public List<EditContactInfo> ContactInfoViewModels { get; set; }
|
||||
public long RepresentativeId { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationInquiryResult
|
||||
{
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقیقی
|
||||
/// </summary>
|
||||
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// اطلاعات شخص حقوقی
|
||||
/// </summary>
|
||||
public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; }
|
||||
|
||||
public LegalType LegalType { get; set; }
|
||||
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,11 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractExtensionPaymentRequest
|
||||
{
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
public class InstitutionContractCreationPaymentRequest
|
||||
{
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
|
||||
@@ -5,4 +5,11 @@ public class InstitutionContractExtensionPaymentResponse
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPaymentResponse
|
||||
{
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
|
||||
}
|
||||
@@ -5,6 +5,13 @@ using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractExtensionPlanRequest
|
||||
{
|
||||
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPlanRequest
|
||||
{
|
||||
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
|
||||
@@ -7,7 +7,18 @@ public class InstitutionContractExtensionPlanResponse
|
||||
public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
|
||||
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
|
||||
}
|
||||
public class InstitutionContractExtensionPlanDetail
|
||||
public class InstitutionContractExtensionPlanDetail:InstitutionContractCreationPlanDetail
|
||||
{
|
||||
}
|
||||
|
||||
public class InstitutionContractCreationPlanResponse
|
||||
{
|
||||
public InstitutionContractCreationPlanDetail OneMonth { get; set; }
|
||||
public InstitutionContractCreationPlanDetail ThreeMonths { get; set; }
|
||||
public InstitutionContractCreationPlanDetail SixMonths { get; set; }
|
||||
public InstitutionContractCreationPlanDetail TwelveMonths { get; set; }
|
||||
}
|
||||
public class InstitutionContractCreationPlanDetail
|
||||
{
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
|
||||
@@ -33,5 +33,5 @@ public class 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;
|
||||
|
||||
public class InstitutionContractResetDiscountForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractResetCreationForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
|
||||
@@ -3,6 +3,13 @@ using System;
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractSetDiscountForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public int DiscountPercentage { get; set; }
|
||||
public double TotalAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractSetDiscountForCreationRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public int DiscountPercentage { get; set; }
|
||||
|
||||
@@ -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; }
|
||||
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
/// <summary>
|
||||
/// لیست پیامکهای بدهکاران قرارداد ملی
|
||||
@@ -94,4 +96,49 @@ public class BlockSmsListData
|
||||
/// آی دی صورت حساب مالی
|
||||
/// </summary>
|
||||
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 InstantReminderSendSms
|
||||
{
|
||||
/// <summary>
|
||||
/// نام طرف حساب
|
||||
/// </summary>
|
||||
public string FullName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// مبلغ بدهی
|
||||
/// </summary>
|
||||
public string Amount { get; set; }
|
||||
public List<InstantReminderSmsList> InstantReminderSmsList { get; set; }
|
||||
}
|
||||
|
||||
public class InstantReminderSmsList
|
||||
{
|
||||
/// <summary>
|
||||
/// شماره تماس طرف حساب
|
||||
/// </summary>
|
||||
public string PhoneNumber { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.InsuranceList;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
@@ -96,6 +97,94 @@ public interface IInsuranceListApplication
|
||||
#endregion
|
||||
|
||||
Task<List<InsuranceListViewModel>> GetNotCreatedWorkshop(InsuranceListSearchModel searchModel);
|
||||
Task<InsuranceClientPrintViewModel> ClientPrintOne(long id);
|
||||
}
|
||||
|
||||
public class InsuranceClientPrintViewModel
|
||||
{
|
||||
public string Month { get; set; }
|
||||
public string Year { get; set; }
|
||||
public string WorkshopName { get; set; }
|
||||
public string ListNo { get; set; }
|
||||
public string AgreementNumber { get; set; }
|
||||
public string WorkshopInsuranceCode { get; set; }
|
||||
public string WorkshopEmployerName { get; set; }
|
||||
public string WorkshopAddress { get; set; }
|
||||
public List<InsuranceClientPrintItemsViewModel> Items { get; set; }
|
||||
public string EmployerShare { get; set; }
|
||||
public string InsuredShare { get; set; }
|
||||
public string UnEmploymentInsurance { get; set; }
|
||||
public string AllInsuredShare { get; set; }
|
||||
|
||||
}
|
||||
public class InsuranceClientPrintItemsViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// شماره بیمه
|
||||
/// </summary>
|
||||
public string InsuranceCode { get; set; }
|
||||
/// <summary>
|
||||
/// نام و نام خانوادگی
|
||||
/// </summary>
|
||||
public string FullName { get; set; }
|
||||
/// <summary>
|
||||
/// شغل
|
||||
/// </summary>
|
||||
public string JobName { get; set; }
|
||||
/// <summary>
|
||||
/// کد ملی
|
||||
/// </summary>
|
||||
public string NationalCode { get; set; }
|
||||
/// <summary>
|
||||
/// شروع به کار
|
||||
/// </summary>
|
||||
public string StartWork { get; set; }
|
||||
/// <summary>
|
||||
/// ترک کار
|
||||
/// </summary>
|
||||
public string LeftWork { get; set; }
|
||||
/// <summary>
|
||||
/// روزهای کارکرد
|
||||
/// </summary>
|
||||
public string WorkingDays { get; set; }
|
||||
/// <summary>
|
||||
/// دستمزد روزانه
|
||||
/// </summary>
|
||||
public string DailyWage { get; set; }
|
||||
/// <summary>
|
||||
/// پایه سنوات روزانه
|
||||
/// </summary>
|
||||
public string BaseYears { get; set; }
|
||||
/// <summary>
|
||||
/// دستمزد ماهانه
|
||||
/// </summary>
|
||||
public string MonthlySalary { get; set; }
|
||||
/// <summary>
|
||||
/// مزایای ماهیانه مشمول
|
||||
/// </summary>
|
||||
public string MonthlyBenefits { get; set; }
|
||||
/// <summary>
|
||||
/// حق تاهل
|
||||
/// </summary>
|
||||
public string MarriedAllowance { get; set; }
|
||||
/// <summary>
|
||||
/// حقوق و مزایای ماهیانه مشمول
|
||||
/// </summary>
|
||||
public string BenefitsIncludedContinuous { get; set; }
|
||||
/// <summary>
|
||||
/// حقوق و مزایای ماهیانه غیر مشمول
|
||||
/// </summary>
|
||||
public string BenefitsIncludedNonContinuous { get; set; }
|
||||
/// <summary>
|
||||
/// مجموع مزایای ماهیانه مشمول و غیر مشمول
|
||||
/// </summary>
|
||||
public string IncludedAndNotIncluded { get; set; }
|
||||
/// <summary>
|
||||
/// حق بیمه سهم بیمه شده
|
||||
/// </summary>
|
||||
public string InsuranceShare { get; set; }
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class InsuranceClientSearchModel:PaginationRequest
|
||||
@@ -113,4 +202,11 @@ public class InsuranceClientListViewModel
|
||||
public int YearInt { get; set; }
|
||||
public string MonthName { get; set; }
|
||||
public int MonthInt { get; set; }
|
||||
public int PersonnelCount { get; set; }
|
||||
public int LeftWorkCount { get; set; }
|
||||
public string AllInsuredShare { get; set; }
|
||||
public string InsuredShare { get; set; }
|
||||
public string EmployerShare { get; set; }
|
||||
public string UnEmploymentInsurance { get; set; }
|
||||
|
||||
}
|
||||
@@ -21,6 +21,6 @@ public class LoanGroupedViewModel
|
||||
{
|
||||
public List<LoanGroupedByDateViewModel> GroupedByDate { get; set; }
|
||||
public List<LoanGroupedByEmployeeViewModel>GroupedByEmployee { get; set; }
|
||||
public List<LoanViewModel> LoanListViewModel { get; set; }
|
||||
public PagedResult<LoanViewModel> LoanListViewModel { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -16,5 +16,6 @@ public class LoanSearchViewModel
|
||||
public string EndDate { get; set; }
|
||||
|
||||
public int PageIndex { get; set; }
|
||||
public int PageSize { get; set; } = 30;
|
||||
public bool ShowAsGrouped { 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
|
||||
|
||||
Task<long> GetRepresentativeIdByNationalCode(string nationalCode);
|
||||
}
|
||||
@@ -4,6 +4,8 @@ using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.RollCall
|
||||
{
|
||||
@@ -125,7 +127,62 @@ namespace CompanyManagment.App.Contracts.RollCall
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> RecalculateValues(long workshopId, List<ReCalculateRollCallValues> command);
|
||||
|
||||
Task<PagedResult<RollCallCaseHistoryTitleDto>> GetCaseHistoryTitles(long workshopId,RollCallCaseHistorySearchModel searchModel);
|
||||
Task<List<RollCallCaseHistoryDetail>> GetCaseHistoryDetails(long workshopId, string titleId,
|
||||
RollCallCaseHistorySearchModel searchModel);
|
||||
|
||||
Task<RollCallCaseHistoryExcelDto> DownloadCaseHistoryExcel(long workshopId, string titleId,
|
||||
RollCallCaseHistorySearchModel searchModel);
|
||||
}
|
||||
|
||||
public class RollCallCaseHistoryExcelDto
|
||||
{
|
||||
public byte[] Bytes { get; set; }
|
||||
public string FileName { get; set; }
|
||||
public string MimeType { get; set; }
|
||||
}
|
||||
|
||||
public class RollCallCaseHistoryDetail
|
||||
{
|
||||
public string EmployeeFullName { get; set; }
|
||||
public string PersonnelCode { get; set; }
|
||||
public TimeSpan TotalWorkingTime { get; set; }
|
||||
public List<RollCallCaseHistoryDetailRecord> Records { get; set; }
|
||||
public RollCallRecordStatus Status { get; set; }
|
||||
public long EmployeeId { get; set; }
|
||||
}
|
||||
|
||||
public enum RollCallRecordStatus
|
||||
{
|
||||
Worked = 0,
|
||||
Absent = 1,
|
||||
Leaved = 2
|
||||
}
|
||||
|
||||
public class RollCallCaseHistoryDetailRecord
|
||||
{
|
||||
public TimeSpan EntryTimeDifference { get; set; }
|
||||
public string StartTime { get; set; }
|
||||
public string EndTime { get; set; }
|
||||
public TimeSpan ExitTimeDifference { get; set; }
|
||||
|
||||
}
|
||||
|
||||
public class RollCallCaseHistorySearchModel:PaginationRequest
|
||||
{
|
||||
public string StartDate { get; set; }
|
||||
public string EndDate { get; set; }
|
||||
public string OneDayDate { get; set; }
|
||||
public long? EmployeeId { get; set; }
|
||||
}
|
||||
|
||||
public class RollCallCaseHistoryTitleDto
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string Title { get; set; }
|
||||
}
|
||||
|
||||
public class ReCalculateRollCallValues
|
||||
{
|
||||
public long EmployeeId { get; set; }
|
||||
|
||||
@@ -8,7 +8,6 @@ public class CreateSalaryAidViewModel
|
||||
public long WorkshopId { get; set; }
|
||||
public string Amount { get; set; }
|
||||
public string SalaryDateTime { get; set; }
|
||||
public string CalculationDateTime { get; set; }
|
||||
public string NationalCode { get; set; }
|
||||
public int CalculationMonth { get; set; }
|
||||
public int CalculationYear { get; set; }
|
||||
|
||||
@@ -8,7 +8,7 @@ public class SalaryAidGroupedByDateViewModel
|
||||
public string YearFa { get; set; }
|
||||
public int Month { get; set; }
|
||||
public int Year { get; set; }
|
||||
public List<SalaryAidGroupedByDateViewModelItems> SalaryAidViewModels { get; set; }
|
||||
public List<SalaryAidGroupedByDateViewModelItems> Items { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ public class SalaryAidGroupedByEmployeeViewModel
|
||||
{
|
||||
public string EmployeeName { get; set; }
|
||||
public long EmployeeId { get; set; }
|
||||
public List<SalaryAidGroupedByEmployeeViewModelItems> SalaryAidViewModels { get; set; }
|
||||
public List<SalaryAidGroupedByEmployeeViewModelItems> Items { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
|
||||
}
|
||||
|
||||
@@ -3,15 +3,15 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.SalaryAid;
|
||||
public class SalaryAidSearchViewModel
|
||||
public class SalaryAidSearchViewModel:PaginationRequest
|
||||
{
|
||||
public string StartDate { get; set; }
|
||||
public string EndDate { get; set; }
|
||||
public long EmployeeId { get; set; }
|
||||
public long WorkshopId { get; set; }
|
||||
public int PageIndex { get; set; }
|
||||
public bool ShowAsGrouped { get; set; }
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Security.Cryptography;
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.SalaryAid;
|
||||
|
||||
@@ -7,7 +8,7 @@ public class SalaryAidsGroupedViewModel
|
||||
{
|
||||
public List<SalaryAidGroupedByEmployeeViewModel> GroupedByEmployee { get; set; }
|
||||
public List<SalaryAidGroupedByDateViewModel> GroupedByDate { get; set; }
|
||||
public List<SalaryAidViewModel> SalaryAidListViewModels { get; set; }
|
||||
public PagedResult<SalaryAidViewModel> List { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -60,3 +60,43 @@ public class SmsSettingViewModel
|
||||
/// </summary>
|
||||
public List<EditSmsSetting> EditSmsSettings { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// لیست تنظیمات پیامک خودکار
|
||||
/// </summary>
|
||||
public class SmsSettingDto
|
||||
{
|
||||
/// <summary>
|
||||
/// آی دی
|
||||
/// </summary>
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// عدد روز از ماه
|
||||
/// </summary>
|
||||
public int DayOfMonth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نمایش ساعت و دقیقه
|
||||
/// </summary>
|
||||
public string TimeOfDayDisplay { get; set; }
|
||||
}
|
||||
|
||||
|
||||
public class CreateSmsSettingDto
|
||||
{
|
||||
/// <summary>
|
||||
/// عدد روز از ماه
|
||||
/// </summary>
|
||||
public int DayOfMonth { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نمایش ساعت و دقیقه
|
||||
/// </summary>
|
||||
public string TimeOfDayDisplay { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
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,
|
||||
}
|
||||
59
CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs
Normal file
59
CompanyManagment.App.Contracts/SmsResult/Dto/SmsReportDto.cs
Normal file
@@ -0,0 +1,59 @@
|
||||
using System;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||
|
||||
public class SmsReportDto
|
||||
{
|
||||
/// <summary>
|
||||
/// تاریخ ارسال
|
||||
/// </summary>
|
||||
public string SentDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نوع پیامک
|
||||
/// </summary>
|
||||
public string TypeOfSms { 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,36 @@
|
||||
using System;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.SmsResult;
|
||||
|
||||
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>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting);
|
||||
|
||||
#endregion
|
||||
|
||||
OperationResult Create(CreateSmsResult command);
|
||||
List<SmsResultViewModel> Search(SmsResultSearchModel searchModel);
|
||||
}
|
||||
@@ -75,4 +75,45 @@ public interface ISmsSettingApplication
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> InstantSendBlockSms(List<BlockSmsListData> command);
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست پیامک های خودکار بر اساس نوع آن
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <returns></returns>
|
||||
Task<List<SmsSettingDto>> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت اطلاعات تنظیمات پیامک جهت ویرایش
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<SmsSettingDto> GetSmsSettingDataToEdit(long id);
|
||||
|
||||
/// <summary>
|
||||
/// ویرایش تنظیمات پیامک
|
||||
/// </summary>
|
||||
/// <param name="command"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> EditSmsSetting(SmsSettingDto command);
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست ارسال آنی
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<InstantReminderSendSms>> GetInstantReminderSmsListData(TypeOfSmsSetting typeOfSmsSetting);
|
||||
|
||||
/// <summary>
|
||||
/// ارسال پیامک آنی
|
||||
/// </summary>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <param name="phoneNumbers"></param>
|
||||
/// <returns></returns>
|
||||
Task<OperationResult> InstantSmsSendApi(TypeOfSmsSetting typeOfSmsSetting, List<string> phoneNumbers);
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -151,6 +151,9 @@ public class CreateWorkshop
|
||||
/// تصفیه حساب بصورت استاتیک محاصبه شود
|
||||
/// </summary>
|
||||
public bool IsStaticCheckout { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آیا پاداش در فیش حقوقی محاسبه شود
|
||||
/// </summary>
|
||||
public bool RewardComputeOnCheckout { get; set; }
|
||||
}
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using _0_Framework.Application;
|
||||
using Company.Application.Contracts.AuthorizedBankDetails;
|
||||
using Company.Domain.AuthorizedBankDetailsAgg;
|
||||
using CompanyManagment.App.Contracts.AuthorizedBankDetails;
|
||||
|
||||
namespace CompanyManagment.Application
|
||||
{
|
||||
|
||||
@@ -240,6 +240,16 @@ public class CheckoutApplication : ICheckoutApplication
|
||||
|
||||
command.InstallmentDeduction = loanInstallments.Sum(x => x.AmountForMonth.MoneyToDouble());
|
||||
|
||||
var rewards = new List<CheckoutReward>();
|
||||
double rewardPay = 0;
|
||||
if (command.RewardPayCompute)
|
||||
{
|
||||
rewards = _rollCallMandatoryRepository.RewardForCheckout(command.EmployeeId, command.WorkshopId, checkoutEnd.ToGeorgianDateTime(), checkoutStart.ToGeorgianDateTime())
|
||||
.Select(x => new CheckoutReward(x.Amount, x.AmountDouble, x.GrantDateFa, x.GrantDateGr, x.Description, x.Title, x.Id)).ToList();
|
||||
|
||||
rewardPay = rewards.Sum(x => x.AmountDouble);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -361,7 +371,7 @@ public class CheckoutApplication : ICheckoutApplication
|
||||
|
||||
|
||||
var totalClaimsDouble = monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + command.OvertimePay +
|
||||
command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay;
|
||||
command.NightworkPay + familyAllowance + bunos + years + command.LeavePay + command.FridayPay + command.ShiftPay + rewardPay;
|
||||
var totalClaims = totalClaimsDouble.ToMoney();
|
||||
var totalDeductionDouble = insuranceDeduction + command.AbsenceDeduction + command.InstallmentDeduction + command.SalaryAidDeduction;
|
||||
var totalDeductions = totalDeductionDouble.ToMoney();
|
||||
@@ -386,7 +396,7 @@ public class CheckoutApplication : ICheckoutApplication
|
||||
, command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays,
|
||||
command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue
|
||||
, command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute,
|
||||
loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList);
|
||||
loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList, rewards, rewardPay);
|
||||
|
||||
_checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult();
|
||||
//_checkoutRepository.SaveChanges();
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\0_Framework\0_Framework.csproj" />
|
||||
<ProjectReference Include="..\Company.Domain\Company.Domain.csproj" />
|
||||
<ProjectReference Include="..\CompanyManagement.Infrastructure.Excel\CompanyManagement.Infrastructure.Excel.csproj" />
|
||||
<ProjectReference Include="..\CompanyManagment.App.Contracts\CompanyManagment.App.Contracts.csproj" />
|
||||
<ProjectReference Include="..\CompanyManagment.EFCore\CompanyManagment.EFCore.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -2712,7 +2712,9 @@ public class ContractApplication : IContractApplication
|
||||
|
||||
var emp = workshopEmpList.Where(x => x.WorkshopId == res.WorkshopIds)
|
||||
.Select(x => x.EmployerId).ToList();
|
||||
|
||||
res.Employers = _employerRepository.GetEmployers(emp);
|
||||
|
||||
var workshopSelect = _workshopApplication.GetDetails(res.WorkshopIds);
|
||||
var workshop = new WorkshopViewModel()
|
||||
{
|
||||
@@ -3107,6 +3109,21 @@ public class ContractApplication : IContractApplication
|
||||
return _contractRepository.SearchForClient(searchModel);
|
||||
}
|
||||
|
||||
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
|
||||
{
|
||||
return await _contractRepository.GetContractListForClient(searchModel);
|
||||
}
|
||||
|
||||
public async Task<ContractPrintViewModel> PrintOneAsync(long id)
|
||||
{
|
||||
return (await _contractRepository.PrintAllAsync([id])).FirstOrDefault();
|
||||
}
|
||||
|
||||
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
|
||||
{
|
||||
return await _contractRepository.PrintAllAsync(ids);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -9,15 +9,13 @@ using CompanyManagment.EFCore;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
public class FinancialInvoiceApplication : RepositoryBase<long, FinancialInvoice>, IFinancialInvoiceApplication
|
||||
public class FinancialInvoiceApplication : IFinancialInvoiceApplication
|
||||
{
|
||||
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||
private readonly CompanyContext _context;
|
||||
|
||||
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository, CompanyContext context) : base(context)
|
||||
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository)
|
||||
{
|
||||
_financialInvoiceRepository = financialInvoiceRepository;
|
||||
_context = context;
|
||||
}
|
||||
|
||||
public OperationResult Create(CreateFinancialInvoice command)
|
||||
@@ -185,6 +183,7 @@ public class FinancialInvoiceApplication : RepositoryBase<long, FinancialInvoice
|
||||
{
|
||||
return _financialInvoiceRepository.Search(searchModel);
|
||||
}
|
||||
|
||||
|
||||
//public OperationResult Remove(long id)
|
||||
//{
|
||||
|
||||
@@ -3,9 +3,12 @@ using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using Company.Domain.ContarctingPartyAgg;
|
||||
using Company.Domain.FinancialInvoiceAgg;
|
||||
using Company.Domain.FinancialStatmentAgg;
|
||||
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||
using CompanyManagment.App.Contracts.FinancialStatment;
|
||||
using CompanyManagment.App.Contracts.FinancilTransaction;
|
||||
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||
using Microsoft.AspNetCore.Components.Forms;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
@@ -16,12 +19,20 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||
private readonly IFinancialTransactionApplication _financialTransactionApplication;
|
||||
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;
|
||||
_financialTransactionApplication = financialTransactionApplication;
|
||||
_contractingPartyRepository = contractingPartyRepository;
|
||||
_financialInvoiceRepository = financialInvoiceRepository;
|
||||
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
|
||||
}
|
||||
|
||||
public OperationResult CreateFromBankGateway(CreateFinancialStatment command)
|
||||
@@ -51,7 +62,6 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
if (createTransaction.IsSuccedded)
|
||||
return op.Succcedded();
|
||||
return op.Failed("خطا در انجام عملیات");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -71,8 +81,6 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
Balance = 0,
|
||||
TypeOfTransaction = command.TypeOfTransaction,
|
||||
DescriptionOption = command.DescriptionOption
|
||||
|
||||
|
||||
};
|
||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||
if (createTransaction.IsSuccedded)
|
||||
@@ -98,22 +106,22 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
{
|
||||
debtor = 0;
|
||||
creditor = command.CreditorString.MoneyToDouble();
|
||||
|
||||
}
|
||||
else if (command.TypeOfTransaction == "debt")
|
||||
{
|
||||
creditor = 0;
|
||||
debtor = command.DeptorString.MoneyToDouble();
|
||||
|
||||
}
|
||||
|
||||
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
|
||||
{
|
||||
return op.Failed("تاریخ وارد شده صحیح نمی باشد");
|
||||
}
|
||||
|
||||
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
||||
{
|
||||
var financialStatment = _financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
||||
var financialStatment =
|
||||
_financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
||||
var transaction = new CreateFinancialTransaction()
|
||||
{
|
||||
FinancialStatementId = financialStatment.Id,
|
||||
@@ -124,20 +132,15 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
Creditor = creditor,
|
||||
TypeOfTransaction = command.TypeOfTransaction,
|
||||
DescriptionOption = command.DescriptionOption
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||
|
||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||
if (createTransaction.IsSuccedded)
|
||||
return op.Succcedded();
|
||||
return op.Failed("خطا در انجام عملیات");
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName);
|
||||
_financialStatmentRepository.Create(statement);
|
||||
_financialStatmentRepository.SaveChanges();
|
||||
@@ -153,20 +156,14 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
Balance = 0,
|
||||
TypeOfTransaction = command.TypeOfTransaction,
|
||||
DescriptionOption = command.DescriptionOption
|
||||
|
||||
|
||||
};
|
||||
var createTransaction = _financialTransactionApplication.Create(transaction);
|
||||
if (createTransaction.IsSuccedded)
|
||||
return op.Succcedded();
|
||||
return op.Failed("خطا در انجام عملیات");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel)
|
||||
{
|
||||
@@ -203,6 +200,45 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
|
||||
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,40 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.PaymentGateway;
|
||||
using _0_Framework.Application.Sms;
|
||||
using _0_Framework.Application.UID;
|
||||
using _0_Framework.Exceptions;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using Company.Domain.ContarctingPartyAgg;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
using Company.Domain.empolyerAgg;
|
||||
using Company.Domain.FinancialInvoiceAgg;
|
||||
using Company.Domain.FinancialStatmentAgg;
|
||||
using Company.Domain.FinancialTransactionAgg;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
using Company.Domain.LeftWorkAgg;
|
||||
using Company.Domain.PaymentTransactionAgg;
|
||||
using Company.Domain.RepresentativeAgg;
|
||||
using Company.Domain.RollCallServiceAgg;
|
||||
using Company.Domain.TemporaryClientRegistrationAgg;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using Company.Domain.InstitutionContractSendFlagAgg;
|
||||
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||
using CompanyManagment.App.Contracts.FinancialStatment;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.PaymentTransaction;
|
||||
using CompanyManagment.App.Contracts.PersonalContractingParty;
|
||||
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.EFCore.Migrations;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using OfficeOpenXml.Packaging.Ionic.Zip;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using PersianTools.Core;
|
||||
using ConnectedPersonnelViewModel = CompanyManagment.App.Contracts.Workshop.ConnectedPersonnelViewModel;
|
||||
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
|
||||
@@ -49,49 +42,48 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
private readonly IFinancialStatmentApplication _financialStatmentApplication;
|
||||
private readonly IEmployerRepository _employerRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IWorkshopApplication _workshopApplication;
|
||||
private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
|
||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||
private readonly IContactInfoApplication _contactInfoApplication;
|
||||
private readonly IAccountApplication _accountApplication;
|
||||
private readonly ISmsService _smsService;
|
||||
private readonly IUidService _uidService;
|
||||
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
||||
private readonly IPaymentGateway _paymentGateway;
|
||||
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
|
||||
private readonly IRollCallServiceRepository _rollCallServiceRepository;
|
||||
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
|
||||
private readonly IInstitutionContractSendFlagRepository _institutionContractSendFlagRepository;
|
||||
|
||||
|
||||
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
|
||||
IPersonalContractingPartyRepository contractingPartyRepository,
|
||||
IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository,
|
||||
IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository,
|
||||
IWorkshopRepository workshopRepository,
|
||||
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication,
|
||||
IContractingPartyTempRepository contractingPartyTempRepository,
|
||||
IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication,
|
||||
IAccountApplication accountApplication, ISmsService smsService, IUidService uidService,
|
||||
IAccountApplication accountApplication, ISmsService smsService,
|
||||
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
|
||||
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository)
|
||||
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository,
|
||||
ISepehrPaymentGatewayService sepehrPaymentGatewayService,ILogger<SepehrPaymentGateway> sepehrGatewayLogger,
|
||||
IInstitutionContractSendFlagRepository institutionContractSendFlagRepository)
|
||||
{
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_contractingPartyRepository = contractingPartyRepository;
|
||||
_representativeRepository = representativeRepository;
|
||||
_employerRepository = employerRepository;
|
||||
_workshopRepository = workshopRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_financialStatmentApplication = financialStatmentApplication;
|
||||
_workshopApplication = workshopApplication;
|
||||
_contractingPartyTempRepository = contractingPartyTempRepository;
|
||||
_financialStatmentRepository = financialStatmentRepository;
|
||||
_contactInfoApplication = contactInfoApplication;
|
||||
_accountApplication = accountApplication;
|
||||
_smsService = smsService;
|
||||
_uidService = uidService;
|
||||
_financialInvoiceRepository = financialInvoiceRepository;
|
||||
_paymentTransactionRepository = paymentTransactionRepository;
|
||||
_rollCallServiceRepository = rollCallServiceRepository;
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory);
|
||||
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory,sepehrGatewayLogger);
|
||||
_institutionContractSendFlagRepository = institutionContractSendFlagRepository;
|
||||
}
|
||||
|
||||
public OperationResult Create(CreateInstitutionContract command)
|
||||
@@ -817,20 +809,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
||||
if (contractingParty != null)
|
||||
{
|
||||
contractingParty.DeActive();
|
||||
_contractingPartyRepository.SaveChanges();
|
||||
var employers =
|
||||
_employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
|
||||
//var employersIdList = employers.Select(x => x.Id).ToList();
|
||||
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
|
||||
//foreach (var workshop in workshops)
|
||||
//{
|
||||
// var res = _workshopApplication.DeActive(workshop.Id);
|
||||
//}
|
||||
foreach (var employer in employers)
|
||||
{
|
||||
var res = _employerRepository.DeActiveAll(employer.Id);
|
||||
}
|
||||
var accountsDeActiveRes = _contractingPartyRepository.DeActiveAllAsync(contractingParty.id)
|
||||
.GetAwaiter().GetResult();
|
||||
|
||||
if (!accountsDeActiveRes.IsSuccedded)
|
||||
return opration.Failed(accountsDeActiveRes.Message);
|
||||
}
|
||||
|
||||
return opration.Succcedded();
|
||||
@@ -847,20 +830,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
||||
if (contractingParty != null)
|
||||
{
|
||||
contractingParty.Active();
|
||||
_contractingPartyRepository.SaveChanges();
|
||||
var employers =
|
||||
_employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId);
|
||||
//var employersIdList = employers.Select(x => x.Id).ToList();
|
||||
//var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList);
|
||||
//foreach (var workshop in workshops)
|
||||
//{
|
||||
// var res = _workshopApplication.DeActive(workshop.Id);
|
||||
//}
|
||||
foreach (var employer in employers)
|
||||
{
|
||||
var res = _employerRepository.ActiveAll(employer.Id);
|
||||
}
|
||||
var activeRes = _contractingPartyRepository.ActiveAllAsync(contractingParty.id).GetAwaiter()
|
||||
.GetResult();
|
||||
if (!activeRes.IsSuccedded)
|
||||
return opration.Failed(activeRes.Message);
|
||||
}
|
||||
|
||||
return opration.Succcedded();
|
||||
@@ -925,6 +898,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return opration.Succcedded();
|
||||
}
|
||||
|
||||
|
||||
public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
|
||||
{
|
||||
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
|
||||
@@ -1294,119 +1268,87 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
if (contractingParty == null)
|
||||
throw new NotFoundException("طرف قرارداد یافت نشد");
|
||||
|
||||
if (institutionContract.VerifyCode != code)
|
||||
return op.Failed("کد وارد شده صحیح نمی باشد");
|
||||
|
||||
var financialStatement =await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id);
|
||||
if (institutionContract.VerifyCode != code)
|
||||
return op.Failed("کد وارد شده صحیح نمی باشد");
|
||||
|
||||
var dbTransaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||
FinancialInvoice financialInvoice;
|
||||
FinancialInvoiceItem financialInvoiceItem;
|
||||
var today = DateTime.Today;
|
||||
double invoiceAmount = 0;
|
||||
string invoiceItemDescription = string.Empty;
|
||||
FinancialInvoiceItemType invoiceItemType = FinancialInvoiceItemType.BuyInstitutionContract;
|
||||
long invoiceItemEntityId = 0;
|
||||
var financialStatement = await _financialStatmentRepository.GetByContractingPartyId(contractingParty.id);
|
||||
|
||||
if (institutionContract.IsInstallment)
|
||||
{
|
||||
var firstInstallment = institutionContract.Installments.First();
|
||||
var firstInstallmentAmount = firstInstallment.Amount;
|
||||
var dbTransaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||
FinancialInvoice financialInvoice;
|
||||
FinancialInvoiceItem financialInvoiceItem;
|
||||
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 (financialInvoice == null)
|
||||
{
|
||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
||||
"قسط اول سرویس", "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 (institutionContract.IsInstallment)
|
||||
{
|
||||
var firstInstallment = institutionContract.Installments.First();
|
||||
var firstInstallmentAmount = firstInstallment.Amount;
|
||||
|
||||
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);
|
||||
}
|
||||
financialInvoice = await _financialInvoiceRepository.GetUnPaidByEntityId(firstInstallment.Id, FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
||||
if (financialInvoice == null)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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,
|
||||
institutionContract.ContractingPartyName, "https://client.gozareshgir.ir",
|
||||
PaymentTransactionGateWay.SepehrPay);
|
||||
await _paymentTransactionRepository.CreateAsync(transaction);
|
||||
await _financialInvoiceRepository.SaveChangesAsync();
|
||||
await _financialInvoiceRepository.SaveChangesAsync();
|
||||
|
||||
var createPayment = new CreatePaymentGatewayRequest()
|
||||
{
|
||||
Amount = invoiceAmount,
|
||||
TransactionId = transaction.id.ToString(),
|
||||
CallBackUrl = callbackUrl,
|
||||
FinancialInvoiceId = financialInvoice.id,
|
||||
};
|
||||
var gatewayResponse = await _paymentGateway.Create(createPayment);
|
||||
if (!gatewayResponse.IsSuccess)
|
||||
return op.Failed("خطا در ایجاد درگاه پرداخت: " + gatewayResponse.Message + gatewayResponse.ErrorCode);
|
||||
// استفاده از سرویس مشترک برای ایجاد درگاه پرداخت
|
||||
var gatewayResult = await _sepehrPaymentGatewayService.CreateSepehrPaymentGateway(
|
||||
amount: (long)invoiceAmount,
|
||||
contractingPartyId: institutionContract.ContractingPartyId,
|
||||
gatewayCallbackUrl: callbackUrl,
|
||||
financialInvoiceId: financialInvoice.id,
|
||||
extraData: null);
|
||||
|
||||
|
||||
// institutionContract.SetPendingWorkflow();
|
||||
//
|
||||
// var phone = institutionContract.ContactInfoList.FirstOrDefault(x =>
|
||||
// x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
|
||||
// if (phone !=null)
|
||||
// {
|
||||
// var userPass = contractingParty.IsLegal == "حقیقی"
|
||||
// ? contractingParty.Nationalcode
|
||||
// : contractingParty.NationalId;
|
||||
// var createAcc = new RegisterAccount
|
||||
// {
|
||||
// Fullname = contractingParty.LName,
|
||||
// Username = userPass,
|
||||
// Password = userPass,
|
||||
// Mobile = phone.PhoneNumber,
|
||||
// NationalCode = userPass
|
||||
// };
|
||||
// var res = _accountApplication.RegisterClient(createAcc);
|
||||
// if (res.IsSuccedded)
|
||||
// CreateContractingPartyAccount(contractingParty.id, res.SendId);
|
||||
// }
|
||||
if (!gatewayResult.IsSuccedded)
|
||||
{
|
||||
await dbTransaction.RollbackAsync();
|
||||
return op.Failed(gatewayResult.Message);
|
||||
}
|
||||
|
||||
await dbTransaction.CommitAsync();
|
||||
await _institutionContractRepository.SaveChangesAsync();
|
||||
return op.Succcedded(gatewayResponse.Token);
|
||||
return op.Succcedded(gatewayResult.Data.Token);
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId)
|
||||
@@ -1444,6 +1386,22 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return _institutionContractRepository.ResetDiscountCreate(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationInquiryResult> CreationInquiry(InstitutionContractCreationInquiryRequest request)
|
||||
{
|
||||
return _institutionContractRepository.CreationInquiry(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationWorkshopsResponse> GetCreationWorkshops(InstitutionContractCreationWorkshopsRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationWorkshops(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationPlanResponse> GetCreationInstitutionPlan(InstitutionContractCreationPlanRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationInstitutionPlan(request);
|
||||
}
|
||||
|
||||
|
||||
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
||||
{
|
||||
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
|
||||
@@ -1558,8 +1516,9 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
.Where(x => x.WorkshopCreated && x.WorkshopId is > 0).ToList();
|
||||
|
||||
var currentWorkshops = institutionContract.WorkshopGroup.CurrentWorkshops.ToList();
|
||||
var accountId = _contractingPartyRepository
|
||||
.GetAccountByPersonalContractingParty(institutionContract.ContractingPartyId).Id;
|
||||
var account = _contractingPartyRepository
|
||||
.GetAccountByPersonalContractingParty(institutionContract.ContractingPartyId);
|
||||
var accountId = account.Id;
|
||||
foreach (var createdWorkshop in initialCreatedWorkshops)
|
||||
{
|
||||
if (currentWorkshops.Any(x => x.WorkshopId == createdWorkshop.WorkshopId))
|
||||
@@ -1611,7 +1570,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
var previousInstitutionContract = await _institutionContractRepository
|
||||
.GetPreviousContract(institutionContract.id);
|
||||
previousInstitutionContract?.DeActive();
|
||||
ReActiveAllAfterCreateNew(institutionContract.ContractingPartyId);
|
||||
await _contractingPartyRepository.ActiveAllAsync(institutionContract.ContractingPartyId);
|
||||
await _institutionContractRepository.SaveChangesAsync();
|
||||
return op.Succcedded();
|
||||
}
|
||||
@@ -1634,6 +1593,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified)
|
||||
return op.Failed("قرارداد مالی قبلا تایید شده است");
|
||||
|
||||
if (!institutionContract.WorkshopGroup.IsInPersonContract)
|
||||
{
|
||||
return op.Failed("قرارداد مالی غیر حضوری نمی تواند به صورت دستی تایید شود");
|
||||
}
|
||||
|
||||
var transaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||
await SetPendingWorkflow(institutionContractId,InstitutionContractSigningType.Physical);
|
||||
|
||||
@@ -1657,6 +1621,28 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public Task<InstitutionContractCreationPaymentResponse> GetCreationPaymentMethod(InstitutionContractCreationPaymentRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetCreationPaymentMethod(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractDiscountResponse> SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request)
|
||||
{
|
||||
return _institutionContractRepository.SetDiscountForCreation(request);
|
||||
}
|
||||
|
||||
public Task<InstitutionContractDiscountResponse> ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
return _institutionContractRepository.ResetDiscountForCreation(request);
|
||||
}
|
||||
|
||||
public Task<OperationResult> CreationComplete(InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
return _institutionContractRepository.CreationComplete(request);
|
||||
}
|
||||
|
||||
|
||||
|
||||
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
||||
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
||||
string state)
|
||||
@@ -1840,7 +1826,60 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
installments.Add(lastInstallment);
|
||||
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
|
||||
|
||||
@@ -1524,7 +1524,8 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
var dateOfBirth = employeeData.DateOfBirthGr.ToFarsi();
|
||||
var dateOfIssue = employeeData.DateOfIssueGr.ToFarsi();
|
||||
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 startWorkFa = employeeData.StartWorkDateGr.ToFarsi();
|
||||
var workshop = _workShopRepository.GetDetails(workshopId);
|
||||
@@ -1606,7 +1607,7 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
MaritalStatus = employeeData.MaritalStatus,
|
||||
|
||||
StartMonthCurrent = startMonthFa,
|
||||
WorkingDays = workingDays.countWorkingDays,
|
||||
WorkingDays = employeeData.WorkingDays,
|
||||
StartWorkDate = startWorkFa,
|
||||
StartWorkDateGr = employeeData.StartWorkDateGr,
|
||||
LeftWorkDate = leftWorkFa,
|
||||
@@ -2381,5 +2382,10 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
return await _insuranceListRepositpry.GetNotCreatedWorkshop(searchModel);
|
||||
}
|
||||
|
||||
public async Task<InsuranceClientPrintViewModel> ClientPrintOne(long id)
|
||||
{
|
||||
return await _insuranceListRepositpry.ClientPrintOne(id);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
239
CompanyManagment.Application/PaymentCallbackHandler.cs
Normal file
239
CompanyManagment.Application/PaymentCallbackHandler.cs
Normal file
@@ -0,0 +1,239 @@
|
||||
using _0_Framework.Application;
|
||||
using Company.Domain.PaymentTransactionAgg;
|
||||
using CompanyManagment.App.Contracts.FinancialInvoice;
|
||||
using CompanyManagment.App.Contracts.FinancialStatment;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.PaymentCallback;
|
||||
using CompanyManagment.App.Contracts.PaymentTransaction;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
using _0_Framework.Application.PaymentGateway;
|
||||
using Company.Domain.FinancialStatmentAgg;
|
||||
using Company.Domain.FinancialTransactionAgg;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
using CompanyManagment.EFCore.Migrations;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
public class PaymentCallbackHandler : IPaymentCallbackHandler
|
||||
{
|
||||
private readonly IPaymentTransactionApplication _paymentTransactionApplication;
|
||||
private readonly IFinancialStatmentApplication _financialStatmentApplication;
|
||||
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
||||
private readonly IFinancialInvoiceApplication _financialInvoiceApplication;
|
||||
private readonly IInstitutionContractApplication _institutionContractApplication;
|
||||
private readonly IInstitutionContractRepository _institutionContractRepository;
|
||||
private readonly IPaymentGateway _paymentGateway;
|
||||
|
||||
public PaymentCallbackHandler(
|
||||
IPaymentTransactionApplication paymentTransactionApplication,
|
||||
IFinancialStatmentApplication financialStatmentApplication,
|
||||
IFinancialInvoiceApplication financialInvoiceApplication,
|
||||
IInstitutionContractApplication institutionContractApplication,
|
||||
IHttpClientFactory httpClientFactory, IInstitutionContractRepository institutionContractRepository,
|
||||
IFinancialStatmentRepository financialStatmentRepository,
|
||||
ILogger<SepehrPaymentGateway> sepehrGatewayLogger)
|
||||
{
|
||||
_paymentTransactionApplication = paymentTransactionApplication;
|
||||
_financialStatmentApplication = financialStatmentApplication;
|
||||
_financialInvoiceApplication = financialInvoiceApplication;
|
||||
_institutionContractApplication = institutionContractApplication;
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_financialStatmentRepository = financialStatmentRepository;
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory, sepehrGatewayLogger);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// تأیید و پردازش callback درگاه پرداخت سپهر
|
||||
/// </summary>
|
||||
public async Task<OperationResult> VerifySepehrPaymentCallback(VerifyPaymentCallbackCommand command,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var operation = new OperationResult();
|
||||
|
||||
try
|
||||
{
|
||||
await using var transactionScope =await _financialStatmentRepository.BeginTransactionAsync();
|
||||
|
||||
// گام 1: دریافت اطلاعات تراکنش
|
||||
var transaction = await _paymentTransactionApplication.GetDetails(command.InvoiceId);
|
||||
|
||||
if (transaction == null)
|
||||
return operation.Failed("تراکنش مورد نظر یافت نشد");
|
||||
|
||||
// گام 2: بررسی وضعیت قبلی تراکنش
|
||||
if (transaction.Status != PaymentTransactionStatus.Pending)
|
||||
return operation.Failed("این تراکنش قبلا پرداخت شده است");
|
||||
|
||||
// گام 3: بررسی کد پاسخ درگاه
|
||||
if (command.ResponseCode != 0)
|
||||
{
|
||||
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
|
||||
return failResult.IsSuccedded
|
||||
? operation.Failed("تراکنش توسط درگاه رد شد")
|
||||
: operation.Failed("خطا در بهروزرسانی وضعیت تراکنش");
|
||||
}
|
||||
|
||||
// گام 4: استخراج اطلاعات فاکتور مالی
|
||||
var extraData = JsonConvert.DeserializeObject<IDictionary<string, object>>(command.Payload ?? "{}");
|
||||
|
||||
extraData.TryGetValue("financialInvoiceId", out var financialInvoiceIdObj);
|
||||
|
||||
if (financialInvoiceIdObj == null ||
|
||||
!long.TryParse(financialInvoiceIdObj.ToString(), out var financialInvoiceId))
|
||||
return operation.Failed("فاکتور مالی نامعتبر است");
|
||||
|
||||
// گام 5: دریافت اطلاعات فاکتور مالی
|
||||
var financialInvoice = _financialInvoiceApplication.GetDetails(financialInvoiceId);
|
||||
|
||||
if (financialInvoice == null)
|
||||
return operation.Failed("فاکتور مالی نامعتبر است");
|
||||
|
||||
if (financialInvoice.Status != FinancialInvoiceStatus.Unpaid)
|
||||
return operation.Failed("فاکتور مالی نامعتبر است");
|
||||
|
||||
// گام 6: بررسی تطابق مبلغ
|
||||
if ((long)financialInvoice.Amount != command.Amount)
|
||||
{
|
||||
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
|
||||
return operation.Failed("مبلغ تراکنش با مبلغ فاکتور مطابقت ندارد");
|
||||
}
|
||||
|
||||
// گام 7: بهروزرسانی فاکتور مالی
|
||||
var setPaidResult = _financialInvoiceApplication.SetPaid(financialInvoiceId, DateTime.Now);
|
||||
if (!setPaidResult.IsSuccedded)
|
||||
{
|
||||
var failResult = _paymentTransactionApplication.SetFailed(command.InvoiceId);
|
||||
return operation.Failed("خطا در بهروزرسانی فاکتور مالی");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// گام 8: بهروزرسانی وضعیت تراکنش
|
||||
var setSuccessResult = _paymentTransactionApplication.SetSuccess(
|
||||
command.InvoiceId,
|
||||
command.CardNumber,
|
||||
command.IssuerBank,
|
||||
command.Rrn.ToString(),
|
||||
command.DigitalReceipt);
|
||||
|
||||
if (!setSuccessResult.IsSuccedded)
|
||||
{
|
||||
return operation.Failed("خطا در بهروزرسانی وضعیت تراکنش");
|
||||
}
|
||||
|
||||
// گام 9: بهروزرسانی وضعیت قراردادهای نهادی (اگر وجود داشته باشند)
|
||||
var institutionContractItems = financialInvoice.Items.Where(x =>
|
||||
x.Type is FinancialInvoiceItemType.BuyInstitutionContract
|
||||
or FinancialInvoiceItemType.BuyInstitutionContractInstallment).ToList();
|
||||
|
||||
if (institutionContractItems.Any())
|
||||
{
|
||||
await HandleInstitutionContractItems(financialInvoice);
|
||||
}
|
||||
|
||||
|
||||
// گام 10: ایجاد سند مالی (Financial Statement)
|
||||
var createCreditStatementCommand = new CreateFinancialStatment()
|
||||
{
|
||||
ContractingPartyId = transaction.ContractingPartyId,
|
||||
Deptor = 0,
|
||||
Creditor = command.Amount,
|
||||
DeptorString = "0",
|
||||
TypeOfTransaction = "credit",
|
||||
DescriptionOption = (financialInvoice.Description ?? "") + " شماره فاکتور: " +
|
||||
(financialInvoice.InvoiceNumber ?? ""),
|
||||
Description = "درگاه بانکی",
|
||||
};
|
||||
|
||||
var statementResult = _financialStatmentApplication.CreateFromBankGateway(createCreditStatementCommand);
|
||||
if (!statementResult.IsSuccedded)
|
||||
{
|
||||
_paymentTransactionApplication.SetFailed(command.InvoiceId);
|
||||
return operation.Failed("خطا در ایجاد سند مالی");
|
||||
}
|
||||
// گام 11: تأیید نهایی با درگاه پرداخت
|
||||
var verifyCommand = new VerifyPaymentGateWayRequest()
|
||||
{
|
||||
Amount = transaction.Amount,
|
||||
TransactionId = command.InvoiceId.ToString(),
|
||||
DigitalReceipt = command.DigitalReceipt
|
||||
};
|
||||
|
||||
var verifyRes = await _paymentGateway.Verify(verifyCommand, cancellationToken);
|
||||
#if DEBUG
|
||||
verifyRes.IsSuccess = true;
|
||||
#endif
|
||||
if (!verifyRes.IsSuccess)
|
||||
{
|
||||
return operation.Failed("خطا در تایید پرداخت از درگاه");
|
||||
}
|
||||
|
||||
// تمام عملیات موفق - تایید transaction
|
||||
await transactionScope.CommitAsync(cancellationToken);
|
||||
return operation.Succcedded();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// در صورت بروز هرگونه خطا، transaction خودکار rollback میشود
|
||||
return operation.Failed($"خطا در پردازش callback: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// مدیریت آپدیت قراردادهای نهادی
|
||||
/// </summary>
|
||||
private async Task HandleInstitutionContractItems(EditFinancialInvoice financialInvoice)
|
||||
{
|
||||
// قراردادهای خریداری مستقیم
|
||||
var directContractItems = financialInvoice.Items
|
||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract);
|
||||
var financialStatement =
|
||||
await _financialStatmentRepository.GetByContractingPartyId(financialInvoice.ContractingPartyId);
|
||||
|
||||
var today = DateTime.Now;
|
||||
foreach (var item in directContractItems)
|
||||
{
|
||||
var institutionContract = _institutionContractRepository.Get(item.EntityId);
|
||||
|
||||
await _institutionContractApplication.SetPendingWorkflow(item.EntityId,
|
||||
InstitutionContractSigningType.OtpBased);
|
||||
|
||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
||||
"پرداخت کل سرویس", "debt", "بابت خدمات", institutionContract.TotalAmount, 0, 0);
|
||||
|
||||
financialStatement.AddFinancialTransaction(financialTransaction);
|
||||
}
|
||||
|
||||
// قراردادهای خریداری با اقساط
|
||||
var installmentItems = financialInvoice.Items
|
||||
.Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment);
|
||||
|
||||
foreach (var item in installmentItems)
|
||||
{
|
||||
var institutionContractId =await _institutionContractRepository.GetIdByInstallmentId(item.EntityId);
|
||||
var institutionContract = _institutionContractRepository.Get(institutionContractId);
|
||||
|
||||
|
||||
await _institutionContractApplication.SetPendingWorkflow(institutionContractId,
|
||||
InstitutionContractSigningType.OtpBased);
|
||||
|
||||
var firstInstallment = institutionContract.Installments.First();
|
||||
|
||||
var firstInstallmentAmount = firstInstallment.Amount;
|
||||
|
||||
var financialTransaction = new FinancialTransaction(0, today, today.ToFarsi(),
|
||||
"قسط اول سرویس", "debt", "بابت خدمات", firstInstallmentAmount, 0, 0);
|
||||
|
||||
financialStatement.AddFinancialTransaction(financialTransaction);
|
||||
}
|
||||
await _financialStatmentRepository.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
@@ -722,5 +722,11 @@ public class PersonalContractingPartyApplication : IPersonalContractingPartyApp
|
||||
return await _personalContractingPartyRepository.GetLegalDetails(id);
|
||||
}
|
||||
|
||||
public async Task<long> GetRepresentativeIdByNationalCode(string nationalCode)
|
||||
{
|
||||
var entity = await _personalContractingPartyRepository.GetByNationalCode(nationalCode);
|
||||
return entity?.RepresentativeId??0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -3,9 +3,11 @@ using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
using _0_Framework.Exceptions;
|
||||
using Company.Domain.CheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutAgg;
|
||||
using Company.Domain.CustomizeCheckoutTempAgg;
|
||||
@@ -16,6 +18,8 @@ using Company.Domain.LeaveAgg;
|
||||
using Company.Domain.RollCallAgg;
|
||||
using Company.Domain.RollCallAgg.DomainService;
|
||||
using Company.Domain.RollCallEmployeeAgg;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using CompanyManagement.Infrastructure.Excel.RollCall;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.Employee;
|
||||
using CompanyManagment.App.Contracts.RollCall;
|
||||
@@ -34,8 +38,9 @@ public class RollCallApplication : IRollCallApplication
|
||||
private readonly ICustomizeWorkshopSettingsRepository _customizeWorkshopSettingsRepository;
|
||||
private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository;
|
||||
private readonly ICustomizeCheckoutTempRepository _customizeCheckoutTempRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
|
||||
public RollCallApplication(IRollCallRepository rollCallRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, ILeaveRepository leaveRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICheckoutRepository checkoutRepository, IRollCallDomainService rollCallDomainService, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository)
|
||||
public RollCallApplication(IRollCallRepository rollCallRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, IEmployeeRepository employeeRepository, ILeaveRepository leaveRepository, ICustomizeCheckoutRepository customizeCheckoutRepository, ICheckoutRepository checkoutRepository, IRollCallDomainService rollCallDomainService, ICustomizeWorkshopSettingsRepository customizeWorkshopSettingsRepository, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, ICustomizeCheckoutTempRepository customizeCheckoutTempRepository, IWorkshopRepository workshopRepository)
|
||||
{
|
||||
_rollCallRepository = rollCallRepository;
|
||||
_rollCallEmployeeRepository = rollCallEmployeeRepository;
|
||||
@@ -47,7 +52,8 @@ public class RollCallApplication : IRollCallApplication
|
||||
_customizeWorkshopSettingsRepository = customizeWorkshopSettingsRepository;
|
||||
_customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository;
|
||||
_customizeCheckoutTempRepository = customizeCheckoutTempRepository;
|
||||
}
|
||||
_workshopRepository = workshopRepository;
|
||||
}
|
||||
|
||||
public OperationResult Create(CreateRollCall command)
|
||||
{
|
||||
@@ -447,8 +453,7 @@ public class RollCallApplication : IRollCallApplication
|
||||
return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد");
|
||||
}
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate.Value.Date >= y.StartDateGr.Date && x.EndDate.Value.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -458,7 +463,10 @@ public class RollCallApplication : IRollCallApplication
|
||||
_rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId,
|
||||
x.StartDate!.Value,x.EndDate.Value);
|
||||
});
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.ShiftDate.Date >= y.StartDateGr.Date && x.ShiftDate.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
|
||||
if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date))
|
||||
{
|
||||
return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید از تاریخ شیفت عقب تر یا جلو تر ببرید");
|
||||
@@ -487,8 +495,8 @@ public class RollCallApplication : IRollCallApplication
|
||||
|
||||
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate.Value.Date >= y.StartDateGr.Date
|
||||
&& x.EndDate.Value.Date <= y.EndDateGr.Date)))
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.ShiftDate.Date >= y.StartDateGr.Date
|
||||
&& x.ShiftDate.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
|
||||
@@ -632,9 +640,6 @@ public class RollCallApplication : IRollCallApplication
|
||||
return operation.Failed("کارمند در بازه انتخاب شده مرخصی ساعتی دارد");
|
||||
}
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate.Value.Date >= y.StartDateGr.Date && x.EndDate.Value.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
|
||||
newRollCallDates.ForEach(x =>
|
||||
{
|
||||
@@ -642,6 +647,11 @@ public class RollCallApplication : IRollCallApplication
|
||||
_rollCallDomainService.GetEmployeeShiftDateByRollCallStartDate(command.WorkshopId, command.EmployeeId,
|
||||
x.StartDate!.Value,x.EndDate.Value);
|
||||
});
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.ShiftDate.Date >= y.StartDateGr.Date && x.ShiftDate.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
|
||||
if (newRollCallDates.Any(x => x.ShiftDate.Date != date.Date))
|
||||
{
|
||||
return operation.Failed("حضور غیاب در حال ویرایش را نمیتوانید از تاریخ شیفت عقب تر یا جلو تر ببرید");
|
||||
@@ -664,7 +674,7 @@ public class RollCallApplication : IRollCallApplication
|
||||
&& (y.StartDate.Value.Date <= x.ContractEndGr.Date))))
|
||||
return operation.Failed("برای بازه های وارد شده فیش حقوقی ثبت شده است");
|
||||
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.StartDate.Value.Date >= y.StartDateGr.Date && x.EndDate.Value.Date <= y.EndDateGr.Date)))
|
||||
if (newRollCallDates == null || !newRollCallDates.All(x => employeeStatuses.Any(y => x.ShiftDate.Date >= y.StartDateGr.Date && x.ShiftDate.Date <= y.EndDateGr.Date)))
|
||||
return operation.Failed("کارمند در بازه وارد شده غیر فعال است");
|
||||
|
||||
var currentDayRollCall = employeeRollCalls.FirstOrDefault(x => x.EndDate == null);
|
||||
@@ -858,4 +868,58 @@ public class RollCallApplication : IRollCallApplication
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<PagedResult<RollCallCaseHistoryTitleDto>> GetCaseHistoryTitles(long workshopId,
|
||||
RollCallCaseHistorySearchModel searchModel)
|
||||
{
|
||||
return await _rollCallRepository.GetCaseHistoryTitles(workshopId,searchModel);
|
||||
}
|
||||
|
||||
public async Task<List<RollCallCaseHistoryDetail>> GetCaseHistoryDetails(long workshopId,
|
||||
string titleId, RollCallCaseHistorySearchModel searchModel)
|
||||
{
|
||||
return await _rollCallRepository.GetCaseHistoryDetails(workshopId, titleId, searchModel);
|
||||
}
|
||||
|
||||
public async Task<RollCallCaseHistoryExcelDto> DownloadCaseHistoryExcel(long workshopId, string titleId,
|
||||
RollCallCaseHistorySearchModel searchModel)
|
||||
{
|
||||
var data = await _rollCallRepository
|
||||
.GetCaseHistoryDetails(workshopId, titleId, searchModel);
|
||||
string nameSecondPart = "";
|
||||
byte[] excelBytes;
|
||||
|
||||
if (Regex.IsMatch(titleId, @"^\d{4}_\d{2}$"))
|
||||
{
|
||||
var splitDate = titleId.Split("_");
|
||||
var year = Convert.ToInt32(splitDate.First());
|
||||
var month = Convert.ToInt32(splitDate.Last());
|
||||
|
||||
var monthName = Convert.ToInt32(month).ToFarsiMonthByIntNumber();
|
||||
nameSecondPart = $"{year}/{monthName}";
|
||||
excelBytes = RollCallExcelGenerator.CaseHistoryExcelForEmployee(data, titleId);
|
||||
}
|
||||
else if (Regex.IsMatch(titleId, @"^\d{4}/\d{2}/\d{2}$"))
|
||||
{
|
||||
var oneDayDate = titleId.ToGeorgianDateTime();
|
||||
nameSecondPart = $" {oneDayDate.DayOfWeek.DayOfWeeKToPersian()}،{titleId}";
|
||||
excelBytes = RollCallExcelGenerator.CaseHistoryExcelForOneDay(data, titleId);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new BadRequestException("شناسه سر تیتر وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
var workshopFullName = _workshopRepository.Get(workshopId)?.WorkshopFullName ?? "بدون کارگاه";
|
||||
|
||||
var fileName = $"{workshopFullName} - {nameSecondPart}.xlsx";
|
||||
|
||||
var res = new RollCallCaseHistoryExcelDto()
|
||||
{
|
||||
Bytes = excelBytes,
|
||||
MimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||
FileName = fileName
|
||||
};
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -433,7 +433,7 @@ public class SalaryAidApplication : ISalaryAidApplication
|
||||
var checkouts = _checkoutRepository.GetByWorkshopIdEmployeeIdInDate(
|
||||
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
|
||||
|
||||
checkouts?.SetAmountConflict(true);
|
||||
checkouts?.SetAmountConflict(true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
119
CompanyManagment.Application/SepehrPaymentGatewayService.cs
Normal file
119
CompanyManagment.Application/SepehrPaymentGatewayService.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.PaymentGateway;
|
||||
using CompanyManagment.App.Contracts.PaymentTransaction;
|
||||
using CompanyManagment.App.Contracts.SepehrPaymentGateway;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
/// <summary>
|
||||
/// سرویس مشترک برای ایجاد درگاه پرداخت سپهر
|
||||
/// </summary>
|
||||
public class SepehrPaymentGatewayService : ISepehrPaymentGatewayService
|
||||
{
|
||||
private readonly IPaymentGateway _paymentGateway;
|
||||
private readonly IPaymentTransactionApplication _paymentTransactionApplication;
|
||||
|
||||
public SepehrPaymentGatewayService(
|
||||
IPaymentTransactionApplication paymentTransactionApplication,
|
||||
IHttpClientFactory httpClientFactory,
|
||||
ILogger<SepehrPaymentGateway> sepehrGatewayLogger)
|
||||
{
|
||||
_paymentGateway = new SepehrPaymentGateway(httpClientFactory, sepehrGatewayLogger);
|
||||
_paymentTransactionApplication = paymentTransactionApplication;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// ایجاد درگاه پرداخت سپهر برای یک تراکنش
|
||||
/// </summary>
|
||||
/// <param name="amount">مبلغ</param>
|
||||
/// <param name="contractingPartyId">شناسه طرف قرارداد</param>
|
||||
/// <param name="frontCallbackUrl">آدرس بازگشتی به فرانت برای نمایش نتیجه</param>
|
||||
/// <param name="gatewayCallbackUrl">آدرس بازگشتی درگاه پرداخت</param>
|
||||
/// <param name="financialInvoiceId">شناسه فاکتور مالی (اختیاری)</param>
|
||||
/// <param name="extraData">دادههای اضافی (اختیاری)</param>
|
||||
/// <param name="cancellationToken">توکن لغو</param>
|
||||
/// <returns>شامل Token درگاه یا OperationResult با خطا</returns>
|
||||
public async Task<OperationResult<CreateSepehrPaymentGatewayResponse>> CreateSepehrPaymentGateway(
|
||||
double amount,
|
||||
long contractingPartyId,
|
||||
long financialInvoiceId,
|
||||
string gatewayCallbackUrl,
|
||||
string frontCallbackUrl="https://client.gozareshgir.ir",
|
||||
Dictionary<string, object> extraData = null,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var op = new OperationResult<CreateSepehrPaymentGatewayResponse>();
|
||||
|
||||
try
|
||||
{
|
||||
// گام 1: ایجاد تراکنش پرداخت
|
||||
var transactionCommand = new CreatePaymentTransaction()
|
||||
{
|
||||
Amount = amount,
|
||||
ContractingPartyId = contractingPartyId,
|
||||
CallBackUrl = frontCallbackUrl,
|
||||
Gateway = PaymentTransactionGateWay.SepehrPay
|
||||
};
|
||||
|
||||
var transactionResult = await _paymentTransactionApplication.Create(transactionCommand);
|
||||
|
||||
if (!transactionResult.IsSuccedded)
|
||||
{
|
||||
return op.Failed(transactionResult.Message);
|
||||
}
|
||||
|
||||
// گام 2: ایجاد درخواست درگاه پرداخت
|
||||
extraData ??= new Dictionary<string, object>();
|
||||
|
||||
var createPaymentCommand = new CreatePaymentGatewayRequest()
|
||||
{
|
||||
Amount = amount,
|
||||
TransactionId = transactionResult.SendId.ToString(),
|
||||
CallBackUrl = gatewayCallbackUrl,
|
||||
FinancialInvoiceId = financialInvoiceId,
|
||||
ExtraData = extraData
|
||||
};
|
||||
|
||||
// گام 3: ارسال درخواست به درگاه سپهر
|
||||
var gatewayResponse = await _paymentGateway.Create(createPaymentCommand, cancellationToken);
|
||||
|
||||
#if DEBUG
|
||||
gatewayResponse.IsSuccess = true;
|
||||
#endif
|
||||
if (!gatewayResponse.IsSuccess)
|
||||
{
|
||||
return op.Failed($"خطا در ایجاد درگاه پرداخت: {gatewayResponse.Message ?? gatewayResponse.ErrorCode?.ToString()}");
|
||||
}
|
||||
|
||||
// گام 4: ذخیره Token در تراکنش
|
||||
var setTokenResult = await _paymentTransactionApplication.SetTransactionId(
|
||||
transactionResult.SendId,
|
||||
gatewayResponse.Token);
|
||||
|
||||
if (!setTokenResult.IsSuccedded)
|
||||
{
|
||||
return op.Failed("خطا در ذخیره Token درگاه");
|
||||
}
|
||||
|
||||
// گام 5: بازگشت اطلاعات درگاه پرداخت
|
||||
var response = new CreateSepehrPaymentGatewayResponse
|
||||
{
|
||||
Token = gatewayResponse.Token,
|
||||
TransactionId = transactionResult.SendId,
|
||||
PaymentUrl = _paymentGateway.GetStartPayUrl(gatewayResponse.Token)
|
||||
};
|
||||
|
||||
return op.Succcedded(response);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return op.Failed($"خطا در ایجاد درگاه پرداخت: {ex.Message}");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,20 +1,45 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Application.Sms;
|
||||
using Company.Domain.SmsResultAgg;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using CompanyManagment.App.Contracts.SmsResult.Dto;
|
||||
using CompanyManagment.EFCore.Services;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using SmsResult = Company.Domain.SmsResultAgg.SmsResult;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
public class SmsResultApplication : ISmsResultApplication
|
||||
{
|
||||
private readonly ISmsResultRepository _smsResultRepository;
|
||||
private readonly ISmsService _smsService;
|
||||
|
||||
public SmsResultApplication(ISmsResultRepository smsResultRepository)
|
||||
public SmsResultApplication(ISmsResultRepository smsResultRepository, ISmsService smsService)
|
||||
{
|
||||
_smsResultRepository = smsResultRepository;
|
||||
_smsService = smsService;
|
||||
}
|
||||
|
||||
|
||||
#region ForApi
|
||||
|
||||
public async Task<List<SmsReportDto>> GetSmsReportList(SmsReportSearchModel searchModel)
|
||||
{
|
||||
return await _smsResultRepository.GetSmsReportList(searchModel);
|
||||
}
|
||||
|
||||
public async Task<List<SmsReportListDto>> GetSmsReportExpandList(SmsReportSearchModel searchModel, string date, string typeOfSmsSetting)
|
||||
{
|
||||
return await _smsResultRepository.GetSmsReportExpandList(searchModel, date, typeOfSmsSetting);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
public OperationResult Create(CreateSmsResult command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
@@ -48,4 +73,6 @@ public class SmsResultApplication : ISmsResultApplication
|
||||
}).ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,13 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
using Company.Domain.SmsResultAgg;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using CompanyManagment.EFCore.Repository;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
namespace CompanyManagment.Application;
|
||||
|
||||
@@ -15,11 +18,16 @@ public class SmsSettingApplication : ISmsSettingApplication
|
||||
{
|
||||
private readonly ISmsSettingsRepository _smsSettingsRepository;
|
||||
private readonly IInstitutionContractRepository _institutionContractRepository;
|
||||
private readonly IInstitutionContractSmsServiceRepository _institutionContractSmsServiceRepository;
|
||||
private readonly IHostEnvironment _hostEnvironment;
|
||||
|
||||
public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository)
|
||||
public SmsSettingApplication(ISmsSettingsRepository smsSettingsRepository, IInstitutionContractRepository institutionContractRepository, IInstitutionContractSmsServiceRepository institutionContractSmsServiceRepository, IHostEnvironment hostEnvironment)
|
||||
{
|
||||
_smsSettingsRepository = smsSettingsRepository;
|
||||
_institutionContractRepository = institutionContractRepository;
|
||||
_institutionContractSmsServiceRepository = institutionContractSmsServiceRepository;
|
||||
_hostEnvironment = hostEnvironment;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -116,25 +124,31 @@ public class SmsSettingApplication : ISmsSettingApplication
|
||||
|
||||
public async Task<List<SmsListData>> GetSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
||||
{
|
||||
return await _institutionContractRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting);
|
||||
return await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, typeOfSmsSetting);
|
||||
}
|
||||
|
||||
public async Task<List<BlockSmsListData>> GetBlockSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
||||
{
|
||||
return await _institutionContractRepository.GetBlockListData(DateTime.Now);
|
||||
return await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
||||
}
|
||||
|
||||
|
||||
public async Task<OperationResult> InstantSendReminderSms(List<SmsListData> command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
if (_hostEnvironment.IsDevelopment())
|
||||
{
|
||||
|
||||
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
|
||||
|
||||
}
|
||||
string typeOfSms = "یادآور بدهی ماهانه";
|
||||
string sendMessStart = "شروع یادآور آنی";
|
||||
string sendMessEnd = "پایان یادآور آنی";
|
||||
|
||||
if (command.Any())
|
||||
{
|
||||
await _institutionContractRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd);
|
||||
await _institutionContractSmsServiceRepository.SendReminderSmsToContractingParties(command, typeOfSms, sendMessStart, sendMessEnd);
|
||||
return op.Succcedded();
|
||||
}
|
||||
else
|
||||
@@ -148,12 +162,19 @@ public class SmsSettingApplication : ISmsSettingApplication
|
||||
public async Task<OperationResult> InstantSendBlockSms(List<BlockSmsListData> command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
|
||||
if (_hostEnvironment.IsDevelopment())
|
||||
{
|
||||
|
||||
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد ");
|
||||
|
||||
}
|
||||
string typeOfSms = "اعلام مسدودی طرف حساب";
|
||||
string sendMessStart = "شروع مسدودی آنی";
|
||||
string sendMessEnd = "پایان مسدودی آنی ";
|
||||
if (command.Any())
|
||||
{
|
||||
await _institutionContractRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart,
|
||||
await _institutionContractSmsServiceRepository.SendBlockSmsToContractingParties(command, typeOfSms, sendMessStart,
|
||||
sendMessEnd);
|
||||
return op.Succcedded();
|
||||
}
|
||||
@@ -162,4 +183,166 @@ public class SmsSettingApplication : ISmsSettingApplication
|
||||
return op.Failed("موردی انتخاب نشده است");
|
||||
}
|
||||
}
|
||||
|
||||
#region ForApi
|
||||
|
||||
/// <summary>
|
||||
/// دریافت لیست پیامک های خودکار بر اساس نوع آن
|
||||
/// Api
|
||||
/// </summary>
|
||||
/// <param name="typeOfSmsSetting"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<List<SmsSettingDto>> GetSmsSettingList(TypeOfSmsSetting typeOfSmsSetting)
|
||||
{
|
||||
return await _smsSettingsRepository.GetSmsSettingList(typeOfSmsSetting);
|
||||
}
|
||||
|
||||
|
||||
public async Task<SmsSettingDto> GetSmsSettingDataToEdit(long id)
|
||||
{
|
||||
return await _smsSettingsRepository.GetSmsSettingDataToEdit(id);
|
||||
}
|
||||
|
||||
|
||||
public async Task<OperationResult> EditSmsSetting(SmsSettingDto command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
var editSmsSetting = _smsSettingsRepository.Get(command.Id);
|
||||
var timeSpan = new TimeSpan();
|
||||
if (string.IsNullOrWhiteSpace(command.TimeOfDayDisplay))
|
||||
return op.Failed("ساعت وارد نشده است");
|
||||
|
||||
try
|
||||
{
|
||||
timeSpan = TimeSpan.ParseExact(command.TimeOfDayDisplay, @"hh\:mm", null);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return op.Failed("فرمت ساعت اشتباه است");
|
||||
}
|
||||
|
||||
if (command.DayOfMonth < 1 || command.DayOfMonth > 31)
|
||||
{
|
||||
return op.Failed("عدد روز می بایست بین 1 تا 31 باشد");
|
||||
}
|
||||
|
||||
if (_smsSettingsRepository.Exists(x => x.DayOfMonth == command.DayOfMonth && x.TimeOfDay == timeSpan && x.TypeOfSmsSetting == editSmsSetting.TypeOfSmsSetting && x.id != command.Id))
|
||||
return op.Failed("رکورد ایجاد شده تکراری است");
|
||||
|
||||
|
||||
editSmsSetting.Edit(command.DayOfMonth, timeSpan);
|
||||
await _smsSettingsRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
|
||||
public async Task<List<InstantReminderSendSms>> GetInstantReminderSmsListData(TypeOfSmsSetting typeOfSmsSetting)
|
||||
{
|
||||
var result = new List<InstantReminderSendSms>();
|
||||
|
||||
|
||||
if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder)
|
||||
{
|
||||
var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
||||
|
||||
if (data.Any())
|
||||
{
|
||||
result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms()
|
||||
{
|
||||
FullName = m.Key,
|
||||
Amount = m.Select(c => c.Amount).First(),
|
||||
InstantReminderSmsList = m.Select(c => new InstantReminderSmsList()
|
||||
{
|
||||
PhoneNumber = c.PhoneNumber,
|
||||
}).ToList()
|
||||
|
||||
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty)
|
||||
{
|
||||
var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
||||
|
||||
if (data.Any())
|
||||
{
|
||||
result = data.GroupBy(x => x.PartyName).Select(m => new InstantReminderSendSms()
|
||||
{
|
||||
FullName = m.Key,
|
||||
Amount = m.Select(c => c.Amount).First(),
|
||||
InstantReminderSmsList = m.Select(c => new InstantReminderSmsList()
|
||||
{
|
||||
PhoneNumber = c.PhoneNumber,
|
||||
}).ToList()
|
||||
|
||||
|
||||
}).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<OperationResult> InstantSmsSendApi(TypeOfSmsSetting typeOfSmsSetting, List<string> phoneNumbers)
|
||||
{
|
||||
|
||||
var op = new OperationResult();
|
||||
if (_hostEnvironment.IsDevelopment())
|
||||
{
|
||||
var str = "";
|
||||
foreach (var item in phoneNumbers)
|
||||
{
|
||||
str += $" {item}, ";
|
||||
}
|
||||
return op.Failed(" در محیط توسعه امکان ارسال وجود ندارد " + " لیست ارسال شما " + str);
|
||||
|
||||
}
|
||||
if (typeOfSmsSetting == TypeOfSmsSetting.InstitutionContractDebtReminder)
|
||||
{
|
||||
if (phoneNumbers.Any())
|
||||
{
|
||||
var data = await _institutionContractSmsServiceRepository.GetSmsListData(DateTime.Now, TypeOfSmsSetting.InstitutionContractDebtReminder);
|
||||
|
||||
if (data.Any())
|
||||
{
|
||||
phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList();
|
||||
var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList();
|
||||
var res = await InstantSendReminderSms(sendItems);
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
return op.Failed("موردی انتخاب نشده است");
|
||||
|
||||
}
|
||||
|
||||
if (typeOfSmsSetting == TypeOfSmsSetting.BlockContractingParty)
|
||||
{
|
||||
if (phoneNumbers.Any())
|
||||
{
|
||||
var data = await _institutionContractSmsServiceRepository.GetBlockListData(DateTime.Now);
|
||||
|
||||
if (data.Any())
|
||||
{
|
||||
phoneNumbers = phoneNumbers.Where(x => x.Length == 11).ToList();
|
||||
var sendItems = data.Where(x => phoneNumbers.Contains(x.PhoneNumber)).ToList();
|
||||
var res = await InstantSendBlockSms(sendItems);
|
||||
return res;
|
||||
}
|
||||
return op.Succcedded();
|
||||
}
|
||||
return op.Failed("موردی انتخاب نشده است");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return op.Failed("خطای انتخاب نوع ارسال");
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@@ -407,6 +407,10 @@ public class WorkshopAppliction : IWorkshopApplication
|
||||
public EditWorkshop GetDetails(long id)
|
||||
{
|
||||
var workshop = _workshopRepository.GetDetails(id);
|
||||
if (workshop == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
if (workshop.IsClassified)
|
||||
{
|
||||
workshop.CreatePlan = _workshopPlanApplication.GetWorkshopPlanByWorkshopId(id);
|
||||
|
||||
@@ -34,7 +34,7 @@ class CheckoutMapping : IEntityTypeConfiguration<Checkout>
|
||||
builder.Property(x => x.FamilyAllowance);
|
||||
builder.Property(x => x.HousingAllowance);
|
||||
builder.Property(x => x.ConsumableItems);
|
||||
builder.Property(x => x.RewardPay).HasColumnType("float").IsRequired(false);
|
||||
builder.Property(x => x.RewardPay);
|
||||
|
||||
builder.Property(x => x.LeaveCheckout);
|
||||
builder.Property(x => x.CreditLeaves);
|
||||
@@ -82,6 +82,15 @@ class CheckoutMapping : IEntityTypeConfiguration<Checkout>
|
||||
salaryAid.Property(x => x.CalculationDateTimeFa).HasMaxLength(15);
|
||||
});
|
||||
|
||||
|
||||
builder.OwnsMany(x => x.Rewards, reward =>
|
||||
{
|
||||
reward.Property(x => x.Description).HasColumnType("ntext");
|
||||
reward.Property(x => x.Title).HasMaxLength(255);
|
||||
reward.Property(x=> x.Amount).HasMaxLength(25);
|
||||
reward.Property(x => x.GrantDateFa).HasMaxLength(10);
|
||||
});
|
||||
|
||||
builder.OwnsOne(x => x.CheckoutRollCall, rollCall =>
|
||||
{
|
||||
rollCall.Property(x => x.TotalPresentTimeSpan).HasTimeSpanConversion();
|
||||
|
||||
11566
CompanyManagment.EFCore/Migrations/20260124132444_Add Reward to checkout.Designer.cs
generated
Normal file
11566
CompanyManagment.EFCore/Migrations/20260124132444_Add Reward to checkout.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,66 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddRewardtocheckout : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AlterColumn<double>(
|
||||
name: "RewardPay",
|
||||
table: "Checkouts",
|
||||
type: "float",
|
||||
nullable: false,
|
||||
defaultValue: 0.0,
|
||||
oldClrType: typeof(double),
|
||||
oldType: "float",
|
||||
oldNullable: true);
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "CheckoutReward",
|
||||
columns: table => new
|
||||
{
|
||||
Checkoutid = table.Column<long>(type: "bigint", nullable: false),
|
||||
Id = table.Column<int>(type: "int", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
Amount = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
|
||||
AmountDouble = table.Column<double>(type: "float", nullable: false),
|
||||
GrantDateFa = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: true),
|
||||
GrantDateGr = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||
Description = table.Column<string>(type: "ntext", nullable: true),
|
||||
Title = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true),
|
||||
EntityId = table.Column<long>(type: "bigint", nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_CheckoutReward", x => new { x.Checkoutid, x.Id });
|
||||
table.ForeignKey(
|
||||
name: "FK_CheckoutReward_Checkouts_Checkoutid",
|
||||
column: x => x.Checkoutid,
|
||||
principalTable: "Checkouts",
|
||||
principalColumn: "id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "CheckoutReward");
|
||||
|
||||
migrationBuilder.AlterColumn<double>(
|
||||
name: "RewardPay",
|
||||
table: "Checkouts",
|
||||
type: "float",
|
||||
nullable: true,
|
||||
oldClrType: typeof(double),
|
||||
oldType: "float");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -635,7 +635,7 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
b.Property<double?>("RewardPay")
|
||||
b.Property<double>("RewardPay")
|
||||
.HasColumnType("float");
|
||||
|
||||
b.Property<string>("RotatingShiftValue")
|
||||
@@ -7501,6 +7501,49 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasForeignKey("Checkoutid");
|
||||
});
|
||||
|
||||
b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutReward", "Rewards", b1 =>
|
||||
{
|
||||
b1.Property<long>("Checkoutid")
|
||||
.HasColumnType("bigint");
|
||||
|
||||
b1.Property<int>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("int");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<int>("Id"));
|
||||
|
||||
b1.Property<string>("Amount")
|
||||
.HasMaxLength(25)
|
||||
.HasColumnType("nvarchar(25)");
|
||||
|
||||
b1.Property<double>("AmountDouble")
|
||||
.HasColumnType("float");
|
||||
|
||||
b1.Property<string>("Description")
|
||||
.HasColumnType("ntext");
|
||||
|
||||
b1.Property<long>("EntityId")
|
||||
.HasColumnType("bigint");
|
||||
|
||||
b1.Property<string>("GrantDateFa")
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
b1.Property<DateTime>("GrantDateGr")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b1.Property<string>("Title")
|
||||
.HasMaxLength(255)
|
||||
.HasColumnType("nvarchar(255)");
|
||||
|
||||
b1.HasKey("Checkoutid", "Id");
|
||||
|
||||
b1.ToTable("CheckoutReward");
|
||||
|
||||
b1.WithOwner()
|
||||
.HasForeignKey("Checkoutid");
|
||||
});
|
||||
|
||||
b.OwnsMany("Company.Domain.CheckoutAgg.ValueObjects.CheckoutSalaryAid", "SalaryAids", b1 =>
|
||||
{
|
||||
b1.Property<long>("Checkoutid")
|
||||
@@ -7545,6 +7588,8 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
|
||||
b.Navigation("LoanInstallments");
|
||||
|
||||
b.Navigation("Rewards");
|
||||
|
||||
b.Navigation("SalaryAids");
|
||||
|
||||
b.Navigation("Workshop");
|
||||
|
||||
@@ -531,6 +531,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
|
||||
entity.SetSalaryAid(command.SalaryAids, command.SalaryAidDeduction);
|
||||
entity.SetLoanInstallment(command.LoanInstallments, command.InstallmentDeduction);
|
||||
entity.SetReward(command.Rewards,command.RewardPay);
|
||||
entity.SetCheckoutRollCall(command.CheckoutRollCall);
|
||||
entity.SetEmployeeMandatoryHours(command.EmployeeMandatoryHours);
|
||||
if(command.HasInsuranceShareTheSameAsList)
|
||||
@@ -934,7 +935,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
TotalClaims = item.TotalClaims,
|
||||
TotalDeductions = item.TotalDeductions,
|
||||
TotalPayment = item.TotalPayment.ToMoney(),
|
||||
RewardPay = item.RewardPay.ToMoneyNullable(),
|
||||
RewardPay = item.RewardPay.ToMoney(),
|
||||
ContractStartGr = item.ContractStart,
|
||||
ContractEndGr = item.ContractEnd,
|
||||
IsLeft = false,
|
||||
@@ -1335,7 +1336,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
TotalClaims = x.TotalClaims,
|
||||
TotalDeductions = x.TotalDeductions,
|
||||
TotalPayment = x.TotalPayment.ToMoney(),
|
||||
RewardPay = x.RewardPay.ToMoneyNullable(),
|
||||
RewardPay = x.RewardPay.ToMoney(),
|
||||
ContractStartGr = x.ContractStart,
|
||||
ContractEndGr = x.ContractEnd,
|
||||
IsLeft = false,
|
||||
|
||||
@@ -5,6 +5,8 @@ using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Exceptions;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Company.Domain.ContractAgg;
|
||||
using Company.Domain.empolyerAgg;
|
||||
@@ -1081,30 +1083,7 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
|
||||
var weeklyDouble = 0.0;
|
||||
var weekly = c.WorkingHoursWeekly;
|
||||
if (!string.IsNullOrWhiteSpace(weekly) &&
|
||||
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
|
||||
{
|
||||
if (weekly.Contains("/"))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else if (weekly.Contains("."))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
c.WorkingHoursWeekly = hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else
|
||||
{
|
||||
c.WorkingHoursWeekly = c.WorkingHoursWeekly + " " + "ساعت";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
c.WorkingHoursWeekly = WeeklyHourConvertor(weekly);
|
||||
var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds)
|
||||
.Select(x => x.EmployerId).ToList();
|
||||
c.Employers = _employerRepository.GetEmployers(emp);
|
||||
@@ -1161,6 +1140,37 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
return query;
|
||||
}
|
||||
|
||||
private static string WeeklyHourConvertor(string weekly)
|
||||
{
|
||||
double weeklyDouble;
|
||||
if (!string.IsNullOrWhiteSpace(weekly) &&
|
||||
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
|
||||
{
|
||||
if (weekly.Contains("/"))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else if (weekly.Contains("."))
|
||||
{
|
||||
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
|
||||
var minute = (int)((weeklyDouble % 1) * 60);
|
||||
var hour = (int)(weeklyDouble);
|
||||
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
||||
}
|
||||
else
|
||||
{
|
||||
return weekly + " " + "ساعت";
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
public IQueryable<WorkshopEmployerViewModel> GetWorkshopEmployer()
|
||||
{
|
||||
return _context.WorkshopEmployers.Select(x => new WorkshopEmployerViewModel
|
||||
@@ -1506,6 +1516,195 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
|
||||
}
|
||||
|
||||
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
|
||||
{
|
||||
var workshopId = _authHelper.GetWorkshopId();
|
||||
var query = _context.Contracts
|
||||
.Where(c => c.WorkshopIds == workshopId);
|
||||
|
||||
#region Search
|
||||
|
||||
if (searchModel.EmployeeId > 0)
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))
|
||||
{
|
||||
if (!searchModel.StartDate.TryToGeorgianDateTime(out var startDate))
|
||||
throw new BadRequestException("تاریخ شروع وارد شده معتبر نمی باشد.");
|
||||
|
||||
if (!searchModel.EndDate.TryToGeorgianDateTime(out var endDate))
|
||||
throw new BadRequestException("تاریخ پایان وارد شده معتبر نمی باشد.");
|
||||
|
||||
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
|
||||
}
|
||||
|
||||
if (searchModel.Year>0 && searchModel.Month >0)
|
||||
{
|
||||
|
||||
var startDateFa = $"{searchModel.Year:0000}/{searchModel.Month:00}/01";
|
||||
if (!startDateFa.TryToGeorgianDateTime(out var startDate))
|
||||
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
|
||||
|
||||
if(!startDateFa.FindeEndOfMonth().TryToGeorgianDateTime(out var endDate))
|
||||
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
|
||||
|
||||
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
|
||||
}
|
||||
|
||||
if (searchModel.OrderType != null)
|
||||
{
|
||||
switch (searchModel.OrderType)
|
||||
{
|
||||
case ContractListOrderType.ByContractCreationDate:
|
||||
query = query.OrderBy(x => x.CreationDate);
|
||||
break;
|
||||
case ContractListOrderType.ByContractStartDate:
|
||||
query = query.OrderBy(x => x.ContarctStart);
|
||||
break;
|
||||
case ContractListOrderType.ByContractStartDateDescending:
|
||||
query = query.OrderByDescending(x=>x.ContarctStart);
|
||||
break;
|
||||
case ContractListOrderType.ByPersonnelCode:
|
||||
query = query.OrderBy(x => x.PersonnelCode);
|
||||
break;
|
||||
case ContractListOrderType.ByPersonnelCodeDescending:
|
||||
query = query.OrderByDescending(x => x.PersonnelCode);
|
||||
break;
|
||||
case ContractListOrderType.BySignedContract:
|
||||
query = query.OrderByDescending(x => x.Signature == "1");
|
||||
break;
|
||||
case ContractListOrderType.ByUnSignedContract:
|
||||
query = query.OrderBy(x => x.Signature == "1");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
query = query.OrderByDescending(x => x.id);
|
||||
}
|
||||
#endregion
|
||||
|
||||
var pagedList =await query
|
||||
.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
|
||||
var employeeIds = pagedList.Select(x => x.EmployeeId).ToList();
|
||||
|
||||
var employees = await _context.Employees
|
||||
.Where(x => employeeIds.Contains(x.id)).Select(x => new
|
||||
{
|
||||
Id = x.id,
|
||||
x.FullName
|
||||
}).ToListAsync();
|
||||
|
||||
var result = new PagedResult<GetContractListForClientResponse>
|
||||
{
|
||||
TotalCount = await query.CountAsync(),
|
||||
List = pagedList.Select(c =>
|
||||
{
|
||||
var employeeFullName = employees
|
||||
.FirstOrDefault(e => e.Id == c.EmployeeId)?.FullName ?? "";
|
||||
|
||||
return new GetContractListForClientResponse
|
||||
{
|
||||
Id = c.id,
|
||||
PersonnelCode = c.PersonnelCode.ToString(),
|
||||
ContractStart = c.ContarctStart.ToFarsi(),
|
||||
ContractEnd = c.ContractEnd.ToFarsi(),
|
||||
ContractNo = c.ContractNo,
|
||||
IsSigned = c.Signature == "1",
|
||||
EmployeeFullName = employeeFullName,
|
||||
AvgWorkingHour = WeeklyHourConvertor(c.WorkingHoursWeekly),
|
||||
DailyWage = c.DayliWage,
|
||||
FamilyAllowance = c.FamilyAllowance
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public async Task<List<ContractPrintViewModel>> PrintAllAsync(List<long> ids)
|
||||
{
|
||||
var query =await _context.Contracts.Include(x => x.Employer)
|
||||
.Include(x => x.Employee).Where(x => ids.Contains(x.id))
|
||||
.ToListAsync();
|
||||
|
||||
var workshopIds = query.Select(x => x.WorkshopIds).Distinct().ToList();
|
||||
|
||||
var workshops = await _context.Workshops
|
||||
.Where(x => workshopIds.Contains(x.id))
|
||||
.ToListAsync();
|
||||
|
||||
List<long> exceptionWorkshops = [516,63,38,39];
|
||||
var res = query.Select(x =>
|
||||
{
|
||||
var workshop = workshops.FirstOrDefault(w => w.id == x.WorkshopIds);
|
||||
|
||||
var employerRes = new ContractPrintEmployerViewModel()
|
||||
{
|
||||
WorkshopName = workshop!.WorkshopName,
|
||||
Address =$"{workshop.State} - {workshop.City} - {workshop.Address}",
|
||||
LegalType = x.Employer.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal,
|
||||
LegalEmployer = x.Employer.IsLegal == "حقیقی"
|
||||
? null
|
||||
: new ContractPrintLegalEmployerViewModel()
|
||||
{
|
||||
NationalId = x.Employer.NationalId,
|
||||
RegisterId = x.Employer.RegisterId,
|
||||
CompanyName = x.Employer.LName,
|
||||
},
|
||||
RealEmployer = x.Employer.IsLegal == "حقیقی"
|
||||
? new ContractPrintRealEmployerViewModel()
|
||||
{
|
||||
FullName = x.Employer.FullName,
|
||||
IdNumber = x.Employer.IdNumber,
|
||||
NationalCode = x.Employer.Nationalcode
|
||||
}
|
||||
: null,
|
||||
WorkshopCode = workshop.InsuranceCode
|
||||
|
||||
};
|
||||
var employeeRes = new ContractPrintEmployeeViewModel()
|
||||
{
|
||||
Address =$"{x.Employee.State} - {x.Employee.City} - {x.Employee.Address}" ,
|
||||
FullName = x.Employee.FullName,
|
||||
IdNumber = x.Employee.IdNumber,
|
||||
NationalCode = x.Employee.NationalCode,
|
||||
DateOfBirth = x.Employee.DateOfBirth.ToFarsi(),
|
||||
FatherName = x.Employee.FatherName,
|
||||
LevelOfEducation = x.Employee.LevelOfEducation
|
||||
};
|
||||
|
||||
var typeOfContract = new ContractPrintTypeOfContractViewModel()
|
||||
{
|
||||
ContarctStart = x.ContarctStart.ToFarsi(),
|
||||
ContractEnd = x.ContractEnd.ToFarsi(),
|
||||
JobName = x.JobType,
|
||||
ContractType = x.ContractType,
|
||||
SetContractDate = x.SetContractDate.ToFarsi(),
|
||||
WorkingHoursWeekly = WeeklyHourConvertor(x.WorkingHoursWeekly),
|
||||
WorkshopAddress = [x.WorkshopAddress1, x.WorkshopAddress2],
|
||||
};
|
||||
ContractPrintFeesViewModel fees= new ContractPrintFeesViewModel()
|
||||
{
|
||||
DailyWage = x.DayliWage,
|
||||
FamilyAllowance = x.FamilyAllowance,
|
||||
HousingAllowance = x.HousingAllowance,
|
||||
ConsumableItems = x.ConsumableItems,
|
||||
};
|
||||
return new ContractPrintViewModel()
|
||||
{
|
||||
Employer = employerRes,
|
||||
Employee = employeeRes,
|
||||
TypeOfContract = typeOfContract,
|
||||
Fees = fees,
|
||||
ContractNo = x.ContractNo,
|
||||
ConditionAndDetials = exceptionWorkshops.Contains(x.WorkshopIds) ? "بر اساس ماده 190 قانون کار جمهوری اسلامی ایران ، پرسنل اقرار مینماید کلیه مبالغ پیش بینی شده در قانون کار را وفق قرارداد منعقده دریافت مینماید. این مبالغ قسمتی بصورت مستقیم از سوی کارفرما و قسمتی بر اساس شرایط کارگاه از محل درآمد حاصله از مشتری اخذ میگردد . با توجه به شرایط کارگاه کلیه مبالغ بصورت واریز به حساب و وجه نقد رایج کشور ، تواما به پرسنل پرداخت میگردد. امضا تصفیه حساب دارای مبالغ ، توسط پرسنل نشانگر تصفیه قطعی ایشان میباشد.": "",
|
||||
|
||||
};
|
||||
}).ToList();
|
||||
return res;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user