records_out.blade.php 46 KB

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