- Added `DailyWage`, `AvgWorkingHour`, and `FamilyAllowance` properties to `GetContractListForClientResponse`. - Refactored `WorkingHoursWeekly` conversion logic by introducing a reusable `WeeklyHourConvertor` method in `ContractRepository`. - Updated query result mapping to include new properties and utilize `WeeklyHourConvertor` for `AvgWorkingHour`. - Improved code readability and maintainability by centralizing repetitive logic.
2030 lines
80 KiB
C#
2030 lines
80 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
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;
|
|
using Company.Domain.LeftWorkAgg;
|
|
using Company.Domain.YearlySalaryAgg;
|
|
using CompanyManagment.App.Contracts.Contract;
|
|
using CompanyManagment.App.Contracts.Employee;
|
|
using CompanyManagment.App.Contracts.Employer;
|
|
using CompanyManagment.App.Contracts.LeftWork;
|
|
using CompanyManagment.App.Contracts.Workshop;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using PersianTools.Core;
|
|
using DateTime = System.DateTime;
|
|
|
|
namespace CompanyManagment.EFCore.Repository;
|
|
|
|
public class ContractRepository : RepositoryBase<long, Contract>, IContractRepository
|
|
{
|
|
private readonly CompanyContext _context;
|
|
private readonly IEmployeeApplication _employeeApplication;
|
|
private readonly IEmployerApplication _employerApplication;
|
|
private readonly IWorkshopApplication _workshopApplication;
|
|
private readonly IEmployerRepository _employerRepository;
|
|
private readonly IYearlySalaryRepository _yearlySalaryRepository;
|
|
private readonly ILeftWorkRepository _leftWorkRepository;
|
|
private readonly IAuthHelper _authHelper;
|
|
public ContractRepository(CompanyContext context, IEmployeeApplication employeeApplication, IEmployerApplication employerApplication, IWorkshopApplication workshopApplication, IEmployerRepository employerRepository, IAuthHelper authHelper, IYearlySalaryRepository yearlySalaryRepository, ILeftWorkRepository leftWorkRepository) : base(context)
|
|
{
|
|
_context = context;
|
|
_employeeApplication = employeeApplication;
|
|
_employerApplication = employerApplication;
|
|
_workshopApplication = workshopApplication;
|
|
_employerRepository = employerRepository;
|
|
_authHelper = authHelper;
|
|
_yearlySalaryRepository = yearlySalaryRepository;
|
|
_leftWorkRepository = leftWorkRepository;
|
|
}
|
|
|
|
|
|
public async Task<double> GetManualDailWage(long workshopId, long employeeId, long yearlySalaryId, DateTime contractStart)
|
|
{
|
|
|
|
var lastContract = await _context.Contracts
|
|
.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.IsActiveString == "true" && x.ContarctStart < contractStart)
|
|
.OrderByDescending(x => x.ContarctStart)
|
|
.FirstOrDefaultAsync();
|
|
//اگر قردادی قبل از قرارداد جدید نداشت
|
|
if (lastContract == null)
|
|
return 0;
|
|
//اگر آخرین قرداد مزد دلخواه نداشت
|
|
if (!lastContract.HasManualDailyWage)
|
|
return 0;
|
|
|
|
var lastContractYearlySalary = await _context.YearlySalaries
|
|
.FirstOrDefaultAsync(x => x.StartDate <= lastContract.ContarctStart && x.EndDate >= lastContract.ContarctStart);
|
|
|
|
//اگر دستمزد آخرین قراداد و قرداد جدید از یک مقادیر سالانه بودن بدون ارتقاء دستمزد دلخواه آخرین قرداد ارسال میشه
|
|
if (lastContractYearlySalary.id == yearlySalaryId)
|
|
return lastContract.DailySalaryUnAffected;
|
|
|
|
|
|
var dailyWageResult = _yearlySalaryRepository.UpgradeManualDailyWage(contractStart,
|
|
lastContractYearlySalary.StartDate, lastContract.DailySalaryUnAffected).GetAwaiter().GetResult();
|
|
|
|
return dailyWageResult.DailyWage;
|
|
}
|
|
|
|
public async Task<UpgradeManualDailyWageModel> GetManualDailWageList(long workshopId, long employeeId,
|
|
DateTime contractStart)
|
|
{
|
|
var oldContracts = await _context.Contracts
|
|
.Where(x => x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.IsActiveString == "true" && x.DailyWageType == "ManualDailyWage" && x.ContarctStart < contractStart)
|
|
.OrderByDescending(x => x.ContarctStart)
|
|
.FirstOrDefaultAsync();
|
|
if (oldContracts == null)
|
|
return new UpgradeManualDailyWageModel();
|
|
|
|
//var endOfMonthFromStart = ($"{contractStart.ToFarsi().FindeEndOfMonth()}").ToGeorgianDateTime();
|
|
|
|
|
|
var result =await _yearlySalaryRepository.UpgradeManualDailyWage(contractStart, oldContracts.ContarctStart,
|
|
oldContracts.DailySalaryUnAffected);
|
|
|
|
return result;
|
|
}
|
|
|
|
|
|
|
|
public EditContract GetDetails(long id)
|
|
{
|
|
return _context.Contracts.Select(x => new EditContract
|
|
{
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
ContractNo = x.ContractNo,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
HousingAllowance = x.HousingAllowance,
|
|
WorkingHoursWeekly = x.WorkingHoursWeekly,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
AgreementSalary = x.AgreementSalary,
|
|
ArchiveCode = x.ArchiveCode,
|
|
BaseYearAffected = x.BaseYearAffected,
|
|
BaseYearUnAffected = x.BaseYearUnAffected,
|
|
DailySalaryAffected = x.DailySalaryAffected,
|
|
DailySalaryUnAffected = x.DailySalaryUnAffected,
|
|
HasManualDailyWage = x.HasManualDailyWage,
|
|
DailyWageType = x.DailyWageType,
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
.FirstOrDefault(x => x.Id == id);
|
|
}
|
|
|
|
public EditContract GetContractByStartEnd(DateTime start, DateTime end, long workshopId, long employeeId)
|
|
{
|
|
var res = _context.Contracts.FirstOrDefault(x =>
|
|
x.WorkshopIds == workshopId && x.EmployeeId == employeeId && x.ContarctStart <= start && x.ContractEnd >= end);
|
|
if (res == null)
|
|
return new EditContract();
|
|
return new EditContract()
|
|
{
|
|
Id = res.id,
|
|
GetWorkDate = res.GetWorkDate.ToFarsi(),
|
|
};
|
|
}
|
|
public List<ContractViweModel> Search(ContractSearchModel searchModel)
|
|
{
|
|
var AcountID = _authHelper.CurrentAccountId();
|
|
var workshopAcounts = _context.WorkshopAccounts.Where(x => x.AccountId == AcountID)
|
|
.Select(x => x.WorkshopId).ToList();
|
|
var emp = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId)
|
|
.Select(x => x.WorkshopId).ToList();
|
|
var employer = _context.Employers.Select(m => new EmployerViewModel
|
|
{
|
|
Id = m.id,
|
|
FullName = m.FullName
|
|
}).ToList();
|
|
var query = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
Signature = x.Signature,
|
|
EmployerName = x.Employer.FullName,
|
|
EmployeeName = x.Employee.FName + " " + x.Employee.LName,
|
|
WorkshopName = x.Workshop.WorkshopName,
|
|
|
|
|
|
|
|
|
|
});
|
|
if (searchModel.WorkshopIds != 0)
|
|
query = query.Where(x => x.WorkshopIds == searchModel.WorkshopIds);
|
|
if (searchModel.EmployeeId != 0)
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
if (searchModel.EmployerId != 0)
|
|
{
|
|
|
|
query = query.Where(x => emp.Contains(x.WorkshopIds));
|
|
|
|
}
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContractNo))
|
|
query = query.Where(x => x.ContractNo == searchModel.ContractNo);
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContractPeriod))
|
|
query = query.Where(x => x.ContractPeriod == searchModel.ContractPeriod);
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContarctStart) &&
|
|
!string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
query = query.Where(x =>
|
|
x.ContractStartGr >= start && x.ContractEndGr <= endd);
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
var y = searchModel.Year + "/" + searchModel.Month + "/01";
|
|
string y2 = string.Empty;
|
|
int month = Convert.ToInt32(searchModel.Month);
|
|
int year = Convert.ToInt32(searchModel.Year);
|
|
|
|
if (month <= 6)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/31";
|
|
}
|
|
else if (month > 6 && month < 12)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
}
|
|
else if (month == 12)
|
|
{
|
|
switch (year)
|
|
{
|
|
case 1346:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1350:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1354:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1358:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1362:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1366:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1370:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1375:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1379:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1383:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1387:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1391:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1395:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1399:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1403:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1408:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1412:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1416:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1420:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1424:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1428:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1432:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1436:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1441:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1445:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
|
|
default:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/29";
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
var start = y.ToGeorgianDateTime();
|
|
var end = y2.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end ||
|
|
x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr);
|
|
}
|
|
|
|
if (searchModel.IsActiveString == null)
|
|
{
|
|
query = query.Where(x => x.IsActiveString == "true");
|
|
}
|
|
|
|
if (searchModel.IsActiveString == "false")
|
|
{
|
|
query = query.Where(x => x.IsActiveString == "false");
|
|
}
|
|
else if (searchModel.IsActiveString == "both")
|
|
{
|
|
query = query.Where(x => x.IsActiveString == "false" || x.IsActiveString == "true");
|
|
}
|
|
query = query.Where(e => workshopAcounts.Contains(e.WorkshopIds));
|
|
|
|
if (searchModel.EditPersonnelCode)
|
|
{
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
|
|
}
|
|
else if (searchModel.EmployeeId != 0 || !string.IsNullOrWhiteSpace(searchModel.Year) && searchModel.WorkshopIds != 0)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
var startOfYear = searchModel.Year + "/01/01";
|
|
var startOfyearGr = startOfYear.ToGeorgianDateTime();
|
|
var endOfYear = $"{searchModel.Year}/12/01".FindeEndOfMonth();
|
|
var endOfYearGr = endOfYear.ToGeorgianDateTime();
|
|
|
|
|
|
query = query.Where(x => x.ContractStartGr >= startOfyearGr && x.ContractEndGr <= endOfYearGr);
|
|
}
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
}
|
|
else
|
|
{
|
|
return query.OrderByDescending(x => x.Id).Take(100).ToList();
|
|
}
|
|
|
|
}
|
|
|
|
public List<ContractViweModel> SearchForextension(ContractSearchModel searchModel)
|
|
{
|
|
//var Allemplyee = _employeeApplication.GetEmployee();
|
|
//var Allemployer = _employerApplication.GetEmployers();
|
|
var workshop = _workshopApplication.GetDetails(searchModel.WorkshopIds);
|
|
|
|
|
|
|
|
var today = DateTime.Now;
|
|
var faToday = string.Empty;
|
|
var GrogorianThisMonthStart = new DateTime();
|
|
|
|
|
|
int syear = 0;
|
|
int smonth = 0;
|
|
var leftWoekSerchResult = _context.LeftWorkList.Select(x => new LeftWorkViewModel()
|
|
{
|
|
Id = x.id,
|
|
LeftWorkDate = x.LeftWorkDate.ToFarsi(),
|
|
StartWorkDate = x.StartWorkDate.ToFarsi(),
|
|
LeftWorkDateGr = x.LeftWorkDate,
|
|
StartWorkDateGr = x.StartWorkDate,
|
|
EmployeeFullName = x.EmployeeFullName,
|
|
WorkshopName = x.WorkshopName,
|
|
WorkshopId = x.WorkshopId,
|
|
EmployeeId = x.EmployeeId
|
|
|
|
}).Where(x=>x.WorkshopId == searchModel.WorkshopIds).ToList();
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(searchModel.ContarctStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
if (searchModel.Month == "0" && searchModel.Year == "0")
|
|
{
|
|
faToday = today.ToFarsi();
|
|
}
|
|
else
|
|
{
|
|
|
|
faToday = $"{searchModel.Year}/{searchModel.Month}/01";
|
|
}
|
|
|
|
syear = Convert.ToInt32(faToday.Substring(0, 4));
|
|
smonth = Convert.ToInt32(faToday.Substring(5, 2));
|
|
|
|
|
|
var PersianStartMonth = new PersianDateTime(syear, smonth, 01);
|
|
PersianStartMonth = PersianStartMonth.AddMonths(1);
|
|
GrogorianThisMonthStart = PersianStartMonth.ToGregorianDateTime();
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var query = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
Signature = x.Signature,
|
|
|
|
|
|
|
|
|
|
|
|
}).Where(x=>x.WorkshopIds == searchModel.WorkshopIds).ToList();
|
|
|
|
if (searchModel.WorkshopIds != 0)
|
|
{
|
|
var step1 = query.Where(x =>
|
|
x.WorkshopIds == searchModel.WorkshopIds && x.IsActiveString == "true")
|
|
.GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList();
|
|
var contractData = new List<long>();
|
|
foreach (var i in step1)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(searchModel.ContarctStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
var step2 = query.Where(x => x.EmployeeId == i && x.IsActiveString == "true")
|
|
.Where(x => x.ContractStartGr < GrogorianThisMonthStart).OrderByDescending(x => x.ContarctStart).ToList();
|
|
var step3 = step2.Select(x => x.Id).FirstOrDefault();
|
|
|
|
contractData.Add(step3);
|
|
}
|
|
else
|
|
{
|
|
var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
var step2 = query.Where(x => x.EmployeeId == i && x.IsActiveString == "true")
|
|
.Where(x => x.ContractStartGr < endd).OrderByDescending(x => x.ContarctStart).ToList();
|
|
var step3 = step2.Select(x => x.Id).FirstOrDefault();
|
|
|
|
contractData.Add(step3);
|
|
}
|
|
|
|
|
|
}
|
|
query = query.Where(e => contractData.Contains(e.Id))
|
|
.Where(x => x.WorkshopIds == searchModel.WorkshopIds).ToList();
|
|
|
|
|
|
|
|
}
|
|
|
|
if (searchModel.EmployeeId != 0)
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId).ToList();
|
|
var Join = new List<ContractViweModel>();
|
|
var employer = query.FirstOrDefault();
|
|
var employerFullName = _employerApplication.GetDetails(employer.EmployerId).FullName;
|
|
//IQueryable<ContractViweModel> newQuery = null;
|
|
foreach (var item in query)
|
|
{
|
|
|
|
|
|
var EmployeeFullName = leftWoekSerchResult.FirstOrDefault(x=>x.EmployeeId == item.EmployeeId)?.EmployeeFullName;
|
|
|
|
|
|
|
|
var a = new ContractViweModel
|
|
{
|
|
Id = item.Id,
|
|
PersonnelCode = item.PersonnelCode,
|
|
EmployerId = item.EmployerId,
|
|
EmployeeId = item.EmployeeId,
|
|
WorkshopIds = item.WorkshopIds,
|
|
YearlySalaryId = item.YearlySalaryId,
|
|
DayliWage = item.DayliWage,
|
|
ContarctStart = item.ContarctStart,
|
|
ContractEnd = item.ContractEnd,
|
|
ContractStartGr = item.ContractStartGr,
|
|
ContractEndGr = item.ContractEndGr,
|
|
ContractNo = item.ContractNo,
|
|
ArchiveCode = item.ArchiveCode,
|
|
IsActiveString = item.IsActiveString,
|
|
GetWorkDate = item.GetWorkDate,
|
|
SetContractDate = item.SetContractDate,
|
|
JobType = item.JobType,
|
|
ContractType = item.ContractType,
|
|
WorkshopAddress1 = item.WorkshopAddress1,
|
|
WorkshopAddress2 = item.WorkshopAddress2,
|
|
JobTypeId = item.JobTypeId,
|
|
ConsumableItems = item.ConsumableItems,
|
|
FamilyAllowance = item.FamilyAllowance,
|
|
ContractPeriod = item.ContractPeriod,
|
|
Signature = item.Signature,
|
|
EmployeeName = EmployeeFullName,
|
|
EmployerName = employerFullName,
|
|
WorkshopName = workshop.WorkshopFullName,
|
|
|
|
};
|
|
|
|
|
|
if (leftWoekSerchResult.Count > 0)
|
|
{
|
|
var left = leftWoekSerchResult.Where(x => x.EmployeeId == item.EmployeeId).ToList();
|
|
var leftWorkLast = left.OrderByDescending(x => x.StartWorkDateGr).FirstOrDefault();
|
|
var start = new DateTime();
|
|
if (string.IsNullOrWhiteSpace(searchModel.ContarctStart) && string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
start = GrogorianThisMonthStart;
|
|
}
|
|
else
|
|
{
|
|
start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
}
|
|
|
|
var check = left.FirstOrDefault(x => x.StartWorkDateGr <= start &&
|
|
x.LeftWorkDateGr > start);
|
|
if (check != null)
|
|
{
|
|
if (check.LeftWorkDate == "1500/01/01")
|
|
{
|
|
Join.Add(a);
|
|
}
|
|
else
|
|
{
|
|
if (check.LeftWorkDateGr > a.ContractEndGr)
|
|
{
|
|
Join.Add(a);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//query = Join.AsQueryable();
|
|
|
|
return Join.OrderByDescending(x => x.Id).ToList();
|
|
}
|
|
|
|
public List<ContractViweModel> SearchForCheckout(ContractSearchModel searchModel)
|
|
{
|
|
var Allemplyee = _employeeApplication.GetEmployee();
|
|
var Allemployer = _employerApplication.GetEmployers();
|
|
var Allworkshop = _workshopApplication.GetWorkshop();
|
|
var today = DateTime.Now;
|
|
var faToday = string.Empty;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var query = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
Signature = x.Signature,
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
if (searchModel.WorkshopIds != 0)
|
|
{
|
|
//var step1 = _context.Contracts.Where(x =>
|
|
// x.WorkshopIds == searchModel.WorkshopIds && x.IsActiveString == "true")
|
|
// .GroupBy(x => x.EmployeeId).Select(x => x.Key).ToList();
|
|
//var contractData = new List<long>();
|
|
//foreach (var i in step1)
|
|
//{
|
|
|
|
// var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
// var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
// var step2 = _context.Contracts.Where(x => x.EmployeeId == i && x.IsActiveString == "true")
|
|
// .Where(x => x.ContarctStart >= start && x.ContractEnd <= endd).OrderByDescending(x => x.ContarctStart);
|
|
// var step3 = step2.Select(x => x.id).FirstOrDefault();
|
|
|
|
// contractData.Add(step3);
|
|
|
|
|
|
|
|
//}
|
|
//query = query.Where(e => contractData.Contains(e.Id))
|
|
// .Where(x => x.WorkshopIds == searchModel.WorkshopIds);
|
|
|
|
var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
query = query.Where(x => x.WorkshopIds == searchModel.WorkshopIds && x.IsActiveString == "true")
|
|
.Where(x => x.ContractStartGr <= start && x.ContractEndGr >= endd || start <= x.ContractStartGr && endd > x.ContractStartGr || endd >= x.ContractEndGr && start < x.ContractEndGr);
|
|
|
|
}
|
|
|
|
if (searchModel.EmployeeId != 0)
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
var Join = new List<ContractViweModel>();
|
|
//IQueryable<ContractViweModel> newQuery = null;
|
|
foreach (var item in query)
|
|
{
|
|
var employeeFullName = string.Empty;
|
|
var employerFullName = string.Empty;
|
|
var workshopName = string.Empty;
|
|
var employeeF = Allemplyee.FirstOrDefault(x => x.Id == item.EmployeeId);
|
|
if (employeeF != null)
|
|
employeeFullName = employeeF.EmployeeFullName;
|
|
var employerF = Allemployer.FirstOrDefault(x => x.Id == item.EmployerId);
|
|
if (employerF != null)
|
|
employerFullName = employerF.FullName;
|
|
var workshopN = Allworkshop.FirstOrDefault(x => x.Id == item.WorkshopIds);
|
|
if (workshopN != null)
|
|
workshopName = workshopN.WorkshopFullName;
|
|
|
|
var a = new ContractViweModel
|
|
{
|
|
Id = item.Id,
|
|
PersonnelCode = item.PersonnelCode,
|
|
EmployerId = item.EmployerId,
|
|
EmployeeId = item.EmployeeId,
|
|
WorkshopIds = item.WorkshopIds,
|
|
YearlySalaryId = item.YearlySalaryId,
|
|
DayliWage = item.DayliWage,
|
|
ContarctStart = item.ContarctStart,
|
|
ContractEnd = item.ContractEnd,
|
|
ContractStartGr = item.ContractStartGr,
|
|
ContractEndGr = item.ContractEndGr,
|
|
ContractNo = item.ContractNo,
|
|
ArchiveCode = item.ArchiveCode,
|
|
IsActiveString = item.IsActiveString,
|
|
GetWorkDate = item.GetWorkDate,
|
|
SetContractDate = item.SetContractDate,
|
|
JobType = item.JobType,
|
|
ContractType = item.ContractType,
|
|
WorkshopAddress1 = item.WorkshopAddress1,
|
|
WorkshopAddress2 = item.WorkshopAddress2,
|
|
JobTypeId = item.JobTypeId,
|
|
ConsumableItems = item.ConsumableItems,
|
|
FamilyAllowance = item.FamilyAllowance,
|
|
ContractPeriod = item.ContractPeriod,
|
|
Signature = item.Signature,
|
|
EmployeeName = employeeFullName,
|
|
EmployerName = employerFullName,
|
|
WorkshopName = workshopName,
|
|
|
|
};
|
|
Join.Add(a);
|
|
|
|
}
|
|
|
|
query = Join.AsQueryable();
|
|
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
}
|
|
|
|
public ContractSeparationViewModel contractSeparation(string year, string month, DateTime contractStart, DateTime ContractEnd, long employeeId,
|
|
long workshopId)
|
|
{
|
|
bool hasLeft = false;
|
|
var searchModel = new LeftWorkSearchModel()
|
|
{
|
|
EmployeeId = employeeId,
|
|
WorkshopId = workshopId,
|
|
|
|
};
|
|
|
|
var leftworkList = _leftWorkRepository.search(searchModel);
|
|
var lastLeftWork = leftworkList.FirstOrDefault(x => contractStart <= x.LeftWorkDateGr && ContractEnd >= x.StartWorkDateGr);
|
|
if (leftworkList.Count == 0 || lastLeftWork == null)
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
|
|
//if (lastLeftWork.StartWorkDateGr > contractStart)
|
|
// lastLeftWork = leftworkList.FirstOrDefault(x =>
|
|
// x.StartWorkDateGr <= contractStart && x.LeftWorkDateGr > contractStart);
|
|
//if(lastLeftWork == null)
|
|
// lastLeftWork = leftworkList.FirstOrDefault(x =>
|
|
// x.StartWorkDateGr >= contractStart && x.LeftWorkDateGr > contractStart);
|
|
if (lastLeftWork.LeftWorkDate != "1500/01/01" && lastLeftWork.LeftWorkDateGr < ContractEnd && lastLeftWork.LeftWorkDateGr >= contractStart)
|
|
{
|
|
ContractEnd = lastLeftWork.LeftWorkDateGr.AddDays(-1);
|
|
hasLeft = true;
|
|
var start = contractStart.ToFarsi();
|
|
var end = ContractEnd.ToFarsi();
|
|
var ContractPreiodsList = new List<PeriodStartEnd>();
|
|
var CheckoutMonth = int.Parse(month);
|
|
|
|
var syear = Convert.ToInt32(start.Substring(0, 4));
|
|
var smonth = Convert.ToInt32(start.Substring(5, 2));
|
|
var sday = Convert.ToInt32(start.Substring(8, 2));
|
|
|
|
var eyear = Convert.ToInt32(end.Substring(0, 4));
|
|
var emonth = Convert.ToInt32(end.Substring(5, 2));
|
|
var eday = Convert.ToInt32(end.Substring(8, 2));
|
|
|
|
var PersianStartDate = new PersianDateTime(syear, smonth, sday);
|
|
var PersianStartDateAddingMount = new PersianDateTime(syear, smonth, 1);
|
|
var PersianEndDate = new PersianDateTime(eyear, emonth, eday);
|
|
|
|
|
|
|
|
var totalmonth = ((PersianEndDate.Year - PersianStartDateAddingMount.Year) * 12) + (PersianEndDate.Month - PersianStartDateAddingMount.Month) + 1;
|
|
for (int i = 0; i < totalmonth; i++)
|
|
{
|
|
|
|
|
|
var currentEndDate = PersianStartDateAddingMount.AddMonths(1).AddDays(-1);
|
|
if (currentEndDate > PersianEndDate)
|
|
{
|
|
currentEndDate = PersianEndDate;
|
|
}
|
|
|
|
var period = new PeriodStartEnd
|
|
{
|
|
startC = PersianStartDate.ToString("yyyy/MM/dd"),
|
|
endC = currentEndDate.ToString("yyyy/MM/dd"),
|
|
monthC = currentEndDate.Month
|
|
};
|
|
ContractPreiodsList.Add(period);
|
|
//Console.WriteLine($"Month {i + 1} : {PersianStartDate.ToString("yyyy-MM-dd")} to {currentEndDate.ToString("yyyy-MM-dd")}");
|
|
|
|
PersianStartDate = PersianStartDate.AddMonths(1);
|
|
PersianStartDate = new PersianDateTime(PersianStartDate.Year, PersianStartDate.Month, 1);
|
|
|
|
|
|
}
|
|
|
|
var periodSelect = ContractPreiodsList.FirstOrDefault(x => x.monthC == CheckoutMonth);
|
|
if (periodSelect != null)
|
|
{
|
|
var startDate = periodSelect.startC.ToGeorgianDateTime();
|
|
var endDate = periodSelect.endC.ToGeorgianDateTime();
|
|
|
|
|
|
|
|
var result = new ContractSeparationViewModel()
|
|
{
|
|
StartWorkDate = lastLeftWork.StartWorkDateGr,
|
|
LeftWorkDate = ContractEnd,
|
|
HasLeft = hasLeft,
|
|
ContarctStart = periodSelect.startC,
|
|
ContractEnd = periodSelect.endC,
|
|
ContractStartGr = startDate,
|
|
ContractEndGr = endDate,
|
|
checker = true,
|
|
};
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
}
|
|
}
|
|
if (lastLeftWork.LeftWorkDate != "1500/01/01" && lastLeftWork.LeftWorkDateGr >= ContractEnd && lastLeftWork.LeftWorkDateGr > contractStart)
|
|
{
|
|
var lastWorkDay = lastLeftWork.LeftWorkDateGr.AddDays(-1);
|
|
|
|
|
|
if (lastLeftWork.LeftWorkDateGr == ContractEnd)
|
|
{
|
|
ContractEnd = lastWorkDay;
|
|
hasLeft = true;
|
|
}
|
|
|
|
if (lastWorkDay == ContractEnd)
|
|
{
|
|
hasLeft = true;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
var start = contractStart.ToFarsi();
|
|
var end = ContractEnd.ToFarsi();
|
|
var ContractPreiodsList = new List<PeriodStartEnd>();
|
|
var CheckoutMonth = int.Parse(month);
|
|
|
|
var syear = Convert.ToInt32(start.Substring(0, 4));
|
|
var smonth = Convert.ToInt32(start.Substring(5, 2));
|
|
var sday = Convert.ToInt32(start.Substring(8, 2));
|
|
|
|
var eyear = Convert.ToInt32(end.Substring(0, 4));
|
|
var emonth = Convert.ToInt32(end.Substring(5, 2));
|
|
var eday = Convert.ToInt32(end.Substring(8, 2));
|
|
|
|
var PersianStartDate = new PersianDateTime(syear, smonth, sday);
|
|
var PersianStartDateAddingMount = new PersianDateTime(syear, smonth, 1);
|
|
var PersianEndDate = new PersianDateTime(eyear, emonth, eday);
|
|
|
|
|
|
|
|
var totalmonth = ((PersianEndDate.Year - PersianStartDateAddingMount.Year) * 12) + (PersianEndDate.Month - PersianStartDateAddingMount.Month) + 1;
|
|
for (int i = 0; i < totalmonth; i++)
|
|
{
|
|
|
|
|
|
var currentEndDate = PersianStartDateAddingMount.AddMonths(1).AddDays(-1);
|
|
if (currentEndDate > PersianEndDate)
|
|
{
|
|
currentEndDate = PersianEndDate;
|
|
}
|
|
|
|
var period = new PeriodStartEnd
|
|
{
|
|
startC = PersianStartDate.ToString("yyyy/MM/dd"),
|
|
endC = currentEndDate.ToString("yyyy/MM/dd"),
|
|
monthC = currentEndDate.Month
|
|
};
|
|
ContractPreiodsList.Add(period);
|
|
//Console.WriteLine($"Month {i + 1} : {PersianStartDate.ToString("yyyy-MM-dd")} to {currentEndDate.ToString("yyyy-MM-dd")}");
|
|
|
|
PersianStartDate = PersianStartDate.AddMonths(1);
|
|
PersianStartDate = new PersianDateTime(PersianStartDate.Year, PersianStartDate.Month, 1);
|
|
|
|
|
|
}
|
|
|
|
var periodSelect = ContractPreiodsList.FirstOrDefault(x => x.monthC == CheckoutMonth);
|
|
if (periodSelect != null)
|
|
{
|
|
var startDate = periodSelect.startC.ToGeorgianDateTime();
|
|
var endDate = periodSelect.endC.ToGeorgianDateTime();
|
|
|
|
|
|
|
|
var result = new ContractSeparationViewModel()
|
|
{
|
|
StartWorkDate = lastLeftWork.StartWorkDateGr,
|
|
LeftWorkDate = ContractEnd,
|
|
HasLeft = hasLeft,
|
|
ContarctStart = periodSelect.startC,
|
|
ContractEnd = periodSelect.endC,
|
|
ContractStartGr = startDate,
|
|
ContractEndGr = endDate,
|
|
checker = true,
|
|
};
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
}
|
|
}
|
|
else if (lastLeftWork.LeftWorkDate != "1500/01/01" && contractStart > lastLeftWork.LeftWorkDateGr)
|
|
{
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
}
|
|
else if (lastLeftWork.LeftWorkDate == "1500/01/01")
|
|
{
|
|
var start = contractStart.ToFarsi();
|
|
var end = ContractEnd.ToFarsi();
|
|
var ContractPreiodsList = new List<PeriodStartEnd>();
|
|
var CheckoutMonth = int.Parse(month);
|
|
|
|
var syear = Convert.ToInt32(start.Substring(0, 4));
|
|
var smonth = Convert.ToInt32(start.Substring(5, 2));
|
|
var sday = Convert.ToInt32(start.Substring(8, 2));
|
|
|
|
var eyear = Convert.ToInt32(end.Substring(0, 4));
|
|
var emonth = Convert.ToInt32(end.Substring(5, 2));
|
|
var eday = Convert.ToInt32(end.Substring(8, 2));
|
|
|
|
var PersianStartDate = new PersianDateTime(syear, smonth, sday);
|
|
var PersianStartDateAddingMount = new PersianDateTime(syear, smonth, 1);
|
|
var PersianEndDate = new PersianDateTime(eyear, emonth, eday);
|
|
|
|
//for (var startDate = PersianStartDate; startDate <= PersianEndDate; startDate = startDate.AddDays(1))
|
|
//{
|
|
|
|
//}
|
|
|
|
var totalmonth = ((PersianEndDate.Year - PersianStartDateAddingMount.Year) * 12) + (PersianEndDate.Month - PersianStartDateAddingMount.Month) + 1;
|
|
for (int i = 0; i < totalmonth; i++)
|
|
{
|
|
|
|
|
|
var currentEndDate = PersianStartDateAddingMount.AddMonths(1).AddDays(-1);
|
|
if (currentEndDate > PersianEndDate)
|
|
{
|
|
currentEndDate = PersianEndDate;
|
|
}
|
|
|
|
var period = new PeriodStartEnd
|
|
{
|
|
startC = PersianStartDate.ToString("yyyy/MM/dd"),
|
|
endC = currentEndDate.ToString("yyyy/MM/dd"),
|
|
monthC = currentEndDate.Month
|
|
};
|
|
ContractPreiodsList.Add(period);
|
|
//Console.WriteLine($"Month {i + 1} : {PersianStartDate.ToString("yyyy-MM-dd")} to {currentEndDate.ToString("yyyy-MM-dd")}");
|
|
|
|
PersianStartDate = PersianStartDate.AddMonths(1);
|
|
PersianStartDate = new PersianDateTime(PersianStartDate.Year, PersianStartDate.Month, 1);
|
|
|
|
|
|
}
|
|
|
|
var periodSelect = ContractPreiodsList.FirstOrDefault(x => x.monthC == CheckoutMonth);
|
|
if (periodSelect != null)
|
|
{
|
|
var startDate = periodSelect.startC.ToGeorgianDateTime();
|
|
var endDate = periodSelect.endC.ToGeorgianDateTime();
|
|
|
|
|
|
|
|
var result = new ContractSeparationViewModel()
|
|
{
|
|
StartWorkDate = lastLeftWork.StartWorkDateGr,
|
|
HasLeft = hasLeft,
|
|
ContarctStart = periodSelect.startC,
|
|
ContractEnd = periodSelect.endC,
|
|
ContractStartGr = startDate,
|
|
ContractEndGr = endDate,
|
|
checker = true,
|
|
LeftWorkDate = new DateTime(2121, 3, 21),
|
|
};
|
|
return result;
|
|
}
|
|
else
|
|
{
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
return new ContractSeparationViewModel()
|
|
{
|
|
checker = false
|
|
};
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public List<ContractViweModel> PrintAll(List<long> id)
|
|
{
|
|
|
|
var workshopEmpList = GetWorkshopEmployer();
|
|
var query = new List<ContractViweModel>();
|
|
|
|
foreach (var item in id)
|
|
{
|
|
var workshops = new List<WorkshopViewModel>();
|
|
var employees = new List<EmployeeViewModel>();
|
|
|
|
|
|
var c = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
PersonnelCodeInt = Convert.ToInt32(x.PersonnelCode),
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
WorkingHoursWeekly = x.WorkingHoursWeekly,
|
|
HousingAllowance = x.HousingAllowance
|
|
|
|
|
|
|
|
|
|
|
|
})
|
|
.SingleOrDefault(x => x.Id == item);
|
|
|
|
var weeklyDouble = 0.0;
|
|
var weekly = c.WorkingHoursWeekly;
|
|
c.WorkingHoursWeekly = WeeklyHourConvertor(weekly);
|
|
var emp = workshopEmpList.Where(x => x.WorkshopId == c.WorkshopIds)
|
|
.Select(x => x.EmployerId).ToList();
|
|
c.Employers = _employerRepository.GetEmployers(emp);
|
|
var workshopSelect = _workshopApplication.GetDetails(c.WorkshopIds);
|
|
var workshop = new WorkshopViewModel()
|
|
{
|
|
WorkshopName = workshopSelect.WorkshopName,
|
|
InsuranceCode = workshopSelect.InsuranceCode,
|
|
ArchiveCode = workshopSelect.ArchiveCode,
|
|
Address = $"{workshopSelect.State} - {workshopSelect.City} - {workshopSelect.Address}",
|
|
|
|
};
|
|
workshops.Add(workshop);
|
|
c.Workshops = workshops;
|
|
|
|
var employeeSelect = _employeeApplication.GetDetails(c.EmployeeId);
|
|
var employee = new EmployeeViewModel()
|
|
{
|
|
EmployeeFullName = employeeSelect.EmployeeFullName,
|
|
NationalCode = employeeSelect.NationalCode,
|
|
IdNumber = employeeSelect.IdNumber,
|
|
DateOfBirth = employeeSelect.DateOfBirth,
|
|
LevelOfEducation = employeeSelect.LevelOfEducation,
|
|
FatherName = employeeSelect.FatherName,
|
|
Address = $"{employeeSelect.State} - {employeeSelect.City} - {employeeSelect.Address}",
|
|
|
|
|
|
};
|
|
employees.Add(employee);
|
|
|
|
|
|
c.Employees = employees;
|
|
|
|
|
|
var LeftWorkSerchModel = new LeftWorkSearchModel()
|
|
{
|
|
WorkshopId = c.WorkshopIds,
|
|
EmployeeId = c.EmployeeId
|
|
};
|
|
var LeftWorkList = _leftWorkRepository.search(LeftWorkSerchModel);
|
|
if (LeftWorkList.Count > 0)
|
|
{
|
|
c.JobType = LeftWorkList.FirstOrDefault()?.JobName;
|
|
}
|
|
query.Add(c);
|
|
}
|
|
query = query.OrderBy(x => x.PersonnelCodeInt).ToList();
|
|
int printNumer = 0;
|
|
foreach (var rec in query)
|
|
{
|
|
printNumer += 1;
|
|
rec.PrintCounter = printNumer;
|
|
}
|
|
return query;
|
|
}
|
|
|
|
private static string WeeklyHourConvertor(string weekly)
|
|
{
|
|
double weeklyDouble;
|
|
if (!string.IsNullOrWhiteSpace(weekly) &&
|
|
weekly != "24 - 12" && weekly != "24 - 24" && weekly != "36 - 12" && weekly != "48 - 24")
|
|
{
|
|
if (weekly.Contains("/"))
|
|
{
|
|
weeklyDouble = double.Parse(weekly);
|
|
var minute = (int)((weeklyDouble % 1) * 60);
|
|
var hour = (int)(weeklyDouble);
|
|
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
|
}
|
|
else if (weekly.Contains("."))
|
|
{
|
|
weeklyDouble = double.Parse(weekly, CultureInfo.InvariantCulture);
|
|
var minute = (int)((weeklyDouble % 1) * 60);
|
|
var hour = (int)(weeklyDouble);
|
|
return hour + " " + "ساعت و" + " " + minute + " " + "دقیقه";
|
|
}
|
|
else
|
|
{
|
|
return weekly + " " + "ساعت";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
public IQueryable<WorkshopEmployerViewModel> GetWorkshopEmployer()
|
|
{
|
|
return _context.WorkshopEmployers.Select(x => new WorkshopEmployerViewModel
|
|
{
|
|
EmployerId = x.EmployerId,
|
|
WorkshopId = x.WorkshopId
|
|
});
|
|
}
|
|
|
|
public long FindPersonnelCode(long workshopId, long employeeId)
|
|
{
|
|
long personnelCode = 0;
|
|
var employee = _context.Contracts.Any(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && x.IsActiveString == "true");
|
|
var exist = _context.Contracts.Any(x => x.WorkshopIds == workshopId && x.PersonnelCode > 0 && x.IsActiveString == "true");
|
|
if (exist && !employee)
|
|
{
|
|
var workshoplist = _context.Contracts.Where(x => x.WorkshopIds == workshopId).ToList();
|
|
personnelCode = workshoplist.Max(x => x.PersonnelCode);
|
|
}
|
|
else
|
|
{
|
|
personnelCode = 0;
|
|
}
|
|
|
|
if (employee)
|
|
{
|
|
long pcode = 0;
|
|
var p = _context.Contracts.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && x.IsActiveString == "true");
|
|
if (p != null)
|
|
{
|
|
pcode = p.PersonnelCode;
|
|
}
|
|
|
|
return pcode;
|
|
}
|
|
else
|
|
{
|
|
return personnelCode += 1;
|
|
}
|
|
|
|
}
|
|
|
|
public string ContractStartCheck(DateTime cstart, DateTime cend, long employeeId, long workshopId)
|
|
{
|
|
string duplicateMessage = "";
|
|
var exist = _context.Contracts.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && ((x.ContarctStart <= cstart && x.ContractEnd >= cstart && x.IsActiveString == "true") || (x.ContarctStart <= cend && x.ContractEnd >= cend && x.IsActiveString == "true")));
|
|
if (exist != null)
|
|
{
|
|
//var duplicate = _context.Contracts.FirstOrDefault(x => x.EmployeeId == employeeId && (x.ContarctStart <= cstart && x.ContractEnd >= cstart));
|
|
duplicateMessage = $"این پرسنل یک قرار داد از تاریخ {exist.ContarctStart.ToFarsi()} تا تاریخ {exist.ContractEnd.ToFarsi()} دارد";
|
|
}
|
|
|
|
return duplicateMessage;
|
|
}
|
|
|
|
public bool CheckNextContractExist(long employeeId, DateTime startContract, DateTime endContract, long WorkshopId)
|
|
{
|
|
//var personelContracts = _context.Contracts.Where(x => x.EmployeeId == employeeId && x.WorkshopIds == WorkshopId && x.IsActiveString == "true")
|
|
// .OrderByDescending(x=>x.ContarctStart).ToList();
|
|
//var checkLast = personelContracts.Select(x => x.ContarctStart).FirstOrDefault();
|
|
var personelContracts1 = _context.Contracts.Any(x =>
|
|
x.ContarctStart >= startContract && x.ContractEnd <= endContract && x.EmployeeId == employeeId && x.WorkshopIds == WorkshopId && x.IsActiveString == "true");
|
|
var personelContracts2 = _context.Contracts.Any(x =>
|
|
x.ContarctStart < startContract && x.ContractEnd <= endContract && x.ContractEnd > startContract && x.EmployeeId == employeeId && x.WorkshopIds == WorkshopId && x.IsActiveString == "true");
|
|
var personelContracts3 = _context.Contracts.Any(x =>
|
|
x.ContarctStart >= startContract && x.ContarctStart < endContract && x.ContractEnd > endContract && x.EmployeeId == employeeId && x.WorkshopIds == WorkshopId && x.IsActiveString == "true");
|
|
|
|
if (personelContracts1 || personelContracts2 || personelContracts3)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
public bool CkeckBetween(long employeeId, DateTime EndOfContract, DateTime StartOfExtension, long WorkshopId)
|
|
{
|
|
var personelContracts = _context.Contracts.Any(x =>
|
|
x.ContarctStart >= EndOfContract && x.ContractEnd <= StartOfExtension && x.EmployeeId == employeeId && x.WorkshopIds == WorkshopId && x.IsActiveString == "true");
|
|
if (personelContracts)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
public class PeriodStartEnd
|
|
{
|
|
public string startC { get; set; }
|
|
public string endC { get; set; }
|
|
|
|
public int monthC { get; set; }
|
|
}
|
|
#region Client
|
|
public bool Remove(long id)
|
|
{
|
|
|
|
using (var transaction = _context.Database.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
//شرطها بعدا بایداضافه شود
|
|
var contract = _context.Contracts.Where(x => x.id == id)?.FirstOrDefault();
|
|
_context.Contracts.Remove(contract);
|
|
_context.SaveChanges();
|
|
transaction.Commit();
|
|
return true;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
transaction.Rollback();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public List<ContractViweModel> SearchForClient(ContractSearchModel searchModel)
|
|
{
|
|
#region CheckValidtWorkshop
|
|
|
|
var accountId = _authHelper.CurrentAccountId();
|
|
var contracingPartyAcc = _context.ContractingPartyAccounts.FirstOrDefault(x => x.AccountId == accountId);
|
|
if (contracingPartyAcc == null)
|
|
{
|
|
return new List<ContractViweModel>();
|
|
}
|
|
var employers =
|
|
_context.Employers.Where(x => x.ContractingPartyId == contracingPartyAcc.PersonalContractingPartyId).Select(x => x.id).ToList();
|
|
if (employers.Count < 1)
|
|
{
|
|
return new List<ContractViweModel>();
|
|
}
|
|
var workshopIds = _context.WorkshopEmployers.Where(x => employers.Contains(x.EmployerId))
|
|
.Select(x => x.WorkshopId).ToList();
|
|
var checkValid = workshopIds.Any(x => x == searchModel.WorkshopIds);
|
|
if (!checkValid)
|
|
{
|
|
return new List<ContractViweModel>();
|
|
}
|
|
#endregion
|
|
|
|
|
|
var query = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
Signature = x.Signature,
|
|
EmployerName = x.Employer.FullName,
|
|
EmployeeName = x.Employee.FName + " " + x.Employee.LName,
|
|
WorkshopName = x.Workshop.WorkshopName,
|
|
}).Where(x => x.WorkshopIds == searchModel.WorkshopIds);
|
|
|
|
if (searchModel.EmployeeId > 0)
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContarctStart) && !string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
query = query.Where(x =>
|
|
x.ContractStartGr >= start && x.ContractEndGr <= endd);
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
var y = searchModel.Year + "/" + searchModel.Month + "/01";
|
|
string y2 = string.Empty;
|
|
int month = Convert.ToInt32(searchModel.Month);
|
|
int year = Convert.ToInt32(searchModel.Year);
|
|
|
|
if (month <= 6)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/31";
|
|
}
|
|
else if (month > 6 && month < 12)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
}
|
|
else if (month == 12)
|
|
{
|
|
switch (year)
|
|
{
|
|
case 1346:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1350:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1354:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1358:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1362:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1366:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1370:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1375:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1379:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1383:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1387:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1391:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1395:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1399:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1403:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1408:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1412:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1416:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1420:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1424:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1428:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1432:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1436:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1441:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1445:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
|
|
default:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/29";
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
var start = y.ToGeorgianDateTime();
|
|
var end = y2.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end ||
|
|
x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr);
|
|
}
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
var startOfYear = searchModel.Year + "/01/01";
|
|
var startOfyearGr = startOfYear.ToGeorgianDateTime();
|
|
var endOfYear = $"{searchModel.Year}/12/01".FindeEndOfMonth();
|
|
var endOfYearGr = endOfYear.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.ContractStartGr >= startOfyearGr && x.ContractEndGr <= endOfYearGr);
|
|
}
|
|
|
|
if (searchModel.SearchAll)
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
switch (searchModel.Sorting)
|
|
{
|
|
case "CreationDate-Max":
|
|
return query.OrderByDescending(x => x.Id).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "CreationDate-Min":
|
|
return query.OrderBy(x => x.Id).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "PersonelCode-Max":
|
|
return query.OrderByDescending(x => x.PersonnelCode).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "PersonelCode-Min":
|
|
return query.OrderBy(x => x.PersonnelCode).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "ContractStart-Min":
|
|
return query.OrderBy(x => x.ContractStartGr).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "ContractStart-Max":
|
|
return query.OrderByDescending(x => x.ContractStartGr).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "Signature-Min":
|
|
return query.OrderByDescending(x => x.Signature == "0").Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
case "Signature-Max":
|
|
return query.OrderByDescending(x => x.Signature == "1").Skip(searchModel.PageIndex).Take(30).ToList();
|
|
break;
|
|
default: return query.OrderByDescending(x => x.Id).Skip(searchModel.PageIndex).Take(30).ToList();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
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,
|
|
AvgWorkingHour = WeeklyHourConvertor(c.WorkingHoursWeekly),
|
|
DailyWage = c.DayliWage,
|
|
FamilyAllowance = c.FamilyAllowance
|
|
};
|
|
}).ToList()
|
|
};
|
|
|
|
return result;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region NewChangeByHeydari
|
|
|
|
public OperationResult DeleteAllContarcts_Old(List<long> ids)
|
|
{
|
|
var op = new OperationResult();
|
|
using (var transaction = _context.Database.BeginTransaction())
|
|
{
|
|
try
|
|
{
|
|
List<long> removeList = new List<long>();
|
|
List<long> notRemoveList = new List<long>();
|
|
|
|
foreach (var item in ids)
|
|
{
|
|
if (_context.CheckoutSet.Any(x => x.ContractId == item))
|
|
{
|
|
notRemoveList.Add(item);
|
|
}
|
|
else if (_context.Contracts.Any(x => x.id == item && x.Signature == "0"))
|
|
{
|
|
var contract = _context.Contracts.Where(x => x.id == item)?.FirstOrDefault();
|
|
_context.Contracts.Remove(contract);
|
|
removeList.Add(item);
|
|
}
|
|
else
|
|
{
|
|
notRemoveList.Add(item);
|
|
}
|
|
}
|
|
_context.SaveChanges();
|
|
|
|
transaction.Commit();
|
|
if (removeList.Count() > 0 && notRemoveList.Count() > 0)
|
|
return op.Failed("<p class='text-success'>" + " تعداد " + removeList.Count() + "قرارداد با موفقیت حذف شد" + "</p><br/>" + "<p>" + " تعداد " + notRemoveList.Count() + "قرارداد به دلیل داشتن امضا یا تصفیه حساب، حذف نشد." + "</p>");
|
|
else if (removeList.Count() > 0 && notRemoveList.Count() == 0)
|
|
{
|
|
return op.Succcedded(-1, "حذف قراردادهای انتخاب شده با موفقیت انجام شد");
|
|
}
|
|
else if (removeList.Count() == 0 && notRemoveList.Count() > 0)
|
|
{
|
|
return op.Failed("حذف تمامی قراردادهای انتخابی به دلیل داشتن امضا یا تصفیه حساب، انجام نشد.");
|
|
}
|
|
else
|
|
{
|
|
return op.Succcedded(-1, "حذف با موفقیت انجام شد");
|
|
}
|
|
}
|
|
catch (Exception)
|
|
{
|
|
transaction.Rollback();
|
|
return op.Failed("حذف با خطا مواجه شد.");
|
|
}
|
|
}
|
|
}
|
|
public OperationResult DeleteAllContarcts(List<long> ids)
|
|
{
|
|
var op = new OperationResult();
|
|
|
|
try
|
|
{
|
|
var contracts = _context.Contracts.Where(x => ids.Contains(x.id)).ToList();
|
|
_context.Contracts.RemoveRange(contracts);
|
|
_context.SaveChanges();
|
|
return op.Succcedded(-1, "حذف با موفقیت شد.");
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return op.Failed("حذف با خطا مواجه شد.");
|
|
}
|
|
}
|
|
|
|
public OperationResult DeleteContarcts(long id)
|
|
{
|
|
var op = new OperationResult();
|
|
|
|
try
|
|
{
|
|
|
|
var contract = _context.Contracts.Where(x => x.id == id)?.FirstOrDefault();
|
|
_context.Contracts.Remove(contract);
|
|
_context.SaveChanges();
|
|
return op.Succcedded(-1, "حذف با موفقیت انجام شد.");
|
|
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return op.Failed("حذف با خطا مواجه شد.");
|
|
}
|
|
|
|
}
|
|
public List<long> CheckHasCheckout(List<long> ids)
|
|
{
|
|
List<long> notRemoveList = new List<long>();
|
|
foreach (var item in ids)
|
|
{
|
|
|
|
if (_context.CheckoutSet.Any(x => x.ContractId == item && x.IsActiveString == "true"))
|
|
{
|
|
notRemoveList.Add(item);
|
|
}
|
|
}
|
|
return notRemoveList;
|
|
|
|
}
|
|
public List<long> CheckHasSignature(List<long> ids)
|
|
{
|
|
|
|
List<long> notRemoveList = new List<long>();
|
|
foreach (var item in ids)
|
|
{
|
|
if (_context.Contracts.Any(x => x.id == item && x.Signature == "1"))
|
|
{
|
|
notRemoveList.Add(item);
|
|
}
|
|
}
|
|
return notRemoveList;
|
|
|
|
}
|
|
|
|
public List<ContractViweModel> SearchForMainContract(ContractSearchModel searchModel)
|
|
{
|
|
bool hasSearch = false;
|
|
bool hasEmployeeOrWorkshopSearch = false;
|
|
//var watch = System.Diagnostics.Stopwatch.StartNew();
|
|
var AcountID = _authHelper.CurrentAccountId();
|
|
var workshopAcounts = _context.WorkshopAccounts.Where(x => x.AccountId == AcountID)
|
|
.Select(x => x.WorkshopId).ToList();
|
|
var emp = _context.WorkshopEmployers.Where(x => x.EmployerId == searchModel.EmployerId)
|
|
.Select(x => x.WorkshopId).ToList();
|
|
//var employer = _context.Employers.Select(m => new EmployerViewModel
|
|
//{
|
|
// Id = m.id,
|
|
// FullName = m.FullName,
|
|
|
|
|
|
//}).ToList();
|
|
var query = _context.Contracts.Select(x => new ContractViweModel
|
|
{
|
|
Id = x.id,
|
|
PersonnelCode = x.PersonnelCode,
|
|
EmployerId = x.EmployerId,
|
|
EmployeeId = x.EmployeeId,
|
|
WorkshopIds = x.WorkshopIds,
|
|
YearlySalaryId = x.YearlySalaryId,
|
|
DayliWage = x.DayliWage,
|
|
ContarctStart = x.ContarctStart.ToFarsi(),
|
|
ContractEnd = x.ContractEnd.ToFarsi(),
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
ArchiveCode = x.ArchiveCode,
|
|
IsActiveString = x.IsActiveString,
|
|
GetWorkDate = x.GetWorkDate.ToFarsi(),
|
|
SetContractDate = x.SetContractDate.ToFarsi(),
|
|
JobType = x.JobType,
|
|
ContractType = x.ContractType,
|
|
WorkshopAddress1 = x.WorkshopAddress1,
|
|
WorkshopAddress2 = x.WorkshopAddress2,
|
|
JobTypeId = x.JobTypeId,
|
|
ConsumableItems = x.ConsumableItems,
|
|
FamilyAllowance = x.FamilyAllowance,
|
|
ContractPeriod = x.ContractPeriod,
|
|
Signature = x.Signature,
|
|
EmployerName = x.Employer.FullName,
|
|
EmployeeName = x.Employee.FName + " " + x.Employee.LName,
|
|
WorkshopName = x.Workshop.WorkshopName,
|
|
EmployeeFName = x.Employee.FName,
|
|
EmployeeLName = x.Employee.LName,
|
|
IsBlockCantracingParty = "false",
|
|
|
|
});
|
|
if (searchModel.WorkshopIds != 0)
|
|
{
|
|
|
|
hasEmployeeOrWorkshopSearch = true;
|
|
query = query.Where(x => x.WorkshopIds == searchModel.WorkshopIds);
|
|
|
|
}
|
|
if (searchModel.EmployeeId != 0)
|
|
{
|
|
|
|
hasEmployeeOrWorkshopSearch = true;
|
|
query = query.Where(x => x.EmployeeId == searchModel.EmployeeId);
|
|
|
|
}
|
|
if (searchModel.EmployerId != 0)
|
|
{
|
|
hasEmployeeOrWorkshopSearch = true;
|
|
query = query.Where(x => emp.Contains(x.WorkshopIds));
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContractNo))
|
|
{ //hasSearch = true;
|
|
query = query.Where(x => x.ContractNo == searchModel.ContractNo);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContractPeriod))
|
|
{
|
|
//hasSearch = true;
|
|
query = query.Where(x => x.ContractPeriod == searchModel.ContractPeriod);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.ContarctStart) &&
|
|
!string.IsNullOrWhiteSpace(searchModel.ContractEnd))
|
|
{
|
|
hasSearch = true;
|
|
var start = searchModel.ContarctStart.ToGeorgianDateTime();
|
|
var endd = searchModel.ContractEnd.ToGeorgianDateTime();
|
|
query = query.Where(x =>
|
|
x.ContractStartGr >= start && x.ContractEndGr <= endd);
|
|
}
|
|
else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
//hasSearch = true;
|
|
var y = searchModel.Year + "/" + searchModel.Month + "/01";
|
|
string y2 = string.Empty;
|
|
int month = Convert.ToInt32(searchModel.Month);
|
|
int year = Convert.ToInt32(searchModel.Year);
|
|
|
|
if (month <= 6)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/31";
|
|
}
|
|
else if (month > 6 && month < 12)
|
|
{
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
}
|
|
else if (month == 12)
|
|
{
|
|
switch (year)
|
|
{
|
|
case 1346:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1350:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1354:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1358:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1362:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1366:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1370:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1375:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1379:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1383:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1387:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1391:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1395:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1399:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1403:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1408:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1412:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1416:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1420:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1424:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1428:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1432:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1436:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1441:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
case 1445:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/30";
|
|
break;
|
|
|
|
default:
|
|
y2 = $"{searchModel.Year}/{searchModel.Month}/29";
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
var start = y.ToGeorgianDateTime();
|
|
var end = y2.ToGeorgianDateTime();
|
|
|
|
query = query.Where(x => x.ContractStartGr >= start && x.ContractStartGr < end && x.ContractEndGr > start && x.ContractEndGr <= end ||
|
|
x.ContractStartGr <= start && x.ContractEndGr >= end || start <= x.ContractStartGr && end > x.ContractStartGr || end >= x.ContractEndGr && start < x.ContractEndGr);
|
|
}
|
|
|
|
if (searchModel.IsActiveString == null)
|
|
{
|
|
|
|
query = query.Where(x => x.IsActiveString == "true");
|
|
}
|
|
|
|
if (searchModel.IsActiveString == "false")
|
|
{
|
|
//hasSearch = true;
|
|
query = query.Where(x => x.IsActiveString == "false");
|
|
}
|
|
else if (searchModel.IsActiveString == "both")
|
|
{
|
|
//hasSearch = true;
|
|
query = query.Where(x => x.IsActiveString == "false" || x.IsActiveString == "true");
|
|
}
|
|
query = query.Where(e => workshopAcounts.Contains(e.WorkshopIds));
|
|
|
|
|
|
if ((searchModel.EmployeeId != 0 || !string.IsNullOrEmpty(searchModel.EmployeeName)) && !string.IsNullOrWhiteSpace(searchModel.Year) && searchModel.WorkshopIds != 0)
|
|
{
|
|
hasSearch = true;
|
|
if (!string.IsNullOrWhiteSpace(searchModel.Year) && string.IsNullOrWhiteSpace(searchModel.Month))
|
|
{
|
|
var startOfYear = searchModel.Year + "/01/01";
|
|
var startOfyearGr = startOfYear.ToGeorgianDateTime();
|
|
var endOfYear = $"{searchModel.Year}/12/01".FindeEndOfMonth();
|
|
var endOfYearGr = endOfYear.ToGeorgianDateTime();
|
|
query = query.Where(x => x.ContractStartGr >= startOfyearGr && x.ContractEndGr <= endOfYearGr);
|
|
}
|
|
else if (!string.IsNullOrEmpty(searchModel.EmployeeName))
|
|
{
|
|
query = query.Where(x =>
|
|
(!string.IsNullOrEmpty(x.EmployeeFName) && x.EmployeeFName.StartsWith(searchModel.EmployeeName)) ||
|
|
(!string.IsNullOrEmpty(x.EmployeeLName) && x.EmployeeLName.StartsWith(searchModel.EmployeeName)))
|
|
.OrderByDescending(x => x.Id);
|
|
}
|
|
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
}
|
|
else
|
|
{
|
|
if (hasSearch)
|
|
return query.OrderByDescending(x => x.Id).ToList();
|
|
else if(hasEmployeeOrWorkshopSearch && !hasSearch)
|
|
return query.OrderByDescending(x => x.ContractStartGr).ToList();
|
|
else
|
|
{
|
|
return query.OrderByDescending(x => x.Id).Take(50).ToList();
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
#region Pooya
|
|
public ContractViweModel GetByWorkshopIdEmployeeIdInDates(long workshopId, long employeeId, DateTime start, DateTime end)
|
|
{
|
|
var entity = _context.Contracts.FirstOrDefault(x => x.EmployeeId == employeeId && x.WorkshopIds == workshopId && x.ContractEnd.Date >= start.Date &&
|
|
x.ContarctStart.Date <= end.Date);
|
|
if (entity == null)
|
|
return new();
|
|
return new ContractViweModel
|
|
{
|
|
ContractStartGr = entity.ContarctStart,
|
|
ContractNo = entity.ContractNo,
|
|
ContractEndGr = entity.ContractEnd,
|
|
EmployeeId = entity.EmployeeId,
|
|
WorkshopIds = workshopId,
|
|
Id = entity.id
|
|
};
|
|
}
|
|
|
|
public List<ContractViweModel> GetByWorkshopIdInDates(long workshopId, DateTime contractStart, DateTime contractEnd)
|
|
{
|
|
return _context.Contracts.Where(x => x.WorkshopIds == workshopId && x.ContractEnd >= contractStart && x.ContarctStart <= contractEnd).Select(x => new ContractViweModel
|
|
{
|
|
WorkshopIds = x.WorkshopIds,
|
|
ContractStartGr = x.ContarctStart,
|
|
ContractEndGr = x.ContractEnd,
|
|
ContractNo = x.ContractNo,
|
|
}).ToList();
|
|
}
|
|
#endregion
|
|
} |