only show invoicing tab when module is activated

This commit is contained in:
Gregor Vostrak
2025-04-30 12:06:48 +02:00
parent 8c66068663
commit da5fc3f113
4 changed files with 17 additions and 4 deletions

View File

@@ -40,6 +40,7 @@ class HandleInertiaRequests extends Middleware
public function share(Request $request): array public function share(Request $request): array
{ {
$hasBilling = Module::has('Billing') && Module::isEnabled('Billing'); $hasBilling = Module::has('Billing') && Module::isEnabled('Billing');
$hasInvoicing = Module::has('Invoicing') && Module::isEnabled('Invoicing');
/** @var BillingContract $billing */ /** @var BillingContract $billing */
$billing = app(BillingContract::class); $billing = app(BillingContract::class);
@@ -48,6 +49,7 @@ class HandleInertiaRequests extends Middleware
return array_merge(parent::share($request), [ return array_merge(parent::share($request), [
'has_billing_extension' => $hasBilling, 'has_billing_extension' => $hasBilling,
'has_invoicing_extension' => $hasInvoicing,
'billing' => $billing !== null && $currentOrganization !== null ? [ 'billing' => $billing !== null && $currentOrganization !== null ? [
'has_subscription' => $billing->hasSubscription($currentOrganization), 'has_subscription' => $billing->hasSubscription($currentOrganization),
'has_trial' => $billing->hasTrial($currentOrganization), 'has_trial' => $billing->hasTrial($currentOrganization),

View File

@@ -26,12 +26,12 @@ import { initializeStores, refreshStores } from '@/utils/init';
import { import {
canManageBilling, canManageBilling,
canUpdateOrganization, canUpdateOrganization,
canViewClients, canViewClients, canViewInvoices,
canViewMembers, canViewMembers,
canViewProjects, canViewReport, canViewProjects, canViewReport,
canViewTags, canViewTags,
} from '@/utils/permissions'; } from '@/utils/permissions';
import { isBillingActivated } from '@/utils/billing'; import {isBillingActivated, isInvoicingActivated} from '@/utils/billing';
import type { User } from '@/types/models'; import type { User } from '@/types/models';
import { ArrowsRightLeftIcon } from '@heroicons/vue/16/solid'; import { ArrowsRightLeftIcon } from '@heroicons/vue/16/solid';
import { fetchToken, isTokenValid } from '@/utils/session'; import { fetchToken, isTokenValid } from '@/utils/session';
@@ -188,6 +188,7 @@ const page = usePage<{
:current="route().current('tags')" :current="route().current('tags')"
:href="route('tags')"></NavigationSidebarItem> :href="route('tags')"></NavigationSidebarItem>
<NavigationSidebarItem <NavigationSidebarItem
v-if="isInvoicingActivated() && canViewInvoices()"
title="Invoices" title="Invoices"
:icon="DocumentTextIcon" :icon="DocumentTextIcon"
:current="route().current('invoices')" :current="route().current('invoices')"
@@ -272,8 +273,6 @@ const page = usePage<{
v-if="$slots.header" v-if="$slots.header"
class="bg-default-background border-b border-default-background-separator shadow"> class="bg-default-background border-b border-default-background-separator shadow">
<div class="pt-8 pb-3"> <div class="pt-8 pb-3">
<MainContainer> <MainContainer>
<slot name="header" /> <slot name="header" />
</MainContainer> </MainContainer>

View File

@@ -9,6 +9,14 @@ export function isBillingActivated() {
return page.props.has_billing_extension; return page.props.has_billing_extension;
} }
export function isInvoicingActivated() {
const page = usePage<{
has_invoicing_extension: boolean;
}>();
return page.props.has_invoicing_extension;
}
export function isInTrial() { export function isInTrial() {
const page = usePage<{ const page = usePage<{
billing: { billing: {

View File

@@ -122,3 +122,7 @@ export function canDeleteReport() {
export function canViewAllTimeEntries() { export function canViewAllTimeEntries() {
return currentUserHasPermission('time-entries:view:all'); return currentUserHasPermission('time-entries:view:all');
} }
export function canViewInvoices() {
return currentUserHasPermission('invoices:view');
}