Procházet zdrojové kódy

fix tabella ricevute

FabioFratini před 8 měsíci
rodič
revize
4582da4725
2 změnil soubory, kde provedl 64 přidání a 44 odebrání
  1. 7 5
      resources/views/livewire/receipt.blade.php
  2. 57 39
      routes/web.php

+ 7 - 5
resources/views/livewire/receipt.blade.php

@@ -331,15 +331,17 @@
             var filterMember = $('.filterMember').val();
             localStorage.setItem("filterMemberReceipt", filterMember);
 
-            $('#tablesaw-350').DataTable({
+            var table = $('#tablesaw-350').DataTable({
                 serverSide: true,
+                processing: true, // Add this to show processing indicator
                 ajax: {
                     url: '/get_receipts?filterStatus=' + filterStatus + '&filterFrom=' + filterFrom + '&filterTo=' + filterTo + '&filterMember=' + filterMember,
-                    dataSrc: function (json) {
-                        if (json.totals) {
-                            totals = json.totals;
-                        }
+                    dataSrc: function(json) {
+                        console.log("Response:", json); // Debug the response
                         return json.data;
+                    },
+                    error: function(xhr, error, thrown) {
+                        console.log("Error:", error, thrown);
                     }
                 },
                 thead: {

+ 57 - 39
routes/web.php

@@ -7,6 +7,9 @@ use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Artisan;
 use Illuminate\Support\Facades\Log;
 use Illuminate\Support\Facades\Schema;
+use Illuminate\Support\Facades\Mail;
+use Illuminate\Support\Facades\Storage;
+use Illuminate\Support\Facades\Config;
 
 /*
 |--------------------------------------------------------------------------
@@ -1463,72 +1466,82 @@ Route::get('/get_course_members', function () {
 });
 
 Route::get('/get_receipts', function () {
-        $receiptColumns = Schema::getColumnListing('receipts');
-        $groupByColumns = array_map(function($column) {
-            return 'receipts.' . $column;
-        }, $receiptColumns);
-
-        // Add member columns
-        $groupByColumns[] = 'members.first_name';
-        $groupByColumns[] = 'members.last_name';
-
-        $x = \App\Models\Receipt::select('receipts.*', 'members.first_name', 'members.last_name', DB::raw('SUM(receipts_rows.amount) AS totals'))
-            ->leftJoin('members', 'receipts.member_id', '=', 'members.id')
-            ->leftJoin('receipts_rows', 'receipts.id', '=', 'receipts_rows.receip_id')
-            ->groupBy($groupByColumns);
-    if (isset($_GET["search"]["value"])) {
+    // Start with a base query - but without the GROUP BY for counting
+    $baseQuery = \App\Models\Receipt::select('receipts.*')
+        ->leftJoin('members', 'receipts.member_id', '=', 'members.id');
+
+    // Apply filters
+    if (isset($_GET["search"]["value"]) && !empty($_GET["search"]["value"])) {
         $v = str_replace("'", "\'", stripcslashes($_GET["search"]["value"]));
         $member_ids = \App\Models\Member::where(function ($query) use ($v) {
             $query->whereRaw("CONCAT(first_name, ' ', last_name) like '%" . $v . "%'")
                 ->orWhereRaw("CONCAT(last_name, ' ', first_name) like '%" . $v . "%'");
         })->pluck('id');
-        $x = $x->whereIn('member_id', $member_ids);
+        $baseQuery = $baseQuery->whereIn('receipts.member_id', $member_ids);
     }
 
     if (isset($_GET["filterStatus"]) && $_GET["filterStatus"] != '')
-        $x = $x->where('receipts.status', $_GET["filterStatus"]);
+        $baseQuery = $baseQuery->where('receipts.status', $_GET["filterStatus"]);
 
     if (isset($_GET["filterFrom"]) && $_GET["filterFrom"] != "")
-        $x = $x->where('date', '>=', $_GET["filterFrom"]);
+        $baseQuery = $baseQuery->where('receipts.date', '>=', $_GET["filterFrom"]);
 
     if (isset($_GET["filterTo"]) && $_GET["filterTo"] != "")
-        $x = $x->where('date', '<=', $_GET["filterTo"]);
+        $baseQuery = $baseQuery->where('receipts.date', '<=', $_GET["filterTo"]);
 
     if (isset($_GET["filterMember"]) && $_GET["filterMember"] != "")
-        $x = $x->where('receipts.member_id', $_GET["filterMember"]);
-
-    $count = $x->count();
-
+        $baseQuery = $baseQuery->where('receipts.member_id', $_GET["filterMember"]);
+
+    // Count BEFORE applying the GROUP BY
+    $count = $baseQuery->distinct()->count('receipts.id');
+
+    // Clone the base query and add the group by and joins for the data
+    $dataQuery = clone $baseQuery;
+    $dataQuery = $dataQuery->select(
+        'receipts.*',
+        'members.first_name',
+        'members.last_name',
+        DB::raw('SUM(receipts_rows.amount) AS totals')
+    )
+    ->leftJoin('receipts_rows', 'receipts.id', '=', 'receipts_rows.receip_id')
+    ->groupBy('receipts.id');
+
+    // Apply sorting
     if (isset($_GET["order"])) {
         $column = '';
         if ($_GET["order"][0]["column"] == 0)
-            $column = 'year';
+            $column = 'receipts.year';
         if ($_GET["order"][0]["column"] == 1)
-            $column = 'number';
+            $column = 'receipts.number';
         if ($_GET["order"][0]["column"] == 2)
-            $column = 'last_name';
+            $column = 'members.last_name';
         if ($_GET["order"][0]["column"] == 3)
-            $column = 'first_name';
+            $column = 'members.first_name';
         if ($_GET["order"][0]["column"] == 4)
-            $column = 'status';
+            $column = 'receipts.status';
         if ($_GET["order"][0]["column"] == 5)
-            $column = 'date';
+            $column = 'receipts.date';
         if ($_GET["order"][0]["column"] == 6)
             $column = 'totals';
+
         if ($column != '')
-            $x = $x->orderBy($column, $_GET["order"][0]["dir"])->orderBy('receipts.id', 'DESC');
+            $dataQuery = $dataQuery->orderBy($column, $_GET["order"][0]["dir"])->orderBy('receipts.id', 'DESC');
         else
-            $x = $x->orderBy('receipts.id', 'DESC');
-    } else
-        $x = $x->orderBy('receipts.id', 'DESC');
+            $dataQuery = $dataQuery->orderBy('receipts.id', 'DESC');
+    } else {
+        $dataQuery = $dataQuery->orderBy('receipts.id', 'DESC');
+    }
 
-    if (isset($_GET["start"]))
-        $x = $x->offset($_GET["start"])->limit($_GET["length"])->get();
-    else
-        $x = $x->get();
+    // Apply pagination
+    if (isset($_GET["start"]) && isset($_GET["length"]))
+        $dataQuery = $dataQuery->offset($_GET["start"])->limit($_GET["length"]);
+
+    // Get the results
+    $results = $dataQuery->get();
 
+    // Format the data
     $datas = [];
-    foreach ($x as $idx => $r) {
+    foreach ($results as $idx => $r) {
         $ids = $r->id . "|" . $r->record_id;
         $datas[] = array(
             'year' => $r->year,
@@ -1542,7 +1555,12 @@ Route::get('/get_receipts', function () {
         );
     }
 
-    return json_encode(array("data" => $datas, "recordsTotal" => $count, "recordsFiltered" => $count));
+    // Return the proper format with correct counts
+    return response()->json([
+        "data" => $datas,
+        "recordsTotal" => $count,
+        "recordsFiltered" => $count
+    ]);
 });
 
 
@@ -1637,7 +1655,7 @@ Route::get('/send_sms', function () {
 
 Route::get('/test_mail', function(){
 
-    $receipt = \App\Models\Receip::first();
+    $receipt = \App\Models\Receipt::first();
     $pdf = PDF::loadView('receipt', array('receipt' => $receipt));
     $pdfName = "ricevuta_" . $receipt->number . "_" . $receipt->year . ".pdf";
     Storage::put('public/pdf/' . $pdfName, $pdf->output());