Compare commits
53 Commits
Feature/au
...
Feature/In
| Author | SHA1 | Date | |
|---|---|---|---|
| bc192d9552 | |||
| 470651cb76 | |||
| 2a9d9574e3 | |||
|
|
7b1542d5c6 | ||
|
|
981fd2d4ee | ||
|
|
7f3f785e39 | ||
| ca1ef420af | |||
| d7baf358cc | |||
|
|
676c8d2fa6 | ||
|
|
632ab3631b | ||
| 595b2c8a2d | |||
| c7bace728e | |||
| 8134216a4a | |||
|
|
3d013cfa60 | ||
| 30bfc96cbe | |||
| 5d55118c3c | |||
| 280db87408 | |||
| c5a1e5c274 | |||
| 4c6de6a76f | |||
| 25c7b67eb5 | |||
| 19b390b17d | |||
| 6b6b0767e3 | |||
| 3d86ba401f | |||
| 6a6e2e532a | |||
| ca6638d6a3 | |||
| 608fb824dc | |||
| 4686151bbb | |||
| d7fae42e4f | |||
| 2cfe480733 | |||
|
|
c574ce534d | ||
| 174edbf87d | |||
| a827470831 | |||
| c9b61c3fc6 | |||
| 45002b88c4 | |||
| 0bacb24aa2 | |||
| 7fd8851f71 | |||
| bc6ae854f8 | |||
| 68f1f81b53 | |||
| d4c2ab939e | |||
| 5822005b68 | |||
| 53aeb60861 | |||
| c2a08d9c33 | |||
| 85e2481680 | |||
| b711e803a9 | |||
| 232a834dc9 | |||
| 55f7b4f7c0 | |||
| c5b521bc50 | |||
| acdd7de4f6 | |||
| 78458f24e5 | |||
| fde58a7c75 | |||
|
|
dbddccf011 | ||
| 7d6b57affd | |||
| c8018948c2 |
15
0_Framework/Application/Enums/TypeOfCheckoutWarning.cs
Normal file
15
0_Framework/Application/Enums/TypeOfCheckoutWarning.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace _0_Framework.Application.Enums;
|
||||
|
||||
public enum TypeOfCheckoutWarning
|
||||
{
|
||||
/// <summary>
|
||||
/// هشدار های متفرقه
|
||||
/// </summary>
|
||||
OthersWarning,
|
||||
/// <summary>
|
||||
/// هشدار سهم بیمه کارگر
|
||||
/// </summary>
|
||||
InsuranceEmployeeShare,
|
||||
|
||||
|
||||
}
|
||||
@@ -27,9 +27,10 @@ public interface ISmsService
|
||||
|
||||
Task<double> GetCreditAmount();
|
||||
|
||||
public Task<bool> SendInstitutionVerificationLink(string number,string fullName, Guid institutionId);
|
||||
public Task<bool> SendInstitutionVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId);
|
||||
|
||||
public Task<bool> SendInstitutionVerificationCode(string number, string code);
|
||||
public Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||
long contractingPartyId, long institutionContractId);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Security.AccessControl;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
@@ -12,25 +13,25 @@ namespace Company.Domain.CheckoutAgg;
|
||||
|
||||
public class Checkout : EntityBase
|
||||
{
|
||||
private Checkout()
|
||||
{
|
||||
|
||||
}
|
||||
public Checkout()
|
||||
{
|
||||
}
|
||||
|
||||
public Checkout(string employeeFullName, string fathersName, string nationalCode, string dateOfBirth,
|
||||
long employeeId, string workshopName, long workshopId, string contractNo, DateTime contractStart,
|
||||
DateTime contractEnd, string month, string year, long contractId, long workingHoursId,
|
||||
DateTime contractEnd, string month, string year, long contractId, long workingHoursId,
|
||||
double monthlySalary, double baseYearsPay, double consumableItems, double housingAllowance,
|
||||
double overtimePay, double nightworkPay, double fridayPay, double missionPay, double shiftPay,
|
||||
double familyAllowance, double bonusesPay, double yearsPay, double leavePay,
|
||||
double insuranceDeduction, double taxDeducation, double installmentDeduction,
|
||||
double salaryAidDeduction, double absenceDeduction, string sumOfWorkingDays
|
||||
, string archiveCode, string personnelCode,
|
||||
, string archiveCode, string personnelCode,
|
||||
string totalClaims, string totalDeductions, double totalPayment, string signature, double marriedAllowance, bool leaveCheckout,
|
||||
double creditLeaves, double absencePeriod, double averageHoursPerDay, bool hasRollCall, string overTimeWorkvalue,
|
||||
string overNightWorkValue, string fridayWorkValue, string rotatingShifValue, string absenceValue,
|
||||
string totalDayOfLeaveCompute, string totalDayOfYearsCompute, string totalDayOfBunosesCompute,
|
||||
ICollection<CheckoutLoanInstallment> loanInstallments,
|
||||
ICollection<CheckoutSalaryAid> salaryAids,CheckoutRollCall checkoutRollCall,TimeSpan employeeMandatoryHours)
|
||||
ICollection<CheckoutSalaryAid> salaryAids, CheckoutRollCall checkoutRollCall, TimeSpan employeeMandatoryHours, bool hasInsuranceShareTheSameAsList)
|
||||
{
|
||||
EmployeeFullName = employeeFullName;
|
||||
FathersName = fathersName;
|
||||
@@ -91,6 +92,7 @@ public class Checkout : EntityBase
|
||||
SalaryAids = salaryAids;
|
||||
CheckoutRollCall = checkoutRollCall;
|
||||
EmployeeMandatoryHours = employeeMandatoryHours;
|
||||
HasInsuranceShareTheSameAsList = hasInsuranceShareTheSameAsList;
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +101,7 @@ public class Checkout : EntityBase
|
||||
public string Signature { get; private set; }
|
||||
public string FathersName { get; private set; }
|
||||
public string NationalCode { get; private set; }
|
||||
public string DateOfBirth { get; private set; }
|
||||
public string DateOfBirth { get; private set; }
|
||||
public long EmployeeId { get; private set; }
|
||||
|
||||
public string WorkshopName { get; private set; }
|
||||
@@ -135,7 +137,7 @@ public class Checkout : EntityBase
|
||||
public double SalaryAidDeduction { get; private set; }
|
||||
|
||||
public double AbsenceDeduction { get; private set; }
|
||||
|
||||
|
||||
public string SumOfWorkingDays { get; private set; }
|
||||
public string ArchiveCode { get; private set; }
|
||||
public string PersonnelCode { get; private set; }
|
||||
@@ -157,58 +159,70 @@ public class Checkout : EntityBase
|
||||
//میانگین ساعت کار در یک روز
|
||||
public double AverageHoursPerDay { get; private set; }
|
||||
public bool HasRollCall { get; private set; }
|
||||
/// <summary>
|
||||
/// مقدار اضافه کار
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// مقدار اضافه کار
|
||||
/// </summary>
|
||||
public string OverTimeWorkValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// مقدار شبکاری
|
||||
/// </summary>
|
||||
|
||||
/// <summary>
|
||||
/// مقدار شبکاری
|
||||
/// </summary>
|
||||
public string OverNightWorkValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// مقدار جمعه کاری
|
||||
/// </summary>
|
||||
public string FridayWorkValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// درصد نوبت کاری
|
||||
/// </summary>
|
||||
public string RotatingShiftValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
|
||||
/// <summary>
|
||||
/// مقدار جمعه کاری
|
||||
/// </summary>
|
||||
public string FridayWorkValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// درصد نوبت کاری
|
||||
/// </summary>
|
||||
public string RotatingShiftValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// مقدار غیبت
|
||||
/// </summary>
|
||||
public string AbsenceValue { get; private set; }
|
||||
public string AbsenceValue { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای مزد مرخصی
|
||||
/// </summary>
|
||||
public string TotalDayOfLeaveCompute { get; private set; }
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای سنوات
|
||||
/// </summary>
|
||||
public string TotalDayOfYearsCompute { get; private set; }
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای عیدی و پاداش
|
||||
/// </summary>
|
||||
public string TotalDayOfBunosesCompute { get; private set; }
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای مزد مرخصی
|
||||
/// </summary>
|
||||
public string TotalDayOfLeaveCompute { get; private set; }
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای سنوات
|
||||
/// </summary>
|
||||
public string TotalDayOfYearsCompute { get; private set; }
|
||||
/// <summary>
|
||||
/// تعداد روزهای محاسبه شده برای عیدی و پاداش
|
||||
/// </summary>
|
||||
public string TotalDayOfBunosesCompute { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد
|
||||
/// </summary>
|
||||
public bool HasAmountConflict { get; private set; }
|
||||
/// <summary>
|
||||
/// دارای تداخل مبلغ است. این در زمانی اتفاق می افتد که فیش مبلغ آن تغییر کرده ولی به دلیل مسائل قانونی امکان صدور دوباره آن وجود ندارد
|
||||
/// </summary>
|
||||
public bool HasAmountConflict { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// ساعت موظفی پرسنل در ماه
|
||||
/// </summary>
|
||||
/// <summary>
|
||||
/// ساعت موظفی پرسنل در ماه
|
||||
/// </summary>
|
||||
public TimeSpan EmployeeMandatoryHours { get; set; }
|
||||
|
||||
#region valueObjects
|
||||
|
||||
public ICollection<CheckoutLoanInstallment> LoanInstallments { get; set; } = [];
|
||||
public ICollection<CheckoutSalaryAid> SalaryAids { get; set; } = [];
|
||||
/// <summary>
|
||||
/// آیا حق بیمه مشابه لیست بیمه حساب شده؟
|
||||
/// </summary>
|
||||
public bool HasInsuranceShareTheSameAsList { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا فیش نیاز به بروزرسانی دارد
|
||||
/// </summary>
|
||||
public bool IsUpdateNeeded { get; private set; }
|
||||
|
||||
public List<CheckoutWarningMessage> CheckoutWarningMessageList { get; set; }
|
||||
|
||||
#region valueObjects
|
||||
|
||||
public ICollection<CheckoutLoanInstallment> LoanInstallments { get; set; } = [];
|
||||
public ICollection<CheckoutSalaryAid> SalaryAids { get; set; } = [];
|
||||
public CheckoutRollCall CheckoutRollCall { get; private set; }
|
||||
#endregion
|
||||
|
||||
@@ -277,7 +291,7 @@ public class Checkout : EntityBase
|
||||
var year = contarctStart.ToFarsiYear();
|
||||
var sumYear = year.Substring(Math.Max(0, year.Length - 2));
|
||||
|
||||
|
||||
|
||||
ContractNo = archiveCode + "/" + personnelCode + "/" + sumYear + "/" + month;
|
||||
}
|
||||
public void Active()
|
||||
@@ -312,7 +326,7 @@ public class Checkout : EntityBase
|
||||
}
|
||||
|
||||
|
||||
public void SetSalaryAid(ICollection<CheckoutSalaryAid> salaryAids,double salaryAidAmount)
|
||||
public void SetSalaryAid(ICollection<CheckoutSalaryAid> salaryAids, double salaryAidAmount)
|
||||
{
|
||||
SalaryAids = salaryAids;
|
||||
SalaryAidDeduction = salaryAidAmount;
|
||||
@@ -330,30 +344,45 @@ public class Checkout : EntityBase
|
||||
|
||||
public void SetAmountConflict(bool hasAmountConflict)
|
||||
{
|
||||
HasAmountConflict = hasAmountConflict;
|
||||
HasAmountConflict = hasAmountConflict;
|
||||
}
|
||||
|
||||
public void SetEmployeeMandatoryHours(TimeSpan employeeMandatoryHours)
|
||||
{
|
||||
EmployeeMandatoryHours = employeeMandatoryHours;
|
||||
}
|
||||
|
||||
public void SetInsuranceShare()
|
||||
{
|
||||
HasInsuranceShareTheSameAsList = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// نیاز به آپدیت
|
||||
/// </summary>
|
||||
public void SetUpdateNeeded()
|
||||
{
|
||||
IsUpdateNeeded = true;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public class CheckoutRollCall
|
||||
{
|
||||
private CheckoutRollCall(){}
|
||||
public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan,
|
||||
TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan,
|
||||
ICollection<CheckoutRollCallDay> rollCallDaysCollection)
|
||||
{
|
||||
TotalMandatoryTimeSpan = totalMandatoryTimeSpan;
|
||||
TotalPresentTimeSpan = totalPresentTimeSpan;
|
||||
TotalBreakTimeSpan = totalBreakTimeSpan;
|
||||
TotalWorkingTimeSpan = totalWorkingTimeSpan;
|
||||
TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan;
|
||||
TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan;
|
||||
RollCallDaysCollection = rollCallDaysCollection;
|
||||
}
|
||||
private CheckoutRollCall() { }
|
||||
public CheckoutRollCall(TimeSpan totalMandatoryTimeSpan, TimeSpan totalPresentTimeSpan, TimeSpan totalBreakTimeSpan,
|
||||
TimeSpan totalWorkingTimeSpan, TimeSpan totalPaidLeaveTmeSpan, TimeSpan totalSickLeaveTimeSpan,
|
||||
ICollection<CheckoutRollCallDay> rollCallDaysCollection)
|
||||
{
|
||||
TotalMandatoryTimeSpan = totalMandatoryTimeSpan;
|
||||
TotalPresentTimeSpan = totalPresentTimeSpan;
|
||||
TotalBreakTimeSpan = totalBreakTimeSpan;
|
||||
TotalWorkingTimeSpan = totalWorkingTimeSpan;
|
||||
TotalPaidLeaveTmeSpan = totalPaidLeaveTmeSpan;
|
||||
TotalSickLeaveTimeSpan = totalSickLeaveTimeSpan;
|
||||
RollCallDaysCollection = rollCallDaysCollection;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -394,27 +423,27 @@ public class CheckoutRollCall
|
||||
|
||||
public class CheckoutRollCallDay
|
||||
{
|
||||
private CheckoutRollCallDay(){}
|
||||
public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate,
|
||||
string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan,
|
||||
bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday,
|
||||
bool isHoliday, string leaveType)
|
||||
{
|
||||
Date = date;
|
||||
FirstStartDate = firstStartDate;
|
||||
FirstEndDate = firstEndDate;
|
||||
SecondStartDate = secondStartDate;
|
||||
SecondEndDate = secondEndDate;
|
||||
BreakTimeSpan = breakTimeSpan;
|
||||
IsSliced = isSliced;
|
||||
WorkingTimeSpan = workingTimeSpan;
|
||||
IsAbsent = isAbsent;
|
||||
IsFriday = isFriday;
|
||||
IsHoliday = isHoliday;
|
||||
LeaveType = leaveType;
|
||||
}
|
||||
private CheckoutRollCallDay() { }
|
||||
public CheckoutRollCallDay(DateTime date, string firstStartDate, string firstEndDate,
|
||||
string secondStartDate, string secondEndDate, TimeSpan breakTimeSpan,
|
||||
bool isSliced, TimeSpan workingTimeSpan, bool isAbsent, bool isFriday,
|
||||
bool isHoliday, string leaveType)
|
||||
{
|
||||
Date = date;
|
||||
FirstStartDate = firstStartDate;
|
||||
FirstEndDate = firstEndDate;
|
||||
SecondStartDate = secondStartDate;
|
||||
SecondEndDate = secondEndDate;
|
||||
BreakTimeSpan = breakTimeSpan;
|
||||
IsSliced = isSliced;
|
||||
WorkingTimeSpan = workingTimeSpan;
|
||||
IsAbsent = isAbsent;
|
||||
IsFriday = isFriday;
|
||||
IsHoliday = isHoliday;
|
||||
LeaveType = leaveType;
|
||||
}
|
||||
|
||||
public long Id { get; set; }
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تاریخ
|
||||
@@ -458,12 +487,12 @@ public class CheckoutRollCallDay
|
||||
/// <summary>
|
||||
/// آیا غیبت است
|
||||
/// </summary>
|
||||
public bool IsAbsent { get; private set; }
|
||||
public bool IsAbsent { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا جمعه است
|
||||
/// </summary>
|
||||
public bool IsFriday { get; private set; }
|
||||
public bool IsFriday { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا تعطیل رسمی است
|
||||
@@ -475,6 +504,6 @@ public class CheckoutRollCallDay
|
||||
/// </summary>
|
||||
public string LeaveType { get; private set; }
|
||||
|
||||
public long CheckoutId { get; set; }
|
||||
public long CheckoutId { get; set; }
|
||||
|
||||
}
|
||||
32
Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs
Normal file
32
Company.Domain/CheckoutAgg/CheckoutWarningMessage.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.Domain;
|
||||
|
||||
namespace Company.Domain.CheckoutAgg;
|
||||
|
||||
public class CheckoutWarningMessage : EntityBaseWithoutCreationDate
|
||||
{
|
||||
public CheckoutWarningMessage(string warningMessage, long checkoutId, TypeOfCheckoutWarning typeOfCheckoutWarning)
|
||||
{
|
||||
WarningMessage = warningMessage;
|
||||
CheckoutId = checkoutId;
|
||||
TypeOfCheckoutWarning = typeOfCheckoutWarning;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// پیام هشدار
|
||||
/// </summary>
|
||||
public string WarningMessage { get; private set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی فیش حقوقی
|
||||
/// </summary>
|
||||
public long CheckoutId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// نوع هشدار فیش حقوقی
|
||||
/// </summary>
|
||||
public TypeOfCheckoutWarning TypeOfCheckoutWarning { get; private set; }
|
||||
|
||||
public Checkout Checkout { get; set; }
|
||||
}
|
||||
@@ -6,6 +6,7 @@ using _0_Framework.Application;
|
||||
using _0_Framework.Domain;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Company.Domain.InstitutionContractAgg;
|
||||
|
||||
@@ -65,12 +66,15 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
|
||||
#endregion
|
||||
|
||||
#region Upgrade(Amendment)
|
||||
#region Upgrade(Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
#endregion
|
||||
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search, string selected);
|
||||
Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids);
|
||||
}
|
||||
@@ -6,7 +6,6 @@ using System.Security.Cryptography;
|
||||
using _0_Framework.Domain;
|
||||
using Company.Domain.InstitutionContractContactInfoAgg;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using OfficeOpenXml.Table.PivotTable;
|
||||
|
||||
namespace Company.Domain.InstitutionContractAgg;
|
||||
|
||||
@@ -126,6 +125,8 @@ public class InstitutionContract : EntityBase
|
||||
|
||||
public string VerifyCode { get; private set; }
|
||||
public DateTime VerifyCodeCreation { get; private set; }
|
||||
public string VerifierFullName { get; private set; }
|
||||
public string VerifierPhoneNumber { get; private set; }
|
||||
|
||||
[NotMapped] public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now;
|
||||
|
||||
@@ -226,10 +227,12 @@ public class InstitutionContract : EntityBase
|
||||
}
|
||||
|
||||
|
||||
public void SetVerifyCode(string code)
|
||||
public void SetVerifyCode(string code,string verifierFullName, string verifierPhoneNumber)
|
||||
{
|
||||
VerifyCode = code;
|
||||
VerifyCodeCreation = DateTime.Now;
|
||||
VerifierFullName = verifierFullName;
|
||||
VerifierPhoneNumber = verifierPhoneNumber;
|
||||
}
|
||||
|
||||
public void SetWorkshopGroup(InstitutionContractWorkshopGroup workshopGroup)
|
||||
@@ -277,11 +280,19 @@ public class InstitutionContractAmendment : EntityBase
|
||||
|
||||
public long LawId { get; set; }
|
||||
|
||||
public void SetVerifyCode(string code)
|
||||
public void SetVerifyCode(string code,string verifierFullName, string verifierPhoneNumber)
|
||||
{
|
||||
VerifyCode = code;
|
||||
VerificationCreation = DateTime.Now;
|
||||
VerifyCodeCreation = DateTime.Now;
|
||||
VerifierFullName = verifierFullName;
|
||||
VerifierPhoneNumber = verifierPhoneNumber;
|
||||
}
|
||||
|
||||
public string VerifierPhoneNumber { get; private set; }
|
||||
|
||||
public string VerifierFullName { get; private set; }
|
||||
|
||||
public DateTime VerifyCodeCreation { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractAmendmentChange : EntityBase
|
||||
|
||||
@@ -0,0 +1,151 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using MongoDB.Bson;
|
||||
using MongoDB.Bson.Serialization.Attributes;
|
||||
|
||||
namespace Company.Domain.InstitutionContractAmendmentTempAgg;
|
||||
|
||||
public class InstitutionContractAmendmentTemp
|
||||
{
|
||||
public InstitutionContractAmendmentTemp(List<InstitutionContractAmendmentTempPrevWorkshop> prevWorkshops,
|
||||
long institutionContractId)
|
||||
{
|
||||
Id = Guid.NewGuid();
|
||||
PrevWorkshops = prevWorkshops;
|
||||
NewWorkshops = prevWorkshops.Select(x=> new InstitutionContractAmendmentTempNewWorkshop(
|
||||
x.WorkshopName, x.CountPerson, x.ContractAndCheckout, x.ContractAndCheckoutInPerson, x.Insurance,
|
||||
x.InsuranceInPerson, x.RollCall, x.RollCallInPerson, x.CustomizeCheckout, x.Price, x.WorkshopId,
|
||||
x.CurrentWorkshopId, 0)).ToList();
|
||||
InstitutionContractId = institutionContractId;
|
||||
}
|
||||
|
||||
[BsonId]
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
public Guid Id { get; private set; }
|
||||
public List<InstitutionContractAmendmentTempPrevWorkshop> PrevWorkshops { get; private set; }
|
||||
public List<InstitutionContractAmendmentTempNewWorkshop> NewWorkshops { get; private set; }
|
||||
public long InstitutionContractId { get; private set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractAmendmentTempNewWorkshop : InstitutionContractAmendmentTempPrevWorkshop
|
||||
{
|
||||
public InstitutionContractAmendmentTempNewWorkshop(string workshopName, int countPerson, bool contractAndCheckout,
|
||||
bool contractAndCheckoutInPerson, bool insurance, bool insuranceInPerson, bool rollCall, bool rollCallInPerson,
|
||||
bool customizeCheckout, double price, long workshopId, long currentWorkshopId,double priceDifference) : base(
|
||||
workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance, insuranceInPerson,
|
||||
rollCall, rollCallInPerson, customizeCheckout, price, workshopId, currentWorkshopId)
|
||||
{
|
||||
PriceDifference = priceDifference;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// مبلغ اختلاف کارگاه جدید با کارگاه قبلی(مبلغ اصلی ارتقاء)
|
||||
/// </summary>
|
||||
public double PriceDifference { get; private set; }
|
||||
|
||||
|
||||
public void Edit(string workshopName, int countPerson, bool contractAndCheckout,
|
||||
bool contractAndCheckoutInPerson,
|
||||
bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout,
|
||||
double price,double priceDifference)
|
||||
{
|
||||
base.Edit(workshopName, countPerson, contractAndCheckout, contractAndCheckoutInPerson, insurance,
|
||||
insuranceInPerson, rollCall, customizeCheckout, price);
|
||||
PriceDifference = priceDifference;
|
||||
}
|
||||
}
|
||||
|
||||
public class InstitutionContractAmendmentTempPrevWorkshop
|
||||
{
|
||||
public InstitutionContractAmendmentTempPrevWorkshop(string workshopName, int countPerson, bool contractAndCheckout,
|
||||
bool contractAndCheckoutInPerson,
|
||||
bool insurance, bool insuranceInPerson,
|
||||
bool rollCall, bool rollCallInPerson, bool customizeCheckout, double price, long workshopId,
|
||||
long currentWorkshopId)
|
||||
{
|
||||
Id = Guid.NewGuid();
|
||||
WorkshopName = workshopName;
|
||||
CountPerson = countPerson;
|
||||
ContractAndCheckout = contractAndCheckout;
|
||||
Insurance = insurance;
|
||||
RollCall = rollCall;
|
||||
CustomizeCheckout = customizeCheckout;
|
||||
ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
|
||||
InsuranceInPerson = insuranceInPerson;
|
||||
RollCallInPerson = rollCallInPerson;
|
||||
Price = price;
|
||||
WorkshopId = workshopId;
|
||||
CurrentWorkshopId = currentWorkshopId;
|
||||
}
|
||||
|
||||
[BsonRepresentation(BsonType.String)]
|
||||
public Guid Id { get; set; }
|
||||
|
||||
public long CurrentWorkshopId { get; private set; }
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام کارگاه
|
||||
/// </summary>
|
||||
public string WorkshopName { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// تعداد پرسنل
|
||||
/// </summary>
|
||||
public int CountPerson { get; private set; }
|
||||
|
||||
|
||||
#region ServiceSelection
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckout { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// بیمه
|
||||
/// </summary>
|
||||
public bool Insurance { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// حضورغباب
|
||||
/// </summary>
|
||||
public bool RollCall { get; private set; }
|
||||
|
||||
public bool RollCallInPerson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیش غیر رسمی
|
||||
/// </summary>
|
||||
public bool CustomizeCheckout { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری قرداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckoutInPerson { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری بیمه
|
||||
/// </summary>
|
||||
public bool InsuranceInPerson { get; private set; }
|
||||
|
||||
public double Price { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
public void Edit(string workshopName, int countPerson, bool contractAndCheckout, bool contractAndCheckoutInPerson,
|
||||
bool insurance, bool insuranceInPerson, bool rollCall, bool customizeCheckout,
|
||||
double price)
|
||||
{
|
||||
WorkshopName = workshopName;
|
||||
CountPerson = countPerson;
|
||||
ContractAndCheckout = contractAndCheckout;
|
||||
Insurance = insurance;
|
||||
RollCall = rollCall;
|
||||
CustomizeCheckout = customizeCheckout;
|
||||
ContractAndCheckoutInPerson = contractAndCheckoutInPerson;
|
||||
InsuranceInPerson = insuranceInPerson;
|
||||
Price = price;
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,14 @@ public interface IInsuranceListRepository:IRepository<long, InsuranceList>
|
||||
List<EmployeeInsurancListDataViewModel> GetEmployeeInsuranceDataAmonthAgo(DateTime currentMonthStartDate, long workshopId);
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// دریافت اطلاعات بیمه کارکنان برای استفاده در فیش حقوقی
|
||||
/// </summary>
|
||||
/// <param name="startDate"></param>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <returns></returns>
|
||||
List<EmployeeInsurancListDataViewModel> EmployeeInsuranceDataBy(DateTime startDate, long workshopId);
|
||||
|
||||
/// <summary>
|
||||
/// بدست آوردن اطلاعات محاسباتی ماه پرسنل برای ویرایش
|
||||
/// </summary>
|
||||
|
||||
@@ -26,5 +26,6 @@ namespace Company.Domain.RollCallEmployeeStatusAgg
|
||||
List<RollCallEmployeeStatusViewModel> GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr);
|
||||
List<RollCallEmployeeStatusViewModel> GetByWorkshopIdInDates(long workshopId, DateTime start, DateTime end);
|
||||
bool IsActiveInPeriod(long employeeId, long workshopId, DateTime startDate, DateTime endDate);
|
||||
}
|
||||
void RemoveRange(IEnumerable<RollCallEmployeeStatus> rollCallEmployeeStatusList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,8 @@ namespace Company.Domain.SmsResultAgg;
|
||||
|
||||
public class SmsResult: EntityBase
|
||||
{
|
||||
public SmsResult(int messageId, string status,string typeOfSms, string contractingPartyName,string mobile, long contractingPatyId, long institutionContractId)
|
||||
public SmsResult(int messageId, string status,string typeOfSms,
|
||||
string contractingPartyName,string mobile, long contractingPatyId, long institutionContractId)
|
||||
{
|
||||
MessageId = messageId;
|
||||
Status = status;
|
||||
|
||||
@@ -12,9 +12,7 @@ public class CaseHistoryRollCallExcelForEmployeeViewModel
|
||||
public string EmployeeFullName { get; set; }
|
||||
public string TotalWorkingHoursFa { get; set; }
|
||||
public string TotalWorkingTimeSpan { get; set; }
|
||||
|
||||
|
||||
|
||||
|
||||
public List<RollCallItemForEmployeeExcelViewModel> RollCalls { get; set; }
|
||||
}
|
||||
|
||||
@@ -40,7 +38,8 @@ public class RollCallItemForEmployeeExcelViewModel
|
||||
public bool HasLeave { get; set; }
|
||||
|
||||
public string TotalWorkingHours { get; set; }
|
||||
|
||||
public string EnterTimeDifferences { get; set; }
|
||||
public string ExitTimeDifferences { get; set; }
|
||||
}
|
||||
|
||||
public class RollCallTimeExcelViewModel
|
||||
|
||||
@@ -113,11 +113,12 @@ public class RollCallExcelGenerator : ExcelGenerator
|
||||
worksheet.Cells[i + row + 1, 1].Value = i + 1;
|
||||
worksheet.Cells[i + row + 1, 2].Value = rollCall.DayOfWeekFa;
|
||||
worksheet.Cells[i + row + 1, 3].Value = rollCall.DateFa;
|
||||
worksheet.Cells[i + row + 1, 4].Value = "-";
|
||||
worksheet.Cells[i + row + 1, 4].Value = rollCall.EnterTimeDifferences;
|
||||
worksheet.Cells[i + row + 1, 5].Value = rollCall.StartsItems;
|
||||
worksheet.Cells[i + row + 1, 6].Value = rollCall.EndsItems;
|
||||
worksheet.Cells[i + row + 1, 7].Value = "-";
|
||||
worksheet.Cells[i + row + 1, 8].Value = rollCall.TotalWorkingHours == string.Empty ? "ندارد" : rollCall.TotalWorkingHours;
|
||||
worksheet.Cells[i + row + 1, 7].Value = rollCall.ExitTimeDifferences;
|
||||
worksheet.Cells[i + row + 1, 8].Value = rollCall.TotalWorkingHours == string.Empty
|
||||
? "ندارد" : rollCall.TotalWorkingHours;
|
||||
|
||||
// Style data cells
|
||||
for (int j = 1; j <= 8; j++)
|
||||
@@ -307,6 +308,49 @@ public class RollCallExcelGenerator : ExcelGenerator
|
||||
return package.GetAsByteArray();
|
||||
}
|
||||
|
||||
private string CalculateExitMinuteDifference(TimeSpan early, TimeSpan late)
|
||||
{
|
||||
if (early == TimeSpan.Zero && late == TimeSpan.Zero)
|
||||
{
|
||||
return "-";
|
||||
}
|
||||
else if (late != TimeSpan.Zero)
|
||||
{
|
||||
var minutes = late.TotalMinutes > 999 ? "999" : late.TotalMinutes.ToString();
|
||||
return $"{minutes}+";
|
||||
}
|
||||
else if (early != TimeSpan.Zero)
|
||||
{
|
||||
var minutes = early.TotalMinutes > 999 ? "999" : early.TotalMinutes.ToString();
|
||||
return $"{minutes}-";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $"";
|
||||
}
|
||||
}
|
||||
|
||||
private string CalculateEntryMinuteDifference(TimeSpan early, TimeSpan late)
|
||||
{
|
||||
if (early == TimeSpan.Zero && late == TimeSpan.Zero)
|
||||
{
|
||||
return "-";
|
||||
}
|
||||
else if (late != TimeSpan.Zero)
|
||||
{
|
||||
var minutes = late.TotalMinutes > 999 ? "999" : late.TotalMinutes.ToString();
|
||||
return $"{minutes}-";
|
||||
}
|
||||
else if (early != TimeSpan.Zero)
|
||||
{
|
||||
var minutes = early.TotalMinutes > 999 ? "999" : early.TotalMinutes.ToString();
|
||||
return $"{minutes}+";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $"";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using _0_Framework.Application.Enums;
|
||||
using CompanyManagment.App.Contracts.Employer;
|
||||
using CompanyManagment.App.Contracts.Loan;
|
||||
using CompanyManagment.App.Contracts.RollCall;
|
||||
@@ -133,6 +134,15 @@ public class CheckoutViewModel
|
||||
/// </summary>
|
||||
public string TotalPaidLeave { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا فیش نیاز به بروزرسانی دارد
|
||||
/// </summary>
|
||||
public bool IsUpdateNeeded { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// لیست پیام های هشدار فیش حقوقی
|
||||
/// </summary>
|
||||
public List<CheckoutWarningMessageModel> CheckoutWarningMessageList { get; set; }
|
||||
|
||||
public bool HasSignCheckout { get; set; }
|
||||
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using _0_Framework.Application.Enums;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Checkout;
|
||||
|
||||
/// <summary>
|
||||
/// مدل هشدار فیش حقوقی
|
||||
/// </summary>
|
||||
public class CheckoutWarningMessageModel
|
||||
{
|
||||
/// <summary>
|
||||
/// پیام هشدار
|
||||
/// </summary>
|
||||
public string WarningMessage { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// آی دی فیش حقوقی
|
||||
/// </summary>
|
||||
public long CheckoutId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نوع هشدار فیش حقوقی
|
||||
/// </summary>
|
||||
public TypeOfCheckoutWarning TypeOfCheckoutWarning { get; set; }
|
||||
}
|
||||
@@ -87,6 +87,21 @@ public class GetInstitutionContractListItemsViewModel
|
||||
public long ContractingPartyId { get; set; }
|
||||
|
||||
public List<InstitutionContractListWorkshop> Workshops { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد ها با خدمات حضوری قرارداد
|
||||
/// </summary>
|
||||
public bool IsInPersonContract { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد های قدیمی
|
||||
/// </summary>
|
||||
public bool IsOldContract { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد هایی که برای آینده تنظیم شده اند
|
||||
/// </summary>
|
||||
public bool IsFutureContract { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractListWorkshop
|
||||
|
||||
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Sms;
|
||||
using CompanyManagment.App.Contracts.Checkout;
|
||||
using CompanyManagment.App.Contracts.Law;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||
@@ -77,6 +78,8 @@ public interface IInstitutionContractApplication
|
||||
/// <returns>لیست قراردادها برای چاپ</returns>
|
||||
List<InstitutionContractViewModel> PrintAll(List<long> id);
|
||||
|
||||
|
||||
[Obsolete("استفاده نشود، از متد غیرهمزمان استفاده شود")]
|
||||
/// <summary>
|
||||
/// چاپ یک قرارداد
|
||||
/// </summary>
|
||||
@@ -234,26 +237,47 @@ public interface IInstitutionContractApplication
|
||||
#region Upgrade (Amendment)
|
||||
|
||||
Task<InstitutionContractAmendmentWorkshopsResponse> GetAmendmentWorkshops(long institutionContractId);
|
||||
Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request);
|
||||
Task RemoveAmendmentWorkshops(Guid workshopTempId);
|
||||
Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request);
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
Task<OperationResult> ResendVerifyLink(long institutionContractId);
|
||||
|
||||
/// <summary>
|
||||
/// دیتای پرینت قرارداد مالی
|
||||
/// </summary>
|
||||
/// <param name="id"></param>
|
||||
/// <returns></returns>
|
||||
Task<InstitutionContractPrintViewModel> PrintOneAsync(long id);
|
||||
}
|
||||
|
||||
public class InsitutionContractAmendmentPaymentRequest
|
||||
public class InstitutionContractPrintViewModel
|
||||
{
|
||||
List<WorkshopTempViewModel> Workshops { get; set; }
|
||||
public long InstitutionContractId { get; set; }
|
||||
}
|
||||
|
||||
public class InsitutionContractAmendmentPaymentResponse
|
||||
{
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
public InstitutionContratVerificationParty FirstParty { get; set; }
|
||||
public InstitutionContratVerificationParty SecondParty { get; set; }
|
||||
public string ContractNo { get; set; }
|
||||
public string CreationDate { get; set; }
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public string OneMonthAmount { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
public List<GetInstitutionVerificationDetailsWorkshopsViewModel> Workshops { get; set; }
|
||||
public string TotalPrice { get; set; }
|
||||
public string TaxPrice { get; set; }
|
||||
public string PaymentPrice { get; set; }
|
||||
public string VerifyCode { get; set; }
|
||||
public string VerifyDate { get; set; }
|
||||
public string VerifyTime { get; set; }
|
||||
public string VerifierFullName { get; set; }
|
||||
public string VerifierPhoneNumber { get; set; }
|
||||
public LawViewModel LawViewModel { get; set; }
|
||||
public string Obligation { get; set; }
|
||||
}
|
||||
|
||||
public class InsertAmendmentTempWorkshopResponse
|
||||
{
|
||||
public Guid WorkshopTempId { get; set; }
|
||||
public string Amount { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractAmendmentWorkshopsResponse
|
||||
@@ -261,7 +285,9 @@ public class InstitutionContractAmendmentWorkshopsResponse
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public List<WorkshopTempViewModel> Workshops { get; set; }
|
||||
public List<InstitutionContractAmendmentTempWorkshopViewModel> Workshops { get; set; }
|
||||
|
||||
public Guid TempId { get; set; }
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InsitutionContractAmendmentPaymentRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InsitutionContractAmendmentPaymentResponse
|
||||
{
|
||||
public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; }
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public string OneMonthAmount { get; set; }
|
||||
public string TotalAmount { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.InstitutionContract;
|
||||
|
||||
public class InstitutionContractAmendmentTempWorkshopViewModel
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
|
||||
public Guid WorkshopTempId { get; set; }
|
||||
|
||||
public long CurrentWorkshopId { get; set; }
|
||||
|
||||
public long WorkshopId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// نام کارگاه
|
||||
/// </summary>
|
||||
public string WorkshopName { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// تعداد پرسنل
|
||||
/// </summary>
|
||||
public int CountPerson { get; set; }
|
||||
|
||||
|
||||
#region ServiceSelection
|
||||
|
||||
/// <summary>
|
||||
/// قرارداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckout { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// بیمه
|
||||
/// </summary>
|
||||
public bool Insurance { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// حضورغباب
|
||||
/// </summary>
|
||||
public bool RollCall { get; set; }
|
||||
|
||||
public bool RollCallInPerson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// فیش غیر رسمی
|
||||
/// </summary>
|
||||
public bool CustomizeCheckout { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری قرداد و تصفیه
|
||||
/// </summary>
|
||||
public bool ContractAndCheckoutInPerson { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// خدمات حضوری بیمه
|
||||
/// </summary>
|
||||
public bool InsuranceInPerson { get; set; }
|
||||
|
||||
public double Price{ get; set; }
|
||||
public string PriceStr{ get; set; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -31,6 +31,50 @@ public interface IInsuranceListApplication
|
||||
double GetRoundValue(double value);
|
||||
OperationResult ConfirmInsuranceList(long id);
|
||||
|
||||
#region New
|
||||
/// <summary>
|
||||
/// دستمزد روزانه مشاغل مقطوع بیمه
|
||||
/// </summary>
|
||||
/// <param name="year"></param>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="startDateGr"></param>
|
||||
/// <param name="endDateGr"></param>
|
||||
/// <param name="jobId"></param>
|
||||
/// <param name="population"></param>
|
||||
/// <param name="insuranceJobId"></param>
|
||||
/// <returns></returns>
|
||||
double? GetDailyWageFixedSalary(string year, long workshopId, long employeeId, DateTime? startDateGr,
|
||||
DateTime? endDateGr, long jobId, string population, long? insuranceJobId);
|
||||
|
||||
/// <summary>
|
||||
/// محاسبه مزایای ماهانه
|
||||
/// </summary>
|
||||
/// <param name="endMonthCurrentDay"></param>
|
||||
/// <param name="consumableItemsItemValue"></param>
|
||||
/// <param name="housingAllowanceItemValue"></param>
|
||||
/// <param name="maritalStatus"></param>
|
||||
/// <param name="countWorkingDays"></param>
|
||||
/// <param name="typeOfInsuranceSendWorkshop"></param>
|
||||
/// <param name="jobId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="includeStatus"></param>
|
||||
/// <returns></returns>
|
||||
public double GetMonthlyBenefits(int endMonthCurrentDay, double consumableItemsItemValue,
|
||||
double housingAllowanceItemValue, double maritalStatus, int countWorkingDays,
|
||||
string typeOfInsuranceSendWorkshop, long jobId, long employeeId, bool includeStatus);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="yearlysalaryItemValue"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <param name="workshopId"></param>
|
||||
/// <param name="year"></param>
|
||||
/// <returns></returns>
|
||||
public double ComputeDailyWage(double yearlysalaryItemValue, long employeeId, long workshopId, string year);
|
||||
|
||||
#endregion
|
||||
List<InsuranceListViewModel> SearchForClient(InsuranceListSearchModel searchModel);
|
||||
|
||||
//farokhiChanges
|
||||
|
||||
@@ -193,8 +193,19 @@ public class CheckoutApplication : ICheckoutApplication
|
||||
//حق بیمه سهم کارگر
|
||||
#region InsuranceDeduction
|
||||
|
||||
var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0;
|
||||
var insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100;
|
||||
double insuranceDeduction = 0;
|
||||
bool hasInsuranceShareTheSameAsList = false;
|
||||
if (command.InsuranceDeduction == 0)
|
||||
{
|
||||
var insuranceOverTime = command.HasInsuranceChekoutOverTime ? command.OvertimePay : 0;
|
||||
insuranceDeduction = (monthlyWage + bacicYears + consumableItem + housingAllowance + marriedAllowance + insuranceOverTime) * 7 / 100;
|
||||
}
|
||||
else
|
||||
{
|
||||
insuranceDeduction = command.InsuranceDeduction;
|
||||
hasInsuranceShareTheSameAsList = true;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -375,7 +386,7 @@ public class CheckoutApplication : ICheckoutApplication
|
||||
, command.OvertimePay, command.NightworkPay, command.FridayPay, 0, command.ShiftPay, familyAllowance, bunos, years, command.LeavePay, insuranceDeduction, 0, command.InstallmentDeduction, command.SalaryAidDeduction, command.AbsenceDeduction, sumOfWorkingDays,
|
||||
command.ArchiveCode, command.PersonnelCode, totalClaims, totalDeductions, totalPayment, command.Signature, marriedAllowance, command.LeaveCheckout, command.CreditLeaves, command.AbsencePeriod, command.AverageHoursPerDay, command.HasRollCall, command.OverTimeWorkValue, command.OverNightWorkValue
|
||||
, command.FridayWorkValue, command.RotatingShiftValue, command.AbsenceValue, command.TotalDayOfLeaveCompute, command.TotalDayOfYearsCompute, command.TotalDayOfBunosesCompute,
|
||||
loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours);
|
||||
loanInstallments, salaryAids,checkoutRollCall,command.EmployeeMandatoryHours, hasInsuranceShareTheSameAsList);
|
||||
|
||||
_checkoutRepository.CreateCkeckout(checkout).GetAwaiter().GetResult();
|
||||
//_checkoutRepository.SaveChanges();
|
||||
|
||||
@@ -373,7 +373,9 @@ namespace CompanyManagment.Application
|
||||
Color = color,
|
||||
PersonnelCode = personnelCodes.FirstOrDefault(y => x.Id == y.EmployeeId)?.PersonnelCode.ToString() ?? "-"
|
||||
};
|
||||
}).OrderByDescending(x => x.IsEligible).ThenByDescending(x => x.Reason).ToList();
|
||||
}).OrderBy(x => x.Color switch { "orange" => 0, "white" => 1, "red" => 2, "green" => 3, "black" => 4, _ => 5 })
|
||||
.ToList();
|
||||
|
||||
return op.Succcedded(employees);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -106,8 +106,11 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication
|
||||
debtor = command.DeptorString.MoneyToDouble();
|
||||
|
||||
}
|
||||
|
||||
var tDateGr = command.TdateFa.ToGeorgianDateTime();
|
||||
|
||||
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
|
||||
{
|
||||
return op.Failed("تاریخ وارد شده صحیح نمی باشد");
|
||||
}
|
||||
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
||||
{
|
||||
var financialStatment = _financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
||||
|
||||
@@ -1141,7 +1141,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
|
||||
|
||||
await _smsService.SendInstitutionVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
||||
entity.PublicId);
|
||||
entity.PublicId, contractingParty.id,entity.id );
|
||||
|
||||
await _institutionContractRepository.SaveChangesAsync();
|
||||
|
||||
@@ -1203,7 +1203,12 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
throw new NotFoundException("طرف قرارداد یافت نشد");
|
||||
|
||||
var code = new Random().Next(1000, 9999).ToString();
|
||||
institutionContract.SetVerifyCode(code);
|
||||
|
||||
var contractingPartyFullName = contractingParty.IsLegal == "حقیقی"
|
||||
? contractingParty.FName + " " + contractingParty.LName
|
||||
: contractingParty.CeoFName + " " + contractingParty.CeoLName;
|
||||
|
||||
institutionContract.SetVerifyCode(code,contractingPartyFullName ,contractingParty.Phone);
|
||||
|
||||
var transaction = await _institutionContractRepository.BeginTransactionAsync();
|
||||
try
|
||||
@@ -1340,11 +1345,48 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId);
|
||||
}
|
||||
|
||||
public async Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request)
|
||||
{
|
||||
return await _institutionContractRepository.InsertAmendmentTempWorkshops(request);
|
||||
}
|
||||
|
||||
public Task RemoveAmendmentWorkshops(Guid workshopTempId)
|
||||
{
|
||||
return _institutionContractRepository.RemoveAmendmentWorkshops(workshopTempId);
|
||||
}
|
||||
|
||||
public Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request)
|
||||
{
|
||||
return _institutionContractRepository.GetAmendmentPaymentDetails(request);
|
||||
}
|
||||
|
||||
public async Task<OperationResult> ResendVerifyLink(long institutionContractId)
|
||||
{
|
||||
var institutionContract = _institutionContractRepository.Get(institutionContractId);
|
||||
|
||||
if (institutionContract == null)
|
||||
{
|
||||
throw new NotFoundException("رکورد مورد نظر یافت نشد");
|
||||
}
|
||||
|
||||
if (institutionContract.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify)
|
||||
{
|
||||
throw new BadRequestException("این قرارداد مالی در وضعیت مناسبی برای ارسال مجدد لینک تایید نمی باشد");
|
||||
}
|
||||
var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId);
|
||||
if (contractingParty == null)
|
||||
throw new NotFoundException("طرف قرارداد یافت نشد");
|
||||
var contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName;
|
||||
await _smsService.SendInstitutionVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
||||
institutionContract.PublicId, contractingParty.id, institutionContract.id);
|
||||
return new OperationResult().Succcedded();
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractPrintViewModel> PrintOneAsync(long id)
|
||||
{
|
||||
return (await _institutionContractRepository.PrintAllAsync([id])).FirstOrDefault();
|
||||
}
|
||||
|
||||
|
||||
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
|
||||
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
|
||||
@@ -1440,7 +1482,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return operation.Succcedded(personalContractingParty);
|
||||
}
|
||||
|
||||
private List<InstitutionContractInstallment> CalculateInstallment(double amount, int installmentCount,
|
||||
public static List<InstitutionContractInstallment> CalculateInstallment(double amount, int installmentCount,
|
||||
string loanStartDate, bool getRounded)
|
||||
{
|
||||
int day = Convert.ToInt32(loanStartDate.Substring(8, 2));
|
||||
|
||||
@@ -1707,7 +1707,7 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
return result;
|
||||
}
|
||||
|
||||
private double? GetDailyWageFixedSalary(string year, long workshopId, long employeeId, DateTime? startDateGr, DateTime? endDateGr, long jobId, string population, long? insuranceJobId)
|
||||
public double? GetDailyWageFixedSalary(string year, long workshopId, long employeeId, DateTime? startDateGr, DateTime? endDateGr, long jobId, string population, long? insuranceJobId)
|
||||
{
|
||||
|
||||
double? result = 0;
|
||||
@@ -1858,7 +1858,7 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
/// <param name="jobId"></param>
|
||||
/// <param name="employeeId"></param>
|
||||
/// <returns></returns>
|
||||
private double GetMonthlyBenefits(int endMonthCurrentDay, double consumableItemsItemValue, double housingAllowanceItemValue, double maritalStatus, int countWorkingDays, string typeOfInsuranceSendWorkshop, long jobId, long employeeId, bool includeStatus)
|
||||
public double GetMonthlyBenefits(int endMonthCurrentDay, double consumableItemsItemValue, double housingAllowanceItemValue, double maritalStatus, int countWorkingDays, string typeOfInsuranceSendWorkshop, long jobId, long employeeId, bool includeStatus)
|
||||
{
|
||||
//ToDo
|
||||
//افزودن شرط مشمول مزایای
|
||||
@@ -1869,6 +1869,11 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
bool isManager = jobId is 10 or 16 or 17 or 18 or 3498;
|
||||
if (isManager && !includeStatus)
|
||||
return 0;
|
||||
|
||||
//پرسنل استثناء سیدعسکر موسوی زاده - فروشگاه ولی عصر
|
||||
if (employeeId == 1496)
|
||||
return 0;
|
||||
|
||||
//پرسنل استثناء
|
||||
if (employeeId == 42783)
|
||||
return 53082855;
|
||||
@@ -1893,7 +1898,7 @@ public class InsuranceListApplication : IInsuranceListApplication
|
||||
|
||||
|
||||
|
||||
private double ComputeDailyWage(double yearlysalaryItemValue, long employeeId, long workshopId, string year)
|
||||
public double ComputeDailyWage(double yearlysalaryItemValue, long employeeId, long workshopId, string year)
|
||||
{
|
||||
double dailyWage = yearlysalaryItemValue;
|
||||
InsuranceListSearchModel searchModel = new InsuranceListSearchModel();
|
||||
|
||||
@@ -30,13 +30,14 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
|
||||
|
||||
public LeftWorkApplication(ILeftWorkRepository leftWorkRepository, IContractRepository contractRepository,
|
||||
public LeftWorkApplication(ILeftWorkRepository leftWorkRepository, IContractRepository contractRepository,
|
||||
IContractApplication contractApplication, IWorkingHoursApplication workingHoursApplication,
|
||||
IWorkingHoursItemsApplication workingHoursItemsApplication, IEmployeeRepository employeeRepository,
|
||||
IWorkshopRepository workshopRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
IWorkshopRepository workshopRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository,
|
||||
IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_contractRepository = contractRepository;
|
||||
@@ -51,7 +52,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public OperationResult Create(CreateLeftWork command)
|
||||
{
|
||||
|
||||
// var Contracts = _contractRepository.Search(new ContractSearchModel()
|
||||
// {
|
||||
// EmployeeId = command.EmployeeId,
|
||||
@@ -70,7 +70,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
var start = command.StartWorkDate.ToGeorgianDateTime();
|
||||
|
||||
|
||||
|
||||
//if (_leftWorkRepository.Exists(x =>
|
||||
// x.StartWorkDate > start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId))
|
||||
// return operation.Failed("تاریخ وارد شده کوچکتر از سابقه شروع به کار قبلی است");
|
||||
@@ -112,16 +111,17 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
return operation.Failed("تاریخ وارد شده در بازه زمانی سابقه ترک کار قبلی است");
|
||||
|
||||
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||
var workshop = _workshopRepository.GetDetails(command.WorkshopId);
|
||||
var workshopName = workshop.WorkshopFullName;
|
||||
var workshop = _workshopRepository.GetDetails(command.WorkshopId);
|
||||
var workshopName = workshop.WorkshopFullName;
|
||||
var leftWork = new LeftWork(left, start, command.WorkshopId,
|
||||
command.EmployeeId, employeeFullName, workshopName, command.JobId, command.IncludeStatus,
|
||||
command.AddBonusesPay, command.AddYearsPay, command.AddLeavePay,workshop.ComputeOptions,workshop.BonusesOptions);
|
||||
command.AddBonusesPay, command.AddYearsPay, command.AddLeavePay, workshop.ComputeOptions,
|
||||
workshop.BonusesOptions);
|
||||
_leftWorkRepository.Create(leftWork);
|
||||
_leftWorkRepository.SaveChanges();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId);
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId, command.WorkshopId);
|
||||
|
||||
return operation.Succcedded();
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
//public OperationResult Create(CreateLeftWork command)
|
||||
@@ -193,8 +193,8 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
command.EmployeeId, command.JobId, command.IncludeStatus, command.AddBonusesPay, command.AddYearsPay,
|
||||
command.AddLeavePay);
|
||||
_leftWorkRepository.SaveChanges();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId);
|
||||
return operation.Succcedded();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId, command.WorkshopId);
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
public EditLeftWork GetDetails(long id)
|
||||
@@ -214,11 +214,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public List<LeftWorkViewModel> SearchCreateContract(LeftWorkSearchModel searchModel)
|
||||
{
|
||||
|
||||
return _leftWorkRepository.SearchCreateContract(searchModel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<List<LeftWorkViewModel>> searchAsync(LeftWorkSearchModel searchModel)
|
||||
{
|
||||
@@ -228,7 +226,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public string GetBeforeDate(string date)
|
||||
{
|
||||
|
||||
var persianBefore = "";
|
||||
var year = Convert.ToInt32(date.Substring(0, 4));
|
||||
var month = Convert.ToInt32(date.Substring(5, 2));
|
||||
@@ -255,10 +252,8 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void LeftWorkExtension(long contractId, string CStart, string CEnd)
|
||||
{
|
||||
|
||||
var step1 = _contractApplication.GetDetails(contractId);
|
||||
var step2 = _workingHoursApplication.GetByContractId(contractId);
|
||||
var step3 = _workingHoursItemsApplication.GetWorkingHoursItems();
|
||||
@@ -380,13 +375,11 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
ContarctStart = CStart,
|
||||
ContractEnd = CEnd,
|
||||
GetWorkDateHide = step1.GetWorkDate,
|
||||
|
||||
};
|
||||
var step5 = _contractApplication.MandatoryHours(computing);
|
||||
string workingDays = string.Empty;
|
||||
if (step5.NumberOfWorkingDays == "0")
|
||||
{
|
||||
|
||||
workingDays = step5.ComplexNumberOfWorkingDays;
|
||||
}
|
||||
else
|
||||
@@ -477,8 +470,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
OverTimeWorkM = step5.OverTimeWorkM == "0" ? "" : step5.OverTimeWorkM,
|
||||
OverNightWorkH = step5.OverNightWorkH == "0" ? "" : step5.OverNightWorkH,
|
||||
OverNightWorkM = step5.OverNightWorkM == "0" ? "" : step5.OverNightWorkM,
|
||||
|
||||
|
||||
};
|
||||
var resss = _contractApplication.Create(createNew);
|
||||
}
|
||||
@@ -529,7 +520,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
item.LeftWorkDate = string.IsNullOrWhiteSpace(item.LeftWorkDate) ? "1500/01/01" : item.LeftWorkDate;
|
||||
var left = item.LeftWorkDate.ToGeorgianDateTime();
|
||||
var start = item.StartWorkDate.ToGeorgianDateTime();
|
||||
if (_leftWorkRepository.Exists(x => x.StartWorkDate > start && left == null && x.EmployeeId == informationLeftwork.EmployeeId && x.WorkshopId == informationLeftwork.WorkshopId && x.id!=item.Id))
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate > start && left == null && x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("وارد کردن تاریخ پایان کار اجباری است ");
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate == start && x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
@@ -540,17 +533,23 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("شروع به کار قبلی این شخص ترک کار ندارد ");
|
||||
if (_leftWorkRepository.Exists(x => x.StartWorkDate <= start && x.LeftWorkDate < left && x.LeftWorkDate >= start && x.EmployeeId == informationLeftwork.EmployeeId && x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate <= start && x.LeftWorkDate < left && x.LeftWorkDate >= start &&
|
||||
x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("تاریخ وارد شده در بازه زمانی سابقه ترک کار قبلی است");
|
||||
}
|
||||
}
|
||||
|
||||
operation = _leftWorkRepository.CreateLeftWork(informationLeftwork);
|
||||
if (informationLeftwork != null && operation.IsSuccedded) IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(informationLeftwork.EmployeeId);
|
||||
return operation;
|
||||
}
|
||||
operation = _leftWorkRepository.CreateLeftWork(informationLeftwork);
|
||||
if (informationLeftwork != null && operation.IsSuccedded)
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(informationLeftwork.EmployeeId,
|
||||
informationLeftwork.WorkshopId);
|
||||
return operation;
|
||||
}
|
||||
|
||||
public OperationResult CreateLeftWorkByLeftWorkGroups(string employeeFullName, long commandEmployeeId, List<PersonnelCodeViewModel> commandPersonnelCode, List<LeftWorkGroup> leftWorkGroups)
|
||||
public OperationResult CreateLeftWorkByLeftWorkGroups(string employeeFullName, long commandEmployeeId,
|
||||
List<PersonnelCodeViewModel> commandPersonnelCode, List<LeftWorkGroup> leftWorkGroups)
|
||||
{
|
||||
var operation = new OperationResult();
|
||||
|
||||
@@ -560,7 +559,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
{
|
||||
foreach (var item2 in item.LeftWorkViewModels)
|
||||
{
|
||||
item2.LeftWorkDate = string.IsNullOrWhiteSpace(item2.LeftWorkDate) ? "1500/01/01" : item2.LeftWorkDate;
|
||||
item2.LeftWorkDate = string.IsNullOrWhiteSpace(item2.LeftWorkDate)
|
||||
? "1500/01/01"
|
||||
: item2.LeftWorkDate;
|
||||
var left = item2.LeftWorkDate.ToGeorgianDateTime();
|
||||
var start = item2.StartWorkDate.ToGeorgianDateTime();
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
@@ -586,14 +587,16 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
}
|
||||
|
||||
operation = _leftWorkRepository.CreateLeftWorkByLeftWorkGroups(employeeFullName, commandEmployeeId, commandPersonnelCode, leftWorkGroups);
|
||||
if (operation.IsSuccedded) IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(commandEmployeeId);
|
||||
return operation;
|
||||
}
|
||||
operation = _leftWorkRepository.CreateLeftWorkByLeftWorkGroups(employeeFullName, commandEmployeeId,
|
||||
commandPersonnelCode, leftWorkGroups);
|
||||
if (operation.IsSuccedded)
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(commandEmployeeId);
|
||||
return operation;
|
||||
}
|
||||
|
||||
public OperationResult CheckDeleteLeftWork(long workshopId, long employeeId, string date, int type)
|
||||
{
|
||||
return _leftWorkRepository.CheckDeleteLeftWork( workshopId, employeeId, date.ToGeorgianDateTime(),type);
|
||||
return _leftWorkRepository.CheckDeleteLeftWork(workshopId, employeeId, date.ToGeorgianDateTime(), type);
|
||||
}
|
||||
|
||||
public OperationResult CheckEditLeftWork(long workshopId, long employeeId, string date, int type)
|
||||
@@ -607,21 +610,23 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
|
||||
#region Pooya
|
||||
|
||||
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId })
|
||||
.GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId)
|
||||
@@ -632,17 +637,90 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
x.WorkshopId,
|
||||
x.EmployeeId,
|
||||
y.LeftWorkDateGr,
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z =>
|
||||
z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
});
|
||||
|
||||
//shaping up the list to send as parameter to repository
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if(newRollCallRecords.Count > 0)
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x =>
|
||||
new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if (newRollCallRecords.Count > 0)
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
|
||||
|
||||
foreach (var rollCallEmployeeViewModel in rollCallsEmployee)
|
||||
{
|
||||
var maxLeftWork = leftWorks.FirstOrDefault(x => x.WorkshopId == rollCallEmployeeViewModel.WorkshopId);
|
||||
if (maxLeftWork == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var employeeStatus = _rollCallEmployeeRepository.GetBy(rollCallEmployeeViewModel.EmployeeId,
|
||||
rollCallEmployeeViewModel.WorkshopId);
|
||||
var rollCallEmployeeStatusList = employeeStatus.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId, long workshopId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel()
|
||||
{ EmployeeId = employeeId, WorkshopId = workshopId })
|
||||
.Select(x => new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.WorkshopId,
|
||||
LeftWorkDateGr = x.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = x.StartWorkDateGr
|
||||
}).ToList();
|
||||
|
||||
var maxLeftWork = leftWorks.MaxBy(y => y.StartWorkDateGr);
|
||||
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetBy(employeeId, workshopId);
|
||||
|
||||
// var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
// {
|
||||
// x.WorkshopId,
|
||||
// x.EmployeeId,
|
||||
// y.LeftWorkDateGr,
|
||||
// Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
// });
|
||||
|
||||
|
||||
var status = rollCallsEmployee.EmployeesStatus.OrderByDescending(z => z.StartDate)
|
||||
.FirstOrDefault(rollCallEmployeeStatus => rollCallEmployeeStatus.StartDate.Date < maxLeftWork.LeftWorkDateGr
|
||||
&& rollCallEmployeeStatus.EndDate.Date >
|
||||
maxLeftWork.LeftWorkDateGr);
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
var adjust = new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = maxLeftWork.LeftWorkDateGr,
|
||||
RollCallStatusId = status.id
|
||||
};
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates([adjust]);
|
||||
}
|
||||
|
||||
var rollCallEmployeeStatusList = rollCallsEmployee.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -27,26 +27,30 @@ namespace CompanyManagment.Application;
|
||||
|
||||
public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
{
|
||||
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IJobRepository _jobRepository;
|
||||
private readonly ICheckoutRepository _checkoutRepository;
|
||||
private readonly IContractRepository _contractRepository;
|
||||
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IJobRepository _jobRepository;
|
||||
private readonly ICheckoutRepository _checkoutRepository;
|
||||
private readonly IContractRepository _contractRepository;
|
||||
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
|
||||
|
||||
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkTempRepository = leftWorkTempRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_workshopRepository = workshopRepository;
|
||||
_employeeRepository = employeeRepository;
|
||||
_jobRepository = jobRepository;
|
||||
_checkoutRepository = checkoutRepository;
|
||||
_contractRepository = contractRepository;
|
||||
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository,
|
||||
ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository,
|
||||
IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository,
|
||||
IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository,
|
||||
IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkTempRepository = leftWorkTempRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_workshopRepository = workshopRepository;
|
||||
_employeeRepository = employeeRepository;
|
||||
_jobRepository = jobRepository;
|
||||
_checkoutRepository = checkoutRepository;
|
||||
_contractRepository = contractRepository;
|
||||
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
|
||||
_rollCallEmployeeRepository = rollCallEmployeeRepository;
|
||||
}
|
||||
@@ -59,15 +63,16 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
{
|
||||
#region Validation
|
||||
|
||||
if (_leftWorkTempRepository.Exists(x=>x.WorkshopId == command.WorkshopId && x.EmployeeId == employeeId))
|
||||
if (_leftWorkTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && x.EmployeeId == employeeId))
|
||||
{
|
||||
return op.Failed("برای پرسنل وارد شده قبلا درخواست ترک کار ثبت کرده اید");
|
||||
return op.Failed("برای پرسنل وارد شده قبلا درخواست ترک کار ثبت کرده اید");
|
||||
}
|
||||
|
||||
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
@@ -101,7 +106,6 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
//if (leftWork.StartWorkDate >= leftWorkDateGr)
|
||||
//{
|
||||
// return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
|
||||
@@ -121,10 +125,10 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
// return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای قرارداد میباشد");
|
||||
//}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr, lastDayStandingDateGr,
|
||||
var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr,
|
||||
lastDayStandingDateGr,
|
||||
command.WorkshopId, employeeId, leftWork.JobId);
|
||||
|
||||
await _leftWorkTempRepository.CreateAsync(leftWorkTemp);
|
||||
@@ -135,61 +139,63 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
}
|
||||
|
||||
public Task<GetStartWorkTempDetails> GetStartAndLeftWorkDetails(long employeeId, long workshopId)
|
||||
{
|
||||
return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId);
|
||||
}
|
||||
{
|
||||
return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId);
|
||||
}
|
||||
|
||||
public async Task<OperationResult> AcceptStartWork(AcceptStartWorkTemp command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
if (command.StartDateTime.TryToGeorgianDateTime(out var startDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
public async Task<OperationResult> AcceptStartWork(AcceptStartWorkTemp command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
if (command.StartDateTime.TryToGeorgianDateTime(out var startDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
|
||||
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
|
||||
|
||||
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.StartWork)
|
||||
{
|
||||
return op.Failed("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.StartWork)
|
||||
{
|
||||
return op.Failed("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (_leftWorkRepository.Exists(x => x.WorkshopId == leftWorkTemp.WorkshopId && x.EmployeeId == leftWorkTemp.EmployeeId && x.LeftWorkDate >= startDateGr))
|
||||
{
|
||||
return op.Failed("شروع به کار وارد شده با ترک کار های قبلی تداخل دارد");
|
||||
}
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.WorkshopId == leftWorkTemp.WorkshopId && x.EmployeeId == leftWorkTemp.EmployeeId &&
|
||||
x.LeftWorkDate >= startDateGr))
|
||||
{
|
||||
return op.Failed("شروع به کار وارد شده با ترک کار های قبلی تداخل دارد");
|
||||
}
|
||||
|
||||
|
||||
if (_jobRepository.Exists(x => x.id == command.JobId) == false)
|
||||
{
|
||||
return op.Failed("سمت وارد شده نامعتبر است");
|
||||
}
|
||||
if (_jobRepository.Exists(x => x.id == command.JobId) == false)
|
||||
{
|
||||
return op.Failed("سمت وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
var defaultTime = new DateTime(2121, 03, 21);
|
||||
var defaultTime = new DateTime(2121, 03, 21);
|
||||
|
||||
var workshop = _workshopRepository.Get(leftWorkTemp.WorkshopId);
|
||||
var employee = _employeeRepository.Get(leftWorkTemp.EmployeeId);
|
||||
var workshop = _workshopRepository.Get(leftWorkTemp.WorkshopId);
|
||||
var employee = _employeeRepository.Get(leftWorkTemp.EmployeeId);
|
||||
|
||||
var newLeftWork = new LeftWork(defaultTime, startDateGr, leftWorkTemp.WorkshopId, leftWorkTemp.EmployeeId,
|
||||
employee.FullName, workshop.WorkshopFullName, command.JobId, false, false, false, false, "", "");
|
||||
var newLeftWork = new LeftWork(defaultTime, startDateGr, leftWorkTemp.WorkshopId, leftWorkTemp.EmployeeId,
|
||||
employee.FullName, workshop.WorkshopFullName, command.JobId, false, false, false, false, "", "");
|
||||
|
||||
await _leftWorkRepository.CreateAsync(newLeftWork);
|
||||
_leftWorkTempRepository.Remove(leftWorkTemp);
|
||||
var rollCallEmployee = _rollCallEmployeeRepository.GetBy(leftWorkTemp.EmployeeId, leftWorkTemp.WorkshopId);
|
||||
await _leftWorkRepository.CreateAsync(newLeftWork);
|
||||
_leftWorkTempRepository.Remove(leftWorkTemp);
|
||||
var rollCallEmployee = _rollCallEmployeeRepository.GetBy(leftWorkTemp.EmployeeId, leftWorkTemp.WorkshopId);
|
||||
|
||||
var rollCallStatus = rollCallEmployee?.EmployeesStatus.MaxBy(x => x.StartDate);
|
||||
var rollCallStatus = rollCallEmployee?.EmployeesStatus.MaxBy(x => x.StartDate);
|
||||
|
||||
if (rollCallStatus != null)
|
||||
{
|
||||
var startWork = newLeftWork.StartWorkDate;
|
||||
rollCallStatus.Edit(startWork, rollCallStatus.EndDate);
|
||||
if (rollCallStatus != null)
|
||||
{
|
||||
var startWork = newLeftWork.StartWorkDate;
|
||||
rollCallStatus.Edit(startWork, rollCallStatus.EndDate);
|
||||
}
|
||||
|
||||
}
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded();
|
||||
}
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public async Task<OperationResult> AcceptLeftWork(AcceptLeftWorkTemp command)
|
||||
{
|
||||
@@ -237,9 +243,12 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
x.WorkshopId == leftWorkTemp.WorkshopId &&
|
||||
x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr))
|
||||
{
|
||||
return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
|
||||
return op.Failed(
|
||||
"این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
|
||||
}
|
||||
|
||||
var transaction = await _rollCallEmployeeStatusRepository.BeginTransactionAsync();
|
||||
|
||||
leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId,
|
||||
leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay);
|
||||
|
||||
@@ -247,8 +256,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId);
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId, leftWork.WorkshopId);
|
||||
|
||||
await transaction.CommitAsync();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
@@ -259,45 +269,59 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
|
||||
public List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId)
|
||||
{
|
||||
return _leftWorkTempRepository.GetLeftWorksByWorkshopId(workshopId);
|
||||
|
||||
return _leftWorkTempRepository.GetLeftWorksByWorkshopId(workshopId);
|
||||
}
|
||||
|
||||
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId, long workshopId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel()
|
||||
{ EmployeeId = employeeId, WorkshopId = workshopId })
|
||||
.Select(x => new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
WorkshopId = x.WorkshopId,
|
||||
LeftWorkDateGr = x.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = x.StartWorkDateGr
|
||||
}).ToList();
|
||||
|
||||
var maxLeftWork = leftWorks.MaxBy(y => y.StartWorkDateGr);
|
||||
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId)
|
||||
.Where(x => leftWorks.Any(y => y.WorkshopId == x.WorkshopId)).ToList();
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetBy(employeeId, workshopId);
|
||||
|
||||
var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
{
|
||||
x.WorkshopId,
|
||||
x.EmployeeId,
|
||||
y.LeftWorkDateGr,
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
});
|
||||
// var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
// {
|
||||
// x.WorkshopId,
|
||||
// x.EmployeeId,
|
||||
// y.LeftWorkDateGr,
|
||||
// Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
// });
|
||||
|
||||
//shaping up the list to send as parameter to repository
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
|
||||
var status = rollCallsEmployee.EmployeesStatus.OrderByDescending(z => z.StartDate)
|
||||
.FirstOrDefault(rollCallEmployeeStatus => rollCallEmployeeStatus.StartDate.Date < maxLeftWork.LeftWorkDateGr
|
||||
&& rollCallEmployeeStatus.EndDate.Date >
|
||||
maxLeftWork.LeftWorkDateGr);
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if (newRollCallRecords.Count > 0)
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
|
||||
var adjust = new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = maxLeftWork.LeftWorkDateGr,
|
||||
RollCallStatusId = status.id
|
||||
};
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates([adjust]);
|
||||
}
|
||||
|
||||
var rollCallEmployeeStatusList = rollCallsEmployee.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -674,7 +674,7 @@ public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrati
|
||||
result.MonthlyValueAddedTaxStr= tenPercent.ToMoney();
|
||||
var monthlyTotalPaymentDouble = sumOfWorkshopsPaymentDouble + tenPercent;
|
||||
result.MonthlyTotalPaymentStr = monthlyTotalPaymentDouble.ToMoney();
|
||||
var installmentList = InstitutionContractRepository.InstitutionMonthlyInstallmentCaculation(duration, monthlyTotalPaymentDouble, installmentstart);
|
||||
var installmentList = InstitutionContractRepository.InstitutionMonthlyInstallmentCaculation((int)duration, monthlyTotalPaymentDouble, installmentstart);
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
@@ -230,6 +230,8 @@ public class CompanyContext : DbContext
|
||||
|
||||
#endregion
|
||||
|
||||
public DbSet<CheckoutWarningMessage> CheckoutWarningMessages { get; set; }
|
||||
|
||||
public DbSet<CustomizeCheckout> CustomizeCheckouts { get; set; }
|
||||
public DbSet<CustomizeCheckoutTemp> CustomizeCheckoutTemps { get; set; }
|
||||
public DbSet<TaxLeftWorkItem> TaxLeftWorkItems { get; set; }
|
||||
|
||||
@@ -50,12 +50,18 @@ class CheckoutMapping : IEntityTypeConfiguration<Checkout>
|
||||
builder.Property(x => x.TotalDayOfLeaveCompute).HasMaxLength(10);
|
||||
builder.Property(x => x.TotalDayOfYearsCompute).HasMaxLength(10);
|
||||
builder.Property(x => x.TotalDayOfBunosesCompute).HasMaxLength(10);
|
||||
|
||||
|
||||
builder.Property(x => x.EmployeeMandatoryHours).HasTimeSpanConversion();
|
||||
builder.HasOne(x => x.Workshop)
|
||||
.WithMany(x => x.Checkouts)
|
||||
.HasForeignKey(x => x.WorkshopId);
|
||||
|
||||
builder.HasMany(x => x.CheckoutWarningMessageList)
|
||||
.WithOne(x => x.Checkout)
|
||||
.HasForeignKey(x => x.CheckoutId);
|
||||
|
||||
|
||||
builder.OwnsMany(x => x.LoanInstallments, installments =>
|
||||
{
|
||||
installments.Property(x => x.AmountForMonth).HasMaxLength(25);
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using _0_Framework.Application.Enums;
|
||||
using Company.Domain.CheckoutAgg;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace CompanyManagment.EFCore.Mapping;
|
||||
|
||||
public class CheckoutWarningMessageMapping : IEntityTypeConfiguration<CheckoutWarningMessage>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<CheckoutWarningMessage> builder)
|
||||
{
|
||||
builder.ToTable("CheckoutWarningMessage");
|
||||
builder.HasKey(x => x.id);
|
||||
|
||||
builder.Property(x => x.WarningMessage).HasMaxLength(150);
|
||||
|
||||
builder.Property(x => x.TypeOfCheckoutWarning).HasConversion(
|
||||
v => v.ToString(),
|
||||
v => (TypeOfCheckoutWarning)Enum.Parse(typeof(TypeOfCheckoutWarning), v)).HasMaxLength(30);
|
||||
|
||||
builder.HasOne(x => x.Checkout)
|
||||
.WithMany(x => x.CheckoutWarningMessageList)
|
||||
.HasForeignKey(x => x.CheckoutId);
|
||||
}
|
||||
}
|
||||
@@ -12,6 +12,8 @@ public class InstitutionContractAmendmentMapping:IEntityTypeConfiguration<Instit
|
||||
builder.HasKey(x => x.id);
|
||||
|
||||
builder.Property(x => x.VerifyCode).HasMaxLength(10);
|
||||
builder.Property(x => x.VerifierFullName).HasMaxLength(100);
|
||||
builder.Property(x => x.VerifierPhoneNumber).HasMaxLength(20);
|
||||
|
||||
builder.HasOne(x => x.InstitutionContract)
|
||||
.WithMany(x => x.Amendments)
|
||||
|
||||
@@ -30,6 +30,8 @@ public class InstitutionContractMapping : IEntityTypeConfiguration<InstitutionCo
|
||||
builder.Property(x => x.HasValueAddedTax).HasMaxLength(10);
|
||||
|
||||
builder.Property(x => x.VerifyCode).HasMaxLength(20);
|
||||
builder.Property(x => x.VerifierFullName).HasMaxLength(100);
|
||||
builder.Property(x => x.VerifierPhoneNumber).HasMaxLength(20);
|
||||
|
||||
builder.Property(x => x.VerificationStatus).HasConversion<string>().HasMaxLength(122);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,74 @@
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class AddVerifierdetailsininstituioncontractandamendment : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "VerifierFullName",
|
||||
table: "InstitutionContracts",
|
||||
type: "nvarchar(100)",
|
||||
maxLength: 100,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "VerifierPhoneNumber",
|
||||
table: "InstitutionContracts",
|
||||
type: "nvarchar(20)",
|
||||
maxLength: 20,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "VerifierFullName",
|
||||
table: "InstitutionContractAmendments",
|
||||
type: "nvarchar(100)",
|
||||
maxLength: 100,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "VerifierPhoneNumber",
|
||||
table: "InstitutionContractAmendments",
|
||||
type: "nvarchar(20)",
|
||||
maxLength: 20,
|
||||
nullable: true);
|
||||
|
||||
migrationBuilder.AddColumn<DateTime>(
|
||||
name: "VerifyCodeCreation",
|
||||
table: "InstitutionContractAmendments",
|
||||
type: "datetime2",
|
||||
nullable: false,
|
||||
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "VerifierFullName",
|
||||
table: "InstitutionContracts");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "VerifierPhoneNumber",
|
||||
table: "InstitutionContracts");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "VerifierFullName",
|
||||
table: "InstitutionContractAmendments");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "VerifierPhoneNumber",
|
||||
table: "InstitutionContractAmendments");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "VerifyCodeCreation",
|
||||
table: "InstitutionContractAmendments");
|
||||
}
|
||||
}
|
||||
}
|
||||
11070
CompanyManagment.EFCore/Migrations/20251027125514_hasInsuranceShareTheSameAsList_checkoutTable.Designer.cs
generated
Normal file
11070
CompanyManagment.EFCore/Migrations/20251027125514_hasInsuranceShareTheSameAsList_checkoutTable.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,29 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class hasInsuranceShareTheSameAsList_checkoutTable : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "HasInsuranceShareTheSameAsList",
|
||||
table: "Checkouts",
|
||||
type: "bit",
|
||||
nullable: false,
|
||||
defaultValue: false);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "HasInsuranceShareTheSameAsList",
|
||||
table: "Checkouts");
|
||||
}
|
||||
}
|
||||
}
|
||||
11116
CompanyManagment.EFCore/Migrations/20251028121828_CheckoutWarningMessage.Designer.cs
generated
Normal file
11116
CompanyManagment.EFCore/Migrations/20251028121828_CheckoutWarningMessage.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,58 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class CheckoutWarningMessage : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<bool>(
|
||||
name: "IsUpdateNeeded",
|
||||
table: "Checkouts",
|
||||
type: "bit",
|
||||
nullable: false,
|
||||
defaultValue: false);
|
||||
|
||||
migrationBuilder.CreateTable(
|
||||
name: "CheckoutWarningMessage",
|
||||
columns: table => new
|
||||
{
|
||||
id = table.Column<long>(type: "bigint", nullable: false)
|
||||
.Annotation("SqlServer:Identity", "1, 1"),
|
||||
WarningMessage = table.Column<string>(type: "nvarchar(150)", maxLength: 150, nullable: true),
|
||||
CheckoutId = table.Column<long>(type: "bigint", nullable: false),
|
||||
TypeOfCheckoutWarning = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: false)
|
||||
},
|
||||
constraints: table =>
|
||||
{
|
||||
table.PrimaryKey("PK_CheckoutWarningMessage", x => x.id);
|
||||
table.ForeignKey(
|
||||
name: "FK_CheckoutWarningMessage_Checkouts_CheckoutId",
|
||||
column: x => x.CheckoutId,
|
||||
principalTable: "Checkouts",
|
||||
principalColumn: "id",
|
||||
onDelete: ReferentialAction.Cascade);
|
||||
});
|
||||
|
||||
migrationBuilder.CreateIndex(
|
||||
name: "IX_CheckoutWarningMessage_CheckoutId",
|
||||
table: "CheckoutWarningMessage",
|
||||
column: "CheckoutId");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropTable(
|
||||
name: "CheckoutWarningMessage");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "IsUpdateNeeded",
|
||||
table: "Checkouts");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -415,6 +415,9 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.Property<bool>("HasAmountConflict")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<bool>("HasInsuranceShareTheSameAsList")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<bool>("HasRollCall")
|
||||
.HasColumnType("bit");
|
||||
|
||||
@@ -431,6 +434,9 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
b.Property<bool>("IsUpdateNeeded")
|
||||
.HasColumnType("bit");
|
||||
|
||||
b.Property<bool>("LeaveCheckout")
|
||||
.HasColumnType("bit");
|
||||
|
||||
@@ -543,6 +549,33 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.ToTable("Checkouts", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.CheckoutAgg.CheckoutWarningMessage", b =>
|
||||
{
|
||||
b.Property<long>("id")
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasColumnType("bigint");
|
||||
|
||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
|
||||
|
||||
b.Property<long>("CheckoutId")
|
||||
.HasColumnType("bigint");
|
||||
|
||||
b.Property<string>("TypeOfCheckoutWarning")
|
||||
.IsRequired()
|
||||
.HasMaxLength(30)
|
||||
.HasColumnType("nvarchar(30)");
|
||||
|
||||
b.Property<string>("WarningMessage")
|
||||
.HasMaxLength(150)
|
||||
.HasColumnType("nvarchar(150)");
|
||||
|
||||
b.HasKey("id");
|
||||
|
||||
b.HasIndex("CheckoutId");
|
||||
|
||||
b.ToTable("CheckoutWarningMessage", (string)null);
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.ClassifiedSalaryAgg.ClassifiedSalary", b =>
|
||||
{
|
||||
b.Property<long>("id")
|
||||
@@ -3205,6 +3238,14 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasMaxLength(122)
|
||||
.HasColumnType("nvarchar(122)");
|
||||
|
||||
b.Property<string>("VerifierFullName")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("VerifierPhoneNumber")
|
||||
.HasMaxLength(20)
|
||||
.HasColumnType("nvarchar(20)");
|
||||
|
||||
b.Property<string>("VerifyCode")
|
||||
.HasMaxLength(20)
|
||||
.HasColumnType("nvarchar(20)");
|
||||
@@ -3247,10 +3288,21 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.Property<DateTime>("VerificationCreation")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.Property<string>("VerifierFullName")
|
||||
.HasMaxLength(100)
|
||||
.HasColumnType("nvarchar(100)");
|
||||
|
||||
b.Property<string>("VerifierPhoneNumber")
|
||||
.HasMaxLength(20)
|
||||
.HasColumnType("nvarchar(20)");
|
||||
|
||||
b.Property<string>("VerifyCode")
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
b.Property<DateTime>("VerifyCodeCreation")
|
||||
.HasColumnType("datetime2");
|
||||
|
||||
b.HasKey("id");
|
||||
|
||||
b.HasIndex("InstitutionContractId");
|
||||
@@ -7192,6 +7244,17 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.Navigation("Workshop");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.CheckoutAgg.CheckoutWarningMessage", b =>
|
||||
{
|
||||
b.HasOne("Company.Domain.CheckoutAgg.Checkout", "Checkout")
|
||||
.WithMany("CheckoutWarningMessageList")
|
||||
.HasForeignKey("CheckoutId")
|
||||
.OnDelete(DeleteBehavior.Cascade)
|
||||
.IsRequired();
|
||||
|
||||
b.Navigation("Checkout");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.ClientEmployeeWorkshopAgg.ClientEmployeeWorkshop", b =>
|
||||
{
|
||||
b.HasOne("Company.Domain.EmployeeAgg.Employee", "Employee")
|
||||
@@ -10711,6 +10774,11 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
b.Navigation("PetitionsList");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.CheckoutAgg.Checkout", b =>
|
||||
{
|
||||
b.Navigation("CheckoutWarningMessageList");
|
||||
});
|
||||
|
||||
modelBuilder.Entity("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", b =>
|
||||
{
|
||||
b.Navigation("ContractingPartyBankAccounts");
|
||||
|
||||
@@ -524,6 +524,8 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
entity.SetLoanInstallment(command.LoanInstallments, command.InstallmentDeduction);
|
||||
entity.SetCheckoutRollCall(command.CheckoutRollCall);
|
||||
entity.SetEmployeeMandatoryHours(command.EmployeeMandatoryHours);
|
||||
if(command.HasInsuranceShareTheSameAsList)
|
||||
entity.SetInsuranceShare();
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
}
|
||||
@@ -1992,7 +1994,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
// );
|
||||
|
||||
var checkouts =
|
||||
_context.CheckoutSet.Where(x => workshopAcounts.Contains(x.WorkshopId))
|
||||
_context.CheckoutSet.Include(w=>w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId))
|
||||
.Join(_context.Workshops.AsSplitQuery(),
|
||||
ch => ch.WorkshopId,
|
||||
workshop => workshop.id,
|
||||
@@ -2261,7 +2263,14 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
CreationDate = x.ch.CreationDate,
|
||||
EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}",
|
||||
IsBlockCantracingParty = x.contractingParty.IsBlock,
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout,
|
||||
IsUpdateNeeded = x.ch.IsUpdateNeeded,
|
||||
CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm=> new CheckoutWarningMessageModel
|
||||
{
|
||||
WarningMessage = wm.WarningMessage,
|
||||
TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning,
|
||||
|
||||
}).ToList()
|
||||
|
||||
|
||||
}).OrderByDescending(x=>x.Id).Take(3000).ToList().DistinctBy(x => x.Id)
|
||||
@@ -2299,7 +2308,14 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
CreationDate = x.ch.CreationDate,
|
||||
EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}",
|
||||
IsBlockCantracingParty = x.contractingParty.IsBlock,
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout,
|
||||
IsUpdateNeeded = x.ch.IsUpdateNeeded,
|
||||
CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel
|
||||
{
|
||||
WarningMessage = wm.WarningMessage,
|
||||
TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning,
|
||||
|
||||
}).ToList()
|
||||
|
||||
}).OrderByDescending(x => x.Id)
|
||||
.GroupBy(x => x.Id)
|
||||
@@ -2365,7 +2381,14 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
CreationDate = x.ch.CreationDate,
|
||||
EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}",
|
||||
IsBlockCantracingParty = x.contractingParty.IsBlock,
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout,
|
||||
IsUpdateNeeded = x.ch.IsUpdateNeeded,
|
||||
CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel
|
||||
{
|
||||
WarningMessage = wm.WarningMessage,
|
||||
TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning,
|
||||
|
||||
}).ToList()
|
||||
|
||||
}).GroupBy(x => x.Id).Select(x => x.First()).ToList()
|
||||
.OrderByDescending(x => x.ContractStartGr).ToList();
|
||||
@@ -2398,7 +2421,14 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
CreationDate = x.ch.CreationDate,
|
||||
EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}",
|
||||
IsBlockCantracingParty = x.contractingParty.IsBlock,
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout
|
||||
HasSignCheckout = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout,
|
||||
IsUpdateNeeded = x.ch.IsUpdateNeeded,
|
||||
CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel
|
||||
{
|
||||
WarningMessage = wm.WarningMessage,
|
||||
TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning,
|
||||
|
||||
}).ToList()
|
||||
|
||||
}).GroupBy(x => x.Id)
|
||||
.Select(x => x.First()).ToList()
|
||||
|
||||
@@ -10,6 +10,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using AccountManagement.Application.Contracts.SubAccount;
|
||||
using ZstdSharp.Unsafe;
|
||||
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
||||
|
||||
namespace CompanyManagment.EFCore.Repository;
|
||||
@@ -266,14 +267,26 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
|
||||
|
||||
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(long contractingPartyId,FinancialStatementSearchModel searchModel)
|
||||
{
|
||||
var contractingParty = await _context.PersonalContractingParties
|
||||
.FirstOrDefaultAsync(x=>x.id == contractingPartyId);
|
||||
|
||||
if (contractingParty == null)
|
||||
throw new NotFoundException("طرف حساب یافت نشد");
|
||||
|
||||
var financialStatement = await _context.FinancialStatments
|
||||
.Include(x=>x.FinancialTransactionList)
|
||||
.FirstOrDefaultAsync(x=>x.ContractingPartyId == contractingPartyId);
|
||||
|
||||
|
||||
if (financialStatement == null)
|
||||
{
|
||||
throw new NotFoundException("وضعیت مالی مورد نظر یافت نشد");
|
||||
financialStatement = new FinancialStatment(contractingPartyId,contractingParty.FName+" "+contractingParty.LName);
|
||||
|
||||
await _context.AddAsync(financialStatement);
|
||||
await _context.SaveChangesAsync();
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool searched = false;
|
||||
#region Search
|
||||
|
||||
@@ -383,7 +396,8 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
|
||||
};
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
|
||||
list.Reverse();
|
||||
|
||||
var res = new FinancialStatmentDetailsByContractingPartyViewModel()
|
||||
{
|
||||
@@ -392,7 +406,7 @@ public class FinancialStatmentRepository : RepositoryBase<long, FinancialStatmen
|
||||
TotalCredit = financialStatement.FinancialTransactionList.Sum(x => x.Creditor),
|
||||
TotalDebt = financialStatement.FinancialTransactionList.Sum(x => x.Deptor),
|
||||
ContractingPartyName = financialStatement.ContractingPartyName,
|
||||
List = list.OrderByDescending(x=>x.DateTimeGr).ToList(),
|
||||
List = list,
|
||||
};
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ public class FineRepository : RepositoryBase<long, Fine>, IFineRepository
|
||||
}
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
var list = query.ToList().Select(x => new FineViewModel()
|
||||
var list = query.OrderByDescending(x=>x.FineDate).ToList().Select(x => new FineViewModel()
|
||||
{
|
||||
Amount = x.Amount.ToMoney(),
|
||||
AmountDouble = x.Amount,
|
||||
|
||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Collections.Immutable;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
@@ -16,6 +17,7 @@ using Company.Domain.empolyerAgg;
|
||||
using Company.Domain.FinancialStatmentAgg;
|
||||
using Company.Domain.FinancialTransactionAgg;
|
||||
using Company.Domain.InstitutionContractAgg;
|
||||
using Company.Domain.InstitutionContractAmendmentTempAgg;
|
||||
using Company.Domain.InstitutionContractContactInfoAgg;
|
||||
using Company.Domain.InstitutionContractExtensionTempAgg;
|
||||
using Company.Domain.InstitutionPlanAgg;
|
||||
@@ -23,9 +25,11 @@ using Company.Domain.WorkshopAgg;
|
||||
using CompanyManagment.App.Contracts.Employer;
|
||||
using CompanyManagment.App.Contracts.InstitutionContract;
|
||||
using CompanyManagment.App.Contracts.InstitutionContractContactinfo;
|
||||
using CompanyManagment.App.Contracts.Law;
|
||||
using CompanyManagment.App.Contracts.TemporaryClientRegistration;
|
||||
using CompanyManagment.App.Contracts.Workshop;
|
||||
using CompanyManagment.App.Contracts.WorkshopPlan;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata;
|
||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||
@@ -42,9 +46,20 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
private readonly IEmployerRepository _employerRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IMongoCollection<InstitutionContractExtensionTemp> _institutionExtensionTemp;
|
||||
private readonly IMongoCollection<InstitutionContractAmendmentTemp> _institutionAmendmentTemp;
|
||||
private readonly IPlanPercentageRepository _planPercentageRepository;
|
||||
private readonly ISmsService _smsService;
|
||||
|
||||
private readonly InstitutionContratVerificationParty _firstParty = new()
|
||||
{
|
||||
Address = "رشت - خیابان حاجی آیاد - کوچه سپهدار - ساختمان داماش - واحد 17",
|
||||
PhoneNumber = "09111485044",
|
||||
CeoName = "سید حسن مصباح",
|
||||
CompanyNameOrFullName = "نور داد مهر گستر کاسپین",
|
||||
NationalCodeOrNationalId = "14009970584",
|
||||
LegalType = LegalType.Legal
|
||||
};
|
||||
|
||||
public InstitutionContractRepository(CompanyContext context, IEmployerRepository employerRepository,
|
||||
IWorkshopRepository workshopRepository, IMongoDatabase database,
|
||||
IPlanPercentageRepository planPercentageRepository, ISmsService smsService) : base(context)
|
||||
@@ -56,6 +71,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
_smsService = smsService;
|
||||
_institutionExtensionTemp =
|
||||
database.GetCollection<InstitutionContractExtensionTemp>("InstitutionContractExtensionTemp");
|
||||
_institutionAmendmentTemp =
|
||||
database.GetCollection<InstitutionContractAmendmentTemp>("InstitutionContractAmendmentTemp");
|
||||
}
|
||||
|
||||
public EditInstitutionContract GetDetails(long id)
|
||||
@@ -1118,21 +1135,21 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.ContractDateFrom) &&
|
||||
!string.IsNullOrWhiteSpace(searchModel.ContractDateTo))
|
||||
{
|
||||
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateFrom))
|
||||
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateStart))
|
||||
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
|
||||
|
||||
if (!searchModel.ContractDateTo.TryToGeorgianDateTime(out var dateTo))
|
||||
if (!searchModel.ContractDateTo.TryToGeorgianDateTime(out var dateEnd))
|
||||
{
|
||||
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (dateFrom > dateTo)
|
||||
if (dateStart > dateEnd)
|
||||
{
|
||||
throw new BadRequestException("تاریخ شروع نمیتواند بزرگ تر از تاریخ پایان باشد");
|
||||
}
|
||||
|
||||
joinedQuery = joinedQuery.Where(x =>
|
||||
x.contract.ContractStartGr <= dateTo && x.contract.ContractEndGr <= dateFrom);
|
||||
x.contract.ContractStartGr <= dateEnd && x.contract.ContractEndGr >= dateStart);
|
||||
}
|
||||
|
||||
if (searchModel.HasSignature != null)
|
||||
@@ -1240,7 +1257,6 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
TotalCount = await joinedQuery.CountAsync(),
|
||||
List = list.Select(x =>
|
||||
{
|
||||
Console.WriteLine(x.contractingParty.id);
|
||||
var workshops = x.contractingParty.Employers
|
||||
.SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).DistinctBy(w => w.id).ToList();
|
||||
|
||||
@@ -1267,7 +1283,6 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
var workshopDetails = currentStateWorkshops?.Select(w =>
|
||||
{
|
||||
Workshop workshopSelected = null;
|
||||
Console.WriteLine(w.WorkshopId);
|
||||
if (w.WorkshopId != null && workshops.Select(ww => ww.id).Contains(w.WorkshopId.Value))
|
||||
{
|
||||
workshopSelected = workshops.First(ww => ww.id == w.WorkshopId.Value);
|
||||
@@ -1289,6 +1304,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
}
|
||||
};
|
||||
}).ToList() ?? [];
|
||||
|
||||
var employeesCount = _context.LeftWorkList
|
||||
.Where(l => workshops.Select(w => w.id).Contains(l.WorkshopId))
|
||||
.Count(l => l.StartWorkDate <= DateTime.Now && l.LeftWorkDate >= DateTime.Now);
|
||||
return new GetInstitutionContractListItemsViewModel()
|
||||
{
|
||||
ContractAmount = x.contract.ContractAmount,
|
||||
@@ -1303,14 +1322,17 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
Id = x.contract.id,
|
||||
ContractNo = x.contract.ContractNo,
|
||||
ArchiveNo = archiveCode.ToString(),
|
||||
EmployeesCount = _context.LeftWorkList
|
||||
.Where(l => workshops.Select(w => w.id).Contains(l.id))
|
||||
.Count(l => l.StartWorkDate <= DateTime.Now && l.LeftWorkDate >= DateTime.Now),
|
||||
EmployeesCount = employeesCount,
|
||||
EmployerNames = employers.Select(e => e.FullName).ToList(),
|
||||
ListStatus = status,
|
||||
IsExpired = x.contract.ContractEndGr <= endThisMontGr,
|
||||
ContractingPartyId = x.contractingParty.id,
|
||||
Workshops = workshopDetails
|
||||
Workshops = workshopDetails,
|
||||
IsInPersonContract = x.contract.WorkshopGroup?.CurrentWorkshops
|
||||
.Any(y=>y.Services.ContractInPerson)??true,
|
||||
IsOldContract = x.contract.WorkshopGroup?.CurrentWorkshops == null
|
||||
|| x.contract.WorkshopGroup.CurrentWorkshops.Count == 0
|
||||
|| x.contract.WorkshopGroup.CurrentWorkshops.Any(y => y.Price == 0)
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
@@ -1400,23 +1422,22 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.ContractDateFrom) &&
|
||||
!string.IsNullOrWhiteSpace(searchModel.ContractDateTo))
|
||||
{
|
||||
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateFrom))
|
||||
if (!searchModel.ContractDateFrom.TryToGeorgianDateTime(out var dateStart))
|
||||
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
|
||||
|
||||
if (!searchModel.ContractDateTo.TryToGeorgianDateTime(out var dateTo))
|
||||
if (!searchModel.ContractDateTo.TryToGeorgianDateTime(out var dateEnd))
|
||||
{
|
||||
throw new BadRequestException("تاریخ وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (dateFrom > dateTo)
|
||||
if (dateStart > dateEnd)
|
||||
{
|
||||
throw new BadRequestException("تاریخ شروع نمیتواند بزرگ تر از تاریخ پایان باشد");
|
||||
}
|
||||
|
||||
joinedQuery = joinedQuery.Where(x =>
|
||||
x.contract.ContractStartGr <= dateTo && x.contract.ContractEndGr <= dateFrom);
|
||||
x.contract.ContractStartGr <= dateEnd && x.contract.ContractEndGr >= dateStart);
|
||||
}
|
||||
|
||||
if (searchModel.HasSignature != null)
|
||||
{
|
||||
var hasSignature = searchModel.HasSignature == true ? "1" : "0";
|
||||
@@ -1490,10 +1511,10 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
|
||||
#endregion
|
||||
|
||||
var totalAmount = await joinedQuery.SumAsync(x => x.contract.ContractAmount);
|
||||
var totalAmount = await joinedQuery.Where(x=>x.contract.ContractStartGr<=DateTime.Today).SumAsync(x => x.contract.ContractAmount);
|
||||
|
||||
var totalDebt = await _context.FinancialStatments.Include(x => x.FinancialTransactionList)
|
||||
.Where(x => joinedQuery.Select(i => i.contract.ContractingPartyId).Contains(x.ContractingPartyId))
|
||||
.Where(x => joinedQuery.Where(i=>i.contract.ContractStartGr<=DateTime.Today).Select(i => i.contract.ContractingPartyId).Contains(x.ContractingPartyId))
|
||||
.SelectMany(x => x.FinancialTransactionList)
|
||||
.SumAsync(x => x.Deptor - x.Creditor);
|
||||
var counts = new List<InstitutionContractStatusCount>();
|
||||
@@ -1789,15 +1810,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
query.party.IsLegal == "حقیقی" ? query.party.Nationalcode : query.party.NationalId,
|
||||
LegalType = query.party.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal,
|
||||
},
|
||||
FirstParty = new InstitutionContratVerificationParty()
|
||||
{
|
||||
Address = "رشت - خیابان حاجی آیاد - کوچه سپهدار - ساختمان داماش - واحد 17",
|
||||
PhoneNumber = "09111111111",
|
||||
CeoName = "سید حسن مصباح",
|
||||
CompanyNameOrFullName = "نور داد مهر گستر کاسپین",
|
||||
NationalCodeOrNationalId = "1111111111",
|
||||
LegalType = LegalType.Legal
|
||||
}
|
||||
FirstParty =_firstParty
|
||||
};
|
||||
|
||||
return res;
|
||||
@@ -2239,7 +2252,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
extensionNo, workshopsCount, employeeCount,
|
||||
previousInstitutionContract.Description,
|
||||
"NotOfficial", "JobRelation", hasValueAddedTax,
|
||||
payment.Tax.MoneyToDouble(),[],
|
||||
payment.Tax.MoneyToDouble(), [],
|
||||
request.LawId);
|
||||
|
||||
await CreateAsync(entity);
|
||||
@@ -2249,26 +2262,25 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
var workshopDetail = new InstitutionContractWorkshopInitial(
|
||||
workshop.WorkshopName, workshop.RollCall, workshop.RollCallInPerson,
|
||||
workshop.CustomizeCheckout, workshop.ContractAndCheckout,
|
||||
workshop.ContractAndCheckoutInPerson, workshop.Insurance,
|
||||
workshop.ContractAndCheckoutInPerson, workshop.Insurance,
|
||||
workshop.InsuranceInPerson, workshop.CountPerson, workshop.Price);
|
||||
|
||||
|
||||
workshopDetail.SetWorkshopGroup(entity.WorkshopGroup);
|
||||
|
||||
|
||||
if (workshop.WorkshopId != 0)
|
||||
{
|
||||
workshopDetail.SetWorkshopId(workshop.WorkshopId);
|
||||
}
|
||||
// Set parent reference
|
||||
|
||||
|
||||
// Add to the parent's collection
|
||||
entity.WorkshopGroup.InitialWorkshops.Add(workshopDetail);
|
||||
}
|
||||
|
||||
// Save the changes again
|
||||
await SaveChangesAsync();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
FinancialStatment financialStatement;
|
||||
if (_context.FinancialStatments.Any(x => x.ContractingPartyId == contractingParty.id))
|
||||
{
|
||||
@@ -2330,7 +2342,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
await SaveChangesAsync();
|
||||
|
||||
await _smsService.SendInstitutionVerificationLink(contractingParty.Phone, contractingPartyFullName,
|
||||
entity.PublicId);
|
||||
entity.PublicId, contractingParty.id, entity.id);
|
||||
|
||||
|
||||
await SaveChangesAsync();
|
||||
@@ -2346,46 +2358,251 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
.Include(x => x.WorkshopGroup)
|
||||
.ThenInclude(x => x.CurrentWorkshops)
|
||||
.FirstOrDefaultAsync(x => x.id == institutionContractId);
|
||||
|
||||
var workshops = institutionContract.WorkshopGroup.CurrentWorkshops.Select(x => new WorkshopTempViewModel()
|
||||
|
||||
if (institutionContract.WorkshopGroup.CurrentWorkshops.Any(x => x.Price == 0))
|
||||
{
|
||||
Id = x.id,
|
||||
ContractAndCheckout = x.Services.Contract,
|
||||
ContractAndCheckoutInPerson = x.Services.ContractInPerson,
|
||||
CustomizeCheckout = x.Services.CustomizeCheckout,
|
||||
CountPerson = x.PersonnelCount,
|
||||
Insurance = x.Services.Insurance,
|
||||
InsuranceInPerson = x.Services.InsuranceInPerson,
|
||||
RollCall = x.Services.RollCall,
|
||||
WorkshopName = x.WorkshopName,
|
||||
WorkshopServicesAmountStr = x.Price.ToMoney(),
|
||||
WorkshopServicesAmount = x.Price,
|
||||
WorkshopId = x.WorkshopId ?? 0,
|
||||
RollCallInPerson = x.Services.RollCallInPerson,
|
||||
throw new BadRequestException(
|
||||
"این قرارداد قابل ارتقا به صورت ظاهری نیست لطفا به صورت دیتابیسی اقدام به ویرایش کنید");
|
||||
}
|
||||
|
||||
}).ToList();
|
||||
var workshops = institutionContract.WorkshopGroup.CurrentWorkshops
|
||||
.Select(x => new InstitutionContractAmendmentTempPrevWorkshop(x.WorkshopName,x.PersonnelCount,
|
||||
x.Services.Contract,x.Services.ContractInPerson,x.Services.Insurance,
|
||||
x.Services.InsuranceInPerson,x.Services.RollCall,x.Services.RollCallInPerson,
|
||||
x.Services.CustomizeCheckout,x.Price,
|
||||
x.WorkshopId??0,x.id)).ToList();
|
||||
|
||||
|
||||
|
||||
var temp = new InstitutionContractAmendmentTemp(workshops, institutionContractId);
|
||||
|
||||
await _institutionAmendmentTemp.InsertOneAsync(temp);
|
||||
|
||||
var prevWorkshops = workshops.Select(x =>
|
||||
new InstitutionContractAmendmentTempWorkshopViewModel()
|
||||
{
|
||||
WorkshopName = x.WorkshopName,
|
||||
CountPerson = x.CountPerson,
|
||||
ContractAndCheckout = x.ContractAndCheckout,
|
||||
ContractAndCheckoutInPerson = x.ContractAndCheckoutInPerson,
|
||||
Insurance = x.Insurance,
|
||||
InsuranceInPerson = x.InsuranceInPerson,
|
||||
RollCall = x.RollCall,
|
||||
RollCallInPerson = x.RollCallInPerson,
|
||||
CustomizeCheckout = x.CustomizeCheckout,
|
||||
PriceStr = x.Price.ToMoney(),
|
||||
Price = x.Price,
|
||||
WorkshopId = x.WorkshopId,
|
||||
WorkshopTempId = x.Id,
|
||||
CurrentWorkshopId = x.CurrentWorkshopId,
|
||||
TempId =temp.Id
|
||||
})
|
||||
.ToList();
|
||||
var res = new InstitutionContractAmendmentWorkshopsResponse()
|
||||
{
|
||||
Workshops = workshops
|
||||
Workshops = prevWorkshops,
|
||||
TempId = temp.Id
|
||||
};
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request)
|
||||
public async Task<InsitutionContractAmendmentPaymentResponse> GetAmendmentPaymentDetails(
|
||||
InsitutionContractAmendmentPaymentRequest request)
|
||||
{
|
||||
var institutionContract =await _context.InstitutionContractSet
|
||||
.Include(x => x.WorkshopGroup)
|
||||
.ThenInclude(x => x.CurrentWorkshops)
|
||||
.FirstOrDefaultAsync(x => x.id == request.InstitutionContractId);
|
||||
if (institutionContract == null)
|
||||
throw new NotFoundException("قرارداد مالی یافت نشد");
|
||||
var institutionContractAmendmentTemp = await _institutionAmendmentTemp
|
||||
.Find(x=>x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
if (institutionContractAmendmentTemp == null)
|
||||
throw new NotFoundException("دیتای وارد شده نامعتبر است");
|
||||
|
||||
var amendmentStart = DateTime.Now;
|
||||
var amendmentEnd = institutionContract.ContractEndGr;
|
||||
//TODO : محاسبه مبلغ بر اساس کارگاه های انتخاب شده
|
||||
var res = new InsitutionContractAmendmentPaymentResponse();
|
||||
return res;
|
||||
|
||||
var institutionContract = await _context.InstitutionContractSet
|
||||
.Include(x=>x.WorkshopGroup)
|
||||
.ThenInclude(x=>x.CurrentWorkshops)
|
||||
.FirstOrDefaultAsync(x => x.id == institutionContractAmendmentTemp.InstitutionContractId);
|
||||
|
||||
if (institutionContract == null)
|
||||
throw new NotFoundException("قرارداد مؤسسه یافت نشد");
|
||||
|
||||
var amendmentEnd = institutionContract.ContractEndGr;
|
||||
|
||||
var haContractInPerson = institutionContract.WorkshopGroup.CurrentWorkshops
|
||||
.Any(x => x.Services.ContractInPerson);
|
||||
if (!haContractInPerson)
|
||||
{
|
||||
if (institutionContractAmendmentTemp.NewWorkshops.Any(x => x.ContractAndCheckoutInPerson))
|
||||
{
|
||||
throw new BadRequestException("برای قرارداد آنلاین نمیتوان سرویس حضوری انتخاب کرد");
|
||||
}
|
||||
}
|
||||
|
||||
var pc = new PersianCalendar();
|
||||
|
||||
int startYear = pc.GetYear(amendmentStart);
|
||||
int startMonth = pc.GetMonth(amendmentStart);
|
||||
int startDay = pc.GetDayOfMonth(amendmentStart);
|
||||
|
||||
int endYear = pc.GetYear(amendmentEnd);
|
||||
int endMonth = pc.GetMonth(amendmentEnd);
|
||||
int endDay = pc.GetDayOfMonth(amendmentEnd);
|
||||
|
||||
// اختلاف خام ماهها
|
||||
int monthDiff = (endYear - startYear) * 12 + (endMonth - startMonth);
|
||||
|
||||
// اگر حتی چند روز از ماه بعدی هم گذشته بود → رند به بالا
|
||||
if (endDay > startDay)
|
||||
monthDiff++;
|
||||
|
||||
var sumOneMonth = institutionContractAmendmentTemp.NewWorkshops.Sum(x => x.PriceDifference);
|
||||
|
||||
var baseAmount = monthDiff * sumOneMonth;
|
||||
var tax = baseAmount*0.10;
|
||||
var totalPayment = tax+baseAmount;
|
||||
|
||||
|
||||
var res = new InsitutionContractAmendmentPaymentResponse()
|
||||
{
|
||||
ContractStart = amendmentStart.ToFarsi(),
|
||||
ContractEnd = amendmentEnd.ToFarsi(),
|
||||
OneMonthAmount = sumOneMonth.ToMoney(),
|
||||
TotalAmount = baseAmount.ToMoney(),
|
||||
};
|
||||
|
||||
res.OneTime = new InstitutionContractPaymentOneTimeViewModel()
|
||||
{
|
||||
TotalAmount = baseAmount.ToMoney(),
|
||||
PaymentAmount = totalPayment.ToMoney(),
|
||||
Tax = tax.ToMoney()
|
||||
};
|
||||
|
||||
if (haContractInPerson)
|
||||
{
|
||||
var installment = InstitutionMonthlyInstallmentCaculation(monthDiff,totalPayment, amendmentStart.ToFarsi());
|
||||
|
||||
var firstPrevInstallment = installment.First();
|
||||
var lastPrevInstallment = installment.Last();
|
||||
|
||||
var firstInstallment = new MonthlyInstallment()
|
||||
{
|
||||
InstallmentAmountStr = firstPrevInstallment.InstallmentAmountStr,
|
||||
InstallmentCounter = firstPrevInstallment.InstallmentCounter,
|
||||
InstalmentDate = amendmentStart.ToFarsi()
|
||||
};
|
||||
|
||||
var lastInstallment = new MonthlyInstallment()
|
||||
{
|
||||
InstallmentAmountStr = lastPrevInstallment.InstallmentAmountStr,
|
||||
InstallmentCounter = lastPrevInstallment.InstallmentCounter,
|
||||
InstalmentDate = lastPrevInstallment.InstalmentDate
|
||||
};
|
||||
|
||||
installment.Remove(firstPrevInstallment);
|
||||
installment.Remove(lastPrevInstallment);
|
||||
|
||||
installment.Insert(0, firstInstallment);
|
||||
installment.Add(lastInstallment);
|
||||
|
||||
res.Monthly = new InstitutionContractPaymentMonthlyViewModel()
|
||||
{
|
||||
Installments = installment,
|
||||
TotalAmount = baseAmount.ToMoney(),
|
||||
PaymentAmount = totalPayment.ToMoney(),
|
||||
Tax = tax.ToMoney()
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InsertAmendmentTempWorkshopResponse> InsertAmendmentTempWorkshops(
|
||||
InstitutionContractAmendmentTempWorkshopViewModel request)
|
||||
{
|
||||
var amendmentTemp =await _institutionAmendmentTemp
|
||||
.Find(x=> x.Id == request.TempId).FirstOrDefaultAsync();
|
||||
|
||||
if (amendmentTemp == null)
|
||||
throw new BadRequestException("دیتای وارد شده نامعتبر است");
|
||||
|
||||
var workshopTemp = amendmentTemp.NewWorkshops
|
||||
.FirstOrDefault(x => x.Id == request.WorkshopTempId);
|
||||
|
||||
var planForWorkshop = new WorkshopTempViewModel()
|
||||
{
|
||||
WorkshopName = request.WorkshopName,
|
||||
CountPerson = request.CountPerson,
|
||||
ContractAndCheckout = request.ContractAndCheckout,
|
||||
ContractAndCheckoutInPerson = request.ContractAndCheckoutInPerson,
|
||||
Insurance = request.Insurance,
|
||||
InsuranceInPerson = request.InsuranceInPerson,
|
||||
RollCall = request.RollCall,
|
||||
RollCallInPerson = request.RollCallInPerson,
|
||||
CustomizeCheckout = request.CustomizeCheckout
|
||||
};
|
||||
var price = _planPercentageRepository.GetInstitutionPlanForWorkshop(planForWorkshop)
|
||||
.OnlineAndInPersonSumAmountDouble;
|
||||
|
||||
if (workshopTemp == null)
|
||||
{
|
||||
var newWorkshopTemp = new InstitutionContractAmendmentTempNewWorkshop(request.WorkshopName,
|
||||
request.CountPerson,
|
||||
request.ContractAndCheckout, request.ContractAndCheckoutInPerson,
|
||||
request.Insurance, request.InsuranceInPerson,
|
||||
request.RollCall, request.RollCallInPerson,
|
||||
request.CustomizeCheckout, price,
|
||||
request.WorkshopId,0,price);
|
||||
|
||||
workshopTemp = newWorkshopTemp;
|
||||
|
||||
|
||||
amendmentTemp.NewWorkshops.Add(newWorkshopTemp);
|
||||
|
||||
await _institutionAmendmentTemp
|
||||
.ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp);
|
||||
}
|
||||
else
|
||||
{
|
||||
amendmentTemp.NewWorkshops.Remove(workshopTemp);
|
||||
|
||||
var differencePrice = price - workshopTemp.Price;
|
||||
workshopTemp.Edit(request.WorkshopName, request.CountPerson,
|
||||
request.ContractAndCheckout, request.ContractAndCheckoutInPerson,
|
||||
request.Insurance, request.InsuranceInPerson,
|
||||
request.RollCall,
|
||||
request.CustomizeCheckout, price,differencePrice);
|
||||
|
||||
amendmentTemp.NewWorkshops.Add(workshopTemp);
|
||||
|
||||
await _institutionAmendmentTemp
|
||||
.ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp);
|
||||
}
|
||||
|
||||
return new InsertAmendmentTempWorkshopResponse()
|
||||
{
|
||||
WorkshopTempId = workshopTemp.Id,
|
||||
Amount = workshopTemp.PriceDifference.ToMoney()
|
||||
};
|
||||
}
|
||||
|
||||
public async Task RemoveAmendmentWorkshops(Guid workshopTempId)
|
||||
{
|
||||
var amendmentTemp = await _institutionAmendmentTemp.Find(x => x.NewWorkshops.Any(w => w.Id == workshopTempId))
|
||||
.FirstOrDefaultAsync();
|
||||
if (amendmentTemp == null)
|
||||
throw new BadRequestException("دیتای وارد شده نامعتبر است");
|
||||
var workshopTemp = amendmentTemp.NewWorkshops.FirstOrDefault(x => x.Id == workshopTempId);
|
||||
if (workshopTemp == null)
|
||||
throw new BadRequestException("دیتای وارد شده نامعتبر است");
|
||||
|
||||
if (workshopTemp.CurrentWorkshopId!=0)
|
||||
throw new BadRequestException("شما نمی توانید این کارگاه را حذف کنید زیرا در قرارداد اصلی وجود دارد");
|
||||
|
||||
amendmentTemp.NewWorkshops.Remove(workshopTemp);
|
||||
|
||||
await _institutionAmendmentTemp.ReplaceOneAsync(x => x.Id == amendmentTemp.Id, amendmentTemp);
|
||||
|
||||
}
|
||||
public async Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,
|
||||
string selected)
|
||||
@@ -2405,10 +2622,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
Id = x.id,
|
||||
Text = x.WorkshopFullName
|
||||
});
|
||||
var employers = _context.Employers.Select(x => new InstitutionContractSelectListViewModel()
|
||||
//کارفرما ها به غیر از آن هایی که به طرف حساب ---- وصل هستند
|
||||
var employers = _context.Employers.Where(x=>x.ContractingPartyId != 30428)
|
||||
.Select(x => new InstitutionContractSelectListViewModel()
|
||||
{
|
||||
Id = x.id,
|
||||
Text = x.FName + " " + x.LName
|
||||
Text = x.FullName
|
||||
});
|
||||
var representatives = _context.RepresentativeSet.Select(x => new InstitutionContractSelectListViewModel()
|
||||
{
|
||||
@@ -2441,6 +2660,113 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
|
||||
}
|
||||
|
||||
public async Task<List<InstitutionContractPrintViewModel>> PrintAllAsync(List<long> ids)
|
||||
{
|
||||
var query =_context.InstitutionContractSet
|
||||
.Include(x=>x.WorkshopGroup)
|
||||
.ThenInclude(x=>x.InitialWorkshops)
|
||||
.Include(x=>x.WorkshopGroup)
|
||||
.ThenInclude(x=>x.CurrentWorkshops)
|
||||
.Where(x=>ids.Contains(x.id));
|
||||
|
||||
var contractingPartyIds = query.Select(x => x.ContractingPartyId).ToList();
|
||||
var contractingParties = await _context.PersonalContractingParties
|
||||
.Where(x => contractingPartyIds.Contains(x.id))
|
||||
.ToListAsync();
|
||||
|
||||
var list = query.ToList();
|
||||
|
||||
if (list.Count == 0)
|
||||
throw new NotFoundException("قرارداد مؤسسه یافت نشد");
|
||||
|
||||
var res = new List<InstitutionContractPrintViewModel>();
|
||||
foreach (var institution in list)
|
||||
{
|
||||
var contractingParty = contractingParties.FirstOrDefault(x => x.id == institution.ContractingPartyId);
|
||||
|
||||
if (contractingParty == null)
|
||||
{
|
||||
throw new NotFoundException("طرف حساب یافت نشد");
|
||||
}
|
||||
|
||||
var law = await _context.Laws
|
||||
.FirstOrDefaultAsync(x => x.id == institution.LawId);
|
||||
|
||||
|
||||
var secondParty = new InstitutionContratVerificationParty()
|
||||
{
|
||||
Address = contractingParty.Address,
|
||||
PhoneNumber = contractingParty.Phone,
|
||||
CeoName = contractingParty.IsLegal == "حقیقی"
|
||||
? $"{contractingParty.FName} {contractingParty.LName}"
|
||||
: $"{contractingParty.CeoFName} {contractingParty.CeoLName}",
|
||||
CompanyNameOrFullName = contractingParty.IsLegal == "حقیقی"
|
||||
? $"{contractingParty.FName} {contractingParty.LName}"
|
||||
: contractingParty.LName,
|
||||
NationalCodeOrNationalId =
|
||||
contractingParty.IsLegal == "حقیقی" ? contractingParty.Nationalcode : contractingParty.NationalId,
|
||||
LegalType = contractingParty.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal,
|
||||
};
|
||||
|
||||
var lawViewModel = new LawViewModel()
|
||||
{
|
||||
Id = law.id,
|
||||
CreatedAt = law.CreationDate,
|
||||
HeadTitle = law.HeadTitle,
|
||||
IsActive = law.IsActive,
|
||||
Items = law.Items.Select(x => new LawItemViewModel()
|
||||
{
|
||||
Details = x.Details,
|
||||
Header = x.Header
|
||||
}).ToList(),
|
||||
Notifications = law.Notifications,
|
||||
Title = law.Title,
|
||||
Type = law.Type,
|
||||
Version = law.Version
|
||||
};
|
||||
|
||||
var item = new InstitutionContractPrintViewModel()
|
||||
{
|
||||
ContractStart = institution.ContractStartFa,
|
||||
ContractEnd = institution.ContractEndFa,
|
||||
ContractNo = institution.ContractNo,
|
||||
CreationDate = institution.CreationDate.ToFarsi(),
|
||||
FirstParty = _firstParty,
|
||||
SecondParty = secondParty,
|
||||
LawViewModel = lawViewModel,
|
||||
Obligation = institution.Obligation.ToMoney(),
|
||||
PaymentPrice = institution.TotalAmount.ToMoney(),
|
||||
TotalPrice = (institution.TotalAmount - institution.ValueAddedTax).ToMoney(),
|
||||
TaxPrice = institution.ValueAddedTax.ToMoney(),
|
||||
VerifierFullName = institution.VerifierFullName,
|
||||
VerifierPhoneNumber = institution.VerifierPhoneNumber,
|
||||
VerifyCode = institution.VerifyCode,
|
||||
VerifyDate = institution.VerifyCodeCreation.ToFarsi(),
|
||||
VerifyTime = institution.VerifyCodeCreation.ToString("HH:mm:ss"),
|
||||
Workshops = institution.WorkshopGroup.CurrentWorkshops
|
||||
.Select(x => new GetInstitutionVerificationDetailsWorkshopsViewModel()
|
||||
{
|
||||
Name = x.WorkshopName,
|
||||
PersonnelCount = x.PersonnelCount,
|
||||
Services = new WorkshopServicesViewModel()
|
||||
{
|
||||
Contract = x.Services.Contract,
|
||||
ContractInPerson = x.Services.ContractInPerson,
|
||||
CustomizeCheckout = x.Services.CustomizeCheckout,
|
||||
Insurance = x.Services.Insurance,
|
||||
InsuranceInPerson = x.Services.InsuranceInPerson,
|
||||
RollCall = x.Services.RollCall,
|
||||
RollCallInPerson = x.Services.RollCallInPerson
|
||||
},
|
||||
Price = x.Price.ToMoney()
|
||||
}).ToList()
|
||||
};
|
||||
res.Add(item);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
private InstitutionContractExtensionPaymentResponse CalculateInPersonPayment(
|
||||
InstitutionContractExtensionPlanDetail selectedPlan, double baseAmount, double tenPercent,
|
||||
@@ -2464,7 +2790,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
// حالت پرداخت اقساطی
|
||||
var monthlyTax = baseAmount * 0.10;
|
||||
var monthlyTotal = baseAmount + monthlyTax;
|
||||
var installments = InstitutionMonthlyInstallmentCaculation(duration, monthlyTotal, selectedPlan.ContractStart);
|
||||
var installments = InstitutionMonthlyInstallmentCaculation((int)duration, monthlyTotal, selectedPlan.ContractStart);
|
||||
|
||||
res.Monthly = new()
|
||||
{
|
||||
@@ -2546,7 +2872,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
return result;
|
||||
}
|
||||
|
||||
public static List<MonthlyInstallment> InstitutionMonthlyInstallmentCaculation(InstitutionContractDuration duration,
|
||||
public static List<MonthlyInstallment> InstitutionMonthlyInstallmentCaculation(int duration,
|
||||
double monthlyTotalPaymentDouble,
|
||||
string installmentstart)
|
||||
{
|
||||
@@ -2554,7 +2880,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
var installmentList = new List<MonthlyInstallment>();
|
||||
|
||||
|
||||
int instalmentCount = (int)duration;
|
||||
int instalmentCount = duration;
|
||||
var instalmentAmount = monthlyTotalPaymentDouble / instalmentCount;
|
||||
int currentInstallmentStartDay = int.Parse(installmentstart.Substring(8, 2));
|
||||
bool endOfMonth = currentInstallmentStartDay == 31;
|
||||
@@ -2614,6 +2940,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region CustomViewModels
|
||||
|
||||
|
||||
@@ -7,11 +7,14 @@ using System.Runtime.CompilerServices;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Enums;
|
||||
using _0_Framework.InfraStructure;
|
||||
using AccountMangement.Infrastructure.EFCore;
|
||||
using Company.Domain.CheckoutAgg;
|
||||
using Company.Domain.EmployeeAgg;
|
||||
using Company.Domain.EmployeeChildrenAgg;
|
||||
using Company.Domain.EmployeeInsurancListDataAgg;
|
||||
using Company.Domain.empolyerAgg;
|
||||
using Company.Domain.InsuranceListAgg;
|
||||
using Company.Domain.InsuranceWorkshopAgg;
|
||||
using Company.Domain.InsuranceYearlySalaryAgg;
|
||||
@@ -132,6 +135,11 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
var id = insuranceListObj.id;
|
||||
if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0)
|
||||
{
|
||||
var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month);
|
||||
|
||||
var checkouts = _context.CheckoutSet.Where(x =>
|
||||
x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName &&
|
||||
x.IsActiveString == "true");
|
||||
foreach (var item in command.EmployeeInsurancListDataList)
|
||||
{
|
||||
if (item.EmployeeInsurancListDataId == 0)
|
||||
@@ -158,6 +166,29 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
item.LeftWorkDate, item.JobId, item.IncludeStatus, item.BaseYears,
|
||||
item.MarriedAllowance, item.OverTimePay, item.FamilyAllowance);
|
||||
}
|
||||
|
||||
|
||||
if (checkouts.Any())
|
||||
{
|
||||
var checkout = checkouts.FirstOrDefault(x => x.EmployeeId == item.EmployeeId);
|
||||
if (checkout != null)
|
||||
{
|
||||
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
|
||||
{
|
||||
checkout.SetUpdateNeeded();
|
||||
if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare))
|
||||
{
|
||||
var createWarrning =
|
||||
new CheckoutWarningMessage(
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
_context.CheckoutWarningMessages.Add(createWarrning);
|
||||
}
|
||||
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
_employeeInsurancListDataRepository.SaveChanges();
|
||||
@@ -698,6 +729,11 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
var id = insuranceListObj.id;
|
||||
if (command.EmployeeInsurancListDataList != null && command.EmployeeInsurancListDataList.Count > 0)
|
||||
{
|
||||
var farisMonthName = Tools.ToFarsiMonthByNumber(command.Month);
|
||||
|
||||
var checkouts = _context.CheckoutSet.Where(x =>
|
||||
x.WorkshopId == command.WorkshopId && x.Year == command.Year && x.Month == farisMonthName &&
|
||||
x.IsActiveString == "true");
|
||||
foreach (var item in command.EmployeeInsurancListDataList)
|
||||
{
|
||||
var employeeInsurancListData = new EmployeeInsurancListData(id,
|
||||
@@ -711,6 +747,28 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
item.LeftWorkDate, item.JobId, item.IncludeStatus, item.BaseYears, item.MarriedAllowance,
|
||||
item.OverTimePay, item.FamilyAllowance);
|
||||
_employeeInsurancListDataRepository.Create(employeeInsurancListData);
|
||||
if (checkouts.Any())
|
||||
{
|
||||
var checkout = checkouts.FirstOrDefault(x => x.EmployeeId == item.EmployeeId);
|
||||
if (checkout != null)
|
||||
{
|
||||
if (item.InsuranceShare.ToMoney() != checkout.InsuranceDeduction.ToMoney())
|
||||
{
|
||||
checkout.SetUpdateNeeded();
|
||||
if (!_context.CheckoutWarningMessages.Any(x => x.CheckoutId == checkout.id && x.TypeOfCheckoutWarning != TypeOfCheckoutWarning.InsuranceEmployeeShare))
|
||||
{
|
||||
var createWarrning =
|
||||
new CheckoutWarningMessage(
|
||||
"مبلغ بیمه سهم کارگر با مبلغ محاسبه شده در لیست بیمه مغایرت دارد", checkout.id, TypeOfCheckoutWarning.InsuranceEmployeeShare);
|
||||
_context.CheckoutWarningMessages.Add(createWarrning);
|
||||
}
|
||||
|
||||
_context.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_employeeInsurancListDataRepository.SaveChanges();
|
||||
@@ -1411,6 +1469,27 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
}
|
||||
|
||||
|
||||
public List<EmployeeInsurancListDataViewModel> EmployeeInsuranceDataBy(DateTime startDate, long workshopId)
|
||||
{
|
||||
var res = _context.InsuranceListSet
|
||||
.Where(x => x.StartDate <= startDate && x.EndDate >= startDate &&
|
||||
x.WorkshopId == workshopId)
|
||||
.Join(_context.EmployeeInsurancListDataSet,
|
||||
insuranceList => insuranceList.id,
|
||||
employeeInsurancListData => employeeInsurancListData.InsuranceListId,
|
||||
(insuranceList, employeeInsurancListData) => new EmployeeInsurancListDataViewModel
|
||||
{
|
||||
InsuranceListId = insuranceList.id,
|
||||
EmployeeId = employeeInsurancListData.EmployeeId,
|
||||
WorkingDays = employeeInsurancListData.WorkingDays,
|
||||
BenefitsIncludedNonContinuous = employeeInsurancListData.BenefitsIncludedNonContinuous,
|
||||
InsuranceShare = employeeInsurancListData.InsuranceShare,
|
||||
});
|
||||
|
||||
return res.ToList();
|
||||
}
|
||||
|
||||
|
||||
public List<EmployeeDetailsForInsuranceListViewModel> GetEmployeeInsuranceDataForEdit(long insuranceListId,
|
||||
DateTime startDate, DateTime endDate)
|
||||
{
|
||||
@@ -1724,9 +1803,86 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
.Include(x => x.LeftWorkInsurances)
|
||||
.Where(x => x.LeftWorkInsurances.Any(l => l.StartWorkDate <= firstDayOfMonth &&
|
||||
(l.LeftWorkDate == null || l.LeftWorkDate >= firstDayOfMonth)));
|
||||
|
||||
|
||||
var query = notCreatedWorkshop.Select(result=>new InsuranceListViewModel
|
||||
{
|
||||
Year = searchModel.Year,
|
||||
Month = searchModel.Month,
|
||||
WorkShopId = result.id,
|
||||
WorkShopCode = result.InsuranceWorkshopInfo != null
|
||||
? result.InsuranceWorkshopInfo.InsuranceCode
|
||||
: result.InsuranceCode,
|
||||
WorkShopName = result.InsuranceWorkshopInfo != null
|
||||
? result.InsuranceWorkshopInfo.WorkshopName
|
||||
: result.WorkshopFullName,
|
||||
TypeOfInsuranceSend = result.TypeOfInsuranceSend == "NormalList" ? "عادی" :
|
||||
result.TypeOfInsuranceSend == "Govermentlist" ? "کمک دولت" :
|
||||
result.TypeOfInsuranceSend == "Familylist" ? "خانوادگی" : "",
|
||||
FixedSalary = result.FixedSalary,
|
||||
StrFixedSalary = result.FixedSalary ? "دارد" : "ندارد",
|
||||
EmployerName = result.InsuranceWorkshopInfo != null
|
||||
? result.InsuranceWorkshopInfo.EmployerName
|
||||
: result.WorkshopFullName,
|
||||
Branch = "",
|
||||
City = "",
|
||||
ArchiveCode = result.ArchiveCode,
|
||||
});
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.Month) && searchModel.Month != "0")
|
||||
query = query.Where(x => x.Month == searchModel.Month).OrderByDescending(x => x.WorkShopName)
|
||||
.ThenByDescending(x => x.EmployerName).ThenByDescending(x => x.Year);
|
||||
|
||||
var workshopList = await notCreatedWorkshop.Skip(searchModel.PageIndex).Take(30).ToListAsync();
|
||||
var workshopIds = workshopList.Select(x=>x.id);
|
||||
if (!string.IsNullOrEmpty(searchModel.Year) && searchModel.Year != "0")
|
||||
query = query.Where(x => x.Year == searchModel.Year).OrderByDescending(x => x.EmployerName)
|
||||
.ThenByDescending(x => x.WorkShopName).ThenByDescending(x => x.Month);
|
||||
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.WorkShopCode))
|
||||
query = query.Where(x => x.WorkShopCode == searchModel.WorkShopCode).OrderByDescending(x => x.Year)
|
||||
.ThenByDescending(x => x.Month).ThenByDescending(x => x.EmployerName);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.WorkShopName))
|
||||
query = query.Where(x => x.WorkShopName.Contains(searchModel.WorkShopName))
|
||||
.OrderByDescending(x => x.EmployerName).ThenByDescending(x => x.Year).OrderByDescending(x => x.Month);
|
||||
|
||||
|
||||
if (searchModel.WorkshopId > 0)
|
||||
{
|
||||
var workshopName = query.FirstOrDefault(u => u.WorkShopId == searchModel.WorkshopId)?.WorkShopName;
|
||||
|
||||
query = query.Where(x => x.WorkShopName.Contains(workshopName)).OrderByDescending(x => x.EmployerName)
|
||||
.ThenByDescending(x => x.Year).ThenByDescending(x => x.Month);
|
||||
}
|
||||
|
||||
if (searchModel.EmployerId > 0)
|
||||
{
|
||||
var employerName = query.FirstOrDefault(u => u.EmployerId == searchModel.EmployerId)?.EmployerName;
|
||||
query = query.Where(x => x.EmployerName.Contains(employerName)).OrderByDescending(x => x.EmployerName)
|
||||
.ThenByDescending(x => x.Year).ThenByDescending(x => x.Month);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.EmployerName))
|
||||
query = query.Where(x => x.EmployerName.Contains(searchModel.EmployerName))
|
||||
.OrderByDescending(x => x.EmployerName).ThenByDescending(x => x.Year).OrderByDescending(x => x.Month);
|
||||
|
||||
|
||||
if (searchModel.FixedSalary != null)
|
||||
query = query.Where(x => x.FixedSalary == searchModel.FixedSalary);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.TypeOfInsuranceSend) && searchModel.TypeOfInsuranceSend != "0")
|
||||
query = query.Where(x => x.TypeOfInsuranceSend == searchModel.TypeOfInsuranceSend);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.City) && searchModel.City != "0")
|
||||
query = query.Where(x => x.City == searchModel.City);
|
||||
|
||||
if (!string.IsNullOrEmpty(searchModel.Branch))
|
||||
query = query.Where(x => x.Branch.Contains(searchModel.Branch));
|
||||
|
||||
|
||||
var workshopList = await query.Skip(searchModel.PageIndex).Take(30).ToListAsync();
|
||||
var workshopIds = workshopList.Select(x=>x.WorkShopId);
|
||||
|
||||
var employers =await _context.WorkshopEmployers
|
||||
.Where(x=>workshopIds.Contains(x.WorkshopId))
|
||||
@@ -1735,20 +1891,16 @@ public class InsuranceListRepository : RepositoryBase<long, InsuranceList>, IIns
|
||||
|
||||
var res = workshopList.Select(x =>
|
||||
{
|
||||
var employer = employers.FirstOrDefault(e => e.WorkshopId ==x.id)?.Employer;
|
||||
var employer = employers.FirstOrDefault(e => e.WorkshopId ==x.WorkShopId)?.Employer;
|
||||
|
||||
return new InsuranceListViewModel
|
||||
{
|
||||
WorkShopId = x.id,
|
||||
WorkShopCode = x.InsuranceCode,
|
||||
WorkShopName = x.InsuranceWorkshopInfo != null
|
||||
? x.InsuranceWorkshopInfo.WorkshopName
|
||||
: x.WorkshopFullName,
|
||||
WorkShopId = x.WorkShopId,
|
||||
WorkShopCode = x.WorkShopCode,
|
||||
WorkShopName = x.WorkShopName,
|
||||
EmployerName = employer != null
|
||||
? employer.FullName
|
||||
: (x.InsuranceWorkshopInfo != null
|
||||
? x.InsuranceWorkshopInfo.EmployerName
|
||||
: x.WorkshopFullName),
|
||||
: (x.EmployerName),
|
||||
Year = searchModel.Year,
|
||||
Month = searchModel.Month,
|
||||
TypeOfInsuranceSend = x.TypeOfInsuranceSend == "NormalList" ? "عادی" :
|
||||
|
||||
@@ -97,7 +97,7 @@ public class LoanRepository : RepositoryBase<long, Loan>, ILoanRepository
|
||||
query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate);
|
||||
}
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
var list = query.ToList().Select(x => new LoanViewModel()
|
||||
var list = query.OrderByDescending(x=>x.StartInstallmentPayment).ToList().Select(x => new LoanViewModel()
|
||||
{
|
||||
Amount = x.Amount.ToMoney(),
|
||||
AmountDouble = x.Amount,
|
||||
|
||||
@@ -6,6 +6,7 @@ using _0_Framework.InfraStructure;
|
||||
using Company.Domain.RewardAgg;
|
||||
using CompanyManagment.App.Contracts.Reward;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using SharpCompress.Compressors.Xz;
|
||||
|
||||
namespace CompanyManagment.EFCore.Repository;
|
||||
|
||||
@@ -119,12 +120,12 @@ public class RewardRepository : RepositoryBase<long, Reward>, IRewardRepository
|
||||
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
|
||||
var list = query.ToList().Select(x => new RewardViewModel
|
||||
var list = query.ToList().OrderByDescending(x=>x.GrantDate).Select(x => new RewardViewModel
|
||||
{
|
||||
WorkshopId = x.WorkshopId,
|
||||
Amount = x.Amount.ToMoney(),
|
||||
AmountDouble = x.Amount,
|
||||
Description = x.Description,
|
||||
Description = x.Description ?? "",
|
||||
EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName,
|
||||
EmployeeId = x.EmployeeId,
|
||||
GrantDateFa = x.GrantDate.ToFarsi(),
|
||||
|
||||
@@ -478,7 +478,8 @@ public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>
|
||||
|
||||
public RollCallEmployee GetBy(long employeeId, long workshopId)
|
||||
{
|
||||
return _context.RollCallEmployees.Include(x => x.EmployeesStatus).FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
|
||||
return _context.RollCallEmployees.Include(x => x.EmployeesStatus)
|
||||
.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -1517,7 +1517,9 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
|
||||
StartDate = y.StartDate.Value.ToString("HH:mm"),
|
||||
EndDate = y.EndDate!.Value.ToString("HH:mm"),
|
||||
StartDateGr = y.StartDate.Value,
|
||||
EndDateGr = y.EndDate.Value
|
||||
EndDateGr = y.EndDate.Value,
|
||||
EntryTimeDifferences = CalculateEntryTimeDifferences( y.EarlyEntryDuration, y.LateEntryDuration),
|
||||
ExitTimeDifferences = CalculateExitTimeDifferences(y.EarlyExitDuration, y.LateExitDuration)
|
||||
}),
|
||||
TotalWorkingHoursSpan = new TimeSpan(rollCallsList.Where(y => x.Date == y.ShiftDate.Date)
|
||||
.Sum(y => (y.EndDate!.Value - y.StartDate.Value).Ticks)),
|
||||
|
||||
@@ -1,28 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices.ComTypes;
|
||||
using System.Security.AccessControl;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Application.Sms;
|
||||
using Company.Domain.SmsResultAgg;
|
||||
using CompanyManagment.App.Contracts.SmsResult;
|
||||
using IPE.SmsIrClient;
|
||||
using IPE.SmsIrClient.Models.Requests;
|
||||
using IPE.SmsIrClient.Models.Results;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using static System.Runtime.InteropServices.JavaScript.JSType;
|
||||
|
||||
|
||||
namespace _0_Framework.Application.Sms;
|
||||
namespace CompanyManagment.EFCore.Services;
|
||||
|
||||
public class SmsService : ISmsService
|
||||
{
|
||||
private readonly IConfiguration _configuration;
|
||||
private readonly ISmsResultRepository _smsResultRepository;
|
||||
public SmsIr SmsIr { get; set; }
|
||||
|
||||
|
||||
public SmsService(IConfiguration configuration)
|
||||
public SmsService(IConfiguration configuration, ISmsResultRepository smsResultRepository)
|
||||
{
|
||||
_configuration = configuration;
|
||||
_smsResultRepository = smsResultRepository;
|
||||
SmsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
|
||||
}
|
||||
@@ -204,8 +206,7 @@ public class SmsService : ISmsService
|
||||
int pageSize = 100; // max: 100
|
||||
SmsIr smsIr = new SmsIr("Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa");
|
||||
var response = await smsIr.GetArchivedReportAsync(pageNumber, pageSize, unixTimestamp, unixTimestamp2);
|
||||
|
||||
|
||||
|
||||
MessageReportResult[] messages = response.Data;
|
||||
foreach (var message in messages)
|
||||
{
|
||||
@@ -331,7 +332,7 @@ public class SmsService : ISmsService
|
||||
}
|
||||
|
||||
}
|
||||
public async Task<bool> SendInstitutionVerificationLink(string number,string fullName, Guid institutionId)
|
||||
public async Task<bool> SendInstitutionVerificationLink(string number, string fullName, Guid institutionId, long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var guidStr=institutionId.ToString();
|
||||
var firstPart = guidStr.Substring(0, 15);
|
||||
@@ -342,15 +343,25 @@ public class SmsService : ISmsService
|
||||
new("CODE1",firstPart),
|
||||
new("CODE2",secondPart)
|
||||
});
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "لینک تاییدیه قرارداد مالی",
|
||||
fullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
|
||||
public async Task<bool> SendInstitutionVerificationCode(string number, string code)
|
||||
public async Task<bool> SendInstitutionVerificationCode(string number, string code, string contractingPartyFullName,
|
||||
long contractingPartyId, long institutionContractId)
|
||||
{
|
||||
var verificationSendResult =await SmsIr.VerifySendAsync(number, 965348, new VerifySendParameter[]
|
||||
{
|
||||
new("VERIFYCODE", code)
|
||||
});
|
||||
|
||||
var smsResult = new SmsResult(verificationSendResult.Data.MessageId, verificationSendResult.Message, "کد تاییدیه قرارداد مالی",
|
||||
contractingPartyFullName, number, contractingPartyId, institutionContractId);
|
||||
await _smsResultRepository.CreateAsync(smsResult);
|
||||
await _smsResultRepository.SaveChangesAsync();
|
||||
return verificationSendResult.Status == 0;
|
||||
}
|
||||
|
||||
@@ -9,20 +9,20 @@ using WorkFlow.Application.Contracts.WorkFlow;
|
||||
|
||||
namespace Query.AdminReports.Handlers
|
||||
{
|
||||
public interface IGetWorkshopWithRollCallHandler
|
||||
{
|
||||
List<WorkshopWithRollCallServiceQueryModel> Handle(WorkshopWithRollCallServiceQueryParameters parameters);
|
||||
}
|
||||
public interface IGetWorkshopWithRollCallHandler
|
||||
{
|
||||
List<WorkshopWithRollCallServiceQueryModel> Handle(WorkshopWithRollCallServiceQueryParameters parameters);
|
||||
}
|
||||
|
||||
public class GetWorkshopWithRollCallHandler: IGetWorkshopWithRollCallHandler
|
||||
{
|
||||
public class GetWorkshopWithRollCallHandler : IGetWorkshopWithRollCallHandler
|
||||
{
|
||||
private readonly CompanyContext _companyContext;
|
||||
private readonly IWorkFlowApplication workFlowApplication;
|
||||
|
||||
public GetWorkshopWithRollCallHandler(CompanyContext companyContext, IWorkFlowApplication workFlowApplication)
|
||||
{
|
||||
_companyContext = companyContext;
|
||||
this.workFlowApplication = workFlowApplication;
|
||||
_companyContext = companyContext;
|
||||
this.workFlowApplication = workFlowApplication;
|
||||
}
|
||||
|
||||
public List<WorkshopWithRollCallServiceQueryModel> Handle(WorkshopWithRollCallServiceQueryParameters parameters)
|
||||
@@ -30,7 +30,6 @@ namespace Query.AdminReports.Handlers
|
||||
var now = DateTime.Now.Date;
|
||||
var lastWeek = now.AddDays(-7);
|
||||
|
||||
|
||||
//workshop filter by parameters
|
||||
var rollCallServiceQuery = _companyContext.RollCallServices.AsSplitQuery();
|
||||
|
||||
@@ -46,35 +45,49 @@ namespace Query.AdminReports.Handlers
|
||||
rollCallServiceQuery = rollCallServiceQuery.Where(x => x.ServiceType == parameters.RollCallServiceType);
|
||||
|
||||
if (parameters.FilterMode == FilterMode.Active)
|
||||
rollCallServiceQuery = rollCallServiceQuery.Where(x => x.StartService.Date <= now && x.EndService.Date >= now);
|
||||
else if (parameters.FilterMode == FilterMode.DeActive)
|
||||
rollCallServiceQuery = rollCallServiceQuery.Where(x => x.EndService.Date < now || x.StartService.Date > now);
|
||||
rollCallServiceQuery =
|
||||
rollCallServiceQuery.Where(x => x.StartService.Date <= now && x.EndService.Date >= now);
|
||||
|
||||
var workshopsWithService = rollCallServiceQuery.Join(allWorkshops, x => x.WorkshopId, y => y.id, (rcs, workshop) =>
|
||||
new WorkshopWithRollCallServiceQueryModel()
|
||||
{
|
||||
WorkshopId = workshop.id,
|
||||
RollCallServiceType = rcs.ServiceType,
|
||||
WorkshopName = workshop.WorkshopFullName,
|
||||
MaxPersonValid = rcs.MaxPersonValid,
|
||||
IsActive = rcs.StartService <= DateTime.Now && rcs.EndService >= DateTime.Now,
|
||||
ServiceStart = rcs.StartService,
|
||||
ServiceEnd = rcs.EndService
|
||||
});
|
||||
else if (parameters.FilterMode == FilterMode.DeActive)
|
||||
rollCallServiceQuery =
|
||||
rollCallServiceQuery.Where(x => x.EndService.Date < now || x.StartService.Date > now);
|
||||
|
||||
var workshopsWithService = rollCallServiceQuery.Join(allWorkshops, x => x.WorkshopId, y => y.id,
|
||||
(rcs, workshop) =>
|
||||
new WorkshopWithRollCallServiceQueryModel()
|
||||
{
|
||||
WorkshopId = workshop.id,
|
||||
RollCallServiceType = rcs.ServiceType,
|
||||
WorkshopName = workshop.WorkshopFullName,
|
||||
MaxPersonValid = rcs.MaxPersonValid,
|
||||
IsActive = rcs.StartService <= DateTime.Now && rcs.EndService >= DateTime.Now,
|
||||
ServiceStart = rcs.StartService,
|
||||
ServiceEnd = rcs.EndService
|
||||
});
|
||||
|
||||
|
||||
//workshop population
|
||||
var workshopLeftWorks = _companyContext.Workshops.AsSplitQuery().Where(x => workshopsWithService.Any(y => y.WorkshopId == x.id)).Include(x => x.LeftWorks).Include(x => x.LeftWorkInsurances)
|
||||
.Select(x => new
|
||||
{
|
||||
WorkshopId = x.id,
|
||||
LeftWorks = x.LeftWorks.Where(y => y.StartWorkDate <= lastWeek && y.LeftWorkDate > now).Select(y => y.EmployeeId),
|
||||
LeftWorkInsurances = x.LeftWorkInsurances.Where(y => y.StartWorkDate <= lastWeek && (y.LeftWorkDate > now || y.LeftWorkDate == null)).Select(y => y.EmployeeId)
|
||||
}).ToList();
|
||||
var workshopLeftWorks = _companyContext.Workshops.AsSplitQuery()
|
||||
.Where(x => workshopsWithService.Any(y => y.WorkshopId == x.id)).Include(x => x.LeftWorks)
|
||||
.Include(x => x.LeftWorkInsurances)
|
||||
.Select(x => new
|
||||
{
|
||||
WorkshopId = x.id,
|
||||
LeftWorks = x.LeftWorks.Where(y => y.StartWorkDate <= lastWeek && y.LeftWorkDate > now)
|
||||
.Select(y => y.EmployeeId),
|
||||
LeftWorkInsurances = x.LeftWorkInsurances
|
||||
.Where(y => y.StartWorkDate <= lastWeek && (y.LeftWorkDate > now || y.LeftWorkDate == null))
|
||||
.Select(y => y.EmployeeId)
|
||||
}).ToList();
|
||||
|
||||
var workshopsWorkingEmployeesList = workshopLeftWorks
|
||||
.Select(x => new { x.WorkshopId, TotalWorkingEmployeesCount = x.LeftWorks.Concat(x.LeftWorkInsurances).Distinct().Count(), EmployeeIds = x.LeftWorks.Concat(x.LeftWorkInsurances).Distinct() }).ToList();
|
||||
|
||||
.Select(x =>
|
||||
new
|
||||
{
|
||||
x.WorkshopId,
|
||||
TotalWorkingEmployeesCount = x.LeftWorks.Concat(x.LeftWorkInsurances).Distinct().Count(),
|
||||
EmployeeIds = x.LeftWorks.Concat(x.LeftWorkInsurances).Distinct()
|
||||
}).ToList();
|
||||
|
||||
|
||||
var activeEmployees = _companyContext.RollCallEmployees.AsSplitQuery()
|
||||
@@ -83,15 +96,25 @@ namespace Query.AdminReports.Handlers
|
||||
workshopsWithService.Any(y => y.WorkshopId == x.WorkshopId))
|
||||
.Select(x => new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
var lastWeekRollCalls = _companyContext.RollCalls.AsSplitQuery().Where(x => x.StartDate.HasValue && x.StartDate.Value >= lastWeek
|
||||
&& workshopsWithService.Any(y => y.WorkshopId == x.WorkshopId)).GroupBy(x => x.EmployeeId).Select(x => x.Key);
|
||||
var lastWeekRollCalls = _companyContext.RollCalls.AsSplitQuery()
|
||||
.Where(x => x.StartDate.HasValue &&
|
||||
x.StartDate.Value >= lastWeek
|
||||
&& workshopsWithService
|
||||
.Any(y => y.WorkshopId == x.WorkshopId))
|
||||
.GroupBy(x => x.EmployeeId)
|
||||
.Select(x => x.Key);
|
||||
|
||||
|
||||
var leaves = _companyContext.LeaveList.AsSplitQuery().Where(x => x.StartLeave <= lastWeek && x.EndLeave >= now && (x.LeaveType == "استعلاجی" || x.PaidLeaveType == "روزانه")
|
||||
&& workshopsWithService.Any(y => y.WorkshopId == x.WorkshopId)).Select(x => x.EmployeeId);
|
||||
var leaves = _companyContext.LeaveList.AsSplitQuery().Where(x =>
|
||||
x.StartLeave <= lastWeek && x.EndLeave >= now &&
|
||||
(x.LeaveType == "استعلاجی" || x.PaidLeaveType == "روزانه")
|
||||
&& workshopsWithService.Any(y => y.WorkshopId == x.WorkshopId))
|
||||
.Select(x => x.EmployeeId);
|
||||
|
||||
|
||||
var activeEmployeesList = activeEmployees.ToList().Where(x => workshopsWorkingEmployeesList.Any(w => w.WorkshopId == x.WorkshopId && w.EmployeeIds.Contains(x.EmployeeId)));
|
||||
var activeEmployeesList = activeEmployees.ToList().Where(x =>
|
||||
workshopsWorkingEmployeesList.Any(w =>
|
||||
w.WorkshopId == x.WorkshopId && w.EmployeeIds.Contains(x.EmployeeId)));
|
||||
var lastWeekRollCallsList = lastWeekRollCalls.ToList();
|
||||
var leavesList = leaves.ToList();
|
||||
var workshopsWithServiceList = workshopsWithService.ToList();
|
||||
@@ -107,12 +130,13 @@ namespace Query.AdminReports.Handlers
|
||||
MaxPersonValid = x.MaxPersonValid,
|
||||
WorkshopName = x.WorkshopName,
|
||||
ActiveEmployeesCount = activeEmployeesList.Count(y => y.WorkshopId == x.WorkshopId),
|
||||
ActiveEmployeesWithRollCallInLastWeekCount = activeEmployeesList.Count(y => y.WorkshopId == x.WorkshopId &&
|
||||
ActiveEmployeesWithRollCallInLastWeekCount = activeEmployeesList.Count(y =>
|
||||
y.WorkshopId == x.WorkshopId &&
|
||||
lastWeekRollCallsList.Contains(y.EmployeeId) && !leavesList.Contains(y.EmployeeId)),
|
||||
TotalEmployeesCount = workshopsWorkingEmployeesList.FirstOrDefault(y => y.WorkshopId == x.WorkshopId)?.TotalWorkingEmployeesCount ?? 0,
|
||||
TotalEmployeesCount = workshopsWorkingEmployeesList
|
||||
.FirstOrDefault(y => y.WorkshopId == x.WorkshopId)?.TotalWorkingEmployeesCount ?? 0,
|
||||
//UndoneWorkFlowsCount = workFlowApplication.GetAllWorkFlowCount(x.WorkshopId).Result
|
||||
}).OrderByDescending(x => x.IsActive).ToList();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -13,15 +13,8 @@
|
||||
public int ActiveEmployeesWithRollCallInLastWeekCount { get; set; }
|
||||
|
||||
public int UndoneWorkFlowsCount { get; set; }
|
||||
|
||||
|
||||
public float ActiveEmployeesWithRollCallPercentage
|
||||
{
|
||||
get
|
||||
{
|
||||
return ((float)ActiveEmployeesWithRollCallInLastWeekCount / ActiveEmployeesCount) * 100;
|
||||
}
|
||||
}
|
||||
|
||||
public float ActiveEmployeesWithRollCallPercentage => ActiveEmployeesCount == 0 ? 0f : ((float)ActiveEmployeesWithRollCallInLastWeekCount / ActiveEmployeesCount) * 100f;
|
||||
|
||||
public int MaxPersonValid { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
|
||||
49
ServiceHost/Areas/Admin/Controllers/RollCallController.cs
Normal file
49
ServiceHost/Areas/Admin/Controllers/RollCallController.cs
Normal file
@@ -0,0 +1,49 @@
|
||||
using _0_Framework.Application;
|
||||
using AccountManagement.Application.Contracts.Account;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Query.AdminReports.Handlers;
|
||||
using Query.AdminReports.Models;
|
||||
using ServiceHost.BaseControllers;
|
||||
using WorkFlow.Application.Contracts.WorkFlow;
|
||||
|
||||
namespace ServiceHost.Areas.Admin.Controllers;
|
||||
|
||||
public class RollCallController:AdminBaseController
|
||||
{
|
||||
private readonly IGetWorkshopWithRollCallHandler _workshopWithRollCallHandler;
|
||||
private readonly IWorkFlowApplication _workFlowApplication;
|
||||
private readonly long _currentAccountId;
|
||||
|
||||
public RollCallController(IGetWorkshopWithRollCallHandler workshopWithRollCallHandler,IAuthHelper _authHelper, IWorkFlowApplication workFlowApplication)
|
||||
{
|
||||
_workshopWithRollCallHandler = workshopWithRollCallHandler;
|
||||
_workFlowApplication = workFlowApplication;
|
||||
_currentAccountId = _authHelper.CurrentAccountId();
|
||||
}
|
||||
|
||||
[HttpGet("report")]
|
||||
public ActionResult<List<WorkshopWithRollCallServiceQueryModel>> GetRollCallReport([FromQuery] WorkshopWithRollCallServiceQueryParameters searchModel)
|
||||
{
|
||||
var result = _workshopWithRollCallHandler.Handle(searchModel);
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet("report/workshops-select-list")]
|
||||
public ActionResult<List<WorkshopSelectList>> GetWorkshopsSelectList()
|
||||
{
|
||||
var result = _workshopWithRollCallHandler.Handle(new WorkshopWithRollCallServiceQueryParameters())
|
||||
.Select(x => new WorkshopSelectList
|
||||
{
|
||||
Id = x.WorkshopId,
|
||||
WorkshopFullName = x.WorkshopName
|
||||
}).Distinct().ToList();
|
||||
return result;
|
||||
}
|
||||
|
||||
[HttpGet("repoert/workfloecount/{workshopId}")]
|
||||
public async Task<ActionResult<int>> GetWorkFlowCountByWorkshopId(long workshopId)
|
||||
{
|
||||
var result = await _workFlowApplication.GetAllWorkFlowCount(workshopId, _currentAccountId);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -527,6 +527,229 @@ public class institutionContractController : AdminBaseController
|
||||
var res =await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("resend-verify-link/{institutionContractId}")]
|
||||
public async Task<OperationResult> ResendVerifyLink(long institutionContractId)
|
||||
{
|
||||
var res = await _institutionContractApplication.ResendVerifyLink(institutionContractId);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("amendment/insert-temp-workshops")]
|
||||
public async Task<ActionResult<InsertAmendmentTempWorkshopResponse>> InsertAmendmentTempWorkshops([FromBody]InstitutionContractAmendmentTempWorkshopViewModel request)
|
||||
{
|
||||
var res =await _institutionContractApplication.InsertAmendmentTempWorkshops(request);
|
||||
return res;
|
||||
}
|
||||
[HttpDelete("amendment/remove-temp-workshops/{workshopTempId:guid}")]
|
||||
public async Task<ActionResult> RemoveAmendmentWorkshops(Guid workshopTempId)
|
||||
{
|
||||
await _institutionContractApplication.RemoveAmendmentWorkshops(workshopTempId);
|
||||
return Ok();
|
||||
}
|
||||
[HttpPost("amendment/payment-details")]
|
||||
public async Task<ActionResult<InsitutionContractAmendmentPaymentResponse>> GetAmendmentPaymentDetails([FromBody]InsitutionContractAmendmentPaymentRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.GetAmendmentPaymentDetails(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
[HttpGet("edit-old/{id}")]
|
||||
public ActionResult<EditInstitutionContract> GetEditOldDetails(long id)
|
||||
{
|
||||
var representativList = new List<RepresentativeViewModel>();
|
||||
var contractingPartyList = new List<PersonalContractingPartyViewModel>();
|
||||
var res = _institutionContractApplication.GetDetails(id);
|
||||
|
||||
var representative = new RepresentativeViewModel
|
||||
{
|
||||
Id = res.RepresentativeId,
|
||||
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";
|
||||
}
|
||||
|
||||
res.WorkshopCount = workshopCount;
|
||||
|
||||
|
||||
var contactInfo = _contactInfoApplication.GetContactInfolist(id);
|
||||
if (contactInfo.Count > 0)
|
||||
{
|
||||
res.ContactInfoCounter = contactInfo.Count;
|
||||
res.ContactInformationList = contactInfo;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.ContactInfoCounter = 0;
|
||||
}
|
||||
|
||||
if (res.HasValueAddedTax == "true")
|
||||
{
|
||||
res.ContractAmount -= res.ValueAddedTax;
|
||||
res.ContractAmountOAlone = res.ContractAmount.ToMoney();
|
||||
res.ValueAddedTaxStr = res.ValueAddedTax.ToMoney();
|
||||
}
|
||||
else
|
||||
{
|
||||
res.ContractAmountOAlone = res.ContractAmountString;
|
||||
res.ValueAddedTaxStr = "0";
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("edit-old")]
|
||||
public ActionResult<OperationResult> EditOld([FromBody] EditInstitutionContract command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
var phoneNumber = command.ContactInformationList.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 = _institutionContractApplication.Edit(command);
|
||||
var contractingPartyId = _institutionContractApplication.GetDetails(result.SendId);
|
||||
var counter = command.ContactInformationList.Count;
|
||||
var getOldContarct = _institutionContractApplication.NewSearch(new InstitutionContractSearchModel()
|
||||
{ ContractingPartyId = contractingPartyId.ContractingPartyId, IsActiveString = "both" }).Where(x=>x.IsActiveString == "false" || x.IsActiveString == "blue").ToList();
|
||||
if (result.IsSuccedded && counter > 0)
|
||||
{
|
||||
|
||||
if (getOldContarct.Count > 0)
|
||||
{
|
||||
foreach (var item in getOldContarct)
|
||||
{
|
||||
_contactInfoApplication.RemoveContactInfo(item.Id);
|
||||
foreach (var phone in command.ContactInformationList)
|
||||
{
|
||||
if (phone.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = item.Id,
|
||||
PhoneType = phone.PhoneType,
|
||||
Position = phone.Position,
|
||||
PhoneNumber = phone.PhoneNumber,
|
||||
FnameLname = phone.FnameLname,
|
||||
SendSms = phone.SendSmsString == "true" ? true : false
|
||||
};
|
||||
_contactInfoApplication.Create(contactinfo);
|
||||
}
|
||||
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
}
|
||||
}
|
||||
_contactInfoApplication.RemoveContactInfo(command.Id);
|
||||
foreach (var item in command.ContactInformationList)
|
||||
{
|
||||
if (item.PhoneNumber != null)
|
||||
{
|
||||
var contactinfo = new CreateContactInfo
|
||||
{
|
||||
InstitutionContractId = result.SendId,
|
||||
PhoneType = item.PhoneType,
|
||||
Position = item.Position,
|
||||
PhoneNumber = item.PhoneNumber,
|
||||
FnameLname = item.FnameLname,
|
||||
SendSms = item.SendSmsString == "true" ? true : false
|
||||
};
|
||||
_contactInfoApplication.Create(contactinfo);
|
||||
}
|
||||
|
||||
Thread.Sleep(500);
|
||||
}
|
||||
|
||||
|
||||
//ساخت اکانت کلاینت
|
||||
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 result;
|
||||
}
|
||||
[HttpGet("print/{id}")]
|
||||
public async Task<ActionResult<InstitutionContractPrintViewModel>> PrintOne(long id)
|
||||
{
|
||||
var res =await _institutionContractApplication.PrintOneAsync(id);
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -871,6 +871,14 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div class="child-check level2">
|
||||
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close">
|
||||
<i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" />
|
||||
</label>
|
||||
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="1004" class="check-btn"> <span style="bottom: 2px;position: relative"> قرارداد های مالی </span> </label>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@* بررسی مدارک پرسنل *@
|
||||
<div class="parent-check">
|
||||
|
||||
@@ -881,6 +881,15 @@
|
||||
|
||||
</div>
|
||||
|
||||
<div class="child-check level2">
|
||||
<label class="btn btn-icon waves-effect btn-default m-b-5 open-close">
|
||||
<i class="ion-plus"></i> <i class="ion-minus" style="display: none;"></i><input type="checkbox" style="display: none" class="open-btn" />
|
||||
</label>
|
||||
<label class="btn btn-inverse waves-effect waves-light m-b-5 parentLevel2"> <input type="checkbox" disabled="disabled" value="1004" class="check-btn"> <span style="bottom: 2px;position: relative"> قرارداد های مالی </span> </label>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@* بررسی مدارک پرسنل *@
|
||||
<div class="parent-check">
|
||||
|
||||
@@ -32,6 +32,12 @@ using ServiceHost.Hubs;
|
||||
using System.Diagnostics.Contracts;
|
||||
using WorkFlow.Application.Contracts.WorkFlow;
|
||||
using System.Globalization;
|
||||
using Company.Domain.LeftWorkInsuranceAgg;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
||||
using Company.Domain.InsuranceListAgg;
|
||||
using CompanyManagment.App.Contracts.InsuranceList;
|
||||
using CompanyManagment.EFCore.Repository;
|
||||
using System.Linq;
|
||||
|
||||
namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts;
|
||||
|
||||
@@ -59,6 +65,9 @@ public class IndexModel : PageModel
|
||||
private readonly IYearlySalaryApplication _yearlySalaryApplication;
|
||||
private readonly IYearlySalaryRepository _yearlySalaryRepository;
|
||||
private readonly IWorkFlowApplication _workFlowApplication;
|
||||
private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
|
||||
private readonly IInsuranceListApplication _insuranceListApplication;
|
||||
private readonly IInsuranceListRepository _insuranceListRepository;
|
||||
|
||||
|
||||
public List<CheckoutViewModel> chekoutlist;
|
||||
@@ -100,7 +109,7 @@ public class IndexModel : PageModel
|
||||
ILeaveApplication leaveApplication, IHubContext<CheckoutHub> hubContext,
|
||||
IEmployeeComputeOptionsApplication employeeComputeOptionsApplication,
|
||||
IRollCallMandatoryApplication rollCallMandatoryApplication,
|
||||
IRollCallEmployeeStatusApplication rollCallEmployeeStatusApp, IWorkFlowApplication workFlowApplication)
|
||||
IRollCallEmployeeStatusApplication rollCallEmployeeStatusApp, IWorkFlowApplication workFlowApplication, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IInsuranceListApplication insuranceListApplication, IInsuranceListRepository insuranceListRepository)
|
||||
{
|
||||
_contractApplication = contractApplication;
|
||||
_workshopApplication = workshopApplication;
|
||||
@@ -124,6 +133,9 @@ public class IndexModel : PageModel
|
||||
_rollCallMandatoryApplication = rollCallMandatoryApplication;
|
||||
_rollCallEmployeeStatusApp = rollCallEmployeeStatusApp;
|
||||
_workFlowApplication = workFlowApplication;
|
||||
_leftWorkInsuranceRepository = leftWorkInsuranceRepository;
|
||||
_insuranceListApplication = insuranceListApplication;
|
||||
_insuranceListRepository = insuranceListRepository;
|
||||
}
|
||||
|
||||
public string Message { get; set; }
|
||||
@@ -165,7 +177,7 @@ public class IndexModel : PageModel
|
||||
|
||||
var searchResult = await _checkoutApplication.SearchCheckoutOptimized(searchModel);
|
||||
|
||||
var result = new MainViewModel();
|
||||
var result = new CompanyManagment.App.Contracts.Checkout.MainViewModel();
|
||||
result.IsSysManager = accountId is 2 or 3;
|
||||
result.MainList = searchResult;
|
||||
if (searchModel.WorkshopId != 0 || searchModel.EmployeeId != 0)
|
||||
@@ -759,11 +771,36 @@ public class IndexModel : PageModel
|
||||
var maxNumber = Convert.ToDouble(ContractsId.Count());
|
||||
if (ContractsId.Count > 0)
|
||||
{
|
||||
#region Insurance
|
||||
var watch = new Stopwatch();
|
||||
|
||||
watch.Start();
|
||||
var contractpData = _contractApplication.GetDetails(ContractsId[0]);
|
||||
|
||||
var startMonthFa = $"{ConvertYear}/{ConvertMonth.PadLeft(2, '0')}/01";
|
||||
DateTime startDateGr = startMonthFa.ToGeorgianDateTime();
|
||||
DateTime endDateGr = startMonthFa.FindeEndOfMonth().ToGeorgianDateTime();
|
||||
int endOfMonth = Convert.ToInt32((startMonthFa.FindeEndOfMonth()).Substring(8, 2));
|
||||
|
||||
|
||||
var insuranceListData =
|
||||
_insuranceListRepository.EmployeeInsuranceDataBy(startDateGr, contractpData.WorkshopIds);
|
||||
var yearlysaleries = _yearlySalaryApplication.GetInsuranceItems(startDateGr, endDateGr, ConvertYear);
|
||||
|
||||
var insuranceEmployeeData =
|
||||
_leftWorkInsuranceRepository.GetEmployeeInsuranceLeftWorksAndInformation(contractpData.WorkshopIds, startDateGr,
|
||||
endDateGr);
|
||||
Console.WriteLine("checkout-test-timer" + watch.Elapsed);
|
||||
watch.Stop();
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
//int i = 0;
|
||||
foreach (var item in ContractsId)
|
||||
{
|
||||
var contract = _contractApplication.GetDetails(item);
|
||||
|
||||
|
||||
//var workingHours = _workingHoursApplication.GetByContractId(contract.Id);
|
||||
var workingHours = _workingHoursTempApplication.GetByContractIdConvertToShiftwork4(contract.Id);
|
||||
var separation = _contractApplication.contractSeparation(ConvertYear, ConvertMonth,
|
||||
@@ -992,7 +1029,78 @@ public class IndexModel : PageModel
|
||||
officialHoliday, totalHoursH, totalHoursM, consumableItemDouble, housingAllowanceDouble,
|
||||
familyAllowanceDouble, marriedAllowanceDouble, workshop.IsOldContract);
|
||||
|
||||
|
||||
|
||||
#region Insurance
|
||||
|
||||
double insuranceShare = 0;
|
||||
//اگر پرسنل داری شروع بکار بیمه بود
|
||||
var insuranceEmployeeDataItem =
|
||||
insuranceEmployeeData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
||||
|
||||
//اگر لیست بیمه برای پرسنل ساخته شده بود
|
||||
var insuranceListDataWithDetails =
|
||||
insuranceListData.FirstOrDefault(x => x.EmployeeId == contract.EmployeeId);
|
||||
if (insuranceListDataWithDetails != null)
|
||||
{
|
||||
insuranceShare = insuranceListDataWithDetails.InsuranceShare;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (insuranceEmployeeDataItem != null && insuranceEmployeeDataItem.StartWorkDateGr <= separation.ContractEndGr)
|
||||
{
|
||||
var workingDays = Tools.GetEmployeeInsuranceWorkingDays(insuranceEmployeeDataItem.StartWorkDateGr, separation.LeftWorkDate, startDateGr, endDateGr, insuranceEmployeeDataItem.EmployeeId);
|
||||
var leftWorkFa = workingDays.hasLeftWorkInMonth ? separation.LeftWorkDate.ToFarsi() : "";
|
||||
|
||||
//به دست آوردن دستمزد روزانه با توجه به اینکه کارگاه مشاغل مقطوع است یا خیر
|
||||
|
||||
double dailyWage = 0;
|
||||
if (workshop.FixedSalary)
|
||||
{
|
||||
var res = _insuranceListApplication.GetDailyWageFixedSalary(ConvertYear, workshop.Id, insuranceEmployeeDataItem.EmployeeId, startDateGr,
|
||||
endDateGr, insuranceEmployeeDataItem.JobId, workshop.Population, workshop.InsuranceJobId);
|
||||
dailyWage = res ?? 0;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var res = _insuranceListApplication.ComputeDailyWage(yearlysaleries.DayliWage, insuranceEmployeeDataItem.EmployeeId, workshop.Id, ConvertYear);
|
||||
dailyWage = res;
|
||||
}
|
||||
|
||||
//بدست آوردن پایه سنوات
|
||||
var baseYears = _insuranceListRepository.GetEmployeeInsuranceBaseYear(insuranceEmployeeDataItem.EmployeeId, workshop.Id,
|
||||
workingDays.countWorkingDays, startDateGr, endDateGr, workingDays.startWork, workingDays.endWork, workingDays.hasLeftWorkInMonth);
|
||||
|
||||
//جمع مزد روزانه و پایه سنوات
|
||||
var dailyWagePlusBaseYears = dailyWage + baseYears.baseYear;
|
||||
|
||||
|
||||
//دستمزد ماهانه با محاسبه پایه سنوات
|
||||
var monthlySalary = _insuranceListApplication.GetRoundValue(dailyWagePlusBaseYears * workingDays.countWorkingDays);
|
||||
|
||||
//حق تاهل
|
||||
var marriedAllowance = employee.MaritalStatus == "متاهل" ? yearlysaleries.MarriedAllowance : 0;
|
||||
|
||||
//محاسبه مزایای ماهانه
|
||||
var monthlyBenefits = _insuranceListApplication.GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowance, workingDays.countWorkingDays, workshop.TypeOfInsuranceSend, insuranceEmployeeDataItem.JobId, insuranceEmployeeDataItem.EmployeeId, insuranceEmployeeDataItem.IncludeStatus);
|
||||
if (workshop.InsuranceCheckoutOvertime)
|
||||
{
|
||||
|
||||
monthlyBenefits = _insuranceListApplication.GetRoundValue(monthlyBenefits += overTimeWorking);
|
||||
}
|
||||
|
||||
//محاسبه جمع مزایای مشمول و دستمزد ماهانه
|
||||
var benefitsIncludedContinuous = monthlyBenefits + monthlySalary;
|
||||
|
||||
//محاسبه حق بیمه سهم بیمه شده
|
||||
insuranceShare = (benefitsIncludedContinuous * 7) / 100;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
var command = new CreateCheckout
|
||||
{
|
||||
EmployeeFullName = employee.EmployeeFullName,
|
||||
@@ -1098,7 +1206,11 @@ public class IndexModel : PageModel
|
||||
|
||||
DailySalaryAffected = mandatoryCompute.DailySalaryAffected,
|
||||
|
||||
#region InsuranceShare
|
||||
|
||||
InsuranceDeduction = _insuranceListApplication.GetRoundValue(insuranceShare),
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,8 +2,135 @@
|
||||
@{
|
||||
<style>
|
||||
.btn-lime {
|
||||
background-color: #84cc16;
|
||||
border: 1px solid #84cc16;
|
||||
background-color: #84cc16;
|
||||
border: 1px solid #84cc16;
|
||||
}
|
||||
|
||||
|
||||
.fulltext {
|
||||
opacity: 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ellipsed {
|
||||
display: block;
|
||||
width: 100%;
|
||||
text-overflow: ellipsis;
|
||||
overflow-x: clip;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.date-box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.tooltipfull-containerText {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
right: -2px;
|
||||
top: 13px;
|
||||
}
|
||||
|
||||
|
||||
.tooltip {
|
||||
opacity: 0;
|
||||
z-index: 99;
|
||||
color: #fff;
|
||||
width: 220px;
|
||||
display: block;
|
||||
font-size: 14px;
|
||||
font-family: 'IranSans';
|
||||
padding: 5px 10px;
|
||||
border-radius: 3px;
|
||||
text-align: center;
|
||||
/*text-shadow: 1px 1px 2px #111;*/
|
||||
background: #e67e22;
|
||||
border: 1px solid #e67e22;
|
||||
box-shadow: 0 0 3px rgba(0,0,0,0.5);
|
||||
-webkit-transition: all .2s ease-in-out;
|
||||
-moz-transition: all .2s ease-in-out;
|
||||
-o-transition: all .2s ease-in-out;
|
||||
-ms-transition: all .2s ease-in-out;
|
||||
transition: all .2s ease-in-out;
|
||||
-webkit-transform: scale(0);
|
||||
-moz-transform: scale(0);
|
||||
-o-transform: scale(0);
|
||||
-ms-transform: scale(0);
|
||||
transform: scale(0);
|
||||
position: absolute;
|
||||
right: -50px;
|
||||
bottom: 40px;
|
||||
}
|
||||
|
||||
.tooltip:before, .tooltip:after {
|
||||
content: '';
|
||||
border-left: 10px solid transparent;
|
||||
border-right: 10px solid transparent;
|
||||
border-top: 10px solid #e67e22;
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 70%;
|
||||
}
|
||||
|
||||
.tooltip-container:hover .tooltip, a:hover .tooltip {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale(1);
|
||||
-moz-transform: scale(1);
|
||||
-o-transform: scale(1);
|
||||
-ms-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
|
||||
.tooltipfull {
|
||||
opacity: 0;
|
||||
z-index: 99;
|
||||
color: #fff;
|
||||
/* width: 180px;*/
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
font-family: 'IranSans';
|
||||
padding: 5px 10px;
|
||||
border-radius: 15px;
|
||||
text-align: center;
|
||||
/*text-shadow: 1px 1px 2px #111;*/
|
||||
background: #950000;
|
||||
border: 1px solid #950000;
|
||||
box-shadow: 0 0 3px rgba(0,0,0,0.5);
|
||||
-webkit-transition: all .2s ease-in-out;
|
||||
-moz-transition: all .2s ease-in-out;
|
||||
-o-transition: all .2s ease-in-out;
|
||||
/* -ms-transition: all .2s ease-in-out;*/
|
||||
transition: all .2s ease-in-out;
|
||||
-webkit-transform: scale(0);
|
||||
-moz-transform: scale(0);
|
||||
-o-transform: scale(0);
|
||||
-ms-transform: scale(0);
|
||||
transform: scale(0);
|
||||
position: absolute;
|
||||
right: -2px;
|
||||
bottom: 20px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.tooltipfull:before, .tooltipfull:after {
|
||||
content: '';
|
||||
border-left: 10px solid transparent;
|
||||
border-right: 10px solid transparent;
|
||||
border-top: 10px solid #950000;
|
||||
position: absolute;
|
||||
bottom: -10px;
|
||||
left: 50%;
|
||||
}
|
||||
|
||||
.tooltipfull-containerText:hover .tooltipfull, a:hover .tooltipfull {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale(1);
|
||||
-moz-transform: scale(1);
|
||||
-o-transform: scale(1);
|
||||
-ms-transform: scale(1);
|
||||
transform: scale(1);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -102,14 +229,41 @@
|
||||
<td class="code-td">
|
||||
<span class="ellipsed">
|
||||
@item.Month
|
||||
@{
|
||||
<span> </span>
|
||||
if(item.IsUpdateNeeded){
|
||||
<i style="color: #cb1c1c; font-size:17px !important" class="fa fa-exclamation-triangle" aria-hidden="true"></i>
|
||||
}
|
||||
}
|
||||
|
||||
</span>
|
||||
|
||||
<div class="tooltipfull-containerText">
|
||||
<p class="fulltext">
|
||||
@item.Month
|
||||
</p>
|
||||
<span class="tooltipfull">
|
||||
@item.Month
|
||||
</span>
|
||||
@{
|
||||
if (item.IsUpdateNeeded)
|
||||
{
|
||||
foreach (var warning in item.CheckoutWarningMessageList)
|
||||
{
|
||||
<p class="fulltext">
|
||||
@warning.WarningMessage
|
||||
</p>
|
||||
<span class="tooltipfull" style="right: -103px;bottom: 20px;">
|
||||
@warning.WarningMessage
|
||||
</span>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<p class="fulltext">
|
||||
@item.Month
|
||||
</p>
|
||||
<span class="tooltipfull">
|
||||
@item.Month
|
||||
</span>
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
</div>
|
||||
</td>
|
||||
<td class="name-td">
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
@* قراردادهای موسسه</a> *@
|
||||
@* </li> *@
|
||||
<li permission="308">
|
||||
<a class="clik3" asp-area="AdminNew" asp-page="/Company/RollCall/Index">
|
||||
<a class="clik3" href="https://admin@(AppSetting.Value.Domain)/rollcall">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="width: 7px;margin: 0 6px;">
|
||||
<circle cx="6.5" cy="6.5" r="6.5" fill="white"/>
|
||||
</svg>
|
||||
|
||||
@@ -195,7 +195,7 @@
|
||||
<div class="rollcall-list Rtable Rtable--5cols Rtable--collapse px-1">
|
||||
|
||||
<div class="w-100 my-1">
|
||||
<div class="absenceHeadColorTop" style="border-radius: 10px 10px 0 0;">غیبت</div>
|
||||
<div class="absenceHeadColorTop" style="border-radius: 10px 10px 0 0;">عدم حضور</div>
|
||||
<div class="Rtable-row Rtable-row--head align-items-center d-flex table-rollcall-absent absenceHeadColor">
|
||||
<div class="Rtable-cell column-heading width1">ردیف</div>
|
||||
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
|
||||
@@ -328,7 +328,7 @@
|
||||
<div class="btnsRollCallOnlline">
|
||||
<button class="btnRollCallStatus active" onclick="loadRollCallStatus('all')">آنلاین</button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('leave')">مرخصی <span id="leaveCount"></span></button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('absent')">غیبت <span id="absentCount"></span></button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('absent')">عدم حضور <span id="absentCount"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper">
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="gwb-card" permission="1002">
|
||||
<div class="gwb-card" permission="1004">
|
||||
<a href="https://admin@(AppSetting.Value.Domain)/workflow/institution-contract" class="click loadingButton">
|
||||
<div class="d-flex align-items-center justify-content-between p-1 w-100">
|
||||
<div class="d-flex align-items-center">
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
@* </a> *@
|
||||
@* </li> *@
|
||||
<li permission="308">
|
||||
<a class="clik3" asp-area="AdminNew" asp-page="/Company/RollCall/Index">
|
||||
<a class="clik3" href="https://admin@(AppSetting.Value.Domain)/rollcall">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="width: 7px;margin: 0 6px;">
|
||||
<circle cx="6.5" cy="6.5" r="6.5" fill="white"/>
|
||||
</svg>
|
||||
|
||||
@@ -231,7 +231,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -382,7 +382,9 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
|
||||
IsAbsent = x.IsAbsent,
|
||||
TotalWorkingHours = x.TotalWorkingHours,
|
||||
StartsItems = string.Join(Environment.NewLine, x.RollCallTimesList.Select(tr=>tr.StartDate)),
|
||||
EndsItems= string.Join(Environment.NewLine, x.RollCallTimesList.Select(tr=>tr.EndDate))
|
||||
EndsItems= string.Join(Environment.NewLine, x.RollCallTimesList.Select(tr=>tr.EndDate)),
|
||||
EnterTimeDifferences = string.Join(Environment.NewLine, x.RollCallTimesList.Select(tr=>tr.EntryTimeDifferences)),
|
||||
ExitTimeDifferences = string.Join(Environment.NewLine, x.RollCallTimesList.Select(tr=>tr.ExitTimeDifferences))
|
||||
}).ToList()
|
||||
|
||||
};
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
<div class="rollcall-list Rtable Rtable--5cols Rtable--collapse px-1">
|
||||
|
||||
<div class="w-100 my-1">
|
||||
<div class="absenceHeadColorTop" style="border-radius: 10px 10px 0 0;">غیبت</div>
|
||||
<div class="absenceHeadColorTop" style="border-radius: 10px 10px 0 0;">عدم حضور</div>
|
||||
<div class="Rtable-row Rtable-row--head align-items-center d-flex table-rollcall-absent absenceHeadColor">
|
||||
<div class="Rtable-cell column-heading width1">ردیف</div>
|
||||
<div class="Rtable-cell column-heading width2">نام پرسنل</div>
|
||||
@@ -367,7 +367,7 @@
|
||||
<div class="btnsRollCallOnlline">
|
||||
<button class="btnRollCallStatus active" onclick="loadRollCallStatus('all')">آنلاین</button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('leave')">مرخصی <span id="leaveCount"></span></button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('absent')">غیبت <span id="absentCount"></span></button>
|
||||
<button class="btnRollCallStatus" onclick="loadRollCallStatus('absent')">عدم حضور <span id="absentCount"></span></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="wrapper">
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -383,7 +383,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -393,7 +393,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<button type="button" class="btn-close position-absolute text-start" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||
<h6 class="m-0">پرینت حضور و غیاب انفرادی @Model.PersianMonthName ماه @Model.PersianYear</h6>
|
||||
</div>
|
||||
|
||||
```````
|
||||
<div class="modal-body" id="divTablescrollbar">
|
||||
<div class="row main-table">
|
||||
|
||||
@@ -121,7 +121,17 @@
|
||||
<span class="m-0">@item.DateFa</span>
|
||||
</td>
|
||||
<td style="font-family: 'IranText' !important; font-size: 10px !important; text-align: center">
|
||||
-
|
||||
@if (item.RollCallTimesList.Any())
|
||||
{
|
||||
@foreach (var rollCallItem in item.RollCallTimesList)
|
||||
{
|
||||
<div>@(rollCallItem.EntryTimeDifferences ?? "-")</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>-</span>
|
||||
}
|
||||
</td>
|
||||
<td style="font-family: 'IranText' !important; font-size: 10px !important; text-align: center">
|
||||
@if (item.RollCallTimesList.Any())
|
||||
@@ -150,7 +160,17 @@
|
||||
}
|
||||
</td>
|
||||
<td style="font-family: 'IranText' !important; font-size: 10px !important; text-align: center">
|
||||
-
|
||||
@if (item.RollCallTimesList.Any())
|
||||
{
|
||||
@foreach (var rollCallItem in item.RollCallTimesList)
|
||||
{
|
||||
<div>@(rollCallItem.ExitTimeDifferences ?? "-")</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<span>-</span>
|
||||
}
|
||||
</td>
|
||||
<td style="font-family: 'IranText' !important; font-size: 10px !important; text-align: center">
|
||||
@item.TotalWorkingHours
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -154,7 +154,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
|
||||
<div class="day-off-parent mb-4">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -168,7 +168,7 @@
|
||||
|
||||
<div class="day-off-parent">
|
||||
<div class="day-off-title mb-2">
|
||||
روزهای تعطیل هفته
|
||||
روزهای فعالیت مجموعه
|
||||
</div>
|
||||
|
||||
<div class="day-off-button-container mb-3">
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
|
||||
<li class="active" data-menu="absent">
|
||||
<div class="d-flex align-items-center justify-content-between" id="clickAbsentTab">
|
||||
<a href="javascript:void(0);">غیبت</a>
|
||||
<a href="javascript:void(0);">عدم حضور</a>
|
||||
<div>
|
||||
<div id="CountAbsentLoading" class="spinner-grow text-danger" role="status" style="align-items: center;justify-content: center;display: flex;margin: 0 0 0 9px;">
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
@@ -218,7 +218,7 @@
|
||||
<div class="Rtable-row SubAccountRowMobile align-items-center position-relative openAction">
|
||||
<div class="Rtable-cell d-md-block d-flex width2">
|
||||
<div class="Rtable-cell--content text-start">
|
||||
<div class="roleName">غیبت</div>
|
||||
<div class="roleName">عدم حضور</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
@@ -356,6 +356,7 @@ else
|
||||
app.UseExceptionHandler(options => { }); // این خط CustomExceptionHandler رو فعال میکنه
|
||||
|
||||
app.UseRouting();
|
||||
app.UseWebSockets();
|
||||
|
||||
app.UseAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
@@ -420,7 +420,7 @@ input:checked + .sliderEUP:before {
|
||||
background-color: #ffffff;
|
||||
background: rgba(209, 50, 50, 0.15);
|
||||
transition: ease .2s;
|
||||
width: 55px;
|
||||
/*width: 55px;*/
|
||||
}
|
||||
|
||||
.btn-workflow-rollcall-edit {
|
||||
|
||||
@@ -292,7 +292,7 @@ function loadEmployeeListByWorkFlowsAbsents(date) {
|
||||
</button>
|
||||
|
||||
<button type="button" class="btn-workflow-absent" onclick="confirmAbsentAlert(${rollCallItem.employeeId}, '${data.dateTimeFa}')">
|
||||
<span class="mx-1">غیبت</span>
|
||||
<span class="mx-1 text-nowrap">عدم حضور</span>
|
||||
</button>
|
||||
|
||||
<button class="btn-workflow-rollcall-edit position-relative" onclick="showModalEditRollCall(${rollCallItem.employeeId}, '${data.dateTimeFa}')">
|
||||
@@ -1028,7 +1028,7 @@ function showModalEditLeave(leaveId) {
|
||||
|
||||
function confirmAbsentAlert(employeeId, dateFa) {
|
||||
swal({
|
||||
title: "آیا از تایید این غیبت اطمینان دارید؟",
|
||||
title: "آیا از تایید این عدم حضور اطمینان دارید؟",
|
||||
text: "",
|
||||
type: "warning",
|
||||
showCancelButton: true,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
using Company.Domain.RollCallAgg.DomainService;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using CompanyManagment.App.Contracts.EmployeeDocuments;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedAbsence;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedWithoutLunchBreak;
|
||||
@@ -23,7 +24,9 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
private readonly IRollCallDomainService _rollCallDomainService;
|
||||
private readonly IRollCallConfirmedWithoutLunchBreakRepository _rollCallConfirmedWithoutLunchBreakRepository;
|
||||
private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication;
|
||||
public WorkFlowApplication(IRollCallConfirmedAbsenceRepository absenceRepository, IWorkFlowRollCallACL rollCallACL, IWorkFlowCheckoutACL checkoutACL, IWorkFlowCustomizedWorkshopSettingsACL customizedWorkshopSettingsACL, IRollCallConfirmedWithoutLunchBreakRepository rollCallConfirmedWithoutLunchBreakRepository, IRollCallDomainService rollCallDomainService, IEmployeeDocumentsApplication employeeDocumentsApplication)
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
|
||||
public WorkFlowApplication(IRollCallConfirmedAbsenceRepository absenceRepository, IWorkFlowRollCallACL rollCallACL, IWorkFlowCheckoutACL checkoutACL, IWorkFlowCustomizedWorkshopSettingsACL customizedWorkshopSettingsACL, IRollCallConfirmedWithoutLunchBreakRepository rollCallConfirmedWithoutLunchBreakRepository, IRollCallDomainService rollCallDomainService, IEmployeeDocumentsApplication employeeDocumentsApplication, IWorkshopRepository workshopRepository)
|
||||
{
|
||||
_absenceRepository = absenceRepository;
|
||||
_rollCallACL = rollCallACL;
|
||||
@@ -32,6 +35,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
_rollCallConfirmedWithoutLunchBreakRepository = rollCallConfirmedWithoutLunchBreakRepository;
|
||||
_rollCallDomainService = rollCallDomainService;
|
||||
_employeeDocumentsApplication = employeeDocumentsApplication;
|
||||
_workshopRepository = workshopRepository;
|
||||
}
|
||||
|
||||
public async Task<OperationResult> CreateRollCallConfirmedAbsence(CreateRollCallConfirmedAbsence command)
|
||||
@@ -416,10 +420,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetUndefinedRollCalls(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
@@ -443,10 +454,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetRollCallWorkFlowsCutByBgService(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
@@ -468,6 +486,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountCutByBgServiceLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -496,7 +519,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<int> CountAbsentRollCallLastMonth(long workshopId)
|
||||
{
|
||||
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -558,6 +585,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountEmployeesWithoutLunchBreakLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -596,6 +628,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountUndefinedLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -625,11 +662,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetAbsentRollCallWorkFlows(long workshopId)
|
||||
{
|
||||
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
|
||||
@@ -689,10 +732,16 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now.Date;
|
||||
|
||||
now.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
|
||||
|
||||
Reference in New Issue
Block a user