Merge branch 'Feature/Chcekout/AddHasConflict'

This commit is contained in:
MahanCh
2025-08-13 16:29:49 +03:30
100 changed files with 47327 additions and 2281 deletions

View File

@@ -25,14 +25,22 @@ jobs:
run: dotnet restore
- name: Build
run: dotnet build --configuration Release
run: dotnet build --configuration Release
- name: Publish
run: dotnet publish --configuration Release --output ./publish --no-build
run: dotnet publish --configuration Release --output ./publish /p:EnvironmentName=Development --no-build
- name: Deploy to IIS via Web Deploy
shell: powershell
run: |
msdeploy -verb:sync -source:contentPath="publish" -dest:contentPath="dadmehrg",computerName="https://171.22.24.15:8172/msdeploy.axd?site=dadmehrg",userName=".\deployuser",password="R2rNpdnetP3j>q5b18",authType="Basic" -allowUntrusted
$publishFolder = Resolve-Path ./publish
& "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=".\deployuser",password="R2rNpdnetP3j>q5b18",authType="Basic" `
-allowUntrusted `
-enableRule:AppOffline
env:
SERVER_HOST: your-server-ip-or-domain

View File

@@ -0,0 +1,15 @@
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
namespace _0_Framework.Application;
public class PagedResult<T> where T : class
{
public int TotalCount { get; set; }
public List<T> List { get; set; }
}
public class PagedResult<T,TMeta>:PagedResult<T> where T : class
{
public TMeta? Meta { get; set; }
}

View File

@@ -0,0 +1,7 @@
namespace _0_Framework.Application;
public class PaginationRequest
{
public int PageIndex { get; set; } = 1;
public int PageSize { get; set; } = 30;
}

View File

@@ -24,7 +24,7 @@ public class AqayePardakhtPaymentGateway:IPaymentGateway
{
_httpClient = httpClientFactory.CreateClient();
if (appSetting.Value.Domain == ".dad-mehr.ir")
if (appSetting.Value.Domain == ".dadmehrg.ir")
{
_pin = "7349F84E81AB584862D9";
}

View File

@@ -193,6 +193,10 @@ public class Checkout : EntityBase
/// </summary>
public string TotalDayOfBunosesCompute { get; private set; }
/// <summary>
/// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد
/// </summary>
public bool HasAmountConflict { get; private set; }
#region valueObjects
@@ -316,6 +320,11 @@ public class Checkout : EntityBase
{
CheckoutRollCall = checkoutRollCall;
}
public void SetAmountConflict(bool hasAmountConflict)
{
HasAmountConflict = hasAmountConflict;
}
}
public class CheckoutRollCall

View File

@@ -78,4 +78,6 @@ public interface ICheckoutRepository : IRepository<long, Checkout>
long workshopId, DateTime start, DateTime end);
#endregion
Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate);
}

View File

@@ -8,10 +8,12 @@ namespace Company.Domain.ContractingPartyBankAccountsAgg;
public interface IContractingPartyBankAccountsRepository:IRepository<long,ContractingPartyBankAccount>
{
Task<OperationResult<List<GetContractingPartyBankAccountViewModel>>> GetList(ContractingPartyBankAccountSearchModel searchModel);
Task<OperationResult<List<string>>> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
Task<OperationResult<List<string>>> IBanSelectList(string search, string selected);
Task<GetContractingPartyBankAccountViewModel> GetList(ContractingPartyBankAccountSearchModel searchModel);
Task<List<string>> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
Task<List<string>> IBanSelectList(string search, string selected);
Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected);
Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected);
Task<List<string>> CardNumberSelectList(string search, string selected);
Task<List<string>> AccountNumberSelectList(string search, string selected);
Task<List<string>> GetAccountHolderNameSelectList(string search, string selected);
Task<List<string>> ContractingPartyNamesSelectList(string search, string selected);
}

View File

@@ -374,6 +374,13 @@ public class CustomizeCheckout : EntityBase
TotalPayment = TotalPayment - previousAmount + newAmount;
}
/// <summary>
/// آیا مغایرت مبلغ دارد
/// </summary>
public bool HasAmountConflict { get; private set; }
public void SetHasAmountConflict(bool hasConflict)
{
HasAmountConflict = hasConflict;
}
}

View File

@@ -377,4 +377,16 @@ public class CustomizeCheckoutTemp : EntityBase
{
TotalPayment = TotalPayment - previousAmount + newAmount;
}
/// <summary>
/// آیا مغایرت مبلغ دارد
/// </summary>
public bool HasAmountConflict { get; private set; }
public void SetHasAmountConflict(bool hasConflict)
{
HasAmountConflict = hasConflict;
}
}

View File

@@ -13,12 +13,14 @@ namespace Company.Domain.FinancialStatmentAgg;
public interface IFinancialStatmentRepository : IRepository<long, FinancialStatment>
{
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetDetailsByContractingParty استفاده کنید.")]
FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId);
List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel);
Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(long accountId,
ClientFinancialStatementSearchModel searchModel);
FinancialStatementSearchModel searchModel);
Task<OperationResult<ClientFinancialStatementViewModel>> GetDetailsByPublicId(string publicId);
Task<GetFinancialStatementBalanceAmount> GetBalanceAmount(long id);
Task<double> GetClientDebtAmount(long accountId);
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,FinancialStatementSearchModel searchModel);
}

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.Workshop;
@@ -43,4 +44,7 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
/// <param name="endOfMonth"></param>
/// <param name="description"></param>
void RollcallServiceCreateTransaction();
Task<PagedResult<GetInstitutionContractListItemsViewModel>> GetList(InstitutionContractListSearchModel searchModel);
Task<GetInstitutionContractListStatsViewModel> GetListStats(InstitutionContractListSearchModel searchModel);
}

View File

@@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public interface IPaymentInstrumentGroupRepository:IRepository<long,PaymentInstrumentGroup>
{
void Remove(PaymentInstrumentGroup paymentInstrumentGroup);
Task<List<PaymentInstrumentGroupsViewModel>> GetList();
}

View File

@@ -0,0 +1,19 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public interface IPaymentInstrumentRepository:IRepository<long,PaymentInstrument>
{
Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel);
Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search);
Task<List<string>> PosTerminalIdSelectList(string search, string selected);
Task<List<string>> IbanSelectList(string search, string selected);
Task<List<string>> AccountNumberSelectList(string search, string selected);
Task<List<string>> CardNumberSelectList(string search, string selected);
Task<List<string>> AccountHolderNameSelectList(string search, string selected);
}

View File

@@ -0,0 +1,52 @@
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public class PaymentInstrument:EntityBase
{
private PaymentInstrument(string cardNumber, string accountHolderName, string accountNumber,string iBan,bool isAuth,long paymentInstrumentGroupId)
{
CardNumber = cardNumber;
AccountHolderName = accountHolderName;
AccountNumber = accountNumber;
IBan = iBan;
IsAuth = isAuth;
PaymentInstrumentGroupId = paymentInstrumentGroupId;
Type = PaymentInstrumentType.BankAccount;
}
private PaymentInstrument(string posTerminalId , string description,long paymentInstrumentGroupId)
{
PosTerminalId = posTerminalId;
Description = description;
PaymentInstrumentGroupId = paymentInstrumentGroupId;
Type = PaymentInstrumentType.Pos;
}
public static PaymentInstrument CreatePosType(string posTerminalId, string description, long paymentInstrumentGroupId)
{
return new PaymentInstrument(posTerminalId, description, paymentInstrumentGroupId);
}
public static PaymentInstrument CreateBankAccount(string cardNumber, string accountHolderName, string accountNumber,
string iBan, bool isAuth, long paymentInstrumentGroupId)
{
return new PaymentInstrument(cardNumber, accountHolderName, accountNumber, iBan, isAuth, paymentInstrumentGroupId);
}
public string CardNumber { get; private set; }
public string AccountHolderName { get; private set; }
public string AccountNumber { get; private set; }
public string IBan { get; private set; }
public string PosTerminalId { get; private set; }
public string Description { get; set; }
public PaymentInstrumentType Type { get; private set; }
public bool IsAuth { get; private set; }
public long PaymentInstrumentGroupId { get; private set; }
public PaymentInstrumentGroup PaymentInstrumentGroup { get; private set; }
}

View File

@@ -0,0 +1,28 @@
using System.Collections.Generic;
using _0_Framework.Application;
using _0_Framework.Domain;
namespace Company.Domain.PaymentInstrumentAgg;
public class PaymentInstrumentGroup:EntityBase
{
public PaymentInstrumentGroup(string name)
{
Name = name;
IsActive = IsActive.True;
}
public string Name { get; private set; }
public IsActive IsActive { get; private set; }
public List<PaymentInstrument> PaymentInstruments { get; set; }
public void Edit(string name)
{
Name = name;
}
public void DeActive()
{
IsActive = IsActive.False;
}
}

View File

@@ -141,6 +141,7 @@ public class CheckoutViewModel
public List<LoanInstallmentViewModel> InstallmentViewModels { get; set; }
public List<SalaryAidViewModel> SalaryAidViewModels { get; set; }
public CheckoutRollCallViewModel CheckoutRollCall { get; set; }
public bool HasAmountConflict { get; set; }
}

View File

@@ -6,6 +6,16 @@ namespace CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
/// لیست اطلاعات بانکی طرف حساب
/// </summary>
public class GetContractingPartyBankAccountViewModel
{
/// <summary>
/// تعداد
/// </summary>
public int Count { get; set; }
public List<ContractingPartyBankAccountsGroupedViewModel> List { get; set; }
}
public class ContractingPartyBankAccountsGroupedViewModel
{
/// <summary>
/// لیست حساب های بانکی
@@ -27,6 +37,7 @@ public class GetContractingPartyBankAccountViewModel
/// </summary>
public string WorkshopName { get; set; }
}
/// <summary>
/// حساب بانکی طرف حساب
/// </summary>

View File

@@ -18,14 +18,14 @@ public interface IContractingPartyBankAccountsApplication
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> Create(CreateContractingPartyBankAccounts command);
Task<OperationResult> Create(List<CreateContractingPartyBankAccounts> commands);
/// <summary>
/// لیست اطلاعات طرف حساب بانکی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<OperationResult<List<GetContractingPartyBankAccountViewModel>>> GetList(
ContractingPartyBankAccountSearchModel searchModel);
Task<GetContractingPartyBankAccountViewModel> GetList(ContractingPartyBankAccountSearchModel searchModel);
/// <summary>
/// سلکت لیست جستجو برای نام طرف حساب / صاحب حساب
@@ -33,7 +33,7 @@ public interface IContractingPartyBankAccountsApplication
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<OperationResult<List<string>>> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
Task<List<string>> ContractingPartyOrAccountHolderNameSelectList(string search, string selected);
/// <summary>
/// سلکت لیست شماره کارت
@@ -41,7 +41,7 @@ public interface IContractingPartyBankAccountsApplication
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected);
Task<List<string>> CardNumberSelectList(string search, string selected);
/// <summary>
/// سلکت لیست شماره شبا
@@ -49,7 +49,7 @@ public interface IContractingPartyBankAccountsApplication
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<OperationResult<List<string>>> IBanSelectList(string search, string selected);
Task<List<string>> IBanSelectList(string search, string selected);
/// <summary>
/// سلکت لیست شماره حساب
@@ -57,6 +57,22 @@ public interface IContractingPartyBankAccountsApplication
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected);
Task<List<string>> AccountNumberSelectList(string search, string selected);
/// <summary>
/// سلکت لیست نام صاحبان حساب
/// </summary>
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<List<string>> GetAccountHolderNameSelectList(string search, string selected);
/// <summary>
/// سلکت لیست نام طرف حساب‌ها
/// </summary>
/// <param name="search">نام جستجو</param>
/// <param name="selected">نام سلکت شده</param>
/// <returns></returns>
Task<List<string>> ContractingPartyNamesSelectList(string search, string selected);
}

View File

@@ -109,6 +109,8 @@ namespace CompanyManagment.App.Contracts.CustomizeCheckout
public List<CustomizeRotatingShift> CustomizeRotatingShifts { get; set; }
public List<CustomizeSifts> RegularShift { get; set; }
public bool HasAmountConflict { get; set; }
//public bool HasLeft { get; set; }
//public string IsBlockCantracingParty { get; set; }
//public string IsActiveString { get; set; }

View File

@@ -30,5 +30,5 @@ public class ClientFinancialStatementViewModel
/// <summary>
/// تراکنش ها
/// </summary>
public List<ClientFinancialTransactionViewModel> Transactions { get; set; }
public List<FinancialTransactionDetailViewModel> Transactions { get; set; }
}

View File

@@ -1,6 +1,6 @@
namespace CompanyManagment.App.Contracts.FinancialStatment;
public class ClientFinancialStatementSearchModel
public class FinancialStatementSearchModel
{
/// <summary>
/// از تاریخ

View File

@@ -2,8 +2,9 @@
namespace CompanyManagment.App.Contracts.FinancialStatment;
public class ClientFinancialTransactionViewModel
public class FinancialTransactionDetailViewModel
{
public long Id { get; set; }
/// <summary>
/// زمان و تاریخ میلادی
/// </summary>

View File

@@ -1,4 +1,5 @@
using _0_Framework.Application;
using System;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.FinancilTransaction;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
@@ -19,6 +20,7 @@ public interface IFinancialStatmentApplication
OperationResult Create(CreateFinancialStatment command);
List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel);
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetDetailsByContractingParty استفاده کنید.")]
FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId);
/// <summary>
@@ -27,9 +29,10 @@ public interface IFinancialStatmentApplication
/// <param name="searchModel"></param>
/// <param name="accountId"></param>
/// <returns>مدل صورت حساب مالی کلاینت</returns>
Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(ClientFinancialStatementSearchModel searchModel,
Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(FinancialStatementSearchModel searchModel,
long accountId);
/// <summary>
/// نمایش اطلاعات صورت حساب مالی کلاینت بر اساس کد هش
/// </summary>
@@ -50,6 +53,46 @@ public interface IFinancialStatmentApplication
/// <param name="accountId"></param>
/// <returns></returns>
Task<double> GetClientDebtAmount(long accountId);
/// <summary>
/// جزئیات بر اساس
/// </summary>
/// <param name="contractingPartyId"></param>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,
FinancialStatementSearchModel searchModel);
}
public class FinancialStatmentDetailsByContractingPartyViewModel
{
/// <summary>
/// آیدی FinancialStatement
/// </summary>
public long Id { get; set; }
/// <summary>
/// نام طرف حساب
/// </summary>
public string ContractingPartyName { get; set; }
/// <summary>
/// جمع بدهکاری
/// </summary>
public double TotalDebt { get; set; }
/// <summary>
/// جمع بستانکاری
/// </summary>
public double TotalCredit { get; set; }
/// <summary>
/// مبلغ قابل پرداخت
/// </summary>
public double TotalAmountPayable { get; set; }
/// <summary>
/// تراکنش ها
/// </summary>
public List<FinancialTransactionDetailViewModel> List { get; set; }
}
public class GetFinancialStatementBalanceAmount

View File

@@ -0,0 +1,29 @@
using System.Collections.Generic;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class CreateInstitutionContractRequest
{
public List<CreateContactInfo> ContactInfos { get; set; }
public long ContractingPartyId { get; set; }
public long RepresentativeId { get; set; }
public string TypeOfContract { get; set; }
public string ContractDateFa { get; set; }
public string ContractStartFa { get; set; }
public string ContractEndFa { get; set; }
public string Address { get; set; }
public string State { get; set; }
public string City { get; set; }
public string OfficialCompany { get; set; }
public string HasValueAddedTax { get; set; }
public string ContractAmountString { get; set; }
public string DailyCompenseationString { get; set; }
public string ObligationString { get; set; }
public string TotalAmountString { get; set; }
public string ValueAddedTaxStr { get; set; }
public string WorkshopManualCount { get; set; }
public string EmployeeManualCount { get; set; }
public string Description { get; set; }
public int ExtensionNo { get; set; }
}

View File

@@ -0,0 +1,6 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class EditInstitutionContractRequest:CreateInstitutionContractRequest
{
public long Id { get; set; }
}

View File

@@ -0,0 +1,86 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class GetInstitutionContractListItemsViewModel
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
/// <summary>
/// دارای امضا
/// </summary>
public bool HasSigniture { get; set; }
/// <summary>
/// شماره قرارداد
/// </summary>
public string ContractNo { get; set; }
/// <summary>
/// نام معرف
/// </summary>
public string RepresentativeName { get; set; }
/// <summary>
/// نام طرف حساب
/// </summary>
public string ContractingPartyName { get; set; }
/// <summary>
/// شماره کارفرما
/// </summary>
public string ArchiveNo { get; set; }
/// <summary>
/// نام کارفرماها
/// </summary>
public List<string> EmployerNames { get; set; }
/// <summary>
/// تعداد کارگاه
/// </summary>
public int WorkshopsCount { get; set; }
/// <summary>
/// نام کارگاه ها
/// </summary>
public List<string> WorkshopNames { get; set; }
/// <summary>
/// تعداد پرسنل
/// </summary>
public int EmployeesCount { get; set; }
/// <summary>
/// شروع قرارداد
/// </summary>
public string ContractStartFa { get; set; }
/// <summary>
/// پایان قرارداد
/// </summary>
public string ContractEndFa { get; set; }
/// <summary>
/// مبلغ قرارداد
/// </summary>
public double ContractAmount { get; set; }
/// <summary>
/// وضعیت مالی
/// </summary>
public double Balance { get; set; }
/// <summary>
/// وضعیت قرارداد
/// </summary>
public InstitutionContractStatus Status { get; set; }
/// <summary>
/// آیا منقضی شده است
/// </summary>
public bool IsExpired { get; set; }
}

View File

@@ -0,0 +1,22 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.InstitutionContract;
/// <summary>
/// لیست قرارداد های موسسه
/// </summary>
public class GetInstitutionContractListViewModel
{
/// <summary>
/// بدهی کل
/// </summary>
public double TotalDebt { get; set; }
/// <summary>
/// مبلغ قرارداد ها
/// </summary>
public double TotalAmount { get; set; }
public List<GetInstitutionContractListItemsViewModel> Items { get; set; }
}

View File

@@ -1,15 +1,19 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Mvc;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public interface IInstitutionContractApplication
{
OperationResult Create(CreateInstitutionContract command);
OperationResult Extension(CreateInstitutionContract command);
OperationResult Extension(CreateInstitutionContract command);
OperationResult Edit(EditInstitutionContract command);
EditInstitutionContract GetDetails(long id);
@@ -23,19 +27,107 @@ public interface IInstitutionContractApplication
/// </summary>
/// <returns></returns>
List<InstitutionContractViewModel> GetInstitutionContractToSetServicesExcelImport();
List<InstitutionContractViewModel> PrintAll(List<long> id);
InstitutionContractViewModel PrintOne(long id);
OperationResult Active(long id);
OperationResult DeActive(long id);
OperationResult DeActiveBlue(long id);
OperationResult DeActiveAllConnections(long id);
OperationResult ReActiveAllConnections(long id);
void ReActiveAllAfterCreateNew(long contractingPartyId);
void RemoveContract(long id);
OperationResult Sign(long id);
OperationResult UnSign(long id);
void CreateContractingPartyAccount(long contractingPartyid, long accountId);
double GetcontractAmount(int countPerson);
#region Api
/// <summary>
/// لیست قرارداد های مالی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<PagedResult<GetInstitutionContractListItemsViewModel>> GetList
(InstitutionContractListSearchModel searchModel);
/// <summary>
/// وضعیت لیست کلی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<GetInstitutionContractListStatsViewModel> GetListStats(InstitutionContractListSearchModel searchModel);
/// <summary>
/// ایجاد
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateAsync(CreateInstitutionContractRequest command);
/// <summary>
/// ویرایش
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> EditAsync(EditInstitutionContractRequest command);
/// <summary>
/// تمدید قرارداد
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> ExtensionَAsync(CreateInstitutionContractRequest command);
#endregion
}
public class GetInstitutionContractListStatsViewModel
{
/// <summary>
/// Represents the total outstanding debt of institution contracts.
/// This property aggregates the liabilities of the respective contracts and provides
/// a single metric to measure financial obligations.
/// </summary>
public double TotalDebt { get; set; }
/// <summary>
/// Represents the total monetary value associated with institution contracts.
/// This property consolidates the aggregate amount from relevant contracts
/// for financial reporting and analysis.
/// </summary>
public double TotalAmount { get; set; }
/// <summary>
/// Represents a collection of counts for institution contracts categorized by their status.
/// This property provides the count of contracts for each status defined in the
/// InstitutionContractStatus enumeration, enabling analysis and monitoring of contract distribution.
/// </summary>
public List<InstitutionContractStatusCount> Counts { get; set; }
}
public class InstitutionContractStatusCount
{
public InstitutionContractStatus Status { get; set; }
public int Count { get; set; }
}
public class ExtenstionInstitutionContractRequest:EditInstitutionContractRequest
{
public long PreviousContractId { get; set; }
}

View File

@@ -0,0 +1,67 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractListSearchModel :PaginationRequest
{
/// <summary>
/// کارفرما / کارگاه / طرف حساب / معرف
/// </summary>
public string EmployerOrWorkshopOrContractingPartyOrRepresentativeName { get; set; }
/// <summary>
/// استان
/// </summary>
public string Province { get; set; }
/// <summary>
/// شهر
/// </summary>
public string City { get; set; }
/// <summary>
/// مبلغ قرارداد از
/// </summary>
public double AmountFrom { get; set; }
/// <summary>
/// مبلغ قرارداد تا
/// </summary>
public double AmountTo { get; set; }
/// <summary>
/// تاریخ قرارداد از
/// </summary>
public string ContractDateFrom { get; set; }
/// <summary>
/// تاریخ قرارداد تا
/// </summary>
public string ContractDateTo { get; set; }
/// <summary>
/// تب
/// </summary>
public InstitutionContractStatus? Status { get; set; }
/// <summary>
/// فعال / غیرفعال
/// </summary>
public bool? IsActive { get; set; }
/// <summary>
/// موجود / ناموجود
/// </summary>
public bool? HasSignature { get; set; }
/// <summary>
/// نوع = روابط کار / مالیات و حسابداری
/// </summary>
public InstitutionContractType? Type { get; set; }
/// <summary>
/// رسمی / غیررسمی
/// </summary>
public bool? IsOfficial { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
public enum InstitutionContractStatus
{
Active,
Deactive,
DeactiveWithDebt,
Block,
Free,
PendingForRenewal,
WithoutWorkshop,
}

View File

@@ -0,0 +1,13 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
public enum InstitutionContractType
{
/// <summary>
/// روابط کار
/// </summary>
JobRelation,
/// <summary>
/// حسابداری و مالیات
/// </summary>
TaxAndFinancial
}

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class AccountNumberSelectListViewModel : SelectListViewModel;

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class CardNumberSelectListViewModel:SelectListViewModel;

View File

@@ -0,0 +1,37 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ایجاد اطلاعات بانکی
/// </summary>
public class CreateBankPaymentInstrument
{
/// <summary>
/// آیدی عنوان
/// </summary>
public long PaymentInstrumentGroupId { get; set; }
/// <summary>
/// نام صاحب حساب
/// </summary>
public string AccountHolderName { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string IBan { get; set; }
/// <summary>
/// آیا احزار هویت شده است
/// </summary>
public bool IsAuth { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ایجاد عنوان
/// </summary>
public class CreateBankPaymentInstrumentGroup
{
/// <summary>
/// نام
/// </summary>
public string Name { get; set; }
}

View File

@@ -0,0 +1,22 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
///
/// </summary>
public class CreatePosPaymentInstrument
{
/// <summary>
/// آیدی عنوان
/// </summary>
public long PaymentInstrumentGroupId { get; set; }
/// <summary>
/// شناسه دستگاه پوز
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Description { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ویرایش عنوان
/// </summary>
public class EditBankPaymentInstrumentGroup : CreateBankPaymentInstrumentGroup
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
}

View File

@@ -0,0 +1,73 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class GetPaymentInstrumentListViewModel
{
/// <summary>
/// تعداد آیتم
/// </summary>
public int Count { get; set; }
/// <summary>
/// لیست گروهی
/// </summary>
public List<PaymentInstrumentGroupedViewModel> GropedViewModels { get; set; }
}
public class PaymentInstrumentGroupedViewModel
{
/// <summary>
/// نام
/// </summary>
public string Name { get; set; }
/// <summary>
/// آیتم های گروه
/// </summary>
public List<PaymentInstrumentItemsViewModel> Items { get; set; }
}
/// <summary>
///
/// </summary>
public class PaymentInstrumentItemsViewModel
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره شبا
/// </summary>
public string IBan { get; set; }
/// <summary>
/// شناسه دستگاه
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Description { get; set; }
/// <summary>
/// نام صاحب حساب
/// </summary>
public string AccountHolderName { get; set; }
/// <summary>
/// نوع
/// </summary>
public PaymentInstrumentType Type { get; set; }
}

View File

@@ -0,0 +1,63 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using Microsoft.AspNetCore.Mvc;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// اپلیکیشن جاری شرکا
/// </summary>
public interface IPaymentInstrumentApplication
{
/// <summary>
/// ایجاد حساب اطلاعات بانکی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateBankAccount(CreateBankPaymentInstrument command);
Task<OperationResult> CreateBankAccount(List<CreateBankPaymentInstrument> commands);
/// <summary>
/// ایجاد اطلاعات دستگاه پوز
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreatePos(CreatePosPaymentInstrument command);
Task<OperationResult> CreatePos(List<CreatePosPaymentInstrument> commands);
/// <summary>
/// گرفتن لیست
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel);
/// <summary>
/// ایجاد عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateGroup(CreateBankPaymentInstrumentGroup command);
/// <summary>
/// ویرایش عنوان
/// </summary>
/// <returns></returns>
Task<OperationResult> EditGroup(EditBankPaymentInstrumentGroup command);
/// <summary>
/// حذف عنوان
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<OperationResult> DeleteGroup(long id);
Task<List<PaymentInstrumentGroupsViewModel>> GetGroup();
Task<List<string>> PosTerminalIdSelectList(string search, string selected);
Task<List<string>> IbanSelectList(string search, string selected);
Task<List<string>> AccountNumberSelectList(string search, string selected);
Task<List<string>> CardNumberSelectList(string search, string selected);
Task<List<string>> AccountHolderNameSelectList(string search, string selected);
}

View File

@@ -0,0 +1,5 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class IbanSelectListViewModel:SelectListViewModel;

View File

@@ -0,0 +1,5 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class PaymentInstrumentGroupsViewModel:EditBankPaymentInstrumentGroup
{
}

View File

@@ -0,0 +1,38 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// سرچ مدل
/// </summary>
public class PaymentInstrumentSearchModel
{
/// <summary>
/// نام صاحب حساب
/// </summary>
public string AccountHolderName { get; set; }
/// <summary>
/// شناسه دستگاه
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره شبا
/// </summary>
public string IBan { get; set; }
/// <summary>
/// ایندکس صفحه
/// </summary>
public int PageIndex { get; set; }
}

View File

@@ -0,0 +1,15 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// نوع حساب های جاری شرکا
/// </summary>
public enum PaymentInstrumentType
{
/// <summary>
/// حساب بانکی
/// </summary>
BankAccount,
/// <summary>
/// دستگاه پوز
/// </summary>
Pos
}

View File

@@ -0,0 +1,7 @@
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class PosTerminalSelectListViewModel:SelectListViewModel
{
}

View File

@@ -1,17 +1,8 @@
namespace CompanyManagment.App.Contracts.Representative;
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.Representative;
/// <summary>
/// ویو مدل سلکت لیست برای معرف
/// </summary>
public class GetSelectListRepresentativeViewModel
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
/// <summary>
/// نام معرف
/// </summary>
public string Name { get; set; }
}
public class GetSelectListRepresentativeViewModel:SelectListViewModel;

View File

@@ -8,12 +8,13 @@ using CompanyManagment.App.Contracts.PersonalContractingParty;
namespace CompanyManagment.Application;
public class ContractingPartyBankAccountsApplication:IContractingPartyBankAccountsApplication
public class ContractingPartyBankAccountsApplication : IContractingPartyBankAccountsApplication
{
private readonly IContractingPartyBankAccountsRepository _contractingPartyBankAccountsRepository;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
public ContractingPartyBankAccountsApplication(IContractingPartyBankAccountsRepository contractingPartyBankAccountsRepository,
public ContractingPartyBankAccountsApplication(
IContractingPartyBankAccountsRepository contractingPartyBankAccountsRepository,
IPersonalContractingPartyRepository personalContractingPartyRepository)
{
_contractingPartyBankAccountsRepository = contractingPartyBankAccountsRepository;
@@ -23,13 +24,13 @@ public class ContractingPartyBankAccountsApplication:IContractingPartyBankAccoun
public async Task<OperationResult> Create(CreateContractingPartyBankAccounts command)
{
var operationResult = new OperationResult();
if (!_personalContractingPartyRepository.Exists(x => x.id == command.ContractingPartyId))
return operationResult.Failed("طرف حساب مورد نظر یافت نشد");
if (string.IsNullOrWhiteSpace(command.CardNumber))
return operationResult.Failed("شماره کارت خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.AccountNumber))
return operationResult.Failed("شماره حساب خود را وارد کنید");
@@ -38,42 +39,95 @@ public class ContractingPartyBankAccountsApplication:IContractingPartyBankAccoun
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
return operationResult.Failed("نام صاحب حساب را وارد کنید");
var entity = new ContractingPartyBankAccount(command.ContractingPartyId, command.CardNumber,
command.AccountHolderName,command.AccountNumber, command.IBan,command.IsAuth);
command.AccountHolderName, command.AccountNumber, command.IBan, command.IsAuth);
await _contractingPartyBankAccountsRepository.CreateAsync(entity);
await _contractingPartyBankAccountsRepository.SaveChangesAsync();
return operationResult.Succcedded();
}
public async Task<OperationResult<List<GetContractingPartyBankAccountViewModel>>> GetList(
public async Task<OperationResult> Create(List<CreateContractingPartyBankAccounts> commands)
{
var operationResult = new OperationResult();
foreach (var command in commands)
{
if (!_personalContractingPartyRepository.Exists(x => x.id == command.ContractingPartyId))
return operationResult.Failed("طرف حساب مورد نظر یافت نشد");
if (command.IsAuth)
{
if (string.IsNullOrWhiteSpace(command.CardNumber))
return operationResult.Failed("شماره کارت خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.AccountNumber))
return operationResult.Failed("شماره حساب خود را وارد کنید");
if (string.IsNullOrWhiteSpace(command.IBan))
return operationResult.Failed("شماره شبا خود را وارد کنید");
}
else if(string.IsNullOrWhiteSpace(command.CardNumber) &&
string.IsNullOrWhiteSpace(command.AccountNumber) &&
string.IsNullOrWhiteSpace(command.IBan))
{
return operationResult.Failed(" حداقل یکی از اطلاعات بانکی را وارد کنید: شماره کارت، شماره حساب یا شماره شبا");
}
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
{
return operationResult.Failed("نام صاحب حساب را وارد کنید");
}
var entity = new ContractingPartyBankAccount(command.ContractingPartyId, command.CardNumber,
command.AccountHolderName, command.AccountNumber, command.IBan, command.IsAuth);
await _contractingPartyBankAccountsRepository.CreateAsync(entity);
}
await _contractingPartyBankAccountsRepository.SaveChangesAsync();
return operationResult.Succcedded();
}
public async Task<GetContractingPartyBankAccountViewModel> GetList(
ContractingPartyBankAccountSearchModel searchModel)
{
return await _contractingPartyBankAccountsRepository.GetList(searchModel);
}
public async Task<OperationResult<List<string>>> ContractingPartyOrAccountHolderNameSelectList(string search,
public async Task<List<string>> ContractingPartyOrAccountHolderNameSelectList(string search,
string selected)
{
return await _contractingPartyBankAccountsRepository.ContractingPartyOrAccountHolderNameSelectList(search, selected);
return await _contractingPartyBankAccountsRepository.ContractingPartyOrAccountHolderNameSelectList(search,
selected);
}
public async Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected)
public async Task<List<string>> CardNumberSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.CardNumberSelectList(search, selected);
}
public async Task<OperationResult<List<string>>> IBanSelectList(string search, string selected)
public async Task<List<string>> IBanSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.IBanSelectList(search, selected);
}
public async Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected)
public async Task<List<string>> AccountNumberSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.AccountNumberSelectList(search, selected);
}
public async Task<List<string>> GetAccountHolderNameSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.GetAccountHolderNameSelectList(search, selected);
}
public async Task<List<string>> ContractingPartyNamesSelectList(string search, string selected)
{
return await _contractingPartyBankAccountsRepository.ContractingPartyNamesSelectList(search, selected);
}
}

View File

@@ -176,7 +176,7 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
}
public async Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(
ClientFinancialStatementSearchModel searchModel, long accountId)
FinancialStatementSearchModel searchModel, long accountId)
{
return await _financialStatmentRepository.GetClientFinancialStatement(accountId, searchModel);
}
@@ -196,4 +196,10 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
{
return _financialStatmentRepository.GetClientDebtAmount(accountId);
}
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
long contractingPartyId, FinancialStatementSearchModel searchModel)
{
return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId,searchModel);
}
}

View File

@@ -30,9 +30,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
private readonly IWorkshopRepository _workshopRepository;
private readonly ILeftWorkRepository _leftWorkRepository;
private readonly IWorkshopApplication _workshopApplication;
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository, IPersonalContractingPartyRepository contractingPartyRepository, IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository, IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository, IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication)
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
IPersonalContractingPartyRepository contractingPartyRepository,
IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository,
IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository,
IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication)
{
_institutionContractRepository = institutionContractRepository;
_contractingPartyRepository = contractingPartyRepository;
@@ -46,25 +50,28 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public OperationResult Create(CreateInstitutionContract command)
{
string contractingPartyName = String.Empty;
bool dateMessages = false;
string dateMaessageResult = String.Empty;
var opration = new OperationResult();
if (_institutionContractRepository.Exists(x =>
x.ContractingPartyId == command.ContractingPartyId && x.RepresentativeId == command.RepresentativeId && x.TypeOfContract == command.TypeOfContract))
return opration.Failed("برای این معرف و طرف حساب قبلا قرارداد ایجاد شده است، شما میتوانید از تمدید استفاده کنید");
x.ContractingPartyId == command.ContractingPartyId && x.RepresentativeId == command.RepresentativeId &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed(
"برای این معرف و طرف حساب قبلا قرارداد ایجاد شده است، شما میتوانید از تمدید استفاده کنید");
if (string.IsNullOrWhiteSpace(command.ContractDateFa))
{
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
@@ -81,7 +88,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
else if (command.ContractingPartyId < 1 && command.RepresentativeId > 1)
{
return opration.Failed("طرف حساب را انتخاب کنید");
}
else if (command.ContractingPartyId < 1 && command.RepresentativeId < 1)
{
@@ -94,15 +100,17 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var contractingParty = _contractingPartyRepository.GetDetails(command.ContractingPartyId);
//شماره قرارداد
var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/0";
///////////////////////
if (command.ContactInformationList.Count == 0)
return opration.Failed("ورود شماره تماس برای ارسال پیامک الزامیست");
var accountContact = command.ContactInformationList.Where(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه" && !string.IsNullOrWhiteSpace(x.PhoneNumber)).ToList();
if(accountContact.Count == 0)
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه" &&
!string.IsNullOrWhiteSpace(x.PhoneNumber)).ToList();
if (accountContact.Count == 0)
return opration.Failed("ورود شماره همراه با سمت طرف قرارداد برای ساخت حساب کاربری الزامیست");
var accountContactCount = command.ContactInformationList.Where(x => x.PhoneType == "شماره همراه" && x.Position == "طرف قرارداد").ToList();
var accountContactCount = command.ContactInformationList
.Where(x => x.PhoneType == "شماره همراه" && x.Position == "طرف قرارداد").ToList();
if (accountContactCount.Count > 1)
return opration.Failed("فقط یکی از شماره تلفن ها میتواند سمت طرف قرارداد داشته باشد");
@@ -117,25 +125,22 @@ public class InstitutionContractApplication : IInstitutionContractApplication
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.OfficialCompany))
return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید");
if(command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
return opration.Failed("وضعیت ارزش افزوده را مشخص کنید");
if (string.IsNullOrWhiteSpace(command.TypeOfContract))
return opration.Failed("عنوان قرارداد را انتخاب کنید");
@@ -148,7 +153,9 @@ public class InstitutionContractApplication : IInstitutionContractApplication
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
command.ValueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr) ? 0 : command.ValueAddedTaxStr.MoneyToDouble();
command.ValueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr)
? 0
: command.ValueAddedTaxStr.MoneyToDouble();
var contractAmount = command.ContractAmountString.ToDoubleMoney();
command.ContractAmount = Convert.ToDouble(contractAmount);
var DailyCompenseation = command.DailyCompenseationString.ToDoubleMoney();
@@ -165,14 +172,15 @@ public class InstitutionContractApplication : IInstitutionContractApplication
// valueAddedTax = command.ContractAmount * 0.1;
// command.ContractAmount += valueAddedTax;
//}
var createContract = new InstitutionContract(contractNo, command.RepresentativeId, representative,
command.ContractingPartyId,
contractingPartyName, contractDateGr, command.ContractDateFa, command.State, command.City,
command.Address, contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount,
command.DailyCompenseation, command.Obligation,
command.TotalAmount, 0,command.WorkshopManualCount,command.EmployeeManualCount,command.Description, command.OfficialCompany, command.TypeOfContract,command.HasValueAddedTax,command.ValueAddedTax);
command.TotalAmount, 0, command.WorkshopManualCount, command.EmployeeManualCount, command.Description,
command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, command.ValueAddedTax);
_institutionContractRepository.Create(createContract);
_institutionContractRepository.SaveChanges();
@@ -181,27 +189,29 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public OperationResult Extension(CreateInstitutionContract command)
{
bool dateMessages = false;
string dateMaessageResult = String.Empty;
var opration = new OperationResult();
command.ExtensionNo += 1;
if (_institutionContractRepository.Exists(x =>
x.ExtensionNo == command.ExtensionNo && x.ContractingPartyId == command.ContractingPartyId && x.TypeOfContract == command.TypeOfContract))
x.ExtensionNo == command.ExtensionNo && x.ContractingPartyId == command.ContractingPartyId &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed("برای این قرارداد قبلا تمدید ایجاد شده است");
if (string.IsNullOrWhiteSpace(command.ContractDateFa))
{
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
@@ -211,7 +221,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
if (dateMessages)
return opration.Failed(dateMaessageResult);
var firstContract = _institutionContractRepository.GetFirstContract(command.ContractingPartyId, command.TypeOfContract);
var firstContract =
_institutionContractRepository.GetFirstContract(command.ContractingPartyId, command.TypeOfContract);
var syear = firstContract.ContractStartFa.Substring(0, 4);
var smonth = firstContract.ContractStartFa.Substring(5, 2);
@@ -219,32 +230,32 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var contractingParty = _contractingPartyRepository.GetDetails(command.ContractingPartyId);
//شماره قرارداد
var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/{command.ExtensionNo}";
var contractStartGr = command.ContractStartFa.ToGeorgianDateTime();
var contractEndGr = command.ContractEndFa.ToGeorgianDateTime();
var contractDateGr = command.ContractDateFa.ToGeorgianDateTime();
if (_institutionContractRepository.Exists(x =>
((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr)||(contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.TypeOfContract == command.TypeOfContract && x.ContractingPartyId == command.ContractingPartyId))
((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) ||
(contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) &&
x.TypeOfContract == command.TypeOfContract && x.ContractingPartyId == command.ContractingPartyId))
return opration.Failed("تاریخ شروع و پایان وارد شده با قرارداد دیگری تداخل دارد");
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.OfficialCompany))
return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید");
if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
@@ -259,7 +270,9 @@ public class InstitutionContractApplication : IInstitutionContractApplication
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
command.ValueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr) ? 0 : command.ValueAddedTaxStr.MoneyToDouble();
command.ValueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr)
? 0
: command.ValueAddedTaxStr.MoneyToDouble();
var contractAmount = command.ContractAmountString.ToDoubleMoney();
command.ContractAmount = Convert.ToDouble(contractAmount);
var DailyCompenseation = command.DailyCompenseationString.ToDoubleMoney();
@@ -274,11 +287,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
command.Address, contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount,
command.DailyCompenseation, command.Obligation,
command.TotalAmount, command.ExtensionNo, command.WorkshopManualCount, command.EmployeeManualCount, command.Description,command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, command.ValueAddedTax);
command.TotalAmount, command.ExtensionNo, command.WorkshopManualCount, command.EmployeeManualCount,
command.Description, command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax,
command.ValueAddedTax);
_institutionContractRepository.Create(createContract);
_institutionContractRepository.SaveChanges();
return opration.Succcedded(createContract.id);
}
@@ -291,14 +306,17 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var ContractEdit = _institutionContractRepository.Get(command.Id);
if (ContractEdit == null)
opration.Failed("رکورد مورد نظر وجود ندارد");
var contractStartGr = command.ContractStartFa.ToGeorgianDateTime();
var contractEndGr = command.ContractEndFa.ToGeorgianDateTime();
var contractDateGr = command.ContractDateFa.ToGeorgianDateTime();
if (_institutionContractRepository.Exists(x =>
x.ContractingPartyId == ContractEdit.ContractingPartyId && ((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) || (contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.id != command.Id && x.TypeOfContract == command.TypeOfContract))
x.ContractingPartyId == ContractEdit.ContractingPartyId &&
((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) ||
(contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.id != command.Id &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed("در بازه تاریخ وارد شده قرارداد دیگری وجود دارد");
//if (_institutionContractRepository.Exists(x =>
// x.ContractingPartyId == ContractEdit.ContractingPartyId && (x.ContractStartGr <= contractDateGr || x.ContractDateGr <= contractDateGr) && x.id != command.Id))
@@ -308,11 +326,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
@@ -323,19 +343,16 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return opration.Failed(dateMaessageResult);
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
@@ -354,7 +371,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
command.ValueAddedTax = command.ValueAddedTaxStr.MoneyToDouble();
var contractAmount = command.ContractAmountString.ToDoubleMoney();
command.ContractAmount = Convert.ToDouble(contractAmount);
@@ -365,12 +382,15 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var TotalAmount = command.TotalAmountString.ToDoubleMoney();
command.TotalAmount = Convert.ToDouble(TotalAmount);
ContractEdit.Edit(contractDateGr, command.ContractDateFa,command.State,command.City,command.Address,contractStartGr,
command.ContractStartFa,contractEndGr,command.ContractEndFa,command.ContractAmount,command.DailyCompenseation,
command.Obligation,command.TotalAmount,command.WorkshopManualCount, command.EmployeeManualCount,command.Description,command.OfficialCompany, command.TypeOfContract, command.ValueAddedTax, command.HasValueAddedTax);
ContractEdit.Edit(contractDateGr, command.ContractDateFa, command.State, command.City, command.Address,
contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount,
command.DailyCompenseation,
command.Obligation, command.TotalAmount, command.WorkshopManualCount, command.EmployeeManualCount,
command.Description, command.OfficialCompany, command.TypeOfContract, command.ValueAddedTax,
command.HasValueAddedTax);
_institutionContractRepository.SaveChanges();
return opration.Succcedded(command.Id);
}
public EditInstitutionContract GetDetails(long id)
@@ -380,18 +400,17 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public List<InstitutionContractViewModel> Search(InstitutionContractSearchModel searchModel)
{
var query = _institutionContractRepository.Search(searchModel);
var join = new List<InstitutionContractViewModel>();
var now = DateTime.Now;
var nowFa = now.ToFarsi();
var endFa = nowFa.FindeEndOfMonth();
var endThisMontGr = endFa.ToGeorgianDateTime();
//var watch = System.Diagnostics.Stopwatch.StartNew();
var newResult = query.Select(x => new InstitutionContractViewModel
{
Id = x.Id,
@@ -407,8 +426,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
//BlockTimes = _contractingPartyRepository.GetDetails(x.ContractingPartyId).BlockTimes,
ContractingPartyId = x.ContractingPartyId,
EmployerViewModels = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId),
EmployerNo = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.EmployerNo,
EmployerName = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.FullName,
EmployerNo = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId)
.FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.EmployerNo,
EmployerName = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId)
.FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.FullName,
//EmployerId = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.Id == null ? 0 :
// _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)!.Id,
ContractAmount = x.ContractAmount,
@@ -425,7 +446,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
//EmployeeCount = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).EmployeeCount,
//ArchiveCode = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).ArchiveCode,
TypeOfContract = x.TypeOfContract
}).ToList();
//Console.WriteLine("efTime : " + watch.Elapsed);
@@ -451,7 +471,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
item.IsContractingPartyBlock = contractingParty.IsBlock;
item.BlockTimes = contractingParty.BlockTimes;
}
var employer = _employerRepository.GetEmployerByContracrtingPartyID(item.ContractingPartyId);
item.EmployerViewModels = employer;
@@ -473,14 +493,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
//var reslt = _workshopApplication.GetConnectedPersonnels(workshopId);
//var noBlock = reslt.Where(x => x.Black == false).ToList();
//joinPersonelList.AddRange(noBlock);
var p = _workshopApplication.PersonnelCount(workshopId);
pCount += p;
var p = _workshopApplication.PersonnelCount(workshopId);
pCount += p;
}
//var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList();
//left = joinlistWithoutDuplicat.Count();
// var left= _leftWorkRepository.GetLeftPersonelByWorkshopId(workshopIds).Count();
item.EmployeeCount = Convert.ToString(pCount);
//if (item.ContractEndGr < now)
// item.ExpireColor = "black";
@@ -496,8 +515,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var arc = workshop.Select(x => new ArchiveCodConvertoint
{
ArchiveCodeInt = x.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : x.ArchiveCode.ConvertToInt(),
}).OrderBy(x=>x.ArchiveCodeInt).ToList();
var minArchiveCode = arc.Min(x=>x.ArchiveCodeInt);
}).OrderBy(x => x.ArchiveCodeInt).ToList();
var minArchiveCode = arc.Min(x => x.ArchiveCodeInt);
archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode;
}
@@ -537,11 +556,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var findeByFilter = new List<InstitutionContractViewModel>();
if (searchModel.WorkshopId != 0)
{
foreach (var item in join)
{
var check = item.WorkshopViewModels.Where(x => x.Id == searchModel.WorkshopId).ToList();
if(check.Count >0)
if (check.Count > 0)
findeByFilter.Add(item);
}
@@ -551,32 +569,29 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var findeByFilter2 = new List<InstitutionContractViewModel>();
if (searchModel.EmployerId != 0)
{
foreach (var item in join)
{
var check = item.EmployerViewModels.Where(x => x.Id == searchModel.EmployerId).ToList();
if (check.Count > 0)
findeByFilter2.Add(item);
}
join = findeByFilter2;
}
join = join.OrderBy(x => x.WorkshopCount != "0" && string.IsNullOrWhiteSpace(x.ExpireColor))
.ThenBy(x => x.WorkshopCount == "0" && string.IsNullOrWhiteSpace(x.ExpireColor))
.ThenBy(x=>x.ExpireColor=="red")
.ThenBy(x => x.ExpireColor == "red")
.ThenBy(x => x.ExpireColor == "purple")
.ThenBy(x=>x.ExpireColor=="black").ToList();
.ThenBy(x => x.ExpireColor == "black").ToList();
return join;
}
public List<InstitutionContractViewModel> NewSearch(InstitutionContractSearchModel searchModel)
{
return _institutionContractRepository.NewSearch(searchModel);
return _institutionContractRepository.NewSearch(searchModel);
}
@@ -584,10 +599,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
var result = _institutionContractRepository.NewSearch(new InstitutionContractSearchModel());
return result.Where(x => x.IsActiveString == "true" && x.IsContractingPartyBlock !="true" && x.WorkshopCount != "0" && x.ContractStartGr <= DateTime.Now && x.ContractEndGr >= DateTime.Now).ToList();
return result.Where(x =>
x.IsActiveString == "true" && x.IsContractingPartyBlock != "true" && x.WorkshopCount != "0" &&
x.ContractStartGr <= DateTime.Now && x.ContractEndGr >= DateTime.Now).ToList();
}
public string ExpCheckColor(DateTime now, DateTime ContractEndGr, DateTime endThisMontGr, string ContractAmount, string isActiveString)
public string ExpCheckColor(DateTime now, DateTime ContractEndGr, DateTime endThisMontGr, string ContractAmount,
string isActiveString)
{
string result = "";
@@ -605,7 +623,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public TotalbalancViewModel TotalBalance(long contractingPartyId)
{
var result = new TotalbalancViewModel();
var firstGetStatement = _financialStatmentApplication.GetDetailsByContractingPartyId(contractingPartyId);
var allTransactions = firstGetStatement.FinancialTransactionViewModels;
if (allTransactions != null)
@@ -616,6 +634,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
result.TotalBalanceDbl = debt - credit;
result.TotalBalanceStr = result.TotalBalanceDbl.ToMoney();
}
return result;
}
@@ -623,11 +642,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
var result = new WorkshopsAndEmployeeViewModel();
var emplId = _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId).Select(x => x.Id).ToList(); ;
var emplId = _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId).Select(x => x.Id)
.ToList();
;
result.WorkshopViewModels = _workshopRepository.GetWorkshopsByEmployerId(emplId);
var workshopIds = result.WorkshopViewModels.Select(x => x.Id).ToList();
var left = 0;
result.WorkshopCount= Convert.ToString(workshopIds.Count);
result.WorkshopCount = Convert.ToString(workshopIds.Count);
var joinPersonelList = new List<ConnectedPersonnelViewModel>();
foreach (var workshopId in workshopIds)
{
@@ -636,7 +657,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
//joinPersonelList.AddRange(noBlock);
var pCount = _workshopApplication.PersonnelCount(workshopId);
result.EmployeeCount = Convert.ToString(pCount);
}
//var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList();
//left = joinlistWithoutDuplicat.Count();
@@ -655,7 +675,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var minArchiveCode = arc.Min(x => x.ArchiveCodeInt);
result.ArchiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode;
}
return result;
}
@@ -675,13 +695,13 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
Id = get.Id,
ContractNo = get.ContractNo,
ContractStartFa = get.ContractStartFa,
ContractEndFa = get.ContractEndFa,
ContractingPartyName = get.ContractingPartyName,
ContractingPartyId = get.ContractingPartyId,
ContractDateFa = get.ContractDateFa,
State = get.State,
@@ -695,7 +715,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
Obligation = get.ObligationString,
TotalAmount = get.TotalAmountString,
WorkshopViewModels = workshops
};
return res;
}
@@ -703,7 +722,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public OperationResult Active(long id)
{
var opration = new OperationResult();
var contract = _institutionContractRepository.Get(id);
if (contract == null)
@@ -768,6 +786,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var res = _employerRepository.DeActiveAll(employer.Id);
}
}
return opration.Succcedded();
}
@@ -797,6 +816,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
var res = _employerRepository.ActiveAll(employer.Id);
}
}
return opration.Succcedded();
}
@@ -810,10 +830,10 @@ public class InstitutionContractApplication : IInstitutionContractApplication
contractingParty.Active();
_contractingPartyRepository.SaveChanges();
}
var employers =
_employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId);
foreach (var employer in employers)
{
var res = _employerRepository.ActiveAll(employer.Id);
@@ -825,7 +845,6 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public void RemoveContract(long id)
{
_institutionContractRepository.RemoveContract(id);
}
@@ -861,15 +880,375 @@ public class InstitutionContractApplication : IInstitutionContractApplication
public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
{
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid,accountId);
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
}
public double GetcontractAmount(int countPerson)
{
return _institutionContractRepository.GetcontractAmount(countPerson);
}
}
public async Task<PagedResult<GetInstitutionContractListItemsViewModel>> GetList(
InstitutionContractListSearchModel searchModel)
{
return await _institutionContractRepository.GetList(searchModel);
}
public Task<GetInstitutionContractListStatsViewModel> GetListStats(InstitutionContractListSearchModel searchModel)
{
return _institutionContractRepository.GetListStats(searchModel);
}
public async Task<OperationResult> CreateAsync(CreateInstitutionContractRequest command)
{
string contractingPartyName = String.Empty;
bool dateMessages = false;
string dateMaessageResult = String.Empty;
var opration = new OperationResult();
if (_institutionContractRepository.Exists(x =>
x.ContractingPartyId == command.ContractingPartyId && x.RepresentativeId == command.RepresentativeId &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed(
"برای این معرف و طرف حساب قبلا قرارداد ایجاد شده است، شما میتوانید از تمدید استفاده کنید");
if (string.IsNullOrWhiteSpace(command.ContractDateFa))
{
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
dateMessages = true;
}
if (dateMessages)
return opration.Failed(dateMaessageResult);
if (command.RepresentativeId < 1 && command.ContractingPartyId > 1)
{
return opration.Failed("معرف را انتخاب کنید");
}
else if (command.ContractingPartyId < 1 && command.RepresentativeId > 1)
{
return opration.Failed("طرف حساب را انتخاب کنید");
}
else if (command.ContractingPartyId < 1 && command.RepresentativeId < 1)
{
return opration.Failed("معرف و طرف حساب را انتخاب کنید");
}
var syear = command.ContractStartFa.Substring(0, 4);
var smonth = command.ContractStartFa.Substring(5, 2);
var sday = command.ContractStartFa.Substring(8, 2);
var contractingParty = _contractingPartyRepository.GetDetails(command.ContractingPartyId);
//شماره قرارداد
var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/0";
///////////////////////
if (command.ContactInfos.Count == 0)
return opration.Failed("ورود شماره تماس برای ارسال پیامک الزامیست");
var accountContact = command.ContactInfos.Where(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه" &&
!string.IsNullOrWhiteSpace(x.PhoneNumber)).ToList();
if (accountContact.Count == 0)
return opration.Failed("ورود شماره همراه با سمت طرف قرارداد برای ساخت حساب کاربری الزامیست");
var accountContactCount = command.ContactInfos
.Where(x => x.PhoneType == "شماره همراه" && x.Position == "طرف قرارداد").ToList();
if (accountContactCount.Count > 1)
return opration.Failed("فقط یکی از شماره تلفن ها میتواند سمت طرف قرارداد داشته باشد");
contractingPartyName = contractingParty.LName;
//نام معرف
var representative = _representativeRepository.GetDetails(command.RepresentativeId).FullName;
var contractStartGr = command.ContractStartFa.ToGeorgianDateTime();
var contractEndGr = command.ContractEndFa.ToGeorgianDateTime();
var contractDateGr = command.ContractDateFa.ToGeorgianDateTime();
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.OfficialCompany))
return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید");
if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
return opration.Failed("وضعیت ارزش افزوده را مشخص کنید");
if (string.IsNullOrWhiteSpace(command.TypeOfContract))
return opration.Failed("عنوان قرارداد را انتخاب کنید");
if (string.IsNullOrWhiteSpace(command.ContractAmountString))
command.ContractAmountString = "0";
if (string.IsNullOrWhiteSpace(command.DailyCompenseationString))
command.DailyCompenseationString = "0";
if (string.IsNullOrWhiteSpace(command.ObligationString))
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
var valueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr)
? 0
: command.ValueAddedTaxStr.MoneyToDouble();
var contractAmountStr = command.ContractAmountString.ToDoubleMoney();
var contractAmount = Convert.ToDouble(contractAmountStr);
var DailyCompenseationStr = command.DailyCompenseationString.ToDoubleMoney();
var dailyCompenseation = Convert.ToDouble(DailyCompenseationStr);
var ObligationStr = command.ObligationString.ToDoubleMoney();
var obligation = Convert.ToDouble(ObligationStr);
var TotalAmountStr = command.TotalAmountString.ToDoubleMoney();
var totalAmount = Convert.ToDouble(TotalAmountStr);
//var hasValueAddedTax = "false";
//double valueAddedTax = 0;
//if (command.HasValueAddedTax == "true")
//{
// hasValueAddedTax = "true";
// valueAddedTax = command.ContractAmount * 0.1;
// command.ContractAmount += valueAddedTax;
//}
var createContract = new InstitutionContract(contractNo, command.RepresentativeId, representative,
command.ContractingPartyId,
contractingPartyName, contractDateGr, command.ContractDateFa, command.State, command.City,
command.Address, contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, contractAmount,
dailyCompenseation, obligation,
totalAmount, 0, command.WorkshopManualCount, command.EmployeeManualCount, command.Description,
command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, valueAddedTax);
_institutionContractRepository.Create(createContract);
_institutionContractRepository.SaveChanges();
return opration.Succcedded(createContract.id);
}
public async Task<OperationResult> EditAsync(EditInstitutionContractRequest command)
{
bool dateMessages = false;
string dateMaessageResult = String.Empty;
var opration = new OperationResult();
var ContractEdit = _institutionContractRepository.Get(command.Id);
if (ContractEdit == null)
opration.Failed("رکورد مورد نظر وجود ندارد");
var contractStartGr = command.ContractStartFa.ToGeorgianDateTime();
var contractEndGr = command.ContractEndFa.ToGeorgianDateTime();
var contractDateGr = command.ContractDateFa.ToGeorgianDateTime();
if (_institutionContractRepository.Exists(x =>
x.ContractingPartyId == ContractEdit.ContractingPartyId &&
((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) ||
(contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.id != command.Id &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed("در بازه تاریخ وارد شده قرارداد دیگری وجود دارد");
//if (_institutionContractRepository.Exists(x =>
// x.ContractingPartyId == ContractEdit.ContractingPartyId && (x.ContractStartGr <= contractDateGr || x.ContractDateGr <= contractDateGr) && x.id != command.Id))
// return opration.Failed("تاریخ عقد قرارداد با قرارداد دیگری تداخل دارد");
if (string.IsNullOrWhiteSpace(command.ContractDateFa))
{
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
dateMessages = true;
}
if (dateMessages)
return opration.Failed(dateMaessageResult);
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.OfficialCompany))
return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید");
if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
return opration.Failed("وضعیت ارزش افزوده را مشخص کنید");
if (string.IsNullOrWhiteSpace(command.TypeOfContract))
return opration.Failed("عنوان قرارداد را انتخاب کنید");
if (string.IsNullOrWhiteSpace(command.ContractAmountString))
command.ContractAmountString = "0";
if (string.IsNullOrWhiteSpace(command.DailyCompenseationString))
command.DailyCompenseationString = "0";
if (string.IsNullOrWhiteSpace(command.ObligationString))
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
var valueAddedTax = command.ValueAddedTaxStr.MoneyToDouble();
var contractAmountStr = command.ContractAmountString.ToDoubleMoney();
var contractAmount = Convert.ToDouble(contractAmountStr);
var DailyCompenseationStr = command.DailyCompenseationString.ToDoubleMoney();
var dailyCompenseation = Convert.ToDouble(DailyCompenseationStr);
var ObligationStr = command.ObligationString.ToDoubleMoney();
var obligation = Convert.ToDouble(ObligationStr);
var TotalAmountStr = command.TotalAmountString.ToDoubleMoney();
var totalAmount = Convert.ToDouble(TotalAmountStr);
ContractEdit.Edit(contractDateGr, command.ContractDateFa, command.State, command.City, command.Address,
contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, contractAmount,
dailyCompenseation,
obligation, totalAmount, command.WorkshopManualCount, command.EmployeeManualCount,
command.Description, command.OfficialCompany, command.TypeOfContract, valueAddedTax,
command.HasValueAddedTax);
await _institutionContractRepository.SaveChangesAsync();
return opration.Succcedded(command.Id);
}
public async Task<OperationResult> ExtensionَAsync(CreateInstitutionContractRequest command)
{
bool dateMessages = false;
string dateMaessageResult = String.Empty;
var opration = new OperationResult();
command.ExtensionNo += 1;
if (_institutionContractRepository.Exists(x =>
x.ExtensionNo == command.ExtensionNo && x.ContractingPartyId == command.ContractingPartyId &&
x.TypeOfContract == command.TypeOfContract))
return opration.Failed("برای این قرارداد قبلا تمدید ایجاد شده است");
if (string.IsNullOrWhiteSpace(command.ContractDateFa))
{
dateMaessageResult = "تاریخ قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractStartFa))
{
dateMaessageResult += "تاریخ شروع قراراداد اجباری است. ";
dateMessages = true;
}
if (string.IsNullOrWhiteSpace(command.ContractEndFa))
{
dateMaessageResult += "تاریخ پایان قراراداد اجباری است. ";
dateMessages = true;
}
if (dateMessages)
return opration.Failed(dateMaessageResult);
var firstContract =
_institutionContractRepository.GetFirstContract(command.ContractingPartyId, command.TypeOfContract);
var syear = firstContract.ContractStartFa.Substring(0, 4);
var smonth = firstContract.ContractStartFa.Substring(5, 2);
var sday = firstContract.ContractStartFa.Substring(8, 2);
var contractingParty = _contractingPartyRepository.GetDetails(command.ContractingPartyId);
//شماره قرارداد
var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/{command.ExtensionNo}";
var contractStartGr = command.ContractStartFa.ToGeorgianDateTime();
var contractEndGr = command.ContractEndFa.ToGeorgianDateTime();
var contractDateGr = command.ContractDateFa.ToGeorgianDateTime();
if (_institutionContractRepository.Exists(x =>
((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) ||
(contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) &&
x.TypeOfContract == command.TypeOfContract && x.ContractingPartyId == command.ContractingPartyId))
return opration.Failed("تاریخ شروع و پایان وارد شده با قرارداد دیگری تداخل دارد");
if (command.Address != null && command.State == null)
{
return opration.Failed("لطفا استان و شهر را انتخاب کنید");
}
if ((command.Address != null && command.State != null) && command.City == "شهرستان")
{
return opration.Failed("لطفا شهر را انتخاب کنید");
}
if (command.Address == null && command.State != null)
{
return opration.Failed("لطفا آدرس را وارد کنید");
}
if (string.IsNullOrWhiteSpace(command.OfficialCompany))
return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید");
if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax))
return opration.Failed("وضعیت ارزش افزوده را مشخص کنید");
if (string.IsNullOrWhiteSpace(command.TypeOfContract))
return opration.Failed("عنوان قرارداد را انتخاب کنید");
if (string.IsNullOrWhiteSpace(command.ContractAmountString))
command.ContractAmountString = "0";
if (string.IsNullOrWhiteSpace(command.DailyCompenseationString))
command.DailyCompenseationString = "0";
if (string.IsNullOrWhiteSpace(command.ObligationString))
command.ObligationString = "0";
if (string.IsNullOrWhiteSpace(command.TotalAmountString))
command.TotalAmountString = "0";
var valueAddedTax = string.IsNullOrWhiteSpace(command.ValueAddedTaxStr)
? 0
: command.ValueAddedTaxStr.MoneyToDouble();
var contractAmountStr = command.ContractAmountString.ToDoubleMoney();
var contractAmount = Convert.ToDouble(contractAmountStr);
var DailyCompenseationStr = command.DailyCompenseationString.ToDoubleMoney();
var dailyCompenseation = Convert.ToDouble(DailyCompenseationStr);
var ObligationStr = command.ObligationString.ToDoubleMoney();
var obligation = Convert.ToDouble(ObligationStr);
var TotalAmountStr = command.TotalAmountString.ToDoubleMoney();
var totalAmount = Convert.ToDouble(TotalAmountStr);
var contractingPartyName = contractingParty.LName;
var representative = _representativeRepository.GetDetails(command.RepresentativeId).FullName;
var createContract = new InstitutionContract(contractNo, command.RepresentativeId, representative,
command.ContractingPartyId,
contractingPartyName, contractDateGr, command.ContractDateFa, command.State, command.City,
command.Address, contractStartGr,
command.ContractStartFa, contractEndGr, command.ContractEndFa, contractAmount,
dailyCompenseation, obligation,
totalAmount, command.ExtensionNo, command.WorkshopManualCount, command.EmployeeManualCount,
command.Description, command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax,
valueAddedTax);
_institutionContractRepository.Create(createContract);
_institutionContractRepository.SaveChanges();
return opration.Succcedded(createContract.id);
}
}
#region CustomViewModels
@@ -883,7 +1262,7 @@ public class WorkshopsAndEmployeeViewModel
{
public List<WorkshopViewModel> WorkshopViewModels { get; set; }
public string WorkshopCount { get; set; }
public string EmployeeCount { get; set;}
public string EmployeeCount { get; set; }
public int ArchiveCode { get; set; }
}

View File

@@ -0,0 +1,208 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace CompanyManagment.Application;
public class PaymentInstrumentApplication:IPaymentInstrumentApplication
{
private readonly IPaymentInstrumentRepository _paymentInstrumentRepository;
private readonly IPaymentInstrumentGroupRepository _paymentInstrumentGroupRepository;
public PaymentInstrumentApplication(IPaymentInstrumentRepository paymentInstrumentRepository,
IPaymentInstrumentGroupRepository paymentInstrumentGroupRepository)
{
_paymentInstrumentRepository = paymentInstrumentRepository;
_paymentInstrumentGroupRepository = paymentInstrumentGroupRepository;
}
public async Task<OperationResult> CreateBankAccount(CreateBankPaymentInstrument command)
{
var op = new OperationResult();
if (command.IsAuth)
{
if (string.IsNullOrWhiteSpace(command.AccountNumber))
{
return op.Failed("شماره حساب نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.IBan))
{
return op.Failed("شماره شبا نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.CardNumber))
{
return op.Failed("شماره کارت نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
{
return op.Failed("نام صاحب حساب نمیتواند خالی باشد");
}
}
var entity = PaymentInstrument.CreateBankAccount(command.CardNumber, command.AccountHolderName, command.AccountNumber,
command.IBan, command.IsAuth,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> CreateBankAccount(List<CreateBankPaymentInstrument> commands)
{
var op = new OperationResult();
foreach (var command in commands)
{
if (command.IsAuth)
{
if (string.IsNullOrWhiteSpace(command.AccountNumber))
{
return op.Failed("شماره حساب نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.IBan))
{
return op.Failed("شماره شبا نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.CardNumber))
{
return op.Failed("شماره کارت نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
{
return op.Failed("نام صاحب حساب نمیتواند خالی باشد");
}
}
var entity = PaymentInstrument.CreateBankAccount(command.CardNumber, command.AccountHolderName, command.AccountNumber,
command.IBan, command.IsAuth,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
}
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> CreatePos(CreatePosPaymentInstrument command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.PosTerminalId))
{
return op.Failed("شناسه دستگاه یوزر نمیتواند خالی باشد");
}
var entity = PaymentInstrument.CreatePosType(command.PosTerminalId, command.Description,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> CreatePos(List<CreatePosPaymentInstrument> commands)
{
var op = new OperationResult();
foreach (var command in commands)
{
if (string.IsNullOrWhiteSpace(command.PosTerminalId))
{
return op.Failed("شناسه دستگاه یوزر نمیتواند خالی باشد");
}
var entity = PaymentInstrument.CreatePosType(command.PosTerminalId, command.Description,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
}
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel)
{
return await _paymentInstrumentRepository.GetList(searchModel);
}
public async Task<OperationResult> CreateGroup(CreateBankPaymentInstrumentGroup command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Name))
{
return op.Failed("لطفا عنوان خودرا وارد کنید");
}
var instrumentGroup = new PaymentInstrumentGroup(command.Name);
await _paymentInstrumentGroupRepository.CreateAsync(instrumentGroup);
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> EditGroup(EditBankPaymentInstrumentGroup command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Name))
{
return op.Failed("لطفا عنوان خودرا وارد کنید");
}
var paymentInstrumentGroup = _paymentInstrumentGroupRepository.Get(command.Id);
if (paymentInstrumentGroup == null)
{
return op.Failed("عنوان مورد نظر یافت نشد");
}
paymentInstrumentGroup.Edit(command.Name);
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> DeleteGroup(long id)
{
var op = new OperationResult();
var paymentInstrumentGroup = _paymentInstrumentGroupRepository.Get(id);
if (paymentInstrumentGroup == null)
{
return op.Failed("عنوان مورد نظر یافت نشد");
}
paymentInstrumentGroup.DeActive();
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<List<PaymentInstrumentGroupsViewModel>> GetGroup()
{
return await _paymentInstrumentGroupRepository.GetList();
}
public async Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search)
{
return await _paymentInstrumentRepository.GetPosTerminalSelectList(search);
}
public async Task<List<string>> PosTerminalIdSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.PosTerminalIdSelectList(search, selected);
}
public async Task<List<string>> IbanSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.IbanSelectList(search, selected);
}
public async Task<List<string>> AccountNumberSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.AccountNumberSelectList(search, selected);
}
public async Task<List<string>> CardNumberSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.CardNumberSelectList(search, selected);
}
public async Task<List<string>> AccountHolderNameSelectList(string search, string selected)
{
return await _paymentInstrumentRepository.AccountHolderNameSelectList(search, selected);
}
}

View File

@@ -122,8 +122,9 @@ public class SalaryAidApplication : ISalaryAidApplication
if (customizeCheckouts != null)
{
// customizeCheckouts.SetHasAmountConflict(true);
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime,
entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(),
entity.id));
@@ -138,14 +139,24 @@ public class SalaryAidApplication : ISalaryAidApplication
if (customizeCheckoutTemp != null)
{
// customizeCheckoutTemp.SetHasAmountConflict(true);
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime,
entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate, entity.CalculationDate.ToFarsi(),
entity.id));
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
}
if (existsCheckouts.Checkout)
{
var checkouts = _checkoutRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
checkouts?.SetAmountConflict(true);
}
}
_customizeCheckoutRepository.SaveChanges();
@@ -219,6 +230,7 @@ public class SalaryAidApplication : ISalaryAidApplication
var customizeCheckouts = _customizeCheckoutRepository.GetByWorkshopIdEmployeeIdMonthYear(
entity.WorkshopId, entity.EmployeeId,
year, month).GetAwaiter().GetResult();
// customizeCheckouts?.SetHasAmountConflict(true);
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
@@ -239,6 +251,8 @@ public class SalaryAidApplication : ISalaryAidApplication
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
entity.WorkshopId, entity.EmployeeId, calculationDateGr).GetAwaiter().GetResult();
// customizeCheckoutTemp?.SetHasAmountConflict(true);
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
var existsSalaryAid = salaryAids.FirstOrDefault(x => x.EntityId == entity.id);
@@ -252,6 +266,13 @@ public class SalaryAidApplication : ISalaryAidApplication
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
if (existsCheckouts.Checkout)
{
var checkouts = _checkoutRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, entity.EmployeeId, calculationDateGr).GetAwaiter().GetResult();
checkouts?.SetAmountConflict(true);
}
_customizeCheckoutRepository.SaveChanges();
transaction.Complete();
@@ -378,10 +399,12 @@ public class SalaryAidApplication : ISalaryAidApplication
command.WorkshopId, employeeId,
year, month).GetAwaiter().GetResult();
// customizeCheckouts?.SetHasAmountConflict(true);
if (customizeCheckouts != null)
{
var salaryAids = customizeCheckouts.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime,
entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate,
entity.CalculationDate.ToFarsi(), entity.id));
@@ -394,16 +417,24 @@ public class SalaryAidApplication : ISalaryAidApplication
var customizeCheckoutTemp = _customizeCheckoutTempRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
// customizeCheckoutTemp?.SetHasAmountConflict(true);
if (customizeCheckoutTemp != null)
{
var salaryAids = customizeCheckoutTemp.CustomizeCheckoutSalaryAids.ToList();
salaryAids.Add(new(entity.Amount.ToMoney(), entity.SalaryAidDateTime,
entity.SalaryAidDateTime.ToFarsi(), entity.CalculationDate,
entity.CalculationDate.ToFarsi(), entity.id));
customizeCheckoutTemp.SetSalaryAids(salaryAids);
}
}
if (existsCheckouts.Checkout)
{
var checkouts = _checkoutRepository.GetByWorkshopIdEmployeeIdInDate(
command.WorkshopId, employeeId, calculationDateGr).GetAwaiter().GetResult();
checkouts?.SetAmountConflict(true);
}
}
await _customizeCheckoutRepository.SaveChangesAsync();
@@ -424,4 +455,5 @@ public class SalaryAidApplication : ISalaryAidApplication
}
#endregion
}
}

View File

@@ -77,6 +77,7 @@ using Company.Domain.MasterWorkHistory;
using Company.Domain.ModuleAgg;
using Company.Domain.ModuleTextManagerAgg;
using Company.Domain.OriginalTitleAgg;
using Company.Domain.PaymentInstrumentAgg;
using Company.Domain.PaymentToEmployeeAgg;
using Company.Domain.PaymentToEmployeeItemAgg;
using Company.Domain.PaymentTransactionAgg;
@@ -132,7 +133,9 @@ public class CompanyContext : DbContext
public DbSet<EntityModule> EntityModules { get; set; }
public DbSet<EntityModuleTextManager> EntityModuleTextManagers { get; set; }
public DbSet<EntityBill> EntityBills { get; set; }
public DbSet<EntityContact> EntityContacts { get; set; }
//---------Files------------------------------
public DbSet<Board> Boards { get; set; }
public DbSet<BoardType> BoardTypes { get; set; }
@@ -149,6 +152,7 @@ public class CompanyContext : DbContext
public DbSet<FileTitle> FileTitles { get; set; }
public DbSet<FileTiming> FileTimings { get; set; }
public DbSet<FileState> FileStates { get; set; }
public DbSet<FileAlert> FileAlerts { get; set; }
//-------Task Manager----------------------------
//public DbSet<Task> Tasks { get; set; }
@@ -184,9 +188,13 @@ public class CompanyContext : DbContext
public DbSet<EmployeeAuthorizeTemp> EmployeeAuthorizeTemps { get; set; }
public DbSet<AdminMonthlyOverview> AdminMonthlyOverviews { get; set; }
public DbSet<PaymentTransaction> PaymentTransactions{ get; set; }
public DbSet<PaymentTransaction> PaymentTransactions { get; set; }
public DbSet<ContractingPartyBankAccount> ContractingPartyBankAccounts { get; set; }
public DbSet<PaymentInstrument> PaymentInstruments { get; set; }
public DbSet<PaymentInstrumentGroup> PaymentInstrumentGroups { get; set; }
#endregion
#region Pooya
@@ -209,7 +217,9 @@ public class CompanyContext : DbContext
public DbSet<WorkshopTemp> WorkshopTemps { get; set; }
public DbSet<WorkshopServicesTemp> WorkshopServicesTemps { get; set; }
public DbSet<InstitutionContractTemp> InstitutionContractTemps { get; set; }
#endregion
public DbSet<CustomizeCheckout> CustomizeCheckouts { get; set; }
public DbSet<CustomizeCheckoutTemp> CustomizeCheckoutTemps { get; set; }
public DbSet<TaxLeftWorkItem> TaxLeftWorkItems { get; set; }
@@ -251,7 +261,7 @@ public class CompanyContext : DbContext
public DbSet<DateSalary> DateSalaries { get; set; }
public DbSet<DateSalaryItem> DateSalaryItems { get; set; }
public DbSet<Percentage> Percentages { get; set; }
public DbSet<InsuranceJobItem> InsuranceJobItems { get; set; }
public DbSet<InsuranceJob> InsuranceJobs { get; set; }
@@ -269,14 +279,14 @@ public class CompanyContext : DbContext
public DbSet<WorkingHours> WorkingHoursSet { get; set; }
public DbSet<HolidayItem> HolidayItems { get; set; }
public DbSet<Holiday> Holidays { get; set; }
public DbSet<MandatoryHours> MandatoryHoursDbSet { get; set; }
public DbSet<MandatoryHours> MandatoryHoursDbSet { get; set; }
public DbSet<WorkshopEmployer> WorkshopEmployers { get; set; }
public DbSet<Job> Jobs { get; set; }
public DbSet<Job> Jobs { get; set; }
public DbSet<Contract> Contracts { get; set; }
public DbSet<YearlySalaryTitle> YearlySalaryTitles { get; set; }
public DbSet<YearlySalaryItem> YearlySalaryItems { get; set; }
public DbSet<YearlySalary> YearlySalaries { get; set; }
public DbSet<EmployeeChildren> EmployeeChildrenSet { get; set; }
public DbSet<EmployeeChildren> EmployeeChildrenSet { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Workshop> Workshops { get; set; }
public DbSet<PersonalContractingParty> PersonalContractingParties { get; set; }
@@ -291,17 +301,15 @@ public class CompanyContext : DbContext
public DbSet<Employer> Employers { get; set; }
public CompanyContext(DbContextOptions<CompanyContext> options) :base(options)
public CompanyContext(DbContextOptions<CompanyContext> options) : base(options)
{
}
public CompanyContext()
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@@ -309,6 +317,5 @@ public class CompanyContext : DbContext
modelBuilder.ApplyConfigurationsFromAssembly(assembly);
modelBuilder.Entity<RollCall>().HasQueryFilter(x => x.RollCallModifyType != RollCallModifyType.Undefined);
base.OnModelCreating(modelBuilder);
}
}

View File

@@ -0,0 +1,19 @@
using Company.Domain.PaymentInstrumentAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OfficeOpenXml.Drawing.Chart;
namespace CompanyManagment.EFCore.Mapping;
public class PaymentInstrumentGroupMapping:IEntityTypeConfiguration<PaymentInstrumentGroup>
{
public void Configure(EntityTypeBuilder<PaymentInstrumentGroup> builder)
{
builder.HasKey(x => x.id);
builder.Property(x => x.Name).IsRequired().HasMaxLength(120);
builder.HasMany(x => x.PaymentInstruments)
.WithOne(x=>x.PaymentInstrumentGroup)
.HasForeignKey(x=>x.PaymentInstrumentGroupId);
}
}

View File

@@ -0,0 +1,24 @@
using Company.Domain.PaymentInstrumentAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace CompanyManagment.EFCore.Mapping;
public class PaymentInstrumentMapping : IEntityTypeConfiguration<PaymentInstrument>
{
public void Configure(EntityTypeBuilder<PaymentInstrument> builder)
{
builder.HasKey(x => x.id);
builder.Property(x => x.AccountHolderName).HasMaxLength(50);
builder.Property(x => x.AccountNumber).HasMaxLength(25);
builder.Property(x => x.PosTerminalId).HasMaxLength(25);
builder.Property(x => x.Description).HasMaxLength(200);
builder.Property(x => x.Type).HasConversion<string>().HasMaxLength(50);
builder.Property(x => x.CardNumber).HasMaxLength(50);
builder.Property(x => x.IBan).HasMaxLength(50);
builder.HasOne(x => x.PaymentInstrumentGroup)
.WithMany(x => x.PaymentInstruments)
.HasForeignKey(x => x.PaymentInstrumentGroupId);
}
}

View File

@@ -0,0 +1,72 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class createpaymentinstrumentsanditsgroups : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "PaymentInstrumentGroups",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PaymentInstrumentGroups", x => x.id);
});
migrationBuilder.CreateTable(
name: "PaymentInstruments",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CardNumber = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
AccountHolderName = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
AccountNumber = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
IBan = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
PosTerminalId = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
Description = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
IsAuth = table.Column<bool>(type: "bit", nullable: false),
PaymentInstrumentGroupId = table.Column<long>(type: "bigint", nullable: false),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PaymentInstruments", x => x.id);
table.ForeignKey(
name: "FK_PaymentInstruments_PaymentInstrumentGroups_PaymentInstrumentGroupId",
column: x => x.PaymentInstrumentGroupId,
principalTable: "PaymentInstrumentGroups",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_PaymentInstruments_PaymentInstrumentGroupId",
table: "PaymentInstruments",
column: "PaymentInstrumentGroupId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "PaymentInstruments");
migrationBuilder.DropTable(
name: "PaymentInstrumentGroups");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddConflictAmounttochekcout : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "HasAmountConflict",
table: "Checkouts",
type: "bit",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "HasAmountConflict",
table: "Checkouts");
}
}
}

View File

@@ -0,0 +1,29 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class AddPaymentInstrumentGroupIsActive : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<int>(
name: "IsActive",
table: "PaymentInstrumentGroups",
type: "int",
nullable: false,
defaultValue: 0);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsActive",
table: "PaymentInstrumentGroups");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class Addhasconflictamounttocheckout : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "HasAmountConflict",
table: "CustomizeCheckoutTemps",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "HasAmountConflict",
table: "CustomizeCheckouts",
type: "bit",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "HasAmountConflict",
table: "CustomizeCheckoutTemps");
migrationBuilder.DropColumn(
name: "HasAmountConflict",
table: "CustomizeCheckouts");
}
}
}

View File

@@ -307,6 +307,9 @@ namespace CompanyManagment.EFCore.Migrations
.HasMaxLength(10)
.HasColumnType("nvarchar(10)");
b.Property<bool>("HasAmountConflict")
.HasColumnType("bit");
b.Property<bool>("HasRollCall")
.HasColumnType("bit");
@@ -872,7 +875,7 @@ namespace CompanyManagment.EFCore.Migrations
b.ToTable("ContractingPartyAccount", (string)null);
});
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccounts", b =>
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
@@ -1062,6 +1065,9 @@ namespace CompanyManagment.EFCore.Migrations
b.Property<double>("FridayPay")
.HasColumnType("float");
b.Property<bool>("HasAmountConflict")
.HasColumnType("bit");
b.Property<double>("InstallmentDeduction")
.HasColumnType("float");
@@ -1211,6 +1217,9 @@ namespace CompanyManagment.EFCore.Migrations
b.Property<double>("FridayPay")
.HasColumnType("float");
b.Property<bool>("HasAmountConflict")
.HasColumnType("bit");
b.Property<double>("InstallmentDeduction")
.HasColumnType("float");
@@ -4279,6 +4288,83 @@ namespace CompanyManagment.EFCore.Migrations
b.ToTable("TextManager_OriginalTitle", (string)null);
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrument", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AccountHolderName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("AccountNumber")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b.Property<string>("CardNumber")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("IBan")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<bool>("IsAuth")
.HasColumnType("bit");
b.Property<long>("PaymentInstrumentGroupId")
.HasColumnType("bigint");
b.Property<string>("PosTerminalId")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b.Property<string>("Type")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("id");
b.HasIndex("PaymentInstrumentGroupId");
b.ToTable("PaymentInstruments");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<int>("IsActive")
.HasColumnType("int");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("nvarchar(120)");
b.HasKey("id");
b.ToTable("PaymentInstrumentGroups");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b =>
{
b.Property<long>("id")
@@ -6644,7 +6730,7 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("PersonalContractingParty");
});
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccounts", b =>
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b =>
{
b.HasOne("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", "ContractingParty")
.WithMany("ContractingPartyBankAccounts")
@@ -9518,6 +9604,17 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("TextManager");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrument", b =>
{
b.HasOne("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", "PaymentInstrumentGroup")
.WithMany("PaymentInstruments")
.HasForeignKey("PaymentInstrumentGroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("PaymentInstrumentGroup");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeItemAgg.PaymentToEmployeeItem", b =>
{
b.HasOne("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", "PaymentToEmployee")
@@ -9983,6 +10080,11 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("Subtitles");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", b =>
{
b.Navigation("PaymentInstruments");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b =>
{
b.Navigation("PaymentToEmployeeItemList");

View File

@@ -980,10 +980,11 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
FirstStartDate = d.FirstStartDate,
Id = d.Id,
SecondEndDate = d.SecondEndDate,
SecondStartDate = d.SecondStartDate
SecondStartDate = d.SecondStartDate,
}).ToList()
} : null,
HasAmountConflict =x.HasAmountConflict,
}).SingleOrDefault(x => x.Id == item);
var workshopName = _context.Workshops.FirstOrDefault(x => x.id == ch.WorkshopId);
ch.WorkshopName = workshopName.WorkshopName;
@@ -1720,6 +1721,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
SalaryAidDateTimeFa = s.SalaryAidDateTimeFa,
SalaryAidDateTimeGe = s.SalaryAidDateTime
}).ToList(),
HasAmountConflict = x.HasAmountConflict
}).Where(x => x.WorkshopId == searchModel.WorkshopId);
if (searchModel.EmployeeId > 0)
@@ -2693,5 +2695,12 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
}).AsEnumerable().Select(x => (x.EmployeeId, x.CheckoutStart, x.CheckoutEnd)).ToList();
}
public async Task<Checkout> GetByWorkshopIdEmployeeIdInDate(long workshopId, long employeeId, DateTime inDate)
{
return await _context.CheckoutSet.FirstOrDefaultAsync(x =>
x.WorkshopId == workshopId && x.EmployeeId == employeeId && x.ContractStart <= inDate &&
x.ContractEnd >= inDate);
}
#endregion
}

View File

@@ -20,7 +20,7 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
_context = context;
}
public async Task<OperationResult<List<GetContractingPartyBankAccountViewModel>>> GetList(
public async Task<GetContractingPartyBankAccountViewModel> GetList(
ContractingPartyBankAccountSearchModel searchModel)
{
var query = _context.ContractingPartyBankAccounts.AsQueryable();
@@ -38,38 +38,41 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
.Contains(searchModel.ContractingPartyOrAccountHolderName) ||
(x.ContractingParty.FName + " " + x.ContractingParty.LName).Contains(searchModel
.ContractingPartyOrAccountHolderName));
var count = await query.CountAsync();
var grouped = query
.GroupBy(x => new { x.ContractingPartyId, x.ContractingParty.FName, x.ContractingParty.LName })
.Select(g => new GetContractingPartyBankAccountViewModel()
{
ContractingPartyId = g.Key.ContractingPartyId,
ContractingPartyName = g.Key.FName + " " + g.Key.LName,
BankAccountsItems = g.Select(x => new ContractingPartyBankAccountsItemViewModel
var result = new GetContractingPartyBankAccountViewModel()
{
Count = count,
List = await query
.GroupBy(x => new { x.ContractingPartyId, x.ContractingParty.FName, x.ContractingParty.LName })
.Select(g => new ContractingPartyBankAccountsGroupedViewModel()
{
AccountHolderName = x.AccountHolderName,
AccountNumber = x.AccountNumber,
CardNumber = x.CardNumber,
IBan = x.IBan,
}).ToList()
});
ContractingPartyId = g.Key.ContractingPartyId,
ContractingPartyName = g.Key.FName + " " + g.Key.LName,
BankAccountsItems = g.Select(x => new ContractingPartyBankAccountsItemViewModel
{
AccountHolderName = x.AccountHolderName,
AccountNumber = x.AccountNumber,
CardNumber = x.CardNumber,
IBan = x.IBan,
}).ToList()
}).Skip(searchModel.PageIndex)
.Take(30).ToListAsync()
};
var result = await grouped
.Skip(searchModel.PageIndex)
.Take(30)
.ToListAsync();
return new OperationResult<List<GetContractingPartyBankAccountViewModel>>().Succcedded(result);
return result;
}
public async Task<OperationResult<List<string>>> ContractingPartyOrAccountHolderNameSelectList(string search,
public async Task<List<string>> ContractingPartyOrAccountHolderNameSelectList(string search,
string selected)
{
var accountHolderQuery = _context.ContractingPartyBankAccounts.Select(x => x.AccountHolderName);
var contractingPartyNameQuery = _context.ContractingPartyBankAccounts.Select(x=>x.ContractingParty.FName + " " + x.ContractingParty.LName);
var contractingPartyNameQuery =
_context.ContractingPartyBankAccounts.Select(x =>
x.ContractingParty.FName + " " + x.ContractingParty.LName);
if (!string.IsNullOrWhiteSpace(search))
{
accountHolderQuery = accountHolderQuery.Where(x=>x.Contains(search));
accountHolderQuery = accountHolderQuery.Where(x => x.Contains(search));
contractingPartyNameQuery = contractingPartyNameQuery.Where(x => x.Contains(search));
}
@@ -80,12 +83,12 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
return result.Distinct().ToList();
}
public async Task<OperationResult<List<string>>> IBanSelectList(string search, string selected)
public async Task<List<string>> IBanSelectList(string search, string selected)
{
var iBanQuery = _context.ContractingPartyBankAccounts.Select(x=>x.IBan);
var iBanQuery = _context.ContractingPartyBankAccounts.Where(x=>x.IBan != null).Select(x=>x.IBan);
if (!string.IsNullOrWhiteSpace(search))
{
iBanQuery = iBanQuery.Where(x => x.Contains(search));
@@ -98,12 +101,12 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
return result.Distinct().ToList();
}
public async Task<OperationResult<List<string>>> CardNumberSelectList(string search, string selected)
public async Task<List<string>> CardNumberSelectList(string search, string selected)
{
var cardNumberQuery = _context.ContractingPartyBankAccounts.Select(x=>x.CardNumber);
var cardNumberQuery = _context.ContractingPartyBankAccounts.Where(x=>x.CardNumber != null).Select(x=>x.CardNumber);
if (!string.IsNullOrWhiteSpace(search))
{
cardNumberQuery = cardNumberQuery.Where(x => x.Contains(search));
@@ -116,12 +119,12 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
return result.Distinct().ToList();
}
public async Task<OperationResult<List<string>>> AccountNumberSelectList(string search, string selected)
public async Task<List<string>> AccountNumberSelectList(string search, string selected)
{
var accountNumberQuery = _context.ContractingPartyBankAccounts.Select(x=>x.IBan);
var accountNumberQuery = _context.ContractingPartyBankAccounts.Where(x=>x.AccountNumber != null).Select(x=>x.AccountNumber);
if (!string.IsNullOrWhiteSpace(search))
{
accountNumberQuery = accountNumberQuery.Where(x => x.Contains(search));
@@ -134,6 +137,42 @@ public class ContractingPartyBankAccountsRepository : RepositoryBase<long, Contr
result.Add(selected);
}
return new OperationResult<List<string>>().Succcedded(result.Distinct().ToList());
return result.Distinct().ToList();
}
public async Task<List<string>> GetAccountHolderNameSelectList(string search, string selected)
{
var accountHolderQuery = _context.ContractingPartyBankAccounts.Select(x => x.AccountHolderName);
if (!string.IsNullOrWhiteSpace(search))
{
accountHolderQuery = accountHolderQuery.Where(x => x.Contains(search));
}
var result = await accountHolderQuery.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
public async Task<List<string>> ContractingPartyNamesSelectList(string search, string selected)
{
var query = _context.ContractingPartyBankAccounts
.Select(x => x.ContractingParty.FName + " " + x.ContractingParty.LName);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
}

View File

@@ -488,6 +488,7 @@ namespace CompanyManagment.EFCore.Repository
TotalPayment = x.TotalPayment.ToMoney(),
TotalPaymentD = x.TotalPayment,
TotalLateToWorkDeduction = x.LateToWorkDeduction.ToMoney(),
HasAmountConflict = x.HasAmountConflict
}).ToList();

View File

@@ -216,6 +216,7 @@ namespace CompanyManagment.EFCore.Repository
TotalPayment = x.TotalPayment.ToMoney(),
TotalPaymentD = x.TotalPayment,
TotalLateToWorkDeduction = x.LateToWorkDeduction.ToMoney(),
HasAmountConflict = x.HasAmountConflict
}).ToList();

View File

@@ -69,7 +69,7 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
}
public async Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(long accountId,
ClientFinancialStatementSearchModel searchModel)
FinancialStatementSearchModel searchModel)
{
bool searched = false;
@@ -153,7 +153,7 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
}
}
return new ClientFinancialTransactionViewModel()
return new FinancialTransactionDetailViewModel()
{
DateTimeGr = t.TdateGr,
DateFa = t.TdateGr.ToFarsi(),
@@ -194,7 +194,7 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
TotalCredit = financialStatement.FinancialTransactionList.Sum(x => x.Creditor),
TotalDebt = financialStatement.FinancialTransactionList.Sum(x => x.Deptor),
ContractingPartyName = financialStatement.ContractingPartyName,
Transactions = financialStatement.FinancialTransactionList.Select(t => new ClientFinancialTransactionViewModel()
Transactions = financialStatement.FinancialTransactionList.Select(t => new FinancialTransactionDetailViewModel()
{
DateTimeGr = t.TdateGr,
DateFa = t.TdateGr.ToFarsi(),
@@ -248,5 +248,102 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
}
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,FinancialStatementSearchModel searchModel)
{
var financialStatement = await _context.FinancialStatments
.Include(x=>x.FinancialTransactionList)
.FirstOrDefaultAsync(x=>x.ContractingPartyId == contractingPartyId);
if (financialStatement == null)
{
throw new NotFoundException("وضعیت مالی مورد نظر یافت نشد");
}
bool searched = false;
#region Search
if (searchModel.FromAmount > 0 || searchModel.ToAmount > 0)
{
searched = true;
if (searchModel.FromAmount > 0 && searchModel.ToAmount > 0)
{
financialStatement.FinancialTransactionList = financialStatement.FinancialTransactionList.Where(x => (x.Deptor >= searchModel.FromAmount && x.Deptor <= searchModel.FromAmount) || (x.Creditor >= searchModel.FromAmount && x.Creditor <= searchModel.FromAmount)).ToList();
}
else if (searchModel.FromAmount > 0)
{
financialStatement.FinancialTransactionList = financialStatement.FinancialTransactionList.Where(x => x.Deptor >= searchModel.FromAmount || x.Creditor >= searchModel.FromAmount).ToList();
}
else if (searchModel.ToAmount > 0)
{
financialStatement.FinancialTransactionList = financialStatement.FinancialTransactionList.Where(x => x.Deptor <= searchModel.ToAmount || x.Creditor <= searchModel.ToAmount).ToList();
}
}
if (!string.IsNullOrWhiteSpace(searchModel.FromDate) && !string.IsNullOrWhiteSpace(searchModel.ToDate))
{
searched = true;
if (searchModel.FromDate.TryToGeorgianDateTime(out var fromDate) == false)
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
if (searchModel.FromDate.TryToGeorgianDateTime(out var toDate) == false)
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
financialStatement.FinancialTransactionList = financialStatement.FinancialTransactionList.Where(x => x.TdateGr >= fromDate && x.TdateGr <= toDate).ToList();
}
if (searchModel.Type != null)
{
searched = true;
var type = searchModel.Type switch
{
FinancialTransactionType.Credit => "credit",
FinancialTransactionType.Debt => "debt"
};
financialStatement.FinancialTransactionList = financialStatement.FinancialTransactionList.Where(x => x.TypeOfTransaction == type).ToList();
}
#endregion
double balance = 0;
var res = new FinancialStatmentDetailsByContractingPartyViewModel()
{
Id = financialStatement.id,
TotalAmountPayable = financialStatement.FinancialTransactionList.Sum(x => x.Deptor) - financialStatement.FinancialTransactionList.Sum(x => x.Creditor),
TotalCredit = financialStatement.FinancialTransactionList.Sum(x => x.Creditor),
TotalDebt = financialStatement.FinancialTransactionList.Sum(x => x.Deptor),
ContractingPartyName = financialStatement.ContractingPartyName,
List = financialStatement.FinancialTransactionList.Select(t =>
{
if (!searched)
{
if (t.TypeOfTransaction == "debt")
{
balance += t.Deptor;
}
else
{
balance -= t.Creditor;
}
}
return new FinancialTransactionDetailViewModel()
{
Id = t.id,
DateTimeGr = t.TdateGr,
DateFa = t.TdateGr.ToFarsi(),
TimeFa = $"{t.TdateGr:HH:mm}",
Description = t.DescriptionOption + " " + t.Description,
Debtor = t.Deptor,
Creditor = t.Creditor,
Balance = balance,
Type = t.TypeOfTransaction == "debt"
? FinancialTransactionType.Debt
: FinancialTransactionType.Credit,
TypeStr = t.TypeOfTransaction == "debt" ? "ایجاد درآمد" : "دریافت درآمد"
};
}).OrderByDescending(t => t.DateTimeGr).ToList(),
};
return res;
}
}

View File

@@ -0,0 +1,31 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class PaymentInstrumentGroupRepository : RepositoryBase<long, PaymentInstrumentGroup>,
IPaymentInstrumentGroupRepository
{
private readonly CompanyContext _context;
public PaymentInstrumentGroupRepository(CompanyContext context) : base(context)
{
_context = context;
}
public async Task<List<PaymentInstrumentGroupsViewModel>> GetList()
{
return await _context.PaymentInstrumentGroups.Where(x=>x.IsActive == IsActive.True).AsNoTracking()
.Select(x => new PaymentInstrumentGroupsViewModel()
{
Name = x.Name,
Id = x.id
}).ToListAsync();
}
}

View File

@@ -0,0 +1,234 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class PaymentInstrumentRepository : RepositoryBase<long, PaymentInstrument>, IPaymentInstrumentRepository
{
private readonly CompanyContext _companyContext;
public PaymentInstrumentRepository(CompanyContext context) : base(context)
{
_companyContext = context;
}
public async Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel)
{
var query = _companyContext.PaymentInstruments
.Include(x => x.PaymentInstrumentGroup)
.AsNoTracking();
#region Search
if (!string.IsNullOrWhiteSpace(searchModel.AccountHolderName))
{
query = query.Where(x => x.AccountHolderName.Contains(searchModel.AccountHolderName));
}
if (!string.IsNullOrWhiteSpace(searchModel.AccountNumber))
{
query = query.Where(x => x.AccountNumber.Contains(searchModel.AccountNumber));
}
if (!string.IsNullOrWhiteSpace(searchModel.PosTerminalId))
{
query = query.Where(x => x.PosTerminalId.Contains(searchModel.PosTerminalId));
}
if (!string.IsNullOrWhiteSpace(searchModel.CardNumber))
{
query = query.Where(x => x.CardNumber.Contains(searchModel.CardNumber));
}
if (!string.IsNullOrWhiteSpace(searchModel.IBan))
{
query = query.Where(x => x.IBan.Contains(searchModel.IBan));
}
#endregion
var count = query.Count();
var list = new GetPaymentInstrumentListViewModel()
{
Count = count,
GropedViewModels = await query.GroupBy(x => x.PaymentInstrumentGroupId)
.OrderBy(x=>x.Key)
.Select(x => new PaymentInstrumentGroupedViewModel()
{
Name = x.First().PaymentInstrumentGroup.Name,
Items = x.Select(i => new PaymentInstrumentItemsViewModel()
{
Id = i.id,
Description = i.Description,
IBan = i.IBan,
PosTerminalId = i.PosTerminalId,
CardNumber = i.CardNumber,
AccountNumber = i.AccountNumber,
AccountHolderName = i.AccountHolderName,
Type = i.Type
}).ToList()
}).Skip(searchModel.PageIndex).Take(30).ToListAsync()
};
return list;
}
public Task<List<PosTerminalSelectListViewModel>> GetPosTerminalSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x=>new PosTerminalSelectListViewModel
{
Id = x.id,
Text = x.PosTerminalId
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<IbanSelectListViewModel>> GetIbanSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new IbanSelectListViewModel
{
Id = x.id,
Text = x.IBan
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<AccountNumberSelectListViewModel>> GetAccountNumberSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new AccountNumberSelectListViewModel
{
Id = x.id,
Text = x.AccountNumber
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public Task<List<CardNumberSelectListViewModel>> GetCardNumberSelectList(string search)
{
var queryable = _companyContext.PaymentInstruments.Select(x => new CardNumberSelectListViewModel
{
Id = x.id,
Text = x.CardNumber
});
if (!string.IsNullOrWhiteSpace(search))
{
queryable = queryable.Where(x => x.Text.Contains(search));
}
return queryable.Take(50).ToListAsync();
}
public async Task<List<string>> PosTerminalIdSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.PosTerminalId != null).Select(x => x.PosTerminalId);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
public async Task<List<string>> IbanSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.IBan != null).Select(x => x.IBan);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
public async Task<List<string>> AccountNumberSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.AccountNumber != null).Select(x => x.AccountNumber);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
public async Task<List<string>> AccountHolderNameSelectList(string search, string selected)
{
var accountHolderQuery = _companyContext.PaymentInstruments.Where(x => x.AccountHolderName != null).Select(x => x.AccountHolderName);
if (!string.IsNullOrWhiteSpace(search))
{
accountHolderQuery = accountHolderQuery.Where(x => x.Contains(search));
}
var result = await accountHolderQuery.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
public async Task<List<string>> CardNumberSelectList(string search, string selected)
{
var query = _companyContext.PaymentInstruments.Where(x=>x.CardNumber != null).Select(x => x.CardNumber);
if (!string.IsNullOrWhiteSpace(search))
{
query = query.Where(x => x.Contains(search));
}
var result = await query.Take(50).ToListAsync();
if (!string.IsNullOrWhiteSpace(selected))
{
result.Add(selected);
}
return result.Distinct().ToList();
}
}

View File

@@ -55,33 +55,68 @@ public class PaymentTransactionRepository : RepositoryBase<long, PaymentTransact
query = query.Where(x => x.Status == searchModel.StatusEnum);
}
var paymentTransactionsData = await query
.AsNoTracking()
.Skip(searchModel.PageIndex)
.Take(30)
.ToListAsync();
// 1. گرفتن تراکنش‌ها
var paymentTransactionsData = await query
.AsNoTracking()
.Skip(searchModel.PageIndex)
.Take(30)
.ToListAsync();
var result = paymentTransactionsData
.OrderByDescending(x=>x.CreationDate).Select(x => new GetPaymentTransactionListViewModel
// 2. استخراج prefix و suffix از کارت‌های ماسک‌شده
var maskedCardInfos = paymentTransactionsData.Where(x=>x.CardNumber!=null)
.Select(x => new
{
MaskedCard = x.CardNumber,
Prefix = x.CardNumber.Substring(0, 4),
Suffix = x.CardNumber.Substring(x.CardNumber.Length - 4)
})
.Distinct()
.ToList();
// 3. گرفتن شماره کارت‌های واقعی
var matchedBankAccounts = (await _companyContext.ContractingPartyBankAccounts.Where(x=>x.CardNumber!= null)
.ToListAsync()).Where(account => maskedCardInfos.Any(mask =>
account.CardNumber.StartsWith(mask.Prefix) &&
account.CardNumber.EndsWith(mask.Suffix)
));
// 4. ساختن خروجی
var result = paymentTransactionsData.Where(x=>x.CardNumber!=null)
.OrderByDescending(x => x.CreationDate)
.Select(x =>
{
var prefix = x.CardNumber.Substring(0, 4);
var suffix = x.CardNumber.Substring(x.CardNumber.Length - 4);
// پیدا کردن شماره کارت کامل و اطلاعات بانک و صاحب حساب
var matchedAccount = matchedBankAccounts
.FirstOrDefault(account =>
account.CardNumber.StartsWith(prefix) &&
account.CardNumber.EndsWith(suffix));
return new GetPaymentTransactionListViewModel
{
Id = x.id,
ContractingPartyName = x.ContractingPartyName,
BankName = x.BankName,
CardNumber = matchedAccount?.CardNumber ?? x.CardNumber,
Status = x.Status switch
{
Id = x.id,
ContractingPartyName = x.ContractingPartyName,
BankName = x.BankName,
CardNumber = x.CardNumber,
Status = x.Status switch
{
PaymentTransactionStatus.Failed => "ناموفق",
PaymentTransactionStatus.Success => "موفق",
_ => "نامشخص"
},
StatusEnum = x.Status,
Amount = x.Amount,
TransactionId = x.TransactionId,
PaymentDate = x.TransactionDate.ToFarsi(),
PaymentTime = $"{x.TransactionDate:HH:mm}"
}).ToList();
PaymentTransactionStatus.Failed => "ناموفق",
PaymentTransactionStatus.Success => "موفق",
_ => "نامشخص"
},
StatusEnum = x.Status,
Amount = x.Amount,
TransactionId = x.TransactionId,
PaymentDate = x.TransactionDate.ToFarsi(),
PaymentTime = $"{x.TransactionDate:HH:mm}"
};
})
.ToList();
return result;
return result;
}

View File

@@ -289,7 +289,7 @@ public class RepresentativeRepository : RepositoryBase<long, Representative>, IR
return await _context.RepresentativeSet.Select(x => new GetSelectListRepresentativeViewModel()
{
Id = x.id,
Name = x.FullName
Text = x.FullName
}).ToListAsync();
}

View File

@@ -210,9 +210,11 @@ using CompanyManagment.App.Contracts.ContactUs;
using Company.Domain.EmployeeAuthorizeTempAgg;
using Company.Domain.AdminMonthlyOverviewAgg;
using Company.Domain.ContractingPartyBankAccountsAgg;
using Company.Domain.PaymentInstrumentAgg;
using Company.Domain.PaymentTransactionAgg;
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PaymentInstrument;
using CompanyManagment.App.Contracts.PaymentTransaction;
namespace PersonalContractingParty.Config;
@@ -446,6 +448,11 @@ public class PersonalBootstrapper
services.AddTransient<IContractingPartyBankAccountsApplication, ContractingPartyBankAccountsApplication>();
services.AddTransient<IContractingPartyBankAccountsRepository, ContractingPartyBankAccountsRepository>();
services.AddTransient<IPaymentInstrumentRepository, PaymentInstrumentRepository>();
services.AddTransient<IPaymentInstrumentApplication, PaymentInstrumentApplication>();
services.AddTransient<IPaymentInstrumentGroupRepository, PaymentInstrumentGroupRepository>();
#endregion
#region Pooya

View File

@@ -18,36 +18,18 @@ public class ContractingPartyBankAccountController : AdminBaseController
_contractingPartyBankAccountsApplication = contractingPartyBankAccountsApplication;
}
/// <summary>
/// <summary>
/// لیست اطلاعات بانک اطلاعات بانکی طرف حساب
/// </summary>
/// <param name="searchModel">سرچ</param>
/// <returns></returns>
[HttpGet]
public async Task<OperationResult<List<GetContractingPartyBankAccountViewModel>>> GetList(ContractingPartyBankAccountSearchModel searchModel)
public async Task<GetContractingPartyBankAccountViewModel> GetList(ContractingPartyBankAccountSearchModel searchModel)
{
var res =await _contractingPartyBankAccountsApplication.GetList(searchModel);
return res;
}
[HttpGet("fake")]
public IActionResult GetFakeBankAccounts()
{
var bankAccountsFaker = new Faker<ContractingPartyBankAccountsItemViewModel>("fa")
.RuleFor(x => x.AccountHolderName, f => f.Name.FullName())
.RuleFor(x => x.CardNumber, f => f.Finance.CreditCardNumber())
.RuleFor(x => x.AccountNumber, f => f.Finance.Account())
.RuleFor(x => x.IBan, f => $"IR{f.Random.Number(10_000_000, 99_999_999)}{f.Random.Number(10_000_000, 99_999_999)}");
var viewModelFaker = new Faker<GetContractingPartyBankAccountViewModel>("fa")
.RuleFor(x => x.ContractingPartyId, f => f.Random.Long(1000, 9999))
.RuleFor(x => x.ContractingPartyName, f => f.Company.CompanyName())
.RuleFor(x => x.WorkshopName, f => f.Address.City())
.RuleFor(x => x.BankAccountsItems, f => bankAccountsFaker.Generate(f.Random.Int(1, 5)));
var fakeData = viewModelFaker.Generate(new Random().Next(1,35));
return Ok(fakeData);
}
/// <summary>
/// ایجاد
@@ -55,9 +37,9 @@ public class ContractingPartyBankAccountController : AdminBaseController
/// <param name="command"></param>
/// <returns></returns>
[HttpPost]
public async Task<OperationResult> Create([FromBody] CreateContractingPartyBankAccounts command)
public async Task<OperationResult> Create([FromBody] List<CreateContractingPartyBankAccounts> commands)
{
var operationResult = await _contractingPartyBankAccountsApplication.Create(command);
var operationResult = await _contractingPartyBankAccountsApplication.Create(commands);
return operationResult;
}

View File

@@ -0,0 +1,123 @@
using _0_Framework.Application;
using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.FinancilTransaction;
using Microsoft.AspNetCore.Mvc;
using PersianTools.Core;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
public class FinancialStatementController : AdminBaseController
{
private readonly IFinancialStatmentApplication _financialStatementApplication;
private readonly IFinancialTransactionApplication _financialTransactionApplication;
public FinancialStatementController(IFinancialStatmentApplication financialStatementApplication,
IFinancialTransactionApplication financialTransactionApplication)
{
_financialStatementApplication = financialStatementApplication;
_financialTransactionApplication = financialTransactionApplication;
}
/// <summary>
/// گرفتن جزئیات وضعیت مالی با آیدی طرف حساب
/// </summary>
/// <param name="id"></param>
/// <param name="searchModel"></param>
/// <returns></returns>
[HttpGet("contracting-party/{id}")]
public async Task<ActionResult<FinancialStatmentDetailsByContractingPartyViewModel>> GetDetailsByContractingParty(
long id, FinancialStatementSearchModel searchModel)
{
var data = await _financialStatementApplication.GetDetailsByContractingParty(id, searchModel);
return data;
}
/// <summary>
/// گرفتن جزییات ویرایش
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("edit/{id}")]
public ActionResult<EditFinancialTransaction> GetEditDetails(long id)
{
var res = _financialTransactionApplication.GetDetails(id);
return res;
}
/// <summary>
/// حذف بلاک
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("removeBlocked/{id}")]
public ActionResult<OperationResult> RemoveBlocked(long id)
{
var res = _financialTransactionApplication.RemoveBlocked(id);
return res;
}
/// <summary>
/// ایجاد
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost]
public ActionResult<OperationResult> Create([FromBody] CreateFinancialStatment command)
{
var res = _financialStatementApplication.Create(command);
return res;
}
/// <summary>
/// ویرایش
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPut]
public ActionResult<OperationResult> Edit([FromBody] EditFinancialTransactionRequest request)
{
var command = new EditFinancialTransaction
{
Id = request.Id,
TdateFa = request.TDateFa,
TypeOfTransaction = request.TypeOfTransaction,
DescriptionOption = request.DescriptionOption,
Description = request.Description,
DeptorString = request.DeptorString,
CreditorString = request.CreditorString
};
var result = _financialTransactionApplication.Edit(command);
return result;
}
/// <summary>
/// حذف
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public IActionResult RemoveTransaction(long id)
{
var res = _financialTransactionApplication.RemoveFinancialTransaction(id);
if (res.IsSuccedded)
return new JsonResult(new
{
success = true
});
return new JsonResult(new
{
success = false
});
}
}
public record EditFinancialTransactionRequest(
long Id,
string TDateFa,
string TypeOfTransaction,
string DescriptionOption,
string Description,
string DeptorString,
string CreditorString);

View File

@@ -0,0 +1,270 @@
using _0_Framework.Application;
using _0_Framework.Exceptions;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
public class PaymentInstrumentController:AdminBaseController
{
private readonly IPaymentInstrumentApplication _paymentInstrumentApplication;
private readonly IContractingPartyBankAccountsApplication _contractingPartyBankAccountsApplication;
public PaymentInstrumentController(IPaymentInstrumentApplication paymentInstrumentApplication, IContractingPartyBankAccountsApplication contractingPartyBankAccountsApplication)
{
_paymentInstrumentApplication = paymentInstrumentApplication;
_contractingPartyBankAccountsApplication = contractingPartyBankAccountsApplication;
}
/// <summary>
///لیست اطلاعات بانکی جاری شرکا
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<GetPaymentInstrumentListViewModel>> List(PaymentInstrumentSearchModel searchModel)
{
var list =await _paymentInstrumentApplication.GetList(searchModel);
return list;
}
/// <summary>
/// ایجاد اطلاعات بانکی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("bankAccount")]
public async Task<ActionResult<OperationResult>> CreateBankAccount([FromBody] List<CreateBankPaymentInstrument> command)
{
var result = await _paymentInstrumentApplication.CreateBankAccount(command);
return result;
}
/// <summary>
/// ایجاد اطلاعات دستگاه پوز
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("pos")]
public async Task<ActionResult<OperationResult>> CreatePos([FromBody]CreatePosPaymentInstrument command)
{
var result =await _paymentInstrumentApplication.CreatePos(command);
return result;
}
/// <summary>
/// گرفتن عنوان ها
/// </summary>
/// <returns></returns>
[HttpGet("group")]
public async Task<ActionResult<List<PaymentInstrumentGroupsViewModel>>> GetGroups()
{
var result = await _paymentInstrumentApplication.GetGroup();
return result;
}
/// <summary>
/// ایجاد عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("group")]
public async Task<ActionResult<OperationResult>> CreateGroup([FromBody]CreateBankPaymentInstrumentGroup command)
{
var result = await _paymentInstrumentApplication.CreateGroup(command);
return result;
}
/// <summary>
/// ویرایش عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPut("group")]
public async Task<ActionResult<OperationResult>> EditGroup([FromBody]EditBankPaymentInstrumentGroup command)
{
var result = await _paymentInstrumentApplication.EditGroup(command);
return result;
}
/// <summary>
/// حذف عنوان
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("group/{id}")]
public async Task<ActionResult<OperationResult>> DeleteGroup(long id)
{
var result = await _paymentInstrumentApplication.DeleteGroup(id);
return result;
}
/// <summary>
/// دریافت لیست شناسه‌های دستگاه پوز به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شناسه‌های دستگاه پوز</returns>
[HttpGet("pos-terminal-id-select")]
public async Task<ActionResult<List<string>>> GetPosTerminalIdSelectList(string search, string selected)
{
return await _paymentInstrumentApplication.PosTerminalIdSelectList(search, selected);
}
/// <summary>
/// دریافت لیست شماره‌های شبا به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های شبا</returns>
[HttpGet("iban-select")]
public async Task<ActionResult<List<string>>> GetIbanSelectList(string search, string selected)
{
var paymentIban = await _paymentInstrumentApplication.IbanSelectList(search, selected);
var contractingIban = await _contractingPartyBankAccountsApplication.IBanSelectList(search, selected);
var combinedList = new List<string>();
if (paymentIban != null)
{
combinedList.AddRange(paymentIban);
}
if (contractingIban != null)
{
combinedList.AddRange(contractingIban);
}
return combinedList.Distinct().ToList();
}
/// <summary>
/// دریافت لیست شماره‌های حساب به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های حساب</returns>
[HttpGet("account-number-select")]
public async Task<ActionResult<List<string>>> GetAccountNumberSelectList(string search, string selected)
{
var paymentAccountNumbers = await _paymentInstrumentApplication.AccountNumberSelectList(search, selected);
var contractingAccountNumbers = await _contractingPartyBankAccountsApplication.AccountNumberSelectList(search, selected);
var combinedList = new List<string>();
if (paymentAccountNumbers != null)
{
combinedList.AddRange(paymentAccountNumbers);
}
if (contractingAccountNumbers != null)
{
combinedList.AddRange(contractingAccountNumbers);
}
return combinedList.Distinct().ToList();
}
/// <summary>
/// دریافت لیست شماره‌های کارت به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست شماره‌های کارت</returns>
[HttpGet("card-number-select")]
public async Task<ActionResult<List<string>>> GetCardNumberSelectList(string search, string selected)
{
var paymentCardNumbers = await _paymentInstrumentApplication.CardNumberSelectList(search, selected);
var contractingCardNumbers = await _contractingPartyBankAccountsApplication.CardNumberSelectList(search, selected);
var combinedList = new List<string>();
if (paymentCardNumbers != null)
{
combinedList.AddRange(paymentCardNumbers);
}
if (contractingCardNumbers != null)
{
combinedList.AddRange(contractingCardNumbers);
}
return combinedList.Distinct().ToList();
}
/// <summary>
/// دریافت لیست نام صاحبان حساب به صورت رشته
/// </summary>
/// <param name="search">عبارت جستجو</param>
/// <param name="selected">مقدار انتخاب شده</param>
/// <returns>لیست نام صاحبان حساب</returns>
[HttpGet("account-holder-contracting-party-name-select")]
public async Task<ActionResult<List<string>>> GetAccountHolderNameAndContractingPartyNameSelectList(string search, string selected)
{
var paymentAccountHolders = await _paymentInstrumentApplication.AccountHolderNameSelectList(search, selected);
var contractingAccountHolders = await _contractingPartyBankAccountsApplication.GetAccountHolderNameSelectList(search, selected);
var contractingNames = await _contractingPartyBankAccountsApplication.ContractingPartyNamesSelectList(search, selected);
var combinedList = new List<string>();
if (paymentAccountHolders != null)
{
combinedList.AddRange(paymentAccountHolders);
}
if (contractingAccountHolders != null)
{
combinedList.AddRange(contractingAccountHolders);
}
if (contractingNames != null)
combinedList.AddRange(contractingNames);
return combinedList.Distinct().ToList();
}
[HttpPost("bank-account-inquiry")]
public async Task<ActionResult<OperationResult<BankInquiryResponse>>> GetBankInquiry([FromBody]BankInquiryRequest command)
{
if ((!string.IsNullOrWhiteSpace(command.AccountNumber) && command.AccountNumber.StartsWith("111111")) || (!string.IsNullOrWhiteSpace(command.CardNumber)&&command.CardNumber.StartsWith("111111")) || (!string.IsNullOrWhiteSpace(command.IBan)&&command.IBan.StartsWith("1111111")))
{
return new OperationResult<BankInquiryResponse>().Succcedded(new BankInquiryResponse()
{
AccountNumber = "1111111",
IBan = "111111111111111111111111",
CardNumber = "1111111111111111",
AccountHolderName = "تست تستی",
BankName = "تست بانک",
});
}else if ((!string.IsNullOrWhiteSpace(command.AccountNumber) && command.AccountNumber.StartsWith("222222")) || (!string.IsNullOrWhiteSpace(command.CardNumber)&&command.CardNumber.StartsWith("222222")) || (!string.IsNullOrWhiteSpace(command.CardNumber)&&command.CardNumber.StartsWith("222222")))
{
return new OperationResult<BankInquiryResponse>().Failed("دیتای وارد شده نامعتبر است");
}
else
{
throw new InternalServerException("ارور سمت سرور");
}
}
}
public class BankInquiryRequest
{
public string CardNumber { get; set; }
public string IBan { get; set; }
public string AccountNumber { get; set; }
public string BankName { get; set; }
}
public class BankInquiryResponse
{
public string CardNumber { get; set; }
public string IBan { get; set; }
public string AccountNumber { get; set; }
public string BankName { get; set; }
public string AccountHolderName { get; set; }
}

View File

@@ -0,0 +1,628 @@
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using CompanyManagement.Infrastructure.Excel.InstitutionContract;
using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.InstitutionContract;
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.Representative;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
/// <summary>
/// کنترلر قرارداد های مالی موسسه
/// </summary>
public class institutionContractController : AdminBaseController
{
private readonly IInstitutionContractApplication _institutionContractApplication;
private readonly IPersonalContractingPartyApp _contractingPartyApplication;
private readonly IContactInfoApplication _contactInfoApplication;
private readonly IAccountApplication _accountApplication;
private readonly IEmployerApplication _employerApplication;
private readonly IWorkshopApplication _workshopApplication;
public institutionContractController(IInstitutionContractApplication institutionContractApplication,
IPersonalContractingPartyApp contractingPartyApplication, IContactInfoApplication contactInfoApplication,
IAccountApplication accountApplication, IEmployerApplication employerApplication, IWorkshopApplication workshopApplication)
{
_institutionContractApplication = institutionContractApplication;
_contractingPartyApplication = contractingPartyApplication;
_contactInfoApplication = contactInfoApplication;
_accountApplication = accountApplication;
_employerApplication = employerApplication;
_workshopApplication = workshopApplication;
}
/// <summary>
/// لیست قرارداد های مالی
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<PagedResult<GetInstitutionContractListItemsViewModel>>> GetList(
InstitutionContractListSearchModel searchModel)
{
return await _institutionContractApplication.GetList(searchModel);
}
/// <summary>
/// وضعیت تب ها
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
[HttpGet("stats")]
public async Task<ActionResult<GetInstitutionContractListStatsViewModel>> GetListStats(
InstitutionContractListSearchModel searchModel)
{
return await _institutionContractApplication.GetListStats(searchModel);
}
/// <summary>
/// ایجاد
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost]
public async Task<ActionResult<OperationResult>> Create([FromBody] CreateInstitutionContractRequest command)
{
var op = new OperationResult();
var counter = command.ContactInfos.Count;
//if (string.IsNullOrWhiteSpace(command.HasValueAddedTax))
// command.HasValueAddedTax = "false";
var phone = command.ContactInfos.FirstOrDefault(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode))
return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد"));
if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId))
return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد"));
var result = await _institutionContractApplication.CreateAsync(command);
if (result.IsSuccedded && counter > 0)
{
for (var i = 0; i <= counter - 1; i++)
{
if (command.ContactInfos[i].PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = command.ContactInfos[i].PhoneType,
Position = command.ContactInfos[i].Position,
PhoneNumber = command.ContactInfos[i].PhoneNumber,
FnameLname = command.ContactInfos[i].FnameLname,
SendSms = command.ContactInfos[i].SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
if (phone != null)
{
var userPass = conractingParty.IsLegal == "حقیقی"
? conractingParty.Nationalcode
: conractingParty.NationalId;
var createAcc = new RegisterAccount
{
Fullname = conractingParty.LName,
Username = userPass,
Password = userPass,
Mobile = phone.PhoneNumber,
NationalCode = userPass
};
var res = _accountApplication.RegisterClient(createAcc);
if (res.IsSuccedded)
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId,
res.SendId);
}
}
return new JsonResult(result);
}
/// <summary>
/// ویرایش
/// </summary>
/// <returns></returns>
[HttpPut]
public async Task<ActionResult<OperationResult>> Edit([FromBody] EditInstitutionContractRequest command)
{
var op = new OperationResult();
var phoneNumber = command.ContactInfos.FirstOrDefault(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode))
return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد"));
if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId))
return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد"));
if (phoneNumber == null)
return new JsonResult(op.Failed("تعیین شماره همراه با سمت طرف قرارداد اجباریست"));
//if (string.IsNullOrWhiteSpace(command.HasValueAddedTax))
// command.HasValueAddedTax = "false";
var result = await _institutionContractApplication.EditAsync(command);
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
var counter = command.ContactInfos.Count;
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" })
.Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
if (result.IsSuccedded && counter > 0)
{
if (getOldContarct.Count > 0)
{
foreach (var item in getOldContarct)
{
_contactInfoApplication.RemoveContactInfo(item.Id);
foreach (var phone in command.ContactInfos)
{
if (phone.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = item.Id,
PhoneType = phone.PhoneType,
Position = phone.Position,
PhoneNumber = phone.PhoneNumber,
FnameLname = phone.FnameLname,
SendSms = phone.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
}
}
_contactInfoApplication.RemoveContactInfo(command.Id);
foreach (var item in command.ContactInfos)
{
if (item.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = item.PhoneType,
Position = item.Position,
PhoneNumber = item.PhoneNumber,
FnameLname = item.FnameLname,
SendSms = item.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
//ساخت اکانت کلاینت
var userPass = conractingParty.IsLegal == "حقیقی"
? conractingParty.Nationalcode
: conractingParty.NationalId;
var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass);
if (!checkExistAccount)
{
var createAcc = new RegisterAccount
{
Fullname = conractingParty.LName,
Username = userPass,
Password = userPass,
Mobile = phoneNumber.PhoneNumber,
NationalCode = userPass
};
var res = _accountApplication.RegisterClient(createAcc);
if (res.IsSuccedded)
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId,
res.SendId);
}
}
//Thread.Sleep(500);
//for (int i = 0; i <= counter - 1; i++)
//{
// if (command.ContactInformationList[i].PhoneNumber != null)
// {
// var contactinfo = new CreateContactInfo()
// {
// InstitutionContractId = result.SendId,
// PhoneType = command.ContactInformationList[i].PhoneType,
// Position = command.ContactInformationList[i].Position,
// PhoneNumber = command.ContactInformationList[i].PhoneNumber,
// FnameLname = command.ContactInformationList[i].FnameLname,
// SendSms = command.ContactInformationList[i].SendSmsString == "true" ? true : false
// };
// _contactInfoApplication.Create(contactinfo);
// }
// Thread.Sleep(500);
//}
return new JsonResult(result);
}
[HttpPost("deActive")]
public ActionResult<OperationResult> DeActive(long id, string balance)
{
var result = new OperationResult();
if (balance == "0")
{
result = _institutionContractApplication.DeActive(id);
if (result.IsSuccedded) result = _institutionContractApplication.DeActiveAllConnections(id);
}
else
{
result = _institutionContractApplication.DeActiveBlue(id);
if (result.IsSuccedded)
result = _institutionContractApplication.DeActiveAllConnections(id);
}
return result;
}
/// <summary>
/// غیر فعال
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("active")]
public ActionResult<OperationResult> IsActive(long id)
{
var result = _institutionContractApplication.Active(id);
if (result.IsSuccedded)
{
result = _institutionContractApplication.ReActiveAllConnections(id);
}
return result;
}
[HttpPost("sign")]
public ActionResult<OperationResult> Sign(long Id)
{
var result = _institutionContractApplication.Sign(Id);
if (result.IsSuccedded)
return new JsonResult(new
{
isSuccedded = true
});
return new JsonResult(new
{
isSuccedded = false
});
}
[HttpPost("unsign")]
public ActionResult<OperationResult> UnSign(long Id)
{
var id = Convert.ToInt64(Id);
var result = _institutionContractApplication.UnSign(Id);
if (result.IsSuccedded)
return new JsonResult(new
{
isSuccedded = true
});
return new JsonResult(new
{
isSuccedded = false
});
}
/// <summary>
/// بلاک طرف حساب
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("block-contracting-party")]
public IActionResult OnPostBlockContractingParty(long id)
{
var result = _contractingPartyApplication.Block(id);
var afterActtion = _contractingPartyApplication.GetDetails(id);
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
isBlock = afterActtion.IsBlock,
blockTimes = afterActtion.BlockTimes
});
}
/// <summary>
/// آنبلاک طرف حساب
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("unblock-contracting-party")]
public IActionResult OnPostUnBlockContractingParty(long id)
{
var result = _contractingPartyApplication.DisableBlock(id);
var afterActtion = _contractingPartyApplication.GetDetails(id);
return new JsonResult(new
{
isSuccedded = result.IsSuccedded,
isBlock = afterActtion.IsBlock,
blockTimes = afterActtion.BlockTimes
});
}
[HttpGet("extension/{id}")]
public ActionResult<EditInstitutionContract> OnGetExtension(long id)
{
var todayGr = DateTime.Now;
var todayFa = todayGr.ToFarsi();
var previusContract = _institutionContractApplication.GetDetails(id);
var previusContractEnd = previusContract.ContractEndGr.AddDays(1);
var startFa = previusContractEnd.ToFarsi();
var endFa = startFa.FindeEndOfYear();
var representativList = new List<RepresentativeViewModel>();
var contractingPartyList = new List<PersonalContractingPartyViewModel>();
var res = _institutionContractApplication.GetDetails(id);
var representative = new RepresentativeViewModel
{
Id = res.RepresentativeId,
FullName = res.RepresentativeName
};
representativList.Add(representative);
var contractingParty = new PersonalContractingPartyViewModel
{
id = res.ContractingPartyId,
FullName = _contractingPartyApplication.GetFullName(res.ContractingPartyId)
};
contractingPartyList.Add(contractingParty);
res.RepresentativeSelectList =
new SelectList(representativList, "Id", "FullName");
res.ContractingPartiesSelectList =
new SelectList(contractingPartyList, "id", "FullName");
var employer = _employerApplication.GetEmployerByContracrtingPartyID(res.ContractingPartyId);
var emplId = employer.Select(x => x.Id).ToList();
var w = _workshopApplication.GetWorkshopsByEmployerId(emplId);
var workshopIds = w.Select(x => x.Id).ToList();
var workshopCount = Convert.ToString(w.Count);
var pCount = 0;
if (workshopIds.Count > 0)
{
foreach (var workshopId in workshopIds)
{
var p = _workshopApplication.PersonnelCount(workshopId);
pCount += p;
}
res.EmployeeCount = Convert.ToString(pCount);
}
else
{
res.EmployeeCount = "0";
}
//var left = _leftWorkApplication.GetLeftPersonelByWorkshopId(workshopIds);
res.WorkshopCount = workshopCount;
res.WorkshopManualCount = workshopCount;
res.EmployeeManualCount = res.EmployeeCount;
res.ContractDateFa = todayFa;
res.ContractStartFa = startFa;
res.ContractEndFa = endFa;
res.ContractAmountString = "0";
res.DailyCompenseationString = "0";
res.ObligationString = "0";
res.TotalAmountString = "0";
res.PrviousContractId = id;
if (!string.IsNullOrWhiteSpace(res.EmployeeManualCount))
{
var countPerson = Convert.ToInt32(res.EmployeeCount);
var finalAmount = _institutionContractApplication.GetcontractAmount(countPerson);
var syear = Convert.ToInt32(startFa.Substring(0, 4));
var smonth = Convert.ToInt32(startFa.Substring(5, 2));
var sday = Convert.ToInt32(startFa.Substring(8, 2));
var eyear = Convert.ToInt32(endFa.Substring(0, 4));
var emonth = Convert.ToInt32(endFa.Substring(5, 2));
var eday = Convert.ToInt32(endFa.Substring(8, 2));
emonth += 1;
var def = (eyear - syear) * 12 + emonth - smonth;
//رند ماهیانه
//int rightMDigits = (int)(finalAmount % 1000000);
//if (rightMDigits < 500000)
//{
// finalAmount = (int)(finalAmount / 100000) * 100000;
//}
//else
//{
// finalAmount = (int)(finalAmount / 100000 + 1) * 100000;
//}
finalAmount = (int)(finalAmount / 1000000) * 1000000;
double compute = 0;
double tenPercent = 0;
if (res.HasValueAddedTax == "true")
{
tenPercent = finalAmount * 10 / 100;
res.ContractAmountOAlone = finalAmount.ToMoney();
//افزودن 10 درصد
finalAmount += tenPercent;
res.ContractAmountString = finalAmount.ToMoney();
res.ValueAddedTaxStr = tenPercent.ToMoney();
compute = finalAmount * def;
res.ObligationString = compute.ToMoney();
res.TotalAmountString = res.ObligationString;
}
else
{
res.ContractAmountOAlone = finalAmount.ToMoney();
res.ContractAmountString = res.ContractAmountOAlone;
res.ValueAddedTaxStr = "0";
compute = finalAmount * def;
res.ObligationString = compute.ToMoney();
res.TotalAmountString = res.ObligationString;
}
//رند سالانه
//int rightYDigits = (int)(compute % 10000000);
//if (rightYDigits < 5000000)
//compute = (int)(compute / 1000000) * 1000000;
}
var contactInfo = _contactInfoApplication.GetContactInfolist(id);
if (contactInfo.Count > 0)
{
res.ContactInfoCounter = contactInfo.Count;
res.ContactInformationList = contactInfo;
}
else
{
res.ContactInfoCounter = 0;
}
return res;
}
[HttpPost("extension")]
public async Task<ActionResult<OperationResult>> OnPostExtension([FromBody]ExtenstionInstitutionContractRequest command)
{
var op = new OperationResult();
var phoneNumber = command.ContactInfos.FirstOrDefault(x =>
x.SendSmsString == "true" && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه");
var conractingParty = _contractingPartyApplication.GetDetails(command.ContractingPartyId);
if (conractingParty.IsLegal == "حقیقی" && string.IsNullOrWhiteSpace(conractingParty.Nationalcode))
return new JsonResult(op.Failed("کد ملی طرف حساب وجود ندارد"));
if (conractingParty.IsLegal == "حقوقی" && string.IsNullOrWhiteSpace(conractingParty.NationalId))
return new JsonResult(op.Failed("شناسه ملی طرف حساب وجود ندارد"));
if(phoneNumber == null)
return new JsonResult(op.Failed("تعیین شماره همراه با سمت طرف قرارداد اجباریست"));
var counter = command.ContactInfos.Count;
var result = await _institutionContractApplication.ExtensionَAsync(command);
if (result.IsSuccedded && counter > 0)
{
for (var i = 0; i <= counter - 1; i++)
{
if (command.ContactInfos[i].PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = result.SendId,
PhoneType = command.ContactInfos[i].PhoneType,
Position = command.ContactInfos[i].Position,
PhoneNumber = command.ContactInfos[i].PhoneNumber,
FnameLname = command.ContactInfos[i].FnameLname,
SendSms = command.ContactInfos[i].SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
}
if (result.IsSuccedded)
{
_institutionContractApplication.DeActive(command.PreviousContractId);
_institutionContractApplication.ReActiveAllAfterCreateNew(command.ContractingPartyId);
}
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x => x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
if (result.IsSuccedded && counter > 0)
{
if (getOldContarct.Count > 0)
{
foreach (var item in getOldContarct)
{
_contactInfoApplication.RemoveContactInfo(item.Id);
foreach (var phone in command.ContactInfos)
{
if (phone.PhoneNumber != null)
{
var contactinfo = new CreateContactInfo
{
InstitutionContractId = item.Id,
PhoneType = phone.PhoneType,
Position = phone.Position,
PhoneNumber = phone.PhoneNumber,
FnameLname = phone.FnameLname,
SendSms = phone.SendSmsString == "true" ? true : false
};
_contactInfoApplication.Create(contactinfo);
}
Thread.Sleep(500);
}
}
//ساخت اکانت کلاینت
var userPass = conractingParty.IsLegal == "حقیقی"
? conractingParty.Nationalcode
: conractingParty.NationalId;
var checkExistAccount = _accountApplication.CheckExistClientAccount(userPass);
if (!checkExistAccount)
{
var createAcc = new RegisterAccount
{
Fullname = conractingParty.LName,
Username = userPass,
Password = userPass,
Mobile = phoneNumber.PhoneNumber,
NationalCode = userPass
};
var res = _accountApplication.RegisterClient(createAcc);
if (res.IsSuccedded)
_institutionContractApplication.CreateContractingPartyAccount(command.ContractingPartyId, res.SendId);
}
}
}
return result;
}
/// <summary>
/// دانلود اکسل
/// </summary>
/// <returns></returns>
[HttpGet("excel")]
public IActionResult OnGetDownloadExcel()
{
var institutionContractViewModels =
_institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" });
var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels);
return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx");
}
}

View File

@@ -994,11 +994,26 @@
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت قرارداد </button>
<button type="button" id="closingOnePrint" class="btn btn-warning btn-rounded waves-effect waves-light m-b-10" data-dismiss="modal">بستن فرم</button>
@if (Model.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</form>
<!--<script src="~/AdminTheme/assets/js/workingHoursPrintable.js"></script>-->
<script>
var shiftNumber = $('#shiftWorkval').val();
@@ -1439,6 +1454,7 @@
<script>
$(document).ready(function() {
document.getElementById("btnPrint").onclick = function () {
@@ -1463,6 +1479,9 @@
}
});
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
// window.onfocus=function(){
// $('#closingOnePrint').click();
// }

View File

@@ -342,17 +342,47 @@
{
@if (items.HasRollCall)
{
@if (items.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
<partial name="_Partials/PrintDetailsRollCallRaw" model="items"/>
}
else
{
@if (items.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
<partial name="_Partials/PrintDetailStaticRaw" model="items" />
}
}
</div>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
$(document).ready(function() {
printElement(document.getElementById("printThis"));
});

View File

@@ -708,8 +708,26 @@
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت قرارداد </button>
<button type="button" id="closingOnePrint" class="btn btn-warning btn-rounded waves-effect waves-light m-b-10" data-dismiss="modal">بستن فرم</button>
@if (Model.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</form>
<!--<script src="~/AdminTheme/assets/js/workingHoursPrintable.js"></script>-->
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
<script src="~/assetsadmin/page/checkouts/js/printdetailsrollcall.js"></script>

View File

@@ -1,4 +1,5 @@
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
using CompanyManagement.Infrastructure.Excel.InstitutionContract;

View File

@@ -27,7 +27,7 @@ public class FinancialController : ClientBaseController
}
[HttpGet]
public async Task<ActionResult<ClientFinancialStatementViewModel>> GetList(ClientFinancialStatementSearchModel searchModel)
public async Task<ActionResult<ClientFinancialStatementViewModel>> GetList(FinancialStatementSearchModel searchModel)
{
var accountId = _authHelper.CurrentAccountId();
var result =await _financialStatementApplication.GetClientFinancialStatement(searchModel,accountId);

View File

@@ -95,12 +95,41 @@
@foreach (var items in @Model.GroupPrintList)
{
@if (items.HasRollCall)
{
<partial name="_Partials/PrintDetailsRollCallRaw" model="items"/>
@if (items.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
<partial name="_Partials/PrintDetailsRollCallRaw" model="items"/>
}
else
{
@if (items.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
<partial name="_Partials/PrintDetailStaticRaw" model="items" />
}
}
@@ -114,6 +143,11 @@
</div>
@section Script{
<script>
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script>
@*
<script>

View File

@@ -64,9 +64,7 @@
}
.table-contracts .checkout-list .width10 {
width: 15%;
}
@@media screen and (max-width: 767px) {
.goToTop {
@@ -336,14 +334,15 @@
<label for="checkAll2" class="prevent-select">ردیف</label>
</span>
</div>
<div class="Rtable-cell column-heading d-none d-lg-block width2">شماره پرسنلی</div>
<div class="Rtable-cell column-heading d-none d-lg-block width11"> </div>
<div class="Rtable-cell column-heading d-none d-lg-block width2" >شماره پرسنلی</div>
<div class="Rtable-cell column-heading d-none d-md-block width3">سال</div>
<div class="Rtable-cell column-heading d-none d-md-block width4">ماه</div>
<div class="Rtable-cell column-heading d-none d-md-block width5">شماره قرارداد</div>
<div class="Rtable-cell column-heading width6">نام پرسنل</div>
<div class="Rtable-cell column-heading width7">آغاز قرارداد</div>
<div class="Rtable-cell column-heading width8">پایان قرارداد</div>
<div class="Rtable-cell column-heading d-none d-md-block width9">امضاء پرسنل</div>
<div class="Rtable-cell column-heading d-none d-md-block width9" style="text-align: center">امضاء پرسنل</div>
<div class="Rtable-cell column-heading width10 text-end">عملیات</div>
</div>
@@ -362,6 +361,25 @@
</span>
</label>
</div>
<div class="Rtable-cell d-lg-block d-none width11">
<div class="Rtable-cell--heading"> </div>
<div class="Rtable-cell--content">
@if (item.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
<div class="Rtable-cell d-lg-block d-none width2">
<div class="Rtable-cell--heading">شماره پرسنلی</div>
<div class="Rtable-cell--content">@item.PersonnelCode</div>
@@ -708,6 +726,9 @@
var modalDetailsRotatingShiftReportUrl = `@Url.Page("/Company/Checkouts/Index", "ModalDetailsRotatingShiftReport")`;
var itemsYearList = @Html.Raw(Json.Serialize(Model.YearlyList.OrderBy(x => x)));
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/assetsclient/pages/checkouts/js/index.js?ver=@clientVersion"></script>
}

View File

@@ -651,17 +651,36 @@
<input type="hidden" id="shiftWorkval" name="shiftWorkval" value="@Model.CreateWorkingHoursTemp.ShiftWork">
<div class="modal-footer" style="border-top: unset; padding: 1px 15px 10px;">
<div class="container">
<div class="row">
<div class="col-12 text-start">
<button type="button" class="btn btn-rounded waves-effect waves-light m-b-10 text-white" data-bs-dismiss="modal" aria-label="Close" style="background-color: #454D5C;">بستن فرم</button>
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت</button>
</div>
</div>
</div>
</div>
<div class="modal-footer" style="border-top: unset; padding: 1px 15px 10px;">
<div class="container">
<div class="row">
<div class="col-12 text-start">
<button type="button" class="btn btn-rounded waves-effect waves-light m-b-10 text-white" data-bs-dismiss="modal" aria-label="Close" style="background-color: #454D5C;">بستن فرم</button>
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت</button>
@if (Model.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
</div>
</div>
</form>
<!--<script src="~/AdminTheme/assets/js/workingHoursPrintable.js"></script>-->
<script>
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/assetsclient/pages/checkouts/js/printone.js"></script>

View File

@@ -656,11 +656,30 @@
<div class="col-12 text-start">
<button type="button" class="btn btn-rounded waves-effect waves-light m-b-10 text-white" data-bs-dismiss="modal" aria-label="Close" style="background-color: #454D5C;">بستن فرم</button>
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت قرارداد </button>
@if (Model.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
</div>
</div>
</form>
<!--<script src="~/AdminTheme/assets/js/workingHoursPrintable.js"></script>-->
<script>
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/assetsclient/libs/html2pdf/html2pdf.bundle.min.js"></script>
<script src="~/assetsclient/pages/checkouts/js/printonemobile.js?ver=@clientVersion"></script>

View File

@@ -7,6 +7,7 @@
<link href="~/assetsclient/pages/checkouts/css/printonerollcall.css?ver=@clientVersion" rel="stylesheet" />
<div class="modal-header" style="border-bottom: unset">
<button type="button" id="closingOnePrint" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close" style="margin-top: 15px;"></button>
</div>
@@ -25,175 +26,176 @@
border-radius: 10px;
height: 28cm;
margin: 3mm 5mm 0 5mm; ">
<div class="row" dir="rtl">
<div class="col-3 d-inline-block"><fieldset style="border: 1px solid black; border-radius: 15px; padding: 1px 15px 1px 15px; margin-top: 5px; width: 60%; font-size: 12px; text-align: center;"> @Model.ContractNo</fieldset></div>
<div class="col-6 d-inline-block text-center">
<p style="font-size: 18px; font-family: 'IranNastaliq' !important; margin: 0;">بسمه تعالی</p>
<p style="font-size: 15px; font-weight: bold; margin: 0;">فیش حقوقی و رسید پرداخت حقوق</p>
</div>
<div class="col-3 d-inline-block"></div>
</div>
<div class="row" dir="rtl">
<div class="col-3 d-inline-block"><fieldset style="border: 1px solid black; border-radius: 15px; padding: 1px 15px 1px 15px; margin-top: 5px; width: 60%; font-size: 12px; text-align: center;"> @Model.ContractNo</fieldset></div>
<div class="col-6 d-inline-block text-center">
<p style="font-size: 18px; font-family: 'IranNastaliq' !important; margin: 0;">بسمه تعالی</p>
<p style="font-size: 15px; font-weight: bold; margin: 0;">فیش حقوقی و رسید پرداخت حقوق</p>
</div>
<div class="col-3 d-inline-block"></div>
</div>
<div class="headerInfo">
<div class="row" style="font-size: 12px; margin-bottom: 3px; ">
<div class="col-12" style="padding: 0 10px;">
<div class="d-flex align-items-center" style="border-bottom: 1px solid #000000 !important;">
<div style="width: 34%; padding: 3px 0 !important;">
<div>
<span class="cusSpanTitle">اینجانب</span>
<span>@Model.EmployeeFullName</span>
</div>
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">نام پدر<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.FathersName))
{
<span style="visibility: hidden">""</span>
}
else
{
<span>@Model.FathersName</span>
<div class="headerInfo">
<div class="row" style="font-size: 12px; margin-bottom: 3px; ">
<div class="col-12" style="padding: 0 10px;">
<div class="d-flex align-items-center" style="border-bottom: 1px solid #000000 !important;">
<div style="width: 34%; padding: 3px 0 !important;">
<div>
<span class="cusSpanTitle">اینجانب</span>
<span>@Model.EmployeeFullName</span>
</div>
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">نام پدر<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.FathersName))
{
<span style="visibility: hidden">""</span>
}
else
{
<span>@Model.FathersName</span>
}
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">به کد ملی<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.NationalCode))
{
<span style="margin-left: 15px; visibility: hidden"></span>
}
else
{
<span>
@Model.NationalCode
</span>
}
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">متولد<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.DateOfBirth))
{
<span style="visibility: hidden">1401/01/01</span>
}
else
{
<span>@Model.DateOfBirth</span>
}
</div>
</div>
</div>
<div class="col-12" style="font-size: 12px; text-align: justify; padding: 0 10px;">
<div style="display: flex;align-items: center;border-bottom: 1px solid #000000 !important;height: 23px; padding: 0;">
@{
if (@Model.EmployerList.FirstOrDefault().IsLegal == "حقیقی")
{
<div style="width: 50%; padding: 3px 0 !important;">
<div>
<span class="cusSpanTitle">نام کارگاه<span>:</span> </span>
<span>@Model.WorkshopName</span>
</div>
</div>
<div style="width: 50%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">نام کارفرما<span>:</span> </span>
@if (Model.EmployerList.Count > 1)
{
<span>
@Model.EmployerList[0].EmployerFullName <span>،</span>
<span>&nbsp;</span>@Model.EmployerList[1].EmployerFullName
@if (@Model.EmployerList.Count > 2)
{
<span>و غیره</span>
}
</span>
}
else
{
<span>
@Model.EmployerList.FirstOrDefault().EmployerFullName
</span>
}
</div>
}
else if (@Model.EmployerList.FirstOrDefault().IsLegal == "حقوقی")
{
<div style="width: 100%; padding: 3px 0 !important;">
<span class="cusSpanTitle">پـرسنل شرکت/موسسه<span>:</span> </span>
<span>
@Model.WorkshopName
</span>
</div> }
}
}
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">به کد ملی<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.NationalCode))
{
<span style="margin-left: 15px; visibility: hidden"></span>
}
else
{
<span>
@Model.NationalCode
</span>
}
</div>
<div style="width: 22%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">متولد<span>:</span></span>
@if (string.IsNullOrWhiteSpace(@Model.DateOfBirth))
{
<span style="visibility: hidden">1401/01/01</span>
}
else
{
<span>@Model.DateOfBirth</span>
}
</div>
</div>
</div>
<div style="text-align: justify; padding: 0 6px;">
@{
var items = new List<string>();
if (Model.MonthlySalary != "0") items.Add("حقوق و مزد");
if (Model.ConsumableItems != "0") items.Add("کمک هزینه اقلام مصرفی خانوار");
if (Model.HousingAllowance != "0") items.Add("کمک هزینه مسکن");
if (!string.IsNullOrWhiteSpace(Model.OvertimePay) && Model.OvertimePay != "0") items.Add("فوق العاده اضافه کاری");
if (!string.IsNullOrWhiteSpace(Model.NightworkPay) && Model.NightworkPay != "0") items.Add("فوق العاده شب کاری");
if (!string.IsNullOrWhiteSpace(Model.FridayPay) && Model.FridayPay != "0") items.Add("فوق العاده جمعه کاری");
if (Model.MissionPay != "0") items.Add("فوق العاده ماموریت");
if (Model.ShiftPay != "0") items.Add("فوق العاده نوبت کاری");
if (Model.FamilyAllowance != "0") items.Add("کمک هزینه عائله مندی");
if (Model.MarriedAllowance != "0") items.Add("حق تاهل");
if (Model.RewardPay != "0") items.Add("پاداش");
if (Model.BonusesPay != "0") items.Add("عیدی و پاداش");
if (Model.YearsPay != "0") items.Add("سنوات");
if (Model.LeavePay != "0") items.Add("مزد مرخصی");
<div class="col-12" style="font-size: 12px; text-align: justify; padding: 0 10px;">
<div style="display: flex;align-items: center;border-bottom: 1px solid #000000 !important;height: 23px; padding: 0;">
@{
if (@Model.EmployerList.FirstOrDefault().IsLegal == "حقیقی")
{
<div style="width: 50%; padding: 3px 0 !important;">
<div>
<span class="cusSpanTitle">نام کارگاه<span>:</span> </span>
<span>@Model.WorkshopName</span>
</div>
</div>
string finalText = "";
if (items.Count == 1)
{
finalText = items[0];
}
else if (items.Count > 1)
{
finalText = string.Join("<span>،</span> ", items.Take(items.Count - 1)) + " و " + items.Last();
}
}
<div style="width: 50%; padding: 3px 0 !important; border-right: 1px solid #000000 !important;">
<span class="cusSpanTitle">نام کارفرما<span>:</span> </span>
@if (Model.EmployerList.Count > 1)
{
<span>
@Model.EmployerList[0].EmployerFullName <span>،</span>
<span>&nbsp;</span>@Model.EmployerList[1].EmployerFullName
@if (@Model.EmployerList.Count > 2)
{
<span>و غیره</span>
}
</span>
}
else
{
<span>
@Model.EmployerList.FirstOrDefault().EmployerFullName
</span>
}
</div>
<span>
کلیه حق السعی خود اعم از @Html.Raw(finalText) @Model.Month ماه سال @Model.Year برابر با قرارداد به شماره فوق را از کارفرما بصورت وجه نقد و واریز به حساب دریافت نموده ام.
</span>
</div>
</div>
</div>
</div>
}
else if (@Model.EmployerList.FirstOrDefault().IsLegal == "حقوقی")
{
<div style="width: 100%; padding: 3px 0 !important;">
<span class="cusSpanTitle">پـرسنل شرکت/موسسه<span>:</span> </span>
<span>
@Model.WorkshopName
</span>
</div>
}
}
</div>
<div style="text-align: justify; padding: 0 6px;">
@{
var items = new List<string>();
if (Model.MonthlySalary != "0") items.Add("حقوق و مزد");
if (Model.ConsumableItems != "0") items.Add("کمک هزینه اقلام مصرفی خانوار");
if (Model.HousingAllowance != "0") items.Add("کمک هزینه مسکن");
if (!string.IsNullOrWhiteSpace(Model.OvertimePay) && Model.OvertimePay != "0") items.Add("فوق العاده اضافه کاری");
if (!string.IsNullOrWhiteSpace(Model.NightworkPay) && Model.NightworkPay != "0") items.Add("فوق العاده شب کاری");
if (!string.IsNullOrWhiteSpace(Model.FridayPay) && Model.FridayPay != "0") items.Add("فوق العاده جمعه کاری");
if (Model.MissionPay != "0") items.Add("فوق العاده ماموریت");
if (Model.ShiftPay != "0") items.Add("فوق العاده نوبت کاری");
if (Model.FamilyAllowance != "0") items.Add("کمک هزینه عائله مندی");
if (Model.MarriedAllowance != "0") items.Add("حق تاهل");
if (Model.RewardPay != "0") items.Add("پاداش");
if (Model.BonusesPay != "0") items.Add("عیدی و پاداش");
if (Model.YearsPay != "0") items.Add("سنوات");
if (Model.LeavePay != "0") items.Add("مزد مرخصی");
string finalText = "";
if (items.Count == 1)
{
finalText = items[0];
}
else if (items.Count > 1)
{
finalText = string.Join("<span>،</span> ", items.Take(items.Count - 1)) + " و " + items.Last();
}
}
<span>
کلیه حق السعی خود اعم از @Html.Raw(finalText) @Model.Month ماه سال @Model.Year برابر با قرارداد به شماره فوق را از کارفرما بصورت وجه نقد و واریز به حساب دریافت نموده ام.
</span>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top: 10px;padding: 0 12px;">
<fieldset style="border: 1px solid black !important;-webkit-print-color-adjust: exact;print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden;padding: 0; line-height:normal;">
<table style="/* table-layout: fixed; */ width: 100%">
<tr style="border-bottom: 1px solid; height: 25px; border-collapse: separate; background-color: #cdcdcd !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@* <th style="text-align: center; width: 8mm; font-size: 12px; padding: 2px; border-collapse: separate; border-radius: 0px 10px 0px 0px;"> </th> *@
<th colspan="4" style="text-align: center; position: relative ; font-size: 13px;padding-top:4px;border-left: 2px solid #000;"> مطالبات </th>
@* <th style="text-align: center;"> </th>
<tr style="border-bottom: 1px solid; height: 25px; border-collapse: separate; background-color: #cdcdcd !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@* <th style="text-align: center; width: 8mm; font-size: 12px; padding: 2px; border-collapse: separate; border-radius: 0px 10px 0px 0px;"> </th> *@
<th colspan="4" style="text-align: center; position: relative ; font-size: 13px;padding-top:4px;border-left: 2px solid #000;"> مطالبات </th>
@* <th style="text-align: center;"> </th>
<th style="text-align: center; border-left: 2px solid #000; font-size: 12px"> </th> *@
<th colspan="3" style="text-align: center; font-size: 13px; position: relative; padding-top: 4px;"> کسورات </th>
@* <th style="text-align: center; font-size: 12px; border-collapse: separate; border-radius: 0px 0px 0px 0px;"> </th>
<th colspan="3" style="text-align: center; font-size: 13px; position: relative; padding-top: 4px;"> کسورات </th>
@* <th style="text-align: center; font-size: 12px; border-collapse: separate; border-radius: 0px 0px 0px 0px;"> </th>
<th style="text-align: center; font-size: 12px; border-collapse: separate; border-radius: 10px 0px 0px 0px;"> </th> *@
</tr>
</tr>
<tr style="border-bottom: 1px solid; background-color: #e1e1e1 !important ;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<th style="width: 5%; text-align: center; border-left: 1px solid #000; font-size: 12px;padding: 2px"> ردیف </th>
<th style="width: 23%; text-align: center; border-left: 1px solid #000; font-size: 12px"> شرح </th>
<th style="width: 10%; text-align: center; border-left: 1px solid #000; font-size: 9px"> ساعت/روز/تعداد </th>
<th style="width: 12%; text-align: center; border-left: 2px solid #000; font-size: 12px"> مبلغ(ریال) </th>
<th style="width: 28%; text-align: center; border-left: 1px solid #000; font-size: 12px"> شرح </th>
<th style="width: 10%; text-align: center; border-left: 1px solid #000; font-size: 9px"> ساعت/روز/تعداد </th>
<th style="width: 12%; text-align: center; font-size: 12px"> مبلغ(ریال) </th>
<th style="width: 5%; text-align: center; border-left: 1px solid #000; font-size: 12px;padding: 2px"> ردیف </th>
<th style="width: 23%; text-align: center; border-left: 1px solid #000; font-size: 12px"> شرح </th>
<th style="width: 10%; text-align: center; border-left: 1px solid #000; font-size: 9px"> ساعت/روز/تعداد </th>
<th style="width: 12%; text-align: center; border-left: 2px solid #000; font-size: 12px"> مبلغ(ریال) </th>
<th style="width: 28%; text-align: center; border-left: 1px solid #000; font-size: 12px"> شرح </th>
<th style="width: 10%; text-align: center; border-left: 1px solid #000; font-size: 9px"> ساعت/روز/تعداد </th>
<th style="width: 12%; text-align: center; font-size: 12px"> مبلغ(ریال) </th>
</tr>
<tr style="font-size: 12px; ">
<td style="text-align: center; border-left: 1px solid #000; padding: 2px ">1</td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> حقوق و مزد </td>
<td style="text-align: center; border-left: 1px solid #000;"> @Model.SumOfWorkingDays </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.MonthlySalary == "0" ? "-" : Model.MonthlySalary) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> حق بیمه سهم کارگر </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
@@ -222,7 +224,7 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> کمک هزینه مسکن </td>
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.HousingAllowance == "0" ? "-" : Model.SumOfWorkingDays) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.HousingAllowance == "0" ? "-" : Model.HousingAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مساعده </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مساعده </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.SalaryAidDeduction == "0" ? "-" : Model.SalaryAidDeduction) </td>
</tr>
@@ -231,7 +233,7 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده اضافه کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.OverTimeWorkValue == "00:00" || string.IsNullOrWhiteSpace(Model.OverTimeWorkValue)) ? "-" : Model.OverTimeWorkValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @((Model.OvertimePay == "0" || string.IsNullOrWhiteSpace(Model.OvertimePay)) ? "-" : Model.OvertimePay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> غیبت </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> غیبت </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.AbsenceDeduction == "0" ? "-" : Model.AbsenceDeduction) </td>
</tr>
@@ -258,8 +260,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده ماموریت </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.MissionPay == "0" ? "-" : Model.MissionPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -267,8 +269,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده نوبت کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.RotatingShiftValue == "0" || string.IsNullOrWhiteSpace(Model.RotatingShiftValue)) ? "-" : "%" + Model.RotatingShiftValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.ShiftPay == "0" ? "-" : Model.ShiftPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -276,8 +278,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> کمک هزینه عائله مندی </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.FamilyAllowance == "0" ? "-" : Model.FamilyAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -285,8 +287,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> حق تاهل </td>
<td style="text-align: center; border-left: 1px solid #000;"> @Model.MaritalStatus </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.MarriedAllowance == "0" ? "-" : Model.MarriedAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -294,8 +296,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> پاداش </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.RewardPay == "0" ? "-" : Model.RewardPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -304,59 +306,59 @@
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.BonusesPay == "0" ? "-" : Model.SumOfWorkingDays) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.BonusesPay == "0" ? "-" : Model.BonusesPay) </td>
@{
if (Model.IsLeft)
{
<td style="text-align: center; background-color: #ffffff !important;" colspan="3" rowspan="3">
<div style="border-top: 1px solid #000;border-top-left-radius: 15px;border-top-right-radius: 15px; height: 65px;">
<div style="padding: 0 6px; text-align: start;display: block;align-items: center;height: 64px;margin: 6px;">
<span>طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب</span>
<span>@Model.LastDayOfWork</span>
<span>بوده و قطع همکاری با کارفرما و کارگاه از تاریخ</span>
<span>@Model.LeftWorkDate</span>
<span>می باشد</span>
</div>
</div>
</td>
}
else
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
@{
if (Model.IsLeft)
{
<td style="text-align: center; background-color: #ffffff !important;" colspan="3" rowspan="3">
<div style="border-top: 1px solid #000;border-top-left-radius: 15px;border-top-right-radius: 15px; height: 65px;">
<div style="padding: 0 6px; text-align: start;display: block;align-items: center;height: 64px;margin: 6px;">
<span>طبق تصفیه حساب نهایی تنظیمی فوق، آخرین روز اشتغال بکار اینجانب</span>
<span>@Model.LastDayOfWork</span>
<span>بوده و قطع همکاری با کارفرما و کارگاه از تاریخ</span>
<span>@Model.LeftWorkDate</span>
<span>می باشد</span>
</div>
</div>
</td>
}
else
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<td style="text-align: center; border-left: 1px solid #000; padding: 2px ">14</td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> سنوات </td>
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.YearsPay == "0" ? "-" : Model.SumOfWorkingDays)</td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.YearsPay == "0" ? "-" : Model.YearsPay) </td>
@{
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
</tr>
<tr style="font-size: 12px;">
<td style="text-align: center; border-left: 1px solid #000; padding: 2px ">15</td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مزد مرخصی </td>
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.LeavePay == "0" ? "-" : Model.SumOfWorkingDays) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.LeavePay == "0" ? "-" : Model.LeavePay) </td>
@{
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
<td style="text-align: center; border-left: 1px solid #000; padding: 2px ">15</td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مزد مرخصی </td>
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.LeavePay == "0" ? "-" : Model.SumOfWorkingDays) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.LeavePay == "0" ? "-" : Model.LeavePay) </td>
@{
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
</tr>
<tr style="font-size: 12px; height: 20px; background-color: #dddcdc !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; border-bottom: 1px solid #000; border-top: 1px solid #000; ">
@@ -365,16 +367,16 @@
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.TotalClaims == "0" ? "-" : Model.TotalClaims) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> جمع کسورات </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.TotalDeductions == "0" ? "-" : Model.TotalDeductions) </td>
</tr>
<tr style="font-size: 12px; border-radius: 0px 0px 10px 10px !important; height: 20px; background-color: #efefef !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<td style="text-align: center; padding: 2px; border-radius: 0px 0px 10px 0px "></td>
<td style="padding-right: 8px; border-left: 1px solid #000; "> مبلغ قابل پرداخت </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.TotalPayment == "0" ? "-" : Model.TotalPayment) </td>
<td style="padding-right: 8px;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-radius:0px 0px 0px 10px"> </td>
</tr>
</table>
@@ -452,8 +454,8 @@
@if (@dailyRollCall.IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222" />
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round" />
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222"/>
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round"/>
</svg>
}
else
@@ -506,7 +508,7 @@
{
<div style="width: 10%; text-align: center; border-width: 2px 0 2px 0; border-color: #DDDCDC; border-style: solid;">@dailyRollCall.StartDate1</div>
<div style="width: 10%; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;">@dailyRollCall.EndDate1</div>
<div style="width: 10%; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;">@dailyRollCall.EndDate2</div>
<div style="width: 10%; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;">@dailyRollCall.EndDate2</div>
}
@@ -536,8 +538,8 @@
@if (@dailyRollCall.IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222" />
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round" />
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222"/>
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round"/>
</svg>
}
else
@@ -550,8 +552,8 @@
}
</div>
@* <div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@* <div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<tr style="font-size: 8px;border-collapse: separate;background-color: #AFAFAF !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
@@ -717,28 +719,28 @@
</table>
</div>
*@
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
@@ -841,7 +843,7 @@
</div>
</div>
</div>
</fieldset>
</div>
</div>
@@ -859,13 +861,33 @@
<div class="container">
<div class="row">
<div class="col-12 text-start">
<button type="button" class="btn btn-rounded waves-effect waves-light m-b-10 text-white" data-bs-dismiss="modal" aria-label="Close" style="background-color: #454D5C;">بستن فرم</button>
<button type="button" class="btn btn-rounded waves-effect waves-light m-b-10 text-white" data-bs-dismiss="modal" aria-label="Close" style="background-color: #454D5C;">بستن فرم</button>
<button id="btnPrint" type="button" class="btn btn-success btn-rounded waves-effect waves-light">پرینت</button>
@if (Model.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت رفع تغییرات فیش حقوقی را دوباره ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
</div>
</div>
</div>
</form>
<!--<script src="~/AdminTheme/assets/js/workingHoursPrintable.js"></script>-->
<script>
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/assetsclient/libs/html2pdf/html2pdf.bundle.min.js"></script>
<script src="~/assetsclient/pages/checkouts/js/printonerollcall.js?ver=@clientVersion"></script>

View File

@@ -2,6 +2,7 @@
@model CompanyManagment.App.Contracts.Checkout.CheckoutViewModel
<div class="">
<div class="row">
<div class="col-12 mt-30">
<fieldset style="border: 1px solid black;
@@ -211,7 +212,7 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> کمک هزینه مسکن </td>
<td style="text-align: center; border-left: 1px solid #000;"> @(Model.HousingAllowance == "0" ? "-" : Model.SumOfWorkingDays) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.HousingAllowance == "0" ? "-" : Model.HousingAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مساعده </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> مساعده </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.SalaryAidDeduction == "0" ? "-" : Model.SalaryAidDeduction) </td>
</tr>
@@ -220,7 +221,7 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده اضافه کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.OverTimeWorkValue == "00:00" || string.IsNullOrWhiteSpace(Model.OverTimeWorkValue)) ? "-" : Model.OverTimeWorkValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @((Model.OvertimePay == "0" || string.IsNullOrWhiteSpace(Model.OvertimePay)) ? "-" : Model.OvertimePay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> غیبت </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> غیبت </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.AbsenceDeduction == "0" ? "-" : Model.AbsenceDeduction) </td>
</tr>
@@ -229,8 +230,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده شب کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.OverNightWorkValue == "00:00" || string.IsNullOrWhiteSpace(Model.OverNightWorkValue)) ? "-" : Model.OverNightWorkValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @((Model.NightworkPay == "0" || string.IsNullOrWhiteSpace(Model.NightworkPay)) ? "-" : Model.NightworkPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -238,8 +239,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده جمعه کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.FridayWorkValue == "0" || string.IsNullOrWhiteSpace(Model.FridayWorkValue)) ? "-" : Model.FridayWorkValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @((Model.FridayPay == "0" || string.IsNullOrWhiteSpace(Model.FridayPay)) ? "-" : Model.FridayPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
@@ -247,8 +248,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده ماموریت </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.MissionPay == "0" ? "-" : Model.MissionPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -256,8 +257,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> فوق العاده نوبت کاری </td>
<td style="text-align: center; border-left: 1px solid #000;"> @((Model.RotatingShiftValue == "0" || string.IsNullOrWhiteSpace(Model.RotatingShiftValue)) ? "-" : "%" + Model.RotatingShiftValue) </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.ShiftPay == "0" ? "-" : Model.ShiftPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -265,8 +266,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> کمک هزینه عائله مندی </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.FamilyAllowance == "0" ? "-" : Model.FamilyAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px;">
@@ -274,8 +275,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> حق تاهل </td>
<td style="text-align: center; border-left: 1px solid #000;"> @Model.MaritalStatus </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.MarriedAllowance == "0" ? "-" : Model.MarriedAllowance) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
<tr style="font-size: 12px; background-color: #f1f1f1 !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -283,8 +284,8 @@
<td style="padding-right: 8px; border-left: 1px solid #000;"> پاداش </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.RewardPay == "0" ? "-" : Model.RewardPay) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
</tr>
@@ -311,8 +312,8 @@
}
else
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
@@ -327,8 +328,8 @@
@{
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
@@ -342,8 +343,8 @@
@{
if (!Model.IsLeft)
{
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center;"> </td>
}
}
@@ -355,16 +356,16 @@
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.TotalClaims == "0" ? "-" : Model.TotalClaims) </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> جمع کسورات </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center; border-left: 1px solid #000;"> - </td>
<td style="text-align: center;"> @(Model.TotalDeductions == "0" ? "-" : Model.TotalDeductions) </td>
</tr>
<tr style="font-size: 12px; border-radius: 0px 0px 10px 10px !important; height: 20px; background-color: #efefef !important; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<td style="text-align: center; padding: 2px; border-radius: 0px 0px 10px 0px "></td>
<td style="padding-right: 8px; border-left: 1px solid #000; "> مبلغ قابل پرداخت </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-left: 2px solid #000;"> @(Model.TotalPayment == "0" ? "-" : Model.TotalPayment) </td>
<td style="padding-right: 8px;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="padding-right: 8px;"> </td>
<td style="text-align: center; border-left: 1px solid #000;"> </td>
<td style="text-align: center; border-radius:0px 0px 0px 10px"> </td>
</tr>
</table>
@@ -376,192 +377,192 @@
<div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<tr style="font-size: 8px;border-collapse: separate;background-color: #AFAFAF !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<th style="font-size: 8px !important;width: 28%;padding: 2px 10px !important;border-left: 0;border-radius: 0 5px 5px 0 !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">تاریخ</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 12%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">استراحت</th>
<th style="font-size: 8px;text-align: center;width: 10%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">منقطع</th>
<th style="font-size: 8px;text-align: center;width: 14%;padding: 0 0 0 5px !important;border-radius: 5px 0 0 5px !important; -webkit-print-color-adjust: exact;print-color-adjust: exact;white-space:nowrap">کارکرد</th>
</tr>
<tr style="font-size: 8px;border-collapse: separate;background-color: #AFAFAF !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<th style="font-size: 8px !important;width: 28%;padding: 2px 10px !important;border-left: 0;border-radius: 0 5px 5px 0 !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">تاریخ</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 12%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">استراحت</th>
<th style="font-size: 8px;text-align: center;width: 10%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">منقطع</th>
<th style="font-size: 8px;text-align: center;width: 14%;padding: 0 0 0 5px !important;border-radius: 5px 0 0 5px !important; -webkit-print-color-adjust: exact;print-color-adjust: exact;white-space:nowrap">کارکرد</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < 15; i++)
{
<tr style="@((Model.MonthlyRollCall[i].IsHoliday || Model.MonthlyRollCall[i].IsFriday) ? "background-color: #BBBBBB !important;" : "background-color: #FFFFFF !important;") font-size: 8px;border-collapse: separate;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<td style="white-space: nowrap; font-size: 8px; padding: 1px 3px;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid; border-radius: 0 5px 5px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].DateTimeGr.ToFarsi() - @Model.MonthlyRollCall[i].DateTimeGr.DayOfWeek.DayOfWeeKToPersian()</td>
@for (int i = 0; i < 15; i++)
{
<tr style="@((Model.MonthlyRollCall[i].IsHoliday || Model.MonthlyRollCall[i].IsFriday) ? "background-color: #BBBBBB !important;" : "background-color: #FFFFFF !important;") font-size: 8px;border-collapse: separate;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<td style="white-space: nowrap; font-size: 8px; padding: 1px 3px;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid; border-radius: 0 5px 5px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].DateTimeGr.ToFarsi() - @Model.MonthlyRollCall[i].DateTimeGr.DayOfWeek.DayOfWeeKToPersian()</td>
@if (@Model.MonthlyRollCall[i].IsAbsent)
@if (@Model.MonthlyRollCall[i].IsAbsent)
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span> *@
</div>
</td>
}
else
{
@if (string.IsNullOrWhiteSpace(Model.MonthlyRollCall[i].LeaveType))
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span> *@
</div>
</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].StartDate1</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].EndDate1</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].StartDate2</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].EndDate2</td>
}
else
{
@if (string.IsNullOrWhiteSpace(Model.MonthlyRollCall[i].LeaveType))
{
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].StartDate1</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].EndDate1</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].StartDate2</td>
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].EndDate2</td>
}
else
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 38px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;font-size: 7.5px;font-weight: 500;">
@Model.MonthlyRollCall[i].LeaveType
</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 38px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;font-size: 7.5px;font-weight: 500;">
@Model.MonthlyRollCall[i].LeaveType
</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
@Model.MonthlyRollCall[i].LeaveType
</span> *@
</div>
</td>
}
</div>
</td>
}
}
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].BreakTimeString</td>
<td style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;vertical-align: center;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@if (@Model.MonthlyRollCall[i].IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222" />
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round" />
</svg>
}
else
{
<span>-</span>
}
</td>
<td style="font-size: 8px;text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact;border-radius: 5px 0 0 5px;">@Model.MonthlyRollCall[i].TotalWorkingHours</td>
</tr>
}
<td style="font-size: 8px; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@Model.MonthlyRollCall[i].BreakTimeString</td>
<td style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;vertical-align: center;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@if (@Model.MonthlyRollCall[i].IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222"/>
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round"/>
</svg>
}
else
{
<span>-</span>
}
</td>
<td style="font-size: 8px;text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact;border-radius: 5px 0 0 5px;">@Model.MonthlyRollCall[i].TotalWorkingHours</td>
</tr>
}
</tbody>
</table>
</div>
<div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<tr style="font-size: 8px;border-collapse: separate;background-color: #AFAFAF !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<th style="font-size: 8px !important;width: 28%;padding: 2px 10px !important;border-left: 0;border-radius: 0 5px 5px 0 !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">تاریخ</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 12%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">استراحت</th>
<th style="font-size: 8px;text-align: center;width: 10%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">منقطع</th>
<th style="font-size: 8px;text-align: center;width: 14%;padding: 0 0 0 5px !important;border-radius: 5px 0 0 5px !important; -webkit-print-color-adjust: exact;print-color-adjust: exact;white-space:nowrap">کارکرد</th>
</tr>
<tr style="font-size: 8px;border-collapse: separate;background-color: #AFAFAF !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<th style="font-size: 8px !important;width: 28%;padding: 2px 10px !important;border-left: 0;border-radius: 0 5px 5px 0 !important;-webkit-print-color-adjust: exact;print-color-adjust: exact;">تاریخ</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">ورود</th>
<th style="font-size: 8px;text-align: center;width: 9%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">خروج</th>
<th style="font-size: 8px;text-align: center;width: 12%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">استراحت</th>
<th style="font-size: 8px;text-align: center;width: 10%;-webkit-print-color-adjust: exact;print-color-adjust: exact;">منقطع</th>
<th style="font-size: 8px;text-align: center;width: 14%;padding: 0 0 0 5px !important;border-radius: 5px 0 0 5px !important; -webkit-print-color-adjust: exact;print-color-adjust: exact;white-space:nowrap">کارکرد</th>
</tr>
</thead>
<tbody>
@{
Model.MonthlyRollCall = Model.MonthlyRollCall.Skip(15).ToList();
}
@foreach (var day in Model.MonthlyRollCall)
{
<tr style="@((day.IsHoliday || day.IsFriday) ? "background-color: #BBBBBB !important;" : "background-color: #FFFFFF !important;") font-size: 8px;border-collapse: separate;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<td style="white-space: nowrap; font-size: 8px; padding: 1px 3px;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid; border-radius: 0 5px 5px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.DateTimeGr.ToFarsi() - @day.DateTimeGr.DayOfWeek.DayOfWeeKToPersian()</td>
@{
Model.MonthlyRollCall = Model.MonthlyRollCall.Skip(15).ToList();
}
@foreach (var day in Model.MonthlyRollCall)
{
<tr style="@((day.IsHoliday || day.IsFriday) ? "background-color: #BBBBBB !important;" : "background-color: #FFFFFF !important;") font-size: 8px;border-collapse: separate;-webkit-print-color-adjust: exact;print-color-adjust: exact;">
<td style="white-space: nowrap; font-size: 8px; padding: 1px 3px;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid; border-radius: 0 5px 5px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.DateTimeGr.ToFarsi() - @day.DateTimeGr.DayOfWeek.DayOfWeeKToPersian()</td>
@if (day.IsAbsent)
@if (day.IsAbsent)
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span> *@
</div>
</td>
}
else
{
@if (string.IsNullOrWhiteSpace(day.LeaveType))
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 40px;display: block;border-radius: 50px;background-color: #737373;color: #fff;">غیبت</span> *@
</div>
</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.StartDate1</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.EndDate1</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.StartDate2</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.EndDate2</td>
}
else
{
@if (string.IsNullOrWhiteSpace(day.LeaveType))
{
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.StartDate1</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.EndDate1</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.StartDate2</td>
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.EndDate2</td>
}
else
{
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
@day.LeaveType
</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
<span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
@day.LeaveType
</span>
</div>
</td>
<td colspan="2" style="font-size: 8px; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<div style="display: flex;justify-content: center;">
@* <span style="width: 80px; display: block; border-radius: 50px; background-color: #fff; color: #737373;border: 1px solid #737373;">
@day.LeaveType
</span> *@
</div>
</td>
}
</div>
</td>
}
}
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.BreakTimeString</td>
<td style="font-size: 8px !important; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;vertical-align: center;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@if (day.IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222" />
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round" />
</svg>
}
else
{
<span>-</span>
}
</td>
<td style="font-size: 8px;text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact;border-radius: 5px 0 0 5px;">@day.TotalWorkingHours</td>
</tr>
}
<td style="font-size: 8px !important; text-align: center;border-width: 2px 0 2px 2px;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">@day.BreakTimeString</td>
<td style="font-size: 8px !important; text-align: center; border-width: 2px 0 2px 2px; border-color: #DDDCDC; border-style: solid;vertical-align: center;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@if (day.IsSliced)
{
<svg width="12" height="12" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="display: block; margin: auto;">
<circle stroke-width="2" cx="12" cy="12" r="9" stroke="#222222"/>
<path stroke-width="2" d="M8 12L11 15L16 9" stroke="#222222" stroke-linecap="round"/>
</svg>
}
else
{
<span>-</span>
}
</td>
<td style="font-size: 8px;text-align: center;border-width: 2px 0 2px 0;border-color: #DDDCDC;border-style: solid;-webkit-print-color-adjust: exact;print-color-adjust: exact;border-radius: 5px 0 0 5px;">@day.TotalWorkingHours</td>
</tr>
}
</tbody>
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -18,16 +18,16 @@
@section Styles {
<link href="~/AssetsClient/css/table-style.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/table-responsive.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/datetimepicker.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/dropdown.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/filter-search.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/assetsclient/css/operation-button.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/select2.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/AssetsClient/css/table-style.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/table-responsive.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/datetimepicker.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/dropdown.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/filter-search.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/assetsclient/css/operation-button.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AssetsClient/css/select2.css?ver=@clientVersion" rel="stylesheet"/>
<link href="~/AdminTheme/assets/sweet-alert/sweet-alert.min.css" rel="stylesheet">
<link href="~/assetsclient/pages/customizecheckout/css/CheckoutTemporary.css?ver=@clientVersion" rel="stylesheet" />
<link href="~/assetsclient/pages/customizecheckout/css/CheckoutTemporary.css?ver=@clientVersion" rel="stylesheet"/>
<style>
@@ -56,17 +56,22 @@
background-color: #afffcc
}
.btn-excel span {
color: #1E293B;
font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: 24px;
}
.btn-excel span {
color: #1E293B;
font-size: 12px;
font-style: normal;
font-weight: 400;
line-height: 24px;
}
.btn-excel:hover {
background-color: #a8ebc1;
}
.btn-excel:hover {
background-color: #a8ebc1;
}
.conflict-icon {
color: #dc3545;
margin-right: 5px;
}
@@media (max-width: 767px) {
.table-contracts .Rtable .Rtable-row .Rtable-contract .Rtable-cell--heading button.btn-print {
@@ -80,22 +85,22 @@
height: 35px;
}
.btn-excel span, .btn-print-all span {
display: none;
}
.btn-excel span, .btn-print-all span {
display: none;
}
}
</style>
}
<input type="hidden" id="pageIndex" asp-for="@Model.SearchModel.PageIndex" />
<input type="hidden" id="employeeId" asp-for="@Model.SearchModel.EmployeeId" />
<input type="hidden" id="Year" asp-for="@Model.SearchModel.Year" />
<input type="hidden" id="Month" asp-for="@Model.SearchModel.Month" />
<input type="hidden" id="SearchStartFa" value="@Model.SearchModel.SearchStartFa" />
<input type="hidden" id="SearchEndFa" value="@Model.SearchModel.SearchEndFa" />
<input type="hidden" id="OrderBy" value="@Model.SearchModel.OrderBy" />
<input type="hidden" id="BankId" value="@Model.SearchModel.BankId" />
<input type="hidden" id="pageIndex" asp-for="@Model.SearchModel.PageIndex"/>
<input type="hidden" id="employeeId" asp-for="@Model.SearchModel.EmployeeId"/>
<input type="hidden" id="Year" asp-for="@Model.SearchModel.Year"/>
<input type="hidden" id="Month" asp-for="@Model.SearchModel.Month"/>
<input type="hidden" id="SearchStartFa" value="@Model.SearchModel.SearchStartFa"/>
<input type="hidden" id="SearchEndFa" value="@Model.SearchModel.SearchEndFa"/>
<input type="hidden" id="OrderBy" value="@Model.SearchModel.OrderBy"/>
<input type="hidden" id="BankId" value="@Model.SearchModel.BankId"/>
<div class="content-container">
@@ -103,7 +108,8 @@
<div class="row p-2">
<div class="col p-0 m-0 d-flex align-items-center justify-content-between">
<div class="col d-flex align-items-center justify-content-start">
<img src="~/AssetsClient/images/checkoutList.png" alt="" class="img-fluid me-2" style="width: 45px;" />
<img src="~/AssetsClient/images/checkoutList.png" alt="" class="img-fluid me-2"
style="width: 45px;"/>
<div>
<h4 class="title d-flex align-items-center">اطلاعات فیش حقوقی موقت</h4>
<div>@Model.WorkshopFullName</div>
@@ -120,9 +126,10 @@
<button class="btn btn-rounded mb-5 goToTop">
<div class="d-flex align-items-center">
<span>برو بالا</span>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20px" class="ms-1">
<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 18.75 7.5-7.5 7.5 7.5" />
<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 7.5-7.5 7.5 7.5" />
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2"
stroke="currentColor" width="20px" class="ms-1">
<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 18.75 7.5-7.5 7.5 7.5"/>
<path stroke-linecap="round" stroke-linejoin="round" d="m4.5 12.75 7.5-7.5 7.5 7.5"/>
</svg>
</div>
</button>
@@ -138,8 +145,11 @@
<div class="d-grid grid-cols-2 gap-2 col-span-2">
<div class="wrapper-dropdown-year btn-dropdown" id="dropdown-year">
<span class="selected-display" id="destination-year">سال</span>
<svg class="arrow" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
<svg class="arrow" width="24" height="24" viewBox="0 0 24 24" fill="none"
xmlns="http://www.w3.org/2000/svg"
class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5"
stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-year boxes" id="my-scrollbar">
<li class="item" value-data-year="0">سال</li>
@@ -148,13 +158,16 @@
<li class="item" value-data-year="@year">@year</li>
}
</ul>
<input type="hidden" id="sendDropdownYear" asp-for="@Model.SearchModel.Year" />
<input type="hidden" id="sendDropdownYear" asp-for="@Model.SearchModel.Year"/>
</div>
<div class="wrapper-dropdown-month btn-dropdown" id="dropdown-month">
<span class="selected-display" id="destination-month">ماه</span>
<svg class="arrow" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
<svg class="arrow" width="24" height="24" viewBox="0 0 24 24" fill="none"
xmlns="http://www.w3.org/2000/svg"
class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5"
stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown-month boxes">
<li class="item" value-data-month="0">ماه</li>
@@ -171,45 +184,73 @@
<li class="item" value-data-month="11">بهمن</li>
<li class="item" value-data-month="12">اسفند</li>
</ul>
<input type="hidden" id="sendDropdownMonth" asp-for="@Model.SearchModel.Month" />
<input type="hidden" id="sendDropdownMonth" asp-for="@Model.SearchModel.Month"/>
</div>
</div>
<div class="col-span-1"><input type="text" class="form-control form-control-date date text-center start-date" asp-for="@Model.SearchModel.SearchStartFa" style="direction: ltr;" placeholder="تاریخ شروع" /></div>
<div class="col-span-1"><input type="text" class="form-control form-control-date date text-center end-date" asp-for="@Model.SearchModel.SearchEndFa" style="direction: ltr;" placeholder="تاریخ پایان" /></div>
<div class="col-span-1"><input type="text"
class="form-control form-control-date date text-center start-date"
asp-for="@Model.SearchModel.SearchStartFa"
style="direction: ltr;" placeholder="تاریخ شروع"/></div>
<div class="col-span-1"><input type="text"
class="form-control form-control-date date text-center end-date"
asp-for="@Model.SearchModel.SearchEndFa"
style="direction: ltr;" placeholder="تاریخ پایان"/></div>
<div class="col-span-2">
<select class="form-select select2Option" id="getPersonnel">
</select>
<input type="hidden" id="SearchModel_EmployeeId" asp-for="@Model.SearchModel.EmployeeId" />
<input type="hidden" id="SearchModel_EmployeeId"
asp-for="@Model.SearchModel.EmployeeId"/>
</div>
<div class="col-span-2">
<div class="wrapper-dropdown" id="dropdown">
<span class="selected-display" id="destination">مرتب سازی</span>
<svg class="arrow" id="drp-arrow" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
<svg class="arrow" id="drp-arrow" width="24" height="24" viewBox="0 0 24 24"
fill="none" xmlns="http://www.w3.org/2000/svg"
class="transition-all ml-auto rotate-180">
<path d="M7 14.5l5-5 5 5" stroke="currentColor" stroke-width="1.5"
stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
<ul class="dropdown p-2 border">
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractStartDesc">شروع قرارداد - بزرگ به کوچک</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractStart">شروع قرارداد - کوچک به بزرگ</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractNo">شماره قرارداد - کوچک به بزرگ</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractNoDesc">شماره قرارداد - بزرگ به کوچک</li>
<li class="item"
value-data="@CustomizeCheckoutOrderByEnum.ContractStartDesc">شروع
قرارداد - بزرگ به کوچک
</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractStart">
شروع قرارداد - کوچک به بزرگ
</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractNo">شماره
قرارداد - کوچک به بزرگ
</li>
<li class="item" value-data="@CustomizeCheckoutOrderByEnum.ContractNoDesc">
شماره قرارداد - بزرگ به کوچک
</li>
</ul>
<input type="hidden" id="sendSorting" asp-for="@Model.SearchModel.OrderBy" />
<input type="hidden" id="sendSorting" asp-for="@Model.SearchModel.OrderBy"/>
</div>
</div>
<div class="col-span-2">
<select class="form-select" id="bankSelectIndex" asp-for="@Model.SearchModel.BankId" data-selected-value="@Model.SearchModel.BankId" aria-label="انتخاب بانک ...">
<select class="form-select" id="bankSelectIndex" asp-for="@Model.SearchModel.BankId"
data-selected-value="@Model.SearchModel.BankId"
aria-label="انتخاب بانک ...">
</select>
</div>
<div class="d-flex gap-2 col-span-2">
<button class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center" id="searchBtn" type="submit">
<button
class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center"
id="searchBtn" type="submit">
<span>جستجو</span>
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="20" height="20" class="ms-1">
<path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke-width="1.5" stroke="currentColor" width="20" height="20"
class="ms-1">
<path stroke-linecap="round" stroke-linejoin="round"
d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z"/>
</svg>
</button>
<a asp-page="/Company/CustomizeCheckout/CheckoutTemporary" class="btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable" id="filterRemove">
<a asp-page="/Company/CustomizeCheckout/CheckoutTemporary"
class="btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable"
id="filterRemove">
<span>حذف جستجو</span>
</a>
</div>
@@ -222,7 +263,6 @@
</form>
<!-- Search Box -->
<!-- End Search Box -->
<!-- List Items -->
@@ -233,11 +273,14 @@
<div class="row px-lg-2 my-2">
<div class="col-6 col-md-4">
<button class="btn-create mb-1 d-flex align-items-center justify-content-center gap-1" onclick="openCreateCheckoutTemporaryModal()" Permission="@SubAccountPermissionHelper.CreateCustomizeCheckoutTempPermissionCode">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="11" cy="11" r="8.25" stroke-width="1.5" stroke="white" />
<path d="M11 13.75L11 8.25" stroke-width="1.5" stroke="white" stroke-linecap="round" />
<path d="M13.75 11L8.25 11" stroke-width="1.5" stroke="white" stroke-linecap="round" />
<button class="btn-create mb-1 d-flex align-items-center justify-content-center gap-1"
onclick="openCreateCheckoutTemporaryModal()"
Permission="@SubAccountPermissionHelper.CreateCustomizeCheckoutTempPermissionCode">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
xmlns="http://www.w3.org/2000/svg">
<circle cx="11" cy="11" r="8.25" stroke-width="1.5" stroke="white"/>
<path d="M11 13.75L11 8.25" stroke-width="1.5" stroke="white" stroke-linecap="round"/>
<path d="M13.75 11L8.25 11" stroke-width="1.5" stroke="white" stroke-linecap="round"/>
</svg>
ایجاد فیش حقوقی
</button>
@@ -249,18 +292,28 @@
</div>
<div class="col-6 col-md-4 text-end">
<div class="d-none d-md-flex align-items-center justify-content-end gap-1 my-1">
<button onclick="printAll()" class="btn-print-all text-nowrap" type="button" Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008" stroke="#1E293B" />
<path d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z" stroke="#1E293B" />
<path d="M7.91675 11.25L11.2501 11.25" stroke="#1E293B" stroke-linecap="round" />
<path d="M7.91675 13.75L12.0834 13.75" stroke="#1E293B" stroke-linecap="round" />
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" stroke="#1E293B" />
<button onclick="printAll()" class="btn-print-all text-nowrap" type="button"
Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"
fill="none">
<path
d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008"
stroke="#1E293B"/>
<path
d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z"
stroke="#1E293B"/>
<path d="M7.91675 11.25L11.2501 11.25" stroke="#1E293B" stroke-linecap="round"/>
<path d="M7.91675 13.75L12.0834 13.75" stroke="#1E293B" stroke-linecap="round"/>
<path
d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732"
stroke="#1E293B"/>
</svg>
<span>پرینت گروهی</span>
</button>
<button onclick="downloadExcelAll()" class="btn-excel text-nowrap" type="button" Permission="@SubAccountPermissionHelper.ExcelCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg" fill="#000000">
<button onclick="downloadExcelAll()" class="btn-excel text-nowrap" type="button"
Permission="@SubAccountPermissionHelper.ExcelCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg"
fill="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="1"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
@@ -269,18 +322,48 @@
.cls-1 {
fill: #0f773d;
}</style>
</defs> <title></title> <g id="xxx-word"> <path class="cls-1" d="M325,105H250a5,5,0,0,1-5-5V25a5,5,0,1,1,10,0V95h70a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M325,154.83a5,5,0,0,1-5-5V102.07L247.93,30H100A20,20,0,0,0,80,50v98.17a5,5,0,0,1-10,0V50a30,30,0,0,1,30-30H250a5,5,0,0,1,3.54,1.46l75,75A5,5,0,0,1,330,100v49.83A5,5,0,0,1,325,154.83Z"></path> <path class="cls-1" d="M300,380H100a30,30,0,0,1-30-30V275a5,5,0,0,1,10,0v75a20,20,0,0,0,20,20H300a20,20,0,0,0,20-20V275a5,5,0,0,1,10,0v75A30,30,0,0,1,300,380Z"></path> <path class="cls-1" d="M275,280H125a5,5,0,1,1,0-10H275a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M200,330H125a5,5,0,1,1,0-10h75a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M325,280H75a30,30,0,0,1-30-30V173.17a30,30,0,0,1,30-30h.2l250,1.66a30.09,30.09,0,0,1,29.81,30V250A30,30,0,0,1,325,280ZM75,153.17a20,20,0,0,0-20,20V250a20,20,0,0,0,20,20H325a20,20,0,0,0,20-20V174.83a20.06,20.06,0,0,0-19.88-20l-250-1.66Z"></path> <path class="cls-1" d="M152.44,236H117.79V182.68h34.3v7.93H127.4v14.45h19.84v7.73H127.4v14.92h25Z"></path> <path class="cls-1" d="M190.18,236H180l-8.36-14.37L162.52,236h-7.66L168,215.69l-11.37-19.14h10.2l6.48,11.6,7.38-11.6h7.46L177,213.66Z"></path> <path class="cls-1" d="M217.4,221.51l7.66.78q-1.49,7.42-5.74,11A15.5,15.5,0,0,1,209,236.82q-8.17,0-12.56-6a23.89,23.89,0,0,1-4.39-14.59q0-8.91,4.8-14.73a15.77,15.77,0,0,1,12.81-5.82q12.89,0,15.35,13.59l-7.66,1.05q-1-7.34-7.23-7.34a6.9,6.9,0,0,0-6.58,4,20.66,20.66,0,0,0-2.05,9.59q0,6,2.13,9.22a6.74,6.74,0,0,0,6,3.24Q215.49,229,217.4,221.51Z"></path> <path class="cls-1" d="M257,223.42l8,1.09a16.84,16.84,0,0,1-6.09,8.83,18.13,18.13,0,0,1-11.37,3.48q-8.2,0-13.2-5.51t-5-14.92q0-8.94,5-14.8t13.67-5.86q8.44,0,13,5.78t4.61,14.84l0,1H238.61a22.12,22.12,0,0,0,.76,6.45,8.68,8.68,0,0,0,3,4.22,8.83,8.83,0,0,0,5.66,1.8Q254.67,229.83,257,223.42Zm-.55-11.8a9.92,9.92,0,0,0-2.56-7,8.63,8.63,0,0,0-12.36-.18,11.36,11.36,0,0,0-2.89,7.13Z"></path> <path class="cls-1" d="M282.71,236h-8.91V182.68h8.91Z"></path> </g>
</defs>
<title></title>
<g id="xxx-word">
<path class="cls-1"
d="M325,105H250a5,5,0,0,1-5-5V25a5,5,0,1,1,10,0V95h70a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M325,154.83a5,5,0,0,1-5-5V102.07L247.93,30H100A20,20,0,0,0,80,50v98.17a5,5,0,0,1-10,0V50a30,30,0,0,1,30-30H250a5,5,0,0,1,3.54,1.46l75,75A5,5,0,0,1,330,100v49.83A5,5,0,0,1,325,154.83Z"></path>
<path class="cls-1"
d="M300,380H100a30,30,0,0,1-30-30V275a5,5,0,0,1,10,0v75a20,20,0,0,0,20,20H300a20,20,0,0,0,20-20V275a5,5,0,0,1,10,0v75A30,30,0,0,1,300,380Z"></path>
<path class="cls-1"
d="M275,280H125a5,5,0,1,1,0-10H275a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M200,330H125a5,5,0,1,1,0-10h75a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M325,280H75a30,30,0,0,1-30-30V173.17a30,30,0,0,1,30-30h.2l250,1.66a30.09,30.09,0,0,1,29.81,30V250A30,30,0,0,1,325,280ZM75,153.17a20,20,0,0,0-20,20V250a20,20,0,0,0,20,20H325a20,20,0,0,0,20-20V174.83a20.06,20.06,0,0,0-19.88-20l-250-1.66Z"></path>
<path class="cls-1"
d="M152.44,236H117.79V182.68h34.3v7.93H127.4v14.45h19.84v7.73H127.4v14.92h25Z"></path>
<path class="cls-1"
d="M190.18,236H180l-8.36-14.37L162.52,236h-7.66L168,215.69l-11.37-19.14h10.2l6.48,11.6,7.38-11.6h7.46L177,213.66Z"></path>
<path class="cls-1"
d="M217.4,221.51l7.66.78q-1.49,7.42-5.74,11A15.5,15.5,0,0,1,209,236.82q-8.17,0-12.56-6a23.89,23.89,0,0,1-4.39-14.59q0-8.91,4.8-14.73a15.77,15.77,0,0,1,12.81-5.82q12.89,0,15.35,13.59l-7.66,1.05q-1-7.34-7.23-7.34a6.9,6.9,0,0,0-6.58,4,20.66,20.66,0,0,0-2.05,9.59q0,6,2.13,9.22a6.74,6.74,0,0,0,6,3.24Q215.49,229,217.4,221.51Z"></path>
<path class="cls-1"
d="M257,223.42l8,1.09a16.84,16.84,0,0,1-6.09,8.83,18.13,18.13,0,0,1-11.37,3.48q-8.2,0-13.2-5.51t-5-14.92q0-8.94,5-14.8t13.67-5.86q8.44,0,13,5.78t4.61,14.84l0,1H238.61a22.12,22.12,0,0,0,.76,6.45,8.68,8.68,0,0,0,3,4.22,8.83,8.83,0,0,0,5.66,1.8Q254.67,229.83,257,223.42Zm-.55-11.8a9.92,9.92,0,0,0-2.56-7,8.63,8.63,0,0,0-12.36-.18,11.36,11.36,0,0,0-2.89,7.13Z"></path>
<path class="cls-1" d="M282.71,236h-8.91V182.68h8.91Z"></path>
</g>
</g>
</svg>
<span>خروجی اکسل</span>
</button>
<button class="btn-print-all text-nowrap RemoveBtnAll" type="button" Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.70825 13.2891L8.70825 10.5391" stroke="#BF3737" stroke-linecap="round" />
<path d="M13.2917 13.2891L13.2917 10.5391" stroke="#BF3737" stroke-linecap="round" />
<path d="M2.75 5.96094H19.25V5.96094C18.122 5.96094 17.558 5.96094 17.1279 6.18191C16.7561 6.37284 16.4536 6.67541 16.2626 7.04713C16.0417 7.47732 16.0417 8.0413 16.0417 9.16927V13.8776C16.0417 15.7632 16.0417 16.706 15.4559 17.2918C14.8701 17.8776 13.9273 17.8776 12.0417 17.8776H9.95833C8.07271 17.8776 7.12991 17.8776 6.54412 17.2918C5.95833 16.706 5.95833 15.7632 5.95833 13.8776V9.16927C5.95833 8.0413 5.95833 7.47732 5.73737 7.04713C5.54643 6.67541 5.24386 6.37284 4.87214 6.18191C4.44195 5.96094 3.87797 5.96094 2.75 5.96094V5.96094Z" stroke="#BF3737" stroke-linecap="round" />
<path d="M8.70841 3.20595C8.70841 3.20595 9.16675 2.28906 11.0001 2.28906C12.8334 2.28906 13.2917 3.20573 13.2917 3.20573" stroke="#BF3737" stroke-linecap="round" />
<button class="btn-print-all text-nowrap RemoveBtnAll" type="button"
Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 22 22" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path d="M8.70825 13.2891L8.70825 10.5391" stroke="#BF3737" stroke-linecap="round"/>
<path d="M13.2917 13.2891L13.2917 10.5391" stroke="#BF3737" stroke-linecap="round"/>
<path
d="M2.75 5.96094H19.25V5.96094C18.122 5.96094 17.558 5.96094 17.1279 6.18191C16.7561 6.37284 16.4536 6.67541 16.2626 7.04713C16.0417 7.47732 16.0417 8.0413 16.0417 9.16927V13.8776C16.0417 15.7632 16.0417 16.706 15.4559 17.2918C14.8701 17.8776 13.9273 17.8776 12.0417 17.8776H9.95833C8.07271 17.8776 7.12991 17.8776 6.54412 17.2918C5.95833 16.706 5.95833 15.7632 5.95833 13.8776V9.16927C5.95833 8.0413 5.95833 7.47732 5.73737 7.04713C5.54643 6.67541 5.24386 6.37284 4.87214 6.18191C4.44195 5.96094 3.87797 5.96094 2.75 5.96094V5.96094Z"
stroke="#BF3737" stroke-linecap="round"/>
<path
d="M8.70841 3.20595C8.70841 3.20595 9.16675 2.28906 11.0001 2.28906C12.8334 2.28906 13.2917 3.20573 13.2917 3.20573"
stroke="#BF3737" stroke-linecap="round"/>
</svg>
<span>حذف گروهی</span>
</button>
@@ -295,11 +378,13 @@
<div class="row d-flex align-items-center justify-content-between">
<div class="search-box bg-white">
<div class="col text-center">
<button class="btn-search w-100" type="button" data-bs-toggle="modal" data-bs-target="#searchModal">
<button class="btn-search w-100" type="button" data-bs-toggle="modal"
data-bs-target="#searchModal">
<span>جستجو پیشرفته</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="white" />
<path d="M20 20L17 17" stroke="white" stroke-linecap="round" />
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24"
viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="white"/>
<path d="M20 20L17 17" stroke="white" stroke-linecap="round"/>
</svg>
</button>
</div>
@@ -315,37 +400,82 @@
<label for="checkAll1">انتخاب همه</label>
</div>
<div class="d-flex align-items-center justify-content-end gap-1">
<button onclick="printAllMobile()" class="btn-print-all text-nowrap" type="button" Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
<path d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008" stroke="#1E293B" />
<path d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z" stroke="#1E293B" />
<path d="M7.91675 11.25L11.2501 11.25" stroke="#1E293B" stroke-linecap="round" />
<path d="M7.91675 13.75L12.0834 13.75" stroke="#1E293B" stroke-linecap="round" />
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" stroke="#1E293B" />
<button onclick="printAllMobile()" class="btn-print-all text-nowrap" type="button"
Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none">
<path
d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008"
stroke="#1E293B"/>
<path
d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z"
stroke="#1E293B"/>
<path d="M7.91675 11.25L11.2501 11.25" stroke="#1E293B"
stroke-linecap="round"/>
<path d="M7.91675 13.75L12.0834 13.75" stroke="#1E293B"
stroke-linecap="round"/>
<path
d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732"
stroke="#1E293B"/>
</svg>
<span>پرینت گروهی</span>
</button>
<button onclick="showExcelAllModal()" class="btn-excel text-nowrap" type="button" Permission="@SubAccountPermissionHelper.ExcelCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 400 400" xmlns="http://www.w3.org/2000/svg" fill="#000000">
<button onclick="showExcelAllModal()" class="btn-excel text-nowrap" type="button"
Permission="@SubAccountPermissionHelper.ExcelCustomizeCheckoutTempPermissionCode">
<svg width="20" height="20" viewBox="0 0 400 400"
xmlns="http://www.w3.org/2000/svg" fill="#000000">
<g id="SVGRepo_bgCarrier" stroke-width="1"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"></g>
<g id="SVGRepo_tracerCarrier" stroke-linecap="round"
stroke-linejoin="round"></g>
<g id="SVGRepo_iconCarrier">
<defs>
<style>
.cls-1 {
fill: #0f773d;
}</style>
</defs> <title></title> <g id="xxx-word"> <path class="cls-1" d="M325,105H250a5,5,0,0,1-5-5V25a5,5,0,1,1,10,0V95h70a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M325,154.83a5,5,0,0,1-5-5V102.07L247.93,30H100A20,20,0,0,0,80,50v98.17a5,5,0,0,1-10,0V50a30,30,0,0,1,30-30H250a5,5,0,0,1,3.54,1.46l75,75A5,5,0,0,1,330,100v49.83A5,5,0,0,1,325,154.83Z"></path> <path class="cls-1" d="M300,380H100a30,30,0,0,1-30-30V275a5,5,0,0,1,10,0v75a20,20,0,0,0,20,20H300a20,20,0,0,0,20-20V275a5,5,0,0,1,10,0v75A30,30,0,0,1,300,380Z"></path> <path class="cls-1" d="M275,280H125a5,5,0,1,1,0-10H275a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M200,330H125a5,5,0,1,1,0-10h75a5,5,0,0,1,0,10Z"></path> <path class="cls-1" d="M325,280H75a30,30,0,0,1-30-30V173.17a30,30,0,0,1,30-30h.2l250,1.66a30.09,30.09,0,0,1,29.81,30V250A30,30,0,0,1,325,280ZM75,153.17a20,20,0,0,0-20,20V250a20,20,0,0,0,20,20H325a20,20,0,0,0,20-20V174.83a20.06,20.06,0,0,0-19.88-20l-250-1.66Z"></path> <path class="cls-1" d="M152.44,236H117.79V182.68h34.3v7.93H127.4v14.45h19.84v7.73H127.4v14.92h25Z"></path> <path class="cls-1" d="M190.18,236H180l-8.36-14.37L162.52,236h-7.66L168,215.69l-11.37-19.14h10.2l6.48,11.6,7.38-11.6h7.46L177,213.66Z"></path> <path class="cls-1" d="M217.4,221.51l7.66.78q-1.49,7.42-5.74,11A15.5,15.5,0,0,1,209,236.82q-8.17,0-12.56-6a23.89,23.89,0,0,1-4.39-14.59q0-8.91,4.8-14.73a15.77,15.77,0,0,1,12.81-5.82q12.89,0,15.35,13.59l-7.66,1.05q-1-7.34-7.23-7.34a6.9,6.9,0,0,0-6.58,4,20.66,20.66,0,0,0-2.05,9.59q0,6,2.13,9.22a6.74,6.74,0,0,0,6,3.24Q215.49,229,217.4,221.51Z"></path> <path class="cls-1" d="M257,223.42l8,1.09a16.84,16.84,0,0,1-6.09,8.83,18.13,18.13,0,0,1-11.37,3.48q-8.2,0-13.2-5.51t-5-14.92q0-8.94,5-14.8t13.67-5.86q8.44,0,13,5.78t4.61,14.84l0,1H238.61a22.12,22.12,0,0,0,.76,6.45,8.68,8.68,0,0,0,3,4.22,8.83,8.83,0,0,0,5.66,1.8Q254.67,229.83,257,223.42Zm-.55-11.8a9.92,9.92,0,0,0-2.56-7,8.63,8.63,0,0,0-12.36-.18,11.36,11.36,0,0,0-2.89,7.13Z"></path> <path class="cls-1" d="M282.71,236h-8.91V182.68h8.91Z"></path> </g>
</defs>
<title></title>
<g id="xxx-word">
<path class="cls-1"
d="M325,105H250a5,5,0,0,1-5-5V25a5,5,0,1,1,10,0V95h70a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M325,154.83a5,5,0,0,1-5-5V102.07L247.93,30H100A20,20,0,0,0,80,50v98.17a5,5,0,0,1-10,0V50a30,30,0,0,1,30-30H250a5,5,0,0,1,3.54,1.46l75,75A5,5,0,0,1,330,100v49.83A5,5,0,0,1,325,154.83Z"></path>
<path class="cls-1"
d="M300,380H100a30,30,0,0,1-30-30V275a5,5,0,0,1,10,0v75a20,20,0,0,0,20,20H300a20,20,0,0,0,20-20V275a5,5,0,0,1,10,0v75A30,30,0,0,1,300,380Z"></path>
<path class="cls-1"
d="M275,280H125a5,5,0,1,1,0-10H275a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M200,330H125a5,5,0,1,1,0-10h75a5,5,0,0,1,0,10Z"></path>
<path class="cls-1"
d="M325,280H75a30,30,0,0,1-30-30V173.17a30,30,0,0,1,30-30h.2l250,1.66a30.09,30.09,0,0,1,29.81,30V250A30,30,0,0,1,325,280ZM75,153.17a20,20,0,0,0-20,20V250a20,20,0,0,0,20,20H325a20,20,0,0,0,20-20V174.83a20.06,20.06,0,0,0-19.88-20l-250-1.66Z"></path>
<path class="cls-1"
d="M152.44,236H117.79V182.68h34.3v7.93H127.4v14.45h19.84v7.73H127.4v14.92h25Z"></path>
<path class="cls-1"
d="M190.18,236H180l-8.36-14.37L162.52,236h-7.66L168,215.69l-11.37-19.14h10.2l6.48,11.6,7.38-11.6h7.46L177,213.66Z"></path>
<path class="cls-1"
d="M217.4,221.51l7.66.78q-1.49,7.42-5.74,11A15.5,15.5,0,0,1,209,236.82q-8.17,0-12.56-6a23.89,23.89,0,0,1-4.39-14.59q0-8.91,4.8-14.73a15.77,15.77,0,0,1,12.81-5.82q12.89,0,15.35,13.59l-7.66,1.05q-1-7.34-7.23-7.34a6.9,6.9,0,0,0-6.58,4,20.66,20.66,0,0,0-2.05,9.59q0,6,2.13,9.22a6.74,6.74,0,0,0,6,3.24Q215.49,229,217.4,221.51Z"></path>
<path class="cls-1"
d="M257,223.42l8,1.09a16.84,16.84,0,0,1-6.09,8.83,18.13,18.13,0,0,1-11.37,3.48q-8.2,0-13.2-5.51t-5-14.92q0-8.94,5-14.8t13.67-5.86q8.44,0,13,5.78t4.61,14.84l0,1H238.61a22.12,22.12,0,0,0,.76,6.45,8.68,8.68,0,0,0,3,4.22,8.83,8.83,0,0,0,5.66,1.8Q254.67,229.83,257,223.42Zm-.55-11.8a9.92,9.92,0,0,0-2.56-7,8.63,8.63,0,0,0-12.36-.18,11.36,11.36,0,0,0-2.89,7.13Z"></path>
<path class="cls-1" d="M282.71,236h-8.91V182.68h8.91Z"></path>
</g>
</g>
</svg>
<span>خروجی اکسل</span>
</button>
<button class="btn-print-all RemoveBtnAll" type="button" Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.70825 13.2891L8.70825 10.5391" stroke="#BF3737" stroke-linecap="round" />
<path d="M13.2917 13.2891L13.2917 10.5391" stroke="#BF3737" stroke-linecap="round" />
<path d="M2.75 5.96094H19.25V5.96094C18.122 5.96094 17.558 5.96094 17.1279 6.18191C16.7561 6.37284 16.4536 6.67541 16.2626 7.04713C16.0417 7.47732 16.0417 8.0413 16.0417 9.16927V13.8776C16.0417 15.7632 16.0417 16.706 15.4559 17.2918C14.8701 17.8776 13.9273 17.8776 12.0417 17.8776H9.95833C8.07271 17.8776 7.12991 17.8776 6.54412 17.2918C5.95833 16.706 5.95833 15.7632 5.95833 13.8776V9.16927C5.95833 8.0413 5.95833 7.47732 5.73737 7.04713C5.54643 6.67541 5.24386 6.37284 4.87214 6.18191C4.44195 5.96094 3.87797 5.96094 2.75 5.96094V5.96094Z" stroke="#BF3737" stroke-linecap="round" />
<path d="M8.70841 3.20595C8.70841 3.20595 9.16675 2.28906 11.0001 2.28906C12.8334 2.28906 13.2917 3.20573 13.2917 3.20573" stroke="#BF3737" stroke-linecap="round" />
<button class="btn-print-all RemoveBtnAll" type="button"
Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg width="22" height="22" viewBox="0 0 22 22" fill="none"
xmlns="http://www.w3.org/2000/svg">
<path d="M8.70825 13.2891L8.70825 10.5391" stroke="#BF3737"
stroke-linecap="round"/>
<path d="M13.2917 13.2891L13.2917 10.5391" stroke="#BF3737"
stroke-linecap="round"/>
<path
d="M2.75 5.96094H19.25V5.96094C18.122 5.96094 17.558 5.96094 17.1279 6.18191C16.7561 6.37284 16.4536 6.67541 16.2626 7.04713C16.0417 7.47732 16.0417 8.0413 16.0417 9.16927V13.8776C16.0417 15.7632 16.0417 16.706 15.4559 17.2918C14.8701 17.8776 13.9273 17.8776 12.0417 17.8776H9.95833C8.07271 17.8776 7.12991 17.8776 6.54412 17.2918C5.95833 16.706 5.95833 15.7632 5.95833 13.8776V9.16927C5.95833 8.0413 5.95833 7.47732 5.73737 7.04713C5.54643 6.67541 5.24386 6.37284 4.87214 6.18191C4.44195 5.96094 3.87797 5.96094 2.75 5.96094V5.96094Z"
stroke="#BF3737" stroke-linecap="round"/>
<path
d="M8.70841 3.20595C8.70841 3.20595 9.16675 2.28906 11.0001 2.28906C12.8334 2.28906 13.2917 3.20573 13.2917 3.20573"
stroke="#BF3737" stroke-linecap="round"/>
</svg>
<span>حذف گروهی</span>
</button>
@@ -355,8 +485,10 @@
<div class="checkout-list Rtable Rtable--5cols Rtable--collapse tb">
<div class="Rtable-row Rtable-row--head align-items-center sticky-div">
<div class="Rtable-cell column-heading width1">
<span class="d-flex justify-content-center text-white align-items-center justify-content-between">
<input type="checkbox" class="form-check-input checkAll" name="" id="checkAll2">
<span
class="d-flex justify-content-center text-white align-items-center justify-content-between">
<input type="checkbox" class="form-check-input checkAll" name=""
id="checkAll2">
<label for="checkAll2" class="prevent-select">ردیف</label>
</span>
</div>
@@ -384,8 +516,10 @@
ردیف
</div>
<label for="@i" class="Rtable-cell--content prevent-select">
<span class="d-flex justify-content-center align-items-center justify-content-between">
<input id="@i" type="checkbox" class="form-check-input foo" name="foo" value="@item.Id">
<span
class="d-flex justify-content-center align-items-center justify-content-between">
<input id="@i" type="checkbox" class="form-check-input foo"
name="foo" value="@item.Id">
<div class="row-number">
@(i = i + 1)
</div>
@@ -410,7 +544,25 @@
</div> *@
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--heading">نام پرسنل</div>
<div class="Rtable-cell--content ">@item.EmployeeFullName</div>
<div class="Rtable-cell--content">
@item.EmployeeFullName
@if (item.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--heading">آغاز قرارداد</div>
@@ -426,49 +578,75 @@
</div>
<div class="Rtable-cell d-md-flex d-none width9">
<div class="Rtable-cell--heading">تاخیر در ورود</div>
<div class="Rtable-cell--content @(item.TotalLateToWorkDeduction == "0" ? "" : "textRed")">@item.TotalLateToWorkDeduction</div>
<div
class="Rtable-cell--content @(item.TotalLateToWorkDeduction == "0" ? "" : "textRed")">@item.TotalLateToWorkDeduction</div>
</div>
<div class="Rtable-cell d-md-flex d-none width9">
<div class="Rtable-cell--heading">غیبت</div>
<div class="Rtable-cell--content @(item.AbsenceDeduction == "0" ? "" : "textRed")">@item.AbsenceDeduction</div>
<div
class="Rtable-cell--content @(item.AbsenceDeduction == "0" ? "" : "textRed")">@item.AbsenceDeduction</div>
</div>
<div class="Rtable-cell d-md-flex d-none width9">
<div class="Rtable-cell--heading">مساعده</div>
<div class="Rtable-cell--content @(item.SalaryAidDeduction == "0" ? "" : "textRed")">@item.SalaryAidDeduction</div>
<div
class="Rtable-cell--content @(item.SalaryAidDeduction == "0" ? "" : "textRed")">@item.SalaryAidDeduction</div>
</div>
<div class="Rtable-cell d-md-flex d-none width9">
<div class="@(item.TotalPaymentD < 0 ? "bgColorMonthlySalaryMinus" : "bgColorMonthlySalaryPlus")">
<div
class="@(item.TotalPaymentD < 0 ? "bgColorMonthlySalaryMinus" : "bgColorMonthlySalaryPlus")">
<div class="Rtable-cell--heading">مبلغ قابل پرداخت</div>
<div class="Rtable-cell--content ">@(item.TotalPayment + " ریال")</div>
</div>
</div>
<div class="Rtable-cell d-md-flex d-none width10">
<div class="Rtable-cell--content align-items-center d-flex d-md-block text-end">
<button class="btn-print moreThan992" type="button" onclick="printOne(@item.Id, '@item.Year', '@item.Month')" Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008" />
<path d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z" />
<path d="M7.91675 11.25L11.2501 11.25" stroke-linecap="round" />
<path d="M7.91675 13.75L12.0834 13.75" stroke-linecap="round" />
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
<div
class="Rtable-cell--content align-items-center d-flex d-md-block text-end">
<button class="btn-print moreThan992" type="button"
onclick="printOne(@item.Id, '@item.Year', '@item.Month')"
Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path
d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008"/>
<path
d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z"/>
<path d="M7.91675 11.25L11.2501 11.25" stroke-linecap="round"/>
<path d="M7.91675 13.75L12.0834 13.75" stroke-linecap="round"/>
<path
d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732"/>
</svg>
</button>
<button class="btn-print lessThan992" type="button" onclick="printOne(@item.Id, '@item.Year', '@item.Month')" Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008" />
<path d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z" />
<path d="M7.91675 11.25L11.2501 11.25" stroke-linecap="round" />
<path d="M7.91675 13.75L12.0834 13.75" stroke-linecap="round" />
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
<button class="btn-print lessThan992" type="button"
onclick="printOne(@item.Id, '@item.Year', '@item.Month')"
Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path
d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008"/>
<path
d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z"/>
<path d="M7.91675 11.25L11.2501 11.25" stroke-linecap="round"/>
<path d="M7.91675 13.75L12.0834 13.75" stroke-linecap="round"/>
<path
d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732"/>
</svg>
</button>
<button type="button" class="btn-delete RemoveBtn" data-delete-id="@(item.Id)" Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-linecap="round" />
<button type="button" class="btn-delete RemoveBtn"
data-delete-id="@(item.Id)"
Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20"
viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415"
stroke-linecap="round"/>
<path d="M13.2917 13.2915L13.2917 10.5415"
stroke-linecap="round"/>
<path
d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z"
stroke-linecap="round"/>
<path
d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817"
stroke-linecap="round"/>
</svg>
<span class="mx-1">حذف</span>
</button>
@@ -479,23 +657,44 @@
<!--Mobile Table-->
<div class="Rtable-contract w-100 d-flex d-md-none align-items-center justify-content-between printAllTd">
<div
class="Rtable-contract w-100 d-flex d-md-none align-items-center justify-content-between printAllTd">
<div class="d-flex justify-content-center align-items-center justify-content-between">
<div class="checkbox-responsive d-flex justify-content-center align-items-center justify-content-around">
<input type="checkbox" class="form-check-input fooMobile" name="foo" value="@item.Id">
<div
class="d-flex justify-content-center align-items-center justify-content-between">
<div
class="checkbox-responsive d-flex justify-content-center align-items-center justify-content-around">
<input type="checkbox" class="form-check-input fooMobile" name="foo"
value="@item.Id">
<span class="row-number">@(i)</span>
</div>
<div class="Rtable-cell--content">
<span class="mx-sm-2">
@item.EmployeeFullName
@if (item.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="12" height="12" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</span>
</div>
</div>
<div class="Rtable-cell--content d-flex justify-content-end align-items-center">
<div
class="Rtable-cell--content d-flex justify-content-end align-items-center">
<div class="Rtable-cell--heading d-block text-center text-nowrap">
<span class="d-block">آغاز قرارداد</span>
@@ -506,21 +705,38 @@
@item.ContractEndFa
</div>
<div class="Rtable-cell--heading d-flex text-center">
<button class="btn-print" type="button" onclick="printOne(@item.Id, '@item.Year', '@item.Month')" Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008" />
<path d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z" />
<path d="M7.91675 11.25L11.2501 11.25" stroke-linecap="round" />
<path d="M7.91675 13.75L12.0834 13.75" stroke-linecap="round" />
<path d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732" />
<button class="btn-print" type="button"
onclick="printOne(@item.Id, '@item.Year', '@item.Month')"
Permission="@SubAccountPermissionHelper.PrintCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25"
viewBox="0 0 20 20" fill="none" stroke="currentColor">
<path
d="M15.0001 11.2493H15.139C16.0279 11.2493 16.4723 11.2493 16.759 10.9866C16.7805 10.967 16.801 10.9464 16.8207 10.9249C17.0834 10.6382 17.0834 10.1938 17.0834 9.3049V9.3049C17.0834 7.52714 17.0834 6.63826 16.558 6.06484C16.5187 6.02194 16.4775 5.98077 16.4346 5.94146C15.8612 5.41602 14.9723 5.41602 13.1945 5.41602H6.91675C5.03113 5.41602 4.08832 5.41602 3.50253 6.0018C2.91675 6.58759 2.91675 7.5304 2.91675 9.41602V10.2493C2.91675 10.7208 2.91675 10.9565 3.06319 11.1029C3.20964 11.2493 3.44534 11.2493 3.91675 11.2493H5.00008"/>
<path
d="M5.41675 16.3903L5.41675 9.91732C5.41675 8.97451 5.41675 8.5031 5.70964 8.21021C6.00253 7.91732 6.47394 7.91732 7.41675 7.91732L12.5834 7.91732C13.5262 7.91732 13.9976 7.91732 14.2905 8.21021C14.5834 8.5031 14.5834 8.97451 14.5834 9.91732L14.5834 16.3903C14.5834 16.7068 14.5834 16.8651 14.4796 16.9399C14.3758 17.0148 14.2256 16.9647 13.9253 16.8646L12.2572 16.3086C12.1712 16.2799 12.1282 16.2656 12.0839 16.2669C12.0396 16.2682 11.9975 16.285 11.9134 16.3187L10.1858 17.0097C10.0941 17.0464 10.0482 17.0647 10.0001 17.0647C9.95194 17.0647 9.90609 17.0464 9.81439 17.0097L8.0868 16.3187C8.00267 16.285 7.9606 16.2682 7.91627 16.2669C7.87194 16.2656 7.82896 16.2799 7.74299 16.3086L6.07486 16.8646C5.77455 16.9647 5.62439 17.0148 5.52057 16.9399C5.41675 16.8651 5.41675 16.7068 5.41675 16.3903Z"/>
<path d="M7.91675 11.25L11.2501 11.25"
stroke-linecap="round"/>
<path d="M7.91675 13.75L12.0834 13.75"
stroke-linecap="round"/>
<path
d="M14.5834 5.41732V5.41732C14.5834 3.97799 14.5834 3.25833 14.1954 2.76756C14.1087 2.65791 14.0095 2.55874 13.8998 2.47204C13.4091 2.08398 12.6894 2.08398 11.2501 2.08398H8.75008C7.31076 2.08398 6.5911 2.08398 6.10032 2.47204C5.99068 2.55874 5.8915 2.65791 5.8048 2.76756C5.41675 3.25833 5.41675 3.97799 5.41675 5.41732V5.41732"/>
</svg>
</button>
<button type="button" class="btn-delete RemoveBtn" data-delete-id="@(item.Id)" Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415" stroke-linecap="round" />
<path d="M13.2917 13.2915L13.2917 10.5415" stroke-linecap="round" />
<path d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z" stroke-linecap="round" />
<path d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817" stroke-linecap="round" />
<button type="button" class="btn-delete RemoveBtn"
data-delete-id="@(item.Id)"
Permission="@SubAccountPermissionHelper.DeleteCustomizeCheckoutTempPermissionCode">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25"
viewBox="0 0 22 22" fill="none" stroke="currentColor">
<path d="M8.70825 13.2915L8.70825 10.5415"
stroke-linecap="round"/>
<path d="M13.2917 13.2915L13.2917 10.5415"
stroke-linecap="round"/>
<path
d="M2.75 5.9585H19.25V5.9585C18.122 5.9585 17.558 5.9585 17.1279 6.17946C16.7561 6.3704 16.4536 6.67297 16.2626 7.04469C16.0417 7.47488 16.0417 8.03886 16.0417 9.16683V13.8752C16.0417 15.7608 16.0417 16.7036 15.4559 17.2894C14.8701 17.8752 13.9273 17.8752 12.0417 17.8752H9.95833C8.07271 17.8752 7.12991 17.8752 6.54412 17.2894C5.95833 16.7036 5.95833 15.7608 5.95833 13.8752V9.16683C5.95833 8.03886 5.95833 7.47488 5.73737 7.04469C5.54643 6.67297 5.24386 6.3704 4.87214 6.17946C4.44195 5.9585 3.87797 5.9585 2.75 5.9585V5.9585Z"
stroke-linecap="round"/>
<path
d="M8.70841 3.20839C8.70841 3.20839 9.16675 2.2915 11.0001 2.2915C12.8334 2.2915 13.2917 3.20817 13.2917 3.20817"
stroke-linecap="round"/>
</svg>
<span class="mx-1">حذف</span>
</button>
@@ -530,7 +746,6 @@
<!-- Mobile Table -->
</div>
}
</div>
@@ -539,9 +754,10 @@
{
<div class="container-fluid">
<div class="row p-lg-2 p-auto">
<div class="empty text-center bg-white d-flex align-items-center justify-content-center">
<div
class="empty text-center bg-white d-flex align-items-center justify-content-center">
<div class="">
<img src="~/assetsclient/images/empty.png" alt="" class="img-fluid" />
<img src="~/assetsclient/images/empty.png" alt="" class="img-fluid"/>
<h5>اطلاعاتی وجود ندارد.</h5>
</div>
</div>
@@ -561,7 +777,8 @@
<!--Start Print Modal Main -->
<div id="MainModal" class="modal fade checkoutTempModal" role="dialog" aria-labelledby="MainModalLabel" aria-hidden="true" style="display: none;">
<div id="MainModal" class="modal fade checkoutTempModal" role="dialog" aria-labelledby="MainModalLabel"
aria-hidden="true" style="display: none;">
<div class="modal-dialog checkoutTempModal-width modal-dialog-centered">
<div class="modal-content" id="ModalContent">
</div>
@@ -572,7 +789,8 @@
<form role="form" method="get" name="search-theme-form1" id="search-theme-form1" autocomplete="off">
<!-- Modal From Bottom For Advance Search -->
<div class="modal fade" id="searchModal" tabindex="-1" data-bs-backdrop="static" aria-labelledby="searchModalModalLabel" aria-hidden="true">
<div class="modal fade" id="searchModal" tabindex="-1" data-bs-backdrop="static"
aria-labelledby="searchModalModalLabel" aria-hidden="true">
<div class="modal-dialog modal-fullscreen">
<div class="modal-content">
<form role="form" method="get" name="search-theme-form2" id="search-theme-form2" autocomplete="off">
@@ -589,30 +807,45 @@
<div class="row">
<div class="col-12 text-start mb-4">
<div class="mb-2">
<select class="form-select select2OptionMobile" id="getPersonnelMobile" asp-for="SearchModel.EmployeeId">
<select class="form-select select2OptionMobile" id="getPersonnelMobile"
asp-for="SearchModel.EmployeeId">
</select>
</div>
<div>
<span class="form-control text-center persianDateInputStartDate" id="start-date">تاریخ شروع</span>
<input type="hidden" class="form-control date start-date" asp-for="@Model.SearchModel.SearchStartFa" placeholder="تاریخ شروع" style="direction: ltr">
<span class="form-control text-center persianDateInputStartDate"
id="start-date">تاریخ شروع</span>
<input type="hidden" class="form-control date start-date"
asp-for="@Model.SearchModel.SearchStartFa" placeholder="تاریخ شروع"
style="direction: ltr">
</div>
<div>
<span class="form-control text-center persianDateInputEndDate" id="end-date">تاریخ پایان</span>
<input type="hidden" class="form-control date end-date" asp-for="@Model.SearchModel.SearchEndFa" placeholder="تاریخ پایان" style="direction: ltr">
<input type="hidden" class="form-control date end-date"
asp-for="@Model.SearchModel.SearchEndFa" placeholder="تاریخ پایان"
style="direction: ltr">
</div>
<div>
<label class="text-nowrap">مرتب سازی</label>
<select class="form-select" id="sorting" asp-for="@Model.SearchModel.OrderBy">
<option value="@CustomizeCheckoutOrderByEnum.ContractStartDesc">شروع قرارداد - بزرگ به کوچک</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractStart">شروع قرارداد - کوچک به بزرگ</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractNo">شماره قرارداد - کوچک به بزرگ</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractNoDesc">شماره قرارداد - بزرگ به کوچک</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractStartDesc">شروع قرارداد
- بزرگ به کوچک
</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractStart">شروع قرارداد -
کوچک به بزرگ
</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractNo">شماره قرارداد -
کوچک به بزرگ
</option>
<option value="@CustomizeCheckoutOrderByEnum.ContractNoDesc">شماره قرارداد -
بزرگ به کوچک
</option>
</select>
</div>
<div class="mt-2">
<select class="form-select" id="bankSelectIndexMobile" asp-for="@Model.SearchModel.BankId" aria-label="انتخاب بانک ...">
<select class="form-select" id="bankSelectIndexMobile"
asp-for="@Model.SearchModel.BankId" aria-label="انتخاب بانک ...">
</select>
</div>
</div>
@@ -623,7 +856,8 @@
<div class="col-6">
<div class="form-group">
<span class="form-control text-center persianDateInputYear" id="yearText">
<span class="form-control text-center persianDateInputYear"
id="yearText">
@{
if (Model.SearchModel.Year == 0)
{
@@ -635,13 +869,15 @@
}
}
</span>
<input type="hidden" class="form-control" asp-for="@Model.SearchModel.Year" id="yearModal" maxlength="4" />
<input type="hidden" class="form-control"
asp-for="@Model.SearchModel.Year" id="yearModal" maxlength="4"/>
@* <span asp-validation-for="DateOfYear" class="error"></span> *@
</div>
</div>
<div class="col-6">
<div class="form-group">
<span class="form-control text-center persianDateInputMonth" id="monthText">
<span class="form-control text-center persianDateInputMonth"
id="monthText">
@{
if (Model.SearchModel.Month == 0)
{
@@ -694,12 +930,15 @@
}
}
</span>
<input type="hidden" class="form-control" asp-for="@Model.SearchModel.Month" id="monthModal" />
<input type="hidden" class="form-control"
asp-for="@Model.SearchModel.Month" id="monthModal"/>
@* <span asp-validation-for="DateOfMonth" class="error"></span> *@
</div>
</div>
<div class="col-12">
<a href="/Client/Company/CustomizeCheckout/CheckoutTemporary" class="btn-clear-filter py-2 text-center d-block w-100 mt-2 disable" id="filterRemove">
<a href="/Client/Company/CustomizeCheckout/CheckoutTemporary"
class="btn-clear-filter py-2 text-center d-block w-100 mt-2 disable"
id="filterRemove">
<span class="w-100">حذف جستجو</span>
</a>
</div>
@@ -717,7 +956,8 @@
<button type="button" class="btn-cancel w-100" data-bs-dismiss="modal">بستن</button>
</div>
<div class="col-6 text-start">
<button type="submit" class="btn-search btn-search-click-mobile w-100">جستجو</button>
<button type="submit" class="btn-search btn-search-click-mobile w-100">جستجو
</button>
</div>
</div>
</div>
@@ -761,7 +1001,11 @@
var deleteOneAjax = `@Url.Page("/Company/CustomizeCheckout/CheckoutTemporary", "DeleteOne")`;
var deleteAllAjax = `@Url.Page("/Company/CustomizeCheckout/CheckoutTemporary", "DeleteAll")`;
$(document).ready(function () {
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
});
</script>
<script src="~/assetsclient/pages/CustomizeCheckout/js/CheckoutTemporary.js?ver=@clientVersion"></script>
}
}

View File

@@ -410,7 +410,22 @@
</div> *@
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--heading">نام پرسنل</div>
<div class="Rtable-cell--content ">@item.EmployeeFullName</div>
<div class="Rtable-cell--content ">@item.EmployeeFullName
@if (item.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="24" height="24" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--heading">آغاز قرارداد</div>
@@ -490,6 +505,20 @@
<div class="Rtable-cell--content">
<span class="mx-sm-2">
@item.EmployeeFullName
@if (item.HasAmountConflict)
{
<svg xmlns="http://www.w3.org/2000/svg"
width="12" height="12" fill="red"
class="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>
}
</span>
</div>
</div>
@@ -763,6 +792,9 @@
var deleteOneAjax = `@Url.Page("/Company/CustomizeCheckout/CheckoutUnofficial", "DeleteOne")`;
var deleteAllAjax = `@Url.Page("/Company/CustomizeCheckout/CheckoutUnofficial", "DeleteAll")`;
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
</script>
<script src="~/assetsclient/pages/CustomizeCheckout/js/CheckoutUnofficial.js?ver=@clientVersion"></script>
}

View File

@@ -27,18 +27,15 @@ using Microsoft.AspNetCore.CookiePolicy;
using Microsoft.AspNetCore.Mvc.Infrastructure;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Diagnostics;
using Swashbuckle.AspNetCore.SwaggerUI;
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.Limits.MaxRequestBodySize = long.MaxValue;
});
builder.WebHost.ConfigureKestrel(serverOptions => { serverOptions.Limits.MaxRequestBodySize = long.MaxValue; });
builder.Services.AddRazorPages()
.AddRazorRuntimeCompilation();
.AddRazorRuntimeCompilation();
//Register Services
//test
#region Register Services
@@ -58,6 +55,7 @@ var connectionStringTestDb = builder.Configuration.GetConnectionString("TestDb")
//builder.Services.AddSingleton<IMongoDatabase>(mongoDatabase);
#endregion
builder.Services.AddSingleton<IActionResultExecutor<JsonResult>, CustomJsonResultExecutor>();
PersonalBootstrapper.Configure(builder.Services, connectionString);
TestDbBootStrapper.Configure(builder.Services, connectionStringTestDb);
@@ -142,15 +140,14 @@ builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CameraArea",
builder => builder.RequireClaim("AccountId"));
});
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminNewArea",
builder => builder.RequireClaim("AccountId"));
options.AddPolicy("AdminNewArea",
builder => builder.RequireClaim("AdminAreaPermission", new List<string> { "true" }));
options.AddPolicy("AdminNewArea",
builder => builder.RequireClaim("AccountId"));
options.AddPolicy("AdminNewArea",
builder => builder.RequireClaim("AdminAreaPermission", new List<string> { "true" }));
});
//services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
@@ -176,15 +173,15 @@ builder.Services.AddControllers().AddJsonOptions(options =>
builder.Services.AddRazorPages(options =>
options.Conventions.AuthorizeAreaFolder("Admin", "/", "AdminArea"));
builder.Services.AddRazorPages(options =>
options.Conventions.AuthorizeAreaFolder("Client", "/", "ClientArea")).AddMvcOptions(options => options.Filters.Add<SecurityPageFilter>());
options.Conventions.AuthorizeAreaFolder("Client", "/", "ClientArea"))
.AddMvcOptions(options => options.Filters.Add<SecurityPageFilter>());
builder.Services.AddRazorPages(options =>
options.Conventions.AuthorizeAreaFolder("Camera", "/", "CameraArea"));
builder.Services.AddRazorPages(options =>
options.Conventions.AuthorizeAreaFolder("AdminNew", "/", "AdminNewArea"));
options.Conventions.AuthorizeAreaFolder("AdminNew", "/", "AdminNewArea"));
builder.Services.AddMvc();
builder.Services.AddSignalR();
#endregion
#region PWA
@@ -203,56 +200,59 @@ builder.Services.AddSignalR();
#endregion
#region Swagger
builder.Services.AddSwaggerGen(options =>
{
options.UseInlineDefinitionsForEnums();
options.UseInlineDefinitionsForEnums();
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
options.IncludeXmlComments(xmlPath);
// Get XML comments from the class library
var classLibraryXmlFile = "CompanyManagment.App.Contracts.xml";
var classLibraryXmlPath = Path.Combine(AppContext.BaseDirectory, classLibraryXmlFile);
options.IncludeXmlComments(classLibraryXmlPath);
// Get XML comments from the class library
var classLibraryXmlFile = "CompanyManagment.App.Contracts.xml";
var classLibraryXmlPath = Path.Combine(AppContext.BaseDirectory, classLibraryXmlFile);
options.IncludeXmlComments(classLibraryXmlPath);
options.SwaggerDoc("General", new OpenApiInfo { Title = "API - General", Version = "v1" });
options.SwaggerDoc("Admin", new OpenApiInfo { Title = "API - Admin", Version = "v1" });
options.SwaggerDoc("Client", new OpenApiInfo { Title = "API - Client", Version = "v1" });
options.SwaggerDoc("Camera", new OpenApiInfo { Title = "API - Camera", Version = "v1" });
options.SwaggerDoc("General", new OpenApiInfo { Title = "API - General", Version = "v1" });
options.SwaggerDoc("Admin", new OpenApiInfo { Title = "API - Admin", Version = "v1" });
options.SwaggerDoc("Client", new OpenApiInfo { Title = "API - Client", Version = "v1" });
options.SwaggerDoc("Camera", new OpenApiInfo { Title = "API - Camera", Version = "v1" });
options.DocInclusionPredicate((docName, apiDesc) => string.Equals(docName, apiDesc.GroupName, StringComparison.OrdinalIgnoreCase));
options.DocInclusionPredicate((docName, apiDesc) =>
string.Equals(docName, apiDesc.GroupName, StringComparison.OrdinalIgnoreCase));
// اضافه کردن پشتیبانی از JWT در Swagger
options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Name = "Authorization",
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
Scheme = "Bearer",
BearerFormat = "JWT",
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
Description = "لطفاً 'Bearer [space] token' را وارد کنید."
});
// اضافه کردن پشتیبانی از JWT در Swagger
options.AddSecurityDefinition("Bearer", new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Name = "Authorization",
Type = Microsoft.OpenApi.Models.SecuritySchemeType.ApiKey,
Scheme = "Bearer",
BearerFormat = "JWT",
In = Microsoft.OpenApi.Models.ParameterLocation.Header,
Description = "لطفاً 'Bearer [space] token' را وارد کنید."
});
options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
{
{
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Reference = new Microsoft.OpenApi.Models.OpenApiReference
{
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
Array.Empty<string>()
}
});
options.AddSecurityRequirement(new Microsoft.OpenApi.Models.OpenApiSecurityRequirement
{
{
new Microsoft.OpenApi.Models.OpenApiSecurityScheme
{
Reference = new Microsoft.OpenApi.Models.OpenApiReference
{
Type = Microsoft.OpenApi.Models.ReferenceType.SecurityScheme,
Id = "Bearer"
}
},
Array.Empty<string>()
}
});
options.EnableAnnotations();
options.EnableAnnotations();
});
#endregion
#region CORS
@@ -271,7 +271,10 @@ builder.Services.AddCors(options =>
"https://admin.dad-mehr.ir",
"https://client.dad-mehr.ir",
"https://admin.gozareshgir.ir",
"https://client.gozareshgir.ir"
"https://client.gozareshgir.ir",
"https://admin.dadmehrg.ir",
"https://client.dadmehrg.ir"
)
.AllowAnyHeader()
.AllowAnyMethod()
@@ -295,6 +298,7 @@ builder.Services.AddCors(options =>
// .AllowCredentials();
// });
//});
#endregion
builder.Services.AddExceptionHandler<CustomExceptionHandler>();
@@ -304,7 +308,6 @@ var app = builder.Build();
app.UseCors("AllowSpecificOrigins");
#region Mahan
//app.UseStatusCodePagesWithRedirects("/error/{0}");
@@ -319,21 +322,23 @@ if (builder.Environment.IsDevelopment())
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/General/swagger.json", "API - General");
options.SwaggerEndpoint("/swagger/Admin/swagger.json", "API - Admin");
options.SwaggerEndpoint("/swagger/Client/swagger.json", "API - Client");
options.SwaggerEndpoint("/swagger/Camera/swagger.json", "API - Camera");
});
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.DocExpansion(DocExpansion.None);
options.SwaggerEndpoint("/swagger/General/swagger.json", "API - General");
options.SwaggerEndpoint("/swagger/Admin/swagger.json", "API - Admin");
options.SwaggerEndpoint("/swagger/Client/swagger.json", "API - Client");
options.SwaggerEndpoint("/swagger/Camera/swagger.json", "API - Camera");
});
}
#endregion
//Create Http Pipeline
#region Create Http Pipeline
if (builder.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
@@ -352,7 +357,6 @@ app.UseAuthentication();
app.UseAuthorization();
app.UseHttpsRedirection();
@@ -361,13 +365,13 @@ app.UseStaticFiles();
app.UseCookiePolicy();
#region Mahan
//app.UseLoginHandlerMiddleware();
//app.UseCheckTaskMiddleware();
app.UseMiddleware<RazorJsonEnumOverrideMiddleware>();
app.UseMiddleware<RazorJsonEnumOverrideMiddleware>();
#endregion
@@ -377,6 +381,7 @@ app.MapHub<HolidayApiHub>("/trackingHolidayHub");
app.MapHub<CheckoutHub>("/trackingCheckoutHub");
app.MapRazorPages();
app.MapControllers();
#endregion
app.Run();
app.Run();

View File

@@ -11,7 +11,7 @@
},
"ServiceHost": {
"commandName": "Project",
"launchBrowser": true,
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"

View File

@@ -12,7 +12,7 @@
//"MesbahDb": "Data Source=DESKTOP-NUE119G\\MSNEW;Initial Catalog=Mesbah_db;Integrated Security=True"
//server
//"MesbahDb": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;",
"MesbahDbServer": "Data Source=171.22.24.15;Initial Catalog=mesbah_db;Persist Security Info=False;User ID=ir_db;Password=R2rNp[170]18[3019]#@ATt;TrustServerCertificate=true;",
//local
@@ -35,7 +35,7 @@
"ApiKey": "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa",
"SecretKey": "dadmehr"
},
"Domain": ".gozareshgir.ir"
"Domain": ".dadmehrg.ir"
}

View File

@@ -329,10 +329,13 @@
/*********************************** Start Table Checkout List ***********************************/
.table-contracts .checkout-list .Rtable--collapse .Rtable-row--head {
display: flex;
align-items: center;
justify-content: center;
}
.table-contracts .checkout-list .width1 {
width: 10%;
width: 5%;
}
.table-contracts .checkout-list .width2 {
@@ -352,7 +355,7 @@
}
.table-contracts .checkout-list .width6 {
width: 20%;
width: 22%;
}
.table-contracts .checkout-list .width7 {
@@ -364,7 +367,7 @@
}
.table-contracts .checkout-list .width9 {
width: 10%;
width: 8%;
display: flex;
justify-content: center;
}
@@ -374,6 +377,11 @@
display: flex;
justify-content: end;
}
.table-contracts .checkout-list .width11 {
width: 5%;
display: flex;
justify-content: end;
}
/*********************************** End Table Checkout List ***********************************/

File diff suppressed because it is too large Load Diff

View File

@@ -48,7 +48,6 @@ function ajaxBanks() {
}
// *************************** عملیت مربوط اسکرول کردن مربوط به سال و ماه در دسکتاپ ********************************
var Scrollbar = window.Scrollbar;
Scrollbar.init(document.querySelector('#my-scrollbar'), {
@@ -74,7 +73,7 @@ $(document).ready(function () {
//});
$('.select2Option').on('change', function () {
$('#SearchModel_EmployeeId').val(this.value);
$('#SearchModel_EmployeeId').val(this.value);
});
$(".select2Option").select2({
@@ -137,7 +136,7 @@ $(document).ready(function () {
// datePattern: ['Y', 'm', 'd']
//});
});
var filterEmployeeId = $('#employeeId').val();
var filterYear = $('#Year').val();
var filterMonth = $('#Month').val();
@@ -172,7 +171,6 @@ $(document).ready(function () {
$('.goToTop').hide();
////******************** چسباندن هدر تیبل به صفحه بالا ********************
//// Get the offset position of the sticky element
//var stickyDiv = $(".sticky-div");
@@ -259,6 +257,7 @@ function handleDropdown(dropdown, arrow, open) {
dropdown.classList.remove("active");
}
}
// *************************** عملیت مربوط اسکرول کردن مربوط به سال و ماه در دسکتاپ ********************************
@@ -358,7 +357,6 @@ $(document).on('click', '.btn-clear-filter', function () {
});
// قسمت دکمه حذف فیلتر
// $('#filterRemove').filter(function () {
// if ($('.start-date').val() == '' && $('.end-date').val() == '') {
@@ -414,22 +412,22 @@ if ($(window).width() < 768) {
var middleYearIndexArray = [];
let yearlyList = [];
yearlyList.push({ year: 1368 });
yearlyList.push({ year: 1369 });
yearlyList.push({year: 1368});
yearlyList.push({year: 1369});
itemsYearList.forEach(function (year) {
yearlyList.push({ year: Number(year) });
yearlyList.push({year: Number(year)});
});
var yearIndex = yearlyList.length;
yearIndex = yearIndex - 1;
var no3 = yearlyList[yearIndex].year + 1;
var no4 = yearlyList[yearIndex].year + 2;
yearlyList.push({ year: no3 });
yearlyList.push({ year: no4 });
yearlyList.push({year: no3});
yearlyList.push({year: no4});
var i = 0;
for (var j = yearlyList[yearIndex + 2].year; j >= 1368; j--) {
let y = { index: i, value: j };
let y = {index: i, value: j};
middleYearIndexArray.push(j);
i++;
@@ -470,12 +468,12 @@ if ($(window).width() < 768) {
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function () {
var scrollTopYearRounded = customRound(yearsScrollTop);
var scrollTopYearRounded = customRound(yearsScrollTop);
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
},
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
},
250);
var containerId = $(this).attr('id');
@@ -614,12 +612,12 @@ if ($(window).width() < 768) {
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function () {
var scrollTopMonthRounded = customRound(monthScrollTop);
var scrollTopMonthRounded = customRound(monthScrollTop);
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
},
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
},
250);
var containerId = $(this).attr('id');
@@ -780,24 +778,24 @@ if ($(window).width() < 768) {
// Populate years, months, and days
var middleYearIndexArray = [];
let yearlyList = [];
yearlyList.push({ year: 1368 });
yearlyList.push({ year: 1369 });
yearlyList.push({year: 1368});
yearlyList.push({year: 1369});
itemsYearList.forEach(function (year) {
yearlyList.push({ year: Number(year) });
yearlyList.push({year: Number(year)});
});
var yearIndex = yearlyList.length;
yearIndex = yearIndex - 1;
var no3 = yearlyList[yearIndex].year + 1;
var no4 = yearlyList[yearIndex].year + 2;
yearlyList.push({ year: no3 });
yearlyList.push({ year: no4 });
yearlyList.push({year: no3});
yearlyList.push({year: no4});
var i = 0;
for (var j = yearlyList[yearIndex + 2].year; j >= 1368; j--) {
let y = { index: i, value: j };
let y = {index: i, value: j};
middleYearIndexArray.push(j);
i++;
@@ -908,20 +906,20 @@ if ($(window).width() < 768) {
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function () {
var scrollTopYearRounded = customRound(yearsScrollTop);
var scrollTopMonthRounded = customRound(monthScrollTop);
var scrollTopDayRounded = customRound(dayScrollTop);
var scrollTopYearRounded = customRound(yearsScrollTop);
var scrollTopMonthRounded = customRound(monthScrollTop);
var scrollTopDayRounded = customRound(dayScrollTop);
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
if (dayScrollTop !== scrollTopDayRounded) {
days.scrollTop(scrollTopDayRounded);
}
},
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
if (dayScrollTop !== scrollTopDayRounded) {
days.scrollTop(scrollTopDayRounded);
}
},
250);
var containerId = $(this).attr('id');
@@ -1066,22 +1064,22 @@ if ($(window).width() < 768) {
// Populate years, months, and days
var middleYearIndexArray = [];
let yearlyList = [];
yearlyList.push({ year: 1368 });
yearlyList.push({ year: 1369 });
yearlyList.push({year: 1368});
yearlyList.push({year: 1369});
itemsYearList.forEach(function (year) {
yearlyList.push({ year: Number(year) });
yearlyList.push({year: Number(year)});
});
var yearIndex = yearlyList.length;
yearIndex = yearIndex - 1;
var no3 = yearlyList[yearIndex].year + 1;
var no4 = yearlyList[yearIndex].year + 2;
yearlyList.push({ year: no3 });
yearlyList.push({ year: no4 });
yearlyList.push({year: no3});
yearlyList.push({year: no4});
var i = 0;
for (var j = yearlyList[yearIndex + 2].year; j >= 1368; j--) {
let y = { index: i, value: j };
let y = {index: i, value: j};
middleYearIndexArray.push(j);
i++;
@@ -1193,20 +1191,20 @@ if ($(window).width() < 768) {
clearTimeout(scrollTimeout);
scrollTimeout = setTimeout(function () {
var scrollTopYearRounded = customRound(yearsScrollTop);
var scrollTopMonthRounded = customRound(monthScrollTop);
var scrollTopDayRounded = customRound(dayScrollTop);
var scrollTopYearRounded = customRound(yearsScrollTop);
var scrollTopMonthRounded = customRound(monthScrollTop);
var scrollTopDayRounded = customRound(dayScrollTop);
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
if (dayScrollTop !== scrollTopDayRounded) {
days.scrollTop(scrollTopDayRounded);
}
},
if (yearsScrollTop !== scrollTopYearRounded) {
years.scrollTop(scrollTopYearRounded);
}
if (monthScrollTop !== scrollTopMonthRounded) {
months.scrollTop(scrollTopMonthRounded);
}
if (dayScrollTop !== scrollTopDayRounded) {
days.scrollTop(scrollTopDayRounded);
}
},
250);
@@ -1319,7 +1317,6 @@ if ($(window).width() < 768) {
}
$(".date").keyup(function () {
let value = $(this).val();
let lengthValue = value.length;
@@ -1400,14 +1397,14 @@ function loadMore() {
OrderBy: sorting,
BankId: bankId
},
headers: { "RequestVerificationToken": antiForgeryToken },
headers: {"RequestVerificationToken": antiForgeryToken},
success: function (response) {
if (response.pageIndex > 0) {
var n = pageIndex + 1;
$.each(response.data, function (i, item) {
const html = `
let html = `
<div class="Rtable-row align-items-center position-relative printAllTd">
<div class="Rtable-cell d-md-block d-none width1">
<div class="Rtable-cell--heading">
@@ -1436,7 +1433,25 @@ function loadMore() {
</div>
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--heading">نام پرسنل</div>
<div class="Rtable-cell--content ">${item.employeeFullName}</div>
<div class="Rtable-cell--content ">${item.employeeFullName}`;
if (item.hasAmountConflict) {
html += ` <svg
xmlns="http://www.w3.org/2000/svg"
width="24" height="24"
fill="red"
className="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>`;
}
html += `</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--heading">آغاز قرارداد</div>
@@ -1480,8 +1495,25 @@ function loadMore() {
<div class="Rtable-cell--content">
<span class="mx-sm-2">
${item.employeeFullName}
</span>
${item.employeeFullName}`;
if (item.hasAmountConflict) {
html += ` <svg
xmlns="http://www.w3.org/2000/svg"
width="24" height="24"
fill="red"
className="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>`;
}
html += `</span>
</div>
</div>
@@ -1579,6 +1611,9 @@ function loadMore() {
`;
$('.tb').append(html);
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
n += 1;
});
updateRowNumbers();
@@ -1594,7 +1629,7 @@ function loadMore() {
}
$('.goToTop').on('click', function () {
$('html, body').animate({ scrollTop: 0 }, 360);
$('html, body').animate({scrollTop: 0}, 360);
return false;
});
@@ -1697,7 +1732,7 @@ function showExcelAllModal() {
}, 3500);
return
}
window.location.href = showCheckoutExcelModalUrl;
}
@@ -1810,8 +1845,6 @@ function printAllMobile() {
//------------------------------------------------------------------------------------
function openCreateCheckoutTemporaryModal() {
if (!isTodayFirst) {
var goTo = `#showmodal=/Client/Company/CustomizeCheckout/CheckoutTemporary?handler=Create`;
@@ -1877,18 +1910,20 @@ $(document).on('click', '.RemoveBtn', function () {
}
});
});
function updateRowNumbers() {
$('.Rtable-row').each(function (index) {
$(this).find('.row-number').text(index);
});
}
function deleteOneItem(id, button) {
$.ajax({
async: false,
type: 'POST',
url: deleteOneAjax,
data: { checkoutId: Number(id) },
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
data: {checkoutId: Number(id)},
headers: {"RequestVerificationToken": `${antiForgeryToken}`},
success: function (response) {
if (response.success) {
$('.alert-success-msg').show();
@@ -1917,8 +1952,6 @@ function deleteOneItem(id, button) {
}
$('.RemoveBtnAll').on("click", function () {
var idListArray = [];
var year = $('#Year').val();
@@ -1971,8 +2004,8 @@ $('.RemoveBtnAll').on("click", function () {
async: false,
type: 'POST',
url: deleteAllAjax,
data: { checkoutIds: idListArray },
headers: { "RequestVerificationToken": `${antiForgeryToken}` },
data: {checkoutIds: idListArray},
headers: {"RequestVerificationToken": `${antiForgeryToken}`},
success: function (response) {
if (response.success) {
$('.alert-success-msg').show();

View File

@@ -1403,7 +1403,7 @@ function loadMore() {
if (response.pageIndex > 0) {
var n = pageIndex + 1;
$.each(response.data, function (i, item) {
const html = `
let html = `
<div class="Rtable-row align-items-center position-relative printAllTd">
<div class="Rtable-cell d-md-block d-none width1">
<div class="Rtable-cell--heading">
@@ -1432,7 +1432,25 @@ function loadMore() {
</div>
<div class="Rtable-cell d-md-block d-none width6">
<div class="Rtable-cell--heading">نام پرسنل</div>
<div class="Rtable-cell--content ">${item.employeeFullName}</div>
<div class="Rtable-cell--content ">${item.employeeFullName}`;
if (item.hasAmountConflict) {
html+= ` <svg
xmlns="http://www.w3.org/2000/svg"
width="24" height="24"
fill="red"
className="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>`;
}
html += `</div>
</div>
<div class="Rtable-cell d-md-block d-none width7">
<div class="Rtable-cell--heading">آغاز قرارداد</div>
@@ -1476,8 +1494,25 @@ function loadMore() {
<div class="Rtable-cell--content">
<span class="mx-sm-2">
${item.employeeFullName}
</span>
${item.employeeFullName}`;
if (item.hasAmountConflict) {
html += ` <svg
xmlns="http://www.w3.org/2000/svg"
width="12" height="12"
fill="red"
className="bi bi-exclamation-circle"
viewBox="0 0 16 16"
style="cursor: pointer; margin-left: 10px;"
data-bs-toggle="tooltip"
data-bs-placement="top"
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
<path
d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
<path
d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
</svg>`;
}
html += `</span>
</div>
</div>
@@ -1564,6 +1599,9 @@ function loadMore() {
`;
$('.tb').append(html);
document.querySelectorAll('[data-bs-toggle="tooltip"]').forEach(el => {
bootstrap.Tooltip.getOrCreateInstance(el);
});
n += 1;
});
updateRowNumbers();

View File

@@ -344,15 +344,17 @@ function CheckExistAjax() {
success: function (response) {
var checkoutType = "";
if (response.customizeCheckout) {
checkoutType = "غیررسمی نهایی";
} else if (response.customizeCheckoutTemp) {
checkoutType = "غیررسمی موقت";
}
if (response.checkout){
if (response.checkout)
checkoutType = "-فیش حقوقی رسمی\n";
var message = " با افزودن مبلغ مساعده فیش های حقوقی ذیل تغییر میکنند:\n " +
checkoutType +
"در صورت نیاز به فیش با محاسبه دقیق پس از ثبت مساعده، فیش های موجود را حذف و مجددا اقدام به صدور نمایید.";
if (response.checkout) {
swal({
title: `پرسنل دارای فیش رسمی است با تایید این پیغام مساعده شما ثبت میشود ولی در فیش حقوقی رسمی پرسنل اعمال نمیشود. درصورت نیاز به ثبت مساعده در فیش رسمی میبایست فیش حقوقی رسمی را مجددا ایجاد کنید. آیا ادامه میدهید؟`,
title: message,
text: "",
type: "warning",
showCancelButton: true,
@@ -368,26 +370,8 @@ function CheckExistAjax() {
$('#createData').removeClass('disable');
}
});
}
else if (response.customizeCheckout || response.customizeCheckoutTemp) {
swal({
title: `برای این پرسنل فیش حقوقی ${checkoutType} صادر شده است. در صورت تایید، این فیش حقوقی به صورت خودکار تغییر پیدا میکند.`,
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
SaveDataAjax();
} else {
$('#createData').removeClass('disable');
}
});
}
else {
SaveDataAjax();
}

View File

@@ -275,34 +275,15 @@ function CheckExistAjax() {
//if (response.checkout)
var checkoutType = "";
if (response.customizeCheckout) {
checkoutType = "غیررسمی نهایی";
} else if (response.customizeCheckoutTemp) {
checkoutType = "غیررسمی موقت";
}
if (response.checkout ||response.customizeCheckoutTemp || response.customizeCheckout){
if (response.checkout)
checkoutType = "-فیش حقوقی رسمی\n";
var message = " با افزودن مبلغ مساعده فیش های حقوقی ذیل تغییر میکنند:\n " +
checkoutType +
"در صورت نیاز به فیش با محاسبه دقیق پس از ثبت مساعده، فیش های موجود را حذف و مجددا اقدام به صدور نمایید.";
if (response.checkout) {
swal({
title: `پرسنل دارای فیش رسمی است با تایید این پیغام مساعده شما ثبت میشود ولی در فیش حقوقی رسمی پرسنل اعمال نمیشود. درصورت نیاز به اعمال مساعده در فیش رسمی میبایست فیش حقوقی رسمی را مجددا ایجاد کنید. آیا ادامه میدهید؟`,
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
SaveDataAjax();
} else {
$('#createData').removeClass('disable');
}
});
}
else if (response.customizeCheckout || response.customizeCheckoutTemp) {
swal({
title: `برای این پرسنل فیش حقوقی ${checkoutType} صادر شده است. در صورت تایید، این فیش حقوقی به صورت خودکار تغییر پیدا میکند.`,
title: message,
text: "",
type: "warning",
showCancelButton: true,

View File

@@ -762,18 +762,17 @@ function CheckExistAjax() {
employeeIds: employeeSelectArray
},
success: function (response) {
//if (response.checkout)
var checkoutType = "";
if (response.customizeCheckout) {
checkoutType = "غیررسمی نهایی";
} else if (response.customizeCheckoutTemp) {
checkoutType = "غیررسمی موقت";
}
if (response.checkout){
if (response.checkout)
checkoutType = "-فیش حقوقی رسمی\n";
var message = " با افزودن مبلغ مساعده فیش های حقوقی ذیل تغییر میکنند:\n " + checkoutType+"در صورت نیاز به فیش به فیش با محاسبه دقیق پس از ثبت مساعده، فیش های موجود را حذف و مجددا اقدام به صدور نمایید.";
if (response.checkout) {
swal({
title: `پرسنل دارای فیش رسمی است با تایید این پیغام مساعده شما ثبت میشود ولی در فیش حقوقی رسمی پرسنل اعمال نمیشود. درصورت نیاز به اعمال مساعده در فیش رسمی میبایست فیش حقوقی رسمی را مجددا ایجاد کنید. آیا ادامه میدهید؟`,
title: message,
text: "",
type: "warning",
showCancelButton: true,
@@ -789,26 +788,9 @@ function CheckExistAjax() {
$('#createData').removeClass('disable');
}
});
}
else if (response.customizeCheckout || response.customizeCheckoutTemp) {
swal({
title: `برای این پرسنل فیش حقوقی ${checkoutType} صادر شده است. در صورت تایید، این فیش حقوقی به صورت خودکار تغییر پیدا میکند.`,
text: "",
type: "warning",
showCancelButton: true,
confirmButtonColor: "#DD6B55",
confirmButtonText: "بله",
cancelButtonText: "خیر",
closeOnConfirm: true,
closeOnCancel: true
}, function (isConfirm) {
if (isConfirm) {
SaveDataAjax();
} else {
$('#createData').removeClass('disable');
}
});
} else {
else {
SaveDataAjax();
}
},