course_list_original.blade.php 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107
  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. $(document).on("click",".showHideFilter",function() {
  396. if (isFilter)
  397. {
  398. isFilter = false;
  399. $(".showFilter").hide();
  400. }
  401. else
  402. {
  403. isFilter = true;
  404. $(".showFilter").show();
  405. }
  406. });
  407. } );
  408. function searchAction()
  409. {
  410. //destroyDataTable();
  411. //@this.search();
  412. }
  413. @if(isset($_GET["showFilters"]))
  414. var filterYear = localStorage.getItem("filterYearCourseList");
  415. if (filterYear)
  416. {
  417. $('.filterYear').val(filterYear).trigger('change');
  418. }
  419. var filterCourse = localStorage.getItem("filterCourseCourseList");
  420. if (filterCourse)
  421. {
  422. $('.filterCourse').val(filterCourse).trigger('change');
  423. }
  424. var filterLevel = localStorage.getItem("filterLevelCourseList");
  425. if (filterLevel)
  426. {
  427. $('.filterLevel').val(filterLevel).trigger('change');
  428. }
  429. var filterFrequency = localStorage.getItem("filterFrequencyCourseList");
  430. if (filterFrequency)
  431. {
  432. $('.filterFrequency').val(filterFrequency).trigger('change');
  433. }
  434. var filterDuration = localStorage.getItem("filterDurationCourseList");
  435. if (filterDuration)
  436. {
  437. $('.filterDuration').val(filterDuration).trigger('change');
  438. }
  439. var filterType = localStorage.getItem("filterTypeCourseList");
  440. if (filterType)
  441. {
  442. $('.filterType').val(filterType).trigger('change');
  443. }
  444. @endif
  445. function reset()
  446. {
  447. $('.filterYear').val(null).trigger("change");
  448. $('.filterCourse').val(null).trigger("change");
  449. $('.filterLevel').val(null).trigger("change");
  450. $('.filterFrequency').val(null).trigger("change");
  451. $('.filterDuration').val(null).trigger("change");
  452. $('.filterType').val(null).trigger("change");
  453. destroyDataTable();
  454. //localStorage.clear();
  455. loadDataTable();
  456. }
  457. function loadDataTable(){
  458. if ( $.fn.DataTable.isDataTable('#tablesaw-350') ) {
  459. $('#tablesaw-350').DataTable().destroy();
  460. }
  461. var filterYear = $('.filterYear').val();
  462. localStorage.setItem("filterYearCourseList", filterYear);
  463. var filterCourse = $('.filterCourse').val();
  464. localStorage.setItem("filterCourseCourseList", filterCourse);
  465. var filterLevel = $('.filterLevel').val();
  466. localStorage.setItem("filterLevelCourseList", filterLevel);
  467. var filterDuration = $('.filterDuration').val();
  468. localStorage.setItem("filterDurationCourseList", filterDuration);
  469. var filterFrequency = $('.filterFrequency').val();
  470. localStorage.setItem("filterFrequencyCourseList", filterFrequency);
  471. var filterType = $('.filterType').val();
  472. localStorage.setItem("filterTypeCourseList", filterType);
  473. let date = new Date();
  474. let date_export = `${date.getFullYear()}${date.getMonth()}${date.getDate()}_`;
  475. var output_table = $('#tablesaw-350').DataTable({
  476. //scrollX: true,
  477. //scrollY: true,
  478. //scrollCollapse: true,
  479. scrollY: '400px',
  480. serverSide: true,
  481. processing: true,
  482. ajax: {
  483. url : '/get_course_list?filterCourse=' + filterCourse + '&filterDuration=' + filterDuration + '&filterLevel=' + filterLevel + '&filterType=' + filterType + '&filterFrequency=' + filterFrequency + '&filterYear=' + filterYear,
  484. dataSrc: function (json){
  485. if(json.totals){
  486. totals = json.totals;
  487. }
  488. return json.data;
  489. }
  490. },
  491. thead: {
  492. 'th': {'background-color': 'blue'}
  493. },
  494. columns: [
  495. {
  496. data: 'column_18',
  497. "orderable": false,
  498. className: 'red',
  499. render: function (data, type, row, meta){
  500. return data;
  501. }
  502. },
  503. {
  504. data: 'column_19',
  505. className: 'red',
  506. className: 'sticky-col first-col'
  507. },
  508. {
  509. data: 'column_0',
  510. className: 'red',
  511. className: 'sticky-col second-col',
  512. render: function (data, type, row){
  513. var ret = '<a href="/members?member_detail=' + row["column_17"] + '&from=course_list">' + data + '</a>';
  514. return ret;
  515. }
  516. },
  517. {
  518. data: 'column_1',
  519. className: 'sticky-col third-col',
  520. render: function (data, type, row){
  521. const x = data.split("§");
  522. var ret = '<a href="/members?member_detail=' + row["column_17"] + '&from=course_list">' + data + '</a>';
  523. return ret;
  524. }
  525. },
  526. {
  527. data: 'column_2',
  528. orderSequence: ['asc', 'desc'],
  529. className: 'ciccio',
  530. render: function (data, type, row){
  531. const x = data.split("§");
  532. var ret = '';
  533. if (x[0] == 0)
  534. {
  535. 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>';
  536. }
  537. else
  538. {
  539. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + (x[0] == 1 ? 'green' : 'orange') + '"><small>' + x[1] + '</small></a>';
  540. }
  541. return ret;
  542. }
  543. },
  544. {
  545. data: 'column_3',
  546. orderSequence: ['asc', 'desc'],
  547. render: function (data, type, row, meta){
  548. const x = data.split("§");
  549. var ret = '';
  550. if (x[0] == 'orange')
  551. {
  552. 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>';
  553. }
  554. else
  555. {
  556. if (x[0] != 'wgrey')
  557. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  558. }
  559. return ret;
  560. }
  561. },
  562. {
  563. data: 'column_4',
  564. orderSequence: ['asc', 'desc'],
  565. render: function (data, type, row, meta){
  566. const x = data.split("§");
  567. var ret = '';
  568. if (x[0] == 'orange')
  569. {
  570. 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>';
  571. }
  572. else
  573. {
  574. if (x[0] != 'wgrey')
  575. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  576. }
  577. return ret;
  578. }
  579. },
  580. {
  581. data: 'column_5',
  582. orderSequence: ['asc', 'desc'],
  583. render: function (data, type, row, meta){
  584. const x = data.split("§");
  585. var ret = '';
  586. if (x[0] == 'orange')
  587. {
  588. 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>';
  589. }
  590. else
  591. {
  592. if (x[0] != 'wgrey')
  593. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  594. }
  595. return ret;
  596. }
  597. },
  598. {
  599. data: 'column_6',
  600. orderSequence: ['asc', 'desc'],
  601. render: function (data, type, row, meta){
  602. const x = data.split("§");
  603. var ret = '';
  604. if (x[0] == 'orange')
  605. {
  606. 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>';
  607. }
  608. else
  609. {
  610. if (x[0] != 'wgrey')
  611. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  612. }
  613. return ret;
  614. }
  615. },
  616. {
  617. data: 'column_7',
  618. orderSequence: ['asc', 'desc'],
  619. render: function (data, type, row, meta){
  620. const x = data.split("§");
  621. var ret = '';
  622. if (x[0] == 'orange')
  623. {
  624. 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>';
  625. }
  626. else
  627. {
  628. if (x[0] != 'wgrey')
  629. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  630. }
  631. return ret;
  632. }
  633. },
  634. {
  635. data: 'column_8',
  636. orderSequence: ['asc', 'desc'],
  637. render: function (data, type, row, meta){
  638. const x = data.split("§");
  639. var ret = '';
  640. if (x[0] == 'orange')
  641. {
  642. 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>';
  643. }
  644. else
  645. {
  646. if (x[0] != 'wgrey')
  647. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  648. }
  649. return ret;
  650. }
  651. },
  652. {
  653. data: 'column_9',
  654. orderSequence: ['asc', 'desc'],
  655. render: function (data, type, row, meta){
  656. const x = data.split("§");
  657. var ret = '';
  658. if (x[0] == 'orange')
  659. {
  660. 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>';
  661. }
  662. else
  663. {
  664. if (x[0] != 'wgrey')
  665. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  666. }
  667. return ret;
  668. }
  669. },
  670. {
  671. data: 'column_10',
  672. orderSequence: ['asc', 'desc'],
  673. render: function (data, type, row, meta){
  674. const x = data.split("§");
  675. var ret = '';
  676. if (x[0] == 'orange')
  677. {
  678. 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>';
  679. }
  680. else
  681. {
  682. if (x[0] != 'wgrey')
  683. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  684. }
  685. return ret;
  686. }
  687. },
  688. {
  689. data: 'column_11',
  690. orderSequence: ['asc', 'desc'],
  691. render: function (data, type, row, meta){
  692. const x = data.split("§");
  693. var ret = '';
  694. if (x[0] == 'orange')
  695. {
  696. 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>';
  697. }
  698. else
  699. {
  700. if (x[0] != 'wgrey')
  701. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  702. }
  703. return ret;
  704. }
  705. },
  706. {
  707. data: 'column_12',
  708. orderSequence: ['asc', 'desc'],
  709. render: function (data, type, row, meta){
  710. const x = data.split("§");
  711. var ret = '';
  712. if (x[0] == 'orange')
  713. {
  714. 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>';
  715. }
  716. else
  717. {
  718. if (x[0] != 'wgrey')
  719. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  720. }
  721. return ret;
  722. }
  723. },
  724. {
  725. data: 'column_13',
  726. orderSequence: ['asc', 'desc'],
  727. render: function (data, type, row, meta){
  728. const x = data.split("§");
  729. var ret = '';
  730. if (x[0] == 'orange')
  731. {
  732. 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>';
  733. }
  734. else
  735. {
  736. if (x[0] != 'wgrey')
  737. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  738. }
  739. return ret;
  740. }
  741. },
  742. {
  743. data: 'column_14',
  744. orderSequence: ['asc', 'desc'],
  745. render: function (data, type, row, meta){
  746. const x = data.split("§");
  747. var ret = '';
  748. if (x[0] == 'orange')
  749. {
  750. 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>';
  751. }
  752. else
  753. {
  754. if (x[0] != 'wgrey')
  755. ret = '<a style="width:100%;float:right; text-align:right; display:block;" class="' + x[0] + '"><small>' + x[1] + '</small></a>';
  756. }
  757. return ret;
  758. }
  759. }
  760. ],
  761. layout: {
  762. topStart : null,
  763. topEnd : null,
  764. top1A: {
  765. // buttons: [
  766. // {
  767. // extend: 'collection',
  768. // text: 'ESPORTA',
  769. buttons: [
  770. {
  771. extend: 'excelHtml5',
  772. text: '<i class="fa-solid fa-file-excel"></i>',
  773. action: newexportaction,
  774. title: date_export + 'Pagamento corsi',
  775. orientation: 'landscape',
  776. exportOptions: {
  777. columns: ":not(':last')"
  778. },
  779. footer:false,
  780. customize: function(xlsx) {
  781. var sheet = xlsx.xl.worksheets['sheet1.xml'];
  782. const letters = ["E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"];
  783. for(y=0; y<letters.length; y++)
  784. {
  785. z = y + 4;
  786. var c = output_table.column(z).data().toArray();
  787. //console.log(c);
  788. for (var i = 0; i < c.length; i++)
  789. {
  790. var j = c[i].split("§");
  791. if (j[0] == '0' || j[0] == 'orange')
  792. {
  793. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '10');
  794. //sheet.table.body[i+1][z].fillColor = 'orange';
  795. }
  796. if (j[0] == '1' || j[0] == 'green')
  797. {
  798. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '40');
  799. //doc.content[1].table.body[i+1][z].fillColor = 'green';
  800. }
  801. if (j[0] == 'yellow')
  802. {
  803. $('row:nth-child('+(i+3)+') [r^="' + letters[y] + '"]', sheet).attr('s', '20');
  804. //doc.content[1].table.body[i+1][z].fillColor = 'blue';
  805. }
  806. }
  807. }
  808. },
  809. },
  810. {
  811. extend: 'pdfHtml5',
  812. text: '<i class="fa-solid fa-file-pdf"></i>',
  813. action: newexportaction,
  814. title: date_export + 'Pagamento corsi',
  815. orientation: 'landscape',
  816. exportOptions: {
  817. columns: ":not(':last')"
  818. },
  819. footer:false,
  820. customize: function(doc) {
  821. for(z=4; z<=16; z++)
  822. {
  823. var c = output_table.column(z).data().toArray();
  824. for (var i = 0; i < c.length; i++)
  825. {
  826. var j = c[i].split("§");
  827. if (j[0] == '0' || j[0] == 'orange')
  828. {
  829. doc.content[1].table.body[i+1][z].fillColor = 'orange';
  830. }
  831. if (j[0] == '1' || j[0] == 'green')
  832. {
  833. doc.content[1].table.body[i+1][z].fillColor = 'green';
  834. }
  835. if (j[0] == 'yellow')
  836. {
  837. doc.content[1].table.body[i+1][z].fillColor = 'blue';
  838. }
  839. }
  840. }
  841. }
  842. }/*,
  843. {
  844. extend: 'print',"action":newexportaction,
  845. text: '<i class="fa-solid fa-print"></i>',
  846. title: date_export + 'Pagamento corsi',
  847. exportOptions: {
  848. columns: ":not(':last')"
  849. },
  850. footer:false
  851. }*/
  852. ],
  853. // dropup: true
  854. // }
  855. // ]
  856. },
  857. top1B : {
  858. pageLength: {
  859. menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
  860. }
  861. },
  862. top1C :'search',
  863. },
  864. order: [[2, 'asc'], [3, 'asc']],
  865. pagingType: 'first_last_numbers',
  866. language: {
  867. "url": "/assets/js/Italian.json",
  868. paginate: {
  869. first: '<i class="fa-solid fa-angles-left"></i>',
  870. last: '<i class="fa-solid fa-angles-right"></i>',
  871. }
  872. },
  873. "fnInitComplete": function (oSettings, json) {
  874. var html = '&nbsp;<a href="#" class="showHideFilter btn--ui"><i class="fa-solid fa-sliders"></i></a>';
  875. $(".dt-search").append(html);
  876. },
  877. "footerCallback": function (row, data, start, end, display) {
  878. let api = this.api();
  879. api.column(0).footer().innerHTML = '';
  880. api.column(1).footer().innerHTML = '';
  881. api.column(2).footer().innerHTML = '';
  882. api.column(3).footer().innerHTML = '';
  883. for(var i=4; i<=15; i++)
  884. {
  885. api.column(i).footer().innerHTML = '';
  886. }
  887. if (totals != '')
  888. {
  889. totals.split("_").forEach(function (item)
  890. {
  891. var x = item.split("§");
  892. if (x[1] != undefined)
  893. api.column(x[0]).footer().innerHTML = x[1];
  894. else
  895. api.column(x[0]).footer().innerHTML = '';
  896. });
  897. }
  898. }/*,
  899. fixedColumns: {
  900. start: 1,
  901. end: 1
  902. },
  903. scrollX: true*/
  904. });
  905. $('#tablesaw-350 thead tr th').addClass('col');
  906. $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
  907. $('#tablesaw-350').on('draw.dt', function() {
  908. $('[data-bs-toggle="popover"]').popover()
  909. });
  910. jQuery.fn.dataTable.Api.register( 'sum()', function ( ) {
  911. return this.flatten().reduce( function ( a, b ) {
  912. if ( typeof a === 'string') {
  913. start = a.indexOf("€");
  914. a = a.substr(start + 2).replace("</small></a>", "").replace(",",".") * 1;
  915. }
  916. if ( typeof b === 'string' && b.indexOf('green') > 0) {
  917. start = b.indexOf("€");
  918. b = b.substr(start + 2).replace("</small></a>", "").replace(",",".") * 1;
  919. }
  920. else
  921. {
  922. b = 0;
  923. }
  924. return a + b;
  925. }, 0 );
  926. } );
  927. }
  928. Livewire.on('setTotals', (tot) =>
  929. {
  930. totals = tot;
  931. console.log(totals);
  932. });
  933. var subscription = false;
  934. var months = [];
  935. var selectedCourseId = 0;
  936. var selectedMemberId = 0;
  937. var selectedMemberCourseId = 0;
  938. function setPayMonth(course_id, month, member_id, id)
  939. {
  940. if (selectedMemberId > 0 && selectedMemberId != member_id)
  941. {
  942. months = [];
  943. subscription = false;
  944. }
  945. if (selectedMemberCourseId != id)
  946. {
  947. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  948. $(".lnk_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  949. }
  950. selectedCourseId = course_id;
  951. selectedMemberId = member_id;
  952. selectedMemberCourseId = id;
  953. if(!months.includes(month))
  954. {
  955. months.push(month);
  956. $("#lnk_" + course_id + "_" + month + "_" + member_id).addClass("blue").addClass("selected").removeClass("orange");
  957. }
  958. else
  959. {
  960. months.splice(months.indexOf(months), 1);
  961. $("#lnk_" + course_id + "_" + month + "_" + member_id).addClass("orange").removeClass("blue").removeClass("selected");
  962. }
  963. if (months.length > 0)
  964. {
  965. $(".btNewPayment").show();
  966. }
  967. else
  968. {
  969. $(".btNewPayment").hide();
  970. }
  971. }
  972. function setSubscription(course_id, member_id, id)
  973. {
  974. if (selectedMemberCourseId != id)
  975. {
  976. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  977. $(".lnk_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  978. months = [];
  979. subscription = false;
  980. }
  981. selectedCourseId = course_id;
  982. selectedMemberId = member_id;
  983. selectedMemberCourseId = id;
  984. if (subscription)
  985. {
  986. $(".sub_" + selectedMemberCourseId).addClass("orange").removeClass("blue").removeClass("selected");
  987. subscription = false;
  988. $(".btNewPayment").hide();
  989. }
  990. else
  991. {
  992. $(".sub_" + selectedMemberCourseId).addClass("blue").addClass("selected").removeClass("orange");
  993. subscription = true;
  994. $(".btNewPayment").show();
  995. }
  996. }
  997. function newPayment()
  998. {
  999. @this.newPayment(selectedCourseId, months.toString(), selectedMemberId, selectedMemberCourseId, subscription);
  1000. }
  1001. $( document ).ready( function(){
  1002. setMaxWidth();
  1003. setMaxHeight();
  1004. $( window ).bind( "resize", setMaxWidth );
  1005. $( window ).bind( "resize", setMaxHeight );
  1006. function setMaxWidth() {
  1007. $("#resume-table").width( Math.round( $(window ).width() - size ) ) ;
  1008. $(".justify-content-between").css({"width": Math.round( $(window ).width() - size) + "px;"}); //.width( Math.round( $(window ).width() - size ) ) ;
  1009. }
  1010. function setMaxHeight() {
  1011. console.log('height:' + $(window ).height() + 'px !important');
  1012. $("div.row.h-100").attr('style', 'height:' + ($(window ).height() + 50) + 'px !important');
  1013. $("#resume-table").height( Math.round( $(window ).height() - 150 ) ) ;
  1014. }
  1015. });
  1016. </script>
  1017. @endpush