merge from teamwork

This commit is contained in:
MahanCh
2025-05-26 17:30:14 +03:30
parent 7bcc052ec6
commit eaaab56421
8 changed files with 3673 additions and 3372 deletions

View File

@@ -74,7 +74,8 @@ public class AdminMonthlyOverviewListViewModel
public string AdminFullName { get; set; } public string AdminFullName { get; set; }
public string EmployerName { get; set; } public string EmployerName { get; set; }
public string EmployerPhoneNumber { get; set; } public string EmployerPhoneNumber { get; set; }
public int EmployeeCount { get; set; } public int ContractEmployeeCount { get; set; }
public int CheckoutEmployeeCount { get; set; }
public AdminMonthlyOverviewStatus Status { get; set; } public AdminMonthlyOverviewStatus Status { get; set; }
public bool IsBlock { get; set; } public bool IsBlock { get; set; }
} }

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using _0_Framework.Application; using _0_Framework.Application;
@@ -25,6 +26,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
public async Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel) public async Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel)
{ {
var year = searchModel.Year; var year = searchModel.Year;
var month = searchModel.Month; var month = searchModel.Month;
var accountId = searchModel.AdminAccountId; var accountId = searchModel.AdminAccountId;
@@ -32,6 +34,9 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
if ($"{year:0000}/{month:00}/01".TryToGeorgianDateTime(out var targetDate) == false) if ($"{year:0000}/{month:00}/01".TryToGeorgianDateTime(out var targetDate) == false)
return []; return [];
_ = $"{year:0000}/{month:00}/01".ToGeorgianDateTime().AddMonthsFa(1, out var nextMonth);
// دریافت اطلاعات ادمین // دریافت اطلاعات ادمین
var adminAccount = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == searchModel.AdminAccountId); var adminAccount = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == searchModel.AdminAccountId);
@@ -40,28 +45,28 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
return []; return [];
// دریافت طرف حساب های معتبر برای تاریخ مورد نظر // دریافت طرف حساب های معتبر برای تاریخ مورد نظر
var contractingPartyIds = await _companyContext.InstitutionContractSet.AsNoTracking() var contractingPartyIds = _companyContext.InstitutionContractSet.AsNoTracking()
.Where(c => c.ContractStartGr <= targetDate && c.ContractEndGr >= targetDate && c.IsActiveString == "true") .Where(c => c.ContractStartGr <= targetDate && c.ContractEndGr >= targetDate && c.IsActiveString == "true")
.Select(c => c.ContractingPartyId) .Select(c => c.ContractingPartyId);
.ToListAsync();
// دریافت کارگاه‌های مرتبط با اکانت // دریافت کارگاه‌های مرتبط با اکانت
var accountWorkshopIds = await _companyContext.WorkshopAccounts var workshopAccounts = _companyContext.WorkshopAccounts
.AsNoTracking() .AsNoTracking()
.Where(w => w.AccountId == accountId) .Where(w => w.AccountId == accountId)
.Select(w => w.WorkshopId) .Select(w => w.WorkshopId);
.ToListAsync();
var workshopsHasLeftWorkEmployees = _companyContext.LeftWorkList.Where(x =>
(x.StartWorkDate <= targetDate && x.LeftWorkDate.AddDays(-1) >= targetDate)
|| (x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth)&& workshopAccounts.Contains(x.WorkshopId)).Select(x=>x.WorkshopId);
// دریافت کارگاه‌های مربوط به طرف حساب و اکانت // دریافت کارگاه‌های مربوط به طرف حساب و اکانت
// Replace the selected code with the following to return a list of anonymous objects containing both workshop and contractingParty // Replace the selected code with the following to return a list of anonymous objects containing both workshop and contractingParty
var workshopsWithContractingParty = await _companyContext.Workshops
var workshopsWithContractingParty =await _companyContext.Workshops
.AsNoTracking() .AsNoTracking()
.Where(w => accountWorkshopIds.Contains(w.id)) .Where(w => workshopsHasLeftWorkEmployees.Contains(w.id))
.Include(w => w.WorkshopEmployers) .Include(w => w.WorkshopEmployers)
.ThenInclude(we => we.Employer) .ThenInclude(we => we.Employer)
.ThenInclude(e => e.ContractingParty).AsSplitQuery(). .ThenInclude(e => e.ContractingParty).AsSplitQuery().
@@ -78,8 +83,10 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
}) })
.ToListAsync(); .ToListAsync();
var workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList(); var workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
// پیدا کردن کارگاه‌هایی که قبلاً برای این ماه/سال AdminMonthlyOverview دارند // پیدا کردن کارگاه‌هایی که قبلاً برای این ماه/سال AdminMonthlyOverview دارند
var adminMonthlyOverviewWorkshopIds = await _companyContext.AdminMonthlyOverviews var adminMonthlyOverviewWorkshopIds = await _companyContext.AdminMonthlyOverviews
.AsNoTracking() .AsNoTracking()
@@ -92,13 +99,14 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
.Except(adminMonthlyOverviewWorkshopIds) .Except(adminMonthlyOverviewWorkshopIds)
.ToList(); .ToList();
// ایجاد رکوردهای AdminMonthlyOverview که وجود ندارند // ایجاد رکوردهای AdminMonthlyOverview که وجود ندارند
if (notExistAdminMonthlyReviewsWorkshopIds.Any()) if (notExistAdminMonthlyReviewsWorkshopIds.Any())
await CreateRangeAdminMonthlyOverview(notExistAdminMonthlyReviewsWorkshopIds, month, year); await CreateRangeAdminMonthlyOverview(notExistAdminMonthlyReviewsWorkshopIds, month, year);
// به‌روزرسانی وضعیت‌ها // به‌روزرسانی وضعیت‌ها
await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds); await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds, targetDate, nextMonth);
if (searchModel.ActivationStatus != IsActive.None) if (searchModel.ActivationStatus != IsActive.None)
{ {
@@ -125,16 +133,21 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => searchWorkshopId.Contains(x.WorkshopId)); adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => searchWorkshopId.Contains(x.WorkshopId));
} }
var employeeCheckoutCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= targetDate && x.LeftWorkDate.AddDays(-1) >= targetDate && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var employeeContractCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var adminMonthlyOverviewsList = await adminMonthlyOverviewsQuery.ToListAsync(); var adminMonthlyOverviewsList = await adminMonthlyOverviewsQuery.ToListAsync();
var employeeCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate < targetDate && x.LeftWorkDate > targetDate && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var adminMonthlyOverviewList = adminMonthlyOverviewsList.Select(x => var adminMonthlyOverviewList = adminMonthlyOverviewsList.Select(x =>
{ {
var employeeCount = employeeCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId); var employeeCheckoutCount = employeeCheckoutCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var employeeContractCount = employeeContractCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var workshopWithContractingParty = var workshopWithContractingParty =
workshopsWithContractingParty.FirstOrDefault(w => w.Workshop.id == x.WorkshopId); workshopsWithContractingParty.FirstOrDefault(w => w.Workshop.id == x.WorkshopId);
@@ -154,12 +167,14 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
EmployerName = employer?.FullName ?? "", EmployerName = employer?.FullName ?? "",
EmployerPhoneNumber = employer?.Phone ?? "", EmployerPhoneNumber = employer?.Phone ?? "",
AdminFullName = adminAccount.Fullname, AdminFullName = adminAccount.Fullname,
EmployeeCount = employeeCount?.EmployeeCounts ?? 0, CheckoutEmployeeCount = employeeCheckoutCount?.EmployeeCounts ?? 0,
ContractEmployeeCount = employeeContractCount?.EmployeeCounts ?? 0,
AgentPhoneNumber = "", AgentPhoneNumber = "",
IsBlock = contractingParty?.IsBlock == "true" IsBlock = contractingParty?.IsBlock == "true"
}; };
}).OrderBy(x => x.IsBlock).ToList(); }).OrderBy(x => x.IsBlock).ToList();
return adminMonthlyOverviewList; return adminMonthlyOverviewList;
} }
@@ -193,51 +208,62 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
} }
private async Task UpdateAdminMonthlyOverviewStatus(int year, int month, List<long> workshopIds) private async Task UpdateAdminMonthlyOverviewStatus(int year, int month, List<long> workshopIds, DateTime targetDate, DateTime nextMonth)
{ {
var targetDate = $"{year:0000}/{month:00}/01".ToGeorgianDateTime();
_ = $"{year:0000}/{month:00}/01".ToGeorgianDateTime().AddMonthsFa(1, out var nextMonth);
var workingCheckoutEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= targetDate && x.LeftWorkDate.AddDays(-1) >= targetDate)
.Select(x => new { x.WorkshopId, x.EmployeeId });
var workingEmployeeIds = (await _companyContext.LeftWorkList.AsNoTracking() var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= targetDate && x.LeftWorkDate >= targetDate) .Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth)
.Select(x => new { x.WorkshopId, x.EmployeeId }) .Select(x => new { x.WorkshopId, x.EmployeeId });
.ToListAsync()).Distinct();
var contractSet = (await _companyContext.Contracts.AsNoTracking() var contractSet = (await _companyContext.Contracts.AsNoTracking()
.Where(x => x.ContarctStart <= nextMonth && x.ContractEnd >= nextMonth) .Where(x => x.ContarctStart <= nextMonth && x.ContractEnd >= nextMonth && workshopIds.Contains(x.WorkshopIds))
.Select(x => new { x.WorkshopIds, x.EmployeeId }) .Select(x => new { x.WorkshopIds, x.EmployeeId })
.ToListAsync()) .ToListAsync())
.Select(x => (x.WorkshopIds, x.EmployeeId)) .Select(x => (x.WorkshopIds, x.EmployeeId))
.ToHashSet(); .ToHashSet();
var checkoutSet = (await _companyContext.CheckoutSet.AsNoTracking() var checkoutSet = (await _companyContext.CheckoutSet.AsNoTracking()
.Where(x => x.ContractStart <= targetDate && x.ContractEnd >= targetDate) .Where(x => x.ContractStart <= targetDate && x.ContractEnd >= targetDate && workshopIds.Contains(x.WorkshopId))
.Select(x => new { x.WorkshopId, x.EmployeeId }) .Select(x => new { x.WorkshopId, x.EmployeeId })
.ToListAsync()) .ToListAsync())
.Select(x => (x.WorkshopId, x.EmployeeId)) .Select(x => (x.WorkshopId, x.EmployeeId))
.ToHashSet(); .ToHashSet();
var grouped = workingEmployeeIds.GroupBy(x => x.WorkshopId).ToList(); var workingCheckoutGrouping = workingCheckoutEmployeeIds.GroupBy(x => x.WorkshopId).ToList();
var workingContractGrouping = workingContractEmployeeIds.GroupBy(x => x.WorkshopId).Select(x => new
{
WorkshopId = x.Key,
Data = x.ToList()
}).ToList();
var workshopsWithFullContracts = grouped
.Where(g => g.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId)))) var workshopsContractWithoutEmployees = workshopIds.Except(workingContractGrouping.Select(x => x.WorkshopId)).ToList();
.Select(g => g.Key)
var workshopsWithFullContracts = workingContractGrouping
.Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.WorkshopId)
.ToList(); .ToList();
var workshopsWithFullCheckout = grouped var workshopsWithFullCheckout = workingCheckoutGrouping
.Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId)))) .Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.Key) .Select(g => g.Key)
.ToList(); .ToList();
var fullyCoveredWorkshops = workshopsWithFullContracts.Intersect(workshopsWithFullCheckout).ToList(); var fullyCoveredWorkshops = workshopsWithFullContracts.Intersect(workshopsWithFullCheckout).ToList();
var notFullyCoveredWorkshops = grouped //var notFullyCoveredWorkshops = groupedCheckout
.Where(g => g.Any(emp => // .Where(g => g.Any(emp =>
!contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) || // !contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) ||
!checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId)))) // !checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.Key) // .Select(g => g.Key)
.ToList(); // .ToList();
var notFullyCoveredWorkshops = workshopIds.Except(fullyCoveredWorkshops);
var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews
.Where(x => x.Month == month && x.Year == year); .Where(x => x.Month == month && x.Year == year);

