You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

576 lines
15 KiB

​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
  1. <!DOCTYPE html>
  2. <html lang="en" xmlns:th="http://www.thymeleaf.org">
  3. <head th:replace="~{fragments/modules/base/head :: head}"></head>
  4. <link rel="stylesheet" href="https://cdn.datatables.net/buttons/2.4.2/css/buttons.dataTables.min.css">
  5. <style>
  6. .mini-card {
  7. box-shadow: rgba(0, 0, 0, 0.5) 0px 3px 8px;
  8. border-radius: 6px;
  9. padding: 12px;
  10. text-align: center;
  11. background: #ffffff;
  12. min-height: 90px;
  13. display: flex;
  14. flex-direction: column;
  15. justify-content: center;
  16. }
  17. .card-box {
  18. box-shadow: rgba(0, 0, 0, 0.5) 0px 3px 8px;
  19. }
  20. /* Header styling */
  21. .govt-thead th {
  22. background-color: #212529 !important;
  23. color: #fff !important;
  24. text-align: center;
  25. vertical-align: middle;
  26. white-space: nowrap;
  27. /* 🔥 header single line */
  28. }
  29. /* Enable wrapping in body cells */
  30. #GovtTypeDatatable th,
  31. #GovtTypeDatatable td {
  32. white-space: normal !important;
  33. /* ALLOW WRAP */
  34. word-break: break-word;
  35. }
  36. /* Table layout */
  37. #GovtTypePersonDatatable {
  38. width: 100% !important;
  39. table-layout: fixed;
  40. }
  41. /* Modal body must not clip */
  42. #govtTypePersonModal .modal-body {
  43. max-height: 70vh;
  44. /* controls height */
  45. overflow-y: auto;
  46. /* ✅ vertical scroll outside table */
  47. overflow-x: hidden;
  48. }
  49. /* Table base */
  50. #GovtTypePersonDatatable {
  51. width: 100% !important;
  52. }
  53. /* Header */
  54. .govt-thead th {
  55. background: #212529;
  56. color: #fff;
  57. text-align: center;
  58. white-space: nowrap;
  59. }
  60. /* Body cells */
  61. #GovtTypePersonDatatable td {
  62. white-space: normal;
  63. word-break: break-word;
  64. vertical-align: top;
  65. font-size: 14px;
  66. }
  67. /* FORCE SAME WIDTH FOR HEADER & BODY TABLE */
  68. .dataTables_scrollHead table,
  69. .dataTables_scrollBody table {
  70. table-layout: fixed !important;
  71. width: 100% !important;
  72. }
  73. /* Modal body scroll (OUTSIDE table) */
  74. #govtTypeModal .modal-body {
  75. max-height: 70vh;
  76. /* adjust as needed */
  77. overflow-y: auto;
  78. overflow-x: hidden;
  79. }
  80. /* Normal table behavior */
  81. #GovtTypeDatatable {
  82. width: 100% !important;
  83. }
  84. /* Header cells */
  85. #GovtTypeDatatable thead th {
  86. white-space: nowrap;
  87. text-align: center;
  88. vertical-align: middle;
  89. }
  90. /* Body cells */
  91. #GovtTypeDatatable tbody td {
  92. white-space: normal;
  93. word-break: break-word;
  94. vertical-align: top;
  95. }
  96. /* 🔥 Force horizontal scroll to full width */
  97. .dataTables_wrapper {
  98. width: 100%;
  99. }
  100. .dataTables_scroll {
  101. overflow: auto !important;
  102. }
  103. .dataTables_scrollBody {
  104. overflow-x: auto !important;
  105. overflow-y: auto !important;
  106. max-height: 50vh;
  107. }
  108. /* Fix header width sync */
  109. .dataTables_scrollHeadInner,
  110. .dataTables_scrollHeadInner table {
  111. width: 100% !important;
  112. }
  113. /* Mobile fullscreen modal */
  114. @media (max-width: 768px) {
  115. #govtTypePersonModal .modal-dialog {
  116. max-width: 100%;
  117. margin: 0;
  118. }
  119. #govtTypePersonModal .modal-content {
  120. height: 100vh;
  121. border-radius: 0;
  122. }
  123. .dataTables_scrollBody {
  124. max-height: 65vh;
  125. }
  126. }
  127. /* Body cells wrap */
  128. #GovtTypePersonDatatable td {
  129. white-space: normal;
  130. word-break: break-word;
  131. vertical-align: top;
  132. font-size: 14px;
  133. }
  134. /* Fix DataTable header/body width mismatch */
  135. .dataTables_scrollHeadInner,
  136. .dataTables_scrollHeadInner table {
  137. width: 100% !important;
  138. }
  139. /* Fullscreen modal on mobile */
  140. @media (max-width: 768px) {
  141. #govtTypePersonModal .modal-dialog {
  142. max-width: 100%;
  143. margin: 0;
  144. }
  145. #govtTypePersonModal .modal-content {
  146. height: 100vh;
  147. border-radius: 0;
  148. }
  149. #govtTypePersonModal .modal-body {
  150. overflow-y: auto;
  151. }
  152. }
  153. /* MOBILE FIX */
  154. @media (max-width: 768px) {
  155. #GovtTypePersonDatatable {
  156. font-size: 13px;
  157. }
  158. .dataTables_wrapper {
  159. overflow-x: auto;
  160. }
  161. }
  162. @media (max-width: 768px) {
  163. /* #GovtTypePersonDatatable td {
  164. font-size: 13px;
  165. white-space: normal;
  166. word-break: break-word;
  167. } */
  168. #GovtTypePersonDatatable th {
  169. font-size: 13px;
  170. }
  171. }
  172. /* underline css*/
  173. .underline-hover {
  174. cursor: pointer;
  175. text-decoration: underline;
  176. }
  177. .underline-hover:hover {
  178. text-decoration: underline;
  179. /* optional, keeps underline on hover */
  180. }
  181. </style>
  182. <body>
  183. <div class="wrapper">
  184. <!-- header top menu Start -->
  185. <header th:replace="~{fragments/modules/base/header :: header}"></header>
  186. <!-- header top menu end -->
  187. <div class="page-wrap">
  188. <!--=============== Left Menu side Start ================-->
  189. <div th:replace="~{fragments/modules/base/menu :: menu}"></div>
  190. <!--=============== Left side End ================-->
  191. <div class="main-content">
  192. <div class="container-fluid">
  193. <div class="page-header mb-2">
  194. <div class="row align-items-end">
  195. <div class="col-lg-8">
  196. <div class="page-header-title">
  197. <!-- <i class="far fa-calendar-plus bg-blue"></i> -->
  198. <div class="d-inline">
  199. <h5>Dashboard</h5>
  200. <!-- <span>Mark attendance for training sessions </span> -->
  201. </div>
  202. </div>
  203. </div>
  204. </div>
  205. </div>
  206. <div class="row mt-4">
  207. <div class="col-12">
  208. <div class="card">
  209. <div class="card-body">
  210. <div class="row mt-2">
  211. <div class="col-md-4">
  212. <div class="card card-box p-3 text-center h-100">
  213. <h6 class="text-facebook mb-2">
  214. <b>Total Applications</b>
  215. </h6>
  216. <h4 class="text-twitter fw-700 mt-3"
  217. th:text="${applicationsCount.total_applications}"></h4>
  218. </div>
  219. </div>
  220. <!-- QA&QC Calls -->
  221. <div class="col-md-4">
  222. <div class="card card-box p-3 text-center h-100">
  223. <h6 class="text-facebook mb-2">
  224. <b>Completed</b>
  225. </h6>
  226. <h4 class="text-twitter fw-700 mt-3"
  227. th:text="${applicationsCount.completed_applications}"></h4>
  228. </div>
  229. </div>
  230. <!-- In-progress Calls -->
  231. <div class="col-md-4">
  232. <div class="card card-box p-3 text-center h-100">
  233. <h6 class="text-facebook mb-2">
  234. <b>Pending</b>
  235. </h6>
  236. <h4 class="text-twitter fw-700 mt-3"
  237. th:text="${applicationsCount.pending_applications}"></h4>
  238. </div>
  239. </div>
  240. </div>
  241. </div>
  242. <!-- <div class="card-body mt-2">
  243. <div class="row g-3 justify-content-center">
  244. <div class="col-6 col-sm-4 col-md-2">
  245. <div class="mini-card">
  246. <h6 class="text-facebook mb-2"><b> PO </b></h6>
  247. <h4 class="text-twitter fw-700 mt-3" th:text="${gradeCounts.PO}"></h4>
  248. </div>
  249. </div>
  250. <div class="col-6 col-sm-4 col-md-2">
  251. <div class="mini-card">
  252. <h6 class="text-facebook mb-2"><b> PO1 </b></h6>
  253. <h4 class="text-twitter fw-700 mt-3" th:text="${gradeCounts.PO1}"></h4>
  254. </div>
  255. </div>
  256. <div class="col-6 col-sm-4 col-md-2">
  257. <div class="mini-card">
  258. <h6 class="text-facebook mb-2"><b> PO2 </b></h6>
  259. <h4 class="text-twitter fw-700 mt-3" th:text="${gradeCounts.PO2}"></h4>
  260. </div>
  261. </div>
  262. <div class="col-6 col-sm-4 col-md-2">
  263. <div class="mini-card">
  264. <h6 class="text-facebook mb-2"><b> PO3 </b></h6>
  265. <h4 class="text-twitter fw-700 mt-3" th:text="${gradeCounts.PO3}"></h4>
  266. </div>
  267. </div>
  268. <div class="col-6 col-sm-4 col-md-2">
  269. <div class="mini-card">
  270. <h6 class="text-facebook mb-2"><b> PO4 </b></h6>
  271. <h4 class="text-twitter fw-700 mt-3" th:text="${gradeCounts.PO4}"></h4>
  272. </div>
  273. </div>
  274. </div>
  275. </div>-->
  276. <div class="card-body">
  277. <div class="row mt-4">
  278. <!-- Gender Card -->
  279. <div class="col-md-3">
  280. <div class="card card-box p-3 text-center h-100">
  281. <h6 class="text-facebook mb-2"><b>Gender</b></h6>
  282. <p class="mb-1">Male :
  283. <b class="text-twitter fw-700 mt-3"
  284. th:text="${validationCount.male}">0</b>
  285. </p>
  286. <p class="mb-0">Female :
  287. <b class="text-twitter fw-700 mt-3"
  288. th:text="${validationCount.female}">0</b>
  289. </p>
  290. <p class="mb-0">Transgender :
  291. <b class="text-twitter fw-700 mt-3"
  292. th:text="${validationCount.transgender}">0</b>
  293. </p>
  294. </div>
  295. </div>
  296. <!-- Voter ID Card -->
  297. <div class="col-md-3">
  298. <div class="card card-box p-3 text-center h-100">
  299. <h6 class="text-facebook mb-2"><b>Voter ID</b></h6>
  300. <p class="mb-1">Available :
  301. <b class="text-twitter fw-700 mt-3"
  302. th:text="${validationCount.voter_filled}">0</b>
  303. </p>
  304. <p class="mb-0">Not Available :
  305. <b class="text-twitter fw-700 mt-3"
  306. th:text="${validationCount.voter_not_filled}">0</b>
  307. </p>
  308. </div>
  309. </div>
  310. <!-- Phone Card -->
  311. <div class="col-md-3">
  312. <div class="card card-box p-3 text-center h-100">
  313. <h6 class="text-facebook mb-2"><b>Phone</b></h6>
  314. <p class="mb-1">Available :
  315. <b class="text-twitter fw-700 mt-3"
  316. th:text="${validationCount.phone_filled}">0</b>
  317. </p>
  318. <p class="mb-0">Not Available :
  319. <b class="text-twitter fw-700 mt-3"
  320. th:text="${validationCount.phone_not_filled}">0</b>
  321. </p>
  322. </div>
  323. </div>
  324. <!-- Image Card -->
  325. <div class="col-md-3">
  326. <div class="card card-box p-3 text-center h-100">
  327. <h6 class="text-facebook mb-2"><b>Image</b></h6>
  328. <p class="mb-1">Available :
  329. <b class="text-twitter fw-700 mt-3"
  330. th:text="${validationCount.image_filled}">0</b>
  331. </p>
  332. <p class="mb-0">Not Available :
  333. <b class="text-twitter fw-700 mt-3"
  334. th:text="${validationCount.image_not_filled}">0</b>
  335. </p>
  336. </div>
  337. </div>
  338. </div>
  339. </div>
  340. <!-- ================= Central and State Report Count ================= -->
  341. <!-- <div class="card-body">
  342. <div class="row mt-2">
  343. <div class="col-xl-6 col-sm-12">
  344. <div class="card card-box p-3 text-center h-100">
  345. <h6 class="text-facebook mb-2">
  346. <b>Central Govt Offices</b>
  347. </h6>
  348. <h4 class="text-twitter fw-700 mt-3 cursor-pointer underline-hover"
  349. th:text="${GovtTypeCount.central_count}" onclick="openGovtTypeModal('C')"></h4>
  350. <p class="mb-1">No of Applicant :
  351. <b class="text-twitter fw-700 mt-3"
  352. th:text="${GovtOfficeTypeCount.total_central}">0</b>
  353. </p>
  354. </div>
  355. </div>
  356. <div class="col-xl-6 col-sm-12">
  357. <div class="card card-box p-3 text-center h-100">
  358. <h6 class="text-facebook mb-2">
  359. <b>State Govt Offices </b>
  360. </h6>
  361. <h4 class="text-twitter fw-700 mt-3 cursor-pointer underline-hover"
  362. th:text="${GovtTypeCount.state_count}" onclick="openGovtTypeModal('S')"></h4>
  363. <p class="mb-1">No of Applicant :
  364. <b class="text-twitter fw-700 mt-3"
  365. th:text="${GovtOfficeTypeCount.total_state}">0</b>
  366. </p>
  367. </div>
  368. </div>
  369. </div>
  370. </div>-->
  371. </div>
  372. </div>
  373. </div>
  374. </div>
  375. </div>
  376. <div id="pageLoader"
  377. style="display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.8); z-index: 9999; text-align: center;">
  378. <div style="position: relative; top: 50%; transform: translateY(-50%);">
  379. <div class="spinner-border text-primary" role="status" style="width: 3rem; height: 3rem;">
  380. <span class="sr-only">Loading...</span>
  381. </div>
  382. <!-- Add the 'Please wait' text below the spinner -->
  383. <p style="margin-top: 1rem; font-size: 1.2rem; color: #007bff;">Please wait...</p>
  384. </div>
  385. </div>
  386. <footer th:replace="~{fragments/modules/base/footer :: footer}"></footer>
  387. </div>
  388. </div>
  389. <!--<div class="modal fade" id="govtTypeModal" tabindex="-1" role="dialog" aria-hidden="true" data-backdrop="static" data-keyboard="false">
  390. <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
  391. <div class="modal-content">
  392. <div class="modal-header bg-primary text-white">
  393. <h5 class="modal-title" id="govtTypeModalTitle"></h5>
  394. <button type="button" class="close text-white" data-dismiss="modal">
  395. <span>&times;</span>
  396. </button>
  397. </div>
  398. <div class="modal-body">
  399. <table id="GovtTypeDatatable"
  400. class="table table-bordered table-striped w-100">
  401. <thead class="govt-thead">
  402. <tr>
  403. <th>S.No</th>
  404. <th>Department</th>
  405. <th>Office</th>
  406. <th>Total Count</th>
  407. </tr>
  408. </thead>
  409. <tbody></tbody>
  410. </table>
  411. </div>
  412. </div>
  413. </div>
  414. </div>
  415. <div class="modal fade" id="govtTypePersonModal" tabindex="-1" role="dialog"
  416. aria-hidden="true" data-backdrop="static" data-keyboard="false">
  417. <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
  418. <div class="modal-content">
  419. <div class="modal-header bg-dark text-white">
  420. <h5 class="modal-title" id="govtTypePersonModalTitle"></h5>
  421. <button type="button" class="close text-white" data-dismiss="modal">
  422. <span>&times;</span>
  423. </button>
  424. </div>
  425. <div class="modal-body">
  426. <div class="table-responsive">
  427. <table id="GovtTypePersonDatatable"
  428. class="table table-bordered table-striped nowrap">
  429. <thead class="govt-thead">
  430. <tr>
  431. <th>S.No</th>
  432. <th>Unique No</th>
  433. <th>Name</th>
  434. <th>Sex</th>
  435. <th>Mobile</th>
  436. <th>Designation</th>
  437. <th>Department</th>
  438. <th>Office</th>
  439. <th>Govt Type</th>
  440. <th>Office Address</th>
  441. <th>Residential Address</th>
  442. <th>Native AC</th>
  443. <th>Residential AC</th>
  444. <th>Elector AC</th>
  445. <th>Working AC</th>
  446. </tr>
  447. </thead>
  448. <tbody></tbody>
  449. </table>
  450. </div>
  451. </div>
  452. </div>
  453. </div>
  454. </div>-->
  455. <!-- DataTables Buttons JS -->
  456. <script src="https://cdn.datatables.net/buttons/2.4.2/js/dataTables.buttons.min.js"></script>
  457. <script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.html5.min.js"></script>
  458. <script src="https://cdn.datatables.net/buttons/2.4.2/js/buttons.print.min.js"></script>
  459. <!-- Dependencies -->
  460. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
  461. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
  462. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
  463. <script th:replace="~{fragments/modules/base/script :: script}"></script>
  464. <script type="text/javascript"></script>
  465. </body>
  466. </html>