Files
Backend-Api/CompanyManagment.EFCore/Repository/ReportRepository.cs
2025-11-04 17:37:22 +03:30

2584 lines
111 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using _0_Framework.Application;
using AccountMangement.Infrastructure.EFCore;
using Company.Domain.EmployeeAgg;
using Company.Domain.ReportAgg;
using Company.Domain.WorkshopEmployerAgg;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.Report;
using Microsoft.EntityFrameworkCore;
using PersianTools.Core;
namespace CompanyManagment.EFCore.Repository;
public class ReportRepository : IReportRepository
{
private readonly CompanyContext _context;
private readonly AccountContext _accountContext;
public ReportRepository(CompanyContext context, AccountContext accountContext)
{
_context = context;
_accountContext = accountContext;
}
//public AllReport getAll(string year, string month)
//{
// var watch = System.Diagnostics.Stopwatch.StartNew();
// //یافتن آغاز و پایان ماه جاری
// //یافتن آغاز و پایان ماه بعد
// #region FindMonthStartAndEnd
// string nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
// if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
// nowFa = $"{year}/{month}/01";
// var currentEndOfMonth = nowFa.FindeEndOfMonth();
// //شروع ماه جاری
// var currentMonthStart = nowFa.ToGeorgianDateTime();
// // پایان کاه جاری
// var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
// int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
// var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
// var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
// //شروع ماه بعد
// var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
// //پایان ماه بعد
// var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
// #endregion
// // کاهش درخواست‌های تکراری به پایگاه داده
// var checkoutAccountLeftWorks = _accountContext.AccountLeftWorks
// .Where(x => x.RoleId == 5 && x.StartWorkGr < currentMonthEnd && x.LeftWorkGr > currentMonthStart)
// .Select(x => new { x.WorkshopId, x.AccountId }).ToList();
// var allCheckoutAccountLeftWorkWorkshopIds = checkoutAccountLeftWorks.Select(x => x.WorkshopId).Distinct().ToList();
// var checkoutWorkshopEmployer = _context.WorkshopEmployers
// .Where(x => allCheckoutAccountLeftWorkWorkshopIds.Contains(x.WorkshopId))
// .Include(x => x.Employer.ContractingParty)
// .Where(x => x.Employer.ContractingParty.IsBlock != "true" && x.Employer.ContractingParty.IsActiveString == "true" && x.Workshop.IsActiveString == "true")
// .ToList();
// var checkoutWithOutInstitutionContract = checkoutWorkshopEmployer
// .Where(x => x.Employer.ContractingPartyId == 30428)
// .Select(x => x.WorkshopId)
// .ToList();
// var checkoutFindHasInstitutionContract = _context.InstitutionContractSet
// .Where(c => c.ContractStartGr <= currentMonthStart && c.ContractEndGr >= currentMonthEnd)
// .Select(c => c.ContractingPartyId)
// .ToHashSet();
// var checkoutWithInstitutionContract = checkoutWorkshopEmployer
// .Where(x => x.Employer.ContractingPartyId != 30428 && checkoutFindHasInstitutionContract.Contains(x.Employer.ContractingPartyId))
// .Select(x => x.WorkshopId)
// .Distinct()
// .ToList();
// var checkoutMixWitAndWitOut = checkoutWithInstitutionContract.Concat(checkoutWithOutInstitutionContract).Distinct().ToList();
// var allCheckoutLeftworks = _context.LeftWorkList
// .Where(x => checkoutMixWitAndWitOut.Contains(x.WorkshopId) && x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart)
// .Select(x => x.EmployeeId)
// .ToHashSet();
// var allCheckoutCreated = _context.CheckoutSet
// .Where(x => allCheckoutLeftworks.Contains(x.EmployeeId) && x.ContractStart.Date >= currentMonthStart.Date && x.ContractEnd.Date <= currentMonthEnd.Date && x.IsActiveString == "true")
// .ToList();
// var allCheckoutSigned = allCheckoutCreated.Count(x => x.Signature == "1");
// // بهینه‌سازی و کاهش پردازش‌های اضافی
// var checkoutPercent = allCheckoutLeftworks.Count > 0 ? (allCheckoutCreated.Count * 100) / allCheckoutLeftworks.Count : 0;
// var checkoutSignaturePercent = allCheckoutCreated.Count > 0 ? (allCheckoutSigned * 100) / allCheckoutCreated.Count : 0;
// return new AllReport
// {
// CheckoutPercent = checkoutPercent,
// CheckoutSignaturePercent = checkoutSignaturePercent,
// // سایر فیلدهای موردنیاز
// };
//}
//public async Task<AllReport> GetAllActiveWorkshopsNew(string year, string month)
//{
// var watch = System.Diagnostics.Stopwatch.StartNew();
// // Parse the start and end dates for the current and next months
// #region FindMonthStartAndEnd
// string nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
// if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
// nowFa = $"{year}/{month}/01";
// var currentEndOfMonth = nowFa.FindeEndOfMonth();
// //شروع ماه جاری
// var currentMonthStart = nowFa.ToGeorgianDateTime();
// // پایان کاه جاری
// var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
// int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
// var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
// var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
// //شروع ماه بعد
// var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
// //پایان ماه بعد
// var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
// #endregion
// // Preload data to reduce database calls
// var accountLeftWorks = await _accountContext.AccountLeftWorks
// .Where(x => x.RoleId == 5)
// .ToListAsync();
// var leftWorkList = await _context.LeftWorkList
// .Where(x => x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > currentMonthStart)
// .ToListAsync();
// var institutionContracts = await _context.InstitutionContractSet
// .Where(c => c.ContractStartGr <= nextMonthEnd && c.ContractEndGr >= currentMonthStart)
// .ToListAsync();
// var accounts = await _accountContext.Accounts
// .Where(x => x.RoleId == 5)
// .ToListAsync();
// // Filter workshops
// var activeWorkshops = await _context.WorkshopEmployers
// .Include(x => x.Workshop)
// .Include(x => x.Employer.ContractingParty)
// .Where(x => x.Workshop.IsActiveString == "true" &&
// x.Employer.ContractingParty.IsActiveString == "true" &&
// x.Employer.ContractingParty.IsBlock != "true")
// .ToListAsync();
// // Group workshops by contract type
// var workshopsWithContracts = activeWorkshops
// .Where(x => institutionContracts.Any(c => c.ContractingPartyId == x.Employer.ContractingPartyId))
// .Select(x => x.WorkshopId)
// .Distinct()
// .ToList();
// var workshopsWithoutContracts = activeWorkshops
// .Where(x => x.Employer.ContractingPartyId == 30428)
// .Select(x => x.WorkshopId)
// .Distinct()
// .ToList();
// var allWorkshops = workshopsWithContracts.Concat(workshopsWithoutContracts).Distinct().ToList();
// // Calculate left works and contracts
// var leftWorks = leftWorkList
// .Where(x => allWorkshops.Contains(x.WorkshopId))
// .ToList();
// var leftWorkEmployeeIds = leftWorks.Select(x => x.EmployeeId).ToHashSet();
// var contracts = await _context.Contracts
// .Where(x => leftWorkEmployeeIds.Contains(x.EmployeeId) &&
// x.ContarctStart.Date <= nextMonthEnd.Date &&
// x.ContractEnd.Date > nextMonthStart.Date &&
// x.IsActiveString == "true")
// .ToListAsync();
// var signedContracts = contracts.Count(x => x.Signature == "1");
// // Calculate checkouts
// var checkouts = await _context.CheckoutSet
// .Where(x => leftWorkEmployeeIds.Contains(x.EmployeeId) &&
// x.ContractStart.Date >= currentMonthStart.Date &&
// x.ContractEnd.Date <= currentMonthEnd.Date &&
// x.IsActiveString == "true")
// .ToListAsync();
// var signedCheckouts = checkouts.Count(x => x.Signature == "1");
// // Calculate percentages
// var contractToBe = leftWorks.Count;
// var createdContracts = contracts.Count;
// var checkoutToBe = leftWorks.Count;
// var createdCheckouts = checkouts.Count;
// var contractPercent = contractToBe > 0 ? (createdContracts * 100) / contractToBe : 0;
// var contractSignaturePercent = createdContracts > 0 ? (signedContracts * 100) / createdContracts : 0;
// var checkoutPercent = checkoutToBe > 0 ? (createdCheckouts * 100) / checkoutToBe : 0;
// var checkoutSignaturePercent = createdCheckouts > 0 ? (signedCheckouts * 100) / createdCheckouts : 0;
// // Prepare the final result
// var finalResult = new AllReport
// {
// AllPercent = (contractPercent + contractSignaturePercent + checkoutPercent + checkoutSignaturePercent) / 4,
// ContractPercent = contractPercent,
// ContractSignaturePercent = contractSignaturePercent,
// CheckoutPercent = checkoutPercent,
// CheckoutSignaturePercent = checkoutSignaturePercent,
// Year = $"{currentMonthStart.Year}",
// Month = nowFa.Substring(5, 2),
// AllContract = contractToBe,
// ContractNotDone = contractToBe - createdContracts,
// ContrcatDone = createdContracts,
// ContractSignNotDone = createdContracts - signedContracts,
// ContractSignDone = signedContracts,
// AllCheckout = checkoutToBe,
// CheckoutNotDone = checkoutToBe - createdCheckouts,
// CheckoutDone = createdCheckouts,
// CheckoutSignDone = signedCheckouts,
// CheckoutSignNotDone = createdCheckouts - signedCheckouts
// };
// Console.WriteLine("Optimized method execution time: " + watch.Elapsed);
// return finalResult;
//}
public async Task<AllReport> GetAllActiveWorkshopsNew(string year, string month)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
var watchAllProssec = System.Diagnostics.Stopwatch.StartNew();
//یافتن آغاز و پایان ماه جاری
//یافتن آغاز و پایان ماه بعد
#region FindMonthStartAndEnd
string nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
nowFa = $"{year}/{month}/01";
var currentEndOfMonth = nowFa.FindeEndOfMonth();
//شروع ماه جاری
var currentMonthStart = nowFa.ToGeorgianDateTime();
// پایان کاه جاری
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
//شروع ماه بعد
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
//پایان ماه بعد
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#endregion
Console.ForegroundColor = ConsoleColor.Yellow;
var byWorkshopDisabledCheck = await _context.Workshops.Select(x => new { x.id, x.CreateContract, x.SignContract, x.CreateCheckout, x.SignCheckout }).ToListAsync();
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateContract, x.SignContract, x.CreateCheckout, x.SignCheckout }).ToListAsync();
#region checkout
//یاتن اکانتهای قراداد ساده
var checkoutAccountLeftWorks = await _accountContext.AccountLeftWorks.AsSplitQuery()
.Where(x => x.RoleId == 5)
.Where(x => x.StartWorkGr < currentMonthEnd && x.LeftWorkGr > currentMonthStart).ToListAsync();
var allCheckoutAccountLeftWorkWorkshopIds = checkoutAccountLeftWorks.Select(x => x.WorkshopId).ToList();
//یافتن کارگاه هایی که فعال هستند و طرف حساب انها فعال است
var checkoutWorkshopEmployer =await _context.WorkshopEmployers.AsSplitQuery()
.Where(x => allCheckoutAccountLeftWorkWorkshopIds.Contains(x.WorkshopId))
.Include(x => x.Workshop).AsSplitQuery()
.Include(x => x.Employer)
.ThenInclude(x => x.ContractingParty)
.Where(x => x.Employer.ContractingParty.IsBlock != "true" && x.Employer.ContractingParty.IsActiveString == "true")
.Where(x => x.Workshop.IsActiveString == "true").ToListAsync();
Console.WriteLine("checkoutWorkshopEmployer --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//یافتن کارگاه های استثنا بدون قردادمالی
var checkoutWithOutInstitutionContract = checkoutWorkshopEmployer.Where(x => x.Employer.ContractingPartyId == 30428)
.GroupBy(x => x.Workshop).Select(x => x.Key.id);
Console.WriteLine("checkoutWithOutInstitutionContract --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//یافتن قردادمالی برای کارگاه های یافت شده در تاریخ مورد نظر
var checkoutFindHasInstitutionContract =await _context.InstitutionContractSet.AsSplitQuery()
.Where(c => c.ContractStartGr <= currentMonthStart && c.ContractEndGr >= currentMonthEnd)
.Select(c => c.ContractingPartyId).ToListAsync();
Console.WriteLine("checkoutFindHasInstitutionContract --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//فیلتر کارگاه های غیر استثنا با کمک کوئری بالا
var checkoutWithInstitutionContract = checkoutWorkshopEmployer.Where(x => x.Employer.ContractingPartyId != 30428 && checkoutFindHasInstitutionContract.Contains(x.Employer.ContractingPartyId)).GroupBy(x => x.WorkshopId).Select(x => x.Key);
Console.WriteLine("checkoutWithInstitutionContract --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//ترکیب کارگاه های استثنا و دارای قراداد
var checkoutMixWitAndWitOut = checkoutWithInstitutionContract.Concat(checkoutWithOutInstitutionContract);
Console.WriteLine("Concat --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//تمام پرسنل فعال برای تصفیه حساب در ماه مورد نظر
var allCheckoutLeftworkList =await _context.LeftWorkList.AsSplitQuery()
.Where(x => checkoutMixWitAndWitOut.Contains(x.WorkshopId))
.Where(x =>
x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart).Select(x=> new { x.EmployeeId, x.WorkshopId}).ToListAsync();
Console.WriteLine("allCheckoutLeftworks --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
#region CreateCheckoutOptions
var allCheckoutLeftworks = new List<(long EmployeeId, long WorkshopId)>();
foreach (var item in allCheckoutLeftworkList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId);
allCheckoutLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId);
allCheckoutLeftworks.Add(add);
}
}
}
#endregion
var allCheckoutLeftworkEmployeeIds = allCheckoutLeftworks.Select(x => x.EmployeeId);
var allCheckoutLeftworkWorkshopIds = allCheckoutLeftworks.Select(x => x.WorkshopId).ToList();
Console.WriteLine("allCheckoutLeftworkWorkshopIds --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
var allCheckoutToBeTople = allCheckoutLeftworks;
//تمام تصفیه حساب های ایجاد شده ماه مورد نظر
//var allCheckoutCreated =await _context.CheckoutSet.AsSplitQuery()
// .Where(x => allCheckoutLeftworkEmployeeIds.Contains(x.EmployeeId) && allCheckoutLeftworkWorkshopIds.Contains(x.WorkshopId))
// .Where(x =>
// x.ContractStart.Date >= currentMonthStart.Date && x.ContractEnd.Date <= currentMonthEnd.Date && x.IsActiveString == "true").ToListAsync();
Console.WriteLine("allCheckout Created start --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
var allCheckoutCreated = await _context.CheckoutSet
.Where(x =>
allCheckoutLeftworkWorkshopIds.Contains(x.WorkshopId)
&& x.ContractStart >= currentMonthStart
&& x.ContractEnd <= currentMonthEnd
&& x.IsActiveString == "true")
.Select(x => new { x.id, x.EmployeeId, x.WorkshopId, x.Signature }) // فقط لازم‌ها
.ToListAsync();
allCheckoutCreated = allCheckoutCreated.Where(x => allCheckoutLeftworkEmployeeIds.Contains(x.EmployeeId))
.ToList();
Console.WriteLine("allCheckout Created End --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
var allChekoutCreated = allCheckoutCreated.Select(x => x.WorkshopId).ToList();
Console.WriteLine("allCheckoutSignedList --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
#endregion
#region Contracts
//یاتن اکانتهای قراداد ساده
var contractsAccountLeftWorks =await _accountContext.AccountLeftWorks.AsSplitQuery()
.Where(x => x.RoleId == 5)
.Where(x => x.StartWorkGr < nextMonthEnd && x.LeftWorkGr > nextMonthStart).ToListAsync();
var allContractAccountLeftWorkWorkshopIds = contractsAccountLeftWorks.Select(x => x.WorkshopId).ToList();
//#if DEBUG
// contractsAccountLeftWorks = contractsAccountLeftWorks.Where(x => x.AccountId == 25);
// allContractAccountLeftWorkWorkshopIds = allContractAccountLeftWorkWorkshopIds.Where(x=>x == 296).ToList();
//#endif
//یافتن کارگاه هایی که فعال هستند و طرف حساب انها فعال است
var contractWorkshopEmployer =await _context.WorkshopEmployers.AsSplitQuery()
.Where(x => allContractAccountLeftWorkWorkshopIds.Contains(x.WorkshopId))
.Include(x => x.Workshop)
.Include(x => x.Employer)
.ThenInclude(x => x.ContractingParty)
.Where(x => x.Employer.ContractingParty.IsBlock != "true" && x.Employer.ContractingParty.IsActiveString == "true")
.Where(x => x.Workshop.IsActiveString == "true").ToListAsync();
Console.WriteLine("contractWorkshopEmployer --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
//یافتن کارگاه های استثنا بدون قردادمالی
var contractWithOutInstitutionContract = contractWorkshopEmployer.Where(x => x.Employer.ContractingPartyId == 30428)
.GroupBy(x => x.Workshop).Select(x => x.Key.id).ToList();
//یافتن قردادمالی برای کارگاه های یافت شده در تاریخ مورد نظر
var contractFindHasInstitutionContract =await _context.InstitutionContractSet.AsSplitQuery()
.Where(c => c.ContractStartGr <= nextMonthStart && c.ContractEndGr >= nextMonthEnd)
.Select(c => c.ContractingPartyId).ToListAsync();
//فیلتر کارگاه های غیر استثنا با کمک کوئری بالا
var contractWithInstitutionContract = contractWorkshopEmployer.Where(x => x.Employer.ContractingPartyId != 30428 && contractFindHasInstitutionContract
.Contains(x.Employer.ContractingPartyId)).GroupBy(x => x.WorkshopId)
.Select(x => x.Key).ToList();
//ترکیب کارگاه های استثنا و دارای قراداد
var contractMixWitAndWitOut = contractWithInstitutionContract.Concat(contractWithOutInstitutionContract).ToList();
//تمام پرسنل فعال برای قراداد در ماه مورد نظر
var allContractLeftworksList =await _context.LeftWorkList.AsSplitQuery()
.Where(x => contractMixWitAndWitOut.Contains(x.WorkshopId))
.Where(x =>
x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > nextMonthStart).Select(x=> new {x.EmployeeId, x.WorkshopId}).ToListAsync();
#region CreateContractOptions
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId);
allContractLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId);
allContractLeftworks.Add(add);
}
}
}
#endregion
//تمام قرارداد های ایجاد شده ماه مورد نظر
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId);
var allContracToBeTople = allContractLeftworks;
var allContractLeftworkWorkshopIds = allContractLeftworks.Select(x => x.WorkshopId).ToList();
//var allContractCreated =await _context.Contracts.AsSplitQuery()
// .Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId) && allContractLeftworkWorkshopIds.Contains(x.WorkshopIds))
// .Where(x =>
// x.ContarctStart.Date <= nextMonthEnd.Date && x.ContractEnd.Date > nextMonthStart.Date && x.IsActiveString == "true").ToListAsync();
Console.WriteLine("allContractCreated start --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
var allContractCreated = await _context.Contracts
.Where(x =>
allContractLeftworkWorkshopIds.Contains(x.WorkshopIds)
&& x.ContarctStart <= nextMonthEnd
&& x.ContractEnd > nextMonthStart
&& x.IsActiveString == "true")
.Select(x => new { x.id, x.EmployeeId, x.WorkshopIds, x.Signature }) // فقط لازم‌ها
.ToListAsync();
allContractCreated = allContractCreated.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId))
.ToList();
Console.WriteLine("allContractCreated end --->" + watch.Elapsed);
watch.Stop();
watch.Restart();
var allContractCreatedlist = allContractCreated.Select(x => x.WorkshopIds).ToList();
//قرارداد هایی که باید ایجاد می شد
var contractToBe = allContractLeftworks.Count();
//قراردادهای ایجاد شده
var createdContracts = allContractCreated.Count();
Console.WriteLine("contractsToBe : " + allContractLeftworks.Count());
Console.WriteLine("contracts created: " + allContractCreated.Count());
#region signContractOptions
var allContractSignedCounter = 0;
var allContractSignedListWorkshopId = new List<long>();
var contractSignToBe = 0;
var allContractSignToBeListWorkshopId = new List<long>();
foreach (var item in allContractCreated)
{
var byEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopIds);
var byWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopIds);
if (byEmployee != null)
{
if (byEmployee.SignContract)
{
contractSignToBe += 1;
allContractSignToBeListWorkshopId.Add(item.WorkshopIds);
if (item.Signature == "1")
{
allContractSignedCounter += 1;
allContractSignedListWorkshopId.Add(item.WorkshopIds);
}
}
}
else
{
if (byWorkshop.SignContract)
{
contractSignToBe += 1;
allContractSignToBeListWorkshopId.Add(item.WorkshopIds);
if (item.Signature == "1")
{
allContractSignedCounter += 1;
allContractSignedListWorkshopId.Add(item.WorkshopIds);
}
}
}
}
#endregion
#region signCheckoutOptions
var allCheckoutSignedCounter = 0;
var allCheckoutSignedListWorkshopId = new List<long>();
var checkoutSignToBe = 0;
var allCheckoutSignToBeListWorkshopId = new List<long>();
foreach (var item in allCheckoutCreated)
{
var byEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var byWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (byEmployee != null)
{
if (byEmployee.SignCheckout)
{
checkoutSignToBe += 1;
allCheckoutSignToBeListWorkshopId.Add(item.WorkshopId);
if (item.Signature == "1")
{
allCheckoutSignedCounter += 1;
allCheckoutSignedListWorkshopId.Add(item.WorkshopId);
}
}
}
else
{
if (byWorkshop.SignCheckout)
{
checkoutSignToBe += 1;
allCheckoutSignToBeListWorkshopId.Add(item.WorkshopId);
if (item.Signature == "1")
{
allCheckoutSignedCounter += 1;
allCheckoutSignedListWorkshopId.Add(item.WorkshopId);
}
}
}
}
#endregion
#endregion
//تصفیه حساب هایی که امضاء شده
var allCheckoutSigned = allCheckoutSignedCounter;
var allCheckoutSignedList = allCheckoutSignedListWorkshopId;
//قرارداد هایی که امضاء شده
var allContractSigned = allContractSignedCounter;
var allContractSignedList = allContractSignedListWorkshopId;
// قراداد های امضاء شده
var signedContracts = allContractSigned;
// تصفیه هایی که باید ایجاد می شد
var checkoutToBe = allCheckoutLeftworks.Count();
// تصفیه های ایجاد شده
var createdCheckouts = allCheckoutCreated.Count();
//تصفیه های امضاء شده
var signedChckouts = allCheckoutSignedCounter;
Console.WriteLine("contracts signed: " + allContractSigned);
Console.WriteLine("checkoutsToBe : " + allCheckoutLeftworks.Count());
Console.WriteLine("checkouts created: " + allCheckoutCreated.Count());
Console.WriteLine("checkouts signed: " + allCheckoutSignedCounter);
var accounts = await _accountContext.Accounts.Where(x => x.RoleId == 5).ToListAsync();
#region checkoutAccounts
var checkoutAccountGroup = checkoutAccountLeftWorks
.Where(x => allCheckoutLeftworkWorkshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.AccountId).Select(x => new AccountResults()
{
AccountId = x.Key,
AccountFullName = accounts.FirstOrDefault(a => a.id == x.Key)!.Fullname,
WorkshopList = x.Select(w => w.WorkshopId).ToList()
// CheckoutDonePercent = (x.Sum(c => c.) * 100) / x.Sum(c => c.CheckoutLeftWorkCount),
//CheckoutSignPercent = x.Sum(c => c.CheckoutDoneCount) > 0 ? (x.Sum(c => c.CheckoutSignDoneCount) * 100) / (x.Sum(c => c.CheckoutDoneCount)) : 0,
}).AsEnumerable();
var checkoutAccountGroupresult = checkoutAccountGroup.Select(grouped =>
{
var toBe = allCheckoutLeftworkWorkshopIds.Where(n => grouped.WorkshopList.Contains(n)).ToList();
int checkoutToBe = toBe.Count;
int createdCheckouts = allContractCreatedlist.Count(n => grouped.WorkshopList.Contains(n));
int signedCheckout = allCheckoutSignedListWorkshopId.Count(n => grouped.WorkshopList.Contains(n));
int signToBeCheckout = allCheckoutSignToBeListWorkshopId.Count(n => grouped.WorkshopList.Contains(n));
if (checkoutToBe > 0)
{
return new AccountResults()
{
WorkshopList = grouped.WorkshopList,
AccountId = grouped.AccountId,
AccountFullName = grouped.AccountFullName,
CheckoutDonePercent = (createdCheckouts * 100) / checkoutToBe,
CheckoutSignPercent = signToBeCheckout > 0 ? (signedCheckout * 100) / signToBeCheckout : 0,
};
}
else
{
return new AccountResults()
{
AccountId = 0,
};
}
}).Where(x => x.AccountId > 0).ToList();
#endregion
#region contractAccouns
var contractAccountGroup = contractsAccountLeftWorks
.Where(x => allContractLeftworkWorkshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.AccountId).Select(x => new AccountResults()
{
AccountId = x.Key,
AccountFullName = accounts.FirstOrDefault(a => a.id == x.Key)!.Fullname,
WorkshopList = x.Select(w => w.WorkshopId).ToList()
}).AsEnumerable();
var contractAccountGroupResult = contractAccountGroup.Select(grouped =>
{
var toBe = allContractLeftworkWorkshopIds.Where(n => grouped.WorkshopList.Contains(n)).ToList();
//var toBe = grouped.WorkshopList.Where(n => allContractLeftworkWorkshopIds.Contains(n)).ToList();
int contractToBe = toBe.Count;
int createdContracts = allContractCreatedlist.Count(n => grouped.WorkshopList.Contains(n));
int signedContracts = allContractSignedList.Count(n => grouped.WorkshopList.Contains(n));
int signToBeContract = allContractSignToBeListWorkshopId.Count(n => grouped.WorkshopList.Contains(n));
if (contractToBe > 0)
{
return new AccountResults()
{
WorkshopList = grouped.WorkshopList,
AccountId = grouped.AccountId,
AccountFullName = grouped.AccountFullName,
ContractDonePercent = (createdContracts * 100) / contractToBe,
ContractSignPercent = signToBeContract > 0 ? (signedContracts * 100) / signToBeContract : 0,
};
}
else
{
return new AccountResults()
{
AccountId = 0,
};
}
}).Where(x => x.AccountId > 0).ToList();
#endregion
//قرارداد
var contractPercent = contractToBe > 0 ? (createdContracts * 100) / contractToBe : 0;
//امضاء قراداد
var contractSignaturePercent = contractSignToBe > 0 ? (signedContracts * 100) / contractSignToBe : 0;
// تصفیه
var checkoutPercent = (createdCheckouts * 100) / checkoutToBe;
// امضاء تصفیه حساب
var checkoutSignaturePercent = checkoutSignToBe > 0 ? (signedChckouts * 100) / checkoutSignToBe : 0;
var finalResult = new AllReport()
{
//همه
AllPercent = (contractPercent + contractSignaturePercent + checkoutPercent + checkoutSignaturePercent) / 4,
//قرارداد
ContractPercent = contractPercent,
//امضاء قراداد
ContractSignaturePercent = contractSignaturePercent,
// تصفیه
CheckoutPercent = checkoutPercent,
// امضاء تصفیه حساب
CheckoutSignaturePercent = checkoutSignaturePercent,
Year = $"{currentYear}",
Month = nowFa.Substring(5, 2),
ContractAccountResults = contractAccountGroupResult,
CheckoutAccountResults = checkoutAccountGroupresult,
AllContract = contractToBe,
ContractNotDone = contractToBe - createdContracts,
ContrcatDone = createdContracts,
ContractSignNotDone = contractSignToBe - signedContracts,
ContractSignDone = signedContracts,
ContractSignToBe = contractSignToBe,
AllCheckout = checkoutToBe,
CheckoutNotDone = checkoutToBe - createdCheckouts,
CheckoutDone = createdCheckouts,
CheckoutSignDone = signedChckouts,
CheckoutSignNotDone = checkoutSignToBe - signedChckouts,
CheckoutSignToBe = checkoutSignToBe,
};
Console.WriteLine("new metod >>>>>: " + watch.Elapsed);
Console.WriteLine("watchAllProssecd >>>>>: " + watchAllProssec.Elapsed);
return finalResult;
}
public AllReport GetAllActiveWorkshops(string year, string month)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
//var instititionContracts = _context.InstitutionContractSet.Where(x => x.IsActiveString == "true").Select(x=>x.ContractingPartyId).ToList();
var blockContractingPartyIds = _context.PersonalContractingParties.Where(x => x.IsBlock == "false" && x.IsActiveString == "true").Select(x => x.id).ToList();
//blockContractingPartyIds = blockContractingPartyIds.Where(x => instititionContracts.Contains(x)).ToList();
var workshops = _context.Workshops.Where(x => x.IsActiveString == "true")
.Include(x => x.WorkshopEmployers)
.Include(x => x.LeftWorks)
.Select(x => new ActiveWorkshops
{
Id = x.id,
ContractLeftWorkCount = 0,
CheckoutLeftWorkCount = 0,
ContractingPartId = x.WorkshopEmployers.Select(e => e.Employer.ContractingPartyId).FirstOrDefault(),
AccountIdList = _context.WorkshopAccounts.Where(m => m.WorkshopId == x.id && m.ContractAndCheckout == "true" && m.IsActiveSting == "true").Select(a => a.AccountId).ToList(),
#region Contracts
//contractLeft This Mont
ContractLeftIds = x.LeftWorks.Select(l => new LeftWorkViewModel()
{
EmployeeId = l.EmployeeId,
StartWorkDateGr = l.StartWorkDate,
LeftWorkDateGr = l.LeftWorkDate.AddDays(-1),
}).Where(l =>
(l.StartWorkDateGr <= nextMonthStart && l.LeftWorkDateGr > nextMonthStart) ||
(l.StartWorkDateGr <= nextMonthEnd && l.LeftWorkDateGr >= nextMonthEnd) ||
(l.StartWorkDateGr >= nextMonthStart && l.StartWorkDateGr <= nextMonthEnd) ||
(l.LeftWorkDateGr >= nextMonthStart && l.LeftWorkDateGr <= nextMonthEnd)).Select(l => l.EmployeeId).ToList(),
#endregion
#region Checkouts
//CheckoutLeft befor This Month
CheckoutLeftIds = x.LeftWorks.Select(l => new LeftWorkViewModel()
{
EmployeeId = l.EmployeeId,
StartWorkDateGr = l.StartWorkDate,
LeftWorkDateGr = l.LeftWorkDate.AddDays(-1),
}).Where(l => (l.StartWorkDateGr <= currentMonthStart && l.LeftWorkDateGr > currentMonthStart) ||
(l.StartWorkDateGr <= currentMonthEnd && l.LeftWorkDateGr >= currentMonthEnd) ||
(l.StartWorkDateGr >= currentMonthStart && l.StartWorkDateGr <= currentMonthEnd) ||
(l.LeftWorkDateGr >= currentMonthStart && l.LeftWorkDateGr <= currentMonthEnd)).Select(l => l.EmployeeId).ToList(),
#endregion
}).Where(e => blockContractingPartyIds.Contains(e.ContractingPartId) && e.AccountIdList.Count > 0).AsSplitQuery();
var workshopsList = workshops.Select(x => new ActiveWorkshops
{
Id = x.Id,
AccountIdList = x.AccountIdList,
#region Contracts
//contractLeft This Month
ContractLeftIds = _context.InstitutionContractSet.Any(c => c.ContractingPartyId == x.ContractingPartId && c.ContractStartGr <= nextMonthStart && c.ContractEndGr >= nextMonthEnd) ? x.ContractLeftIds : new List<long>(),
#endregion
#region Checkouts
////CheckoutLeft befor This Month
CheckoutLeftIds = _context.InstitutionContractSet.Any(c => c.ContractingPartyId == x.ContractingPartId && c.ContractStartGr <= currentMonthStart && c.ContractEndGr >= currentMonthEnd) ? x.CheckoutLeftIds : new List<long>(),
#endregion
}).AsSplitQuery();
//var wCount = workshops.Count();
//var partyId = workshops.Select(x => x.ContractingPartId).ToList();
Console.WriteLine("Ripo query 1 >>>>>: " + watch.Elapsed);
var res = workshopsList.AsEnumerable();
watch.Restart();
var result = res.Select(x => new ActiveWorkshops
{
Id = x.Id,
ContractLeftWorkCount = x.ContractLeftIds.Count,
CheckoutLeftWorkCount = x.CheckoutLeftIds.Count,
AccountIdList = x.AccountIdList,
CheckoutDoneCount = x.CheckoutLeftIds.Count > 0
? _context.CheckoutSet.Where(ch => ch.WorkshopId == x.Id)
.Where(ch => x.CheckoutLeftIds.Contains(ch.EmployeeId))
.Count(ch =>
ch.ContractStart >= currentMonthStart && ch.ContractStart < currentMonthEnd &&
ch.IsActiveString == "true")
: 0,
CheckoutSignDoneCount = x.CheckoutLeftIds.Count > 0
? _context.CheckoutSet.Where(ch => ch.WorkshopId == x.Id)
.Where(ch => x.CheckoutLeftIds.Contains(ch.EmployeeId))
.Count(ch =>
ch.ContractStart >= currentMonthStart && ch.ContractStart < currentMonthEnd &&
ch.IsActiveString == "true" && ch.Signature == "1")
: 0,
ContrctDoneCount = x.ContractLeftIds.Count > 0
? _context.Contracts.Where(ct => ct.WorkshopIds == x.Id && ct.IsActiveString == "true")
.Where(ct => x.ContractLeftIds.Contains(ct.EmployeeId))
.Count(l => (l.ContarctStart <= nextMonthStart && l.ContractEnd >= nextMonthStart) ||
(l.ContarctStart <= nextMonthEnd && l.ContractEnd >= nextMonthEnd) ||
(l.ContarctStart >= nextMonthStart && l.ContarctStart <= nextMonthEnd) ||
(l.ContractEnd >= nextMonthStart && l.ContractEnd <= nextMonthEnd))
: 0,
ContrctSignDoneCount = x.ContractLeftIds.Count > 0
? _context.Contracts
.Where(ct => ct.WorkshopIds == x.Id && ct.IsActiveString == "true" && ct.Signature == "1")
.Where(ct => x.ContractLeftIds.Contains(ct.EmployeeId))
.Count(l => (l.ContarctStart <= nextMonthStart && l.ContractEnd >= nextMonthStart) ||
(l.ContarctStart <= nextMonthEnd && l.ContractEnd >= nextMonthEnd) ||
(l.ContarctStart >= nextMonthStart && l.ContarctStart <= nextMonthEnd) ||
(l.ContractEnd >= nextMonthStart && l.ContractEnd <= nextMonthEnd))
: 0,
}).AsEnumerable();
Console.WriteLine("Ripo query 2 >>>>>: " + watch.Elapsed);
var contractAccountResult = result.Select(x => new ActiveWorkshops()
{
Id = x.Id,
//AccountId = _accountContext.Accounts.Any(e => x.AccountIdList.Contains(e.id) && e.RoleId == 5)
// ? _accountContext.Accounts.Where(e => x.AccountIdList.Contains(e.id)).FirstOrDefault(e => e.RoleId == 5)!.id : 0,
//AccountFullname = _accountContext.Accounts.Any(e => x.AccountIdList.Contains(e.id) && e.RoleId == 5)
// ? _accountContext.Accounts.Where(e => x.AccountIdList.Contains(e.id)).FirstOrDefault(e => e.RoleId == 5)!.Fullname : "",
AccountId = _accountContext.AccountLeftWorks.Any(e => x.AccountIdList.Contains(e.AccountId) && e.StartWorkGr <= currentMonthStart && e.LeftWorkGr >= currentMonthEnd) ?
_accountContext.AccountLeftWorks.FirstOrDefault(e => x.AccountIdList.Contains(e.AccountId) && e.StartWorkGr <= currentMonthStart && e.LeftWorkGr >= currentMonthEnd)!.AccountId : 0,
ContractLeftWorkCount = x.ContractLeftWorkCount,
ContrctDoneCount = x.ContrctDoneCount,
ContrctSignDoneCount = x.ContrctSignDoneCount,
IsActiveString = x.IsActiveString,
WorkshopFullName = x.WorkshopFullName,
}).Where(x => x.AccountId != 0 && x.ContractLeftWorkCount > 0).ToList();
var checkoutAccountResult = result.Select(x => new ActiveWorkshops()
{
Id = x.Id,
//AccountId = _accountContext.Accounts.Any(e => x.AccountIdList.Contains(e.id) && e.RoleId == 5)
// ? _accountContext.Accounts.Where(e => x.AccountIdList.Contains(e.id)).FirstOrDefault(e => e.RoleId == 5)!.id : 0,
//AccountFullname = _accountContext.Accounts.Any(e => x.AccountIdList.Contains(e.id) && e.RoleId == 5)
// ? _accountContext.Accounts.Where(e => x.AccountIdList.Contains(e.id)).FirstOrDefault(e => e.RoleId == 5)!.Fullname : "",
AccountId = _accountContext.AccountLeftWorks.Any(e => x.AccountIdList.Contains(e.AccountId) && e.StartWorkGr <= nextMonthStart && e.LeftWorkGr >= nextMonthEnd) ?
_accountContext.AccountLeftWorks.FirstOrDefault(e => x.AccountIdList.Contains(e.AccountId) && e.StartWorkGr <= nextMonthStart && e.LeftWorkGr >= nextMonthEnd)!.AccountId : 0,
CheckoutLeftWorkCount = x.CheckoutLeftWorkCount,
CheckoutDoneCount = x.CheckoutDoneCount,
CheckoutSignDoneCount = x.CheckoutSignDoneCount,
IsActiveString = x.IsActiveString,
WorkshopFullName = x.WorkshopFullName,
}).Where(x => x.AccountId != 0 && x.CheckoutLeftWorkCount > 0).ToList();
watch.Restart();
//قرارداد هایی که باید ایجاد می شد
var contractToBe = contractAccountResult.Sum(x => x.ContractLeftWorkCount);
//قراردادهای ایجاد شده
var createdContracts = contractAccountResult.Sum(x => x.ContrctDoneCount);
// قراداد های امضاء شده
var signedContracts = contractAccountResult.Sum(x => x.ContrctSignDoneCount);
// تصفیه هایی که باید ایجاد می شد
var checkoutToBe = checkoutAccountResult.Sum(x => x.CheckoutLeftWorkCount);
// تصفیه های ایجاد شده
var createdCheckouts = checkoutAccountResult.Sum(x => x.CheckoutDoneCount);
//تصفیه های امضاء شده
var signedChckouts = checkoutAccountResult.Sum(x => x.CheckoutSignDoneCount);
var contractGroupResult = contractAccountResult.GroupBy(x => x.AccountId).Select(x => new AccountResults()
{
AccountId = x.Key,
AccountFullName = _accountContext.Accounts.FirstOrDefault(a => a.id == x.Key)!.Fullname,
ContractDonePercent = (x.Sum(c => c.ContrctDoneCount) * 100) / (x.Sum(c => c.ContractLeftWorkCount)),
ContractSignPercent = x.Sum(c => c.ContrctDoneCount) > 0 ? (x.Sum(c => c.ContrctSignDoneCount) * 100) / (x.Sum(c => c.ContrctDoneCount)) : 0,
}).ToList();
var checkoutGroupResult = checkoutAccountResult.GroupBy(x => x.AccountId).Select(x => new AccountResults()
{
AccountId = x.Key,
AccountFullName = _accountContext.Accounts.FirstOrDefault(a => a.id == x.Key)!.Fullname,
CheckoutDonePercent = (x.Sum(c => c.CheckoutDoneCount) * 100) / x.Sum(c => c.CheckoutLeftWorkCount),
CheckoutSignPercent = x.Sum(c => c.CheckoutDoneCount) > 0 ? (x.Sum(c => c.CheckoutSignDoneCount) * 100) / (x.Sum(c => c.CheckoutDoneCount)) : 0,
}).ToList();
#region ComputePercentage
//قرارداد
var contractPercent = (createdContracts * 100) / contractToBe;
//امضاء قراداد
var contractSignaturePercent = createdContracts > 0 ? (signedContracts * 100) / createdContracts : 0;
// تصفیه
var checkoutPercent = (createdCheckouts * 100) / checkoutToBe;
// امضاء تصفیه حساب
var checkoutSignaturePercent = createdCheckouts > 0 ? (signedChckouts * 100) / createdCheckouts : 0;
var finalResult = new AllReport()
{
//همه
AllPercent = (contractPercent + contractSignaturePercent + checkoutPercent + checkoutSignaturePercent) / 4,
//قرارداد
ContractPercent = contractPercent,
//امضاء قراداد
ContractSignaturePercent = contractSignaturePercent,
// تصفیه
CheckoutPercent = checkoutPercent,
// امضاء تصفیه حساب
CheckoutSignaturePercent = checkoutSignaturePercent,
Year = $"{currentYear}",
Month = nowFa.Substring(5, 2),
ContractAccountResults = contractGroupResult,
CheckoutAccountResults = checkoutGroupResult,
AllContract = contractToBe,
ContractNotDone = contractToBe - createdContracts,
ContrcatDone = createdContracts,
ContractSignNotDone = createdContracts - signedContracts,
ContractSignDone = signedContracts,
AllCheckout = checkoutToBe,
CheckoutNotDone = checkoutToBe - createdCheckouts,
CheckoutDone = createdCheckouts,
CheckoutSignDone = signedChckouts,
CheckoutSignNotDone = createdCheckouts - signedChckouts,
};
#endregion
Console.WriteLine("App 1 >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<WorkshopResult> GetWorkshopContractDone(string year, string month, long accountId, List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region NewChanges
//تمام پرسنل فعال برای قراداد در ماه مورد نظر
var allContractLeftworksList = await _context.LeftWorkList
.Where(x => workshopList.Contains(x.WorkshopId))
.Where(x =>
x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > nextMonthStart)
.Select(x=> new {x.EmployeeId, x.WorkshopId, x.EmployeeFullName})
.ToListAsync();
//var allContractCreatedWorkshopIdList = allContractLeftworksList.Select(x => new { x.EmployeeId, x.WorkshopId })
// .ToList();
#region CreateContractOptions
var byWorkshopDisabledCheck = await _context.Workshops.Where(x=> workshopList.Contains(x.id)).Select(x => new { x.id, x.CreateContract}).ToListAsync();
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x => workshopList.Contains(x.WorkshopId))
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateContract }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId,item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
var allContractLeftworksWorkshopIdList = allContractLeftworks.Select(x => x.WorkshopId).ToList();
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId).ToList();
//تمام قرارداد های ایجاد شده ماه مورد نظر
var allContractCreated = await _context.Contracts
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId) && allContractLeftworksWorkshopIdList.Contains(x.WorkshopIds))
.Where(x =>
x.ContarctStart <= nextMonthEnd && x.ContractEnd > nextMonthStart && x.IsActiveString == "true")
.Select(x=> new {x.id, x.EmployeeId, x.WorkshopIds, x.Signature}).ToListAsync();
#endregion
Console.WriteLine("ajax 1 >>>>>: " + watch.Elapsed);
var workshops = _context.Workshops.Include(x => x.LeftWorks).Where(x => allContractLeftworksWorkshopIdList.Contains(x.id)).ToList();
var workshopListResult = workshops
.Select(workshop =>
{
var toBe = workshop.LeftWorks
.Where(x=> allContractLeftworkEmployeeIds.Contains(x.EmployeeId))
.Where(x =>
x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > nextMonthStart)
.GroupBy(x => x.EmployeeId)
.Select(x => x.Key).ToList();
var contractToBe = toBe.Count();
//var contractToBe = allContractLeftworkEmployeeIdsList.Count(x=> x.WorkshopId == workshop.id);
var contractCreated = allContractCreated.Count(x => x.WorkshopIds == workshop.id);
if (contractToBe > 0)
{
return new workshopSearch()
{
Id = workshop.id,
WorkshopFullName = workshop.WorkshopFullName,
ArchiveCode = workshop.ArchiveCode,
ContractDonePercent = ((contractCreated * 100) / contractToBe),
};
}
else
{
return null;
}
})
.Where(x => x != null)
.OrderBy(x => x.ContractDonePercent)
.ToList(); // تبدیل به لیست
var badWorkshop = workshopListResult.FirstOrDefault();
var badWorkshopTobe = allContractLeftworks.Where(x => x.WorkshopId == badWorkshop.Id);
var badWorkshopCreated = allContractCreated.Where(x => x.WorkshopIds == badWorkshop.Id).Select(x => x.EmployeeId);
var notDoneEmployes = badWorkshopTobe.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.EmployeeFullName,
}).Where(l => !badWorkshopCreated.Contains(l.Id)).ToList();
var finalResult = new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = notDoneEmployes,
};
Console.WriteLine("ajax 2 >>>>>: " + watch.Elapsed);
#endregion
return finalResult;
}
public async Task<WorkshopResult> GetWorkshopContractSignDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region NewChanges
//تمام پرسنل فعال برای قراداد در ماه مورد نظر
var allContractLeftworksList = await _context.LeftWorkList
.Where(x => workshopList.Contains(x.WorkshopId))
.Where(x =>
x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > nextMonthStart)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.EmployeeFullName , x.Employee})
.ToListAsync();
var byWorkshopDisabledCheck = await _context.Workshops.Select(x => new { x.id, x.CreateContract, x.SignContract}).ToListAsync();
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateContract, x.SignContract }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId).ToList();
//تمام قرارداد های ایجاد شده ماه مورد نظر
var allContractCreated =await _context.Contracts
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId))
.Where(x =>
x.ContarctStart <= nextMonthEnd && x.ContractEnd > nextMonthStart && x.IsActiveString == "true")
.Select(x=> new {x.id, x.EmployeeId, x.WorkshopIds, x.Signature, x.Employee}).ToListAsync();
var allContractSignedListWorkshopId = new List<(long id, long EmployeeId, long WorkshopId, string Signature, Employee Employee)>();
var allContractSignToBeListWorkshopId = new List<(long id, long EmployeeId, long WorkshopId, string Signature, Employee Employee)>();
foreach (var item in allContractCreated)
{
var byEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopIds);
var byWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopIds);
if (byEmployee != null)
{
if (byEmployee.SignContract)
{
var itemAdd = (item.id, item.EmployeeId, item.WorkshopIds, item.Signature, item.Employee);
allContractSignToBeListWorkshopId.Add(itemAdd);
if (item.Signature == "1")
{
allContractSignedListWorkshopId.Add(itemAdd);
}
}
}
else
{
if (byWorkshop.SignContract)
{
var itemAdd = (item.id, item.EmployeeId, item.WorkshopIds, item.Signature, item.Employee);
allContractSignToBeListWorkshopId.Add(itemAdd);
if (item.Signature == "1")
{
allContractSignedListWorkshopId.Add(itemAdd);
}
}
}
}
var createdContractWorkshopids = allContractSignToBeListWorkshopId.Select(x => x.WorkshopId).ToList();
//قرارداد هایی که امضاء شده
var allContractSigned = allContractSignedListWorkshopId.Where(x => x.Signature == "1");
var createdContractTople = allContractSignToBeListWorkshopId
.Select(x => new { x.EmployeeId, x.WorkshopId })
.ToList();
var signedContracTople = allContractSigned.Where(x => x.Signature == "1")
.Select(x => new { x.EmployeeId, x.WorkshopId })
.ToList();
Console.WriteLine("ajax 1 >>>>>: " + watch.Elapsed);
var workshops = _context.Workshops.Where(x => createdContractWorkshopids.Contains(x.id)).ToList();
var workshopListResult = workshops
.Select(workshop =>
{
//var contractToBe = allContractLeftworks.Count(x => x.WorkshopId == workshop.id);
var contractCreated = createdContractTople.Count(x => x.WorkshopId == workshop.id);
var signedContract = signedContracTople.Count(x => x.WorkshopId == workshop.id);
if (contractCreated > 0)
{
return new workshopSearch()
{
Id = workshop.id,
WorkshopFullName = workshop.WorkshopFullName,
ArchiveCode = workshop.ArchiveCode,
ContractSignPercent = ((signedContract * 100) / contractCreated),
};
}
else
{
return null;
}
})
.Where(x => x != null)
.OrderBy(x => x.ContractSignPercent)
.ToList(); // تبدیل به لیست
if (workshopListResult.Count == 0)
return new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = new(),
};
var badWorkshop = workshopListResult.FirstOrDefault();
var badWorkshopCreated = allContractSignToBeListWorkshopId.Where(x => x.WorkshopId == badWorkshop.Id);
var badWorkshopSigned = allContractSigned.Where(x => x.WorkshopId == badWorkshop.Id).Select(x => x.EmployeeId);
var notDoneEmployes = badWorkshopCreated.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.Employee.FullName,
}).Where(l => !badWorkshopSigned.Contains(l.Id)).ToList();
var finalResult = new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = notDoneEmployes,
};
#endregion
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<WorkshopResult> GetWorkshopCheckoutDone(string year, string month, long accountId, List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region NewChanges
//تمام پرسنل فعال برای قراداد در ماه مورد نظر
var allContractLeftworksList = await _context.LeftWorkList
.Where(x => workshopList.Contains(x.WorkshopId))
.Where(x =>
x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.EmployeeFullName })
.ToListAsync();
var byWorkshopDisabledCheck = await _context.Workshops.Where(x => workshopList.Contains(x.id)).Select(x => new { x.id, x.CreateCheckout}).ToListAsync();
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x => workshopList.Contains(x.WorkshopId))
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateCheckout }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
var allContractLeftworkWorkshopIds = allContractLeftworks.Select(x => x.WorkshopId).ToList();
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId);
var allContractCreated = _context.CheckoutSet
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId) && allContractLeftworkWorkshopIds.Contains(x.WorkshopId))
.Where(x =>
x.ContractStart.Date <= currentMonthEnd.Date && x.ContractEnd.Date > currentMonthStart.Date && x.IsActiveString == "true");
var createdContractTople = allContractCreated
.Select(x => new { x.EmployeeId, x.WorkshopId })
.ToList();
Console.WriteLine("ajax 1 >>>>>: " + watch.Elapsed);
var workshops = _context.Workshops.Include(x => x.LeftWorks).Where(x => allContractLeftworkWorkshopIds.Contains(x.id)).ToList();
var workshopListResult = workshops
.Select(workshop =>
{
var toBe = workshop.LeftWorks
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId))
.Where(x =>
x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart)
.GroupBy(x => x.EmployeeId)
.Select(x => x.Key).ToList();
var contractToBe = toBe.Count();
//var contractToBe = allContractToBe.Count(x => x.WorkshopId == workshop.id);
var contractCreated = createdContractTople.Count(x => x.WorkshopId == workshop.id);
if (contractToBe > 0)
{
return new workshopSearch()
{
Id = workshop.id,
WorkshopFullName = workshop.WorkshopFullName,
ArchiveCode = workshop.ArchiveCode,
CheckoutDonePercent = ((contractCreated * 100) / contractToBe),
};
}
else
{
return null;
}
})
.Where(x => x != null)
.OrderBy(x => x.CheckoutDonePercent)
.ToList(); // تبدیل به لیست
if (workshopListResult.Count == 0)
return new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = new(),
};
var badWorkshop = workshopListResult.FirstOrDefault();
var badWorkshopTobe = allContractLeftworks.Where(x => x.WorkshopId == badWorkshop.Id);
var badWorkshopCreated = allContractCreated.Where(x => x.WorkshopId == badWorkshop.Id).Select(x => x.EmployeeId);
var notDoneEmployes = badWorkshopTobe.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.EmployeeFullName,
}).Where(l => !badWorkshopCreated.Contains(l.Id)).ToList();
var finalResult = new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = notDoneEmployes,
};
#endregion
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<WorkshopResult> GetWorkshopCheckoutSignDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region NewChanges
var allContractLeftworksList = await _context.LeftWorkList
.Where(x => workshopList.Contains(x.WorkshopId))
.Where(x => x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.EmployeeFullName, x.Employee })
.ToListAsync();
var byWorkshopDisabledCheck = await _context.Workshops.Select(x => new { x.id,x.CreateCheckout, x.SignCheckout }).ToListAsync();
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateCheckout, x.SignCheckout }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var toBeRemoveByWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (toBeRemoveByWorkshop.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
//var signContractWorkshopDisabled = await _context.Workshops.Where(x => x.SignContract == false).ToListAsync();
//var signContractDisabled = await _context.EmployeeComputeOptionsSet.Where(x => x.SignContract == false)
// .Select(x => new { x.EmployeeId, x.WorkshopId }).ToListAsync();
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId).ToList();
var allContractCreated =await _context.CheckoutSet
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId))
.Where(x =>
x.ContractStart <= currentMonthEnd && x.ContractEnd > currentMonthStart && x.IsActiveString == "true")
.Select(x => new { x.id, x.EmployeeId, x.WorkshopId, x.Signature, x.EmployeeFullName }).ToListAsync();
var allContractSignedListWorkshopId = new List<(long id, long EmployeeId, long WorkshopId, string Signature, string EmployeeFullName)>();
var allContractSignToBeListWorkshopId = new List<(long id, long EmployeeId, long WorkshopId, string Signature, string EmployeeFullName)>();
foreach (var item in allContractCreated)
{
var byEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
var byWorkshop = byWorkshopDisabledCheck.FirstOrDefault(x => x.id == item.WorkshopId);
if (byEmployee != null)
{
if (byEmployee.SignCheckout)
{
var itemAdd = (item.id, item.EmployeeId, item.WorkshopId, item.Signature, item.EmployeeFullName);
allContractSignToBeListWorkshopId.Add(itemAdd);
if (item.Signature == "1")
{
allContractSignedListWorkshopId.Add(itemAdd);
}
}
}
else
{
if (byWorkshop.SignCheckout)
{
var itemAdd = (item.id, item.EmployeeId, item.WorkshopId, item.Signature, item.EmployeeFullName);
allContractSignToBeListWorkshopId.Add(itemAdd);
if (item.Signature == "1")
{
allContractSignedListWorkshopId.Add(itemAdd);
}
}
}
}
var createdContractWorkshopids = allContractSignToBeListWorkshopId.Select(x => x.WorkshopId).ToList();
//قرارداد هایی که امضاء شده
var allContractSigned = allContractSignedListWorkshopId.Where(x => x.Signature == "1");
var createdContractTople = allContractSignToBeListWorkshopId
.Select(x => new { x.EmployeeId, x.WorkshopId })
.ToList();
var signedContracTople = allContractSigned.Where(x => x.Signature == "1")
.Select(x => new { x.EmployeeId, x.WorkshopId })
.ToList();
Console.WriteLine("ajax 1 >>>>>: " + watch.Elapsed);
var workshops = _context.Workshops.Where(x => createdContractWorkshopids.Contains(x.id)).ToList();
var workshopListResult = workshops
.Select(workshop =>
{
//var contractToBe = allContractLeftworks.Count(x => x.WorkshopId == workshop.id);
var contractCreated = createdContractTople.Count(x => x.WorkshopId == workshop.id);
var signedContract = signedContracTople.Count(x => x.WorkshopId == workshop.id);
if (contractCreated > 0)
{
return new workshopSearch()
{
Id = workshop.id,
WorkshopFullName = workshop.WorkshopFullName,
ArchiveCode = workshop.ArchiveCode,
CheckoutSignPercent = ((signedContract * 100) / contractCreated),
};
}
else
{
return null;
}
})
.Where(x => x != null)
.OrderBy(x => x.CheckoutSignPercent)
.ToList(); // تبدیل به لیست
if (workshopListResult.Count == 0)
return new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = new(),
};
var badWorkshop = workshopListResult.FirstOrDefault();
var badWorkshopCreated = allContractSignToBeListWorkshopId.Where(x => x.WorkshopId == badWorkshop.Id);
var badWorkshopSigned = allContractSigned.Where(x => x.WorkshopId == badWorkshop.Id).Select(x => x.EmployeeId);
var notDoneEmployes = badWorkshopCreated.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.EmployeeFullName,
}).Where(l => !badWorkshopSigned.Contains(l.Id)).ToList();
var finalResult = new WorkshopResult()
{
WorkshopSearches = workshopListResult,
EmployeeNotDones = notDoneEmployes,
};
#endregion
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
#region getEmployeeNotDonBySelectWorkshop
public async Task<List<EmployeeNotDone>> GetEmployeeContract(string year, string month, long workshopId)
{
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
var allContractLeftworksList =await _context.LeftWorkList
.Where(x => x.WorkshopId == workshopId)
.Where(x =>
x.StartWorkDate <= nextMonthEnd && x.LeftWorkDate > nextMonthStart).ToListAsync();
var byWorkshopDisabledCheck = await _context.Workshops.FirstOrDefaultAsync(x=>x.id == workshopId);
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x=>x.WorkshopId == workshopId)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateContract }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (byWorkshopDisabledCheck.CreateContract)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
if (allContractLeftworks.Count == 0)
return new List<EmployeeNotDone>();
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId).ToList();
var allContractCreated =await _context.Contracts
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId) && x.WorkshopIds == workshopId)
.Where(x =>
x.ContarctStart <= nextMonthEnd && x.ContractEnd > nextMonthStart && x.IsActiveString == "true").Select(x => x.EmployeeId).ToListAsync();
return allContractLeftworks.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.EmployeeFullName,
}).Where(x => !allContractCreated.Contains(x.Id)).ToList();
#endregion
}
public async Task<List<EmployeeNotDone>> GetEmployeeContractSign(string year, string month, long workshopId)
{
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
//var badWorkshopLeftWorks = _context.LeftWorkList.Where(l => l.WorkshopId == workshopId).Select(l => new LeftWorkViewModel()
//{
// Id = l.id,
// EmployeeId = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
// StartWorkDateGr = l.StartWorkDate,
// LeftWorkDateGr = l.LeftWorkDate.AddDays(-1),
//}).Where(l =>
// (l.StartWorkDateGr <= nextMonthStart && l.LeftWorkDateGr > nextMonthStart) ||
// (l.StartWorkDateGr <= nextMonthEnd && l.LeftWorkDateGr >= nextMonthEnd) ||
// (l.StartWorkDateGr >= nextMonthStart && l.StartWorkDateGr <= nextMonthEnd) ||
// (l.LeftWorkDateGr >= nextMonthStart && l.LeftWorkDateGr <= nextMonthEnd)).ToList();
//var badWorkshopContracts = _context.Contracts.Where(ct => ct.WorkshopIds == workshopId && ct.IsActiveString == "true" && ct.Signature == "1")
// .Where(l => (l.ContarctStart <= nextMonthStart && l.ContractEnd >= nextMonthStart) ||
// (l.ContarctStart <= nextMonthEnd && l.ContractEnd >= nextMonthEnd) ||
// (l.ContarctStart >= nextMonthStart && l.ContarctStart <= nextMonthEnd) ||
// (l.ContractEnd >= nextMonthStart && l.ContractEnd <= nextMonthEnd)).Select(x => x.EmployeeId).ToList();
#region New
var byWorkshopDisabledCheck = await _context.Workshops.FirstOrDefaultAsync(x => x.id == workshopId);
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x=>x.WorkshopId == workshopId)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.SignContract }).ToListAsync();
var allContractNotSignedEmployeeIdList =await _context.Contracts
.Where(x => x.WorkshopIds == workshopId)
.Where(x =>
x.ContarctStart.Date <= nextMonthEnd && x.ContractEnd > nextMonthStart && x.IsActiveString == "true")
.Select(x => new { x.EmployeeId , x.Signature})
.ToListAsync();
var allContractNotSignedEmployeeIds = new List<long>();
foreach (var item in allContractNotSignedEmployeeIdList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.SignContract)
{
if (item.Signature != "1")
{
allContractNotSignedEmployeeIds.Add(item.EmployeeId);
}
}
}
else
{
if (byWorkshopDisabledCheck.SignContract)
{
if (item.Signature != "1")
{
allContractNotSignedEmployeeIds.Add(item.EmployeeId);
}
}
}
}
if (allContractNotSignedEmployeeIds.Count == 0)
return new List<EmployeeNotDone>();
return await _context.Employees.Where(x => allContractNotSignedEmployeeIds.Contains(x.id))
.Select(x => new EmployeeNotDone()
{
Id = x.id,
EmployeeFullName = x.FullName
}).ToListAsync();
#endregion
}
public async Task<List<EmployeeNotDone>> GetEmployeeCheckout(string year, string month, long workshopId)
{
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
//var badWorkshopLeftWorks = _context.LeftWorkList.Where(l => l.WorkshopId == workshopId).Select(l => new LeftWorkViewModel()
//{
// Id = l.id,
// EmployeeId = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
// StartWorkDateGr = l.StartWorkDate,
// LeftWorkDateGr = l.LeftWorkDate.AddDays(-1),
//}).Where(l => (l.StartWorkDateGr <= currentMonthStart && l.LeftWorkDateGr > currentMonthStart) ||
// (l.StartWorkDateGr <= currentMonthEnd && l.LeftWorkDateGr >= currentMonthEnd) ||
// (l.StartWorkDateGr >= currentMonthStart && l.StartWorkDateGr <= currentMonthEnd) ||
// (l.LeftWorkDateGr >= currentMonthStart && l.LeftWorkDateGr <= currentMonthEnd)).ToList();
//var badWorkshopCheckouts = _context.CheckoutSet.Where(ch => ch.WorkshopId == workshopId)
// .Where(ch =>
// ch.ContractStart >= currentMonthStart && ch.ContractStart < currentMonthEnd &&
// ch.IsActiveString == "true").Select(x => x.EmployeeId).ToList();
//return badWorkshopLeftWorks.Select(l => new EmployeeNotDone()
//{
// Id = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
//}).Where(l => !badWorkshopCheckouts.Contains(l.Id)).ToList();
#region New
var allContractLeftworksList = await _context.LeftWorkList
.Where(x => x.WorkshopId == workshopId)
.Where(x =>
x.StartWorkDate <= currentMonthEnd && x.LeftWorkDate > currentMonthStart).ToListAsync();
var byWorkshopDisabledCheck = await _context.Workshops.FirstOrDefaultAsync(x => x.id == workshopId);
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x => x.WorkshopId == workshopId)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.CreateCheckout }).ToListAsync();
var allContractLeftworks = new List<(long EmployeeId, long WorkshopId, string EmployeeFullName)>();
foreach (var item in allContractLeftworksList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId && x.WorkshopId == item.WorkshopId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
else
{
if (byWorkshopDisabledCheck.CreateCheckout)
{
var add = (item.EmployeeId, item.WorkshopId, item.EmployeeFullName);
allContractLeftworks.Add(add);
}
}
}
if (allContractLeftworks.Count == 0)
return new List<EmployeeNotDone>();
var allContractLeftworkEmployeeIds = allContractLeftworks.Select(x => x.EmployeeId).ToList();
var allContractCreated =await _context.CheckoutSet
.Where(x => allContractLeftworkEmployeeIds.Contains(x.EmployeeId) && x.WorkshopId == workshopId)
.Where(x =>
x.ContractStart <= currentMonthEnd && x.ContractEnd > currentMonthStart && x.IsActiveString == "true").ToListAsync();
var allContractCreatedEmoployeeIds = allContractCreated.Select(x => x.EmployeeId).ToList();
return allContractLeftworks.Select(l => new EmployeeNotDone()
{
Id = l.EmployeeId,
EmployeeFullName = l.EmployeeFullName,
}).Where(x => !allContractCreatedEmoployeeIds.Contains(x.Id)).ToList();
#endregion
}
public async Task<List<EmployeeNotDone>> GetEmployeeCheckoutSign(string year, string month, long workshopId)
{
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
var byWorkshopDisabledCheck = await _context.Workshops.FirstOrDefaultAsync(x => x.id == workshopId);
var byEmployeeDisabledCheck = await _context.EmployeeComputeOptionsSet.Where(x => x.WorkshopId == workshopId)
.Select(x => new { x.EmployeeId, x.WorkshopId, x.SignCheckout }).ToListAsync();
var allCheckoutNotSignedEmployeeIdList =await _context.CheckoutSet
.Where(x => x.WorkshopId == workshopId)
.Where(x =>
x.ContractStart <= currentMonthEnd && x.ContractEnd > currentMonthStart && x.IsActiveString == "true")
.Select(x => new { x.EmployeeId , x.Signature})
.ToListAsync();
var allCheckoutNotSignedEmployeeIds = new List<long>();
foreach (var item in allCheckoutNotSignedEmployeeIdList)
{
var toBeRemoveByEmployee =
byEmployeeDisabledCheck.FirstOrDefault(x => x.EmployeeId == item.EmployeeId);
if (toBeRemoveByEmployee != null)
{
if (toBeRemoveByEmployee.SignCheckout)
{
if (item.Signature != "1")
{
allCheckoutNotSignedEmployeeIds.Add(item.EmployeeId);
}
}
}
else
{
if (item.Signature != "1")
{
allCheckoutNotSignedEmployeeIds.Add(item.EmployeeId);
}
}
}
if (allCheckoutNotSignedEmployeeIds.Count == 0)
return new List<EmployeeNotDone>();
return _context.Employees.Where(x => allCheckoutNotSignedEmployeeIds.Contains(x.id))
.Select(x => new EmployeeNotDone()
{
Id = x.id,
EmployeeFullName = x.FullName
}).ToList();
#endregion
}
#endregion
#region PrintAll
public async Task<PrintAllContractCheckout> GetPrintAllContractDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
//var accountWorkshopList = _context.Workshops
// .Where(x => workshopList.Contains(x.id))
// .Include(x => x.LeftWorks.Where(left =>
// left.StartWorkDate <= nextMonthEnd && left.LeftWorkDate > nextMonthStart))
// .Include(x => x.Contracts2.Where(contract =>
// contract.ContarctStart.Date <= nextMonthEnd.Date && contract.ContractEnd.Date > nextMonthStart.Date &&
// contract.IsActiveString == "true")).ToList();
//var notCompletedWorkshops = accountWorkshopList.Select(workshop =>
// {
// var lefts = workshop.LeftWorks.Select(x => new { x.EmployeeId, x.EmployeeFullName }).Distinct().ToList();
// var contractToBe = lefts.Count;
// var contractCreated = workshop.Contracts2.Count();
// var createdContractEmployeeIdList = workshop.Contracts2.Select(x => x.EmployeeId).ToList();
// var contractDonePercent = contractToBe > 0 ? ((contractCreated * 100) / contractToBe) : 100;
// if (contractDonePercent < 100)
// {
// var employeeNotDone =
// lefts.Where(x => !createdContractEmployeeIdList.Contains(x.EmployeeId)).Select(l => new EmployeeNotDone()
// {
// Id = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
// }).ToList();
// return new workshopSearch()
// {
// Id = workshop.id,
// WorkshopFullName = workshop.WorkshopFullName,
// ArchiveCode = workshop.ArchiveCode,
// ContractDonePercent = contractDonePercent,
// EmployeeNotDones = employeeNotDone
// };
// }
// else
// {
// return null;
// }
// }).Where(x => x != null)
// .OrderBy(x => x.ContractDonePercent)
// .ToList();
#endregion
var getAllWorkshopContractToBe = GetWorkshopContractDone(year, month, accountId, workshopList).GetAwaiter().GetResult();
var workshopSearch = getAllWorkshopContractToBe.WorkshopSearches.Where(x => x.ContractDonePercent < 100).ToList();
var workshopFinalResult = new List<workshopSearch>();
foreach (var item in workshopSearch)
{
var employeeNotDone = GetEmployeeContract(year, month, item.Id).GetAwaiter().GetResult();
var res = new workshopSearch()
{
Id = item.Id,
WorkshopFullName = item.WorkshopFullName,
ArchiveCode = item.ArchiveCode,
ContractDonePercent = item.ContractDonePercent,
EmployeeNotDones = employeeNotDone
};
workshopFinalResult.Add(res);
}
var account = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == accountId);
var finalResult = new PrintAllContractCheckout()
{
AccountId = accountId,
AccountFullName = account.Fullname,
Year = $"{nextMonthStartFa.Year}",
Month = nextMonthStartFa.Month.ToFarsiMonthByIntNumber(),
ReportType = "تنظیم قرارداد",
WorkshopSearches = workshopFinalResult,
};
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<PrintAllContractCheckout> GetPrintAllContractSignDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
//var accountWorkshopList = _context.Workshops
// .Where(x => workshopList.Contains(x.id)).Include(x => x.LeftWorks.Where(left =>
// left.StartWorkDate <= nextMonthEnd && left.LeftWorkDate > nextMonthStart))
// .Include(x => x.Contracts2.Where(contract =>
// contract.ContarctStart.Date <= nextMonthEnd.Date && contract.ContractEnd.Date > nextMonthStart.Date &&
// contract.IsActiveString == "true")).ToList();
//var notCompletedWorkshops = accountWorkshopList.Select(workshop =>
// {
// var contractSigned = workshop.Contracts2.Count(x => x.Signature == "1");
// var contractCreated = workshop.Contracts2.Count();
// int contractSignedPercent = 0;
// if (contractSigned > 0)
// {
// contractSignedPercent = workshop.Contracts2.Any(x => x.Signature == "0") ? ((contractSigned * 100) / contractCreated) : 100;
// }
// else
// {
// contractSignedPercent = 0;
// }
// if (contractSignedPercent < 100 && contractCreated > 0)
// {
// var contractEmployeeIds = workshop.Contracts2.Where(x => x.Signature == "0")
// .Select(x => x.EmployeeId).ToList();
// var lefts = workshop.LeftWorks.Select(x => x.EmployeeId).Distinct().ToList();
// var contractNotNullEmployeeId = lefts.Where(x => contractEmployeeIds.Contains(x)).ToList();
// var employeeNotDone =
// workshop.Contracts2.Where(x => x.Signature == "0" && contractNotNullEmployeeId.Contains(x.EmployeeId)).Select(l => new EmployeeNotDone()
// {
// Id = l.EmployeeId,
// EmployeeFullName = workshop.LeftWorks.FirstOrDefault(x => x.EmployeeId == l.EmployeeId)!.EmployeeFullName,
// }).ToList();
// return new workshopSearch()
// {
// Id = workshop.id,
// WorkshopFullName = workshop.WorkshopFullName,
// ArchiveCode = workshop.ArchiveCode,
// ContractSignPercent = contractSignedPercent,
// EmployeeNotDones = employeeNotDone
// };
// }
// else
// {
// return null;
// }
// }).Where(x => x != null)
// .OrderBy(x => x.ContractSignPercent)
// .ToList();
#endregion
var getAllWorkshopContractToBe = GetWorkshopContractSignDone(year, month, accountId, workshopList).GetAwaiter().GetResult();
var workshopSearch = getAllWorkshopContractToBe.WorkshopSearches.Where(x => x.ContractSignPercent < 100).ToList();
var workshopFinalResult = new List<workshopSearch>();
foreach (var item in workshopSearch)
{
var employeeNotDone = GetEmployeeContractSign(year, month, item.Id).GetAwaiter().GetResult();
var res = new workshopSearch()
{
Id = item.Id,
WorkshopFullName = item.WorkshopFullName,
ArchiveCode = item.ArchiveCode,
ContractSignPercent = item.ContractSignPercent,
EmployeeNotDones = employeeNotDone
};
workshopFinalResult.Add(res);
}
var account = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == accountId);
var finalResult = new PrintAllContractCheckout()
{
AccountId = accountId,
AccountFullName = account.Fullname,
Year = $"{nextMonthStartFa.Year}",
Month = nextMonthStartFa.Month.ToFarsiMonthByIntNumber(),
ReportType = "امضاء قرارداد",
WorkshopSearches = workshopFinalResult,
};
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<PrintAllContractCheckout> GetPrintAllCheckoutDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
//var accountWorkshopList = _context.Workshops
// .Where(x => workshopList.Contains(x.id))
// .Include(x => x.LeftWorks.Where(left =>
// left.StartWorkDate <= currentMonthEnd && left.LeftWorkDate > currentMonthStart))
// .Include(x => x.Checkouts.Where(contract =>
// contract.ContractStart.Date <= currentMonthEnd.Date && contract.ContractEnd.Date > currentMonthStart.Date &&
// contract.IsActiveString == "true")).ToList();
//var notCompletedWorkshops = accountWorkshopList.Select(workshop =>
//{
// var lefts = workshop.LeftWorks.Select(x => new { x.EmployeeId, x.EmployeeFullName }).Distinct().ToList();
// var contractToBe = lefts.Count;
// var contractCreated = workshop.Checkouts.Count();
// var createdContractEmployeeIdList = workshop.Checkouts.Select(x => x.EmployeeId).ToList();
// var contractDonePercent = contractToBe > 0 ? ((contractCreated * 100) / contractToBe) : 100;
// if (contractDonePercent < 100)
// {
// var employeeNotDone =
// lefts.Where(x => !createdContractEmployeeIdList.Contains(x.EmployeeId)).Select(l => new EmployeeNotDone()
// {
// Id = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
// }).ToList();
// return new workshopSearch()
// {
// Id = workshop.id,
// WorkshopFullName = workshop.WorkshopFullName,
// ArchiveCode = workshop.ArchiveCode,
// CheckoutDonePercent = contractDonePercent,
// EmployeeNotDones = employeeNotDone
// };
// }
// else
// {
// return null;
// }
//}).Where(x => x != null)
// .OrderBy(x => x.ContractDonePercent)
// .ToList();
#endregion
var getAllWorkshopContractToBe = GetWorkshopCheckoutDone(year, month, accountId, workshopList).GetAwaiter().GetResult();
var workshopSearch = getAllWorkshopContractToBe.WorkshopSearches.Where(x => x.CheckoutDonePercent < 100).ToList();
var workshopFinalResult = new List<workshopSearch>();
foreach (var item in workshopSearch)
{
var employeeNotDone = GetEmployeeCheckout(year, month, item.Id).GetAwaiter().GetResult();
var res = new workshopSearch()
{
Id = item.Id,
WorkshopFullName = item.WorkshopFullName,
ArchiveCode = item.ArchiveCode,
CheckoutDonePercent = item.CheckoutDonePercent,
EmployeeNotDones = employeeNotDone
};
workshopFinalResult.Add(res);
}
var account = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == accountId);
var finalResult = new PrintAllContractCheckout()
{
AccountId = accountId,
AccountFullName = account.Fullname,
Year = year,
Month = month.ToFarsiMonthByNumber(),
ReportType = "تنظیم تصفیه حساب",
WorkshopSearches = workshopFinalResult,
};
//var finalResult = new PrintAllContractCheckout()
//{
// AccountId = accountId,
// AccountFullName = _accountContext.Accounts.FirstOrDefault(x => x.id == accountId)?.Fullname,
// Year = year,
// Month = month.ToFarsiMonthByNumber(),
// ReportType = "تنظیم تصفیه حساب",
// WorkshopSearches = notCompletedWorkshops,
//};
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
public async Task<PrintAllContractCheckout> GetPrintAllCheckoutSignDone(string year, string month, long accountId,
List<long> workshopList)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
string nowFa = "";
if (!string.IsNullOrWhiteSpace(year) && !string.IsNullOrWhiteSpace(month))
{
nowFa = $"{year}/{month}/01";
}
else
{
nowFa = $"{(DateTime.Now.ToFarsi()).Substring(0, 8)}01";
}
var currentEndOfMonth = nowFa.FindeEndOfMonth();
var currentMonthStart = nowFa.ToGeorgianDateTime();
var currentMonthEnd = currentEndOfMonth.ToGeorgianDateTime();
int currentYear = Convert.ToInt32(nowFa.Substring(0, 4));
var currentMonth = Convert.ToInt32(nowFa.Substring(5, 2));
var nextMonthStartFa = new PersianDateTime(currentYear, currentMonth, 1).AddMonths(1);
var nextMonthStart = ($"{nextMonthStartFa}").ToGeorgianDateTime();
var nextMonthEnd = (($"{nextMonthStartFa}").FindeEndOfMonth()).ToGeorgianDateTime();
#region New
//var accountWorkshopList = _context.Workshops
// .Where(x => workshopList.Contains(x.id))
// .Include(x => x.Checkouts.Where(contract =>
// contract.ContractStart.Date <= currentMonthEnd.Date && contract.ContractEnd.Date > currentMonthStart.Date &&
// contract.IsActiveString == "true")).ToList();
//var notCompletedWorkshops = accountWorkshopList.Select(workshop =>
// {
// var checkoutSigned = workshop.Checkouts.Count(x => x.Signature == "1");
// var checkoutCreated = workshop.Checkouts.Count();
// var contractSignedPercent = workshop.Checkouts.Any(x => x.Signature == "0") ? ((checkoutSigned * 100) / checkoutCreated) : 100;
// if (contractSignedPercent < 100 && checkoutCreated > 0)
// {
// var employeeNotDone =
// workshop.Checkouts.Where(x => x.Signature == "0").Select(l => new EmployeeNotDone()
// {
// Id = l.EmployeeId,
// EmployeeFullName = l.EmployeeFullName,
// }).ToList();
// return new workshopSearch()
// {
// Id = workshop.id,
// WorkshopFullName = workshop.WorkshopFullName,
// ArchiveCode = workshop.ArchiveCode,
// CheckoutSignPercent = contractSignedPercent,
// EmployeeNotDones = employeeNotDone
// };
// }
// else
// {
// return null;
// }
// }).Where(x => x != null)
// .OrderBy(x => x.CheckoutSignPercent)
// .ToList();
#endregion
var getAllWorkshopContractToBe = GetWorkshopCheckoutSignDone(year, month, accountId, workshopList).GetAwaiter().GetResult();
var workshopSearch = getAllWorkshopContractToBe.WorkshopSearches.Where(x => x.CheckoutSignPercent < 100).ToList();
var workshopFinalResult = new List<workshopSearch>();
foreach (var item in workshopSearch)
{
var employeeNotDone = GetEmployeeCheckoutSign(year, month, item.Id).GetAwaiter().GetResult();
var res = new workshopSearch()
{
Id = item.Id,
WorkshopFullName = item.WorkshopFullName,
ArchiveCode = item.ArchiveCode,
CheckoutSignPercent = item.CheckoutSignPercent,
EmployeeNotDones = employeeNotDone
};
workshopFinalResult.Add(res);
}
var account = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == accountId);
var finalResult = new PrintAllContractCheckout()
{
AccountId = accountId,
AccountFullName = account.Fullname,
Year = year,
Month = month.ToFarsiMonthByNumber(),
ReportType = "امضاء تصفیه حساب",
WorkshopSearches = workshopFinalResult,
};
//var finalResult = new PrintAllContractCheckout()
//{
// AccountId = accountId,
// AccountFullName = _accountContext.Accounts.FirstOrDefault(x => x.id == accountId)?.Fullname,
// Year = year,
// Month = month.ToFarsiMonthByNumber(),
// ReportType = "امضاء تصفیه حساب",
// WorkshopSearches = notCompletedWorkshops,
//};
Console.WriteLine("ajax >>>>>: " + watch.Elapsed);
return finalResult;
}
#endregion
}