Compare commits

...

24 Commits

Author SHA1 Message Date
ab604d3be5 change qr code to barcode 2025-06-17 13:46:13 +03:30
MahanCh
d713cbb1fe add qrCode 2025-05-31 20:30:36 +03:30
MahanCh
8418c2edc4 fix sub account bugs 2025-05-31 13:56:02 +03:30
SamSys
e109a41b90 subAccountRole merged 2025-05-31 00:45:26 +03:30
SamSys
158fc91a67 changes 2025-05-31 00:43:50 +03:30
SamSys
d1fb6e933d Merge branch 'Feature/SubAccount/ChangeRole' of https://github.com/syntax24/OriginalGozareshgir into Feature/SubAccount/ChangeRole 2025-05-31 00:34:43 +03:30
SamSys
0811482370 add selected workshops on editRole subAccount 2025-05-31 00:34:36 +03:30
SamSys
46833f93da changes 2025-05-30 19:06:21 +03:30
SamSys
8d78ea548a Merge branch 'master' of https://github.com/syntax24/OriginalGozareshgir 2025-05-30 19:06:04 +03:30
SamSys
ffbadc5a96 checkout changes 2025-05-30 19:05:55 +03:30
e889b61d27 test 2025-05-30 18:04:12 +03:30
SamSys
baeeec183b Color change 2025-05-29 14:55:50 +03:30
SamSys
3142a80b44 completed 2 2025-05-29 05:04:57 +03:30
SamSys
175158a3d7 Completed 1 2025-05-29 01:31:28 +03:30
SamSys
66ada45d29 change metod 2025-05-27 20:44:25 +03:30
SamSys
e486f20a5a chekcoutRepository GetContractResultToCreateCheckout changes NOT FINISHED 2025-05-27 19:21:49 +03:30
SamSys
22f13aea0b metode change 2025-05-27 16:18:39 +03:30
SamSys
88a9a62dd3 Add new View model : CreateCheckoutListViewModel 2025-05-25 21:20:26 +03:30
SamSys
6fd9b336a9 From Master 2025-05-25 19:09:38 +03:30
SamSys
03e4f7e8c1 metod Extend 2025-05-25 18:29:18 +03:30
SamSys
9311d68a91 create change 2025-05-25 15:33:42 +03:30
SamSys
9e91214941 Master changes Transfer to Current 2025-05-25 15:33:23 +03:30
SamSys
3e3eccf0f0 add new metod to rcheckoutRepository 2025-05-24 16:33:02 +03:30
SamSys
789b0fbc24 started 2025-05-17 18:18:22 +03:30
20 changed files with 866 additions and 1015 deletions

View File

@@ -277,6 +277,8 @@ namespace AccountManagement.Application
}
_subAccountRoleRepository.SaveChanges();
_workshopSubAccountRepository.SaveChanges();
return op.Succcedded();
}
public OperationResult AssignRoleToSubAccount(AssignSubAccountRole command)

View File

@@ -23,6 +23,23 @@ public interface ICheckoutRepository : IRepository<long, Checkout>
EditCheckout GetDetails(long id);
Task CreateCkeckout(Checkout command);
/// <summary>
/// لود لیست اولیه جهت ایجاد فیش حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="contractStart"></param>
/// <param name="contractEnd"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year,
string month,
string contractStart, string contractEnd);
//void CreateCkeckout(Checkout command);
Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel);

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.RollCallEmployee;
@@ -6,6 +7,7 @@ namespace Company.Domain.RollCallEmployeeAgg;
public interface IRollCallEmployeeRepository : IRepository<long, RollCallEmployee>
{
bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd);
List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId);
EditRollCallEmployee GetDetails(long id);
RollCallEmployeeViewModel GetByEmployeeIdAndWorkshopId(long employeeId, long workshopId);

View File

@@ -0,0 +1,45 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.Checkout;
public class CreateCheckoutListViewModel
{
public long Id { get; set; }
public long PersonnelCode { get; set; }
public long EmployeeId { get; set; }
public string ContractNo { get; set; }
public string EmployerName { get; set; }
public string WorkshopName { get; set; }
public string EmployeeName { get; set; }
public string ContractStart { get; set; }
public string ContractEnd { get; set; }
public string LeftWorkDate { get; set; }
//public string NextMonthStart { get; set; }
//public bool RedColor { get; set; }
public bool LaterThanEnd { get; set; }
public bool Extension { get; set; }
public bool HasCheckout { get; set; }
//public bool MoreThanOneMonth { get; set; }
//public bool Waiting { get; set; }
public string Description { get; set; }
public List<CreateCheckoutListViewModel> CreateCheckoutList { get; set; }
}

View File

