mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 23:04:36 -04:00
Stubs for Client Settings (#2655)
* Clean up Client Show * Working on Show Client menu action * working on client view permissions * Finishing up Client Statement View * Workig on client settings * add mix manifest
This commit is contained in:
parent
a7e557c7a4
commit
1ad19734e3
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Datatables;
|
namespace App\Datatables;
|
||||||
|
|
||||||
|
use App\Datatables\MakesActionMenu;
|
||||||
use App\Filters\ClientFilters;
|
use App\Filters\ClientFilters;
|
||||||
use App\Models\Client;
|
use App\Models\Client;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
@ -31,6 +32,7 @@ class ClientDatatable extends EntityDatatable
|
|||||||
{
|
{
|
||||||
$this->filter = $filter;
|
$this->filter = $filter;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns paginated results for the datatable
|
* Returns paginated results for the datatable
|
||||||
*
|
*
|
||||||
@ -43,20 +45,6 @@ class ClientDatatable extends EntityDatatable
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param int $company_id
|
|
||||||
* @param bool $userId
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
private function find(int $company_id, $userId = false)
|
|
||||||
{
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return $query;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the action dropdown menu
|
* Returns the action dropdown menu
|
||||||
*
|
*
|
||||||
@ -79,7 +67,7 @@ class ClientDatatable extends EntityDatatable
|
|||||||
/*
|
/*
|
||||||
* Build a collection of action
|
* Build a collection of action
|
||||||
*/
|
*/
|
||||||
$rows = $this->processActions($requested_actions, $rows, Client::class);
|
$rows = $this->processActionsForDatatable($requested_actions, $rows, Client::class);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add a _view_ link directly to the client
|
* Add a _view_ link directly to the client
|
||||||
|
@ -25,11 +25,16 @@ trait MakesActionMenu
|
|||||||
['action' => 'edit_client_client_id', 'permission' => 'edit_client', 'route' => 'clients.edit', 'key' => 'client_id', 'name' => ctrans('texts.edit')],
|
['action' => 'edit_client_client_id', 'permission' => 'edit_client', 'route' => 'clients.edit', 'key' => 'client_id', 'name' => ctrans('texts.edit')],
|
||||||
['action' => 'create_task_client_id', 'permission' => 'create_task', 'route' => 'tasks.create', 'key' => 'client_id', 'name' => ctrans('texts.new_task')],
|
['action' => 'create_task_client_id', 'permission' => 'create_task', 'route' => 'tasks.create', 'key' => 'client_id', 'name' => ctrans('texts.new_task')],
|
||||||
['action' => 'create_invoice_client_id', 'permission' => 'create_invoice', 'route' => 'invoices.create', 'key' => 'client_id', 'name' => ctrans('texts.new_invoice')],
|
['action' => 'create_invoice_client_id', 'permission' => 'create_invoice', 'route' => 'invoices.create', 'key' => 'client_id', 'name' => ctrans('texts.new_invoice')],
|
||||||
|
['action' => 'create_quote_client_id', 'permission' => 'create_quote', 'route' => 'quotes.create', 'key' => 'client_id', 'name' => ctrans('texts.new_quote')],
|
||||||
|
['action' => 'create_recurring_invoice_client_id', 'permission' => 'create_recurring_invoice', 'route' => 'recurring_invoices.create', 'key' => 'client_id', 'name' => ctrans('texts.new_recurring_invoice')],
|
||||||
['action' => 'enter_payment_client_id', 'permission' => 'create_payment', 'route' => 'payments.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_payment')],
|
['action' => 'enter_payment_client_id', 'permission' => 'create_payment', 'route' => 'payments.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_payment')],
|
||||||
['action' => 'enter_credit_client_id', 'permission' => 'create_credit', 'route' => 'credits.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_credit')],
|
['action' => 'enter_credit_client_id', 'permission' => 'create_credit', 'route' => 'credits.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_credit')],
|
||||||
['action' => 'enter_expense_client_id', 'permission' => 'create_expense', 'route' => 'expenses.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_expense')]
|
['action' => 'enter_expense_client_id', 'permission' => 'create_expense', 'route' => 'expenses.create', 'key' => 'client_id', 'name' => ctrans('texts.enter_expense')],
|
||||||
|
|
||||||
|
['action' => 'view_statement_client_id', 'permission' => 'edit_client', 'route' => 'client_statement.show', 'key' => 'client_id', 'name' => ctrans('texts.view_statement')],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,7 +54,7 @@ trait MakesActionMenu
|
|||||||
* @param Class::class - need so we can harvest entity string
|
* @param Class::class - need so we can harvest entity string
|
||||||
* @return stdClass
|
* @return stdClass
|
||||||
*/
|
*/
|
||||||
public function processActions(array $requested_actions, $rows, $entity)
|
public function processActionsForDatatable(array $requested_actions, $rows, $entity)
|
||||||
{
|
{
|
||||||
|
|
||||||
$rows->map(function ($row) use ($requested_actions, $entity){
|
$rows->map(function ($row) use ($requested_actions, $entity){
|
||||||
@ -64,6 +69,30 @@ trait MakesActionMenu
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method which allows the generation of a collection of action links
|
||||||
|
* for use when populating a Button.
|
||||||
|
*
|
||||||
|
* @param array $requested_actions - array of requested actions for menu
|
||||||
|
* @param Class::class - need so we can harvest entity string
|
||||||
|
* @return stdClass
|
||||||
|
*/
|
||||||
|
|
||||||
|
public function processActionsForButton(array $requested_actions, $entity)
|
||||||
|
{
|
||||||
|
$rows = $this->filterActions($requested_actions, auth()->user()->permissions(), auth()->user()->isAdmin());
|
||||||
|
|
||||||
|
$updated_actions = $rows->map(function($row) use ($entity){
|
||||||
|
|
||||||
|
$row['url'] = route($row['route'], [$row['key'] => $this->encodePrimaryKey($entity->id)]);
|
||||||
|
|
||||||
|
return $row;
|
||||||
|
});
|
||||||
|
|
||||||
|
return $updated_actions;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the actions for a single row of a datatable
|
* Builds the actions for a single row of a datatable
|
||||||
*
|
*
|
||||||
|
@ -3,6 +3,8 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Datatables\ClientDatatable;
|
use App\Datatables\ClientDatatable;
|
||||||
|
use App\Datatables\MakesActionMenu;
|
||||||
|
use App\Factory\ClientFactory;
|
||||||
use App\Http\Requests\Client\CreateClientRequest;
|
use App\Http\Requests\Client\CreateClientRequest;
|
||||||
use App\Http\Requests\Client\EditClientRequest;
|
use App\Http\Requests\Client\EditClientRequest;
|
||||||
use App\Http\Requests\Client\ShowClientRequest;
|
use App\Http\Requests\Client\ShowClientRequest;
|
||||||
@ -19,7 +21,6 @@ use App\Utils\Traits\MakesHash;
|
|||||||
use App\Utils\Traits\MakesMenu;
|
use App\Utils\Traits\MakesMenu;
|
||||||
use App\Utils\Traits\UserSessionAttributes;
|
use App\Utils\Traits\UserSessionAttributes;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Factory\ClientFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class ClientController
|
* Class ClientController
|
||||||
@ -30,6 +31,7 @@ class ClientController extends Controller
|
|||||||
use UserSessionAttributes;
|
use UserSessionAttributes;
|
||||||
use MakesHash;
|
use MakesHash;
|
||||||
use MakesMenu;
|
use MakesMenu;
|
||||||
|
use MakesActionMenu;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ClientRepository
|
* @var ClientRepository
|
||||||
@ -48,8 +50,11 @@ class ClientController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function __construct(ClientRepository $clientRepo, ClientDatatable $clientDatatable)
|
public function __construct(ClientRepository $clientRepo, ClientDatatable $clientDatatable)
|
||||||
{
|
{
|
||||||
|
|
||||||
$this->clientRepo = $clientRepo;
|
$this->clientRepo = $clientRepo;
|
||||||
|
|
||||||
$this->clientDatatable = $clientDatatable;
|
$this->clientDatatable = $clientDatatable;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -70,6 +75,79 @@ class ClientController extends Controller
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function show(ShowClientRequest $request, Client $client)
|
||||||
|
{
|
||||||
|
|
||||||
|
$requested_view_statement_actions = [
|
||||||
|
'create_invoice_client_id',
|
||||||
|
'create_task_client_id',
|
||||||
|
'create_quote_client_id',
|
||||||
|
'create_recurring_invoice_client_id',
|
||||||
|
'create_payment_client_id',
|
||||||
|
'create_expense_client_id'
|
||||||
|
];
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'client' => $client,
|
||||||
|
'company' => auth()->user()->company(),
|
||||||
|
'meta' => collect([
|
||||||
|
'google_maps_api_key' => config('ninja.google_maps_api_key'),
|
||||||
|
'edit_client_permission' => auth()->user()->can('edit', $client),
|
||||||
|
'edit_client_route' => $this->processActionsForButton(['edit_client_client_id'], $client),
|
||||||
|
'view_statement_permission' => auth()->user()->can('view', $client),
|
||||||
|
'view_statement_route' => $this->processActionsForButton(['view_statement_client_id'], $client),
|
||||||
|
'view_statement_actions' => $this->processActionsForButton($requested_view_statement_actions, $client)
|
||||||
|
])
|
||||||
|
];
|
||||||
|
|
||||||
|
return view('client.show', $data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*
|
||||||
|
* @param int $id
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function edit(EditClientRequest $request, Client $client)
|
||||||
|
{
|
||||||
|
|
||||||
|
$data = [
|
||||||
|
'client' => $client,
|
||||||
|
'settings' => $client,
|
||||||
|
'pills' => $this->makeEntityTabMenu(Client::class),
|
||||||
|
'hashed_id' => $this->encodePrimarykey($client->id),
|
||||||
|
'countries' => Country::all(),
|
||||||
|
'company' => auth()->user()->company()
|
||||||
|
];
|
||||||
|
|
||||||
|
return view('client.edit', $data);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*
|
||||||
|
* @param \Illuminate\Http\Request $request
|
||||||
|
* @param App\Models\Client $client
|
||||||
|
* @return \Illuminate\Http\Response
|
||||||
|
*/
|
||||||
|
public function update(UpdateClientRequest $request, Client $client)
|
||||||
|
{
|
||||||
|
|
||||||
|
$client = UpdateClient::dispatchNow($request, $client);
|
||||||
|
|
||||||
|
return response()->json($client, 200);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Show the form for creating a new resource.
|
* Show the form for creating a new resource.
|
||||||
*
|
*
|
||||||
@ -96,75 +174,13 @@ class ClientController extends Controller
|
|||||||
*/
|
*/
|
||||||
public function store(StoreClientRequest $request)
|
public function store(StoreClientRequest $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
$client = StoreClient::dispatchNow($request, new Client);
|
$client = StoreClient::dispatchNow($request, new Client);
|
||||||
|
|
||||||
$client->load('contacts', 'primary_contact');
|
$client->load('contacts', 'primary_contact');
|
||||||
|
|
||||||
$client->hashed_id = $this->encodePrimarykey($client->id);
|
$client->hashed_id = $this->encodePrimarykey($client->id);
|
||||||
|
|
||||||
/*
|
|
||||||
$data = [
|
|
||||||
'client' => $client,
|
|
||||||
'hashed_id' => $this->encodePrimarykey($client->id)
|
|
||||||
];
|
|
||||||
|
|
||||||
Log::error(print_r($client,1));
|
|
||||||
*/
|
|
||||||
return response()->json($client, 200);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display the specified resource.
|
|
||||||
*
|
|
||||||
* @param int $id
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function show(ShowClientRequest $request, Client $client)
|
|
||||||
{
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'client' => $client,
|
|
||||||
'company' => auth()->user()->company(),
|
|
||||||
'meta' => collect([
|
|
||||||
'google_maps_api_key' => config('ninja.google_maps_api_key')
|
|
||||||
])
|
|
||||||
];
|
|
||||||
|
|
||||||
return view('client.show', $data);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Show the form for editing the specified resource.
|
|
||||||
*
|
|
||||||
* @param int $id
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function edit(EditClientRequest $request, Client $client)
|
|
||||||
{
|
|
||||||
$data = [
|
|
||||||
'client' => $client,
|
|
||||||
'settings' => [],
|
|
||||||
'pills' => $this->makeEntityTabMenu(Client::class),
|
|
||||||
'hashed_id' => $this->encodePrimarykey($client->id),
|
|
||||||
'countries' => Country::all(),
|
|
||||||
'company' => auth()->user()->company()
|
|
||||||
];
|
|
||||||
|
|
||||||
return view('client.edit', $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Update the specified resource in storage.
|
|
||||||
*
|
|
||||||
* @param \Illuminate\Http\Request $request
|
|
||||||
* @param App\Models\Client $client
|
|
||||||
* @return \Illuminate\Http\Response
|
|
||||||
*/
|
|
||||||
public function update(UpdateClientRequest $request, Client $client)
|
|
||||||
{
|
|
||||||
$client = UpdateClient::dispatchNow($request, $client);
|
|
||||||
|
|
||||||
return response()->json($client, 200);
|
return response()->json($client, 200);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -189,6 +205,7 @@ class ClientController extends Controller
|
|||||||
{
|
{
|
||||||
|
|
||||||
$action = request()->input('action');
|
$action = request()->input('action');
|
||||||
|
|
||||||
$ids = request()->input('ids');
|
$ids = request()->input('ids');
|
||||||
|
|
||||||
$clients = Client::withTrashed()->find($ids);
|
$clients = Client::withTrashed()->find($ids);
|
||||||
@ -205,6 +222,16 @@ class ClientController extends Controller
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a client statement
|
||||||
|
*
|
||||||
|
* @return [type] [description]
|
||||||
|
*/
|
||||||
|
public function statement()
|
||||||
|
{
|
||||||
|
//todo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
31
app/Http/Controllers/ClientStatementController.php
Normal file
31
app/Http/Controllers/ClientStatementController.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ClientStatementController
|
||||||
|
* @package App\Http\Controllers
|
||||||
|
*/
|
||||||
|
class ClientStatementController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Displays a client statement view for a given
|
||||||
|
* client_id.
|
||||||
|
* @return view
|
||||||
|
*/
|
||||||
|
public function show()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the show view data dependent on
|
||||||
|
* configured variables
|
||||||
|
* @return json
|
||||||
|
*/
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -29,7 +29,7 @@ class User extends Authenticatable implements MustVerifyEmail
|
|||||||
|
|
||||||
protected $presenter = 'App\Models\Presenters\UserPresenter';
|
protected $presenter = 'App\Models\Presenters\UserPresenter';
|
||||||
|
|
||||||
protected $with = ['companies'];
|
protected $with = ['companies','user_companies'];
|
||||||
/**
|
/**
|
||||||
* The attributes that are mass assignable.
|
* The attributes that are mass assignable.
|
||||||
*
|
*
|
||||||
@ -99,7 +99,7 @@ class User extends Authenticatable implements MustVerifyEmail
|
|||||||
public function user_company()
|
public function user_company()
|
||||||
{
|
{
|
||||||
|
|
||||||
return $this->user_companies()->where('company_id', $this->getCurrentCompanyId())->first();
|
return $this->user_companies->where('company_id', $this->getCurrentCompanyId())->first();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
47
composer.lock
generated
47
composer.lock
generated
@ -1309,16 +1309,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/flysystem",
|
"name": "league/flysystem",
|
||||||
"version": "1.0.49",
|
"version": "1.0.50",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/thephpleague/flysystem.git",
|
"url": "https://github.com/thephpleague/flysystem.git",
|
||||||
"reference": "a63cc83d8a931b271be45148fa39ba7156782ffd"
|
"reference": "dab4e7624efa543a943be978008f439c333f2249"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a63cc83d8a931b271be45148fa39ba7156782ffd",
|
"url": "https://api.github.com/repos/thephpleague/flysystem/zipball/dab4e7624efa543a943be978008f439c333f2249",
|
||||||
"reference": "a63cc83d8a931b271be45148fa39ba7156782ffd",
|
"reference": "dab4e7624efa543a943be978008f439c333f2249",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -1389,7 +1389,7 @@
|
|||||||
"sftp",
|
"sftp",
|
||||||
"storage"
|
"storage"
|
||||||
],
|
],
|
||||||
"time": "2018-11-23T23:41:29+00:00"
|
"time": "2019-02-01T08:50:36+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "league/oauth1-client",
|
"name": "league/oauth1-client",
|
||||||
@ -2473,16 +2473,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "spatie/laravel-html",
|
"name": "spatie/laravel-html",
|
||||||
"version": "2.20.0",
|
"version": "2.20.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/spatie/laravel-html.git",
|
"url": "https://github.com/spatie/laravel-html.git",
|
||||||
"reference": "85ea814d6f8077eafd749e603547b9a4b368bb56"
|
"reference": "a4cf0a0780d5ca1adc0860a8379dd4b1a23daafb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/85ea814d6f8077eafd749e603547b9a4b368bb56",
|
"url": "https://api.github.com/repos/spatie/laravel-html/zipball/a4cf0a0780d5ca1adc0860a8379dd4b1a23daafb",
|
||||||
"reference": "85ea814d6f8077eafd749e603547b9a4b368bb56",
|
"reference": "a4cf0a0780d5ca1adc0860a8379dd4b1a23daafb",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -2537,7 +2537,7 @@
|
|||||||
"html",
|
"html",
|
||||||
"spatie"
|
"spatie"
|
||||||
],
|
],
|
||||||
"time": "2019-01-18T08:30:17+00:00"
|
"time": "2019-02-01T22:45:56+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "swiftmailer/swiftmailer",
|
"name": "swiftmailer/swiftmailer",
|
||||||
@ -5069,16 +5069,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "7.5.2",
|
"version": "7.5.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "7c89093bd00f7d5ddf0ab81dee04f801416b4944"
|
"reference": "2cb759721e53bc05f56487f628c6b9fbb6c18746"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7c89093bd00f7d5ddf0ab81dee04f801416b4944",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2cb759721e53bc05f56487f628c6b9fbb6c18746",
|
||||||
"reference": "7c89093bd00f7d5ddf0ab81dee04f801416b4944",
|
"reference": "2cb759721e53bc05f56487f628c6b9fbb6c18746",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -5149,7 +5149,7 @@
|
|||||||
"testing",
|
"testing",
|
||||||
"xunit"
|
"xunit"
|
||||||
],
|
],
|
||||||
"time": "2019-01-15T08:19:08+00:00"
|
"time": "2019-02-01T05:24:07+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/code-unit-reverse-lookup",
|
"name": "sebastian/code-unit-reverse-lookup",
|
||||||
@ -5318,28 +5318,31 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/environment",
|
"name": "sebastian/environment",
|
||||||
"version": "4.0.2",
|
"version": "4.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/environment.git",
|
"url": "https://github.com/sebastianbergmann/environment.git",
|
||||||
"reference": "4a43e9af57b4afa663077b9bc85255dbc6e8a2bd"
|
"reference": "6fda8ce1974b62b14935adc02a9ed38252eca656"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4a43e9af57b4afa663077b9bc85255dbc6e8a2bd",
|
"url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6fda8ce1974b62b14935adc02a9ed38252eca656",
|
||||||
"reference": "4a43e9af57b4afa663077b9bc85255dbc6e8a2bd",
|
"reference": "6fda8ce1974b62b14935adc02a9ed38252eca656",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.1"
|
"php": "^7.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^7.4"
|
"phpunit/phpunit": "^7.5"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-posix": "*"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "4.0-dev"
|
"dev-master": "4.1-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@ -5364,7 +5367,7 @@
|
|||||||
"environment",
|
"environment",
|
||||||
"hhvm"
|
"hhvm"
|
||||||
],
|
],
|
||||||
"time": "2019-01-28T15:26:03+00:00"
|
"time": "2019-02-01T05:27:49+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/exporter",
|
"name": "sebastian/exporter",
|
||||||
|
@ -47,9 +47,11 @@
|
|||||||
"socket.io-client": "^2.1.1",
|
"socket.io-client": "^2.1.1",
|
||||||
"ts-loader": "3.5.0",
|
"ts-loader": "3.5.0",
|
||||||
"typescript": "^3.1.6",
|
"typescript": "^3.1.6",
|
||||||
|
"vue-affix": "^0.4.0",
|
||||||
"vue-chartjs": "^3.4.0",
|
"vue-chartjs": "^3.4.0",
|
||||||
"vue-events": "^3.1.0",
|
"vue-events": "^3.1.0",
|
||||||
"vue-multiselect": "^2.1.3",
|
"vue-multiselect": "^2.1.3",
|
||||||
|
"vue-scrollactive": "^0.8.0",
|
||||||
"vue-select": "^2.5.1",
|
"vue-select": "^2.5.1",
|
||||||
"vue-toastr": "^2.0.16",
|
"vue-toastr": "^2.0.16",
|
||||||
"vuex": "^3.1.0"
|
"vuex": "^3.1.0"
|
||||||
|
16916
public/css/ninja.css
vendored
16916
public/css/ninja.css
vendored
File diff suppressed because one or more lines are too long
16916
public/css/ninja.min.css
vendored
16916
public/css/ninja.min.css
vendored
File diff suppressed because one or more lines are too long
15244
public/js/client_create.js
vendored
15244
public/js/client_create.js
vendored
File diff suppressed because one or more lines are too long
15248
public/js/client_create.min.js
vendored
15248
public/js/client_create.min.js
vendored
File diff suppressed because one or more lines are too long
20483
public/js/client_edit.js
vendored
20483
public/js/client_edit.js
vendored
File diff suppressed because one or more lines are too long
20490
public/js/client_edit.min.js
vendored
20490
public/js/client_edit.min.js
vendored
File diff suppressed because one or more lines are too long
24768
public/js/client_list.js
vendored
24768
public/js/client_list.js
vendored
File diff suppressed because one or more lines are too long
24776
public/js/client_list.min.js
vendored
24776
public/js/client_list.min.js
vendored
File diff suppressed because one or more lines are too long
84
public/js/client_settings.js
vendored
Normal file
84
public/js/client_settings.js
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/******/ (function(modules) { // webpackBootstrap
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var installedModules = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ if(installedModules[moduleId]) {
|
||||||
|
/******/ return installedModules[moduleId].exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = installedModules[moduleId] = {
|
||||||
|
/******/ i: moduleId,
|
||||||
|
/******/ l: false,
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Flag the module as loaded
|
||||||
|
/******/ module.l = true;
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = modules;
|
||||||
|
/******/
|
||||||
|
/******/ // expose the module cache
|
||||||
|
/******/ __webpack_require__.c = installedModules;
|
||||||
|
/******/
|
||||||
|
/******/ // define getter function for harmony exports
|
||||||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||||
|
/******/ Object.defineProperty(exports, name, {
|
||||||
|
/******/ configurable: false,
|
||||||
|
/******/ enumerable: true,
|
||||||
|
/******/ get: getter
|
||||||
|
/******/ });
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||||
|
/******/ __webpack_require__.n = function(module) {
|
||||||
|
/******/ var getter = module && module.__esModule ?
|
||||||
|
/******/ function getDefault() { return module['default']; } :
|
||||||
|
/******/ function getModuleExports() { return module; };
|
||||||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||||
|
/******/ return getter;
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Object.prototype.hasOwnProperty.call
|
||||||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||||
|
/******/
|
||||||
|
/******/ // __webpack_public_path__
|
||||||
|
/******/ __webpack_require__.p = "/";
|
||||||
|
/******/
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
||||||
|
/******/ })
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ ({
|
||||||
|
|
||||||
|
/***/ "./resources/js/src/client/client_settings.ts":
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
throw new Error("Module build failed: Error: ENOENT: no such file or directory, open '/Users/davidbomba/Development/invoice-ninja/resources/js/src/client/client_settings.ts'");
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 0:
|
||||||
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
module.exports = __webpack_require__("./resources/js/src/client/client_settings.ts");
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
84
public/js/client_settings.min.js
vendored
Normal file
84
public/js/client_settings.min.js
vendored
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
/******/ (function(modules) { // webpackBootstrap
|
||||||
|
/******/ // The module cache
|
||||||
|
/******/ var installedModules = {};
|
||||||
|
/******/
|
||||||
|
/******/ // The require function
|
||||||
|
/******/ function __webpack_require__(moduleId) {
|
||||||
|
/******/
|
||||||
|
/******/ // Check if module is in cache
|
||||||
|
/******/ if(installedModules[moduleId]) {
|
||||||
|
/******/ return installedModules[moduleId].exports;
|
||||||
|
/******/ }
|
||||||
|
/******/ // Create a new module (and put it into the cache)
|
||||||
|
/******/ var module = installedModules[moduleId] = {
|
||||||
|
/******/ i: moduleId,
|
||||||
|
/******/ l: false,
|
||||||
|
/******/ exports: {}
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Execute the module function
|
||||||
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
||||||
|
/******/
|
||||||
|
/******/ // Flag the module as loaded
|
||||||
|
/******/ module.l = true;
|
||||||
|
/******/
|
||||||
|
/******/ // Return the exports of the module
|
||||||
|
/******/ return module.exports;
|
||||||
|
/******/ }
|
||||||
|
/******/
|
||||||
|
/******/
|
||||||
|
/******/ // expose the modules object (__webpack_modules__)
|
||||||
|
/******/ __webpack_require__.m = modules;
|
||||||
|
/******/
|
||||||
|
/******/ // expose the module cache
|
||||||
|
/******/ __webpack_require__.c = installedModules;
|
||||||
|
/******/
|
||||||
|
/******/ // define getter function for harmony exports
|
||||||
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
||||||
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
||||||
|
/******/ Object.defineProperty(exports, name, {
|
||||||
|
/******/ configurable: false,
|
||||||
|
/******/ enumerable: true,
|
||||||
|
/******/ get: getter
|
||||||
|
/******/ });
|
||||||
|
/******/ }
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
||||||
|
/******/ __webpack_require__.n = function(module) {
|
||||||
|
/******/ var getter = module && module.__esModule ?
|
||||||
|
/******/ function getDefault() { return module['default']; } :
|
||||||
|
/******/ function getModuleExports() { return module; };
|
||||||
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
||||||
|
/******/ return getter;
|
||||||
|
/******/ };
|
||||||
|
/******/
|
||||||
|
/******/ // Object.prototype.hasOwnProperty.call
|
||||||
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
||||||
|
/******/
|
||||||
|
/******/ // __webpack_public_path__
|
||||||
|
/******/ __webpack_require__.p = "/";
|
||||||
|
/******/
|
||||||
|
/******/ // Load entry module and return exports
|
||||||
|
/******/ return __webpack_require__(__webpack_require__.s = 0);
|
||||||
|
/******/ })
|
||||||
|
/************************************************************************/
|
||||||
|
/******/ ({
|
||||||
|
|
||||||
|
/***/ "./resources/js/src/client/client_settings.ts":
|
||||||
|
/***/ (function(module, exports) {
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
throw new Error("Module build failed: Error: ENOENT: no such file or directory, open '/Users/davidbomba/Development/invoice-ninja/resources/js/src/client/client_settings.ts'");
|
||||||
|
|
||||||
|
/***/ }),
|
||||||
|
|
||||||
|
/***/ 0:
|
||||||
|
/***/ (function(module, exports, __webpack_require__) {
|
||||||
|
|
||||||
|
module.exports = __webpack_require__("./resources/js/src/client/client_settings.ts");
|
||||||
|
|
||||||
|
|
||||||
|
/***/ })
|
||||||
|
|
||||||
|
/******/ });
|
17040
public/js/client_show.js
vendored
17040
public/js/client_show.js
vendored
File diff suppressed because one or more lines are too long
17044
public/js/client_show.min.js
vendored
17044
public/js/client_show.min.js
vendored
File diff suppressed because one or more lines are too long
12588
public/js/coreui.js
vendored
12588
public/js/coreui.js
vendored
File diff suppressed because one or more lines are too long
12591
public/js/coreui.min.js
vendored
12591
public/js/coreui.min.js
vendored
File diff suppressed because one or more lines are too long
11560
public/js/localization.js
vendored
11560
public/js/localization.js
vendored
File diff suppressed because one or more lines are too long
11564
public/js/localization.min.js
vendored
11564
public/js/localization.min.js
vendored
File diff suppressed because one or more lines are too long
1
public/js/ninja.js
vendored
1
public/js/ninja.js
vendored
@ -1 +0,0 @@
|
|||||||
|
|
1
public/js/ninja.min.js
vendored
1
public/js/ninja.min.js
vendored
@ -1 +0,0 @@
|
|||||||
|
|
18
public/mix-manifest.json
Normal file
18
public/mix-manifest.json
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"/js/client_list.js": "/js/client_list.js?id=88d90244e855305bcfff",
|
||||||
|
"/js/client_edit.js": "/js/client_edit.js?id=23f35208ca7847252c92",
|
||||||
|
"/js/client_show.js": "/js/client_show.js?id=be7307363fb5779cdb24",
|
||||||
|
"/js/client_create.js": "/js/client_create.js?id=ca114ece0bbf0eb79d38",
|
||||||
|
"/js/localization.js": "/js/localization.js?id=85f6f7672f9cf65d9745",
|
||||||
|
"/js/coreui.js": "/js/coreui.js?id=9cfda6dd6df9aaeea844",
|
||||||
|
"/js/ninja.js": "/js/ninja.js?id=d41d8cd98f00b204e980",
|
||||||
|
"/js/ninja.min.js": "/js/ninja.min.js?id=d41d8cd98f00b204e980",
|
||||||
|
"/js/coreui.min.js": "/js/coreui.min.js?id=9cfda6dd6df9aaeea844",
|
||||||
|
"/js/client_show.min.js": "/js/client_show.min.js?id=be7307363fb5779cdb24",
|
||||||
|
"/js/client_edit.min.js": "/js/client_edit.min.js?id=23f35208ca7847252c92",
|
||||||
|
"/js/client_create.min.js": "/js/client_create.min.js?id=ca114ece0bbf0eb79d38",
|
||||||
|
"/js/client_list.min.js": "/js/client_list.min.js?id=88d90244e855305bcfff",
|
||||||
|
"/js/localization.min.js": "/js/localization.min.js?id=85f6f7672f9cf65d9745",
|
||||||
|
"/css/ninja.css": "/css/ninja.css?id=28421bc494c5086ac359",
|
||||||
|
"/css/ninja.min.css": "/css/ninja.min.css?id=28421bc494c5086ac359"
|
||||||
|
}
|
@ -13,7 +13,8 @@ Vue.component('client-address', require('../components/client/ClientAddress.vue'
|
|||||||
Vue.component('generic-address', require('../components/generic/Address.vue'));
|
Vue.component('generic-address', require('../components/generic/Address.vue'));
|
||||||
Vue.component('client-edit-form', require('../components/client/ClientEditForm.vue'));
|
Vue.component('client-edit-form', require('../components/client/ClientEditForm.vue'));
|
||||||
Vue.component('contact-edit', require('../components/client/ClientContactEdit.vue'));
|
Vue.component('contact-edit', require('../components/client/ClientContactEdit.vue'));
|
||||||
|
Vue.component('client-settings', require('../components/client/ClientSettings.vue'));
|
||||||
|
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
|
|
||||||
const app = new Vue({
|
const app = new Vue({
|
||||||
|
421
resources/js/src/components/client/ClientSettings.vue
Normal file
421
resources/js/src/components/client/ClientSettings.vue
Normal file
@ -0,0 +1,421 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
|
||||||
|
<div class="col-2">
|
||||||
|
|
||||||
|
<affix class="menu sidebar-menu" relative-element-selector="#example-content" :offset="{ top: 50, bottom:100 }" :scroll-affix="false" style="width: 200px">
|
||||||
|
<div class="menu-label">
|
||||||
|
<h2></h2>
|
||||||
|
</div>
|
||||||
|
<scrollactive
|
||||||
|
class="menu-list"
|
||||||
|
active-class="is-active"
|
||||||
|
:offset="50"
|
||||||
|
:duration="800"
|
||||||
|
:exact="true"
|
||||||
|
>
|
||||||
|
<a href="#intro" class="scrollactive-item" title="Intro">Intro</a><br>
|
||||||
|
<a href="#standard-affix" class="scrollactive-item" title="Standard Affix">Standard Affix</a><br>
|
||||||
|
<a href="#scroll-affix" class="scrollactive-item" title="Scroll Affix">Scroll Affix</a><br>
|
||||||
|
<a href="#markup-1" class="scrollactive-item" title="Markup 1">Markup 1</a><br>
|
||||||
|
<a href="#markup-2" class="scrollactive-item" title="Markup 2">Markup 2</a><br>
|
||||||
|
<a href="#markup-3" class="scrollactive-item" title="Markup 3">Markup 3</a><br>
|
||||||
|
</scrollactive>
|
||||||
|
</affix>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-10">
|
||||||
|
|
||||||
|
<div id="example-content">
|
||||||
|
|
||||||
|
<section id="intro">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="standard-affix">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="scroll-affix">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="markup-1">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="markup-2">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section id="markup-3">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-header bg-primary2">{{ trans('texts.edit_client') }}</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group row">
|
||||||
|
<label for="name" class="col-sm-3 col-form-label text-right">{{ trans('texts.client_name') }}</label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input type="text" :placeholder="trans('texts.client_name')" class="form-control">
|
||||||
|
<div v-if="" class="text-danger" v-text=""></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
|
||||||
|
import Vue from 'vue';
|
||||||
|
import { Affix } from 'vue-affix';
|
||||||
|
var VueScrollactive = require('vue-scrollactive');
|
||||||
|
Vue.use(VueScrollactive);
|
||||||
|
|
||||||
|
export default {
|
||||||
|
components: {
|
||||||
|
Affix,
|
||||||
|
},
|
||||||
|
props: ['settings'],
|
||||||
|
mounted() {
|
||||||
|
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
onItemChanged(event, currentItem, lastActiveItem) {
|
||||||
|
// your logic
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
|
||||||
|
a.scrollactive-item.is-active {
|
||||||
|
color: #42b983;
|
||||||
|
font-family: helvetica;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.scrollactive-item.is-active:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #42b983;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.scrollactive-item.is-active:active {
|
||||||
|
color: #42b983;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.menu-list a {
|
||||||
|
color: black;
|
||||||
|
font-family: helvetica;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-list a:hover {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #42b983;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-list a:active {
|
||||||
|
color: #42b983;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
</style>
|
@ -8,30 +8,26 @@
|
|||||||
<div class="float-right">
|
<div class="float-right">
|
||||||
|
|
||||||
<div class="btn-group ml-2">
|
<div class="btn-group ml-2">
|
||||||
<button type="button" class="btn btn-lg btn-secondary">{{ trans('texts.edit_client') }}</button>
|
<button type="button" class="btn btn-lg btn-secondary" :disabled="editClientIsDisabled" v-for="link in this.meta.edit_client_route" @click="goToUrl(link.url)">{{ trans('texts.edit_client') }}</button>
|
||||||
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-lg btn-secondary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" :disabled="editClientIsDisabled">
|
||||||
<span class="sr-only">Toggle Dropdown</span>
|
<span class="sr-only">Toggle Dropdown</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu" x-placement="top-start" style="position: absolute; transform: translate3d(189px, -2px, 0px); top: 0px; left: 0px; will-change: transform;">
|
<div class="dropdown-menu" x-placement="top-start" style="position: absolute; transform: translate3d(189px, -2px, 0px); top: 0px; left: 0px; will-change: transform;">
|
||||||
<a class="dropdown-item" href="#">Action</a>
|
<a class="dropdown-item" href="#" @click="itemAction('archive', client, rowIndex)" v-if="client.deleted_at == null">{{ trans('texts.archive') }}</a>
|
||||||
<a class="dropdown-item" href="#">Another action</a>
|
<a class="dropdown-item" href="#" @click="itemAction('restore', client, rowIndex)" v-if="client.is_deleted == 1 || client.deleted_at != null">{{ trans('texts.restore') }}</a>
|
||||||
<a class="dropdown-item" href="#">Something else here</a>
|
<a class="dropdown-item" href="#" @click="itemAction('delete', client, rowIndex)" v-if="client.is_deleted == 0">{{ trans('texts.delete') }}</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
<a class="dropdown-item" href="#">Separated link</a>
|
<a class="dropdown-item" @click="itemAction('purge', client, rowIndex)">{{ trans('texts.purge_client') }}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="btn-group ml-2">
|
<div class="btn-group ml-2">
|
||||||
<button type="button" class="btn btn-lg btn-primary">{{ trans('texts.view_statement') }}</button>
|
<button type="button" class="btn btn-lg btn-primary" :disabled="viewStatementIsDisabled" v-for="link in this.meta.view_statement_route" @click="goToUrl(link.url)">{{ trans('texts.view_statement') }}</button>
|
||||||
<button type="button" class="btn btn-lg btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
<button type="button" class="btn btn-lg btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" :disabled="viewStatementIsDisabled">
|
||||||
<span class="sr-only">Toggle Dropdown</span>
|
<span class="sr-only">Toggle Dropdown</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="dropdown-menu" x-placement="top-start" style="position: absolute; transform: translate3d(189px, -2px, 0px); top: 0px; left: 0px; will-change: transform;">
|
<div class="dropdown-menu" x-placement="top-start" style="position: absolute; transform: translate3d(189px, -2px, 0px); top: 0px; left: 0px; will-change: transform;">
|
||||||
<a class="dropdown-item" href="#">Action</a>
|
<a class="dropdown-item" v-for="link in this.meta.view_statement_actions" :href="link.url">{{ link.name }}</a>
|
||||||
<a class="dropdown-item" href="#">Another action</a>
|
|
||||||
<a class="dropdown-item" href="#">Something else here</a>
|
|
||||||
<div class="dropdown-divider"></div>
|
|
||||||
<a class="dropdown-item" href="#">Separated link</a>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -102,7 +98,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div v-if="">
|
<div v-if="this.meta.google_maps_api_key">
|
||||||
|
|
||||||
<iframe
|
<iframe
|
||||||
width="100%"
|
width="100%"
|
||||||
@ -123,10 +119,14 @@
|
|||||||
export default {
|
export default {
|
||||||
props: ['client', 'company', 'meta'],
|
props: ['client', 'company', 'meta'],
|
||||||
mounted() {
|
mounted() {
|
||||||
console.dir(this.meta.google_maps_api_key)
|
|
||||||
console.dir(this.clientAddress)
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
methods: {
|
||||||
|
goToUrl(url) {
|
||||||
|
location.href=url
|
||||||
|
|
||||||
|
}
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
mapUrl: {
|
mapUrl: {
|
||||||
get: function() {
|
get: function() {
|
||||||
@ -158,7 +158,17 @@ export default {
|
|||||||
|
|
||||||
return encodeURIComponent(addressArray.join(","))
|
return encodeURIComponent(addressArray.join(","))
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
viewStatementIsDisabled() :any
|
||||||
|
{
|
||||||
|
return ! this.meta.view_statement_permission
|
||||||
|
},
|
||||||
|
editClientIsDisabled() :any
|
||||||
|
{
|
||||||
|
return ! this.meta.edit_client_permission
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,9 @@
|
|||||||
|
|
||||||
@endforeach
|
@endforeach
|
||||||
|
|
||||||
<div class="tab-pane fade" id="pills-settings" role="tabpanel" aria-labelledby="pills-settings-tab">
|
<div class="tab-pane fade" id="pills-settings" role="tabpanel" aria-labelledby="pills-settings-tab" style="background-color: #e4e5e6; padding: 0px;">
|
||||||
|
|
||||||
|
<client-settings :settings="{{ $settings }}"></client-settings>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -40,20 +40,45 @@ Route::get('auth/{provider}/callback', 'Auth\LoginController@handleProviderCallb
|
|||||||
Route::group(['middleware' => ['auth:user', 'db']], function () {
|
Route::group(['middleware' => ['auth:user', 'db']], function () {
|
||||||
|
|
||||||
Route::resource('dashboard', 'DashboardController'); // name = (dashboard. index / create / show / update / destroy / edit
|
Route::resource('dashboard', 'DashboardController'); // name = (dashboard. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::get('logout', 'Auth\LoginController@logout')->name('user.logout');
|
Route::get('logout', 'Auth\LoginController@logout')->name('user.logout');
|
||||||
|
|
||||||
Route::resource('invoices', 'InvoiceController'); // name = (invoices. index / create / show / update / destroy / edit
|
Route::resource('invoices', 'InvoiceController'); // name = (invoices. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('invoices/bulk', 'InvoiceController@bulk')->name('invoices.bulk');
|
Route::post('invoices/bulk', 'InvoiceController@bulk')->name('invoices.bulk');
|
||||||
|
|
||||||
|
Route::resource('quotes', 'QuoteController'); // name = (quotes. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
|
Route::post('quotes/bulk', 'QuoteController@bulk')->name('quotes.bulk');
|
||||||
|
|
||||||
|
Route::resource('recurring_invoices', 'RecurringInvoiceController'); // name = (recurring_invoices. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
|
Route::post('recurring_invoices/bulk', 'RecurringInvoiceController@bulk')->name('recurring_invoices.bulk');
|
||||||
|
|
||||||
Route::resource('clients', 'ClientController'); // name = (clients. index / create / show / update / destroy / edit
|
Route::resource('clients', 'ClientController'); // name = (clients. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('clients/bulk', 'ClientController@bulk')->name('clients.bulk');
|
Route::post('clients/bulk', 'ClientController@bulk')->name('clients.bulk');
|
||||||
|
|
||||||
|
Route::resource('client_statement', 'ClientStatementController@statement'); // name = (client_statement. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::resource('tasks', 'TaskController'); // name = (tasks. index / create / show / update / destroy / edit
|
Route::resource('tasks', 'TaskController'); // name = (tasks. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('tasks/bulk', 'TaskController@bulk')->name('tasks.bulk');
|
Route::post('tasks/bulk', 'TaskController@bulk')->name('tasks.bulk');
|
||||||
|
|
||||||
Route::resource('payments', 'PaymentController'); // name = (payments. index / create / show / update / destroy / edit
|
Route::resource('payments', 'PaymentController'); // name = (payments. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('payments/bulk', 'PaymentController@bulk')->name('payments.bulk');
|
Route::post('payments/bulk', 'PaymentController@bulk')->name('payments.bulk');
|
||||||
|
|
||||||
Route::resource('credits', 'CreditController'); // name = (credits. index / create / show / update / destroy / edit
|
Route::resource('credits', 'CreditController'); // name = (credits. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('credits/bulk', 'CreditController@bulk')->name('credits.bulk');
|
Route::post('credits/bulk', 'CreditController@bulk')->name('credits.bulk');
|
||||||
|
|
||||||
Route::resource('expenses', 'ExpenseController'); // name = (expenses. index / create / show / update / destroy / edit
|
Route::resource('expenses', 'ExpenseController'); // name = (expenses. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::post('expenses/bulk', 'ExpenseController@bulk')->name('expenses.bulk');
|
Route::post('expenses/bulk', 'ExpenseController@bulk')->name('expenses.bulk');
|
||||||
|
|
||||||
Route::resource('user', 'UserProfileController'); // name = (clients. index / create / show / update / destroy / edit
|
Route::resource('user', 'UserProfileController'); // name = (clients. index / create / show / update / destroy / edit
|
||||||
|
|
||||||
Route::get('settings', 'SettingsController@index')->name('user.settings');
|
Route::get('settings', 'SettingsController@index')->name('user.settings');
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user