From 77c03d4e8f68565c50b07ffea84b76041ea13b78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Thu, 17 Jun 2021 14:06:44 +0200 Subject: [PATCH 1/6] Sync sidebar enabled modules with admin portal --- app/Http/ViewComposers/PortalComposer.php | 44 +++++++++++++++++++---- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index b0dd3629b54a..fa2485048fa5 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -22,6 +22,22 @@ use Illuminate\View\View; */ class PortalComposer { + public const MODULE_RECURRING_INVOICES = 1; + public const MODULE_CREDITS = 2; + public const MODULE_QUOTES = 4; + public const MODULE_TASKS = 8; + public const MODULE_EXPENSES = 16; + public const MODULE_PROJECTS = 32; + public const MODULE_VENDORS = 64; + public const MODULE_TICKETS = 128; + public const MODULE_PROPOSALS = 256; + public const MODULE_RECURRING_EXPENSES = 512; + public const MODULE_RECURRING_TASKS = 1024; + public const MODULE_RECURRING_QUOTES = 2048; + public const MODULE_INVOICES = 4096; + public const MODULE_PROFORMAL_INVOICES = 8192; + public const MODULE_PURCHASE_ORDERS = 16384; + public $settings; /** @@ -69,17 +85,31 @@ class PortalComposer private function sidebarMenu() :array { + $enabled_modules = auth('contact')->user()->company->enabled_modules; $data = []; - //@todo wire this back in when we are happy with dashboard. - // if($this->settings->enable_client_portal_dashboard == TRUE) + // TODO: Enable dashboard once it's completed. + // $this->settings->enable_client_portal_dashboard + // $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity']; + + if (self::MODULE_INVOICES & $enabled_modules) { + $data[] = ['title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'file-text']; + } + + if (self::MODULE_RECURRING_INVOICES & $enabled_modules) { + $data[] = ['title' => ctrans('texts.recurring_invoices'), 'url' => 'client.recurring_invoices.index', 'icon' => 'file']; + } -// $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity']; - $data[] = ['title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'file-text']; - $data[] = ['title' => ctrans('texts.recurring_invoices'), 'url' => 'client.recurring_invoices.index', 'icon' => 'file']; $data[] = ['title' => ctrans('texts.payments'), 'url' => 'client.payments.index', 'icon' => 'credit-card']; - $data[] = ['title' => ctrans('texts.quotes'), 'url' => 'client.quotes.index', 'icon' => 'align-left']; - $data[] = ['title' => ctrans('texts.credits'), 'url' => 'client.credits.index', 'icon' => 'credit-card']; + + if (self::MODULE_QUOTES & $enabled_modules) { + $data[] = ['title' => ctrans('texts.quotes'), 'url' => 'client.quotes.index', 'icon' => 'align-left']; + } + + if (self::MODULE_CREDITS & $enabled_modules) { + $data[] = ['title' => ctrans('texts.credits'), 'url' => 'client.credits.index', 'icon' => 'credit-card']; + } + $data[] = ['title' => ctrans('texts.payment_methods'), 'url' => 'client.payment_methods.index', 'icon' => 'shield']; $data[] = ['title' => ctrans('texts.documents'), 'url' => 'client.documents.index', 'icon' => 'download']; $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar']; From a999534769af0b37700b294bf0d2fdd9e5ac4012 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Thu, 17 Jun 2021 14:24:33 +0200 Subject: [PATCH 2/6] Enabled modules RecurringInvoiceController.php --- .../RecurringInvoiceController.php | 9 +++--- .../RequestCancellationRequest.php | 21 +++++++++++++ .../ShowRecurringInvoiceRequest.php | 18 ++++++----- .../ShowRecurringInvoicesRequest.php | 31 +++++++++++++++++++ 4 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php rename app/Http/Requests/ClientPortal/{ => RecurringInvoices}/ShowRecurringInvoiceRequest.php (52%) create mode 100644 app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php diff --git a/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php b/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php index d08c2a7ac068..25fbfaadd306 100644 --- a/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php +++ b/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php @@ -12,7 +12,9 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; -use App\Http\Requests\ClientPortal\ShowRecurringInvoiceRequest; +use App\Http\Requests\ClientPortal\RecurringInvoices\RequestCancellationRequest; +use App\Http\Requests\ClientPortal\RecurringInvoices\ShowRecurringInvoicesRequest; +use App\Http\Requests\ClientPortal\RecurringInvoices\ShowRecurringInvoiceRequest; use App\Jobs\Mail\NinjaMailer; use App\Jobs\Mail\NinjaMailerJob; use App\Jobs\Mail\NinjaMailerObject; @@ -23,7 +25,6 @@ use App\Utils\Traits\MakesDates; use App\Utils\Traits\MakesHash; use App\Utils\Traits\Notifications\UserNotifies; use Illuminate\Contracts\View\Factory; -use Illuminate\Http\Request; use Illuminate\View\View; /** @@ -40,7 +41,7 @@ class RecurringInvoiceController extends Controller * * @return Factory|View */ - public function index() + public function index(ShowRecurringInvoicesRequest $request) { return $this->render('recurring_invoices.index'); } @@ -59,7 +60,7 @@ class RecurringInvoiceController extends Controller ]); } - public function requestCancellation(Request $request, RecurringInvoice $recurring_invoice) + public function requestCancellation(RequestCancellationRequest $request, RecurringInvoice $recurring_invoice) { if (is_null($recurring_invoice->subscription_id) || optional($recurring_invoice->subscription)->allow_cancellation) { $nmo = new NinjaMailerObject; diff --git a/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php new file mode 100644 index 000000000000..c4f1cd4ca470 --- /dev/null +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/RequestCancellationRequest.php @@ -0,0 +1,21 @@ +user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; + } + + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php similarity index 52% rename from app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php rename to app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php index 0e109d10776c..66108ed79fba 100644 --- a/app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoiceRequest.php @@ -9,19 +9,23 @@ * @license https://www.elastic.co/licensing/elastic-license */ -namespace App\Http\Requests\ClientPortal; +namespace App\Http\Requests\ClientPortal\RecurringInvoices; use App\Http\Requests\Request; +use App\Http\ViewComposers\PortalComposer; class ShowRecurringInvoiceRequest extends Request { - /** - * Determine if the user is authorized to make this request. - * - * @return bool - */ public function authorize() : bool { - return auth()->user()->client->id === $this->recurring_invoice->client_id; + return auth('contact')->user()->client->id === $this->recurring_invoice->client_id + && auth('contact')->user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; + } + + public function rules() + { + return [ + // + ]; } } diff --git a/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php new file mode 100644 index 000000000000..75b336fef462 --- /dev/null +++ b/app/Http/Requests/ClientPortal/RecurringInvoices/ShowRecurringInvoicesRequest.php @@ -0,0 +1,31 @@ +user()->company->enabled_modules & PortalComposer::MODULE_RECURRING_INVOICES; + } + + public function rules() + { + return [ + // + ]; + } +} From 0d313f12b0e1668138f7444f383a3be7b8234175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Thu, 17 Jun 2021 14:28:46 +0200 Subject: [PATCH 3/6] Enabled modules CreditController.php --- .../ClientPortal/CreditController.php | 12 ++----- .../{ => Credits}/ShowCreditRequest.php | 6 ++-- .../Credits/ShowCreditsRequest.php | 31 +++++++++++++++++++ 3 files changed, 38 insertions(+), 11 deletions(-) rename app/Http/Requests/ClientPortal/{ => Credits}/ShowCreditRequest.php (65%) create mode 100644 app/Http/Requests/ClientPortal/Credits/ShowCreditsRequest.php diff --git a/app/Http/Controllers/ClientPortal/CreditController.php b/app/Http/Controllers/ClientPortal/CreditController.php index 4d09ef3ecc71..926af864202b 100644 --- a/app/Http/Controllers/ClientPortal/CreditController.php +++ b/app/Http/Controllers/ClientPortal/CreditController.php @@ -3,19 +3,13 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; -use App\Http\Requests\ClientPortal\ShowCreditRequest; +use App\Http\Requests\ClientPortal\Credits\ShowCreditRequest; +use App\Http\Requests\ClientPortal\Credits\ShowCreditsRequest; use App\Models\Credit; -use Illuminate\Contracts\View\Factory; -use Illuminate\View\View; class CreditController extends Controller { - /** - * Display listing of client credits. - * - * @return Factory|View - */ - public function index() + public function index(ShowCreditsRequest $request) { return $this->render('credits.index'); } diff --git a/app/Http/Requests/ClientPortal/ShowCreditRequest.php b/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php similarity index 65% rename from app/Http/Requests/ClientPortal/ShowCreditRequest.php rename to app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php index a52f2fdc00fc..52b76a8d7321 100644 --- a/app/Http/Requests/ClientPortal/ShowCreditRequest.php +++ b/app/Http/Requests/ClientPortal/Credits/ShowCreditRequest.php @@ -1,7 +1,8 @@ credit->is_deleted; + return !$this->credit->is_deleted + && auth('contact')->user()->company->enabled_modules & PortalComposer::MODULE_CREDITS; } /** diff --git a/app/Http/Requests/ClientPortal/Credits/ShowCreditsRequest.php b/app/Http/Requests/ClientPortal/Credits/ShowCreditsRequest.php new file mode 100644 index 000000000000..a3b10de1fbd0 --- /dev/null +++ b/app/Http/Requests/ClientPortal/Credits/ShowCreditsRequest.php @@ -0,0 +1,31 @@ +user()->company->enabled_modules & PortalComposer::MODULE_CREDITS; + } + + public function rules() + { + return [ + // + ]; + } +} From 430d39b2f1a6b86f0ccb49f945f580546ee85ec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Thu, 17 Jun 2021 14:37:06 +0200 Subject: [PATCH 4/6] Enabled modules QuoteController.php --- .../ClientPortal/QuoteController.php | 17 ++++++++-- .../ProcessQuotesInBulkRequest.php | 30 ----------------- .../Quotes/ProcessQuotesInBulkRequest.php | 32 +++++++++++++++++++ .../ClientPortal/Quotes/ShowQuoteRequest.php | 32 +++++++++++++++++++ .../ClientPortal/Quotes/ShowQuotesRequest.php | 31 ++++++++++++++++++ .../ClientPortal/ShowQuoteRequest.php | 32 ------------------- 6 files changed, 109 insertions(+), 65 deletions(-) delete mode 100644 app/Http/Requests/ClientPortal/ProcessQuotesInBulkRequest.php create mode 100644 app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php create mode 100644 app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php create mode 100644 app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php delete mode 100644 app/Http/Requests/ClientPortal/ShowQuoteRequest.php diff --git a/app/Http/Controllers/ClientPortal/QuoteController.php b/app/Http/Controllers/ClientPortal/QuoteController.php index 8e180cdebda8..e9b7649935d6 100644 --- a/app/Http/Controllers/ClientPortal/QuoteController.php +++ b/app/Http/Controllers/ClientPortal/QuoteController.php @@ -1,11 +1,22 @@ render('quotes.index'); } diff --git a/app/Http/Requests/ClientPortal/ProcessQuotesInBulkRequest.php b/app/Http/Requests/ClientPortal/ProcessQuotesInBulkRequest.php deleted file mode 100644 index f99e60880f73..000000000000 --- a/app/Http/Requests/ClientPortal/ProcessQuotesInBulkRequest.php +++ /dev/null @@ -1,30 +0,0 @@ - ['array'], - ]; - } -} diff --git a/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php b/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php new file mode 100644 index 000000000000..bfa740e02ff5 --- /dev/null +++ b/app/Http/Requests/ClientPortal/Quotes/ProcessQuotesInBulkRequest.php @@ -0,0 +1,32 @@ +user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; + } + + public function rules() + { + return [ + 'quotes' => ['array'], + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php b/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php new file mode 100644 index 000000000000..1690a6c5c8b6 --- /dev/null +++ b/app/Http/Requests/ClientPortal/Quotes/ShowQuoteRequest.php @@ -0,0 +1,32 @@ +user()->client->id === $this->quote->client_id + && auth('contact')->user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; + } + + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php b/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php new file mode 100644 index 000000000000..6087131e07bd --- /dev/null +++ b/app/Http/Requests/ClientPortal/Quotes/ShowQuotesRequest.php @@ -0,0 +1,31 @@ +user()->company->enabled_modules & PortalComposer::MODULE_QUOTES; + } + + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/ShowQuoteRequest.php b/app/Http/Requests/ClientPortal/ShowQuoteRequest.php deleted file mode 100644 index 3e133fbe9c16..000000000000 --- a/app/Http/Requests/ClientPortal/ShowQuoteRequest.php +++ /dev/null @@ -1,32 +0,0 @@ -user()->client->id === $this->quote->client_id; - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - // - ]; - } -} From 2d9bd6471bef6976a7d6a07a49667da69681777d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Thu, 17 Jun 2021 14:38:16 +0200 Subject: [PATCH 5/6] Update copyright in ShowTasksRequest.php --- .../Requests/ClientPortal/Tasks/ShowTasksRequest.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php index de4aa00fd991..9217c7e9a8bb 100644 --- a/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php +++ b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php @@ -1,5 +1,15 @@ Date: Thu, 17 Jun 2021 14:43:14 +0200 Subject: [PATCH 6/6] Enabled modules for InvoiceController.php --- .../ClientPortal/InvoiceController.php | 7 +++-- .../Invoices/ProcessInvoicesInBulkRequest.php | 31 +++++++++++++++++++ .../{ => Invoices}/ShowInvoiceRequest.php | 6 ++-- .../Invoices/ShowInvoicesRequest.php | 31 +++++++++++++++++++ .../ProcessInvoicesInBulkRequest.php | 30 ------------------ 5 files changed, 70 insertions(+), 35 deletions(-) create mode 100644 app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php rename app/Http/Requests/ClientPortal/{ => Invoices}/ShowInvoiceRequest.php (73%) create mode 100644 app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php delete mode 100644 app/Http/Requests/ClientPortal/ProcessInvoicesInBulkRequest.php diff --git a/app/Http/Controllers/ClientPortal/InvoiceController.php b/app/Http/Controllers/ClientPortal/InvoiceController.php index 48ec01b898aa..804e4cd91ade 100644 --- a/app/Http/Controllers/ClientPortal/InvoiceController.php +++ b/app/Http/Controllers/ClientPortal/InvoiceController.php @@ -12,8 +12,9 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; -use App\Http\Requests\ClientPortal\ProcessInvoicesInBulkRequest; -use App\Http\Requests\ClientPortal\ShowInvoiceRequest; +use App\Http\Requests\ClientPortal\Invoices\ShowInvoicesRequest; +use App\Http\Requests\ClientPortal\Invoices\ProcessInvoicesInBulkRequest; +use App\Http\Requests\ClientPortal\Invoices\ShowInvoiceRequest; use App\Models\Invoice; use App\Utils\Number; use App\Utils\TempFile; @@ -33,7 +34,7 @@ class InvoiceController extends Controller * * @return Factory|View */ - public function index() + public function index(ShowInvoicesRequest $request) { return $this->render('invoices.index'); } diff --git a/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php b/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php new file mode 100644 index 000000000000..512874a3806a --- /dev/null +++ b/app/Http/Requests/ClientPortal/Invoices/ProcessInvoicesInBulkRequest.php @@ -0,0 +1,31 @@ +user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; + } + + public function rules() + { + return [ + 'invoices' => ['array'], + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/ShowInvoiceRequest.php b/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php similarity index 73% rename from app/Http/Requests/ClientPortal/ShowInvoiceRequest.php rename to app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php index 3ecae8046509..f272521d0821 100644 --- a/app/Http/Requests/ClientPortal/ShowInvoiceRequest.php +++ b/app/Http/Requests/ClientPortal/Invoices/ShowInvoiceRequest.php @@ -9,9 +9,10 @@ * @license https://www.elastic.co/licensing/elastic-license */ -namespace App\Http\Requests\ClientPortal; +namespace App\Http\Requests\ClientPortal\Invoices; use App\Http\Requests\Request; +use App\Http\ViewComposers\PortalComposer; class ShowInvoiceRequest extends Request { @@ -22,6 +23,7 @@ class ShowInvoiceRequest extends Request */ public function authorize() : bool { - return auth('contact')->user()->client->id == $this->invoice->client_id; + return auth('contact')->user()->client->id == $this->invoice->client_id + && auth('contact')->user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; } } diff --git a/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php b/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php new file mode 100644 index 000000000000..8a815d95549c --- /dev/null +++ b/app/Http/Requests/ClientPortal/Invoices/ShowInvoicesRequest.php @@ -0,0 +1,31 @@ +user()->company->enabled_modules & PortalComposer::MODULE_INVOICES; + } + + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/Requests/ClientPortal/ProcessInvoicesInBulkRequest.php b/app/Http/Requests/ClientPortal/ProcessInvoicesInBulkRequest.php deleted file mode 100644 index 9a41f91069da..000000000000 --- a/app/Http/Requests/ClientPortal/ProcessInvoicesInBulkRequest.php +++ /dev/null @@ -1,30 +0,0 @@ - ['array'], - ]; - } -}