'setCausal']; public $sortField ='date'; public $sortAsc = false; public $isDuplicate = false; public function sortBy($field) { if($this->sortField === $field) { $this->sortAsc = ! $this->sortAsc; } else { $this->sortAsc = true; } $this->sortField = $field; } public $records, $dataId, $member_id, $supplier_id, $causal_id, $payment_method_id, $date, $month, $year, $type, $amount, $virtual, $note, $commercial, $update = false, $add = false; public $currentReceip; public $filterMember = 0, $filterPaymentMethod = 0, $filterCausals = [], $filterFrom = '', $filterTo = '', $filterCommercial = 0; public $hasFilter = false; public $total = 0; public $selectedFilter = ''; public $multipleIds = []; public $multipleAction = ''; public $first = true; public $selectId = 0; public $refreshAfter = 0; public $canSave = true; public $newMemberFirstName = ''; public $newMemberLastName = ''; public $newMemberFiscalCode = ''; public $newMemberFiscalCodeExist = false; public $causals = array(); public $payments = array(); public $members = array(); public $rows = array(); protected $rules = [ 'member_id' => 'required', 'payment_method_id' => 'required', 'rows.*.causal_id' => 'required', 'rows.*.amount' => 'required' ]; protected $messages = [ 'member_id.required' => 'La persona è obbligatorio', 'payment_method_id.required' => 'Il metodo di pagamento è obbligatorio', 'causal_id.required' => 'La causale è obbligatoria', 'amount.required' => 'L\'importo è obbligatorio', ]; public function updatedMemberId() { $this->emit('refresh'); if ($this->member_id > 0) { $member = \App\Models\Member::findOrFail($this->member_id); $this->virtual = $member->getMoney(); $this->newMemberFirstName = ''; $this->newMemberLastName = ''; $this->newMemberFiscalCode = ''; $this->newMemberFiscalCodeExist = false; } } public function updatedCausalId() { //$this->emit('refresh'); } public function updatedDate() { //$this->emit('refresh'); } public function hydrate() { $this->emit('load-select'); } /*public function updated() { $this->emit('refresh'); }*/ public function updatedPaymentMethodId() { //$this->emit('refresh'); $this->canSave = $this->checkCanSave(); } public function updatedAmount() { // $this->emit('refresh'); $this->canSave = $this->checkCanSave(); } public function checkCanSave() { $ret = true; if ($this->payment_method_id != null) { $payment_method = \App\Models\PaymentMethod::findOrFail($this->payment_method_id); if ($payment_method->money) { $ret = $this->virtual >= $this->currencyToDouble($this->amount); } } return $ret; } public function resetFields(){ $this->member_id = null; $this->supplier_id = null; $this->payment_method_id = null; $this->date = date("Y-m-d"); $this->type = 'IN'; $this->newMemberFirstName = ''; $this->newMemberLastName = ''; $this->newMemberFiscalCode = ''; $this->newMemberFiscalCodeExist = false; $this->currentReceip = null; $this->rows = array(); $this->rows[] = array('causal_id' => isset($_GET["causalId"]) ? $_GET["causalId"] : null, 'when' => array(array('month' => date("n"), 'year' => date("Y"), 'period' => '')), 'amount' => null, 'note' => '', 'commercial' => 0); } public function getMemberProperty() { $ret = null; if ($this->member_id > 0) { $ret = \App\Models\Member::findOrFail($this->member_id); } return $ret; } public function getCausalProperty() { $ret = null; if ($this->causal_id > 0) { $ret = \App\Models\Causal::findOrFail($this->causal_id); } return $ret; } public function getCausal($causal) { $ret = ''; if ($causal > 0) { $ret = \App\Models\Causal::findOrFail($causal)->getTree(); } return $ret; } function buildTree($records, $parentId = 0) { $this->causals = array(); foreach ($records as $record) { if ($record->parent_id == $parentId) { $children = $this->buildTree($record, $record->id); if ($children) { $record->children = $children; } $this->causals[] = $record; } } return $this->causals; } public function getCausale($records, $indentation) { foreach($records as $record) { $this->causals[] = array('id' => $record->id, 'name' => $record->getTree(), 'text' => $record->getTree(), 'level' => $indentation); if(count($record->childs)) $this->getCausale($record->childs, $indentation + 1); } } public function mount() { $this->causals = array(); $this->getCausale(\App\Models\Causal::select('id', 'name')->where('parent_id', null)->where('type', 'IN')->get(), 0); //$this->buildTree(\App\Models\Causal::all(), null); $this->members = \App\Models\Member::select(['id', 'first_name', 'last_name', 'fiscal_code'])->orderBy('last_name')->orderBy('first_name')->get(); $this->payments = \App\Models\PaymentMethod::select('id', 'name')->orderBy('name')->get(); if ($this->first) { if (isset($_GET["new"])) { $this->refreshAfter = 1; $this->add(); } if (isset($_GET["memberId"])) { $this->refreshAfter = 1; $this->member_id = $_GET["memberId"]; } if (isset($_GET["causalId"])) { $this->refreshAfter = 1; $this->causal_id = $_GET["causalId"]; } if (isset($_GET["id"])) { $this->refreshAfter = 1; $this->edit($_GET["id"]); } } $this->first = false; } public function search() { $this->hasFilter = true; } public function disableSearch() { $this->filterMember = 0; $this->filterPaymentMethod = 0; $this->filterCausals = []; $this->filterTo = ''; $this->filterFrom = ''; $this->filterCommercial = 0; $this->hasFilter = false; $this->total = 0; } public function render() { if ($this->hasFilter) { $datas = \App\Models\Record::where('type', 'IN')->with('member', 'payment_method'); /*if ($this->filterCommercial > 0) { $datas = $datas->where('commercial', $this->filterCommercial == 1 ? true : false); }*/ if ($this->filterMember > 0) { $datas = $datas->where('member_id', $this->filterMember); } if ($this->filterPaymentMethod > 0) { $datas = $datas->where('payment_method_id', $this->filterPaymentMethod); } /*if (sizeof($this->filterCausals) > 0) { $datas = $datas->whereIn('causal_id', $this->filterCausals); }*/ if ($this->filterFrom != '') { $datas = $datas->where('date', '>=', $this->filterFrom); } if ($this->filterTo != '') { $datas = $datas->where('date', '<=', $this->filterTo); } // $this->records = $datas->orderBy('date', 'DESC')->get(); $this->records = $datas->get(); $this->total = 0; foreach($this->records as $r) { foreach($r->rows as $rr) { $this->total += $rr->amount; } } //$this->total = $this->records->sum('amount'); } else { if ($this->selectedFilter == '') { $this->records = \App\Models\Record::where('type', 'IN')->with('member', 'payment_method')->limit(20)->orderBy('date', 'DESC')->orderBy('id', 'DESC')->get(); } else { if ($this->selectedFilter == 0) { $fromDate = date("Y-m-d"); $toDate = date("Y-m-d"); } if ($this->selectedFilter == 1) { $fromDate = date("Y-m-01"); $toDate = date("Y-m-t"); } if ($this->selectedFilter == 2) { $fromDate = date("Y-01-01"); $toDate = date("Y-12-31"); } if ($this->selectedFilter == 3) { $fromDate = date("2000-01-01"); $toDate = date("Y-12-31"); } $this->records = \App\Models\Record::where('type', 'IN')->whereBetween('date', [$fromDate, $toDate])->with('member', 'payment_method')->get(); } } foreach($this->records as $r) { $r->total = $r->getTotal(); $r->person = $r->member ? ($r->member->first_name . " " . $r->member->last_name) : ''; $r->payment = $r->payment_method ? $r->payment_method->name : ''; } if ($this->sortField != '') { if ($this->sortAsc) $this->records = $this->records->sortBy($this->sortField); else $this->records = $this->records->sortByDesc($this->sortField); } else $this->records = $this->records->sortByDesc('id'); return view('livewire.records_in'); } public function executeMultipleAction(){ if ($this->multipleAction == 'delete') $this->multipleDelete(); } public function add() { $this->emit('load-select'); //if ($this->hasFilter) $this->emit('hide-search'); $this->resetFields(); $this->add = true; $this->update = false; } public function store($generate) { $this->emit('refresh'); $rules = [ 'payment_method_id' => 'required', 'rows.*.causal_id' => 'required', 'rows.*.amount' => 'required' ]; $f = false; foreach($this->rows as $row) { if (!$row["commercial"]) $f = true; } if ($f) $rules["member_id"] = 'required'; $this->validate($rules); try { $record = \App\Models\Record::create([ 'member_id' => $this->member_id, 'supplier_id' => $this->supplier_id, // 'causal_id' => $this->causal_id, 'payment_method_id' => $this->payment_method_id, 'date' => $this->date, // 'month' => $this->month, // 'year' => $this->year, // 'note' => $this->note, 'type' => $this->type, // 'amount' => $this->currencyToDouble($this->amount), // 'commercial' => $this->commercial, ]); $this->dataId = $record->id; // Inserisco le righe $tot = 0; foreach($this->rows as $row) { foreach($row["when"] as $x => $y) { $row["when"][$x]['period'] = $row["when"][$x]['month'] . "-" . $row["when"][$x]['year']; } \App\Models\RecordRow::create([ 'record_id' => $this->dataId, 'causal_id' => $row["causal_id"], 'note' => $row["note"], 'amount' => $this->currencyToDouble($row["amount"]), 'commercial' => $row["commercial"], 'when' => json_encode($row["when"]) ]); $tot += $this->currencyToDouble($row["amount"]); } $record->amount = $tot; $record->save(); if ($generate) $this->createReceipt(); session()->flash('success','Movimento creato'); $this->resetFields(); $this->add = false; $this->isDuplicate = false; } catch (\Exception $ex) { session()->flash('error','Errore (' . $ex->getMessage() . ')'); } } public function duplicate($id){ $record = \App\Models\Record::findOrFail($id); $newRecord = $record->replicate(); $newRecord->save(); $rows = \App\Models\RecordRow::where('record_id', $id)->get(); foreach($rows as $r) { $newRow = $r->replicate(); $newRow->record_id = $newRecord->id; $newRow->save(); } $this->isDuplicate = true; $this->edit($newRecord->id); } public function edit($id){ //if ($this->hasFilter) $this->emit('hide-search'); $this->emit('load-select'); try { $record = \App\Models\Record::findOrFail($id); if( !$record) { session()->flash('error','Movimento non trovato'); } else { $this->member_id = $record->member_id; $this->supplier_id = $record->supplier_id; // $this->causal_id = $record->causal_id; $this->payment_method_id = $record->payment_method_id; $this->date = date("Y-m-d", strtotime($record->date)); // $this->month = $record->month; // $this->year = $record->year; // $this->note = $record->note; $this->type = $record->type; // $this->amount = formatPrice($record->amount); // $this->commercial = $record->commercial; $this->dataId = $record->id; $this->update = true; $this->add = false; $this->rows = \App\Models\RecordRow::where('record_id', $this->dataId)->select('causal_id', 'note', 'commercial', 'when', 'amount')->get()->toArray(); foreach($this->rows as $i => $r) { $this->rows[$i]['amount'] = formatPrice($this->rows[$i]['amount']); $this->rows[$i]['when'] = json_decode($this->rows[$i]['when']); } $exist = \App\Models\Receipt::where('record_id', $id)->first(); if ($exist != null) $this->currentReceip = $exist; } } catch (\Exception $ex) { session()->flash('error','Errore (' . $ex->getMessage() . ')'); } } public function update($generate) { $this->emit('refresh'); $rules = [ 'payment_method_id' => 'required', 'rows.*.causal_id' => 'required', 'rows.*.amount' => 'required' ]; $f = false; foreach($this->rows as $row) { if (!$row["commercial"]) $f = true; } if ($f) $rules["member_id"] = 'required'; $this->validate($rules); try { \App\Models\Record::whereId($this->dataId)->update([ 'member_id' => $this->member_id, 'supplier_id' => $this->supplier_id, // 'causal_id' => $this->causal_id, 'payment_method_id' => $this->payment_method_id, 'date' => date("Y-m-d", strtotime($this->date)), // 'month' => $this->month, // 'year' => $this->year, // 'note' => $this->note, 'type' => $this->type, // 'amount' => $this->currencyToDouble($this->amount), //'commercial' => $this->commercial, ]); $tot = 0; // Elimino le righe \App\Models\RecordRow::where('record_id', $this->dataId)->delete(); // Inserisco le righe foreach($this->rows as $row) { foreach($row["when"] as $x => $y) { $row["when"][$x]['period'] = $row["when"][$x]['month'] . "-" . $row["when"][$x]['year']; } \App\Models\RecordRow::create([ 'record_id' => $this->dataId, 'causal_id' => $row["causal_id"], 'note' => $row["note"], 'amount' => $this->currencyToDouble($row["amount"]), 'commercial' => $row["commercial"], 'when' => json_encode($row["when"]) ]); $tot += $this->currencyToDouble($row["amount"]); } $rec = \App\Models\Record::findOrFail($this->dataId); $rec->amount = $tot; $rec->save(); if ($generate) $this->createReceipt(); session()->flash('success','Movimento aggiornato'); $this->resetFields(); $this->update = false; $this->isDuplicate = false; } catch (\Exception $ex) { session()->flash('error','Errore (' . $ex->getMessage() . ')'); } } public function cancel() { // Se arrivo da duplica elimino if ($this->isDuplicate) { try{ \App\Models\Record::find($this->dataId)->delete(); session()->flash('success',"Movimento eliminato"); }catch(\Exception $e){ session()->flash('error','Errore (' . $ex->getMessage() . ')'); } } $this->isDuplicate = false; $this->add = false; $this->update = false; $this->resetFields(); } public function delete($id) { try{ \App\Models\Record::find($id)->delete(); session()->flash('success',"Movimento eliminato"); }catch(\Exception $e){ session()->flash('error','Errore (' . $ex->getMessage() . ')'); } } public function multipleDelete() { try{ foreach($this->multipleIds as $id) { \App\Models\Record::find($id)->delete(); } }catch(\Exception $e){ session()->flash('error','Errore (' . $ex->getMessage() . ')'); } $this->multipleAction = ''; } public function createMember() { $this->newMemberFiscalCodeExist = false; $this->validate([ // 'newMemberFiscalCode'=>'required|max:16', 'newMemberFirstName'=>'required', 'newMemberLastName'=>'required' ]); // Check fiscal code exist $exist = false; if ($this->newMemberFiscalCode != '') { $check = \App\Models\Member::where('fiscal_code', $this->newMemberFiscalCode)->get(); $exist = $check->count() > 0; } if (!$exist) { $member = \App\Models\Member::create([ 'first_name' => $this->newMemberFirstName, 'last_name' => $this->newMemberLastName, 'fiscal_code' => $this->newMemberFiscalCode, 'status' => true ]); $this->member_id = $member->id; $this->members = \App\Models\Member::select(['id', 'first_name', 'last_name', 'fiscal_code'])->get(); // $this->emit('reloadMembers'); $this->emit('refresh'); $this->newMemberFirstName = ''; $this->newMemberLastName = ''; $this->newMemberFiscalCode = ''; $this->emit('saved'); //$this->validate(); $this->selectId++; } else { $this->newMemberFiscalCodeExist = true; } } public function createReceipt() { $receipt = \App\Models\Receipt::where('record_id', $this->dataId)->first(); if ($receipt != null) { $receipt->update([ 'member_id' => $this->member_id, 'supplier_id' => $this->supplier_id, // 'causal_id' => $this->causal_id, 'payment_method_id' => $this->payment_method_id, 'date' => date("Y-m-d", strtotime($this->date)), //'month' => $this->month, //'year' => $this->year, 'type' => $this->type, //'amount' => $this->currencyToDouble($this->amount), //'commercial' => $this->commercial, 'status' => 1, ]); \App\Models\ReceiptRow::where('receip_id', $receipt->id)->delete(); foreach($this->rows as $row) { \App\Models\ReceiptRow::create([ 'receip_id' => $receipt->id, 'causal_id' => $row["causal_id"], 'note' => $row["note"], 'amount' => $this->currencyToDouble($row["amount"]), 'commercial' => $row["commercial"], 'when' => json_encode($row["when"]) ]); } } else { $number = 1; $exist = \App\Models\Receipt::where('year', date("Y"))->orderBy('number', 'DESC')->first(); if ($exist != null) $number = $exist->number + 1; $receipt = \App\Models\Receipt::create([ 'record_id' => $this->dataId, 'member_id' => $this->member_id, 'supplier_id' => $this->supplier_id, //'causal_id' => $this->causal_id, 'payment_method_id' => $this->payment_method_id, 'number' => $number, 'date' => $this->date, //'month' => $this->month, 'year' => date("Y"), 'type' => $this->type, //'amount' => $this->currencyToDouble($this->amount), //'commercial' => $this->commercial, 'status' => 1, ]); foreach($this->rows as $row) { \App\Models\ReceiptRow::create([ 'receip_id' => $receipt->id, 'causal_id' => $row["causal_id"], 'note' => $row["note"], 'amount' => $this->currencyToDouble($row["amount"]), 'commercial' => $row["commercial"], 'when' => json_encode($row["when"]) ]); } $this->currentReceip = $receipt; } /* $data = [ 'member' => $receipt->id ]; $pdf = \PDF::loadView('partials.pdf_generate_connections', $data)->setPaper('a4', 'landscape')->output(); // return response()->streamDownload( fn() => print($pdf), 'export_protocol.pdf' ); */ } public function removeReceipt() { $receipt = \App\Models\Receipt::findOrFail($this->currentReceip->id); $receipt->status = 99; $receipt->save(); $this->currentReceip = $receipt; } function currencyToDouble($val) { $x = str_replace("€", "", $val); $x = str_replace(".", "", $x); $x = str_replace(",", ".", $x); return trim($x); } public function addRow() { $this->rows[] = array('causal_id' => null, 'when' => array(array('month' => date("n"), 'year' => date("Y"), 'period' => '')), 'amount' => null, 'note' => '', 'commercial' => 0); $this->emit('load-select'); } public function delRow($idx) { unset($this->rows[$idx]); // $this->emit('load-select'); } public function addPeriod($idx) { $this->rows[$idx]['when'][] = array('month' => date("n"), 'year' => date("Y"), 'period' => ''); } public function delPeriod($idx, $xxx) { unset($this->rows[$idx]['when'][$xxx]); // $this->emit('load-select'); } public function getTotal() { $total = 0.00; foreach($this->rows as $r) { if ($r["amount"] != null && $r["amount"] != "") $total += $this->currencyToDouble($r["amount"]); } return formatPrice($total); // $this->emit('load-select'); } public function setCausal($id, $idx) { $this->rows[$idx]["causal_id"] = $id; } }