Laravel + Livewire application loses the filters when I change the page

Viewed 271

I am developing a multi-tenant web app with laravel 8 and livewire and I have a problem with filters and pagination. The application is a management software through which the user displays report data in tables (created as livewire components), which are paginated and from which he can obtain filtered data. Examples of filters are anno, procedura, etc ... When filters are applied to the tables, they return the data correctly filtered and paginated, but if the page is changed, the filters are not kept and therefore all the rows are shown again.

Anyone have any advice or ideas? I can't understand what is causing this problem ... thanks everyone for the help :-)

here my code:

  • TablePratiche

<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use Illuminate\Http\Request;
use App\Models\AnagraficaSoggetto;

class TablePratiche extends Component
{
   use WithPagination;

   protected $paginationTheme = 'bootstrap';

   public function render()
   {
       return view('livewire.table-pratiche');
   }
}

-TablePraticheContent


<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Livewire\WithPagination;
use Illuminate\Http\Request;
use App\Models\AnagraficaSoggetto;

class TablePraticheContent extends Component
{
    use WithPagination;
    protected $paginationTheme = 'bootstrap';

    protected $connection = null;
    public $pratiche = null;
    protected $listeners = ['filtri' => 'renderWithFilter'];

    public function mount(Request $request)
    {

        // Setto la connessione
        if (null !== $request->get('throughMiddleware')) {
            $this->connection = 'tenant';
        } else {
            $this->connection = null;
        }

        // Recupero i dati da renderizzare

        $anagrafica = new AnagraficaSoggetto();
        $anagrafica->setConnection($this->connection);

        $this->pratiche = $anagrafica->select(
            'denominazioneSoggetto',
            'anagrafica_soggetto.codiceFiscale',
            'indirizzoPOSTA',
            'tipologia_imposta.descrizione_sintetica',
            'importoCarico as carico',
            'importoResiduo as residuo',
            'pagatoNormale as riscosso',
            'pagatoDiscarico as sgravio',
            'data_assegnazione',
            'username as collaboratore',
            'minuta_partita.id',
            'minuta_partita.id_minuta as id_minuta',
            'partita_pagamenti.progressivoRiscossione',
            'partita_pagamenti.agenteRiscossione',
        )->distinct()
            ->join('minuta_partita', 'minuta_partita.id_soggetto', '=', 'anagrafica_soggetto.id')
            ->join('users', 'minuta_partita.id_user', '=', 'users.id', 'left outer')
            ->join('partita_pagamenti', 'partita_pagamenti.id_minuta_partita', '=', 'minuta_partita.id', 'left outer')
            ->join('tipologia_imposta', 'minuta_partita.id_tipologia_imposta', '=', 'tipologia_imposta.id')
            ->paginate(15)
            ->toArray();
        //dd($this->pratiche);
    }

    //funzione per triggerare l'evento onclick sulla tabella pratiche
    public function clickPartiteTrigger($id)
    {
        $this->emit('getPartite', $id);
        // questo evento passa al gestionale-modal-component l'id della pratica
        //in questo modo possiamo prenderlo per l'apertura del modal
        $this->emit('getPratica', $id);
    }

    public function render()
    {
        return
            view('livewire.table-pratiche-content')
            ->with('pratiche', $this->pratiche);
    }

    public function renderWithFilter($filtered)
    {
            $this->pratiche = $filtered;
            //dd($this->pratiche);
    }
}

-GestionaleHeaderFilter


<?php

namespace App\Http\Livewire;

use Livewire\Component;
use Illuminate\Http\Request;
use App\Models\MinutaPartita;
use App\Models\AnagraficaSoggetto;
use App\Models\TipologiaImposta;
use Illuminate\Support\Facades\DB;
use Livewire\WithPagination;
use App\Tenant;

class GestionaleHeaderFilter extends Component
{
    protected $paginationTheme = 'bootstrap';

    protected $connection = null;
    public $first_render = true;
    public $filtered = null;
    public $nomi_imposta = null;
    public $anni_riferimento = null;

    // Definiamo l'array dei filtri (anno, tipo imposta, procedure, inesigibilita, residui)
    public $filter = [
        'anno' => '',         // filtro per anno
        'procedura' => '',           // filtro per procedura
        'inesigibilita' => '',    // filtro per inesigibilita
        'imposta' => '',        // filtro per tipo imposta
        'residui' => ''   // filtro per residui
    ];

