Merge branch 'Feature/contracts/api' into Main
This commit is contained in:
@@ -48,6 +48,9 @@ public interface IContractRepository : IRepository<long, Contract>
|
||||
bool Remove(long id);
|
||||
|
||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||
|
||||
Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||
|
||||
#endregion
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -63,4 +66,7 @@ public interface IContractRepository : IRepository<long, Contract>
|
||||
ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime startOfMonth, DateTime endOfMonth);
|
||||
List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -26,5 +26,6 @@ namespace Company.Domain.RollCallEmployeeStatusAgg
|
||||
List<RollCallEmployeeStatusViewModel> GetActiveByWorkshopIdInDate(long workshopId, DateTime startDateGr, DateTime endDateGr);
|
||||
List<RollCallEmployeeStatusViewModel> GetByWorkshopIdInDates(long workshopId, DateTime start, DateTime end);
|
||||
bool IsActiveInPeriod(long employeeId, long workshopId, DateTime startDate, DateTime endDate);
|
||||
}
|
||||
void RemoveRange(IEnumerable<RollCallEmployeeStatus> rollCallEmployeeStatusList);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public enum ContractListOrderType
|
||||
{
|
||||
ByContractCreationDate,
|
||||
BySignedContract,
|
||||
ByUnSignedContract,
|
||||
ByPersonnelCode,
|
||||
ByPersonnelCodeDescending,
|
||||
ByContractStartDate,
|
||||
ByContractStartDateDescending
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
using _0_Framework.Application;
|
||||
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public class GetContractListForClientRequest: PaginationRequest
|
||||
{
|
||||
public int Year { get; set; }
|
||||
public int Month { get; set; }
|
||||
public string StartDate { get; set; }
|
||||
public string EndDate { get; set; }
|
||||
public long EmployeeId { get; set; }
|
||||
public ContractListOrderType? OrderType { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
namespace CompanyManagment.App.Contracts.Contract;
|
||||
|
||||
public class GetContractListForClientResponse
|
||||
{
|
||||
public long Id { get; set; }
|
||||
public string PersonnelCode { get; set; }
|
||||
public string ContractNo { get; set; }
|
||||
public string EmployeeFullName { get; set; }
|
||||
public string ContractStart { get; set; }
|
||||
public string ContractEnd { get; set; }
|
||||
public bool IsSigned { get; set; }
|
||||
}
|
||||
@@ -45,7 +45,18 @@ public interface IContractApplication
|
||||
#region Client
|
||||
|
||||
OperationResult Remove(long id);
|
||||
|
||||
[Obsolete("این متد منسوخ شده است. لطفاً از متد GetContractListForClient استفاده کنید.")]
|
||||
List<ContractViweModel> SearchForClient(ContractSearchModel searchModel);
|
||||
|
||||
/// <summary>
|
||||
/// لیست قراردادها برای کلاینت
|
||||
/// </summary>
|
||||
/// <param name="searchModel"></param>
|
||||
/// <returns></returns>
|
||||
Task<PagedResult<GetContractListForClientResponse>>
|
||||
GetContractListForClient(GetContractListForClientRequest searchModel);
|
||||
|
||||
#endregion
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -3107,6 +3107,11 @@ public class ContractApplication : IContractApplication
|
||||
return _contractRepository.SearchForClient(searchModel);
|
||||
}
|
||||
|
||||
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
|
||||
{
|
||||
return await _contractRepository.GetContractListForClient(searchModel);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -30,13 +30,14 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
|
||||
|
||||
public LeftWorkApplication(ILeftWorkRepository leftWorkRepository, IContractRepository contractRepository,
|
||||
public LeftWorkApplication(ILeftWorkRepository leftWorkRepository, IContractRepository contractRepository,
|
||||
IContractApplication contractApplication, IWorkingHoursApplication workingHoursApplication,
|
||||
IWorkingHoursItemsApplication workingHoursItemsApplication, IEmployeeRepository employeeRepository,
|
||||
IWorkshopRepository workshopRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
IWorkshopRepository workshopRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository,
|
||||
IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_contractRepository = contractRepository;
|
||||
@@ -51,7 +52,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public OperationResult Create(CreateLeftWork command)
|
||||
{
|
||||
|
||||
// var Contracts = _contractRepository.Search(new ContractSearchModel()
|
||||
// {
|
||||
// EmployeeId = command.EmployeeId,
|
||||
@@ -70,7 +70,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
var start = command.StartWorkDate.ToGeorgianDateTime();
|
||||
|
||||
|
||||
|
||||
//if (_leftWorkRepository.Exists(x =>
|
||||
// x.StartWorkDate > start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId))
|
||||
// return operation.Failed("تاریخ وارد شده کوچکتر از سابقه شروع به کار قبلی است");
|
||||
@@ -112,16 +111,17 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
return operation.Failed("تاریخ وارد شده در بازه زمانی سابقه ترک کار قبلی است");
|
||||
|
||||
var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName;
|
||||
var workshop = _workshopRepository.GetDetails(command.WorkshopId);
|
||||
var workshopName = workshop.WorkshopFullName;
|
||||
var workshop = _workshopRepository.GetDetails(command.WorkshopId);
|
||||
var workshopName = workshop.WorkshopFullName;
|
||||
var leftWork = new LeftWork(left, start, command.WorkshopId,
|
||||
command.EmployeeId, employeeFullName, workshopName, command.JobId, command.IncludeStatus,
|
||||
command.AddBonusesPay, command.AddYearsPay, command.AddLeavePay,workshop.ComputeOptions,workshop.BonusesOptions);
|
||||
command.AddBonusesPay, command.AddYearsPay, command.AddLeavePay, workshop.ComputeOptions,
|
||||
workshop.BonusesOptions);
|
||||
_leftWorkRepository.Create(leftWork);
|
||||
_leftWorkRepository.SaveChanges();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId);
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId, command.WorkshopId);
|
||||
|
||||
return operation.Succcedded();
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
//public OperationResult Create(CreateLeftWork command)
|
||||
@@ -193,8 +193,8 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
command.EmployeeId, command.JobId, command.IncludeStatus, command.AddBonusesPay, command.AddYearsPay,
|
||||
command.AddLeavePay);
|
||||
_leftWorkRepository.SaveChanges();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId);
|
||||
return operation.Succcedded();
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(command.EmployeeId, command.WorkshopId);
|
||||
return operation.Succcedded();
|
||||
}
|
||||
|
||||
public EditLeftWork GetDetails(long id)
|
||||
@@ -214,11 +214,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public List<LeftWorkViewModel> SearchCreateContract(LeftWorkSearchModel searchModel)
|
||||
{
|
||||
|
||||
return _leftWorkRepository.SearchCreateContract(searchModel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public async Task<List<LeftWorkViewModel>> searchAsync(LeftWorkSearchModel searchModel)
|
||||
{
|
||||
@@ -228,7 +226,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
|
||||
public string GetBeforeDate(string date)
|
||||
{
|
||||
|
||||
var persianBefore = "";
|
||||
var year = Convert.ToInt32(date.Substring(0, 4));
|
||||
var month = Convert.ToInt32(date.Substring(5, 2));
|
||||
@@ -255,10 +252,8 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void LeftWorkExtension(long contractId, string CStart, string CEnd)
|
||||
{
|
||||
|
||||
var step1 = _contractApplication.GetDetails(contractId);
|
||||
var step2 = _workingHoursApplication.GetByContractId(contractId);
|
||||
var step3 = _workingHoursItemsApplication.GetWorkingHoursItems();
|
||||
@@ -380,13 +375,11 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
ContarctStart = CStart,
|
||||
ContractEnd = CEnd,
|
||||
GetWorkDateHide = step1.GetWorkDate,
|
||||
|
||||
};
|
||||
var step5 = _contractApplication.MandatoryHours(computing);
|
||||
string workingDays = string.Empty;
|
||||
if (step5.NumberOfWorkingDays == "0")
|
||||
{
|
||||
|
||||
workingDays = step5.ComplexNumberOfWorkingDays;
|
||||
}
|
||||
else
|
||||
@@ -477,8 +470,6 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
OverTimeWorkM = step5.OverTimeWorkM == "0" ? "" : step5.OverTimeWorkM,
|
||||
OverNightWorkH = step5.OverNightWorkH == "0" ? "" : step5.OverNightWorkH,
|
||||
OverNightWorkM = step5.OverNightWorkM == "0" ? "" : step5.OverNightWorkM,
|
||||
|
||||
|
||||
};
|
||||
var resss = _contractApplication.Create(createNew);
|
||||
}
|
||||
@@ -529,7 +520,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
item.LeftWorkDate = string.IsNullOrWhiteSpace(item.LeftWorkDate) ? "1500/01/01" : item.LeftWorkDate;
|
||||
var left = item.LeftWorkDate.ToGeorgianDateTime();
|
||||
var start = item.StartWorkDate.ToGeorgianDateTime();
|
||||
if (_leftWorkRepository.Exists(x => x.StartWorkDate > start && left == null && x.EmployeeId == informationLeftwork.EmployeeId && x.WorkshopId == informationLeftwork.WorkshopId && x.id!=item.Id))
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate > start && left == null && x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("وارد کردن تاریخ پایان کار اجباری است ");
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate == start && x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
@@ -540,17 +533,23 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("شروع به کار قبلی این شخص ترک کار ندارد ");
|
||||
if (_leftWorkRepository.Exists(x => x.StartWorkDate <= start && x.LeftWorkDate < left && x.LeftWorkDate >= start && x.EmployeeId == informationLeftwork.EmployeeId && x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.StartWorkDate <= start && x.LeftWorkDate < left && x.LeftWorkDate >= start &&
|
||||
x.EmployeeId == informationLeftwork.EmployeeId &&
|
||||
x.WorkshopId == informationLeftwork.WorkshopId && x.id != item.Id))
|
||||
return operation.Failed("تاریخ وارد شده در بازه زمانی سابقه ترک کار قبلی است");
|
||||
}
|
||||
}
|
||||
|
||||
operation = _leftWorkRepository.CreateLeftWork(informationLeftwork);
|
||||
if (informationLeftwork != null && operation.IsSuccedded) IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(informationLeftwork.EmployeeId);
|
||||
return operation;
|
||||
}
|
||||
operation = _leftWorkRepository.CreateLeftWork(informationLeftwork);
|
||||
if (informationLeftwork != null && operation.IsSuccedded)
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(informationLeftwork.EmployeeId,
|
||||
informationLeftwork.WorkshopId);
|
||||
return operation;
|
||||
}
|
||||
|
||||
public OperationResult CreateLeftWorkByLeftWorkGroups(string employeeFullName, long commandEmployeeId, List<PersonnelCodeViewModel> commandPersonnelCode, List<LeftWorkGroup> leftWorkGroups)
|
||||
public OperationResult CreateLeftWorkByLeftWorkGroups(string employeeFullName, long commandEmployeeId,
|
||||
List<PersonnelCodeViewModel> commandPersonnelCode, List<LeftWorkGroup> leftWorkGroups)
|
||||
{
|
||||
var operation = new OperationResult();
|
||||
|
||||
@@ -560,7 +559,9 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
{
|
||||
foreach (var item2 in item.LeftWorkViewModels)
|
||||
{
|
||||
item2.LeftWorkDate = string.IsNullOrWhiteSpace(item2.LeftWorkDate) ? "1500/01/01" : item2.LeftWorkDate;
|
||||
item2.LeftWorkDate = string.IsNullOrWhiteSpace(item2.LeftWorkDate)
|
||||
? "1500/01/01"
|
||||
: item2.LeftWorkDate;
|
||||
var left = item2.LeftWorkDate.ToGeorgianDateTime();
|
||||
var start = item2.StartWorkDate.ToGeorgianDateTime();
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
@@ -586,14 +587,16 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
}
|
||||
|
||||
operation = _leftWorkRepository.CreateLeftWorkByLeftWorkGroups(employeeFullName, commandEmployeeId, commandPersonnelCode, leftWorkGroups);
|
||||
if (operation.IsSuccedded) IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(commandEmployeeId);
|
||||
return operation;
|
||||
}
|
||||
operation = _leftWorkRepository.CreateLeftWorkByLeftWorkGroups(employeeFullName, commandEmployeeId,
|
||||
commandPersonnelCode, leftWorkGroups);
|
||||
if (operation.IsSuccedded)
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(commandEmployeeId);
|
||||
return operation;
|
||||
}
|
||||
|
||||
public OperationResult CheckDeleteLeftWork(long workshopId, long employeeId, string date, int type)
|
||||
{
|
||||
return _leftWorkRepository.CheckDeleteLeftWork( workshopId, employeeId, date.ToGeorgianDateTime(),type);
|
||||
return _leftWorkRepository.CheckDeleteLeftWork(workshopId, employeeId, date.ToGeorgianDateTime(), type);
|
||||
}
|
||||
|
||||
public OperationResult CheckEditLeftWork(long workshopId, long employeeId, string date, int type)
|
||||
@@ -607,21 +610,23 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
}
|
||||
|
||||
#region Pooya
|
||||
|
||||
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId })
|
||||
.GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId)
|
||||
@@ -632,17 +637,90 @@ public class LeftWorkApplication : ILeftWorkApplication
|
||||
x.WorkshopId,
|
||||
x.EmployeeId,
|
||||
y.LeftWorkDateGr,
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z =>
|
||||
z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
});
|
||||
|
||||
//shaping up the list to send as parameter to repository
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if(newRollCallRecords.Count > 0)
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x =>
|
||||
new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if (newRollCallRecords.Count > 0)
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
|
||||
|
||||
foreach (var rollCallEmployeeViewModel in rollCallsEmployee)
|
||||
{
|
||||
var maxLeftWork = leftWorks.FirstOrDefault(x => x.WorkshopId == rollCallEmployeeViewModel.WorkshopId);
|
||||
if (maxLeftWork == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var employeeStatus = _rollCallEmployeeRepository.GetBy(rollCallEmployeeViewModel.EmployeeId,
|
||||
rollCallEmployeeViewModel.WorkshopId);
|
||||
var rollCallEmployeeStatusList = employeeStatus.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId, long workshopId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel()
|
||||
{ EmployeeId = employeeId, WorkshopId = workshopId })
|
||||
.Select(x => new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.WorkshopId,
|
||||
LeftWorkDateGr = x.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = x.StartWorkDateGr
|
||||
}).ToList();
|
||||
|
||||
var maxLeftWork = leftWorks.MaxBy(y => y.StartWorkDateGr);
|
||||
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetBy(employeeId, workshopId);
|
||||
|
||||
// var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
// {
|
||||
// x.WorkshopId,
|
||||
// x.EmployeeId,
|
||||
// y.LeftWorkDateGr,
|
||||
// Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
// });
|
||||
|
||||
|
||||
var status = rollCallsEmployee.EmployeesStatus.OrderByDescending(z => z.StartDate)
|
||||
.FirstOrDefault(rollCallEmployeeStatus => rollCallEmployeeStatus.StartDate.Date < maxLeftWork.LeftWorkDateGr
|
||||
&& rollCallEmployeeStatus.EndDate.Date >
|
||||
maxLeftWork.LeftWorkDateGr);
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
var adjust = new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = maxLeftWork.LeftWorkDateGr,
|
||||
RollCallStatusId = status.id
|
||||
};
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates([adjust]);
|
||||
}
|
||||
|
||||
var rollCallEmployeeStatusList = rollCallsEmployee.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -27,26 +27,30 @@ namespace CompanyManagment.Application;
|
||||
|
||||
public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
{
|
||||
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IJobRepository _jobRepository;
|
||||
private readonly ICheckoutRepository _checkoutRepository;
|
||||
private readonly IContractRepository _contractRepository;
|
||||
private readonly ILeftWorkTempRepository _leftWorkTempRepository;
|
||||
private readonly ILeftWorkRepository _leftWorkRepository;
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
private readonly IEmployeeRepository _employeeRepository;
|
||||
private readonly IJobRepository _jobRepository;
|
||||
private readonly ICheckoutRepository _checkoutRepository;
|
||||
private readonly IContractRepository _contractRepository;
|
||||
private readonly IRollCallEmployeeRepository _rollCallEmployeeRepository;
|
||||
private readonly IRollCallEmployeeStatusRepository _rollCallEmployeeStatusRepository;
|
||||
|
||||
|
||||
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository, ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository, IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository, IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository, IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkTempRepository = leftWorkTempRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_workshopRepository = workshopRepository;
|
||||
_employeeRepository = employeeRepository;
|
||||
_jobRepository = jobRepository;
|
||||
_checkoutRepository = checkoutRepository;
|
||||
_contractRepository = contractRepository;
|
||||
public LeftWorkTempApplication(ILeftWorkTempRepository leftWorkTempRepository,
|
||||
ILeftWorkRepository leftWorkRepository, IWorkshopRepository workshopRepository,
|
||||
IEmployeeRepository employeeRepository, IJobRepository jobRepository, ICheckoutRepository checkoutRepository,
|
||||
IContractRepository contractRepository, IRollCallEmployeeStatusRepository rollCallEmployeeStatusRepository,
|
||||
IRollCallEmployeeRepository rollCallEmployeeRepository)
|
||||
{
|
||||
_leftWorkTempRepository = leftWorkTempRepository;
|
||||
_leftWorkRepository = leftWorkRepository;
|
||||
_workshopRepository = workshopRepository;
|
||||
_employeeRepository = employeeRepository;
|
||||
_jobRepository = jobRepository;
|
||||
_checkoutRepository = checkoutRepository;
|
||||
_contractRepository = contractRepository;
|
||||
_rollCallEmployeeStatusRepository = rollCallEmployeeStatusRepository;
|
||||
_rollCallEmployeeRepository = rollCallEmployeeRepository;
|
||||
}
|
||||
@@ -59,15 +63,16 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
{
|
||||
#region Validation
|
||||
|
||||
if (_leftWorkTempRepository.Exists(x=>x.WorkshopId == command.WorkshopId && x.EmployeeId == employeeId))
|
||||
if (_leftWorkTempRepository.Exists(x => x.WorkshopId == command.WorkshopId && x.EmployeeId == employeeId))
|
||||
{
|
||||
return op.Failed("برای پرسنل وارد شده قبلا درخواست ترک کار ثبت کرده اید");
|
||||
return op.Failed("برای پرسنل وارد شده قبلا درخواست ترک کار ثبت کرده اید");
|
||||
}
|
||||
|
||||
if (command.LeftWorkTime.TryToGeorgianDateTime(out var leftWorkDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (command.LastDayStanding.TryToGeorgianDateTime(out var lastDayStandingDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
@@ -101,7 +106,6 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
//if (leftWork.StartWorkDate >= leftWorkDateGr)
|
||||
//{
|
||||
// return op.Failed("ترک کار نمیتواند کوچک تر یا مساوی شروع به کار باشد");
|
||||
@@ -121,10 +125,10 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
// return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای قرارداد میباشد");
|
||||
//}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr, lastDayStandingDateGr,
|
||||
var leftWorkTemp = LeftWorkTemp.CreateLeftWork(leftWork.id, leftWork.StartWorkDate, leftWorkDateGr,
|
||||
lastDayStandingDateGr,
|
||||
command.WorkshopId, employeeId, leftWork.JobId);
|
||||
|
||||
await _leftWorkTempRepository.CreateAsync(leftWorkTemp);
|
||||
@@ -135,61 +139,63 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
}
|
||||
|
||||
public Task<GetStartWorkTempDetails> GetStartAndLeftWorkDetails(long employeeId, long workshopId)
|
||||
{
|
||||
return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId);
|
||||
}
|
||||
{
|
||||
return _leftWorkTempRepository.GetStartAndLeftWorkDetails(employeeId, workshopId);
|
||||
}
|
||||
|
||||
public async Task<OperationResult> AcceptStartWork(AcceptStartWorkTemp command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
if (command.StartDateTime.TryToGeorgianDateTime(out var startDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
public async Task<OperationResult> AcceptStartWork(AcceptStartWorkTemp command)
|
||||
{
|
||||
var op = new OperationResult();
|
||||
if (command.StartDateTime.TryToGeorgianDateTime(out var startDateGr) == false)
|
||||
{
|
||||
return op.Failed("تاریخ شروع به کار وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
|
||||
var leftWorkTemp = _leftWorkTempRepository.Get(command.LeftWorkTempId);
|
||||
|
||||
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.StartWork)
|
||||
{
|
||||
return op.Failed("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
if (leftWorkTemp.LeftWorkType != LeftWorkTempType.StartWork)
|
||||
{
|
||||
return op.Failed("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (_leftWorkRepository.Exists(x => x.WorkshopId == leftWorkTemp.WorkshopId && x.EmployeeId == leftWorkTemp.EmployeeId && x.LeftWorkDate >= startDateGr))
|
||||
{
|
||||
return op.Failed("شروع به کار وارد شده با ترک کار های قبلی تداخل دارد");
|
||||
}
|
||||
if (_leftWorkRepository.Exists(x =>
|
||||
x.WorkshopId == leftWorkTemp.WorkshopId && x.EmployeeId == leftWorkTemp.EmployeeId &&
|
||||
x.LeftWorkDate >= startDateGr))
|
||||
{
|
||||
return op.Failed("شروع به کار وارد شده با ترک کار های قبلی تداخل دارد");
|
||||
}
|
||||
|
||||
|
||||
if (_jobRepository.Exists(x => x.id == command.JobId) == false)
|
||||
{
|
||||
return op.Failed("سمت وارد شده نامعتبر است");
|
||||
}
|
||||
if (_jobRepository.Exists(x => x.id == command.JobId) == false)
|
||||
{
|
||||
return op.Failed("سمت وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
var defaultTime = new DateTime(2121, 03, 21);
|
||||
var defaultTime = new DateTime(2121, 03, 21);
|
||||
|
||||
var workshop = _workshopRepository.Get(leftWorkTemp.WorkshopId);
|
||||
var employee = _employeeRepository.Get(leftWorkTemp.EmployeeId);
|
||||
var workshop = _workshopRepository.Get(leftWorkTemp.WorkshopId);
|
||||
var employee = _employeeRepository.Get(leftWorkTemp.EmployeeId);
|
||||
|
||||
var newLeftWork = new LeftWork(defaultTime, startDateGr, leftWorkTemp.WorkshopId, leftWorkTemp.EmployeeId,
|
||||
employee.FullName, workshop.WorkshopFullName, command.JobId, false, false, false, false, "", "");
|
||||
var newLeftWork = new LeftWork(defaultTime, startDateGr, leftWorkTemp.WorkshopId, leftWorkTemp.EmployeeId,
|
||||
employee.FullName, workshop.WorkshopFullName, command.JobId, false, false, false, false, "", "");
|
||||
|
||||
await _leftWorkRepository.CreateAsync(newLeftWork);
|
||||
_leftWorkTempRepository.Remove(leftWorkTemp);
|
||||
var rollCallEmployee = _rollCallEmployeeRepository.GetBy(leftWorkTemp.EmployeeId, leftWorkTemp.WorkshopId);
|
||||
await _leftWorkRepository.CreateAsync(newLeftWork);
|
||||
_leftWorkTempRepository.Remove(leftWorkTemp);
|
||||
var rollCallEmployee = _rollCallEmployeeRepository.GetBy(leftWorkTemp.EmployeeId, leftWorkTemp.WorkshopId);
|
||||
|
||||
var rollCallStatus = rollCallEmployee?.EmployeesStatus.MaxBy(x => x.StartDate);
|
||||
var rollCallStatus = rollCallEmployee?.EmployeesStatus.MaxBy(x => x.StartDate);
|
||||
|
||||
if (rollCallStatus != null)
|
||||
{
|
||||
var startWork = newLeftWork.StartWorkDate;
|
||||
rollCallStatus.Edit(startWork, rollCallStatus.EndDate);
|
||||
if (rollCallStatus != null)
|
||||
{
|
||||
var startWork = newLeftWork.StartWorkDate;
|
||||
rollCallStatus.Edit(startWork, rollCallStatus.EndDate);
|
||||
}
|
||||
|
||||
}
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
|
||||
return op.Succcedded();
|
||||
}
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
public async Task<OperationResult> AcceptLeftWork(AcceptLeftWorkTemp command)
|
||||
{
|
||||
@@ -237,9 +243,12 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
x.WorkshopId == leftWorkTemp.WorkshopId &&
|
||||
x.ContractStart <= lastDayStandingGr && x.ContractEnd >= lastDayStandingGr))
|
||||
{
|
||||
return op.Failed("این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
|
||||
return op.Failed(
|
||||
"این پرسنل در تاریخ ترک کار وارد شده دارای فیش حقوقی میباشد. ابتدا فیش حقوقی پرسنل را حذف کنید ");
|
||||
}
|
||||
|
||||
var transaction = await _rollCallEmployeeStatusRepository.BeginTransactionAsync();
|
||||
|
||||
leftWork.Edit(leftWorkDateGr, leftWork.StartWorkDate, leftWork.WorkshopId, leftWork.EmployeeId, leftWork.JobId,
|
||||
leftWork.IncludeStatus, leftWork.AddBonusesPay, leftWork.AddYearsPay, leftWork.AddLeavePay);
|
||||
|
||||
@@ -247,8 +256,9 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
await _leftWorkRepository.SaveChangesAsync();
|
||||
await _leftWorkTempRepository.SaveChangesAsync();
|
||||
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId);
|
||||
IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(leftWork.EmployeeId, leftWork.WorkshopId);
|
||||
|
||||
await transaction.CommitAsync();
|
||||
return op.Succcedded();
|
||||
}
|
||||
|
||||
@@ -259,45 +269,59 @@ public class LeftWorkTempApplication : ILeftWorkTempApplication
|
||||
|
||||
public List<LeftWorkTempViewModel> GetLeftWorksByWorkshopId(long workshopId)
|
||||
{
|
||||
return _leftWorkTempRepository.GetLeftWorksByWorkshopId(workshopId);
|
||||
|
||||
return _leftWorkTempRepository.GetLeftWorksByWorkshopId(workshopId);
|
||||
}
|
||||
|
||||
//این متد ترک کار های کارمند را با فعالیت حضور غیاب یکپارچه می کند
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId)
|
||||
private void IfEmployeeHasNewLeftWorkDateAddEndDateToRollCallStatus(long employeeId, long workshopId)
|
||||
{
|
||||
//get last leftworks for employee in all workshops
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel() { EmployeeId = employeeId }).GroupBy(x => x.WorkshopId).Select(x =>
|
||||
{
|
||||
var leftWork = x.MaxBy(y => y.StartWorkDateGr);
|
||||
return new LeftWorkViewModel()
|
||||
var leftWorks = _leftWorkRepository.search(new LeftWorkSearchModel()
|
||||
{ EmployeeId = employeeId, WorkshopId = workshopId })
|
||||
.Select(x => new LeftWorkViewModel()
|
||||
{
|
||||
EmployeeId = employeeId,
|
||||
WorkshopId = x.Key,
|
||||
LeftWorkDateGr = leftWork.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = leftWork.StartWorkDateGr
|
||||
};
|
||||
}).ToList();
|
||||
WorkshopId = x.WorkshopId,
|
||||
LeftWorkDateGr = x.LeftWorkDateGr.Date.AddDays(-1),
|
||||
StartWorkDateGr = x.StartWorkDateGr
|
||||
}).ToList();
|
||||
|
||||
var maxLeftWork = leftWorks.MaxBy(y => y.StartWorkDateGr);
|
||||
|
||||
|
||||
//get rollCallEmployee associated with those leftworks which have a higher end date than leftworkDate
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetByEmployeeIdWithStatuses(employeeId)
|
||||
.Where(x => leftWorks.Any(y => y.WorkshopId == x.WorkshopId)).ToList();
|
||||
var rollCallsEmployee = _rollCallEmployeeRepository.GetBy(employeeId, workshopId);
|
||||
|
||||
var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
{
|
||||
x.WorkshopId,
|
||||
x.EmployeeId,
|
||||
y.LeftWorkDateGr,
|
||||
Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
});
|
||||
// var joinedList = rollCallsEmployee.Join(leftWorks, x => x.WorkshopId, y => y.WorkshopId, (x, y) => new
|
||||
// {
|
||||
// x.WorkshopId,
|
||||
// x.EmployeeId,
|
||||
// y.LeftWorkDateGr,
|
||||
// Status = x.Statuses.OrderByDescending(z => z.StartDate).FirstOrDefault(z => z.StartDateGr.Date < y.LeftWorkDateGr && z.EndDateGr.Date > y.LeftWorkDateGr)
|
||||
// });
|
||||
|
||||
//shaping up the list to send as parameter to repository
|
||||
var newRollCallRecords = joinedList.Where(x => x.Status != null).Select(x => new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
|
||||
var status = rollCallsEmployee.EmployeesStatus.OrderByDescending(z => z.StartDate)
|
||||
.FirstOrDefault(rollCallEmployeeStatus => rollCallEmployeeStatus.StartDate.Date < maxLeftWork.LeftWorkDateGr
|
||||
&& rollCallEmployeeStatus.EndDate.Date >
|
||||
maxLeftWork.LeftWorkDateGr);
|
||||
|
||||
if (status != null)
|
||||
{
|
||||
LeaveDate = x.LeftWorkDateGr,
|
||||
RollCallStatusId = x.Status.Id
|
||||
}).ToList();
|
||||
if (newRollCallRecords.Count > 0)
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates(newRollCallRecords);
|
||||
var adjust = new AdjustRollCallEmployeesWithEmployeeLeftWork()
|
||||
{
|
||||
LeaveDate = maxLeftWork.LeftWorkDateGr,
|
||||
RollCallStatusId = status.id
|
||||
};
|
||||
_rollCallEmployeeStatusRepository.AdjustRollCallStatusEndDates([adjust]);
|
||||
}
|
||||
|
||||
var rollCallEmployeeStatusList = rollCallsEmployee.EmployeesStatus
|
||||
.Where(x => x.StartDate >= maxLeftWork.LeftWorkDateGr).ToList();
|
||||
if (rollCallEmployeeStatusList.Any())
|
||||
{
|
||||
_rollCallEmployeeStatusRepository.RemoveRange(rollCallEmployeeStatusList);
|
||||
_rollCallEmployeeStatusRepository.SaveChanges();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1691,7 +1691,7 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
return new List<CheckoutViewModel>();
|
||||
}
|
||||
#endregion
|
||||
var query = _context.CheckoutSet
|
||||
var query = _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList)
|
||||
.AsSplitQuery().Select(x => new CheckoutViewModel()
|
||||
{
|
||||
Id = x.id,
|
||||
@@ -1726,7 +1726,14 @@ public class CheckoutRepository : RepositoryBase<long, Checkout>, ICheckoutRepos
|
||||
SalaryAidDateTimeFa = s.SalaryAidDateTimeFa,
|
||||
SalaryAidDateTimeGe = s.SalaryAidDateTime
|
||||
}).ToList(),
|
||||
HasAmountConflict = x.HasAmountConflict
|
||||
HasAmountConflict = x.HasAmountConflict,
|
||||
IsUpdateNeeded = x.IsUpdateNeeded,
|
||||
CheckoutWarningMessageList = x.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel
|
||||
{
|
||||
WarningMessage = wm.WarningMessage,
|
||||
TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning,
|
||||
|
||||
}).ToList()
|
||||
|
||||
}).Where(x => x.WorkshopId == searchModel.WorkshopId);
|
||||
if (searchModel.EmployeeId > 0)
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Exceptions;
|
||||
using _0_Framework.InfraStructure;
|
||||
using Company.Domain.ContractAgg;
|
||||
using Company.Domain.empolyerAgg;
|
||||
@@ -1506,6 +1507,109 @@ public class ContractRepository : RepositoryBase<long, Contract>, IContractRepos
|
||||
|
||||
}
|
||||
|
||||
public async Task<PagedResult<GetContractListForClientResponse>> GetContractListForClient(GetContractListForClientRequest searchModel)
|
||||
{
|
||||
var workshopId = _authHelper.GetWorkshopId();
|
||||
var query = _context.Contracts
|
||||
.Where(c => c.WorkshopIds == workshopId);
|
||||
|
||||
#region Search
|
||||
|
||||
if (searchModel.EmployeeId > 0)
|
||||
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
||||
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))
|
||||
{
|
||||
if (!searchModel.StartDate.TryToGeorgianDateTime(out var startDate))
|
||||
throw new BadRequestException("تاریخ شروع وارد شده معتبر نمی باشد.");
|
||||
|
||||
if (!searchModel.EndDate.TryToGeorgianDateTime(out var endDate))
|
||||
throw new BadRequestException("تاریخ پایان وارد شده معتبر نمی باشد.");
|
||||
|
||||
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
|
||||
}
|
||||
|
||||
if (searchModel.Year>0 && searchModel.Month >0)
|
||||
{
|
||||
|
||||
var startDateFa = $"{searchModel.Year:0000}/{searchModel.Month:00}/01";
|
||||
if (!startDateFa.TryToGeorgianDateTime(out var startDate))
|
||||
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
|
||||
|
||||
if(!startDateFa.FindeEndOfMonth().TryToGeorgianDateTime(out var endDate))
|
||||
throw new BadRequestException("سال و ماه وارد شده معتبر نمی باشد.");
|
||||
|
||||
query = query.Where(x => x.ContarctStart <=endDate && x.ContractEnd >= startDate);
|
||||
}
|
||||
|
||||
if (searchModel.OrderType != null)
|
||||
{
|
||||
switch (searchModel.OrderType)
|
||||
{
|
||||
case ContractListOrderType.ByContractCreationDate:
|
||||
query = query.OrderBy(x => x.CreationDate);
|
||||
break;
|
||||
case ContractListOrderType.ByContractStartDate:
|
||||
query = query.OrderBy(x => x.ContarctStart);
|
||||
break;
|
||||
case ContractListOrderType.ByContractStartDateDescending:
|
||||
query = query.OrderByDescending(x=>x.ContarctStart);
|
||||
break;
|
||||
case ContractListOrderType.ByPersonnelCode:
|
||||
query = query.OrderBy(x => x.PersonnelCode);
|
||||
break;
|
||||
case ContractListOrderType.ByPersonnelCodeDescending:
|
||||
query = query.OrderByDescending(x => x.PersonnelCode);
|
||||
break;
|
||||
case ContractListOrderType.BySignedContract:
|
||||
query = query.OrderByDescending(x => x.Signature == "1");
|
||||
break;
|
||||
case ContractListOrderType.ByUnSignedContract:
|
||||
query = query.OrderBy(x => x.Signature == "1");
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
query = query.OrderByDescending(x => x.id);
|
||||
}
|
||||
#endregion
|
||||
|
||||
var pagedList =await query
|
||||
.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
|
||||
|
||||
var employeeIds = pagedList.Select(x => x.EmployeeId).ToList();
|
||||
|
||||
var employees = await _context.Employees
|
||||
.Where(x => employeeIds.Contains(x.id)).Select(x => new
|
||||
{
|
||||
Id = x.id,
|
||||
x.FullName
|
||||
}).ToListAsync();
|
||||
|
||||
var result = new PagedResult<GetContractListForClientResponse>
|
||||
{
|
||||
TotalCount = await query.CountAsync(),
|
||||
List = pagedList.Select(c =>
|
||||
{
|
||||
var employeeFullName = employees
|
||||
.FirstOrDefault(e => e.Id == c.EmployeeId)?.FullName ?? "";
|
||||
|
||||
return new GetContractListForClientResponse
|
||||
{
|
||||
Id = c.id,
|
||||
PersonnelCode = c.PersonnelCode.ToString(),
|
||||
ContractStart = c.ContarctStart.ToFarsi(),
|
||||
ContractEnd = c.ContractEnd.ToFarsi(),
|
||||
ContractNo = c.ContractNo,
|
||||
IsSigned = c.Signature == "1",
|
||||
EmployeeFullName = employeeFullName
|
||||
};
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region NewChangeByHeydari
|
||||
|
||||
@@ -2671,10 +2671,12 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
Id = x.id,
|
||||
Text = x.WorkshopFullName
|
||||
});
|
||||
var employers = _context.Employers.Select(x => new InstitutionContractSelectListViewModel()
|
||||
//کارفرما ها به غیر از آن هایی که به طرف حساب ---- وصل هستند
|
||||
var employers = _context.Employers.Where(x=>x.ContractingPartyId != 30428)
|
||||
.Select(x => new InstitutionContractSelectListViewModel()
|
||||
{
|
||||
Id = x.id,
|
||||
Text = x.FName + " " + x.LName
|
||||
Text = x.FullName
|
||||
});
|
||||
var representatives = _context.RepresentativeSet.Select(x => new InstitutionContractSelectListViewModel()
|
||||
{
|
||||
|
||||
@@ -478,7 +478,8 @@ public class RollCallEmployeeRepository : RepositoryBase<long, RollCallEmployee>
|
||||
|
||||
public RollCallEmployee GetBy(long employeeId, long workshopId)
|
||||
{
|
||||
return _context.RollCallEmployees.Include(x => x.EmployeesStatus).FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
|
||||
return _context.RollCallEmployees.Include(x => x.EmployeesStatus)
|
||||
.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
@* قراردادهای موسسه</a> *@
|
||||
@* </li> *@
|
||||
<li permission="308">
|
||||
<a class="clik3" asp-area="AdminNew" asp-page="/Company/RollCall/Index">
|
||||
<a class="clik3" href="https://admin@(AppSetting.Value.Domain)/rollcall">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="width: 7px;margin: 0 6px;">
|
||||
<circle cx="6.5" cy="6.5" r="6.5" fill="white"/>
|
||||
</svg>
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
@* </a> *@
|
||||
@* </li> *@
|
||||
<li permission="308">
|
||||
<a class="clik3" asp-area="AdminNew" asp-page="/Company/RollCall/Index">
|
||||
<a class="clik3" href="https://admin@(AppSetting.Value.Domain)/rollcall">
|
||||
<svg width="13" height="13" viewBox="0 0 13 13" fill="none" xmlns="http://www.w3.org/2000/svg" style="width: 7px;margin: 0 6px;">
|
||||
<circle cx="6.5" cy="6.5" r="6.5" fill="white"/>
|
||||
</svg>
|
||||
|
||||
27
ServiceHost/Areas/Client/Controllers/ContractController.cs
Normal file
27
ServiceHost/Areas/Client/Controllers/ContractController.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
using _0_Framework.Application;
|
||||
using Company.Domain.ContractAgg;
|
||||
using CompanyManagment.App.Contracts.Contract;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ServiceHost.BaseControllers;
|
||||
|
||||
namespace ServiceHost.Areas.Client.Controllers;
|
||||
|
||||
public class ContractController:ClientBaseController
|
||||
{
|
||||
private readonly IContractApplication _contractApplication;
|
||||
|
||||
public ContractController(IContractApplication contractApplication)
|
||||
{
|
||||
_contractApplication = contractApplication;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<ActionResult<PagedResult<GetContractListForClientResponse>>> GetList(
|
||||
GetContractListForClientRequest searchModel)
|
||||
{
|
||||
var res = await _contractApplication
|
||||
.GetContractListForClient(searchModel);
|
||||
|
||||
return res;
|
||||
}
|
||||
}
|
||||
@@ -8,6 +8,9 @@
|
||||
Layout = "Shared/_ClientLayout";
|
||||
ViewData["Title"] = " - " + "فیش حقوقی";
|
||||
int i = 0;
|
||||
|
||||
const string hasAmountConflictText = "توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!";
|
||||
const string needUpdateText = "جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید";
|
||||
}
|
||||
|
||||
@section Styles {
|
||||
@@ -335,7 +338,7 @@
|
||||
</span>
|
||||
</div>
|
||||
<div class="Rtable-cell column-heading d-none d-lg-block width11"> </div>
|
||||
<div class="Rtable-cell column-heading d-none d-lg-block width2" >شماره پرسنلی</div>
|
||||
<div class="Rtable-cell column-heading d-none d-lg-block width2">شماره پرسنلی</div>
|
||||
<div class="Rtable-cell column-heading d-none d-md-block width3">سال</div>
|
||||
<div class="Rtable-cell column-heading d-none d-md-block width4">ماه</div>
|
||||
<div class="Rtable-cell column-heading d-none d-md-block width5">شماره قرارداد</div>
|
||||
@@ -364,7 +367,10 @@
|
||||
<div class="Rtable-cell d-lg-block d-none width11">
|
||||
<div class="Rtable-cell--heading"> </div>
|
||||
<div class="Rtable-cell--content">
|
||||
@if (item.HasAmountConflict)
|
||||
|
||||
|
||||
|
||||
@if (item.IsUpdateNeeded || item.HasAmountConflict)
|
||||
{
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
width="24" height="24" fill="red"
|
||||
@@ -373,11 +379,30 @@
|
||||
style="cursor: pointer; margin-left: 10px;"
|
||||
data-bs-toggle="tooltip"
|
||||
data-bs-placement="top"
|
||||
title="توجه داشته باشید این فیش حقوقی دارای تغییرات اعمال نشده میباشد. جهت صدور فیش حقوقی استاندارد مجددا فیش را ایجاد کنید!">
|
||||
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z"/>
|
||||
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z"/>
|
||||
title='@{
|
||||
var tooltipText = ""; int messCounter = 1;
|
||||
if (item.HasAmountConflict && !item.IsUpdateNeeded)
|
||||
{
|
||||
tooltipText += @hasAmountConflictText;
|
||||
|
||||
}else if (item.HasAmountConflict && item.IsUpdateNeeded)
|
||||
{
|
||||
foreach (var warning in item.CheckoutWarningMessageList) { tooltipText += " " + messCounter + " - " + warning.WarningMessage; messCounter++;}
|
||||
|
||||
|
||||
tooltipText += " " + @needUpdateText; }
|
||||
else if (!item.HasAmountConflict && item.IsUpdateNeeded)
|
||||
{ foreach (var warning in item.CheckoutWarningMessageList) { tooltipText += " " + messCounter + " - " + warning.WarningMessage; messCounter++; }
|
||||
tooltipText += " " + @needUpdateText;}
|
||||
@Html.Raw(tooltipText)
|
||||
|
||||
}'>
|
||||
<path d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z" />
|
||||
<path d="M7.002 11a1 1 0 1 1 2 0 1 1 0 0 1-2 0zm.1-5.995a.905.905 0 0 1 1.8 0l-.35 3.5a.552.552 0 0 1-1.1 0l-.35-3.5z" />
|
||||
</svg>
|
||||
|
||||
}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="Rtable-cell d-lg-block d-none width2">
|
||||
|
||||
@@ -66,8 +66,7 @@ $(document).ready(function () {
|
||||
let value = convertPersianNumbersToEnglish(element.val());
|
||||
element.val(value);
|
||||
});
|
||||
|
||||
new Cleave('.dateInput', {
|
||||
new Cleave(this, {
|
||||
delimiters: ['/', '/'],
|
||||
blocks: [4, 2, 2],
|
||||
numericOnly: true
|
||||
@@ -78,6 +77,7 @@ $(document).ready(function () {
|
||||
// datePattern: ['Y', 'm', 'd']
|
||||
// });
|
||||
});
|
||||
|
||||
|
||||
//******************** انتخاب همه ی چک باکس ها ********************
|
||||
$(".checkAll").change(function () {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using _0_Framework.Application;
|
||||
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
||||
using Company.Domain.RollCallAgg.DomainService;
|
||||
using Company.Domain.WorkshopAgg;
|
||||
using CompanyManagment.App.Contracts.EmployeeDocuments;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedAbsence;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedWithoutLunchBreak;
|
||||
@@ -23,7 +24,9 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
private readonly IRollCallDomainService _rollCallDomainService;
|
||||
private readonly IRollCallConfirmedWithoutLunchBreakRepository _rollCallConfirmedWithoutLunchBreakRepository;
|
||||
private readonly IEmployeeDocumentsApplication _employeeDocumentsApplication;
|
||||
public WorkFlowApplication(IRollCallConfirmedAbsenceRepository absenceRepository, IWorkFlowRollCallACL rollCallACL, IWorkFlowCheckoutACL checkoutACL, IWorkFlowCustomizedWorkshopSettingsACL customizedWorkshopSettingsACL, IRollCallConfirmedWithoutLunchBreakRepository rollCallConfirmedWithoutLunchBreakRepository, IRollCallDomainService rollCallDomainService, IEmployeeDocumentsApplication employeeDocumentsApplication)
|
||||
private readonly IWorkshopRepository _workshopRepository;
|
||||
|
||||
public WorkFlowApplication(IRollCallConfirmedAbsenceRepository absenceRepository, IWorkFlowRollCallACL rollCallACL, IWorkFlowCheckoutACL checkoutACL, IWorkFlowCustomizedWorkshopSettingsACL customizedWorkshopSettingsACL, IRollCallConfirmedWithoutLunchBreakRepository rollCallConfirmedWithoutLunchBreakRepository, IRollCallDomainService rollCallDomainService, IEmployeeDocumentsApplication employeeDocumentsApplication, IWorkshopRepository workshopRepository)
|
||||
{
|
||||
_absenceRepository = absenceRepository;
|
||||
_rollCallACL = rollCallACL;
|
||||
@@ -32,6 +35,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
_rollCallConfirmedWithoutLunchBreakRepository = rollCallConfirmedWithoutLunchBreakRepository;
|
||||
_rollCallDomainService = rollCallDomainService;
|
||||
_employeeDocumentsApplication = employeeDocumentsApplication;
|
||||
_workshopRepository = workshopRepository;
|
||||
}
|
||||
|
||||
public async Task<OperationResult> CreateRollCallConfirmedAbsence(CreateRollCallConfirmedAbsence command)
|
||||
@@ -416,10 +420,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetUndefinedRollCalls(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
@@ -443,10 +454,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetRollCallWorkFlowsCutByBgService(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
@@ -468,6 +486,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountCutByBgServiceLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -496,7 +519,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<int> CountAbsentRollCallLastMonth(long workshopId)
|
||||
{
|
||||
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -558,6 +585,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountEmployeesWithoutLunchBreakLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -596,6 +628,11 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
public async Task<int> CountUndefinedLastMonth(long workshopId)
|
||||
{
|
||||
var workshop = _workshopRepository.Get(workshopId);
|
||||
|
||||
if (workshop == null || workshop.IsStaticCheckout)
|
||||
return 0;
|
||||
|
||||
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
|
||||
var now = lastMonthEnd;
|
||||
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
|
||||
@@ -625,11 +662,17 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallWorkFlowViewModel>> GetAbsentRollCallWorkFlows(long workshopId)
|
||||
{
|
||||
|
||||
|
||||
var now = DateTime.Now;
|
||||
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
|
||||
@@ -689,10 +732,16 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
/// </summary>
|
||||
public async Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId)
|
||||
{
|
||||
|
||||
var now = DateTime.Now.Date;
|
||||
|
||||
now.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
//استثنا برای کارگاه پیتزا امیر برای برای نمایش ندادن کارپوشه قبل از 1 آبان 1404
|
||||
if(workshopId == 367 && twoMonthsAgo< new DateTime(2025,10,23))
|
||||
{
|
||||
twoMonthsAgo = new DateTime(2025,10,23);
|
||||
}
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
|
||||
|
||||
Reference in New Issue
Block a user