mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 07:24:35 -04:00
Working on recurring invoices listview
This commit is contained in:
parent
e3b5f31f85
commit
a6b78fd7a6
@ -21,6 +21,7 @@ use Illuminate\Http\Request;
|
|||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Yajra\DataTables\Facades\DataTables;
|
use Yajra\DataTables\Facades\DataTables;
|
||||||
use Yajra\DataTables\Html\Builder;
|
use Yajra\DataTables\Html\Builder;
|
||||||
|
use Barracuda\ArchiveStream\Archive;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class InvoiceController
|
* Class InvoiceController
|
||||||
@ -85,27 +86,59 @@ class InvoiceController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function bulk()
|
public function bulk()
|
||||||
{
|
{
|
||||||
Log::error(request()->input('hashed_ids'));
|
|
||||||
|
|
||||||
$transformed_ids = $this->transformKeys(explode(",",request()->input('hashed_ids')));
|
$transformed_ids = $this->transformKeys(explode(",",request()->input('hashed_ids')));
|
||||||
|
|
||||||
$invoices = Invoice::whereIn('id', $transformed_ids)
|
if(request()->input('action') == 'payment')
|
||||||
|
return $this->makePayment($transformed_ids);
|
||||||
|
else if(request()->input('action') == 'download')
|
||||||
|
return $this->downloadInvoicePDF($transformed_ids);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function makePayment(array $ids)
|
||||||
|
{
|
||||||
|
|
||||||
|
$invoices = Invoice::whereIn('id', $ids)
|
||||||
->whereClientId(auth()->user()->client->id)
|
->whereClientId(auth()->user()->client->id)
|
||||||
->get()
|
->get()
|
||||||
->filter(function ($invoice){
|
->filter(function ($invoice){
|
||||||
return $invoice->isPayable();
|
return $invoice->isPayable();
|
||||||
});
|
});
|
||||||
|
|
||||||
Log::error($invoices);
|
|
||||||
|
|
||||||
$data = [
|
$data = [
|
||||||
'invoices' => $invoices,
|
'invoices' => $invoices,
|
||||||
];
|
];
|
||||||
|
|
||||||
return view('portal.default.invoices.payment', $data);
|
return view('portal.default.invoices.payment', $data);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function downloadInvoicePDF(array $ids)
|
||||||
|
{
|
||||||
|
$invoices = Invoice::whereIn('id', $ids)
|
||||||
|
->whereClientId(auth()->user()->client->id)
|
||||||
|
->get()
|
||||||
|
->filter(function ($invoice){
|
||||||
|
return $invoice->isPayable();
|
||||||
|
});
|
||||||
|
|
||||||
|
//generate pdf's of invoices locally
|
||||||
|
|
||||||
|
|
||||||
|
//if only 1 pdf, output to buffer for download
|
||||||
|
|
||||||
|
|
||||||
|
//if multiple pdf's, output to zip stream using Barracuda lib
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
$zip = Archive::instance_by_useragent(date('Y-m-d') . '_' . str_replace(' ', '_', trans('texts.invoices')));
|
||||||
|
$zip->add_file($name, $document->getRaw());
|
||||||
|
$zip->finish();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,77 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2019. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://opensource.org/licenses/AAL
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\ClientPortal;
|
||||||
|
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\RecurringInvoice;
|
||||||
|
use App\Utils\Traits\MakesHash;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Yajra\DataTables\Facades\DataTables;
|
||||||
|
use Yajra\DataTables\Html\Builder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class InvoiceController
|
||||||
|
* @package App\Http\Controllers\ClientPortal\InvoiceController
|
||||||
|
*/
|
||||||
|
|
||||||
|
class RecurringInvoiceController extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
use MakesHash;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the list of Invoices
|
||||||
|
*
|
||||||
|
* @param \App\Filters\InvoiceFilters $filters The filters
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function index(InvoiceFilters $filters, Builder $builder)
|
||||||
|
{//
|
||||||
|
$invoices = Invoice::filter($filters);
|
||||||
|
|
||||||
|
if (request()->ajax()) {
|
||||||
|
|
||||||
|
return DataTables::of(Invoice::filter($filters))->addColumn('action', function ($invoice) {
|
||||||
|
return '<a href="/client/recurring_invoices/'. $invoice->hashed_id .'/edit" class="btn btn-xs btn-primary"><i class="glyphicon glyphicon-edit"></i>'.ctrans('texts.view').'</a>';
|
||||||
|
})
|
||||||
|
->editColumn('status_id', function ($invoice){
|
||||||
|
return Invoice::badgeForStatus($invoice->status);
|
||||||
|
})
|
||||||
|
->rawColumns(['checkbox', 'action', 'status_id'])
|
||||||
|
->make(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$data['html'] = $builder;
|
||||||
|
|
||||||
|
return view('portal.default.recurring_invoices.index', $data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*
|
||||||
|
* @param \App\Models\Invoice $invoice The invoice
|
||||||
|
*
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show(RecurringInvoice $invoice)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -59,6 +59,7 @@ class PortalComposer
|
|||||||
|
|
||||||
$data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'fa fa-tachometer fa-fw fa-2x'];
|
$data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'fa fa-tachometer fa-fw fa-2x'];
|
||||||
$data[] = [ 'title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'fa fa-file-pdf-o fa-fw fa-2x'];
|
$data[] = [ 'title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'fa fa-file-pdf-o fa-fw fa-2x'];
|
||||||
|
$data[] = [ 'title' => ctrans('texts.recurring_invoices'), 'url' => 'client.recurring_invoices.index', 'icon' => 'fa fa-files-o fa-fw fa-2x'];
|
||||||
|
|
||||||
return $data;
|
return $data;
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ class SystemHealth
|
|||||||
'gd',
|
'gd',
|
||||||
'curl',
|
'curl',
|
||||||
'zip',
|
'zip',
|
||||||
|
'gmp'
|
||||||
];
|
];
|
||||||
|
|
||||||
private static $php_version = 7.3;
|
private static $php_version = 7.3;
|
||||||
|
@ -169,7 +169,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
|
|
||||||
$('#hashed_ids').val(selected);
|
$('#hashed_ids').val(selected);
|
||||||
$('#action').val('pay');
|
$('#action').val('payment');
|
||||||
|
|
||||||
$('#payment_form').submit();
|
$('#payment_form').submit();
|
||||||
});
|
});
|
||||||
|
@ -16,6 +16,7 @@ Route::group(['middleware' => ['auth:contact'], 'prefix' => 'client', 'as' => 'c
|
|||||||
|
|
||||||
Route::get('dashboard', 'ClientPortal\DashboardController@index')->name('dashboard'); // name = (dashboard. index / create / show / update / destroy / edit
|
Route::get('dashboard', 'ClientPortal\DashboardController@index')->name('dashboard'); // name = (dashboard. index / create / show / update / destroy / edit
|
||||||
Route::get('invoices', 'ClientPortal\InvoiceController@index')->name('invoices.index');
|
Route::get('invoices', 'ClientPortal\InvoiceController@index')->name('invoices.index');
|
||||||
|
Route::get('recurring_invoices', 'ClientPortal\RecurringInvoiceController@index')->name('recurring_invoices.index');
|
||||||
Route::post('invoices/payment', 'ClientPortal\InvoiceController@bulk')->name('invoices.bulk');
|
Route::post('invoices/payment', 'ClientPortal\InvoiceController@bulk')->name('invoices.bulk');
|
||||||
Route::get('profile/{client_contact}/edit', 'ClientPortal\ProfileController@edit')->name('profile.edit');
|
Route::get('profile/{client_contact}/edit', 'ClientPortal\ProfileController@edit')->name('profile.edit');
|
||||||
Route::put('profile/{client_contact}/edit', 'ClientPortal\ProfileController@update')->name('profile.update');
|
Route::put('profile/{client_contact}/edit', 'ClientPortal\ProfileController@update')->name('profile.update');
|
||||||
|
Loading…
x
Reference in New Issue
Block a user