View File

@@ -41,82 +41,134 @@
@* Search *@ @* Search *@
<div class="container-fluid d-block"> <div class="container-fluid d-none d-md-block">
<div class="row"> <div class="row">
<div class="search-box card"> <div class="search-box card">
<div class="row"> <div class="row">
<div class="col-12"> <div class="col-12">
<div class="tw-grid tw-grid-cols-2 md:tw-grid-cols-12 gap-2"> <div class="tw-grid tw-grid-cols-2 md:tw-grid-cols-12 gap-2">
<div class=""> <div class="">
<select class="form-select" id="year-select" name="YearFa" asp-for="SearchModel.Year"> <select class="form-select" id="year-select" name="YearFa" asp-for="SearchModel.Year">
<option value="0" disabled="disabled">سال</option> <option value="0" disabled="disabled">سال</option>
@foreach (var year in Model.YearlyList) @foreach (var year in Model.YearlyList)
{ {
<option value=@year>@year</option> <option value=@year>@year</option>
} }
</select> </select>
</div> </div>
<div class=""> <div class="">
<select class="form-select" id="month-select" name="MonthFa"> <select class="form-select" id="month-select" name="MonthFa">
<option value="0" disabled="disabled">ماه</option> <option value="0" disabled="disabled">ماه</option>
<option value="1">فروردین</option> <option value="1">فروردین</option>
<option value="2">اردیبهشت</option> <option value="2">اردیبهشت</option>
<option value="3">خرداد</option> <option value="3">خرداد</option>
<option value="4">تیر</option> <option value="4">تیر</option>
<option value="5">مرداد</option> <option value="5">مرداد</option>
<option value="6">شهریور</option> <option value="6">شهریور</option>
<option value="7">مهر</option> <option value="7">مهر</option>
<option value="8">آبان</option> <option value="8">آبان</option>
<option value="9">آذر</option> <option value="9">آذر</option>
<option value="10">دی</option> <option value="10">دی</option>
<option value="11">بهمن</option> <option value="11">بهمن</option>
<option value="12">اسفند</option> <option value="12">اسفند</option>
</select> </select>
</div> </div>
<div class="tw-col-span-1 md:tw-col-span-2"> <div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select EmployerSelect2Option" aria-label="انتخاب کارفرما" id="employer-select" name="employerName"> <select class="form-select EmployerSelect2Option" aria-label="انتخاب کارفرما" id="employer-select" name="employerName">
<option value="0">انتخاب کارفرما</option> <option value="0">انتخاب کارفرما</option>
</select> </select>
</div> </div>
<div class="tw-col-span-1 md:tw-col-span-2"> <div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select WorkshopSelect2Option" aria-label="نام کارگاه /شماره بایگانی ..." id="workshop-select" data-selected-name="نام کارگاه /شماره بایگانی ..." > <select class="form-select WorkshopSelect2Option" aria-label="نام کارگاه /شماره بایگانی ..." id="workshop-select" data-selected-name="نام کارگاه /شماره بایگانی ..." >
<option value="0"> نام کارگاه /شماره بایگانی </option> <option value="0"> نام کارگاه /شماره بایگانی </option>
</select> </select>
</div> </div>
<div class="tw-col-span-1 md:tw-col-span-2"> <div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select AdminPersonnelNameSelect2Option" aria-label="انتخاب اعضاء" id="admin-personnel-select" name="adminpersonnelName"> <select class="form-select AdminPersonnelNameSelect2Option" aria-label="انتخاب اعضاء" id="admin-personnel-select" name="adminpersonnelName">
<option value=""> انتخاب اعضاء </option> <option value=""> انتخاب اعضاء </option>
</select> </select>
</div> </div>
<div class=""> <div class="">
<select class="form-select" id="status-select" name="status"> <select class="form-select" id="status-select" name="status">
<option value="2" selected="selected">فعال/غیر فعال</option> <option value="2" selected="selected">فعال/غیر فعال</option>
<option value="1">فعال</option> <option value="1">فعال</option>
<option value="0">غیر فعال</option> <option value="0">غیر فعال</option>
</select> </select>
</div> </div>
<div class="tw-flex tw-items-center tw-col-span-2 gap-2"> <div class="tw-flex tw-items-center tw-col-span-2 gap-2">
<button class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center" id="searchBtn" type="submit"> <button class="btn-search btn-w-size btn-search-click text-nowrap d-flex align-items-center justify-content-center" id="searchBtn" type="submit">
<span>جستجو</span> <span>جستجو</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="white"/> <circle cx="11" cy="11" r="6" stroke="white"/>
<path d="M20 20L17 17" stroke="white" stroke-linecap="round"/> <path d="M20 20L17 17" stroke="white" stroke-linecap="round"/>
</svg> </svg>
</button> </button>
<a href="/AdminNew/Company/MonthlyOverview" class="tw-h-full btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable"> <a href="/AdminNew/Company/MonthlyOverview" class="tw-h-full btn-clear-filter btn-w-size text-nowrap d-flex align-items-center justify-content-center disable">
<span>حذف جستجو</span> <span>حذف جستجو</span>
</a> </a>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- Advance Search Box -->
<div class="tw-block md:tw-hidden tw-mb-1">
<div class="tw-flex tw-items-center tw-justify-between">
<div class="search-box tw-w-full tw-bg-white tw-p-2">
<div class="tw-flex tw-items-center tw-justify-between tw-gap-2 tw-mb-2">
<div class="tw-w-full">
<select class="form-select" id="year-select-mobile" name="YearFa" asp-for="SearchModel.Year">
<option value="0" disabled="disabled">سال</option>
@foreach (var year in Model.YearlyList)
{
<option value=@year>@year</option>
}
</select>
</div>
<div class="tw-w-full">
<select class="form-select" id="month-select-mobile" name="MonthFa">
<option value="0" disabled="disabled">ماه</option>
<option value="1">فروردین</option>
<option value="2">اردیبهشت</option>
<option value="3">خرداد</option>
<option value="4">تیر</option>
<option value="5">مرداد</option>
<option value="6">شهریور</option>
<option value="7">مهر</option>
<option value="8">آبان</option>
<option value="9">آذر</option>
<option value="10">دی</option>
<option value="11">بهمن</option>
<option value="12">اسفند</option>
</select>
</div>
</div>
<div class="tw-flex tw-justify-between tw-text-center">
<button class="btn-search tw-flex tw-items-center tw-justify-center tw-w-full" type="button" data-bs-toggle="modal" data-bs-target="#searchModal">
<span>جستجو پیشرفته</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none">
<circle cx="11" cy="11" r="6" stroke="white"/>
<path d="M20 20L17 17" stroke="white" stroke-linecap="round"/>
</svg>
</button>
</div>
@* TabBar *@ </div>
</div>
</div>
<!-- End Advance Search Box -->
@* TabBar *@
<div class="tw-overflow-x-auto tw-w-full custom-scrollbar-x mt-3"> <div class="tw-overflow-x-auto tw-w-full custom-scrollbar-x mt-3">
<div class="tab-bar tw-flex tw-gap-1 tw-whitespace-nowrap tw-w-max "> <div class="tab-bar tw-flex tw-gap-1 tw-whitespace-nowrap tw-w-max ">
<button class="tab-bar__tab u-tactile tab-bar__tab--active js-document-click" value="0"> <button class="tab-bar__tab u-tactile tab-bar__tab--active js-document-click" value="0">
@@ -178,7 +230,14 @@
<div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-step4" style="display: none;"> <div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-step4" style="display: none;">
</div> </div>
<div id="loadingSkeleton" style="display: contents;">
@for (int j = 0; j < 30; j++)
{
<div class="skeleton-loader" style="margin: 3px 0 !important;height: 35px;"></div>
}
</div>
</div> </div>
</div> </div>
@@ -187,30 +246,20 @@
<div class="monthly-table "> <div class="monthly-table ">
<div class="monthly-table__head tw-font-[600] tw-mb-1 tw-flex tw-h-[35px] tw-items-center tw-whitespace-nowrap tw-rounded-[5px] tw-bg-[#3B73D0] tw-px-2 tw-text-white tw-text-[14px]"> <div class="monthly-table__head tw-font-[600] tw-mb-1 tw-flex tw-h-[35px] tw-items-center tw-whitespace-nowrap tw-rounded-[5px] tw-bg-[#3B73D0] tw-px-2 tw-text-white tw-text-[14px]">
<div class="monthly-table__head-cell tw-w-[2%]">ردیف</div> <div class="monthly-table__head-cell tw-w-[2%]">ردیف</div>
<div class="monthly-table__head-cell tw-w-[13%] tw-text-center">ش بایگانی</div> <div class="monthly-table__head-cell tw-w-[7%] tw-text-center">ش بایگانی</div>
<div class="monthly-table__head-cell tw-w-[15%] tw-text-center">نام کارگاه</div> <div class="monthly-table__head-cell tw-w-[18%] tw-text-start">نام کارگاه</div>
<div class="monthly-table__head-cell tw-w-[15%] tw-text-center">نام کارفرما</div> <div class="monthly-table__head-cell tw-w-[14%] tw-text-start">نام کارفرما</div>
<div class="monthly-table__head-cell tw-w-[5%] tw-text-center">استان</div> <div class="monthly-table__head-cell tw-w-[7%] tw-text-center">استان</div>
<div class="monthly-table__head-cell tw-w-[5%] tw-text-center">شهرستان</div> <div class="monthly-table__head-cell tw-w-[7%] tw-text-center">شهرستان</div>
<div class="monthly-table__head-cell tw-w-[35%] tw-text-center">جزئیات نشانی </div> <div class="monthly-table__head-cell tw-w-[35%] tw-text-start">جزئیات نشانی </div>
<div class="monthly-table__head-cell tw-w-[10%] tw-text-center">وضعیت</div> <div class="monthly-table__head-cell tw-w-[10%] tw-text-center">وضعیت</div>
</div> </div>
<div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-stepAll"> <div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-stepAll">
</div> </div>
</div> </div>
</div> </div>
@* //--------- Mobile --------- *@ @* //--------- Mobile --------- *@
@* Monthly Table Mobile *@ @* Monthly Table Mobile *@
<div class="monthly-card-mobile tw-block md:tw-hidden " id="overviewSteps-mobile"> <div class="monthly-card-mobile tw-block md:tw-hidden " id="overviewSteps-mobile">
@@ -218,7 +267,7 @@
<div class="monthly-table__head tw-font-[500] tw-mb-[3px] tw-flex tw-h-[35px] tw-items-center tw-whitespace-nowrap tw-rounded-[5px] tw-bg-[#3B73D0] tw-px-2 tw-text-white tw-text-[8px] md:tw-font-[600] md:tw-text-[14px]"> <div class="monthly-table__head tw-font-[500] tw-mb-[3px] tw-flex tw-h-[35px] tw-items-center tw-whitespace-nowrap tw-rounded-[5px] tw-bg-[#3B73D0] tw-px-2 tw-text-white tw-text-[8px] md:tw-font-[600] md:tw-text-[14px]">
<div class="monthly-table__head-cell tw-w-[5%] tw-text tw-text-center">ردیف</div> <div class="monthly-table__head-cell tw-w-[5%] tw-text tw-text-center">ردیف</div>
<div class="monthly-table__head-cell tw-w-[20%] tw-text-center">ش بایگانی</div> <div class="monthly-table__head-cell tw-w-[20%] tw-text-center">ش بایگانی</div>
<div class="monthly-table__head-cell tw-w-[25%] tw-text-center">نام کارگاه</div> <div class="monthly-table__head-cell tw-w-[25%] tw-text-right">نام کارگاه</div>
<div class="monthly-table__head-cell tw-w-[40%] tw-text-center">شماره تماس نماینده</div> <div class="monthly-table__head-cell tw-w-[40%] tw-text-center">شماره تماس نماینده</div>
<div class="monthly-table__head-cell tw-w-[10%] tw-text-end">عملیات</div> <div class="monthly-table__head-cell tw-w-[10%] tw-text-end">عملیات</div>
</div> </div>
@@ -259,6 +308,78 @@
</div> </div>
<!-- Modal From Bottom For Advance Search -->
<div class="modal fade" id="searchModal" tabindex="-1" data-bs-backdrop="static" aria-labelledby="searchModalModalLabel" aria-hidden="true">
<div class="modal-dialog modal-fullscreen">
<div class="modal-content">
<div class="modal-header d-block text-center pb-0">
<div class="iphone-line mx-auto mb-3"></div>
<h5 class="modal-title mb-4 text-start" id="searchModalLabel">جستجوی پیشرفته</h5>
</div>
<div class="modal-body pt-0 mb-3">
<div class="container-fluid search-box">
<div id="overlaySearchAdvance" class=""></div>
<div class="row">
<div class="tw-grid tw-grid-cols-2 md:tw-grid-cols-12 gap-2">
<div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select EmployerSelect2OptionMobile" aria-label="انتخاب کارفرما" id="employer-select-mobile" name="employerName">
<option value="0">انتخاب کارفرما</option>
</select>
</div>
<div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select WorkshopSelect2OptionMobile" aria-label="نام کارگاه /شماره بایگانی ..." id="workshop-select-mobile" data-selected-name="نام کارگاه /شماره بایگانی ...">
<option value="0"> نام کارگاه /شماره بایگانی </option>
</select>
</div>
<div class="tw-col-span-1 md:tw-col-span-2">
<select class="form-select AdminPersonnelNameSelect2OptionMobile" aria-label="انتخاب اعضاء" id="admin-personnel-select-mobile" name="adminpersonnelName">
<option value=""> انتخاب اعضاء </option>
</select>
</div>
<div class="">
<select class="form-select" id="status-select-mobile" name="status">
<option value="2" selected="selected">فعال/غیر فعال</option>
<option value="1">فعال</option>
<option value="0">غیر فعال</option>
</select>
</div>
</div>
<div class="col-12">
<a href="/AdminNew/Company/MonthlyOverview" class="btn-clear-filter disable py-2 text-center d-block w-100 mt-2">
<span class="w-100">حذف جستجو</span>
</a>
</div>
</div>
</div>
</div>
<div class="modal-footer justify-content-center align-items-center">
<div class="container-fluid">
<div class="row">
<div class="col-6 text-end">
<button type="button" class="btn-cancel w-100" data-bs-dismiss="modal">بستن</button>
</div>
<div class="col-6 text-start">
<button type="submit" class="btn-search btn-search-click-mobile w-100">جستجو</button>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- End Modal From Bottom For Advance Search -->
@section Script { @section Script {
<script src="~/assetsclient/js/site.js?ver=@adminVersion"></script> <script src="~/assetsclient/js/site.js?ver=@adminVersion"></script>
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script> <script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>

File diff suppressed because it is too large Load Diff

View File

@@ -18,5 +18,4 @@
"postcss-cli": "^11.0.1", "postcss-cli": "^11.0.1",
"tailwindcss": "^3.4.17" "tailwindcss": "^3.4.17"
} }
} }
د

