Merge pull request #95 from denisdulici/duplicate

Duplicate records
This commit is contained in:
Denis Duliçi 2017-11-26 15:23:40 +03:00 committed by GitHub
commit e227c1d8ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
28 changed files with 256 additions and 23 deletions

View File

@ -39,7 +39,7 @@ class Controller extends BaseController
} }
// Add CRUD permission check // Add CRUD permission check
$this->middleware('permission:create-' . $controller)->only(['create', 'store']); $this->middleware('permission:create-' . $controller)->only(['create', 'store', 'duplicate']);
$this->middleware('permission:read-' . $controller)->only(['index', 'show', 'edit']); $this->middleware('permission:read-' . $controller)->only(['index', 'show', 'edit']);
$this->middleware('permission:update-' . $controller)->only(['update']); $this->middleware('permission:update-' . $controller)->only(['update']);
$this->middleware('permission:delete-' . $controller)->only('destroy'); $this->middleware('permission:delete-' . $controller)->only('destroy');

View File

@ -261,6 +261,24 @@ class Bills extends Controller
return redirect('expenses/bills/' . $bill->id); return redirect('expenses/bills/' . $bill->id);
} }
/**
* Duplicate the specified resource.
*
* @param Bill $bill
*
* @return Response
*/
public function duplicate(Bill $bill)
{
$clone = $bill->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.bills', 1)]);
flash($message)->success();
return redirect('expenses/bills/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -90,6 +90,24 @@ class Payments extends Controller
return redirect('expenses/payments'); return redirect('expenses/payments');
} }
/**
* Duplicate the specified resource.
*
* @param Payment $payment
*
* @return Response
*/
public function duplicate(Payment $payment)
{
$clone = $payment->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.payments', 1)]);
flash($message)->success();
return redirect('expenses/payments/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -52,6 +52,24 @@ class Vendors extends Controller
return redirect('expenses/vendors'); return redirect('expenses/vendors');
} }
/**
* Duplicate the specified resource.
*
* @param Vendor $vendor
*
* @return Response
*/
public function duplicate(Vendor $vendor)
{
$clone = $vendor->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.vendors', 1)]);
flash($message)->success();
return redirect('expenses/vendors/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -83,6 +83,24 @@ class Customers extends Controller
return redirect('incomes/customers'); return redirect('incomes/customers');
} }
/**
* Duplicate the specified resource.
*
* @param Customer $customer
*
* @return Response
*/
public function duplicate(Customer $customer)
{
$clone = $customer->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.customers', 1)]);
flash($message)->success();
return redirect('incomes/customers/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -24,6 +24,7 @@ use App\Notifications\Income\Invoice as Notification;
use App\Notifications\Item\Item as ItemNotification; use App\Notifications\Item\Item as ItemNotification;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use App\Traits\Incomes;
use App\Traits\Uploads; use App\Traits\Uploads;
use App\Utilities\Modules; use App\Utilities\Modules;
use Date; use Date;
@ -31,7 +32,7 @@ use File;
class Invoices extends Controller class Invoices extends Controller
{ {
use DateTime, Currencies, Uploads; use DateTime, Currencies, Incomes, Uploads;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
@ -100,11 +101,7 @@ class Invoices extends Controller
$taxes = Tax::enabled()->pluck('name', 'id'); $taxes = Tax::enabled()->pluck('name', 'id');
// Generate next invoice number $number = $this->getNextInvoiceNumber();
$prefix = setting('general.invoice_number_prefix', 'INV-');
$next = setting('general.invoice_number_next', '1');
$digit = setting('general.invoice_number_digit', '5');
$number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
return view('incomes.invoices.create', compact('customers', 'currencies', 'items', 'taxes', 'number')); return view('incomes.invoices.create', compact('customers', 'currencies', 'items', 'taxes', 'number'));
} }
@ -235,9 +232,7 @@ class Invoices extends Controller
InvoiceHistory::create($request->all()); InvoiceHistory::create($request->all());
// Update next invoice number // Update next invoice number
$next = setting('general.invoice_number_next', 1) + 1; $this->increaseNextInvoiceNumber();
setting(['general.invoice_number_next' => $next]);
setting()->save();
// Fire the event to make it extendible // Fire the event to make it extendible
event(new InvoiceCreated($invoice)); event(new InvoiceCreated($invoice));
@ -249,6 +244,27 @@ class Invoices extends Controller
return redirect('incomes/invoices/' . $invoice->id); return redirect('incomes/invoices/' . $invoice->id);
} }
/**
* Duplicate the specified resource.
*
* @param Invoice $invoice
*
* @return Response
*/
public function duplicate(Invoice $invoice)
{
$clone = $invoice->duplicate();
// Update next invoice number
$this->increaseNextInvoiceNumber();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.invoices', 1)]);
flash($message)->success();
return redirect('incomes/invoices/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -91,6 +91,24 @@ class Revenues extends Controller
return redirect('incomes/revenues'); return redirect('incomes/revenues');
} }
/**
* Duplicate the specified resource.
*
* @param Revenue $revenue
*
* @return Response
*/
public function duplicate(Revenue $revenue)
{
$clone = $revenue->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.revenues', 1)]);
flash($message)->success();
return redirect('incomes/revenues/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -67,6 +67,24 @@ class Items extends Controller
return redirect('items/items'); return redirect('items/items');
} }
/**
* Duplicate the specified resource.
*
* @param Item $item
*
* @return Response
*/
public function duplicate(Item $item)
{
$clone = $item->duplicate();
$message = trans('messages.success.duplicated', ['type' => trans_choice('general.items', 1)]);
flash($message)->success();
return redirect('items/items/' . $clone->id . '/edit');
}
/** /**
* Show the form for editing the specified resource. * Show the form for editing the specified resource.
* *

View File

@ -5,11 +5,12 @@ namespace App\Models\Expense;
use App\Models\Model; use App\Models\Model;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Bill extends Model class Bill extends Model
{ {
use Currencies, DateTime, Eloquence; use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'bills'; protected $table = 'bills';
@ -44,6 +45,13 @@ class Bill extends Model
'notes' => 2, 'notes' => 2,
]; ];
/**
* Clonable relationships.
*
* @var array
*/
protected $cloneable_relations = ['histories', 'items', 'payments', 'totals'];
public function vendor() public function vendor()
{ {
return $this->belongsTo('App\Models\Expense\Vendor'); return $this->belongsTo('App\Models\Expense\Vendor');

View File

@ -5,11 +5,12 @@ namespace App\Models\Expense;
use App\Models\Model; use App\Models\Model;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Payment extends Model class Payment extends Model
{ {
use Currencies, DateTime, Eloquence; use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'payments'; protected $table = 'payments';

View File

@ -3,11 +3,12 @@
namespace App\Models\Expense; namespace App\Models\Expense;
use App\Models\Model; use App\Models\Model;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Vendor extends Model class Vendor extends Model
{ {
use Eloquence; use Cloneable, Eloquence;
protected $table = 'vendors'; protected $table = 'vendors';

View File

@ -3,13 +3,13 @@
namespace App\Models\Income; namespace App\Models\Income;
use App\Models\Model; use App\Models\Model;
use Bkwld\Cloner\Cloneable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Customer extends Model class Customer extends Model
{ {
use Eloquence; use Cloneable, Eloquence, Notifiable;
use Notifiable;
protected $table = 'customers'; protected $table = 'customers';
@ -59,4 +59,9 @@ class Customer extends Model
{ {
return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id'); return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id');
} }
public function onCloning($src, $child = null)
{
$this->user_id = null;
}
} }

View File

@ -5,11 +5,13 @@ namespace App\Models\Income;
use App\Models\Model; use App\Models\Model;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use App\Traits\Incomes;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Invoice extends Model class Invoice extends Model
{ {
use Currencies, DateTime, Eloquence; use Cloneable, Currencies, DateTime, Eloquence, Incomes;
protected $table = 'invoices'; protected $table = 'invoices';
@ -44,6 +46,13 @@ class Invoice extends Model
'notes' => 2, 'notes' => 2,
]; ];
/**
* Clonable relationships.
*
* @var array
*/
protected $cloneable_relations = ['histories', 'items', 'payments', 'totals'];
public function user() public function user()
{ {
return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id'); return $this->belongsTo('App\Models\Auth\User', 'customer_id', 'id');
@ -99,6 +108,11 @@ class Invoice extends Model
return $query->where('invoice_status_code', '!=', 'draft'); return $query->where('invoice_status_code', '!=', 'draft');
} }
public function onCloning($src, $child = null)
{
$this->invoice_number = $this->getNextInvoiceNumber();
}
/** /**
* Convert amount to double. * Convert amount to double.
* *

View File

@ -5,11 +5,12 @@ namespace App\Models\Income;
use App\Models\Model; use App\Models\Model;
use App\Traits\Currencies; use App\Traits\Currencies;
use App\Traits\DateTime; use App\Traits\DateTime;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Revenue extends Model class Revenue extends Model
{ {
use Currencies, DateTime, Eloquence; use Cloneable, Currencies, DateTime, Eloquence;
protected $table = 'revenues'; protected $table = 'revenues';

View File

@ -3,14 +3,13 @@
namespace App\Models\Item; namespace App\Models\Item;
use App\Models\Model; use App\Models\Model;
use App\Models\Expense\Bill;
use App\Models\Income\Invoice;
use App\Traits\Currencies; use App\Traits\Currencies;
use Bkwld\Cloner\Cloneable;
use Sofa\Eloquence\Eloquence; use Sofa\Eloquence\Eloquence;
class Item extends Model class Item extends Model
{ {
use Currencies, Eloquence; use Cloneable, Currencies, Eloquence;
protected $table = 'items'; protected $table = 'items';

34
app/Traits/Incomes.php Normal file
View File

@ -0,0 +1,34 @@
<?php
namespace App\Traits;
trait Incomes
{
/**
* Generate next invoice number
*
* @return string
*/
public function getNextInvoiceNumber()
{
$prefix = setting('general.invoice_number_prefix', 'INV-');
$next = setting('general.invoice_number_next', '1');
$digit = setting('general.invoice_number_digit', '5');
$number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT);
return $number;
}
/**
* Increase the next invoice number
*/
public function increaseNextInvoiceNumber()
{
// Update next invoice number
$next = setting('general.invoice_number_next', 1) + 1;
setting(['general.invoice_number_next' => $next]);
setting()->save();
}
}

View File

@ -14,6 +14,7 @@
"barryvdh/laravel-debugbar": "2.3.*", "barryvdh/laravel-debugbar": "2.3.*",
"barryvdh/laravel-dompdf": "0.*", "barryvdh/laravel-dompdf": "0.*",
"barryvdh/laravel-ide-helper": "2.3.*", "barryvdh/laravel-ide-helper": "2.3.*",
"bkwld/cloner": "3.2.*",
"cknow/laravel-money": "1.0.*", "cknow/laravel-money": "1.0.*",
"dingo/api": "1.0.0-beta8", "dingo/api": "1.0.0-beta8",
"fzaninotto/faker": "1.6.*", "fzaninotto/faker": "1.6.*",

View File

@ -187,6 +187,7 @@ return [
Akaunting\Setting\Provider::class, Akaunting\Setting\Provider::class,
Akaunting\Version\Provider::class, Akaunting\Version\Provider::class,
Barryvdh\DomPDF\ServiceProvider::class, Barryvdh\DomPDF\ServiceProvider::class,
Bkwld\Cloner\ServiceProvider::class,
ClickNow\Money\MoneyServiceProvider::class, ClickNow\Money\MoneyServiceProvider::class,
Collective\Html\HtmlServiceProvider::class, Collective\Html\HtmlServiceProvider::class,
Dingo\Api\Provider\LaravelServiceProvider::class, Dingo\Api\Provider\LaravelServiceProvider::class,

View File

@ -92,6 +92,7 @@ return [
'created' => 'Created', 'created' => 'Created',
'id' => 'ID', 'id' => 'ID',
'more_actions' => 'More Actions', 'more_actions' => 'More Actions',
'duplicate' => 'Duplicate',
'title' => [ 'title' => [
'new' => 'New :type', 'new' => 'New :type',

View File

@ -6,6 +6,7 @@ return [
'added' => ':type added!', 'added' => ':type added!',
'updated' => ':type updated!', 'updated' => ':type updated!',
'deleted' => ':type deleted!', 'deleted' => ':type deleted!',
'duplicated' => ':type duplicated!',
], ],
'error' => [ 'error' => [
'not_user_company' => 'Error: You are not allowed to manage this company!', 'not_user_company' => 'Error: You are not allowed to manage this company!',

View File

@ -72,6 +72,11 @@
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('expenses/bills/' . $item->id) }}">{{ trans('general.show') }}</a></li> <li><a href="{{ url('expenses/bills/' . $item->id) }}">{{ trans('general.show') }}</a></li>
<li><a href="{{ url('expenses/bills/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('expenses/bills/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-expenses-bills')
<li><a href="{{ url('expenses/bills/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-expenses-bills') @permission('delete-expenses-bills')
<li>{!! Form::deleteLink($item, 'expenses/bills') !!}</li> <li>{!! Form::deleteLink($item, 'expenses/bills') !!}</li>
@endpermission @endpermission

View File

@ -56,6 +56,11 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('expenses/payments/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('expenses/payments/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-expenses-payments')
<li><a href="{{ url('expenses/payments/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-expenses-payments') @permission('delete-expenses-payments')
<li>{!! Form::deleteLink($item, 'expenses/payments') !!}</li> <li>{!! Form::deleteLink($item, 'expenses/payments') !!}</li>
@endpermission @endpermission

View File

@ -58,6 +58,11 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('expenses/vendors/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('expenses/vendors/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-expenses-vendors')
<li><a href="{{ url('expenses/vendors/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-expenses-vendors') @permission('delete-expenses-vendors')
<li>{!! Form::deleteLink($item, 'expenses/vendors') !!}</li> <li>{!! Form::deleteLink($item, 'expenses/vendors') !!}</li>
@endpermission @endpermission

View File

@ -58,6 +58,11 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('incomes/customers/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('incomes/customers/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-incomes-customers')
<li><a href="{{ url('incomes/customers/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-incomes-customers') @permission('delete-incomes-customers')
<li>{!! Form::deleteLink($item, 'incomes/customers') !!}</li> <li>{!! Form::deleteLink($item, 'incomes/customers') !!}</li>
@endpermission @endpermission

View File

@ -71,6 +71,11 @@
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('incomes/invoices/' . $item->id) }}">{{ trans('general.show') }}</a></li> <li><a href="{{ url('incomes/invoices/' . $item->id) }}">{{ trans('general.show') }}</a></li>
<li><a href="{{ url('incomes/invoices/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('incomes/invoices/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
@permission('create-incomes-invoices')
<li class="divider"></li>
<li><a href="{{ url('incomes/invoices/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
@endpermission
<li class="divider"></li>
@permission('delete-incomes-invoices') @permission('delete-incomes-invoices')
<li>{!! Form::deleteLink($item, 'incomes/invoices') !!}</li> <li>{!! Form::deleteLink($item, 'incomes/invoices') !!}</li>
@endpermission @endpermission

View File

@ -56,6 +56,11 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('incomes/revenues/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('incomes/revenues/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-incomes-revenues')
<li><a href="{{ url('incomes/revenues/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-incomes-revenues') @permission('delete-incomes-revenues')
<li>{!! Form::deleteLink($item, 'incomes/revenues') !!}</li> <li>{!! Form::deleteLink($item, 'incomes/revenues') !!}</li>
@endpermission @endpermission

View File

@ -65,6 +65,11 @@
</button> </button>
<ul class="dropdown-menu dropdown-menu-right"> <ul class="dropdown-menu dropdown-menu-right">
<li><a href="{{ url('items/items/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li> <li><a href="{{ url('items/items/' . $item->id . '/edit') }}">{{ trans('general.edit') }}</a></li>
<li class="divider"></li>
@permission('create-items-items')
<li><a href="{{ url('items/items/' . $item->id . '/duplicate') }}">{{ trans('general.duplicate') }}</a></li>
<li class="divider"></li>
@endpermission
@permission('delete-items-items') @permission('delete-items-items')
<li>{!! Form::deleteLink($item, 'items/items') !!}</li> <li>{!! Form::deleteLink($item, 'items/items') !!}</li>
@endpermission @endpermission

View File

@ -24,6 +24,7 @@ Route::group(['middleware' => 'language'], function () {
Route::group(['prefix' => 'items'], function () { Route::group(['prefix' => 'items'], function () {
Route::get('items/autocomplete', 'Items\Items@autocomplete'); Route::get('items/autocomplete', 'Items\Items@autocomplete');
Route::post('items/totalItem', 'Items\Items@totalItem'); Route::post('items/totalItem', 'Items\Items@totalItem');
Route::get('items/{item}/duplicate', 'Items\Items@duplicate');
Route::resource('items', 'Items\Items'); Route::resource('items', 'Items\Items');
}); });
@ -44,28 +45,34 @@ Route::group(['middleware' => 'language'], function () {
}); });
Route::group(['prefix' => 'incomes'], function () { Route::group(['prefix' => 'incomes'], function () {
Route::get('customers/currency', 'Incomes\Customers@currency');
Route::resource('customers', 'Incomes\Customers');
Route::get('invoices/{invoice}/sent', 'Incomes\Invoices@markSent'); Route::get('invoices/{invoice}/sent', 'Incomes\Invoices@markSent');
Route::get('invoices/{invoice}/email', 'Incomes\Invoices@emailInvoice'); Route::get('invoices/{invoice}/email', 'Incomes\Invoices@emailInvoice');
Route::get('invoices/{invoice}/pay', 'Incomes\Invoices@markPaid'); Route::get('invoices/{invoice}/pay', 'Incomes\Invoices@markPaid');
Route::get('invoices/{invoice}/print', 'Incomes\Invoices@printInvoice'); Route::get('invoices/{invoice}/print', 'Incomes\Invoices@printInvoice');
Route::get('invoices/{invoice}/pdf', 'Incomes\Invoices@pdfInvoice'); Route::get('invoices/{invoice}/pdf', 'Incomes\Invoices@pdfInvoice');
Route::get('invoices/{invoice}/duplicate', 'Incomes\Invoices@duplicate');
Route::post('invoices/payment', 'Incomes\Invoices@payment'); Route::post('invoices/payment', 'Incomes\Invoices@payment');
Route::delete('invoices/payment/{payment}', 'Incomes\Invoices@paymentDestroy'); Route::delete('invoices/payment/{payment}', 'Incomes\Invoices@paymentDestroy');
Route::resource('invoices', 'Incomes\Invoices'); Route::resource('invoices', 'Incomes\Invoices');
Route::get('revenues/{revenue}/duplicate', 'Incomes\Revenues@duplicate');
Route::resource('revenues', 'Incomes\Revenues'); Route::resource('revenues', 'Incomes\Revenues');
Route::get('customers/currency', 'Incomes\Customers@currency');
Route::get('customers/{customer}/duplicate', 'Incomes\Customers@duplicate');
Route::resource('customers', 'Incomes\Customers');
}); });
Route::group(['prefix' => 'expenses'], function () { Route::group(['prefix' => 'expenses'], function () {
Route::resource('payments', 'Expenses\Payments');
Route::get('bills/{bill}/received', 'Expenses\Bills@markReceived'); Route::get('bills/{bill}/received', 'Expenses\Bills@markReceived');
Route::get('bills/{bill}/print', 'Expenses\Bills@printBill'); Route::get('bills/{bill}/print', 'Expenses\Bills@printBill');
Route::get('bills/{bill}/pdf', 'Expenses\Bills@pdfBill'); Route::get('bills/{bill}/pdf', 'Expenses\Bills@pdfBill');
Route::get('bills/{bill}/duplicate', 'Expenses\Bills@duplicate');
Route::post('bills/payment', 'Expenses\Bills@payment'); Route::post('bills/payment', 'Expenses\Bills@payment');
Route::delete('bills/payment/{payment}', 'Expenses\Bills@paymentDestroy'); Route::delete('bills/payment/{payment}', 'Expenses\Bills@paymentDestroy');
Route::resource('bills', 'Expenses\Bills'); Route::resource('bills', 'Expenses\Bills');
Route::get('payments/{payment}/duplicate', 'Expenses\Payments@duplicate');
Route::resource('payments', 'Expenses\Payments');
Route::get('vendors/currency', 'Expenses\Vendors@currency'); Route::get('vendors/currency', 'Expenses\Vendors@currency');
Route::get('vendors/{vendor}/duplicate', 'Expenses\Vendors@duplicate');
Route::resource('vendors', 'Expenses\Vendors'); Route::resource('vendors', 'Expenses\Vendors');
}); });