Rev 35971 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<style>.ps-container {max-width: 100%;padding: 0 10px;}.ps-section {margin-bottom: 24px;}.ps-section-title {font-size: 13px;font-weight: 700;color: #1e293b;padding: 10px 16px;background: linear-gradient(135deg, #f8fafc, #f1f5f9);border: 1px solid #e2e8f0;border-bottom: 2px solid #3b82f6;border-radius: 8px 8px 0 0;letter-spacing: 0.5px;}/* Active services: full-width striped rows */.ps-active-list {border: 1px solid #e2e8f0;border-top: none;border-radius: 0 0 8px 8px;overflow: hidden;background: #fff;}.ps-active-row {display: flex;align-items: center;flex-wrap: wrap;padding: 12px 20px;border-bottom: 1px solid #e8ecf1;gap: 12px;min-height: 52px;}.ps-active-row:nth-child(even) {background: #f8fafc;}.ps-active-row:last-child {border-bottom: none;}.ps-active-row:hover {background: #eef2ff;}/* Pending services: 2-column grid */.ps-pending-grid {display: grid;grid-template-columns: 1fr 1fr;border: 1px solid #e2e8f0;border-top: none;border-radius: 0 0 8px 8px;overflow: hidden;background: #fff;}.ps-pending-item {display: flex;align-items: center;justify-content: space-between;padding: 14px 20px;border-bottom: 1px solid #e8ecf1;border-right: 1px solid #e8ecf1;gap: 12px;min-height: 56px;}.ps-pending-item:nth-child(2n) {border-right: none;}.ps-pending-item:nth-child(odd):nth-last-child(-n+2),.ps-pending-item:nth-child(even):last-child {border-bottom: none;}.ps-pending-item:hover {background: #eef2ff;}/* Service name */.ps-name {font-size: 15px;font-weight: 700;color: #1e293b;min-width: 170px;flex-shrink: 0;}.ps-pending-item .ps-name {min-width: auto;flex: 1;}/* Actions group */.ps-actions {display: flex;align-items: center;gap: 8px;flex-shrink: 0;}/* Brands group */.ps-brands {display: flex;align-items: center;flex-wrap: wrap;gap: 8px;margin-left: 8px;flex: 1;}/* Buttons */.ps-btn {padding: 4px 10px;font-size: 10px;font-weight: 600;border: none;border-radius: 5px;cursor: pointer;transition: all 0.15s ease;text-transform: uppercase;letter-spacing: 0.3px;line-height: 1.6;white-space: nowrap;}.ps-btn-pni {background: #fef2f2;color: #dc2626;border: 1px solid #fecaca;}.ps-btn-pni:hover {background: #dc2626;color: #fff;}.ps-btn-applicable {background: #eff6ff;color: #2563eb;border: 1px solid #bfdbfe;}.ps-btn-applicable:hover {background: #2563eb;color: #fff;}.ps-btn-na {background: #fef2f2;color: #dc2626;border: 1px solid #fecaca;}.ps-btn-na:hover {background: #dc2626;color: #fff;}.ps-btn-activate {background: #f0fdf4;color: #16a34a;border: 1px solid #bbf7d0;}.ps-btn-activate:hover {background: #16a34a;color: #fff;}.ps-btn-deactivate {background: #fef2f2;color: #dc2626;border: 1px solid #fecaca;}.ps-btn-deactivate:hover {background: #dc2626;color: #fff;}/* Badge */.ps-badge {padding: 4px 12px;font-size: 11px;font-weight: 700;border-radius: 12px;letter-spacing: 0.3px;white-space: nowrap;}.ps-badge-active {background: #dcfce7;color: #16a34a;}.ps-badge-inactive {background: #fee2e2;color: #dc2626;}.ps-badge-pending {background: #fef9c3;color: #a16207;}/* Brand chips */.ps-chip {display: inline-flex;align-items: center;gap: 6px;padding: 5px 12px;background: #f8fafc;border: 1px solid #e2e8f0;border-radius: 6px;font-size: 13px;font-weight: 500;color: #334155;white-space: nowrap;}.ps-chip input[type="checkbox"] {width: 15px;height: 15px;accent-color: #2563eb;margin: 0;cursor: pointer;}.ps-chip .ps-st {font-size: 14px;line-height: 1;}.ps-g {color: #16a34a;}.ps-r {color: #dc2626;}.ps-chip .ps-act {font-size: 10px;font-weight: 600;padding: 2px 8px;border-radius: 4px;text-decoration: none;cursor: pointer;}.ps-dim {opacity: 0.4;}.ps-code {font-size: 12px;font-weight: 600;color: #1e40af;background: #eff6ff;border: 1px solid #bfdbfe;padding: 3px 10px;border-radius: 4px;font-family: monospace;letter-spacing: 0.3px;}a {text-decoration: none !important;}.tooltip-arrow,.red-tooltip + .tooltip.top > .tooltip-inner {background-color: #f00;}</style><script>$(document).ready(function () {$('[data-toggle="tooltip"]').tooltip();});</script>#if($roleType=="false")## ===================== PARTNER VIEW =====================<section class="wrapper"><div class="row"><div class="col-lg-12"><h3 class="page-header"><i class="icon_document_alt"></i> SERVICE</h3><ol class="breadcrumb"><li><i class="fa fa-home"></i><a href="${rc.contextPath}/dashboard">#springMessage("finservice.home")</a></li><li><i class="icon_document_alt"></i> #springMessage("finservice.partnerservice")</li><li><a href="#videoModal" class="btn btn-danger" data-toggle="modal" data-src="prURXYMPaYo"><spanclass="glyphicon glyphicon-play-circle"></span> #springMessage("finservice.playvideo")</a></li></ol></div></div>## --- Active Services ---<div class="ps-section"><div class="ps-section-title">Active Services</div><div class="ps-active-list">#foreach($paymentOption in $paymentOptions)#if($serviceIdPartnerServiceMap.get($paymentOption.getId()).getApplicableType()=="YES")#if($serviceIdPartnerServiceMap.get($paymentOption.getId()).getCode())<div class="ps-active-row"><span class="ps-name">$paymentOption.getName()</span><span class="ps-badge ps-badge-active">Active</span><span class="ps-code">$serviceIdPartnerServiceMap.get($paymentOption.getId()).getCode()</span><div class="ps-brands">#foreach($serviceBrandsConfig in $serviceIdAndServiceBrandsConfigMap.get($paymentOption.getId()))#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()))#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getApplicableType()=="YES")#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).isActive()==true)#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getPartnerStatusType()=="WORKING")<span class="ps-chip"><input type="checkbox" class="fin-service-brand"value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId(),`$serviceBrandsConfig.getBrand()`)"checked data-brand="$serviceBrandsConfig.getBrand()">$serviceBrandsConfig.getBrand() <span class="ps-st ps-g">✔</span></span>#else<span class="ps-chip"><input type="checkbox" class="fin-service-brand"value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId(),`$serviceBrandsConfig.getBrand()`)"disabled data-brand="$serviceBrandsConfig.getBrand()">$serviceBrandsConfig.getBrand() <span class="ps-st ps-r"title="NOT WORKING">✖</span></span>#end#else<span class="ps-chip"><input type="checkbox" class="fin-service-brand"value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId(),`$serviceBrandsConfig.getBrand()`)"disabled data-brand="$serviceBrandsConfig.getBrand()">$serviceBrandsConfig.getBrand() <span class="ps-st ps-r"data-toggle="tooltip"title="INACTIVE">✕</span></span>#end#else<span class="ps-chip"><input type="checkbox" class="fin-service-brand"value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId(),`$serviceBrandsConfig.getBrand()`)"disabled data-brand="$serviceBrandsConfig.getBrand()">$serviceBrandsConfig.getBrand() <buttonclass="notApplicableBrandService ps-act ps-btn-na"data-nacommentservice="$serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getNa_Comment()">NA</button></span>#end#else<span class="ps-chip"><input type="checkbox" class="fin-service-brand"value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId(),`$serviceBrandsConfig.getBrand()`)"checked data-brand="$serviceBrandsConfig.getBrand()">$serviceBrandsConfig.getBrand()</span>#end#end</div></div>#end#end#end</div></div></section>#else## ===================== ADMIN VIEW =====================<div class="ps-container">## --- Active / Inactive Services ---<div class="ps-section"><div class="ps-section-title">Active Services</div><div class="ps-active-list">#foreach($paymentOption in $paymentOptions)#if($serviceIdPartnerServiceMap.get($paymentOption.getId()).getApplicableType()=="YES")#if($serviceIdPartnerServiceMap.get($paymentOption.getId()).getCode())## --- Active WITH code ---<div class="ps-active-row"><span class="ps-name">$paymentOption.getName()</span><span class="ps-code">$serviceIdPartnerServiceMap.get($paymentOption.getId()).getCode()</span><div class="ps-actions"><span class="ps-badge ps-badge-active">Active</span><button class="markNA ps-btn ps-btn-na" data-serviceid="$paymentOption.getId()">NotApplicable</button><button class="deactivate-service ps-btn ps-btn-deactivate"data-serviceid="$paymentOption.getId()">Deactivate</button></div><div class="ps-brands">#foreach($serviceBrandsConfig in $serviceIdAndServiceBrandsConfigMap.get($paymentOption.getId()))#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()))#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getApplicableType()=="YES")#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).isActive()==true)#if($serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getPartnerStatusType()=="WORKING")<span class="ps-chip"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())"checked>$serviceBrandsConfig.getBrand() <span class="ps-st ps-g">✔</span><a href="#" class="deactivate-brand-service-modal ps-act ps-btn-deactivate"data-serviceid="$paymentOption.getId()"data-servicebrandid="$serviceBrandsConfig.getId()" data-toggle="modal"data-target="#myServiceDeActivateBrand">Deactivate</a><div id="myServiceDeActivateBrand" class="modal fade" role="dialog"></div></span>#else<span class="ps-chip"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())">$serviceBrandsConfig.getBrand() <span class="ps-st ps-r"title="NOT WORKING">✖</span></span>#end#else<span class="ps-chip"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())"disabled>$serviceBrandsConfig.getBrand() <spanclass="ps-st ps-r">✕</span><a href="#" class="activate-brand-service-modal ps-act ps-btn-activate"data-serviceid="$paymentOption.getId()"data-servicebrandid="$serviceBrandsConfig.getId()" data-toggle="modal"data-target="#myServiceActivateBrand">Activate</a><div id="myServiceActivateBrand" class="modal fade" role="dialog"></div></span>#end#else<span class="ps-chip"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())" disabled>$serviceBrandsConfig.getBrand() <buttonclass="notApplicableBrandService ps-act ps-btn-na"data-nacommentservice="$serviceBrandIdPartnerBrandServiceMap.get($serviceBrandsConfig.getId()).getNa_Comment()">NA</button></span>#end#else<span class="ps-chip"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())" checked>$serviceBrandsConfig.getBrand() <span class="ps-st ps-g">✔</span><a href="javascript:void(0)" class="deactivate-brand-service ps-act ps-btn-deactivate"data-serviceid="$paymentOption.getId()"data-servicebrandid="$serviceBrandsConfig.getId()">Deactivate</a></span>#end#end</div></div>#else## --- Inactive (no code) ---<div class="ps-active-row"><span class="ps-name">$paymentOption.getName()</span><div class="ps-actions"><span class="ps-badge ps-badge-inactive">Inactive</span><button class="markNA ps-btn ps-btn-na" data-serviceid="$paymentOption.getId()">NotApplicable</button><button class="activate-service ps-btn ps-btn-activate"data-serviceid="$paymentOption.getId()">Activate</button></div><div class="ps-brands">#foreach($serviceBrandsConfig in $serviceIdAndServiceBrandsConfigMap.get($paymentOption.getId()))<span class="ps-chip ps-dim"><input type="checkbox" value="$serviceBrandsConfig.getId()"onchange="onChangeStateServiceBrand(this,$paymentOption.getId())" disabled>$serviceBrandsConfig.getBrand()</span>#end</div></div>#end#end#end</div></div>## --- Pending Services ---<div class="ps-section"><div class="ps-section-title">Pending Services</div><div class="ps-pending-grid">#foreach($paymentOption in $paymentOptions)#if($serviceIdPartnerServiceMap.get($paymentOption.getId()).getApplicableType()!="YES")<div class="ps-pending-item"><span class="ps-name">$paymentOption.getName()</span><div class="ps-actions"><button class="notApplicableByPartner ps-btn ps-btn-pni" data-toggle="modal"data-target="#serviceDeactivateByPartnerModal"data-serviceid="$paymentOption.getId()">Not Interested</button><button class="markApplicable ps-btn ps-btn-applicable"data-serviceid="$paymentOption.getId()">Applicable</button><button class="markNA ps-btn ps-btn-na" data-serviceid="$paymentOption.getId()">NotApplicable</button></div><div id="serviceDeactivateByPartnerModal" class="modal fade" role="dialog"></div></div>#end#end</div></div></div>## end ps-container#end