Download Invoices in Payment-View
This commit is contained in:
parent
f056a183c7
commit
acc3371ba8
70
app/Http/Controllers/Admin/InvoiceController.php
Normal file
70
app/Http/Controllers/Admin/InvoiceController.php
Normal file
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -591,6 +591,11 @@ class PaymentController extends Controller
|
||||||
->editColumn('created_at', function (Payment $payment) {
|
->editColumn('created_at', function (Payment $payment) {
|
||||||
return $payment->created_at ? $payment->created_at->diffForHumans() : '';
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,6 @@ use Illuminate\Contracts\View\Factory;
|
||||||
use Illuminate\Contracts\View\View;
|
use Illuminate\Contracts\View\View;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Http\Response;
|
use Illuminate\Http\Response;
|
||||||
use ZipArchive;
|
|
||||||
|
|
||||||
class SettingsController extends Controller
|
class SettingsController extends Controller
|
||||||
{
|
{
|
||||||
|
@ -86,30 +85,4 @@ class SettingsController extends Controller
|
||||||
return redirect()->route('admin.settings.index')->with('success', 'Invoice settings updated!');
|
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
<div class="card">
|
<div class="card">
|
||||||
<div class="card-header">
|
<div class="card-header">
|
||||||
<h5 class="card-title"><i class="fas fa-money-bill-wave mr-2"></i>{{ __('Payments') }}</h5>
|
<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>
|
||||||
|
|
||||||
<div class="card-body table-responsive">
|
<div class="card-body table-responsive">
|
||||||
|
@ -43,6 +47,7 @@
|
||||||
<th>{{ __('Payment ID') }}</th>
|
<th>{{ __('Payment ID') }}</th>
|
||||||
<th>{{ __('Payment Method') }}</th>
|
<th>{{ __('Payment Method') }}</th>
|
||||||
<th>{{ __('Created at') }}</th>
|
<th>{{ __('Created at') }}</th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -78,6 +83,7 @@
|
||||||
{data: 'payment_id'},
|
{data: 'payment_id'},
|
||||||
{data: 'payment_method'},
|
{data: 'payment_method'},
|
||||||
{data: 'created_at'},
|
{data: 'created_at'},
|
||||||
|
{data: 'actions' , sortable : false},
|
||||||
],
|
],
|
||||||
fnDrawCallback: function(oSettings) {
|
fnDrawCallback: function(oSettings) {
|
||||||
$('[data-toggle="popover"]').popover();
|
$('[data-toggle="popover"]').popover();
|
||||||
|
|
|
@ -1,10 +1,6 @@
|
||||||
@inject('Invoices', 'App\Classes\Settings\InvoiceSettingsC')
|
@inject('Invoices', 'App\Classes\Settings\InvoiceSettingsC')
|
||||||
|
|
||||||
<div class="tab-pane mt-3" id="invoice">
|
<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"
|
<form method="POST" enctype="multipart/form-data" class="mb-3"
|
||||||
action="{{ route('admin.settings.update.invoicesettings') }}">
|
action="{{ route('admin.settings.update.invoicesettings') }}">
|
||||||
@csrf
|
@csrf
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
use App\Http\Controllers\Admin\ActivityLogController;
|
use App\Http\Controllers\Admin\ActivityLogController;
|
||||||
use App\Http\Controllers\Admin\ApplicationApiController;
|
use App\Http\Controllers\Admin\ApplicationApiController;
|
||||||
use App\Http\Controllers\Admin\ConfigurationController;
|
use App\Http\Controllers\Admin\ConfigurationController;
|
||||||
|
use App\Http\Controllers\Admin\InvoiceController;
|
||||||
use App\Http\Controllers\Admin\OverViewController;
|
use App\Http\Controllers\Admin\OverViewController;
|
||||||
use App\Http\Controllers\Admin\PaymentController;
|
use App\Http\Controllers\Admin\PaymentController;
|
||||||
use App\Http\Controllers\Admin\CreditProductController;
|
use App\Http\Controllers\Admin\CreditProductController;
|
||||||
|
@ -132,9 +133,12 @@ Route::middleware(['auth', 'checkSuspended'])->group(function () {
|
||||||
#settings
|
#settings
|
||||||
Route::patch('settings/update/icons', [SettingsController::class, 'updateIcons'])->name('settings.update.icons');
|
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::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');
|
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
|
#usefullinks
|
||||||
Route::get('usefullinks/datatable', [UsefulLinkController::class, 'datatable'])->name('usefullinks.datatable');
|
Route::get('usefullinks/datatable', [UsefulLinkController::class, 'datatable'])->name('usefullinks.datatable');
|
||||||
Route::resource('usefullinks', UsefulLinkController::class);
|
Route::resource('usefullinks', UsefulLinkController::class);
|
||||||
|
|
Loading…
Reference in a new issue