course_member.blade.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620
  1. <div class="col">
  2. <div class="row h-100">
  3. <div class="col card--ui" id="card--dashboard">
  4. <header id="title--section" style="display:none !important" class="d-flex align-items-center justify-content-between">
  5. <div class="title--section_name d-flex align-items-center justify-content-between">
  6. <i class="ico--ui title_section utenti me-2"></i>
  7. <h2 class="primary">Iscritti ai corsi</h2>
  8. </div>
  9. </header>
  10. <div class="showFilter" style="display:none" wire:ignore.self>
  11. <hr size="1">
  12. <div class="row g-3">
  13. <div class="col-md-2">
  14. <div class="row">
  15. <div class="col-md-12" style="margin-bottom:10px;">
  16. <b>Corso</b>
  17. </div>
  18. <div class="col-12">
  19. <select class="form-select filterCourse" wire:model="filterCourse" onchange="destroyDataTable()" multiple="multiple">
  20. @foreach($courses as $c)
  21. <option value="{{$c}}">{{$c}}
  22. @endforeach
  23. </select>
  24. </div>
  25. </div>
  26. </div>
  27. <div class="col-md-2">
  28. <div class="row">
  29. <div class="col-md-12" style="margin-bottom:10px;">
  30. <b>Livello</b>
  31. </div>
  32. <div class="col-12">
  33. <select class="form-select filterLevel" wire:model="filterLevel" onchange="destroyDataTable()" multiple="multiple">
  34. @foreach($course_levels as $c)
  35. <option value="{{$c->id}}">{{$c->name}}
  36. @endforeach
  37. </select>
  38. </div>
  39. </div>
  40. </div>
  41. <div class="col-md-2">
  42. <div class="row">
  43. <div class="col-md-12" style="margin-bottom:10px;">
  44. <b>Frequenza</b>
  45. </div>
  46. <div class="col-12">
  47. <select class="form-select filterFrequency" wire:model="filterFrequency" onchange="destroyDataTable()" multiple="multiple">
  48. @foreach($course_frequencies as $c)
  49. <option value="{{$c->id}}">{{$c->name}}
  50. @endforeach
  51. </select>
  52. </div>
  53. </div>
  54. </div>
  55. <div class="col-md-2">
  56. <div class="row">
  57. <div class="col-md-12" style="margin-bottom:10px;">
  58. <b>Tipologia</b>
  59. </div>
  60. <div class="col-12">
  61. <select class="form-select filterType" wire:model="filterType" onchange="destroyDataTable()" multiple="multiple">
  62. @foreach($course_types as $c)
  63. <option value="{{$c->id}}">{{$c->name}}
  64. @endforeach
  65. </select>
  66. </div>
  67. </div>
  68. </div>
  69. <div class="col-md-2">
  70. <div class="row">
  71. <div class="col-md-12" style="margin-bottom:10px;">
  72. <b>Durata</b>
  73. </div>
  74. <div class="col-12">
  75. <select class="form-select filterDuration" wire:model="filterDuration" onchange="destroyDataTable()" multiple="multiple">
  76. @foreach($course_durations as $c)
  77. <option value="{{$c->id}}">{{$c->name}}
  78. @endforeach
  79. </select>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. <div class="row g-3 mt-1">
  85. <div class="col-md-3">
  86. <div class="row">
  87. <div class="col-md-12" style="margin-bottom:10px;">
  88. <b>Giorni</b>
  89. </div>
  90. <div class="col-12">
  91. <select class="form-select filterDays" wire:model="filterDays" onchange="destroyDataTable()" multiple="multiple">
  92. <option value="lun">Lunedì
  93. <option value="mar">Martedì
  94. <option value="mer">Mercoledì
  95. <option value="gio">Giovedì
  96. <option value="ven">Venerdì
  97. <option value="sab">Sabato
  98. <option value="dom">Domenica
  99. </select>
  100. </div>
  101. </div>
  102. </div>
  103. <div class="col-md-3">
  104. <div class="row">
  105. <div class="col-md-12" style="margin-bottom:10px;">
  106. <b>Orari</b>
  107. </div>
  108. <div class="col-12">
  109. <select class="form-select filterHours" wire:model="filterHours" onchange="destroyDataTable()" multiple="multiple">
  110. @for($c=6;$c<=23;$c++)
  111. <option value="{{str_pad($c, 2, "0", STR_PAD_LEFT)}}:00">{{str_pad($c, 2, "0", STR_PAD_LEFT)}}:00
  112. <option value="{{str_pad($c, 2, "0", STR_PAD_LEFT)}}:30">{{str_pad($c, 2, "0", STR_PAD_LEFT)}}:30
  113. @endfor
  114. </select>
  115. </div>
  116. </div>
  117. </div>
  118. <div class="col-md-3">
  119. <div class="row">
  120. <div class="col-md-12" style="margin-bottom:10px;">
  121. <b>Anno</b>
  122. </div>
  123. <div class="col-12">
  124. <select class="form-select" wire:model="filterYear" onchange="destroyDataTable()">
  125. <option value="">--Seleziona--
  126. @foreach($course_years as $c)
  127. <option value="{{$c}}">{{$c}}
  128. @endforeach
  129. </select>
  130. </div>
  131. </div>
  132. </div>
  133. <div class="col-md-3">
  134. <div class="row">
  135. <div class="col-md-12" style="margin-bottom:10px;">
  136. <b>Pagamento iscrizione</b>
  137. </div>
  138. <div class="col-12">
  139. <select class="form-select" wire:model="filterSubscription" onchange="destroyDataTable()">
  140. <option value="">--Seleziona--
  141. <option value="1">Pagata
  142. <option value="0">Non Pagata
  143. </select>
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. <div class="row g-3 mt-1">
  149. <div class="col-md-3">
  150. <div class="row">
  151. <div class="col-md-12" style="margin-bottom:10px;">
  152. <b>Tipologia di tesseramento</b>
  153. </div>
  154. @foreach(getCards() as $card)
  155. <div class="col-12">
  156. <div class="form-check form-check-inline align-items-center">
  157. <input class="form-check-input chkCard" type="checkbox" value="{{$card->id}}" wire:model="chkCard" onclick="destroyDataTable()">
  158. <label class="form-check-label ms-2" >{{$card->name}}</label>
  159. </div>
  160. </div>
  161. @endforeach
  162. </div>
  163. </div>
  164. <div class="col-md-3">
  165. <div class="row">
  166. <div class="col-md-12" style="margin-bottom:10px;">
  167. <b>Stato tesseramento</b>
  168. </div>
  169. <div class="col-12">
  170. <select class="form-select filterStatus" wire:model="filterStatus" onchange="destroyDataTable()" multiple="multiple">
  171. <option value="2">Attivo
  172. <option value="1">Sospeso
  173. <option value="0">Non tesserato
  174. </select>
  175. </div>
  176. </div>
  177. </div>
  178. <div class="col-md-3">
  179. <div class="row">
  180. <div class="col-md-12" style="margin-bottom:10px;">
  181. <b>Certificato medico</b>
  182. </div>
  183. <div class="col-12">
  184. <div class="form-check form-check-inline align-items-center">
  185. <input class="form-check-input chkCertificateScadenza" name="chkCertificateScadenza" wire:model="chkCertificateScadenza" type="radio" value="0" checked onchange="destroyDataTable()">
  186. <label class="form-check-label ms-2" >Tutti</label>
  187. </div>
  188. </div>
  189. <div class="col-12">
  190. <div class="form-check form-check-inline align-items-center">
  191. <input class="form-check-input chkCertificateScadenza" name="chkCertificateScadenza" wire:model="chkCertificateScadenza" type="radio" value="1" onchange="destroyDataTable()">
  192. <label class="form-check-label ms-2" >Scaduti</label>
  193. </div>
  194. </div>
  195. <div class="col-12">
  196. <div class="form-check form-check-inline align-items-center">
  197. <input class="form-check-input chkCertificateScadenza" name="chkCertificateScadenza" wire:model="chkCertificateScadenza" type="radio" value="2" onchange="destroyDataTable()">
  198. <label class="form-check-label ms-2" >In Scadenza</label>
  199. </div>
  200. </div>
  201. </div>
  202. </div>
  203. <div class="col-md-3">
  204. <div class="row">
  205. <div class="col-md-12" style="margin-bottom:10px;">
  206. <b>Tipologia certificato medico</b>
  207. </div>
  208. <div class="col-12">
  209. <div class="form-check form-check-inline align-items-center">
  210. <input class="form-check-input chkCertificateType" name="chkCertificateType" wire:model="chkCertificateType" type="radio" value="" checked onchange="destroyDataTable()">
  211. <label class="form-check-label ms-2" >Tutti</label>
  212. </div>
  213. </div>
  214. <div class="col-12">
  215. <div class="form-check form-check-inline align-items-center">
  216. <input class="form-check-input chkCertificateType" name="chkCertificateType" wire:model="chkCertificateType" type="radio" value="N" onchange="destroyDataTable()">
  217. <label class="form-check-label ms-2" >Normale</label>
  218. </div>
  219. </div>
  220. <div class="col-12">
  221. <div class="form-check form-check-inline align-items-center">
  222. <input class="form-check-input chkCertificateType" name="chkCertificateType" wire:model="chkCertificateType" type="radio" value="A" onchange="destroyDataTable()">
  223. <label class="form-check-label ms-2" >Agonistico</label>
  224. </div>
  225. </div>
  226. </div>
  227. </div>
  228. @if(false)
  229. <div class="col-12">
  230. <div class="form-check form-check-inline align-items-center">
  231. <input class="form-check-input chkCertificateNormal" type="checkbox" wire:model="chkCertificateNormal" onclick="destroyDataTable()" value="1">
  232. <label class="form-check-label ms-2" >Normale</label>
  233. </div>
  234. </div>
  235. <div class="col-12">
  236. <div class="form-check form-check-inline align-items-center">
  237. <input class="form-check-input chkCertificateScadenza" type="checkbox" wire:model="chkCertificateScadenza" onclick="destroyDataTable()" value="1">
  238. <label class="form-check-label ms-2" >In Scadenza</label>
  239. </div>
  240. </div>
  241. <div class="col-12">
  242. <div class="form-check form-check-inline align-items-center">
  243. <input class="form-check-input chkCertificateAgonistico" type="checkbox" wire:model="chkCertificateAgonistico" onclick="destroyDataTable()" value="1">
  244. <label class="form-check-label ms-2" >Agonistico</label>
  245. </div>
  246. </div>
  247. <div class="col-12">
  248. <div class="form-check form-check-inline align-items-center">
  249. <input class="form-check-input chkCertificateScaduti" type="checkbox" wire:model="chkCertificateScaduti" onclick="destroyDataTable()" value="1">
  250. <label class="form-check-label ms-2" >Scaduti</label>
  251. </div>
  252. </div>
  253. @endif
  254. </div>
  255. <div class="row">
  256. <div class="col-md-2">
  257. <div class="row">
  258. <div class="col-md-12" style="margin-bottom:10px;">
  259. <b>Età</b>
  260. </div>
  261. <div class="col-12">
  262. <div class="row">
  263. <div class="col-3"><label class="form-check-label ms-2" >Da</label></div>
  264. <div class="col-9"><input class="form-control txt" type="number" name="fromYear" wire:model="fromYear"></div>
  265. </div>
  266. </div>
  267. <div class="col-12">
  268. <div class="row">
  269. <div class="col-3"><label class="form-check-label ms-2" >A</label></div>
  270. <div class="col-9"><input class="form-control txt" type="number" name="toYear" wire:model="toYear"></div>
  271. </div>
  272. </div>
  273. </div>
  274. </div>
  275. <div class="col-md-2">
  276. <div class="row">
  277. <div class="col-md-12" style="margin-bottom:10px;">
  278. <b>Anno di nascita</b>
  279. </div>
  280. <div class="col-12">
  281. <div class="row">
  282. <div class="col-3"><label class="form-check-label ms-2" >Da</label></div>
  283. <div class="col-9"><input class="form-control txt" type="number" name="fromFromYear" wire:model="fromFromYear" onBlur="destroyDataTable()" onfocusout="destroyDataTable()"></div>
  284. </div>
  285. </div>
  286. <div class="col-12">
  287. <div class="row">
  288. <div class="col-3"><label class="form-check-label ms-2" >A</label></div>
  289. <div class="col-9"><input class="form-control txt" type="number" name="toToYear" wire:model="toToYear"></div>
  290. </div>
  291. </div>
  292. </div>
  293. </div>
  294. </div>
  295. <div class="row g-3 mt-2">
  296. <div class="col-md-12" style="text-align:right">
  297. <button class="btn--ui_outline light" wire:click.prevent="disableSearch()" onclick="destroyDataTable()">CANCELLA</button>
  298. <button class="btn--ui" onclick="searchAction()">FILTRA</button>
  299. </div>
  300. </div>
  301. <hr size="1">
  302. </div>
  303. <section id="resume-table">
  304. <div class="compare--chart_wrapper d-none"></div>
  305. <div id="filter">{{$filter}}</div>
  306. <table class="table tablesaw tablesaw-stack" id="tablesaw-350">
  307. <thead>
  308. <tr>
  309. <th scope="col">#</th>
  310. <th scope="col">Cognome</th>
  311. <th scope="col">Nome</th>
  312. <th scope="col">Età</th>
  313. <th scope="col">Anno di nascita</th>
  314. <th scope="col">Telefono</th>
  315. <th scope="col">Email</th>
  316. </tr>
  317. </thead>
  318. <tbody id="checkall-target">
  319. @foreach($records as $idx => $record)
  320. <tr>
  321. <td>{{$idx +1}}</td>
  322. <td>{{$record->member->last_name}}</td>
  323. <td>{{$record->member->first_name}}</td>
  324. <td>{{$record->member->getAge()}}</td>
  325. <td>{{date("Y", strtotime($record->member->birth_date))}}</td>
  326. <td>{{$record->member->phone}}</td>
  327. <td>{{$record->member->email}}</td>
  328. </tr>
  329. @endforeach
  330. </tbody>
  331. </table>
  332. </section>
  333. </div>
  334. @push('scripts')
  335. <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
  336. <style>
  337. .select2-container--default .select2-selection--single{
  338. background-color: #E9F0F5;
  339. border: 0.0625rem solid #DFE5EB;
  340. font-size: 0.75rem;
  341. }
  342. .select2-selection
  343. {
  344. height: 38px !important;
  345. }
  346. .select2-selection__rendered
  347. {
  348. padding-top:3px;
  349. }
  350. .select2 {
  351. width:100% !important;
  352. }
  353. </style>
  354. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  355. <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  356. @endpush
  357. @push('scripts')
  358. <link href="/css/datatables.css" rel="stylesheet" />
  359. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  360. <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
  361. <style>
  362. .select2-container--default .select2-selection--single{
  363. background-color: #E9F0F5;
  364. border: 0.0625rem solid #DFE5EB;
  365. font-size: 0.75rem;
  366. }
  367. .select2-selection
  368. {
  369. height: 38px !important;
  370. }
  371. .select2-selection__rendered
  372. {
  373. padding-top:3px;
  374. }
  375. .select2 {
  376. width:100% !important;
  377. }
  378. .select2-selection--multiple{
  379. overflow: hidden !important;
  380. height: auto !important;
  381. }
  382. .select2-container {
  383. box-sizing: border-box;
  384. display: inline-block;
  385. margin: 0;
  386. position: relative;
  387. vertical-align: middle;
  388. }
  389. .select2-container .select2-selection--single {
  390. box-sizing: border-box;
  391. cursor: pointer;
  392. display: block;
  393. height: 38px;
  394. user-select: none;
  395. -webkit-user-select: none;
  396. }
  397. .select2-container .select2-selection--single .select2-selection__rendered {
  398. display: block;
  399. padding-left: 8px;
  400. padding-right: 20px;
  401. overflow: hidden;
  402. text-overflow: ellipsis;
  403. white-space: nowrap;
  404. }
  405. .select2-selection__choice__display{
  406. color:#000000 !important;
  407. }
  408. </style>
  409. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  410. <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  411. <script src="/assets/js/datatables.js"></script>
  412. <script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.dataTables.js"></script>
  413. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
  414. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
  415. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
  416. @endpush
  417. @push('scripts')
  418. <script>
  419. $(document).ready(function() {
  420. loadDataTable();
  421. } );
  422. $('.filterCourse').select2();
  423. $('.filterCourse').on('change', function (e) {
  424. var data = $('.filterCourse').select2("val");
  425. if (data == null) data = [];
  426. @this.set('filterCourse', data);
  427. //@this.search();
  428. });
  429. $('.filterLevel').select2();
  430. $('.filterLevel').on('change', function (e) {
  431. var data = $('.filterLevel').select2("val");
  432. if (data == null) data = [];
  433. @this.set('filterLevel', data);
  434. //@this.search();
  435. });
  436. $('.filterFrequency').select2();
  437. $('.filterFrequency').on('change', function (e) {
  438. var data = $('.filterFrequency').select2("val");
  439. if (data == null) data = [];
  440. @this.set('filterFrequency', data);
  441. //@this.search();
  442. });
  443. $('.filterType').select2();
  444. $('.filterType').on('change', function (e) {
  445. var data = $('.filterType').select2("val");
  446. if (data == null) data = [];
  447. @this.set('filterType', data);
  448. //@this.search();
  449. });
  450. $('.filterDuration').select2();
  451. $('.filterDuration').on('change', function (e) {
  452. var data = $('.filterDuration').select2("val");
  453. if (data == null) data = [];
  454. @this.set('filterDuration', data);
  455. //@this.search();
  456. });
  457. $('.filterDays').select2();
  458. $('.filterDays').on('change', function (e) {
  459. var data = $('.filterDays').select2("val");
  460. if (data == null) data = [];
  461. @this.set('filterDays', data);
  462. //@this.search();
  463. });
  464. $('.filterHours').select2();
  465. $('.filterHours').on('change', function (e) {
  466. var data = $('.filterHours').select2("val");
  467. if (data == null) data = [];
  468. @this.set('filterHours', data);
  469. //@this.search();
  470. });
  471. $('.filterStatus').select2();
  472. $('.filterStatus').on('change', function (e) {
  473. var data = $('.filterStatus').select2("val");
  474. if (data == null) data = [];
  475. @this.set('filterStatus', data);
  476. //@this.search();
  477. });
  478. $(".txt").on('change keydown keypress paste input', function(){
  479. destroyDataTable();
  480. });
  481. Livewire.on('load-data-table', () => {
  482. $('.filterCourse').select2();
  483. $('.filterLevel').select2();
  484. $('.filterFrequency').select2();
  485. $('.filterType').select2();
  486. $('.filterDuration').select2();
  487. $('.filterDays').select2();
  488. $('.filterHours').select2();
  489. $('.filterStatus').select2();
  490. loadDataTable();
  491. });
  492. Livewire.on('destroy-data-table', () => {
  493. $('#tablesaw-350').DataTable().destroy();
  494. });
  495. function destroyDataTable()
  496. {
  497. $('#tablesaw-350').DataTable().destroy();
  498. }
  499. var isFilter = false;
  500. $(document).ready(function() {
  501. $(document).on("click",".showHideFilter",function() {
  502. if (isFilter)
  503. {
  504. isFilter = false;
  505. $(".showFilter").hide();
  506. }
  507. else
  508. {
  509. isFilter = true;
  510. $(".showFilter").show();
  511. }
  512. });
  513. } );
  514. function searchAction()
  515. {
  516. //destroyDataTable();
  517. //@this.search();
  518. }
  519. function loadDataTable(){
  520. $('#tablesaw-350').DataTable({
  521. thead: {
  522. 'th': {'background-color': 'blue'}
  523. },
  524. layout: {
  525. topStart : null,
  526. topEnd : null,
  527. top1A: {
  528. buttons: [
  529. {
  530. extend: 'collection',
  531. text: 'Esporta',
  532. buttons: [
  533. {
  534. extend: 'excelHtml5',
  535. title: 'Iscritti corsi',
  536. exportOptions: {
  537. columns: ":not(':last')"
  538. }
  539. },
  540. {
  541. extend: 'pdfHtml5',
  542. title: 'Iscritti corsi',
  543. exportOptions: {
  544. columns: ":not(':last')"
  545. }
  546. },
  547. {
  548. extend: 'print',
  549. text: 'Stampa',
  550. title: 'Iscritti corsi',
  551. exportOptions: {
  552. columns: ":not(':last')"
  553. }
  554. }
  555. ],
  556. dropup: true
  557. }
  558. ]
  559. },
  560. top1B : {
  561. pageLength: {
  562. menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
  563. }
  564. },
  565. top1C :'search',
  566. },
  567. order: [[0, 'asc'], [1, 'asc']],
  568. pagingType: 'numbers',
  569. "language": {
  570. "url": "/assets/js/Italian.json"
  571. },
  572. "fnInitComplete": function (oSettings, json) {
  573. var html = '&nbsp;<a href="#" class="showHideFilter btn--ui"><i class="fa-solid fa-sliders"></i></a>';
  574. $(".dt-search").append(html);
  575. }
  576. });
  577. $('#tablesaw-350 thead tr th').addClass('col');
  578. $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
  579. }
  580. </script>
  581. @endpush