    public function mount(Request $request)
    {
        
        if (null !== $request->get('throughMiddleware')) {
            $this->connection = 'tenant';
        } else {
            $this->connection = null;
        }

        $this->nomi_imposta = TipologiaImposta::on($this->connection)
            ->select('id', 'descrizione_sintetica', 'descrizione_imposta')
            ->orderBy('descrizione_imposta', 'ASC')
            ->get()
            ->toArray();

        $this->anni_riferimento = MinutaPartita::on($this->connection)
            ->select('annoRiferimento')
            ->distinct()
            ->orderByDesc('annoRiferimento')
            ->get()
            ->toArray();
    }

    public function filtri()
    {

        if (null !== request()->get('throughMiddleware')) {
            $this->connection = 'tenant';
        } else {
            $this->connection = null;
        }

        $options = array();

        // Recupero le le condizioni di where
        if ($this->filter['anno'] != '') {
            $options['minuta_partita.annoRiferimento'] = $this->filter['anno'];
        }

        if ($this->filter['imposta'] != '') {
            $options['tipologia_imposta.id'] = $this->filter['imposta'];
        }

        if ($this->filter['procedura'] != '') {
            $options['proceduraEsecutiva'] = $this->filter['procedura'];
        }

        if ($this->filter['inesigibilita'] != '') {
            $options['inesigibilita'] = $this->filter['inesigibilita'];
        }

        $anagrafica = new AnagraficaSoggetto();
        $anagrafica->setConnection($this->connection);

        $pratiche = $anagrafica->select(
            'denominazioneSoggetto',
            'anagrafica_soggetto.codiceFiscale',
            'indirizzoPOSTA',
            'tipologia_imposta.descrizione_sintetica',
            'importoCarico as carico',
            'importoResiduo as residuo',
            'pagatoNormale as riscosso',
            'pagatoDiscarico as sgravio',
            'data_assegnazione',
            'username as collaboratore',
            'id_minuta_partita',
            'minuta_partita.id_minuta as id_minuta',
            'partita_pagamenti.progressivoRiscossione',
            'partita_pagamenti.agenteRiscossione',
        )->distinct()
            ->join('minuta_partita', 'minuta_partita.id_soggetto', '=', 'anagrafica_soggetto.id')
            ->join('partita_pagamenti', 'partita_pagamenti.id_minuta_partita', '=', 'minuta_partita.id', 'left outer')
            ->join('users', 'minuta_partita.id_user', '=', 'users.id', 'left outer')
            ->join('tipologia_imposta', 'minuta_partita.id_tipologia_imposta', '=', 'tipologia_imposta.id');

        foreach ($options as $key => $value) {
            $pratiche = $pratiche->where($key, '=', $value);
        }

        if ($this->filter['residui'] != '') {
            $pratiche = $pratiche->where('importoResiduo', '>', '0');
        }

        $this->filtered = $pratiche->paginate(15)->toArray();

        $this->emit('filtri', $this->filtered);
    }
    
    public function render()
    {

        return view('livewire.gestionale-header-filter')
            ->with('nomi_imposta', $this->nomi_imposta)
            ->with('anni', $this->anni_riferimento);
            //->with('idt', $idt);
    }
}

1 Answers

Hi I open this question to post the blade code of my views.

  • gestionale.blade.php
{{-- Extends layout --}}
@extends('layout.layout2')


{{-- Content --}}
@section('content')
@if ($errors->any())
<div class="card-body">
    <div class="alert alert-danger alert-dismissible fade show solid alert-rounded">
        <button type="button" class="close h-100" data-dismiss="alert" aria-label="Close"><span><i
                    class="mdi mdi-close"></i></span>
        </button>
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ ucfirst($error) }}</li>
            @endforeach
        </ul>
    </div>
</div>
@endif
@if (!empty(session()->get('error')))
<div class="card-body">
    <div class="alert alert-danger alert-dismissible fade show solid alert-rounded">
        <button type="button" class="close h-100" data-dismiss="alert" aria-label="Close"><span><i
                    class="mdi mdi-close"></i></span>
        </button>
        <strong>Error!! </strong>{{ session()->get('error') }}
    </div>
