GetContractsToCreateCheckout Completed

This commit is contained in:
gozareshgir
2026-01-21 19:20:15 +03:30
parent dfc392f07a
commit 7a79343b2f
9 changed files with 856 additions and 593 deletions

View File

@@ -0,0 +1,53 @@
namespace CompanyManagment.App.Contracts.Checkout.Dto;
public class ContractsListToCreateCheckoutDto
{
/// <summary>
/// آی دی قراداد
/// </summary>
public long Id { get; set; }
/// <summary>
/// کد پرسنلی
/// </summary>
public long PersonnelCode { get; set; }
/// <summary>
/// شماره قرارداد
/// </summary>
public string ContractNo { get; set; }
//نام کارگاه
public string WorkshopName { get; set; }
/// <summary>
/// نام پرسنل
/// </summary>
public string EmployeeName { get; set; }
/// <summary>
/// تاریخ شوع فیش
/// </summary>
public string ContractStart { get; set; }
/// <summary>
/// تاریخ پایان فیش
/// </summary>
public string ContractEnd { get; set; }
/// <summary>
/// تاریخ ترک کار
/// </summary>
public string LeftWorkDate { get; set; }
/// <summary>
/// وضعیت ایجاد فیش
/// </summary>
public CreateCheckoutStatus CreateCheckoutStatus { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Description { get; set; }
}

View File

@@ -0,0 +1,22 @@
namespace CompanyManagment.App.Contracts.Checkout.Dto;
/// <summary>
/// وضعیت ایجاد فیش
/// </summary>
public enum CreateCheckoutStatus
{
/// <summary>
/// آماده ایجاد
/// </summary>
ReadyToCreate,
/// <summary>
/// غیر مجاز
/// </summary>
NotValid,
/// <summary>
/// دارای فیش حقوقی
/// </summary>
HasCheckout,
}

View File

@@ -95,6 +95,18 @@ public interface ICheckoutApplication
/// <param name="ids"></param>
/// <returns></returns>
Task<List<CheckoutPrintDto>> CheckoutPrint(List<long> ids);
/// <summary>
/// دریافت لیست قراردادها برای ایجاد فیش حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="employeeId"></param>
/// <returns></returns>
Task<OperationResult<List<ContractsListToCreateCheckoutDto>>> GetContractToCreateCheckout(long workshopId,
string year, string month, long employeeId);
#endregion
}

File diff suppressed because it is too large Load Diff

View File

@@ -2734,22 +2734,42 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
#region ForApi
///ایجاد فیش
#region CreateCheckout
/// <summary>
/// دریافت سلکت لیست پرسنل کارگاه
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<List<EmployeeSelectListDto>> GetEmployeeSelectListByWorkshopId(long id)
{
var employeesHasLeftworkData =_context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId);
var employees =await _context.Employees
var employeesHasLeftworkData = _context.LeftWorkList.Where(x => x.WorkshopId == id).Select(x => x.EmployeeId);
var employees = await _context.Employees
.Where(x => employeesHasLeftworkData.Contains(x.id))
.Select(x =>
new EmployeeSelectListDto()
{
Id = x.id,
EmployeeFullName = x.FullName
})
new EmployeeSelectListDto()
{
Id = x.id,
EmployeeFullName = x.FullName
})
.AsNoTracking()
.ToListAsync();
return employees;
}
#endregion
/// <summary>
/// دریافت لیست فیش حقوقی
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
public async Task<PagedResult<CheckoutDto>> GetList(CheckoutSearchModelDto searchModel)
{
var acountID = _authHelper.CurrentAccountId();
@@ -3039,7 +3059,12 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
};
}
/// <summary>
/// پرینت فیش حقوقی
/// Api
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public async Task<List<CheckoutPrintDto>> CheckoutPrint(List<long> ids)
{
if (ids.Count == 0)

View File

@@ -7,6 +7,7 @@ using CompanyManagment.App.Contracts.Workshop.DTOs;
using Microsoft.AspNetCore.Mvc;
using NuGet.Packaging.Signing;
using ServiceHost.BaseControllers;
using WorkFlow.Application.Contracts.WorkFlow;
namespace ServiceHost.Areas.Admin.Controllers;
@@ -14,11 +15,13 @@ public class CheckoutController : AdminBaseController
{
private readonly ICheckoutApplication _checkoutApplication;
private readonly IWorkshopApplication _workshopApplication;
private readonly IWorkFlowApplication _workFlowApplication;
public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication)
public CheckoutController(ICheckoutApplication checkoutApplication, IWorkshopApplication workshopApplication, IWorkFlowApplication workFlowApplication)
{
_checkoutApplication = checkoutApplication;
_workshopApplication = workshopApplication;
_workFlowApplication = workFlowApplication;
}
/// <summary>
@@ -92,6 +95,32 @@ public class CheckoutController : AdminBaseController
var result = await _checkoutApplication.GetEmployeeSelectListByWorkshopId(workshopId);
return result;
}
/// <summary>
/// دریافت لیست قراردادها برای ایجاد فیش حقوقی
/// </summary>
/// <param name="workshopId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="employeeId"></param>
/// <returns></returns>
[HttpGet("GetContractsToCreateCheckout")]
public async Task<OperationResult<List<ContractsListToCreateCheckoutDto>>> GetContractsToCreateCheckout(long workshopId, string year, string month, long employeeId)
{
var result =await _checkoutApplication.GetContractToCreateCheckout(workshopId, year, month, employeeId);
if (!result.IsSuccedded)
return result;
var hasWorkFlow =await _workFlowApplication.HasWorkFlow(workshopId, year, month);
if (hasWorkFlow)
return new OperationResult<List<ContractsListToCreateCheckoutDto>>().Failed(
"این کارگاه به دلیل داشتن کارپوشه مجاز به ایجاد تصفیه حساب نمی باشد");
return result;
}
#endregion
}

