Jelajahi Sumber

Download Invoices in Payment-View

1Day 3 tahun lalu
induk
melakukan
acc3371ba8

+ 70 - 0
app/Http/Controllers/Admin/InvoiceController.php

@@ -0,0 +1,70 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use App\Http\Controllers\Controller;
+use App\Models\Invoice;
+use Illuminate\Http\Request;
+use Throwable;
+use ZipArchive;
+
+class InvoiceController extends Controller
+{
+
+    public function downloadAllInvoices()
+    {
+        $zip = new ZipArchive;
+        $zip_safe_path = storage_path('invoices.zip');
+        $res = $zip->open($zip_safe_path, ZipArchive::CREATE | ZipArchive::OVERWRITE);
+        $result = $this::rglob(storage_path('app/invoice/*'));
+        if ($res === TRUE) {
+            $zip->addFromString("1. Info.txt", __("Created at") . " " . now()->format("d.m.Y"));
+            foreach ($result as $file) {
+                if (file_exists($file) && is_file($file)) {
+                    $zip->addFile($file, basename($file));
+                }
+            }
+            $zip->close();
+        }
+        return response()->download($zip_safe_path);
+    }
+
+    /**
+     * @param $pattern
+     * @param $flags
+     * @return array|false
+     */
+    public function rglob($pattern, $flags = 0)
+    {
+        $files = glob($pattern, $flags);
+        foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
+            $files = array_merge($files, $this::rglob($dir . '/' . basename($pattern), $flags));
+        }
+        return $files;
+    }
+
+    /**
+     * @param $paymentID
+     * @param $date
+     */
+    public function downloadSingleInvoice(Request $request)
+    {
+        $id = $request->id;
+        try {
+            $query = Invoice::where('payment_id', '=', $id)->firstOrFail();
+        } catch (Throwable $e) {
+            return redirect()->back()->with("error", __("Error!"));
+        }
+
+        $invoice_path = storage_path('app/invoice/' . $query->invoice_user . '/' . $query->created_at->format("Y") . '/' . $query->invoice_name . '.pdf');
+
+        if (!file_exists($invoice_path)) {
+            return redirect()->back()->with("error", __("Error!"));
+        }
+
+
+        return response()->download($invoice_path);
+
+    }
+
+}

+ 6 - 1
app/Http/Controllers/Admin/PaymentController.php

@@ -591,6 +591,11 @@ class PaymentController extends Controller
             ->editColumn('created_at', function (Payment $payment) {
                 return $payment->created_at ? $payment->created_at->diffForHumans() : '';
             })
-            ->make();
+            ->addColumn('actions', function (Payment $payment) {
+                return ' <a data-content="'.__("Download").'" data-toggle="popover" data-trigger="hover" data-placement="top"  href="' . route('admin.invoices.downloadSingleInvoice',"id=".$payment->payment_id) . '" class="btn btn-sm text-white btn-info mr-1"><i class="fas fa-file-download"></i></a>
+';
+            })
+            ->rawColumns(['actions'])
+            ->make(true);
     }
 }

+ 0 - 27
app/Http/Controllers/Admin/SettingsControllers/SettingsController.php

@@ -9,7 +9,6 @@ use Illuminate\Contracts\View\Factory;
 use Illuminate\Contracts\View\View;
 use Illuminate\Http\Request;
 use Illuminate\Http\Response;
-use ZipArchive;
 
 class SettingsController extends Controller
 {
@@ -86,30 +85,4 @@ class SettingsController extends Controller
         return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!');
     }
 
