subscription.blade.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. <div class="col card--ui" id="card--dashboard">
  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">@if(!$add && !$update)Abbonamenti @else Inserimento/modifica abbonamento @endif</h2>
  6. </div>
  7. @if(!$add && !$update)
  8. <div class="title--section_addButton" wire:click="add()" style="cursor: pointer;">
  9. <div class="btn--ui entrata d-flex justify-items-between">
  10. <a href="#" wire:click="add()" style="color:white">Aggiungi</a>
  11. </div>
  12. </div>
  13. @endif
  14. </header>
  15. @if(!$add && !$update)
  16. <a class="btn--ui lightGrey" href="/settings?type=corsi"><i class="fa-solid fa-arrow-left"></i></a><br>
  17. <section id="resume-table">
  18. <table class="table tablesaw tableHead tablesaw-stack" id="tablesaw-350" width="100%">
  19. <thead>
  20. <tr>
  21. <th style="text-align:center" scope="col"><input type="checkbox" class="checkAll"></th>
  22. <th scope="col">Nome</th>
  23. <th scope="col">N° partecipanti</th>
  24. <th scope="col">...</th>
  25. </tr>
  26. </thead>
  27. <tbody id="checkall-target">
  28. @foreach($records as $record)
  29. <tr>
  30. <td style="text-align:center"><input type="checkbox" class="chkCourse" name="{{$record->id}}"></td>
  31. <td>{{$record->name}}</td>
  32. <td style="padding-right: 50px">{{$record->getCount()}}</td>
  33. <td>
  34. <button type="button" class="btn" wire:click="edit({{ $record->id }})" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Modifica"><i class="fa-regular fa-pen-to-square"></i></button>
  35. <button type="button" class="btn" onclick="confirm('Sei sicuro?') || event.stopImmediatePropagation()" wire:click="delete({{ $record->id }})" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Elimina"><i class="fa-regular fa-trash-can"></i></button>
  36. <button type="button" class="btn" wire:click="duplicate({{ $record->id }}, false)" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-placement="bottom" data-bs-content="Duplica"><i class="fa-regular fa-copy"></i></button>
  37. </td>
  38. </tr>
  39. @endforeach
  40. </tbody>
  41. </table>
  42. </section>
  43. @else
  44. <a class="btn--ui lightGrey" href="/subscriptions"><i class="fa-solid fa-arrow-left"></i></a><br>
  45. <div class="container">
  46. @if (session()->has('error'))
  47. <div class="alert alert-danger" role="alert">
  48. {{ session()->get('error') }}
  49. </div>
  50. @endif
  51. <div class="row">
  52. <div class="col">
  53. <form action="">
  54. <div class="row mb-3 ">
  55. <div class="col-6 mt-2">
  56. <div class="form--item">
  57. <label for="inputName" class="form-label">Nome</label>
  58. <input class="form-control js-keyupTitle @error('name') is-invalid @enderror" type="text" id="name" placeholder="Nome" wire:model="name">
  59. @error('name')
  60. <div class="invalid-feedback">{{ $message }}</div>
  61. @enderror
  62. </div>
  63. </div>
  64. <div class="col-6 mt-2">
  65. <div class="form--item">
  66. <label for="enabled" class="form-label">Abilitato</label>
  67. <input class="form-check-input form-control" style="width:22px; height:22px;" type="checkbox" id="enabled" wire:model="enabled">
  68. </div>
  69. </div>
  70. {{-- <div class="col-3 mt-2">
  71. <div class="form--item">
  72. <label for="inputName" class="form-label">Data inizio</label>
  73. <input class="form-control @error('date_from') is-invalid @enderror" type="date" placeholder="Data inizio" wire:model="date_from">
  74. </div>
  75. </div>
  76. <div class="col-3 mt-2">
  77. <div class="form--item">
  78. <label for="inputName" class="form-label">Data fine</label>
  79. <input class="form-control @error('date_to') is-invalid @enderror" type="date" placeholder="Data fine" wire:model="date_to">
  80. </div>
  81. </div> --}}
  82. <div class="col-6 mt-2">
  83. <div class="form--item">
  84. <label for="inputName" class="form-label">Prezzo iscrizione</label>
  85. <input class="form-control js-keyupTitle @error('subscription_price') is-invalid @enderror" type="text" id="subscription_price" onkeyup="onlyNumberAmount(this)" placeholder="€ 0,00" wire:model="subscription_price">
  86. @error('subscription_price')
  87. <div class="invalid-feedback">{{ $message }}</div>
  88. @enderror
  89. </div>
  90. </div>
  91. <div class="col-6 mt-2">
  92. @foreach($prices as $idP => $p)
  93. <div class="row mt-2 ">
  94. <div class="col-6">
  95. <label for="abb" class="form-label">Pagamento</label>
  96. <select class="form-control" wire:model="prices.{{$idP}}.course_subscription_id">
  97. <option value=""></option>
  98. @foreach($course_subscriptions as $s)
  99. <option value="{{$s["id"]}}">{{$s["name"]}}
  100. @endforeach
  101. </select>
  102. </div>
  103. <div class="col-4">
  104. <label for="price" class="form-label">Prezzo</label>
  105. <input class="form-control " type="text" onkeyup="onlyNumberAmount(this)" placeholder="€ 0,00" wire:model="prices.{{$idP}}.price">
  106. </div>
  107. <div class="col-2">
  108. @if($idP == 0)
  109. <br><button class="btn--ui primary add--daye" wire:click.prevent="addPrice()"><i class="fa-solid fa-plus"></i></button>
  110. @endif
  111. @if($idP > 0)
  112. <br><button class="btn--ui primary add--daye" wire:click.prevent="delPrice({{$idP}})"><i class="fa-solid fa-minus"></i></button>
  113. @endif
  114. </div>
  115. <div class="col-12">
  116. <span style="color:red">{{$msgPrices}}</span>
  117. </div>
  118. </div>
  119. @endforeach
  120. </div>
  121. </div>
  122. <div class="form--item mt-4">
  123. <button type="button" class="btn--ui lightGrey" onclick="annulla()">Annulla</button>
  124. @if($add)
  125. <button type="submit" class="btn--ui" wire:click.prevent="store()">Salva</button>
  126. @endif
  127. @if($update)
  128. <button type="submit" class="btn--ui" wire:click.prevent="update()">Salva</button>
  129. @endif
  130. </div>
  131. </form>
  132. </div>
  133. </div>
  134. </div>
  135. @endif
  136. </div>
  137. @push('scripts')
  138. <link href="/css/datatables.css" rel="stylesheet" />
  139. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  140. <script src="/assets/js/datatables.js"></script>
  141. <script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.dataTables.js"></script>
  142. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
  143. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
  144. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
  145. @endpush
  146. @push('scripts')
  147. <script>
  148. function onlyNumberAmount(input) {
  149. let v = input.value.replace(/\D+/g, '');
  150. if (v.length > 14) v = v.slice(0, 14);
  151. input.value = "€ " + v.replace(/(\d)(\d\d)$/, "$1,$2").replace(/(^\d{1,3}|\d{3})(?=(?:\d{3})+(?:,|$))/g, '$1.');
  152. }
  153. var isEdit = false;
  154. Livewire.on('setEdit', (x) =>
  155. {
  156. isEdit = x;
  157. console.log(isEdit);
  158. });
  159. function annulla()
  160. {
  161. window.onbeforeunload = null;
  162. document.location.href = '/courses';
  163. }
  164. window.onbeforeunload = function(){
  165. if (isEdit)
  166. return 'Cambiando pagina le eventuali modifiche andranno perse';
  167. };
  168. $(document).ready(function() {
  169. loadDataTable();
  170. } );
  171. Livewire.on('load-data-table', () => {
  172. loadDataTable();
  173. });
  174. function loadDataTable(){
  175. let date = new Date();
  176. let date_export = `${date.getFullYear()}${date.getMonth()}${date.getDate()}_`;
  177. if ( $.fn.DataTable.isDataTable('#tablesaw-350') ) {
  178. $('#tablesaw-350').DataTable().destroy();
  179. }
  180. $('#tablesaw-350').DataTable({
  181. processing: true,
  182. thead: {
  183. 'th': {'background-color': 'blue'}
  184. },
  185. layout: {
  186. topStart : null,
  187. topEnd : null,
  188. top1A: {
  189. buttons: [
  190. {
  191. extend: 'excelHtml5',
  192. text: '<i class="fa-solid fa-file-excel"></i>',
  193. action: newexportaction,
  194. title: date_export + 'Abbonamenti',
  195. exportOptions: {
  196. columns: ":not(':last')"
  197. }
  198. },
  199. {
  200. extend: 'pdfHtml5',
  201. text: '<i class="fa-solid fa-file-pdf"></i>',
  202. action: newexportaction,
  203. title: date_export + 'Abbonamenti',
  204. exportOptions: {
  205. columns: ":not(':last')"
  206. }
  207. },
  208. {
  209. extend: 'print',
  210. action: newexportaction,
  211. text: '<i class="fa-solid fa-print"></i>',
  212. title: date_export + 'Abbonamenti',
  213. exportOptions: {
  214. columns: ":not(':last')"
  215. }
  216. }
  217. ],
  218. },
  219. top1B : {
  220. pageLength: {
  221. menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
  222. }
  223. },
  224. top1C :'search',
  225. },
  226. columnDefs: [
  227. {
  228. targets: 0,
  229. orderable: false
  230. }
  231. ],
  232. pagingType: 'numbers',
  233. language: {
  234. url: "/assets/js/Italian.json"
  235. },
  236. fnInitComplete: function (oSettings, json) {
  237. var html = '&nbsp;<a href="#" class="addData btn--ui"><i class="fa-solid fa-plus"></i></a>';
  238. $(".dt-search").append(html);
  239. html = '&nbsp;<a href="#" class="duplicateData btn--ui" style="display:none"><i class="fa-solid fa-copy fa-lg" style="height:5px;"></i></a>';
  240. $(".dt-buttons").after(html);
  241. }
  242. });
  243. $('#tablesaw-350 thead tr th').addClass('col');
  244. $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
  245. var subscriptions = [];
  246. $(".chkCourse").click(function(){
  247. var id = $(this).attr('name');
  248. if(!subscriptions.includes(id)){
  249. subscriptions.push(id);
  250. }else{
  251. subscriptions.splice(subscriptions.indexOf(id), 1); //deleting
  252. }
  253. if (subscriptions.length > 0)
  254. $(".duplicateData").show();
  255. else
  256. $(".duplicateData").hide();
  257. });
  258. $(document).ready(function() {
  259. $(document).on("click",".addData",function() {
  260. $(".title--section_addButton").trigger("click");
  261. });
  262. $(document).on("click",".duplicateData",function() {
  263. @this.duplicateMultiple(subscriptions);
  264. });
  265. } );
  266. var all = false;
  267. $(".checkAll").click(function(){
  268. all = !all;
  269. subscriptions = [];
  270. $('.chkCourse').each(function(){
  271. $(this).prop('checked', all);
  272. if (all)
  273. subscriptions.push($(this).attr('name'));
  274. });
  275. if (subscriptions.length > 0)
  276. $(".duplicateData").show();
  277. else
  278. $(".duplicateData").hide();
  279. });
  280. }
  281. </script>
  282. @endpush