</div>
@endif
@if (!empty(session()->get('results')))
<div class="card-body">
@foreach (session()->get('results') as $result)
    @if(isset($result['error']))
        <div class="alert alert-danger alert-dismissible fade show solid alert-rounded">
            <button type="button" class="close h-100" data-dismiss="alert" aria-label="Close"><span><i
                        class="mdi mdi-close"></i></span>
            </button>
            <ul>
                <li>{{ ucfirst($result['error']) }}</li>    
            </ul>
        </div>
    @else
        <div class="alert alert-success alert-dismissible fade show solid alert-rounded">
            <button type="button" class="close h-100" data-dismiss="alert" aria-label="Close"><span><i
                        class="mdi mdi-close"></i></span>
            </button>
            <ul>
                <li>{{ ucfirst($result['success']) }}</li>    
            </ul>
        </div>
    @endif
@endforeach
</div>
@endif
@if (!empty(session()->get('success')))
            <div class="card-body">
                <div class="alert alert-success alert-dismissible fade show solid alert-rounded">
                    <button type="button" class="close h-100" data-dismiss="alert" aria-label="Close"><span><i
                                class="mdi mdi-close"></i></span>
                    </button>
                    <strong>Success!! </strong>{{ session()->get('success') }}
                </div>
            </div>
