diff --git a/README.md b/README.md index 6dad5c38..b93f7cd5 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ -This repo is currently a work in progress — PRs and issues welcome! +A Laravel and Filament-powered accounting platform, crafting a modern and automated solution for financial management. # Getting started @@ -203,7 +203,8 @@ public static function getAllLanguages(): array ## Plaid Integration -To integrate [Plaid](https://plaid.com/) with your application for enhanced financial data connectivity, you must first create an account with Plaid and obtain your credentials. Set your credentials in the `.env` file as follows: +To integrate [Plaid](https://plaid.com/) with your application for enhanced financial data connectivity, you must first +create an account with Plaid and obtain your credentials. Set your credentials in the `.env` file as follows: ```env PLAID_CLIENT_ID=your-client-id @@ -212,9 +213,12 @@ PLAID_ENVIRONMENT=sandbox # Can be sandbox, development, or production PLAID_WEBHOOK_URL=https://my-static-domain.ngrok-free.app/api/plaid/webhook # Must have /api/plaid/webhook appended ``` -The `PLAID_WEBHOOK_URL` is essential as it enables your application to receive real-time updates on transactions from connected bank accounts. This webhook URL must contain a static domain, which can be obtained from services like ngrok that offer a free static domain upon signup. Alternatively, you may use any other service that provides a static domain. +The `PLAID_WEBHOOK_URL` is essential as it enables your application to receive real-time updates on transactions from +connected bank accounts. This webhook URL must contain a static domain, which can be obtained from services like ngrok +that offer a free static domain upon signup. Alternatively, you may use any other service that provides a static domain. -After integrating Plaid, you can connect your account on the "Connected Accounts" page and link your financial institution. Before importing transactions, ensure to run the following command to process the queued transactions: +After integrating Plaid, you can connect your account on the "Connected Accounts" page and link your financial +institution. Before importing transactions, ensure to run the following command to process the queued transactions: ```bash php artisan queue:work --queue=transactions @@ -243,7 +247,6 @@ The testing process automatically handles refreshing and seeding the test databa migration is required. For more information on how to write and run tests using Pest, refer to the official documentation: [Pest Documentation](https://pestphp.com/docs). - ## Dependencies - [filamentphp/filament](https://github.com/filamentphp/filament) - A collection of beautiful full-stack components @@ -254,7 +257,8 @@ Pest, refer to the official documentation: [Pest Documentation](https://pestphp. - [akaunting/laravel-money](https://github.com/akaunting/laravel-money) - Currency formatting and conversion package for Laravel - [squirephp/squire](https://github.com/squirephp/squire) - A library of static Eloquent models for common fixture data -- [awcodes/filament-table-repeater](https://github.com/awcodes/filament-table-repeater) - A modified version of the Filament Forms Repeater to display it as a table. +- [awcodes/filament-table-repeater](https://github.com/awcodes/filament-table-repeater) - A modified version of the + Filament Forms Repeater to display it as a table. ***Note*** : It is recommended to read the documentation for all dependencies to get yourself familiar with how the application works. diff --git a/app/Concerns/NotifiesOnDelete.php b/app/Concerns/NotifiesOnDelete.php index b7f22cb3..bb9360d7 100644 --- a/app/Concerns/NotifiesOnDelete.php +++ b/app/Concerns/NotifiesOnDelete.php @@ -14,7 +14,7 @@ public static function notifyBeforeDelete(Model $record, string $reason): void Notification::make() ->danger() - ->title(translate('Action Denied')) + ->title(translate('Action denied')) ->body(translate(':Name cannot be deleted because it is :reason. Please update settings before deletion.', [ 'Name' => $record->getAttribute('name'), 'reason' => $reason, @@ -37,7 +37,7 @@ public static function notifyBeforeDeleteMultiple(Collection $records, string $r Notification::make() ->danger() - ->title(translate('Action Denied')) + ->title(translate('Action denied')) ->body($message) ->persistent() ->send(); diff --git a/app/Contracts/MoneyFormattableDTO.php b/app/Contracts/MoneyFormattableDTO.php new file mode 100644 index 00000000..7f9bf6e9 --- /dev/null +++ b/app/Contracts/MoneyFormattableDTO.php @@ -0,0 +1,8 @@ + $periods + */ + public function __construct( + public string $current, + public array $periods, + public string $overPeriods, + public string $total, + ) {} + + public static function fromArray(array $balances): static + { + $periods = []; + + // Extract all period balances + foreach ($balances as $key => $value) { + if (str_starts_with($key, 'period_')) { + $periods[$key] = $value; + unset($balances[$key]); + } + } + + return new static( + current: $balances['current'], + periods: $periods, + overPeriods: $balances['over_periods'], + total: $balances['total'], + ); + } +} diff --git a/app/DTO/ClientReportDTO.php b/app/DTO/ClientReportDTO.php new file mode 100644 index 00000000..32bdabb7 --- /dev/null +++ b/app/DTO/ClientReportDTO.php @@ -0,0 +1,12 @@ +name; + } + + public function getReportTitle(): string + { + return match ($this) { + self::Client => 'Accounts Receivable Aging', + self::Vendor => 'Accounts Payable Aging', + }; + } +} diff --git a/app/Enums/Setting/RecordsPerPage.php b/app/Enums/Setting/RecordsPerPage.php deleted file mode 100644 index 8ea42813..00000000 --- a/app/Enums/Setting/RecordsPerPage.php +++ /dev/null @@ -1,23 +0,0 @@ -value; - - public function getLabel(): ?string - { - return (string) $this->value; - } -} diff --git a/app/Enums/Setting/TableSortDirection.php b/app/Enums/Setting/TableSortDirection.php deleted file mode 100644 index e66edd2d..00000000 --- a/app/Enums/Setting/TableSortDirection.php +++ /dev/null @@ -1,18 +0,0 @@ -value; - - public function getLabel(): ?string - { - return translate($this->name); - } -} diff --git a/app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php b/app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php index 3848900b..a4644c52 100644 --- a/app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php +++ b/app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php @@ -113,11 +113,11 @@ protected function getTimezoneChangeNotification(): Notification { return Notification::make() ->info() - ->title('Timezone Update Required') + ->title('Timezone update required') ->body('You have changed your country or state. Please update your timezone to ensure accurate date and time information.') ->actions([ \Filament\Notifications\Actions\Action::make('updateTimezone') - ->label('Update Timezone') + ->label('Update timezone') ->url(Localization::getUrl()), ]) ->persistent() @@ -187,7 +187,7 @@ protected function getNeedsAddressCompletionAlert(): Component { return Banner::make('needsAddressCompletion') ->warning() - ->title('Address Information Incomplete') + ->title('Address information incomplete') ->description('Please complete the required address information for proper business operations.') ->visible(fn (CompanyProfileModel $record) => $record->address->isIncomplete()) ->columnSpanFull(); diff --git a/app/Filament/Company/Clusters/Settings/Pages/Invoice.php b/app/Filament/Company/Clusters/Settings/Pages/Invoice.php index e62a5a80..1c324fe9 100644 --- a/app/Filament/Company/Clusters/Settings/Pages/Invoice.php +++ b/app/Filament/Company/Clusters/Settings/Pages/Invoice.php @@ -168,7 +168,7 @@ protected function getContentSection(): Component ->localizeLabel() ->nullable(), Textarea::make('footer') - ->localizeLabel('Footer / Notes') + ->localizeLabel('Footer') ->nullable(), ])->columns(); } @@ -222,7 +222,7 @@ protected function getTemplateSection(): Component ->options(Template::class), Select::make('item_name.option') ->softRequired() - ->localizeLabel('Item Name') + ->localizeLabel('Item name') ->options(InvoiceModel::getAvailableItemNameOptions()) ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) { if ($state !== 'other' && $old === 'other' && filled($get('item_name.custom'))) { @@ -240,7 +240,7 @@ protected function getTemplateSection(): Component ->nullable(), Select::make('unit_name.option') ->softRequired() - ->localizeLabel('Unit Name') + ->localizeLabel('Unit name') ->options(InvoiceModel::getAvailableUnitNameOptions()) ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) { if ($state !== 'other' && $old === 'other' && filled($get('unit_name.custom'))) { @@ -258,7 +258,7 @@ protected function getTemplateSection(): Component ->nullable(), Select::make('price_name.option') ->softRequired() - ->localizeLabel('Price Name') + ->localizeLabel('Price name') ->options(InvoiceModel::getAvailablePriceNameOptions()) ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) { if ($state !== 'other' && $old === 'other' && filled($get('price_name.custom'))) { @@ -276,7 +276,7 @@ protected function getTemplateSection(): Component ->nullable(), Select::make('amount_name.option') ->softRequired() - ->localizeLabel('Amount Name') + ->localizeLabel('Amount name') ->options(InvoiceModel::getAvailableAmountNameOptions()) ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) { if ($state !== 'other' && $old === 'other' && filled($get('amount_name.custom'))) { diff --git a/app/Filament/Company/Clusters/Settings/Pages/Localization.php b/app/Filament/Company/Clusters/Settings/Pages/Localization.php index 45b3708d..6d692217 100644 --- a/app/Filament/Company/Clusters/Settings/Pages/Localization.php +++ b/app/Filament/Company/Clusters/Settings/Pages/Localization.php @@ -157,9 +157,9 @@ protected function getDateAndTimeSection(): Component protected function getFinancialAndFiscalSection(): Component { - $beforeNumber = translate('Before Number'); - $afterNumber = translate('After Number'); - $selectPosition = translate('Select Position'); + $beforeNumber = translate('Before number'); + $afterNumber = translate('After number'); + $selectPosition = translate('Select position'); return Section::make('Financial & Fiscal') ->schema([ @@ -169,7 +169,7 @@ protected function getFinancialAndFiscalSection(): Component ->options(NumberFormat::class), Select::make('percent_first') ->softRequired() - ->localizeLabel('Percent Position') + ->localizeLabel('Percent position') ->boolean($beforeNumber, $afterNumber, $selectPosition), Group::make() ->schema([ @@ -197,7 +197,7 @@ protected function getFinancialAndFiscalSection(): Component ->columnSpan(2) ->required() ->markAsRequired(false) - ->label('Fiscal Year End'), + ->label('Fiscal year end'), ])->columns(3), ])->columns(); } diff --git a/app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php b/app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php index 7d73a8e3..c1c19e3a 100644 --- a/app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php +++ b/app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php @@ -27,7 +27,7 @@ class CurrencyResource extends Resource protected static ?string $model = CurrencyModel::class; - protected static ?string $modelLabel = 'Currency'; + protected static ?string $modelLabel = 'currency'; protected static ?string $cluster = Settings::class; @@ -88,11 +88,11 @@ public static function form(Form $form): Form ->maxLength(5) ->required(), Forms\Components\Select::make('symbol_first') - ->localizeLabel('Symbol Position') - ->boolean(translate('Before Amount'), translate('After Amount'), translate('Select a symbol position')) + ->localizeLabel('Symbol position') + ->boolean(translate('Before amount'), translate('After amount'), translate('Select a symbol position')) ->required(), Forms\Components\TextInput::make('decimal_mark') - ->localizeLabel('Decimal Separator') + ->localizeLabel('Decimal separator') ->maxLength(1) ->rule(static function (Forms\Get $get): Closure { return static function ($attribute, $value, Closure $fail) use ($get) { @@ -126,8 +126,8 @@ public static function table(Table $table): Table ->weight(FontWeight::Medium) ->icon(static fn (CurrencyModel $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null) ->tooltip(static function (CurrencyModel $record) { - $tooltipMessage = translate('Default :Record', [ - 'Record' => static::getModelLabel(), + $tooltipMessage = translate('Default :record', [ + 'record' => static::getModelLabel(), ]); return $record->isEnabled() ? $tooltipMessage : null; diff --git a/app/Filament/Company/Pages/Accounting/AccountChart.php b/app/Filament/Company/Pages/Accounting/AccountChart.php index 5f959f7c..b1558227 100644 --- a/app/Filament/Company/Pages/Accounting/AccountChart.php +++ b/app/Filament/Company/Pages/Accounting/AccountChart.php @@ -163,7 +163,7 @@ protected function getDescriptionFormComponent(): Component protected function getArchiveFormComponent(): Component { return Checkbox::make('archived') - ->label('Archive Account') + ->label('Archive account') ->helperText('Archived accounts will not be available for selection in transactions.') ->hidden(static function (string $operation): bool { return $operation === 'create'; @@ -186,7 +186,7 @@ protected function getHeaderActions(): array return [ CreateAction::make() ->button() - ->label('Add New Account') + ->label('Add new account') ->model(Account::class) ->form(fn (Form $form) => $this->getChartForm($form, false)->operation('create')), ]; diff --git a/app/Filament/Company/Pages/Accounting/Transactions.php b/app/Filament/Company/Pages/Accounting/Transactions.php index b29643e2..6695a2c3 100644 --- a/app/Filament/Company/Pages/Accounting/Transactions.php +++ b/app/Filament/Company/Pages/Accounting/Transactions.php @@ -95,10 +95,10 @@ public function getMaxContentWidth(): MaxWidth | string | null protected function getHeaderActions(): array { return [ - $this->buildTransactionAction('addIncome', 'Add Income', TransactionType::Deposit), - $this->buildTransactionAction('addExpense', 'Add Expense', TransactionType::Withdrawal), + $this->buildTransactionAction('addIncome', 'Add income', TransactionType::Deposit), + $this->buildTransactionAction('addExpense', 'Add expense', TransactionType::Withdrawal), Actions\CreateAction::make('addTransfer') - ->label('Add Transfer') + ->label('Add transfer') ->modalHeading('Add Transfer') ->modalWidth(MaxWidth::ThreeExtraLarge) ->model(static::getModel()) @@ -108,7 +108,7 @@ protected function getHeaderActions(): array ->outlined(), Actions\ActionGroup::make([ Actions\CreateAction::make('addJournalTransaction') - ->label('Add Journal Transaction') + ->label('Add journal transaction') ->fillForm(fn (): array => $this->getFormDefaultsForType(TransactionType::Journal)) ->modalWidth(MaxWidth::Screen) ->model(static::getModel()) @@ -120,7 +120,7 @@ protected function getHeaderActions(): array ->afterFormFilled(fn () => $this->resetJournalEntryAmounts()) ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced()), Actions\Action::make('connectBank') - ->label('Connect Your Bank') + ->label('Connect your bank') ->url(ConnectedAccount::getUrl()), ]) ->label('More') @@ -144,7 +144,7 @@ public function transferForm(Form $form): Form Forms\Components\TextInput::make('description') ->label('Description'), Forms\Components\Select::make('bank_account_id') - ->label('From Account') + ->label('From account') ->options(fn (Get $get, ?Transaction $transaction) => $this->getBankAccountOptions(excludedAccountId: $get('account_id'), currentBankAccountId: $transaction?->bank_account_id)) ->live() ->searchable() @@ -173,7 +173,7 @@ public function transferForm(Form $form): Form ->money(static fn (Forms\Get $get) => BankAccount::find($get('bank_account_id'))?->account?->currency_code ?? CurrencyAccessor::getDefaultCurrency()) ->required(), Forms\Components\Select::make('account_id') - ->label('To Account') + ->label('To account') ->live() ->options(fn (Get $get, ?Transaction $transaction) => $this->getBankAccountAccountOptions(excludedBankAccountId: $get('bank_account_id'), currentAccountId: $transaction?->account_id)) ->searchable() @@ -328,7 +328,7 @@ public function table(Table $table): Table ->native(false) ->options(TransactionType::class), $this->buildDateRangeFilter('posted_at', 'Posted', true), - $this->buildDateRangeFilter('updated_at', 'Last Modified'), + $this->buildDateRangeFilter('updated_at', 'Last modified'), ]) ->filtersFormSchema(fn (array $filters): array => [ Grid::make() @@ -361,7 +361,7 @@ public function table(Table $table): Table ->close() ->color('gray'), Tables\Actions\Action::make('resetFilters') - ->label(__('Clear All')) + ->label(__('Clear all')) ->color('primary') ->link() ->extraAttributes([ @@ -373,7 +373,7 @@ public function table(Table $table): Table ) ->actions([ Tables\Actions\Action::make('markAsReviewed') - ->label('Mark as Reviewed') + ->label('Mark as reviewed') ->view('filament.company.components.tables.actions.mark-as-reviewed') ->icon(static fn (Transaction $transaction) => $transaction->reviewed ? 'heroicon-s-check-circle' : 'heroicon-o-check-circle') ->color(static fn (Transaction $transaction, Tables\Actions\Action $action) => match (static::determineTransactionState($transaction, $action)) { @@ -383,55 +383,57 @@ public function table(Table $table): Table }) ->tooltip(static fn (Transaction $transaction, Tables\Actions\Action $action) => match (static::determineTransactionState($transaction, $action)) { 'reviewed' => 'Reviewed', - 'unreviewed' => 'Mark as Reviewed', + 'unreviewed' => 'Mark as reviewed', 'uncategorized' => 'Categorize first to mark as reviewed', }) ->disabled(fn (Transaction $transaction): bool => $transaction->isUncategorized()) ->action(fn (Transaction $transaction) => $transaction->update(['reviewed' => ! $transaction->reviewed])), Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make('updateTransaction') - ->label('Edit Transaction') - ->modalHeading('Edit Transaction') - ->modalWidth(MaxWidth::ThreeExtraLarge) - ->form(fn (Form $form) => $this->transactionForm($form)) - ->visible(static fn (Transaction $transaction) => $transaction->type->isStandard()), - Tables\Actions\EditAction::make('updateTransfer') - ->label('Edit Transfer') - ->modalHeading('Edit Transfer') - ->modalWidth(MaxWidth::ThreeExtraLarge) - ->form(fn (Form $form) => $this->transferForm($form)) - ->visible(static fn (Transaction $transaction) => $transaction->type->isTransfer()), - Tables\Actions\EditAction::make('updateJournalTransaction') - ->label('Edit Journal Transaction') - ->modalHeading('Journal Entry') - ->modalWidth(MaxWidth::Screen) - ->form(fn (Form $form) => $this->journalTransactionForm($form)) - ->afterFormFilled(function (Transaction $transaction) { - $debitAmounts = $transaction->journalEntries->sumDebits()->getAmount(); - $creditAmounts = $transaction->journalEntries->sumCredits()->getAmount(); - - $this->setDebitAmount($debitAmounts); - $this->setCreditAmount($creditAmounts); - }) - ->modalSubmitAction(fn (Actions\StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced())) - ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced()) - ->visible(static fn (Transaction $transaction) => $transaction->type->isJournal()), + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make('editTransaction') + ->label('Edit transaction') + ->modalHeading('Edit Transaction') + ->modalWidth(MaxWidth::ThreeExtraLarge) + ->form(fn (Form $form) => $this->transactionForm($form)) + ->visible(static fn (Transaction $transaction) => $transaction->type->isStandard()), + Tables\Actions\EditAction::make('editTransfer') + ->label('Edit transfer') + ->modalHeading('Edit Transfer') + ->modalWidth(MaxWidth::ThreeExtraLarge) + ->form(fn (Form $form) => $this->transferForm($form)) + ->visible(static fn (Transaction $transaction) => $transaction->type->isTransfer()), + Tables\Actions\EditAction::make('editJournalTransaction') + ->label('Edit journal transaction') + ->modalHeading('Journal Entry') + ->modalWidth(MaxWidth::Screen) + ->form(fn (Form $form) => $this->journalTransactionForm($form)) + ->afterFormFilled(function (Transaction $transaction) { + $debitAmounts = $transaction->journalEntries->sumDebits()->getAmount(); + $creditAmounts = $transaction->journalEntries->sumCredits()->getAmount(); + + $this->setDebitAmount($debitAmounts); + $this->setCreditAmount($creditAmounts); + }) + ->modalSubmitAction(fn (Actions\StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced())) + ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced()) + ->visible(static fn (Transaction $transaction) => $transaction->type->isJournal()), + Tables\Actions\ReplicateAction::make() + ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at']) + ->modal(false) + ->beforeReplicaSaved(static function (Transaction $replica) { + $replica->description = '(Copy of) ' . $replica->description; + }) + ->after(static function (Transaction $original, Transaction $replica) { + $original->journalEntries->each(function (JournalEntry $entry) use ($replica) { + $entry->replicate([ + 'transaction_id', + ])->fill([ + 'transaction_id' => $replica->id, + ])->save(); + }); + }), + ])->dropdown(false), Tables\Actions\DeleteAction::make(), - Tables\Actions\ReplicateAction::make() - ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at']) - ->modal(false) - ->beforeReplicaSaved(static function (Transaction $replica) { - $replica->description = '(Copy of) ' . $replica->description; - }) - ->after(static function (Transaction $original, Transaction $replica) { - $original->journalEntries->each(function (JournalEntry $entry) use ($replica) { - $entry->replicate([ - 'transaction_id', - ])->fill([ - 'transaction_id' => $replica->id, - ])->save(); - }); - }), ]), ]) ->bulkActions([ @@ -441,8 +443,8 @@ public function table(Table $table): Table ->label('Replicate') ->modalWidth(MaxWidth::Large) ->modalDescription('Replicating transactions will also replicate their journal entries. Are you sure you want to proceed?') - ->successNotificationTitle('Transactions Replicated Successfully') - ->failureNotificationTitle('Failed to Replicate Transactions') + ->successNotificationTitle('Transactions replicated successfully') + ->failureNotificationTitle('Failed to replicate transactions') ->deselectRecordsAfterCompletion() ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at']) ->beforeReplicaSaved(static function (Transaction $replica) { @@ -649,7 +651,7 @@ protected function buildAddJournalEntryAction(JournalEntryType $type): FormActio $typeLabel = $type->getLabel(); return FormAction::make("add{$typeLabel}Entry") - ->label("Add {$typeLabel} Entry") + ->label("Add {$typeLabel} entry") ->button() ->outlined() ->color($type->isDebit() ? 'primary' : 'gray') @@ -695,13 +697,13 @@ protected function buildDateRangeFilter(string $fieldPrefix, string $label, bool ->startDateField("{$fieldPrefix}_start_date") ->endDateField("{$fieldPrefix}_end_date"), DatePicker::make("{$fieldPrefix}_start_date") - ->label("{$label} From") + ->label("{$label} from") ->columnStart(1) ->afterStateUpdated(static function (Set $set) use ($fieldPrefix) { $set("{$fieldPrefix}_date_range", 'Custom'); }), DatePicker::make("{$fieldPrefix}_end_date") - ->label("{$label} To") + ->label("{$label} to") ->afterStateUpdated(static function (Set $set) use ($fieldPrefix) { $set("{$fieldPrefix}_date_range", 'Custom'); }), diff --git a/app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php b/app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php index afceed87..23578931 100644 --- a/app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php +++ b/app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php @@ -79,7 +79,7 @@ public function applyFilters(): void public function applyFiltersAction(): Action { return Action::make('applyFilters') - ->label('Update Report') + ->label('Update report') ->action('applyFilters') ->keyBindings(['mod+s']) ->button(); diff --git a/app/Filament/Company/Pages/CreateCompany.php b/app/Filament/Company/Pages/CreateCompany.php index b10b1bb7..fcec9f9a 100644 --- a/app/Filament/Company/Pages/CreateCompany.php +++ b/app/Filament/Company/Pages/CreateCompany.php @@ -55,11 +55,11 @@ public function form(Form $form): Form ->maxLength(255) ->softRequired(), TextInput::make('profile.email') - ->label('Company Email') + ->label('Company email') ->email() ->softRequired(), Select::make('profile.entity_type') - ->label('Entity Type') + ->label('Entity type') ->options(EntityType::class) ->softRequired(), Select::make('profile.country') diff --git a/app/Filament/Company/Pages/Reports.php b/app/Filament/Company/Pages/Reports.php index 896aea6a..deeefc7e 100644 --- a/app/Filament/Company/Pages/Reports.php +++ b/app/Filament/Company/Pages/Reports.php @@ -3,6 +3,8 @@ namespace App\Filament\Company\Pages; use App\Filament\Company\Pages\Reports\AccountBalances; +use App\Filament\Company\Pages\Reports\AccountsPayableAging; +use App\Filament\Company\Pages\Reports\AccountsReceivableAging; use App\Filament\Company\Pages\Reports\AccountTransactions; use App\Filament\Company\Pages\Reports\BalanceSheet; use App\Filament\Company\Pages\Reports\CashFlowStatement; @@ -55,14 +57,14 @@ public function reportsInfolist(Infolist $infolist): Infolist ->heading('Income Statement') ->description('Shows revenue, expenses, and net earnings over a period, indicating overall financial performance.') ->icon('heroicon-o-chart-bar') - ->iconColor(Color::Indigo) + ->iconColor(Color::Purple) ->url(IncomeStatement::getUrl()), ReportEntry::make('balance_sheet') ->hiddenLabel() ->heading('Balance Sheet') ->description('Displays your company’s assets, liabilities, and equity at a single point in time, showing overall financial health and stability.') ->icon('heroicon-o-clipboard-document-list') - ->iconColor(Color::Emerald) + ->iconColor(Color::Teal) ->url(BalanceSheet::getUrl()), ReportEntry::make('cash_flow_statement') ->hiddenLabel() @@ -72,6 +74,46 @@ public function reportsInfolist(Infolist $infolist): Infolist ->iconColor(Color::Cyan) ->url(CashFlowStatement::getUrl()), ]), + Section::make('Customer Reports') + ->aside() + ->description('Reports that provide detailed information on your company’s customer transactions and balances.') + ->extraAttributes(['class' => 'es-report-card']) + ->schema([ + ReportEntry::make('ar_aging') + ->hiddenLabel() + ->heading('Accounts Receivable Aging') + ->description('Lists outstanding receivables by customer, showing how long invoices have been unpaid.') + ->icon('heroicon-o-calendar-date-range') + ->iconColor(Color::Indigo) + ->url(AccountsReceivableAging::getUrl()), + ReportEntry::make('income_by_customer') + ->hiddenLabel() + ->heading('Income by Customer') + ->description('Shows revenue generated by each customer, helping identify top customers and opportunities for growth.') + ->icon('heroicon-o-arrow-trending-up') + ->iconColor(Color::Emerald) + ->url('#'), + ]), + Section::make('Vendor Reports') + ->aside() + ->description('Reports that provide detailed information on your company’s vendor transactions and balances.') + ->extraAttributes(['class' => 'es-report-card']) + ->schema([ + ReportEntry::make('ap_aging') + ->hiddenLabel() + ->heading('Accounts Payable Aging') + ->description('Lists outstanding payables by vendor, showing how long invoices have been unpaid.') + ->icon('heroicon-o-clock') + ->iconColor(Color::Rose) + ->url(AccountsPayableAging::getUrl()), + ReportEntry::make('expenses_by_vendor') + ->hiddenLabel() + ->heading('Expenses by Vendor') + ->description('Shows expenses incurred with each vendor, helping identify top vendors and opportunities for cost savings.') + ->icon('heroicon-o-arrow-trending-down') + ->iconColor(Color::Orange) + ->url('#'), + ]), Section::make('Detailed Reports') ->aside() ->description('Detailed reports that provide a comprehensive view of your company’s financial transactions and account balances.') @@ -81,8 +123,8 @@ public function reportsInfolist(Infolist $infolist): Infolist ->hiddenLabel() ->heading('Account Balances') ->description('Lists all accounts and their balances, including starting, debit, credit, net movement, and ending balances.') - ->icon('heroicon-o-currency-dollar') - ->iconColor(Color::Teal) + ->icon('heroicon-o-calculator') + ->iconColor(Color::Slate) ->url(AccountBalances::getUrl()), ReportEntry::make('trial_balance') ->hiddenLabel() @@ -95,8 +137,8 @@ public function reportsInfolist(Infolist $infolist): Infolist ->hiddenLabel() ->heading('Account Transactions') ->description('A record of all transactions, essential for monitoring and reconciling financial activity in the ledger.') - ->icon('heroicon-o-adjustments-horizontal') - ->iconColor(Color::Amber) + ->icon('heroicon-o-list-bullet') + ->iconColor(Color::Yellow) ->url(AccountTransactions::getUrl()), ]), ]); diff --git a/app/Filament/Company/Pages/Reports/AccountTransactions.php b/app/Filament/Company/Pages/Reports/AccountTransactions.php index c4207960..7fd851a7 100644 --- a/app/Filament/Company/Pages/Reports/AccountTransactions.php +++ b/app/Filament/Company/Pages/Reports/AccountTransactions.php @@ -102,7 +102,7 @@ public function filtersForm(Form $form): Form ->selectablePlaceholder(false), Actions::make([ Actions\Action::make('applyFilters') - ->label('Update Report') + ->label('Update report') ->action('applyFilters') ->keyBindings(['mod+s']) ->button(), @@ -193,7 +193,7 @@ public function getEmptyStateActions(): array { return [ Action::make('createTransaction') - ->label('Create Transaction') + ->label('Create transaction') ->url(Transactions::getUrl()), ]; } diff --git a/app/Filament/Company/Pages/Reports/AccountsPayableAging.php b/app/Filament/Company/Pages/Reports/AccountsPayableAging.php new file mode 100644 index 00000000..66bb85b1 --- /dev/null +++ b/app/Filament/Company/Pages/Reports/AccountsPayableAging.php @@ -0,0 +1,13 @@ +reportService = $reportService; + $this->exportService = $exportService; + } + + protected function initializeDefaultFilters(): void + { + if (empty($this->getFilterState('days_per_period'))) { + $this->setFilterState('days_per_period', 30); + } + + if (empty($this->getFilterState('number_of_periods'))) { + $this->setFilterState('number_of_periods', 4); + } + } + + public function getTable(): array + { + $daysPerPeriod = $this->getFilterState('days_per_period'); + $numberOfPeriods = $this->getFilterState('number_of_periods'); + + $columns = [ + Column::make('entity_name') + ->label($this->getEntityType()->getLabel()) + ->alignment(Alignment::Left), + Column::make('current') + ->label('Current') + ->alignment(Alignment::Right), + ]; + + for ($i = 1; $i < $numberOfPeriods; $i++) { + $start = ($i - 1) * $daysPerPeriod + 1; + $end = $i * $daysPerPeriod; + + $columns[] = Column::make("period_{$i}") + ->label("{$start} to {$end}") + ->alignment(Alignment::Right); + } + + $columns[] = Column::make('over_periods') + ->label('Over ' . (($numberOfPeriods - 1) * $daysPerPeriod)) + ->alignment(Alignment::Right); + + $columns[] = Column::make('total') + ->label('Total') + ->alignment(Alignment::Right); + + return $columns; + } + + public function filtersForm(Form $form): Form + { + return $form + ->columns(4) + ->schema([ + DateRangeSelect::make('dateRange') + ->label('As of') + ->selectablePlaceholder(false) + ->endDateField('asOfDate'), + $this->getAsOfDateFormComponent(), + TextInput::make('days_per_period') + ->label('Days per period') + ->integer() + ->mask(RawJs::make(<<<'JS' + $input > 365 ? '365' : '999' + JS)), + TextInput::make('number_of_periods') + ->label('Number of periods') + ->integer() + ->mask(RawJs::make(<<<'JS' + $input > 10 ? '10' : '99' + JS)), + ]); + } + + protected function buildReport(array $columns): ReportDTO + { + return $this->reportService->buildAgingReport( + $this->getFormattedAsOfDate(), + $this->getEntityType(), + $columns, + $this->getFilterState('days_per_period'), + $this->getFilterState('number_of_periods') + ); + } + + protected function getTransformer(ReportDTO $reportDTO): ExportableReport + { + return new AgingReportTransformer($reportDTO, $this->getEntityType()); + } + + public function exportCSV(): StreamedResponse + { + return $this->exportService->exportToCsv( + $this->company, + $this->report, + endDate: $this->getFilterState('asOfDate') + ); + } + + public function exportPDF(): StreamedResponse + { + return $this->exportService->exportToPdf( + $this->company, + $this->report, + endDate: $this->getFilterState('asOfDate') + ); + } +} diff --git a/app/Filament/Company/Pages/Reports/BaseReportPage.php b/app/Filament/Company/Pages/Reports/BaseReportPage.php index ca6f594d..163b1752 100644 --- a/app/Filament/Company/Pages/Reports/BaseReportPage.php +++ b/app/Filament/Company/Pages/Reports/BaseReportPage.php @@ -243,7 +243,7 @@ protected function getHeaderActions(): array protected function getDateRangeFormComponent(): DateRangeSelect { return DateRangeSelect::make('dateRange') - ->label('Date Range') + ->label('Date range') ->selectablePlaceholder(false) ->startDateField('startDate') ->endDateField('endDate'); @@ -252,7 +252,7 @@ protected function getDateRangeFormComponent(): DateRangeSelect protected function getStartDateFormComponent(): DatePicker { return DatePicker::make('startDate') - ->label('Start Date') + ->label('Start date') ->live() ->afterStateUpdated(static function ($state, Set $set) { $set('dateRange', 'Custom'); @@ -262,7 +262,7 @@ protected function getStartDateFormComponent(): DatePicker protected function getEndDateFormComponent(): DatePicker { return DatePicker::make('endDate') - ->label('End Date') + ->label('End date') ->live() ->afterStateUpdated(static function (Set $set) { $set('dateRange', 'Custom'); @@ -272,7 +272,7 @@ protected function getEndDateFormComponent(): DatePicker protected function getAsOfDateFormComponent(): DatePicker { return DatePicker::make('asOfDate') - ->label('As of Date') + ->label('As of date') ->live() ->afterStateUpdated(static function (Set $set) { $set('dateRange', 'Custom'); diff --git a/app/Filament/Company/Pages/Reports/TrialBalance.php b/app/Filament/Company/Pages/Reports/TrialBalance.php index e9b78552..105791d7 100644 --- a/app/Filament/Company/Pages/Reports/TrialBalance.php +++ b/app/Filament/Company/Pages/Reports/TrialBalance.php @@ -60,7 +60,7 @@ public function filtersForm(Form $form): Form ->columns(4) ->schema([ Select::make('reportType') - ->label('Report Type') + ->label('Report type') ->options([ 'standard' => 'Standard', 'postClosing' => 'Post-Closing', diff --git a/app/Filament/Company/Pages/Service/ConnectedAccount.php b/app/Filament/Company/Pages/Service/ConnectedAccount.php index 0eb92dbf..1120360d 100644 --- a/app/Filament/Company/Pages/Service/ConnectedAccount.php +++ b/app/Filament/Company/Pages/Service/ConnectedAccount.php @@ -29,7 +29,7 @@ protected function getHeaderActions(): array { return [ Action::make('connect') - ->label('Connect Account') + ->label('Connect account') ->dispatch('createToken'), ]; } diff --git a/app/Filament/Company/Resources/Banking/AccountResource.php b/app/Filament/Company/Resources/Banking/AccountResource.php index 1cc12f5d..089ecf58 100644 --- a/app/Filament/Company/Resources/Banking/AccountResource.php +++ b/app/Filament/Company/Resources/Banking/AccountResource.php @@ -25,7 +25,7 @@ class AccountResource extends Resource { protected static ?string $model = BankAccount::class; - protected static ?string $modelLabel = 'Account'; + protected static ?string $modelLabel = 'account'; public static function getModelLabel(): string { @@ -89,7 +89,7 @@ public static function form(Form $form): Form ->columnSpanFull() ->schema([ Forms\Components\TextInput::make('number') - ->localizeLabel('Account Number') + ->localizeLabel('Account number') ->unique(ignoreRecord: true, modifyRuleUsing: static function (Unique $rule, $state) { $companyId = Auth::user()->currentCompany->id; @@ -127,7 +127,7 @@ public static function table(Table $table): Table ->sortable() ->toggleable(), Tables\Columns\TextColumn::make('account.ending_balance') - ->localizeLabel('Ending Balance') + ->localizeLabel('Ending balance') ->state(static fn (BankAccount $record) => $record->account->ending_balance->convert()->formatWithCode()) ->toggleable() ->alignment(Alignment::End), diff --git a/app/Filament/Company/Resources/Common/OfferingResource.php b/app/Filament/Company/Resources/Common/OfferingResource.php index 8008f467..b91242ff 100644 --- a/app/Filament/Company/Resources/Common/OfferingResource.php +++ b/app/Filament/Company/Resources/Common/OfferingResource.php @@ -22,8 +22,6 @@ class OfferingResource extends Resource { protected static ?string $model = Offering::class; - protected static ?string $modelLabel = 'Offering'; - protected static ?string $navigationIcon = 'heroicon-o-square-3-stack-3d'; public static function form(Form $form): Form @@ -68,7 +66,7 @@ public static function form(Form $form): Form Forms\Components\Section::make('Sale Information') ->schema([ Forms\Components\Select::make('income_account_id') - ->label('Income Account') + ->label('Income account') ->options(Account::query() ->where('category', AccountCategory::Revenue) ->where('type', AccountType::OperatingRevenue) @@ -81,12 +79,12 @@ public static function form(Form $form): Form 'required' => 'The income account is required for sellable offerings.', ]), Forms\Components\Select::make('salesTaxes') - ->label('Sales Tax') + ->label('Sales tax') ->relationship('salesTaxes', 'name') ->preload() ->multiple(), Forms\Components\Select::make('salesDiscounts') - ->label('Sales Discount') + ->label('Sales discount') ->relationship('salesDiscounts', 'name') ->preload() ->multiple(), @@ -98,7 +96,7 @@ public static function form(Form $form): Form Forms\Components\Section::make('Purchase Information') ->schema([ Forms\Components\Select::make('expense_account_id') - ->label('Expense Account') + ->label('Expense account') ->options(Account::query() ->where('category', AccountCategory::Expense) ->where('type', AccountType::OperatingExpense) @@ -112,12 +110,12 @@ public static function form(Form $form): Form 'required' => 'The expense account is required for purchasable offerings.', ]), Forms\Components\Select::make('purchaseTaxes') - ->label('Purchase Tax') + ->label('Purchase tax') ->relationship('purchaseTaxes', 'name') ->preload() ->multiple(), Forms\Components\Select::make('purchaseDiscounts') - ->label('Purchase Discount') + ->label('Purchase discount') ->relationship('purchaseDiscounts', 'name') ->preload() ->multiple(), diff --git a/app/Filament/Company/Resources/Core/DepartmentResource.php b/app/Filament/Company/Resources/Core/DepartmentResource.php index 1a820113..f80fa900 100644 --- a/app/Filament/Company/Resources/Core/DepartmentResource.php +++ b/app/Filament/Company/Resources/Core/DepartmentResource.php @@ -56,7 +56,7 @@ public static function form(Form $form): Form Forms\Components\Group::make() ->schema([ Forms\Components\Select::make('parent_id') - ->localizeLabel('Parent Department') + ->localizeLabel('Parent department') ->relationship('parent', 'name') ->preload() ->searchable() diff --git a/app/Filament/Company/Resources/Purchases/BillResource.php b/app/Filament/Company/Resources/Purchases/BillResource.php index ab56f71c..220ce1a9 100644 --- a/app/Filament/Company/Resources/Purchases/BillResource.php +++ b/app/Filament/Company/Resources/Purchases/BillResource.php @@ -71,26 +71,26 @@ public static function form(Form $form): Form ]), Forms\Components\Group::make([ Forms\Components\TextInput::make('bill_number') - ->label('Bill Number') + ->label('Bill number') ->default(fn () => Bill::getNextDocumentNumber()) ->required(), Forms\Components\TextInput::make('order_number') ->label('P.O/S.O Number'), Forms\Components\DatePicker::make('date') - ->label('Bill Date') + ->label('Bill date') ->default(now()) ->disabled(function (?Bill $record) { return $record?->hasPayments(); }) ->required(), Forms\Components\DatePicker::make('due_date') - ->label('Due Date') + ->label('Due date') ->default(function () use ($company) { return now()->addDays($company->defaultBill->payment_terms->getDays()); }) ->required(), Forms\Components\Select::make('discount_method') - ->label('Discount Method') + ->label('Discount method') ->options(DocumentDiscountMethod::class) ->selectablePlaceholder(false) ->default(DocumentDiscountMethod::PerLineItem) @@ -260,12 +260,12 @@ public static function table(Table $table): Table ->sortable() ->toggleable(), Tables\Columns\TextColumn::make('amount_paid') - ->label('Amount Paid') + ->label('Amount paid') ->currencyWithConversion(static fn (Bill $record) => $record->currency_code) ->sortable() ->toggleable(), Tables\Columns\TextColumn::make('amount_due') - ->label('Amount Due') + ->label('Amount due') ->currencyWithConversion(static fn (Bill $record) => $record->currency_code) ->sortable(), ]) @@ -278,99 +278,101 @@ public static function table(Table $table): Table ->options(BillStatus::class) ->native(false), Tables\Filters\TernaryFilter::make('has_payments') - ->label('Has Payments') + ->label('Has payments') ->queries( true: fn (Builder $query) => $query->whereHas('payments'), false: fn (Builder $query) => $query->whereDoesntHave('payments'), ), DateRangeFilter::make('date') - ->fromLabel('From Date') - ->untilLabel('To Date') + ->fromLabel('From date') + ->untilLabel('To date') ->indicatorLabel('Date'), DateRangeFilter::make('due_date') - ->fromLabel('From Due Date') - ->untilLabel('To Due Date') + ->fromLabel('From due date') + ->untilLabel('To due date') ->indicatorLabel('Due'), ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make(), - Tables\Actions\ViewAction::make(), - Tables\Actions\DeleteAction::make(), - Bill::getReplicateAction(Tables\Actions\ReplicateAction::class), - Tables\Actions\Action::make('recordPayment') - ->label('Record Payment') - ->stickyModalHeader() - ->stickyModalFooter() - ->modalFooterActionsAlignment(Alignment::End) - ->modalWidth(MaxWidth::TwoExtraLarge) - ->icon('heroicon-o-credit-card') - ->visible(function (Bill $record) { - return $record->canRecordPayment(); - }) - ->mountUsing(function (Bill $record, Form $form) { - $form->fill([ - 'posted_at' => now(), - 'amount' => $record->amount_due, - ]); - }) - ->databaseTransaction() - ->successNotificationTitle('Payment Recorded') - ->form([ - Forms\Components\DatePicker::make('posted_at') - ->label('Date'), - Forms\Components\TextInput::make('amount') - ->label('Amount') - ->required() - ->money(fn (Bill $record) => $record->currency_code) - ->live(onBlur: true) - ->helperText(function (Bill $record, $state) { - $billCurrency = $record->currency_code; - if (! CurrencyConverter::isValidAmount($state, $billCurrency)) { - return null; - } - - $amountDue = $record->getRawOriginal('amount_due'); - $amount = CurrencyConverter::convertToCents($state, $billCurrency); - - if ($amount <= 0) { - return 'Please enter a valid positive amount'; - } - - $newAmountDue = $amountDue - $amount; - - return match (true) { - $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $billCurrency), - $newAmountDue === 0 => 'Bill will be fully paid', - default => 'Amount exceeds bill total by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $billCurrency), - }; - }) - ->rules([ - static fn (Bill $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) { - if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) { - $fail('Please enter a valid amount'); + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make(), + Tables\Actions\ViewAction::make(), + Bill::getReplicateAction(Tables\Actions\ReplicateAction::class), + Tables\Actions\Action::make('recordPayment') + ->label('Record payment') + ->stickyModalHeader() + ->stickyModalFooter() + ->modalFooterActionsAlignment(Alignment::End) + ->modalWidth(MaxWidth::TwoExtraLarge) + ->icon('heroicon-o-credit-card') + ->visible(function (Bill $record) { + return $record->canRecordPayment(); + }) + ->mountUsing(function (Bill $record, Form $form) { + $form->fill([ + 'posted_at' => now(), + 'amount' => $record->amount_due, + ]); + }) + ->databaseTransaction() + ->successNotificationTitle('Payment recorded') + ->form([ + Forms\Components\DatePicker::make('posted_at') + ->label('Date'), + Forms\Components\TextInput::make('amount') + ->label('Amount') + ->required() + ->money(fn (Bill $record) => $record->currency_code) + ->live(onBlur: true) + ->helperText(function (Bill $record, $state) { + $billCurrency = $record->currency_code; + if (! CurrencyConverter::isValidAmount($state, $billCurrency)) { + return null; } - }, - ]), - Forms\Components\Select::make('payment_method') - ->label('Payment Method') - ->required() - ->options(PaymentMethod::class), - Forms\Components\Select::make('bank_account_id') - ->label('Account') - ->required() - ->options(BankAccount::query() - ->get() - ->pluck('account.name', 'id')) - ->searchable(), - Forms\Components\Textarea::make('notes') - ->label('Notes'), - ]) - ->action(function (Bill $record, Tables\Actions\Action $action, array $data) { - $record->recordPayment($data); - $action->success(); - }), + $amountDue = $record->getRawOriginal('amount_due'); + $amount = CurrencyConverter::convertToCents($state, $billCurrency); + + if ($amount <= 0) { + return 'Please enter a valid positive amount'; + } + + $newAmountDue = $amountDue - $amount; + + return match (true) { + $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $billCurrency), + $newAmountDue === 0 => 'Bill will be fully paid', + default => 'Amount exceeds bill total by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $billCurrency), + }; + }) + ->rules([ + static fn (Bill $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) { + if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) { + $fail('Please enter a valid amount'); + } + }, + ]), + Forms\Components\Select::make('payment_method') + ->label('Payment method') + ->required() + ->options(PaymentMethod::class), + Forms\Components\Select::make('bank_account_id') + ->label('Account') + ->required() + ->options(BankAccount::query() + ->get() + ->pluck('account.name', 'id')) + ->searchable(), + Forms\Components\Textarea::make('notes') + ->label('Notes'), + ]) + ->action(function (Bill $record, Tables\Actions\Action $action, array $data) { + $record->recordPayment($data); + + $action->success(); + }), + ])->dropdown(false), + Tables\Actions\DeleteAction::make(), ]), ]) ->bulkActions([ @@ -380,8 +382,8 @@ public static function table(Table $table): Table ->label('Replicate') ->modalWidth(MaxWidth::Large) ->modalDescription('Replicating bills will also replicate their line items. Are you sure you want to proceed?') - ->successNotificationTitle('Bills Replicated Successfully') - ->failureNotificationTitle('Failed to Replicate Bills') + ->successNotificationTitle('Bills replicated successfully') + ->failureNotificationTitle('Failed to replicate bills') ->databaseTransaction() ->deselectRecordsAfterCompletion() ->excludeAttributes([ @@ -413,22 +415,22 @@ public static function table(Table $table): Table 'updated_at', ]), Tables\Actions\BulkAction::make('recordPayments') - ->label('Record Payments') + ->label('Record payments') ->icon('heroicon-o-credit-card') ->stickyModalHeader() ->stickyModalFooter() ->modalFooterActionsAlignment(Alignment::End) ->modalWidth(MaxWidth::TwoExtraLarge) ->databaseTransaction() - ->successNotificationTitle('Payments Recorded') - ->failureNotificationTitle('Failed to Record Payments') + ->successNotificationTitle('Payments recorded') + ->failureNotificationTitle('Failed to record payments') ->deselectRecordsAfterCompletion() ->beforeFormFilled(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Bill $bill) => ! $bill->canRecordPayment()); if ($isInvalid) { Notification::make() - ->title('Payment Recording Failed') + ->title('Payment recording failed') ->body('Bills that are either paid, voided, or are in a foreign currency cannot be processed through bulk payments. Please adjust your selection and try again.') ->persistent() ->danger() @@ -460,7 +462,7 @@ public static function table(Table $table): Table }, ]), Forms\Components\Select::make('payment_method') - ->label('Payment Method') + ->label('Payment method') ->required() ->options(PaymentMethod::class), Forms\Components\Select::make('bank_account_id') @@ -481,7 +483,7 @@ public static function table(Table $table): Table $formattedTotalAmountDue = CurrencyConverter::formatCentsToMoney($totalAmountDue); Notification::make() - ->title('Excess Payment Amount') + ->title('Excess payment amount') ->body("The payment amount exceeds the total amount due of {$formattedTotalAmountDue}. Please adjust the payment amount and try again.") ->persistent() ->warning() diff --git a/app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php b/app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php index 36aa2e87..b5e000ab 100644 --- a/app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php +++ b/app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php @@ -25,10 +25,14 @@ class ViewBill extends ViewRecord protected function getHeaderActions(): array { return [ + Actions\EditAction::make() + ->label('Edit bill') + ->outlined(), Actions\ActionGroup::make([ - Actions\EditAction::make(), + Actions\ActionGroup::make([ + Bill::getReplicateAction(), + ])->dropdown(false), Actions\DeleteAction::make(), - Bill::getReplicateAction(), ]) ->label('Actions') ->button() @@ -60,7 +64,7 @@ public function infolist(Infolist $infolist): Infolist ->label('Total') ->money(), TextEntry::make('amount_due') - ->label('Amount Due') + ->label('Amount due') ->money(), TextEntry::make('date') ->label('Date') @@ -69,7 +73,7 @@ public function infolist(Infolist $infolist): Infolist ->label('Due') ->asRelativeDay(), TextEntry::make('paid_at') - ->label('Paid At') + ->label('Paid at') ->placeholder('Not Paid') ->date(), ]), diff --git a/app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php b/app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php index a8e8497a..f6d6706d 100644 --- a/app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php +++ b/app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php @@ -87,7 +87,7 @@ public function form(Form $form): Form }, ]), Forms\Components\Select::make('payment_method') - ->label('Payment Method') + ->label('Payment method') ->required() ->options(PaymentMethod::class), Forms\Components\Select::make('bank_account_id') @@ -140,7 +140,7 @@ public function table(Table $table): Table ]) ->headerActions([ Tables\Actions\CreateAction::make() - ->label('Record Payment') + ->label('Record payment') ->modalHeading(fn (Tables\Actions\CreateAction $action) => $action->getLabel()) ->modalWidth(MaxWidth::TwoExtraLarge) ->visible(function () { @@ -154,7 +154,7 @@ public function table(Table $table): Table ]); }) ->databaseTransaction() - ->successNotificationTitle('Payment Recorded') + ->successNotificationTitle('Payment recorded') ->action(function (Tables\Actions\CreateAction $action, array $data) { /** @var Bill $record */ $record = $this->getOwnerRecord(); diff --git a/app/Filament/Company/Resources/Purchases/VendorResource.php b/app/Filament/Company/Resources/Purchases/VendorResource.php index f7dbcaa5..5f2637ad 100644 --- a/app/Filament/Company/Resources/Purchases/VendorResource.php +++ b/app/Filament/Company/Resources/Purchases/VendorResource.php @@ -34,11 +34,11 @@ public static function form(Form $form): Form ->columns(2) ->schema([ Forms\Components\TextInput::make('name') - ->label('Vendor Name') + ->label('Vendor name') ->required() ->maxLength(255), Forms\Components\Radio::make('type') - ->label('Vendor Type') + ->label('Vendor type') ->required() ->live() ->options(VendorType::class) @@ -48,13 +48,13 @@ public static function form(Form $form): Form ->nullable() ->visible(static fn (Forms\Get $get) => VendorType::parse($get('type')) === VendorType::Regular), Forms\Components\Select::make('contractor_type') - ->label('Contractor Type') + ->label('Contractor type') ->required() ->live() ->visible(static fn (Forms\Get $get) => VendorType::parse($get('type')) === VendorType::Contractor) ->options(ContractorType::class), Forms\Components\TextInput::make('ssn') - ->label('Social Security Number') + ->label('Social security number') ->required() ->live() ->mask('999-99-9999') @@ -63,7 +63,7 @@ public static function form(Form $form): Form ->visible(static fn (Forms\Get $get) => ContractorType::parse($get('contractor_type')) === ContractorType::Individual) ->maxLength(255), Forms\Components\TextInput::make('ein') - ->label('Employer Identification Number') + ->label('Employer identification number') ->required() ->live() ->mask('99-9999999') @@ -85,11 +85,11 @@ public static function form(Form $form): Form Forms\Components\Hidden::make('is_primary') ->default(true), Forms\Components\TextInput::make('first_name') - ->label('First Name') + ->label('First name') ->required() ->maxLength(255), Forms\Components\TextInput::make('last_name') - ->label('Last Name') + ->label('Last name') ->required() ->maxLength(255), Forms\Components\TextInput::make('email') @@ -123,7 +123,7 @@ public static function form(Form $form): Form Forms\Components\Builder\Block::make('toll_free') ->schema([ Forms\Components\TextInput::make('number') - ->label('Toll Free') + ->label('Toll free') ->required() ->maxLength(15), ])->maxItems(1), @@ -177,7 +177,7 @@ public static function table(Table $table): Table ->toggleable(isToggledHiddenByDefault: true) ->listWithLineBreaks(), Tables\Columns\TextColumn::make('payable_balance') - ->label('Payable Balance') + ->label('Payable balance') ->getStateUsing(function (Vendor $vendor) { return $vendor->bills() ->outstanding() @@ -212,8 +212,11 @@ public static function table(Table $table): Table ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make(), - Tables\Actions\ViewAction::make(), + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make(), + Tables\Actions\ViewAction::make(), + ])->dropdown(false), + Tables\Actions\DeleteAction::make(), ]), ]) ->bulkActions([ diff --git a/app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php b/app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php index 7ddb447a..84e65f64 100644 --- a/app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php +++ b/app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php @@ -2,12 +2,19 @@ namespace App\Filament\Company\Resources\Purchases\VendorResource\Pages; +use App\Filament\Company\Resources\Purchases\BillResource\Pages\CreateBill; use App\Filament\Company\Resources\Purchases\VendorResource; use App\Filament\Company\Resources\Purchases\VendorResource\RelationManagers; +use Filament\Actions\Action; +use Filament\Actions\ActionGroup; +use Filament\Actions\DeleteAction; +use Filament\Actions\EditAction; use Filament\Infolists\Components\Section; use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Infolist; use Filament\Resources\Pages\ViewRecord; +use Filament\Support\Enums\IconPosition; +use Filament\Support\Enums\IconSize; class ViewVendor extends ViewRecord { @@ -25,6 +32,31 @@ public function getTitle(): string return $this->record->name; } + protected function getHeaderActions(): array + { + return [ + EditAction::make() + ->label('Edit vendor') + ->outlined(), + ActionGroup::make([ + ActionGroup::make([ + Action::make('newBill') + ->label('New bill') + ->icon('heroicon-m-document-plus') + ->url(CreateBill::getUrl(['vendor' => $this->record->getKey()])), + ])->dropdown(false), + DeleteAction::make(), + ]) + ->label('Actions') + ->button() + ->outlined() + ->dropdownPlacement('bottom-end') + ->icon('heroicon-c-chevron-down') + ->iconSize(IconSize::Small) + ->iconPosition(IconPosition::After), + ]; + } + protected function getHeaderWidgets(): array { return [ @@ -44,7 +76,7 @@ public function infolist(Infolist $infolist): Infolist TextEntry::make('contact.email') ->label('Email'), TextEntry::make('contact.first_available_phone') - ->label('Primary Phone'), + ->label('Primary phone'), TextEntry::make('website') ->label('Website') ->url(static fn ($state) => $state, true), @@ -53,7 +85,7 @@ public function infolist(Infolist $infolist): Infolist ->columns() ->schema([ TextEntry::make('address.address_string') - ->label('Billing Address') + ->label('Billing address') ->listWithLineBreaks(), TextEntry::make('notes'), ]), diff --git a/app/Filament/Company/Resources/Sales/ClientResource.php b/app/Filament/Company/Resources/Sales/ClientResource.php index 007c1ad1..0852e4f6 100644 --- a/app/Filament/Company/Resources/Sales/ClientResource.php +++ b/app/Filament/Company/Resources/Sales/ClientResource.php @@ -34,7 +34,7 @@ public static function form(Form $form): Form ->columns() ->schema([ Forms\Components\TextInput::make('name') - ->label('Client Name') + ->label('Client name') ->required() ->maxLength(255), Forms\Components\TextInput::make('account_number') @@ -52,11 +52,11 @@ public static function form(Form $form): Form Forms\Components\Hidden::make('is_primary') ->default(true), Forms\Components\TextInput::make('first_name') - ->label('First Name') + ->label('First name') ->required() ->maxLength(255), Forms\Components\TextInput::make('last_name') - ->label('Last Name') + ->label('Last name') ->required() ->maxLength(255), Forms\Components\TextInput::make('email') @@ -90,7 +90,7 @@ public static function form(Form $form): Form Forms\Components\Builder\Block::make('toll_free') ->schema([ Forms\Components\TextInput::make('number') - ->label('Toll Free') + ->label('Toll free') ->required() ->maxLength(15), ])->maxItems(1), @@ -137,12 +137,12 @@ public static function form(Form $form): Form ->addActionLabel('Add Contact') ->schema([ Forms\Components\TextInput::make('first_name') - ->label('First Name') + ->label('First name') ->required() ->live(onBlur: true) ->maxLength(255), Forms\Components\TextInput::make('last_name') - ->label('Last Name') + ->label('Last name') ->required() ->live(onBlur: true) ->maxLength(255), @@ -206,7 +206,7 @@ public static function form(Form $form): Form ->contained(false) ->schema([ Forms\Components\Checkbox::make('same_as_billing') - ->label('Same as Billing Address') + ->label('Same as billing address') ->live() ->afterStateHydrated(function (?Address $record, Forms\Components\Checkbox $component) { if (! $record || $record->parent_address_id) { @@ -239,7 +239,7 @@ public static function form(Form $form): Form AddressFields::make() ->visible(static fn (Get $get) => ! $get('same_as_billing')), Forms\Components\Textarea::make('notes') - ->label('Delivery Instructions') + ->label('Delivery instructions') ->maxLength(255) ->columnSpanFull(), ])->columns(), @@ -265,7 +265,7 @@ public static function table(Table $table): Table ->toggleable() ->state(static fn (Client $client) => $client->primaryContact->first_available_phone), Tables\Columns\TextColumn::make('billingAddress.address_string') - ->label('Billing Address') + ->label('Billing address') ->searchable() ->toggleable(isToggledHiddenByDefault: true) ->listWithLineBreaks(), @@ -304,8 +304,11 @@ public static function table(Table $table): Table ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make(), - Tables\Actions\ViewAction::make(), + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make(), + Tables\Actions\ViewAction::make(), + ])->dropdown(false), + Tables\Actions\DeleteAction::make(), ]), ]) ->bulkActions([ diff --git a/app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php b/app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php index cecfea24..8323877c 100644 --- a/app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php +++ b/app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php @@ -4,10 +4,19 @@ use App\Filament\Company\Resources\Sales\ClientResource; use App\Filament\Company\Resources\Sales\ClientResource\RelationManagers; +use App\Filament\Company\Resources\Sales\EstimateResource\Pages\CreateEstimate; +use App\Filament\Company\Resources\Sales\InvoiceResource\Pages\CreateInvoice; +use App\Filament\Company\Resources\Sales\RecurringInvoiceResource\Pages\CreateRecurringInvoice; +use Filament\Actions\Action; +use Filament\Actions\ActionGroup; +use Filament\Actions\DeleteAction; +use Filament\Actions\EditAction; use Filament\Infolists\Components\Section; use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Infolist; use Filament\Resources\Pages\ViewRecord; +use Filament\Support\Enums\IconPosition; +use Filament\Support\Enums\IconSize; use Illuminate\Contracts\Support\Htmlable; class ViewClient extends ViewRecord @@ -28,6 +37,39 @@ public function getTitle(): string | Htmlable return $this->record->name; } + protected function getHeaderActions(): array + { + return [ + EditAction::make() + ->label('Edit client') + ->outlined(), + ActionGroup::make([ + ActionGroup::make([ + Action::make('newInvoice') + ->label('New invoice') + ->icon('heroicon-m-document-plus') + ->url(CreateInvoice::getUrl(['client' => $this->record->getKey()])), + Action::make('newEstimate') + ->label('New estimate') + ->icon('heroicon-m-document-duplicate') + ->url(CreateEstimate::getUrl(['client' => $this->record->getKey()])), + Action::make('newRecurringInvoice') + ->label('New recurring invoice') + ->icon('heroicon-m-arrow-path') + ->url(CreateRecurringInvoice::getUrl(['client' => $this->record->getKey()])), + ])->dropdown(false), + DeleteAction::make(), + ]) + ->label('Actions') + ->button() + ->outlined() + ->dropdownPlacement('bottom-end') + ->icon('heroicon-c-chevron-down') + ->iconSize(IconSize::Small) + ->iconPosition(IconPosition::After), + ]; + } + protected function getHeaderWidgets(): array { return [ @@ -43,11 +85,11 @@ public function infolist(Infolist $infolist): Infolist ->columns() ->schema([ TextEntry::make('primaryContact.full_name') - ->label('Primary Contact'), + ->label('Primary contact'), TextEntry::make('primaryContact.email') - ->label('Primary Email'), + ->label('Primary email'), TextEntry::make('primaryContact.first_available_phone') - ->label('Primary Phone'), + ->label('Primary phone'), TextEntry::make('website') ->label('Website') ->url(static fn ($state) => $state, true), @@ -56,13 +98,13 @@ public function infolist(Infolist $infolist): Infolist ->columns() ->schema([ TextEntry::make('billingAddress.address_string') - ->label('Billing Address') + ->label('Billing address') ->listWithLineBreaks(), TextEntry::make('shippingAddress.address_string') - ->label('Shipping Address') + ->label('Shipping address') ->listWithLineBreaks(), TextEntry::make('notes') - ->label('Delivery Instructions'), + ->label('Delivery instructions'), ]), ]); } diff --git a/app/Filament/Company/Resources/Sales/EstimateResource.php b/app/Filament/Company/Resources/Sales/EstimateResource.php index 7e6bd33d..ddf2e74b 100644 --- a/app/Filament/Company/Resources/Sales/EstimateResource.php +++ b/app/Filament/Company/Resources/Sales/EstimateResource.php @@ -111,12 +111,12 @@ public static function form(Form $form): Form ]), Forms\Components\Group::make([ Forms\Components\TextInput::make('estimate_number') - ->label('Estimate Number') + ->label('Estimate number') ->default(fn () => Estimate::getNextDocumentNumber()), Forms\Components\TextInput::make('reference_number') - ->label('Reference Number'), + ->label('Reference number'), Forms\Components\DatePicker::make('date') - ->label('Estimate Date') + ->label('Estimate date') ->live() ->default(now()) ->afterStateUpdated(function (Forms\Set $set, Forms\Get $get, $state) { @@ -128,7 +128,7 @@ public static function form(Form $form): Form } }), Forms\Components\DatePicker::make('expiration_date') - ->label('Expiration Date') + ->label('Expiration date') ->default(function () use ($company) { return now()->addDays($company->defaultInvoice->payment_terms->getDays()); }) @@ -136,7 +136,7 @@ public static function form(Form $form): Form return $get('date') ?? now(); }), Forms\Components\Select::make('discount_method') - ->label('Discount Method') + ->label('Discount method') ->options(DocumentDiscountMethod::class) ->selectablePlaceholder(false) ->default(DocumentDiscountMethod::PerLineItem) @@ -292,7 +292,7 @@ public static function table(Table $table): Table ->badge() ->searchable(), Tables\Columns\TextColumn::make('expiration_date') - ->label('Expiration Date') + ->label('Expiration date') ->asRelativeDay() ->sortable(), Tables\Columns\TextColumn::make('date') @@ -319,25 +319,27 @@ public static function table(Table $table): Table ->options(EstimateStatus::class) ->native(false), DateRangeFilter::make('date') - ->fromLabel('From Date') - ->untilLabel('To Date') + ->fromLabel('From date') + ->untilLabel('To date') ->indicatorLabel('Date'), DateRangeFilter::make('expiration_date') - ->fromLabel('From Expiration Date') - ->untilLabel('To Expiration Date') + ->fromLabel('From expiration date') + ->untilLabel('To expiration date') ->indicatorLabel('Due'), ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make(), - Tables\Actions\ViewAction::make(), + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make(), + Tables\Actions\ViewAction::make(), + Estimate::getReplicateAction(Tables\Actions\ReplicateAction::class), + Estimate::getApproveDraftAction(Tables\Actions\Action::class), + Estimate::getMarkAsSentAction(Tables\Actions\Action::class), + Estimate::getMarkAsAcceptedAction(Tables\Actions\Action::class), + Estimate::getMarkAsDeclinedAction(Tables\Actions\Action::class), + Estimate::getConvertToInvoiceAction(Tables\Actions\Action::class), + ])->dropdown(false), Tables\Actions\DeleteAction::make(), - Estimate::getReplicateAction(Tables\Actions\ReplicateAction::class), - Estimate::getApproveDraftAction(Tables\Actions\Action::class), - Estimate::getMarkAsSentAction(Tables\Actions\Action::class), - Estimate::getMarkAsAcceptedAction(Tables\Actions\Action::class), - Estimate::getMarkAsDeclinedAction(Tables\Actions\Action::class), - Estimate::getConvertToInvoiceAction(Tables\Actions\Action::class), ]), ]) ->bulkActions([ @@ -347,8 +349,8 @@ public static function table(Table $table): Table ->label('Replicate') ->modalWidth(MaxWidth::Large) ->modalDescription('Replicating estimates will also replicate their line items. Are you sure you want to proceed?') - ->successNotificationTitle('Estimates Replicated Successfully') - ->failureNotificationTitle('Failed to Replicate Estimates') + ->successNotificationTitle('Estimates replicated successfully') + ->failureNotificationTitle('Failed to replicate estimates') ->databaseTransaction() ->deselectRecordsAfterCompletion() ->excludeAttributes([ @@ -386,14 +388,14 @@ public static function table(Table $table): Table ->label('Approve') ->icon('heroicon-o-check-circle') ->databaseTransaction() - ->successNotificationTitle('Estimates Approved') - ->failureNotificationTitle('Failed to Approve Estimates') + ->successNotificationTitle('Estimates approved') + ->failureNotificationTitle('Failed to approve estimates') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeApproved()); if ($isInvalid) { Notification::make() - ->title('Approval Failed') + ->title('Approval failed') ->body('Only draft estimates can be approved. Please adjust your selection and try again.') ->persistent() ->danger() @@ -410,17 +412,17 @@ public static function table(Table $table): Table $action->success(); }), Tables\Actions\BulkAction::make('markAsSent') - ->label('Mark as Sent') + ->label('Mark as sent') ->icon('heroicon-o-paper-airplane') ->databaseTransaction() - ->successNotificationTitle('Estimates Sent') - ->failureNotificationTitle('Failed to Mark Estimates as Sent') + ->successNotificationTitle('Estimates sent') + ->failureNotificationTitle('Failed to mark estimates as sent') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsSent()); if ($isInvalid) { Notification::make() - ->title('Sending Failed') + ->title('Sending failed') ->body('Only unsent estimates can be marked as sent. Please adjust your selection and try again.') ->persistent() ->danger() @@ -437,17 +439,17 @@ public static function table(Table $table): Table $action->success(); }), Tables\Actions\BulkAction::make('markAsAccepted') - ->label('Mark as Accepted') + ->label('Mark as accepted') ->icon('heroicon-o-check-badge') ->databaseTransaction() - ->successNotificationTitle('Estimates Accepted') - ->failureNotificationTitle('Failed to Mark Estimates as Accepted') + ->successNotificationTitle('Estimates accepted') + ->failureNotificationTitle('Failed to mark estimates as accepted') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsAccepted()); if ($isInvalid) { Notification::make() - ->title('Acceptance Failed') + ->title('Acceptance failed') ->body('Only sent estimates that haven\'t been accepted can be marked as accepted. Please adjust your selection and try again.') ->persistent() ->danger() @@ -464,21 +466,21 @@ public static function table(Table $table): Table $action->success(); }), Tables\Actions\BulkAction::make('markAsDeclined') - ->label('Mark as Declined') + ->label('Mark as declined') ->icon('heroicon-o-x-circle') ->requiresConfirmation() ->databaseTransaction() ->color('danger') ->modalHeading('Mark Estimates as Declined') ->modalDescription('Are you sure you want to mark the selected estimates as declined? This action cannot be undone.') - ->successNotificationTitle('Estimates Declined') - ->failureNotificationTitle('Failed to Mark Estimates as Declined') + ->successNotificationTitle('Estimates declined') + ->failureNotificationTitle('Failed to mark estimates as declined') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsDeclined()); if ($isInvalid) { Notification::make() - ->title('Declination Failed') + ->title('Declination failed') ->body('Only sent estimates that haven\'t been declined can be marked as declined. Please adjust your selection and try again.') ->persistent() ->danger() diff --git a/app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php b/app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php index f9ccf22b..5d2914ef 100644 --- a/app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php +++ b/app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php @@ -34,15 +34,19 @@ public function getMaxContentWidth(): MaxWidth | string | null protected function getHeaderActions(): array { return [ + Actions\EditAction::make() + ->label('Edit estimate') + ->outlined(), Actions\ActionGroup::make([ - Actions\EditAction::make(), + Actions\ActionGroup::make([ + Estimate::getApproveDraftAction(), + Estimate::getMarkAsSentAction(), + Estimate::getMarkAsAcceptedAction(), + Estimate::getMarkAsDeclinedAction(), + Estimate::getReplicateAction(), + Estimate::getConvertToInvoiceAction(), + ])->dropdown(false), Actions\DeleteAction::make(), - Estimate::getApproveDraftAction(), - Estimate::getMarkAsSentAction(), - Estimate::getMarkAsAcceptedAction(), - Estimate::getMarkAsDeclinedAction(), - Estimate::getReplicateAction(), - Estimate::getConvertToInvoiceAction(), ]) ->label('Actions') ->button() @@ -73,18 +77,18 @@ public function infolist(Infolist $infolist): Infolist ->weight(FontWeight::SemiBold) ->url(static fn (Estimate $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])), TextEntry::make('expiration_date') - ->label('Expiration Date') + ->label('Expiration date') ->asRelativeDay(), TextEntry::make('approved_at') - ->label('Approved At') + ->label('Approved at') ->placeholder('Not Approved') ->date(), TextEntry::make('last_sent_at') - ->label('Last Sent') + ->label('Last sent') ->placeholder('Never') ->date(), TextEntry::make('accepted_at') - ->label('Accepted At') + ->label('Accepted at') ->placeholder('Not Accepted') ->date(), ])->columnSpan(1), diff --git a/app/Filament/Company/Resources/Sales/InvoiceResource.php b/app/Filament/Company/Resources/Sales/InvoiceResource.php index 9c70294b..6c770533 100644 --- a/app/Filament/Company/Resources/Sales/InvoiceResource.php +++ b/app/Filament/Company/Resources/Sales/InvoiceResource.php @@ -123,12 +123,12 @@ public static function form(Form $form): Form ]), Forms\Components\Group::make([ Forms\Components\TextInput::make('invoice_number') - ->label('Invoice Number') + ->label('Invoice number') ->default(fn () => Invoice::getNextDocumentNumber()), Forms\Components\TextInput::make('order_number') ->label('P.O/S.O Number'), Forms\Components\DatePicker::make('date') - ->label('Invoice Date') + ->label('Invoice date') ->live() ->default(now()) ->disabled(function (?Invoice $record) { @@ -143,7 +143,7 @@ public static function form(Form $form): Form } }), Forms\Components\DatePicker::make('due_date') - ->label('Payment Due') + ->label('Payment due') ->default(function () use ($company) { return now()->addDays($company->defaultInvoice->payment_terms->getDays()); }) @@ -151,7 +151,7 @@ public static function form(Form $form): Form return $get('date') ?? now(); }), Forms\Components\Select::make('discount_method') - ->label('Discount Method') + ->label('Discount method') ->options(DocumentDiscountMethod::class) ->selectablePlaceholder(false) ->default(DocumentDiscountMethod::PerLineItem) @@ -342,13 +342,13 @@ public static function table(Table $table): Table ->toggleable() ->alignEnd(), Tables\Columns\TextColumn::make('amount_paid') - ->label('Amount Paid') + ->label('Amount paid') ->currencyWithConversion(static fn (Invoice $record) => $record->currency_code) ->sortable() ->alignEnd() ->showOnTabs(['unpaid']), Tables\Columns\TextColumn::make('amount_due') - ->label('Amount Due') + ->label('Amount due') ->currencyWithConversion(static fn (Invoice $record) => $record->currency_code) ->sortable() ->alignEnd() @@ -363,13 +363,13 @@ public static function table(Table $table): Table ->options(InvoiceStatus::class) ->native(false), Tables\Filters\TernaryFilter::make('has_payments') - ->label('Has Payments') + ->label('Has payments') ->queries( true: fn (Builder $query) => $query->whereHas('payments'), false: fn (Builder $query) => $query->whereDoesntHave('payments'), ), Tables\Filters\SelectFilter::make('source_type') - ->label('Source Type') + ->label('Source type') ->options([ DocumentType::Estimate->value => DocumentType::Estimate->getLabel(), DocumentType::RecurringInvoice->value => DocumentType::RecurringInvoice->getLabel(), @@ -385,102 +385,104 @@ public static function table(Table $table): Table }; }), DateRangeFilter::make('date') - ->fromLabel('From Date') - ->untilLabel('To Date') + ->fromLabel('From date') + ->untilLabel('To date') ->indicatorLabel('Date'), DateRangeFilter::make('due_date') - ->fromLabel('From Due Date') - ->untilLabel('To Due Date') + ->fromLabel('From due date') + ->untilLabel('To due date') ->indicatorLabel('Due'), ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make() - ->url(static fn (Invoice $record) => Pages\EditInvoice::getUrl(['record' => $record])), - Tables\Actions\ViewAction::make() - ->url(static fn (Invoice $record) => Pages\ViewInvoice::getUrl(['record' => $record])), - Tables\Actions\DeleteAction::make(), - Invoice::getReplicateAction(Tables\Actions\ReplicateAction::class), - Invoice::getApproveDraftAction(Tables\Actions\Action::class), - Invoice::getMarkAsSentAction(Tables\Actions\Action::class), - Tables\Actions\Action::make('recordPayment') - ->label(fn (Invoice $record) => $record->status === InvoiceStatus::Overpaid ? 'Refund Overpayment' : 'Record Payment') - ->stickyModalHeader() - ->stickyModalFooter() - ->modalFooterActionsAlignment(Alignment::End) - ->modalWidth(MaxWidth::TwoExtraLarge) - ->icon('heroicon-o-credit-card') - ->visible(function (Invoice $record) { - return $record->canRecordPayment(); - }) - ->mountUsing(function (Invoice $record, Form $form) { - $form->fill([ - 'posted_at' => now(), - 'amount' => $record->status === InvoiceStatus::Overpaid ? ltrim($record->amount_due, '-') : $record->amount_due, - ]); - }) - ->databaseTransaction() - ->successNotificationTitle('Payment Recorded') - ->form([ - Forms\Components\DatePicker::make('posted_at') - ->label('Date'), - Forms\Components\TextInput::make('amount') - ->label('Amount') - ->required() - ->money(fn (Invoice $record) => $record->currency_code) - ->live(onBlur: true) - ->helperText(function (Invoice $record, $state) { - $invoiceCurrency = $record->currency_code; - if (! CurrencyConverter::isValidAmount($state, $invoiceCurrency)) { - return null; - } - - $amountDue = $record->getRawOriginal('amount_due'); - - $amount = CurrencyConverter::convertToCents($state, $invoiceCurrency); - - if ($amount <= 0) { - return 'Please enter a valid positive amount'; - } - - if ($record->status === InvoiceStatus::Overpaid) { - $newAmountDue = $amountDue + $amount; - } else { - $newAmountDue = $amountDue - $amount; - } - - return match (true) { - $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $invoiceCurrency), - $newAmountDue === 0 => 'Invoice will be fully paid', - default => 'Invoice will be overpaid by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $invoiceCurrency), - }; - }) - ->rules([ - static fn (Invoice $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) { - if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) { - $fail('Please enter a valid amount'); + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make() + ->url(static fn (Invoice $record) => Pages\EditInvoice::getUrl(['record' => $record])), + Tables\Actions\ViewAction::make() + ->url(static fn (Invoice $record) => Pages\ViewInvoice::getUrl(['record' => $record])), + Invoice::getReplicateAction(Tables\Actions\ReplicateAction::class), + Invoice::getApproveDraftAction(Tables\Actions\Action::class), + Invoice::getMarkAsSentAction(Tables\Actions\Action::class), + Tables\Actions\Action::make('recordPayment') + ->label(fn (Invoice $record) => $record->status === InvoiceStatus::Overpaid ? 'Refund Overpayment' : 'Record Payment') + ->stickyModalHeader() + ->stickyModalFooter() + ->modalFooterActionsAlignment(Alignment::End) + ->modalWidth(MaxWidth::TwoExtraLarge) + ->icon('heroicon-o-credit-card') + ->visible(function (Invoice $record) { + return $record->canRecordPayment(); + }) + ->mountUsing(function (Invoice $record, Form $form) { + $form->fill([ + 'posted_at' => now(), + 'amount' => $record->status === InvoiceStatus::Overpaid ? ltrim($record->amount_due, '-') : $record->amount_due, + ]); + }) + ->databaseTransaction() + ->successNotificationTitle('Payment recorded') + ->form([ + Forms\Components\DatePicker::make('posted_at') + ->label('Date'), + Forms\Components\TextInput::make('amount') + ->label('Amount') + ->required() + ->money(fn (Invoice $record) => $record->currency_code) + ->live(onBlur: true) + ->helperText(function (Invoice $record, $state) { + $invoiceCurrency = $record->currency_code; + if (! CurrencyConverter::isValidAmount($state, $invoiceCurrency)) { + return null; } - }, - ]), - Forms\Components\Select::make('payment_method') - ->label('Payment Method') - ->required() - ->options(PaymentMethod::class), - Forms\Components\Select::make('bank_account_id') - ->label('Account') - ->required() - ->options(BankAccount::query() - ->get() - ->pluck('account.name', 'id')) - ->searchable(), - Forms\Components\Textarea::make('notes') - ->label('Notes'), - ]) - ->action(function (Invoice $record, Tables\Actions\Action $action, array $data) { - $record->recordPayment($data); - $action->success(); - }), + $amountDue = $record->getRawOriginal('amount_due'); + + $amount = CurrencyConverter::convertToCents($state, $invoiceCurrency); + + if ($amount <= 0) { + return 'Please enter a valid positive amount'; + } + + if ($record->status === InvoiceStatus::Overpaid) { + $newAmountDue = $amountDue + $amount; + } else { + $newAmountDue = $amountDue - $amount; + } + + return match (true) { + $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $invoiceCurrency), + $newAmountDue === 0 => 'Invoice will be fully paid', + default => 'Invoice will be overpaid by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $invoiceCurrency), + }; + }) + ->rules([ + static fn (Invoice $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) { + if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) { + $fail('Please enter a valid amount'); + } + }, + ]), + Forms\Components\Select::make('payment_method') + ->label('Payment method') + ->required() + ->options(PaymentMethod::class), + Forms\Components\Select::make('bank_account_id') + ->label('Account') + ->required() + ->options(BankAccount::query() + ->get() + ->pluck('account.name', 'id')) + ->searchable(), + Forms\Components\Textarea::make('notes') + ->label('Notes'), + ]) + ->action(function (Invoice $record, Tables\Actions\Action $action, array $data) { + $record->recordPayment($data); + + $action->success(); + }), + ])->dropdown(false), + Tables\Actions\DeleteAction::make(), ]), ]) ->bulkActions([ @@ -490,8 +492,8 @@ public static function table(Table $table): Table ->label('Replicate') ->modalWidth(MaxWidth::Large) ->modalDescription('Replicating invoices will also replicate their line items. Are you sure you want to proceed?') - ->successNotificationTitle('Invoices Replicated Successfully') - ->failureNotificationTitle('Failed to Replicate Invoices') + ->successNotificationTitle('Invoices replicated successfully') + ->failureNotificationTitle('Failed to replicate invoices') ->databaseTransaction() ->deselectRecordsAfterCompletion() ->excludeAttributes([ @@ -529,14 +531,14 @@ public static function table(Table $table): Table ->label('Approve') ->icon('heroicon-o-check-circle') ->databaseTransaction() - ->successNotificationTitle('Invoices Approved') + ->successNotificationTitle('Invoices approved') ->failureNotificationTitle('Failed to Approve Invoices') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Invoice $record) => ! $record->canBeApproved()); if ($isInvalid) { Notification::make() - ->title('Approval Failed') + ->title('Approval failed') ->body('Only draft invoices can be approved. Please adjust your selection and try again.') ->persistent() ->danger() @@ -553,17 +555,17 @@ public static function table(Table $table): Table $action->success(); }), Tables\Actions\BulkAction::make('markAsSent') - ->label('Mark as Sent') + ->label('Mark as sent') ->icon('heroicon-o-paper-airplane') ->databaseTransaction() - ->successNotificationTitle('Invoices Sent') + ->successNotificationTitle('Invoices sent') ->failureNotificationTitle('Failed to Mark Invoices as Sent') ->before(function (Collection $records, Tables\Actions\BulkAction $action) { $isInvalid = $records->contains(fn (Invoice $record) => ! $record->canBeMarkedAsSent()); if ($isInvalid) { Notification::make() - ->title('Sending Failed') + ->title('Sending failed') ->body('Only unsent invoices can be marked as sent. Please adjust your selection and try again.') ->persistent() ->danger() @@ -580,14 +582,14 @@ public static function table(Table $table): Table $action->success(); }), Tables\Actions\BulkAction::make('recordPayments') - ->label('Record Payments') + ->label('Record payments') ->icon('heroicon-o-credit-card') ->stickyModalHeader() ->stickyModalFooter() ->modalFooterActionsAlignment(Alignment::End) ->modalWidth(MaxWidth::TwoExtraLarge) ->databaseTransaction() - ->successNotificationTitle('Payments Recorded') + ->successNotificationTitle('Payments recorded') ->failureNotificationTitle('Failed to Record Payments') ->deselectRecordsAfterCompletion() ->beforeFormFilled(function (Collection $records, Tables\Actions\BulkAction $action) { @@ -595,7 +597,7 @@ public static function table(Table $table): Table if ($isInvalid) { Notification::make() - ->title('Payment Recording Failed') + ->title('Payment recording failed') ->body('Invoices that are either draft, paid, overpaid, voided, or are in a foreign currency cannot be processed through bulk payments. Please adjust your selection and try again.') ->persistent() ->danger() @@ -627,7 +629,7 @@ public static function table(Table $table): Table }, ]), Forms\Components\Select::make('payment_method') - ->label('Payment Method') + ->label('Payment method') ->required() ->options(PaymentMethod::class), Forms\Components\Select::make('bank_account_id') @@ -648,7 +650,7 @@ public static function table(Table $table): Table $formattedTotalAmountDue = CurrencyConverter::formatCentsToMoney($totalAmountDue); Notification::make() - ->title('Excess Payment Amount') + ->title('Excess payment amount') ->body("The payment amount exceeds the total amount due of {$formattedTotalAmountDue}. Please adjust the payment amount and try again.") ->persistent() ->warning() diff --git a/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php b/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php index 1f5236a0..c72a3850 100644 --- a/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php +++ b/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php @@ -68,7 +68,7 @@ public function infolist(Infolist $infolist): Infolist ->visible(fn () => ! empty($this->recurringInvoice)) ->actions([ Action::make('clearFilter') - ->label('Clear Filter') + ->label('Clear filter') ->button() ->outlined() ->action('clearFilter'), diff --git a/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php b/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php index 0c9d43bb..d7b58151 100644 --- a/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php +++ b/app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php @@ -34,12 +34,16 @@ public function getMaxContentWidth(): MaxWidth | string | null protected function getHeaderActions(): array { return [ + Actions\EditAction::make() + ->label('Edit invoice') + ->outlined(), Actions\ActionGroup::make([ - Actions\EditAction::make(), + Actions\ActionGroup::make([ + Invoice::getApproveDraftAction(), + Invoice::getMarkAsSentAction(), + Invoice::getReplicateAction(), + ])->dropdown(false), Actions\DeleteAction::make(), - Invoice::getApproveDraftAction(), - Invoice::getMarkAsSentAction(), - Invoice::getReplicateAction(), ]) ->label('Actions') ->button() @@ -70,21 +74,21 @@ public function infolist(Infolist $infolist): Infolist ->weight(FontWeight::SemiBold) ->url(static fn (Invoice $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])), TextEntry::make('amount_due') - ->label('Amount Due') + ->label('Amount due') ->currency(static fn (Invoice $record) => $record->currency_code), TextEntry::make('due_date') ->label('Due') ->asRelativeDay(), TextEntry::make('approved_at') - ->label('Approved At') + ->label('Approved at') ->placeholder('Not Approved') ->date(), TextEntry::make('last_sent_at') - ->label('Last Sent') + ->label('Last sent') ->placeholder('Never') ->date(), TextEntry::make('paid_at') - ->label('Paid At') + ->label('Paid at') ->placeholder('Not Paid') ->date(), ])->columnSpan(1), diff --git a/app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php b/app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php index f077bf6d..297d46a2 100644 --- a/app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php +++ b/app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php @@ -94,7 +94,7 @@ public function form(Form $form): Form }, ]), Forms\Components\Select::make('payment_method') - ->label('Payment Method') + ->label('Payment method') ->required() ->options(PaymentMethod::class), Forms\Components\Select::make('bank_account_id') @@ -161,7 +161,7 @@ public function table(Table $table): Table ]); }) ->databaseTransaction() - ->successNotificationTitle('Payment Recorded') + ->successNotificationTitle('Payment recorded') ->action(function (Tables\Actions\CreateAction $action, array $data) { /** @var Invoice $record */ $record = $this->getOwnerRecord(); diff --git a/app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php b/app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php index a0ceb3f3..f625a53c 100644 --- a/app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php +++ b/app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php @@ -108,21 +108,21 @@ public static function form(Form $form): Form ]), Forms\Components\Group::make([ Forms\Components\Placeholder::make('invoice_number') - ->label('Invoice Number') + ->label('Invoice number') ->content('Auto-generated'), Forms\Components\TextInput::make('order_number') ->label('P.O/S.O Number'), Forms\Components\Placeholder::make('date') - ->label('Invoice Date') + ->label('Invoice date') ->content('Auto-generated'), Forms\Components\Select::make('payment_terms') - ->label('Payment Due') + ->label('Payment due') ->options(PaymentTerms::class) ->softRequired() ->default($company->defaultInvoice->payment_terms) ->live(), Forms\Components\Select::make('discount_method') - ->label('Discount Method') + ->label('Discount method') ->options(DocumentDiscountMethod::class) ->selectablePlaceholder(false) ->default(DocumentDiscountMethod::PerLineItem) @@ -294,17 +294,17 @@ public static function table(Table $table): Table ->sortable() ->showOnTabs(['draft']), Tables\Columns\TextColumn::make('start_date') - ->label('First Invoice') + ->label('First invoice') ->date() ->sortable() ->showOnTabs(['draft']), Tables\Columns\TextColumn::make('last_date') - ->label('Last Invoice') + ->label('Last invoice') ->date() ->sortable() ->hideOnTabs(['draft']), Tables\Columns\TextColumn::make('next_date') - ->label('Next Invoice') + ->label('Next invoice') ->date() ->sortable() ->hideOnTabs(['draft']), @@ -325,10 +325,12 @@ public static function table(Table $table): Table ]) ->actions([ Tables\Actions\ActionGroup::make([ - Tables\Actions\EditAction::make(), - Tables\Actions\ViewAction::make(), + Tables\Actions\ActionGroup::make([ + Tables\Actions\EditAction::make(), + Tables\Actions\ViewAction::make(), + RecurringInvoice::getManageScheduleAction(Tables\Actions\Action::class), + ])->dropdown(false), Tables\Actions\DeleteAction::make(), - RecurringInvoice::getUpdateScheduleAction(Tables\Actions\Action::class), ]), ]) ->bulkActions([ diff --git a/app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php b/app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php index e8e12a5d..2d9f2e58 100644 --- a/app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php +++ b/app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php @@ -34,11 +34,15 @@ public function getMaxContentWidth(): MaxWidth | string | null protected function getHeaderActions(): array { return [ + Actions\EditAction::make() + ->label('Edit recurring invoice') + ->outlined(), Actions\ActionGroup::make([ - Actions\EditAction::make(), + Actions\ActionGroup::make([ + RecurringInvoice::getManageScheduleAction(), + RecurringInvoice::getApproveDraftAction(), + ])->dropdown(false), Actions\DeleteAction::make(), - RecurringInvoice::getUpdateScheduleAction(), - RecurringInvoice::getApproveDraftAction(), ]) ->label('Actions') ->button() @@ -56,12 +60,12 @@ public function infolist(Infolist $infolist): Infolist ->schema([ BannerEntry::make('scheduleIsNotSet') ->info() - ->title('Schedule Not Set') + ->title('Schedule not set') ->description('The schedule for this recurring invoice has not been set. You must set a schedule before you can approve this draft and start creating invoices.') ->visible(fn (RecurringInvoice $record) => ! $record->hasValidStartDate()) ->columnSpanFull() ->actions([ - RecurringInvoice::getUpdateScheduleAction(Action::class) + RecurringInvoice::getManageScheduleAction(Action::class) ->outlined(), ]), BannerEntry::make('readyToApprove') @@ -87,11 +91,11 @@ public function infolist(Infolist $infolist): Infolist ->weight(FontWeight::SemiBold) ->url(static fn (RecurringInvoice $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])), TextEntry::make('last_date') - ->label('Last Invoice') + ->label('Last invoice') ->date() ->placeholder('Not Created'), TextEntry::make('next_date') - ->label('Next Invoice') + ->label('Next invoice') ->placeholder('Not Scheduled') ->date(), TextEntry::make('schedule') @@ -103,7 +107,7 @@ public function infolist(Infolist $infolist): Infolist return $record->getTimelineDescription(); }), TextEntry::make('occurrences_count') - ->label('Created to Date') + ->label('Created to date') ->visible(static fn (RecurringInvoice $record) => $record->occurrences_count > 0) ->color('primary') ->weight(FontWeight::SemiBold) @@ -112,19 +116,19 @@ public function infolist(Infolist $infolist): Infolist return ListInvoices::getUrl(['recurringInvoice' => $record->id]); }), TextEntry::make('end_date') - ->label('Ends On') + ->label('Ends on') ->date() ->visible(fn (RecurringInvoice $record) => $record->end_type?->isOn()), TextEntry::make('approved_at') - ->label('Approved At') + ->label('Approved at') ->placeholder('Not Approved') ->date(), TextEntry::make('ended_at') - ->label('Ended At') + ->label('Ended at') ->date() ->visible(fn (RecurringInvoice $record) => $record->ended_at), TextEntry::make('total') - ->label('Invoice Amount') + ->label('Invoice amount') ->currency(static fn (RecurringInvoice $record) => $record->currency_code), ])->columnSpan(1), DocumentPreview::make() diff --git a/app/Filament/Forms/Components/AddressFields.php b/app/Filament/Forms/Components/AddressFields.php index 61649b4e..58218561 100644 --- a/app/Filament/Forms/Components/AddressFields.php +++ b/app/Filament/Forms/Components/AddressFields.php @@ -16,11 +16,11 @@ protected function setUp(): void $this->schema([ TextInput::make('address_line_1') - ->label('Address Line 1') + ->label('Address line 1') ->required() ->maxLength(255), TextInput::make('address_line_2') - ->label('Address Line 2') + ->label('Address line 2') ->maxLength(255), CountrySelect::make('country_code') ->clearStateField() @@ -31,7 +31,7 @@ protected function setUp(): void ->required() ->maxLength(255), TextInput::make('postal_code') - ->label('Postal Code / Zip Code') + ->label('Postal code') ->maxLength(255), ]); } diff --git a/app/Filament/Forms/Components/CreateCurrencySelect.php b/app/Filament/Forms/Components/CreateCurrencySelect.php index 3af99473..3d3c5d87 100644 --- a/app/Filament/Forms/Components/CreateCurrencySelect.php +++ b/app/Filament/Forms/Components/CreateCurrencySelect.php @@ -68,7 +68,7 @@ protected function createCurrencyForm(): array protected function createCurrencyAction(Action $action): Action { return $action - ->label('Add Currency') + ->label('Add currency') ->slideOver() ->modalWidth(MaxWidth::Medium); } diff --git a/app/Filament/Forms/Components/DocumentTotals.php b/app/Filament/Forms/Components/DocumentTotals.php index db08339d..a0984e78 100644 --- a/app/Filament/Forms/Components/DocumentTotals.php +++ b/app/Filament/Forms/Components/DocumentTotals.php @@ -21,14 +21,14 @@ protected function setUp(): void $this->schema([ Select::make('discount_computation') - ->label('Discount Computation') + ->label('Discount computation') ->hiddenLabel() ->options(AdjustmentComputation::class) ->default(AdjustmentComputation::Percentage) ->selectablePlaceholder(false) ->live(), TextInput::make('discount_rate') - ->label('Discount Rate') + ->label('Discount rate') ->hiddenLabel() ->live() ->extraInputAttributes(['class' => 'text-right']) diff --git a/app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php b/app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php index 72f3b833..2705475f 100644 --- a/app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php +++ b/app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php @@ -64,7 +64,7 @@ public function startImportingTransactions(): Action return Action::make('startImportingTransactions') ->link() ->icon('heroicon-o-cloud-arrow-down') - ->label('Start Importing Transactions') + ->label('Start importing transactions') ->modalWidth(fn () => $this->modalWidth) ->modalFooterActionsAlignment(fn () => $this->modalWidth === 'screen' ? Alignment::Center : Alignment::Start) ->stickyModalHeader() @@ -72,7 +72,7 @@ public function startImportingTransactions(): Action ->record(fn (array $arguments) => ConnectedBankAccount::find($arguments['connectedBankAccount'])) ->form([ Placeholder::make('import_from') - ->label('Import Transactions From') + ->label('Import transactions from') ->content(static fn (ConnectedBankAccount $connectedBankAccount): View => view( 'components.actions.transaction-import-modal', compact('connectedBankAccount') @@ -82,12 +82,12 @@ public function startImportingTransactions(): Action ->visible(static fn (ConnectedBankAccount $connectedBankAccount) => $connectedBankAccount->bank_account_id === null) ->content(static fn (ConnectedBankAccount $connectedBankAccount) => 'If ' . $connectedBankAccount->name . ' already has transactions for an existing account, select the account to import transactions into.'), Select::make('bank_account_id') - ->label('Select Account') + ->label('Select account') ->visible(static fn (ConnectedBankAccount $connectedBankAccount) => $connectedBankAccount->bank_account_id === null) ->options(fn (ConnectedBankAccount $connectedBankAccount) => $this->getBankAccountOptions($connectedBankAccount)) ->required(), DatePicker::make('start_date') - ->label('Start Date') + ->label('Start date') ->required() ->placeholder('Select a start date for importing transactions.'), ]) @@ -126,7 +126,7 @@ public function stopImportingTransactions(): Action return Action::make('stopImportingTransactions') ->link() ->icon('heroicon-o-stop-circle') - ->label('Stop Importing Transactions') + ->label('Stop importing transactions') ->color('danger') ->requiresConfirmation() ->modalHeading('Stop Importing Transactions') @@ -164,7 +164,7 @@ public function refreshTransactions(): Action ->hiddenLabel() ->content('Refreshing transactions will update the selected account with the latest transactions from the bank if there are any new transactions available. This may take a few moments.'), Select::make('connected_bank_account_id') - ->label('Select Account') + ->label('Select account') ->softRequired() ->selectablePlaceholder(false) ->hint( @@ -278,7 +278,7 @@ public function handleLinkSuccess($publicToken, $metadata): void public function sendErrorNotification(string $message): void { Notification::make() - ->title('Hold On...') + ->title('Hold on...') ->danger() ->body($message) ->persistent() diff --git a/app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php b/app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php index 1a542725..0ebd0981 100644 --- a/app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php +++ b/app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php @@ -39,8 +39,8 @@ public function table(Table $table): Table ->weight(FontWeight::Medium) ->icon(static fn (Currency $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null) ->tooltip(function (Currency $record) { - $tooltipMessage = translate('Default :Record', [ - 'Record' => $this->getTableModelLabel(), + $tooltipMessage = translate('Default :record', [ + 'record' => $this->getTableModelLabel(), ]); if ($record->isEnabled()) { @@ -70,7 +70,7 @@ public function table(Table $table): Table ]) ->actions([ Tables\Actions\Action::make('update_rate') - ->label('Update Rate') + ->label('Update rate') ->icon('heroicon-o-arrow-path') ->hidden(static fn (Currency $record): bool => $record->isEnabled() || ($record->rate === $record->live_rate)) ->requiresConfirmation() @@ -82,7 +82,7 @@ public function table(Table $table): Table Notification::make() ->success() - ->title('Exchange Rate Updated') + ->title('Exchange rate updated') ->body(__('The exchange rate for :currency has been updated to reflect the current market rate.', [ 'currency' => $record->name, ])) @@ -92,7 +92,7 @@ public function table(Table $table): Table ]) ->bulkActions([ Tables\Actions\BulkAction::make('update_rate') - ->label('Update Rate') + ->label('Update rate') ->icon('heroicon-o-arrow-path') ->requiresConfirmation() ->deselectRecordsAfterCompletion() @@ -120,7 +120,7 @@ public function table(Table $table): Table Notification::make() ->success() - ->title('Exchange Rates Updated') + ->title('Exchange rates updated') ->body($message) ->send(); } diff --git a/app/Models/Accounting/Estimate.php b/app/Models/Accounting/Estimate.php index d3fa46f8..bea77990 100644 --- a/app/Models/Accounting/Estimate.php +++ b/app/Models/Accounting/Estimate.php @@ -263,12 +263,12 @@ public static function getApproveDraftAction(string $action = Action::class): Mo { return $action::make('approveDraft') ->label('Approve') - ->icon('heroicon-o-check-circle') + ->icon('heroicon-m-check-circle') ->visible(function (self $record) { return $record->canBeApproved(); }) ->databaseTransaction() - ->successNotificationTitle('Estimate Approved') + ->successNotificationTitle('Estimate approved') ->action(function (self $record, MountableAction $action) { $record->approveDraft(); @@ -279,12 +279,12 @@ public static function getApproveDraftAction(string $action = Action::class): Mo public static function getMarkAsSentAction(string $action = Action::class): MountableAction { return $action::make('markAsSent') - ->label('Mark as Sent') - ->icon('heroicon-o-paper-airplane') + ->label('Mark as sent') + ->icon('heroicon-m-paper-airplane') ->visible(static function (self $record) { return $record->canBeMarkedAsSent(); }) - ->successNotificationTitle('Estimate Sent') + ->successNotificationTitle('Estimate sent') ->action(function (self $record, MountableAction $action) { $record->markAsSent(); @@ -351,12 +351,12 @@ public static function getMarkAsAcceptedAction(string $action = Action::class): { return $action::make('markAsAccepted') ->label('Mark as Accepted') - ->icon('heroicon-o-check-badge') + ->icon('heroicon-m-check-badge') ->visible(static function (self $record) { return $record->canBeMarkedAsAccepted(); }) ->databaseTransaction() - ->successNotificationTitle('Estimate Accepted') + ->successNotificationTitle('Estimate accepted') ->action(function (self $record, MountableAction $action) { $record->markAsAccepted(); @@ -378,14 +378,14 @@ public static function getMarkAsDeclinedAction(string $action = Action::class): { return $action::make('markAsDeclined') ->label('Mark as Declined') - ->icon('heroicon-o-x-circle') + ->icon('heroicon-m-x-circle') ->visible(static function (self $record) { return $record->canBeMarkedAsDeclined(); }) ->color('danger') ->requiresConfirmation() ->databaseTransaction() - ->successNotificationTitle('Estimate Declined') + ->successNotificationTitle('Estimate declined') ->action(function (self $record, MountableAction $action) { $record->markAsDeclined(); @@ -407,12 +407,12 @@ public static function getConvertToInvoiceAction(string $action = Action::class) { return $action::make('convertToInvoice') ->label('Convert to Invoice') - ->icon('heroicon-o-arrow-right-on-rectangle') + ->icon('heroicon-m-arrow-right-on-rectangle') ->visible(static function (self $record) { return $record->canBeConverted(); }) ->databaseTransaction() - ->successNotificationTitle('Estimate Converted to Invoice') + ->successNotificationTitle('Estimate converted to invoice') ->action(function (self $record, MountableAction $action) { $record->convertToInvoice(); diff --git a/app/Models/Accounting/Invoice.php b/app/Models/Accounting/Invoice.php index d8a3f3b0..0f69efa8 100644 --- a/app/Models/Accounting/Invoice.php +++ b/app/Models/Accounting/Invoice.php @@ -465,12 +465,12 @@ public static function getApproveDraftAction(string $action = Action::class): Mo { return $action::make('approveDraft') ->label('Approve') - ->icon('heroicon-o-check-circle') + ->icon('heroicon-m-check-circle') ->visible(function (self $record) { return $record->canBeApproved(); }) ->databaseTransaction() - ->successNotificationTitle('Invoice Approved') + ->successNotificationTitle('Invoice approved') ->action(function (self $record, MountableAction $action) { $record->approveDraft(); @@ -481,12 +481,12 @@ public static function getApproveDraftAction(string $action = Action::class): Mo public static function getMarkAsSentAction(string $action = Action::class): MountableAction { return $action::make('markAsSent') - ->label('Mark as Sent') - ->icon('heroicon-o-paper-airplane') + ->label('Mark as sent') + ->icon('heroicon-m-paper-airplane') ->visible(static function (self $record) { return $record->canBeMarkedAsSent(); }) - ->successNotificationTitle('Invoice Sent') + ->successNotificationTitle('Invoice sent') ->action(function (self $record, MountableAction $action) { $record->markAsSent(); diff --git a/app/Models/Accounting/RecurringInvoice.php b/app/Models/Accounting/RecurringInvoice.php index c71b3dec..651e3f63 100644 --- a/app/Models/Accounting/RecurringInvoice.php +++ b/app/Models/Accounting/RecurringInvoice.php @@ -379,13 +379,13 @@ public function hasReachedEnd(?Carbon $nextDate = null): bool }; } - public static function getUpdateScheduleAction(string $action = Action::class): MountableAction + public static function getManageScheduleAction(string $action = Action::class): MountableAction { - return $action::make('updateSchedule') - ->label(fn (self $record) => $record->hasSchedule() ? 'Update Schedule' : 'Set Schedule') - ->icon('heroicon-o-calendar-date-range') + return $action::make('manageSchedule') + ->label(fn (self $record) => $record->hasSchedule() ? 'Edit schedule' : 'Set schedule') + ->icon('heroicon-m-calendar-date-range') ->slideOver() - ->successNotificationTitle('Schedule Updated') + ->successNotificationTitle('Schedule saved') ->mountUsing(function (self $record, Form $form) { $data = $record->attributesToArray(); @@ -492,7 +492,7 @@ public static function getUpdateScheduleAction(string $action = Action::class): ->contained(false) ->schema([ Forms\Components\DatePicker::make('start_date') - ->label('First Invoice Date') + ->label('First invoice date') ->softRequired() ->live() ->minDate(today()) @@ -506,7 +506,7 @@ public static function getUpdateScheduleAction(string $action = Action::class): $components = []; $components[] = Forms\Components\Select::make('end_type') - ->label('End Schedule') + ->label('End schedule') ->options(EndType::class) ->softRequired() ->live() @@ -533,7 +533,7 @@ public static function getUpdateScheduleAction(string $action = Action::class): return [ Cluster::make($components) - ->label('Schedule Ends') + ->label('Schedule ends') ->required() ->markAsRequired(false), ]; @@ -562,7 +562,7 @@ public static function getApproveDraftAction(string $action = Action::class): Mo return $record->canBeApproved(); }) ->databaseTransaction() - ->successNotificationTitle('Recurring Invoice Approved') + ->successNotificationTitle('Recurring invoice approved') ->action(function (self $record, MountableAction $action) { $record->approveDraft(); diff --git a/app/Providers/FilamentCompaniesServiceProvider.php b/app/Providers/Filament/CompanyPanelProvider.php similarity index 99% rename from app/Providers/FilamentCompaniesServiceProvider.php rename to app/Providers/Filament/CompanyPanelProvider.php index 3dae23fc..4f055c7f 100644 --- a/app/Providers/FilamentCompaniesServiceProvider.php +++ b/app/Providers/Filament/CompanyPanelProvider.php @@ -1,6 +1,6 @@ toDateTimeString(); } + + public function getUnpaidClientInvoices(?string $asOfDate = null): Builder + { + $asOfDate = $asOfDate ?? now()->toDateString(); + + return Invoice::query() + ->select([ + 'invoices.id', + 'invoices.client_id', + 'invoices.due_date', + 'invoices.amount_due', + DB::raw('DATEDIFF(?, invoices.due_date) as days_overdue'), + ]) + ->addBinding([$asOfDate], 'select') + ->unpaid() + ->where('amount_due', '>', 0); + } + + public function getUnpaidVendorBills(?string $asOfDate = null): Builder + { + $asOfDate = $asOfDate ?? now()->toDateString(); + + return Bill::query() + ->select([ + 'bills.id', + 'bills.vendor_id', + 'bills.due_date', + 'bills.amount_due', + DB::raw('DATEDIFF(?, bills.due_date) as days_overdue'), + ]) + ->addBinding([$asOfDate], 'select') + ->outstanding() + ->where('amount_due', '>', 0); + } } diff --git a/app/Services/ExportService.php b/app/Services/ExportService.php index c912fc9f..64f6de92 100644 --- a/app/Services/ExportService.php +++ b/app/Services/ExportService.php @@ -125,9 +125,9 @@ protected function writeDetailedTableToCsv(Writer $csv, ExportableReport $report if (filled($category->summary)) { $csv->insertOne($category->summary); - } - $csv->insertOne([]); + $csv->insertOne([]); + } } if (method_exists($report, 'getOverviewHeaders') && filled($report->getOverviewHeaders())) { @@ -221,14 +221,16 @@ protected function writeOverviewTableToCsv(Writer $csv, ExportableReport $report * @throws CannotInsertRecord * @throws Exception */ - protected function writeDataRowsToCsv(Writer $csv, array $header, array $data, array $columns): void + protected function writeDataRowsToCsv(Writer $csv, ?array $header, array $data, array $columns): void { - if (isset($header[0]) && is_array($header[0])) { - foreach ($header as $headerRow) { - $csv->insertOne($headerRow); + if ($header) { + if (isset($header[0]) && is_array($header[0])) { + foreach ($header as $headerRow) { + $csv->insertOne($headerRow); + } + } else { + $csv->insertOne($header); } - } else { - $csv->insertOne($header); } // Output data rows diff --git a/app/Services/ReportService.php b/app/Services/ReportService.php index 869d44c4..9476e85e 100644 --- a/app/Services/ReportService.php +++ b/app/Services/ReportService.php @@ -2,15 +2,19 @@ namespace App\Services; +use App\Contracts\MoneyFormattableDTO; use App\DTO\AccountBalanceDTO; use App\DTO\AccountCategoryDTO; use App\DTO\AccountDTO; use App\DTO\AccountTransactionDTO; use App\DTO\AccountTypeDTO; +use App\DTO\AgingBucketDTO; use App\DTO\CashFlowOverviewDTO; +use App\DTO\EntityReportDTO; use App\DTO\ReportDTO; use App\Enums\Accounting\AccountCategory; use App\Enums\Accounting\AccountType; +use App\Enums\Accounting\DocumentEntityType; use App\Enums\Accounting\TransactionType; use App\Models\Accounting\Account; use App\Models\Accounting\Transaction; @@ -27,21 +31,26 @@ public function __construct( protected AccountService $accountService, ) {} - public function formatBalances(array $balances): AccountBalanceDTO + /** + * @param class-string|null $dtoClass + */ + public function formatBalances(array $balances, ?string $dtoClass = null, bool $formatZeros = true): MoneyFormattableDTO | array { - $defaultCurrency = CurrencyAccessor::getDefaultCurrency(); + $dtoClass ??= AccountBalanceDTO::class; + + $formattedBalances = array_map(static function ($balance) use ($formatZeros) { + if (! $formatZeros && $balance === 0) { + return ''; + } - foreach ($balances as $key => $balance) { - $balances[$key] = money($balance, $defaultCurrency)->format(); + return CurrencyConverter::formatCentsToMoney($balance); + }, $balances); + + if (! $dtoClass) { + return $formattedBalances; } - return new AccountBalanceDTO( - startingBalance: $balances['starting_balance'] ?? null, - debitBalance: $balances['debit_balance'] ?? null, - creditBalance: $balances['credit_balance'] ?? null, - netMovement: $balances['net_movement'] ?? null, - endingBalance: $balances['ending_balance'] ?? null, - ); + return $dtoClass::fromArray($formattedBalances); } public function buildAccountBalanceReport(string $startDate, string $endDate, array $columns = []): ReportDTO @@ -263,9 +272,9 @@ private function determineTableAction(Transaction $transaction): array return [ 'type' => 'transaction', 'action' => match ($transaction->type) { - TransactionType::Journal => 'updateJournalTransaction', - TransactionType::Transfer => 'updateTransfer', - default => 'updateTransaction', + TransactionType::Journal => 'editJournalTransaction', + TransactionType::Transfer => 'editTransfer', + default => 'editTransaction', }, 'id' => $transaction->id, ]; @@ -361,10 +370,10 @@ public function buildTrialBalanceReport(string $trialBalanceType, string $asOfDa $formattedReportTotalBalances = $this->formatBalances($reportTotalBalances); - return new ReportDTO($accountCategories, $formattedReportTotalBalances, $columns, $trialBalanceType); + return new ReportDTO(categories: $accountCategories, overallTotal: $formattedReportTotalBalances, fields: $columns, reportType: $trialBalanceType); } - public function getRetainedEarningsBalances(string $startDate, string $endDate): AccountBalanceDTO + public function getRetainedEarningsBalances(string $startDate, string $endDate): MoneyFormattableDTO | array { $retainedEarningsAmount = $this->calculateRetainedEarnings($startDate, $endDate)->getAmount(); @@ -507,7 +516,7 @@ public function buildCashFlowStatementReport(string $startDate, string $endDate, ); } - private function calculateTotalCashFlows(array $sections, string $startDate): AccountBalanceDTO + private function calculateTotalCashFlows(array $sections, string $startDate): MoneyFormattableDTO | array { $totalInflow = 0; $totalOutflow = 0; @@ -819,4 +828,75 @@ public function buildBalanceSheetReport(string $asOfDate, array $columns = []): endDate: $asOfDateCarbon, ); } + + public function buildAgingReport( + string $asOfDate, + DocumentEntityType $entityType, + array $columns = [], + int $daysPerPeriod = 30, + int $numberOfPeriods = 4 + ): ReportDTO { + $asOfDateCarbon = Carbon::parse($asOfDate); + + $documents = $entityType === DocumentEntityType::Client + ? $this->accountService->getUnpaidClientInvoices($asOfDate)->with(['client:id,name'])->get()->groupBy('client_id') + : $this->accountService->getUnpaidVendorBills($asOfDate)->with(['vendor:id,name'])->get()->groupBy('vendor_id'); + + $categories = []; + + $agingBuckets = ['current' => 0]; + + for ($i = 1; $i <= $numberOfPeriods; $i++) { + $agingBuckets["period_{$i}"] = 0; + } + + $agingBuckets['over_periods'] = 0; + $agingBuckets['total'] = 0; + + $totalAging = $agingBuckets; + + foreach ($documents as $entityId => $entityDocuments) { + $aging = $agingBuckets; + + foreach ($entityDocuments as $document) { + $daysOverdue = $document->days_overdue ?? 0; + $balance = $document->getRawOriginal('amount_due'); + + if ($daysOverdue <= 0) { + $aging['current'] += $balance; + } else { + $period = ceil($daysOverdue / $daysPerPeriod); + + if ($period <= $numberOfPeriods) { + $aging["period_{$period}"] += $balance; + } else { + $aging['over_periods'] += $balance; + } + } + } + + $aging['total'] = array_sum($aging); + + foreach ($aging as $bucket => $amount) { + $totalAging[$bucket] += $amount; + } + + $entity = $entityDocuments->first()->{$entityType->value}; + + $categories[] = new EntityReportDTO( + name: $entity->name, + id: $entityId, + aging: $this->formatBalances($aging, AgingBucketDTO::class, false), + ); + } + + $totalAging['total'] = array_sum($totalAging); + + return new ReportDTO( + categories: ['Entities' => $categories], + agingSummary: $this->formatBalances($totalAging, AgingBucketDTO::class), + fields: $columns, + endDate: $asOfDateCarbon, + ); + } } diff --git a/app/Transformers/AgingReportTransformer.php b/app/Transformers/AgingReportTransformer.php new file mode 100644 index 00000000..eb5946b6 --- /dev/null +++ b/app/Transformers/AgingReportTransformer.php @@ -0,0 +1,85 @@ +entityType->getReportTitle(); + } + + /** + * @return ReportCategoryDTO[] + */ + public function getCategories(): array + { + $categories = []; + + foreach ($this->report->categories as $category) { + $data = array_map(function (EntityReportDTO $entity) { + $row = []; + + foreach ($this->getColumns() as $column) { + $columnName = $column->getName(); + + $row[$columnName] = match ($columnName) { + 'entity_name' => [ + 'name' => $entity->name, + 'id' => $entity->id, + ], + 'current' => $entity->aging->current, + 'over_periods' => $entity->aging->overPeriods, + 'total' => $entity->aging->total, + default => str_starts_with($columnName, 'period_') + ? $entity->aging->periods[$columnName] ?? null + : '', + }; + } + + return $row; + }, $category); + + $categories[] = new ReportCategoryDTO( + header: null, + data: $data, + summary: null, + ); + } + + return $categories; + } + + public function getOverallTotals(): array + { + $totals = []; + + foreach ($this->getColumns() as $column) { + $columnName = $column->getName(); + + $totals[$columnName] = match ($columnName) { + 'entity_name' => 'Total', + 'current' => $this->report->agingSummary->current, + 'over_periods' => $this->report->agingSummary->overPeriods, + 'total' => $this->report->agingSummary->total, + default => str_starts_with($columnName, 'period_') + ? $this->report->agingSummary->periods[$columnName] ?? null + : '', + }; + } + + return $totals; + } +} diff --git a/bootstrap/providers.php b/bootstrap/providers.php index e00ab4d8..07302aad 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -4,7 +4,7 @@ App\Providers\AppServiceProvider::class, App\Providers\AuthServiceProvider::class, App\Providers\Filament\AdminPanelProvider::class, - App\Providers\FilamentCompaniesServiceProvider::class, + App\Providers\Filament\CompanyPanelProvider::class, App\Providers\Filament\UserPanelProvider::class, App\Providers\Faker\FakerServiceProvider::class, App\Providers\MacroServiceProvider::class, diff --git a/composer.lock b/composer.lock index 19fbf59d..150f4dcc 100644 --- a/composer.lock +++ b/composer.lock @@ -77,16 +77,16 @@ }, { "name": "andrewdwallo/filament-companies", - "version": "v4.0.6", + "version": "v4.0.7", "source": { "type": "git", "url": "https://github.com/andrewdwallo/filament-companies.git", - "reference": "d45c96f2a1baff0b1579513e4ef176b59322b8bb" + "reference": "4de8c488162e2435658555db013f28c4ebb19f22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/andrewdwallo/filament-companies/zipball/d45c96f2a1baff0b1579513e4ef176b59322b8bb", - "reference": "d45c96f2a1baff0b1579513e4ef176b59322b8bb", + "url": "https://api.github.com/repos/andrewdwallo/filament-companies/zipball/4de8c488162e2435658555db013f28c4ebb19f22", + "reference": "4de8c488162e2435658555db013f28c4ebb19f22", "shasum": "" }, "require": { @@ -150,9 +150,9 @@ ], "support": { "issues": "https://github.com/andrewdwallo/filament-companies/issues", - "source": "https://github.com/andrewdwallo/filament-companies/tree/v4.0.6" + "source": "https://github.com/andrewdwallo/filament-companies/tree/v4.0.7" }, - "time": "2024-11-13T23:20:24+00:00" + "time": "2025-01-28T02:32:00+00:00" }, { "name": "andrewdwallo/filament-selectify", @@ -220,16 +220,16 @@ }, { "name": "andrewdwallo/transmatic", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/andrewdwallo/transmatic.git", - "reference": "fabd11ba0b9ed2813cd60556f7e8d3f0d236c329" + "reference": "30f5384e7e3b693beaf528b01650570a916daf47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/andrewdwallo/transmatic/zipball/fabd11ba0b9ed2813cd60556f7e8d3f0d236c329", - "reference": "fabd11ba0b9ed2813cd60556f7e8d3f0d236c329", + "url": "https://api.github.com/repos/andrewdwallo/transmatic/zipball/30f5384e7e3b693beaf528b01650570a916daf47", + "reference": "30f5384e7e3b693beaf528b01650570a916daf47", "shasum": "" }, "require": { @@ -296,22 +296,22 @@ ], "support": { "issues": "https://github.com/andrewdwallo/transmatic/issues", - "source": "https://github.com/andrewdwallo/transmatic/tree/v1.1.0" + "source": "https://github.com/andrewdwallo/transmatic/tree/v1.1.1" }, - "time": "2024-03-22T21:31:50+00:00" + "time": "2025-01-26T05:48:43+00:00" }, { "name": "anourvalar/eloquent-serialize", - "version": "1.2.27", + "version": "1.2.28", "source": { "type": "git", "url": "https://github.com/AnourValar/eloquent-serialize.git", - "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe" + "reference": "482be4ef83ad9f7b9d0fd0863bd675357658c94a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", - "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/482be4ef83ad9f7b9d0fd0863bd675357658c94a", + "reference": "482be4ef83ad9f7b9d0fd0863bd675357658c94a", "shasum": "" }, "require": { @@ -322,7 +322,7 @@ "friendsofphp/php-cs-fixer": "^3.26", "laravel/legacy-factories": "^1.1", "orchestra/testbench": "^6.0|^7.0|^8.0|^9.0", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^9.5|^10.5", "psalm/plugin-laravel": "^2.8", "squizlabs/php_codesniffer": "^3.7" @@ -362,9 +362,9 @@ ], "support": { "issues": "https://github.com/AnourValar/eloquent-serialize/issues", - "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.27" + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.28" }, - "time": "2024-11-30T08:27:24+00:00" + "time": "2025-01-27T15:13:13+00:00" }, { "name": "awcodes/filament-table-repeater", @@ -497,16 +497,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.337.3", + "version": "3.339.2", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6" + "reference": "2f4e85dd8466ffe5186887f8f1466a0248c6c094" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/06dfc8f76423b49aaa181debd25bbdc724c346d6", - "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2f4e85dd8466ffe5186887f8f1466a0248c6c094", + "reference": "2f4e85dd8466ffe5186887f8f1466a0248c6c094", "shasum": "" }, "require": { @@ -514,31 +514,31 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0" + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/promises": "^2.0", + "guzzlehttp/psr7": "^2.4.5", + "mtdowling/jmespath.php": "^2.8.0", + "php": ">=8.1", + "psr/http-message": "^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", - "composer/composer": "^1.10.22", + "composer/composer": "^2.7.8", "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", "ext-pcntl": "*", "ext-sockets": "*", - "nette/neon": "^2.3", "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "symfony/filesystem": "^v6.4.0 || ^v7.1.0", + "yoast/phpunit-polyfills": "^2.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -587,11 +587,11 @@ "sdk" ], "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.337.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.339.2" }, - "time": "2025-01-21T19:10:05+00:00" + "time": "2025-01-29T19:53:29+00:00" }, { "name": "aws/aws-sdk-php-laravel", @@ -1153,16 +1153,16 @@ }, { "name": "danharrin/livewire-rate-limiting", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/danharrin/livewire-rate-limiting.git", - "reference": "0d9c1890174b3d1857dba6ce76de7c178fe20283" + "reference": "18680be2b4d3d901d8e453560f77810145492b34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/0d9c1890174b3d1857dba6ce76de7c178fe20283", - "reference": "0d9c1890174b3d1857dba6ce76de7c178fe20283", + "url": "https://api.github.com/repos/danharrin/livewire-rate-limiting/zipball/18680be2b4d3d901d8e453560f77810145492b34", + "reference": "18680be2b4d3d901d8e453560f77810145492b34", "shasum": "" }, "require": { @@ -1203,7 +1203,7 @@ "type": "github" } ], - "time": "2024-11-24T16:57:47+00:00" + "time": "2025-01-22T14:01:35+00:00" }, { "name": "dflydev/dot-access-data", @@ -1733,16 +1733,16 @@ }, { "name": "filament/actions", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "33464f1583217b5eb12364b617b27abe5315eb88" + "reference": "dee2ca6d11e0ea3efb1190eabf6e483dbe2320ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/33464f1583217b5eb12364b617b27abe5315eb88", - "reference": "33464f1583217b5eb12364b617b27abe5315eb88", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/dee2ca6d11e0ea3efb1190eabf6e483dbe2320ff", + "reference": "dee2ca6d11e0ea3efb1190eabf6e483dbe2320ff", "shasum": "" }, "require": { @@ -1782,20 +1782,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:47:49+00:00" + "time": "2025-01-24T09:27:43+00:00" }, { "name": "filament/filament", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "74550888c1c79761218aece3c339ca0e0cc260e8" + "reference": "bee6e1fd7b51f7dbffd03bc277b220bcfb8c45bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/74550888c1c79761218aece3c339ca0e0cc260e8", - "reference": "74550888c1c79761218aece3c339ca0e0cc260e8", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/bee6e1fd7b51f7dbffd03bc277b220bcfb8c45bb", + "reference": "bee6e1fd7b51f7dbffd03bc277b220bcfb8c45bb", "shasum": "" }, "require": { @@ -1847,20 +1847,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:48:32+00:00" + "time": "2025-01-24T09:27:52+00:00" }, { "name": "filament/forms", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "20473c9eec7afa3ee618d2f86c7c449b3723d9fb" + "reference": "e17618c921cd0300341a53d0eb2174c51e649565" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/20473c9eec7afa3ee618d2f86c7c449b3723d9fb", - "reference": "20473c9eec7afa3ee618d2f86c7c449b3723d9fb", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/e17618c921cd0300341a53d0eb2174c51e649565", + "reference": "e17618c921cd0300341a53d0eb2174c51e649565", "shasum": "" }, "require": { @@ -1903,20 +1903,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:47:50+00:00" + "time": "2025-01-24T09:27:50+00:00" }, { "name": "filament/infolists", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "d3ee1eb508561f2b101c69cdb45c309539948d86" + "reference": "3330966b87da7d2078b62556428c279a6e8ff17c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/d3ee1eb508561f2b101c69cdb45c309539948d86", - "reference": "d3ee1eb508561f2b101c69cdb45c309539948d86", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/3330966b87da7d2078b62556428c279a6e8ff17c", + "reference": "3330966b87da7d2078b62556428c279a6e8ff17c", "shasum": "" }, "require": { @@ -1954,20 +1954,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:48:11+00:00" + "time": "2025-01-24T09:27:49+00:00" }, { "name": "filament/notifications", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", - "reference": "16cf5dbcbaf88cd9fff8d06aad866cb314b8bb64" + "reference": "e864c50bc0b6e9eb46b5e3d93a672a66f80a0fbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/notifications/zipball/16cf5dbcbaf88cd9fff8d06aad866cb314b8bb64", - "reference": "16cf5dbcbaf88cd9fff8d06aad866cb314b8bb64", + "url": "https://api.github.com/repos/filamentphp/notifications/zipball/e864c50bc0b6e9eb46b5e3d93a672a66f80a0fbe", + "reference": "e864c50bc0b6e9eb46b5e3d93a672a66f80a0fbe", "shasum": "" }, "require": { @@ -2006,20 +2006,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:48:23+00:00" + "time": "2025-01-24T09:27:49+00:00" }, { "name": "filament/support", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "38fd76ae4f96b53e6f98cbb7bad3f05ad5032cee" + "reference": "ca0ff1fa43d743e06de9c2f50ccea98e23785c7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/38fd76ae4f96b53e6f98cbb7bad3f05ad5032cee", - "reference": "38fd76ae4f96b53e6f98cbb7bad3f05ad5032cee", + "url": "https://api.github.com/repos/filamentphp/support/zipball/ca0ff1fa43d743e06de9c2f50ccea98e23785c7d", + "reference": "ca0ff1fa43d743e06de9c2f50ccea98e23785c7d", "shasum": "" }, "require": { @@ -2065,20 +2065,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:48:52+00:00" + "time": "2025-01-24T09:28:01+00:00" }, { "name": "filament/tables", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "6cbbea0bfd966ca2f26988c0fac4e02caebddf4a" + "reference": "db63ab6fd7c2046dc9b1fc6fbd92df0a1aabb54e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/6cbbea0bfd966ca2f26988c0fac4e02caebddf4a", - "reference": "6cbbea0bfd966ca2f26988c0fac4e02caebddf4a", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/db63ab6fd7c2046dc9b1fc6fbd92df0a1aabb54e", + "reference": "db63ab6fd7c2046dc9b1fc6fbd92df0a1aabb54e", "shasum": "" }, "require": { @@ -2117,11 +2117,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2025-01-10T12:48:48+00:00" + "time": "2025-01-24T09:28:02+00:00" }, { "name": "filament/widgets", - "version": "v3.2.133", + "version": "v3.2.135", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", @@ -2165,16 +2165,16 @@ }, { "name": "firebase/php-jwt", - "version": "v6.10.2", + "version": "v6.11.0", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", - "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/8f718f4dfc9c5d5f0c994cdfd103921b43592712", + "reference": "8f718f4dfc9c5d5f0c994cdfd103921b43592712", "shasum": "" }, "require": { @@ -2222,9 +2222,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" + "source": "https://github.com/firebase/php-jwt/tree/v6.11.0" }, - "time": "2024-11-24T11:22:49+00:00" + "time": "2025-01-23T05:11:06+00:00" }, { "name": "fruitcake/php-cors", @@ -3051,16 +3051,16 @@ }, { "name": "laravel/framework", - "version": "v11.39.0", + "version": "v11.41.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "996c96955f78e8a2b26a24c490a1721cfb14574f" + "reference": "42d6ae000c868c2abfa946da46702f2358493482" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/996c96955f78e8a2b26a24c490a1721cfb14574f", - "reference": "996c96955f78e8a2b26a24c490a1721cfb14574f", + "url": "https://api.github.com/repos/laravel/framework/zipball/42d6ae000c868c2abfa946da46702f2358493482", + "reference": "42d6ae000c868c2abfa946da46702f2358493482", "shasum": "" }, "require": { @@ -3086,7 +3086,7 @@ "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.4", + "nesbot/carbon": "^2.72.6|^3.8.4", "nunomaduro/termwind": "^2.0", "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", @@ -3161,6 +3161,7 @@ "fakerphp/faker": "^1.24", "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^2.4", + "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", "league/flysystem-ftp": "^3.25.1", "league/flysystem-path-prefixing": "^3.25.1", @@ -3261,20 +3262,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-01-21T15:02:43+00:00" + "time": "2025-01-28T15:22:55+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.3", + "version": "v0.3.4", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea" + "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", - "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", + "url": "https://api.github.com/repos/laravel/prompts/zipball/abeaa2ba4294247d5409490d1ca1bc6248087011", + "reference": "abeaa2ba4294247d5409490d1ca1bc6248087011", "shasum": "" }, "require": { @@ -3288,7 +3289,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0", + "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", @@ -3318,38 +3319,38 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.3" + "source": "https://github.com/laravel/prompts/tree/v0.3.4" }, - "time": "2024-12-30T15:53:31+00:00" + "time": "2025-01-24T15:41:01+00:00" }, { "name": "laravel/sanctum", - "version": "v4.0.7", + "version": "v4.0.8", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "698064236a46df016e64a7eb059b1414e0b281df" + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/698064236a46df016e64a7eb059b1414e0b281df", - "reference": "698064236a46df016e64a7eb059b1414e0b281df", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/ec1dd9ddb2ab370f79dfe724a101856e0963f43c", + "reference": "ec1dd9ddb2ab370f79dfe724a101856e0963f43c", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/database": "^11.0", - "illuminate/support": "^11.0", + "illuminate/console": "^11.0|^12.0", + "illuminate/contracts": "^11.0|^12.0", + "illuminate/database": "^11.0|^12.0", + "illuminate/support": "^11.0|^12.0", "php": "^8.2", "symfony/console": "^7.0" }, "require-dev": { "mockery/mockery": "^1.6", - "orchestra/testbench": "^9.0", + "orchestra/testbench": "^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -3384,29 +3385,29 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-12-11T16:40:21+00:00" + "time": "2025-01-26T19:34:36+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.1", + "version": "v2.0.2", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" + "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", - "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/2e1a362527783bcab6c316aad51bf36c5513ae44", + "reference": "2e1a362527783bcab6c316aad51bf36c5513ae44", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "illuminate/support": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0|^12.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36", + "pestphp/pest": "^2.36|^3.0", "phpstan/phpstan": "^2.0", "symfony/var-dumper": "^6.2.0|^7.0.0" }, @@ -3445,38 +3446,38 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-12-16T15:26:28+00:00" + "time": "2025-01-24T15:42:37+00:00" }, { "name": "laravel/socialite", - "version": "v5.17.0", + "version": "v5.17.1", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "77be8be7ee5099aed8ca7cfddc1bf6f9ab3fc159" + "reference": "4b44c97c04da28e5aabb73df70b0999e9976382f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/77be8be7ee5099aed8ca7cfddc1bf6f9ab3fc159", - "reference": "77be8be7ee5099aed8ca7cfddc1bf6f9ab3fc159", + "url": "https://api.github.com/repos/laravel/socialite/zipball/4b44c97c04da28e5aabb73df70b0999e9976382f", + "reference": "4b44c97c04da28e5aabb73df70b0999e9976382f", "shasum": "" }, "require": { "ext-json": "*", "firebase/php-jwt": "^6.4", "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "league/oauth1-client": "^1.11", "php": "^7.2|^8.0", "phpseclib/phpseclib": "^3.0" }, "require-dev": { "mockery/mockery": "^1.0", - "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0", + "orchestra/testbench": "^4.0|^5.0|^6.0|^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.0|^9.3|^10.4" + "phpunit/phpunit": "^8.0|^9.3|^10.4|^11.5" }, "type": "library", "extra": { @@ -3517,26 +3518,26 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2025-01-17T15:17:00+00:00" + "time": "2025-01-28T15:16:52+00:00" }, { "name": "laravel/tinker", - "version": "v2.10.0", + "version": "v2.10.1", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5" + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/ba4d51eb56de7711b3a37d63aa0643e99a339ae5", - "reference": "ba4d51eb56de7711b3a37d63aa0643e99a339ae5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", + "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", "php": "^7.2.5|^8.0", "psy/psysh": "^0.11.1|^0.12.0", "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" @@ -3544,10 +3545,10 @@ "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3" + "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0)." + "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." }, "type": "library", "extra": { @@ -3581,9 +3582,9 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.0" + "source": "https://github.com/laravel/tinker/tree/v2.10.1" }, - "time": "2024-09-23T13:32:56+00:00" + "time": "2025-01-27T14:24:01+00:00" }, { "name": "league/commonmark", @@ -6491,16 +6492,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.18.2", + "version": "1.18.3", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "d41c44a7eab604c3eb0cad93210612d4c1429c20" + "reference": "ba67eee37d86ed775dab7dad58a7cbaf9a6cfe78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d41c44a7eab604c3eb0cad93210612d4c1429c20", - "reference": "d41c44a7eab604c3eb0cad93210612d4c1429c20", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/ba67eee37d86ed775dab7dad58a7cbaf9a6cfe78", + "reference": "ba67eee37d86ed775dab7dad58a7cbaf9a6cfe78", "shasum": "" }, "require": { @@ -6539,7 +6540,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.18.2" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.18.3" }, "funding": [ { @@ -6547,7 +6548,7 @@ "type": "github" } ], - "time": "2025-01-20T14:14:17+00:00" + "time": "2025-01-22T08:51:18+00:00" }, { "name": "squirephp/model", @@ -6959,16 +6960,16 @@ }, { "name": "symfony/error-handler", - "version": "v7.2.1", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "6150b89186573046167796fa5f3f76601d5145f8" + "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", - "reference": "6150b89186573046167796fa5f3f76601d5145f8", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/959a74d044a6db21f4caa6d695648dcb5584cb49", + "reference": "959a74d044a6db21f4caa6d695648dcb5584cb49", "shasum": "" }, "require": { @@ -7014,7 +7015,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.2.1" + "source": "https://github.com/symfony/error-handler/tree/v7.2.3" }, "funding": [ { @@ -7030,7 +7031,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-01-07T09:39:55+00:00" }, { "name": "symfony/event-dispatcher", @@ -7254,16 +7255,16 @@ }, { "name": "symfony/html-sanitizer", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "f6bc679b024e30f27e33815930a5b8b304c79813" + "reference": "91443febe34cfa5e8e00425f892e6316db95bc23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/f6bc679b024e30f27e33815930a5b8b304c79813", - "reference": "f6bc679b024e30f27e33815930a5b8b304c79813", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/91443febe34cfa5e8e00425f892e6316db95bc23", + "reference": "91443febe34cfa5e8e00425f892e6316db95bc23", "shasum": "" }, "require": { @@ -7303,7 +7304,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.2.2" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.2.3" }, "funding": [ { @@ -7319,20 +7320,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T18:35:15+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", - "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", "shasum": "" }, "require": { @@ -7381,7 +7382,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.2" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" }, "funding": [ { @@ -7397,20 +7398,20 @@ "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.2", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" + "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", - "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b", + "reference": "caae9807f8e25a9b43ce8cc6fafab6cf91f0cc9b", "shasum": "" }, "require": { @@ -7495,7 +7496,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.2.2" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.3" }, "funding": [ { @@ -7511,7 +7512,7 @@ "type": "tidelift" } ], - "time": "2024-12-31T14:59:40+00:00" + "time": "2025-01-29T07:40:13+00:00" }, { "name": "symfony/intl", @@ -7598,16 +7599,16 @@ }, { "name": "symfony/mailer", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", - "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", + "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", "shasum": "" }, "require": { @@ -7658,7 +7659,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.0" + "source": "https://github.com/symfony/mailer/tree/v7.2.3" }, "funding": [ { @@ -7674,20 +7675,20 @@ "type": "tidelift" } ], - "time": "2024-11-25T15:21:05+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/mime", - "version": "v7.2.1", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" + "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", - "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "url": "https://api.github.com/repos/symfony/mime/zipball/2fc3b4bd67e4747e45195bc4c98bea4628476204", + "reference": "2fc3b4bd67e4747e45195bc4c98bea4628476204", "shasum": "" }, "require": { @@ -7742,7 +7743,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.1" + "source": "https://github.com/symfony/mime/tree/v7.2.3" }, "funding": [ { @@ -7758,7 +7759,7 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:50:44+00:00" + "time": "2025-01-27T11:08:17+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8459,16 +8460,16 @@ }, { "name": "symfony/routing", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", - "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", + "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", "shasum": "" }, "require": { @@ -8520,7 +8521,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.0" + "source": "https://github.com/symfony/routing/tree/v7.2.3" }, "funding": [ { @@ -8536,7 +8537,7 @@ "type": "tidelift" } ], - "time": "2024-11-25T11:08:51+00:00" + "time": "2025-01-17T10:56:55+00:00" }, { "name": "symfony/service-contracts", @@ -8957,16 +8958,16 @@ }, { "name": "symfony/var-dumper", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", - "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", + "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", "shasum": "" }, "require": { @@ -9020,7 +9021,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" }, "funding": [ { @@ -9036,7 +9037,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:48:14+00:00" + "time": "2025-01-17T11:39:41+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -9530,16 +9531,16 @@ }, { "name": "filp/whoops", - "version": "2.16.0", + "version": "2.17.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2" + "reference": "075bc0c26631110584175de6523ab3f1652eb28e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/befcdc0e5dce67252aa6322d82424be928214fa2", - "reference": "befcdc0e5dce67252aa6322d82424be928214fa2", + "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", + "reference": "075bc0c26631110584175de6523ab3f1652eb28e", "shasum": "" }, "require": { @@ -9589,7 +9590,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.16.0" + "source": "https://github.com/filp/whoops/tree/2.17.0" }, "funding": [ { @@ -9597,7 +9598,7 @@ "type": "github" } ], - "time": "2024-09-25T12:00:00+00:00" + "time": "2025-01-25T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -9777,28 +9778,28 @@ }, { "name": "laravel/sail", - "version": "v1.40.0", + "version": "v1.41.0", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71" + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/237e70656d8eface4839de51d101284bd5d0cf71", - "reference": "237e70656d8eface4839de51d101284bd5d0cf71", + "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", + "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", "shasum": "" }, "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", + "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", + "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", "php": "^8.0", "symfony/console": "^6.0|^7.0", "symfony/yaml": "^6.0|^7.0" }, "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", + "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", "phpstan/phpstan": "^1.10" }, "bin": [ @@ -9836,7 +9837,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2025-01-13T16:57:11+00:00" + "time": "2025-01-24T15:45:36+00:00" }, { "name": "mockery/mockery", @@ -9983,37 +9984,37 @@ }, { "name": "nunomaduro/collision", - "version": "v8.5.0", + "version": "v8.6.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "reference": "86f003c132143d5a2ab214e19933946409e0cae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/86f003c132143d5a2ab214e19933946409e0cae7", + "reference": "86f003c132143d5a2ab214e19933946409e0cae7", "shasum": "" }, "require": { "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", + "nunomaduro/termwind": "^2.3.0", "php": "^8.2.0", - "symfony/console": "^7.1.5" + "symfony/console": "^7.2.1" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "laravel/framework": "<11.39.1 || >=13.0.0", + "phpunit/phpunit": "<11.5.3 || >=12.0.0" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", + "larastan/larastan": "^2.9.12", + "laravel/framework": "^11.39.1", + "laravel/pint": "^1.20.0", + "laravel/sail": "^1.40.0", + "laravel/sanctum": "^4.0.7", "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", + "orchestra/testbench-core": "^9.9.2", + "pestphp/pest": "^3.7.3", "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", @@ -10051,6 +10052,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -10076,25 +10078,25 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2025-01-23T13:41:43+00:00" }, { "name": "pestphp/pest", - "version": "v3.7.2", + "version": "v3.7.4", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b" + "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", - "reference": "709ecb1ba2641fc0c4653ebe1fd8a402bbf4d18b", + "url": "https://api.github.com/repos/pestphp/pest/zipball/4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b", + "reference": "4a987d3d5c4e3ba36c76fecbf56113baac2d1b2b", "shasum": "" }, "require": { "brianium/paratest": "^7.7.0", - "nunomaduro/collision": "^8.5.0", + "nunomaduro/collision": "^8.6.1", "nunomaduro/termwind": "^2.3.0", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0", @@ -10176,7 +10178,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.7.2" + "source": "https://github.com/pestphp/pest/tree/v3.7.4" }, "funding": [ { @@ -10188,7 +10190,7 @@ "type": "github" } ], - "time": "2025-01-19T17:35:09+00:00" + "time": "2025-01-23T14:03:29+00:00" }, { "name": "pestphp/pest-plugin", @@ -10586,6 +10588,134 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-di/invoker", + "version": "2.3.6", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/Invoker.git", + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/59f15608528d8a8838d69b422a919fd6b16aa576", + "reference": "59f15608528d8a8838d69b422a919fd6b16aa576", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "psr/container": "^1.0|^2.0" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "mnapoli/hard-mode": "~0.3.0", + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Invoker\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Generic and extensible callable invoker", + "homepage": "https://github.com/PHP-DI/Invoker", + "keywords": [ + "callable", + "dependency", + "dependency-injection", + "injection", + "invoke", + "invoker" + ], + "support": { + "issues": "https://github.com/PHP-DI/Invoker/issues", + "source": "https://github.com/PHP-DI/Invoker/tree/2.3.6" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + } + ], + "time": "2025-01-17T12:49:27+00:00" + }, + { + "name": "php-di/php-di", + "version": "7.0.8", + "source": { + "type": "git", + "url": "https://github.com/PHP-DI/PHP-DI.git", + "reference": "98ddc81f8f768a2ad39e4cbe737285eaeabe577a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/98ddc81f8f768a2ad39e4cbe737285eaeabe577a", + "reference": "98ddc81f8f768a2ad39e4cbe737285eaeabe577a", + "shasum": "" + }, + "require": { + "laravel/serializable-closure": "^1.0 || ^2.0", + "php": ">=8.0", + "php-di/invoker": "^2.0", + "psr/container": "^1.1 || ^2.0" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3", + "friendsofphp/proxy-manager-lts": "^1", + "mnapoli/phpunit-easymock": "^1.3", + "phpunit/phpunit": "^9.6", + "vimeo/psalm": "^4.6" + }, + "suggest": { + "friendsofphp/proxy-manager-lts": "Install it if you want to use lazy injection (version ^1)" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "DI\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The dependency injection container for humans", + "homepage": "https://php-di.org/", + "keywords": [ + "PSR-11", + "container", + "container-interop", + "dependency injection", + "di", + "ioc", + "psr11" + ], + "support": { + "issues": "https://github.com/PHP-DI/PHP-DI/issues", + "source": "https://github.com/PHP-DI/PHP-DI/tree/7.0.8" + }, + "funding": [ + { + "url": "https://github.com/mnapoli", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/php-di/php-di", + "type": "tidelift" + } + ], + "time": "2025-01-28T21:02:46+00:00" + }, { "name": "phpdocumentor/reflection-common", "version": "2.2.0", @@ -11232,59 +11362,6 @@ ], "time": "2025-01-13T09:36:00+00:00" }, - { - "name": "pimple/pimple", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" - }, - "time": "2021-10-28T11:13:42+00:00" - }, { "name": "sebastian/cli-parser", "version": "3.0.2", @@ -13010,16 +13087,16 @@ }, { "name": "symfony/yaml", - "version": "v7.2.0", + "version": "v7.2.3", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22" + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", - "reference": "099581e99f557e9f16b43c5916c26380b54abb22", + "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", + "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", "shasum": "" }, "require": { @@ -13062,7 +13139,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.0" + "source": "https://github.com/symfony/yaml/tree/v7.2.3" }, "funding": [ { @@ -13078,7 +13155,7 @@ "type": "tidelift" } ], - "time": "2024-10-23T06:56:12+00:00" + "time": "2025-01-07T12:55:42+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", @@ -13191,30 +13268,31 @@ }, { "name": "zbateson/mail-mime-parser", - "version": "2.4.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c" + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/ff49e02f6489b38f7cc3d1bd3971adc0f872569c", - "reference": "ff49e02f6489b38f7cc3d1bd3971adc0f872569c", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/e0d4423fe27850c9dd301190767dbc421acc2f19", + "reference": "e0d4423fe27850c9dd301190767dbc421acc2f19", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "php-di/php-di": "^6.0|^7.0", + "psr/log": "^1|^2|^3", + "zbateson/mb-wrapper": "^2.0", + "zbateson/stream-decorators": "^2.1" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", + "monolog/monolog": "^2|^3", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-iconv": "For best support/performance", @@ -13262,31 +13340,31 @@ "type": "github" } ], - "time": "2024-04-28T00:58:54+00:00" + "time": "2024-08-10T18:44:09+00:00" }, { "name": "zbateson/mb-wrapper", - "version": "1.2.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f" + "reference": "50a14c0c9537f978a61cde9fdc192a0267cc9cff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/09a8b77eb94af3823a9a6623dcc94f8d988da67f", - "reference": "09a8b77eb94af3823a9a6623dcc94f8d988da67f", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/50a14c0c9537f978a61cde9fdc192a0267cc9cff", + "reference": "50a14c0c9537f978a61cde9fdc192a0267cc9cff", "shasum": "" }, "require": { - "php": ">=7.1", + "php": ">=8.0", "symfony/polyfill-iconv": "^1.9", "symfony/polyfill-mbstring": "^1.9" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "phpunit/phpunit": "^9.6|^10.0" }, "suggest": { "ext-iconv": "For best support/performance", @@ -13323,7 +13401,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.1" + "source": "https://github.com/zbateson/mb-wrapper/tree/2.0.1" }, "funding": [ { @@ -13331,31 +13409,31 @@ "type": "github" } ], - "time": "2024-03-18T04:31:04+00:00" + "time": "2024-12-20T22:05:33+00:00" }, { "name": "zbateson/stream-decorators", - "version": "1.2.1", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9" + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/783b034024fda8eafa19675fb2552f8654d3a3e9", - "reference": "783b034024fda8eafa19675fb2552f8654d3a3e9", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/32a2a62fb0f26313395c996ebd658d33c3f9c4e5", + "reference": "32a2a62fb0f26313395c996ebd658d33c3f9c4e5", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.2", - "zbateson/mb-wrapper": "^1.0.0" + "guzzlehttp/psr7": "^2.5", + "php": ">=8.0", + "zbateson/mb-wrapper": "^2.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "*", "phpstan/phpstan": "*", - "phpunit/phpunit": "<10.0" + "phpunit/phpunit": "^9.6|^10.0" }, "type": "library", "autoload": { @@ -13386,7 +13464,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.2.1" + "source": "https://github.com/zbateson/stream-decorators/tree/2.1.1" }, "funding": [ { @@ -13394,7 +13472,7 @@ "type": "github" } ], - "time": "2023-05-30T22:51:52+00:00" + "time": "2024-04-29T21:42:39+00:00" } ], "aliases": [], diff --git a/package-lock.json b/package-lock.json index 7dc24e60..73f64997 100644 --- a/package-lock.json +++ b/package-lock.json @@ -575,9 +575,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz", - "integrity": "sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz", + "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==", "cpu": [ "arm" ], @@ -589,9 +589,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz", - "integrity": "sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz", + "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==", "cpu": [ "arm64" ], @@ -603,9 +603,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz", - "integrity": "sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz", + "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==", "cpu": [ "arm64" ], @@ -617,9 +617,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz", - "integrity": "sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz", + "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==", "cpu": [ "x64" ], @@ -631,9 +631,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz", - "integrity": "sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz", + "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==", "cpu": [ "arm64" ], @@ -645,9 +645,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz", - "integrity": "sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz", + "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==", "cpu": [ "x64" ], @@ -659,9 +659,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz", - "integrity": "sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz", + "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==", "cpu": [ "arm" ], @@ -673,9 +673,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz", - "integrity": "sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz", + "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==", "cpu": [ "arm" ], @@ -687,9 +687,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz", - "integrity": "sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz", + "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==", "cpu": [ "arm64" ], @@ -701,9 +701,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz", - "integrity": "sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz", + "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==", "cpu": [ "arm64" ], @@ -715,9 +715,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz", - "integrity": "sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz", + "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==", "cpu": [ "loong64" ], @@ -729,9 +729,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz", - "integrity": "sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz", + "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==", "cpu": [ "ppc64" ], @@ -743,9 +743,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz", - "integrity": "sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz", + "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==", "cpu": [ "riscv64" ], @@ -757,9 +757,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz", - "integrity": "sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz", + "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==", "cpu": [ "s390x" ], @@ -771,9 +771,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz", - "integrity": "sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz", + "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==", "cpu": [ "x64" ], @@ -785,9 +785,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz", - "integrity": "sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz", + "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==", "cpu": [ "x64" ], @@ -799,9 +799,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz", - "integrity": "sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz", + "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==", "cpu": [ "arm64" ], @@ -813,9 +813,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz", - "integrity": "sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz", + "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==", "cpu": [ "ia32" ], @@ -827,9 +827,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz", - "integrity": "sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz", + "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==", "cpu": [ "x64" ], @@ -1074,9 +1074,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001695", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz", - "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==", + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", "dev": true, "funding": [ { @@ -1235,9 +1235,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.84", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz", - "integrity": "sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==", + "version": "1.5.89", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.89.tgz", + "integrity": "sha512-okLMJSmbI+XHr8aG+wCK+VPH+d38sHMED6/q1CTsCNkqfdOZL3k2ThWnh44HL6bJKj9cabPCSVLDv9ynsIm8qg==", "dev": true, "license": "ISC" }, @@ -2242,9 +2242,9 @@ } }, "node_modules/rollup": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz", - "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==", + "version": "4.32.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz", + "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==", "dev": true, "license": "MIT", "dependencies": { @@ -2258,25 +2258,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.31.0", - "@rollup/rollup-android-arm64": "4.31.0", - "@rollup/rollup-darwin-arm64": "4.31.0", - "@rollup/rollup-darwin-x64": "4.31.0", - "@rollup/rollup-freebsd-arm64": "4.31.0", - "@rollup/rollup-freebsd-x64": "4.31.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.31.0", - "@rollup/rollup-linux-arm-musleabihf": "4.31.0", - "@rollup/rollup-linux-arm64-gnu": "4.31.0", - "@rollup/rollup-linux-arm64-musl": "4.31.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.31.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.31.0", - "@rollup/rollup-linux-riscv64-gnu": "4.31.0", - "@rollup/rollup-linux-s390x-gnu": "4.31.0", - "@rollup/rollup-linux-x64-gnu": "4.31.0", - "@rollup/rollup-linux-x64-musl": "4.31.0", - "@rollup/rollup-win32-arm64-msvc": "4.31.0", - "@rollup/rollup-win32-ia32-msvc": "4.31.0", - "@rollup/rollup-win32-x64-msvc": "4.31.0", + "@rollup/rollup-android-arm-eabi": "4.32.1", + "@rollup/rollup-android-arm64": "4.32.1", + "@rollup/rollup-darwin-arm64": "4.32.1", + "@rollup/rollup-darwin-x64": "4.32.1", + "@rollup/rollup-freebsd-arm64": "4.32.1", + "@rollup/rollup-freebsd-x64": "4.32.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.32.1", + "@rollup/rollup-linux-arm-musleabihf": "4.32.1", + "@rollup/rollup-linux-arm64-gnu": "4.32.1", + "@rollup/rollup-linux-arm64-musl": "4.32.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.32.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1", + "@rollup/rollup-linux-riscv64-gnu": "4.32.1", + "@rollup/rollup-linux-s390x-gnu": "4.32.1", + "@rollup/rollup-linux-x64-gnu": "4.32.1", + "@rollup/rollup-linux-x64-musl": "4.32.1", + "@rollup/rollup-win32-arm64-msvc": "4.32.1", + "@rollup/rollup-win32-ia32-msvc": "4.32.1", + "@rollup/rollup-win32-x64-msvc": "4.32.1", "fsevents": "~2.3.2" } }, diff --git a/resources/css/filament/company/theme.css b/resources/css/filament/company/theme.css index 368bf99c..cf364b89 100644 --- a/resources/css/filament/company/theme.css +++ b/resources/css/filament/company/theme.css @@ -14,6 +14,10 @@ @apply bg-platinum; } +.fi-dropdown-panel { + @apply divide-gray-200/80; +} + .fi-badge { display: inline-flex; } diff --git a/resources/data/lang/ar.json b/resources/data/lang/ar.json index f23c6f6c..af2fec8d 100644 --- a/resources/data/lang/ar.json +++ b/resources/data/lang/ar.json @@ -1,189 +1,197 @@ { "General": "جنرال لواء", - "Number Prefix": "بادئة الأرقام", - "Number Digits": "أرقام الأرقام", - "Content": "المحتوى", - "Header": "رأس الصفحة", - "Template": "القالب", - "Number Next": "الرقم التالي", - "Accent Color": "لون أكسنت", - "Item Name": "اسم العنصر", - "Unit Name": "اسم الوحدة", - "Quantity": "الكمية", - "Symbol": "الرمز", - "Sales Tax": "ضريبة المبيعات", - "teal": "البط البري", - "Investment": "الاستثمار", - "sky": "سماء", - "Screen Extra Large": "شاشة كبيرة جدًا", - "General Partnership": "شراكة عامة", - "Sales": "المبيعات", - "Max Content Width": "عرض المحتوى الأقصى", - "yellow": "الأصفر", - "Phone Number": "رقم الهاتف", - "Code": "الكود", - "Yes": "نعم", - "Hours": "ساعات", - "gray": "رمادي", - "3X Large": "مقاس كبير 3 مرات", - "Tax": "ضريبة", - "Timezone": "المنطقة الزمنية", - "Type": "النوع", - "Primary Color": "اللون الأساسي", - "Top Navigation": "التنقل العلوي", - "Date Format": "صيغة التاريخ", - "Price Name": "اسم السعر", - "Credit": "الائتمان", - "Department": "قسم", - "Precision": "الدقة", - "Entity Type": "نوع الكيان", - "Before Number": "قبل الرقم", - "Net 10": "نت 10", - "Number Format": "صيغة الأرقام", - "Company Profile": "ملف الشركة", - "Purchase": "شراء", - "Select Position": "حدد الوظيفة", - "Due Upon Receipt": "تستحق عند الاستلام", - "zinc": "زنك", - "Rate": "معدل", - "Amount Name": "اسم المبلغ", - "Company Currencies": "عملات الشركة", - "Before Amount": "قبل المبلغ", - "Enabled": "تم تمكينه", - "Net 15": "شبكة 15", - "State \/ Province": "الولاية\/المقاطعة", - "Striped Tables": "طاولات مخططة", - "Net 90": "نت 90", - "Date & Time": "التاريخ والوقت", - "Entity": "الكيان", + "Bank account": "حساب بنكي", + "Currency": "العملة", + "Taxes & Discounts": "الضرائب والخصومات", + "Sales tax": "ضريبة المبيعات", + "Purchase tax": "ضريبة الشراء", + "Sales discount": "خصم المبيعات", + "Purchase discount": "خصم الشراء", + "Appearance": "المظهر", "Default": "إفتراضي", - "Bank Account": "حساب بنكي", - "Amount": "المبلغ", + "Company Profile": "ملف الشركة", + "Invoice": "الفاتورة", + "Localization": "التعريب", + "Discount": "الخصم", + "Tax": "ضريبة", "Accounting": "المحاسبة", "Banking": "الخدمات المصرفية", - "Service": "خدمة", "Account": "الحساب", - "Compound": "مركب", - "amber": "كهرمان", - "green": "خضراء", - "Loan": "قرض", - "Percent Position": "موضع النسبة المئوية", - "After Amount": "بعد المبلغ", - "neutral": "محايد", - "Main": "الرئيسية", - "Account Information": "معلومات الحساب", - "No": "لا", - "Classic": "كلاسيكي", - "Net 60": "نت 60", - "Computation": "الحساب", - "Symbol Position": "موضع الرمز", - "Select a symbol position": "حدد موضع الرمز", - "Default :Type :Record": "الخيار الافتراضي :Type :Record", - "Name": "الاسم", + "Department": "قسم", "Services": "خدمات", - "Financial & Fiscal": "المالية والمالية", + "Connected Accounts": "الحسابات المتصلة", + "Live Currency": "العملة الحية", + "Primary color": "اللون الأساسي", + "amber": "كهرمان", "blue": "أزرق", "cyan": "ازرق سماوي", - "Screen 2X Large": "شاشة كبيرة 2X", - "Medium": "متوسط", - "Subheader": "عنوان فرعي", - "Limited Partnership (LP)": "شراكة محدودة (LP)", - "Children": "الأطفال", - "Available": "متاح", - "Show Logo": "عرض الشعار", "emerald": "زمرد", + "fuchsia": "فوشيا", + "gray": "رمادي", + "green": "خضراء", "indigo": "نيلي", - "Current Balance": "الرصيد الحالي", - "Tax ID": "معرف الضريبة", - "Modal Width": "عرض مشروط", - "Fixed": "ثابت", - "Start Date": "تاريخ البدء", + "lime": "جير", + "neutral": "محايد", "orange": "البرتقالي", - "Invoice": "الفاتورة", - "Account Number": "رقم الحساب", - "Manager": "مدير", - "Sales Discount": "خصم المبيعات", - "Currency": "العملة", - "Localization": "التعريب", - "Parent Department": "قسم أولياء الأمور", - "Default :Record": "الخيار الافتراضي :Record", - "Disabled": "معاق", - "Appearance": "المظهر", - "Price": "السعر", - "fuchsia": "فوشيا", - "Language": "اللغة", - "Total": "المجموع", - "red": "أحمر", "pink": "وردي", + "purple": "أرجواني", + "red": "أحمر", "rose": "وردة", + "sky": "سماء", + "slate": "أردواز", + "stone": "حجر", + "teal": "البط البري", "violet": "بنفسج", - "Sole Proprietorship": "الملكية الفردية", - "All": "جميع", - "Layout": "التخطيط", - "Footer \/ Notes": "تذييل الصفحة\\ ملاحظات", - "Percentage": "النسبة المئوية", - "Purchase Tax": "ضريبة الشراء", - "Thousands Separator": "فاصل الآلاف", - "7X Large": "مقاس كبير 7 مرات", - "Side Navigation": "التنقل الجانبي", - "4X Large": "4 × كبير", - "Net 7": "نت 7", - "Live Rate": "السعر المباشر", - "Screen": "شاشة", - "Decimal Separator": "فاصل عشري", - "Currency List": "قائمة العملات", - "Zip \/ Postal Code": "الرمز البريدي\/الرمز البريدي", - "5X Large": "مقاس كبير 5 مرات", - "Purchase Discount": "خصم الشراء", - "Scope": "النطاق", - "lime": "جير", - "Subtype": "نوع فرعي", - "Extra Large": "مقاس كبير جدًا", - "Legal & Compliance": "الشؤون القانونية والامتثال", - "Navigation Layout": "تخطيط التنقل", - "Street Address": "عنوان الشارع", - "Description": "وصف", - "purple": "أرجواني", + "yellow": "الأصفر", + "zinc": "زنك", "Font": "الخط", - "Small": "صغير", - "Corporation": "مؤسسة", - "stone": "حجر", - "slate": "أردواز", - "Live Currency": "العملة الحية", - "Screen Large": "شاشة كبيرة", - "6X Large": "مقاس كبير 6 مرات", + "Enabled": "تم تمكينه", + "Disabled": "معاق", + "Identification": "تحديد", + "Email": "البريد الإلكتروني", + "Phone number": "رقم الهاتف", + "Logo": "الشعار", + "Location Details": "تفاصيل الموقع", + "Country": "البلد", + "State \/ Province": "الولاية\/المقاطعة", + "Street Address": "عنوان الشارع", "City \/ Town": "المدينة\/المدينة", + "Zip \/ Postal Code": "الرمز البريدي\/الرمز البريدي", + "Legal & Compliance": "الشؤون القانونية والامتثال", + "Entity type": "نوع الكيان", + "Tax ID": "معرف الضريبة", + "Sole Proprietorship": "الملكية الفردية", + "General Partnership": "شراكة عامة", + "Limited Partnership (LP)": "شراكة محدودة (LP)", "Limited Liability Partnership (LLP)": "شراكة ذات مسؤولية محدودة (LLP)", - "Payment Terms": "شروط الدفع", - "Data Presentation": "عرض البيانات", - "Connected Accounts": "الحسابات المتصلة", - "Modern": "حديث", - "Country": "البلد", - "Full": "كامل", - "Table Sort Direction": "اتجاه فرز الجدول", + "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)", + "Corporation": "مؤسسة", "Nonprofit": "غير ربحي", - "Records Per Page": "سجلات لكل صفحة", - "Location Details": "تفاصيل الموقع", - "Extra Small": "صغير جدًا", - "End Date": "تاريخ النهاية", - "Taxes & Discounts": "الضرائب والخصومات", - "After Number": "بعد الرقم", - "Time Format": "صيغة الوقت", - "Ascending": "تصاعدي", + "Number prefix": "بادئة الأرقام", + "Number digits": "أرقام الأرقام", + "Number next": "الرقم التالي", + "Payment terms": "شروط الدفع", + "Content": "المحتوى", + "Header": "رأس الصفحة", + "Subheader": "عنوان فرعي", + "Footer \/ notes": "تذييل الصفحة\\ ملاحظات", + "Template": "القالب", + "Show logo": "عرض الشعار", + "Accent color": "لون أكسنت", + "Item name": "اسم العنصر", + "Items": "العناصر", + "Products": "منتجات", + "Other": "أخرى", + "Unit name": "اسم الوحدة", + "Quantity": "الكمية", + "Hours": "ساعات", + "Price name": "اسم السعر", + "Price": "السعر", + "Rate": "معدل", + "Amount name": "اسم المبلغ", + "Amount": "المبلغ", + "Total": "المجموع", + "Due Upon Receipt": "تستحق عند الاستلام", + "Net 7": "نت 7", + "Net 10": "نت 10", + "Net 15": "شبكة 15", "Net 30": "شبكة 30", - "Identification": "تحديد", - "Email": "البريد الإلكتروني", - "2X Large": "2 × حجم كبير", + "Net 60": "نت 60", + "Net 90": "نت 90", + "Modern": "حديث", + "Classic": "كلاسيكي", + "Language": "اللغة", + "Timezone": "المنطقة الزمنية", + "Date & Time": "التاريخ والوقت", + "Date format": "صيغة التاريخ", + "Time format": "صيغة الوقت", + "Week start": "بداية الأسبوع", + "Before number": "قبل الرقم", + "After number": "بعد الرقم", + "Select position": "حدد الوظيفة", + "Financial & Fiscal": "المالية والمالية", + "Number format": "صيغة الأرقام", + "Percent position": "موضع النسبة المئوية", + "Name": "الاسم", + "Code": "الكود", + "Symbol": "الرمز", + "Default :record": "الخيار الافتراضي :record", + "Type": "النوع", + "Start date": "تاريخ البدء", + "End date": "تاريخ النهاية", + "Sales": "المبيعات", + "Default :type :record": "الخيار الافتراضي :type :record", + "Purchase": "شراء", + "Precision": "الدقة", + "Symbol position": "موضع الرمز", + "Before amount": "قبل المبلغ", + "After amount": "بعد المبلغ", + "Select a symbol position": "حدد موضع الرمز", + "Decimal separator": "فاصل عشري", + "Thousands separator": "فاصل الآلاف", + "Yes": "نعم", + "No": "لا", + "Description": "وصف", + "Computation": "الحساب", + "Scope": "النطاق", + "Percentage": "النسبة المئوية", + "Fixed": "ثابت", "None": "لا شيء", - "Discount": "الخصم", - "Depository": "جهة الإيداع", - "Week Start": "بداية الأسبوع", "Product": "المنتج", - "Items": "العناصر", - "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)", - "Large": "كبير", - "Descending": "تنازلي", - "Other": "أخرى", - "Logo": "الشعار", - "Products": "منتجات" + "Service": "خدمة", + "Compound": "مركب", + "Current balance": "الرصيد الحالي", + "Account Information": "معلومات الحساب", + "Subtype": "نوع فرعي", + "Account number": "رقم الحساب", + "Investment": "الاستثمار", + "Credit": "الائتمان", + "Depository": "جهة الإيداع", + "Loan": "قرض", + "Manager": "مدير", + "Children": "الأطفال", + "All": "جميع", + "Main": "الرئيسية", + "Parent department": "قسم أولياء الأمور", + "Currency List": "قائمة العملات", + "Company Currencies": "عملات الشركة", + "Entity": "الكيان", + "Available": "متاح", + "Live rate": "السعر المباشر", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/de.json b/resources/data/lang/de.json index 36ee6275..aa442b49 100644 --- a/resources/data/lang/de.json +++ b/resources/data/lang/de.json @@ -1,161 +1,134 @@ { "General": "Allgemeines", - "Bank Account": "Bankkonto", - "slate": "Schiefer", - "indigo": "Indigoblau", - "lime": "Kalk", - "Extra Small": "Extra klein", - "Enabled": "Aktiviert", - "neutral": "neutral", - "Items": "Artikel", - "pink": "pink", - "Medium": "Mittel", + "Bank account": "Bankkonto", + "Currency": "Währung", + "Taxes & Discounts": "Steuern und Rabatte", + "Sales tax": "Umsatzsteuer", + "Purchase tax": "Umsatzsteuer", + "Sales discount": "Verkaufsrabatt", + "Purchase discount": "Rabatt beim Kauf", + "Appearance": "Aussehen", + "Default": "Standard", + "Company Profile": "Profil des Unternehmens", + "Invoice": "Rechnung", + "Localization": "Lokalisation", + "Discount": "Rabatt", + "Tax": "Steuer", + "Accounting": "Rechnungswesen", + "Banking": "Bankwesen", "Account": "Konto", - "Other": "Andere", - "Sales Tax": "Umsatzsteuer", "Department": "Abteilung", - "stone": "Stein", - "yellow": "gelb", - "Total": "Insgesamt", - "Zip \/ Postal Code": "PLZ\/PLZ", - "Price": "Preis", - "Content": "Inhalt", - "Accounting": "Rechnungswesen", - "Discount": "Rabatt", + "Services": "Dienstleistungen", + "Connected Accounts": "Verbundene Konten", + "Live Currency": "Live-Währung", + "Primary color": "Primäre Farbe", + "amber": "Bernstein", + "blue": "blau", "cyan": "Cyan", + "emerald": "Smaragd", + "fuchsia": "Fuchsie", "gray": "grau", + "green": "grün", + "indigo": "Indigoblau", + "lime": "Kalk", + "neutral": "neutral", "orange": "orange", - "blue": "blau", + "pink": "pink", + "purple": "lila", + "red": "rot", + "rose": "Rose", + "sky": "Himmel", + "slate": "Schiefer", + "stone": "Stein", + "teal": "blaugrün", "violet": "violett", + "yellow": "gelb", + "zinc": "Zink", "Font": "Schrift", - "Screen": "Bildschirm", - "Banking": "Bankwesen", - "emerald": "Smaragd", + "Enabled": "Aktiviert", "Disabled": "Deaktiviert", - "Extra Large": "Extra groß", - "Classic": "Klassisch", - "sky": "Himmel", - "Email": "E-Mail", - "State \/ Province": "Bundesstaat\/ Provinz", - "Language": "Sprache", - "zinc": "Zink", - "Layout": "Raumaufteilung", - "fuchsia": "Fuchsie", - "rose": "Rose", - "Large": "Groß", - "Ascending": "Aufsteigend", - "purple": "lila", - "Phone Number": "Telefonnummer", - "Quantity": "Menge", - "Localization": "Lokalisation", - "Tax": "Steuer", - "green": "grün", - "red": "rot", - "Small": "Klein", "Identification": "Identifikation", - "Products": "Produkte", - "Template": "Schablone", - "Modern": "modern", - "Date & Time": "Datum und Uhrzeit", + "Email": "E-Mail", + "Phone number": "Telefonnummer", "Logo": "Logo", - "Header": "Kopfzeile", - "Timezone": "Zeitzone", - "Full": "Voll", + "Location Details": "Angaben zum Standort", "Country": "Land", - "Services": "Dienstleistungen", - "Descending": "Absteigend", - "Amount": "Betrag", - "Appearance": "Aussehen", - "Invoice": "Rechnung", - "Entity Type": "Art der Entität", - "Corporation": "Korporation", - "Hours": "Stunden", - "Sales Discount": "Verkaufsrabatt", - "Rate": "Bewerte", - "2X Large": "2X Groß", - "Purchase Discount": "Rabatt beim Kauf", - "Navigation Layout": "Navigationslayout", - "Live Currency": "Live-Währung", - "Taxes & Discounts": "Steuern und Rabatte", - "Company Profile": "Profil des Unternehmens", - "General Partnership": "Allgemeine Partnerschaft", - "Net 7": "Netto 7", - "7X Large": "7X Groß", - "3X Large": "3X Groß", - "Number Prefix": "Nummernpräfix", - "Number Digits": "Anzahl Ziffern", - "Subheader": "Unterüberschrift", - "Accent Color": "Akzentfarbe", - "Due Upon Receipt": "Fällig bei Erhalt", - "Select Position": "Position wählen", - "Number Format": "Zahlenformat", - "Percent Position": "Prozentuale Position", - "Purchase Tax": "Umsatzsteuer", - "Connected Accounts": "Verbundene Konten", - "Max Content Width": "Max. Inhaltsbreite", - "Side Navigation": "Seitliche Navigation", - "Striped Tables": "Gestreifte Tische", - "4X Large": "4X Groß", - "6X Large": "6X Groß", + "State \/ Province": "Bundesstaat\/ Provinz", + "Street Address": "Straße & Adresse", "City \/ Town": "Stadt\/Stadt", - "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)", - "Primary Color": "Primäre Farbe", + "Zip \/ Postal Code": "PLZ\/PLZ", "Legal & Compliance": "Recht und Compliance", - "Default": "Standard", + "Entity type": "Art der Entität", + "Tax ID": "Steuer-ID", "Sole Proprietorship": "Einzelunternehmen", + "General Partnership": "Allgemeine Partnerschaft", "Limited Partnership (LP)": "Kommanditgesellschaft (LP)", + "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)", "Limited Liability Company (LLC)": "Gesellschaft mit beschränkter Haftung (LLC)", + "Corporation": "Korporation", "Nonprofit": "Gemeinnützig", - "Before Number": "Vor der Nummer", - "Currency": "Währung", - "Modal Width": "Modale Breite", - "Screen Extra Large": "Extragroßer Bildschirm", - "Show Logo": "Logo einblenden", - "Price Name": "Name des Preises", - "Amount Name": "Name des Betrags", - "Net 60": "Netto 60", - "Net 90": "Netto 90", - "Week Start": "Wochenstart", - "Street Address": "Straße & Adresse", - "Tax ID": "Steuer-ID", - "Date Format": "Datumsformat", - "Number Next": "Nummer Weiter", + "Number prefix": "Nummernpräfix", + "Number digits": "Anzahl Ziffern", + "Number next": "Nummer Weiter", + "Payment terms": "Zahlungsbedingungen", + "Content": "Inhalt", + "Header": "Kopfzeile", + "Subheader": "Unterüberschrift", + "Footer \/ notes": "Fußzeile\/\/Notizen", + "Template": "Schablone", + "Show logo": "Logo einblenden", + "Accent color": "Akzentfarbe", + "Item name": "Name des Artikels", + "Items": "Artikel", + "Products": "Produkte", + "Other": "Andere", + "Unit name": "Name der Einheit", + "Quantity": "Menge", + "Hours": "Stunden", + "Price name": "Name des Preises", + "Price": "Preis", + "Rate": "Bewerte", + "Amount name": "Name des Betrags", + "Amount": "Betrag", + "Total": "Insgesamt", + "Due Upon Receipt": "Fällig bei Erhalt", + "Net 7": "Netto 7", "Net 10": "Netto 10", "Net 15": "Netto 15", - "teal": "blaugrün", - "amber": "Bernstein", - "Location Details": "Angaben zum Standort", - "Item Name": "Name des Artikels", - "Time Format": "Zeitformat", - "Top Navigation": "Navigation nach oben", - "Screen Large": "Bildschirm groß", - "Unit Name": "Name der Einheit", - "Footer \/ Notes": "Fußzeile\/\/Notizen", - "5X Large": "5X Groß", "Net 30": "Netto 30", - "Table Sort Direction": "Sortierrichtung der Tabelle", - "Screen 2X Large": "Bildschirm 2X groß", - "After Number": "Nach Nummer", + "Net 60": "Netto 60", + "Net 90": "Netto 90", + "Modern": "modern", + "Classic": "Klassisch", + "Language": "Sprache", + "Timezone": "Zeitzone", + "Date & Time": "Datum und Uhrzeit", + "Date format": "Datumsformat", + "Time format": "Zeitformat", + "Week start": "Wochenstart", + "Before number": "Vor der Nummer", + "After number": "Nach Nummer", + "Select position": "Position wählen", "Financial & Fiscal": "Finanziell und steuerlich", - "Data Presentation": "Präsentation der Daten", - "Payment Terms": "Zahlungsbedingungen", - "Records Per Page": "Datensätze pro Seite", + "Number format": "Zahlenformat", + "Percent position": "Prozentuale Position", "Name": "Name", "Code": "Kode", "Symbol": "Symbol", - "Default :Record": "Standard :Record", + "Default :record": "Standard :record", "Type": "Typ", - "Start Date": "Startdatum", - "End Date": "Enddatum", + "Start date": "Startdatum", + "End date": "Enddatum", "Sales": "Verkäufe", + "Default :type :record": "Standard :type :record", "Purchase": "Kauf", "Precision": "Präzision", - "Symbol Position": "Position des Symbols", - "Before Amount": "Vor dem Betrag", - "After Amount": "Nach Betrag", + "Symbol position": "Position des Symbols", + "Before amount": "Vor dem Betrag", + "After amount": "Nach Betrag", "Select a symbol position": "Wählen Sie eine Symbolposition", - "Decimal Separator": "Dezimaltrennzeichen", - "Thousands Separator": "Tausender-Trennzeichen", + "Decimal separator": "Dezimaltrennzeichen", + "Thousands separator": "Tausender-Trennzeichen", "Yes": "Ja", "No": "Nein", "Description": "Beschreibung", @@ -167,23 +140,58 @@ "Product": "Produkt", "Service": "Bedienung", "Compound": "Verbindung", - "Current Balance": "Aktueller Saldo", + "Current balance": "Aktueller Saldo", "Account Information": "Informationen zum Konto", "Subtype": "Subtyp", - "Account Number": "Kontonummer", + "Account number": "Kontonummer", + "Investment": "Investition", "Credit": "Kredit", + "Depository": "Verwahrstelle", "Loan": "Darlehen", "Manager": "Geschäftsführer", "Children": "Kinder", - "Investment": "Investition", - "Depository": "Verwahrstelle", "All": "Alle", "Main": "Haupt", - "Entity": "Entität", - "Available": "Verfügbar", - "Parent Department": "Elternabteilung", + "Parent department": "Elternabteilung", "Currency List": "Liste der Währungen", "Company Currencies": "Währungen des Unternehmens", - "Live Rate": "Live-Tarif", - "Default :Type :Record": "Standard :Type :Record" + "Entity": "Entität", + "Available": "Verfügbar", + "Live rate": "Live-Tarif", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/en.json b/resources/data/lang/en.json index dd4d5199..5bd158c9 100644 --- a/resources/data/lang/en.json +++ b/resources/data/lang/en.json @@ -1,12 +1,12 @@ { "General": "General", - "Bank Account": "Bank Account", + "Bank account": "Bank account", "Currency": "Currency", "Taxes & Discounts": "Taxes & Discounts", - "Sales Tax": "Sales Tax", - "Purchase Tax": "Purchase Tax", - "Sales Discount": "Sales Discount", - "Purchase Discount": "Purchase Discount", + "Sales tax": "Sales tax", + "Purchase tax": "Purchase tax", + "Sales discount": "Sales discount", + "Purchase discount": "Purchase Discount", "Appearance": "Appearance", "Default": "Default", "Company Profile": "Company Profile", @@ -21,7 +21,7 @@ "Services": "Services", "Connected Accounts": "Connected Accounts", "Live Currency": "Live Currency", - "Primary Color": "Primary Color", + "Primary color": "Primary color", "amber": "amber", "blue": "blue", "cyan": "cyan", @@ -45,39 +45,11 @@ "yellow": "yellow", "zinc": "zinc", "Font": "Font", - "Layout": "Layout", - "Max Content Width": "Max Content Width", - "Modal Width": "Modal Width", - "Navigation Layout": "Navigation Layout", - "Top Navigation": "Top Navigation", - "Side Navigation": "Side Navigation", - "Striped Tables": "Striped Tables", "Enabled": "Enabled", "Disabled": "Disabled", - "Data Presentation": "Data Presentation", - "Table Sort Direction": "Table Sort Direction", - "Records Per Page": "Records Per Page", - "4X Large": "4X Large", - "5X Large": "5X Large", - "6X Large": "6X Large", - "7X Large": "7X Large", - "Screen Large": "Screen Large", - "Screen Extra Large": "Screen Extra Large", - "Screen 2X Large": "Screen 2X Large", - "Full": "Full", - "Extra Small": "Extra Small", - "Small": "Small", - "Medium": "Medium", - "Large": "Large", - "Extra Large": "Extra Large", - "2X Large": "2X Large", - "3X Large": "3X Large", - "Screen": "Screen", - "Ascending": "Ascending", - "Descending": "Descending", "Identification": "Identification", "Email": "Email", - "Phone Number": "Phone Number", + "Phone number": "Phone number", "Logo": "Logo", "Location Details": "Location Details", "Country": "Country", @@ -86,7 +58,7 @@ "City \/ Town": "City \/ Town", "Zip \/ Postal Code": "Zip \/ Postal Code", "Legal & Compliance": "Legal & Compliance", - "Entity Type": "Entity Type", + "Entity type": "Entity type", "Tax ID": "Tax ID", "Sole Proprietorship": "Sole Proprietorship", "General Partnership": "General Partnership", @@ -95,28 +67,28 @@ "Limited Liability Company (LLC)": "Limited Liability Company (LLC)", "Corporation": "Corporation", "Nonprofit": "Nonprofit", - "Number Prefix": "Number Prefix", - "Number Digits": "Number Digits", - "Number Next": "Number Next", - "Payment Terms": "Payment Terms", + "Number prefix": "Number prefix", + "Number digits": "Number digits", + "Number next": "Number next", + "Payment terms": "Payment terms", "Content": "Content", "Header": "Header", "Subheader": "Subheader", - "Footer \/ Notes": "Footer \/ Notes", + "Footer \/ notes": "Footer \/ notes", "Template": "Template", - "Show Logo": "Show Logo", - "Accent Color": "Accent Color", - "Item Name": "Item Name", + "Show logo": "Show logo", + "Accent color": "Accent color", + "Item name": "Item name", "Items": "Items", "Products": "Products", "Other": "Other", - "Unit Name": "Unit Name", + "Unit name": "Unit name", "Quantity": "Quantity", "Hours": "Hours", - "Price Name": "Price Name", + "Price name": "Price name", "Price": "Price", "Rate": "Rate", - "Amount Name": "Amount Name", + "Amount name": "Amount name", "Amount": "Amount", "Total": "Total", "Due Upon Receipt": "Due Upon Receipt", @@ -131,32 +103,32 @@ "Language": "Language", "Timezone": "Timezone", "Date & Time": "Date & Time", - "Date Format": "Date Format", - "Time Format": "Time Format", - "Week Start": "Week Start", - "Before Number": "Before Number", - "After Number": "After Number", - "Select Position": "Select Position", + "Date format": "Date format", + "Time format": "Time format", + "Week start": "Week start", + "Before number": "Before number", + "After number": "After number", + "Select position": "Select position", "Financial & Fiscal": "Financial & Fiscal", - "Number Format": "Number Format", - "Percent Position": "Percent Position", + "Number format": "Number format", + "Percent position": "Percent position", "Name": "Name", "Code": "Code", "Symbol": "Symbol", - "Default :Record": "Default :Record", + "Default :record": "Default :record", "Type": "Type", - "Start Date": "Start Date", - "End Date": "End Date", + "Start date": "Start date", + "End date": "End date", "Sales": "Sales", - "Default :Type :Record": "Default :Type :Record", + "Default :type :record": "Default :type :record", "Purchase": "Purchase", "Precision": "Precision", - "Symbol Position": "Symbol Position", - "Before Amount": "Before Amount", - "After Amount": "After Amount", + "Symbol position": "Symbol position", + "Before amount": "Before amount", + "After amount": "After amount", "Select a symbol position": "Select a symbol position", - "Decimal Separator": "Decimal Separator", - "Thousands Separator": "Thousands Separator", + "Decimal separator": "Decimal separator", + "Thousands separator": "Thousands separator", "Yes": "Yes", "No": "No", "Description": "Description", @@ -168,10 +140,10 @@ "Product": "Product", "Service": "Service", "Compound": "Compound", - "Current Balance": "Current Balance", + "Current balance": "Current balance", "Account Information": "Account Information", "Subtype": "Subtype", - "Account Number": "Account Number", + "Account number": "Account number", "Investment": "Investment", "Credit": "Credit", "Depository": "Depository", @@ -180,17 +152,17 @@ "Children": "Children", "All": "All", "Main": "Main", - "Parent Department": "Parent Department", + "Parent department": "Parent department", "Currency List": "Currency List", "Company Currencies": "Company Currencies", "Entity": "Entity", "Available": "Available", - "Live Rate": "Live Rate", + "Live rate": "Live rate", "Edit": "Edit", "Notes": "Notes", "Terms": "Terms", - "Ending Balance": "Ending Balance", - "Default :Type :Category": "Default :Type :Category", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", "Category": "Category", "Configuration": "Configuration", "Dates": "Dates", @@ -221,7 +193,7 @@ "Scheduling Form": "Scheduling Form", "Approve": "Approve", "Frequency": "Frequency", - "Schedule Bounds": "Schedule Bounds", - "Time Zone": "Time Zone", - "Dates & Time": "Dates & Time" -} \ No newline at end of file + "Dates & Time": "Dates & Time", + "account": "account", + "currency": "currency" +} diff --git a/resources/data/lang/es.json b/resources/data/lang/es.json index 8aeb3f4a..76cd8aae 100644 --- a/resources/data/lang/es.json +++ b/resources/data/lang/es.json @@ -1,191 +1,168 @@ { "General": "General", + "Bank account": "Cuenta bancaria", + "Currency": "Moneda", + "Taxes & Discounts": "Impuestos y descuentos", + "Sales tax": "Impuesto sobre las ventas", + "Purchase tax": "Impuesto de compra", + "Sales discount": "Descuento de ventas", + "Purchase discount": "Descuento de compra", + "Appearance": "Apariencia", + "Default": "Predeterminado", + "Company Profile": "Perfil de la empresa", "Invoice": "Factura", - "neutral": "neutral", - "emerald": "esmeralda", - "slate": "pizarra", - "Bank Account": "Cuenta bancaria", "Localization": "Localización", - "zinc": "zinc", - "Disabled": "Discapacitado", - "Descending": "Descendiendo", - "Default": "Predeterminado", - "Account": "Cuenta", - "sky": "cielo", - "Country": "País", - "Modern": "Moderna", - "Currency": "Moneda", - "Sales Tax": "Impuesto sobre las ventas", "Discount": "Descuento", + "Tax": "Impuesto", + "Accounting": "Contabilidad", "Banking": "Banca", + "Account": "Cuenta", + "Department": "Departamento", + "Services": "Servicios", + "Connected Accounts": "Cuentas conectadas", + "Live Currency": "Moneda en vivo", + "Primary color": "Color primario", "amber": "ámbar", + "blue": "azul", + "cyan": "cian", + "emerald": "esmeralda", + "fuchsia": "fucsia", "gray": "gris", "green": "verde", + "indigo": "índigo", "lime": "cal", + "neutral": "neutral", + "orange": "naranja", + "pink": "rosa", "purple": "púrpura", "red": "rojo", + "rose": "rosa", + "sky": "cielo", + "slate": "pizarra", + "stone": "apedrear", "teal": "verde azulado", + "violet": "violeta", + "yellow": "amarillo", + "zinc": "zinc", "Font": "Tipo de letra", - "Full": "Lleno", - "Extra Small": "Extra pequeño", - "Medium": "Mediano", - "Large": "Grande", - "Extra Large": "Extra grande", - "Screen": "Pantalla", - "Ascending": "Ascendente", + "Enabled": "Habilitado", + "Disabled": "Discapacitado", "Identification": "Identificación", + "Email": "Correo electrónico", + "Phone number": "Número de teléfono", + "Logo": "Logotipo", + "Location Details": "Detalles de ubicación", + "Country": "País", "State \/ Province": "Estado\/provincia", "Street Address": "Dirección postal", + "City \/ Town": "Ciudad\/pueblo", "Zip \/ Postal Code": "Código postal o postal", + "Legal & Compliance": "Legislación y cumplimiento", + "Entity type": "Tipo de entidad", + "Tax ID": "ID fiscal", "Sole Proprietorship": "Empresa unipersonal", + "General Partnership": "Colaboración general", + "Limited Partnership (LP)": "Sociedad en comandita (LP)", + "Limited Liability Partnership (LLP)": "Sociedad de responsabilidad limitada (LLP)", + "Limited Liability Company (LLC)": "Sociedad de responsabilidad limitada (LLC)", + "Corporation": "Corporación", "Nonprofit": "Organización sin fines", + "Number prefix": "Prefijo numérico", + "Number digits": "Dígitos numéricos", + "Number next": "Número siguiente", + "Payment terms": "Condiciones de pago", "Content": "Contenido", "Header": "Cabecera", + "Subheader": "Subtítulo", + "Footer \/ notes": "Pie de página\/Notas", "Template": "plantilla", + "Show logo": "Mostrar logotipo", + "Accent color": "Color de acento", + "Item name": "Nombre del artículo", "Items": "Artículos", "Products": "Productos", "Other": "Otros", + "Unit name": "Nombre de la unidad", + "Quantity": "Cantidad", "Hours": "Horas", + "Price name": "Nombre del precio", "Price": "Precio", "Rate": "Tarifa", + "Amount name": "Nombre del importe", "Amount": "Monto", + "Total": "Total", + "Due Upon Receipt": "Vencimiento al recibirlo", + "Net 7": "Red 7", + "Net 10": "Neto 10", + "Net 15": "Neto 15", + "Net 30": "Neto 30", + "Net 60": "Neto 60", + "Net 90": "Neto 90", + "Modern": "Moderna", + "Classic": "Clásico", "Language": "Idioma", "Timezone": "Zona horaria", "Date & Time": "Fecha y hora", - "Select Position": "Seleccione posición", + "Date format": "Formato de fecha", + "Time format": "Formato de hora", + "Week start": "Inicio de semana", + "Before number": "Antes del número", + "After number": "Después del número", + "Select position": "Seleccione posición", + "Financial & Fiscal": "Financiero y fiscal", + "Number format": "Formato numérico", + "Percent position": "Posición porcentual", "Name": "Nombre", "Code": "Código", "Symbol": "Símbolo", + "Default :record": "Predeterminado :record", "Type": "Tipo", - "Start Date": "Fecha de inicio", - "End Date": "Fecha de finalización", + "Start date": "Fecha de inicio", + "End date": "Fecha de finalización", "Sales": "Ventas", + "Default :type :record": "Predeterminado :type :record", "Purchase": "Adquirir", "Precision": "Precisión", + "Symbol position": "Posición del símbolo", + "Before amount": "Cantidad anterior", + "After amount": "Después del importe", + "Select a symbol position": "Seleccione la posición de un símbolo", + "Decimal separator": "Separador decimal", + "Thousands separator": "Separador de miles", "Yes": "Sí", "No": "No", "Description": "Descripción", - "None": "Ninguna", - "Product": "Producto", - "Compound": "Compuesto", - "Account Information": "Información de la cuenta", - "Account Number": "Número de cuenta", - "Investment": "Inversión", - "Purchase Tax": "Impuesto de compra", - "Purchase Discount": "Descuento de compra", - "Appearance": "Apariencia", - "Company Profile": "Perfil de la empresa", - "Tax": "Impuesto", - "Department": "Departamento", - "Services": "Servicios", - "blue": "azul", - "cyan": "cian", - "fuchsia": "fucsia", - "indigo": "índigo", - "orange": "naranja", - "pink": "rosa", - "rose": "rosa", - "stone": "apedrear", - "violet": "violeta", - "yellow": "amarillo", - "Layout": "Disposición", - "Max Content Width": "Ancho máximo de contenido", - "Modal Width": "Anchura modal", - "Side Navigation": "Navegación lateral", - "Enabled": "Habilitado", - "Data Presentation": "Presentación de datos", - "5X Large": "5 veces más grande", - "6X Large": "6 veces más grande", - "Screen Large": "Pantalla grande", - "Screen Extra Large": "Pantalla extra grande", - "Small": "Pequeña", - "2X Large": "2 veces grande", - "Email": "Correo electrónico", - "Phone Number": "Número de teléfono", - "Logo": "Logotipo", - "Entity Type": "Tipo de entidad", - "Corporation": "Corporación", - "Item Name": "Nombre del artículo", - "Quantity": "Cantidad", - "Price Name": "Nombre del precio", - "Total": "Total", - "Net 7": "Red 7", - "Net 10": "Neto 10", - "Net 90": "Neto 90", - "Classic": "Clásico", - "Financial & Fiscal": "Financiero y fiscal", "Computation": "Computación", + "Scope": "Alcance", "Percentage": "Porcentaje", "Fixed": "Fijo", + "None": "Ninguna", + "Product": "Producto", "Service": "Servicio", - "Current Balance": "Saldo actual", - "Taxes & Discounts": "Impuestos y descuentos", - "Sales Discount": "Descuento de ventas", - "Accounting": "Contabilidad", - "Connected Accounts": "Cuentas conectadas", - "3X Large": "3 veces más grande", - "Footer \/ Notes": "Pie de página\/Notas", - "Decimal Separator": "Separador decimal", - "Scope": "Alcance", - "Top Navigation": "Navegación superior", - "Symbol Position": "Posición del símbolo", - "Striped Tables": "Mesas rayadas", - "Date Format": "Formato de fecha", - "Subheader": "Subtítulo", - "Default :Type :Record": "Predeterminado :Type :Record", - "Before Amount": "Cantidad anterior", - "Limited Partnership (LP)": "Sociedad en comandita (LP)", - "Tax ID": "ID fiscal", - "Show Logo": "Mostrar logotipo", - "Number Prefix": "Prefijo numérico", - "Net 15": "Neto 15", - "After Number": "Después del número", - "Number Format": "Formato numérico", - "Due Upon Receipt": "Vencimiento al recibirlo", - "7X Large": "7 veces más grande", - "Amount Name": "Nombre del importe", - "Default :Record": "Predeterminado :Record", - "Select a symbol position": "Seleccione la posición de un símbolo", - "Net 60": "Neto 60", - "Before Number": "Antes del número", - "4X Large": "4 veces más grande", - "Week Start": "Inicio de semana", - "City \/ Town": "Ciudad\/pueblo", - "Live Currency": "Moneda en vivo", - "Screen 2X Large": "Pantalla 2 veces grande", - "Payment Terms": "Condiciones de pago", - "Thousands Separator": "Separador de miles", - "Table Sort Direction": "Dirección de clasificación de tablas", - "General Partnership": "Colaboración general", - "Records Per Page": "Registros por página", - "Number Digits": "Dígitos numéricos", - "Navigation Layout": "Diseño de navegación", - "Location Details": "Detalles de ubicación", - "Primary Color": "Color primario", - "Net 30": "Neto 30", - "After Amount": "Después del importe", - "Limited Liability Partnership (LLP)": "Sociedad de responsabilidad limitada (LLP)", - "Limited Liability Company (LLC)": "Sociedad de responsabilidad limitada (LLC)", - "Unit Name": "Nombre de la unidad", - "Percent Position": "Posición porcentual", - "Legal & Compliance": "Legislación y cumplimiento", - "Number Next": "Número siguiente", - "Accent Color": "Color de acento", + "Compound": "Compuesto", + "Current balance": "Saldo actual", + "Account Information": "Información de la cuenta", "Subtype": "Subtipo", - "Time Format": "Formato de hora", - "Loan": "préstamo", + "Account number": "Número de cuenta", + "Investment": "Inversión", "Credit": "Crédito", - "Manager": "Gerente", - "All": "Todas", "Depository": "Depositario", + "Loan": "préstamo", + "Manager": "Gerente", "Children": "Niños", - "Company Currencies": "Monedas de la empresa", + "All": "Todas", "Main": "Principal", - "Entity": "Entidad", + "Parent department": "Departamento de padres", "Currency List": "Lista de divisas", + "Company Currencies": "Monedas de la empresa", + "Entity": "Entidad", "Available": "Disponible", - "Parent Department": "Departamento de padres", - "Live Rate": "Tarifa en vivo", + "Live rate": "Tarifa en vivo", + "Edit": "Editar", + "Notes": "Notas", + "Terms": "Términos", + "Ending balance": "Saldo final", + "Default :type :category": "Predeterminado :type :category", "Category": "Categoría", "Configuration": "Configuración", "Dates": "Fechas", @@ -201,27 +178,20 @@ "Primary Contact": "Contacto principal", "Billing Address": "Dirección de facturación", "Shipping Address": "Dirección de envío", + "Secondary Contacts": "Contactos secundarios", + "Address Information": "Información de dirección", "Invoice Header": "Encabezado de factura", "Invoice Details": "Detalles de la factura", - "Secondary Contacts": "Contactos secundarios", - "Edit": "Editar", + "Footer": "Pie de página", + "Invoice Footer": "Pie de página de la factura", "Bill Details": "Detalles de la factura", - "Frequency": "Frecuencia", - "Scheduling": "Programación", - "Notes": "Notas", "Create": "Crear", - "Invoice Footer": "Pie de página de la factura", - "Time Zone": "Zona horaria", - "Footer": "Pie de página", "Estimate Header": "Encabezado de estimación", - "Terms": "Términos", + "Estimate Details": "Detalles de la estimación", "Estimate Footer": "Estimar pie de página", + "Scheduling": "Programación", "Scheduling Form": "Formulario de programación", - "Default :Type :Category": "Predeterminado :Type :Category", "Approve": "Aprobar", - "Dates & Time": "Fechas y hora", - "Schedule Bounds": "Límites de programación", - "Ending Balance": "Saldo final", - "Address Information": "Información de dirección", - "Estimate Details": "Detalles de la estimación" + "Frequency": "Frecuencia", + "Dates & Time": "Fechas y hora" } \ No newline at end of file diff --git a/resources/data/lang/fr.json b/resources/data/lang/fr.json index 6ac9e474..23ad3099 100644 --- a/resources/data/lang/fr.json +++ b/resources/data/lang/fr.json @@ -1,160 +1,134 @@ { "General": "Général", - "stone": "pierre", - "fuchsia": "fuchsia", - "slate": "ardoise", - "cyan": "cyan", + "Bank account": "Compte bancaire", "Currency": "Devise", - "rose": "rose", - "Email": "Courrier électronique", - "Small": "Petit", - "Sales Tax": "Taxe de vente", - "red": "rouge", - "Discount": "Rabais", + "Taxes & Discounts": "Taxes et remises", + "Sales tax": "Taxe de vente", + "Purchase tax": "Taxe d'achat", + "Sales discount": "Rabais sur les ventes", + "Purchase discount": "Réduction d'achat", + "Appearance": "Apparence", + "Default": "Par défaut", "Company Profile": "Profil de l'entreprise", + "Invoice": "Facture", + "Localization": "Localisation", + "Discount": "Rabais", + "Tax": "Impôt", + "Accounting": "Comptabilité", + "Banking": "Services bancaires", + "Account": "Compte", + "Department": "Département", "Services": "Services", - "Medium": "Moyen", - "orange": "orange", - "Ascending": "Ascendant", - "Template": "Modèle", - "Price": "Prix", - "yellow": "jaune", - "Large": "Grand", - "Modern": "Moderne", + "Connected Accounts": "Comptes connectés", + "Live Currency": "Devise en direct", + "Primary color": "Couleur primaire", + "amber": "ambre", + "blue": "bleu", + "cyan": "cyan", + "emerald": "émeraude", + "fuchsia": "fuchsia", + "gray": "gris", "green": "vert", - "Hours": "Heures", - "Tax": "Impôt", - "Phone Number": "Numéro de téléphone", - "Zip \/ Postal Code": "Code postal\/Code postal", - "Sole Proprietorship": "Entreprise individuelle", - "Classic": "Classique", - "pink": "rose", - "zinc": "zinc", + "indigo": "indigo", + "lime": "citron vert", "neutral": "neutre", - "amber": "ambre", + "orange": "orange", + "pink": "rose", "purple": "pourpre", - "Logo": "Logo", - "Products": "Produits", - "gray": "gris", - "Disabled": "Désactivé", - "Full": "Complet", - "Descending": "Descendant", - "State \/ Province": "État\/province", - "Account": "Compte", - "Header": "En-tête", - "emerald": "émeraude", + "red": "rouge", + "rose": "rose", + "sky": "ciel", + "slate": "ardoise", + "stone": "pierre", + "teal": "sarcelle", + "violet": "violet", + "yellow": "jaune", + "zinc": "zinc", "Font": "Fonte", + "Enabled": "Activé", + "Disabled": "Désactivé", "Identification": "Identification", + "Email": "Courrier électronique", + "Phone number": "Numéro de téléphone", + "Logo": "Logo", + "Location Details": "Détails de l'emplacement", + "Country": "Pays", + "State \/ Province": "État\/province", + "Street Address": "Adresse de rue", + "City \/ Town": "Ville\/Localité", + "Zip \/ Postal Code": "Code postal\/Code postal", + "Legal & Compliance": "Juridique et conformité", + "Entity type": "Type d'entité", + "Tax ID": "Numéro fiscal", + "Sole Proprietorship": "Entreprise individuelle", + "General Partnership": "Partenariat général", + "Limited Partnership (LP)": "Société en commandite (LP)", + "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)", + "Limited Liability Company (LLC)": "Société à responsabilité limitée (LLC)", "Corporation": "Société", + "Nonprofit": "Sans but lucratif", + "Number prefix": "Préfixe numérique", + "Number digits": "Chiffres numériques", + "Number next": "Numéro suivant", + "Payment terms": "Modalités de paiement", "Content": "Contenu", - "Timezone": "Fuseau horaire", - "Invoice": "Facture", - "Department": "Département", - "Extra Large": "Très grand", - "Screen": "écran", - "violet": "violet", - "Name": "Nom", - "blue": "bleu", - "indigo": "indigo", + "Header": "En-tête", + "Subheader": "Sous-en-tête", + "Footer \/ notes": "Pied de page\/Remarques", + "Template": "Modèle", + "Show logo": "Afficher le logo", + "Accent color": "Couleur d'accent", + "Item name": "Nom de l'article", + "Items": "Objets", + "Products": "Produits", "Other": "Autres", - "Appearance": "Apparence", - "Banking": "Services bancaires", + "Unit name": "Nom de l'unité", + "Quantity": "Quantité", + "Hours": "Heures", + "Price name": "Nom du prix", + "Price": "Prix", + "Rate": "Tarif", + "Amount name": "Nom du montant", "Amount": "Montant", - "sky": "ciel", - "Enabled": "Activé", - "Layout": "Disposition", - "Street Address": "Adresse de rue", - "Items": "Objets", - "Country": "Pays", - "Accounting": "Comptabilité", - "lime": "citron vert", - "Extra Small": "Très petit", - "Default": "Par défaut", "Total": "Total", - "Language": "Langue", - "Bank Account": "Compte bancaire", - "Screen Large": "Grand écran", - "Navigation Layout": "Disposition de navigation", - "Connected Accounts": "Comptes connectés", - "Top Navigation": "Navigation supérieure", - "Data Presentation": "Présentation des données", - "Sales Discount": "Rabais sur les ventes", - "Net 30": "30 % nets", - "Taxes & Discounts": "Taxes et remises", - "Striped Tables": "Tables à rayures", - "7X Large": "7 fois plus grand", - "2X Large": "2 fois plus grand", - "Location Details": "Détails de l'emplacement", - "Payment Terms": "Modalités de paiement", - "Unit Name": "Nom de l'unité", - "Date & Time": "Date et heure", - "Financial & Fiscal": "Financier et fiscal", - "Purchase Discount": "Réduction d'achat", - "Primary Color": "Couleur primaire", - "Side Navigation": "Navigation latérale", - "4X Large": "4 fois plus grand", - "5X Large": "5 fois plus grand", - "6X Large": "6 fois plus grand", - "Number Prefix": "Préfixe numérique", - "Footer \/ Notes": "Pied de page\/Remarques", - "Accent Color": "Couleur d'accent", - "Item Name": "Nom de l'article", - "Net 15": "15 % nets", - "Date Format": "Format de date", - "Before Number": "Avant le numéro", - "Percent Position": "Position en pourcentage", - "Purchase Tax": "Taxe d'achat", - "Screen Extra Large": "Écran extra large", - "Entity Type": "Type d'entité", - "General Partnership": "Partenariat général", - "Amount Name": "Nom du montant", + "Due Upon Receipt": "À payer à la réception", + "Net 7": "Net 7", "Net 10": "10 % nets", - "Number Format": "Format numérique", - "3X Large": "3 fois plus grand", - "Limited Partnership (LP)": "Société en commandite (LP)", - "Number Next": "Numéro suivant", - "Week Start": "Début de semaine", - "Live Currency": "Devise en direct", - "Number Digits": "Chiffres numériques", + "Net 15": "15 % nets", + "Net 30": "30 % nets", "Net 60": "60 % nets", - "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)", - "Show Logo": "Afficher le logo", "Net 90": "Net 90", - "Tax ID": "Numéro fiscal", - "Due Upon Receipt": "À payer à la réception", - "Screen 2X Large": "Écran 2 fois plus grand", - "Price Name": "Nom du prix", - "Rate": "Tarif", - "Localization": "Localisation", - "teal": "sarcelle", - "Modal Width": "Largeur modale", - "Quantity": "Quantité", - "After Number": "Après le numéro", - "Legal & Compliance": "Juridique et conformité", - "Select Position": "Sélectionnez la position", - "Subheader": "Sous-en-tête", - "Net 7": "Net 7", - "Max Content Width": "Largeur maximale du contenu", - "Limited Liability Company (LLC)": "Société à responsabilité limitée (LLC)", - "Table Sort Direction": "Direction du tri des tableaux", - "Nonprofit": "Sans but lucratif", - "Records Per Page": "Enregistrements par page", - "City \/ Town": "Ville\/Localité", - "Time Format": "Format de l'heure", + "Modern": "Moderne", + "Classic": "Classique", + "Language": "Langue", + "Timezone": "Fuseau horaire", + "Date & Time": "Date et heure", + "Date format": "Format de date", + "Time format": "Format de l'heure", + "Week start": "Début de semaine", + "Before number": "Avant le numéro", + "After number": "Après le numéro", + "Select position": "Sélectionnez la position", + "Financial & Fiscal": "Financier et fiscal", + "Number format": "Format numérique", + "Percent position": "Position en pourcentage", + "Name": "Nom", + "Code": "Code", "Symbol": "Symbole", + "Default :record": ":record par défaut", "Type": "Tapez", - "Start Date": "Date de début", - "End Date": "Date de fin", + "Start date": "Date de début", + "End date": "Date de fin", "Sales": "Ventes", - "Default :Type :Record": "Par défaut :Type :Record", + "Default :type :record": "Par défaut :type :record", "Purchase": "Acheter", "Precision": "Précision", - "Symbol Position": "Position du symbole", - "Before Amount": "Avant le montant", - "After Amount": "Après le montant", + "Symbol position": "Position du symbole", + "Before amount": "Avant le montant", + "After amount": "Après le montant", "Select a symbol position": "Sélectionnez la position d'un symbole", - "Decimal Separator": "Séparateur décimal", - "Thousands Separator": "Séparateur de milliers", + "Decimal separator": "Séparateur décimal", + "Thousands separator": "Séparateur de milliers", "Yes": "Oui", "No": "Non", "Description": "Descriptif", @@ -166,24 +140,58 @@ "Product": "Produit", "Service": "Service", "Compound": "Composé", + "Current balance": "Solde actuel", "Account Information": "Informations sur le compte", "Subtype": "Sous-type", - "Account Number": "Numéro de compte", + "Account number": "Numéro de compte", + "Investment": "Investissement", "Credit": "Crédit", + "Depository": "Dépositaire", + "Loan": "Prêt", "Manager": "Directeur", "Children": "Enfants", - "Current Balance": "Solde actuel", - "Investment": "Investissement", - "Loan": "Prêt", "All": "Tous", "Main": "Principale", - "Available": "Disponible", - "Parent Department": "Département parent", - "Entity": "Entité", - "Company Currencies": "Devises des entreprises", - "Default :Record": ":Record par défaut", - "Live Rate": "Tarif en direct", + "Parent department": "Département parent", "Currency List": "Liste des devises", - "Depository": "Dépositaire", - "Code": "Code" + "Company Currencies": "Devises des entreprises", + "Entity": "Entité", + "Available": "Disponible", + "Live rate": "Tarif en direct", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/id.json b/resources/data/lang/id.json index cca5a2c3..af033906 100644 --- a/resources/data/lang/id.json +++ b/resources/data/lang/id.json @@ -1,189 +1,197 @@ { + "General": "Umum", + "Bank account": "Rekening Bank", + "Currency": "Mata uang", + "Taxes & Discounts": "Pajak & Diskon", + "Sales tax": "Pajak Penjualan", + "Purchase tax": "Pajak Pembelian", + "Sales discount": "Diskon Penjualan", + "Purchase discount": "Diskon Pembelian", "Appearance": "Penampilan", - "red": "merah", "Default": "Default", - "blue": "biru", - "sky": "langit", - "violet": "ungu", - "rose": "mawar", - "Currency": "Mata uang", - "Template": "Template", - "General": "Umum", - "Country": "Negara", - "Banking": "Perbankan", "Company Profile": "Profil Perusahaan", - "Enabled": "Diaktifkan", - "Name": "Nama", - "Code": "Kode", - "cyan": "biru kehijau-hijauan", - "Medium": "Sedang", - "State \/ Province": "Negara Bagian\/Provinsi", - "Sales": "Penjualan", - "emerald": "zamrud", - "lime": "kapur", - "Small": "Kecil", - "Screen": "Layar", - "Content": "Konten", - "Quantity": "Kuantitas", - "Price": "Harga", - "Rate": "Nilai", - "Amount": "Jumlah", - "Start Date": "Tanggal Mulai", - "Precision": "Presisi", - "Yes": "ya", - "Fixed": "Tetap", - "Product": "Produk", + "Invoice": "Faktur", + "Localization": "Lokalisasi", + "Discount": "Diskon", + "Tax": "Pajak", "Accounting": "Akuntansi", + "Banking": "Perbankan", "Account": "Akun", "Department": "Departemen", + "Services": "Jasa", + "Connected Accounts": "Akun Terhubung", + "Live Currency": "Mata Uang Langsung", + "Primary color": "Warna primer", + "amber": "kuning", + "blue": "biru", + "cyan": "biru kehijau-hijauan", + "emerald": "zamrud", + "fuchsia": "Fuchsia", + "gray": "abu-abu", "green": "hijau", + "indigo": "indigo", + "lime": "kapur", "neutral": "netral", + "orange": "oranye", "pink": "merah muda", "purple": "ungu", + "red": "merah", + "rose": "mawar", + "sky": "langit", "slate": "batu tulis", "stone": "batu", + "teal": "teal", + "violet": "ungu", "yellow": "kuning", "zinc": "seng", "Font": "Font", - "Large": "Besar", + "Enabled": "Diaktifkan", + "Disabled": "Dinonaktifkan", + "Identification": "Identifikasi", "Email": "E-Mail", - "Phone Number": "Nomor Telepon", + "Phone number": "Nomor Telepon", "Logo": "Logo", + "Location Details": "Detail Lokasi", + "Country": "Negara", + "State \/ Province": "Negara Bagian\/Provinsi", + "Street Address": "Alamat Jalan", + "City \/ Town": "Kota\/Kota", + "Zip \/ Postal Code": "Post\/Kode Pos", + "Legal & Compliance": "Hukum & Kepatuhan", + "Entity type": "Tipe Entitas", + "Tax ID": "ID Pajak", + "Sole Proprietorship": "Kepemilikan Tunggal", + "General Partnership": "Kemitraan Umum", + "Limited Partnership (LP)": "Kemitraan Terbatas (LP)", + "Limited Liability Partnership (LLP)": "Kemitraan Tanggung Jawab Terbatas (LLP)", + "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)", "Corporation": "Perusahaan", - "Payment Terms": "Ketentuan Pembayaran", + "Nonprofit": "Nirlaba", + "Number prefix": "Awalan Angka", + "Number digits": "Angka Digit", + "Number next": "Nomor Berikutnya", + "Payment terms": "Ketentuan Pembayaran", + "Content": "Konten", "Header": "Header", + "Subheader": "Subheader", + "Footer \/ notes": "Footer\/Catatan", + "Template": "Template", + "Show logo": "Tampilkan Logo", + "Accent color": "Warna Aksen", + "Item name": "Nama Item", "Items": "Barang", + "Products": "Produk", "Other": "Lainnya", - "Language": "Bahasa", - "Timezone": "Zona Waktu", - "Purchase": "Pembelian", - "No": "Tidak", - "Description": "Deskripsi", - "Scope": "Lingkup", - "Type": "Mengetik", - "Disabled": "Dinonaktifkan", + "Unit name": "Nama Unit", + "Quantity": "Kuantitas", + "Hours": "Jam", + "Price name": "Nama Harga", + "Price": "Harga", + "Rate": "Nilai", + "Amount name": "Nama Jumlah", + "Amount": "Jumlah", "Total": "Total", - "None": "Tidak ada", - "gray": "abu-abu", - "Records Per Page": "Catatan Per Halaman", - "Connected Accounts": "Akun Terhubung", - "Primary Color": "Warna primer", - "Ascending": "Menaik", - "Item Name": "Nama Item", - "Localization": "Lokalisasi", - "indigo": "indigo", - "6X Large": "6X Besar", - "Screen Large": "Layar Besar", - "Full": "Penuh", - "Live Currency": "Mata Uang Langsung", - "Products": "Produk", - "Accent Color": "Warna Aksen", - "Net 15": "Bersih 15", - "After Number": "Setelah Nomor", - "Bank Account": "Rekening Bank", - "Taxes & Discounts": "Pajak & Diskon", - "Data Presentation": "Presentasi Data", - "5X Large": "5X Besar", - "Extra Large": "Ekstra Besar", - "orange": "oranye", - "Subheader": "Subheader", + "Due Upon Receipt": "Jangka Waktu Penerimaan", + "Net 7": "Bersih 7", "Net 10": "Bersih 10", - "teal": "teal", - "Hours": "Jam", - "Date Format": "Format Tanggal", - "Services": "Jasa", - "Max Content Width": "Lebar Konten Maks", - "Zip \/ Postal Code": "Post\/Kode Pos", - "Number Digits": "Angka Digit", - "amber": "kuning", - "fuchsia": "Fuchsia", - "Modal Width": "Lebar Modal", - "Legal & Compliance": "Hukum & Kepatuhan", + "Net 15": "Bersih 15", + "Net 30": "Bersih 30", "Net 60": "Bersih 60", + "Net 90": "Bersih 90", "Modern": "Modern", - "End Date": "Tanggal Akhir", - "Discount": "Diskon", - "Table Sort Direction": "Arah Urutan Tabel", - "Limited Liability Partnership (LLP)": "Kemitraan Tanggung Jawab Terbatas (LLP)", - "City \/ Town": "Kota\/Kota", + "Classic": "Klasik", + "Language": "Bahasa", + "Timezone": "Zona Waktu", "Date & Time": "Tanggal & Waktu", - "Symbol Position": "Posisi Simbol", - "Striped Tables": "Meja Bergaris", - "Street Address": "Alamat Jalan", - "Number Prefix": "Awalan Angka", - "7X Large": "7X Besar", - "Number Format": "Format Angka", - "Percent Position": "Posisi Persentase", - "Descending": "Menurun", - "Price Name": "Nama Harga", - "Symbol": "Simbol", - "Percentage": "Persentase", - "Purchase Discount": "Diskon Pembelian", - "Invoice": "Faktur", - "Identification": "Identifikasi", - "After Amount": "Setelah Jumlah", - "2X Large": "2X Besar", - "Before Amount": "Sebelum Jumlah", - "Side Navigation": "Navigasi Samping", - "Net 7": "Bersih 7", - "Screen Extra Large": "Layar Ekstra Besar", - "Default :Type :Record": "Standar :Type :Record", - "Limited Partnership (LP)": "Kemitraan Terbatas (LP)", - "Navigation Layout": "Tata Letak Navigasi", - "Top Navigation": "Navigasi Teratas", - "Tax": "Pajak", - "Before Number": "Sebelum Nomor", + "Date format": "Format Tanggal", + "Time format": "Format Waktu", + "Week start": "Minggu Mulai", + "Before number": "Sebelum Nomor", + "After number": "Setelah Nomor", + "Select position": "Pilih Posisi", "Financial & Fiscal": "Keuangan & Fiskal", + "Number format": "Format Angka", + "Percent position": "Posisi Persentase", + "Name": "Nama", + "Code": "Kode", + "Symbol": "Simbol", + "Default :record": "Standar :record", + "Type": "Mengetik", + "Start date": "Tanggal Mulai", + "End date": "Tanggal Akhir", + "Sales": "Penjualan", + "Default :type :record": "Standar :type :record", + "Purchase": "Pembelian", + "Precision": "Presisi", + "Symbol position": "Posisi Simbol", + "Before amount": "Sebelum Jumlah", + "After amount": "Setelah Jumlah", + "Select a symbol position": "Pilih posisi simbol", + "Decimal separator": "Pemisah Desimal", + "Thousands separator": "Pemisah Ribuan", + "Yes": "ya", + "No": "Tidak", + "Description": "Deskripsi", "Computation": "Komputasi", - "Show Logo": "Tampilkan Logo", - "Thousands Separator": "Pemisah Ribuan", - "Purchase Tax": "Pajak Pembelian", - "Number Next": "Nomor Berikutnya", - "Sales Discount": "Diskon Penjualan", - "Screen 2X Large": "Layar 2X Besar", - "Due Upon Receipt": "Jangka Waktu Penerimaan", - "Decimal Separator": "Pemisah Desimal", - "Week Start": "Minggu Mulai", - "4X Large": "4X Besar", - "Select Position": "Pilih Posisi", - "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)", - "General Partnership": "Kemitraan Umum", - "Default :Record": "Standar :Record", - "Nonprofit": "Nirlaba", - "Net 90": "Bersih 90", - "Location Details": "Detail Lokasi", - "Entity Type": "Tipe Entitas", - "Classic": "Klasik", - "Sole Proprietorship": "Kepemilikan Tunggal", - "Footer \/ Notes": "Footer\/Catatan", - "Extra Small": "Ekstra Kecil", - "Time Format": "Format Waktu", - "Net 30": "Bersih 30", - "Amount Name": "Nama Jumlah", - "Unit Name": "Nama Unit", - "Subtype": "Subtipe", - "Account Number": "Nomor Rekening", + "Scope": "Lingkup", + "Percentage": "Persentase", + "Fixed": "Tetap", + "None": "Tidak ada", + "Product": "Produk", "Service": "Pelayanan", - "Manager": "pengelola", - "Account Information": "Informasi Akun", - "Children": "Anak-anak", - "Current Balance": "Saldo Saat Ini", - "Main": "Utama", "Compound": "Senyawa", + "Current balance": "Saldo Saat Ini", + "Account Information": "Informasi Akun", + "Subtype": "Subtipe", + "Account number": "Nomor Rekening", + "Investment": "Investasi", "Credit": "Kredit", - "All": "Semua", - "Loan": "Pinjaman", - "Entity": "Entitas", - "Available": "Tersedia", "Depository": "Depository", + "Loan": "Pinjaman", + "Manager": "pengelola", + "Children": "Anak-anak", + "All": "Semua", + "Main": "Utama", + "Parent department": "Departemen Orang Tua", "Currency List": "Daftar Mata Uang", "Company Currencies": "Mata Uang Perusahaan", - "Parent Department": "Departemen Orang Tua", - "Live Rate": "Tarif Langsung", - "Investment": "Investasi", - "Sales Tax": "Pajak Penjualan", - "Layout": "Tata Letak", - "3X Large": "3X Besar", - "Select a symbol position": "Pilih posisi simbol", - "Tax ID": "ID Pajak" + "Entity": "Entitas", + "Available": "Tersedia", + "Live rate": "Tarif Langsung", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/it.json b/resources/data/lang/it.json index e8299ef6..a83064be 100644 --- a/resources/data/lang/it.json +++ b/resources/data/lang/it.json @@ -1,160 +1,134 @@ { "General": "Generale", + "Bank account": "Conto bancario", "Currency": "Valuta", - "rose": "rosa", - "indigo": "indaco", - "Rate": "Tariffa", + "Taxes & Discounts": "Tasse e sconti", + "Sales tax": "Imposta sulle vendite", + "Purchase tax": "Imposta sugli acquisti", + "Sales discount": "Sconto sulle vendite", + "Purchase discount": "Sconto sull'acquisto", + "Appearance": "Aspetto", + "Default": "Predefinito", + "Company Profile": "Profilo dell'azienda", + "Invoice": "Fattura", "Localization": "Localizzazione", - "lime": "lime", "Discount": "Sconto", + "Tax": "Imposta", + "Accounting": "Contabilità", + "Banking": "Bancario", + "Account": "Account", + "Department": "Dipartimento", + "Services": "Servizi", + "Connected Accounts": "Account connessi", + "Live Currency": "Valuta in tempo reale", + "Primary color": "Colore primario", + "amber": "ambra", "blue": "blu", - "Screen": "Schermo", "cyan": "ciano", - "yellow": "giallo", - "Ascending": "Ascendente", - "Zip \/ Postal Code": "Zip\/Codice postale", - "Disabled": "Disabili", - "Small": "Piccolo", - "Hours": "Ore", - "Descending": "Discendente", - "Default": "Predefinito", - "slate": "ardesia", - "purple": "viola", - "Code": "Codice", - "neutral": "neutro", - "Invoice": "Fattura", - "green": "verde", - "red": "rosso", - "Email": "E-mail", + "emerald": "smeraldo", + "fuchsia": "fucsia", "gray": "grigio", - "Banking": "Bancario", - "Language": "Lingua", - "Department": "Dipartimento", - "Street Address": "Indirizzo", - "Account": "Account", - "Other": "Altro", - "Template": "Modello", - "Products": "Prodotti", - "zinc": "zinco", - "Layout": "Layout", - "Country": "Paese", - "Date & Time": "Data e ora", - "Name": "Nome", + "green": "verde", + "indigo": "indaco", + "lime": "lime", + "neutral": "neutro", "orange": "arancione", - "teal": "verde acqua", - "Identification": "Identificazione", - "Extra Small": "Extra piccolo", - "Classic": "Classico", - "Appearance": "Aspetto", - "Phone Number": "Numero di telefono", - "State \/ Province": "Stato\/Provincia", - "Header": "Intestazione", - "Corporation": "società per azioni", - "Amount": "Importo", - "Font": "Font", - "Full": "Completo", - "Bank Account": "Conto bancario", "pink": "rosa", - "Enabled": "Abilitato", - "Entity Type": "Tipo di entità", - "Services": "Servizi", + "purple": "viola", + "red": "rosso", + "rose": "rosa", "sky": "cielo", - "violet": "viola", - "Large": "Grande", - "Timezone": "Fuso orario", - "Modern": "Moderno", + "slate": "ardesia", "stone": "pietra", - "Content": "Contenuto", - "Sales Tax": "Imposta sulle vendite", - "Quantity": "Quantità", - "Total": "Totale", - "Medium": "Medio", - "Items": "Oggetti", - "Accounting": "Contabilità", - "amber": "ambra", + "teal": "verde acqua", + "violet": "viola", + "yellow": "giallo", + "zinc": "zinco", + "Font": "Font", + "Enabled": "Abilitato", + "Disabled": "Disabili", + "Identification": "Identificazione", + "Email": "E-mail", + "Phone number": "Numero di telefono", "Logo": "Logo", - "Price": "Prezzo", - "fuchsia": "fucsia", - "Screen Large": "Schermo grande", - "Taxes & Discounts": "Tasse e sconti", - "Date Format": "Formato data", - "6X Large": "6X Grande", - "Time Format": "Formato orario", - "Data Presentation": "Presentazione dei dati", - "Week Start": "Inizio settimana", - "Connected Accounts": "Account connessi", - "Live Currency": "Valuta in tempo reale", - "Primary Color": "Colore primario", - "Modal Width": "Larghezza modale", - "5X Large": "5X Grande", - "2X Large": "2X Grande", - "Show Logo": "Mostra logo", - "Net 60": "Rete 60", - "Net 90": "Rete 90", - "Select Position": "Seleziona posizione", - "Financial & Fiscal": "Finanziario e fiscale", - "Number Format": "Formato numerico", - "Purchase Tax": "Imposta sugli acquisti", - "Sales Discount": "Sconto sulle vendite", - "Purchase Discount": "Sconto sull'acquisto", - "Company Profile": "Profilo dell'azienda", - "Tax": "Imposta", - "emerald": "smeraldo", - "Navigation Layout": "Layout di navigazione", - "Records Per Page": "Record per pagina", - "4X Large": "4X Grande", - "7X Large": "7X Grande", - "Screen Extra Large": "Schermo extra grande", - "Screen 2X Large": "Schermo 2X grande", - "Extra Large": "Extra grande", "Location Details": "Dettagli sulla posizione", - "General Partnership": "Collaborazione generale", - "Limited Partnership (LP)": "Società in accomandita semplice (LP)", - "Subheader": "Sottotitolo", - "Footer \/ Notes": "Piè di pagina\/Note", - "Accent Color": "Colore dell'accento", - "Item Name": "Nome dell'articolo", - "Unit Name": "Nome dell'unità", - "Amount Name": "Nome dell'importo", - "Before Number": "Prima del numero", - "After Number": "Dopo il numero", - "Percent Position": "Posizione percentuale", - "Side Navigation": "Navigazione laterale", - "Table Sort Direction": "Direzione di ordinamento della tabella", + "Country": "Paese", + "State \/ Province": "Stato\/Provincia", + "Street Address": "Indirizzo", "City \/ Town": "Città\/paese", + "Zip \/ Postal Code": "Zip\/Codice postale", + "Legal & Compliance": "Legale e conformità", + "Entity type": "Tipo di entità", "Tax ID": "ID fiscale", + "Sole Proprietorship": "Ditta individuale", + "General Partnership": "Collaborazione generale", + "Limited Partnership (LP)": "Società in accomandita semplice (LP)", "Limited Liability Partnership (LLP)": "Società a responsabilità limitata (LLP)", - "Payment Terms": "Termini di pagamento", - "Number Digits": "Cifre numeriche", - "Net 15": "Rete 15", - "Max Content Width": "Larghezza massima del contenuto", - "Net 7": "Rete 7", + "Limited Liability Company (LLC)": "Società a responsabilità limitata (LLC)", + "Corporation": "società per azioni", + "Nonprofit": "Senza scopo di lucro", + "Number prefix": "Prefisso numerico", + "Number digits": "Cifre numeriche", + "Number next": "Numero successivo", + "Payment terms": "Termini di pagamento", + "Content": "Contenuto", + "Header": "Intestazione", + "Subheader": "Sottotitolo", + "Footer \/ notes": "Piè di pagina\/Note", + "Template": "Modello", + "Show logo": "Mostra logo", + "Accent color": "Colore dell'accento", + "Item name": "Nome dell'articolo", + "Items": "Oggetti", + "Products": "Prodotti", + "Other": "Altro", + "Unit name": "Nome dell'unità", + "Quantity": "Quantità", + "Hours": "Ore", + "Price name": "Nome del prezzo", + "Price": "Prezzo", + "Rate": "Tariffa", + "Amount name": "Nome dell'importo", + "Amount": "Importo", + "Total": "Totale", "Due Upon Receipt": "Dovuto al ricevimento", + "Net 7": "Rete 7", "Net 10": "Rete 10", + "Net 15": "Rete 15", "Net 30": "Rete 30", - "Legal & Compliance": "Legale e conformità", - "Number Prefix": "Prefisso numerico", - "Number Next": "Numero successivo", - "Price Name": "Nome del prezzo", - "Nonprofit": "Senza scopo di lucro", - "Top Navigation": "Navigazione principale", - "Striped Tables": "Tavoli a righe", - "Sole Proprietorship": "Ditta individuale", - "Limited Liability Company (LLC)": "Società a responsabilità limitata (LLC)", - "3X Large": "3X Grande", + "Net 60": "Rete 60", + "Net 90": "Rete 90", + "Modern": "Moderno", + "Classic": "Classico", + "Language": "Lingua", + "Timezone": "Fuso orario", + "Date & Time": "Data e ora", + "Date format": "Formato data", + "Time format": "Formato orario", + "Week start": "Inizio settimana", + "Before number": "Prima del numero", + "After number": "Dopo il numero", + "Select position": "Seleziona posizione", + "Financial & Fiscal": "Finanziario e fiscale", + "Number format": "Formato numerico", + "Percent position": "Posizione percentuale", + "Name": "Nome", + "Code": "Codice", "Symbol": "Simbolo", - "Default :Record": "Predefinito :Record", + "Default :record": "Predefinito :record", "Type": "Tipo", - "Start Date": "Data di inizio", - "End Date": "Data di fine", + "Start date": "Data di inizio", + "End date": "Data di fine", "Sales": "Vendite", - "Default :Type :Record": "Predefinito :Type :Record", + "Default :type :record": "Predefinito :type :record", "Purchase": "Acquisto", "Precision": "Precisione", - "Symbol Position": "Posizione del simbolo", - "After Amount": "Dopo l'importo", + "Symbol position": "Posizione del simbolo", + "Before amount": "Prima dell'importo", + "After amount": "Dopo l'importo", "Select a symbol position": "Seleziona la posizione del simbolo", - "Thousands Separator": "Separatore di migliaia", + "Decimal separator": "Separatore decimale", + "Thousands separator": "Separatore di migliaia", "Yes": "sì", "No": "No", "Description": "Descrizione", @@ -165,25 +139,59 @@ "None": "Nessuna", "Product": "Prodotto", "Service": "Servizio", - "Account Information": "Informazioni sull'account", - "Investment": "Investimento", - "Decimal Separator": "Separatore decimale", "Compound": "Composto", - "Current Balance": "Saldo attuale", + "Current balance": "Saldo attuale", + "Account Information": "Informazioni sull'account", "Subtype": "Sottotipo", - "Account Number": "Numero di conto", + "Account number": "Numero di conto", + "Investment": "Investimento", + "Credit": "Credito", + "Depository": "Depositario", + "Loan": "Prestito", "Manager": "Manager", "Children": "Bambini", "All": "Tutti", "Main": "Principale", - "Credit": "Credito", - "Loan": "Prestito", - "Available": "Disponibile", - "Depository": "Depositario", - "Entity": "Entità", - "Parent Department": "Reparto genitori", + "Parent department": "Reparto genitori", "Currency List": "Elenco delle valute", "Company Currencies": "Valute aziendali", - "Before Amount": "Prima dell'importo", - "Live Rate": "Tasso in tempo reale" + "Entity": "Entità", + "Available": "Disponibile", + "Live rate": "Tasso in tempo reale", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/nl.json b/resources/data/lang/nl.json index a8feb817..c74ba87f 100644 --- a/resources/data/lang/nl.json +++ b/resources/data/lang/nl.json @@ -1,189 +1,197 @@ { "General": "Generaal", - "Account": "Rekening", - "Department": "Afdeling", - "sky": "hemel", - "purple": "paars", - "Other": "Andere", - "gray": "grijs", - "Extra Small": "Extra klein", - "yellow": "geel", - "Default": "Standaard", - "Disabled": "Uitgeschakeld", - "Template": "Sjabloon", - "Total": "Totaal", - "stone": "steen", - "Ascending": "Oplopend", - "Logo": "Logo", - "Sales": "Verkoop", + "Bank account": "Bankrekening", "Currency": "Valuta", + "Taxes & Discounts": "Belastingen en kortingen", + "Sales tax": "Omzetbelasting", + "Purchase tax": "Aankoopbelasting", + "Sales discount": "Verkoopkorting", + "Purchase discount": "Aankoopkorting", + "Appearance": "Verschijning", + "Default": "Standaard", + "Company Profile": "Bedrijfsprofiel", + "Invoice": "Factuur", "Localization": "Lokalisatie", - "red": "rood", - "Sales Tax": "Omzetbelasting", - "lime": "kalk", - "Phone Number": "Telefoonnummer", - "Products": "Producten", - "Hours": "Uren", + "Discount": "Korting", + "Tax": "Belasting", + "Accounting": "Boekhouding", + "Banking": "Bankieren", + "Account": "Rekening", + "Department": "Afdeling", + "Services": "Diensten", + "Connected Accounts": "Gekoppelde accounts", + "Live Currency": "Levende valuta", + "Primary color": "Primaire kleur", + "amber": "barnsteen", "blue": "blauw", + "cyan": "cyaan", + "emerald": "smaragd", + "fuchsia": "fuchsia", + "gray": "grijs", "green": "groen", - "Extra Large": "Extra groot", - "Date & Time": "Datum en tijd", - "Name": "Naam", - "Purchase": "Aankoop", + "indigo": "indigo", + "lime": "kalk", "neutral": "neutraal", "orange": "oranje", - "Header": "Koptekst", - "Symbol": "Symbool", - "Type": "Typ", - "Accounting": "Boekhouding", - "Timezone": "Tijdzone", - "Content": "Inhoud", - "Enabled": "Ingeschakeld", - "zinc": "zink", + "pink": "roze", + "purple": "paars", + "red": "rood", "rose": "roos", - "Quantity": "Hoeveelheid", - "Code": "Code", - "Medium": "Middelgroot", - "Amount": "Bedrag", - "Language": "taal", + "sky": "hemel", + "slate": "leisteen", + "stone": "steen", + "teal": "groenblauw", "violet": "paars", - "pink": "roze", + "yellow": "geel", + "zinc": "zink", "Font": "Lettertype", - "Full": "Volledig", - "Large": "Groot", - "Screen": "Scherm", - "Descending": "Aflopend", + "Enabled": "Ingeschakeld", + "Disabled": "Uitgeschakeld", + "Identification": "Identificatie", "Email": "Email", - "Tax ID": "Fiscaal nummer", - "Price": "Prijs", - "Classic": "Klassiek", - "End Date": "Einddatum", - "Discount": "Korting", - "Layout": "Indeling", + "Phone number": "Telefoonnummer", + "Logo": "Logo", + "Location Details": "Details van de locatie", "Country": "Land", + "State \/ Province": "Staat\/provincie", "Street Address": "Adres", - "Corporation": "corporatie", - "slate": "leisteen", - "7X Large": "7x groot", - "Rate": "Tarief", - "Start Date": "Startdatum", - "indigo": "indigo", - "fuchsia": "fuchsia", - "Small": "Klein", - "Banking": "Bankieren", - "6X Large": "6x groot", + "City \/ Town": "Stad\/stad", "Zip \/ Postal Code": "Postcode\/postcode", - "Show Logo": "Logo weergeven", - "Default :Type :Record": "Standaard :Type :Record", - "Precision": "Nauwkeurigheid", - "Default :Record": "Standaard :Record", - "Footer \/ Notes": "Voettekst\/Notities", - "Item Name": "Naam van het item", - "Week Start": "Begin van de week", - "After Number": "Na nummer", - "Side Navigation": "Zijdelingse navigatie", - "Due Upon Receipt": "Verschuldigd bij ontvangst", - "teal": "groenblauw", - "Screen 2X Large": "Scherm 2X groot", - "3X Large": "3X groot", - "Percent Position": "Positie in procenten", - "Sales Discount": "Verkoopkorting", - "Symbol Position": "Positie van het symbool", - "Entity Type": "Entiteitstype", - "cyan": "cyaan", - "emerald": "smaragd", - "Appearance": "Verschijning", - "Connected Accounts": "Gekoppelde accounts", + "Legal & Compliance": "Juridische zaken en naleving", + "Entity type": "Entiteitstype", + "Tax ID": "Fiscaal nummer", + "Sole Proprietorship": "Eenmanszaak", + "General Partnership": "Algemeen partnerschap", + "Limited Partnership (LP)": "Beperkte vennootschap (LP)", + "Limited Liability Partnership (LLP)": "Partnerschap met beperkte aansprakelijkheid (LLP)", + "Limited Liability Company (LLC)": "Vennootschap met beperkte aansprakelijkheid (LLC)", + "Corporation": "corporatie", "Nonprofit": "Non-profitorganisatie", + "Number prefix": "Voorvoegsel van het nummer", + "Number digits": "Aantal cijfers", + "Number next": "Nummer Volgende", + "Payment terms": "Betalingsvoorwaarden", + "Content": "Inhoud", + "Header": "Koptekst", "Subheader": "Subkop", - "Before Amount": "Vóór het bedrag", - "Location Details": "Details van de locatie", - "Net 10": "Netto 10", - "Before Number": "Voor het nummer", - "Live Currency": "Levende valuta", - "Max Content Width": "Maximale breedte van de inhoud", - "Data Presentation": "Presentatie van gegevens", - "4X Large": "4X groot", - "Modern": "Modern", - "Purchase Tax": "Aankoopbelasting", - "Number Prefix": "Voorvoegsel van het nummer", - "Select a symbol position": "Selecteer een symboolpositie", - "Screen Large": "Groot scherm", - "Identification": "Identificatie", - "Unit Name": "Naam van de eenheid", - "Price Name": "Naam van de prijs", - "Purchase Discount": "Aankoopkorting", - "Payment Terms": "Betalingsvoorwaarden", - "Number Format": "Nummerformaat", + "Footer \/ notes": "Voettekst\/Notities", + "Template": "Sjabloon", + "Show logo": "Logo weergeven", + "Accent color": "Accentkleur", + "Item name": "Naam van het item", + "Items": "Artikelen", + "Products": "Producten", + "Other": "Andere", + "Unit name": "Naam van de eenheid", + "Quantity": "Hoeveelheid", + "Hours": "Uren", + "Price name": "Naam van de prijs", + "Price": "Prijs", + "Rate": "Tarief", + "Amount name": "Naam van het bedrag", + "Amount": "Bedrag", + "Total": "Totaal", + "Due Upon Receipt": "Verschuldigd bij ontvangst", "Net 7": "Net 7", + "Net 10": "Netto 10", "Net 15": "Netto 15", - "Decimal Separator": "Decimaal scheidingsteken", - "Thousands Separator": "Scheidingsteken voor duizenden", - "Limited Partnership (LP)": "Beperkte vennootschap (LP)", - "Navigation Layout": "Navigatie-indeling", - "Legal & Compliance": "Juridische zaken en naleving", - "Net 60": "Netto 60", - "Modal Width": "Modale breedte", - "Table Sort Direction": "Sorteerrichting van de tabel", - "Limited Liability Company (LLC)": "Vennootschap met beperkte aansprakelijkheid (LLC)", - "Bank Account": "Bankrekening", - "Time Format": "Tijdformaat", - "Company Profile": "Bedrijfsprofiel", - "City \/ Town": "Stad\/stad", - "Number Next": "Nummer Volgende", - "Amount Name": "Naam van het bedrag", - "Select Position": "Positie selecteren", - "Financial & Fiscal": "Financieel en fiscaal", - "Services": "Diensten", - "Number Digits": "Aantal cijfers", - "Records Per Page": "Records per pagina", "Net 30": "Netto 30", - "Date Format": "Datumformaat", - "Taxes & Discounts": "Belastingen en kortingen", - "Striped Tables": "Gestreepte tafels", - "State \/ Province": "Staat\/provincie", + "Net 60": "Netto 60", "Net 90": "Netto 90", - "General Partnership": "Algemeen partnerschap", - "Limited Liability Partnership (LLP)": "Partnerschap met beperkte aansprakelijkheid (LLP)", - "After Amount": "Na het bedrag", - "Accent Color": "Accentkleur", - "Invoice": "Factuur", - "Items": "Artikelen", - "2X Large": "2X groot", - "Tax": "Belasting", - "Primary Color": "Primaire kleur", - "5X Large": "5x groot", - "Sole Proprietorship": "Eenmanszaak", - "Top Navigation": "Navigatie bovenaan", - "amber": "barnsteen", - "Screen Extra Large": "Extra groot scherm", - "Description": "Omschrijving", + "Modern": "Modern", + "Classic": "Klassiek", + "Language": "taal", + "Timezone": "Tijdzone", + "Date & Time": "Datum en tijd", + "Date format": "Datumformaat", + "Time format": "Tijdformaat", + "Week start": "Begin van de week", + "Before number": "Voor het nummer", + "After number": "Na nummer", + "Select position": "Positie selecteren", + "Financial & Fiscal": "Financieel en fiscaal", + "Number format": "Nummerformaat", + "Percent position": "Positie in procenten", + "Name": "Naam", + "Code": "Code", + "Symbol": "Symbool", + "Default :record": "Standaard :record", + "Type": "Typ", + "Start date": "Startdatum", + "End date": "Einddatum", + "Sales": "Verkoop", + "Default :type :record": "Standaard :type :record", + "Purchase": "Aankoop", + "Precision": "Nauwkeurigheid", + "Symbol position": "Positie van het symbool", + "Before amount": "Vóór het bedrag", + "After amount": "Na het bedrag", + "Select a symbol position": "Selecteer een symboolpositie", + "Decimal separator": "Decimaal scheidingsteken", + "Thousands separator": "Scheidingsteken voor duizenden", "Yes": "Ja", - "Percentage": "Percentage", - "Scope": "Toepassingsgebied", "No": "Nee", - "Product": "Product", - "None": "Geen", + "Description": "Omschrijving", + "Computation": "Berekening", + "Scope": "Toepassingsgebied", + "Percentage": "Percentage", "Fixed": "Opgelost", + "None": "Geen", + "Product": "Product", "Service": "Service", "Compound": "Samenstelling", - "Computation": "Berekening", - "Current Balance": "Huidig saldo", + "Current balance": "Huidig saldo", "Account Information": "Accountgegevens", "Subtype": "Subtype", - "Account Number": "Rekeningnummer", + "Account number": "Rekeningnummer", "Investment": "Investering", "Credit": "Krediet", "Depository": "Depository", + "Loan": "Lening", "Manager": "Manager", "Children": "Kinderen", "All": "Alles", - "Entity": "Entiteit", - "Available": "Beschikbaar", "Main": "Belangrijkste", - "Parent Department": "Ouderafdeling", - "Loan": "Lening", + "Parent department": "Ouderafdeling", + "Currency List": "Valutalijst", "Company Currencies": "Valuta's van bedrijven", - "Live Rate": "Tarief live", - "Currency List": "Valutalijst" + "Entity": "Entiteit", + "Available": "Beschikbaar", + "Live rate": "Tarief live", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/pt.json b/resources/data/lang/pt.json index 8c5d85f9..a0eab55e 100644 --- a/resources/data/lang/pt.json +++ b/resources/data/lang/pt.json @@ -1,162 +1,134 @@ { "General": "Geral", - "indigo": "índigo", - "slate": "ardósia", - "neutral": "neutro", - "purple": "roxo", - "orange": "laranja", - "Total": "Total", - "Email": "E-mail", - "Rate": "Tarifa", - "Discount": "Desconto", - "Font": "Fonte", - "State \/ Province": "Estado\/ Província", - "zinc": "zinco", - "Date & Time": "Data e hora", + "Bank account": "Conta bancária", + "Currency": "Moeda", + "Taxes & Discounts": "Impostos e descontos", + "Sales tax": "Imposto sobre vendas", + "Purchase tax": "Imposto de compra", + "Sales discount": "Desconto de vendas", + "Purchase discount": "Desconto na compra", "Appearance": "Aparência", - "rose": "rose", - "Phone Number": "Número de telefone", - "Department": "Departamento", - "Medium": "Médio", - "Price": "Preço", - "Tax": "Imposto", - "yellow": "amarelo", - "Screen": "Ecrã", - "Name": "Nome", - "red": "vermelho", - "sky": "céu", - "Full": "Completo", - "Other": "Outros", + "Default": "Padrão", + "Company Profile": "Perfil da empresa", + "Invoice": "Fatura", "Localization": "Localização", - "Items": "Itens", - "blue": "azul", - "Nonprofit": "Sem fins lucrativos", - "Content": "Conteúdo", - "Code": "Código", + "Discount": "Desconto", + "Tax": "Imposto", + "Accounting": "Contabilidade", + "Banking": "Serviços bancários", + "Account": "Conta", + "Department": "Departamento", "Services": "Serviços", - "Amount": "Quantia", - "Products": "Produtos", - "Modern": "Moderno", - "Quantity": "Quantidade", - "lime": "cal", - "stone": "pedra", + "Connected Accounts": "Contas conectadas", + "Live Currency": "Moeda ao vivo", + "Primary color": "Cor primária", + "amber": "âmbar", + "blue": "azul", "cyan": "ciano", - "Ascending": "Ascendente", - "Header": "cabeçalho", - "Net 30": "Rede 30", - "Descending": "Descendente", - "Logo": "Logotipo", - "Language": "Idioma", - "Large": "Grande", - "Account": "Conta", - "Entity Type": "Tipo de entidade", - "Extra Large": "Extra grande", - "Hours": "Horas", - "Invoice": "Fatura", - "Timezone": "Fuso horário", - "Company Profile": "Perfil da empresa", - "Sales Tax": "Imposto sobre vendas", - "Currency": "Moeda", - "Layout": "Layout", - "Accounting": "Contabilidade", - "Corporation": "Corporação", - "Default": "Padrão", - "violet": "violeta", - "green": "verde", + "emerald": "esmeralda", "fuchsia": "fúcsia", "gray": "cinzento", - "Street Address": "Endereço da rua", - "teal": "azul-petróleo", - "Tax ID": "Identificação fiscal", - "Template": "Modelo", - "Percent Position": "Posição percentual", - "Max Content Width": "Largura máxima do conteúdo", - "3X Large": "3X Grande", - "Banking": "Serviços bancários", + "green": "verde", + "indigo": "índigo", + "lime": "cal", + "neutral": "neutro", + "orange": "laranja", "pink": "rosa", - "Classic": "clássico", - "Identification": "Identificação", - "Time Format": "Formato de hora", - "Select Position": "Selecionar posição", - "Records Per Page": "Registros por página", - "Subheader": "Sub-cabeçalho", - "Unit Name": "Nome da unidade", - "Net 7": "Rede 7", - "Net 10": "Rede 10", - "Week Start": "Início da semana", - "Taxes & Discounts": "Impostos e descontos", - "Purchase Tax": "Imposto de compra", - "Sales Discount": "Desconto de vendas", - "Purchase Discount": "Desconto na compra", - "amber": "âmbar", - "Top Navigation": "Navegação superior", - "Striped Tables": "Mesas listradas", + "purple": "roxo", + "red": "vermelho", + "rose": "rose", + "sky": "céu", + "slate": "ardósia", + "stone": "pedra", + "teal": "azul-petróleo", + "violet": "violeta", + "yellow": "amarelo", + "zinc": "zinco", + "Font": "Fonte", "Enabled": "Ativado", "Disabled": "Desativado", - "Table Sort Direction": "Direção de classificação da tabela", - "6X Large": "6X Grande", - "Screen Large": "Tela grande", - "Extra Small": "Extra pequeno", + "Identification": "Identificação", + "Email": "E-mail", + "Phone number": "Número de telefone", + "Logo": "Logotipo", "Location Details": "Detalhes da localização", + "Country": "País", + "State \/ Province": "Estado\/ Província", + "Street Address": "Endereço da rua", "City \/ Town": "Cidade\/Cidade", "Zip \/ Postal Code": "CEP\/Código postal", "Legal & Compliance": "Legal e conformidade", + "Entity type": "Tipo de entidade", + "Tax ID": "Identificação fiscal", "Sole Proprietorship": "Propriedade individual", + "General Partnership": "Parceria geral", + "Limited Partnership (LP)": "Parceria Limitada (LP)", "Limited Liability Partnership (LLP)": "Parceria de Responsabilidade Limitada (LLP)", - "Number Prefix": "Prefixo numérico", - "Number Next": "Número seguinte", - "Footer \/ Notes": "Rodapé\/\/Notas", - "Show Logo": "Mostrar logotipo", - "Price Name": "Nome do preço", + "Limited Liability Company (LLC)": "Companhia de Responsabilidade Limitada (LLC)", + "Corporation": "Corporação", + "Nonprofit": "Sem fins lucrativos", + "Number prefix": "Prefixo numérico", + "Number digits": "Dígitos numéricos", + "Number next": "Número seguinte", + "Payment terms": "Condições de pagamento", + "Content": "Conteúdo", + "Header": "cabeçalho", + "Subheader": "Sub-cabeçalho", + "Footer \/ notes": "Rodapé\/\/Notas", + "Template": "Modelo", + "Show logo": "Mostrar logotipo", + "Accent color": "Cor de destaque", + "Item name": "Nome do item", + "Items": "Itens", + "Products": "Produtos", + "Other": "Outros", + "Unit name": "Nome da unidade", + "Quantity": "Quantidade", + "Hours": "Horas", + "Price name": "Nome do preço", + "Price": "Preço", + "Rate": "Tarifa", + "Amount name": "Nome do valor", + "Amount": "Quantia", + "Total": "Total", "Due Upon Receipt": "Vencido após o recebimento", + "Net 7": "Rede 7", + "Net 10": "Rede 10", + "Net 15": "Rede 15", + "Net 30": "Rede 30", "Net 60": "Rede 60", - "Date Format": "Formato de data", - "Before Number": "Antes do número", - "Number Format": "Formato numérico", - "Bank Account": "Conta bancária", - "Screen 2X Large": "Tela 2X Grande", - "Limited Liability Company (LLC)": "Companhia de Responsabilidade Limitada (LLC)", - "Accent Color": "Cor de destaque", - "Amount Name": "Nome do valor", - "emerald": "esmeralda", - "Side Navigation": "Navegação lateral", - "7X Large": "7X Grande", - "2X Large": "2X Grande", - "Item Name": "Nome do item", "Net 90": "Rede 90", - "Live Currency": "Moeda ao vivo", - "Number Digits": "Dígitos numéricos", - "4X Large": "4X Grande", - "Screen Extra Large": "Tela extra grande", - "Primary Color": "Cor primária", - "Modal Width": "Largura modal", - "General Partnership": "Parceria geral", - "Limited Partnership (LP)": "Parceria Limitada (LP)", - "After Number": "Depois do número", - "Small": "Pequeno", - "Payment Terms": "Condições de pagamento", - "Net 15": "Rede 15", + "Modern": "Moderno", + "Classic": "clássico", + "Language": "Idioma", + "Timezone": "Fuso horário", + "Date & Time": "Data e hora", + "Date format": "Formato de data", + "Time format": "Formato de hora", + "Week start": "Início da semana", + "Before number": "Antes do número", + "After number": "Depois do número", + "Select position": "Selecionar posição", "Financial & Fiscal": "Financeiro e fiscal", - "Connected Accounts": "Contas conectadas", - "Navigation Layout": "Layout de navegação", - "5X Large": "5X Grande", - "Country": "País", - "Data Presentation": "Apresentação de dados", + "Number format": "Formato numérico", + "Percent position": "Posição percentual", + "Name": "Nome", + "Code": "Código", "Symbol": "Símbolo", - "Default :Record": "Padrão :Record", + "Default :record": "Padrão :record", "Type": "Tipo", - "Start Date": "Data de início", - "End Date": "Data de término", + "Start date": "Data de início", + "End date": "Data de término", "Sales": "Vendas", - "Default :Type :Record": "Padrão :Type :Record", + "Default :type :record": "Padrão :type :record", "Purchase": "Compra", "Precision": "Precisão", - "Symbol Position": "Posição do símbolo", - "Before Amount": "Antes do valor", - "After Amount": "Após o valor", + "Symbol position": "Posição do símbolo", + "Before amount": "Antes do valor", + "After amount": "Após o valor", "Select a symbol position": "Selecione a posição de um símbolo", - "Decimal Separator": "Separador decimal", - "Thousands Separator": "Separador de milhares", + "Decimal separator": "Separador decimal", + "Thousands separator": "Separador de milhares", "Yes": "sim", "No": "Não", "Description": "Descrição", @@ -168,29 +140,29 @@ "Product": "Produto", "Service": "Serviço", "Compound": "Composto", - "Current Balance": "Saldo atual", + "Current balance": "Saldo atual", "Account Information": "Informações da conta", "Subtype": "Subtipo", - "Account Number": "Número da conta", + "Account number": "Número da conta", "Investment": "Investimento", "Credit": "Crédito", + "Depository": "Depositário", "Loan": "Empréstimo", "Manager": "Gestor", "Children": "Crianças", - "Main": "Principal", - "Depository": "Depositário", "All": "Todos", - "Entity": "Entidade", - "Available": "Disponível", - "Parent Department": "Departamento de pais", + "Main": "Principal", + "Parent department": "Departamento de pais", "Currency List": "Lista de moedas", - "Live Rate": "Tarifa ao vivo", "Company Currencies": "Moedas da empresa", + "Entity": "Entidade", + "Available": "Disponível", + "Live rate": "Tarifa ao vivo", "Edit": "Editar", "Notes": "Notas", "Terms": "Termos", - "Ending Balance": "Saldo Final", - "Default :Type :Category": "Padrão :Tipo :Categoria", + "Ending balance": "Saldo Final", + "Default :type :category": "Padrão :type :category", "Category": "Categoria", "Configuration": "Configuração", "Dates": "Datas", @@ -216,5 +188,10 @@ "Create": "Criar", "Estimate Header": "Cabeçalho do Orçamento", "Estimate Details": "Detalhes do Orçamento", - "Estimate Footer": "Rodapé do Orçamento" + "Estimate Footer": "Rodapé do Orçamento", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/tr.json b/resources/data/lang/tr.json index 6cccf8d9..4200fb18 100644 --- a/resources/data/lang/tr.json +++ b/resources/data/lang/tr.json @@ -1,189 +1,197 @@ { "General": "General", - "violet": "menekşe", - "slate": "arduvaz", - "yellow": "sarı", - "stone": "taş", - "Layout": "Düzen", - "Large": "Büyük", - "teal": "deniz mavisi", - "Banking": "Bankacılık", - "green": "yeşil", - "Ascending": "Yükselen", - "Department": "Departman", - "blue": "mavi", - "red": "kırmızı", - "Descending": "Azalan", - "State \/ Province": "Eyalet\/İl", - "Price": "FİYAT", - "Classic": "Klasik", - "Invoice": "Fatura", - "Screen": "Ekranı", - "Phone Number": "Telefon Numarası", - "Total": "Toplam", - "rose": "gül", - "Font": "Yazı Tipi", - "Amount": "Miktar", - "End Date": "Bitiş Tarihi", - "Header": "Başlık", - "Account": "Hesap", - "pink": "pembe", - "zinc": "çinko", - "Full": "Dolu", - "Medium": "Orta", - "Country": "Ülke", - "Corporation": "şirket", - "Template": "Şablon", - "Products": "Ürünlerimiz", - "Modern": "Çağdaş", - "Timezone": "Saat dilimi", - "Yes": "Evet", - "Computation": "Hesaplama", - "Percentage": "Yüzde", - "Product": "Ürün", - "Sales Tax": "Satış Vergisi", + "Bank account": "Banka Hesabı", + "Currency": "Para Birimi", + "Taxes & Discounts": "Vergiler ve İndirimler", + "Sales tax": "Satış Vergisi", + "Purchase tax": "Satın Alma Vergisi", + "Sales discount": "Satış İndirimi", + "Purchase discount": "Satın Alma İndirimi", "Appearance": "Görünüm", "Default": "Varsayılan", + "Company Profile": "Firma Profili", + "Invoice": "Fatura", "Localization": "Yerelleştirme", "Discount": "İndirim", + "Tax": "Vergi", + "Accounting": "Muhasebe", + "Banking": "Bankacılık", + "Account": "Hesap", + "Department": "Departman", + "Services": "HİZMETLER", + "Connected Accounts": "Bağlı Hesaplar", + "Live Currency": "Canlı Para Birimi", + "Primary color": "Ana Renk", "amber": "kehribar", + "blue": "mavi", + "cyan": "camgöbeği", "emerald": "zümrüt", + "fuchsia": "fuşya", + "gray": "gri", + "green": "yeşil", + "indigo": "çivit", "lime": "kireç", "neutral": "nötr", + "orange": "turuncu", + "pink": "pembe", "purple": "mor", + "red": "kırmızı", + "rose": "gül", + "sky": "gökyüzü", + "slate": "arduvaz", + "stone": "taş", + "teal": "deniz mavisi", + "violet": "menekşe", + "yellow": "sarı", + "zinc": "çinko", + "Font": "Yazı Tipi", "Enabled": "Etkin", - "Extra Large": "Ekstra Büyük", + "Disabled": "Engelli", + "Identification": "Tanımlama", "Email": "E-posta", + "Phone number": "Telefon Numarası", "Logo": "Logo", + "Location Details": "Konum Ayrıntıları", + "Country": "Ülke", + "State \/ Province": "Eyalet\/İl", + "Street Address": "Sokak Adresi", + "City \/ Town": "Şehir\/Kasaba", + "Zip \/ Postal Code": "Posta Kodu\/Posta Kodu", + "Legal & Compliance": "Yasal ve Uyum", + "Entity type": "Varlık Türü", "Tax ID": "Vergi Kimliği", - "Payment Terms": "Ödeme Koşulları", + "Sole Proprietorship": "Tek mülkiyet", + "General Partnership": "Genel Ortaklık", + "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)", + "Limited Liability Partnership (LLP)": "Sınırlı Sorumluluk Ortaklığı (LLP)", + "Limited Liability Company (LLC)": "Sınırlı Sorumluluk Şirketi (LLC)", + "Corporation": "şirket", + "Nonprofit": "kar amacı gütmeyen", + "Number prefix": "Numara Öneki", + "Number digits": "Sayı Rakamları", + "Number next": "Sonraki numara", + "Payment terms": "Ödeme Koşulları", "Content": "İçerik", + "Header": "Başlık", + "Subheader": "Alt başlık", + "Footer \/ notes": "Altbilgi\/Notlar", + "Template": "Şablon", + "Show logo": "Logoyu Göster", + "Accent color": "Vurgu Rengi", + "Item name": "Öğe Adı", "Items": "Öğeler", + "Products": "Ürünlerimiz", "Other": "Diğer", + "Unit name": "Birim Adı", "Quantity": "Miktar", "Hours": "Saatler", + "Price name": "Fiyat Adı", + "Price": "FİYAT", + "Rate": "Oranı", + "Amount name": "Miktar Adı", + "Amount": "Miktar", + "Total": "Toplam", + "Due Upon Receipt": "Alındıktan Sonra Ödenecek", + "Net 7": "Net 7", + "Net 10": "Net 10", + "Net 15": "Net 15", + "Net 30": "Net 30", + "Net 60": "Net 60", + "Net 90": "Net 90", + "Modern": "Çağdaş", + "Classic": "Klasik", "Language": "Dil", + "Timezone": "Saat dilimi", + "Date & Time": "Tarih ve Saat", + "Date format": "Tarih Biçimi", + "Time format": "Zaman Biçimi", + "Week start": "Hafta Başlangıcı", + "Before number": "Numaradan Önce", + "After number": "Numaradan Sonra", + "Select position": "Pozisyon Seçiniz", + "Financial & Fiscal": "Finansal ve Mali", + "Number format": "Sayı Biçimi", + "Percent position": "Yüzde Pozisyonu", "Name": "İsim", "Code": "Kod", "Symbol": "Sembol", + "Default :record": "Varsayılan :record", "Type": "Tür", + "Start date": "Başlangıç Tarihi", + "End date": "Bitiş Tarihi", "Sales": "Satışlar", + "Default :type :record": "Varsayılan :type :record", + "Purchase": "Satın alma", "Precision": "Hassasiyet", + "Symbol position": "Sembol Konumu", + "Before amount": "Miktardan Önce", + "After amount": "Miktardan Sonra", + "Select a symbol position": "Bir sembol konumu seçin", + "Decimal separator": "Ondalık Ayırıcı", + "Thousands separator": "Binlerce Ayırıcı", + "Yes": "Evet", + "No": "Hayır", "Description": "Açıklama", + "Computation": "Hesaplama", + "Scope": "Kapsam", + "Percentage": "Yüzde", "Fixed": "Sabit", "None": "Yok", - "Currency": "Para Birimi", - "Services": "HİZMETLER", - "gray": "gri", - "sky": "gökyüzü", - "No": "Hayır", - "Live Currency": "Canlı Para Birimi", - "cyan": "camgöbeği", - "Net 7": "Net 7", - "orange": "turuncu", + "Product": "Ürün", "Service": "Hizmet", - "Tax": "Vergi", - "fuchsia": "fuşya", - "indigo": "çivit", - "5X Large": "5X Büyük", - "Small": "Küçük", - "Unit Name": "Birim Adı", - "Net 10": "Net 10", - "Sales Discount": "Satış İndirimi", - "Decimal Separator": "Ondalık Ayırıcı", - "General Partnership": "Genel Ortaklık", - "Taxes & Discounts": "Vergiler ve İndirimler", - "Records Per Page": "Sayfa Başına Kayıtlar", - "Item Name": "Öğe Adı", - "Connected Accounts": "Bağlı Hesaplar", - "Primary Color": "Ana Renk", - "Entity Type": "Varlık Türü", - "Number Next": "Sonraki numara", - "Amount Name": "Miktar Adı", - "Striped Tables": "Çizgili Tablolar", - "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)", - "Show Logo": "Logoyu Göster", - "Week Start": "Hafta Başlangıcı", - "After Amount": "Miktardan Sonra", - "Bank Account": "Banka Hesabı", - "Top Navigation": "Üst Navigasyon", - "Default :Type :Record": "Varsayılan :Type :Record", - "Disabled": "Engelli", - "Number Prefix": "Numara Öneki", - "Limited Liability Partnership (LLP)": "Sınırlı Sorumluluk Ortaklığı (LLP)", - "Street Address": "Sokak Adresi", - "Legal & Compliance": "Yasal ve Uyum", - "Scope": "Kapsam", - "Nonprofit": "kar amacı gütmeyen", - "Identification": "Tanımlama", - "After Number": "Numaradan Sonra", - "Purchase": "Satın alma", - "Price Name": "Fiyat Adı", - "Accent Color": "Vurgu Rengi", - "Net 15": "Net 15", - "Time Format": "Zaman Biçimi", - "Select Position": "Pozisyon Seçiniz", - "Date & Time": "Tarih ve Saat", - "Navigation Layout": "Navigasyon Düzeni", - "Accounting": "Muhasebe", - "4X Large": "4X Büyük", - "Table Sort Direction": "Tablo Sıralama Yönü", - "Screen 2X Large": "Ekran 2X Büyük", - "2X Large": "2X Büyük", - "Symbol Position": "Sembol Konumu", - "6X Large": "6X Büyük", - "Side Navigation": "Yan Navigasyon", - "Net 60": "Net 60", - "Start Date": "Başlangıç Tarihi", - "Before Number": "Numaradan Önce", - "Company Profile": "Firma Profili", - "Data Presentation": "Veri Sunumu", - "7X Large": "7X Büyük", - "City \/ Town": "Şehir\/Kasaba", - "Net 90": "Net 90", - "Footer \/ Notes": "Altbilgi\/Notlar", - "Purchase Tax": "Satın Alma Vergisi", - "Zip \/ Postal Code": "Posta Kodu\/Posta Kodu", - "Percent Position": "Yüzde Pozisyonu", - "Screen Large": "Geniş Ekran", - "Thousands Separator": "Binlerce Ayırıcı", - "Subheader": "Alt başlık", - "Net 30": "Net 30", - "Default :Record": "Varsayılan :Record", - "Max Content Width": "Maksimum İçerik Genişliği", - "Limited Liability Company (LLC)": "Sınırlı Sorumluluk Şirketi (LLC)", - "Location Details": "Konum Ayrıntıları", - "Purchase Discount": "Satın Alma İndirimi", - "Select a symbol position": "Bir sembol konumu seçin", "Compound": "Bileşik", - "Rate": "Oranı", - "3X Large": "3X Büyük", - "Number Digits": "Sayı Rakamları", - "Date Format": "Tarih Biçimi", - "Screen Extra Large": "Ekstra Büyük Ekran", - "Extra Small": "Ekstra Küçük", - "Due Upon Receipt": "Alındıktan Sonra Ödenecek", - "Number Format": "Sayı Biçimi", - "Before Amount": "Miktardan Önce", - "Sole Proprietorship": "Tek mülkiyet", - "Modal Width": "Modal Genişliği", - "Financial & Fiscal": "Finansal ve Mali", - "Account Number": "Hesap Numarası", - "Manager": "yönetici", - "Subtype": "Alt Tür", - "Credit": "Kredi", - "All": "Hepsi", - "Loan": "Kredi", + "Current balance": "Mevcut Bakiye", "Account Information": "Hesap Bilgileri", + "Subtype": "Alt Tür", + "Account number": "Hesap Numarası", "Investment": "Yatırım", + "Credit": "Kredi", "Depository": "Depozito", - "Main": "Ana", - "Entity": "Varlık", - "Current Balance": "Mevcut Bakiye", - "Available": "Mevcut", + "Loan": "Kredi", + "Manager": "yönetici", "Children": "Çocuklar", + "All": "Hepsi", + "Main": "Ana", + "Parent department": "Ebeveyn Bölümü", "Currency List": "Para Birimi Listesi", "Company Currencies": "Şirket Para Birimleri", - "Parent Department": "Ebeveyn Bölümü", - "Live Rate": "Canlı Oran" + "Entity": "Varlık", + "Available": "Mevcut", + "Live rate": "Canlı Oran", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/data/lang/zh.json b/resources/data/lang/zh.json index 13fabb1b..67b0db2e 100644 --- a/resources/data/lang/zh.json +++ b/resources/data/lang/zh.json @@ -1,161 +1,134 @@ { "General": "普通的", - "slate": "石板", - "lime": "石灰", - "Layout": "布局", - "purple": "紫色", - "Small": "小", - "Tax ID": "税号", - "Corporation": "公司", - "amber": "琥珀色", - "yellow": "黄色", - "Enabled": "已启用", - "Language": "语言", - "gray": "灰色", - "Email": "电子邮件", - "Full": "已满", - "Products": "产品", - "Phone Number": "电话号码", - "Header": "标题", - "Discount": "折扣", - "sky": "天空", - "Content": "内容", - "Template": "模板", - "Other": "其他", - "Rate": "费率", + "Bank account": "银行账户", + "Currency": "货币", + "Taxes & Discounts": "税收和折扣", + "Sales tax": "销售税", + "Purchase tax": "购置税", + "Sales discount": "销售折扣", + "Purchase discount": "购买折扣", + "Appearance": "外观", + "Default": "默认", + "Company Profile": "公司简介", + "Invoice": "发票", "Localization": "本地化", - "Large": "大号", - "Items": "物品", - "Quantity": "数量", - "Medium": "中等", - "Screen": "屏幕", - "Department": "部门", - "State \/ Province": "州\/省", + "Discount": "折扣", + "Tax": "税", "Accounting": "会计", - "violet": "紫色", - "Amount": "金额", - "teal": "蓝绿色", - "Country": "国家", - "Total": "总计", - "Classic": "经典", - "orange": "橙色", - "rose": "玫瑰", - "Extra Large": "超大号", - "Ascending": "上升", - "Price": "价格", - "Modern": "现代", "Banking": "银行业", + "Account": "账户", + "Department": "部门", + "Services": "服务", + "Connected Accounts": "关联账户", + "Live Currency": "实时货币", + "Primary color": "原色", + "amber": "琥珀色", + "blue": "蓝色", + "cyan": "青色", "emerald": "翡翠", - "Descending": "降序", - "Timezone": "时区", - "Tax": "税", - "Currency": "货币", - "Sales Tax": "销售税", - "Default": "默认", + "fuchsia": "紫红色", + "gray": "灰色", + "green": "绿色", + "indigo": "靛青", + "lime": "石灰", "neutral": "中立", + "orange": "橙色", + "pink": "粉色", + "purple": "紫色", "red": "红色", + "rose": "玫瑰", + "sky": "天空", + "slate": "石板", "stone": "石头", - "Appearance": "外观", - "cyan": "青色", - "green": "绿色", - "Invoice": "发票", - "Name": "姓名", - "blue": "蓝色", + "teal": "蓝绿色", + "violet": "紫色", + "yellow": "黄色", "zinc": "锌", "Font": "字体", - "Account": "账户", - "pink": "粉色", - "indigo": "靛青", - "Services": "服务", + "Enabled": "已启用", + "Disabled": "已禁用", + "Identification": "身份识别", + "Email": "电子邮件", + "Phone number": "电话号码", "Logo": "徽标", - "6X Large": "6X 大号", - "Unit Name": "单位名称", - "Hours": "小时", - "Net 60": "净值 60", - "Date Format": "日期格式", - "Sales Discount": "销售折扣", - "Purchase Discount": "购买折扣", - "Data Presentation": "数据演示", - "Payment Terms": "付款条款", - "Records Per Page": "每页记录数", - "Subheader": "副标题", - "Purchase Tax": "购置税", "Location Details": "位置详情", - "Price Name": "价格名称", - "Bank Account": "银行账户", - "3X Large": "3X 大号", - "Modal Width": "模态宽度", - "Disabled": "已禁用", - "7X Large": "7X 大号", + "Country": "国家", + "State \/ Province": "州\/省", + "Street Address": "街道地址", + "City \/ Town": "城市\/城镇", + "Zip \/ Postal Code": "邮政编码\/邮政编码", "Legal & Compliance": "法律与合规", - "Number Digits": "数字数字", - "Accent Color": "口音颜色", - "Financial & Fiscal": "金融与财政", - "Number Next": "下一个数字", - "Net 30": "Net 30", - "Time Format": "时间格式", - "Top Navigation": "热门导航", + "Entity type": "实体类型", + "Tax ID": "税号", + "Sole Proprietorship": "独资经营", "General Partnership": "普通合伙企业", - "Live Currency": "实时货币", - "Table Sort Direction": "表格排序方向", - "4X Large": "4X 大号", - "Screen Large": "屏幕大", - "2X Large": "2X 大号", - "Striped Tables": "条纹桌子", - "Zip \/ Postal Code": "邮政编码\/邮政编码", - "Primary Color": "原色", - "Select Position": "选择位置", - "Identification": "身份识别", - "Navigation Layout": "导航布局", - "Side Navigation": "侧面导航", - "Due Upon Receipt": "收货时到期", - "fuchsia": "紫红色", + "Limited Partnership (LP)": "有限合伙企业 (LP)", "Limited Liability Partnership (LLP)": "有限责任合伙企业 (LLP)", + "Limited Liability Company (LLC)": "有限责任公司(LLC)", + "Corporation": "公司", "Nonprofit": "非营利", - "Entity Type": "实体类型", - "Before Number": "在数字之前", - "Number Format": "数字格式", - "Extra Small": "超小", + "Number prefix": "数字前缀", + "Number digits": "数字数字", + "Number next": "下一个数字", + "Payment terms": "付款条款", + "Content": "内容", + "Header": "标题", + "Subheader": "副标题", + "Footer \/ notes": "页脚\/备注", + "Template": "模板", + "Show logo": "显示徽标", + "Accent color": "口音颜色", + "Item name": "物品名称", + "Items": "物品", + "Products": "产品", + "Other": "其他", + "Unit name": "单位名称", + "Quantity": "数量", + "Hours": "小时", + "Price name": "价格名称", + "Price": "价格", + "Rate": "费率", + "Amount name": "金额名称", + "Amount": "金额", + "Total": "总计", + "Due Upon Receipt": "收货时到期", "Net 7": "Net 7", - "After Number": "在数字之后", - "Taxes & Discounts": "税收和折扣", - "City \/ Town": "城市\/城镇", - "Limited Liability Company (LLC)": "有限责任公司(LLC)", - "Week Start": "本周开始", - "Number Prefix": "数字前缀", - "Show Logo": "显示徽标", - "Company Profile": "公司简介", - "Screen 2X Large": "屏幕 2X 大", - "Street Address": "街道地址", - "Footer \/ Notes": "页脚\/备注", - "Limited Partnership (LP)": "有限合伙企业 (LP)", - "Sole Proprietorship": "独资经营", - "5X Large": "5X 大号", - "Item Name": "物品名称", - "Date & Time": "日期和时间", - "Net 15": "Net 15", - "Amount Name": "金额名称", - "Percent Position": "百分比位置", "Net 10": "Net 10", - "Connected Accounts": "关联账户", - "Max Content Width": "最大内容宽度", - "Screen Extra Large": "屏幕超大", + "Net 15": "Net 15", + "Net 30": "Net 30", + "Net 60": "净值 60", "Net 90": "净值 90", + "Modern": "现代", + "Classic": "经典", + "Language": "语言", + "Timezone": "时区", + "Date & Time": "日期和时间", + "Date format": "日期格式", + "Time format": "时间格式", + "Week start": "本周开始", + "Before number": "在数字之前", + "After number": "在数字之后", + "Select position": "选择位置", + "Financial & Fiscal": "金融与财政", + "Number format": "数字格式", + "Percent position": "百分比位置", + "Name": "姓名", "Code": "代码", "Symbol": "符号", + "Default :record": "默认 :record", "Type": "类型", - "Start Date": "开始日期", - "Default :Record": "默认 :Record", - "End Date": "结束日期", + "Start date": "开始日期", + "End date": "结束日期", "Sales": "销售", - "Default :Type :Record": "默认 :Type :Record", + "Default :type :record": "默认 :type :record", "Purchase": "购买", "Precision": "精度", - "Symbol Position": "符号位置", - "Before Amount": "金额之前", - "After Amount": "扣除金额后", + "Symbol position": "符号位置", + "Before amount": "金额之前", + "After amount": "扣除金额后", "Select a symbol position": "选择符号位置", - "Decimal Separator": "小数分隔符", + "Decimal separator": "小数分隔符", + "Thousands separator": "千位分隔符", "Yes": "是的", "No": "没有", "Description": "描述", @@ -167,23 +140,58 @@ "Product": "产品", "Service": "服务", "Compound": "化合物", - "Subtype": "子类型", - "Account Number": "账号", - "Thousands Separator": "千位分隔符", + "Current balance": "当前余额", "Account Information": "账户信息", + "Subtype": "子类型", + "Account number": "账号", "Investment": "投资", "Credit": "信用", + "Depository": "存放处", + "Loan": "贷款", "Manager": "经理", "Children": "孩子们", "All": "全部", - "Available": "可用", "Main": "主要", - "Entity": "实体", - "Loan": "贷款", - "Depository": "存放处", - "Parent Department": "家长部", + "Parent department": "家长部", "Currency List": "货币清单", "Company Currencies": "公司货币", - "Live Rate": "实时汇率", - "Current Balance": "当前余额" + "Entity": "实体", + "Available": "可用", + "Live rate": "实时汇率", + "Edit": "Edit", + "Notes": "Notes", + "Terms": "Terms", + "Ending balance": "Ending balance", + "Default :type :category": "Default :type :category", + "Category": "Category", + "Configuration": "Configuration", + "Dates": "Dates", + "Adjustment Details": "Adjustment Details", + "Adjustments": "Adjustments", + "Sellable Configuration": "Sellable Configuration", + "Purchasable Configuration": "Purchasable Configuration", + "Sale Information": "Sale Information", + "Purchase Information": "Purchase Information", + "Billing": "Billing", + "Shipping": "Shipping", + "General Information": "General Information", + "Primary Contact": "Primary Contact", + "Billing Address": "Billing Address", + "Shipping Address": "Shipping Address", + "Secondary Contacts": "Secondary Contacts", + "Address Information": "Address Information", + "Invoice Header": "Invoice Header", + "Invoice Details": "Invoice Details", + "Footer": "Footer", + "Invoice Footer": "Invoice Footer", + "Bill Details": "Bill Details", + "Create": "Create", + "Estimate Header": "Estimate Header", + "Estimate Details": "Estimate Details", + "Estimate Footer": "Estimate Footer", + "Scheduling": "Scheduling", + "Scheduling Form": "Scheduling Form", + "Approve": "Approve", + "Frequency": "Frequency", + "Dates & Time": "Dates & Time" } \ No newline at end of file diff --git a/resources/views/components/company/reports/layout.blade.php b/resources/views/components/company/reports/layout.blade.php index 30ce9a46..91754d4f 100644 --- a/resources/views/components/company/reports/layout.blade.php +++ b/resources/views/components/company/reports/layout.blade.php @@ -50,7 +50,7 @@ .table-class { border-collapse: collapse; - table-layout: fixed; + table-layout: auto; width: 100%; } diff --git a/resources/views/components/company/reports/report-pdf.blade.php b/resources/views/components/company/reports/report-pdf.blade.php index d0e05eb5..15714b0e 100644 --- a/resources/views/components/company/reports/report-pdf.blade.php +++ b/resources/views/components/company/reports/report-pdf.blade.php @@ -22,13 +22,15 @@ @foreach($report->getCategories() as $category) - - @foreach($category->header as $index => $header) - - {{ $header }} - - @endforeach - + @if(! empty($category->header)) + + @foreach($category->header as $index => $header) + + {{ $header }} + + @endforeach + + @endif @foreach($category->data as $account) @foreach($account as $index => $cell) @@ -97,19 +99,21 @@ @endforeach - - @foreach($category->summary as $index => $cell) - - {{ $cell }} - - @endforeach - - - @unless($loop->last && empty($report->getOverallTotals())) - - + @if(! empty($category->summary)) + + @foreach($category->summary as $index => $cell) + + {{ $cell }} + + @endforeach - @endunless + + @unless($loop->last && empty($report->getOverallTotals())) + + + + @endunless + @endif @endforeach diff --git a/resources/views/components/company/tables/header.blade.php b/resources/views/components/company/tables/header.blade.php index 4478ff78..b4f0fd4b 100644 --- a/resources/views/components/company/tables/header.blade.php +++ b/resources/views/components/company/tables/header.blade.php @@ -3,7 +3,7 @@ 'alignmentClass', ]) - + @foreach($headers as $headerIndex => $headerCell) diff --git a/resources/views/components/company/tables/reports/detailed-report.blade.php b/resources/views/components/company/tables/reports/detailed-report.blade.php index 4fceed5a..5f120cdc 100644 --- a/resources/views/components/company/tables/reports/detailed-report.blade.php +++ b/resources/views/components/company/tables/reports/detailed-report.blade.php @@ -2,8 +2,10 @@ @foreach($report->getCategories() as $accountCategory) - + @if(! empty($accountCategory->header)) + + @endif @foreach($accountCategory->data as $categoryAccount) @foreach($categoryAccount as $accountIndex => $categoryAccountCell) @@ -48,19 +50,21 @@ @endforeach @endforeach - - @foreach($accountCategory->summary as $accountCategorySummaryIndex => $accountCategorySummaryCell) - - {{ $accountCategorySummaryCell }} - - @endforeach - - - -
- - + @if(! empty($accountCategory->summary)) + + @foreach($accountCategory->summary as $accountCategorySummaryIndex => $accountCategorySummaryCell) + + {{ $accountCategorySummaryCell }} + + @endforeach + + + +
+ + + @endif @endforeach diff --git a/resources/views/components/report-entry.blade.php b/resources/views/components/report-entry.blade.php index 156928cd..a6dfd866 100644 --- a/resources/views/components/report-entry.blade.php +++ b/resources/views/components/report-entry.blade.php @@ -10,14 +10,14 @@ @class([ 'inline-flex rounded-lg p-3 ring-4 ring-white dark:ring-gray-900', match ($iconColor) { - 'gray' => 'fi-color-gray bg-gray-50 text-gray-700 dark:bg-gray-900 dark:text-gray-500', - default => 'fi-color-custom bg-custom-50 text-custom-700 dark:bg-custom-950 dark:text-custom-500', + 'gray' => 'fi-color-gray bg-gray-50 text-gray-700 dark:bg-gray-950 dark:text-gray-300', + default => 'fi-color-custom bg-custom-50 text-custom-700 dark:bg-custom-950 dark:text-custom-300', }, ]) @style([ \Filament\Support\get_color_css_variables( $iconColor, - shades: [50, 500, 700, 950], + shades: [50, 300, 700, 950], ) => $iconColor !== 'gray', ]) > diff --git a/resources/views/livewire/company/service/connected-account/list-institutions.blade.php b/resources/views/livewire/company/service/connected-account/list-institutions.blade.php index 6c18c4cd..3c918090 100644 --- a/resources/views/livewire/company/service/connected-account/list-institutions.blade.php +++ b/resources/views/livewire/company/service/connected-account/list-institutions.blade.php @@ -84,7 +84,7 @@ class="connected-account-empty-state-icon h-6 w-6 text-gray-500 dark:text-gray-4 />