Amo BackEnd Bug fixed And new fron Feature
This commit is contained in:
@@ -67,6 +67,7 @@ public class AdminMonthlyOverviewListViewModel
|
||||
public long WorkshopId { get; set; }
|
||||
public string WorkshopName { get; set; }
|
||||
public string WorkshopArchiveCode { get; set; }
|
||||
public int WorkshopArchiveCodeInt { get; set; }
|
||||
public string Province { get; set; }
|
||||
public string City { get; set; }
|
||||
public string Address { get; set; }
|
||||
@@ -74,7 +75,8 @@ public class AdminMonthlyOverviewListViewModel
|
||||
public string AdminFullName { get; set; }
|
||||
public string EmployerName { 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 bool IsBlock { get; set; }
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
|
||||
public async Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel)
|
||||
{
|
||||
|
||||
|
||||
var year = searchModel.Year;
|
||||
var month = searchModel.Month;
|
||||
var accountId = searchModel.AdminAccountId;
|
||||
@@ -34,6 +34,9 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
if ($"{year:0000}/{month:00}/01".TryToGeorgianDateTime(out var targetDate) == false)
|
||||
return [];
|
||||
|
||||
_ = $"{year:0000}/{month:00}/01".ToGeorgianDateTime().AddMonthsFa(1, out var nextMonth);
|
||||
|
||||
|
||||
// دریافت اطلاعات ادمین
|
||||
var adminAccount = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == searchModel.AdminAccountId);
|
||||
|
||||
@@ -47,21 +50,23 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
.Select(c => c.ContractingPartyId);
|
||||
|
||||
// دریافت کارگاههای مرتبط با اکانت
|
||||
var accountWorkshopIds = _companyContext.WorkshopAccounts
|
||||
var workshopAccounts = _companyContext.WorkshopAccounts
|
||||
.AsNoTracking()
|
||||
.Where(w => w.AccountId == accountId)
|
||||
.Select(w => w.WorkshopId);
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
var workshopsWithContractingParty =await _companyContext.Workshops
|
||||
var workshopsWithContractingParty = await _companyContext.Workshops
|
||||
.AsNoTracking()
|
||||
.Where(w => accountWorkshopIds.Contains(w.id))
|
||||
.Where(w => workshopsHasLeftWorkEmployees.Contains(w.id))
|
||||
.Include(w => w.WorkshopEmployers)
|
||||
.ThenInclude(we => we.Employer)
|
||||
.ThenInclude(e => e.ContractingParty).AsSplitQuery().
|
||||
@@ -78,8 +83,10 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
})
|
||||
.ToListAsync();
|
||||
|
||||
|
||||
var workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
|
||||
|
||||
|
||||
// پیدا کردن کارگاههایی که قبلاً برای این ماه/سال AdminMonthlyOverview دارند
|
||||
var adminMonthlyOverviewWorkshopIds = await _companyContext.AdminMonthlyOverviews
|
||||
.AsNoTracking()
|
||||
@@ -92,13 +99,14 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
.Except(adminMonthlyOverviewWorkshopIds)
|
||||
.ToList();
|
||||
|
||||
|
||||
|
||||
|
||||
// ایجاد رکوردهای AdminMonthlyOverview که وجود ندارند
|
||||
if (notExistAdminMonthlyReviewsWorkshopIds.Any())
|
||||
await CreateRangeAdminMonthlyOverview(notExistAdminMonthlyReviewsWorkshopIds, month, year);
|
||||
|
||||
// بهروزرسانی وضعیتها
|
||||
await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds);
|
||||
await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds, targetDate, nextMonth);
|
||||
|
||||
if (searchModel.ActivationStatus != IsActive.None)
|
||||
{
|
||||
@@ -125,16 +133,21 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
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 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 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 =
|
||||
workshopsWithContractingParty.FirstOrDefault(w => w.Workshop.id == x.WorkshopId);
|
||||
|
||||
@@ -148,18 +161,20 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
|
||||
Id = x.id,
|
||||
WorkshopName = workshop?.WorkshopFullName ?? "",
|
||||
WorkshopArchiveCode = workshop?.ArchiveCode ?? "",
|
||||
WorkshopArchiveCodeInt = Convert.ToInt32(workshop?.ArchiveCode ?? "0"),
|
||||
Address = workshop?.Address ?? "",
|
||||
City = workshop?.City ?? "",
|
||||
Province = workshop?.State ?? "",
|
||||
EmployerName = employer?.FullName ?? "",
|
||||
EmployerPhoneNumber = employer?.Phone ?? "",
|
||||
AdminFullName = adminAccount.Fullname,
|
||||
EmployeeCount = employeeCount?.EmployeeCounts ?? 0,
|
||||
CheckoutEmployeeCount = employeeCheckoutCount?.EmployeeCounts ?? 0,
|
||||
ContractEmployeeCount = employeeContractCount?.EmployeeCounts ?? 0,
|
||||
AgentPhoneNumber = "",
|
||||
IsBlock = contractingParty?.IsBlock == "true"
|
||||
};
|
||||
}).OrderBy(x => x.IsBlock).ToList();
|
||||
|
||||
}).OrderBy(x => x.IsBlock).ThenBy(x=>x.WorkshopArchiveCodeInt).ToList();
|
||||
|
||||
|
||||
return adminMonthlyOverviewList;
|
||||
}
|
||||
@@ -194,51 +209,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()
|
||||
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= targetDate && x.LeftWorkDate >= targetDate)
|
||||
.Select(x => new { x.WorkshopId, x.EmployeeId })
|
||||
.ToListAsync()).Distinct();
|
||||
var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
|
||||
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextMonth && x.LeftWorkDate.AddDays(-1) >= nextMonth)
|
||||
.Select(x => new { x.WorkshopId, x.EmployeeId });
|
||||
|
||||
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 })
|
||||
.ToListAsync())
|
||||
.Select(x => (x.WorkshopIds, x.EmployeeId))
|
||||
.ToHashSet();
|
||||
|
||||
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 })
|
||||
.ToListAsync())
|
||||
.Select(x => (x.WorkshopId, x.EmployeeId))
|
||||
.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))))
|
||||
.Select(g => g.Key)
|
||||
|
||||
var workshopsContractWithoutEmployees = workshopIds.Except(workingContractGrouping.Select(x => x.WorkshopId)).ToList();
|
||||
|
||||
var workshopsWithFullContracts = workingContractGrouping
|
||||
.Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId))))
|
||||
.Select(g => g.WorkshopId)
|
||||
.ToList();
|
||||
|
||||
var workshopsWithFullCheckout = grouped
|
||||
var workshopsWithFullCheckout = workingCheckoutGrouping
|
||||
.Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
|
||||
.Select(g => g.Key)
|
||||
.ToList();
|
||||
|
||||
var fullyCoveredWorkshops = workshopsWithFullContracts.Intersect(workshopsWithFullCheckout).ToList();
|
||||
|
||||
var notFullyCoveredWorkshops = grouped
|
||||
.Where(g => g.Any(emp =>
|
||||
!contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) ||
|
||||
!checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
|
||||
.Select(g => g.Key)
|
||||
.ToList();
|
||||
//var notFullyCoveredWorkshops = groupedCheckout
|
||||
// .Where(g => g.Any(emp =>
|
||||
// !contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) ||
|
||||
// !checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
|
||||
// .Select(g => g.Key)
|
||||
// .ToList();
|
||||
|
||||
var notFullyCoveredWorkshops = workshopIds.Except(fullyCoveredWorkshops);
|
||||
|
||||
var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews
|
||||
.Where(x => x.Month == month && x.Year == year);
|
||||
|
||||
@@ -41,82 +41,134 @@
|
||||
|
||||
|
||||
@* Search *@
|
||||
<div class="container-fluid d-block">
|
||||
<div class="row">
|
||||
<div class="search-box card">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="container-fluid d-none d-md-block">
|
||||
<div class="row">
|
||||
<div class="search-box card">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="tw-grid tw-grid-cols-2 md:tw-grid-cols-12 gap-2">
|
||||
<div class="">
|
||||
<select class="form-select" id="year-select" 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="">
|
||||
<select class="form-select" id="month-select" 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 class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select EmployerSelect2Option" aria-label="انتخاب کارفرما" id="employer-select" name="employerName">
|
||||
<option value="0">انتخاب کارفرما</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select WorkshopSelect2Option" aria-label="نام کارگاه /شماره بایگانی ..." id="workshop-select" data-selected-name="نام کارگاه /شماره بایگانی ..." >
|
||||
<option value="0"> نام کارگاه /شماره بایگانی </option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select AdminPersonnelNameSelect2Option" aria-label="انتخاب اعضاء" id="admin-personnel-select" name="adminpersonnelName">
|
||||
<option value=""> انتخاب اعضاء </option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="">
|
||||
<select class="form-select" id="status-select" name="status">
|
||||
<option value="2" selected="selected">فعال/غیر فعال</option>
|
||||
<option value="1">فعال</option>
|
||||
<option value="0">غیر فعال</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="">
|
||||
<select class="form-select" id="year-select" 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="">
|
||||
<select class="form-select" id="month-select" 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 class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select EmployerSelect2Option" aria-label="انتخاب کارفرما" id="employer-select" name="employerName">
|
||||
<option value="0">انتخاب کارفرما</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select WorkshopSelect2Option" aria-label="نام کارگاه /شماره بایگانی ..." id="workshop-select" data-selected-name="نام کارگاه /شماره بایگانی ..." >
|
||||
<option value="0"> نام کارگاه /شماره بایگانی </option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="tw-col-span-1 md:tw-col-span-2">
|
||||
<select class="form-select AdminPersonnelNameSelect2Option" aria-label="انتخاب اعضاء" id="admin-personnel-select" name="adminpersonnelName">
|
||||
<option value=""> انتخاب اعضاء </option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="">
|
||||
<select class="form-select" id="status-select" name="status">
|
||||
<option value="2" selected="selected">فعال/غیر فعال</option>
|
||||
<option value="1">فعال</option>
|
||||
<option value="0">غیر فعال</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<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">
|
||||
<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 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">
|
||||
<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>
|
||||
|
||||
<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>
|
||||
</a>
|
||||
<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>
|
||||
</a>
|
||||
</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="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">
|
||||
@@ -178,7 +230,14 @@
|
||||
|
||||
<div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-step4" style="display: none;">
|
||||
</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>
|
||||
|
||||
@@ -187,30 +246,20 @@
|
||||
<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-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-[15%] 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-[5%] 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-[35%] 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-[18%] tw-text-start">نام کارگاه</div>
|
||||
<div class="monthly-table__head-cell tw-w-[14%] tw-text-start">نام کارفرما</div>
|
||||
<div class="monthly-table__head-cell tw-w-[7%] 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-start">جزئیات نشانی </div>
|
||||
<div class="monthly-table__head-cell tw-w-[10%] tw-text-center">وضعیت</div>
|
||||
</div>
|
||||
<div class="monthly-table__body tw-whitespace-nowrap" id="load-data-html-stepAll">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@* //--------- Mobile --------- *@
|
||||
@* Monthly Table 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-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-[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-[10%] tw-text-end">عملیات</div>
|
||||
</div>
|
||||
@@ -259,6 +308,78 @@
|
||||
|
||||
</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 {
|
||||
<script src="~/assetsclient/js/site.js?ver=@adminVersion"></script>
|
||||
<script src="~/assetsclient/libs/jalaali-js/jalaali.js"></script>
|
||||
|
||||
5998
ServiceHost/package-lock.json
generated
5998
ServiceHost/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -18,5 +18,4 @@
|
||||
"postcss-cli": "^11.0.1",
|
||||
"tailwindcss": "^3.4.17"
|
||||
}
|
||||
}
|
||||
د
|
||||
}
|
||||
@@ -156,10 +156,10 @@
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
width: max-content;
|
||||
max-width: 300px;
|
||||
/*max-width: 400px;*/
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
text-align: start;
|
||||
border-radius: 4px;
|
||||
padding: 5px 8px;
|
||||
z-index: 100000;
|
||||
@@ -221,7 +221,7 @@
|
||||
.monthly-table__toggle-value {
|
||||
font-weight: 400;
|
||||
font-size: 12px;
|
||||
color: #818181
|
||||
color: #818181;
|
||||
}
|
||||
/*Awaiting reference Table*/
|
||||
.monthly-table__stage-button {
|
||||
@@ -272,10 +272,15 @@
|
||||
.monthly-table__status-button {
|
||||
width: 166px;
|
||||
height: 35px;
|
||||
|
||||
}
|
||||
|
||||
.monthly-table__status-button--documents-setup {
|
||||
background-color: #C8C8C8 !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width:768px) {
|
||||
.monthly-table__toggle-value {
|
||||
white-space: break-spaces;
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user