records_out.blade.php 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159
  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 uscite me-2"></i>
  5. <h2 class="primary" >@if(!$add && !$update)Uscite @else Inserimento/modifica uscita @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. <section id="subheader" class="d-flex align-items-center justify-content-between">
  17. @if(false)
  18. <form action="" class="group--action d-flex align-items-center">
  19. <select class="form-select form-select-lg me-1" aria-label=".form-select-lg example" wire:model="multipleAction">
  20. <option selected>Azione multipla</option>
  21. <option value="delete"><i class="fa-regular fa-trash-can"></i></option>
  22. </select>
  23. <button type="submit" class="btn--ui" wire:click.prevent="executeMultipleAction()">applica</button>
  24. </form>
  25. <form action="" class="compare--form d-flex align-items-center">
  26. <select class="form-select form-select-lg me-1" aria-label=".form-select-lg example" wire:model="selectedFilter">
  27. <option value="">--Seleziona--</option>
  28. <option value="0">Oggi</option>
  29. <option value="1">Questo mese: <span class="date-range">{{date("01/m/Y")}} - {{date("t/m/Y")}}</span></option>
  30. <option value="2">Questo anno: <span class="date-range">{{date("01/01/Y")}} - {{date("31/12/Y")}}</span></option>
  31. <option value="3">Tutte</option>
  32. </select>
  33. </form>
  34. @endif
  35. </section>
  36. <div class="showFilter" style="display:none">
  37. <hr size="1">
  38. <div class="row g-3">
  39. <div class="col-md-2">
  40. <div class="row">
  41. <div class="col-md-12" style="margin-bottom:10px;">
  42. <b>Data pagamento</b>
  43. </div>
  44. <div class="col-12">
  45. <input id="dateFrom" type="date" class="form-control filterFrom mb-2" >
  46. </div>
  47. <div class="col-12">
  48. <input id="dateTo" type="date" class="form-control filterTo" >
  49. </div>
  50. <div class="col-6 mt-2">
  51. <button class="btn--ui lightGrey todayButton" style="width:100%" onclick="setToday('{{date("Y-m-d")}}')">OGGI</button>
  52. </div>
  53. <div class="col-6 mt-2">
  54. <button class="btn--ui lightGrey yesterdayButton" style="width:100%" onclick="setYesterday('{{date("Y-m-d",strtotime("-1 days"))}}')">IERI</button>
  55. </div>
  56. </div>
  57. </div>
  58. <div class="col-md-2">
  59. <div class="row">
  60. <div class="col-md-12" style="margin-bottom:10px;">
  61. <b>Utente</b>
  62. </div>
  63. <div class="col-12">
  64. <select name="search_supplier_id" class="form-select filterMember">
  65. <option value="">--Seleziona--
  66. @foreach($members as $member)
  67. <option value="{{$member->id}}">{{$member->last_name}} {{$member->first_name}}
  68. @endforeach
  69. </select>
  70. </div>
  71. </div>
  72. </div>
  73. <div class="col-md-2">
  74. <div class="row">
  75. <div class="col-md-12" style="margin-bottom:10px;">
  76. <b>Fornitore</b>
  77. </div>
  78. <div class="col-12">
  79. <select name="search_supplier_id" class="form-select filterSupplier">
  80. <option value="">--Seleziona--
  81. @foreach($suppliers as $supplier)
  82. <option value="{{$supplier->id}}">{{$supplier->name}}
  83. @endforeach
  84. </select>
  85. </div>
  86. </div>
  87. </div>
  88. <div class="col-md-2">
  89. <div class="row">
  90. <div class="col-md-12" style="margin-bottom:10px;">
  91. <b>Metodi di pagamento</b>
  92. </div>
  93. <div class="col-12">
  94. <select name="search_payment_method_id" class="form-select filterPaymentMethod" multiple="multiple">
  95. @foreach($payments as $payment)
  96. <option value="{{$payment->id}}">{{$payment->name}}
  97. @endforeach
  98. </select>
  99. </div>
  100. </div>
  101. </div>
  102. <div class="col-md-2">
  103. <div class="row">
  104. <div class="col-md-12" style="margin-bottom:10px;">
  105. <b>Origini</b>
  106. </div>
  107. <div class="col-12">
  108. <select name="search_origin_id" class="form-select filterOrigins" multiple="multiple">
  109. @foreach($banks as $bank)
  110. <option value="{{$bank["id"]}}">{!!$bank["name"]!!}
  111. @endforeach
  112. </select>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="col-md-2">
  117. <div class="row">
  118. <div class="col-md-12" style="margin-bottom:10px;">
  119. <b>Causali</b>
  120. </div>
  121. <div class="col-12">
  122. <select name="search_causal_id" class="form-select filterCausals" multiple="multiple">
  123. @foreach($causals as $causal)
  124. <option value="{{$causal["id"]}}">{!!$causal["name"]!!}
  125. @endforeach
  126. </select>
  127. </div>
  128. </div>
  129. </div>
  130. </div>
  131. <div class="row g-3">
  132. <div class="col-md-12" style="text-align:right">
  133. <button class="btn--ui lightGrey" onclick="reset()">Reset</button>
  134. <button class="btn--ui" onclick="loadDataTable()">FILTRA</button>
  135. </div>
  136. </div>
  137. <hr size="1">
  138. </div>
  139. <section id="resume-table">
  140. <div class="compare--chart_wrapper d-none"></div>
  141. <table class="table tablesaw tableHead tablesaw-stack table--lista_entrate tableHead" id="tablesaw-350" width="100%">
  142. <thead>
  143. <tr>
  144. <!--<th scope="col"></th>-->
  145. <th scope="col">Data pagamento</th>
  146. <th scope="col">Importo</th>
  147. <th scope="col">Utente</th>
  148. <th scope="col">Fornitore</th>
  149. <th scope="col">Causale</th>
  150. <th scope="col">Pagamento</th>
  151. <th scope="col">Origine</th>
  152. <th scope="col">...</th>
  153. </tr>
  154. </thead>
  155. <tbody id="checkall-target">
  156. </tbody>
  157. <!--
  158. <tfoot>
  159. <tr id="tfooter">
  160. <td colspan="6"><span class="total"></span></td>
  161. </tr>
  162. </tfoot>
  163. -->
  164. </table>
  165. <!--
  166. <div class="paginator d-flex justify-content-center">
  167. <nav aria-label="Page navigation example">
  168. <ul class="pagination">
  169. <li class="page-item">
  170. <a class="page-link" href="#" aria-label="Previous">
  171. <span aria-hidden="true"></span>
  172. </a>
  173. </li>
  174. <li class="page-item"><a class="page-link" href="#">1</a></li>
  175. <li class="page-item"><a class="page-link" href="#">2</a></li>
  176. <li class="page-item"><a class="page-link" href="#">3</a></li>
  177. <li class="page-item"><a class="page-link" href="#">3</a></li>
  178. <li class="page-item"><span class="more-page">...</span></li>
  179. <li class="page-item">
  180. <a class="page-link" href="#" aria-label="Next">
  181. <span aria-hidden="true"></span>
  182. </a>
  183. </li>
  184. </ul>
  185. </nav>
  186. </div>
  187. -->
  188. <br><b class="totalDiv"></b>
  189. </section>
  190. @else
  191. <a style="margin-top:20px" class="btn--ui lightGrey" href="/{{$fromPage != '' ? ($fromPage . '?showFilters=1') : 'out'}}"><i class="fa-solid fa-arrow-left"></i></a><br><br>
  192. @if (session()->has('error'))
  193. <div class="alert alert-danger" role="alert">
  194. {{ session()->get('error') }}
  195. </div>
  196. @endif
  197. <section id="accountingExit" class="d-flex" wire:key='reload-{{$selectId}}'>
  198. <div class="accountingExit_data">
  199. <form class="form--accounting">
  200. <div class="row gx-2">
  201. <div class="col-md-12">
  202. <span class="title-form d-block w-100">Tipologia</span>
  203. <div class="input-group mb-12">
  204. <div class="check--invoice d-flex align-items-center">
  205. <div class="form-check me-3">
  206. <input class="form-check-input" type="radio" value="1" wire:model="commercial" id="commercial_1">
  207. <label class="form-check-label" for="commercial_1" style="cursor: pointer;">&nbsp;Commerciale</label>
  208. </div>
  209. <div class="form-check">
  210. <input class="form-check-input" type="radio" value="0" wire:model="commercial" id="commercial_0">
  211. <label class="form-check-label" for="commercial_0" style="cursor: pointer;">&nbsp;Non Commerciale</label>
  212. </div>
  213. </div>
  214. </div>
  215. </div>
  216. <div class="col-md-6">
  217. <span class="title-form d-block w-100 text-right">Data di Pagamento</span>
  218. <div class="input-group mb-3">
  219. <input id="date" type="date" class="form-control" wire:model="date">
  220. </div>
  221. </div>
  222. <div class="col-md-6"></div>
  223. <div class="col-md-6">
  224. <span class="title-form d-block w-100">Utente</span>
  225. <select name="member_id" class="form-select memberClass @error('member_id') is-invalid @enderror" aria-label="Seleziona una persona" wire:model="member_id" {{$this->dataId > 0 ? 'disabled' : ''}} >
  226. <option value="">--Seleziona--
  227. @foreach($members as $member)
  228. <option value="{{$member->id}}">{{$member->last_name}} {{$member->first_name}} ({{$member->fiscal_code}})
  229. @endforeach
  230. </select>
  231. @error('member_id')
  232. <div class="invalid-feedback">{{ $message }}</div>
  233. @enderror
  234. <br><br>
  235. </div>
  236. <div class="col-md-6">
  237. @if($this->dataId == 0)
  238. <span class="title-form d-block w-100">&nbsp;</span>
  239. <button type="button" class="btn--ui primary" data-bs-toggle="modal" data-bs-target="#userModal" style="width:50px">&nbsp;<i class="fa-solid fa-plus"></i></button>
  240. @endif
  241. </div>
  242. <div class="col-12">
  243. <span class="title-form d-block w-100">Fornitore</span>
  244. <select name="supplier_id" class="form-select supplierClass @error('supplier_id') is-invalid @enderror" aria-label="Seleziona un fornitore" wire:model="supplier_id">
  245. <option value="">--Seleziona--
  246. @foreach($suppliers as $supplier)
  247. <option value="{{$supplier->id}}">{{$supplier->name}}
  248. @endforeach
  249. </select>
  250. @error('supplier_id')
  251. <div class="invalid-feedback">{{ $message }}</div>
  252. @enderror
  253. </div>
  254. </div>
  255. <div class="row gx-2 mt-5">
  256. <div class="col-6">
  257. <span class="title-form d-block w-100">Metodo di pagamento</span>
  258. <div class="col-md-12">
  259. <select name="payment_method_id" class="form-select paymentClass @error('payment_method_id') is-invalid @enderror" aria-label="Seleziona un metodo di pagamento" wire:model="payment_method_id">
  260. <option value="">--Seleziona--
  261. @foreach($payments as $payment)
  262. <option value="{{$payment->id}}">{{$payment->name}}
  263. @endforeach
  264. </select>
  265. @error('payment_method_id')
  266. <div class="invalid-feedback">{{ $message }}</div>
  267. @enderror
  268. </div>
  269. </div>
  270. <div class="col-6">
  271. <span class="title-form d-block w-100">Origine</span>
  272. <div class="col-md-12">
  273. <select name="origin_id" class="form-select" aria-label="Seleziona un origine" wire:model="origin_id">
  274. <option value="">--Seleziona--
  275. @foreach($banks as $bank)
  276. <option value="{{$bank->id}}">{{$bank->name}}
  277. @endforeach
  278. </select>
  279. @error('origin_id')
  280. <div class="invalid-feedback">{{ $message }}</div>
  281. @enderror
  282. </div>
  283. </div>
  284. </div>
  285. @foreach($rows as $idx => $row)
  286. <div class="row gx-2 mt-5" wire:ignore.self>
  287. <span class="title-form d-block w-100">Causale</span>
  288. <div class="col-md-12">
  289. <livewire:causals :type="$typeOUT" :idx="$idx" :causal_id="$rows[$idx]['causal_id']" :wire:key="$idx" />
  290. @if(false)
  291. <select name="rows.{{$idx}}.causal_id" class="form-select causalClass @error('row.' . $idx . '.causal_id') is-invalid @enderror" aria-label="Seleziona una causale" wire:model="rows.{{$idx}}.causal_id">
  292. <option value="">--Seleziona--
  293. @foreach($causals as $causal)
  294. <option value="{{$causal["id"]}}">{!!$causal["name"]!!}
  295. @endforeach
  296. </select>
  297. @error('causal_id')
  298. <div class="invalid-feedback">{{ $message }}</div>
  299. @enderror
  300. @endif
  301. @error('rows.'. $idx . '.causal_id')
  302. <span style="argin-top: 0.25rem; font-size: 0.875em; color: var(--bs-form-invalid-color);">{{ $message }}</span>
  303. @enderror
  304. </div>
  305. </div>
  306. <div class="row gx-2 mt-5">
  307. <span class="title-form d-block w-100">Dettaglio causale</span>
  308. <div class="col-md-12">
  309. <input class="form-control " type="text" placeholder="Dettaglio causale" wire:model="rows.{{$idx}}.note">
  310. </div>
  311. </div>
  312. <div class="row gx-2 mt-5 align-items-center">
  313. <div class="col-md-6">
  314. <span class="total primary">Importo</span>
  315. </div>
  316. <div class="col-md-6">
  317. @if($add)
  318. <input type="text" class="form-control totalInput text-end @error('amount') is-invalid @enderror" id="rows.{{$idx}}.amount" wire:model="rows.{{$idx}}.amount" wire:keydown.enter="store(false)" onkeyup="onlyNumberAmount(this)" placeholder="€ 0,00">
  319. @endif
  320. @if($update)
  321. <input type="text" class="form-control totalInput text-end @error('amount') is-invalid @enderror" id="rows.{{$idx}}.amount" placeholder="€ 0,00" wire:model="rows.{{$idx}}.amount" onkeyup="onlyNumberAmount(this)" wire:keydown.enter="update(false)">
  322. @endif
  323. @error('rows.'. $idx . '.amount')
  324. <span style="argin-top: 0.25rem; font-size: 0.875em; color: var(--bs-form-invalid-color);">{{ $message }}</span>
  325. @enderror
  326. </div>
  327. </div>
  328. <div class="row gx-2 mt-5 align-items-center">
  329. <div class="col-md-4">
  330. <span class="total primary">Periodo</span>
  331. </div>
  332. <div class="col-md-8">
  333. @if($multiP)
  334. <div class="row">
  335. <div class="col-md-3">
  336. <span class="title-form d-block w-100">Dal mese</span>
  337. <div class="input-group mb-3">
  338. <select class="form-select form-select-lg me-1" wire:model="multiMonthFrom">
  339. @foreach(getMonthList() as $mid => $mname)
  340. <option value="{{$mid}}">{{$mname}}</option>
  341. @endforeach
  342. </select>
  343. </div>
  344. </div>
  345. <div class="col-md-3">
  346. <span class="title-form d-block w-100">Anno</span>
  347. <div class="input-group mb-3">
  348. <input type="number" class="form-control" wire:model="multiYearFrom" >
  349. </div>
  350. </div>
  351. <div class="col-md-3">
  352. <span class="title-form d-block w-100">Dal mese</span>
  353. <div class="input-group mb-3">
  354. <select class="form-select form-select-lg me-1" wire:model="multiMonthTo">
  355. @foreach(getMonthList() as $mid => $mname)
  356. <option value="{{$mid}}">{{$mname}}</option>
  357. @endforeach
  358. </select>
  359. </div>
  360. </div>
  361. <div class="col-md-3">
  362. <span class="title-form d-block w-100">Anno</span>
  363. <div class="input-group mb-3">
  364. <input type="number" class="form-control" wire:model="multiYearTo" >
  365. </div>
  366. </div>
  367. <div class="col-md-6">
  368. <button type="button" class="btn--ui primary" wire:click.prevent="multiPeriodCreate({{$idx}})" style="margin-top:20px">
  369. Crea multi periodo
  370. </button>
  371. </div>
  372. <div class="col-md-6">
  373. <button type="button" class="btn--ui lightGrey" wire:click.prevent="multiPeriodCancel()" style="margin-top:20px">
  374. Annulla multi periodo
  375. </button>
  376. </div>
  377. </div>
  378. @else
  379. <div class="row">
  380. @foreach($row["when"] as $xxx => $w)
  381. <div class="col-md-4">
  382. <span class="title-form d-block w-100">Mese</span>
  383. <div class="input-group mb-3">
  384. <select class="form-select form-select-lg me-1" wire:model="rows.{{$idx}}.when.{{$xxx}}.month">
  385. @foreach(getMonthList() as $mid => $mname)
  386. <option value="{{$mid}}">{{$mname}}</option>
  387. @endforeach
  388. </select>
  389. </div>
  390. </div>
  391. <div class="col-md-3">
  392. <span class="title-form d-block w-100">Anno</span>
  393. <div class="input-group mb-3">
  394. <input type="number" class="form-control" wire:model="rows.{{$idx}}.when.{{$xxx}}.year" >
  395. </div>
  396. </div>
  397. <div class="col-md-3">
  398. <span class="title-form d-block w-100">Valore</span>
  399. <span class="netprice_p total--wrapper_netprice"><b>{{$this->currencyToDouble($rows[$idx]["amount"]) > 0 ? formatPrice($this->currencyToDouble($rows[$idx]["amount"]) / sizeof($rows[$idx]["when"])) : ""}}</b></span>
  400. </div>
  401. <div class="col-md-2"><br>
  402. <button type="button" class="btn--ui primary" wire:click.prevent="delPeriod({{$idx}}, {{$xxx}})" style="float:right">
  403. -
  404. </button>
  405. </div>
  406. @endforeach
  407. <div class="d-flex justify-content-between mt-3">
  408. <button type="button" class="btn--ui primary order-2" wire:click.prevent="addPeriod({{$idx}})">
  409. Aggiungi periodo
  410. </button>
  411. <button type="button" class="btn--ui_tertiary primary order-1" wire:click.prevent="multiPeriod()">
  412. Imposta multi periodo
  413. </button>
  414. </div>
  415. </div>
  416. @endif
  417. </div>
  418. </div>
  419. <br><br>
  420. @if($idx > 0)
  421. <button type="button" class="btn--ui primary" wire:click.prevent="delRow({{$idx}})" style="float:right">
  422. Rimuovi causale
  423. </button>
  424. <br><br>
  425. @endif
  426. <hr size="1">
  427. @endforeach
  428. <br>
  429. <button type="button" class="btn--ui primary" wire:click.prevent="addRow()">
  430. Aggiungi causale
  431. </button>
  432. <div class="accountingExit--btn d-flex align-items-center justify-content-between">
  433. <button class="btn--ui lightGrey" onclick="annulla()">annulla</button>
  434. @if($add)
  435. <button class="btn--ui primary" type="submit" wire:click.prevent="store()">inserisci</button>
  436. @endif
  437. @if($update)
  438. <button class="btn--ui primary" type="submit" wire:click.prevent="update()">salva</button>
  439. @endif
  440. </div>
  441. </form>
  442. </div>
  443. @if(false)
  444. <div class="accountingExit_resume card--ui">
  445. <header>
  446. <div class="username d-flex align-items-start">
  447. <i class="ico--ui accountingResume me-2"></i>
  448. <div class="user--resume_name d-flex flex-column"><span class="primary">Ricevuta</span></div></div>
  449. </header>
  450. <div class="resume--body d-flex justify-content-between flex-column">
  451. <header>
  452. @if($this->supplier)
  453. <ul class="resume-item mb-4 p-0">
  454. <li><span class="evidence_name">{{$this->supplier->name}}</span></li>
  455. <li><span>P.IVA: {{$this->supplier->vat}}</span></li>
  456. </ul>
  457. @endif
  458. <ul class="resume-item date p-0">
  459. <li><strong>Data di Pagamento</strong></li>
  460. <li>{{ date("d/m/Y", strtotime($date)) }}</li>
  461. </ul>
  462. @if($this->causal)
  463. <ul class="resume-item date p-0">
  464. <li><strong>Causale</strong></li>
  465. <li>{{$this->causal->getTree()}}</li>
  466. </ul>
  467. @endif
  468. </header>
  469. <footer>
  470. <div class="total--wrapper">
  471. <div class="total--wrapper_amount d-flex align-items-center justify-content-between w-100 mb-3">
  472. <span class="amount_p"><strong>Importo</strong></span><span class="amount_data"><strong>{{$amount}}</strong></span>
  473. </div>
  474. <!--<div class="total--wrapper_tax d-flex align-items-center justify-content-between w-100 mb-2 pb-3">
  475. <span class="taxt_p">IVA (22%):</span><span class="tax_data">€ 22,00</span>
  476. </div>-->
  477. <div class="total--wrapper_netprice d-flex align-items-center justify-content-between w-100">
  478. <span class="netprice_p"><strong>Totale Netto</strong></span><span class="netprice_data"><strong>{{$amount}}</strong></span>
  479. </div>
  480. </div>
  481. </footer>
  482. </div>
  483. </div>
  484. @endif
  485. </section>
  486. <div wire:ignore.self class="modal fade" id="userModal" tabindex="-1" aria-labelledby="userModalLabel" aria-hidden="true">
  487. <div class="modal-dialog">
  488. <div class="modal-content">
  489. <div class="modal-header">
  490. <h5 class="modal-title" id="userModalLabel">Inserimento nuovo utente</h5>
  491. <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
  492. </div>
  493. <div class="modal-body">
  494. @if($newMemberExists)
  495. <div class="alert alert-warning" role="alert">
  496. Un utente con lo stesso nome e cognome è già presente a database
  497. </div>
  498. @endif
  499. <div class="row">
  500. <div class="col-md-6">
  501. <label for="newMemberFirstName" class="form-label">Nome</label>
  502. <input class="form-control @error('newMemberFirstName') is-invalid @enderror" type="text" id="newMemberFirstName" placeholder="Nome" wire:model.lazy="newMemberFirstName">
  503. </div>
  504. <div class="col-md-6">
  505. <label for="newMemberLastName" class="form-label">Cognome</label>
  506. <input class="form-control @error('newMemberLastName') is-invalid @enderror" type="text" id="newMemberLastName" placeholder="Cognome" wire:model.lazy="newMemberLastName">
  507. </div>
  508. </div>
  509. <div class="row mt-2">
  510. <div class="col-md-6">
  511. <label for="newMemberEmail" class="form-label">Email</label>
  512. <input class="form-control @error('newMemberEmail') is-invalid @enderror" type="text" id="newMemberEmail" placeholder="Email" wire:model="newMemberEmail">
  513. </div>
  514. <div class="col-md-6">
  515. <label for="newMemberFiscalCode" class="form-label">Codice fiscale</label>
  516. <input class="form-control @error('newMemberFiscalCode') is-invalid @enderror" type="text" id="newMemberFiscalCode" placeholder="Codice fiscale" maxlength="16" wire:model="newMemberFiscalCode">
  517. @if($newMemberFiscalCodeExist)
  518. <span style="color:red">Il codice fiscale inserito esiste</span>
  519. @endif
  520. </div>
  521. </div>
  522. <div class="row mt-2">
  523. <div class="col-md-6">
  524. <input type="checkbox" id="newMemberToComplete" wire:model="newMemberToComplete">
  525. <label for="newMemberToComplete" class="form-label">Tesserato</label>
  526. </div>
  527. <div class="col-md-6"></div>
  528. </div>
  529. </div>
  530. <div class="modal-footer">
  531. <button class="btn--ui lightGrey" onclick="annulla()">annulla</a>
  532. <button type="button" class="btn--ui btn-primary" wire:click.prevent="createMember()">Salva</button>
  533. </div>
  534. </div>
  535. </div>
  536. </div>
  537. @endif
  538. </div>
  539. @push('scripts')
  540. <link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
  541. <style>
  542. table.tableHead thead {
  543. position: sticky;
  544. z-index: 100;
  545. top: 0;
  546. }
  547. .select2-container--default .select2-selection--single{
  548. background-color: #E9F0F5;
  549. border: 0.0625rem solid #DFE5EB;
  550. font-size: 0.75rem;
  551. }
  552. .select2-selection
  553. {
  554. height: 38px !important;
  555. }
  556. .select2-selection__rendered
  557. {
  558. padding-top:3px;
  559. }
  560. .select2 {
  561. width:100% !important;
  562. }
  563. .select2-selection--multiple{
  564. overflow: hidden !important;
  565. height: auto !important;
  566. }
  567. .select2-container {
  568. box-sizing: border-box;
  569. display: inline-block;
  570. margin: 0;
  571. position: relative;
  572. vertical-align: middle;
  573. }
  574. .select2-container .select2-selection--single {
  575. box-sizing: border-box;
  576. cursor: pointer;
  577. display: block;
  578. height: 38px;
  579. user-select: none;
  580. -webkit-user-select: none;
  581. }
  582. .select2-container .select2-selection--single .select2-selection__rendered {
  583. display: block;
  584. padding-left: 8px;
  585. padding-right: 20px;
  586. overflow: hidden;
  587. text-overflow: ellipsis;
  588. white-space: nowrap;
  589. }
  590. </style>
  591. <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
  592. <script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
  593. @endpush
  594. @push('scripts')
  595. <script>
  596. function matchStart(params, data) {
  597. params.term = params.term || '';
  598. if (data.text.toUpperCase().indexOf(params.term.toUpperCase()) == 0) {
  599. return data;
  600. }
  601. return false;
  602. }
  603. window.livewire.on('refresh', () => {
  604. $('.causalClass').select2({
  605. matcher: function(params, data) {
  606. return matchStart(params, data);
  607. }
  608. });
  609. $('.memberClass').select2({
  610. tags: false
  611. });
  612. $('.supplierClass').select2({
  613. /*matcher: function(params, data) {
  614. return matchStart(params, data);
  615. }*/
  616. });
  617. $('.paymentClass').select2({
  618. matcher: function(params, data) {
  619. return matchStart(params, data);
  620. }
  621. });
  622. });
  623. $(document).ready(function(){
  624. $(document).on("keypress", $('.filterCausals'), function (e) {
  625. setTimeout(() => {
  626. $(".select2-results__option").each(function(){
  627. var txt = $(this).html();
  628. var count = (txt.match(/-/g) || []).length;
  629. $(this).addClass('paddingLeftSelect' + count);
  630. });
  631. }, 100);
  632. });
  633. $(document).on("keypress", $('.filterOrigins'), function (e) {
  634. setTimeout(() => {
  635. $(".select2-results__option").each(function(){
  636. var txt = $(this).html();
  637. var count = (txt.match(/-/g) || []).length;
  638. $(this).addClass('paddingLeftSelect' + count);
  639. });
  640. }, 100);
  641. });
  642. });
  643. Livewire.on('load-select', () => {
  644. $('.causalClass').each(function(i, obj) {
  645. $(obj).select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  646. $(obj).on('change', function (e) {
  647. var data = $(obj).select2("val");
  648. var name = $(obj).select2().attr("name");
  649. @this.set(name, data);
  650. });
  651. });
  652. $('.supplierClass').select2({
  653. /*matcher: function(params, data) {
  654. return matchStart(params, data);
  655. }*/
  656. });
  657. $('.supplierClass').on('change', function (e) {
  658. loadDiv();
  659. var data = $('.supplierClass').select2("val");
  660. @this.set('supplier_id', data);
  661. });
  662. $('.memberClass').select2({
  663. tags: false
  664. });
  665. $('.memberClass').on('change', function (e) {
  666. loadDiv();
  667. var data = $('.memberClass').select2("val");
  668. @this.set('member_id', data);
  669. });
  670. $('.paymentClass').select2({
  671. matcher: function(params, data) {
  672. return matchStart(params, data);
  673. }
  674. });
  675. $('.paymentClass').on('change', function (e) {
  676. loadDiv();
  677. var data = $('.paymentClass').select2("val");
  678. @this.set('payment_method_id', data);
  679. });
  680. $('.filterSupplier').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  681. $('.filterSupplier').on('change', function (e) {
  682. //var data = $('.filterSupplier').select2("val");
  683. //@this.set('filterSupplier', data);
  684. });
  685. $('.filterMember').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  686. $('.filterMember').on('change', function (e) {
  687. //var data = $('.filterMember').select2("val");
  688. //@this.set('filterMember', data);
  689. });
  690. $('.filterPaymentMethod').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  691. $('.filterPaymentMethod').on('change', function (e) {
  692. //var data = $('.filterPaymentMethod').select2("val");
  693. //@this.set('filterPaymentMethod', data);
  694. });
  695. $('.filterCausals').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  696. $('.filterCausals').on('change', function (e) {
  697. //var data = $('.filterCausals').select2("val");
  698. //@this.set('filterCausals', data);
  699. });
  700. $('.filterOrigins').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  701. $('.filterOrigins').on('change', function (e) {
  702. //var data = $('.filterOrigins').select2("val");
  703. //@this.set('filterOrigins', data);
  704. });
  705. });
  706. Livewire.on('hide-search', () => {
  707. //pcsh2();
  708. });
  709. $('.filterSupplier').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  710. $('.filterSupplier').on('change', function (e) {
  711. //var data = $('.filterSupplier').select2("val");
  712. //@this.set('filterSupplier', data);
  713. });
  714. $('.filterMember').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  715. $('.filterMember').on('change', function (e) {
  716. //var data = $('.filterMember').select2("val");
  717. //@this.set('filterMember', data);
  718. });
  719. $('.filterPaymentMethod').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  720. $('.filterPaymentMethod').on('change', function (e) {
  721. //var data = $('.filterPaymentMethod').select2("val");
  722. //@this.set('filterPaymentMethod', data);
  723. });
  724. $('.filterCausals').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  725. $('.filterCausals').on('change', function (e) {
  726. //var data = $('.filterCausals').select2("val");
  727. //@this.set('filterCausals', data);
  728. });
  729. $('.filterOrigins').select2({"language": {"noResults": function(){return "Nessun risultato";}}});
  730. $('.filterOrigins').on('change', function (e) {
  731. //var data = $('.filterOrigins').select2("val");
  732. //@this.set('filterOrigins', data);
  733. });
  734. function onlyNumberAmount(input) {
  735. let v = input.value.replace(/\D+/g, '');
  736. if (v.length > 14) v = v.slice(0, 14);
  737. input.value = "€ " + v.replace(/(\d)(\d\d)$/, "$1,$2").replace(/(^\d{1,3}|\d{3})(?=(?:\d{3})+(?:,|$))/g, '$1.');
  738. }
  739. window.livewire.on('saved', () => {
  740. $('#userModal').modal('hide');
  741. });
  742. </script>
  743. <link href="/css/datatables.css" rel="stylesheet" />
  744. <script src="/assets/js/datatables.js"></script>
  745. <script src="https://cdn.datatables.net/buttons/3.0.2/js/buttons.dataTables.js"></script>
  746. <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
  747. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
  748. <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
  749. <script>
  750. $(document).ready(function() {
  751. loadDataTable();
  752. } );
  753. var filterSupplier = localStorage.getItem("filterSupplierRecordOut");
  754. if (filterSupplier && filterSupplier != "null" && filterSupplier != "undefined")
  755. {
  756. $('.filterSupplier').val(filterSupplier);
  757. $('.filterSupplier').trigger('change');
  758. }
  759. var filterMember = localStorage.getItem("filterMemberRecordOut");
  760. if (filterMember && filterMember != "null" && filterMember != "undefined")
  761. {
  762. $('.filterMember').val(filterMember);
  763. $('.filterMember').trigger('change');
  764. }
  765. var filterPaymentMethod = localStorage.getItem("filterPaymentMethodRecordOut");
  766. if (filterPaymentMethod && filterPaymentMethod != "null" && filterPaymentMethod != "undefined")
  767. {
  768. $('.filterPaymentMethod').val(filterPaymentMethod);
  769. $('.filterPaymentMethod').trigger('change');
  770. }
  771. var filterCausals = localStorage.getItem("filterCausalsRecordOut");
  772. if (filterCausals && filterCausals != "null" && filterCausals != "undefined")
  773. {
  774. $('.filterCausals').val(filterCausals);
  775. $('.filterCausals').trigger('change');
  776. }
  777. var filterOrigins = localStorage.getItem("filterOriginsRecordOut");
  778. if (filterOrigins && filterOrigins != "null" && filterOrigins != "undefined")
  779. {
  780. $('.filterOrigins').val(filterOrigins);
  781. $('.filterOrigins').trigger('change');
  782. }
  783. var filterFrom = localStorage.getItem("filterFromRecordOut");
  784. if (filterFrom && filterFrom != "" && filterFrom != "undefined")
  785. {
  786. $('.filterFrom').val(filterFrom);
  787. }
  788. var filterTo = localStorage.getItem("filterToRecordOut");
  789. if (filterTo && filterTo != "" && filterTo != "undefined")
  790. {
  791. $('.filterTo').val(filterTo);
  792. }
  793. var isFilter = false;
  794. $(document).ready(function() {
  795. isFilter = Number(localStorage.getItem("isFilter_RecordsOut")) ?? false;
  796. if (isFilter) {
  797. $(".showFilter").show();
  798. } else {
  799. $(".showFilter").hide();
  800. }
  801. $(document).on("click",".showHideFilter",function() {
  802. if (isFilter)
  803. {
  804. isFilter = false;
  805. $(".showFilter").hide();
  806. }
  807. else
  808. {
  809. isFilter = true;
  810. $(".showFilter").show();
  811. }
  812. localStorage.setItem("isFilter_RecordsOut", Number(isFilter));
  813. });
  814. $(document).on("select2:open",".filterCausals",function() {
  815. //$('.filterCausals').on('select2:open', function (e) {
  816. setTimeout(() => {
  817. $(".select2-results__option").each(function(){
  818. var txt = $(this).html();
  819. var count = (txt.match(/-/g) || []).length;
  820. $(this).addClass('paddingLeftSelect' + count);
  821. });
  822. }, 100);
  823. });
  824. $(document).on("select2:open",".filterOrigins",function() {
  825. //$('.filterOrigins').on('select2:open', function (e) {
  826. setTimeout(() => {
  827. $(".select2-results__option").each(function(){
  828. var txt = $(this).html();
  829. var count = (txt.match(/-/g) || []).length;
  830. $(this).addClass('paddingLeftSelect' + count);
  831. });
  832. }, 100);
  833. });
  834. } );
  835. function editData(id)
  836. {
  837. @this.edit(id);
  838. }
  839. function deleteData(id)
  840. {
  841. if (confirm('Sei sicuro?'))
  842. @this.delete(id);
  843. }
  844. Livewire.on('load-data-table', () => {
  845. setTimeout(function() {loadDataTable()}, 100);
  846. });
  847. Livewire.on('destroy-data-table', () => {
  848. $('#tablesaw-350').DataTable().destroy();
  849. });
  850. function destroyDataTable()
  851. {
  852. $('#tablesaw-350').DataTable().destroy();
  853. }
  854. function reset()
  855. {
  856. $(".todayButton").addClass("lightGrey");
  857. $(".yesterdayButton").addClass("lightGrey");
  858. $('.filterSupplier').val('');
  859. $('.filterSupplier').trigger('change');
  860. $('.filterMember').val('');
  861. $('.filterMember').trigger('change');
  862. $('.filterPaymentMethod').val('');
  863. $('.filterPaymentMethod').trigger('change');
  864. $('.filterCausals').val('');
  865. $('.filterCausals').trigger('change');
  866. $('.filterOrigins').val('');
  867. $('.filterOrigins').trigger('change');
  868. $('.filterFrom').val('');
  869. $('.filterTo').val('');
  870. localStorage.clear();
  871. loadDataTable();
  872. }
  873. function loadDataTable(){
  874. if ( $.fn.DataTable.isDataTable('#tablesaw-350') ) {
  875. $('#tablesaw-350').DataTable().destroy();
  876. }
  877. var filterMember = $('.filterMember').val();
  878. var filterSupplier = $('.filterSupplier').val();
  879. var filterPaymentMethod = $('.filterPaymentMethod').val();
  880. var filterCausals = $('.filterCausals').val();
  881. var filterOrigins = $('.filterOrigins').val();
  882. var filterFrom = $('.filterFrom').val();
  883. var filterTo = $('.filterTo').val();
  884. localStorage.setItem("filterMemberRecordOut", filterMember);
  885. localStorage.setItem("filterSupplierRecordOut", filterSupplier);
  886. localStorage.setItem("filterPaymentMethodRecordOut", filterPaymentMethod);
  887. localStorage.setItem("filterCausalsRecordOut", filterCausals);
  888. localStorage.setItem("filterOriginsRecordOut", filterOrigins);
  889. localStorage.setItem("filterFromRecordOut", filterFrom);
  890. localStorage.setItem("filterToRecordOut", filterTo);
  891. $('#tablesaw-350').DataTable({
  892. //searching: false,
  893. stateSave: true,
  894. ajax: {
  895. url : "/get_record_out?filterMember=" + filterMember + "&filterSupplier=" + filterSupplier + "&filterPaymentMethod=" + filterPaymentMethod + "&filterOrigins=" + filterOrigins + "&filterCausals=" + filterCausals + "&filterFrom=" + filterFrom + "&filterTo=" + filterTo,
  896. dataSrc: function (json){
  897. if(json.totals){
  898. $(".totalDiv").html('Totale&nbsp;:&nbsp;<b>' + json.totals + '</b>');
  899. }
  900. else
  901. {
  902. $(".totalDiv").html('');
  903. }
  904. @if(Auth::user()->level != 0)
  905. $(".totalDiv").html('');
  906. @endif
  907. return json.data;
  908. }
  909. },
  910. columns: [
  911. {
  912. data: "date",
  913. render: function (data, type){
  914. if (data == "")
  915. return " TOTALE";
  916. if (type == "sort"){
  917. return new Date(data).getTime();
  918. }
  919. // Split class and text
  920. const j = data.split(" ");
  921. const d = j[0].split("-");
  922. var ret = d[2] + "/" + d[1] + "/" + d[0];
  923. return ret;
  924. }, className: "numericCol"
  925. },
  926. { data: 'total', className: "numericCol" },
  927. { data: 'member' },
  928. { data: 'supplier' },
  929. { data: 'causals' },
  930. { data: 'payment' },
  931. { data: 'origin' },
  932. {
  933. data: "action",
  934. render: function (data){
  935. if (data == "")
  936. return "";
  937. const j = data.split("|");
  938. //$(".totalDiv").html('Totale&nbsp;:&nbsp;<b>' + j[1] + '</b>');
  939. //$(".total").html('Totale&nbsp;:&nbsp;<b>' + j[1] + '</b>');
  940. var ret = '<button type="button" class="btn" onclick="editData(' + j[0] + ')" 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>&nbsp;';
  941. ret += '<button type="button" class="btn" onclick="deleteData(' + j[0] + ')" 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>';
  942. return ret;
  943. }
  944. },
  945. ],
  946. order: [[0, 'desc']],
  947. thead: {
  948. 'th': {'background-color': 'blue'}
  949. },
  950. layout: {
  951. topStart : null,
  952. topEnd : null,
  953. top1A: {
  954. buttons: [
  955. {
  956. extend: 'collection',
  957. text: 'ESPORTA',
  958. buttons: [
  959. {
  960. extend: 'excelHtml5',"action":newexportaction,
  961. title: 'Uscite',
  962. exportOptions: {
  963. columns: ":not(':last')"
  964. }
  965. },
  966. {
  967. extend: 'pdfHtml5',"action":newexportaction,
  968. title: 'Uscite',
  969. exportOptions: {
  970. columns: ":not(':last')"
  971. }
  972. },
  973. {
  974. extend: 'print',"action":newexportaction,
  975. text: 'Stampa',
  976. title: 'Uscite',
  977. exportOptions: {
  978. columns: ":not(':last')"
  979. }
  980. }
  981. ],
  982. dropup: true
  983. }
  984. ]
  985. },
  986. top1B : {
  987. pageLength: {
  988. menu: [[10, 25, 50, 100, 100000], [10, 25, 50, 100, "Tutti"]]
  989. }
  990. },
  991. top1C :'search',
  992. bottomEnd: {
  993. paging: {
  994. boundaryNumbers: false
  995. }
  996. }
  997. },
  998. pagingType: 'first_last_numbers',
  999. language: {
  1000. "url": "/assets/js/Italian.json",
  1001. paginate: {
  1002. first: '<i class="fa-solid fa-angles-left"></i>',
  1003. last: '<i class="fa-solid fa-angles-right"></i>',
  1004. }
  1005. },
  1006. "fnInitComplete": function (oSettings, json) {
  1007. var html = '&nbsp;<a href="#" class="showHideFilter btn--ui"><i class="fa-solid fa-sliders"></i></a>';
  1008. html += '&nbsp;<a href="#" class="addData btn--ui"><i class="fa-solid fa-plus"></i></a>';
  1009. $(".dt-search").append(html);
  1010. }
  1011. });
  1012. $('#tablesaw-350 thead tr th').addClass('col');
  1013. $('#tablesaw-350 thead tr th').css("background-color", "#f6f8fa");
  1014. $('#tablesaw-350').on('draw.dt', function() {
  1015. $('[data-bs-toggle="popover"]').popover()
  1016. });
  1017. }
  1018. $(document).ready(function() {
  1019. $(document).on("click",".addData",function() {
  1020. $(".title--section_addButton").trigger("click")
  1021. });
  1022. } );
  1023. var isEdit = false;
  1024. Livewire.on('setEdit', (x) =>
  1025. {
  1026. isEdit = x;
  1027. console.log(isEdit);
  1028. });
  1029. function annulla()
  1030. {
  1031. window.onbeforeunload = null;
  1032. document.location.href = '/out';
  1033. }
  1034. window.onbeforeunload = function(){
  1035. if (isEdit)
  1036. return 'Cambiando pagina le eventuali modifiche andranno perse';
  1037. };
  1038. function loadDiv()
  1039. {
  1040. $("select").prop('disabled',true);
  1041. $("select[name='member_id']").prop('disabled',true);
  1042. $("select[name='supplier_id']").prop('disabled',true);
  1043. $("select[name='payment_method_id']").prop('disabled',true);
  1044. setTimeout(() => {
  1045. $("select").prop('disabled',false);
  1046. $("select[name='payment_method_id']").prop('disabled',false);
  1047. $("select[name='member_id']").prop('disabled',false);
  1048. $("select[name='supplier_id']").prop('disabled',false);
  1049. }, 1000);
  1050. }
  1051. </script>
  1052. @endpush