diff --git a/.gitignore b/.gitignore
index 9491a2fd..4e3f1d6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -359,5 +359,6 @@ MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
-# Fody - auto-generated XML schema
-FodyWeavers.xsd
\ No newline at end of file
+# # Fody - auto-generated XML schema
+# FodyWeavers.xsd
+
diff --git a/0_Framework/Application/Gender.cs b/0_Framework/Application/Gender.cs
index bbc81090..1fcff74e 100644
--- a/0_Framework/Application/Gender.cs
+++ b/0_Framework/Application/Gender.cs
@@ -3,5 +3,6 @@
public enum Gender
{
Male,
- Female
+ Female,
+ None
}
\ No newline at end of file
diff --git a/0_Framework/Application/SubAccountPermissionHelper.cs b/0_Framework/Application/SubAccountPermissionHelper.cs
index 43a5bdff..36b299ae 100644
--- a/0_Framework/Application/SubAccountPermissionHelper.cs
+++ b/0_Framework/Application/SubAccountPermissionHelper.cs
@@ -37,10 +37,12 @@
///
public const int PersonnelStatusIndividualReportPermissionCode = 10205;
- ///
- /// لیست کل پرسنل
- ///
- public const int PersonnelListPermissionCode = 10206;
+
+ //کد 10206 به بخش عملیات پرسنل منتقل شد و رزرو می باشد
+ /////
+ ///// لیست کل پرسنل
+ /////
+ //public const int PersonnelListPermissionCode = 10206;
#endregion
@@ -72,11 +74,22 @@
///
public const int PaymentToEmployeePermissionCode = 10304;
+
///
/// عملیات حساب بانکی پرسنل
///
public const int EmployeeBankInformationPermissionCode = 10309;
+ ///
+ /// عملیات افزودن پرسنل
+ ///
+ public const int AddEmployeePermissionCode = 10310;
+
+ ///
+ /// عملیات افزودن پرسنل
+ ///
+ public const int LeftWorkEmployeePermissionCode = 10311;
+
///
/// ایجاد وام
///
@@ -190,6 +203,12 @@
public const int DeleteFinePermissionCode = 1030804;
#endregion
+ ///
+ /// لیست کل پرسنل
+ ///
+ public const int PersonnelListPermissionCode = 10206;
+
+
#endregion
@@ -562,13 +581,7 @@
Code = PersonnelStatusIndividualReportPermissionCode,
ParentId = WorkshopOperationsPermissionCode
};
- public static SubAccountPermissionDto PersonnelListPermission { get; } = new()
- {
- Id = PersonnelListPermissionCode,
- Name = "لیست کل پرسنل",
- Code = PersonnelListPermissionCode,
- ParentId = WorkshopOperationsPermissionCode
- };
+
#endregion
#region عملیات پرسنل, ParentId = PersonnelOperationsPermissionCode
@@ -613,12 +626,35 @@
ParentId = PersonnelOperationsPermissionCode
};
- #endregion
+ public static SubAccountPermissionDto AddEmployeeInformationPermission { get; } = new()
+ {
+ Id = AddEmployeePermissionCode,
+ Name = "عملیات افزودن پرسنل",
+ Code = AddEmployeePermissionCode,
+ ParentId = PersonnelOperationsPermissionCode
+ };
- #region فیش حقوقی غیر رسمی,ParentId = CustomizeCheckoutOperationsPermissionCode
+ public static SubAccountPermissionDto LeftWorkEmployeeInformationPermission { get; } = new()
+ {
+ Id = LeftWorkEmployeePermissionCode,
+ Name = "عملیات ترک کار پرسنل",
+ Code = LeftWorkEmployeePermissionCode,
+ ParentId = PersonnelOperationsPermissionCode
+ };
+
+ public static SubAccountPermissionDto PersonnelListPermission { get; } = new()
+ {
+ Id = PersonnelListPermissionCode,
+ Name = "لیست کل پرسنل",
+ Code = PersonnelListPermissionCode,
+ ParentId = PersonnelOperationsPermissionCode
+ };
+ #endregion
+
+ #region فیش حقوقی غیر رسمی,ParentId = CustomizeCheckoutOperationsPermissionCode
- public static SubAccountPermissionDto CustomizeCheckoutSetGroupAndSalaryPermission { get; } = new()
+ public static SubAccountPermissionDto CustomizeCheckoutSetGroupAndSalaryPermission { get; } = new()
{
Id = CustomizeCheckoutSetGroupAndSalaryPermissionCode,
Name = "تنظیم گروه بندی و حقوق پرسنل",
diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs
index 81a9d35a..149b5b0f 100644
--- a/0_Framework/Application/Tools.cs
+++ b/0_Framework/Application/Tools.cs
@@ -19,6 +19,7 @@ using Microsoft.Extensions.Logging;
using System.IO.Compression;
using System.Linq;
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
+using System.ComponentModel.DataAnnotations;
namespace _0_Framework.Application;
@@ -32,6 +33,15 @@ public static class Tools
public static string[] DayNames = { "شنبه", "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه" };
public static string[] DayNamesG = { "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه" };
+
+ public static bool IsMobileValid(this string mobileNo)
+ {
+ if (mobileNo.Length < 11)
+ return false;
+ return Regex.IsMatch(mobileNo, "^((09))(\\d{9})$");
+ }
+
+
///
/// دریافت روزهای کارکرد پرسنل در لیست بیمه ماه مشخص شده
/// با کمک شروع بکار و ترک کار
@@ -778,8 +788,8 @@ public static class Tools
{
case "0000000000":
case "1111111111":
- case "22222222222":
- case "33333333333":
+ case "2222222222":
+ case "3333333333":
case "4444444444":
case "5555555555":
case "6666666666":
@@ -1377,15 +1387,41 @@ public static class Tools
var pc = new PersianCalendar();
return ($"{pc.GetYear(date)}/{pc.GetMonth(date):00}/01").ToGeorgianDateTime();
}
- #region Mahan
- ///
- /// این متد سعی میکند رشته را به تاریخ برگرداند و یک بول و دیت تایم برمیگرداند
- ///
- /// تاریخ شمسی
- /// تاریخ
- ///
- public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
+ #region Mahan
+
+
+ ///
+ /// این متد حروف عربی را به فارسی در میاورد. مثال: علي را به علی تبدیل میکند
+ ///
+ ///
+ ///
+ public static string ToPersian(this string text)
{
+ var res = "";
+ foreach (var @char in text)
+ {
+
+ if (@char == char.Parse("ي"))
+ res += "ی";
+ else
+ res += @char;
+ }
+ return res;
+ }
+
+ ///
+ /// این متد سعی میکند رشته را به تاریخ برگرداند و یک بول و دیت تایم برمیگرداند
+ ///
+ /// تاریخ شمسی
+ /// تاریخ
+ ///
+ public static bool TryToGeorgianDateTime(this string persianDate, out DateTime georgianDateTime)
+ {
+ if (string.IsNullOrWhiteSpace(persianDate))
+ {
+ georgianDateTime = new DateTime(3000, 12, 20, new PersianCalendar());
+ return false;
+ }
persianDate = persianDate.ToEnglishNumber();
try
{
diff --git a/0_Framework/Application/UID/UidService.cs b/0_Framework/Application/UID/UidService.cs
index 2a947aa7..ab453f83 100644
--- a/0_Framework/Application/UID/UidService.cs
+++ b/0_Framework/Application/UID/UidService.cs
@@ -32,11 +32,24 @@ public class UidService : IUidService
var json = JsonConvert.SerializeObject(request);
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
- var requestResult = await _httpClient.PostAsync("person/v2", contentType);
- if(!requestResult.IsSuccessStatusCode)
- return null;
- var responseResult = await requestResult.Content.ReadFromJsonAsync();
- return responseResult;
+ try
+ {
+ var requestResult = await _httpClient.PostAsync("person/v2", contentType);
+ if (!requestResult.IsSuccessStatusCode)
+ return null;
+ var responseResult = await requestResult.Content.ReadFromJsonAsync();
+ responseResult.BasicInformation.FirstName = responseResult.BasicInformation.FirstName.ToPersian();
+ responseResult.BasicInformation.LastName = responseResult.BasicInformation.LastName.ToPersian();
+ responseResult.BasicInformation.FatherName = responseResult.BasicInformation.FatherName.ToPersian();
+
+
+ return responseResult;
+ }
+ catch (Exception)
+ {
+
+ return null;
+ }
}
@@ -50,12 +63,19 @@ public class UidService : IUidService
};
var json = JsonConvert.SerializeObject(request);
var contentType = new StringContent(json, Encoding.UTF8, "application/json");
+ try
+ {
+ var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
+ if (!requestResult.IsSuccessStatusCode)
+ return null;
- var requestResult = await _httpClient.PostAsync("mobile/owner/v2", contentType);
- if (!requestResult.IsSuccessStatusCode)
+ var responseResult = await requestResult.Content.ReadFromJsonAsync();
+ return responseResult;
+ }
+ catch (Exception e)
+ {
return null;
+ }
- var responseResult = await requestResult.Content.ReadFromJsonAsync();
- return responseResult;
}
}
\ No newline at end of file
diff --git a/0_Framework/Excel/Checkout/CustomizeCheckoutExcelGenerator.cs b/0_Framework/Excel/Checkout/CustomizeCheckoutExcelGenerator.cs
deleted file mode 100644
index 04fb2112..00000000
--- a/0_Framework/Excel/Checkout/CustomizeCheckoutExcelGenerator.cs
+++ /dev/null
@@ -1,231 +0,0 @@
-using System.Collections.Generic;
-using System.Drawing;
-using System.IO;
-using System.Linq;
-using _0_Framework.Application;
-using OfficeOpenXml;
-
-namespace _0_Framework.Excel.Checkout;
-
-using OfficeOpenXml;
-using OfficeOpenXml.Style;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-
-public class CustomizeCheckoutExcelGenerator
-{
- public static byte[] GenerateCheckoutTempExcelInfo(List data, List selectedParameters)
- {
- OfficeOpenXml.ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
- using var package = new ExcelPackage();
- var worksheet = package.Workbook.Worksheets.Add("Sheet1");
-
-
- // Define headers
- Dictionary headers = new Dictionary
- {
- { "Month", "ماه" },
- { "Year", "سال" },
- { "EmployeeFullName", "نام و نام خانوادگی" },
- { "PersonnelCodeString", "شماره پرسنلی" },
- { "NationalCode", "کدملی" },
- { "SumOfWorkingDays", "روز کارکرد" },
- { "MonthlySalary", "حقوق ماهانه" },
- { "BaseYearsPay", "سنوات" },
- { "MarriedAllowance", "حق تاهل" },
- { "OvertimePay", "اضافه کاری" },
- { "NightworkPay", "شب کاری" },
- { "FridayPay", "جمعه کاری" },
- { "MissionPay", "مأموریت" },
- { "ShiftPay", "نوبت کاری" },
- { "FamilyAllowance", "حق فرزند" },
- { "BonusesPay", "پاداش" },
- { "LeavePay", "مزد مرخصی" },
- { "RewardPay", "پاداش" },
- { "FineDeduction", "جریمه" },
- { "InsuranceDeduction", "حق بیمه" },
- { "TaxDeducation", "مالیات" },
- { "InstallmentDeduction", "قسط وام" },
- { "SalaryAidDeduction", "مساعده" },
- { "AbsenceDeduction", "غیبت" },
- { "EarlyExitDeduction", "تعجیل در خروج" },
- { "LateToWorkDeduction", "تاخیر در ورود" },
- { "TotalClaims", "جمع مطالبات" },
- { "TotalDeductions", "جمع کسورات" },
- { "TotalPayment", "مبلغ قابل پرداخت" },
- { "CardNumber", "شماره کارت" },
- { "ShebaNumber", "شماره شبا" },
- { "BankAccountNumber", "شماره حساب" },
-
- };
- Dictionary filteredHeaders;
- if (!selectedParameters.Any())
- {
- filteredHeaders = headers;
- }
- else
- {
- // Filter headers based on selected parameters
- filteredHeaders = headers.Where(h => selectedParameters.Contains(h.Key)).ToDictionary();
- }
- var indexCell = worksheet.Cells[1, 1];
- indexCell.Value = "ردیف";
- ApplyHeaderStyle(indexCell);
- // Add headers to worksheet
- for (int i = 0; i < filteredHeaders.Count; i++)
- {
- worksheet.Cells[1, i + 2].Value = filteredHeaders.ElementAt(i).Value;
- ApplyHeaderStyle(worksheet.Cells[1, i + 2]);
- }
-
- var dataRow = 2;
- int totalPaymentColumnIndex = -1;
- foreach (var item in data)
- {
- var column = 2;
- foreach (var header in filteredHeaders)
- {
- var property = item.GetType().GetProperty(header.Key);
- var value = property.GetValue(item, null)?.ToString();
-
- // Check if the property requires MoneyToDouble()
- if (RequiresMoneyToDouble(property.Name))
- {
- worksheet.Cells[dataRow, column].Value = MoneyToDouble(value);
- }
- else
- {
- worksheet.Cells[dataRow, column].Value = value;
- }
-
- ApplyGeneralDataStyle(worksheet.Cells[dataRow, column]);
- ApplySpecificStyle(worksheet.Cells[dataRow, column], column); // Apply specific styles
- if (header.Key == "TotalPayment")
- {
- totalPaymentColumnIndex = column;
- }
- column++;
- }
- var rowCounter = worksheet.Cells[dataRow, 1];
- rowCounter.Value = dataRow - 1;
- ApplyGeneralDataStyle(rowCounter);
- ApplySpecificStyle(rowCounter, 1);
-
- dataRow++;
- }
-
- worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
- worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
- worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
- worksheet.PrinterSettings.FitToPage = true;
- worksheet.PrinterSettings.FitToWidth = 1;
- worksheet.PrinterSettings.FitToHeight = 0;
- worksheet.PrinterSettings.Scale = 85;
- worksheet.View.RightToLeft = true;
-
- if (totalPaymentColumnIndex != -1)
- {
- ApplyConditionalFormatting(worksheet, dataRow, totalPaymentColumnIndex);
- }
-
- return package.GetAsByteArray();
- }
-
- // Method to check if a property requires MoneyToDouble()
- private static bool RequiresMoneyToDouble(string propertyName)
- {
- var propertiesRequiringConversion = new HashSet
- {
- "MonthlySalary", "RewardPay", "FridayPay", "OvertimePay", "ShiftPay", "NightWorkPay",
- "MarriedAllowance", "FamilyAllowance", "BonusesPay", "BaseYearsPay", "LeavePay",
- "AbsenceDeduction", "LateToWorkDeduction", "EarlyExitDeduction", "SalaryAidDeduction",
- "InstallmentDeduction", "FineDeduction", "InsuranceDeduction", "TaxDeduction",
- "TotalClaims", "TotalDeductions", "TotalPayment"
- };
- return propertiesRequiringConversion.Contains(propertyName);
- }
-
- // Placeholder for the MoneyToDouble() method
- private static double MoneyToDouble(string value)
- {
- Console.WriteLine(value);
- var min = value.Length>1? value.Substring(0, 2): "";
- var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
-
- Console.WriteLine(test);
- return test;
- }
-
- private static void ApplyHeaderStyle(ExcelRange cell)
- {
- cell.Style.Font.Bold = true;
- cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
- cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
- cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
- cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
- }
-
- private static void ApplyGeneralDataStyle(ExcelRange cell)
- {
- cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
- cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
- cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
- cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
- }
-
- private static void ApplySpecificStyle(ExcelRange cell, int columnIndex)
- {
- switch (columnIndex)
- {
- case int n when (n >= 1 && n <= 8):
- cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
- break;
- case int n when (n >= 9 && n <= 19):
- cell.Style.Fill.BackgroundColor.SetColor(1, 208, 248, 208);
- cell.Style.Numberformat.Format = "#,##0";
- break;
- case int n when (n >= 20 && n <= 27):
- cell.Style.Fill.BackgroundColor.SetColor(1, 246, 176, 176);
- cell.Style.Numberformat.Format = "#,##0";
- break;
- case 28:
- cell.Style.Fill.BackgroundColor.SetColor(1, 169, 208, 142);
- cell.Style.Numberformat.Format = "#,##0";
- break;
- case 29:
- cell.Style.Fill.BackgroundColor.SetColor(1, 241, 143, 143);
- cell.Style.Numberformat.Format = "#,##0";
- break;
- case 30:
- cell.Style.Fill.BackgroundColor.SetColor(1, 168, 186, 254);
- cell.Style.Numberformat.Format = "#,##0";
- break;
- case >= 31 and <= 33:
- cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
- break;
- }
- }
-
- private static void ApplyConditionalFormatting(ExcelWorksheet worksheet, int dataRow, int totalPaymentColumnIndex)
- {
- for (int rowIndex = 2; rowIndex < dataRow; rowIndex++)
- {
- var totalPaymentValue = worksheet.Cells[rowIndex, totalPaymentColumnIndex].Value;
- if (totalPaymentValue != null && double.TryParse(totalPaymentValue.ToString(), out double payment))
- {
- if (payment < 0)
- {
- var rowRange = worksheet.Cells[rowIndex, 1, rowIndex, worksheet.Dimension.End.Column];
- rowRange.Style.Fill.PatternType = ExcelFillStyle.Solid; rowRange.Style.Fill.BackgroundColor.SetColor(Color.Red);
- foreach (var cell in rowRange)
- {
- cell.Style.Font.Color.SetColor(Color.White);
- }
- }
- }
- }
- }
-}
-
diff --git a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
index 023fadff..7097b061 100644
--- a/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
+++ b/Company.Domain/ContarctingPartyAgg/PersonalContractingParty.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Security.Cryptography.X509Certificates;
+using _0_Framework.Application;
using _0_Framework.Domain;
using Company.Domain.empolyerAgg;
using Company.Domain.RepresentativeAgg;
@@ -42,8 +43,44 @@ public class PersonalContractingParty : EntityBase
public string IsActiveString { get; private set; }
public string IsBlock { get; private set; }
+
public int BlockTimes {get; private set; }
+ #region NewProps
+
+ ///
+ /// سری شناسنامه
+ ///
+ public string IdNumberSeri { get; private set; }
+
+ ///
+ /// سریال شناسنامه
+ ///
+ public string IdNumberSerial { get; private set; }
+
+ ///
+ /// نام پدر
+ ///
+ public string FatherName { get; private set; }
+
+ ///
+ /// تاریخ تولد
+ ///
+ public DateTime? DateOfBirth { get; private set; }
+
+ ///
+ /// آیا از طریق ای پی ای احراز هویت شده است
+ ///
+ public bool IsAuthenticated { get; private set; }
+
+
+ ///
+ /// جنسیت
+ ///
+ public Gender Gender { get; private set; }
+ #endregion
+
+
public List Employers { get; private set; }
public Representative Representative { get; set; }
@@ -159,5 +196,21 @@ public class PersonalContractingParty : EntityBase
this.IsActiveString = "false";
}
-
+ public void Authenticated()
+ {
+ IsAuthenticated = true;
+ }
+
+ public void Authentication(string fName, string lName, string fatherName,string idNumber, string idNumberSeri, string idNumberSerial, string dateOfBirth, Gender gender)
+ {
+ this.FName = fName;
+ this.LName = lName;
+ this.FatherName = fatherName;
+ this.IdNumberSeri = idNumberSeri;
+ this.IdNumberSerial = idNumberSerial;
+ this.DateOfBirth = !string.IsNullOrWhiteSpace(dateOfBirth) ? dateOfBirth.ToGeorgianDateTime() : null;
+ this.IdNumber = idNumber;
+ this.Gender = gender;
+ this.IsAuthenticated = true;
+ }
}
\ No newline at end of file
diff --git a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs
index 230c4b1f..6c981a4d 100644
--- a/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs
+++ b/Company.Domain/CustomizeWorkshopEmployeeSettingsAgg/ICustomizeWorkshopEmployeeSettingsRepository.cs
@@ -13,5 +13,6 @@ public interface ICustomizeWorkshopEmployeeSettingsRepository : IRepository GetBy(long groupId);
List GetEmployeeSettingsByWorkshopId(long workshopId);
List GetEmployeeSettingNotInMainGroup(long entityWorkshopId);
+ void RemoveByWorkshopIdAndEmployeeId(long workshopId, long employeeId);
}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeAgg/Employee.cs b/Company.Domain/EmployeeAgg/Employee.cs
index cd3bfc05..c8836b47 100644
--- a/Company.Domain/EmployeeAgg/Employee.cs
+++ b/Company.Domain/EmployeeAgg/Employee.cs
@@ -21,11 +21,13 @@ public class Employee : EntityBase
public Employee(string fName, string lName, string fatherName,
DateTime dateOfBirth, DateTime dateOfIssue, string placeOfIssue,
string nationalCode, string idNumber, string gender, string nationality,
- string phone, string address, string state, string city,
- string maritalStatus, string militaryService, string levelOfEducation, string fieldOfStudy,
- string bankCardNumber, string bankBranch, string insuranceCode, string insuranceHistoryByYear,
- string insuranceHistoryByMonth, string numberOfChildren,string officePhone,
- string mclsUserName, string mclsPassword, string eserviceUserName, string eservicePassword, string taxOfficeUserName, string taxOfficepassword, string sanaUserName, string sanaPassword)
+ string phone = null, string address = null, string state = null, string city = null,
+ string maritalStatus = null, string militaryService = null, string levelOfEducation = null, string fieldOfStudy = null,
+ string bankCardNumber = null, string bankBranch = null, string insuranceCode = null, string insuranceHistoryByYear = null,
+ string insuranceHistoryByMonth = null, string numberOfChildren = null, string officePhone = null,
+ string mclsUserName = null, string mclsPassword = null,
+ string eserviceUserName = null, string eservicePassword = null,
+ string taxOfficeUserName = null, string taxOfficepassword = null, string sanaUserName = null, string sanaPassword = null)
{
FName = fName;
LName = lName;
@@ -135,7 +137,16 @@ public class Employee : EntityBase
#region Pooya
public List EmployeeDocuments { get; set; }
public EmployeeDocumentsAdminSelection EmployeeDocumentsAdminSelection { get; set; }
- public List EmployeeBankInformationList { get; set; }
+ public List EmployeeBankInformationList { get; set; }
+ #endregion
+
+ #region Mahan
+
+ ///
+ /// آیا پرسنل احراز هویت شده است
+ ///
+ public bool IsAuthorized { get; set; }
+
#endregion
//public List Checkouts { get; set; }
@@ -211,4 +222,17 @@ public class Employee : EntityBase
this.IsActive = false;
this.IsActiveString = "false";
}
+
+ #region Mahan
+ public void EditFromEmployeeClientTemp(string maritalStatus)
+ {
+ MaritalStatus = maritalStatus;
+ }
+
+ public void Authorized()
+ {
+ IsAuthorized = true;
+ }
+
+ #endregion
}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs
index eb58c559..6a49fd7e 100644
--- a/Company.Domain/EmployeeAgg/IEmployeeRepository.cs
+++ b/Company.Domain/EmployeeAgg/IEmployeeRepository.cs
@@ -4,6 +4,7 @@ using System.Threading.Tasks;
using _0_Framework.Domain;
using Company.Domain.EmployeeInsuranceRecordAgg;
using CompanyManagment.App.Contracts.Employee;
+using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
namespace Company.Domain.EmployeeAgg;
@@ -47,6 +48,14 @@ public interface IEmployeeRepository : IRepository
Employee GetByNationalCode(string nationalCode);
List GetBy(List employeeIds);
+ Employee GetByNationalCodeIgnoreQueryFilter(string nationalCode);
+ Task> GetClientEmployeesStartWork(long workshopId);
+ Task> GetEmployeesForLeftWorkTemp(long workshopId);
+
+ Employee GetIgnoreQueryFilter(long id);
+
+
+
#endregion
#region Pooya
@@ -54,7 +63,14 @@ public interface IEmployeeRepository : IRepository
List GetWorkingEmployeesByWorkshopIdsAndNationalCodeAndDate(List workshopIds, string nationalCode, DateTime date);
List GetWorkingEmployeesByWorkshopId(long workshopId);
+ List GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(List workshopIds,
+ string nationalCode, DateTime date);
+
List<(long Id, string Name)> SimpleGetRangeByIds(IEnumerable newEmployeeIds);
+ Task GetEmployeeEditInEmployeeDocumentWorkFlow(long employeeId,
+ long workshopId);
+
#endregion
+
}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeClientTempAgg/EmployeeClientTemp.cs b/Company.Domain/EmployeeClientTempAgg/EmployeeClientTemp.cs
new file mode 100644
index 00000000..d2e5c400
--- /dev/null
+++ b/Company.Domain/EmployeeClientTempAgg/EmployeeClientTemp.cs
@@ -0,0 +1,31 @@
+using System;
+using _0_Framework.Domain;
+using Company.Domain.EmployeeAgg;
+
+namespace Company.Domain.EmployeeClientTempAgg;
+
+public class EmployeeClientTemp : EntityBase
+{
+ public EmployeeClientTemp(long workshopId, DateTime startWorkDate, long employeeId, string maritalStatus,
+ string employeeFullName)
+ {
+ StartWorkDate = startWorkDate;
+ WorkshopId = workshopId;
+ EmployeeId = employeeId;
+ MaritalStatus = maritalStatus;
+ EmployeeFullName = employeeFullName;
+ }
+
+ public string EmployeeFullName { get; private set; }
+ public long WorkshopId { get; private set; }
+ public long EmployeeId { get; private set; }
+ public DateTime StartWorkDate { get; private set; }
+
+ public string MaritalStatus { get; private set; }
+
+ public void Edit(string maritalStatus)
+ {
+
+ MaritalStatus = maritalStatus;
+ }
+}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeClientTempAgg/IEmployeeClientTempRepository.cs b/Company.Domain/EmployeeClientTempAgg/IEmployeeClientTempRepository.cs
new file mode 100644
index 00000000..34d4477d
--- /dev/null
+++ b/Company.Domain/EmployeeClientTempAgg/IEmployeeClientTempRepository.cs
@@ -0,0 +1,11 @@
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.EmployeeClientTemp;
+
+namespace Company.Domain.EmployeeClientTempAgg;
+
+public interface IEmployeeClientTempRepository : IRepository
+{
+ EmployeeClientTemp GetByEmployeeIdAndWorkshopId(long employeeId, long commandWorkshopId);
+ EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
+ void Remove(EmployeeClientTemp entity);
+}
\ No newline at end of file
diff --git a/Company.Domain/EmployeeDocumentsAgg/EmployeeDocuments.cs b/Company.Domain/EmployeeDocumentsAgg/EmployeeDocuments.cs
index 65904a35..2889caab 100644
--- a/Company.Domain/EmployeeDocumentsAgg/EmployeeDocuments.cs
+++ b/Company.Domain/EmployeeDocumentsAgg/EmployeeDocuments.cs
@@ -54,11 +54,12 @@ namespace Company.Domain.EmployeeDocumentsAgg
var currentItems = EmployeeDocumentItemCollection.Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted)
.GroupBy(x => x.DocumentLabel).Select(x => x.OrderByDescending(y => y.CreationDate).First());
- var currentItemsFiltered = currentItems.Where(x => x.DocumentStatus == DocumentStatus.Confirmed || x.DocumentStatus == DocumentStatus.SubmittedByAdmin)
- .Select(x => new{x.DocumentStatus,x.DocumentLabel}).ToList();
+ var currentItemsFiltered = currentItems.Where(x => x.DocumentStatus is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient)
+ .Select(x => new { x.DocumentStatus, x.DocumentLabel }).ToList();
+
// ReSharper disable once SimplifyLinqExpressionUseAll
- if (!currentItemsFiltered.Any(x => x.DocumentStatus == DocumentStatus.SubmittedByAdmin))
+ if (!currentItemsFiltered.Any(x => x.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient))
IsSentToChecker = false;
else
diff --git a/Company.Domain/EmployeeDocumentsAgg/IEmployeeDocumentsRepository.cs b/Company.Domain/EmployeeDocumentsAgg/IEmployeeDocumentsRepository.cs
index e77b749c..edd7afaa 100644
--- a/Company.Domain/EmployeeDocumentsAgg/IEmployeeDocumentsRepository.cs
+++ b/Company.Domain/EmployeeDocumentsAgg/IEmployeeDocumentsRepository.cs
@@ -26,9 +26,9 @@ namespace Company.Domain.EmployeeDocumentsAgg
List GetWorkshopsWithDocumentsAwaitingReviewForAdminWorkFlow(List workshops);
List GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId);
- int GetCheckerWorkFlowCount();
- //int GetAdminWorkFlowCountForNewEmployees(List workshopIds);
- int GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds);
+ Task GetCheckerWorkFlowCount();
+ Task GetAdminWorkFlowCountForNewEmployees(List workshopIds);
+ Task GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds);
List GetDocumentsAwaitingReviewByWorkshopIdForCheckerWorkFlow(long workshopId);
}
}
diff --git a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs
index 7c8951bb..4a32f49a 100644
--- a/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs
+++ b/Company.Domain/LeftWorkAgg/ILeftWorkRepository.cs
@@ -27,6 +27,8 @@ public interface ILeftWorkRepository : IRepository
/// یک کلاس از جنس اطلاعات ترک کار
LeftWorkViewModel GetByDateAndWorkshopIdAndEmployeeId(long workshopId, long employeeId, DateTime dateTime);
List GetAllEmployeeIdsInWorkshop(long workshopId);
+ LeftWork GetLastLeftWorkByEmployeeIdAndWorkshopId(long workshopId, long employeeId);
+
#endregion
List GetLeftPersonelByWorkshopId(List workshopIds);
@@ -40,7 +42,7 @@ public interface ILeftWorkRepository : IRepository
bool IsEmployeeWorkingInDates(long employeeId, long workshopId, List<(DateTime, DateTime)> dates);
List GetByWorkshopIdInDates(long workshopId, DateTime startDateGr, DateTime endDateGr);
LeftWorkViewModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end);
- #endregion
+ #endregion
Task GetLastLeftWork(long employeeId, long workshopId);
}
\ No newline at end of file
diff --git a/Company.Domain/LeftWorkTempAgg/ILeftWorkTempRepository.cs b/Company.Domain/LeftWorkTempAgg/ILeftWorkTempRepository.cs
new file mode 100644
index 00000000..500ba1f2
--- /dev/null
+++ b/Company.Domain/LeftWorkTempAgg/ILeftWorkTempRepository.cs
@@ -0,0 +1,17 @@
+using System.Threading.Tasks;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.LeftWorkTemp;
+
+namespace Company.Domain.LeftWorkTempAgg;
+
+public interface ILeftWorkTempRepository:IRepository
+{
+ ///
+ /// گرفتن اطلاعات برای مودال جزئیات شروع به کار موقت یا ترک کار موقت
+ ///
+ ///
+ ///
+ ///
+ Task GetStartAndLeftWorkDetails(long employeeId, long workshopId);
+ void Remove(LeftWorkTemp entity);
+}
\ No newline at end of file
diff --git a/Company.Domain/LeftWorkTempAgg/LeftWorkTemp.cs b/Company.Domain/LeftWorkTempAgg/LeftWorkTemp.cs
new file mode 100644
index 00000000..91e7b3e1
--- /dev/null
+++ b/Company.Domain/LeftWorkTempAgg/LeftWorkTemp.cs
@@ -0,0 +1,65 @@
+using System;
+using _0_Framework.Domain;
+using Company.Domain.LeftWorkAgg;
+using CompanyManagment.App.Contracts.LeftWorkTemp;
+
+namespace Company.Domain.LeftWorkTempAgg;
+
+public class LeftWorkTemp:EntityBase
+{
+ private LeftWorkTemp()
+ {
+
+ }
+
+ ///
+ /// برای ایجاد ترک کار موقت
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static LeftWorkTemp CreateLeftWork(long leftWorkId, DateTime startWorkDate, DateTime leftWork, DateTime lastDayStanding, long workshopId, long employeeId,long jobId)
+ {
+ var leftWorkTemp = new LeftWorkTemp
+ {
+ LeftWorkId = leftWorkId,
+ LeftWork = leftWork,
+ LastDayStanding = lastDayStanding,
+ WorkshopId = workshopId,
+ EmployeeId = employeeId,
+ StartWork = startWorkDate,
+ LeftWorkType = LeftWorkTempType.LeftWork,
+ JobId = jobId
+ };
+
+ return leftWorkTemp;
+ }
+
+
+ public static LeftWorkTemp CreateStartWork(long workshopId, long employeeId, DateTime startDate,long jobId)
+ {
+ var leftWorkTemp = new LeftWorkTemp
+ {
+ StartWork = startDate,
+ WorkshopId = workshopId,
+ EmployeeId = employeeId,
+ JobId = jobId,
+ LeftWorkType = LeftWorkTempType.StartWork
+ };
+ return leftWorkTemp;
+ }
+
+ public long LeftWorkId { get; private set; }
+ public DateTime StartWork { get; private set; }
+ public DateTime LeftWork { get; private set; }
+ public DateTime LastDayStanding { get; private set; }
+ public long WorkshopId { get; private set; }
+ public long EmployeeId { get; private set; }
+ public long JobId { get; private set; }
+ public LeftWorkTempType LeftWorkType { get; private set; }
+}
+
diff --git a/Company.Domain/PersonnelCodeAgg/IPersonnelCodeRepository.cs b/Company.Domain/PersonnelCodeAgg/IPersonnelCodeRepository.cs
index 2123c95b..442e6f9c 100644
--- a/Company.Domain/PersonnelCodeAgg/IPersonnelCodeRepository.cs
+++ b/Company.Domain/PersonnelCodeAgg/IPersonnelCodeRepository.cs
@@ -18,4 +18,11 @@ public interface IPersonnelCodeRepository : IRepository rollCalls = GetRollCallsInShiftDate(rollCall.ShiftDate,employeeId, workshopId).GetAwaiter().GetResult();
+ List rollCalls = GetRollCallsInShiftDate(rollCall.ShiftDate, employeeId, workshopId).GetAwaiter().GetResult();
+
var deletedRollCall = rollCalls.FirstOrDefault(x => x.id == rollCall.id);
rollCalls.Remove(deletedRollCall);
@@ -255,7 +256,7 @@ public class RollCallDomainService : IRollCallDomainService
var lateEntryRollCall = rollCallsInShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > employeeShift.start);
-
+
var previousShift = employeeShifts.OrderByDescending(x => x.start)
.FirstOrDefault(x => x.end < employeeShift.start);
@@ -298,6 +299,8 @@ public class RollCallDomainService : IRollCallDomainService
var lateExitRollCall = rollCallsInShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > employeeShift.end);
+
+
// تعجیل در خروج - زود رفتن
var nextShift = employeeShifts.OrderBy(x => x.start)
.FirstOrDefault(x => x.start > employeeShift.end);
@@ -371,8 +374,7 @@ public class RollCallDomainService : IRollCallDomainService
var lateEntryRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.StartDate).FirstOrDefault(x => x.StartDate > shift.start);
-
-
+
if (earlyEntryRollCallRotating != null)
{
@@ -403,6 +405,7 @@ public class RollCallDomainService : IRollCallDomainService
var lateExitRollCallRotating = rollCallsInRotatingShift.OrderBy(x => x.EndDate).FirstOrDefault(x => x.EndDate > shift.end);
+
if (earlyExitRollCallRotating != null && (rollCallsInRotatingShift.Any(x =>
x.StartDate < rotatingShiftEnd && x.StartDate > earlyExitRollCallRotating.EndDate) == false))
@@ -434,7 +437,7 @@ public class RollCallDomainService : IRollCallDomainService
_rollCallRepository.SaveChanges();
}
- private async Task> GetRollCallsInShiftDate(DateTime rollCallShiftDate,long employeeId,long workshopId)
+ private async Task> GetRollCallsInShiftDate(DateTime rollCallShiftDate, long employeeId, long workshopId)
{
return await _rollCallRepository.GetRollCallsInShiftDate(rollCallShiftDate, employeeId, workshopId);
}
diff --git a/Company.Domain/RollCallAgg/RollCall.cs b/Company.Domain/RollCallAgg/RollCall.cs
index 4865c05b..0da53d46 100644
--- a/Company.Domain/RollCallAgg/RollCall.cs
+++ b/Company.Domain/RollCallAgg/RollCall.cs
@@ -515,8 +515,21 @@ namespace Company.Domain.RollCallAgg
FridayWorkTimeSpan = CalculateFridayWorkDuration(StartDate.Value, EndDate.Value);
}
+
+ ///
+ /// جیزه
+ ///
+ public void ClearTimeDiff()
+ {
+ LateExitDuration = TimeSpan.Zero;
+ EarlyExitDuration = TimeSpan.Zero;
+ LateEntryDuration = TimeSpan.Zero;
+ EarlyEntryDuration = TimeSpan.Zero;
+
+ }
}
+
public enum RollCallModifyType
{
None,
diff --git a/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs b/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs
index a3956bba..d04be761 100644
--- a/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs
+++ b/Company.Domain/RollCallEmployeeAgg/IRollCallEmployeeRepository.cs
@@ -28,6 +28,8 @@ public interface IRollCallEmployeeRepository : IRepository
List GetAllServiceByAccountId(long accountId);
+ bool IsExistActiveServiceByWorkshopId(long workshopId);
}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs b/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs
new file mode 100644
index 00000000..b72758d3
--- /dev/null
+++ b/Company.Domain/TemporaryClientRegistrationAgg/ContractingPartyTemp.cs
@@ -0,0 +1,96 @@
+using System;
+using _0_Framework.Application;
+using _0_Framework.Domain;
+
+namespace Company.Domain.TemporaryClientRegistrationAgg;
+
+public class ContractingPartyTemp : EntityBase
+{
+ public ContractingPartyTemp(string fName, string lName, string nationalCode, string idNumber, string phone, string fatherName, string state, string city, string address, string idNumberSeri, string idNumberSerial, Gender gender, DateTime dateOfBirth)
+ {
+ FName = fName;
+ LName = lName;
+ NationalCode = nationalCode;
+ IdNumber = idNumber;
+ Phone = phone;
+ FatherName = fatherName;
+ State = state;
+ City = city;
+ Address = address;
+ IdNumberSeri = idNumberSeri;
+ IdNumberSerial = idNumberSerial;
+ Gender = gender;
+ DateOfBirth = dateOfBirth;
+ }
+
+ ///
+ /// نام
+ ///
+ public string FName { get; private set; }
+ ///
+ /// نام خانوادگی
+ ///
+ public string LName { get; private set; }
+
+ ///
+ /// نام پدر
+ ///
+ public string FatherName { get; private set; }
+
+ ///
+ /// جنسیت
+ ///
+ public Gender Gender { get; private set; }
+
+ ///
+ /// کد ملی
+ ///
+ public string NationalCode { get; private set; }
+
+ ///
+ ///تاریخ تولد
+ ///
+ public DateTime DateOfBirth { get; private set; }
+
+ ///
+ /// سری شناسنامه
+ ///
+ public string IdNumberSeri { get; private set; }
+
+ ///
+ /// سریال شناسنامه
+ ///
+ public string IdNumberSerial { get; private set; }
+
+
+ ///
+ /// شماره شناسنامه
+ ///
+ public string IdNumber { get; private set; }
+
+
+
+ ///
+ /// شماره همراه
+ ///
+ public string Phone { get; private set; }
+
+
+ ///
+ /// استان
+ ///
+ public string State { get; private set; }
+
+ ///
+ /// شهر
+ ///
+ public string City { get; private set; }
+
+ ///
+ /// نشانی
+ ///
+ public string Address { get; private set; }
+
+
+
+}
\ No newline at end of file
diff --git a/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs b/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs
new file mode 100644
index 00000000..223b466a
--- /dev/null
+++ b/Company.Domain/TemporaryClientRegistrationAgg/IContractingPartyTempRepository.cs
@@ -0,0 +1,23 @@
+using System.Threading.Tasks;
+using _0_Framework.Domain;
+using CompanyManagment.App.Contracts.TemporaryClientRegistration;
+
+namespace Company.Domain.TemporaryClientRegistrationAgg;
+
+public interface IContractingPartyTempRepository :IRepository
+{
+ ///
+ /// چک میکند که آیا طرف حساب با این کد ملی قبلا ایجاد شده است یا خبر
+ /// اگر ایجاد شده احراز هویت نشده احراز هویت میشود
+ ///
+ ///
+ ///
+ Task CheckExistOrAuthenticated(string nationalCode, string dateOfBirth);
+
+ ///
+ /// دریافت اطلاعات طرف حساب موقت با کد ملی
+ ///
+ ///
+ ///
+ ContractingPartyTempViewModel GetByNationalCode(string nationalCode);
+}
\ No newline at end of file
diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
index 1a9cc9c4..732d453c 100644
--- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
+++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs
@@ -1,9 +1,11 @@
using System.Collections.Generic;
+using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.PersonalContractingParty;
using CompanyManagment.App.Contracts.Workshop;
+using CompanyManagment.App.Contracts.Workshop.DTOs;
namespace Company.Domain.WorkshopAgg;
@@ -59,18 +61,23 @@ public interface IWorkshopRepository : IRepository
List PrintWorkshopList(WorkshopSearchModel searchModel);
#endregion
+
#region Mahan
PersonalContractingPartyViewModel GetPersonalContractingPartyByWorkshopId(long workshopId);
List GetWorkshopsByClientAccountId(long clientAccountId);
+ Task> GetWorkshopsForEmployeeStartWork(long accountId);
+ Task GetWorkshopsForEmployeeStartWorkCount(long accountId);
+ Task> GetWorkshopsForLeftWorkTemp(long accountId);
+ Task GetWorkshopsForLeftWorkTempCount(long accountId);
- #endregion
+ #endregion
- #region Insurance
- ///
- /// لیست انتخاب کارگاه در مودال ایجاد بیمه
- ///
- ///
- List GetWorkshopSelectListInsuransce();
+ #region Insurance
+ ///
+ /// لیست انتخاب کارگاه در مودال ایجاد بیمه
+ ///
+ ///
+ List GetWorkshopSelectListInsuransce();
#endregion
///
@@ -87,4 +94,13 @@ public interface IWorkshopRepository : IRepository
///
///
OperationResult EditAccountLeftWorkAndWorkshopAccounts(List accountIds, long workshopId);
+
+
+ #region Pooya
+
+ List GetPersonnelInfoRemastered(long searchModelWorkshopId);
+
+
+ #endregion
+
}
\ No newline at end of file
diff --git a/CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutExcelGenerator.cs b/CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutExcelGenerator.cs
new file mode 100644
index 00000000..313b456a
--- /dev/null
+++ b/CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutExcelGenerator.cs
@@ -0,0 +1,229 @@
+using System.Drawing;
+using _0_Framework.Application;
+using OfficeOpenXml;
+using OfficeOpenXml.Style;
+
+namespace CompanyManagement.Infrastructure.Excel.Checkout;
+
+public class CustomizeCheckoutExcelGenerator
+{
+
+ public static Dictionary Header { get; set; } = new() {
+ { "Month", "ماه" },
+ { "Year", "سال" },
+ { "EmployeeFullName", "نام و نام خانوادگی" },
+ { "PersonnelCodeString", "شماره پرسنلی" },
+ { "NationalCode", "کدملی" },
+ { "SumOfWorkingDays", "روز کارکرد" },
+ { "MonthlySalary", "حقوق ماهانه" },
+ { "BaseYearsPay", "سنوات" },
+ { "MarriedAllowance", "حق تاهل" },
+ { "OvertimePay", "اضافه کاری" },
+ { "NightworkPay", "شب کاری" },
+ { "FridayPay", "جمعه کاری" },
+ { "MissionPay", "مأموریت" },
+ { "ShiftPay", "نوبت کاری" },
+ { "FamilyAllowance", "حق فرزند" },
+ { "BonusesPay", "پاداش" },
+ { "LeavePay", "مزد مرخصی" },
+ { "RewardPay", "پاداش" },
+ { "FineDeduction", "جریمه" },
+ { "InsuranceDeduction", "حق بیمه" },
+ { "TaxDeducation", "مالیات" },
+ { "InstallmentDeduction", "قسط وام" },
+ { "SalaryAidDeduction", "مساعده" },
+ { "AbsenceDeduction", "غیبت" },
+ { "EarlyExitDeduction", "تعجیل در خروج" },
+ { "LateToWorkDeduction", "تاخیر در ورود" },
+ { "TotalClaims", "جمع مطالبات" },
+ { "TotalDeductions", "جمع کسورات" },
+ { "TotalPayment", "مبلغ قابل پرداخت" },
+ { "CardNumber", "شماره کارت" },
+ { "ShebaNumber", "شماره شبا" },
+ { "BankAccountNumber", "شماره حساب" },
+ { "BankName", "نام بانک" },
+
+ };
+ public static byte[] GenerateCheckoutTempExcelInfo(List data, List selectedParameters)
+ {
+ OfficeOpenXml.ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
+ using var package = new ExcelPackage();
+ var worksheet = package.Workbook.Worksheets.Add("Sheet1");
+
+
+ // Define headers
+
+ Dictionary filteredHeaders;
+ if (!selectedParameters.Any())
+ {
+ filteredHeaders = Header;
+ }
+ else
+ {
+ // Filter headers based on selected parameters
+ filteredHeaders = Header.Where(h => selectedParameters.Contains(h.Key)).ToDictionary();
+ }
+ var indexCell = worksheet.Cells[1, 1];
+ indexCell.Value = "ردیف";
+ ApplyHeaderStyle(indexCell);
+ // Add headers to worksheet
+ for (int i = 0; i < filteredHeaders.Count; i++)
+ {
+ worksheet.Cells[1, i + 2].Value = filteredHeaders.ElementAt(i).Value;
+ ApplyHeaderStyle(worksheet.Cells[1, i + 2]);
+ }
+
+ var dataRow = 2;
+ int totalPaymentColumnIndex = -1;
+ foreach (var item in data)
+ {
+ var column = 2;
+ foreach (var header in filteredHeaders)
+ {
+ var property = item.GetType().GetProperty(header.Key);
+ var value = property.GetValue(item, null)?.ToString();
+
+ // Check if the property requires MoneyToDouble()
+ if (RequiresMoneyToDouble(property.Name))
+ {
+ worksheet.Cells[dataRow, column].Value = MoneyToDouble(value);
+ }
+ else
+ {
+ worksheet.Cells[dataRow, column].Value = value;
+ }
+
+ ApplyGeneralDataStyle(worksheet.Cells[dataRow, column]);
+ ApplySpecificStyle(worksheet.Cells[dataRow, column], column, worksheet); // Apply specific styles
+ if (header.Key == "TotalPayment")
+ {
+ totalPaymentColumnIndex = column;
+ }
+ column++;
+ }
+ var rowCounter = worksheet.Cells[dataRow, 1];
+ rowCounter.Value = dataRow - 1;
+ ApplyGeneralDataStyle(rowCounter);
+ ApplySpecificStyle(rowCounter, 1, worksheet);
+
+ dataRow++;
+ }
+
+ worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
+ worksheet.PrinterSettings.PaperSize = ePaperSize.A4;
+ worksheet.PrinterSettings.Orientation = eOrientation.Landscape;
+ worksheet.PrinterSettings.FitToPage = true;
+ worksheet.PrinterSettings.FitToWidth = 1;
+ worksheet.PrinterSettings.FitToHeight = 0;
+ worksheet.PrinterSettings.Scale = 85;
+ worksheet.View.RightToLeft = true;
+
+ if (totalPaymentColumnIndex != -1)
+ {
+ ApplyConditionalFormatting(worksheet, dataRow, totalPaymentColumnIndex);
+ }
+
+ return package.GetAsByteArray();
+ }
+
+ // Method to check if a property requires MoneyToDouble()
+ private static bool RequiresMoneyToDouble(string propertyName)
+ {
+ var propertiesRequiringConversion = new HashSet
+ {
+ "MonthlySalary", "RewardPay", "FridayPay", "OvertimePay", "ShiftPay", "NightWorkPay",
+ "MarriedAllowance", "FamilyAllowance", "BonusesPay", "BaseYearsPay", "LeavePay",
+ "AbsenceDeduction", "LateToWorkDeduction", "EarlyExitDeduction", "SalaryAidDeduction",
+ "InstallmentDeduction", "FineDeduction", "InsuranceDeduction", "TaxDeduction",
+ "TotalClaims", "TotalDeductions", "TotalPayment"
+ };
+ return propertiesRequiringConversion.Contains(propertyName);
+ }
+
+ // Placeholder for the MoneyToDouble() method
+ private static double MoneyToDouble(string value)
+ {
+ Console.WriteLine(value);
+ var min = value.Length > 1 ? value.Substring(0, 2) : "";
+ var test = min == "\u200e\u2212" ? value.MoneyToDouble() * -1 : value.MoneyToDouble();
+
+ Console.WriteLine(test);
+ return test;
+ }
+
+ private static void ApplyHeaderStyle(ExcelRange cell)
+ {
+ cell.Style.Font.Bold = true;
+ cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
+ cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
+ cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
+ cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
+ }
+
+ private static void ApplyGeneralDataStyle(ExcelRange cell)
+ {
+ cell.Style.Border.BorderAround(ExcelBorderStyle.Thin);
+ cell.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
+ cell.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
+ cell.Style.Fill.PatternType = ExcelFillStyle.Solid;
+ }
+
+ private static void ApplySpecificStyle(ExcelRange cell, int columnIndex, ExcelWorksheet worksheet)
+ {
+ var headerCell = worksheet.Cells[1, columnIndex].Value.ToString();
+
+ var index = Header.Values.ToList().IndexOf(headerCell);
+ index += 2;
+
+ switch (index)
+ {
+ case int n when (n >= 1 && n <= 8):
+ cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
+ break;
+ case int n when (n >= 9 && n <= 19):
+ cell.Style.Fill.BackgroundColor.SetColor(1, 208, 248, 208);
+ cell.Style.Numberformat.Format = "#,##0";
+ break;
+ case int n when (n >= 20 && n <= 27):
+ cell.Style.Fill.BackgroundColor.SetColor(1, 246, 176, 176);
+ cell.Style.Numberformat.Format = "#,##0";
+ break;
+ case 28:
+ cell.Style.Fill.BackgroundColor.SetColor(1, 169, 208, 142);
+ cell.Style.Numberformat.Format = "#,##0";
+ break;
+ case 29:
+ cell.Style.Fill.BackgroundColor.SetColor(1, 241, 143, 143);
+ cell.Style.Numberformat.Format = "#,##0";
+ break;
+ case 30:
+ cell.Style.Fill.BackgroundColor.SetColor(1, 168, 186, 254);
+ cell.Style.Numberformat.Format = "#,##0";
+ break;
+ case >= 31 and <= 34:
+ cell.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightYellow);
+ break;
+ }
+ }
+
+ private static void ApplyConditionalFormatting(ExcelWorksheet worksheet, int dataRow, int totalPaymentColumnIndex)
+ {
+ for (int rowIndex = 2; rowIndex < dataRow; rowIndex++)
+ {
+ var totalPaymentValue = worksheet.Cells[rowIndex, totalPaymentColumnIndex].Value;
+ if (totalPaymentValue != null && double.TryParse(totalPaymentValue.ToString(), out double payment))
+ {
+ if (payment < 0)
+ {
+ var rowRange = worksheet.Cells[rowIndex, 1, rowIndex, worksheet.Dimension.End.Column];
+ rowRange.Style.Fill.PatternType = ExcelFillStyle.Solid; rowRange.Style.Fill.BackgroundColor.SetColor(Color.Red);
+ foreach (var cell in rowRange)
+ {
+ cell.Style.Font.Color.SetColor(Color.White);
+ }
+ }
+ }
+ }
+ }
+}
+
diff --git a/0_Framework/Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs b/CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs
similarity index 94%
rename from 0_Framework/Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs
rename to CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs
index 74f18f64..a0958f1a 100644
--- a/0_Framework/Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs
+++ b/CompanyManagement.Infrastructure.Excel/Checkout/CustomizeCheckoutTempExcelViewModel.cs
@@ -1,6 +1,4 @@
-using System;
-
-namespace _0_Framework.Excel.Checkout;
+namespace CompanyManagement.Infrastructure.Excel.Checkout;
public class CustomizeCheckoutTempExcelViewModel
{
@@ -52,5 +50,7 @@ public class CustomizeCheckoutTempExcelViewModel
public string CardNumber { get; set; }
public string ShebaNumber { get; set; }
+ public string BankName { get; set; }
+
}
\ No newline at end of file
diff --git a/0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs b/CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs
similarity index 98%
rename from 0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs
rename to CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs
index 5639c523..9e71b3b3 100644
--- a/0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs
+++ b/CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelGenerator.cs
@@ -1,11 +1,7 @@
-using System.Collections.Generic;
-using System.Drawing;
-using OfficeOpenXml;
+using OfficeOpenXml;
using OfficeOpenXml.Style;
-using System.Linq;
-using OfficeOpenXml.Table.PivotTable;
-namespace _0_Framework.Excel.EmployeeBankInfo;
+namespace CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
public class EmployeeBankInfoExcelGenerator
{
diff --git a/0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs b/CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs
similarity index 84%
rename from 0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs
rename to CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs
index 6b332ea9..274201dd 100644
--- a/0_Framework/Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs
+++ b/CompanyManagement.Infrastructure.Excel/EmployeeBankInfo/EmployeeBankInfoExcelViewModel.cs
@@ -1,7 +1,5 @@
-using System.Collections.Generic;
-
-namespace _0_Framework.Excel.EmployeeBankInfo;
+namespace CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
public class EmployeeBankInfoExcelViewModel
{
diff --git a/0_Framework/Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
similarity index 93%
rename from 0_Framework/Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
rename to CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
index 169d98d1..68144324 100644
--- a/0_Framework/Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
+++ b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallExcelViewModel.cs
@@ -1,7 +1,4 @@
-using System.Collections.Generic;
-using System;
-
-namespace _0_Framework.Excel.RollCall;
+namespace CompanyManagement.Infrastructure.Excel.RollCall;
diff --git a/0_Framework/Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs
similarity index 82%
rename from 0_Framework/Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs
rename to CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs
index a0627aa1..56d611a2 100644
--- a/0_Framework/Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs
+++ b/CompanyManagement.Infrastructure.Excel/RollCall/CaseHistoryRollCallForOneDayViewModel.cs
@@ -1,8 +1,4 @@
-using System.Collections.Generic;
-using System;
-using System.Security.Cryptography;
-
-namespace _0_Framework.Excel.RollCall;
+namespace CompanyManagement.Infrastructure.Excel.RollCall;
public class CaseHistoryRollCallForOneDayViewModel
{
diff --git a/0_Framework/Excel/RollCall/RollCallExcelGenerator.cs b/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
similarity index 99%
rename from 0_Framework/Excel/RollCall/RollCallExcelGenerator.cs
rename to CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
index f025f5bd..4d10e241 100644
--- a/0_Framework/Excel/RollCall/RollCallExcelGenerator.cs
+++ b/CompanyManagement.Infrastructure.Excel/RollCall/RollCallExcelGenerator.cs
@@ -1,11 +1,8 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
+using _0_Framework.Excel;
using OfficeOpenXml;
using OfficeOpenXml.Drawing;
-namespace _0_Framework.Excel.RollCall;
+namespace CompanyManagement.Infrastructure.Excel.RollCall;
public class RollCallExcelGenerator : ExcelGenerator
{
diff --git a/CompanyManagment.App.Contracts/CustomizeCheckout/SearchCustomizeCheckout.cs b/CompanyManagment.App.Contracts/CustomizeCheckout/SearchCustomizeCheckout.cs
index 91e6db26..518c09c4 100644
--- a/CompanyManagment.App.Contracts/CustomizeCheckout/SearchCustomizeCheckout.cs
+++ b/CompanyManagment.App.Contracts/CustomizeCheckout/SearchCustomizeCheckout.cs
@@ -14,6 +14,8 @@ public class SearchCustomizeCheckout
public string SearchEndFa { get; set; }
public long EmployeeId { get; set; }
+ public long BankId { get; set; }
+
public CustomizeCheckoutOrderByEnum OrderBy { get; set; } = CustomizeCheckoutOrderByEnum.ContractStartDesc;
public int PageIndex { get; set; }
}
diff --git a/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs b/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs
new file mode 100644
index 00000000..29f9346c
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/CreateEmployeeByClient.cs
@@ -0,0 +1,42 @@
+using System.Collections.Generic;
+using _0_Framework.Application;
+using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
+using CompanyManagment.App.Contracts.EmployeeBankInformation;
+using CompanyManagment.App.Contracts.EmployeeDocuments;
+using CompanyManagment.App.Contracts.RollCallEmployee;
+using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
+using Microsoft.Extensions.Logging;
+
+namespace CompanyManagment.App.Contracts.Employee;
+
+public class CreateEmployeeByClient
+{
+ public string NationalCode { get; set; }
+ public string Nationality { get; set; }
+ public string Gender { get; set; }
+ public string FirstName { get; set; }
+ public string LastName { get; set; }
+ public string MaritalStatus { get; set; }
+ public long WorkshopId { get; set; }
+ public string StartLeftWork { get; set; }
+ public RollCallUploadEmployeePicture RollCallUploadEmployeePicture { get; set; }
+ public EditCustomizeEmployeeSettings CreateCustomizeEmployeeSettings { get; set; }
+ public ICollection EmployeeBankInfos { get; set; }
+ public bool HasBankInformation { get; set; }
+ public string PersonnelCode { get; set; }
+ public long JobId { get; set; }
+ public List EmployeeDocumentItems { get; set; }
+ public bool HasEmployeeDocument { get; set; }
+ public bool HasRollCallService { get; set; }
+}
+
+
+
+public record RollCallUploadEmployeePicture
+{
+ public string Picture1 { get; set; }
+ public string Picture2 { get; set; }
+ public string EmployeeFullName { get; set; }
+ public string IsActiveString { get; set; }
+ public string HasUploadedImage { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/DTO/ClientLeftWorkWorkEmployeesDto.cs b/CompanyManagment.App.Contracts/Employee/DTO/ClientLeftWorkWorkEmployeesDto.cs
new file mode 100644
index 00000000..224a60cd
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/DTO/ClientLeftWorkWorkEmployeesDto.cs
@@ -0,0 +1,12 @@
+namespace CompanyManagment.App.Contracts.Employee;
+
+public class ClientLeftWorkWorkEmployeesDto
+{
+ public long EmployeeId { get; set; }
+
+ public long WorkshopId { get; set; }
+
+ public string EmployeeName { get; set; } = string.Empty;
+
+ public string LeftWorkDateTime { get; set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/DTO/ClientStartedWorkEmployeesDto.cs b/CompanyManagment.App.Contracts/Employee/DTO/ClientStartedWorkEmployeesDto.cs
new file mode 100644
index 00000000..61f97c72
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/DTO/ClientStartedWorkEmployeesDto.cs
@@ -0,0 +1,18 @@
+namespace CompanyManagment.App.Contracts.Employee.DTO;
+
+///
+/// پرسنل هایی که درسمت ادمین شروع به کار کرده اند
+///
+public class ClientStartedWorkEmployeesDto
+{
+ public long EmployeeId { get; set; }
+
+ public long WorkshopId { get; set; }
+
+ public string EmployeeName { get; set; } = string.Empty;
+
+ ///
+ /// آیا آپلود مدارک اصلی رو انجام داده یا نه
+ ///
+ public bool HasCompleteEmployeeDocument { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/EditEmployeeInEmployeeDocument.cs b/CompanyManagment.App.Contracts/Employee/EditEmployeeInEmployeeDocument.cs
new file mode 100644
index 00000000..6dfbda13
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/EditEmployeeInEmployeeDocument.cs
@@ -0,0 +1,17 @@
+namespace CompanyManagment.App.Contracts.Employee;
+
+public class EditEmployeeInEmployeeDocument
+{
+ public long EmployeeId { get; set; }
+ public long WorkshopId { get; set; }
+ public string FName { get; set; } = string.Empty;
+ public string LName { get; set; } = string.Empty;
+ public string NationalCode { get; set; } = string.Empty;
+ public string IdNumber { get; set; } = string.Empty;
+ public string FatherName { get; set; } = string.Empty;
+ public string BirthDate { get; set; } = string.Empty;
+ public string MaritalStatus { get; set; } = string.Empty;
+ public string MilitaryService { get; set; } = string.Empty;
+ public string Nationality { get; set; } = string.Empty;
+ public string Gender { get; set; } = string.Empty;
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/EmployeeByNationalCodeInWorkshopViewModel.cs b/CompanyManagment.App.Contracts/Employee/EmployeeByNationalCodeInWorkshopViewModel.cs
new file mode 100644
index 00000000..3e4c10e6
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/EmployeeByNationalCodeInWorkshopViewModel.cs
@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+using System.Security.Cryptography;
+using CompanyManagment.App.Contracts.EmployeeDocuments;
+
+namespace CompanyManagment.App.Contracts.Employee;
+
+public record EmployeeByNationalCodeInWorkshopViewModel
+{
+ public string EmployeeFName { get; set; }
+ public string EmployeeLName { get; set; }
+ public string Nationality { get; set; }
+ public string Gender { get; set; }
+ public string MaritalStatus { get; set; }
+ public long EmployeeId { get; set; }
+ public string Picture1 { get; set; }
+ public string Picture2 { get; set; }
+ public long PersonnelCode { get; set; }
+ public List EmployeeBankInfos { get; set; }
+ public EmployeeByNationalCodeEmployeeDocumentViewModel EmployeeDocument { get; set; }
+
+}
+
+public class EmployeeByNationalCodeEmployeeDocumentViewModel
+{
+ //عکس پرسنل
+ public EmployeeDocumentItemViewModel EmployeePicture { get; set; }
+
+ //شناسنامه
+ public EmployeeDocumentItemViewModel IdCardPage1 { get; set; }
+ public EmployeeDocumentItemViewModel IdCardPage2 { get; set; }
+ public EmployeeDocumentItemViewModel IdCardPage3 { get; set; }
+ public EmployeeDocumentItemViewModel IdCardPage4 { get; set; }
+
+ //کارت ملی
+ public EmployeeDocumentItemViewModel NationalCardFront { get; set; }
+
+ public EmployeeDocumentItemViewModel NationalCardRear { get; set; }
+ //مدرک تحصیلی
+ public EmployeeDocumentItemViewModel EducationalDegree { get; set; }
+
+ //کارت پایان خدمت
+ public EmployeeDocumentItemViewModel MilitaryServiceCard { get; set; }
+}
+
+public class EmployeeByNationalCodeEmployeeBankInfoViewModel
+{
+ public string BankName { get; set; }
+ public string BankLogoPath { get; set; }
+ public string CardNumber { get; set; }
+ public string ShebaNumber { get; set; }
+ public string BankAccountNumber { get; set; }
+ public bool IsDefault { get; set; }
+ public long BankId { get; set; }
+ public long BankLogoMediaId { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/GetEditEmployeeInEmployeeDocumentViewModel.cs b/CompanyManagment.App.Contracts/Employee/GetEditEmployeeInEmployeeDocumentViewModel.cs
new file mode 100644
index 00000000..2017623b
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Employee/GetEditEmployeeInEmployeeDocumentViewModel.cs
@@ -0,0 +1,17 @@
+namespace CompanyManagment.App.Contracts.Employee;
+
+public class GetEditEmployeeInEmployeeDocumentViewModel
+{
+ public long EmployeeId { get; set; }
+ public string FName { get; set; } = string.Empty;
+ public string LName { get; set; } = string.Empty;
+ public string NationalCode { get; set; } = string.Empty;
+ public string IdNumber { get; set; } = string.Empty;
+ public string FatherName { get; set; } = string.Empty;
+ public string BirthDate { get; set; } = string.Empty;
+ public string MaritalStatus { get; set; } = string.Empty;
+ public string MilitaryService { get; set; } = string.Empty;
+ public string Nationality { get; set; } = string.Empty;
+ public string Gender { get; set; } = string.Empty;
+ public bool IsAuthorized { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs
index cc493a21..4ec027f8 100644
--- a/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs
+++ b/CompanyManagment.App.Contracts/Employee/IEmployeeApplication.cs
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
+using CompanyManagment.App.Contracts.Employee.DTO;
using CompanyManagment.App.Contracts.EmployeeInsuranceRecord;
namespace CompanyManagment.App.Contracts.Employee;
@@ -44,6 +45,33 @@ public interface IEmployeeApplication
List GetWorkingEmployeesByWorkshopId(long workshopId);
+ EmployeeViewModel GetEmployeeByNationalCodeIfHasLeftWork(string nationalCode, List workshopIds);
+ #endregion
+
+ #region Mahan
+ OperationResult CreateEmployeeByClient(CreateEmployeeByClient command);
+
+ ///
+ /// اطلاعات پرسنل با کد ملی در کارگاه. اگر در کارگاه کار نکرده باشه وجود نداشته باشه اطلاعات خالی داده میشه
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task>
+ ValidateCreateEmployeeClientByNationalCodeAndWorkshopId(string nationalCode,
+ string birthDate, long workshopId);
+
+ ///
+ /// پرسنل هایی که در کارگاهی از سمت ادمین شروع به کار کرده اند
+ ///
+ ///
+ ///
+ Task> GetClientEmployeesStartWork(long workshopId);
+ Task> GetEmployeesForLeftWorkTemp(long workshopId);
+ Task GetEmployeeEditInEmployeeDocumentWorkFlow(long employeeId,
+ long workshopId);
+ Task EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command);
#endregion
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/EmployeeClientTemp/CreateEmployeeClientTemp.cs b/CompanyManagment.App.Contracts/EmployeeClientTemp/CreateEmployeeClientTemp.cs
new file mode 100644
index 00000000..e2614c1e
--- /dev/null
+++ b/CompanyManagment.App.Contracts/EmployeeClientTemp/CreateEmployeeClientTemp.cs
@@ -0,0 +1,15 @@
+using System;
+
+namespace CompanyManagment.App.Contracts.EmployeeClientTemp;
+
+public class CreateEmployeeClientTemp
+{
+ public string FName { get; set; }
+ public string LName { get; set; }
+ public string NationalCode { get; set; }
+ public string Nationality { get; set; }
+ public string MaritalStatus { get; set; }
+ public long WorkshopId { get; set; }
+ public long EmployeeId { get; set; }
+ public DateTime StartWorkTime { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/EmployeeClientTemp/IEmployeeClientTempApplication.cs b/CompanyManagment.App.Contracts/EmployeeClientTemp/IEmployeeClientTempApplication.cs
new file mode 100644
index 00000000..cc34e161
--- /dev/null
+++ b/CompanyManagment.App.Contracts/EmployeeClientTemp/IEmployeeClientTempApplication.cs
@@ -0,0 +1,26 @@
+using System;
+using _0_Framework_b.Application;
+
+namespace CompanyManagment.App.Contracts.EmployeeClientTemp;
+
+public interface IEmployeeClientTempApplication
+{
+ OperationResult Create(CreateEmployeeClientTemp command);
+
+ EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId);
+
+}
+
+public class EmployeeClientTempGetDetailsViewModel
+{
+ public long WorkshopId { get; set; }
+ public long EmployeeId { get; set; }
+ public string StartWorkDate { get; set; }
+ public string FName { get; set; }
+ public string LName { get; set; }
+
+ public string FullName => $"{FName} {LName}";
+ public string NationalCode { get; set; }
+ public string Nationality { get; set; }
+
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs b/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs
index 2b14209e..29d99e89 100644
--- a/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs
+++ b/CompanyManagment.App.Contracts/EmployeeDocuments/IEmployeeDocumentsApplication.cs
@@ -12,7 +12,7 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
OperationResult AddEmployeeDocumentItemForAdmin(AddEmployeeDocumentItem command);
- OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId,
+ OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId,
List command);
///
@@ -49,10 +49,16 @@ namespace CompanyManagment.App.Contracts.EmployeeDocuments
List GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId);
List GetDocumentsAwaitingReviewByWorkshopIdForCheckerWorkFlow(long workshopId);
- int GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds);
- //int GetAdminWorkFlowCountForNewEmployees(List workshopIds);
+ Task GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds);
+ Task GetAdminWorkFlowCountForNewEmployees(List workshopIds);
OperationResult RemoveByAdmin(long documentItemId);
- int GetCheckerWorkFlowCount();
+ Task GetCheckerWorkFlowCount();
+
+ ///
+ /// برای افزودن یکباره مدارک در افزودن پرسنل توسط ادمین
+ ///
+ OperationResult AddRangeEmployeeDocumentItemsByAdmin(long workshopId, long employeeId,
+ List command);
}
}
diff --git a/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTemp.cs b/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTemp.cs
new file mode 100644
index 00000000..3e0caf08
--- /dev/null
+++ b/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTemp.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+
+namespace CompanyManagment.App.Contracts.LeftWorkTemp;
+
+public class CreateLeftWorkTemp
+{
+ public List EmployeeIds { get; set; }
+ public long WorkshopId { get; set; }
+ public string LeftWorkTime { get; set; }
+ public string LastDayStanding { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTempSingleViewModel.cs b/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTempSingleViewModel.cs
new file mode 100644
index 00000000..5fb889ec
--- /dev/null
+++ b/CompanyManagment.App.Contracts/LeftWorkTemp/CreateLeftWorkTempSingleViewModel.cs
@@ -0,0 +1,9 @@
+using System.Collections.Generic;
+
+namespace CompanyManagment.App.Contracts.LeftWorkTemp;
+
+public class CreateLeftWorkTempSingleViewModel
+{
+ public string EmployeeFullName { get; set; }
+ public List EmployeeIds { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/LeftWorkTemp/ILeftWorkTempApplication.cs b/CompanyManagment.App.Contracts/LeftWorkTemp/ILeftWorkTempApplication.cs
new file mode 100644
index 00000000..a6e27982
--- /dev/null
+++ b/CompanyManagment.App.Contracts/LeftWorkTemp/ILeftWorkTempApplication.cs
@@ -0,0 +1,71 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using _0_Framework.Application;
+using CompanyManagment.App.Contracts.LeftWork;
+
+namespace CompanyManagment.App.Contracts.LeftWorkTemp;
+
+public interface ILeftWorkTempApplication
+{
+ Task Create(CreateLeftWorkTemp command);
+
+ ///
+ /// گرفتن اطلاعات برای مودال جزئیات شروع به کار موقت یا ترک کار موقت
+ ///
+ ///
+ ///
+ ///
+ Task GetStartAndLeftWorkDetails(long employeeId,long workshopId);
+
+ ///
+ /// تایید شروع به کار موقت
+ ///
+ ///
+ ///
+ Task AcceptStartWork(AcceptStartWorkTemp command);
+
+ ///
+ /// تایید ترک کار موقت
+ ///
+ ///
+ ///
+ Task AcceptLeftWork(AcceptLeftWorkTemp command);
+}
+
+public class AcceptLeftWorkTemp
+{
+ public long LeftWorkTempId { get; set; }
+ public string LeftWorkTime { get; set; }
+ public string LastDayStanding { get; set; }
+}
+
+public class AcceptStartWorkTemp
+{
+ public long LeftWorkTempId { get; set; }
+ public string StartDateTime { get; set; }
+ public long JobId { get; set; }
+}
+
+
+
+
+public class GetStartWorkTempDetails
+{
+ public LeftWorkTempDetailsViewModel LeftWorkTemp { get; set; }
+ public List PreviousLeftWorks { get; set; }
+ public long JobId { get; set; }
+ public string JobName { get; set; }
+ public long WorkshopId { get; set; }
+ public string WorkshopFullName { get; set; }
+ public string EmployeeFullName { get; set; }
+ public long EmployeeId { get; set; }
+ public long PersonnelCode { get; set; }
+}
+
+public class LeftWorkTempDetailsViewModel
+{
+ public long Id { get; set; }
+ public string StartWork { get; set; }
+ public string LeftWork { get; set; }
+ public string LastDayStanding { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/LeftWorkTemp/LeftWorkTempType.cs b/CompanyManagment.App.Contracts/LeftWorkTemp/LeftWorkTempType.cs
new file mode 100644
index 00000000..3cb198e2
--- /dev/null
+++ b/CompanyManagment.App.Contracts/LeftWorkTemp/LeftWorkTempType.cs
@@ -0,0 +1,14 @@
+namespace CompanyManagment.App.Contracts.LeftWorkTemp;
+
+public enum LeftWorkTempType
+{
+ ///
+ /// شروع به کار کرده
+ ///
+ StartWork,
+
+ ///
+ /// ترک کار کرده
+ ///
+ LeftWork
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/PersonalContractingParty/PersonalContractingPartyViewModel.cs b/CompanyManagment.App.Contracts/PersonalContractingParty/PersonalContractingPartyViewModel.cs
index a3635607..c2e955b2 100644
--- a/CompanyManagment.App.Contracts/PersonalContractingParty/PersonalContractingPartyViewModel.cs
+++ b/CompanyManagment.App.Contracts/PersonalContractingParty/PersonalContractingPartyViewModel.cs
@@ -44,6 +44,7 @@ public class PersonalContractingPartyViewModel
public string IsActiveString { get; set; }
public string IsBlock { get; set; }
public int BlockTimes { get; set; }
+ public bool IsAuthenticated { get; set; }
public List EmployerList { get; set; }
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/PersonnleCode/IPersonnelCodeApplication.cs b/CompanyManagment.App.Contracts/PersonnleCode/IPersonnelCodeApplication.cs
index 3fbd286b..b7c08647 100644
--- a/CompanyManagment.App.Contracts/PersonnleCode/IPersonnelCodeApplication.cs
+++ b/CompanyManagment.App.Contracts/PersonnleCode/IPersonnelCodeApplication.cs
@@ -16,5 +16,7 @@ public interface IPersonnelCodeApplication
List Search(PersonnelCodeSearchModel searchModel);
PersonnelCodeViewModel GetPersonnelCodeViewModel(PersonnelCodeSearchModel searchModel);
long GetEmployeeIdByPersonelCode(long personleCode, long workshopId);
+ long GetLastPersonnelCodeByWorkshop(long workshopId);
+
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/RollCallEmployee/RollCallEmployeeViewModel.cs b/CompanyManagment.App.Contracts/RollCallEmployee/RollCallEmployeeViewModel.cs
index 58a9f016..e03f42fa 100644
--- a/CompanyManagment.App.Contracts/RollCallEmployee/RollCallEmployeeViewModel.cs
+++ b/CompanyManagment.App.Contracts/RollCallEmployee/RollCallEmployeeViewModel.cs
@@ -15,8 +15,7 @@ public class RollCallEmployeeViewModel : EditRollCallEmployee
public string PersonName { get; set; }
public bool ContractPerson { get; set; }
public bool InsurancePerson { get; set; }
- public long WorkshopId { get; set; }
- public long EmployeeId { get; set; }
+
public bool ContractLeft { get; set; }
public bool InsurancetLeft { get; set; }
public bool Black { get; set; }
@@ -35,4 +34,5 @@ public class RollCallEmployeeViewModel : EditRollCallEmployee
public string EmployeeLName { get; set; }
public string EmployeeFName { get; set; }
public long RollCallEmployeeId { get; set; }
+ public bool CreatedByClient { get; set; }
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/RollCallService/IRollCallServiceApplication.cs b/CompanyManagment.App.Contracts/RollCallService/IRollCallServiceApplication.cs
index 535d0912..6fbdb409 100644
--- a/CompanyManagment.App.Contracts/RollCallService/IRollCallServiceApplication.cs
+++ b/CompanyManagment.App.Contracts/RollCallService/IRollCallServiceApplication.cs
@@ -19,4 +19,5 @@ public interface IRollCallServiceApplication
List GetActiveServiceByAccountId(long accountId);
List GetAllServiceByAccountId(long accountId);
+ bool IsExistActiveServiceByWorkshopId(long workshopId);
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs
new file mode 100644
index 00000000..5067c36f
--- /dev/null
+++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ContractingPartyTempViewModel.cs
@@ -0,0 +1,11 @@
+namespace CompanyManagment.App.Contracts.TemporaryClientRegistration;
+
+public class ContractingPartyTempViewModel : CreateContractingPartyTemp
+{
+ public long Id { get; set; }
+ ///
+ /// تاریخ تولد شمسی
+ ///
+ public string DateOfBirthFa { get; set; }
+
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/CreateContractingPartyTemp.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/CreateContractingPartyTemp.cs
new file mode 100644
index 00000000..b7cf1d67
--- /dev/null
+++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/CreateContractingPartyTemp.cs
@@ -0,0 +1,78 @@
+using _0_Framework.Application;
+using System;
+using System.Drawing.Interop;
+
+namespace CompanyManagment.App.Contracts.TemporaryClientRegistration;
+
+
+
+public class CreateContractingPartyTemp
+{
+ ///
+ /// نام
+ ///
+ public string FName { get; set; }
+ ///
+ /// نام خانوادگی
+ ///
+ public string LName { get; set; }
+
+ ///
+ /// نام پدر
+ ///
+ public string FatherName { get; set; }
+
+ ///
+ /// جنسیت
+ ///
+ public Gender Gender { get; set; }
+
+ ///
+ /// کد ملی
+ ///
+ public string NationalCode { get; set; }
+
+ ///
+ ///تاریخ تولد
+ ///
+ public DateTime DateOfBirth { get; set; }
+
+ ///
+ /// سری شناسنامه
+ ///
+ public string IdNumberSeri { get; set; }
+
+ ///
+ /// سریال شناسنامه
+ ///
+ public string IdNumberSerial { get; set; }
+
+
+ ///
+ /// شماره شناسنامه
+ ///
+ public string IdNumber { get; set; }
+
+
+
+ ///
+ /// شماره همراه
+ ///
+ public string Phone { get; set; }
+
+
+ ///
+ /// استان
+ ///
+ public string State { get; set; }
+
+ ///
+ /// شهر
+ ///
+ public string City { get; set; }
+
+ ///
+ /// نشانی
+ ///
+ public string Address { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs
new file mode 100644
index 00000000..0bf213d1
--- /dev/null
+++ b/CompanyManagment.App.Contracts/TemporaryClientRegistration/ITemporaryClientRegistrationApplication.cs
@@ -0,0 +1,9 @@
+using System.Threading.Tasks;
+using _0_Framework.Application;
+
+namespace CompanyManagment.App.Contracts.TemporaryClientRegistration;
+
+public interface ITemporaryClientRegistrationApplication
+{
+ Task> CreateContractingPartyTemp(string nationalCode, string dateOfBirth, string mobile);
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithLeftWorkTempEmployeesDto.cs b/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithLeftWorkTempEmployeesDto.cs
new file mode 100644
index 00000000..f57e2abc
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithLeftWorkTempEmployeesDto.cs
@@ -0,0 +1,24 @@
+namespace CompanyManagment.App.Contracts.Workshop;
+
+public class WorkshopWithLeftWorkTempEmployeesDto
+{
+ ///
+ /// آیدی کارگاه
+ ///
+ public long WorkshopId { get; set; }
+
+ ///
+ /// نام کارگاه
+ ///
+ public string WorkshopName { get; set; } = string.Empty;
+
+ ///
+ /// نام کارفرما
+ ///
+ public string EmployerName { get; set; } = string.Empty;
+
+ ///
+ /// تعداد پرسنل ترک کار کرده
+ ///
+ public int LeftWorkEmployees { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithStartedEmployeesDTO.cs b/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithStartedEmployeesDTO.cs
new file mode 100644
index 00000000..60e2ae2d
--- /dev/null
+++ b/CompanyManagment.App.Contracts/Workshop/DTOs/WorkshopWithStartedEmployeesDTO.cs
@@ -0,0 +1,27 @@
+namespace CompanyManagment.App.Contracts.Workshop.DTOs;
+
+///
+/// کارگاه هایی که از کلاینت، پرسنلی را شروع به کار زدند
+///
+public class WorkshopWithStartedEmployeesDto
+{
+ ///
+ /// آیدی کارگاه
+ ///
+ public long WorkshopId { get; set; }
+
+ ///
+ /// نام کارگاه
+ ///
+ public string WorkshopName { get; set; } = string.Empty;
+
+ ///
+ /// نام کارفرما
+ ///
+ public string EmployerName { get; set; } = string.Empty;
+
+ ///
+ /// تعداد پرسنل اضافه شده
+ ///
+ public int AddedEmployeesCount { get; set; }
+}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs
index 73d34584..d30257e3 100644
--- a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs
+++ b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs
@@ -1,7 +1,9 @@
using System.Collections.Generic;
using System.Runtime.InteropServices;
+using System.Threading.Tasks;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
+using CompanyManagment.App.Contracts.Workshop.DTOs;
namespace CompanyManagment.App.Contracts.Workshop;
@@ -54,6 +56,11 @@ public interface IWorkshopApplication
#endregion
+ #region Pooya
+
+ List GetPersonnelInfoRemastered(PersonnelInfoSearchModel searchModel);
+ #endregion
+
#region Vafa
List PrintWorkshopList(WorkshopSearchModel searchModel);
@@ -70,5 +77,14 @@ public interface IWorkshopApplication
///
List GetWorkshopSelectListInsuransce();
- #endregion
+ #endregion
+
+ #region Mahan
+ Task> GetWorkshopsForEmployeeStartWork(long accountId);
+ Task GetWorkshopsForEmployeeStartWorkCount(long accountId);
+
+ Task> GetWorkshopsForLeftWorkTemp(long accountId);
+ Task GetWorkshopsForLeftWorkTempCount(long accountId);
+
+ #endregion
}
\ No newline at end of file
diff --git a/CompanyManagment.App.Contracts/Workshop/PersonnelInfoViewModel.cs b/CompanyManagment.App.Contracts/Workshop/PersonnelInfoViewModel.cs
index 42c32f31..5ad7473f 100644
--- a/CompanyManagment.App.Contracts/Workshop/PersonnelInfoViewModel.cs
+++ b/CompanyManagment.App.Contracts/Workshop/PersonnelInfoViewModel.cs
@@ -43,4 +43,6 @@ public class PersonnelInfoViewModel
public bool Black { get; set; }
public DateTime StartWork { get; set; }
public DateTime LeftWork { get; set; }
+ public bool CreatedByClient { get; set; }
+ public bool LefWorkTemp { get; set; }
}
\ No newline at end of file
diff --git a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs
index 66a1590b..872fce0e 100644
--- a/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs
+++ b/CompanyManagment.Application/CustomizeWorkshopSettingsApplication.cs
@@ -340,6 +340,17 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
return createDefaultEmployee;
}
+ if (_customizeWorkshopEmployeeSettingsRepository.Exists(x =>
+ x.WorkshopId == command.WorkshopId && command.EmployeeIds.First()== x.EmployeeId &&
+ x.CustomizeWorkshopGroupSettingId == command.GroupId))
+ {
+ var employeeSettings = _customizeWorkshopEmployeeSettingsRepository
+ .GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(command.WorkshopId,command.EmployeeIds.First());
+
+ _customizeWorkshopEmployeeSettingsRepository.Remove(employeeSettings.id);
+ _customizeWorkshopEmployeeSettingsRepository.SaveChanges();
+ }
+
List shiftCollection = new List();
List rotatingShift = [];
@@ -396,7 +407,12 @@ public class CustomizeWorkshopSettingsApplication(ICustomizeWorkshopSettingsRepo
if (previousEnd != new DateTime())
{
- if (newShift.start <= previousEnd)
+ if (newShift.start == previousEnd)
+ {
+ return op.Failed("در شیفت منظم پایان شیفت نمیتواند با شروع شیفت بعدی برابر باشد");
+ }
+
+ if (newShift.start <= previousEnd)
{
newShift.start = newShift.start.AddDays(1);
}
diff --git a/CompanyManagment.Application/EmployeeAplication.cs b/CompanyManagment.Application/EmployeeAplication.cs
index 034df39d..29db332f 100644
--- a/CompanyManagment.Application/EmployeeAplication.cs
+++ b/CompanyManagment.Application/EmployeeAplication.cs
@@ -1,4 +1,5 @@
using System;
+using System.IO;
using System.Collections.Generic;
using _0_Framework.InfraStructure;
using Company.Domain.EmployeeAgg;
@@ -10,6 +11,24 @@ using Company.Domain.EmployeeInsuranceRecordAgg;
using Company.Domain.WorkshopAgg;
using System.Linq;
using System.Threading.Tasks;
+using Company.Domain.PersonnelCodeAgg;
+using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
+using CompanyManagment.App.Contracts.EmployeeBankInformation;
+using CompanyManagment.App.Contracts.EmployeeDocuments;
+using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
+using Microsoft.AspNetCore.Hosting;
+using System.IO;
+using System.Transactions;
+using Company.Domain.EmployeeClientTempAgg;
+using Company.Domain.LeftWorkTempAgg;
+using CompanyManagment.App.Contracts.LeftWorkTemp;
+using _0_Framework.Application.UID;
+using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg;
+using Company.Domain.EmployeeDocumentsAgg;
+using Company.Domain.RollCallEmployeeAgg;
+using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
+using Company.Domain.LeftWorkAgg;
+using CompanyManagment.App.Contracts.Employee.DTO;
namespace CompanyManagment.Application;
@@ -25,11 +44,39 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli
public bool StatCity = true;
public bool city = true;
public bool address = true;
+ private readonly IWebHostEnvironment _webHostEnvironment;
+ private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
+ private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
+ private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication;
+ private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication;
+ private readonly IEmployeeDocumentsRepository _employeeDocumentsRepository;
+ private readonly IEmployeeBankInformationApplication _employeeBankInformationApplication;
+ private readonly ILeftWorkTempRepository _leftWorkTempRepository;
+ private readonly IUidService _uidService;
+ private readonly ICustomizeWorkshopEmployeeSettingsRepository _customizeWorkshopEmployeeSettingsRepository;
+ private readonly ILeftWorkRepository _leftWorkRepository;
+ private readonly IPersonnelCodeRepository _personnelCodeRepository;
+ private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
+ private readonly ICustomizeWorkshopGroupSettingsRepository _customizeWorkshopGroupSettingsRepository;
- public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository) : base(context)
+ public EmployeeAplication(IEmployeeRepository employeeRepository, CompanyContext context, IWorkshopRepository workShopRepository, IWebHostEnvironment webHostEnvironment, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeRepository rollCallEmployeeRepository, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IEmployeeDocumentsApplication employeeDocumentsApplication, IEmployeeDocumentsRepository employeeDocumentsRepository, IEmployeeBankInformationApplication employeeBankInformationApplication, ILeftWorkTempRepository leftWorkTempRepository, IUidService uidService, ICustomizeWorkshopEmployeeSettingsRepository customizeWorkshopEmployeeSettingsRepository, IPersonnelCodeRepository personnelCodeRepository, IEmployeeClientTempRepository employeeClientTempRepository, ICustomizeWorkshopGroupSettingsRepository customizeWorkshopGroupSettingsRepository, ILeftWorkRepository leftWorkRepository) : base(context)
{
_context = context;
_WorkShopRepository = workShopRepository;
+ _webHostEnvironment = webHostEnvironment;
+ _rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
+ _rollCallEmployeeRepository = rollCallEmployeeRepository;
+ _customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication;
+ _employeeDocumentsApplication = employeeDocumentsApplication;
+ _employeeDocumentsRepository = employeeDocumentsRepository;
+ _employeeBankInformationApplication = employeeBankInformationApplication;
+ _leftWorkTempRepository = leftWorkTempRepository;
+ _uidService = uidService;
+ _customizeWorkshopEmployeeSettingsRepository = customizeWorkshopEmployeeSettingsRepository;
+ _personnelCodeRepository = personnelCodeRepository;
+ _employeeClientTempRepository = employeeClientTempRepository;
+ _customizeWorkshopGroupSettingsRepository = customizeWorkshopGroupSettingsRepository;
+ _leftWorkRepository = leftWorkRepository;
_EmployeeRepository = employeeRepository;
}
@@ -861,6 +908,13 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli
return workshopEmployeesWithLeftWork.FirstOrDefault();
}
+ public EmployeeViewModel GetEmployeeByNationalCodeIfHasLeftWork(string nationalCode, List workshopIds)
+ {
+ if (nationalCode.NationalCodeValid() != "valid")
+ return new();
+ var workshopEmployeesWithLeftWork = _EmployeeRepository.GetWorkedEmployeesByWorkshopIdsAndNationalCodeAndDate(workshopIds, nationalCode, DateTime.Now.Date);
+ return workshopEmployeesWithLeftWork.FirstOrDefault();
+ }
public List GetWorkingEmployeesByWorkshopId(long workshopId)
{
return _EmployeeRepository.GetWorkingEmployeesByWorkshopId(workshopId);
@@ -902,4 +956,547 @@ public class EmployeeAplication : RepositoryBase, IEmployeeAppli
}
#endregion
+
+ #region Mahan
+ public OperationResult CreateEmployeeByClient(CreateEmployeeByClient command)
+ {
+ OperationResult op = new();
+
+ if (command.Gender != "مرد" && command.Gender != "زن")
+ return op.Failed("جنسیت را انتخاب کنید");
+
+ if (string.IsNullOrWhiteSpace(command.FirstName) || string.IsNullOrWhiteSpace(command.LastName))
+ return op.Failed("نام نمی تواند خالی باشد");
+
+ if (command.MaritalStatus != "مجرد" && command.MaritalStatus != "متاهل")
+ return op.Failed("وضعیت تاهل نمی تواند خالی باشد");
+
+ bool isNationalCardValid = command.NationalCode?.NationalCodeValid() == "valid";
+ if (isNationalCardValid == false)
+ return op.Failed("کد ملی وارد شده معتبر نمی باشد");
+
+ if (command.Nationality != "ایرانی")
+ return op.Failed("خطای سیستمی");
+
+ if (!_WorkShopRepository.Exists(x => x.id == command.WorkshopId))
+ {
+ return op.Failed("کارگاه نامعتبر است");
+ }
+
+ using var transaction = new TransactionScope();
+
+ //if (_EmployeeRepository.ExistsIgnoreQueryFilter(x => x.NationalCode == command.NationalCode && x.EmployeeType == EmployeeType.CreatedByClient))
+ //{
+ // return op.Failed("این پرسنل قبلا افزوده شده است و در انتظار تایید میباشد");
+ //}
+
+ var employee = _EmployeeRepository.GetByNationalCodeIgnoreQueryFilter(command.NationalCode);
+ var workshop = _WorkShopRepository.GetDetails(command.WorkshopId);
+ if (employee == null)
+ {
+ return op.Failed("خطای سیستمی. لطفا دوباره تلاش کنید . درصورت تکرار این مشکل با تیم پشتیبان تماس بگیرید");
+ }
+
+ if (_leftWorkTempRepository.Exists(x =>
+ x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId && x.LeftWorkType == LeftWorkTempType.StartWork))
+ {
+ return op.Failed("این پرسنل در کارگاه شما قبلا افزوده شده است و در انتظار تایید میباشد");
+ }
+
+ var startLeftWork = command.StartLeftWork.ToGeorgianDateTime();
+
+ var leftWorkViewModel = _leftWorkRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(command.WorkshopId, employee.id);
+ PersonnelCodeDomain personnelCode = null;
+ if (leftWorkViewModel != null)
+ {
+ if (leftWorkViewModel.HasLeft == false && leftWorkViewModel.LeftWorkDate > DateTime.Now)
+ {
+ return op.Failed("شما نمیتوانید پرسنلی که در کارگاه شما در حال کار است را ایجاد کنید");
+ }
+
+ if (leftWorkViewModel.LeftWorkDate > startLeftWork)
+ {
+ return op.Failed("شما نمیتوانید قبل از بازه ترک کار قبلی پرسنل شروع به کاری ثبت کنید");
+ }
+ }
+ else
+ {
+ var lastPersonnelCodeByWorkshop = _personnelCodeRepository.GetLastPersonnelCodeByWorkshop(command.WorkshopId);
+
+ personnelCode = new PersonnelCodeDomain(command.WorkshopId,
+ employee.id, lastPersonnelCodeByWorkshop + 1);
+ }
+
+ var leftWorkTemp = LeftWorkTemp.CreateStartWork(command.WorkshopId, employee.id, startLeftWork, command.JobId);
+ _leftWorkTempRepository.Create(leftWorkTemp);
+ _leftWorkTempRepository.SaveChanges();
+
+
+ if (personnelCode != null)
+ {
+ _personnelCodeRepository.Create(personnelCode);
+ _personnelCodeRepository.SaveChanges();
+ }
+
+
+ if (string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture1) == false &&
+ string.IsNullOrWhiteSpace(command.RollCallUploadEmployeePicture?.Picture2) == false)
+ {
+ var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{command.WorkshopId}\\{employee.id}";
+ if (!Directory.Exists(directoryPath))
+ Directory.CreateDirectory(directoryPath);
+
+ var filePath1 = Path.Combine(directoryPath) + $@"\1.jpg";
+
+ CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture1, filePath1);
+
+
+ var filePath2 = Path.Combine(directoryPath) + $@"\2.jpg";
+
+ CreateImageFromBase64(command.RollCallUploadEmployeePicture.Picture2, filePath2);
+
+
+
+ var rollCallEmployee =
+ _rollCallEmployeeRepository.GetBy(employee.id, command.WorkshopId);
+
+ if (rollCallEmployee == null)
+ {
+ if (_employeeClientTempRepository.Exists(x =>
+ x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId))
+ {
+ //var employeeTemp =
+ // _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(employee.id, command.WorkshopId);
+
+ rollCallEmployee = new RollCallEmployee(command.WorkshopId, employee.id, employee.FName,
+ employee.LName);
+ }
+ else
+ {
+ rollCallEmployee =
+ new RollCallEmployee(command.WorkshopId, employee.id, employee.FName, employee.LName);
+ }
+
+ rollCallEmployee.HasImage();
+ _rollCallEmployeeRepository.Create(rollCallEmployee);
+ _rollCallEmployeeRepository.SaveChanges();
+
+ }
+
+
+
+ if (command.CreateCustomizeEmployeeSettings.GroupId > 0)
+ {
+ if (_customizeWorkshopEmployeeSettingsRepository
+ .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id))
+ {
+ _customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id);
+ }
+
+ command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id];
+ command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId;
+ var resultCreateEmployeeSettings =
+ _customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges(
+ command.CreateCustomizeEmployeeSettings);
+ if (resultCreateEmployeeSettings.IsSuccedded == false)
+ {
+ return resultCreateEmployeeSettings;
+ }
+
+ var rollCallEmployeeStatusResult = _rollCallEmployeeStatusApplication.Create(
+ new CreateRollCallEmployeeStatus() { RollCallEmployeeId = rollCallEmployee.id });
+
+ if (rollCallEmployeeStatusResult.IsSuccedded == false)
+ {
+ return rollCallEmployeeStatusResult;
+ }
+ }
+ }
+ else if (command.CreateCustomizeEmployeeSettings.GroupId > 0)
+ {
+ if (_customizeWorkshopEmployeeSettingsRepository
+ .Exists(x => x.WorkshopId == workshop.Id && x.EmployeeId == employee.id))
+ {
+ _customizeWorkshopEmployeeSettingsRepository.RemoveByWorkshopIdAndEmployeeId(workshop.Id, employee.id);
+ }
+
+ command.CreateCustomizeEmployeeSettings.EmployeeIds = [employee.id];
+ command.CreateCustomizeEmployeeSettings.WorkshopId = command.WorkshopId;
+ var resultCreateEmployeeSettings =
+ _customizeWorkshopSettingsApplication.CreateEmployeesSettingsAndSetChanges(
+ command.CreateCustomizeEmployeeSettings);
+ if (resultCreateEmployeeSettings.IsSuccedded == false)
+ {
+ return resultCreateEmployeeSettings;
+ }
+
+
+ var rollCallEmployee =
+ _rollCallEmployeeRepository.GetBy(employee.id, command.WorkshopId);
+
+ if (rollCallEmployee == null)
+ {
+ if (_employeeClientTempRepository.Exists(x =>
+ x.EmployeeId == employee.id && x.WorkshopId == command.WorkshopId))
+ {
+
+ rollCallEmployee = new RollCallEmployee(command.WorkshopId, employee.id, employee.FName,
+ employee.LName);
+ }
+ else
+ {
+ rollCallEmployee =
+ new RollCallEmployee(command.WorkshopId, employee.id, employee.FName, employee.LName);
+ }
+ _rollCallEmployeeRepository.Create(rollCallEmployee);
+ _rollCallEmployeeRepository.SaveChanges();
+
+ }
+ }
+
+
+ command.EmployeeDocumentItems = command.EmployeeDocumentItems ?? [];
+
+ var employeeDocumentResult = _employeeDocumentsApplication.AddRangeEmployeeDocumentItemsByClient(command.WorkshopId,
+ employee.id, command.EmployeeDocumentItems);
+
+ if (employeeDocumentResult.IsSuccedded == false)
+ {
+ return employeeDocumentResult;
+ }
+
+
+ var employeeTemp = new EmployeeClientTemp(command.WorkshopId, startLeftWork, employee.id,
+ command.MaritalStatus, employee.FullName);
+
+ _employeeClientTempRepository.Create(employeeTemp);
+ _employeeClientTempRepository.SaveChanges();
+
+ if (command.HasBankInformation)
+ {
+
+ var employeeBankInfos = command.EmployeeBankInfos.Select(x => new CreateEmployeeInformation
+ {
+ WorkshopId = command.WorkshopId,
+ BankAccountNumber = x.BankAccountNumber,
+ BankId = x.BankId,
+ CardNumber = x.CardNumber,
+ EmployeeId = employee.id,
+ EmployeeName = employee.FullName,
+ ShebaNumber = x.ShebaNumber
+ }).ToList();
+
+ var employeeBankInformationResult =
+ _employeeBankInformationApplication.GroupCreate(command.WorkshopId, employeeBankInfos);
+
+ if (employeeBankInformationResult.IsSuccedded == false)
+ {
+ return employeeBankInformationResult;
+ }
+
+ }
+
+
+ transaction.Complete();
+ return op.Succcedded(employee.id);
+ }
+
+ private void CreateImageFromBase64(string picture, string filePath)
+ {
+ var subBase64 = picture.Substring(picture.LastIndexOf(',') + 1);
+ byte[] bytes = Convert.FromBase64String(subBase64);
+ System.IO.File.WriteAllBytes(filePath, bytes);
+ }
+ public async Task>
+ ValidateCreateEmployeeClientByNationalCodeAndWorkshopId(string nationalCode, string birthDate, long workshopId)
+ {
+ var op = new OperationResult();
+
+ if (nationalCode.NationalCodeValid() != "valid")
+ {
+ return op.Failed("کد ملی معتبر نمیباشد");
+ }
+
+ if (birthDate.TryToGeorgianDateTime(out _) == false)
+ {
+ return op.Failed("تاریخ تولد معتبر نمیباشد");
+ }
+
+ var employee = _EmployeeRepository.GetByNationalCodeIgnoreQueryFilter(nationalCode);
+
+ if (employee == null)
+ {
+ var personalInfo = await _uidService.GetPersonalInfo(nationalCode, birthDate);
+ if (personalInfo.ResponseContext.Status.Code != 0)
+ {
+ return op.Failed("کد ملی و تاریخ تولد با هم همخانی ندارند");
+ }
+
+ var basicInfo = personalInfo.BasicInformation;
+ var identityInfo = personalInfo.IdentificationInformation;
+ DateTime apiBirthDate = identityInfo.BirthDate.ToGeorgianDateTime();
+
+ var dateOfIssue = new DateTime(1922, 1, 1);
+
+ var gender = basicInfo.GenderEnum switch
+ {
+ Gender.Female => "زن",
+ Gender.Male => "مرد",
+ _ => throw new AggregateException()
+ };
+
+ var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
+
+ var newEmployee = new Employee(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, apiBirthDate,
+ dateOfIssue, null, identityInfo.NationalId, idNumber, gender, "ایرانی");
+ newEmployee.Authorized();
+ await _EmployeeRepository.CreateAsync(newEmployee);
+ await _context.SaveChangesAsync();
+
+ return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
+ {
+ EmployeeId = newEmployee.id,
+ EmployeeFName = newEmployee.FName,
+ Gender = newEmployee.Gender,
+ Nationality = newEmployee.Nationality,
+ EmployeeLName = newEmployee.LName
+ });
+ }
+
+ if (_leftWorkTempRepository.ExistsIgnoreQueryFilter(x =>
+ x.EmployeeId == employee.id && x.WorkshopId == workshopId && x.LeftWorkType == LeftWorkTempType.StartWork))
+ {
+ return op.Failed("این پرسنل در کارگاه شما قبلا افزوده شده است و در انتظار تایید میباشد");
+ }
+
+ if (employee.IsAuthorized == false)
+ {
+ var personalInfoResponse = await _uidService.GetPersonalInfo(nationalCode, birthDate);
+
+ if (personalInfoResponse.ResponseContext.Status.Code == 0)
+ {
+ var basicInfo = personalInfoResponse.BasicInformation;
+ var identityInfo = personalInfoResponse.IdentificationInformation;
+ var apiBirthDate = identityInfo.BirthDate.ToGeorgianDateTime();
+
+ var gender = basicInfo.GenderEnum switch
+ {
+ Gender.Female => "زن",
+ Gender.Male => "مرد",
+ _ => throw new AggregateException()
+ };
+
+ var idNumber = identityInfo.ShenasnamehNumber == "0" ? identityInfo.NationalId : identityInfo.ShenasnamehNumber;
+
+
+ employee.Edit(basicInfo.FirstName, basicInfo.LastName, basicInfo.FatherName, apiBirthDate,
+ employee.DateOfIssue, employee.PlaceOfIssue, identityInfo.NationalId, idNumber,
+ gender, "ایرانی", employee.Phone, employee.Address, employee.State, employee.City,
+ employee.MaritalStatus, employee.MilitaryService, employee.LevelOfEducation,
+ employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch, employee.InsuranceCode, employee.InsuranceHistoryByYear,
+ employee.InsuranceHistoryByMonth, employee.NumberOfChildren,
+ employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
+ employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
+ employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
+
+ employee.Authorized();
+
+ await _EmployeeRepository.SaveChangesAsync();
+
+ }
+ else
+ {
+ return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد");
+ }
+ }
+ else if (employee.DateOfBirth.ToFarsi() != birthDate || employee.NationalCode != nationalCode)
+ {
+ return op.Failed("کد ملی با تاریخ تولد وارد شده مطابقت ندارد");
+ }
+
+ var leftWorkViewModel = _leftWorkRepository.GetLastLeftWorkByEmployeeIdAndWorkshopId(workshopId, employee.id);
+ if (leftWorkViewModel == null)
+ {
+ return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel()
+ {
+ EmployeeId = employee.id,
+ EmployeeFName = employee.FName,
+ Gender = employee.Gender,
+ Nationality = employee.Nationality,
+ EmployeeLName = employee.LName
+ }); ;
+ }
+
+ if (leftWorkViewModel.LeftWorkDate >= DateTime.Now || !leftWorkViewModel.HasLeft)
+ return op.Failed("این پرسنل در کارگاه شما در حال کار است");
+
+ var rollCallEmployee = _rollCallEmployeeRepository.GetBy(employee.id, workshopId);
+
+ string picture1 = string.Empty;
+ string picture2 = string.Empty;
+
+ if (rollCallEmployee != null)
+ {
+ var directoryPath = $"{_webHostEnvironment.ContentRootPath}\\Faces\\{workshopId}\\{employee.id}";
+ if (Directory.Exists(directoryPath))
+ {
+ var filePath1 = Path.Combine(directoryPath, @"1.jpg");
+ var filePath2 = Path.Combine(directoryPath, @"2.jpg");
+
+ if (System.IO.File.Exists(filePath1))
+ {
+ byte[] imageBytes1 = await System.IO.File.ReadAllBytesAsync(filePath1);
+ picture1 = Convert.ToBase64String(imageBytes1);
+ }
+
+ if (System.IO.File.Exists(filePath2))
+ {
+ byte[] imageBytes2 = await System.IO.File.ReadAllBytesAsync(filePath2);
+ picture2 = Convert.ToBase64String(imageBytes2);
+ }
+ }
+
+ }
+
+ var personnelCode = _personnelCodeRepository.GetPSCodeByWorkshopIdAndEmployeeId(workshopId, employee.id);
+
+ var bankInformationViewModel = _employeeBankInformationApplication.GetByEmployeeId(workshopId, employee.id);
+
+ var employeeDocumentsViewModel = _employeeDocumentsApplication.GetDetailsForClient(employee.id, workshopId);
+
+
+ return op.Succcedded(new EmployeeByNationalCodeInWorkshopViewModel
+ {
+ EmployeeId = employee.id,
+ EmployeeFName = employee.FName,
+ EmployeeLName = employee.LName,
+ Nationality = employee.Nationality,
+ MaritalStatus = employee.MaritalStatus,
+ Gender = employee.Gender,
+ Picture1 = picture1,
+ Picture2 = picture2,
+ PersonnelCode = personnelCode,
+ EmployeeBankInfos = bankInformationViewModel.BankInformation.Select(x => new EmployeeByNationalCodeEmployeeBankInfoViewModel
+ {
+ ShebaNumber = x.ShebaNumber,
+ IsDefault = x.IsDefault,
+ CardNumber = x.CardNumber,
+ BankAccountNumber = x.BankAccountNumber,
+ BankId = x.BankId,
+ BankLogoMediaId = x.BankLogoMediaId,
+ BankLogoPath = x.BankLogoPath,
+ BankName = x.BankName
+ }).ToList(),
+ EmployeeDocument = new EmployeeByNationalCodeEmployeeDocumentViewModel
+ {
+ EducationalDegree = employeeDocumentsViewModel.EducationalDegree,
+ EmployeePicture = employeeDocumentsViewModel.EmployeePicture,
+ IdCardPage1 = employeeDocumentsViewModel.IdCardPage1,
+ IdCardPage2 = employeeDocumentsViewModel.IdCardPage2,
+ IdCardPage3 = employeeDocumentsViewModel.IdCardPage3,
+ IdCardPage4 = employeeDocumentsViewModel.IdCardPage4,
+ MilitaryServiceCard = employeeDocumentsViewModel.MilitaryServiceCard,
+ NationalCardFront = employeeDocumentsViewModel.NationalCardFront,
+ NationalCardRear = employeeDocumentsViewModel.NationalCardRear
+ }
+ });
+ }
+
+ public async Task> GetClientEmployeesStartWork(long workshopId)
+ {
+ return await _EmployeeRepository.GetClientEmployeesStartWork(workshopId);
+ }
+
+ public async Task> GetEmployeesForLeftWorkTemp(long workshopId)
+ {
+ return await _EmployeeRepository.GetEmployeesForLeftWorkTemp(workshopId);
+ }
+
+ public async Task GetEmployeeEditInEmployeeDocumentWorkFlow(
+ long employeeId,
+ long workshopId)
+ {
+ return await _EmployeeRepository.GetEmployeeEditInEmployeeDocumentWorkFlow(employeeId, workshopId);
+ }
+
+ public async Task EditEmployeeInEmployeeDocumentWorkFlow(EditEmployeeInEmployeeDocument command)
+ {
+ var op = new OperationResult();
+
+ if (command.MaritalStatus is not ("مجرد" or "متاهل"))
+ {
+ return op.Failed("وضعیت تاهل وارد شده نامعتبر میباشد");
+ }
+
+ var employee = _EmployeeRepository.Get(command.EmployeeId);
+ if (employee == null)
+ {
+ return op.Failed("پرسنل مورد نظر یافت نشد");
+ }
+
+ if (!employee.IsAuthorized)
+ {
+ if (command.Gender is not ("مرد" or "زن"))
+ {
+ return op.Failed("جنسیت وارد شده نامعتبر است");
+ }
+ if (command.BirthDate.TryToGeorgianDateTime(out var birthDateGr) == false)
+ {
+ return op.Failed("تاریخ تولد وارد شده نامعتبر است");
+ }
+
+ if (command.Nationality is not ("غیر ایرانی" or "ایرانی"))
+ {
+ return op.Failed("ملیت وارد شده نامعتبر است");
+ }
+
+ if (string.IsNullOrWhiteSpace(command.FName))
+ {
+ return op.Failed("لطفا نام پرسنل را وارد کنید");
+ }
+
+ if (string.IsNullOrWhiteSpace(command.LName))
+ {
+ return op.Failed("لطفا نام خانوادگی پرسنل را وارد کنید");
+ }
+
+ if (command.NationalCode.NationalCodeValid() != "valid")
+ {
+ return op.Failed("کد ملی وارد شده نامعتبر است");
+ }
+
+ if (string.IsNullOrWhiteSpace(command.IdNumber))
+ {
+ return op.Failed("لطفا شماره شناسنامه را وارد کنید");
+ }
+
+ if (string.IsNullOrWhiteSpace(command.FatherName))
+ {
+ return op.Failed("لطفا نام پدر را وارد کنید");
+ }
+ }
+
+ var employeeClientTemp = _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(command.EmployeeId, command.WorkshopId);
+
+ employeeClientTemp?.Edit(command.MaritalStatus);
+
+ if (!employee.IsAuthorized)
+ {
+ employee.Edit(command.FName, command.LName, command.FatherName, command.BirthDate.ToGeorgianDateTime(),
+ employee.DateOfIssue, employee.PlaceOfIssue, command.NationalCode, command.IdNumber, command.Gender,
+ command.Nationality,
+ employee.Phone, employee.Address, employee.State, employee.City, employee.MaritalStatus,
+ employee.MilitaryService,
+ employee.LevelOfEducation, employee.FieldOfStudy, employee.BankCardNumber, employee.BankBranch,
+ employee.InsuranceCode, employee.InsuranceHistoryByYear, employee.InsuranceHistoryByMonth,
+ employee.NumberOfChildren, employee.OfficePhone, employee.MclsUserName, employee.MclsPassword,
+ employee.EserviceUserName, employee.EservicePassword, employee.TaxOfficeUserName,
+ employee.TaxOfficepassword, employee.SanaUserName, employee.SanaPassword);
+ }
+ await _EmployeeRepository.SaveChangesAsync();
+
+ return op.Succcedded();
+ }
+
+ #endregion
}
\ No newline at end of file
diff --git a/CompanyManagment.Application/EmployeeClientTempApplication.cs b/CompanyManagment.Application/EmployeeClientTempApplication.cs
new file mode 100644
index 00000000..a8d04b8c
--- /dev/null
+++ b/CompanyManagment.Application/EmployeeClientTempApplication.cs
@@ -0,0 +1,32 @@
+using _0_Framework_b.Application;
+using Company.Domain.EmployeeClientTempAgg;
+using CompanyManagment.App.Contracts.EmployeeClientTemp;
+
+namespace CompanyManagment.Application;
+
+public class EmployeeClientTempApplication : IEmployeeClientTempApplication
+{
+ private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
+
+ public EmployeeClientTempApplication(IEmployeeClientTempRepository employeeClientTempRepository)
+ {
+ _employeeClientTempRepository = employeeClientTempRepository;
+ }
+
+ public OperationResult Create(CreateEmployeeClientTemp command)
+ {
+ var op = new OperationResult();
+ var fullName = $"{command.FName} {command.LName}";
+ var employeeClientTemp = new EmployeeClientTemp(command.WorkshopId, command.StartWorkTime, command.EmployeeId, command.MaritalStatus, fullName);
+
+ _employeeClientTempRepository.Create(employeeClientTemp);
+ _employeeClientTempRepository.SaveChanges();
+
+ return op.Succcedded();
+ }
+
+ public EmployeeClientTempGetDetailsViewModel GetDetails(long employeeId, long workshopId)
+ {
+ return _employeeClientTempRepository.GetDetails(employeeId, workshopId);
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.Application/EmployeeDocumentsApplication.cs b/CompanyManagment.Application/EmployeeDocumentsApplication.cs
index 1f803326..ad48936a 100644
--- a/CompanyManagment.Application/EmployeeDocumentsApplication.cs
+++ b/CompanyManagment.Application/EmployeeDocumentsApplication.cs
@@ -22,39 +22,43 @@ using Microsoft.AspNetCore.Mvc;
using CompanyManagment.App.Contracts.SmsResult;
using Microsoft.Identity.Client;
using static Microsoft.QualityTools.Testing.Fakes.FakesDelegates;
+using Company.Domain.EmployeeClientTempAgg;
namespace CompanyManagment.Application
{
- public class EmployeeDocumentsApplication : IEmployeeDocumentsApplication
- {
- private readonly IEmployeeDocumentsRepository _employeeDocumentsRepository;
- private readonly IEmployeeRepository _employeeRepository;
- private readonly IWorkshopRepository _workshopRepository;
- private readonly IWebHostEnvironment _webHostEnvironment;
- private readonly IMediaRepository _mediaRepository;
- private readonly ILeftWorkRepository _leftWorkRepository;
- private readonly IEmployeeDocumentItemRepository _employeeDocumentItemRepository;
- private readonly IAuthHelper _authHelper;
+ public class EmployeeDocumentsApplication : IEmployeeDocumentsApplication
+ {
+ private readonly IEmployeeDocumentsRepository _employeeDocumentsRepository;
+ private readonly IEmployeeRepository _employeeRepository;
+ private readonly IWorkshopRepository _workshopRepository;
+ private readonly IWebHostEnvironment _webHostEnvironment;
+ private readonly IMediaRepository _mediaRepository;
+ private readonly ILeftWorkRepository _leftWorkRepository;
+ private readonly IEmployeeDocumentItemRepository _employeeDocumentItemRepository;
+ private readonly IAuthHelper _authHelper;
+ private readonly IEmployeeClientTempRepository _employeeClientTempRepository;
- private readonly string _basePath;
- public EmployeeDocumentsApplication(IEmployeeDocumentsRepository employeeDocumentsRepository,
- IEmployeeRepository employeeRepository,
- IWorkshopRepository workshopRepository, IWebHostEnvironment webHostEnvironment,
- IMediaRepository mediaRepository, ILeftWorkRepository leftWorkRepository,
- IEmployeeDocumentItemRepository employeeDocumentItemRepository, IAuthHelper authHelper)
- {
- _employeeDocumentsRepository = employeeDocumentsRepository;
- _employeeRepository = employeeRepository;
- _workshopRepository = workshopRepository;
- _webHostEnvironment = webHostEnvironment;
- _mediaRepository = mediaRepository;
- _leftWorkRepository = leftWorkRepository;
- _employeeDocumentItemRepository = employeeDocumentItemRepository;
- _authHelper = authHelper;
- _basePath = Path.Combine(_webHostEnvironment.ContentRootPath, "Storage", "EmployeeDocuments");
- }
+ private readonly string _basePath;
+
+ public EmployeeDocumentsApplication(IEmployeeDocumentsRepository employeeDocumentsRepository,
+ IEmployeeRepository employeeRepository,
+ IWorkshopRepository workshopRepository, IWebHostEnvironment webHostEnvironment,
+ IMediaRepository mediaRepository, ILeftWorkRepository leftWorkRepository,
+ IEmployeeDocumentItemRepository employeeDocumentItemRepository, IAuthHelper authHelper, IEmployeeClientTempRepository employeeClientTempRepository)
+ {
+ _employeeDocumentsRepository = employeeDocumentsRepository;
+ _employeeRepository = employeeRepository;
+ _workshopRepository = workshopRepository;
+ _webHostEnvironment = webHostEnvironment;
+ _mediaRepository = mediaRepository;
+ _leftWorkRepository = leftWorkRepository;
+ _employeeDocumentItemRepository = employeeDocumentItemRepository;
+ _authHelper = authHelper;
+ _employeeClientTempRepository = employeeClientTempRepository;
+ _basePath = Path.Combine(_webHostEnvironment.ContentRootPath, "Storage", "EmployeeDocuments");
+ }
///
/// مدارک تا قبل از ثبت کردن می توانند توسط کاربر حذف شوند
@@ -134,7 +138,7 @@ namespace CompanyManagment.Application
}
var currentItems = entity.EmployeeDocumentItemCollection.GroupBy(x => x.DocumentLabel)
- .Select(x => x.MaxBy(y => y.CreationDate)).Where(x=>x.DocumentStatus == DocumentStatus.Unsubmitted);
+ .Select(x => x.MaxBy(y => y.CreationDate)).Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted);
//This can bite!
_employeeDocumentItemRepository.RemoveRange(currentItems);
@@ -300,24 +304,24 @@ namespace CompanyManagment.Application
/// ثبت مدارک توسط کلاینت
///
public OperationResult SubmitDocumentItemsByClient(SubmitEmployeeDocuments cmd)
- {
- OperationResult op = new();
- var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
- var currentDocs = entity.EmployeeDocumentItemCollection.GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate))
+ {
+ OperationResult op = new();
+ var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
+ var currentDocs = entity.EmployeeDocumentItemCollection.GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate))
.ToList();
- var (userId, userType) = _authHelper.GetUserTypeWithId();
+ var (userId, userType) = _authHelper.GetUserTypeWithId();
- var unsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted &&
+ var unsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted &&
x.UploaderType == UserType.Client).ToList();
- if (unsubmittedDocs.Any() == false)
- return op.Succcedded();
+ if (unsubmittedDocs.Any() == false)
+ return op.Succcedded();
- foreach (var item in unsubmittedDocs)
+ foreach (var item in unsubmittedDocs)
{
item.SubmitByClient(userId, userType);
MoveDocumentItemFile(item.MediaId,
@@ -335,7 +339,7 @@ namespace CompanyManagment.Application
_employeeDocumentsRepository.SaveChanges();
return op.Succcedded();
- }
+ }
///
@@ -346,7 +350,7 @@ namespace CompanyManagment.Application
OperationResult op = new();
var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
var notRejectedDocs = entity.EmployeeDocumentItemCollection
- .Where(x=>x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Client)
+ .Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Client)
.GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate)).ToList();
if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
@@ -378,7 +382,7 @@ namespace CompanyManagment.Application
///
/// برای افزودن یکباره مدارک در افزودن پرسنل توسط کلاینت
///
- public OperationResult AddRangeEmployeeDocumentItems(long workshopId, long employeeId, List command)
+ public OperationResult AddRangeEmployeeDocumentItemsByClient(long workshopId, long employeeId, List command)
{
OperationResult op = new();
@@ -426,7 +430,7 @@ namespace CompanyManagment.Application
if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
- var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType);
+ var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByClient);
newEntities.Add(newEntity);
}
@@ -434,9 +438,9 @@ namespace CompanyManagment.Application
.Select(x => x.MaxBy(y => y.CreationDate));
//This can bite!
- _employeeDocumentItemRepository.RemoveRange(currentItems);
- _employeeDocumentItemRepository.SaveChanges();
-
+ _employeeDocumentItemRepository.RemoveRange(currentItems);
+ _employeeDocumentItemRepository.SaveChanges();
+ entity.UpdateIsConfirmed();
_employeeDocumentItemRepository.AddRange(newEntities);
_employeeDocumentItemRepository.SaveChanges();
@@ -552,11 +556,11 @@ namespace CompanyManagment.Application
var employee = _employeeRepository.Get(entity.EmployeeId);
- var result= new EmployeeDocumentsViewModel()
- {
- Id = entity.id,
- MilitaryServiceCard = GetItemFromCollectionByLabel(currentConfirmedDocuments, medias,
- DocumentItemLabel.MilitaryServiceCard),
+ var result = new EmployeeDocumentsViewModel()
+ {
+ Id = entity.id,
+ MilitaryServiceCard = GetItemFromCollectionByLabel(currentConfirmedDocuments, medias,
+ DocumentItemLabel.MilitaryServiceCard),
EducationalDegree = GetItemFromCollectionByLabel(currentConfirmedDocuments, medias,
DocumentItemLabel.EducationalDegree),
@@ -583,22 +587,22 @@ namespace CompanyManagment.Application
EmployeePicture = GetItemFromCollectionByLabel(currentConfirmedDocuments, medias,
DocumentItemLabel.EmployeePicture),
- EmployeeFullName = employee.FullName,
- WorkshopId = workshopId,
- EmployeeId = entity.EmployeeId,
- Gender = employee.Gender,
- NationalCode = employee.NationalCode,
- EmployeeFName = employee.FName,
- EmployeeLName = employee.LName,
- Nationality = employee.Nationality,
- IdNumber = employee.IdNumber,
- FatherName = employee.FatherName,
- DateOfBirth = employee.DateOfBirth.ToFarsi(),
- MaritalStatus = employee.MaritalStatus,
- MilitaryServiceStatus = employee.MilitaryService,
- SubmittedItemsCount = currentConfirmedDocuments.Count(x => x.DocumentStatus == DocumentStatus.SubmittedByAdmin || x.DocumentStatus == DocumentStatus.SubmittedByClient),
- IsSentToChecker = entity.IsSentToChecker
- };
+ EmployeeFullName = employee.FullName,
+ WorkshopId = workshopId,
+ EmployeeId = entity.EmployeeId,
+ Gender = employee.Gender,
+ NationalCode = employee.NationalCode,
+ EmployeeFName = employee.FName,
+ EmployeeLName = employee.LName,
+ Nationality = employee.Nationality,
+ IdNumber = employee.IdNumber,
+ FatherName = employee.FatherName,
+ DateOfBirth = employee.DateOfBirth.ToFarsi(),
+ MaritalStatus = employee.MaritalStatus,
+ MilitaryServiceStatus = employee.MilitaryService,
+ SubmittedItemsCount = currentConfirmedDocuments.Count(x => x.DocumentStatus == DocumentStatus.SubmittedByAdmin || x.DocumentStatus == DocumentStatus.SubmittedByClient),
+ IsSentToChecker = entity.IsSentToChecker
+ };
result.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(result.EmployeePicture.PicturePath);
result.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(result.IdCardPage1.PicturePath);
result.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(result.IdCardPage2.PicturePath);
@@ -611,12 +615,12 @@ namespace CompanyManagment.Application
}
- ///
- /// جستجوی مجموعه مدارک بر اساس کارگاه
- ///
- /// مد تعیین کننده فیلتر افراد فعال است، سه حالت دارد: همه، فقط فعال، فقط غیر فعال
- public List SearchForClient(SearchEmployeeDocuments cmd, EmployeeDocumentSearchMode mode=EmployeeDocumentSearchMode.ActiveEmployees)
- {
+ ///
+ /// جستجوی مجموعه مدارک بر اساس کارگاه
+ ///
+ /// مد تعیین کننده فیلتر افراد فعال است، سه حالت دارد: همه، فقط فعال، فقط غیر فعال
+ public List SearchForClient(SearchEmployeeDocuments cmd, EmployeeDocumentSearchMode mode = EmployeeDocumentSearchMode.ActiveEmployees)
+ {
#region Create EmployeeDocuments Record For Newly Added Employees
@@ -708,7 +712,7 @@ namespace CompanyManagment.Application
MoveDocumentItemFile(clientUploadedItem.MediaId, $"Deleted/{clientUploadedItem.EmployeeDocuments.WorkshopId}/{clientUploadedItem.EmployeeDocuments.EmployeeId}");
}
}
- DeleteMultipleUnsubmittedDocumentsByLabel(entity,label, uploaderType);
+ DeleteMultipleUnsubmittedDocumentsByLabel(entity, label, uploaderType);
_employeeDocumentItemRepository.SaveChanges();
return op.Succcedded();
@@ -717,60 +721,60 @@ namespace CompanyManagment.Application
///
///حذف آیتم ثبت شده توسط کلاینت برای ادمین
///
- public OperationResult RemoveClientDocumentItemsByAdmin(long workshopId,long employeeId,Listlabels)
- {
- OperationResult op = new();
+ public OperationResult RemoveClientDocumentItemsByAdmin(long workshopId, long employeeId, List labels)
+ {
+ OperationResult op = new();
- var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
+ var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
- if (!_employeeRepository.Exists(x => x.id == employeeId))
- return op.Failed("پرسنل یافت نشد");
+ if (!_employeeRepository.Exists(x => x.id == employeeId))
+ return op.Failed("پرسنل یافت نشد");
- if (!_workshopRepository.Exists(x => x.id == workshopId))
- return op.Failed("کارگاه وجود ندارد");
+ if (!_workshopRepository.Exists(x => x.id == workshopId))
+ return op.Failed("کارگاه وجود ندارد");
- var entity =
- _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
+ var entity =
+ _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
- if (entity == null)
- {
+ if (entity == null)
+ {
- return op.Failed("خطای سیستمی");
+ return op.Failed("خطای سیستمی");
- }
+ }
- var currentItems = entity.EmployeeDocumentItemCollection
- .Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
- .GroupBy(x => x.DocumentLabel).Select(x => x.OrderByDescending(y => y.CreationDate).First()).ToList();
+ var currentItems = entity.EmployeeDocumentItemCollection
+ .Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
+ .GroupBy(x => x.DocumentLabel).Select(x => x.OrderByDescending(y => y.CreationDate).First()).ToList();
- if (currentItems.Any(x=>labels.Contains(x.DocumentLabel) && x.DocumentStatus == DocumentStatus.SubmittedByAdmin))
- return op.Failed("امکان ثبت دوباره مدارک تا بررسی مدارک ثبت شده فعلی وجود ندارد");
+ if (currentItems.Any(x => labels.Contains(x.DocumentLabel) && x.DocumentStatus == DocumentStatus.SubmittedByAdmin))
+ return op.Failed("امکان ثبت دوباره مدارک تا بررسی مدارک ثبت شده فعلی وجود ندارد");
- var targetEntites = currentItems.Where(x=>labels.Contains(x.DocumentLabel) && x.DocumentStatus == DocumentStatus.SubmittedByClient).ToList();
- //if the given label is uploaded by user, move it and soft delete it
- if (targetEntites.Any())
- {
- foreach (var clientUploadedItem in targetEntites)
- {
- clientUploadedItem.Delete(uploaderId, uploaderType);
-
- MoveDocumentItemFile(clientUploadedItem.MediaId, $"Deleted/{clientUploadedItem.EmployeeDocuments.WorkshopId}/{clientUploadedItem.EmployeeDocuments.EmployeeId}");
- }
- _employeeDocumentItemRepository.SaveChanges();
- }
- return op.Succcedded();
- }
+ var targetEntites = currentItems.Where(x => labels.Contains(x.DocumentLabel) && x.DocumentStatus == DocumentStatus.SubmittedByClient).ToList();
+ //if the given label is uploaded by user, move it and soft delete it
+ if (targetEntites.Any())
+ {
+ foreach (var clientUploadedItem in targetEntites)
+ {
+ clientUploadedItem.Delete(uploaderId, uploaderType);
- ///
- /// اضافه کردن آیتم جدید به مدارک برای ادمین
- ///
- public OperationResult AddEmployeeDocumentItemForAdmin(AddEmployeeDocumentItem command)
+ MoveDocumentItemFile(clientUploadedItem.MediaId, $"Deleted/{clientUploadedItem.EmployeeDocuments.WorkshopId}/{clientUploadedItem.EmployeeDocuments.EmployeeId}");
+ }
+ _employeeDocumentItemRepository.SaveChanges();
+ }
+ return op.Succcedded();
+ }
+
+ ///
+ /// اضافه کردن آیتم جدید به مدارک برای ادمین
+ ///
+ public OperationResult AddEmployeeDocumentItemForAdmin(AddEmployeeDocumentItem command)
{
OperationResult op = new();
@@ -804,13 +808,13 @@ namespace CompanyManagment.Application
if (currentItems.Any(x => x.DocumentLabel == command.Label && x.DocumentStatus == DocumentStatus.SubmittedByAdmin))
return op.Failed("امکان ثبت دوباره مدارک تا بررسی مدارک ثبت شده فعلی وجود ندارد");
- //if a given label is uploaded by user, move it and soft delete it
+ //if a given label is uploaded by user, move it and soft delete it
if (currentItems.Any(x =>
x.DocumentLabel == command.Label && x.DocumentStatus == DocumentStatus.SubmittedByClient))
{
var clientUploadedItem = currentItems.First(x =>
x.DocumentLabel == command.Label && x.DocumentStatus == DocumentStatus.SubmittedByClient);
- clientUploadedItem.Delete(uploaderId,uploaderType);
+ clientUploadedItem.Delete(uploaderId, uploaderType);
MoveDocumentItemFile(clientUploadedItem.MediaId,
$"Deleted/{clientUploadedItem.EmployeeDocuments.WorkshopId}/{clientUploadedItem.EmployeeDocuments.EmployeeId}");
}
@@ -844,161 +848,161 @@ namespace CompanyManagment.Application
/// ثبت مدارک توسط ادمین
///
public OperationResult SubmitDocumentItemsByAdmin(SubmitEmployeeDocuments cmd)
- {
- OperationResult op = new();
- var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
- var currentDocs = entity.EmployeeDocumentItemCollection.Where(x=>x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
- .GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate)).ToList();
- //if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
- // return op.Failed("مدارک الزامی بارگذاری نشده اند");
+ {
+ OperationResult op = new();
+ var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
+ var currentDocs = entity.EmployeeDocumentItemCollection.Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
+ .GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate)).ToList();
+ //if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
+ // return op.Failed("مدارک الزامی بارگذاری نشده اند");
- var (userId, operatorType) = _authHelper.GetUserTypeWithId();
+ var (userId, operatorType) = _authHelper.GetUserTypeWithId();
- var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
+ var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
(x.DocumentStatus == DocumentStatus.Unsubmitted && x.UploaderType == UserType.Admin)).ToList();
//if (!HasRequiredDocuments(currentDocs, entity.Gender))
// return op.Failed("مدارک الزامی بارگذاری نشده اند");
if (adminUnsubmittedDocs.Any() == false)
- return op.Succcedded();
+ return op.Succcedded();
- foreach (var item in adminUnsubmittedDocs)
+ foreach (var item in adminUnsubmittedDocs)
{
item.SubmitByAdmin(userId, operatorType);
MoveDocumentItemFile(item.MediaId, $"SubmittedByAdmin/{item.EmployeeDocuments.WorkshopId}/{item.EmployeeDocuments.EmployeeId}");
}
- _employeeDocumentItemRepository.SaveChanges();
- entity.UpdateRequiredItemsSubmittedByClient();
+ _employeeDocumentItemRepository.SaveChanges();
+ entity.UpdateRequiredItemsSubmittedByClient();
entity.UpdateIsSentToChecker();
entity.UpdateIsConfirmed();
_employeeDocumentsRepository.SaveChanges();
return op.Succcedded();
- }
+ }
- ///
- /// ثبت مدارک توسط ادمین، در این متد مدارک الزامی اعتبار سنجی دارند
- ///
- public OperationResult SubmitDocumentItemsByAdminInWorkFlow(SubmitEmployeeDocuments cmd)
- {
- OperationResult op = new();
- var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
- var currentDocs = entity.EmployeeDocumentItemCollection.Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
- .GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate)).ToList();
- //if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
- // return op.Failed("مدارک الزامی بارگذاری نشده اند");
+ ///
+ /// ثبت مدارک توسط ادمین، در این متد مدارک الزامی اعتبار سنجی دارند
+ ///
+ public OperationResult SubmitDocumentItemsByAdminInWorkFlow(SubmitEmployeeDocuments cmd)
+ {
+ OperationResult op = new();
+ var entity = _employeeDocumentsRepository.GetByIdWithItems(cmd.EmployeeDocumentsId);
+ var currentDocs = entity.EmployeeDocumentItemCollection.Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted || x.UploaderType == UserType.Admin)
+ .GroupBy(x => x.DocumentLabel).Select(x => x.MaxBy(y => y.CreationDate)).ToList();
+ //if (!HasRequiredDocuments(notRejectedDocs, entity.Gender))
+ // return op.Failed("مدارک الزامی بارگذاری نشده اند");
- var (userId, operatorType) = _authHelper.GetUserTypeWithId();
+ var (userId, operatorType) = _authHelper.GetUserTypeWithId();
- var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
- (x.DocumentStatus == DocumentStatus.Unsubmitted && x.UploaderType == UserType.Admin)).ToList();
+ var adminUnsubmittedDocs = currentDocs.Where(x => x.DocumentStatus == DocumentStatus.SubmittedByClient ||
+ (x.DocumentStatus == DocumentStatus.Unsubmitted && x.UploaderType == UserType.Admin)).ToList();
- if (!HasRequiredDocuments(currentDocs, entity.Gender))
- return op.Failed("مدارک الزامی بارگذاری نشده اند");
+ if (!HasRequiredDocuments(currentDocs, entity.Gender))
+ return op.Failed("مدارک الزامی بارگذاری نشده اند");
- if (adminUnsubmittedDocs.Any() == false)
- return op.Succcedded();
+ if (adminUnsubmittedDocs.Any() == false)
+ return op.Succcedded();
- foreach (var item in adminUnsubmittedDocs)
- {
- item.SubmitByAdmin(userId, operatorType);
- MoveDocumentItemFile(item.MediaId, $"SubmittedByAdmin/{item.EmployeeDocuments.WorkshopId}/{item.EmployeeDocuments.EmployeeId}");
- }
+ foreach (var item in adminUnsubmittedDocs)
+ {
+ item.SubmitByAdmin(userId, operatorType);
+ MoveDocumentItemFile(item.MediaId, $"SubmittedByAdmin/{item.EmployeeDocuments.WorkshopId}/{item.EmployeeDocuments.EmployeeId}");
+ }
- _employeeDocumentItemRepository.SaveChanges();
- entity.UpdateRequiredItemsSubmittedByClient();
- entity.UpdateIsSentToChecker();
- entity.UpdateIsConfirmed();
- _employeeDocumentsRepository.SaveChanges();
+ _employeeDocumentItemRepository.SaveChanges();
+ entity.UpdateRequiredItemsSubmittedByClient();
+ entity.UpdateIsSentToChecker();
+ entity.UpdateIsConfirmed();
+ _employeeDocumentsRepository.SaveChanges();
- return op.Succcedded();
- }
+ return op.Succcedded();
+ }
- ///
- /// کلاینت unsubmitted دریافت جزییات مدارک پرسنل برای ادمین بدون مدارک
- ///
- public EmployeeDocumentsViewModel GetDetailsForAdmin(long employeeId, long workshopId)
- {
- var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
+ ///
+ /// کلاینت unsubmitted دریافت جزییات مدارک پرسنل برای ادمین بدون مدارک
+ ///
+ public EmployeeDocumentsViewModel GetDetailsForAdmin(long employeeId, long workshopId)
+ {
+ var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
- if (!_employeeRepository.Exists(x => x.id == employeeId))
- return new();
- if (!_workshopRepository.Exists(x => x.id == workshopId))
- return new();
+ if (!_employeeRepository.Exists(x => x.id == employeeId))
+ return new();
+ if (!_workshopRepository.Exists(x => x.id == workshopId))
+ return new();
- //if entity is null but employee exists, make a new empty entity for it
- if (entity == null)
- {
- var opCreate =
- Create(new CreateEmployeeDocuments() { EmployeeId = employeeId, WorkshopId = workshopId });
- if (opCreate.IsSuccedded == false) return new();
+ //if entity is null but employee exists, make a new empty entity for it
+ if (entity == null)
+ {
+ var opCreate =
+ Create(new CreateEmployeeDocuments() { EmployeeId = employeeId, WorkshopId = workshopId });
+ if (opCreate.IsSuccedded == false) return new();
- return new EmployeeDocumentsViewModel() { EmployeeId = employeeId };
- }
+ return new EmployeeDocumentsViewModel() { EmployeeId = employeeId };
+ }
- List currentDocuments = entity.EmployeeDocumentItemCollection
- .Where(x => x.UploaderType == UserType.Admin || x.DocumentStatus != DocumentStatus.Unsubmitted)
- .GroupBy(x => x.DocumentLabel)
- .Select(x => x.MaxBy(y => y.CreationDate)).ToList();
+ List currentDocuments = entity.EmployeeDocumentItemCollection
+ .Where(x => x.UploaderType == UserType.Admin || x.DocumentStatus != DocumentStatus.Unsubmitted)
+ .GroupBy(x => x.DocumentLabel)
+ .Select(x => x.MaxBy(y => y.CreationDate)).ToList();
- var medias = _mediaRepository
- .GetMedias(currentDocuments.Select(x => x.MediaId)
- .ToList());
+ var medias = _mediaRepository
+ .GetMedias(currentDocuments.Select(x => x.MediaId)
+ .ToList());
- var employee = _employeeRepository.Get(entity.EmployeeId);
+ var employee = _employeeRepository.Get(entity.EmployeeId);
- var result = new EmployeeDocumentsViewModel()
- {
- Id = entity.id,
- MilitaryServiceCard = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.MilitaryServiceCard),
+ var result = new EmployeeDocumentsViewModel()
+ {
+ Id = entity.id,
+ MilitaryServiceCard = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.MilitaryServiceCard),
- EducationalDegree = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.EducationalDegree),
+ EducationalDegree = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.EducationalDegree),
- IdCardPage1 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage1),
+ IdCardPage1 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage1),
- IdCardPage2 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage2),
+ IdCardPage2 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage2),
- IdCardPage3 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage3),
+ IdCardPage3 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage3),
- IdCardPage4 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage4),
+ IdCardPage4 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage4),
- NationalCardFront = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.NationalCardFront),
+ NationalCardFront = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.NationalCardFront),
- NationalCardRear = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.NationalCardRear),
+ NationalCardRear = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.NationalCardRear),
- EmployeePicture = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.EmployeePicture),
+ EmployeePicture = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.EmployeePicture),
- EmployeeFullName = employee.FullName,
- WorkshopId = workshopId,
- EmployeeId = entity.EmployeeId,
- Gender = employee.Gender,
- NationalCode = employee.NationalCode,
- EmployeeFName = employee.FName,
- EmployeeLName = employee.LName,
- Nationality = employee.Nationality,
- IdNumber = employee.IdNumber,
- FatherName = employee.FatherName,
- DateOfBirth = employee.DateOfBirth.ToFarsi(),
- MaritalStatus = employee.MaritalStatus,
- MilitaryServiceStatus = employee.MilitaryService,
+ EmployeeFullName = employee.FullName,
+ WorkshopId = workshopId,
+ EmployeeId = entity.EmployeeId,
+ Gender = employee.Gender,
+ NationalCode = employee.NationalCode,
+ EmployeeFName = employee.FName,
+ EmployeeLName = employee.LName,
+ Nationality = employee.Nationality,
+ IdNumber = employee.IdNumber,
+ FatherName = employee.FatherName,
+ DateOfBirth = employee.DateOfBirth.ToFarsi(),
+ MaritalStatus = employee.MaritalStatus,
+ MilitaryServiceStatus = employee.MilitaryService,
- };
+ };
result.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(result.EmployeePicture.PicturePath);
result.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(result.IdCardPage1.PicturePath);
result.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(result.IdCardPage2.PicturePath);
@@ -1012,116 +1016,116 @@ namespace CompanyManagment.Application
}
- ///
- /// جستجوی مجموعه مدارک بر اساس کارگاه برای ادمین
- /// مد تعیین کننده فیلتر افراد فعال است، سه حالت دارد: همه، فقط فعال، فقط غیر فعال
- public List SearchForAdmin(SearchEmployeeDocuments cmd, EmployeeDocumentSearchMode mode=EmployeeDocumentSearchMode.ActiveEmployees)
- {
+ ///
+ /// جستجوی مجموعه مدارک بر اساس کارگاه برای ادمین
+ /// مد تعیین کننده فیلتر افراد فعال است، سه حالت دارد: همه، فقط فعال، فقط غیر فعال
+ public List SearchForAdmin(SearchEmployeeDocuments cmd, EmployeeDocumentSearchMode mode = EmployeeDocumentSearchMode.ActiveEmployees)
+ {
- #region Create EmployeeDocuments Record For Newly Added Employees
+ #region Create EmployeeDocuments Record For Newly Added Employees
- var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(cmd.WorkshopId);
- var existingEmployeeIds =
- _leftWorkRepository.GetAllEmployeeIdsInWorkshop(cmd.WorkshopId);
+ var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(cmd.WorkshopId);
+ var existingEmployeeIds =
+ _leftWorkRepository.GetAllEmployeeIdsInWorkshop(cmd.WorkshopId);
- var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList();
+ var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList();
- if (newEmployeeIds.Any())
- {
- List employees = _employeeRepository.GetRangeByIds(newEmployeeIds).Select(x =>
- new EmployeeDocuments(x.id, cmd.WorkshopId, x.Gender)).ToList();
+ if (newEmployeeIds.Any())
+ {
+ List employees = _employeeRepository.GetRangeByIds(newEmployeeIds).Select(x =>
+ new EmployeeDocuments(x.id, cmd.WorkshopId, x.Gender)).ToList();
- _employeeDocumentsRepository.AddRange(employees);
- _employeeDocumentsRepository.SaveChanges();
- }
+ _employeeDocumentsRepository.AddRange(employees);
+ _employeeDocumentsRepository.SaveChanges();
+ }
- #endregion
+ #endregion
- cmd.Mode = mode;
+ cmd.Mode = mode;
- var result = _employeeDocumentsRepository.SearchForAdmin(cmd);
+ var result = _employeeDocumentsRepository.SearchForAdmin(cmd);
- result.ForEach(x =>
- {
- var requiredDocuments = EmployeeDocumentRequiredItems.GetByGender(x.Gender);
- x.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(x.EmployeePicture.PicturePath);
- x.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage1.PicturePath);
- x.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage2.PicturePath);
- x.IdCardPage3.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage3.PicturePath);
- x.IdCardPage4.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage4.PicturePath);
- x.NationalCardFront.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardFront.PicturePath);
- x.NationalCardRear.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardRear.PicturePath);
- x.MilitaryServiceCard.PicturePath = GetThumbnailPathFromFilePath(x.MilitaryServiceCard.PicturePath);
- x.RequiredDocuments = requiredDocuments;
- x.RequiredDocumentsUploaded = x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(EmployeeDocumentItemViewModel))
- .Select(y => y.GetValue(x) as EmployeeDocumentItemViewModel).Where(y => y != null && !string.IsNullOrWhiteSpace(y.PicturePath) &&
- (y.Status is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin)).Select(y => y.DocumentItemLabel).ToList();
- });
- return result;
- }
+ result.ForEach(x =>
+ {
+ var requiredDocuments = EmployeeDocumentRequiredItems.GetByGender(x.Gender);
+ x.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(x.EmployeePicture.PicturePath);
+ x.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage1.PicturePath);
+ x.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage2.PicturePath);
+ x.IdCardPage3.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage3.PicturePath);
+ x.IdCardPage4.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage4.PicturePath);
+ x.NationalCardFront.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardFront.PicturePath);
+ x.NationalCardRear.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardRear.PicturePath);
+ x.MilitaryServiceCard.PicturePath = GetThumbnailPathFromFilePath(x.MilitaryServiceCard.PicturePath);
+ x.RequiredDocuments = requiredDocuments;
+ x.RequiredDocumentsUploaded = x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(EmployeeDocumentItemViewModel))
+ .Select(y => y.GetValue(x) as EmployeeDocumentItemViewModel).Where(y => y != null && !string.IsNullOrWhiteSpace(y.PicturePath) &&
+ (y.Status is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin)).Select(y => y.DocumentItemLabel).ToList();
+ });
+ return result;
+ }
- ///
- /// مجموعه مدارک بر اساس کارگاه برای کارپوشه ادمین
- public List GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId)
- {
+ ///
+ /// مجموعه مدارک بر اساس کارگاه برای کارپوشه ادمین
+ public List GetByWorkshopIdWithItemsForAdminWorkFlow(long workshopId)
+ {
- #region Create EmployeeDocuments Record For Newly Added Employees
+ #region Create EmployeeDocuments Record For Newly Added Employees
- var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(workshopId);
- var existingEmployeeIds =
- _leftWorkRepository.GetAllEmployeeIdsInWorkshop(workshopId);
- var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList();
+ var existingEmployeesWithDocs = _employeeDocumentsRepository.GetEmployeeIds(workshopId);
+ var existingEmployeeIds =
+ _leftWorkRepository.GetAllEmployeeIdsInWorkshop(workshopId);
+ var newEmployeeIds = existingEmployeeIds.Except(existingEmployeesWithDocs).ToList();
- if (newEmployeeIds.Any())
- {
- List employees = _employeeRepository.GetRangeByIds(newEmployeeIds).Select(x =>
- new EmployeeDocuments(x.id, workshopId, x.Gender)).ToList();
+ if (newEmployeeIds.Any())
+ {
+ List employees = _employeeRepository.GetRangeByIds(newEmployeeIds).Select(x =>
+ new EmployeeDocuments(x.id, workshopId, x.Gender)).ToList();
- _employeeDocumentsRepository.AddRange(employees);
- _employeeDocumentsRepository.SaveChanges();
- }
+ _employeeDocumentsRepository.AddRange(employees);
+ _employeeDocumentsRepository.SaveChanges();
+ }
- #endregion
+ #endregion
- var result = _employeeDocumentsRepository.GetByWorkshopIdWithItemsForAdminWorkFlow(workshopId);
+ var result = _employeeDocumentsRepository.GetByWorkshopIdWithItemsForAdminWorkFlow(workshopId);
- result.ForEach(x =>
- {
- var requiredDocuments = EmployeeDocumentRequiredItems.GetByGender(x.Gender);
- x.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(x.EmployeePicture.PicturePath);
- x.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage1.PicturePath);
- x.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage2.PicturePath);
- x.IdCardPage3.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage3.PicturePath);
- x.IdCardPage4.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage4.PicturePath);
- x.NationalCardFront.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardFront.PicturePath);
- x.NationalCardRear.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardRear.PicturePath);
- x.MilitaryServiceCard.PicturePath = GetThumbnailPathFromFilePath(x.MilitaryServiceCard.PicturePath);
- x.RequiredDocuments = requiredDocuments;
+ result.ForEach(x =>
+ {
+ var requiredDocuments = EmployeeDocumentRequiredItems.GetByGender(x.Gender);
+ x.EmployeePicture.PicturePath = GetThumbnailPathFromFilePath(x.EmployeePicture.PicturePath);
+ x.IdCardPage1.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage1.PicturePath);
+ x.IdCardPage2.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage2.PicturePath);
+ x.IdCardPage3.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage3.PicturePath);
+ x.IdCardPage4.PicturePath = GetThumbnailPathFromFilePath(x.IdCardPage4.PicturePath);
+ x.NationalCardFront.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardFront.PicturePath);
+ x.NationalCardRear.PicturePath = GetThumbnailPathFromFilePath(x.NationalCardRear.PicturePath);
+ x.MilitaryServiceCard.PicturePath = GetThumbnailPathFromFilePath(x.MilitaryServiceCard.PicturePath);
+ x.RequiredDocuments = requiredDocuments;
- #region شتر دیدی ندیدی
+ #region شتر دیدی ندیدی
- x.RequiredDocumentsUploaded = x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(EmployeeDocumentItemViewModel))
- .Select(y => y.GetValue(x) as EmployeeDocumentItemViewModel).Where(y => y != null && !string.IsNullOrWhiteSpace(y.PicturePath) &&
- (y.Status is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin)).Select(y => y.DocumentItemLabel).ToList();
- #endregion
- });
- return result;
- }
+ x.RequiredDocumentsUploaded = x.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance).Where(y => y.PropertyType == typeof(EmployeeDocumentItemViewModel))
+ .Select(y => y.GetValue(x) as EmployeeDocumentItemViewModel).Where(y => y != null && !string.IsNullOrWhiteSpace(y.PicturePath) &&
+ (y.Status is DocumentStatus.Confirmed or DocumentStatus.SubmittedByAdmin)).Select(y => y.DocumentItemLabel).ToList();
+ #endregion
+ });
+ return result;
+ }
- ///
- /// دریافت کارگاه های ادمین که نیاز به آپلود مدارک ضروری دارند
- ///
- public List GetWorkshopDocumentsAwaitingUploadForAdminWorkFlow(List workshops)
- {
- return _employeeDocumentsRepository.GetWorkshopsWithDocumentsAwaitingReviewForAdminWorkFlow(workshops);
- }
+ ///
+ /// دریافت کارگاه های ادمین که نیاز به آپلود مدارک ضروری دارند
+ ///
+ public List GetWorkshopDocumentsAwaitingUploadForAdminWorkFlow(List workshops)
+ {
+ return _employeeDocumentsRepository.GetWorkshopsWithDocumentsAwaitingReviewForAdminWorkFlow(workshops);
+ }
- ///
- /// حذف توسط ادمین، مدارک ثبت شده کلاینت نیز میتوانند توسط ادمین پاک شوند
- ///
+ ///
+ /// حذف توسط ادمین، مدارک ثبت شده کلاینت نیز میتوانند توسط ادمین پاک شوند
+ ///
public OperationResult RemoveByAdmin(long documentItemId)
{
OperationResult op = new();
@@ -1140,7 +1144,7 @@ namespace CompanyManagment.Application
if (entity.UploaderType == UserType.Client)
{
- entity.Delete(operatorId,UserType.Admin);
+ entity.Delete(operatorId, UserType.Admin);
}
else
@@ -1148,16 +1152,19 @@ namespace CompanyManagment.Application
_employeeDocumentItemRepository.Remove(entity);
}
- _employeeDocumentItemRepository.SaveChanges();
+ _employeeDocumentItemRepository.SaveChanges();
return op.Succcedded();
}
- public int GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds)
+ public async Task GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(List workshopIds)
{
- return _employeeDocumentsRepository.GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(workshopIds);
+ return await _employeeDocumentsRepository.GetAdminWorkFlowCountForSubmittedAndRejectedDocuments(workshopIds);
+ }
+ public async Task GetAdminWorkFlowCountForNewEmployees(List workshopIds)
+ {
+ return await _employeeDocumentsRepository.GetAdminWorkFlowCountForNewEmployees(workshopIds);
}
-
#endregion
#region Checker Only Methods
@@ -1184,7 +1191,7 @@ namespace CompanyManagment.Application
(long operatorId, UserType userType) = _authHelper.GetUserTypeWithId();
- if (item.DocumentStatus != DocumentStatus.SubmittedByAdmin)
+ if ((item.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient) == false)
return op.Failed("امکان بررسی رکورد مورد نظر وجود ندارد");
@@ -1210,6 +1217,19 @@ namespace CompanyManagment.Application
}
entity.UpdateIsConfirmed();
entity.UpdateIsSentToChecker();
+
+ if (entity.IsConfirmed)
+ {
+ var clientTemp = _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(entity.EmployeeId, entity.WorkshopId);
+ var employee = _employeeRepository.Get(entity.EmployeeId);
+
+ if (clientTemp != null)
+ {
+ employee.EditFromEmployeeClientTemp(clientTemp.MaritalStatus);
+ _employeeClientTempRepository.Remove(clientTemp);
+ }
+
+ }
_employeeDocumentsRepository.SaveChanges();
return op.Succcedded();
}
@@ -1219,94 +1239,95 @@ namespace CompanyManagment.Application
/// برای تایید یا رد توسط چکر ،unsubmitted دریافت جزییات مدارک پرسنل، بدون مدارک
///
public EmployeeDocumentsViewModel GetDetailsForChecker(long employeeId, long workshopId)
- {
- var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
+ {
+ var entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
- if (!_employeeRepository.Exists(x => x.id == employeeId))
- return new();
- if (!_workshopRepository.Exists(x => x.id == workshopId))
- return new();
+ if (!_employeeRepository.Exists(x => x.id == employeeId))
+ return new();
+ if (!_workshopRepository.Exists(x => x.id == workshopId))
+ return new();
- //if entity is null but employee exists, make a new empty entity for it
- if (entity == null)
- {
- var opCreate =
- Create(new CreateEmployeeDocuments() { EmployeeId = employeeId, WorkshopId = workshopId });
- if (opCreate.IsSuccedded == false) return new();
+ //if entity is null but employee exists, make a new empty entity for it
+ if (entity == null)
+ {
+ var opCreate =
+ Create(new CreateEmployeeDocuments() { EmployeeId = employeeId, WorkshopId = workshopId });
+ if (opCreate.IsSuccedded == false) return new();
- return new EmployeeDocumentsViewModel() { EmployeeId = employeeId };
- }
+ return new EmployeeDocumentsViewModel() { EmployeeId = employeeId };
+ }
- List currentDocuments = entity.EmployeeDocumentItemCollection
- .Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted)
- .GroupBy(x => x.DocumentLabel)
- .Select(x => x.MaxBy(y => y.CreationDate))
- .Where(x=>x.DocumentStatus == DocumentStatus.SubmittedByAdmin ||
- x.DocumentStatus == DocumentStatus.Confirmed || x.DocumentStatus == DocumentStatus.Rejected).ToList();
+ List currentDocuments = entity.EmployeeDocumentItemCollection
+ .Where(x => x.DocumentStatus != DocumentStatus.Unsubmitted)
+ .GroupBy(x => x.DocumentLabel)
+ .Select(x => x.MaxBy(y => y.CreationDate))
+ .Where(x => x.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.Confirmed or DocumentStatus.Rejected or DocumentStatus.SubmittedByClient).ToList();
- var medias = _mediaRepository
- .GetMedias(currentDocuments.Select(x => x.MediaId)
- .ToList());
+ var medias = _mediaRepository
+ .GetMedias(currentDocuments.Select(x => x.MediaId)
+ .ToList());
- var employee = _employeeRepository.Get(entity.EmployeeId);
+ var employee = _employeeRepository.Get(entity.EmployeeId);
+
+ var employeeClientTemp = _employeeClientTempRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
- return new EmployeeDocumentsViewModel()
- {
- Id = entity.id,
- MilitaryServiceCard = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.MilitaryServiceCard),
+ return new EmployeeDocumentsViewModel()
+ {
+ Id = entity.id,
+ MilitaryServiceCard = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.MilitaryServiceCard),
- EducationalDegree = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.EducationalDegree),
+ EducationalDegree = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.EducationalDegree),
- IdCardPage1 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage1),
+ IdCardPage1 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage1),
- IdCardPage2 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage2),
+ IdCardPage2 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage2),
- IdCardPage3 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage3),
+ IdCardPage3 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage3),
- IdCardPage4 =
- GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage4),
+ IdCardPage4 =
+ GetItemFromCollectionByLabel(currentDocuments, medias, DocumentItemLabel.IdCardPage4),
- NationalCardFront = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.NationalCardFront),
+ NationalCardFront = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.NationalCardFront),
- NationalCardRear = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.NationalCardRear),
+ NationalCardRear = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.NationalCardRear),
- EmployeePicture = GetItemFromCollectionByLabel(currentDocuments, medias,
- DocumentItemLabel.EmployeePicture),
+ EmployeePicture = GetItemFromCollectionByLabel(currentDocuments, medias,
+ DocumentItemLabel.EmployeePicture),
- EmployeeFullName = employee.FullName,
- WorkshopId = workshopId,
- EmployeeId = entity.EmployeeId,
- Gender = employee.Gender,
- NationalCode = employee.NationalCode,
- EmployeeFName = employee.FName,
- EmployeeLName = employee.LName,
- Nationality = employee.Nationality,
- IdNumber = employee.IdNumber,
- FatherName = employee.FatherName,
- DateOfBirth = employee.DateOfBirth.ToFarsi(),
- MaritalStatus = employee.MaritalStatus,
- MilitaryServiceStatus = employee.MilitaryService,
- SubmittedItemsCount = currentDocuments.Count(x => x.DocumentStatus == DocumentStatus.SubmittedByAdmin)
- };
- }
+ EmployeeFullName = employee.FullName,
+ WorkshopId = workshopId,
+ EmployeeId = entity.EmployeeId,
+ Gender = employee.Gender,
+ NationalCode = employee.NationalCode,
+ EmployeeFName = employee.FName,
+ EmployeeLName = employee.LName,
+ Nationality = employee.Nationality,
+ IdNumber = employee.IdNumber,
+ FatherName = employee.FatherName,
+ DateOfBirth = employee.DateOfBirth.ToFarsi(),
+ MaritalStatus = employeeClientTemp == null ? employee.MaritalStatus : employeeClientTemp.MaritalStatus,
+ MilitaryServiceStatus = employee.MilitaryService,
+ SubmittedItemsCount = currentDocuments.Count(x => x.DocumentStatus is DocumentStatus.SubmittedByAdmin or DocumentStatus.SubmittedByClient)
+ };
+ }
- ///
- /// دریافت کارگاه هایی که اقدام به آپلود مدارک کرده اند
- ///
- public List GetWorkshopsWithUploadedDocumentsForChecker()
- {
- return _employeeDocumentsRepository.GetWorkshopsWithUploadedDocuments();
- }
+ ///
+ /// دریافت کارگاه هایی که اقدام به آپلود مدارک کرده اند
+ ///
+ public List GetWorkshopsWithUploadedDocumentsForChecker()
+ {
+ return _employeeDocumentsRepository.GetWorkshopsWithUploadedDocuments();
+ }
///
/// دریافت پرسنلی که اقدام به آپلود مدارک کرده اند
@@ -1334,13 +1355,13 @@ namespace CompanyManagment.Application
/// دریافت کارگاه هایی که اقدام به آپلود مدارک "ضروری" کرده اند، برای کارپوشه
///
public List GetWorkshopsWithDocumentsAwaitingReviewForCheckerWorkFlow()
- {
- return _employeeDocumentsRepository.GetWorkshopsWithDocumentsAwaitingReviewForCheckerWorkFlow();
- }
+ {
+ return _employeeDocumentsRepository.GetWorkshopsWithDocumentsAwaitingReviewForCheckerWorkFlow();
+ }
- ///
- /// دریافت پرسنلی در کارگاه که مدارک ضروری آن ها آپلود شده ولی تایید یا رد نشده اند، برای کارپوشه
- ///
+ ///
+ /// دریافت پرسنلی در کارگاه که مدارک ضروری آن ها آپلود شده ولی تایید یا رد نشده اند، برای کارپوشه
+ ///
public List GetDocumentsAwaitingReviewByWorkshopIdForCheckerWorkFlow(long workshopId)
{
@@ -1360,10 +1381,85 @@ namespace CompanyManagment.Application
return result;
}
- public int GetCheckerWorkFlowCount()
+ public async Task GetCheckerWorkFlowCount()
{
- return _employeeDocumentsRepository.GetCheckerWorkFlowCount();
+ return await _employeeDocumentsRepository.GetCheckerWorkFlowCount();
}
+
+ public OperationResult AddRangeEmployeeDocumentItemsByAdmin(long workshopId, long employeeId, List command)
+ {
+ OperationResult op = new();
+
+ var (uploaderId, uploaderType) = _authHelper.GetUserTypeWithId();
+
+ if (!_employeeRepository.Exists(x => x.id == employeeId))
+
+ return op.Failed("پرسنل یافت نشد");
+
+
+ if (!_workshopRepository.Exists(x => x.id == workshopId))
+ return op.Failed("کارگاه وجود ندارد");
+
+
+ var entity =
+ _employeeDocumentsRepository.GetByEmployeeIdWorkshopIdWithItems(employeeId, workshopId);
+
+
+
+ using var scope = new TransactionScope();
+
+
+ //if record doesn't exist but employee exists and also the workshop, create a new record
+ if (entity == null)
+ {
+ var opCreate = Create(new CreateEmployeeDocuments()
+ { EmployeeId = employeeId, WorkshopId = workshopId });
+ if (opCreate.IsSuccedded == false) return opCreate;
+ entity = _employeeDocumentsRepository.GetByEmployeeIdWorkshopId(employeeId, workshopId);
+ }
+
+ List newEntities = new();
+ foreach (var item in command)
+ {
+ DeleteMultipleUnsubmittedDocumentsByLabel(entity, item.Label, uploaderType);
+
+ var mediaOpResult = UploadDocumentItemFile(item.PictureFile, item.Label.ToString(),
+ $"temp/{workshopId}/{employeeId}");
+
+ if (mediaOpResult.IsSuccedded == false)
+ return mediaOpResult;
+
+
+ //if the mediaId is already in use in our table return failed
+ if (_employeeDocumentItemRepository.Exists(x => x.MediaId == mediaOpResult.SendId))
+ return op.Failed("امکان ثبت رکورد تکراری وجود ندارد");
+
+ var newEntity = new EmployeeDocumentItem(workshopId, employeeId, mediaOpResult.SendId, entity.id, item.Label, uploaderId, uploaderType, DocumentStatus.SubmittedByAdmin);
+ newEntities.Add(newEntity);
+ }
+
+ var currentItems = entity.EmployeeDocumentItemCollection.GroupBy(x => x.DocumentLabel)
+ .Where(x => command.Any(a => a.Label == x.Key))
+ .Select(x => x.MaxBy(y => y.CreationDate));
+
+ //This can bite!
+ _employeeDocumentItemRepository.RemoveRange(currentItems);
+ _employeeDocumentItemRepository.SaveChanges();
+
+ _employeeDocumentItemRepository.AddRange(newEntities);
+ _employeeDocumentItemRepository.SaveChanges();
+
+ SubmitDocumentItemsByEmployeeIdWorkshopId(employeeId, workshopId);
+
+ entity.UpdateIsConfirmed();
+ entity.UpdateIsSentToChecker();
+ _employeeDocumentsRepository.SaveChanges();
+
+ scope.Complete();
+ return op.Succcedded(entity.id);
+ }
+
+
#endregion
@@ -1374,286 +1470,286 @@ namespace CompanyManagment.Application
/// مدارک ثبت نشده با برچسب داده شده را پاک می کند. هنگامی استفاده می شود که کاربر یک آیتم را آپلود می کند
///
private void DeleteMultipleUnsubmittedDocumentsByLabel(EmployeeDocuments includedEmployeeDocuments,
- DocumentItemLabel label,UserType userType)
- {
- var items = includedEmployeeDocuments.EmployeeDocumentItemCollection
- .Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted && x.DocumentLabel == label && x.UploaderType == userType).ToList();
+ DocumentItemLabel label, UserType userType)
+ {
+ var items = includedEmployeeDocuments.EmployeeDocumentItemCollection
+ .Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted && x.DocumentLabel == label && x.UploaderType == userType).ToList();
- var mediaIds = items.Select(x => x.MediaId);
- if (items.Any())
- {
- DeleteMultipleDocumentItemFiles(mediaIds);
- _employeeDocumentItemRepository.RemoveRange(items);
- _employeeDocumentItemRepository.SaveChanges();
- }
+ var mediaIds = items.Select(x => x.MediaId);
+ if (items.Any())
+ {
+ DeleteMultipleDocumentItemFiles(mediaIds);
+ _employeeDocumentItemRepository.RemoveRange(items);
+ _employeeDocumentItemRepository.SaveChanges();
+ }
- }
- ///
- /// مدارک ثبت نشده با برچسب داده شده را پاک می کند. هنگامی استفاده می شود که کاربر یک آیتم را آپلود می کند
- ///
- private void DeleteMultipleUnsubmittedDocumentsByLabel(EmployeeDocuments includedEmployeeDocuments,
- List labels, UserType userType)
- {
- var items = includedEmployeeDocuments.EmployeeDocumentItemCollection
- .Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted && labels.Contains(x.DocumentLabel) && x.UploaderType == userType).ToList();
+ }
+ ///
+ /// مدارک ثبت نشده با برچسب داده شده را پاک می کند. هنگامی استفاده می شود که کاربر یک آیتم را آپلود می کند
+ ///
+ private void DeleteMultipleUnsubmittedDocumentsByLabel(EmployeeDocuments includedEmployeeDocuments,
+ List labels, UserType userType)
+ {
+ var items = includedEmployeeDocuments.EmployeeDocumentItemCollection
+ .Where(x => x.DocumentStatus == DocumentStatus.Unsubmitted && labels.Contains(x.DocumentLabel) && x.UploaderType == userType).ToList();
- var mediaIds = items.Select(x => x.MediaId);
- if (items.Any())
- {
- DeleteMultipleDocumentItemFiles(mediaIds);
- _employeeDocumentItemRepository.RemoveRange(items);
- _employeeDocumentItemRepository.SaveChanges();
- }
- }
+ var mediaIds = items.Select(x => x.MediaId);
+ if (items.Any())
+ {
+ DeleteMultipleDocumentItemFiles(mediaIds);
+ _employeeDocumentItemRepository.RemoveRange(items);
+ _employeeDocumentItemRepository.SaveChanges();
+ }
+ }
- //You don't need this method to be public as it's already called where its necessary
- private OperationResult Create(CreateEmployeeDocuments command)
+ //You don't need this method to be public as it's already called where its necessary
+ private OperationResult Create(CreateEmployeeDocuments command)
{
OperationResult op = new();
if (!_employeeRepository.Exists(x => x.id == command.EmployeeId))
return op.Failed("پرسنل یافت نشد");
- if (!_workshopRepository.Exists(x => x.id == command.WorkshopId))
- return op.Failed("کارگاه وجود ندارد");
+ if (!_workshopRepository.Exists(x => x.id == command.WorkshopId))
+ return op.Failed("کارگاه وجود ندارد");
- // اگر در دیتابیس وجود داشت ارور ندهد و عملیاتی انجام ندهد
- if (_employeeDocumentsRepository.Exists(x => x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId))
- return op.Succcedded(_employeeDocumentsRepository
- .GetByEmployeeIdWorkshopId(command.EmployeeId, command.WorkshopId).id);
+ // اگر در دیتابیس وجود داشت ارور ندهد و عملیاتی انجام ندهد
+ if (_employeeDocumentsRepository.Exists(x => x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId))
+ return op.Succcedded(_employeeDocumentsRepository
+ .GetByEmployeeIdWorkshopId(command.EmployeeId, command.WorkshopId).id);
- var gender = _employeeRepository.Get(command.EmployeeId).Gender;
- var entity = new EmployeeDocuments(command.EmployeeId, command.WorkshopId, gender);
+ var gender = _employeeRepository.Get(command.EmployeeId).Gender;
+ var entity = new EmployeeDocuments(command.EmployeeId, command.WorkshopId, gender);
- _employeeDocumentsRepository.Create(entity);
- _employeeDocumentsRepository.SaveChanges();
+ _employeeDocumentsRepository.Create(entity);
+ _employeeDocumentsRepository.SaveChanges();
- return op.Succcedded(entity.id);
- }
+ return op.Succcedded(entity.id);
+ }
- ///
- /// برای حذف فایل مدارک
- ///
- private OperationResult DeleteMultipleDocumentItemFiles(IEnumerable mediaIds)
- {
- OperationResult op = new();
- var medias = _mediaRepository.GetRange(mediaIds);
- if (medias == null || !medias.Any())
- return op.Failed("رسانه مورد نظر یافت نشد");
+ ///
+ /// برای حذف فایل مدارک
+ ///
+ private OperationResult DeleteMultipleDocumentItemFiles(IEnumerable mediaIds)
+ {
+ OperationResult op = new();
+ var medias = _mediaRepository.GetRange(mediaIds);
+ if (medias == null || !medias.Any())
+ return op.Failed("رسانه مورد نظر یافت نشد");
- foreach (var media in medias)
- {
+ foreach (var media in medias)
+ {
- var filePath = media.Path;
- var thumbnailPath = GetThumbnailPathFromFilePath(filePath);
- try
- {
- if (System.IO.File.Exists(filePath))
- System.IO.File.Delete(filePath);
+ var filePath = media.Path;
+ var thumbnailPath = GetThumbnailPathFromFilePath(filePath);
+ try
+ {
+ if (System.IO.File.Exists(filePath))
+ System.IO.File.Delete(filePath);
- if (System.IO.File.Exists(thumbnailPath))
- System.IO.File.Delete(thumbnailPath);
+ if (System.IO.File.Exists(thumbnailPath))
+ System.IO.File.Delete(thumbnailPath);
- }
- catch
- {
- // ignored
- }
- }
+ }
+ catch
+ {
+ // ignored
+ }
+ }
- _mediaRepository.RemoveRange(medias);
- _mediaRepository.SaveChanges();
- //if (somethingWentWrong)
- // return op.Failed("خطایی در حذف فایل رخ داده است");
- return op.Succcedded();
- }
+ _mediaRepository.RemoveRange(medias);
+ _mediaRepository.SaveChanges();
+ //if (somethingWentWrong)
+ // return op.Failed("خطایی در حذف فایل رخ داده است");
+ return op.Succcedded();
+ }
- ///
- /// برای حذف فایل یکی از مدارک
- ///
- private OperationResult DeleteDocumentItemFile(long mediaId)
- {
- OperationResult op = new();
- var media = _mediaRepository.Get(mediaId);
- if (media == null)
- return op.Failed("رسانه مورد نظر یافت نشد");
- var filePath = media.Path;
- var thumbnailPath = GetThumbnailPathFromFilePath(filePath);
- try
- {
- if (System.IO.File.Exists(filePath))
- System.IO.File.Delete(filePath);
+ ///
+ /// برای حذف فایل یکی از مدارک
+ ///
+ private OperationResult DeleteDocumentItemFile(long mediaId)
+ {
+ OperationResult op = new();
+ var media = _mediaRepository.Get(mediaId);
+ if (media == null)
+ return op.Failed("رسانه مورد نظر یافت نشد");
+ var filePath = media.Path;
+ var thumbnailPath = GetThumbnailPathFromFilePath(filePath);
+ try
+ {
+ if (System.IO.File.Exists(filePath))
+ System.IO.File.Delete(filePath);
- if (System.IO.File.Exists(thumbnailPath))
- System.IO.File.Delete(thumbnailPath);
+ if (System.IO.File.Exists(thumbnailPath))
+ System.IO.File.Delete(thumbnailPath);
- }
- catch
- {
- return op.Failed("خطایی در حذف فایل رخ داده است");
- }
+ }
+ catch
+ {
+ return op.Failed("خطایی در حذف فایل رخ داده است");
+ }
- _mediaRepository.Remove(media.id);
- _mediaRepository.SaveChanges();
- return op.Succcedded();
- }
+ _mediaRepository.Remove(media.id);
+ _mediaRepository.SaveChanges();
+ return op.Succcedded();
+ }
- ///
- /// جابجا کردن فایل یکی از مدارک، استفاده شده هنگام تایید و رد
- ///
- private OperationResult MoveDocumentItemFile(long mediaId, string newRelativePath)
- {
- OperationResult op = new();
- var media = _mediaRepository.Get(mediaId);
+ ///
+ /// جابجا کردن فایل یکی از مدارک، استفاده شده هنگام تایید و رد
+ ///
+ private OperationResult MoveDocumentItemFile(long mediaId, string newRelativePath)
+ {
+ OperationResult op = new();
+ var media = _mediaRepository.Get(mediaId);
- var oldFilePath = media.Path;
- var oldThumbnailPath = GetThumbnailPathFromFilePath(oldFilePath);
+ var oldFilePath = media.Path;
+ var oldThumbnailPath = GetThumbnailPathFromFilePath(oldFilePath);
- var newDirectory = Path.Combine(_basePath, newRelativePath);
- Directory.CreateDirectory(newDirectory);
+ var newDirectory = Path.Combine(_basePath, newRelativePath);
+ Directory.CreateDirectory(newDirectory);
- string newFilePath = Path.Combine(newDirectory, Path.GetFileName(oldFilePath)!);
- string newThumbnailFilePath = Path.Combine(newDirectory, Path.GetFileName(oldThumbnailPath));
+ string newFilePath = Path.Combine(newDirectory, Path.GetFileName(oldFilePath)!);
+ string newThumbnailFilePath = Path.Combine(newDirectory, Path.GetFileName(oldThumbnailPath));
- try
- {
+ try
+ {
System.IO.File.Move(oldFilePath, newFilePath);
System.IO.File.Move(oldThumbnailPath, newThumbnailFilePath);
- }
+ }
- catch
- {
- return op.Failed("در جابجایی فایل خطایی رخ داده است");
- }
+ catch
+ {
+ return op.Failed("در جابجایی فایل خطایی رخ داده است");
+ }
- media.Edit(newFilePath, media.Type, media.Category);
- _mediaRepository.SaveChanges();
- return op.Succcedded();
- }
+ media.Edit(newFilePath, media.Type, media.Category);
+ _mediaRepository.SaveChanges();
+ return op.Succcedded();
+ }
- ///
- /// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
- ///
- /// فایل
- /// برچسب مدارک
- /// مسیر فایل
- ///
- private OperationResult UploadDocumentItemFile(IFormFile file, string label, string relativePath)
- {
- OperationResult op = new();
- var now= DateTime.Now;
+ ///
+ /// دریافت فایل و نوشتن آن در مسیر داده شده، و ثبت مدیا
+ ///
+ /// فایل
+ /// برچسب مدارک
+ /// مسیر فایل
+ ///
+ private OperationResult UploadDocumentItemFile(IFormFile file, string label, string relativePath)
+ {
+ OperationResult op = new();
+ var now = DateTime.Now;
PersianCalendar pc = new PersianCalendar();
var yearFa = pc.GetYear(now);
- var monthFa = pc.GetMonth(now);
+ var monthFa = pc.GetMonth(now);
var dayFa = pc.GetDayOfMonth(now);
var ticks = now.Ticks % 864_000_000_000;
- List allowedExtensions = [".png", ".jpg", ".jpeg"];
- var path = Path.Combine(_basePath, relativePath);
- var fileExtension = Path.GetExtension(file.FileName);
+ List allowedExtensions = [".png", ".jpg", ".jpeg"];
+ var path = Path.Combine(_basePath, relativePath);
+ var fileExtension = Path.GetExtension(file.FileName);
if (file.Length > (50 * 1024 * 1024))
return op.Failed("حجم فایل نمی تواند بیشتر از 50 مگابایت باشد");
- if (!allowedExtensions.Contains(fileExtension))
- {
- var operationMessage = ":فرمت فایل باید یکی از موارد زیر باشد";
- operationMessage += "\n";
- operationMessage += string.Join(" ", allowedExtensions);
- return op.Failed(operationMessage);
- }
+ if (!allowedExtensions.Contains(fileExtension))
+ {
+ var operationMessage = ":فرمت فایل باید یکی از موارد زیر باشد";
+ operationMessage += "\n";
+ operationMessage += string.Join(" ", allowedExtensions);
+ return op.Failed(operationMessage);
+ }
- Directory.CreateDirectory(path);
+ Directory.CreateDirectory(path);
- var type = Path.GetExtension(file.FileName);
+ var type = Path.GetExtension(file.FileName);
- var uniqueFileName = $"{label}-{yearFa}-{monthFa}-{dayFa}-{ticks}{type}";
- var filePath = Path.Combine(path, uniqueFileName);
- using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
- {
- file.CopyTo(fileStream);
- }
- #region Thumbnail Creation
+ var uniqueFileName = $"{label}-{yearFa}-{monthFa}-{dayFa}-{ticks}{type}";
+ var filePath = Path.Combine(path, uniqueFileName);
+ using (var fileStream = new FileStream(filePath, FileMode.CreateNew))
+ {
+ file.CopyTo(fileStream);
+ }
+ #region Thumbnail Creation
- var uniqueFileNameThumbnail = $"{label}-{yearFa}-{monthFa}-{dayFa}-{ticks}-thumbnail{type}";
- var thumbnailFilePath = Path.Combine(path, uniqueFileNameThumbnail);
- var thumbnail = Tools.ResizeImage(filePath, 150, 150);
- System.IO.File.WriteAllBytes(thumbnailFilePath, Convert.FromBase64String(thumbnail));
- #endregion
+ var uniqueFileNameThumbnail = $"{label}-{yearFa}-{monthFa}-{dayFa}-{ticks}-thumbnail{type}";
+ var thumbnailFilePath = Path.Combine(path, uniqueFileNameThumbnail);
+ var thumbnail = Tools.ResizeImage(filePath, 150, 150);
+ System.IO.File.WriteAllBytes(thumbnailFilePath, Convert.FromBase64String(thumbnail));
+ #endregion
- var mediaEntity = new Media(filePath, type, "فایل", "EmployeeDocuments");
+ var mediaEntity = new Media(filePath, type, "فایل", "EmployeeDocuments");
- _mediaRepository.Create(mediaEntity);
- _mediaRepository.SaveChanges();
+ _mediaRepository.Create(mediaEntity);
+ _mediaRepository.SaveChanges();
- return op.Succcedded(mediaEntity.id);
+ return op.Succcedded(mediaEntity.id);
- }
+ }
- //private OperationResult UploadExistingRollCallEmployeePicture(long mediaId, long workshopId, long employeeId)
- //{
- // OperationResult op = new();
- // var media = _mediaRepository.Get(mediaId);
+ //private OperationResult UploadExistingRollCallEmployeePicture(long mediaId, long workshopId, long employeeId)
+ //{
+ // OperationResult op = new();
+ // var media = _mediaRepository.Get(mediaId);
- // if (media == null)
- // return op.Failed("فایل مورد نظر یافت نشد");
+ // if (media == null)
+ // return op.Failed("فایل مورد نظر یافت نشد");
- // var path = Path.Combine(_webHostEnvironment.ContentRootPath, "Storage", "EmployeeDocuments", "temp",
- // $"{workshopId}", $"{employeeId}");
+ // var path = Path.Combine(_webHostEnvironment.ContentRootPath, "Storage", "EmployeeDocuments", "temp",
+ // $"{workshopId}", $"{employeeId}");
- // var uniqueFileName = $"{DocumentItemLabel.EmployeePicture.ToString()}-{Guid.NewGuid()}{media.Type}";
- // var newFilePath = Path.Combine(path, uniqueFileName);
- // try
- // {
- // Directory.CreateDirectory(newFilePath);
+ // var uniqueFileName = $"{DocumentItemLabel.EmployeePicture.ToString()}-{Guid.NewGuid()}{media.Type}";
+ // var newFilePath = Path.Combine(path, uniqueFileName);
+ // try
+ // {
+ // Directory.CreateDirectory(newFilePath);
- // if (!System.IO.File.Exists(media.Path))
- // return op.Failed("فایل مورد نظر یافت نشد");
+ // if (!System.IO.File.Exists(media.Path))
+ // return op.Failed("فایل مورد نظر یافت نشد");
- // System.IO.File.Copy(media.Path, newFilePath);
- // }
- // catch
- // {
- // return op.Failed("در جابجایی فایل خطایی رخ داده است");
- // }
+ // System.IO.File.Copy(media.Path, newFilePath);
+ // }
+ // catch
+ // {
+ // return op.Failed("در جابجایی فایل خطایی رخ داده است");
+ // }
- // var mediaEntity = new Media(newFilePath, media.Type, "فایل", "EmployeeDocuments");
- // _mediaRepository.Create(mediaEntity);
- // _mediaRepository.SaveChanges();
+ // var mediaEntity = new Media(newFilePath, media.Type, "فایل", "EmployeeDocuments");
+ // _mediaRepository.Create(mediaEntity);
+ // _mediaRepository.SaveChanges();
- // return op.Succcedded(mediaEntity.id);
+ // return op.Succcedded(mediaEntity.id);
- //}
+ //}
- ///
- /// متد پر استفاده برای دریافت آخرین مدارک تایید شده فرد
- ///
- private static List GetCurrentConfirmedDocuments(EmployeeDocuments entity)
- {
- return entity.EmployeeDocumentItemCollection.Where(x => x.DocumentStatus == DocumentStatus.Confirmed)
- .GroupBy(x => x.DocumentLabel)
- .Select(x => x.MaxBy(y => y.CreationDate)).ToList();
- }
+ ///
+ /// متد پر استفاده برای دریافت آخرین مدارک تایید شده فرد
+ ///
+ private static List GetCurrentConfirmedDocuments(EmployeeDocuments entity)
+ {
+ return entity.EmployeeDocumentItemCollection.Where(x => x.DocumentStatus == DocumentStatus.Confirmed)
+ .GroupBy(x => x.DocumentLabel)
+ .Select(x => x.MaxBy(y => y.CreationDate)).ToList();
+ }
- ///
- /// با توجه به جنسیت مدارک لازم را تعیین می کند، مثلا معافیت سربازی برای آقایان
- ///
- ///
- /// "مرد" یا "زن"
- private bool HasRequiredDocuments(List items, string gender)
+ ///
+ /// با توجه به جنسیت مدارک لازم را تعیین می کند، مثلا معافیت سربازی برای آقایان
+ ///
+ ///
+ /// "مرد" یا "زن"
+ private bool HasRequiredDocuments(List items, string gender)
{
@@ -1663,41 +1759,41 @@ namespace CompanyManagment.Application
List labels = items.GroupBy(x => x.DocumentLabel)
.Select(x => x.Key).ToList();
- //if labels has all the required labels
- if (labels.Count(x => requiredDocuments.Contains(x)) == requiredDocuments.Count())
- return true;
- return false;
- }
+ //if labels has all the required labels
+ if (labels.Count(x => requiredDocuments.Contains(x)) == requiredDocuments.Count())
+ return true;
+ return false;
+ }
- //for mapping purposes
- private static EmployeeDocumentItemViewModel GetItemFromCollectionByLabel(List items,
- List medias, DocumentItemLabel label)
- {
- if (items == null || items.Count == 0)
- return new();
- var item = items.FirstOrDefault(x => x.DocumentLabel == label);
+ //for mapping purposes
+ private static EmployeeDocumentItemViewModel GetItemFromCollectionByLabel(List items,
+ List medias, DocumentItemLabel label)
+ {
+ if (items == null || items.Count == 0)
+ return new();
+ var item = items.FirstOrDefault(x => x.DocumentLabel == label);
- if (item == null || item.MediaId == 0)
- return new();
+ if (item == null || item.MediaId == 0)
+ return new();
- return new EmployeeDocumentItemViewModel()
- {
- DocumentItemLabel = label,
- Id = item.id,
- Status = item.DocumentStatus,
- StatusString = item.DocumentStatus.ToString().ToLower(),
- PicturePath = medias.FirstOrDefault(x => x.Id == item.MediaId)?.Path ?? "",
- RejectionMessage = item.RejectionReason,
- UploaderType = item.UploaderType
- };
- }
+ return new EmployeeDocumentItemViewModel()
+ {
+ DocumentItemLabel = label,
+ Id = item.id,
+ Status = item.DocumentStatus,
+ StatusString = item.DocumentStatus.ToString().ToLower(),
+ PicturePath = medias.FirstOrDefault(x => x.Id == item.MediaId)?.Path ?? "",
+ RejectionMessage = item.RejectionReason,
+ UploaderType = item.UploaderType
+ };
+ }
- private static string GetThumbnailPathFromFilePath(string filePath)
- {
- return string.IsNullOrWhiteSpace(filePath)? string.Empty: Path.Combine(Path.GetDirectoryName(filePath)!, Path.GetFileNameWithoutExtension(filePath) + $"-thumbnail{Path.GetExtension(filePath)}");
- }
+ private static string GetThumbnailPathFromFilePath(string filePath)
+ {
+ return string.IsNullOrWhiteSpace(filePath) ? string.Empty : Path.Combine(Path.GetDirectoryName(filePath)!, Path.GetFileNameWithoutExtension(filePath) + $"-thumbnail{Path.GetExtension(filePath)}");
+ }
#endregion
#region Old MEthods
@@ -1769,7 +1865,7 @@ namespace CompanyManagment.Application
//}
#endregion
-
+
}
}
diff --git a/CompanyManagment.Application/InsuranceListApplication.cs b/CompanyManagment.Application/InsuranceListApplication.cs
index c573df90..42191c42 100644
--- a/CompanyManagment.Application/InsuranceListApplication.cs
+++ b/CompanyManagment.Application/InsuranceListApplication.cs
@@ -440,10 +440,10 @@ public class InsuranceListApplication: IInsuranceListApplication
//محاسبه مزایای ماهانه
var monthlyBenefits = GetMonthlyBenefits(endOfMonth, yearlysaleries.ConsumableItems, yearlysaleries.HousingAllowance, marriedAllowance, workingDays.countWorkingDays, searchModel.TypeOfInsuranceSendWorkshop, employee.JobId, employee.EmployeeId,employee.IncludeStatus);
- if (employee.EmployeeId is 7999)// سید عباس خوشکلام سلیمان
- monthlyBenefits = 80869389;
- if (employee.EmployeeId is 43787)// شهرام براهیمی سیقلان
- monthlyBenefits = 54748472;
+ //if (employee.EmployeeId is 7999)// سید عباس خوشکلام سلیمان
+ // monthlyBenefits = 80869389;
+ //if (employee.EmployeeId is 43787)// شهرام براهیمی سیقلان
+ // monthlyBenefits = 54748472;
var marriedAllowanceCompute = MarriedAllowance(employee.MaritalStatus, employee.JobId, employee.IncludeStatus,
diff --git a/CompanyManagment.Application/LeftWorkTempApplication.cs b/CompanyManagment.Application/LeftWorkTempApplication.cs
new file mode 100644
index 00000000..37681395
--- /dev/null
+++ b/CompanyManagment.Application/LeftWorkTempApplication.cs
@@ -0,0 +1,273 @@
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using _0_Framework.Application;
+using _0_Framework_b.Application;
+using Company.Domain.CheckoutAgg;
+using Company.Domain.ContractAgg;
+using Company.Domain.EmployeeAgg;
+using Company.Domain.JobAgg;
+using Company.Domain.LeftWorkAgg;
+using Company.Domain.LeftWorkTempAgg;
+using Company.Domain.RollCallEmployeeAgg;
+using Company.Domain.RollCallEmployeeStatusAgg;
+using Company.Domain.WorkshopAgg;
+using CompanyManagment.App.Contracts.Checkout;
+using CompanyManagment.App.Contracts.Contract;
+using CompanyManagment.App.Contracts.LeftWork;
+using CompanyManagment.App.Contracts.LeftWorkTemp;
+using CompanyManagment.App.Contracts.ReportClient;
+using CompanyManagment.App.Contracts.RollCallEmployee;
+using OperationResult = _0_Framework.Application.OperationResult;
+using Tools = _0_Framework.Application.Tools;
+
+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 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;
+ _rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
+ _rollCallEmployeeRepository = rollCallEmployeeRepository;
+ }
+
+ public async Task Create(CreateLeftWorkTemp command)
+ {
+ var op = new OperationResult();
+
+ foreach (var employeeId in command.EmployeeIds)
+ {
+ #region Validation
+
+ if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
+ {
+ return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
+ }
+ if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingDateGr) == false)
+ {
+ return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
+ }
+
+ var leftWork = await _leftWorkRepository.GetLastLeftWork(employeeId, command.WorkshopId);
+
+ if (lastDayStandingDateGr.AddDays(1).Date != leftWorkDateGr)
+ {
+ return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند");
+ }
+
+ if (leftWork == null)
+ {
+ return op.Failed("شروع به کار پرسنل یافت نشد");
+ }
+
+ if (leftWork.HasLeft)
+ {
+ return op.Failed("پرسنل وارد شده قبلا ترک کار ثبت شده است");
+ }
+
+ if (leftWork.StartWorkDate > lastDayStandingDateGr)
+ {
+ return op.Failed("تاریخ ثبت شده قبل از شروع به کار است");
+ }
+
+ if (leftWork.WorkshopId != command.WorkshopId || leftWork.EmployeeId != employeeId)
+ {
+ return op.Failed("اطلاعات وارد شده نامعتبر است");
+ }
+
+
+
+ //if (leftWork.StartWorkDate >= leftWorkDateGr)
+ //{
+ // return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
+ //}
+
+ //if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId &&
+ // x.WorkshopId == leftWorkTemp.WorkshopId &&
+ // x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr))
+ //{
+ // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
+ //}
+
+ //if (_contractRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId &&
+ // x.WorkshopIds == leftWorkTemp.WorkshopId &&
+ // x.ContarctStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr))
+ //{
+ // return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای قرارداد میباشد");
+ //}
+
+
+ #endregion
+
+ var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr, lastDayStandingDateGr,
+ command.WorkshopId, employeeId, leftWork.JobId);
+
+ await _leftWorkTempRepository.CreateAsync(leftWorkTemp);
+ }
+
+ await _leftWorkTempRepository.SaveChangesAsync();
+ return op.Succcedded();
+ }
+
+ public Task GetStartAndLeftWorkDetails(long employeeId, long workshopId)
+ {
+ return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId);
+ }
+
+ public async Task AcceptStartWork(AcceptStartWorkTemp command)
+ {
+ var op = new OperationResult();
+ if (command.StartDateTime.TryToGeorgianDateTime(out var startDateGr) == false)
+ {
+ return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
+ }
+
+ var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
+
+ 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 (_jobRepository.Exists(x => x.id == command.JobId) == false)
+ {
+ return op.Failed("سمت وارد شده نامعتبر است");
+ }
+
+ var defaultTime = new DateTime(2121, 03, 21);
+
+ 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, "", "");
+
+ await _leftWorkRepository.CreateAsync(newLeftWork);
+ _leftWorkTempRepository.Remove(leftWorkTemp);
+ await _leftWorkRepository.SaveChangesAsync();
+ await _leftWorkTempRepository.SaveChangesAsync();
+ return op.Succcedded();
+ }
+
+ public async Task AcceptLeftWork(AcceptLeftWorkTemp command)
+ {
+ var op = new OperationResult();
+ if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
+ {
+ return op.Failed("تاریخ ترک کار وارد شده نامعتبر است");
+ }
+
+ if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingGr) == false)
+ {
+ return op.Failed("تاریخ آخرین روز کاری وارد شده نامعتبر است");
+ }
+
+ if (lastDayStandingGr.AddDays(1).Date != leftWorkDateGr)
+ {
+ return op.Failed("تاریخ آخرین روز کاری با تاریخ ترک کار یک روز اختلاف ندارند");
+ }
+
+ var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
+
+ if (leftWorkTemp == null)
+ {
+ return op.Failed("ترک کار وارد شده یافت نشد");
+ }
+
+
+ if (leftWorkTemp.LeftWorkType != LeftWorkTempType.LeftWork)
+ {
+ return op.Failed("اطلاعات وارد شده نامعتبر است");
+ }
+
+ var leftWork = _leftWorkRepository.Get(leftWorkTemp.LeftWorkId);
+
+
+ if (leftWork == null)
+ return op.Failed("شروع به کار پرسنل یافت نشد");
+
+ if (leftWork.StartWorkDate >= leftWorkDateGr)
+ {
+ return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
+ }
+
+ if (_checkoutRepository.Exists(x => x.EmployeeId == leftWorkTemp.EmployeeId &&
+ x.WorkshopId == leftWorkTemp.WorkshopId &&
+ x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr))
+ {
+ return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
+ }
+
+ leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId,
+ leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay);
+
+ _leftWorkTempRepository.Remove(leftWorkTemp);
+ await _leftWorkRepository.SaveChangesAsync();
+ await _leftWorkTempRepository.SaveChangesAsync();
+
+ IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId);
+
+ return op.Succcedded();
+ }
+ //این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
+ 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()
+ {
+ 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)
+ .Where(x => leftWorks.Any(y => y.WorkshopId == x.WorkshopId)).ToList();
+
+ 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()
+ {
+ LeaveDate = x.LeftWorkDateGr,
+ RollCallStatusId = x.Status.Id
+ }).ToList();
+ if (newRollCallRecords.Count > 0)
+ _rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.Application/PersonnelCodeApplication.cs b/CompanyManagment.Application/PersonnelCodeApplication.cs
index da131b8e..e95cbef7 100644
--- a/CompanyManagment.Application/PersonnelCodeApplication.cs
+++ b/CompanyManagment.Application/PersonnelCodeApplication.cs
@@ -76,4 +76,9 @@ public class PersonnelCodeApplication : IPersonnelCodeApplication
{
return _personnelCodeRepository.GetEmployeeIdByPersonelCode(personleCode, workshopId);
}
+
+ public long GetLastPersonnelCodeByWorkshop(long workshopId)
+ {
+ return _personnelCodeRepository.GetLastPersonnelCodeByWorkshop(workshopId);
+ }
}
\ No newline at end of file
diff --git a/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs b/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs
index 1c98736e..27ac6a16 100644
--- a/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs
+++ b/CompanyManagment.Application/RollCallEmployeeStatusApplication.cs
@@ -8,123 +8,143 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Company.Domain.RollCallServiceAgg;
+using Company.Domain.LeftWorkTempAgg;
+using Company.Domain.LeftWorkInsuranceAgg;
+using CompanyManagment.App.Contracts.LeftWorkTemp;
namespace CompanyManagment.Application
{
- public class RollCallEmployeeStatusApplication : IRollCallEmployeeStatusApplication
- {
- private readonly IRollCallEmployeeStatusRepository _employeeRollCallStatusRepository;
- private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
- private readonly ILeftWorkRepository _leftWorkRepository;
- private readonly IRollCallServiceRepository _rollCallServiceRepository;
+ public class RollCallEmployeeStatusApplication : IRollCallEmployeeStatusApplication
+ {
+ private readonly IRollCallEmployeeStatusRepository _employeeRollCallStatusRepository;
+ private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
+ private readonly ILeftWorkRepository _leftWorkRepository;
+ private readonly IRollCallServiceRepository _rollCallServiceRepository;
+ private readonly ILeftWorkTempRepository _leftWorkTempRepository;
+ private readonly ILeftWorkInsuranceRepository _leftWorkInsuranceRepository;
- public RollCallEmployeeStatusApplication(IRollCallEmployeeStatusRepository employeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, ILeftWorkRepository leftWorkRepository, IRollCallServiceRepository rollCallServiceRepository)
- {
- _employeeRollCallStatusRepository = employeeStatusRepository;
- _rollCallEmployeeRepository = rollCallEmployeeRepository;
- _leftWorkRepository = leftWorkRepository;
- _rollCallServiceRepository = rollCallServiceRepository;
- }
- public OperationResult Create(CreateRollCallEmployeeStatus cmd)
- {
- OperationResult op = new();
- RollCallEmployee rollCallEmployee = _rollCallEmployeeRepository.Get(cmd.RollCallEmployeeId);
- if (rollCallEmployee == null)
- return op.Failed("کارمند مجاز نیست");
+ public RollCallEmployeeStatusApplication(IRollCallEmployeeStatusRepository employeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository, ILeftWorkRepository leftWorkRepository, IRollCallServiceRepository rollCallServiceRepository, ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkInsuranceRepository leftWorkInsuranceRepository)
+ {
+ _employeeRollCallStatusRepository = employeeStatusRepository;
+ _rollCallEmployeeRepository = rollCallEmployeeRepository;
+ _leftWorkRepository = leftWorkRepository;
+ _rollCallServiceRepository = rollCallServiceRepository;
+ _leftWorkTempRepository = leftWorkTempRepository;
+ _leftWorkInsuranceRepository = leftWorkInsuranceRepository;
+ }
- if (!_leftWorkRepository.Exists(x => x.EmployeeId == rollCallEmployee.EmployeeId && x.WorkshopId == rollCallEmployee.WorkshopId &&
- (x.LeftWorkDate.Date > DateTime.Now.Date && x.StartWorkDate.Date <= DateTime.Now.Date) || x.StartWorkDate >= DateTime.Today))
- return op.Failed("کارمند در کارگاه شروع به کار نکرده است");
+ public OperationResult Create(CreateRollCallEmployeeStatus cmd)
+ {
+ OperationResult op = new();
+ RollCallEmployee rollCallEmployee = _rollCallEmployeeRepository.Get(cmd.RollCallEmployeeId);
+ if (rollCallEmployee == null)
+ return op.Failed("کارمند مجاز نیست");
- if (_employeeRollCallStatusRepository.Exists(y =>
- rollCallEmployee.id == y.RollCallEmployeeId && y.EndDate.Date > DateTime.Now.Date))
- return op.Failed("کارمند فعال می باشد");
+ if (!_leftWorkRepository.Exists(x =>
+ x.EmployeeId == rollCallEmployee.EmployeeId && x.WorkshopId == rollCallEmployee.WorkshopId &&
+ x.StartWorkDate <= DateTime.Now && x.LeftWorkDate > DateTime.Now) &&
+ !_leftWorkTempRepository.Exists(x =>
+ x.EmployeeId == rollCallEmployee.EmployeeId && x.WorkshopId == rollCallEmployee.WorkshopId &&
+ x.LeftWorkType == LeftWorkTempType.StartWork))
+ {
+ return op.Failed("کارمند شروع به کار ندارد");
+ }
- if (_employeeRollCallStatusRepository.Exists(y =>
- rollCallEmployee.id == y.RollCallEmployeeId && y.EndDate.Date == DateTime.Now.Date))
- {
- RollCallEmployeeStatus previousStatusInDate = _employeeRollCallStatusRepository.GetByRollCallEmployeeIdAndDate(cmd.RollCallEmployeeId, DateTime.Now.Date);
- previousStatusInDate.Edit(previousStatusInDate.StartDate, Tools.GetUndefinedDateTime());
- }
- else
- {
- var pc = new PersianCalendar();
- var startStatus = DateTime.Today;
- LeftWork leftWork =
- _leftWorkRepository.GetLastLeftWork(rollCallEmployee.EmployeeId, rollCallEmployee.WorkshopId).GetAwaiter().GetResult();
-
- if(leftWork.StartWorkDate>DateTime.Today)
- startStatus = leftWork.StartWorkDate;
+ if (_employeeRollCallStatusRepository.Exists(y =>
+ rollCallEmployee.id == y.RollCallEmployeeId && y.EndDate.Date > DateTime.Now.Date))
+ return op.Failed("کارمند فعال می باشد");
- //else if(pc.GetMonth(DateTime.Today) == pc.GetMonth(leftWork.StartWorkDate))
- //{
- // startStatus = new DateTime(pc.GetYear(leftWork.StartWorkDate), pc.GetMonth(leftWork.StartWorkDate),
- // 1, pc);
- //}
+ if (_employeeRollCallStatusRepository.Exists(y =>
+ rollCallEmployee.id == y.RollCallEmployeeId && y.EndDate.Date == DateTime.Now.Date))
+ {
+ RollCallEmployeeStatus previousStatusInDate = _employeeRollCallStatusRepository.GetByRollCallEmployeeIdAndDate(cmd.RollCallEmployeeId, DateTime.Now.Date);
+ previousStatusInDate.Edit(previousStatusInDate.StartDate, Tools.GetUndefinedDateTime());
+ }
+ else
+ {
+ var pc = new PersianCalendar();
+ var startStatus = DateTime.Today;
+ LeftWork leftWork =
+ _leftWorkRepository.GetLastLeftWork(rollCallEmployee.EmployeeId, rollCallEmployee.WorkshopId).GetAwaiter().GetResult();
- RollCallEmployeeStatus newRecord = new(rollCallEmployee.id, startStatus);
- _employeeRollCallStatusRepository.Create(newRecord);
- }
+ if (leftWork != null && leftWork.StartWorkDate > DateTime.Today)
+ startStatus = leftWork.StartWorkDate;
- _employeeRollCallStatusRepository.SaveChanges();
+ //else if(pc.GetMonth(DateTime.Today) == pc.GetMonth(leftWork.StartWorkDate))
+ //{
+ // startStatus = new DateTime(pc.GetYear(leftWork.StartWorkDate), pc.GetMonth(leftWork.StartWorkDate),
+ // 1, pc);
+ //}
- return op.Succcedded();
- }
+ RollCallEmployeeStatus newRecord = new(rollCallEmployee.id, startStatus);
+ _employeeRollCallStatusRepository.Create(newRecord);
+ }
- public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
- {
- //موقت
- // دادمهرگستر 11
- //585 کاشی گالری سرامیس (بابک ابراهیمی )
- //آموزشگاه ملل 604
- //کاریابی ملل 605
- //368 پیتزا امیر آماده سازی
- //367 پیتزا امیر رستوران
- //286 مرکز توان بخشی رسالت
- bool skipRollCall = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
+ _employeeRollCallStatusRepository.SaveChanges();
-#if DEBUG
- skipRollCall = workshopId is 11 or 585 or 604 or 605 or 368 or 367;
-#endif
- if (skipRollCall)
- return false;
+ return op.Succcedded();
+ }
+
+ public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
+ {
+ //موقت
+ // دادمهرگستر 11
+ //585 کاشی گالری سرامیس (بابک ابراهیمی )
+ //آموزشگاه ملل 604
+ //کاریابی ملل 605
+ //368 پیتزا امیر آماده سازی
+ //367 پیتزا امیر رستوران
+ //286 مرکز توان بخشی رسالت
+ bool skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
+
+ //#if DEBUG
+ // skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367;
+ //#endif
+ if (skipRollCallByWorkshopId)
+ return false;
- var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);
+ // 42550 مصطفی مقدس نژاد فومنی
+ bool skipRollCallByEmployeeId = employeeId is 42550;
+ if (skipRollCallByEmployeeId)
+ return false;
- if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date))
- return false;
- var rollCallEmployee =
- _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
- if (rollCallEmployee == null)
- return false;
+ var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);
- return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id &&
- x.StartDate.Date <= contractStart.Date &&
- x.EndDate.Date >= contractEnd.Date);
- }
+ if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date))
+ return false;
+ var rollCallEmployee =
+ _rollCallEmployeeRepository.GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
- public List GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr)
- {
- return _employeeRollCallStatusRepository.GetActiveByWorkshopIdInDate(workshopId, startDateGr, endDateGr);
- }
+ if (rollCallEmployee == null)
+ return false;
- public OperationResult Deactivate(long id)
- {
- OperationResult op = new();
- RollCallEmployeeStatus entity = _employeeRollCallStatusRepository.Get(id);
- if (entity == null)
- return op.Failed(ApplicationMessages.RecordNotFound);
- if (!entity.EndDate.IsDateUndefined())
- return op.Failed("کارمند قبلا غیر فعال شده است");
- entity.Deactivate(DateTime.Now.Date);
- _employeeRollCallStatusRepository.SaveChanges();
- return op.Succcedded();
- }
+ return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id &&
+ x.StartDate.Date <= contractStart.Date &&
+ x.EndDate.Date >= contractEnd.Date);
+ }
+
+ public List GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr)
+ {
+ return _employeeRollCallStatusRepository.GetActiveByWorkshopIdInDate(workshopId, startDateGr, endDateGr);
+ }
+
+ public OperationResult Deactivate(long id)
+ {
+ OperationResult op = new();
+ RollCallEmployeeStatus entity = _employeeRollCallStatusRepository.Get(id);
+ if (entity == null)
+ return op.Failed(ApplicationMessages.RecordNotFound);
+ if (!entity.EndDate.IsDateUndefined())
+ return op.Failed("کارمند قبلا غیر فعال شده است");
+ entity.Deactivate(DateTime.Now.Date);
+ _employeeRollCallStatusRepository.SaveChanges();
+ return op.Succcedded();
+ }
public OperationResult Edit(EditRollCallEmployeeStatus cmd)
{
diff --git a/CompanyManagment.Application/RollCallServiceApplication.cs b/CompanyManagment.Application/RollCallServiceApplication.cs
index 5d34b897..474ccc50 100644
--- a/CompanyManagment.Application/RollCallServiceApplication.cs
+++ b/CompanyManagment.Application/RollCallServiceApplication.cs
@@ -102,4 +102,9 @@ public class RollCallServiceApplication : IRollCallServiceApplication
{
return _rollCallServiceRepository.GetAllServiceByAccountId(accountId);
}
+
+ public bool IsExistActiveServiceByWorkshopId(long workshopId)
+ {
+ return _rollCallServiceRepository.IsExistActiveServiceByWorkshopId(workshopId);
+ }
}
\ No newline at end of file
diff --git a/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs
new file mode 100644
index 00000000..bd4174a3
--- /dev/null
+++ b/CompanyManagment.Application/TemporaryClientRegistrationApplication.cs
@@ -0,0 +1,111 @@
+using System.Threading.Tasks;
+using _0_Framework.Application;
+using _0_Framework.Application.UID;
+using Company.Domain.ContarctingPartyAgg;
+using Company.Domain.TemporaryClientRegistrationAgg;
+using CompanyManagment.App.Contracts.TemporaryClientRegistration;
+using PersianTools.Core;
+
+namespace CompanyManagment.Application;
+
+public class TemporaryClientRegistrationApplication : ITemporaryClientRegistrationApplication
+{
+ private readonly IContractingPartyTempRepository _contractingPartyTempRepository;
+ private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
+ private readonly IUidService _uidService;
+
+ public TemporaryClientRegistrationApplication(IContractingPartyTempRepository contractingPartyTempRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IUidService uidService)
+ {
+ _contractingPartyTempRepository = contractingPartyTempRepository;
+ _personalContractingPartyRepository = personalContractingPartyRepository;
+ _uidService = uidService;
+ }
+
+ public async Task> CreateContractingPartyTemp(string nationalCode , string dateOfBirth, string mobile)
+ {
+ var op = new OperationResult();
+
+ #region Validations
+
+ if (string.IsNullOrWhiteSpace(nationalCode) || string.IsNullOrWhiteSpace(dateOfBirth) ||
+ string.IsNullOrWhiteSpace(mobile))
+ return op.Failed("هیچ یک از فیلد ها نمیتواند خالی باشد");
+
+
+ if (nationalCode.NationalCodeValid() != "valid")
+ return op.Failed("کد ملی نا معتبر است");
+
+ if(!dateOfBirth.IsPersianDateValid())
+ return op.Failed("تاریخ تولد نا معتبر است");
+
+ if(!mobile.IsMobileValid())
+ return op.Failed("شماره همراه نا معتبر است");
+ #endregion
+
+
+ var getExistContractingParty = await _contractingPartyTempRepository.CheckExistOrAuthenticated(nationalCode, dateOfBirth);
+
+ //اگر طرف حساب قبلا در دیتابیس وجود داشت
+ if (getExistContractingParty)
+ {
+ return op.Failed("طرف حساب با این مشخصات در سیستم وجود دارد");
+ }
+ //اگر طرف حساب وجود نداشت
+ else
+ {
+ //دریافت اطلاعات طرف حساب موقت که قبلا ایجاد شده
+ var getExistTemp = _contractingPartyTempRepository.GetByNationalCode(nationalCode);
+
+ var dateOfBirthGr = dateOfBirth.ToGeorgianDateTime();
+
+ if (getExistTemp != null)
+ {
+
+ if(getExistTemp.DateOfBirth != dateOfBirthGr)
+ return op.Failed("تاریخ تولد مطابقت ندارد");
+ if (getExistTemp.Phone != mobile)
+ return op.Failed("شما قبلا با شماره همراه دیگری ثبت نام نموده اید");
+ return op.Succcedded(getExistTemp);
+
+ }
+ //چک کردن مطابقت شماره همراه و کد ملی
+ var isMachMobilAndNationalCode = await _uidService.IsMachPhoneWithNationalCode(nationalCode, mobile);
+ if (isMachMobilAndNationalCode == null)
+ return op.Failed("خطا در سرویس احراز هویت");
+ if(!isMachMobilAndNationalCode.IsMatched)
+ return op.Failed("شماره همراه وارد شده با کد ملی مطابقت ندارد");
+
+ //دریافت اطلاعات احراز هویت
+ var apiRespons = await _uidService.GetPersonalInfo(nationalCode, dateOfBirth);
+
+ if(apiRespons == null)
+ return op.Failed("خطا در سرویس احراز هویت");
+ if (apiRespons.ResponseContext.Status.Code != 0)
+ return op.Failed($"{apiRespons.ResponseContext.Status.Message}");
+
+ var idNumber = apiRespons.IdentificationInformation.ShenasnamehNumber == "0"
+ ? apiRespons.IdentificationInformation.NationalId
+ : apiRespons.IdentificationInformation.ShenasnamehNumber;
+
+ //ایجاد طرف حساب موقت
+ var createTemp = new ContractingPartyTemp(apiRespons.BasicInformation.FirstName,
+ apiRespons.BasicInformation.LastName, nationalCode, idNumber, mobile,
+ apiRespons.BasicInformation.FatherName, "", "", "",
+ apiRespons.IdentificationInformation.ShenasnameSeri,
+ apiRespons.IdentificationInformation.ShenasnameSerial, apiRespons.BasicInformation.GenderEnum,
+ dateOfBirthGr);
+ await _contractingPartyTempRepository.CreateAsync(createTemp);
+ await _contractingPartyTempRepository.SaveChangesAsync();
+
+ var result = new ContractingPartyTempViewModel();
+ result.Id = createTemp.id;
+ result.FName = createTemp.FName;
+ result.LName = createTemp.LName;
+ result.DateOfBirthFa = dateOfBirth;
+ result.IdNumber = idNumber;
+
+ return op.Succcedded(result);
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs
index 14be5b57..d97836ca 100644
--- a/CompanyManagment.Application/WorkshopAppliction.cs
+++ b/CompanyManagment.Application/WorkshopAppliction.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Threading.Tasks;
using System.Transactions;
using _0_Framework.Application;
using AccountManagement.Application.Contracts.Account;
@@ -15,6 +16,7 @@ using CompanyManagment.App.Contracts.EmployeeChildren;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.App.Contracts.Workshop;
+using CompanyManagment.App.Contracts.Workshop.DTOs;
using CompanyManagment.App.Contracts.WorkshopPlan;
using CompanyManagment.EFCore.Migrations;
using Microsoft.EntityFrameworkCore;
@@ -35,9 +37,9 @@ public class WorkshopAppliction : IWorkshopApplication
private readonly IInstitutionContractRepository _institutionContractRepository;
private readonly IPersonalContractingPartyRepository _personalContractingPartyRepository;
private readonly IRollCallServiceApplication _rollCallServiceApplication;
+ private readonly IPasswordHasher _passwordHasher;
-
- public WorkshopAppliction(IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IWorkshopPlanApplication workshopPlanApplication, IEmployeeApplication employeeApplication, IEmployeeChildrenApplication employeeChildrenApplication, IInstitutionContractRepository institutionContractRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IRollCallServiceApplication rollCallServiceApplication)
+ public WorkshopAppliction(IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository, ILeftWorkInsuranceRepository leftWorkInsuranceRepository, IWorkshopPlanApplication workshopPlanApplication, IEmployeeApplication employeeApplication, IEmployeeChildrenApplication employeeChildrenApplication, IInstitutionContractRepository institutionContractRepository, IPersonalContractingPartyRepository personalContractingPartyRepository, IRollCallServiceApplication rollCallServiceApplication, IPasswordHasher passwordHasher)
{
_workshopRepository = workshopRepository;
_leftWorkRepository = leftWorkRepository;
@@ -48,6 +50,7 @@ public class WorkshopAppliction : IWorkshopApplication
_institutionContractRepository = institutionContractRepository;
_personalContractingPartyRepository = personalContractingPartyRepository;
_rollCallServiceApplication = rollCallServiceApplication;
+ _passwordHasher = passwordHasher;
}
public OperationResult Create(CreateWorkshop command)
@@ -752,6 +755,8 @@ public class WorkshopAppliction : IWorkshopApplication
return _workshopRepository.PrintWorkshopList(searchModel);
}
+
+
public AccountViewModel GetClientAccountByWorkshopId(long workshopId)
{
var contractingParty = _workshopRepository.GetPersonalContractingPartyByWorkshopId(workshopId);
@@ -760,19 +765,104 @@ public class WorkshopAppliction : IWorkshopApplication
- //public List GetConnectedPersonnelsForMain(long workshopId)
- //{
- // return _workshopRepository.GetConnectedPersonnelsForMain(workshopId);
- //}
+ //public List GetConnectedPersonnelsForMain(long workshopId)
+ //{
+ // return _workshopRepository.GetConnectedPersonnelsForMain(workshopId);
+ //}
- #endregion
+ #endregion
- #region Insurance
- public List GetWorkshopSelectListInsuransce()
+ #region Pooya
+ public List GetPersonnelInfoRemastered(PersonnelInfoSearchModel searchModel)
+ {
+
+ var res = _workshopRepository.GetPersonnelInfoRemastered(searchModel.WorkshopId);
+ res = res.Select(x => new PersonnelInfoViewModel
+ {
+ WorkshopId = x.WorkshopId,
+ EmployeeId = x.EmployeeId,
+ PersonnelCode = x.PersonnelCode,
+ FullName = x.FullName,
+ Name = x.Name,
+ LastName = x.LastName,
+ NationalCode = x.NationalCode,
+ IdNumber = x.IdNumber,
+ MaritalStatus = x.MaritalStatus,
+ DateOfBirthFa = x.DateOfBirthFa,
+ FatherName = x.FatherName,
+ State = x.State,
+ City = x.City,
+ Address = x.Address,
+ ChildrenList = x.ChildrenList,
+ ContractPerson = x.ContractPerson,
+ InsurancePerson = x.InsurancePerson,
+ ContractLeft = x.ContractLeft,
+ InsuranceLeft = x.InsuranceLeft,
+ Black = ((x.ContractPerson && x.InsurancePerson && x.InsuranceLeft && x.ContractLeft) ||
+ (x.ContractPerson && !x.InsurancePerson && x.ContractLeft) ||
+ (x.InsurancePerson && !x.ContractPerson && x.InsuranceLeft))
+ ? true
+ : false,
+ LastStartContractWork = x.LastStartContractWork,
+ LastLeftContractWork = x.LastLeftContractWork,
+ LastStartInsuranceWork = x.LastStartInsuranceWork,
+ LastLeftInsuranceWork = x.LastLeftInsuranceWork,
+ WorkshopHash = _passwordHasher.SlugHasher(x.WorkshopId),
+ EmployeeHash = _passwordHasher.SlugHasher(x.EmployeeId),
+ CreatedByClient = x.CreatedByClient,
+ LefWorkTemp = x.LefWorkTemp,
+ LeftWork = x.LeftWork,
+ PersonnelInfoViewModels = x.PersonnelInfoViewModels,
+ StartWork = x.StartWork
+ }).ToList();
+
+ if (!string.IsNullOrWhiteSpace(searchModel.FullName))
+ res = res.Where(x => x.FullName.Contains(searchModel.FullName)).ToList();
+
+ if (!string.IsNullOrWhiteSpace(searchModel.NationalCode))
+ res = res.Where(x => x.NationalCode.Contains(searchModel.NationalCode)).ToList();
+
+ if (!string.IsNullOrWhiteSpace(searchModel.MaritalStatus))
+ res = res.Where(x => x.MaritalStatus == searchModel.MaritalStatus).ToList();
+ return res;
+ }
+ #endregion
+
+
+ #region Insurance
+
+ public List GetWorkshopSelectListInsuransce()
{
return _workshopRepository.GetWorkshopSelectListInsuransce();
}
- #endregion
+ #endregion
+
+ #region Mahan
+ public async Task> GetWorkshopsForEmployeeStartWork(long accountId)
+ {
+ return await _workshopRepository.GetWorkshopsForEmployeeStartWork(accountId);
+
+ }
+
+ public async Task GetWorkshopsForEmployeeStartWorkCount(long accountId)
+ {
+ return await _workshopRepository.GetWorkshopsForEmployeeStartWorkCount(accountId);
+ }
+
+ public async Task> GetWorkshopsForLeftWorkTemp(long accountId)
+ {
+ return await _workshopRepository.GetWorkshopsForLeftWorkTemp(accountId);
+ }
+
+ public Task GetWorkshopsForLeftWorkTempCount(long accountId)
+ {
+ return _workshopRepository.GetWorkshopsForLeftWorkTempCount(accountId);
+ }
+
+ #endregion
+
+
+
}
\ No newline at end of file
diff --git a/CompanyManagment.EFCore/CompanyContext.cs b/CompanyManagment.EFCore/CompanyContext.cs
index 2b767eda..6f772a5a 100644
--- a/CompanyManagment.EFCore/CompanyContext.cs
+++ b/CompanyManagment.EFCore/CompanyContext.cs
@@ -25,6 +25,7 @@ using Company.Domain.EmployeeAccountAgg;
using Company.Domain.EmployeeAgg;
using Company.Domain.EmployeeBankInformationAgg;
using Company.Domain.EmployeeChildrenAgg;
+using Company.Domain.EmployeeClientTempAgg;
using Company.Domain.EmployeeComputeOptionsAgg;
using Company.Domain.EmployeeDocumentItemAgg;
using Company.Domain.EmployeeDocumentsAgg;
@@ -63,6 +64,7 @@ using Company.Domain.JobAgg;
using Company.Domain.LeaveAgg;
using Company.Domain.LeftWorkAgg;
using Company.Domain.LeftWorkInsuranceAgg;
+using Company.Domain.LeftWorkTempAgg;
using Company.Domain.LoanAgg.Entities;
using Company.Domain.MandatoryHoursAgg;
using Company.Domain.MasterPenaltyTitle;
@@ -91,6 +93,7 @@ using Company.Domain.SubtitleAgg;
using Company.Domain.TaxJobCategoryAgg;
using Company.Domain.TaxLeftWorkCategoryAgg;
using Company.Domain.TaxLeftWorkItemAgg;
+using Company.Domain.TemporaryClientRegistrationAgg;
using Company.Domain.TextManagerAgg;
using Company.Domain.WorkHistory;
using Company.Domain.WorkingHoursAgg;
@@ -168,6 +171,9 @@ public class CompanyContext : DbContext
public DbSet AndroidApkVersions { get; set; }
+ public DbSet EmployeeClientTemps { get; set; }
+ public DbSet LeftWorkTemps { get; set; }
+
#endregion
#region Pooya
@@ -180,10 +186,14 @@ public class CompanyContext : DbContext
public DbSet Banks { get; set; }
public DbSet EmployeeBankInformationSet { get; set; }
- #endregion
+ #endregion
+ #region TemporaryClientRegisteration
- public DbSet CustomizeCheckouts { get; set; }
+ public DbSet ContractingPartyTemps { get; set; }
+
+ #endregion
+ public DbSet CustomizeCheckouts { get; set; }
public DbSet CustomizeCheckoutTemps { get; set; }
public DbSet TaxLeftWorkItems { get; set; }
public DbSet TaxLeftWorkCategories { get; set; }
diff --git a/CompanyManagment.EFCore/Mapping/ContractingPartyTempMapping.cs b/CompanyManagment.EFCore/Mapping/ContractingPartyTempMapping.cs
new file mode 100644
index 00000000..7d7f6ebd
--- /dev/null
+++ b/CompanyManagment.EFCore/Mapping/ContractingPartyTempMapping.cs
@@ -0,0 +1,32 @@
+using System;
+using _0_Framework.Application;
+using Company.Domain.TemporaryClientRegistrationAgg;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace CompanyManagment.EFCore.Mapping;
+
+public class ContractingPartyTempMapping : IEntityTypeConfiguration
+{
+ public void Configure(EntityTypeBuilder builder)
+ {
+ builder.ToTable("ContractingPartyTemp");
+ builder.HasKey(x => x.id);
+
+ builder.Property(x => x.FName).HasMaxLength(25).IsRequired();
+ builder.Property(x => x.LName).HasMaxLength(25).IsRequired();
+ builder.Property(x => x.NationalCode).HasMaxLength(10).IsRequired();
+ builder.Property(x => x.IdNumber).HasMaxLength(10).IsRequired(false);
+ builder.Property(x => x.Phone).HasMaxLength(12);
+ builder.Property(x => x.FatherName).HasMaxLength(25);
+ builder.Property(x => x.State).HasMaxLength(35);
+ builder.Property(x => x.City).HasMaxLength(35);
+ builder.Property(x => x.Address).HasMaxLength(500);
+ builder.Property(x => x.IdNumberSeri).HasMaxLength(5);
+ builder.Property(x => x.IdNumberSerial).HasMaxLength(15);
+ builder.Property(x => x.Gender).HasConversion(
+ v => v.ToString(),
+ v => (Gender)Enum.Parse(typeof(Gender), v)).HasMaxLength(6);
+ builder.Property(x => x.DateOfBirth);
+ }
+}
\ No newline at end of file
diff --git a/CompanyManagment.EFCore/Mapping/PersonalContractingpartyMapping.cs b/CompanyManagment.EFCore/Mapping/PersonalContractingpartyMapping.cs
index 00e2ab0d..60d0179a 100644
--- a/CompanyManagment.EFCore/Mapping/PersonalContractingpartyMapping.cs
+++ b/CompanyManagment.EFCore/Mapping/PersonalContractingpartyMapping.cs
@@ -1,4 +1,6 @@
-using Company.Domain.ContarctingPartyAgg;
+using System;
+using _0_Framework.Application;
+using Company.Domain.ContarctingPartyAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
@@ -31,6 +33,18 @@ public class PersonalContractingpartyMapping : IEntityTypeConfiguration x.IsBlock).HasMaxLength(5);
builder.Property(x => x.BlockTimes);
+ #region NewProp
+
+ builder.Property(x => x.IdNumberSeri).HasMaxLength(5);
+ builder.Property(x => x.IdNumberSerial).HasMaxLength(15);
+ builder.Property(x => x.FatherName).HasMaxLength(20);
+ builder.Property(x => x.DateOfBirth).IsRequired(false);
+ builder.Property(x => x.Gender).HasConversion(
+ v => v.ToString(),
+ v => string.IsNullOrWhiteSpace(v) ? Gender.None : (Gender)Enum.Parse(typeof(Gender), v)).HasMaxLength(6);
+
+ #endregion
+
diff --git a/CompanyManagment.EFCore/Migrations/20250309154800_add employee by client tables.Designer.cs b/CompanyManagment.EFCore/Migrations/20250309154800_add employee by client tables.Designer.cs
new file mode 100644
index 00000000..bdd9e9dd
--- /dev/null
+++ b/CompanyManagment.EFCore/Migrations/20250309154800_add employee by client tables.Designer.cs
@@ -0,0 +1,8885 @@
+//
+using System;
+using CompanyManagment.EFCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace CompanyManagment.EFCore.Migrations
+{
+ [DbContext(typeof(CompanyContext))]
+ [Migration("20250309154800_add employee by client tables")]
+ partial class addemployeebyclienttables
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.10")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Company.Domain.AndroidApkVersionAgg.AndroidApkVersion", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActive")
+ .IsRequired()
+ .HasMaxLength(5)
+ .HasColumnType("nvarchar(5)");
+
+ b.Property("Path")
+ .HasMaxLength(255)
+ .HasColumnType("nvarchar(255)");
+
+ b.Property("Title")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("VersionCode")
+ .HasMaxLength(20)
+ .HasColumnType("nvarchar(20)");
+
+ b.Property("VersionName")
+ .HasMaxLength(35)
+ .HasColumnType("nvarchar(35)");
+
+ b.HasKey("id");
+
+ b.ToTable("AndroidApkVersions", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.BankAgg.Bank", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("BankLogoMediaId")
+ .HasColumnType("bigint");
+
+ b.Property("BankName")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.HasKey("id");
+
+ b.ToTable("Banks", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.BillAgg.EntityBill", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("Appointed")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Contact")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsActiveString")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ProcessingStage")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("SubjectBill")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.HasKey("id");
+
+ b.ToTable("TextManager_Bill", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.Board.Board", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("BoardChairman")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("BoardType_Id")
+ .HasColumnType("int");
+
+ b.Property("Branch")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("DisputeResolutionPetitionDate")
+ .HasColumnType("datetime2");
+
+ b.Property("ExpertReport")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("File_Id")
+ .HasColumnType("bigint");
+
+ b.HasKey("id");
+
+ b.HasIndex("BoardType_Id");
+
+ b.HasIndex("File_Id");
+
+ b.ToTable("Boards", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.BoardType.BoardType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Title")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("BoardTypes", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.ChapterAgg.EntityChapter", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("Chapter")
+ .IsRequired()
+ .HasMaxLength(60)
+ .HasColumnType("nvarchar(60)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActiveString")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Subtitle_Id")
+ .HasColumnType("bigint");
+
+ b.HasKey("id");
+
+ b.HasIndex("Subtitle_Id");
+
+ b.ToTable("TextManager_Chapter", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.CheckoutAgg.Checkout", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("AbsenceDeduction")
+ .HasColumnType("float");
+
+ b.Property("AbsencePeriod")
+ .HasColumnType("float");
+
+ b.Property("AbsenceValue")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("ArchiveCode")
+ .HasMaxLength(15)
+ .HasColumnType("nvarchar(15)");
+
+ b.Property("AverageHoursPerDay")
+ .HasColumnType("float");
+
+ b.Property("BaseYearsPay")
+ .HasColumnType("float");
+
+ b.Property("BonusesPay")
+ .HasColumnType("float");
+
+ b.Property("ConsumableItems")
+ .HasColumnType("float");
+
+ b.Property("ContractEnd")
+ .HasColumnType("datetime2");
+
+ b.Property("ContractId")
+ .HasColumnType("bigint");
+
+ b.Property("ContractNo")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("ContractStart")
+ .HasColumnType("datetime2");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("CreditLeaves")
+ .HasColumnType("float");
+
+ b.Property("DateOfBirth")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("EmployeeFullName")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("EmployeeId")
+ .HasColumnType("bigint");
+
+ b.Property("FamilyAllowance")
+ .HasColumnType("float");
+
+ b.Property("FathersName")
+ .HasMaxLength(20)
+ .HasColumnType("nvarchar(20)");
+
+ b.Property("FridayPay")
+ .HasColumnType("float");
+
+ b.Property("FridayWorkValue")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("HasRollCall")
+ .HasColumnType("bit");
+
+ b.Property("HousingAllowance")
+ .HasColumnType("float");
+
+ b.Property("InstallmentDeduction")
+ .HasColumnType("float");
+
+ b.Property("InsuranceDeduction")
+ .HasColumnType("float");
+
+ b.Property("IsActiveString")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("LeaveCheckout")
+ .HasColumnType("bit");
+
+ b.Property("LeavePay")
+ .HasColumnType("float");
+
+ b.Property("MarriedAllowance")
+ .HasColumnType("float");
+
+ b.Property("MissionPay")
+ .HasColumnType("float");
+
+ b.Property("Month")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("MonthlySalary")
+ .HasColumnType("float");
+
+ b.Property("NationalCode")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("NightworkPay")
+ .HasColumnType("float");
+
+ b.Property("OverNightWorkValue")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("OverTimeWorkValue")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("OvertimePay")
+ .HasColumnType("float");
+
+ b.Property("PersonnelCode")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("RewardPay")
+ .HasColumnType("float");
+
+ b.Property("RotatingShiftValue")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("SalaryAidDeduction")
+ .HasColumnType("float");
+
+ b.Property("ShiftPay")
+ .HasColumnType("float");
+
+ b.Property("Signature")
+ .HasMaxLength(20)
+ .HasColumnType("nvarchar(20)");
+
+ b.Property("SumOfWorkingDays")
+ .HasMaxLength(6)
+ .HasColumnType("nvarchar(6)");
+
+ b.Property("TaxDeducation")
+ .HasColumnType("float");
+
+ b.Property("TotalClaims")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b.Property("TotalDayOfBunosesCompute")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("TotalDayOfLeaveCompute")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("TotalDayOfYearsCompute")
+ .HasMaxLength(10)
+ .HasColumnType("nvarchar(10)");
+
+ b.Property("TotalDeductions")
+ .HasMaxLength(25)
+ .HasColumnType("nvarchar(25)");
+
+ b.Property("TotalPayment")
+ .HasColumnType("float");
+
+ b.Property("WorkingHoursId")
+ .HasColumnType("bigint");
+
+ b.Property("WorkshopId")
+ .HasColumnType("bigint");
+
+ b.Property("WorkshopName")
+ .HasMaxLength(70)
+ .HasColumnType("nvarchar(70)");
+
+ b.Property("Year")
+ .HasMaxLength(4)
+ .HasColumnType("nvarchar(4)");
+
+ b.Property("YearsPay")
+ .HasColumnType("float");
+
+ b.HasKey("id");
+
+ b.HasIndex("WorkshopId");
+
+ b.ToTable("Checkouts", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.ClassifiedSalaryAgg.ClassifiedSalary", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Group1")
+ .HasColumnType("float");
+
+ b.Property("Group10")
+ .HasColumnType("float");
+
+ b.Property("Group11")
+ .HasColumnType("float");
+
+ b.Property("Group12")
+ .HasColumnType("float");
+
+ b.Property("Group13")
+ .HasColumnType("float");
+
+ b.Property("Group14")
+ .HasColumnType("float");
+
+ b.Property("Group15")
+ .HasColumnType("float");
+
+ b.Property("Group16")
+ .HasColumnType("float");
+
+ b.Property("Group17")
+ .HasColumnType("float");
+
+ b.Property("Group18")
+ .HasColumnType("float");
+
+ b.Property("Group19")
+ .HasColumnType("float");
+
+ b.Property("Group2")
+ .HasColumnType("float");
+
+ b.Property("Group20")
+ .HasColumnType("float");
+
+ b.Property("Group3")
+ .HasColumnType("float");
+
+ b.Property("Group4")
+ .HasColumnType("float");
+
+ b.Property("Group5")
+ .HasColumnType("float");
+
+ b.Property("Group6")
+ .HasColumnType("float");
+
+ b.Property("Group7")
+ .HasColumnType("float");
+
+ b.Property("Group8")
+ .HasColumnType("float");
+
+ b.Property("Group9")
+ .HasColumnType("float");
+
+ b.Property("StartDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Year")
+ .HasColumnType("int");
+
+ b.HasKey("id");
+
+ b.ToTable("ClassifiedSalaries", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.ClientEmployeeWorkshopAgg.ClientEmployeeWorkshop", b =>
+ {
+ b.Property("WorkshopId")
+ .HasColumnType("bigint");
+
+ b.Property("EmployeeId")
+ .HasColumnType("bigint");
+
+ b.HasKey("WorkshopId", "EmployeeId");
+
+ b.HasIndex("EmployeeId");
+
+ b.ToTable("ClientWorkshopEmployee", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.Contact2Agg.EntityContact", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime2");
+
+ b.Property("IsActiveString")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NameContact")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Signature")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("id");
+
+ b.ToTable("TextManager_Contact", (string)null);
+ });
+
+ modelBuilder.Entity("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", b =>
+ {
+ b.Property("id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id"));
+
+ b.Property("Address")
+ .HasMaxLength(500)
+ .HasColumnType("nvarchar(500)");
+
+ b.Property("AgentPhone")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property("ArchiveCode")
+ .HasColumnType("int");
+
+ b.Property("BlockTimes")
+ .HasColumnType("int");
+
+ b.Property("City")
+ .HasMaxLength(50)
+ .HasColumnType("nvarchar(50)");
+
+ b.Property