course_list_original.blade.php 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  1. <div class="col card--ui" id="card--dashboard" style="padding-top: 0px !important;">
  2. <header id="title--section" style="display:none !important" class="d-flex align-items-center justify-content-between">
  3. <div class="title--section_name d-flex align-items-center justify-content-between">
  4. <i class="ico--ui title_section utenti me-2"></i>
  5. <h2 class="primary">Pagamento corsi</h2>
  6. </div>
  7. </header>
  8. <div class="showFilter" style="display:none" wire:ignore.self>
  9. <hr size="1">
  10. <div class="row g-3">
  11. <div class="col-md-2">
  12. <div class="row">
  13. <div class="col-md-12" style="margin-bottom:10px;">
  14. <b>Anno</b>
  15. </div>
  16. <div class="col-12">
  17. <select class="form-select filterYear" >
  18. <option value="">--Seleziona--
  19. @foreach($course_years as $c)
  20. @php
  21. $selected = '';
  22. try
  23. {
  24. list($f, $t) = explode("-", $c);
  25. if ($f == date("Y"))
  26. $selected = 'selected';
  27. } catch (Exception $e) {
  28. }
  29. @endphp
  30. <option value="{{$c}}" {{$selected}}>{{$c}}
  31. @endforeach
  32. </select>
  33. </div>
  34. </div>
  35. </div>
  36. <div class="col-md-2">
  37. <div class="row">
  38. <div class="col-md-12" style="margin-bottom:10px;">
  39. <b>Corso</b>
  40. </div>
  41. <div class="col-12" >
  42. <select class="form-select filterCourse" multiple="multiple">
  43. @foreach($courses as $c)
  44. <option value="{{$c}}">{{$c}}
  45. @endforeach
  46. </select>
  47. </div>
  48. </div>
  49. </div>
  50. <div class="col-md-2">
  51. <div class="row">
  52. <div class="col-md-12" style="margin-bottom:10px;">
  53. <b>Livello</b>
  54. </div>
  55. <div class="col-12">
  56. <select class="form-select filterLevel" multiple="multiple">
  57. @foreach($course_levels as $c)
  58. <option value="{{$c->id}}">{{$c->name}}
  59. @endforeach
  60. </select>
  61. </div>
  62. </div>
  63. </div>
  64. <div class="col-md-2">
  65. <div class="row">
  66. <div class="col-md-12" style="margin-bottom:10px;">
  67. <b>Frequenza</b>
  68. </div>
  69. <div class="col-12">
  70. <select class="form-select filterFrequency" multiple="multiple">
  71. @foreach($course_frequencies as $c)
  72. <option value="{{$c->id}}">{{$c->name}}
  73. @endforeach
  74. </select>
  75. </div>
  76. </div>
  77. </div>
  78. <div class="col-md-2">
  79. <div class="row">
  80. <div class="col-md-12" style="margin-bottom:10px;">
  81. <b>Tipologia</b>
  82. </div>
  83. <div class="col-12">
  84. <select class="form-select filterType" multiple="multiple">
  85. @foreach($course_types as $c)
  86. <option value="{{$c->id}}">{{$c->name}}
  87. @endforeach
  88. </select>
  89. </div>
  90. </div>
  91. </div>
  92. <div class="col-md-2">
  93. <div class="row">
  94. <div class="col-md-12" style="margin-bottom:10px;">
  95. <b>Durata</b>
  96. </div>
  97. <div class="col-12">
  98. <select class="form-select filterDuration" multiple="multiple">
  99. @foreach($course_durations as $c)
  100. <option value="{{$c->id}}">{{$c->name}}
  101. @endforeach
  102. </select>
  103. </div>
  104. </div>
  105. </div>
  106. </div>
  107. <div class="row g-3" style="margin-top:20px;">
  108. <div class="col-md-12" style="text-align:right">
  109. <button class="btn--ui_outline light" onclick="reset()">CANCELLA</button>
  110. <button class="btn--ui" onclick="loadDataTable()">FILTRA</button>
  111. </div>
  112. </div>
  113. <hr size="1">
  114. </div>
  115. <div class="row text-right">
  116. <div class="col-md-12" style="text-align:right">
  117. <button style="display:none; width:200px;" class="btn--ui btNewPayment" onclick="newPayment()">NUOVA ENTRATA</button>
  118. </div>
  119. </div>
  120. <section id="resume-table" class="scrollTable">
  121. <div class="compare--chart_wrapper d-none"></div>
  122. <table class="table tablesaw tableHead tablesaw-stack pagamento--corsi display nowrap" id="tablesaw-350" width="100%">
  123. <thead>
  124. <tr>
  125. <th scope="col" class="sticky-col-header first-zero"></th>
  126. <th scope="col" class="sticky-col-header first-col" style="background-color:#f6f8fa !important">Corso</th>
  127. <th scope="col" class="sticky-col-header second-col">Cognome</th>
  128. <th scope="col" class="sticky-col-header third-col">Nome</th>
  129. <th scope="col">Iscrizione</th>
  130. @foreach($months as $m)
  131. <th scope="col">&nbsp;&nbsp;&nbsp;&nbsp;{{$m}}</th>
  132. @endforeach
  133. </tr>
  134. </thead>
  135. <tbody id="checkall-target">
  136. </tbody>
  137. <tfoot id="checkall-target">
  138. <tr>
  139. <th class="sticky-col-header first-zero"></th>
  140. <th class="sticky-col-header first-col"></th>
  141. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  142. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  143. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  144. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  145. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  146. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  147. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  148. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  149. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  150. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  151. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  152. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  153. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  154. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  155. <th style="padding-left:5px !important;padding-right:5px !important;"></th>
  156. </tr>
  157. </tfoot>
  158. </table>
  159. </section>
  160. </div>
  161. @push('scripts')
  162. @endpush
  163. @push('scripts')
  164. <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
  165. <style>
  166. .scrollTable {
  167. padding: 15px;
  168. /*max-width: 800px !important;*/
  169. /*overflow-x: auto;
  170. overflow-y: auto;
  171. white-space: nowrap;*/
  172. /*border: 1px solid #ddd;*/
  173. }
  174. ::-webkit-scrollbar-thumb {
  175. background: #e4e4e4;
  176. border-radius: 10px;
  177. }
  178. .select2-container--default .select2-selection--single{
  179. background-color: #E9F0F5;
  180. border: 0.0625rem solid #DFE5EB;
  181. font-size: 0.75rem;
  182. }
  183. .select2-selection
  184. {
  185. height: 38px !important;
  186. }
  187. .select2-selection__rendered
  188. {
  189. padding-top:3px;
  190. }
  191. .select2 {
  192. width:100% !important;
  193. }
  194. tfoot #checkall-target > tr > th
  195. {
  196. padding-right:5px !important;
  197. }
  198. /*.container-fluid
  199. {
  200. display: table-row !important;
  201. }
  202. .row.row.header--gestionale
  203. {
  204. padding-left:20px !important;
  205. }*/
  206. </style>
  207. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  208. <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  209. @endpush
  210. @push('scripts')
  211. <link href="/css/datatables.css" rel="stylesheet" />
  212. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  213. <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
  214. <style>
  215. #tablesaw-350_wrapper > div.justify-content-between
  216. {
  217. background-color: white;
  218. position: sticky;
  219. z-index: 100000;
  220. padding-top:10px;
  221. top: -15px;
  222. left: 0px;
  223. }
  224. /*.table-v-scroll > div, #checkall-target
  225. {
  226. overflow-x: auto !important;
  227. overflow-y: hidden !important;
  228. }*/
  229. table.tableHead thead {
  230. /* Important */
  231. position: sticky;
  232. z-index: 100;
  233. top: 35px;
  234. }
  235. table thead {
  236. /* Important */
  237. position: sticky;
  238. z-index: 100;
  239. top: 0;
  240. }
  241. .select2-container--default .select2-selection--single{
  242. background-color: #E9F0F5;
  243. border: 0.0625rem solid #DFE5EB;
  244. font-size: 0.75rem;
  245. }
  246. .select2-selection
  247. {
  248. height: 38px !important;
  249. }
  250. .select2-selection__rendered
  251. {
  252. padding-top:3px;
  253. }
  254. .select2 {
  255. width:100% !important;
  256. }
  257. .select2-selection--multiple{
  258. overflow: hidden !important;
  259. height: auto !important;
  260. }
  261. .select2-container {
  262. box-sizing: border-box;
  263. display: inline-block;
  264. margin: 0;
  265. position: relative;
  266. vertical-align: middle;
  267. }
  268. .select2-container .select2-selection--single {
  269. box-sizing: border-box;
  270. cursor: pointer;
  271. display: block;
  272. height: 38px;
  273. user-select: none;
  274. -webkit-user-select: none;
  275. }
  276. .select2-container .select2-selection--single .select2-selection__rendered {
  277. display: block;
  278. padding-left: 8px;
  279. padding-right: 20px;
  280. overflow: hidden;
  281. text-overflow: ellipsis;
  282. white-space: nowrap;
  283. }
  284. .select2-selection__choice__display{
  285. color:#000000 !important;
  286. }
  287. .sticky-col-header {
  288. position: -webkit-sticky !important;
  289. position: sticky !important;
  290. background-color: '#f6f8fa' !important;
  291. }
  292. .sticky-col {
  293. position: -webkit-sticky !important;
  294. position: sticky !important;
  295. background-color: white;
  296. }
  297. .first-zero {
  298. width: 20px;
  299. min-width: 20px;
  300. max-width: 20px;
  301. left: 0px;
  302. z-index:99;
  303. }
  304. .first-col {
  305. width: 100px;
  306. min-width: 100px;
  307. max-width: 100px;
  308. left: 0px;
  309. z-index:99;
  310. }
  311. .second-col {
  312. width: 150px;
  313. min-width: 150px;
  314. max-width: 150px;
  315. left: 100px;
  316. z-index:99;
  317. }
  318. .third-col {
  319. width: 150px;
  320. min-width: 150px;
  321. max-width: 150px;
  322. left: 250px;
  323. z-index:99;
  324. }
  325. </style>
  326. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  327. <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  328. <script src="/assets/js/datatables.js"></script>
  329. <script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.dataTables.js"></script>
  330. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
  331. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
  332. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
  333. @endpush
  334. @push('scripts')
  335. <script>
  336. var totals = '';
  337. $(document).ready(function() {
  338. loadDataTable();
  339. } );
  340. $('.filterYear').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  341. $('.filterYear').val('{{date("Y")-1}}-{{date("Y")}}').trigger("change");
  342. $('.filterCourse').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  343. /*$('.filterCourse').on('change', function (e) {
  344. var data = $('.filterCourse').select2("val");
  345. if (data == null) data = [];
  346. @this.set('filterCourse', data);
  347. //@this.search();
  348. });*/
  349. $('.filterLevel').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  350. /*$('.filterLevel').on('change', function (e) {
  351. var data = $('.filterLevel').select2("val");
  352. if (data == null) data = [];
  353. //@this.set('filterLevel', data);
  354. //@this.search();
  355. });*/
  356. $('.filterFrequency').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  357. /*$('.filterFrequency').on('change', function (e) {
  358. var data = $('.filterFrequency').select2("val");
  359. if (data == null) data = [];
  360. @this.set('filterFrequency', data);
  361. //@this.search();
  362. });*/
  363. $('.filterType').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  364. /*$('.filterType').on('change', function (e) {
  365. var data = $('.filterType').select2("val");
  366. if (data == null) data = [];
  367. @this.set('filterType', data);
  368. //@this.search();
  369. });*/
  370. $('.filterDuration').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  371. /*$('.filterDuration').on('change', function (e) {
  372. var data = $('.filterDuration').select2("val");
  373. if (data == null) data = [];
  374. // @this.set('filterDuration', data);
  375. //@this.search();
  376. });*/
  377. Livewire.on('load-data-table', () => {
  378. $('.filterYear').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  379. $('.filterCourse').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  380. $('.filterLevel').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  381. $('.filterFrequency').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  382. $('.filterType').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  383. $('.filterDuration').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  384. loadDataTable();
  385. });
  386. Livewire.on('destroy-data-table', () => {
  387. $('#tablesaw-350').DataTable().destroy();
  388. });
  389. function destroyDataTable()
  390. {
  391. $('#tablesaw-350').DataTable().destroy();
  392. }
  393. var isFilter = false;
  394. $(document).ready(function() {
  395. isFilter = Number(localStorage.getItem("isFilter_CourseListOriginal")) ?? false;
  396. if (isFilter) {
  397. $(".showFilter").show();
  398. } else {
  399. $(".showFilter").hide();
  400. }
  401. $(document).on("click",".showHideFilter",function() {
  402. if (isFilter)
  403. {
  404. isFilter = false;
  405. $(".showFilter").hide();
  406. }
  407. else
  408. {
  409. isFilter = true;
  410. $(".showFilter").show();
  411. }
  412. localStorage.setItem("isFilter_CourseListOriginal", Number(isFilter));
  413. });
  414. } );
  415. function searchAction()
  416. {
  417. //destroyDataTable();
  418. //@this.search();
  419. }
  420. var filterYear = localStorage.getItem("filterYearCourseList");
  421. if (filterYear)
  422. {
  423. $('.filterYear').val(filterYear).trigger('change');
  424. }
  425. var filterCourse = localStorage.getItem("filterCourseCourseList");
  426. if (filterCourse)
  427. {
  428. $('.filterCourse').val(filterCourse).trigger('change');
  429. }
  430. var filterLevel = localStorage.getItem("filterLevelCourseList");
  431. if (filterLevel)
  432. {
  433. $('.filterLevel').val(filterLevel).trigger('change');
  434. }
  435. var filterFrequency = localStorage.getItem("filterFrequencyCourseList");
  436. if (filterFrequency)
  437. {
  438. $('.filterFrequency').val(filterFrequency).trigger('change');
  439. }
  440. var filterDuration = localStorage.getItem("filterDurationCourseList");
  441. if (filterDuration)
  442. {
  443. $('.filterDuration').val(filterDuration).trigger('change');
  444. }
  445. var filterType = localStorage.getItem("filterTypeCourseList");
  446. if (filterType)
  447. {
  448. $('.filterType').val(filterType).trigger('change');
  449. }
  450. function reset()
  451. {
  452. $('.filterYear').val(null).trigger("change");
  453. $('.filterCourse').val(null).trigger("change");
  454. $('.filterLevel').val(null).trigger("change");
  455. $('.filterFrequency').val(null).trigger("change");
  456. $('.filterDuration').val(null).trigger("change");
  457. $('.filterType').val(null).trigger("change");
  458. destroyDataTable();
  459. //localStorage.clear();
  460. loadDataTable();
  461. }
  462. function loadDataTable(){
  463. if ( $.fn.DataTable.isDataTable('#tablesaw-350') ) {
  464. $('#tablesaw-350').DataTable().destroy();
  465. }
  466. var filterYear = $('.filterYear').val();
  467. localStorage.setItem("filterYearCourseList", filterYear);
  468. var filterCourse = $('.filterCourse').val();
  469. localStorage.setItem("filterCourseCourseList", filterCourse);
  470. var filterLevel = $('.filterLevel').val();
  471. localStorage.setItem("filterLevelCourseList", filterLevel);
  472. var filterDuration = $('.filterDuration').val();
  473. localStorage.setItem("filterDurationCourseList", filterDuration);
  474. var filterFrequency = $('.filterFrequency').val();
  475. localStorage.setItem("filterFrequencyCourseList", filterFrequency);
  476. var filterType = $('.filterType').val();
  477. localStorage.setItem("filterTypeCourseList", filterType);
  478. var output_table = $('#tablesaw-350').DataTable({
  479. //scrollX: true,
  480. //scrollY: true,
  481. //scrollCollapse: true,
  482. scrollY: '400px',
  483. serverSide: true,
  484. stateSave: true,
  485. ajax: {
  486. url : '/get_course_list?filterCourse=' + filterCourse + '&filterDuration=' + filterDuration + '&filterLevel=' + filterLevel + '&filterType=' + filterType + '&filterFrequency=' + filterFrequency + '&filterYear=' + filterYear,
  487. dataSrc: function (json){
  488. if(json.totals){
  489. totals = json.totals;
  490. }
  491. return json.data;
  492. }
  493. },
  494. thead: {
  495. 'th': {'background-color': 'blue'}
  496. },
  497. columns: [
  498. {
  499. data: 'column_18',
  500. "orderable": false,
  501. className: 'red',
  502. render: function (data, type, row, meta){
  503. return data;
  504. }
  505. },
  506. {
  507. data: 'column_19',
  508. className: 'red',
  509. className: 'sticky-col first-col'
  510. },
  511. {
  512. data: 'column_0',
  513. className: 'red',
  514. className: 'sticky-col second-col',
  515. render: function (data, type, row){
  516. var ret = '<a href="/members?member_detail=' + row["column_17"] + '&from=course_list">' + data + '</a>';
  517. return ret;
  518. }
  519. },
  520. {
  521. data: 'column_1',
  522. className: 'sticky-col third-col',
  523. render: function (data, type, row){
  524. const x = data.split("§");
  525. var ret = '<a href="/members?member_detail=' + row["column_17"] + '&from=course_list">' + data + '</a>';
  526. return ret;
  527. }
  528. },
  529. {
  530. data: 'column_2',
  531. orderSequence: ['asc', 'desc'],
  532. className: 'ciccio',
  533. render: function (data, type, row){
  534. const x = data.split("§");
  535. var ret = '';
  536. if (x[0] == 0)
  537. {
  538. var ret = '<a style="width:100%;float:right; text-align:right; display:block; ' + (x[0] == 1 ? '' : 'cursor:pointer;') + '" class="' + (x[0] == 1 ? 'green' : 'orange') + ' sub_' + row["column_16"] + '" onclick="setSubscription(' + row["column_15"] + ', ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  539. }
  540. else
  541. {
  542. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + (x[0] == 1 ? 'green' : 'orange') + '"><small>' + x[1] + '</small></a>';
  543. }
  544. return ret;
  545. }
  546. },
  547. {
  548. data: 'column_3',
  549. orderSequence: ['asc', 'desc'],
  550. render: function (data, type, row, meta){
  551. const x = data.split("§");
  552. var ret = '';
  553. if (x[0] == 'orange')
  554. {
  555. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_1_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 1, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  556. }
  557. else
  558. {
  559. if (x[0] != 'wgrey')
  560. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  561. }
  562. return ret;
  563. }
  564. },
  565. {
  566. data: 'column_4',
  567. orderSequence: ['asc', 'desc'],
  568. render: function (data, type, row, meta){
  569. const x = data.split("§");
  570. var ret = '';
  571. if (x[0] == 'orange')
  572. {
  573. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_2_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 2, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  574. }
  575. else
  576. {
  577. if (x[0] != 'wgrey')
  578. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  579. }
  580. return ret;
  581. }
  582. },
  583. {
  584. data: 'column_5',
  585. orderSequence: ['asc', 'desc'],
  586. render: function (data, type, row, meta){
  587. const x = data.split("§");
  588. var ret = '';
  589. if (x[0] == 'orange')
  590. {
  591. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_3_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 3, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  592. }
  593. else
  594. {
  595. if (x[0] != 'wgrey')
  596. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  597. }
  598. return ret;
  599. }
  600. },
  601. {
  602. data: 'column_6',
  603. orderSequence: ['asc', 'desc'],
  604. render: function (data, type, row, meta){
  605. const x = data.split("§");
  606. var ret = '';
  607. if (x[0] == 'orange')
  608. {
  609. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_4_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 4, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  610. }
  611. else
  612. {
  613. if (x[0] != 'wgrey')
  614. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  615. }
  616. return ret;
  617. }
  618. },
  619. {
  620. data: 'column_7',
  621. orderSequence: ['asc', 'desc'],
  622. render: function (data, type, row, meta){
  623. const x = data.split("§");
  624. var ret = '';
  625. if (x[0] == 'orange')
  626. {
  627. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_5_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 5, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  628. }
  629. else
  630. {
  631. if (x[0] != 'wgrey')
  632. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  633. }
  634. return ret;
  635. }
  636. },
  637. {
  638. data: 'column_8',
  639. orderSequence: ['asc', 'desc'],
  640. render: function (data, type, row, meta){
  641. const x = data.split("§");
  642. var ret = '';
  643. if (x[0] == 'orange')
  644. {
  645. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_6_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 6, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  646. }
  647. else
  648. {
  649. if (x[0] != 'wgrey')
  650. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  651. }
  652. return ret;
  653. }
  654. },
  655. {
  656. data: 'column_9',
  657. orderSequence: ['asc', 'desc'],
  658. render: function (data, type, row, meta){
  659. const x = data.split("§");
  660. var ret = '';
  661. if (x[0] == 'orange')
  662. {
  663. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_7_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 7, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  664. }
  665. else
  666. {
  667. if (x[0] != 'wgrey')
  668. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  669. }
  670. return ret;
  671. }
  672. },
  673. {
  674. data: 'column_10',
  675. orderSequence: ['asc', 'desc'],
  676. render: function (data, type, row, meta){
  677. const x = data.split("§");
  678. var ret = '';
  679. if (x[0] == 'orange')
  680. {
  681. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_8_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 8, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  682. }
  683. else
  684. {
  685. if (x[0] != 'wgrey')
  686. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  687. }
  688. return ret;
  689. }
  690. },
  691. {
  692. data: 'column_11',
  693. orderSequence: ['asc', 'desc'],
  694. render: function (data, type, row, meta){
  695. const x = data.split("§");
  696. var ret = '';
  697. if (x[0] == 'orange')
  698. {
  699. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_9_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 9, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  700. }
  701. else
  702. {
  703. if (x[0] != 'wgrey')
  704. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  705. }
  706. return ret;
  707. }
  708. },
  709. {
  710. data: 'column_12',
  711. orderSequence: ['asc', 'desc'],
  712. render: function (data, type, row, meta){
  713. const x = data.split("§");
  714. var ret = '';
  715. if (x[0] == 'orange')
  716. {
  717. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_10_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 10, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  718. }
  719. else
  720. {
  721. if (x[0] != 'wgrey')
  722. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  723. }
  724. return ret;
  725. }
  726. },
  727. {
  728. data: 'column_13',
  729. orderSequence: ['asc', 'desc'],
  730. render: function (data, type, row, meta){
  731. const x = data.split("§");
  732. var ret = '';
  733. if (x[0] == 'orange')
  734. {
  735. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_11_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 11, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  736. }
  737. else
  738. {
  739. if (x[0] != 'wgrey')
  740. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  741. }
  742. return ret;
  743. }
  744. },
  745. {
  746. data: 'column_14',
  747. orderSequence: ['asc', 'desc'],
  748. render: function (data, type, row, meta){
  749. const x = data.split("§");
  750. var ret = '';
  751. if (x[0] == 'orange')
  752. {
  753. ret = '<a style="width:100%;float:right; text-align:right; display:block; cursor:pointer;" class="' + x[0] + ' lnk_' + row["column_16"] + '" id="lnk_' + row["column_15"] + '_12_' + row["column_17"] + '" onclick="setPayMonth(' + row["column_15"] + ', 12, ' + row["column_17"] + ', ' + row["column_16"] + ')" style="cursor: pointer;"><small>' + x[1] + '</small></a>';
  754. }
  755. else
  756. {
  757. if (x[0] != 'wgrey')
  758. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  759. }
  760. return ret;
  761. }
  762. }
  763. ],
  764. layout: {
  765. topStart : null,
  766. topEnd : null,
  767. top1A: {
  768. buttons: [
  769. {
  770. extend: 'collection',
  771. text: 'ESPORTA',
  772. buttons: [
  773. {
  774. extend: 'excelHtml5',"action":newexportaction,
  775. title: 'Pagamento corsi',
  776. orientation: 'landscape',
  777. exportOptions: {
  778. columns: ":not(':last')"
  779. },
  780. footer:false,
  781. customize: function(xlsx) {
  782. var sheet = xlsx.xl.worksheets['sheet1.xml'];
  783. const letters = ["E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"];
  784. for(y=0; y<letters.length; y++)
  785. {
  786. z = y + 4;
  787. var c = output_table.column(z).data().toArray();
  788. //console.log(c);
  789. for (var i = 0; i < c.length; i++)
  790. {
  791. var j = c[i].split("§");
  792. if (j[0] == '0' || j[0] == 'orange')
  793. {
  794. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '10');
  795. //sheet.table.body[i+1][z].fillColor = 'orange';
  796. }
  797. if (j[0] == '1' || j[0] == 'green')
  798. {
  799. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '40');
  800. //doc.content[1].table.body[i+1][z].fillColor = 'green';
  801. }
  802. if (j[0] == 'yellow')
  803. {
  804. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '20');
  805. //doc.content[1].table.body[i+1][z].fillColor = 'blue';
  806. }
  807. }
  808. }
  809. },
  810. },
  811. {
  812. extend: 'pdfHtml5',"action":newexportaction,
  813. title: 'Pagamento corsi',
  814. orientation: 'landscape',
  815. exportOptions: {
  816. columns: ":not(':last')"
  817. },
  818. footer:false,
  819. customize: function(doc) {
  820. for(z=4; z<=16; z++)
  821. {
  822. var c = output_table.column(z).data().toArray();
  823. for (var i = 0; i < c.length; i++)
  824. {
  825. var j = c[i].split("§");
  826. if (j[0] == '0' || j[0] == 'orange')
  827. {
  828. doc.content[1].table.body[i+1][z].fillColor = 'orange';
  829. }
  830. if (j[0] == '1' || j[0] == 'green')
  831. {
  832. doc.content[1].table.body[i+1][z].fillColor = 'green';
  833. }
  834. if (j[0] == 'yellow')
  835. {
  836. doc.content[1].table.body[i+1][z].fillColor = 'blue';
  837. }
  838. }
  839. }
  840. }
  841. }/*,
  842. {
  843. extend: 'print',"action":newexportaction,
  844. text: 'Stampa',
  845. title: 'Pagamento corsi',
  846. exportOptions: {
  847. columns: ":not(':last')"
  848. },
  849. footer:false
  850. }*/
  851. ],
  852. dropup: true
  853. }
  854. ]
  855. },
  856. top1B : {
  857. pageLength: {
  858. menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
  859. }
  860. },
  861. top1C :'search',
  862. bottomEnd: {
  863. paging: {
  864. boundaryNumbers: false
  865. }
  866. }
  867. },
  868. order: [[2, 'asc'], [3, 'asc']],
  869. pagingType: 'first_last_numbers',
  870. language: {
  871. "url": "/assets/js/Italian.json",
  872. paginate: {
  873. first: '<i class="fa-solid fa-angles-left"></i>',
  874. last: '<i class="fa-solid fa-angles-right"></i>',
  875. }
  876. },
  877. "fnInitComplete": function (oSettings, json) {
  878. var html = '&nbsp;<a href="#" class="showHideFilter btn--ui"><i class="fa-solid fa-sliders"></i></a>';
  879. $(".dt-search").append(html);
  880. },
  881. "footerCallback": function (row, data, start, end, display) {
  882. let api = this.api();
  883. api.column(0).footer().innerHTML = '';
  884. api.column(1).footer().innerHTML = '';
  885. api.column(2).footer().innerHTML = '';
  886. api.column(3).footer().innerHTML = '';
  887. for(var i=4; i<=15; i++)
  888. {
  889. api.column(i).footer().innerHTML = '';
  890. }
  891. if (totals != '')
  892. {
  893. totals.split("_").forEach(function (item)
  894. {
  895. var x = item.split("§");
  896. if (x[1] != undefined)
  897. api.column(x[0]).footer().innerHTML = x[1];
  898. else
  899. api.column(x[0]).footer().innerHTML = '';
  900. });
  901. }
  902. }/*,
  903. fixedColumns: {
  904. start: 1,
  905. end: 1
  906. },
  907. scrollX: true*/
  908. });
  909. $('#tablesaw-350 thead tr th').addClass('col');
  910. $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
  911. $('#tablesaw-350').on('draw.dt', function() {
  912. $('[data-bs-toggle="popover"]').popover()
  913. });
  914. jQuery.fn.dataTable.Api.register( 'sum()', function ( ) {
  915. return this.flatten().reduce( function ( a, b ) {
  916. if ( typeof a === 'string') {
  917. start = a.indexOf("€");
  918. a = a.substr(start + 2).replace("</small></a>", "").replace(",",".") * 1;
  919. }
  920. if ( typeof b === 'string' && b.indexOf('green') > 0) {
  921. start = b.indexOf("€");
  922. b = b.substr(start + 2).replace("</small></a>", "").replace(",",".") * 1;
  923. }
  924. else
  925. {
  926. b = 0;
  927. }
  928. return a + b;
  929. }, 0 );
  930. } );
  931. }
  932. Livewire.on('setTotals', (tot) =>
  933. {
  934. totals = tot;
  935. console.log(totals);
  936. });
  937. var subscription = false;
  938. var months = [];
  939. var selectedCourseId = 0;
  940. var selectedMemberId = 0;
  941. var selectedMemberCourseId = 0;
  942. function setPayMonth(course_id, month, member_id, id)
  943. {
  944. if (selectedMemberId > 0 && selectedMemberId != member_id)
  945. {
  946. months = [];
  947. subscription = false;
  948. }
  949. if (selectedMemberCourseId != id)
  950. {
  951. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  952. $(".lnk_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  953. }
  954. selectedCourseId = course_id;
  955. selectedMemberId = member_id;
  956. selectedMemberCourseId = id;
  957. if(!months.includes(month))
  958. {
  959. months.push(month);
  960. $("#lnk_" + course_id + "_" + month + "_" + member_id).addClass("blue").addClass("selected").removeClass("orange");
  961. }
  962. else
  963. {
  964. months.splice(months.indexOf(months), 1);
  965. $("#lnk_" + course_id + "_" + month + "_" + member_id).addClass("orange").removeClass("blue").removeClass("selected");
  966. }
  967. if (months.length > 0)
  968. {
  969. $(".btNewPayment").show();
  970. }
  971. else
  972. {
  973. $(".btNewPayment").hide();
  974. }
  975. }
  976. function setSubscription(course_id, member_id, id)
  977. {
  978. if (selectedMemberCourseId != id)
  979. {
  980. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  981. $(".lnk_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  982. months = [];
  983. subscription = false;
  984. }
  985. selectedCourseId = course_id;
  986. selectedMemberId = member_id;
  987. selectedMemberCourseId = id;
  988. if (subscription)
  989. {
  990. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  991. subscription = false;
  992. $(".btNewPayment").hide();
  993. }
  994. else
  995. {
  996. $(".sub_" + selectedMemberCourseId).addClass("blue").addClass("selected").removeClass("orange");
  997. subscription = true;
  998. $(".btNewPayment").show();
  999. }
  1000. }
  1001. function newPayment()
  1002. {
  1003. @this.newPayment(selectedCourseId, months.toString(), selectedMemberId, selectedMemberCourseId, subscription);
  1004. }
  1005. $( document ).ready( function(){
  1006. setMaxWidth();
  1007. setMaxHeight();
  1008. $( window ).bind( "resize", setMaxWidth );
  1009. $( window ).bind( "resize", setMaxHeight );
  1010. function setMaxWidth() {
  1011. $("#resume-table").width( Math.round( $(window ).width() - size ) ) ;
  1012. $(".justify-content-between").css({"width": Math.round( $(window ).width() - size) + "px;"}); //.width( Math.round( $(window ).width() - size ) ) ;
  1013. }
  1014. function setMaxHeight() {
  1015. console.log('height:' + $(window ).height() + 'px !important');
  1016. $("div.row.h-100").attr('style', 'height:' + ($(window ).height() + 50) + 'px !important');
  1017. $("#resume-table").height( Math.round( $(window ).height() - 150 ) ) ;
  1018. }
  1019. });
  1020. </script>
  1021. @endpush