-    public function downloadAllInvoices()
-    {
-        $zip = new ZipArchive;
-        $zip_safe_path = storage_path('invoices.zip');
-        $res = $zip->open($zip_safe_path, ZipArchive::CREATE | ZipArchive::OVERWRITE);
-        $result = $this::rglob(storage_path('app/invoice/*'));
-        if ($res === TRUE) {
-            $zip->addFromString("1. Info.txt", "This Archive contains all Invoices from all Users!\nIf there are no Invoices here, no Invoices have ever been created!");
-            foreach ($result as $file) {
-                if (file_exists($file) && is_file($file)) {
-                    $zip->addFile($file, basename($file));
-                }
-            }
-            $zip->close();
-        }
-        return response()->download($zip_safe_path);
-    }
-
-    public function rglob($pattern, $flags = 0)
-    {
-        $files = glob($pattern, $flags);
-        foreach (glob(dirname($pattern) . '/*', GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
-            $files = array_merge($files, $this::rglob($dir . '/' . basename($pattern), $flags));
-        }
-        return $files;
-    }
 }

+ 6 - 0
resources/views/admin/payments/index.blade.php

@@ -27,6 +27,10 @@
             <div class="card">
                 <div class="card-header">
                     <h5 class="card-title"><i class="fas fa-money-bill-wave mr-2"></i>{{ __('Payments') }}</h5>
+                    <div class="float-right">
+                        <a href="{{ route('admin.invoices.downloadAllInvoices') }}"><button
+                                class="btn btn-info">{{ __('Download all Invoices') }}</button></a>
+                    </div>
                 </div>
 
                 <div class="card-body table-responsive">
@@ -43,6 +47,7 @@
                                 <th>{{ __('Payment ID') }}</th>
                                 <th>{{ __('Payment Method') }}</th>
                                 <th>{{ __('Created at') }}</th>
+                                <th></th>
                             </tr>
                         </thead>
                         <tbody>
@@ -78,6 +83,7 @@
                     {data: 'payment_id'},
                     {data: 'payment_method'},
                     {data: 'created_at'},
+                    {data: 'actions' , sortable : false},
                 ],
                 fnDrawCallback: function(oSettings) {
                     $('[data-toggle="popover"]').popover();

+ 0 - 4
resources/views/admin/settings/tabs/invoice.blade.php

@@ -1,10 +1,6 @@
 @inject('Invoices', 'App\Classes\Settings\InvoiceSettingsC')
 
 <div class="tab-pane mt-3" id="invoice">
-    <div class="float-right">
-        <a href="{{ route('admin.settings.downloadAllInvoices') }}"><button
-                class="btn btn-success">{{ __('Download all Invoices') }}</button></a>
-    </div>
     <form method="POST" enctype="multipart/form-data" class="mb-3"
         action="{{ route('admin.settings.update.invoicesettings') }}">
         @csrf

+ 5 - 1
routes/web.php

@@ -3,6 +3,7 @@
 use App\Http\Controllers\Admin\ActivityLogController;
 use App\Http\Controllers\Admin\ApplicationApiController;
 use App\Http\Controllers\Admin\ConfigurationController;
+use App\Http\Controllers\Admin\InvoiceController;
 use App\Http\Controllers\Admin\OverViewController;
 use App\Http\Controllers\Admin\PaymentController;
 use App\Http\Controllers\Admin\CreditProductController;
@@ -132,9 +133,12 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
         #settings
         Route::patch('settings/update/icons', [SettingsController::class, 'updateIcons'])->name('settings.update.icons');
         Route::patch('settings/update/invoice-settings', [SettingsController::class, 'updateInvoiceSettings'])->name('settings.update.invoicesettings');
-        Route::get('settings/download-invoices', [SettingsController::class, 'downloadAllInvoices'])->name('settings.downloadAllInvoices');;
         Route::resource('settings', SettingsController::class)->only('index');
 
+        #invoices
+        Route::get('invoices/download-invoices', [InvoiceController::class, 'downloadAllInvoices'])->name('invoices.downloadAllInvoices');;
+        Route::get('invoices/download-single-invoice', [InvoiceController::class, 'downloadSingleInvoice'])->name('invoices.downloadSingleInvoice');;
+
         #usefullinks
         Route::get('usefullinks/datatable', [UsefulLinkController::class, 'datatable'])->name('usefullinks.datatable');
         Route::resource('usefullinks', UsefulLinkController::class);