View File

@@ -386,17 +386,17 @@ if (builder.Environment.IsDevelopment())
{
var logConfig = configuration
.ReadFrom.Configuration(context.Configuration)
.ReadFrom.Services(services)
.Enrich.FromLogContext();
.ReadFrom.Services(services);
logConfig.WriteTo.File(
path: Path.Combine(logDirectory, "gozareshgir_log.txt"),
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 30,
shared: true,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"
);
//logConfig.WriteTo.File(
// path: Path.Combine(logDirectory, "gozareshgir_log.txt"),
// rollingInterval: RollingInterval.Day,
// retainedFileCountLimit: 30,
// shared: true,
// outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message}{NewLine}{Exception}"
//);
}, writeToProviders: true); // این باعث میشه کنسول پیش‌فرض هم کار کنه
}

View File

@@ -73,4 +73,15 @@ public interface IWorkFlowApplication
Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId);
Task<List<(long Id, string Name)>> GetEmployeesWithoutGroup(long workshopId);
#region ForApi
/// <summary>
/// در زمان ایجاد فیش کارپوشه کارگاه را چک میکند
/// </summary>
/// <param name="workshopId"></param>
/// <param name="year"></param>
/// <param name="month"></param>
/// <returns></returns>
Task<bool> HasWorkFlow(long workshopId, string year, string month);
#endregion
}

View File

@@ -781,5 +781,66 @@ public class WorkFlowApplication : IWorkFlowApplication
return _customizedWorkshopSettingsACL.GetEmployeesWithoutGroup(workshopId);
}
#region ForApi
public async Task<bool> HasWorkFlow(long workshopId, string year, string month)
{
var workshop = _workshopRepository.GetDetails(workshopId);
bool hasWorkFlow = false;
var skipRollCallByWorkshopId = workshopId is 368 or 610;
if (workshop.HasRollCallFreeVip == "true" && !skipRollCallByWorkshopId)
{
DateTime startSreach;
DateTime endSearch;
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();
}
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
if (lastMonthEnd == endSearch)
{
var countWorkFlowCut = await CountCutByBgServiceLastMonth(workshopId);
var countWorkFlowAbsent = await CountAbsentRollCallLastMonth(workshopId);
var countWorkFlowLunchBreak = await CountEmployeesWithoutLunchBreakLastMonth(workshopId);
var countUndefinedRollCalls = await CountUndefinedLastMonth(workshopId);
hasWorkFlow = countWorkFlowCut > 0 || countWorkFlowAbsent > 0 || countWorkFlowLunchBreak > 0 ||
countUndefinedRollCalls > 0;
}
}
return hasWorkFlow;
}
#endregion
}