@endif
    <div class="container-fluid">
        <div class="row page-titles mx-0">
            <div class="col-sm-6 p-md-0">
                <div class="welcome-text">
                    <h4>Sei sul gestionale di {{ $idt }}</h4>
                    <span>Qui sono listate pratche, partite e articoli</span>
                </div>
            </div>
        </div>
            <!-- import del componente gestionale header filter per i filtri -->
            <livewire:gestionale-header-filter>
            <!-- fine import del componente gestionale header filter -->
            <hr />
            <!-- import dei component livewire (tab: partite, pratiche, articoli) -->
            <livewire:table-pratiche />
            <hr />
            <livewire:table-partite />
            <hr />
            <livewire:table-articoli />
            <!-- fine dell'import dei component livewire (tab: partite, pratiche, articoli) -->
            <!-- import del component contenente i button per aprire i modal -->
            <livewire:gestionale-modal-component />

            <a class="btn btn-secondary" href="{{ url('tenants/' .$idt) }}">Torna alla dashboard</a>

    </div>
    <!-- Inizio dei modal per gestire le azioni del gestionale -->
    <!-- modal per l'inserimento di un pagamento -->
    <div class="modal fade" id="PagamentoLongModal">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Aggungi un pagamento</h5>
                    <button type="button" class="close" data-dismiss="modal"><span>&times;</span>
                    </button>
                </div>
                <div class="basic-form">
                    <form id="formAddPagamento" method="POST" action="{{ url('/tenants/'.$idt.'/gestionale/addPagamento') }}">
                        @csrf
                            <div class="modal-body">
                                <!-- corpo del form popolato dinamicamente -->
                            </div>
                            <div class="modal-footer">
                                <input type="submit" class="btn btn-primary" value="Aggiungi pagamento">
                                <button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>
                            </div>
                    </form>
                </div>
            </div>
        </div>
    </div>

    <!-- modal per l'inserimento di un assegnatario -->
    <div class="modal fade bd-example-modal-lg" tabindex="-1" id="assegnatarioModal" role="dialog" aria-hidden="true">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Aggiungi un assegnatario</h5>
                    <button type="button" class="close" data-dismiss="modal"><span>&times;</span>
                    </button>
                </div>
                <div class="basic-form">
                    <form id="formAddAssegnatario" method="POST" action="{{ url('/tenants/'.$idt.'/gestionale/addAssegnatario') }}">
                        @csrf
                            <div class="modal-body">
                                <!-- corpo del form popolato dinamicamente -->
                            </div>
                            <div class="modal-footer">
                                <input type="submit" class="btn btn-primary" value="Aggiungi assegnatario">
                                <button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>
                            </div>
                    </form>
                </div>
            </div>
        </div>
    </div>

    <!-- modal per visualizzare i pagamenti associati alla partita -->
    <div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-hidden="true" id="ShowPagamentiModal">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Pagamenti associati alla partita</h5>
                    <button type="button" class="close" data-dismiss="modal"><span>&times;</span>
                    </button>
                </div>
                    <div class="card-body">
                        <div class="table-responsive">
                            <table class="table table-hover table-responsive-sm">
                                <thead>
                                    <tr>
                                        <th>Ente</th>
                                        <th>Minuta</th>
                                        <th>Minuta partita</th>
                                        <th>Anno rif.</th>
                                        <th>Agente Riscossione</th>
                                        <th>Anno ruolo</th>
                                        <th>#ruolo</th>
                                        <th>Codice Fiscale</th>
                                        <th>Denominazione</th>
                                        <th>ID cartella</th>
                                        <th>Carico €</th>
                                        <th>Progressivo riscossione</th>
                                        <th>Data pagam.</th>
                                        <th>Data reg.</th>
                                        <th>Tipo pagam</th>
                                        <th>Modalità pagamento</th>
                                    </tr>
                                </thead>
                                    <div class="modal-body-table">
                                        
                                    </div>
                            </table>
                        </div>
                    </div>
                    <div class="modal-footer">
                
                    </div>
            </div>
        </div>
    </div>

    <!-- modal per visualizzare le procedure e le inesigibilita associati alla partita -->
    <div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-hidden="true"
        id="ProcedureInesigibilitaModal">
        <div class="modal-dialog modal-xl">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title">Procedure e Inesigibilit&agrave;</h5>
                    <button type="button" class="close" data-dismiss="modal"><span>&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    <!-- da aggiungere il corpo del body -->
                    
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>
                    <button type="button" class="btn btn-primary">Salva</button>
                </div>
            </div>
        </div>
    </div>
    <!-- fine dei modal per gestire le azioni del gestionale -->
    <script>
        //SCRIPT PER L'APERTURA DINAMICA DEI MODAL A SECONDA CHE SIANO SELEZIONATE O MENO LE OPPORTUNE RIGHE DELLE TABELLE NELLA PAGINA
        // INIZIO ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'AGGIUNGI PAGAMENTO'
        window.addEventListener('openPagamentoLongModal', event => {
            console.log(event.detail.articolo[0]);
            $(".modal-body").empty();
            $(".modal-footer").empty();
            $(".modal-body").append('<input type="text" hidden name="ida" id="articolo" placeholder="' + event.detail.id_articolo + '" value="'+event.detail.id_articolo+'"/>');
            $(".modal-body").append('<input type="text" hidden name="idp" id="partita" placeholder="' + event.detail.articolo[0].idp + '" value="'+event.detail.articolo[0].idp+'"/>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Presso</label><div class="col-sm-9"><input type="text" class="form-control input-rounded" placeholder="Ente"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Partita</label><div class="col-sm-9"><input type="text" readonly class="form-control input-rounded" name="partita" value="'+event.detail.articolo[0].partita+'"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Anno riferimento</label><div class="col-sm-9"><input type="text" readonly class="form-control input-rounded" name="anno_rif"  value="'+event.detail.articolo[0].anno_rif+'"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Anno</label><div class="col-sm-9"><input type="text" readonly class="form-control input-rounded" name="anno_ruolo" value="'+event.detail.articolo[0].anno_ruolo+'"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Numero</label><div class="col-sm-9"><input type="text" readonly class="form-control input-rounded" name="num_ruolo" value="'+event.detail.articolo[0].ruolo+'"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Carico</label><div class="col-sm-9"><input type="text" readonly class="form-control input-rounded" name="carico" value="'+event.detail.articolo[0].carico+'"></div></div>');
            $(".modal-body").append('<hr>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Tipologia</label><div class="col-sm-9"><select class="form-select input-rounded form-select-lg mb-3" aria-label=".form-select-lg example" name="tipologia"><option value="sgravio">Sgravio</option><option value="normale">Normale</option></select></div></div>');
            $(".modal-body").append('<option value="sgravio">Sgravio</option>');
            $(".modal-body").append('<option value="normale">Normale</option>');
            $(".modal-body").append('</select></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Imposta</label><div class="col-sm-9"><input type="number" step=".01" class="form-control input-rounded" name="imposta"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Mora</label><div class="col-sm-9"><input type="number" step=".01" class="form-control input-rounded" name="mora"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Data Pagamento</label><div class="col-sm-9"><input type="date" class="form-control input-rounded" name="data_pag"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Data Registrazione</label><div class="col-sm-9"><input type="date" class="form-control input-rounded" name="data_reg"></div></div>');
            $(".modal-body").append('<div class="form-group row"><label class="col-sm-3 col-form-label">Note</label><div class="col-sm-9"><input type="text" class="form-control input-rounded" name="note"></div></div>');
            if(event.detail.articolo[0].residuo > 0){
                $(".modal-footer").append('<input type="submit" class="btn btn-primary" value="Aggiungi pagamento">');
                $(".modal-footer").append('<button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>');
            }else{
                $(".modal-footer").append('<button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>');
            }
            $("#formAddPagamento").append('@csrf()');
            $("#PagamentoLongModal").modal('show');
        })
      
        window.addEventListener('closePagamentoLongModal', event => {
            $("#PagamentoLongModal").modal('hide');
        })
        // FINE ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'AGGIUNGI PAGAMENTO'
    
        // INIZIO ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'AGGIUNGI ASSEGNATARIO'
        window.addEventListener('openassegnatarioModal', event => {
            $(".modal-body").empty();
            $(".modal-footer").empty();
            $(".modal-body").append('<input type="text" hidden name="id_pratica" id="pratica" placeholder="' + event.detail.id_pratica + '" value="'+event.detail.id_pratica+'"/>');
            $(".modal-body").append('<div class="form-group row"><label>Seleziona un assegnatario per la pratica:</label>');
            $(".modal-body").append('<select class="form-select input-rounded form-select-lg mb-3" aria-label=".form-select-lg example" name="assegnatario"><option value="'+event.detail.assegnatario[0].id+'">'+event.detail.assegnatario[0].username+'</option></select></div>');
            $(".modal-footer").append('<input type="submit" class="btn btn-primary" value="Aggiungi assegnatario">');
            $(".modal-footer").append('<button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>');
            $("#formAddAssegnatario").append('@csrf()');
            $("#assegnatarioModal").modal('show');
        })
      
        window.addEventListener('closassegnatarioModal', event => {
            $("#assegnatarioModal").modal('hide');
        })
        // FINE ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'AGGIUNGI ASSEGNATARIO'
    
        // INIZIO ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'PAGAMENTI ASSOCIATI'
        window.addEventListener('openShowPagamentiModal', event => {
            // Qui dobbiamo passare la lista dei pagamenti associati alla partita
            $(".modal-body-table").empty();
            $(".modal-footer").empty();
            $(".modal-body-table").append('TODO');
            $(".modal-footer").append('<button type="button" class="btn btn-danger light" data-dismiss="modal">Chiudi</button>');
            $(".modal-footer").append('<button type="button" class="btn btn-primary"><i class="fa fa-print" aria-hidden="true"></i>Stampa</button>');
            $("#ShowPagamentiModal").modal('show');
        })
      
        window.addEventListener('closeShowPagamentiModal', event => {
            $("#ShowPagamentiModal").modal('hide');
        })
        // FINE ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'PAGAMENTI ASSOCIATI'
    
        // INIZIO ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'PROCEDURE/INESIGIBILITA'
        window.addEventListener('openProcedureInesigibilitaModal', event => {
            // Qui dobbiamo passare la lista delle procedure e inesigibilita associate
            $(".modal-body").empty();
            $(".modal-body").append('<h3>Procedure associate</h3>');
            $(".modal-body").append('<p>Lista delle procedure associate alla partita</p>');
            $(".modal-body").append('<hr/>');
            $(".modal-body").append('<h3>Inesigibilità associate</h3>');
            $(".modal-body").append('<p>Lista delle inesigibilità associate alla partita</p>');
            $("#ProcedureInesigibilitaModal").modal('show');
        })
      
        window.addEventListener('closeProcedureInesigibilitaModal', event => {
            $("#ProcedureInesigibilitaModal").modal('hide');
        })
        // FINE ACTION PER APERTURA E CHIUSURA DINAMICA DEL MODAL 'PROCEDURE/INESIGIBILITA'
    
    
      </script>
    <!--   IMPORTANTE: AGGIUNGERE IL CSRF TOKEN PRIMA DI ANDARE IN PRODUZIONE -->

