feat: add "Not Created" tab and implement related functionality in InsuranceList page

This commit is contained in:
2025-10-09 12:27:20 +03:30
parent 2bbe616127
commit db225fea18
4 changed files with 306 additions and 65 deletions

View File

@@ -320,6 +320,11 @@
<div class="mb-2 tw-flex tw-flex-col">
<div class="custom-scrollbar-x tw-w-full tw-overflow-x-auto">
<div class="tab-bar tw-flex tw-w-max tw-gap-3 tw-whitespace-nowrap">
<button permission="80217" data-permission="80217" type="button" class="tab-bar__tab u-tactile tab-bar__tab--active js-document-click" value="4">
<span class="tab-bar__tab-label">ایجاد نشده</span>
<span class="" id="notCreated"></span>
</button>
<button permission="80217" data-permission="80217" type="button" class="tab-bar__tab u-tactile tab-bar__tab--active js-document-click" value="0">
<span class="tab-bar__tab-label"> انجام نشده</span>
<span class="tab-bar__tab-badge" id="notStarted"></span>

View File

@@ -1162,6 +1162,11 @@ public class IndexModel : PageModel
});
}
// public IActionResult OnGetNotCreatedWorkshops(InsuranceListSearchModel searchModel)
// {
//
// }
public async Task<IActionResult> OnGetTabCounts(InsuranceListSearchModel searchModel)
{

View File

@@ -117,9 +117,272 @@ $(document).ready(function () {
case "3":
loadSearchNew(3);
break;
default:
case "4":
loadNotCreatedData();
break;
default:
}
});
function loadNotCreatedData() {
var pageIndex = pageIndexJs;
var html = "";
var htmlMobile = "";
var paramsUrl = UrlParamsBuilder.readParams([
"year",
"month",
"workshop-code",
"employee-id",
"workshop-id",
"type-of-insurance",
//"branch",
//"city",
"fixed-salary"
]);
var searchModel = {
Year: paramsUrl['year'] !== "" ? paramsUrl['year'] : year,
Month: paramsUrl['month'] !== "" ? paramsUrl['month'] : month,
WorkShopCode: paramsUrl['workshop-code'],
EmployerId: paramsUrl['employee-id'],
WorkshopId: paramsUrl['workshop-id'],
TypeOfInsuranceSend: paramsUrl['type-of-insurance'],
//Branch: paramsUrl['branch'],
//City: paramsUrl['city'],
FixedSalary: paramsUrl['fixed-salary'],
Status: status,
PageIndex: pageIndex
};
var b = pageIndexJs % 30;
if (b === 0 && hasMoreData) {
ajaxService.get(ajaxSearchNewUrl, searchModel, false)
.then(response => {
var responseData = response.data;
if (responseData.length > 0) {
responseData.forEach(function (item) {
var n = pageIndexJs + 1;
var pathDSKKAR00 = item.workShopId + "\\" + item.year + "_" + item.month + "\\DSKKAR00.dbf";
var pathDSKWOR00 = item.workShopId + "\\" + item.year + "_" + item.month + "\\DSKWOR00.dbf";
const rowBgClass = item.isBlockCantracingParty === "true"
? "tw-bg-[#b1c3c3] hover:tw-bg-[#bbc6c6]"
: item.confirmSentlist
? "tw-bg-[#d8f5d2] hover:tw-bg-[#c7ebc0]"
: (n % 2 === 0
? "tw-bg-[#ecffff] hover:tw-bg-[#C9F0F0]"
: "tw-bg-[#ddf4f4] hover:tw-bg-[#C9F0F0]");
html += `
<div class="insurance-table__container">
<div class="insurance-table__row tw-transition-all tw-font-[400] tw-flex tw-h-[35px] tw-items-center tw-rounded-[5px] ${rowBgClass} tw-px-2 tw-text-[12px]">
<div class="insurance-table__cell tw-w-[3%]">
<div class="insurance-table__cell-card insurance-table__cell-card--small ${item.isBlockCantracingParty === "true" ? `` : item.confirmSentlist ? `!tw-bg-[#a3d798]` : ``} ${item.isBlockCantracingParty === "true" ? `!tw-bg-[#9b9d9d] !tw-text-white` : ``}">
${n++}
</div>
</div>
<div class="insurance-table__cell tw-w-[4%] tw-text-center">${item.year}</div>
<div class="insurance-table__cell tw-w-[5%] tw-text-center">${convertMonthToString(item.month)}</div>
<div class="insurance-table__cell tw-w-[5%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[10%] tw-text-center">${item.workShopCode}</div>
<div class="insurance-table__cell tw-w-[13%] tw-text-right">
<div class="tooltip-container tw-text-right">
<div class="tooltip__trigger tw-truncate tw-text-right">${item.employerName}</div>
<div class="tooltip-container__text">
${item.employerName}
</div>
</div>
</div>
<div class="insurance-table__cell tw-w-[13%] tw-text-right">
<div class="tooltip-container tw-text-right">
<div class="tooltip__trigger tw-truncate tw-text-right">${item.workShopName}</div>
<div class="tooltip-container__text">
${item.workShopName}
</div>
</div>
</div>
<div class="insurance-table__cell tw-w-[7%] tw-text-center">${item.typeOfInsuranceSend}</div>
<div class="insurance-table__cell tw-w-[7%] tw-text-center tw-flex tw-justify-center">
${booleanSvgResponse(item.inspectionDone)}
</div>
<div class="insurance-table__cell tw-w-[7%] tw-text-center tw-flex tw-justify-center">
${booleanSvgResponse(item.debtDone)}
</div>
<div class="insurance-table__cell tw-w-[7%] tw-text-center tw-flex tw-justify-center">
${booleanSvgResponse(item.employerApproved)}
</div>
<div class="insurance-table__cell tw-w-[7%] tw-text-center tw-flex tw-justify-center">
${booleanSvgResponse(item.confirmSentlist, item.employerApprovalStatus)}
</div>
<div class="insurance-table__cell tw-w-[12%] tw-text-end">
<div class="tw-flex tw-justify-end tw-gap-2">
${generateButtons(item, pathDSKKAR00, pathDSKWOR00)}
</div>
</div>
</div>
<!-- toggle content -->
<div class="insurance-table__toggle tw-mx-auto tw-flex tw-w-[97%] tw-flex-col tw-gap-2 tw-px-2">
<div class="insurance-table__toggle-row tw-flex tw-gap-2">
<div class="insurance-table__toggle-item tw-mb-2 tw-flex tw-w-[20%]">
<span class="insurance-table__toggle-label tw-w-[30%]">شعبه تامین اجتماعی:</span>
<span class="insurance-table__toggle-value tw-w-[50%]">${item.branch === `` ? `-` : item.branch}</span>
</div>
<div class="insurance-table__toggle-item tw-mb-2 tw-flex tw-flex tw-w-[20%] tw-gap-40 tw-gap-2">
<span class="insurance-table__toggle-label tw-w-[30%]">شهرستان:</span>
<span class="insurance-table__toggle-value tw-w-[50%]">${item.city === `` ? `-` : item.city}</span>
</div>
<div class="insurance-table__toggle-item tw-mb-2 tw-flex tw-flex tw-w-[20%] tw-gap-40 tw-gap-2">
<span class="insurance-table__toggle-label tw-w-[30%]">لیست مقطوع:</span>
<span class="insurance-table__toggle-value tw-w-[50%]">${item.strFixedSalary}</span>
</div>
<div class="insurance-table__toggle-item tw-mb-2 tw-flex tw-flex tw-w-[20%] tw-gap-40 tw-gap-2">
<span class="insurance-table__toggle-label tw-w-[30%]"></span>
<span class="insurance-table__toggle-value tw-w-[50%]"></span>
</div>
<div class="insurance-table__toggle-item tw-mb-2 tw-flex tw-flex tw-w-[20%] tw-gap-40 tw-gap-2">
<span class="insurance-table__toggle-label tw-w-[30%]"></span>
<span class="insurance-table__toggle-value tw-w-[50%]"></span>
</div>
</div>
</div>
</div>
`;
htmlMobile += `<div class="insurance-table__container tw-cursor-pointer">
<div class="insurance-table__row tw-font-[500] tw-flex tw-h-[35px] tw-items-center tw-rounded-[5px] ${rowBgClass} tw-px-2 tw-text-[12px] md:tw-font-[400] md:tw-text-[14px]">
<div class="insurance-table__cell tw-w-[10%]">
<div class="insurance-table__cell-card insurance-table__cell-card--small tw-text-center ${item.isBlockCantracingParty === "true" ? `` : item.confirmSentlist ? `!tw-bg-[#a3d798]` : ``} ${item.isBlockCantracingParty === "true" ? `!tw-bg-[#9b9d9d] !tw-text-white` : ``}">
${n++}
</div>
</div>
<div class="insurance-table__cell tw-w-[15%] tw-text-center">${item.year}</div>
<div class="insurance-table__cell tw-w-[20%] tw-text-center">${convertMonthToString(item.month)}</div>
<div class="insurance-table__cell tw-w-[10%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[40%] tw-text-center">
<div class="tooltip-container tw-text-center">
<div class="tooltip__trigger tw-truncate tw-text-center">${item.workShopName}</div>
<div class="tooltip-container__text">
${item.employerName}
</div>
</div>
</div>
<div class="insurance-table__cell tw-flex tw-w-[10%] tw-justify-end tw-gap-2">
<button class="u-tactile">
<svg width="21" height="21" viewBox="0 0 21 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="21" height="21" rx="3" fill="#23bab9"/>
<path d="M10.4375 14.1484C11.3436 14.1484 12.0781 14.8891 12.0781 15.8028C12.0781 16.7166 11.3436 17.4573 10.4375 17.4573C9.53141 17.4573 8.79688 16.7166 8.79688 15.8028C8.79688 14.8891 9.53141 14.1484 10.4375 14.1484Z" fill="white"/>
<path d="M10.4375 9.07031C11.3436 9.07031 12.0781 9.81102 12.0781 10.7247C12.0781 11.6384 11.3436 12.3791 10.4375 12.3791C9.53141 12.3791 8.79688 11.6384 8.79688 10.7247C8.79688 9.81102 9.53141 9.07031 10.4375 9.07031Z" fill="white"/>
<path d="M12.0781 5.65441C12.0781 4.7407 11.3436 4 10.4375 4C9.53141 4 8.79688 4.74071 8.79688 5.65441C8.79688 6.56812 9.53141 7.30882 10.4375 7.30882C11.3436 7.30882 12.0781 6.56812 12.0781 5.65441Z" fill="white"/>
</svg>
</button>
</div>
</div>
<!-- toggle content -->
<div class="insurance-table__toggle tw-mx-auto tw-flex tw-w-[95%] tw-flex-col tw-gap-2 tw-px-2">
<div class="insurance-table__toggle-row tw-flex">
<div class="insurance-table__toggle-item tw-flex tw-items-center tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">بازرسی: </span>
<span class="insurance-table__toggle-value">${booleanSvgResponse(item.inspectionDone)}</span>
</div>
<div class="insurance-table__toggle-item tw-flex tw-items-center tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">بدهی: </span>
<span class="insurance-table__toggle-value">${booleanSvgResponse(item.debtDone)}</span>
</div>
</div>
<div class="insurance-table__toggle-row tw-flex">
<div class="insurance-table__toggle-item tw-flex tw-items-center tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">تاییده کارفرما: </span>
<span class="insurance-table__toggle-value">${booleanSvgResponse(item.employerApproved)}</span>
</div>
<div class="insurance-table__toggle-item tw-flex tw-items-center tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">ارسال لیست: </span>
<span class="insurance-table__toggle-value">${booleanSvgResponse(item.confirmSentlist, item.employerApprovalStatus)}</span>
</div>
</div>
<div class="insurance-table__toggle-row tw-flex">
<div class="insurance-table__toggle-item tw-flex tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">شعبه تامین اجتماعی: </span>
<span class="insurance-table__toggle-value">${item.branch === `` ? `-` : item.branch}</span>
</div>
<div class="insurance-table__toggle-item tw-flex tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">لیست مقطوع: </span>
<span class="insurance-table__toggle-value">${item.strFixedSalary}</span>
</div>
</div>
<div class="insurance-table__toggle-row tw-flex ">
<div class="insurance-table__toggle-item tw-flex tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">شهرستان: </span>
<span class="insurance-table__toggle-value">${item.city === `` ? `-` : item.city}</span>
</div>
<div class="insurance-table__toggle-item tw-flex tw-w-[50%] tw-gap-2">
<span class="insurance-table__toggle-label">نوع ارسال لیست: </span>
<span class="insurance-table__toggle-value">${item.typeOfInsuranceSend}</span>
</div>
</div>
<div class="insurance-table__toggle-row tw-flex ">
<div class="insurance-table__toggle-item tw-flex tw-w-[100%] tw-gap-2">
<span class="insurance-table__toggle-label">نام کافرما:</span>
<span class="insurance-table__toggle-value">${item.employerName}</span>
</div>
</div>
<div class="insurance-table__toggle-row tw-flex ">
${generateButtons(item, pathDSKKAR00, pathDSKWOR00)}
</div>
</div>
</div>`;
pageIndexJs++;
});
} else {
var emptyHtml = ``;
if (pageIndexJs === responseData.length) {
emptyHtml = `
<div class="text-center bg-white card py-5 d-flex align-items-center justify-content-center">
<div class="tw-w-full text-center">
<img src="/assetsclient/images/empty.png" alt="" class="img-fluid" style="margin: auto;" />
<h5>اطلاعاتی وجود ندارد.</h5>
</div>
</div>`;
}
html += emptyHtml;
htmlMobile += emptyHtml;
hasMoreData = false;
}
$("#load-data-html").append(html);
$("#load-data-html-mobile").append(htmlMobile);
});
}
}
$('.btn-search-click').click(function () {
urlParamsSearch
@@ -207,6 +470,7 @@ async function loadGetTabCounts() {
try {
var response = await ajaxService.get(ajaxGetTabCountsUrl, searchModel, true);
updateStatus('notStarted', response.notStarted);
updateStatus('inProgress', response.inProgress);
updateStatus('readyToSendList', response.readyToSendList);
@@ -249,7 +513,7 @@ function loadSearchNew(status = 0) {
var html = "";
var htmlMobile = "";
var paramsUrl = UrlParamsBuilder.readParams([
"year",
"month",
@@ -277,25 +541,26 @@ function loadSearchNew(status = 0) {
};
var b = pageIndexJs % 30;
if (b === 0 && hasMoreData) {
ajaxService.get(ajaxSearchNewUrl, searchModel, false)
.then(response => {
var responseData = response.data;
if (responseData.length > 0) {
if (responseData.length > 0) {
responseData.forEach(function (item) {
var n = pageIndexJs + 1;
var pathDSKKAR00 = item.workShopId + "\\" + item.year + "_" + item.month + "\\DSKKAR00.dbf";
var pathDSKWOR00 = item.workShopId + "\\" + item.year + "_" + item.month + "\\DSKWOR00.dbf";
const rowBgClass = item.isBlockCantracingParty === "true"
? "tw-bg-[#b1c3c3] hover:tw-bg-[#bbc6c6]"
: item.confirmSentlist
? "tw-bg-[#d8f5d2] hover:tw-bg-[#c7ebc0]"
: (n % 2 === 0
? "tw-bg-[#ecffff] hover:tw-bg-[#C9F0F0]"
: "tw-bg-[#ddf4f4] hover:tw-bg-[#C9F0F0]");
? "tw-bg-[#d8f5d2] hover:tw-bg-[#c7ebc0]"
: (n % 2 === 0
? "tw-bg-[#ecffff] hover:tw-bg-[#C9F0F0]"
: "tw-bg-[#ddf4f4] hover:tw-bg-[#C9F0F0]");
html += `
<div class="insurance-table__container">
@@ -307,7 +572,8 @@ function loadSearchNew(status = 0) {
</div>
<div class="insurance-table__cell tw-w-[4%] tw-text-center">${item.year}</div>
<div class="insurance-table__cell tw-w-[5%] tw-text-center">${convertMonthToString(item.month)}</div>
<div class="insurance-table__cell tw-w-[5%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[5%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[10%] tw-text-center">${item.workShopCode}</div>
<div class="insurance-table__cell tw-w-[13%] tw-text-right">
<div class="tooltip-container tw-text-right">
@@ -389,8 +655,9 @@ function loadSearchNew(status = 0) {
</div>
<div class="insurance-table__cell tw-w-[15%] tw-text-center">${item.year}</div>
<div class="insurance-table__cell tw-w-[20%] tw-text-center">${convertMonthToString(item.month)}</div>
<div class="insurance-table__cell tw-w-[10%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[20%] tw-text-center">${convertMonthToString(item.month)}</div>
<div class="insurance-table__cell tw-w-[10%] tw-text-center">${item.archiveCode}</div>
<div class="insurance-table__cell tw-w-[40%] tw-text-center">
<div class="tooltip-container tw-text-center">
<div class="tooltip__trigger tw-truncate tw-text-center">${item.workShopName}</div>
@@ -505,7 +772,7 @@ function loadSearchNew(status = 0) {
function generateButtons(item, pathDSKKAR00, pathDSKWOR00) {
var html = '';
var htmlMobile = '';
var canShowActions = (currentAccountId === 1 && item.confirmSentlist) || !item.confirmSentlist;
var isDisabled = item.isBlockCantracingParty === 'true' ? 'disable' : '';
@@ -548,11 +815,11 @@ function generateButtons(item, pathDSKKAR00, pathDSKWOR00) {
}
//if (item.inspectionDone && item.debtDone && item.employerApproved && item.confirmSentlist) {
//if (item.inspectionDone || item.debtDone || item.employerApproved || item.confirmSentlist) {
if (item.inspectionDone || item.debtDone || item.employerApproved || item.confirmSentlist) {
// Confirm List and Print Button
if (hasPermission_80215) {
html += `
<a href="${insuranceConfirmUrl + `&id=` + item.id}" class="printModal tw-flex tw-items-center tw-justify-center tw-rounded-[5px] tw-bg-[#38BBF6] tw-w-full md:tw-w-[25px] tw-h-[25px] ${isDisabled} ">
<a href="${insuranceConfirmUrl + `&id=` + item.id}" class="printModal tw-flex tw-items-center tw-justify-center tw-rounded-[5px] tw-bg-[#38BBF6] tw-w-full md:tw-w-[25px] tw-h-[25px] ${isDisabled}">
<svg width="22" height="22" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="16" height="16" fill="#38BBF6"/>
<path d="M12 9.0026H12.1111C12.6293 9.0026 12.8883 9.0026 13.0893 8.90891C13.3023 8.80955 13.4736 8.6383 13.573 8.42522C13.6666 8.2243 13.6666 7.96522 13.6666 7.44705V7.44705C13.6666 6.41071 13.6666 5.89255 13.4793 5.4907C13.2805 5.06455 12.938 4.72204 12.5119 4.52332C12.11 4.33594 11.5919 4.33594 10.5555 4.33594H6.06665C4.43893 4.33594 3.62508 4.33594 3.07467 4.78165C2.96606 4.8696 2.86697 4.96869 2.77902 5.0773C2.33331 5.6277 2.33331 6.44156 2.33331 8.06927V8.06927C2.33331 8.4762 2.33331 8.67966 2.44474 8.81726C2.46673 8.84442 2.4915 8.86919 2.51865 8.89118C2.65625 9.0026 2.85972 9.0026 3.26665 9.0026H3.99998" stroke="#FFFEFE"/>
@@ -564,7 +831,7 @@ function generateButtons(item, pathDSKKAR00, pathDSKWOR00) {
<span class="tw-flex md:tw-hidden tw-text-sm tw-text-white">پرینت</span>
</a>`;
}
//}
}
if (item.inspectionDone || item.debtDone || item.employerApproved || item.confirmSentlist) {
// Summary List and Print Button
@@ -627,7 +894,7 @@ function booleanSvgResponse(bool, employerApprovalStatus) {
var isWrittenVerbal = employerApprovalStatus === 1;
var svg = ``;
if (bool) {
if (bool) {
svg = `<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="8" fill="#A7E1C7"/>
<path d="M8.5 11L11.3939 13.8939C11.4525 13.9525 11.5475 13.9525 11.6061 13.8939L19.5 6" stroke="#00B521" stroke-width="1.2" stroke-linecap="round"/>
@@ -687,7 +954,7 @@ function convertMonthToString(value) {
result = "بدون ماه";
break;
}
return result;
}
@@ -827,8 +1094,8 @@ searchBoxWorkshop.on('keyup keypress', function (e) {
//keyboard Arrow Key Select And Enter
liListWorkshop = $('#empWorkshop ul li');
mixContainerAndSerchResultWorkshop.animate({
scrollTop: $(liListWorkshop.eq(0)).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop()
},
scrollTop: $(liListWorkshop.eq(0)).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop()
},
50);
if (e.which === 40) {// if ArrowUp
if (countWorkshop > 0 && countWorkshop <= liListWorkshop.length) {
@@ -840,8 +1107,8 @@ searchBoxWorkshop.on('keyup keypress', function (e) {
if (countWorkshop > 4) {
//ScrollDown
mixContainerAndSerchResultWorkshop.animate({
scrollTop: $(liPointerWorkshop).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop()
},
scrollTop: $(liPointerWorkshop).offset().top - containerWorkshop.offset().top + containerWorkshop.scrollTop()
},
50);
}
countWorkshop += 1;
@@ -984,8 +1251,8 @@ searchBoxEmployer.on('keyup keypress', function (e) {
//keyboard Arrow Key Select And Enter
liListEmployer = $('#empEmployer ul li');
mixContainerAndSerchResultEmployer.animate({
scrollTop: $(liListEmployer.eq(0)).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
scrollTop: $(liListEmployer.eq(0)).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
50);
if (e.which === 40) {// if ArrowUp
if (countEmployer > 0 && countEmployer <= liListEmployer.length) {
@@ -997,8 +1264,8 @@ searchBoxEmployer.on('keyup keypress', function (e) {
if (countEmployer > 4) {
//ScrollDown
mixContainerAndSerchResultEmployer.animate({
scrollTop: $(liPointerEmployer).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
scrollTop: $(liPointerEmployer).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
50);
}
countEmployer += 1;
@@ -1017,8 +1284,8 @@ searchBoxEmployer.on('keyup keypress', function (e) {
liPointerEmployer = liListEmployer.eq(countEmployer);
//ScrollUp
mixContainerAndSerchResultEmployer.animate({
scrollTop: $(liPointerEmployer).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
scrollTop: $(liPointerEmployer).offset().top - containerEmployer.offset().top + containerEmployer.scrollTop()
},
50);
}
}