From d28034db78d415048bf03e8fa57617bc3f9373e2 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 21 Oct 2024 20:40:49 +1100 Subject: [PATCH 1/7] Payment means --- app/Http/Controllers/EInvoiceController.php | 53 ++++++++++ .../EInvoice/UpdateEInvoiceConfiguration.php | 96 +++++++++++++++++++ .../EDocument/Adapters/CII/PaymentMeans.php | 43 ++++----- app/Services/EDocument/Standards/Peppol.php | 2 +- routes/api.php | 2 + 5 files changed, 173 insertions(+), 23 deletions(-) create mode 100644 app/Http/Requests/EInvoice/UpdateEInvoiceConfiguration.php diff --git a/app/Http/Controllers/EInvoiceController.php b/app/Http/Controllers/EInvoiceController.php index 1904ce5f212..aa5629ce4d2 100644 --- a/app/Http/Controllers/EInvoiceController.php +++ b/app/Http/Controllers/EInvoiceController.php @@ -12,10 +12,21 @@ namespace App\Http\Controllers; use App\Http\Requests\EInvoice\ValidateEInvoiceRequest; +use App\Http\Requests\EInvoice\UpdateEInvoiceConfiguration; use App\Services\EDocument\Standards\Validation\Peppol\EntityLevel; +use InvoiceNinja\EInvoice\Models\Peppol\BranchType\FinancialInstitutionBranch; +use InvoiceNinja\EInvoice\Models\Peppol\FinancialAccountType\PayeeFinancialAccount; +use InvoiceNinja\EInvoice\Models\Peppol\PaymentMeans; +use InvoiceNinja\EInvoice\Models\Peppol\CardAccountType\CardAccount; +use InvoiceNinja\EInvoice\Models\Peppol\IdentifierType\ID; +use InvoiceNinja\EInvoice\Models\Peppol\CodeType\CardTypeCode; +use InvoiceNinja\EInvoice\Models\Peppol\CodeType\PaymentMeansCode; class EInvoiceController extends BaseController { + private array $einvoice_props = [ + 'payment_means', + ]; public function validateEntity(ValidateEInvoiceRequest $request) { @@ -36,4 +47,46 @@ public function validateEntity(ValidateEInvoiceRequest $request) } + public function configurations(UpdateEInvoiceConfiguration $request) + { + + $einvoice = new \InvoiceNinja\EInvoice\Models\Peppol\Invoice(); + $pm = new PaymentMeans(); + + $pmc = new PaymentMeansCode(); + $pmc->value = $request->input('payment_means.code', null); + + $ctc = new CardTypeCode(); + $ctc->value = $request->input('payment_means.card_type', null); + $card_account = new CardAccount(); + $card_account->HolderName = $request->input('payment_means.cardholder_name', ''); + $card_account->CardTypeCode = $ctc; + + $instruct_note = new InstructionNote() + $in + $fib = new FinancialInstitutionBranch(); + $bic_id = new ID(); + $bic_id->value = $request->input('payment_means.bic', null); + $fib->ID = $bic_id; + $pfa = new PayeeFinancialAccount(); + $iban_id = new ID(); + $iban_id->value = $request->input('payment_means.iban', null); + $pfa->ID = $iban_id; + $pfa->Name = $request->input('payment_means.account_name', null); + $pfa->FinancialInstitutionBranch = $fib; + + $pm->PayeeFinancialAccount = $pfa; + $pm->PaymentMeansCode = $pmc; + $pm->CardAccount = $card_account; + $pm->InstructionNote = $request->input('payment_means.information', null); + + $einvoice->PaymentMeans[] = $pm; + + + + $stub = new \stdClass(); + $stub->Invoice = $einvoice; + + } + } diff --git a/app/Http/Requests/EInvoice/UpdateEInvoiceConfiguration.php b/app/Http/Requests/EInvoice/UpdateEInvoiceConfiguration.php new file mode 100644 index 00000000000..cfbafb013b3 --- /dev/null +++ b/app/Http/Requests/EInvoice/UpdateEInvoiceConfiguration.php @@ -0,0 +1,96 @@ +user(); + + return $user->isAdmin(); + } + + public function rules() + { + + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return [ + 'entity' => 'required|bail|in:invoice,client,company', + 'payment_means' => 'sometimes|bail|array', + 'payment_means.code' => ['required_with:payment_means', 'bail', Rule::in(PaymentMeans::getPaymentMeansCodelist())], + 'payment_means.bic' => ['bail', + Rule::requiredIf(function () { + return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']); + }), + ], + 'payment_means.iban' => ['bail', 'string', 'min:8', 'max:11', + Rule::requiredIf(function () { + return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']); + }), + ], + 'payment_means.account_name' => ['bail', 'string', 'min:15', 'max:34', + Rule::requiredIf(function () { + return in_array($this->input('payment_means.code'), ['58', '59', '49', '42', '30']); + }), + ], + 'payment_means.information' => ['bail', 'sometimes', 'string'], + 'payment_means.card_type' => ['bail', 'string', 'min:4', + Rule::requiredIf(function () { + return in_array($this->input('payment_means.code'), ['48']); + }), + ], + 'payment_means.cardholder_name' => ['bail','string', 'min:4', + Rule::requiredIf(function () { + return in_array($this->input('payment_means.code'), ['48']); + }), + ], + ]; + } + + public function prepareForValidation() + { + $input = $this->all(); + + $this->replace($input); + } + + public function getLevel() + { + /** @var \App\Models\User $user */ + $user = auth()->user(); + + return match($this->entity){ + 'company' => $user->company(), + 'invoice' => Invoice::class, + 'client' => Client::class, + default => $user->company(), + }; + } +} \ No newline at end of file diff --git a/app/Services/EDocument/Adapters/CII/PaymentMeans.php b/app/Services/EDocument/Adapters/CII/PaymentMeans.php index dee5d993f31..58e8bf3ade2 100644 --- a/app/Services/EDocument/Adapters/CII/PaymentMeans.php +++ b/app/Services/EDocument/Adapters/CII/PaymentMeans.php @@ -16,7 +16,7 @@ class PaymentMeans implements PaymentMeansInterface { - public array $payment_means_codelist = [ + public static array $payment_means_codelist = [ '1' => 'Instrument not defined', '2' => 'Automated clearing house credit', '3' => 'Automated clearing house debit', @@ -102,25 +102,25 @@ class PaymentMeans implements PaymentMeansInterface 'ZZZ' => 'Mutually defined', ]; - public string $typecode = '1'; + public string $code = '1'; public ?string $information = null; - public ?string $cardType = null; + public ?string $card_type = null; public ?string $cardId = null; - public ?string $cardHolderName = null; + public ?string $cardholder_name = null; public ?string $buyerIban = null; - public ?string $payeeIban = null; + public ?string $iban = null; - public ?string $payeeAccountName = null; + public ?string $account_name = null; public ?string $payeePropId = null; - public ?string $payeeBic = null; + public ?string $bic = null; public function __construct(mixed $existing_payment_means = null) { @@ -139,7 +139,7 @@ public function __construct(mixed $existing_payment_means = null) // @param string $typecode __BT-81, From BASIC WL__ The expected or used means of payment, expressed as a code. The entries from the UNTDID 4461 code list must be used. A distinction should be made between SEPA and non-SEPA payments as well // as between credit payments, direct debits, card payments and other means of payment // In particular, the following codes can be used: - // * 10: cash - + // * // 10: cash - // 20: check - // 30: transfer - // 42: Payment to bank account - @@ -151,42 +151,37 @@ public function __construct(mixed $existing_payment_means = null) // 97: Report // * // * @param string|null $information __BT-82, From EN 16931__ The expected or used means of payment expressed in text form, e.g. cash, bank transfer, direct debit, credit card, etc. - // * @param string|null $cardType __BT-, From __ The type of the card + // * @param string|null $card_type __BT-, From __ The type of the card // * @param string|null $cardId __BT-84, From BASIC WL__ The primary account number (PAN) to which the card used for payment belongs. In accordance with card payment security standards, an invoice should never contain a full payment card master account number. //The following specification of the PCI Security Standards Council currently applies: The first 6 and last 4 digits at most are to be displayed - // * @param string|null $cardHolderName __BT-, From __ Name of the payment card holder + // * @param string|null $cardholder_name __BT-, From __ Name of the payment card holder // * @param string|null $buyerIban __BT-91, From BASIC WL__ Direct debit: ID of the account to be debited - // * @param string|null $payeeIban __BT-, From __ Transfer: A unique identifier for the financial account held with a payment service provider to which the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national + // * @param string|null $iban __BT-, From __ Transfer: A unique identifier for the financial account held with a payment service provider to which the payment should be made, e.g. Use an IBAN (in the case of a SEPA payment) for a national //ProprietaryID account number // * @param string|null $payeeAccountName __BT-, From __ The name of the payment account held with a payment service provider to which the payment should be made. Information only required if different from the name of the payee / seller // * @param string|null $payeePropId __BT-, From __ National account number (not for SEPA) - // * @param string|null $payeeBic __BT-, From __ Seller's banking institution, An identifier for the payment service provider with whom the payment account is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used. + // * @param string|null $bic __BT-, From __ Seller's banking institution, An identifier for the payment service provider with whom the payment account is managed, such as the BIC or a national bank code, if required. No identification scheme is to be used. // * public function run() { - -// ->getTradeSettlementPaymentMeansType($typecode, $information); -// ->getTradeSettlementFinancialCardType($cardType, $cardId, $cardHolderName); - - $TradeSettlementFinancialCardType = new \horstoeko\zugferd\entities\extended\ram\TradeSettlementFinancialCardType(); - $TradeSettlementFinancialCardType->setCardholderName($this->cardHolderName) + $TradeSettlementFinancialCardType->setCardholderName($this->cardholder_name) ->setID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->cardId)); $DebtorFinancialAccountType = new \horstoeko\zugferd\entities\extended\ram\DebtorFinancialAccountType(); $DebtorFinancialAccountType->setIBANID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->buyerIban)); $CreditorFinancialAccountType = new \horstoeko\zugferd\entities\extended\ram\CreditorFinancialAccountType(); - $CreditorFinancialAccountType->setAccountName($this->payeeAccountName) + $CreditorFinancialAccountType->setAccountName($this->account_name) ->setProprietaryID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->payeePropId)) - ->setIBANID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->payeeIban)); + ->setIBANID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->iban)); $CreditorFinancialInstitutionType = new \horstoeko\zugferd\entities\extended\ram\CreditorFinancialInstitutionType(); - $CreditorFinancialInstitutionType->setBICID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->payeeBic)); + $CreditorFinancialInstitutionType->setBICID(new \horstoeko\zugferd\entities\extended\udt\IDType($this->bic)); $TradeSettlementPaymentMeansType = new \horstoeko\zugferd\entities\extended\ram\TradeSettlementPaymentMeansType(); - $TradeSettlementPaymentMeansType->setTypeCode($this->typecode)->setInformation($this->information); + $TradeSettlementPaymentMeansType->setTypeCode($this->code)->setInformation($this->information); $TradeSettlementPaymentMeansType->setPayeePartyCreditorFinancialAccount($CreditorFinancialAccountType); $TradeSettlementPaymentMeansType->setPayerPartyDebtorFinancialAccount($DebtorFinancialAccountType); $TradeSettlementPaymentMeansType->setApplicableTradeSettlementFinancialCard($TradeSettlementFinancialCardType); @@ -200,4 +195,8 @@ public function run() } + public static function getPaymentMeansCodelist() + { + return array_keys(self::$payment_means_codelist); + } } diff --git a/app/Services/EDocument/Standards/Peppol.php b/app/Services/EDocument/Standards/Peppol.php index 74c83d23e21..4c80c603f1c 100644 --- a/app/Services/EDocument/Standards/Peppol.php +++ b/app/Services/EDocument/Standards/Peppol.php @@ -302,7 +302,7 @@ class Peppol extends AbstractService private EInvoice $e; - private string $api_network = Qvalia::class; // Storecove::class; // Qvalia::class; + private string $api_network = Storecove::class; // Storecove::class; // Qvalia::class; public Qvalia | Storecove $gateway; diff --git a/routes/api.php b/routes/api.php index 9f251a11e80..2ba4f27aa7e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -228,6 +228,8 @@ Route::post('documents/bulk', [DocumentController::class, 'bulk'])->name('documents.bulk'); Route::post('einvoice/validateEntity', [EInvoiceController::class, 'validateEntity'])->name('einvoice.validateEntity'); + Route::post('einvoice/configurations', [EInvoiceController::class, 'configurations'])->name('einvoice.configurations'); + Route::post('emails', [EmailController::class, 'send'])->name('email.send')->middleware('user_verified'); Route::post('emails/clientHistory/{client}', [EmailHistoryController::class, 'clientHistory'])->name('email.clientHistory'); Route::post('emails/entityHistory', [EmailHistoryController::class, 'entityHistory'])->name('email.entityHistory'); From 3c4eccb826811f5e99e674cd73151706609bd045 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 21 Oct 2024 21:02:49 +1100 Subject: [PATCH 2/7] Payment means --- app/Http/Controllers/EInvoiceController.php | 53 +++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/app/Http/Controllers/EInvoiceController.php b/app/Http/Controllers/EInvoiceController.php index aa5629ce4d2..c2f4962d809 100644 --- a/app/Http/Controllers/EInvoiceController.php +++ b/app/Http/Controllers/EInvoiceController.php @@ -56,34 +56,37 @@ public function configurations(UpdateEInvoiceConfiguration $request) $pmc = new PaymentMeansCode(); $pmc->value = $request->input('payment_means.code', null); - $ctc = new CardTypeCode(); - $ctc->value = $request->input('payment_means.card_type', null); - $card_account = new CardAccount(); - $card_account->HolderName = $request->input('payment_means.cardholder_name', ''); - $card_account->CardTypeCode = $ctc; - - $instruct_note = new InstructionNote() - $in - $fib = new FinancialInstitutionBranch(); - $bic_id = new ID(); - $bic_id->value = $request->input('payment_means.bic', null); - $fib->ID = $bic_id; - $pfa = new PayeeFinancialAccount(); - $iban_id = new ID(); - $iban_id->value = $request->input('payment_means.iban', null); - $pfa->ID = $iban_id; - $pfa->Name = $request->input('payment_means.account_name', null); - $pfa->FinancialInstitutionBranch = $fib; - - $pm->PayeeFinancialAccount = $pfa; - $pm->PaymentMeansCode = $pmc; - $pm->CardAccount = $card_account; - $pm->InstructionNote = $request->input('payment_means.information', null); + if($this->input('payment_means.code') == '48') + { + $ctc = new CardTypeCode(); + $ctc->value = $request->input('payment_means.card_type', null); + $card_account = new CardAccount(); + $card_account->HolderName = $request->input('payment_means.cardholder_name', ''); + $card_account->CardTypeCode = $ctc; + $pm->CardAccount = $card_account; + } + + if($this->input('payment_means.iban')) + { + $fib = new FinancialInstitutionBranch(); + $bic_id = new ID(); + $bic_id->value = $request->input('payment_means.bic', null); + $fib->ID = $bic_id; + $pfa = new PayeeFinancialAccount(); + $iban_id = new ID(); + $iban_id->value = $request->input('payment_means.iban', null); + $pfa->ID = $iban_id; + $pfa->Name = $request->input('payment_means.account_name', null); + $pfa->FinancialInstitutionBranch = $fib; + + $pm->PayeeFinancialAccount = $pfa; + $pm->PaymentMeansCode = $pmc; + } + + $pm->InstructionNote = $request->input('payment_means.information', ''); $einvoice->PaymentMeans[] = $pm; - - $stub = new \stdClass(); $stub->Invoice = $einvoice; From 5db9e5f6dc28e8044308b5c74455bcbc89bcfb69 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 22 Oct 2024 05:23:19 +1100 Subject: [PATCH 3/7] Minor fixes for bulk expense updated --- app/Http/Requests/Expense/BulkExpenseRequest.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Requests/Expense/BulkExpenseRequest.php b/app/Http/Requests/Expense/BulkExpenseRequest.php index 449583a6247..ce3ff371037 100644 --- a/app/Http/Requests/Expense/BulkExpenseRequest.php +++ b/app/Http/Requests/Expense/BulkExpenseRequest.php @@ -44,7 +44,6 @@ public function rules() 'new_value' => ['required_if:action,bulk_update|string'], ]; - } public function prepareForValidation() @@ -59,6 +58,10 @@ public function prepareForValidation() $input['category_id'] = $this->transformKeys($input['category_id']); } + if(isset($input['newValue'])){ + $input['new_value'] = $input['newValue']; + } + $this->replace($input); } } From e3b5c00928c3c9752f2dca9a976f4012d45f334a Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 22 Oct 2024 06:22:59 +1100 Subject: [PATCH 4/7] Sidebar clientportal menu --- app/Http/ViewComposers/PortalComposer.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index ad713941860..5aba64ec569 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -136,11 +136,11 @@ private function sidebarMenu(): array $data[] = ['title' => ctrans('texts.statement'), 'url' => 'client.statement', 'icon' => 'activity']; - // if (Ninja::isHosted() && auth()->guard('contact')->user()->company->id == config('ninja.ninja_default_company_id')) { - $data[] = ['title' => ctrans('texts.plan'), 'url' => 'client.plan', 'icon' => 'credit-card']; - // } else { - $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar']; - // } + if (Ninja::isHosted() && auth()->guard('contact')->user() && auth()->guard('contact')->user()->company_id == config('ninja.ninja_default_company_id')) { + $data[] = ['title' => ctrans('texts.plan'), 'url' => 'client.plan', 'icon' => 'credit-card']; + } else { + $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar']; + } if (auth()->guard('contact')->user()->client->getSetting('client_initiated_payments')) { $data[] = ['title' => ctrans('texts.pre_payment'), 'url' => 'client.pre_payments.index', 'icon' => 'dollar-sign']; From c7139d8cc8d6ac0f8b4f66f9d9739a35c626f8e4 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 22 Oct 2024 06:28:41 +1100 Subject: [PATCH 5/7] Support ids on sidebars --- app/Http/ViewComposers/PortalComposer.php | 26 +++++++++---------- .../general/sidebar/desktop.blade.php | 3 ++- .../general/sidebar/mobile.blade.php | 4 ++- .../general/sidebar/vendor_desktop.blade.php | 3 ++- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index 5aba64ec569..35f1d3298ba 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -106,44 +106,44 @@ private function sidebarMenu(): array $data = []; if ($this->settings->enable_client_portal_dashboard) { - $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity']; + $data[] = [ 'title' => ctrans('texts.dashboard'), 'url' => 'client.dashboard', 'icon' => 'activity', 'id' => 'dashboard']; } if (self::MODULE_INVOICES & $enabled_modules) { - $data[] = ['title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'file-text']; + $data[] = ['title' => ctrans('texts.invoices'), 'url' => 'client.invoices.index', 'icon' => 'file-text', 'id' => 'invoices']; } if (self::MODULE_RECURRING_INVOICES & $enabled_modules) { - $data[] = ['title' => ctrans('texts.recurring_invoices'), 'url' => 'client.recurring_invoices.index', 'icon' => 'file']; + $data[] = ['title' => ctrans('texts.recurring_invoices'), 'url' => 'client.recurring_invoices.index', 'icon' => 'file', 'id' => 'recurring_invoices']; } - $data[] = ['title' => ctrans('texts.payments'), 'url' => 'client.payments.index', 'icon' => 'credit-card']; + $data[] = ['title' => ctrans('texts.payments'), 'url' => 'client.payments.index', 'icon' => 'credit-card', 'id' => 'payments']; if (self::MODULE_QUOTES & $enabled_modules) { - $data[] = ['title' => ctrans('texts.quotes'), 'url' => 'client.quotes.index', 'icon' => 'align-left']; + $data[] = ['title' => ctrans('texts.quotes'), 'url' => 'client.quotes.index', 'icon' => 'align-left', 'id' => 'quotes']; } if (self::MODULE_CREDITS & $enabled_modules) { - $data[] = ['title' => ctrans('texts.credits'), 'url' => 'client.credits.index', 'icon' => 'credit-card']; + $data[] = ['title' => ctrans('texts.credits'), 'url' => 'client.credits.index', 'icon' => 'credit-card', 'id' => 'credits']; } - $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.payment_methods'), 'url' => 'client.payment_methods.index', 'icon' => 'shield', 'id' => 'payment_methods']; + $data[] = ['title' => ctrans('texts.documents'), 'url' => 'client.documents.index', 'icon' => 'download', 'id' => 'documents']; if (auth()->guard('contact')->user()->client->getSetting('enable_client_portal_tasks')) { - $data[] = ['title' => ctrans('texts.tasks'), 'url' => 'client.tasks.index', 'icon' => 'clock']; + $data[] = ['title' => ctrans('texts.tasks'), 'url' => 'client.tasks.index', 'icon' => 'clock', 'id' => 'tasks']; } - $data[] = ['title' => ctrans('texts.statement'), 'url' => 'client.statement', 'icon' => 'activity']; + $data[] = ['title' => ctrans('texts.statement'), 'url' => 'client.statement', 'icon' => 'activity', 'id' => 'statement']; if (Ninja::isHosted() && auth()->guard('contact')->user() && auth()->guard('contact')->user()->company_id == config('ninja.ninja_default_company_id')) { - $data[] = ['title' => ctrans('texts.plan'), 'url' => 'client.plan', 'icon' => 'credit-card']; + $data[] = ['title' => ctrans('texts.plan'), 'url' => 'client.plan', 'icon' => 'credit-card', 'id' => 'plan']; } else { - $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar']; + $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar', 'id' => 'subsciptions']; } if (auth()->guard('contact')->user()->client->getSetting('client_initiated_payments')) { - $data[] = ['title' => ctrans('texts.pre_payment'), 'url' => 'client.pre_payments.index', 'icon' => 'dollar-sign']; + $data[] = ['title' => ctrans('texts.pre_payment'), 'url' => 'client.pre_payments.index', 'icon' => 'dollar-sign', 'id' => 'pre_payment']; } return $data; diff --git a/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php b/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php index eb0e676953d..0ba8c8632c4 100644 --- a/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php +++ b/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php @@ -10,7 +10,8 @@