@endsection

  • table-pratiche.blade.php ( livewire component )
<div class="row">
    <div class="col-12">
        <div class="card">
            <div class="card-header">
                <h4 class="card-title">Pratiche</h4>
            </div>
            <div class="card-body">
                <div class="table-responsive">
                  <table class="table table-hover table-responsive-md" id="tblpratiche">
                    <thead>
                      <tr>
                        <th>Soggetto</th>
                        <th>Codice Fiscale</th>
                        <th>Indirizzo</th>
                        <th>Tipo di imposta</th>
                        <th>Carico</th>
                        <th>Riscosso</th>
                        <th>Sgravio</th>
                        <th>Residuo</th>
                        <th>Assegnatario</th>
                        <th>Data assegn.</th>
                        <th>Dettagli</th>
                      </tr>
                    </thead>
                    <livewire:table-pratiche-content />

  • table-pratiche-content.blade.php ( livewire component )
<tbody>
    @if (!empty($pratiche))
        <?php
        $carico = 0;
        $riscosso = 0;
        $sgravio = 0;
        $residuo = 0;

        $first = null;
        $last =null;
        $current = null;
        $next = null;
        $prev = null;
        ?>
        @foreach ($pratiche['data'] as $p)
            <tr wire:click="clickPartiteTrigger({{ $p['id_minuta'] }})" onclick="toggleClass(this, 'table-info')">
                <td>@if(isset($p['denominazioneSoggetto'])) {{ $p['denominazioneSoggetto'] }} @else - @endif</td>
                <td>@if(isset($p['codiceFiscale'])) {{ $p['codiceFiscale'] }} @else - @endif</td>
                <td>@if(isset($p['indirizzoPOSTA'])) {{ $p['indirizzoPOSTA'] }} @else - @endif</td>
                <td>@if(isset($p['descrizione_sintetica']) && $p['descrizione_sintetica'] != '' ) {{ $p['descrizione_sintetica'] }} @else - @endif</td>
                <td>@if(isset($p['carico'])) {{ $p['carico'] }} &euro; @else - @endif</td>
                <td>@if(isset($p['riscosso'])) {{ $p['riscosso'] }} &euro; @else - @endif</td>
                <td>@if(isset($p['sgravio'])) {{ $p['sgravio'] }} &euro; @else - @endif</td>
                <td>@if(isset($p['residuo'])) {{ $p['residuo'] }} &euro; @else - @endif</td>
                <td>@if(isset($p['collaboratore'])) {{ $p['collaboratore'] }} @else - @endif</td>
                <td>@if(isset($p['data_assegnazione'])) {{ $p['data_assegnazione'] }} @else - @endif</td>
                @if($p['residuo']>0)
                    <td><span class="badge light badge-warning">Non riscosso</span></td>
                @else
                    <td><span class="badge light badge-success">Riscosso</span></td>
                @endif
                <?php
                    $carico = $carico + $p['carico'];
                    $riscosso = $riscosso + $p['riscosso'];
                    $sgravio = $sgravio + $p['sgravio'];
                    $residuo = $residuo + $p['residuo'];
                ?>
            </tr>
        @endforeach
            <?php
                    $first = $pratiche['first_page_url'];
                    $last = $pratiche['last_page_url'];
                    $current = $pratiche['current_page'];
                    $next = $pratiche['next_page_url'];
                    $prev = $pratiche['prev_page_url'];
            ?>
    @endif
</tbody>
<livewire:tbl-pratiche-footer-filter :carico="$carico" :riscosso="$riscosso" :sgravio="$sgravio" :residuo="$residuo" 
                :first="$first" :last="$last" :current="$current" :next="$next" :prev="$prev" :pratiche="$pratiche" />

 @push('custom_scripts')
 <script type="text/javascript">
        function toggleClass(el, className) {
            if (el.className.indexOf(className) >= 0) {
                el.className = el.className.replace(className,"");
        }
        else {
                el.className  += className;
            }
        }
</script>
 @endpush
Related