View File

@@ -156,10 +156,10 @@
visibility: hidden; visibility: hidden;
opacity: 0; opacity: 0;
width: max-content; width: max-content;
max-width: 300px; /*max-width: 400px;*/
background-color: #333; background-color: #333;
color: #fff; color: #fff;
text-align: center; text-align: start;
border-radius: 4px; border-radius: 4px;
padding: 5px 8px; padding: 5px 8px;
z-index: 100000; z-index: 100000;
@@ -221,7 +221,7 @@
.monthly-table__toggle-value { .monthly-table__toggle-value {
font-weight: 400; font-weight: 400;
font-size: 12px; font-size: 12px;
color: #818181 color: #818181;
} }
/*Awaiting reference Table*/ /*Awaiting reference Table*/
.monthly-table__stage-button { .monthly-table__stage-button {
@@ -272,10 +272,15 @@
.monthly-table__status-button { .monthly-table__status-button {
width: 166px; width: 166px;
height: 35px; height: 35px;
} }
.monthly-table__status-button--documents-setup { .monthly-table__status-button--documents-setup {
background-color: #C8C8C8 !important; background-color: #C8C8C8 !important;
} }
}
@media(max-width:768px) {
.monthly-table__toggle-value {
white-space: break-spaces;
}
} }

File diff suppressed because one or more lines are too long