@@ -13,7 +13,20 @@ public interface ICheckoutApplication
OperationResult Edit(EditCheckout command);
EditCheckout GetDetails(long id);
/// <summary>
/// لود لیست اولیه جهت ایجاد فیش حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="contractStart"></param>
/// <param name="contractEnd"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year,
string month,
string contractStart, string contractEnd);
Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel);
List<CheckoutViewModel> SimpleSearch(CheckoutSearchModel searchModel);
List<CheckoutViewModel> PrintAll(List<long> id);

View File

@@ -239,6 +239,13 @@ public class CheckoutApplication : ICheckoutApplication
return _checkoutRepository.GetDetails(id);
}
public async Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month,
string contractStart, string contractEnd)
{
return await _checkoutRepository.GetContractResultToCreateCheckout(workshopId, employeeId, year, month, contractStart,
contractEnd);
}
public async Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel)
{
var result = new List<CheckoutViewModel>();

View File

@@ -89,60 +89,9 @@ namespace CompanyManagment.Application
}
public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
{
//موقت
// دادمهرگستر 11 *
//585 کاشی گالری سرامیس (بابک ابراهیمی )
//آموزشگاه ملل 604 *
//کاریابی ملل 605 *
//368 پیتزا امیر آماده سازی
//367 پیتزا امیر رستوران
//286 مرکز توان بخشی رسالت *
//610 بیمارستان پارس - رازقی طعام
DateTime start1404 = new DateTime(2025, 03, 21);
bool skipRollCallByWorkshopId = false;
if (contractStart < start1404)
{
skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
}
else
{
skipRollCallByWorkshopId = workshopId is 368 or 367 or 585 or 610;
}
//#if DEBUG
// skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367;
//#endif
if (skipRollCallByWorkshopId)
return false;
// 42550 مصطفی مقدس نژاد فومنی
bool skipRollCallByEmployeeId = employeeId is 42550;
if (skipRollCallByEmployeeId)
return false;
//9211 محسا تازه
if (employeeId == 9211 && contractStart >= start1404)
return false;
var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);
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;
return _employeeRollCallStatusRepository.Exists(x => x.RollCallEmployeeId == rollCallEmployee.Id &&
x.StartDate.Date <= contractStart.Date &&
x.EndDate.Date >= contractEnd.Date);
}
{
return _rollCallEmployeeRepository.HasRollCallRecord(employeeId, workshopId, contractStart, contractEnd);
}
public List<RollCallEmployeeStatusViewModel> GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr)
{

View File

@@ -1,18 +1,22 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Globalization;
using System.Linq;
using System.Reflection.Metadata.Ecma335;
using System.Threading.Tasks;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.CheckoutAgg;
using Company.Domain.LeftWorkAgg;
using Company.Domain.RollCallAgg;
using Company.Domain.RollCallEmployeeAgg;
using CompanyManagment.App.Contracts.Checkout;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.HolidayItem;
using CompanyManagment.App.Contracts.InsuranceList;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.Loan;
@@ -21,6 +25,7 @@ using CompanyManagment.App.Contracts.SalaryAid;
using CompanyManagment.App.Contracts.WorkingHours;
using CompanyManagment.App.Contracts.WorkingHoursTemp;
using CompanyManagment.App.Contracts.Workshop;
using CompanyManagment.EFCore.Migrations;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
@@ -41,8 +46,9 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
private readonly ILeftWorkRepository _leftWorkRepository;
private readonly IRollCallRepository _rollCallRepository;
private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository;
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository) : base(context)
public CheckoutRepository(IAuthHelper authHelper, CompanyContext context, IConfiguration configuration, ILeftWorkRepository leftWorkRepository, IWorkingHoursTempApplication workingHoursTempApplication, IRollCallRepository rollCallRepository, IRollCallMandatoryRepository rollCallMandatoryRepository, IRollCallEmployeeRepository rollCallEmployeeRepository) : base(context)
{
_authHelper = authHelper;
@@ -52,6 +58,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
_workingHoursTempApplication = workingHoursTempApplication;
_rollCallRepository = rollCallRepository;
_rollCallMandatoryRepository = rollCallMandatoryRepository;
_rollCallEmployeeRepository = rollCallEmployeeRepository;
}
/// <summary>
@@ -123,6 +130,361 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
.FirstOrDefault(x => x.Id == id);
}
/// <summary>
/// لود لیست اولیه جهت ایجاد فیش حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="employeeId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="contractStart"></param>
/// <param name="contractEnd"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year, string month, string contractStart,
string contractEnd)
{
DateTime startSreach;
DateTime endSearch;
if (!string.IsNullOrWhiteSpace(contractStart) && !string.IsNullOrWhiteSpace(contractEnd))
{
startSreach = contractStart.ToGeorgianDateTime();
endSearch = contractEnd.ToGeorgianDateTime();
}
else
{
if (month == "0" && year == "0")
{
DateTime now = DateTime.Now;
string startStr = $"{now.ToFarsi().Substring(0, 8)}01";
startSreach = startStr.ToGeorgianDateTime();
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
}
else if (month == "0" && year != "0")
{
DateTime now = DateTime.Now;
string startStr = $"{year}/{now.ToFarsi().Substring(5, 2)}/01";
startSreach = startStr.ToGeorgianDateTime();
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
}
else if (month != "0" && year == "0")
{
DateTime now = DateTime.Now;
string startStr = $"{now.ToFarsi().Substring(0, 4)}/{month}/01";
startSreach = startStr.ToGeorgianDateTime();
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
}
else
{
string startStr = $"{year}/{month}/01";
startSreach = startStr.ToGeorgianDateTime();
endSearch = (startStr.FindeEndOfMonth()).ToGeorgianDateTime();
}
}
var timer = new Stopwatch();
timer.Start();
var contracts = _context.Contracts.AsSplitQuery()
.Where(x => x.WorkshopIds == workshopId && x.IsActiveString == "true" && startSreach < x.ContractEnd &&
endSearch > x.ContarctStart)
.Join(_context.Workshops.AsSplitQuery(),
contract => contract.WorkshopIds,
workshop => workshop.id,
(contract, workshop) => new { contract, workshop })
.Join(_context.Employees.AsSplitQuery(),
contractWorkshop => contractWorkshop.contract.EmployeeId,
employee => employee.id,
(contractWorkshop, employee) => new { contractWorkshop, employee })
.Join(_context.LeftWorkList.AsSplitQuery().Where(l => l.WorkshopId == workshopId && l.StartWorkDate < endSearch && l.LeftWorkDate > startSreach),
contractWorkshopEmployee => contractWorkshopEmployee.contractWorkshop.contract.EmployeeId,
leftwork => leftwork.EmployeeId,
(contractWorkshopEmployee, leftwork) => new { contractWorkshopEmployee, leftwork })
.Join(_context.PersonnelCodeSet.AsSplitQuery().Where(p => p.WorkshopId == workshopId),
contractWorkshopEmployeeleftWork => contractWorkshopEmployeeleftWork.contractWorkshopEmployee
.contractWorkshop.contract.EmployeeId,
personnelCode => personnelCode.EmployeeId,
(contractWorkshopEmployeeleftWork, personnelCode) =>
new { contractWorkshopEmployeeleftWork, personnelCode })
.GroupJoin(_context.CheckoutSet.AsSplitQuery(),
contractWorkshopEmployeeleftWorkPersonnelCode => contractWorkshopEmployeeleftWorkPersonnelCode
.contractWorkshopEmployeeleftWork.contractWorkshopEmployee.contractWorkshop.contract.id,
checkout => checkout.ContractId,
(contractWorkshopEmployeeleftWorkPersonnelCode, checkout) =>
new { contractWorkshopEmployeeleftWorkPersonnelCode, checkout })
.ToList();
Console.WriteLine("query : " + timer.Elapsed);
timer.Reset();
timer.Start();
if (employeeId > 0)
contracts = contracts.Where(x =>
x.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.contract.EmployeeId == employeeId).ToList();
var finalResult = contracts.Select(result =>
{
var now = DateTime.Now;
DateTime currentStart = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
DateTime currentEnd = ($"{DateTime.Now.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime();
var chekoutCreated = result.checkout.FirstOrDefault(x => x.ContractStart < endSearch && x.ContractEnd > startSreach && x.IsActiveString == "true");
if (chekoutCreated != null)
{
return new CreateCheckoutListViewModel
{
Id = chekoutCreated.ContractId,
EmployeeId = chekoutCreated.EmployeeId,
ContractNo = chekoutCreated.ContractNo,
WorkshopName = chekoutCreated.WorkshopName,
EmployeeName = chekoutCreated.EmployeeFullName,
ContractStart = chekoutCreated.ContractStart.ToFarsi(),
ContractEnd = chekoutCreated.ContractEnd.ToFarsi(),
PersonnelCode = Convert.ToInt64(chekoutCreated.PersonnelCode),
LaterThanEnd = false,
Extension = false,
Description = "دارای فیش حقوقی",
HasCheckout = true
};
}
var employeeJoin = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.employee.id;
bool hasRollCall =
_rollCallEmployeeRepository.HasRollCallRecord(employeeJoin, workshopId, startSreach, endSearch);
var leftWork = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.leftwork;
bool extension = true;
bool laterThanEnd = false;
string description = "";
string leftWorkDate="";
string contractStart = "";
string contractEnd = "";
var contractStartGr = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.contract.ContarctStart;
var contractEndGr = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.contract.ContractEnd;
#region HasRollCall
if (hasRollCall)
{
// اگر ترک کار کرده بود
// اگر ترک کارش در بازه انتخاب شده بود
if (leftWork.HasLeft && leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch)
{
//اگر بازه انتخاب شده در تاریخ جاری بود
if (startSreach == currentStart && endSearch == currentEnd)
{
//اگر ترک کارش قبل یا مساوی تاریخ جاری بود
if (leftWork.LeftWorkDate <= now)
{
//مجاز به ایجاد تصفیه
extension = true;
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi();
}
else
{
// مجاز نیست
extension = false;
description = "بعد از تاریخ ترک کار می توانید فیش صادر کنید";
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi();
}
}
else if (endSearch < currentStart)
{
extension = true;
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi();
}
else if (startSreach > currentEnd)
{
// مجاز نیست
extension = false;
description = "بعد از تاریخ ترک کار می توانید فیش صادر کنید";
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi();
}
}
else if (leftWork.HasLeft && leftWork.LeftWorkDate <= startSreach)
{
// مجاز نیست
extension = false;
description = "به دلیل ترک کار پیش از تاریخ انتخاب شده مجاز به ایجاد فیش نمی باشید";
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
}
else if (!leftWork.HasLeft && startSreach == currentStart)
{
// مجاز نیست
extension = false;
description = "به دلیل داشتن حضورغیاب تا پایان ماه مجاز به ایجاد فیش نمی باشید";
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
else if (!leftWork.HasLeft && startSreach < currentStart)
{
if (contractStartGr <= startSreach && contractStartGr > endSearch)
{
laterThanEnd = true;
extension = true;
contractStart = startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
else
{
laterThanEnd = false;
extension = true;
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = (leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch) ? leftWork.LeftWorkDate.AddDays(-1).ToFarsi() : endSearch.ToFarsi();
}
}
}
#endregion
#region Static
if (!hasRollCall)
{
if (leftWork.HasLeft)
{
if (leftWork.LeftWorkDate > startSreach && leftWork.LeftWorkDate <= endSearch)
{
extension = true;
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = leftWork.LeftWorkDate.AddDays(-1).ToFarsi();
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
}
else if (leftWork.LeftWorkDate <= startSreach)
{
// مجاز نیست
extension = false;
description = "به دلیل ترک کار پیش از تاریخ انتخاب شده مجاز به ایجاد فیش نمی باشید";
leftWorkDate = leftWork.LeftWorkDate.ToFarsi();
}
else if(leftWork.LeftWorkDate > endSearch)
{
extension = true;
if (contractStartGr <= startSreach && contractStartGr > endSearch)
{
laterThanEnd = true;
contractStart = startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
else
{
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
}
}
else
{
extension = true;
if (contractStartGr <= startSreach && contractStartGr > endSearch)
{
laterThanEnd = true;
contractStart = startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
else
{
contractStart = leftWork.StartWorkDate > startSreach
? leftWork.StartWorkDate.ToFarsi()
: startSreach.ToFarsi();
contractEnd = endSearch.ToFarsi();
}
}
}
#endregion
return new CreateCheckoutListViewModel
{
Id = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.contract.id,
EmployeeId = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.employee.id,
ContractNo = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.contract.ContractNo,
//EmployerName = result.contract.EmployerName,
WorkshopName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.contractWorkshop.workshop.WorkshopFullName,
EmployeeName = result.contractWorkshopEmployeeleftWorkPersonnelCode.contractWorkshopEmployeeleftWork
.contractWorkshopEmployee.employee.FullName,
PersonnelCode = result.contractWorkshopEmployeeleftWorkPersonnelCode.personnelCode.PersonnelCode,
//PersonnelCodeInt = Convert.ToInt32(result.contract.PersonnelCode),
LaterThanEnd = laterThanEnd,
Extension = extension,
Description = description,
ContractStart = contractStart,
ContractEnd = contractEnd,
LeftWorkDate = leftWorkDate
};
}).OrderByDescending(x=>x.Extension).ToList();
Console.WriteLine("process : " + timer.Elapsed);
return new CreateCheckoutListViewModel()
{
CreateCheckoutList = finalResult
};
}
public async Task CreateCkeckout(Checkout command)
{
@@ -1153,13 +1515,13 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
firstRCEndDate = firstRollCall.ShiftEndWithoutRest ?? firstRollCall.EndDate;
if (secondRollCall != null)
secondRCEndDate = secondRollCall.ShiftEndWithoutRest ?? secondRollCall.EndDate;
return new CheckoutDailyRollCallViewModel()
{
StartDate1 = firstRollCall?.StartDate?.ToString("HH:mm") ?? "",
EndDate1 =firstRCEndDate?.ToString("HH:mm") ?? "",
EndDate1 = firstRCEndDate?.ToString("HH:mm") ?? "",
StartDate2 = secondRollCall?.StartDate?.ToString("HH:mm") ?? "",
EndDate2 = secondRCEndDate?.ToString("HH:mm") ?? "",

View File

@@ -6,6 +6,8 @@ using System.Linq;
using _0_Framework.Application;
using _0_Framework.InfraStructure;
using Company.Domain.RollCallEmployeeAgg;
using Company.Domain.RollCallEmployeeStatusAgg;
using Company.Domain.RollCallServiceAgg;
using CompanyManagment.App.Contracts.LeftWorkTemp;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
@@ -20,16 +22,86 @@ public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>
private readonly CompanyContext _context;
private readonly IPasswordHasher _passwordHasher;
private readonly IWebHostEnvironment _webHostEnvironment;
private IRollCallServiceRepository _rollCallServiceRepository;
private IRollCallEmployeeStatusRepository _employeeRollCallStatusRepository;
// private IRollCallEmployeeRepository _rollCallEmployeeRepositoryImplementation;
public RollCallEmployeeRepository(CompanyContext context, IPasswordHasher passwordHasher,
IWebHostEnvironment webHostEnvironment) : base(context)
IWebHostEnvironment webHostEnvironment, IRollCallServiceRepository rollCallServiceRepository, IRollCallEmployeeStatusRepository employeeRollCallStatusRepository) : base(context)
{
_context = context;
_passwordHasher = passwordHasher;
_webHostEnvironment = webHostEnvironment;
_rollCallServiceRepository = rollCallServiceRepository;
_employeeRollCallStatusRepository = employeeRollCallStatusRepository;
}
public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
{
//موقت
// دادمهرگستر 11 *
//585 کاشی گالری سرامیس (بابک ابراهیمی )
//آموزشگاه ملل 604 *
//کاریابی ملل 605 *
//368 پیتزا امیر آماده سازی
//367 پیتزا امیر رستوران
//286 مرکز توان بخشی رسالت *
//610 بیمارستان پارس - رازقی طعام
DateTime start1404 = new DateTime(2025, 03, 21);
bool skipRollCallByWorkshopId = false;
if (contractStart < start1404)
{
skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367 or 286;
}
else
{
skipRollCallByWorkshopId = workshopId is 368 or 367 or 585 or 610;
}
//#if DEBUG
// skipRollCallByWorkshopId = workshopId is 11 or 585 or 604 or 605 or 368 or 367;
//#endif
if (skipRollCallByWorkshopId)
return false;
// 42550 مصطفی مقدس نژاد فومنی
bool skipRollCallByEmployeeId = employeeId is 42550;
if (skipRollCallByEmployeeId)
return false;
//9211 محسا تازه
if (employeeId == 9211 && contractStart >= start1404)
return false;
var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);
if (!service.Any(x => x.StartService.Date <= contractStart.Date && x.EndService.Date >= contractEnd.Date))
return false;
//var rollCallEmployee = GetByEmployeeIdAndWorkshopId(employeeId, workshopId);
//if (rollCallEmployee == null)
// return false;
var rollCallEmployee = _context.RollCallEmployees
.Where(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId)
.Include(x => x.EmployeesStatus);
if (!rollCallEmployee.Any())
return false;
var a = rollCallEmployee.Any(x => x.EmployeesStatus.Any(s =>
(s.StartDate <= contractStart.Date && s.EndDate.Date >= contractEnd.Date) ||
(s.StartDate.Date <= contractStart.Date && s.EndDate.Date > contractStart.Date)));
//var result = _employeeRollCallStatusRepository.w(x => x.RollCallEmployeeId == rollCallEmployee.Id &&
// (x.StartDate.Date <= contractStart.Date && x.EndDate.Date >= contractEnd.Date) ||
// (x.StartDate.Date <= contractStart.Date && x.EndDate.Date > contractStart.Date));
return a;
}
public List<RollCallEmployeeViewModel> GetByWorkshopId(long workshopId)
{
var query = _context.RollCallEmployees.Select(x => new RollCallEmployeeViewModel()

View File

@@ -7,15 +7,20 @@ using System.Collections.Generic;
using System.Data;
using System.Linq;
using AccountManagement.Domain.SubAccountAgg;
using Company.Domain.EmployeeAgg;
using Microsoft.AspNetCore.SignalR;
namespace CompanyManagment.EFCore.Repository;
public class WorkshopSubAccountRepository : RepositoryBase<long, WorkshopSubAccount>, IWorkshopSubAccountRepository
{
private readonly CompanyContext _companyContext;
public WorkshopSubAccountRepository(CompanyContext context, CompanyContext companyContext) : base(context)
private readonly IEmployeeRepository _employeeRepository;
public WorkshopSubAccountRepository(CompanyContext context, CompanyContext companyContext, IEmployeeRepository employeeRepository) : base(context)
{
_companyContext = companyContext;
_employeeRepository = employeeRepository;
}
public List<WorkshopSubAccountViewModel> GetWorkshopsBySubAccountId(long subAccountId)
@@ -30,14 +35,15 @@ public class WorkshopSubAccountRepository : RepositoryBase<long, WorkshopSubAcco
SubAccountId = sub.SubAccountId,
IsActive = sub.IsActive.ToString(),
WorkshopId = sub.WorkshopId,
WorkshopName = sub.Workshop.WorkshopName,
PersonnelCount = _companyContext.LeftWorkList.Count(left =>
left.WorkshopId == sub.WorkshopId &&
left.StartWorkDate <= dateNow &&
left.LeftWorkDate > dateNow)
WorkshopName = sub.Workshop.WorkshopFullName,
})
.ToList();
viewModelList.ForEach(x =>
{
x.PersonnelCount = _employeeRepository.GetWorkingEmployeesByWorkshopId(x.WorkshopId).Count();
});
return viewModelList;
}

View File

@@ -221,6 +221,13 @@
border-radius: 10px !important;
}
.hasCheckoutSet {
background-color: #ffb715 !important;
}
.noExtention{
background-color: #ffc8c8 !important;
}
</style>
}
@@ -355,12 +362,14 @@
</div>
<div class="col-sm-4 pull-right" dir="rtl">
<div class="form-group" id="start1" style="width: 100% !important; margin: 0 auto;">
<input dir="ltr" disabled="disabled" id="sendStart" onchange="startValidcheck(this);" maxlength="10" style="text-align: center; width: 100%" placeholder="تاریخ شروع" class="form-control" asp-for="ContractStart"/>
</div>
<input dir="ltr" disabled="disabled" id="sendStartDisabled" onchange="startValidcheck(this);" maxlength="10" style="text-align: center; width: 100%" placeholder="تاریخ شروع" class="form-control" asp-for="ContractStart"/>
<input type="hidden" id="sendStart" />
</div>
</div>
<div class="col-sm-4 pull-right" dir="rtl">
<div class="form-group" id="end1" style="width: 100% !important; margin: 0 auto;">
<input dir="ltr" disabled="disabled" id="sendEnd" onchange="endValidcheck(this);" maxlength="10" style="text-align: center;width: 100%" placeholder="تاریخ پایان" class="form-control" asp-for="ContractEnd"/>
<input dir="ltr" disabled="disabled" id="sendEndDisabled" onchange="endValidcheck(this);" maxlength="10" style="text-align: center;width: 100%" placeholder="تاریخ پایان" class="form-control" asp-for="ContractEnd" />
<input type="hidden" id="sendEnd" />
</div>
</div>
</div>
@@ -424,12 +433,12 @@
</th>
<th style="font-size: 10px !important" class="sizeSet">شماره پرسنلی</th>
<th style="font-size: 10px !important" class="sizeSet">شماره قرارداد</th>
<th style="font-size: 10px !important" class="sizeSet"> کارفرما </th>
<th style="font-size: 10px !important" class="sizeSet"> توضیحات </th>
<th style="font-size: 10px !important" class="sizeSet">کارگاه</th>
<th style="font-size: 10px !important" class="sizeSet"> پرسنل </th>
<th style="font-size: 10px !important" class="sizeSet">آغاز قرارداد</th>
<th style="font-size: 10px !important" class="sizeSet">پایان قرارداد</th>
<th style="font-size: 10px !important" class="sizeSet"> - </th>
<th style="font-size: 10px !important" class="sizeSet"> ترک کار </th>
<th style="font-size: 10px !important" class="sizeSet"> - </th>
</tr>
</thead>
@@ -475,11 +484,11 @@
</div>
</div>
@* <script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script> *@
<script src="~/adminTheme/assets/datatables/jquery.dataTables.min.js"></script>
<link href="~/AdminTheme/assets/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css" />
<script src="~/adminTheme/assets/datatables/dataTables.bootstrap.js"></script>
<script src="~/lib/select2/js/select2.js"></script>
<script src="~/lib/select2/js/i18n/fa.js"></script>
<link href="~/AdminTheme/assets/datatables/jquery.dataTables.min.css" rel="stylesheet" type="text/css"/>
<link href="~/lib/select2/css/select2.css" rel="stylesheet"/>

View File

@@ -1,4 +1,4 @@
@model CompanyManagment.App.Contracts.Checkout.CreateCheckout
@model CompanyManagment.App.Contracts.Checkout.CreateCheckoutListViewModel
@{
var i = 1;
var b = 0;
@@ -14,12 +14,12 @@
@if (Model.Contracts != null)
@if (Model.CreateCheckoutList.Count > 0)
{
@foreach (var item in Model.Contracts)
@foreach (var item in Model.CreateCheckoutList)
{
<tr class="mytable">
@if (item.RedColor)
<tr class="mytable @(!item.Extension && !item.HasCheckout ? "noExtention" : "") @(item.HasCheckout ? "hasCheckoutSet" : "") ">
@* @if (item.RedColor)
{
<input type="hidden" name="redColor"/>
}
@@ -34,7 +34,7 @@
else if (item.Waiting && item.MoreThanOneMonth)
{
<input type="hidden" value="@item.EmployeeName" name="MixWatingAndMore"/>
}
} *@
<td style="font-size: 12px !important; text-align: center">
@i
@@ -42,23 +42,18 @@
<td style="font-size: 12px !important; text-align: center">
@if (item.Extension)
@if (!item.Extension)
{
<input type="checkbox" name="cheking" value="@item.Id" checked="checked"/>
b++;
<input type="checkbox" value="@item.Id" disabled="disabled"/>
}
else
{
@if (item.RedColor)
{
<input type="checkbox" value="@item.Id" disabled="disabled"/>
}
else
{
<input type="checkbox" name="cheking" value="@item.Id"/>
}
<input type="checkbox" name="cheking" value="@item.Id" checked="checked"/>
b++;
}
@@ -88,7 +83,7 @@
}
}*@
@item.EmployerName
@item.Description
</td>
<td style="font-family: 'IranSans' !important; font-size: 12px !important; text-align: right">
@@ -105,7 +100,7 @@
<td style="font-family: 'IranSans' !important; font-size: 12px !important; text-align: center">
@item.ContarctStart
@item.ContractStart
@@ -127,22 +122,9 @@
</td>
<td style="font-family: 'IranSans' !important; font-size: 12px !important; text-align: center">
@if (item.RedColor == false)
{
<span style="color: #1e88e5;">
@item.NextMonthStart
</span>
}
@if (item.NextMonthStart == null)
{
<span style="visibility: hidden">####/##/##</span>
}
<span>@item.LeftWorkDate</span>
</td>

View File

@@ -202,7 +202,7 @@
@section Script {
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/lib/jquery-ajax-unobtrusive/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/AdminTheme/assets/js/site.js"></script>
<script src="~/adminTheme/assets/datatables/jquery.dataTables.min.js"></script>
<script src="~/adminTheme/assets/datatables/dataTables.bootstrap.js"></script>

File diff suppressed because it is too large Load Diff

View File

@@ -26,10 +26,10 @@
margin: 3mm 5mm 0 5mm; ">
<div class="row" dir="rtl">
<div class="col-xs-3 d-inline-block"></div>
<div class="col-xs-6 d-inline-block text-center">
<p style="font-size: 18px; font-family: 'IranNastaliq' !important; margin-top:0 !important;">بسمه تعالی</p>
<p style="font-size: 15px; font-weight: bold; margin: 2px;">فیش حقوقی و رسید پرداخت حقوق</p>
</div>
<div class="col-xs-6 d-inline-block text-center">
<p style="font-size: 18px; font-family: 'IranNastaliq' !important; margin-top:0 !important;">بسمه تعالی</p>
<p style="font-size: 15px; font-weight: bold; margin: 2px;">فیش حقوقی و رسید پرداخت حقوق</p>
</div>
<div class="col-xs-3 d-inline-block"><fieldset style="border: 1px solid black; border-radius: 15px; padding: 1px 15px 1px 15px; margin-top: 5px; width: 70%; font-size: 12px; text-align: center;"> @Model.ContractNo</fieldset></div>
</div>
@@ -165,6 +165,10 @@
</div>
</div>
<div style="padding-top: 10px" class="print-qrcode">
<img src="https://bwipjs-api.metafloor.com/?bcid=code128&text=Chkt_@Model.Id&includetext=false" alt="Barcode">
@* <img src="https://api.qrserver.com/v1/create-qr-code/?size=100x100&data=Chkt_@Model.Id" alt="QR Code"> *@
</div>
<div class="row m-t-20">
<fieldset style="border: 1px solid black !important;-webkit-print-color-adjust: exact;print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 10px;overflow:hidden">

View File

@@ -15,7 +15,7 @@
<p style="font-size: 18px; font-family: 'IranNastaliq' !important; margin-top:0 !important;">بسمه تعالی</p>
<p style="font-size: 15px; font-weight: bold; margin: 2px;">فیش حقوقی و رسید پرداخت حقوق</p>
</div>
<div class="col-xs-3 d-inline-block"></div>
<div class="col-xs-3 d-inline-block"></div>
</div>
<div class="headerInfo">

View File

@@ -101,9 +101,16 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
subAccountRoles.ForEach(role =>
{
var subAccount = role.SubAccounts.First().id;
var workshopIds = _context.WorkshopSubAccounts.Where(x=>x.SubAccountId == subAccount).Select(x=>x.WorkshopId).ToList();
role.Edit(role.Title,role.RolePermissions.Select(x=>x.PermissionCode).ToList(),workshopIds);
var getSubAccount = role.SubAccounts.FirstOrDefault();
if (getSubAccount != null)
{
var subAccount = getSubAccount.id;
var workshopIds = _context.WorkshopSubAccounts.Where(x => x.SubAccountId == subAccount).Select(x => x.WorkshopId).ToList();
role.Edit(role.Title, role.RolePermissions.Select(x => x.PermissionCode).ToList(), workshopIds);
}
});
await _accountContext.SaveChangesAsync();
}

View File

@@ -113,5 +113,6 @@
var permissionListAjax = `@Url.Page("./Index", "Permissions")`;
var workshopListAjax = `@Url.Page("./Index", "WorkshopList")`;
var itemsPermission = @Html.Raw(Json.Serialize(Model.Permissions));
var selctedWorkshopslist = @Html.Raw(Json.Serialize(Model.WorkshopIds));
</script>
<script src="~/assetsclient/pages/SubAccounts/js/ModalEditRole.js?ver=@clientVersion"></script>

View File

@@ -0,0 +1,31 @@
using _0_Framework.Application;
using CompanyManagment.App.Contracts.Checkout;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ServiceHost.Controllers;
public record ApiSignCheckoutRequest(long Id);
[Route("api/[controller]")]
[ApiController]
public class CheckoutController : ControllerBase
{
private readonly ICheckoutApplication _checkoutApplication;
public CheckoutController(ICheckoutApplication checkoutApplication)
{
_checkoutApplication = checkoutApplication;
}
[HttpPost("Sign")]
public ActionResult<OperationResult> SignCheckout([FromBody] ApiSignCheckoutRequest data)
{
var result = _checkoutApplication.Sign(data.Id);
if (result.IsSuccedded)
{
return Ok(result);
}
return BadRequest(result);
}
}

View File

@@ -22,6 +22,7 @@
$(document).on('click', '.togglePermission > span', function () {
$(this).siblings('ul').toggle();
});
});
@@ -227,6 +228,7 @@ function updateParentCheckbox(childCheckbox) {
let childCheckboxes = parentLi.find('ul .node-checkbox');
let checkedChildren = childCheckboxes.filter(':checked');
let allChecked = childCheckboxes.length === checkedChildren.length;
let anyChecked = checkedChildren.length > 0;
@@ -239,6 +241,7 @@ function updateParentCheckbox(childCheckbox) {
function ajaxWorkshops() {
var html = '';
$.ajax({
url: workshopListAjax,
type: 'GET',
@@ -246,9 +249,11 @@ function ajaxWorkshops() {
if (response.success) {
var items = response.data;
items.forEach(function (item) {
var isChecked = selctedWorkshopslist.includes(Number(item.id)) ? 'checked' : '';
console.log(typeof item.id)
html += `<div class="workshop__item">
<input type="checkbox" id="workshop_${item.id}" name="WorkshopIds[]" class="workshop__checkbox">
<label for="workshop_${item.id}" value="${item.id}" class="workshop__label-text workshop__label-text--outlined">${item.name}</label>
<input type="checkbox" id="workshop_${item.id}" data-id="${item.id}" name="WorkshopIds[]" class="workshop__checkbox" ${isChecked}>
<label for="workshop_${item.id}" value="${item.id}" class="workshop__label-text workshop__label-text--outlined">${item.name}</label>
</div>`;
});
$('#workshopItems').html(html);
@@ -270,6 +275,7 @@ function ajaxWorkshops() {
function showModalWorkshop() {
$('.form-role-workshop-section').addClass('form-role-workshop-section-mobile');
$('body').css('overflow', 'hidden');
}
function hideModalWorkshop() {
@@ -280,7 +286,7 @@ function hideModalWorkshop() {
function chooseWorkshops() {
const checkedWorkshops = $('input[name="WorkshopIds[]"]:checked');
if (checkedWorkshops.length === 0) {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا کارگاه مورد نظر را انتخاب کنید');
@@ -315,6 +321,7 @@ function SaveDataAjax() {
var Id = $('#Id ');
var Title = $('#Title ');
if (!Title.val()) {
Title.addClass('errored');
$('.alert-msg').show();
@@ -346,6 +353,12 @@ function SaveDataAjax() {
}
});
var selectedWorkshopIds = [];
document.querySelectorAll('input[name="WorkshopIds[]"]:checked').forEach(function (input) {
selectedWorkshopIds.push(input.getAttribute('data-id'));
});
if (selectedPermissions.length === 0) {
$('.alert-msg').show();
$('.alert-msg p').text('لطفا دسترسی‌ها را انتخاب نمائید');
@@ -361,7 +374,8 @@ function SaveDataAjax() {
var data = {
Id: Id.val(),
Title: Title.val(),
Permissions: selectedPermissions
Permissions: selectedPermissions,
WorkshopIds: selectedWorkshopIds
};
$.ajax({