소스 검색

Merge pull request #101 from andrewdwallo/development-3.x

Development 3.x
3.x
Andrew Wallo 8 달 전
부모
커밋
b183b8ca87
No account linked to committer's email address
83개의 변경된 파일3221개의 추가작업 그리고 2553개의 파일을 삭제
  1. 10
    6
      README.md
  2. 2
    2
      app/Concerns/NotifiesOnDelete.php
  3. 8
    0
      app/Contracts/MoneyFormattableDTO.php
  4. 14
    1
      app/DTO/AccountBalanceDTO.php
  5. 38
    0
      app/DTO/AgingBucketDTO.php
  6. 12
    0
      app/DTO/ClientReportDTO.php
  7. 12
    0
      app/DTO/EntityReportDTO.php
  8. 1
    0
      app/DTO/ReportDTO.php
  9. 12
    0
      app/DTO/VendorReportDTO.php
  10. 24
    0
      app/Enums/Accounting/DocumentEntityType.php
  11. 0
    23
      app/Enums/Setting/RecordsPerPage.php
  12. 0
    18
      app/Enums/Setting/TableSortDirection.php
  13. 3
    3
      app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php
  14. 5
    5
      app/Filament/Company/Clusters/Settings/Pages/Invoice.php
  15. 5
    5
      app/Filament/Company/Clusters/Settings/Pages/Localization.php
  16. 6
    6
      app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php
  17. 2
    2
      app/Filament/Company/Pages/Accounting/AccountChart.php
  18. 60
    58
      app/Filament/Company/Pages/Accounting/Transactions.php
  19. 1
    1
      app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php
  20. 2
    2
      app/Filament/Company/Pages/CreateCompany.php
  21. 48
    6
      app/Filament/Company/Pages/Reports.php
  22. 2
    2
      app/Filament/Company/Pages/Reports/AccountTransactions.php
  23. 13
    0
      app/Filament/Company/Pages/Reports/AccountsPayableAging.php
  24. 13
    0
      app/Filament/Company/Pages/Reports/AccountsReceivableAging.php
  25. 138
    0
      app/Filament/Company/Pages/Reports/BaseAgingReportPage.php
  26. 4
    4
      app/Filament/Company/Pages/Reports/BaseReportPage.php
  27. 1
    1
      app/Filament/Company/Pages/Reports/TrialBalance.php
  28. 1
    1
      app/Filament/Company/Pages/Service/ConnectedAccount.php
  29. 3
    3
      app/Filament/Company/Resources/Banking/AccountResource.php
  30. 6
    8
      app/Filament/Company/Resources/Common/OfferingResource.php
  31. 1
    1
      app/Filament/Company/Resources/Core/DepartmentResource.php
  32. 96
    94
      app/Filament/Company/Resources/Purchases/BillResource.php
  33. 8
    4
      app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php
  34. 3
    3
      app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php
  35. 14
    11
      app/Filament/Company/Resources/Purchases/VendorResource.php
  36. 34
    2
      app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php
  37. 14
    11
      app/Filament/Company/Resources/Sales/ClientResource.php
  38. 48
    6
      app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php
  39. 37
    35
      app/Filament/Company/Resources/Sales/EstimateResource.php
  40. 15
    11
      app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php
  41. 110
    108
      app/Filament/Company/Resources/Sales/InvoiceResource.php
  42. 1
    1
      app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php
  43. 12
    8
      app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php
  44. 2
    2
      app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php
  45. 12
    10
      app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php
  46. 16
    12
      app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php
  47. 3
    3
      app/Filament/Forms/Components/AddressFields.php
  48. 1
    1
      app/Filament/Forms/Components/CreateCurrencySelect.php
  49. 2
    2
      app/Filament/Forms/Components/DocumentTotals.php
  50. 7
    7
      app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php
  51. 6
    6
      app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php
  52. 11
    11
      app/Models/Accounting/Estimate.php
  53. 5
    5
      app/Models/Accounting/Invoice.php
  54. 9
    9
      app/Models/Accounting/RecurringInvoice.php
  55. 2
    2
      app/Providers/Filament/CompanyPanelProvider.php
  56. 1
    1
      app/Providers/TranslationServiceProvider.php
  57. 34
    0
      app/Services/AccountService.php
  58. 10
    8
      app/Services/ExportService.php
  59. 97
    17
      app/Services/ReportService.php
  60. 85
    0
      app/Transformers/AgingReportTransformer.php
  61. 1
    1
      bootstrap/providers.php
  62. 396
    318
      composer.lock
  63. 85
    85
      package-lock.json
  64. 4
    0
      resources/css/filament/company/theme.css
  65. 174
    166
      resources/data/lang/ar.json
  66. 144
    136
      resources/data/lang/de.json
  67. 46
    74
      resources/data/lang/en.json
  68. 119
    149
      resources/data/lang/es.json
  69. 153
    145
      resources/data/lang/fr.json
  70. 161
    153
      resources/data/lang/id.json
  71. 152
    144
      resources/data/lang/it.json
  72. 160
    152
      resources/data/lang/nl.json
  73. 120
    143
      resources/data/lang/pt.json
  74. 158
    150
      resources/data/lang/tr.json
  75. 149
    141
      resources/data/lang/zh.json
  76. 1
    1
      resources/views/components/company/reports/layout.blade.php
  77. 23
    19
      resources/views/components/company/reports/report-pdf.blade.php
  78. 1
    1
      resources/views/components/company/tables/header.blade.php
  79. 19
    15
      resources/views/components/company/tables/reports/detailed-report.blade.php
  80. 3
    3
      resources/views/components/report-entry.blade.php
  81. 2
    2
      resources/views/livewire/company/service/connected-account/list-institutions.blade.php
  82. 6
    6
      tests/Feature/Accounting/TransactionTest.php
  83. 2
    1
      vite.config.js

+ 10
- 6
README.md 파일 보기

@@ -15,7 +15,7 @@
15 15
 
16 16
 
17 17
 
18
-This repo is currently a work in progress — PRs and issues welcome!
18
+A Laravel and Filament-powered accounting platform, crafting a modern and automated solution for financial management.
19 19
 
20 20
 # Getting started
21 21
 
@@ -203,7 +203,8 @@ public static function getAllLanguages(): array
203 203
 
204 204
 ## Plaid Integration
205 205
 
206
-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:
206
+To integrate [Plaid](https://plaid.com/) with your application for enhanced financial data connectivity, you must first
207
+create an account with Plaid and obtain your credentials. Set your credentials in the `.env` file as follows:
207 208
 
208 209
 ```env
209 210
 PLAID_CLIENT_ID=your-client-id
@@ -212,9 +213,12 @@ PLAID_ENVIRONMENT=sandbox # Can be sandbox, development, or production
212 213
 PLAID_WEBHOOK_URL=https://my-static-domain.ngrok-free.app/api/plaid/webhook # Must have /api/plaid/webhook appended
213 214
 ```
214 215
 
215
-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.
216
+The `PLAID_WEBHOOK_URL` is essential as it enables your application to receive real-time updates on transactions from
217
+connected bank accounts. This webhook URL must contain a static domain, which can be obtained from services like ngrok
218
+that offer a free static domain upon signup. Alternatively, you may use any other service that provides a static domain.
216 219
 
217
-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:
220
+After integrating Plaid, you can connect your account on the "Connected Accounts" page and link your financial
221
+institution. Before importing transactions, ensure to run the following command to process the queued transactions:
218 222
 
219 223
 ```bash
220 224
 php artisan queue:work --queue=transactions
@@ -243,7 +247,6 @@ The testing process automatically handles refreshing and seeding the test databa
243 247
 migration is required. For more information on how to write and run tests using
244 248
 Pest, refer to the official documentation: [Pest Documentation](https://pestphp.com/docs).
245 249
 
246
-
247 250
 ## Dependencies
248 251
 
249 252
 - [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.
254 257
 - [akaunting/laravel-money](https://github.com/akaunting/laravel-money) - Currency formatting and conversion package for
255 258
   Laravel
256 259
 - [squirephp/squire](https://github.com/squirephp/squire) - A library of static Eloquent models for common fixture data
257
-- [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. 
260
+- [awcodes/filament-table-repeater](https://github.com/awcodes/filament-table-repeater) - A modified version of the
261
+  Filament Forms Repeater to display it as a table.
258 262
 
259 263
 ***Note*** : It is recommended to read the documentation for all dependencies to get yourself familiar with how the
260 264
 application works.

+ 2
- 2
app/Concerns/NotifiesOnDelete.php 파일 보기

@@ -14,7 +14,7 @@ trait NotifiesOnDelete
14 14
 
15 15
         Notification::make()
16 16
             ->danger()
17
-            ->title(translate('Action Denied'))
17
+            ->title(translate('Action denied'))
18 18
             ->body(translate(':Name cannot be deleted because it is :reason. Please update settings before deletion.', [
19 19
                 'Name' => $record->getAttribute('name'),
20 20
                 'reason' => $reason,
@@ -37,7 +37,7 @@ trait NotifiesOnDelete
37 37
 
38 38
         Notification::make()
39 39
             ->danger()
40
-            ->title(translate('Action Denied'))
40
+            ->title(translate('Action denied'))
41 41
             ->body($message)
42 42
             ->persistent()
43 43
             ->send();

+ 8
- 0
app/Contracts/MoneyFormattableDTO.php 파일 보기

@@ -0,0 +1,8 @@
1
+<?php
2
+
3
+namespace App\Contracts;
4
+
5
+interface MoneyFormattableDTO
6
+{
7
+    public static function fromArray(array $balances): static;
8
+}

+ 14
- 1
app/DTO/AccountBalanceDTO.php 파일 보기

@@ -2,7 +2,9 @@
2 2
 
3 3
 namespace App\DTO;
4 4
 
5
-class AccountBalanceDTO
5
+use App\Contracts\MoneyFormattableDTO;
6
+
7
+class AccountBalanceDTO implements MoneyFormattableDTO
6 8
 {
7 9
     public function __construct(
8 10
         public ?string $startingBalance,
@@ -11,4 +13,15 @@ class AccountBalanceDTO
11 13
         public ?string $netMovement,
12 14
         public ?string $endingBalance,
13 15
     ) {}
16
+
17
+    public static function fromArray(array $balances): static
18
+    {
19
+        return new static(
20
+            startingBalance: $balances['starting_balance'] ?? null,
21
+            debitBalance: $balances['debit_balance'] ?? null,
22
+            creditBalance: $balances['credit_balance'] ?? null,
23
+            netMovement: $balances['net_movement'] ?? null,
24
+            endingBalance: $balances['ending_balance'] ?? null,
25
+        );
26
+    }
14 27
 }

+ 38
- 0
app/DTO/AgingBucketDTO.php 파일 보기

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+namespace App\DTO;
4
+
5
+use App\Contracts\MoneyFormattableDTO;
6
+
7
+readonly class AgingBucketDTO implements MoneyFormattableDTO
8
+{
9
+    /**
10
+     * @param  array<string, string>  $periods
11
+     */
12
+    public function __construct(
13
+        public string $current,
14
+        public array $periods,
15
+        public string $overPeriods,
16
+        public string $total,
17
+    ) {}
18
+
19
+    public static function fromArray(array $balances): static
20
+    {
21
+        $periods = [];
22
+
23
+        // Extract all period balances
24
+        foreach ($balances as $key => $value) {
25
+            if (str_starts_with($key, 'period_')) {
26
+                $periods[$key] = $value;
27
+                unset($balances[$key]);
28
+            }
29
+        }
30
+
31
+        return new static(
32
+            current: $balances['current'],
33
+            periods: $periods,
34
+            overPeriods: $balances['over_periods'],
35
+            total: $balances['total'],
36
+        );
37
+    }
38
+}

+ 12
- 0
app/DTO/ClientReportDTO.php 파일 보기

@@ -0,0 +1,12 @@
1
+<?php
2
+
3
+namespace App\DTO;
4
+
5
+readonly class ClientReportDTO
6
+{
7
+    public function __construct(
8
+        public string $clientName,
9
+        public string $clientId,
10
+        public AgingBucketDTO $aging,
11
+    ) {}
12
+}

+ 12
- 0
app/DTO/EntityReportDTO.php 파일 보기

@@ -0,0 +1,12 @@
1
+<?php
2
+
3
+namespace App\DTO;
4
+
5
+readonly class EntityReportDTO
6
+{
7
+    public function __construct(
8
+        public string $name,
9
+        public string $id,
10
+        public AgingBucketDTO $aging,
11
+    ) {}
12
+}

+ 1
- 0
app/DTO/ReportDTO.php 파일 보기

@@ -12,6 +12,7 @@ class ReportDTO
12 12
          */
13 13
         public array $categories,
14 14
         public ?AccountBalanceDTO $overallTotal = null,
15
+        public ?AgingBucketDTO $agingSummary = null,
15 16
         public array $fields = [],
16 17
         public ?string $reportType = null,
17 18
         public ?CashFlowOverviewDTO $overview = null,

+ 12
- 0
app/DTO/VendorReportDTO.php 파일 보기

@@ -0,0 +1,12 @@
1
+<?php
2
+
3
+namespace App\DTO;
4
+
5
+readonly class VendorReportDTO
6
+{
7
+    public function __construct(
8
+        public string $vendorName,
9
+        public string $vendorId,
10
+        public AgingBucketDTO $aging,
11
+    ) {}
12
+}

+ 24
- 0
app/Enums/Accounting/DocumentEntityType.php 파일 보기

@@ -0,0 +1,24 @@
1
+<?php
2
+
3
+namespace App\Enums\Accounting;
4
+
5
+use Filament\Support\Contracts\HasLabel;
6
+
7
+enum DocumentEntityType: string implements HasLabel
8
+{
9
+    case Client = 'client';
10
+    case Vendor = 'vendor';
11
+
12
+    public function getLabel(): ?string
13
+    {
14
+        return $this->name;
15
+    }
16
+
17
+    public function getReportTitle(): string
18
+    {
19
+        return match ($this) {
20
+            self::Client => 'Accounts Receivable Aging',
21
+            self::Vendor => 'Accounts Payable Aging',
22
+        };
23
+    }
24
+}

+ 0
- 23
app/Enums/Setting/RecordsPerPage.php 파일 보기

@@ -1,23 +0,0 @@
1
-<?php
2
-
3
-namespace App\Enums\Setting;
4
-
5
-use App\Enums\Concerns\Utilities;
6
-use Filament\Support\Contracts\HasLabel;
7
-
8
-enum RecordsPerPage: int implements HasLabel
9
-{
10
-    use Utilities;
11
-    case Five = 5;
12
-    case Ten = 10;
13
-    case TwentyFive = 25;
14
-    case Fifty = 50;
15
-    case OneHundred = 100;
16
-
17
-    public const DEFAULT = self::Ten->value;
18
-
19
-    public function getLabel(): ?string
20
-    {
21
-        return (string) $this->value;
22
-    }
23
-}

+ 0
- 18
app/Enums/Setting/TableSortDirection.php 파일 보기

@@ -1,18 +0,0 @@
1
-<?php
2
-
3
-namespace App\Enums\Setting;
4
-
5
-use Filament\Support\Contracts\HasLabel;
6
-
7
-enum TableSortDirection: string implements HasLabel
8
-{
9
-    case Ascending = 'asc';
10
-    case Descending = 'desc';
11
-
12
-    public const DEFAULT = self::Ascending->value;
13
-
14
-    public function getLabel(): ?string
15
-    {
16
-        return translate($this->name);
17
-    }
18
-}

+ 3
- 3
app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php 파일 보기

@@ -113,11 +113,11 @@ class CompanyProfile extends Page
113 113
     {
114 114
         return Notification::make()
115 115
             ->info()
116
-            ->title('Timezone Update Required')
116
+            ->title('Timezone update required')
117 117
             ->body('You have changed your country or state. Please update your timezone to ensure accurate date and time information.')
118 118
             ->actions([
119 119
                 \Filament\Notifications\Actions\Action::make('updateTimezone')
120
-                    ->label('Update Timezone')
120
+                    ->label('Update timezone')
121 121
                     ->url(Localization::getUrl()),
122 122
             ])
123 123
             ->persistent()
@@ -187,7 +187,7 @@ class CompanyProfile extends Page
187 187
     {
188 188
         return Banner::make('needsAddressCompletion')
189 189
             ->warning()
190
-            ->title('Address Information Incomplete')
190
+            ->title('Address information incomplete')
191 191
             ->description('Please complete the required address information for proper business operations.')
192 192
             ->visible(fn (CompanyProfileModel $record) => $record->address->isIncomplete())
193 193
             ->columnSpanFull();

+ 5
- 5
app/Filament/Company/Clusters/Settings/Pages/Invoice.php 파일 보기

@@ -168,7 +168,7 @@ class Invoice extends Page
168 168
                     ->localizeLabel()
169 169
                     ->nullable(),
170 170
                 Textarea::make('footer')
171
-                    ->localizeLabel('Footer / Notes')
171
+                    ->localizeLabel('Footer')
172 172
                     ->nullable(),
173 173
             ])->columns();
174 174
     }
@@ -222,7 +222,7 @@ class Invoice extends Page
222 222
                             ->options(Template::class),
223 223
                         Select::make('item_name.option')
224 224
                             ->softRequired()
225
-                            ->localizeLabel('Item Name')
225
+                            ->localizeLabel('Item name')
226 226
                             ->options(InvoiceModel::getAvailableItemNameOptions())
227 227
                             ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) {
228 228
                                 if ($state !== 'other' && $old === 'other' && filled($get('item_name.custom'))) {
@@ -240,7 +240,7 @@ class Invoice extends Page
240 240
                             ->nullable(),
241 241
                         Select::make('unit_name.option')
242 242
                             ->softRequired()
243
-                            ->localizeLabel('Unit Name')
243
+                            ->localizeLabel('Unit name')
244 244
                             ->options(InvoiceModel::getAvailableUnitNameOptions())
245 245
                             ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) {
246 246
                                 if ($state !== 'other' && $old === 'other' && filled($get('unit_name.custom'))) {
@@ -258,7 +258,7 @@ class Invoice extends Page
258 258
                             ->nullable(),
259 259
                         Select::make('price_name.option')
260 260
                             ->softRequired()
261
-                            ->localizeLabel('Price Name')
261
+                            ->localizeLabel('Price name')
262 262
                             ->options(InvoiceModel::getAvailablePriceNameOptions())
263 263
                             ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) {
264 264
                                 if ($state !== 'other' && $old === 'other' && filled($get('price_name.custom'))) {
@@ -276,7 +276,7 @@ class Invoice extends Page
276 276
                             ->nullable(),
277 277
                         Select::make('amount_name.option')
278 278
                             ->softRequired()
279
-                            ->localizeLabel('Amount Name')
279
+                            ->localizeLabel('Amount name')
280 280
                             ->options(InvoiceModel::getAvailableAmountNameOptions())
281 281
                             ->afterStateUpdated(static function (Get $get, Set $set, $state, $old) {
282 282
                                 if ($state !== 'other' && $old === 'other' && filled($get('amount_name.custom'))) {

+ 5
- 5
app/Filament/Company/Clusters/Settings/Pages/Localization.php 파일 보기

@@ -157,9 +157,9 @@ class Localization extends Page
157 157
 
158 158
     protected function getFinancialAndFiscalSection(): Component
159 159
     {
160
-        $beforeNumber = translate('Before Number');
161
-        $afterNumber = translate('After Number');
162
-        $selectPosition = translate('Select Position');
160
+        $beforeNumber = translate('Before number');
161
+        $afterNumber = translate('After number');
162
+        $selectPosition = translate('Select position');
163 163
 
164 164
         return Section::make('Financial & Fiscal')
165 165
             ->schema([
@@ -169,7 +169,7 @@ class Localization extends Page
169 169
                     ->options(NumberFormat::class),
170 170
                 Select::make('percent_first')
171 171
                     ->softRequired()
172
-                    ->localizeLabel('Percent Position')
172
+                    ->localizeLabel('Percent position')
173 173
                     ->boolean($beforeNumber, $afterNumber, $selectPosition),
174 174
                 Group::make()
175 175
                     ->schema([
@@ -197,7 +197,7 @@ class Localization extends Page
197 197
                             ->columnSpan(2)
198 198
                             ->required()
199 199
                             ->markAsRequired(false)
200
-                            ->label('Fiscal Year End'),
200
+                            ->label('Fiscal year end'),
201 201
                     ])->columns(3),
202 202
             ])->columns();
203 203
     }

+ 6
- 6
app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php 파일 보기

@@ -27,7 +27,7 @@ class CurrencyResource extends Resource
27 27
 
28 28
     protected static ?string $model = CurrencyModel::class;
29 29
 
30
-    protected static ?string $modelLabel = 'Currency';
30
+    protected static ?string $modelLabel = 'currency';
31 31
 
32 32
     protected static ?string $cluster = Settings::class;
33 33
 
@@ -88,11 +88,11 @@ class CurrencyResource extends Resource
88 88
                             ->maxLength(5)
89 89
                             ->required(),
90 90
                         Forms\Components\Select::make('symbol_first')
91
-                            ->localizeLabel('Symbol Position')
92
-                            ->boolean(translate('Before Amount'), translate('After Amount'), translate('Select a symbol position'))
91
+                            ->localizeLabel('Symbol position')
92
+                            ->boolean(translate('Before amount'), translate('After amount'), translate('Select a symbol position'))
93 93
                             ->required(),
94 94
                         Forms\Components\TextInput::make('decimal_mark')
95
-                            ->localizeLabel('Decimal Separator')
95
+                            ->localizeLabel('Decimal separator')
96 96
                             ->maxLength(1)
97 97
                             ->rule(static function (Forms\Get $get): Closure {
98 98
                                 return static function ($attribute, $value, Closure $fail) use ($get) {
@@ -126,8 +126,8 @@ class CurrencyResource extends Resource
126 126
                     ->weight(FontWeight::Medium)
127 127
                     ->icon(static fn (CurrencyModel $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null)
128 128
                     ->tooltip(static function (CurrencyModel $record) {
129
-                        $tooltipMessage = translate('Default :Record', [
130
-                            'Record' => static::getModelLabel(),
129
+                        $tooltipMessage = translate('Default :record', [
130
+                            'record' => static::getModelLabel(),
131 131
                         ]);
132 132
 
133 133
                         return $record->isEnabled() ? $tooltipMessage : null;

+ 2
- 2
app/Filament/Company/Pages/Accounting/AccountChart.php 파일 보기

@@ -163,7 +163,7 @@ class AccountChart extends Page
163 163
     protected function getArchiveFormComponent(): Component
164 164
     {
165 165
         return Checkbox::make('archived')
166
-            ->label('Archive Account')
166
+            ->label('Archive account')
167 167
             ->helperText('Archived accounts will not be available for selection in transactions.')
168 168
             ->hidden(static function (string $operation): bool {
169 169
                 return $operation === 'create';
@@ -186,7 +186,7 @@ class AccountChart extends Page
186 186
         return [
187 187
             CreateAction::make()
188 188
                 ->button()
189
-                ->label('Add New Account')
189
+                ->label('Add new account')
190 190
                 ->model(Account::class)
191 191
                 ->form(fn (Form $form) => $this->getChartForm($form, false)->operation('create')),
192 192
         ];

+ 60
- 58
app/Filament/Company/Pages/Accounting/Transactions.php 파일 보기

@@ -95,10 +95,10 @@ class Transactions extends Page implements HasTable
95 95
     protected function getHeaderActions(): array
96 96
     {
97 97
         return [
98
-            $this->buildTransactionAction('addIncome', 'Add Income', TransactionType::Deposit),
99
-            $this->buildTransactionAction('addExpense', 'Add Expense', TransactionType::Withdrawal),
98
+            $this->buildTransactionAction('addIncome', 'Add income', TransactionType::Deposit),
99
+            $this->buildTransactionAction('addExpense', 'Add expense', TransactionType::Withdrawal),
100 100
             Actions\CreateAction::make('addTransfer')
101
-                ->label('Add Transfer')
101
+                ->label('Add transfer')
102 102
                 ->modalHeading('Add Transfer')
103 103
                 ->modalWidth(MaxWidth::ThreeExtraLarge)
104 104
                 ->model(static::getModel())
@@ -108,7 +108,7 @@ class Transactions extends Page implements HasTable
108 108
                 ->outlined(),
109 109
             Actions\ActionGroup::make([
110 110
                 Actions\CreateAction::make('addJournalTransaction')
111
-                    ->label('Add Journal Transaction')
111
+                    ->label('Add journal transaction')
112 112
                     ->fillForm(fn (): array => $this->getFormDefaultsForType(TransactionType::Journal))
113 113
                     ->modalWidth(MaxWidth::Screen)
114 114
                     ->model(static::getModel())
@@ -120,7 +120,7 @@ class Transactions extends Page implements HasTable
120 120
                     ->afterFormFilled(fn () => $this->resetJournalEntryAmounts())
121 121
                     ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced()),
122 122
                 Actions\Action::make('connectBank')
123
-                    ->label('Connect Your Bank')
123
+                    ->label('Connect your bank')
124 124
                     ->url(ConnectedAccount::getUrl()),
125 125
             ])
126 126
                 ->label('More')
@@ -144,7 +144,7 @@ class Transactions extends Page implements HasTable
144 144
                 Forms\Components\TextInput::make('description')
145 145
                     ->label('Description'),
146 146
                 Forms\Components\Select::make('bank_account_id')
147
-                    ->label('From Account')
147
+                    ->label('From account')
148 148
                     ->options(fn (Get $get, ?Transaction $transaction) => $this->getBankAccountOptions(excludedAccountId: $get('account_id'), currentBankAccountId: $transaction?->bank_account_id))
149 149
                     ->live()
150 150
                     ->searchable()
@@ -173,7 +173,7 @@ class Transactions extends Page implements HasTable
173 173
                     ->money(static fn (Forms\Get $get) => BankAccount::find($get('bank_account_id'))?->account?->currency_code ?? CurrencyAccessor::getDefaultCurrency())
174 174
                     ->required(),
175 175
                 Forms\Components\Select::make('account_id')
176
-                    ->label('To Account')
176
+                    ->label('To account')
177 177
                     ->live()
178 178
                     ->options(fn (Get $get, ?Transaction $transaction) => $this->getBankAccountAccountOptions(excludedBankAccountId: $get('bank_account_id'), currentAccountId: $transaction?->account_id))
179 179
                     ->searchable()
@@ -328,7 +328,7 @@ class Transactions extends Page implements HasTable
328 328
                     ->native(false)
329 329
                     ->options(TransactionType::class),
330 330
                 $this->buildDateRangeFilter('posted_at', 'Posted', true),
331
-                $this->buildDateRangeFilter('updated_at', 'Last Modified'),
331
+                $this->buildDateRangeFilter('updated_at', 'Last modified'),
332 332
             ])
333 333
             ->filtersFormSchema(fn (array $filters): array => [
334 334
                 Grid::make()
@@ -361,7 +361,7 @@ class Transactions extends Page implements HasTable
361 361
                                 ->close()
362 362
                                 ->color('gray'),
363 363
                             Tables\Actions\Action::make('resetFilters')
364
-                                ->label(__('Clear All'))
364
+                                ->label(__('Clear all'))
365 365
                                 ->color('primary')
366 366
                                 ->link()
367 367
                                 ->extraAttributes([
@@ -373,7 +373,7 @@ class Transactions extends Page implements HasTable
373 373
             )
374 374
             ->actions([
375 375
                 Tables\Actions\Action::make('markAsReviewed')
376
-                    ->label('Mark as Reviewed')
376
+                    ->label('Mark as reviewed')
377 377
                     ->view('filament.company.components.tables.actions.mark-as-reviewed')
378 378
                     ->icon(static fn (Transaction $transaction) => $transaction->reviewed ? 'heroicon-s-check-circle' : 'heroicon-o-check-circle')
379 379
                     ->color(static fn (Transaction $transaction, Tables\Actions\Action $action) => match (static::determineTransactionState($transaction, $action)) {
@@ -383,55 +383,57 @@ class Transactions extends Page implements HasTable
383 383
                     })
384 384
                     ->tooltip(static fn (Transaction $transaction, Tables\Actions\Action $action) => match (static::determineTransactionState($transaction, $action)) {
385 385
                         'reviewed' => 'Reviewed',
386
-                        'unreviewed' => 'Mark as Reviewed',
386
+                        'unreviewed' => 'Mark as reviewed',
387 387
                         'uncategorized' => 'Categorize first to mark as reviewed',
388 388
                     })
389 389
                     ->disabled(fn (Transaction $transaction): bool => $transaction->isUncategorized())
390 390
                     ->action(fn (Transaction $transaction) => $transaction->update(['reviewed' => ! $transaction->reviewed])),
391 391
                 Tables\Actions\ActionGroup::make([
392
-                    Tables\Actions\EditAction::make('updateTransaction')
393
-                        ->label('Edit Transaction')
394
-                        ->modalHeading('Edit Transaction')
395
-                        ->modalWidth(MaxWidth::ThreeExtraLarge)
396
-                        ->form(fn (Form $form) => $this->transactionForm($form))
397
-                        ->visible(static fn (Transaction $transaction) => $transaction->type->isStandard()),
398
-                    Tables\Actions\EditAction::make('updateTransfer')
399
-                        ->label('Edit Transfer')
400
-                        ->modalHeading('Edit Transfer')
401
-                        ->modalWidth(MaxWidth::ThreeExtraLarge)
402
-                        ->form(fn (Form $form) => $this->transferForm($form))
403
-                        ->visible(static fn (Transaction $transaction) => $transaction->type->isTransfer()),
404
-                    Tables\Actions\EditAction::make('updateJournalTransaction')
405
-                        ->label('Edit Journal Transaction')
406
-                        ->modalHeading('Journal Entry')
407
-                        ->modalWidth(MaxWidth::Screen)
408
-                        ->form(fn (Form $form) => $this->journalTransactionForm($form))
409
-                        ->afterFormFilled(function (Transaction $transaction) {
410
-                            $debitAmounts = $transaction->journalEntries->sumDebits()->getAmount();
411
-                            $creditAmounts = $transaction->journalEntries->sumCredits()->getAmount();
412
-
413
-                            $this->setDebitAmount($debitAmounts);
414
-                            $this->setCreditAmount($creditAmounts);
415
-                        })
416
-                        ->modalSubmitAction(fn (Actions\StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced()))
417
-                        ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced())
418
-                        ->visible(static fn (Transaction $transaction) => $transaction->type->isJournal()),
392
+                    Tables\Actions\ActionGroup::make([
393
+                        Tables\Actions\EditAction::make('editTransaction')
394
+                            ->label('Edit transaction')
395
+                            ->modalHeading('Edit Transaction')
396
+                            ->modalWidth(MaxWidth::ThreeExtraLarge)
397
+                            ->form(fn (Form $form) => $this->transactionForm($form))
398
+                            ->visible(static fn (Transaction $transaction) => $transaction->type->isStandard()),
399
+                        Tables\Actions\EditAction::make('editTransfer')
400
+                            ->label('Edit transfer')
401
+                            ->modalHeading('Edit Transfer')
402
+                            ->modalWidth(MaxWidth::ThreeExtraLarge)
403
+                            ->form(fn (Form $form) => $this->transferForm($form))
404
+                            ->visible(static fn (Transaction $transaction) => $transaction->type->isTransfer()),
405
+                        Tables\Actions\EditAction::make('editJournalTransaction')
406
+                            ->label('Edit journal transaction')
407
+                            ->modalHeading('Journal Entry')
408
+                            ->modalWidth(MaxWidth::Screen)
409
+                            ->form(fn (Form $form) => $this->journalTransactionForm($form))
410
+                            ->afterFormFilled(function (Transaction $transaction) {
411
+                                $debitAmounts = $transaction->journalEntries->sumDebits()->getAmount();
412
+                                $creditAmounts = $transaction->journalEntries->sumCredits()->getAmount();
413
+
414
+                                $this->setDebitAmount($debitAmounts);
415
+                                $this->setCreditAmount($creditAmounts);
416
+                            })
417
+                            ->modalSubmitAction(fn (Actions\StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced()))
418
+                            ->after(fn (Transaction $transaction) => $transaction->updateAmountIfBalanced())
419
+                            ->visible(static fn (Transaction $transaction) => $transaction->type->isJournal()),
420
+                        Tables\Actions\ReplicateAction::make()
421
+                            ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at'])
422
+                            ->modal(false)
423
+                            ->beforeReplicaSaved(static function (Transaction $replica) {
424
+                                $replica->description = '(Copy of) ' . $replica->description;
425
+                            })
426
+                            ->after(static function (Transaction $original, Transaction $replica) {
427
+                                $original->journalEntries->each(function (JournalEntry $entry) use ($replica) {
428
+                                    $entry->replicate([
429
+                                        'transaction_id',
430
+                                    ])->fill([
431
+                                        'transaction_id' => $replica->id,
432
+                                    ])->save();
433
+                                });
434
+                            }),
435
+                    ])->dropdown(false),
419 436
                     Tables\Actions\DeleteAction::make(),
420
-                    Tables\Actions\ReplicateAction::make()
421
-                        ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at'])
422
-                        ->modal(false)
423
-                        ->beforeReplicaSaved(static function (Transaction $replica) {
424
-                            $replica->description = '(Copy of) ' . $replica->description;
425
-                        })
426
-                        ->after(static function (Transaction $original, Transaction $replica) {
427
-                            $original->journalEntries->each(function (JournalEntry $entry) use ($replica) {
428
-                                $entry->replicate([
429
-                                    'transaction_id',
430
-                                ])->fill([
431
-                                    'transaction_id' => $replica->id,
432
-                                ])->save();
433
-                            });
434
-                        }),
435 437
                 ]),
436 438
             ])
437 439
             ->bulkActions([
@@ -441,8 +443,8 @@ class Transactions extends Page implements HasTable
441 443
                         ->label('Replicate')
442 444
                         ->modalWidth(MaxWidth::Large)
443 445
                         ->modalDescription('Replicating transactions will also replicate their journal entries. Are you sure you want to proceed?')
444
-                        ->successNotificationTitle('Transactions Replicated Successfully')
445
-                        ->failureNotificationTitle('Failed to Replicate Transactions')
446
+                        ->successNotificationTitle('Transactions replicated successfully')
447
+                        ->failureNotificationTitle('Failed to replicate transactions')
446 448
                         ->deselectRecordsAfterCompletion()
447 449
                         ->excludeAttributes(['created_by', 'updated_by', 'created_at', 'updated_at'])
448 450
                         ->beforeReplicaSaved(static function (Transaction $replica) {
@@ -649,7 +651,7 @@ class Transactions extends Page implements HasTable
649 651
         $typeLabel = $type->getLabel();
650 652
 
651 653
         return FormAction::make("add{$typeLabel}Entry")
652
-            ->label("Add {$typeLabel} Entry")
654
+            ->label("Add {$typeLabel} entry")
653 655
             ->button()
654 656
             ->outlined()
655 657
             ->color($type->isDebit() ? 'primary' : 'gray')
@@ -695,13 +697,13 @@ class Transactions extends Page implements HasTable
695 697
                             ->startDateField("{$fieldPrefix}_start_date")
696 698
                             ->endDateField("{$fieldPrefix}_end_date"),
697 699
                         DatePicker::make("{$fieldPrefix}_start_date")
698
-                            ->label("{$label} From")
700
+                            ->label("{$label} from")
699 701
                             ->columnStart(1)
700 702
                             ->afterStateUpdated(static function (Set $set) use ($fieldPrefix) {
701 703
                                 $set("{$fieldPrefix}_date_range", 'Custom');
702 704
                             }),
703 705
                         DatePicker::make("{$fieldPrefix}_end_date")
704
-                            ->label("{$label} To")
706
+                            ->label("{$label} to")
705 707
                             ->afterStateUpdated(static function (Set $set) use ($fieldPrefix) {
706 708
                                 $set("{$fieldPrefix}_date_range", 'Custom');
707 709
                             }),

+ 1
- 1
app/Filament/Company/Pages/Concerns/HasDeferredFiltersForm.php 파일 보기

@@ -79,7 +79,7 @@ trait HasDeferredFiltersForm
79 79
     public function applyFiltersAction(): Action
80 80
     {
81 81
         return Action::make('applyFilters')
82
-            ->label('Update Report')
82
+            ->label('Update report')
83 83
             ->action('applyFilters')
84 84
             ->keyBindings(['mod+s'])
85 85
             ->button();

+ 2
- 2
app/Filament/Company/Pages/CreateCompany.php 파일 보기

@@ -55,11 +55,11 @@ class CreateCompany extends FilamentCreateCompany
55 55
                     ->maxLength(255)
56 56
                     ->softRequired(),
57 57
                 TextInput::make('profile.email')
58
-                    ->label('Company Email')
58
+                    ->label('Company email')
59 59
                     ->email()
60 60
                     ->softRequired(),
61 61
                 Select::make('profile.entity_type')
62
-                    ->label('Entity Type')
62
+                    ->label('Entity type')
63 63
                     ->options(EntityType::class)
64 64
                     ->softRequired(),
65 65
                 Select::make('profile.country')

+ 48
- 6
app/Filament/Company/Pages/Reports.php 파일 보기

@@ -3,6 +3,8 @@
3 3
 namespace App\Filament\Company\Pages;
4 4
 
5 5
 use App\Filament\Company\Pages\Reports\AccountBalances;
6
+use App\Filament\Company\Pages\Reports\AccountsPayableAging;
7
+use App\Filament\Company\Pages\Reports\AccountsReceivableAging;
6 8
 use App\Filament\Company\Pages\Reports\AccountTransactions;
7 9
 use App\Filament\Company\Pages\Reports\BalanceSheet;
8 10
 use App\Filament\Company\Pages\Reports\CashFlowStatement;
@@ -55,14 +57,14 @@ class Reports extends Page
55 57
                             ->heading('Income Statement')
56 58
                             ->description('Shows revenue, expenses, and net earnings over a period, indicating overall financial performance.')
57 59
                             ->icon('heroicon-o-chart-bar')
58
-                            ->iconColor(Color::Indigo)
60
+                            ->iconColor(Color::Purple)
59 61
                             ->url(IncomeStatement::getUrl()),
60 62
                         ReportEntry::make('balance_sheet')
61 63
                             ->hiddenLabel()
62 64
                             ->heading('Balance Sheet')
63 65
                             ->description('Displays your company’s assets, liabilities, and equity at a single point in time, showing overall financial health and stability.')
64 66
                             ->icon('heroicon-o-clipboard-document-list')
65
-                            ->iconColor(Color::Emerald)
67
+                            ->iconColor(Color::Teal)
66 68
                             ->url(BalanceSheet::getUrl()),
67 69
                         ReportEntry::make('cash_flow_statement')
68 70
                             ->hiddenLabel()
@@ -72,6 +74,46 @@ class Reports extends Page
72 74
                             ->iconColor(Color::Cyan)
73 75
                             ->url(CashFlowStatement::getUrl()),
74 76
                     ]),
77
+                Section::make('Customer Reports')
78
+                    ->aside()
79
+                    ->description('Reports that provide detailed information on your company’s customer transactions and balances.')
80
+                    ->extraAttributes(['class' => 'es-report-card'])
81
+                    ->schema([
82
+                        ReportEntry::make('ar_aging')
83
+                            ->hiddenLabel()
84
+                            ->heading('Accounts Receivable Aging')
85
+                            ->description('Lists outstanding receivables by customer, showing how long invoices have been unpaid.')
86
+                            ->icon('heroicon-o-calendar-date-range')
87
+                            ->iconColor(Color::Indigo)
88
+                            ->url(AccountsReceivableAging::getUrl()),
89
+                        ReportEntry::make('income_by_customer')
90
+                            ->hiddenLabel()
91
+                            ->heading('Income by Customer')
92
+                            ->description('Shows revenue generated by each customer, helping identify top customers and opportunities for growth.')
93
+                            ->icon('heroicon-o-arrow-trending-up')
94
+                            ->iconColor(Color::Emerald)
95
+                            ->url('#'),
96
+                    ]),
97
+                Section::make('Vendor Reports')
98
+                    ->aside()
99
+                    ->description('Reports that provide detailed information on your company’s vendor transactions and balances.')
100
+                    ->extraAttributes(['class' => 'es-report-card'])
101
+                    ->schema([
102
+                        ReportEntry::make('ap_aging')
103
+                            ->hiddenLabel()
104
+                            ->heading('Accounts Payable Aging')
105
+                            ->description('Lists outstanding payables by vendor, showing how long invoices have been unpaid.')
106
+                            ->icon('heroicon-o-clock')
107
+                            ->iconColor(Color::Rose)
108
+                            ->url(AccountsPayableAging::getUrl()),
109
+                        ReportEntry::make('expenses_by_vendor')
110
+                            ->hiddenLabel()
111
+                            ->heading('Expenses by Vendor')
112
+                            ->description('Shows expenses incurred with each vendor, helping identify top vendors and opportunities for cost savings.')
113
+                            ->icon('heroicon-o-arrow-trending-down')
114
+                            ->iconColor(Color::Orange)
115
+                            ->url('#'),
116
+                    ]),
75 117
                 Section::make('Detailed Reports')
76 118
                     ->aside()
77 119
                     ->description('Detailed reports that provide a comprehensive view of your company’s financial transactions and account balances.')
@@ -81,8 +123,8 @@ class Reports extends Page
81 123
                             ->hiddenLabel()
82 124
                             ->heading('Account Balances')
83 125
                             ->description('Lists all accounts and their balances, including starting, debit, credit, net movement, and ending balances.')
84
-                            ->icon('heroicon-o-currency-dollar')
85
-                            ->iconColor(Color::Teal)
126
+                            ->icon('heroicon-o-calculator')
127
+                            ->iconColor(Color::Slate)
86 128
                             ->url(AccountBalances::getUrl()),
87 129
                         ReportEntry::make('trial_balance')
88 130
                             ->hiddenLabel()
@@ -95,8 +137,8 @@ class Reports extends Page
95 137
                             ->hiddenLabel()
96 138
                             ->heading('Account Transactions')
97 139
                             ->description('A record of all transactions, essential for monitoring and reconciling financial activity in the ledger.')
98
-                            ->icon('heroicon-o-adjustments-horizontal')
99
-                            ->iconColor(Color::Amber)
140
+                            ->icon('heroicon-o-list-bullet')
141
+                            ->iconColor(Color::Yellow)
100 142
                             ->url(AccountTransactions::getUrl()),
101 143
                     ]),
102 144
             ]);

+ 2
- 2
app/Filament/Company/Pages/Reports/AccountTransactions.php 파일 보기

@@ -102,7 +102,7 @@ class AccountTransactions extends BaseReportPage
102 102
                     ->selectablePlaceholder(false),
103 103
                 Actions::make([
104 104
                     Actions\Action::make('applyFilters')
105
-                        ->label('Update Report')
105
+                        ->label('Update report')
106 106
                         ->action('applyFilters')
107 107
                         ->keyBindings(['mod+s'])
108 108
                         ->button(),
@@ -193,7 +193,7 @@ class AccountTransactions extends BaseReportPage
193 193
     {
194 194
         return [
195 195
             Action::make('createTransaction')
196
-                ->label('Create Transaction')
196
+                ->label('Create transaction')
197 197
                 ->url(Transactions::getUrl()),
198 198
         ];
199 199
     }

+ 13
- 0
app/Filament/Company/Pages/Reports/AccountsPayableAging.php 파일 보기

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Enums\Accounting\DocumentEntityType;
6
+
7
+class AccountsPayableAging extends BaseAgingReportPage
8
+{
9
+    protected function getEntityType(): DocumentEntityType
10
+    {
11
+        return DocumentEntityType::Vendor;
12
+    }
13
+}

+ 13
- 0
app/Filament/Company/Pages/Reports/AccountsReceivableAging.php 파일 보기

@@ -0,0 +1,13 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Enums\Accounting\DocumentEntityType;
6
+
7
+class AccountsReceivableAging extends BaseAgingReportPage
8
+{
9
+    protected function getEntityType(): DocumentEntityType
10
+    {
11
+        return DocumentEntityType::Client;
12
+    }
13
+}

+ 138
- 0
app/Filament/Company/Pages/Reports/BaseAgingReportPage.php 파일 보기

@@ -0,0 +1,138 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages\Reports;
4
+
5
+use App\Contracts\ExportableReport;
6
+use App\DTO\ReportDTO;
7
+use App\Enums\Accounting\DocumentEntityType;
8
+use App\Filament\Forms\Components\DateRangeSelect;
9
+use App\Services\ExportService;
10
+use App\Services\ReportService;
11
+use App\Support\Column;
12
+use App\Transformers\AgingReportTransformer;
13
+use Filament\Forms\Components\TextInput;
14
+use Filament\Forms\Form;
15
+use Filament\Support\Enums\Alignment;
16
+use Filament\Support\RawJs;
17
+use Symfony\Component\HttpFoundation\StreamedResponse;
18
+
19
+abstract class BaseAgingReportPage extends BaseReportPage
20
+{
21
+    protected static string $view = 'filament.company.pages.reports.trial-balance';
22
+
23
+    protected ReportService $reportService;
24
+
25
+    protected ExportService $exportService;
26
+
27
+    abstract protected function getEntityType(): DocumentEntityType;
28
+
29
+    public function boot(ReportService $reportService, ExportService $exportService): void
30
+    {
31
+        $this->reportService = $reportService;
32
+        $this->exportService = $exportService;
33
+    }
34
+
35
+    protected function initializeDefaultFilters(): void
36
+    {
37
+        if (empty($this->getFilterState('days_per_period'))) {
38
+            $this->setFilterState('days_per_period', 30);
39
+        }
40
+
41
+        if (empty($this->getFilterState('number_of_periods'))) {
42
+            $this->setFilterState('number_of_periods', 4);
43
+        }
44
+    }
45
+
46
+    public function getTable(): array
47
+    {
48
+        $daysPerPeriod = $this->getFilterState('days_per_period');
49
+        $numberOfPeriods = $this->getFilterState('number_of_periods');
50
+
51
+        $columns = [
52
+            Column::make('entity_name')
53
+                ->label($this->getEntityType()->getLabel())
54
+                ->alignment(Alignment::Left),
55
+            Column::make('current')
56
+                ->label('Current')
57
+                ->alignment(Alignment::Right),
58
+        ];
59
+
60
+        for ($i = 1; $i < $numberOfPeriods; $i++) {
61
+            $start = ($i - 1) * $daysPerPeriod + 1;
62
+            $end = $i * $daysPerPeriod;
63
+
64
+            $columns[] = Column::make("period_{$i}")
65
+                ->label("{$start} to {$end}")
66
+                ->alignment(Alignment::Right);
67
+        }
68
+
69
+        $columns[] = Column::make('over_periods')
70
+            ->label('Over ' . (($numberOfPeriods - 1) * $daysPerPeriod))
71
+            ->alignment(Alignment::Right);
72
+
73
+        $columns[] = Column::make('total')
74
+            ->label('Total')
75
+            ->alignment(Alignment::Right);
76
+
77
+        return $columns;
78
+    }
79
+
80
+    public function filtersForm(Form $form): Form
81
+    {
82
+        return $form
83
+            ->columns(4)
84
+            ->schema([
85
+                DateRangeSelect::make('dateRange')
86
+                    ->label('As of')
87
+                    ->selectablePlaceholder(false)
88
+                    ->endDateField('asOfDate'),
89
+                $this->getAsOfDateFormComponent(),
90
+                TextInput::make('days_per_period')
91
+                    ->label('Days per period')
92
+                    ->integer()
93
+                    ->mask(RawJs::make(<<<'JS'
94
+                        $input > 365 ? '365' : '999'
95
+                    JS)),
96
+                TextInput::make('number_of_periods')
97
+                    ->label('Number of periods')
98
+                    ->integer()
99
+                    ->mask(RawJs::make(<<<'JS'
100
+                        $input > 10 ? '10' : '99'
101
+                    JS)),
102
+            ]);
103
+    }
104
+
105
+    protected function buildReport(array $columns): ReportDTO
106
+    {
107
+        return $this->reportService->buildAgingReport(
108
+            $this->getFormattedAsOfDate(),
109
+            $this->getEntityType(),
110
+            $columns,
111
+            $this->getFilterState('days_per_period'),
112
+            $this->getFilterState('number_of_periods')
113
+        );
114
+    }
115
+
116
+    protected function getTransformer(ReportDTO $reportDTO): ExportableReport
117
+    {
118
+        return new AgingReportTransformer($reportDTO, $this->getEntityType());
119
+    }
120
+
121
+    public function exportCSV(): StreamedResponse
122
+    {
123
+        return $this->exportService->exportToCsv(
124
+            $this->company,
125
+            $this->report,
126
+            endDate: $this->getFilterState('asOfDate')
127
+        );
128
+    }
129
+
130
+    public function exportPDF(): StreamedResponse
131
+    {
132
+        return $this->exportService->exportToPdf(
133
+            $this->company,
134
+            $this->report,
135
+            endDate: $this->getFilterState('asOfDate')
136
+        );
137
+    }
138
+}

+ 4
- 4
app/Filament/Company/Pages/Reports/BaseReportPage.php 파일 보기

@@ -243,7 +243,7 @@ abstract class BaseReportPage extends Page
243 243
     protected function getDateRangeFormComponent(): DateRangeSelect
244 244
     {
245 245
         return DateRangeSelect::make('dateRange')
246
-            ->label('Date Range')
246
+            ->label('Date range')
247 247
             ->selectablePlaceholder(false)
248 248
             ->startDateField('startDate')
249 249
             ->endDateField('endDate');
@@ -252,7 +252,7 @@ abstract class BaseReportPage extends Page
252 252
     protected function getStartDateFormComponent(): DatePicker
253 253
     {
254 254
         return DatePicker::make('startDate')
255
-            ->label('Start Date')
255
+            ->label('Start date')
256 256
             ->live()
257 257
             ->afterStateUpdated(static function ($state, Set $set) {
258 258
                 $set('dateRange', 'Custom');
@@ -262,7 +262,7 @@ abstract class BaseReportPage extends Page
262 262
     protected function getEndDateFormComponent(): DatePicker
263 263
     {
264 264
         return DatePicker::make('endDate')
265
-            ->label('End Date')
265
+            ->label('End date')
266 266
             ->live()
267 267
             ->afterStateUpdated(static function (Set $set) {
268 268
                 $set('dateRange', 'Custom');
@@ -272,7 +272,7 @@ abstract class BaseReportPage extends Page
272 272
     protected function getAsOfDateFormComponent(): DatePicker
273 273
     {
274 274
         return DatePicker::make('asOfDate')
275
-            ->label('As of Date')
275
+            ->label('As of date')
276 276
             ->live()
277 277
             ->afterStateUpdated(static function (Set $set) {
278 278
                 $set('dateRange', 'Custom');

+ 1
- 1
app/Filament/Company/Pages/Reports/TrialBalance.php 파일 보기

@@ -60,7 +60,7 @@ class TrialBalance extends BaseReportPage
60 60
             ->columns(4)
61 61
             ->schema([
62 62
                 Select::make('reportType')
63
-                    ->label('Report Type')
63
+                    ->label('Report type')
64 64
                     ->options([
65 65
                         'standard' => 'Standard',
66 66
                         'postClosing' => 'Post-Closing',

+ 1
- 1
app/Filament/Company/Pages/Service/ConnectedAccount.php 파일 보기

@@ -29,7 +29,7 @@ class ConnectedAccount extends Page
29 29
     {
30 30
         return [
31 31
             Action::make('connect')
32
-                ->label('Connect Account')
32
+                ->label('Connect account')
33 33
                 ->dispatch('createToken'),
34 34
         ];
35 35
     }

+ 3
- 3
app/Filament/Company/Resources/Banking/AccountResource.php 파일 보기

@@ -25,7 +25,7 @@ class AccountResource extends Resource
25 25
 {
26 26
     protected static ?string $model = BankAccount::class;
27 27
 
28
-    protected static ?string $modelLabel = 'Account';
28
+    protected static ?string $modelLabel = 'account';
29 29
 
30 30
     public static function getModelLabel(): string
31 31
     {
@@ -89,7 +89,7 @@ class AccountResource extends Resource
89 89
                             ->columnSpanFull()
90 90
                             ->schema([
91 91
                                 Forms\Components\TextInput::make('number')
92
-                                    ->localizeLabel('Account Number')
92
+                                    ->localizeLabel('Account number')
93 93
                                     ->unique(ignoreRecord: true, modifyRuleUsing: static function (Unique $rule, $state) {
94 94
                                         $companyId = Auth::user()->currentCompany->id;
95 95
 
@@ -127,7 +127,7 @@ class AccountResource extends Resource
127 127
                     ->sortable()
128 128
                     ->toggleable(),
129 129
                 Tables\Columns\TextColumn::make('account.ending_balance')
130
-                    ->localizeLabel('Ending Balance')
130
+                    ->localizeLabel('Ending balance')
131 131
                     ->state(static fn (BankAccount $record) => $record->account->ending_balance->convert()->formatWithCode())
132 132
                     ->toggleable()
133 133
                     ->alignment(Alignment::End),

+ 6
- 8
app/Filament/Company/Resources/Common/OfferingResource.php 파일 보기

@@ -22,8 +22,6 @@ class OfferingResource extends Resource
22 22
 {
23 23
     protected static ?string $model = Offering::class;
24 24
 
25
-    protected static ?string $modelLabel = 'Offering';
26
-
27 25
     protected static ?string $navigationIcon = 'heroicon-o-square-3-stack-3d';
28 26
 
29 27
     public static function form(Form $form): Form
@@ -68,7 +66,7 @@ class OfferingResource extends Resource
68 66
                 Forms\Components\Section::make('Sale Information')
69 67
                     ->schema([
70 68
                         Forms\Components\Select::make('income_account_id')
71
-                            ->label('Income Account')
69
+                            ->label('Income account')
72 70
                             ->options(Account::query()
73 71
                                 ->where('category', AccountCategory::Revenue)
74 72
                                 ->where('type', AccountType::OperatingRevenue)
@@ -81,12 +79,12 @@ class OfferingResource extends Resource
81 79
                                 'required' => 'The income account is required for sellable offerings.',
82 80
                             ]),
83 81
                         Forms\Components\Select::make('salesTaxes')
84
-                            ->label('Sales Tax')
82
+                            ->label('Sales tax')
85 83
                             ->relationship('salesTaxes', 'name')
86 84
                             ->preload()
87 85
                             ->multiple(),
88 86
                         Forms\Components\Select::make('salesDiscounts')
89
-                            ->label('Sales Discount')
87
+                            ->label('Sales discount')
90 88
                             ->relationship('salesDiscounts', 'name')
91 89
                             ->preload()
92 90
                             ->multiple(),
@@ -98,7 +96,7 @@ class OfferingResource extends Resource
98 96
                 Forms\Components\Section::make('Purchase Information')
99 97
                     ->schema([
100 98
                         Forms\Components\Select::make('expense_account_id')
101
-                            ->label('Expense Account')
99
+                            ->label('Expense account')
102 100
                             ->options(Account::query()
103 101
                                 ->where('category', AccountCategory::Expense)
104 102
                                 ->where('type', AccountType::OperatingExpense)
@@ -112,12 +110,12 @@ class OfferingResource extends Resource
112 110
                                 'required' => 'The expense account is required for purchasable offerings.',
113 111
                             ]),
114 112
                         Forms\Components\Select::make('purchaseTaxes')
115
-                            ->label('Purchase Tax')
113
+                            ->label('Purchase tax')
116 114
                             ->relationship('purchaseTaxes', 'name')
117 115
                             ->preload()
118 116
                             ->multiple(),
119 117
                         Forms\Components\Select::make('purchaseDiscounts')
120
-                            ->label('Purchase Discount')
118
+                            ->label('Purchase discount')
121 119
                             ->relationship('purchaseDiscounts', 'name')
122 120
                             ->preload()
123 121
                             ->multiple(),

+ 1
- 1
app/Filament/Company/Resources/Core/DepartmentResource.php 파일 보기

@@ -56,7 +56,7 @@ class DepartmentResource extends Resource
56 56
                         Forms\Components\Group::make()
57 57
                             ->schema([
58 58
                                 Forms\Components\Select::make('parent_id')
59
-                                    ->localizeLabel('Parent Department')
59
+                                    ->localizeLabel('Parent department')
60 60
                                     ->relationship('parent', 'name')
61 61
                                     ->preload()
62 62
                                     ->searchable()

+ 96
- 94
app/Filament/Company/Resources/Purchases/BillResource.php 파일 보기

@@ -71,26 +71,26 @@ class BillResource extends Resource
71 71
                             ]),
72 72
                             Forms\Components\Group::make([
73 73
                                 Forms\Components\TextInput::make('bill_number')
74
-                                    ->label('Bill Number')
74
+                                    ->label('Bill number')
75 75
                                     ->default(fn () => Bill::getNextDocumentNumber())
76 76
                                     ->required(),
77 77
                                 Forms\Components\TextInput::make('order_number')
78 78
                                     ->label('P.O/S.O Number'),
79 79
                                 Forms\Components\DatePicker::make('date')
80
-                                    ->label('Bill Date')
80
+                                    ->label('Bill date')
81 81
                                     ->default(now())
82 82
                                     ->disabled(function (?Bill $record) {
83 83
                                         return $record?->hasPayments();
84 84
                                     })
85 85
                                     ->required(),
86 86
                                 Forms\Components\DatePicker::make('due_date')
87
-                                    ->label('Due Date')
87
+                                    ->label('Due date')
88 88
                                     ->default(function () use ($company) {
89 89
                                         return now()->addDays($company->defaultBill->payment_terms->getDays());
90 90
                                     })
91 91
                                     ->required(),
92 92
                                 Forms\Components\Select::make('discount_method')
93
-                                    ->label('Discount Method')
93
+                                    ->label('Discount method')
94 94
                                     ->options(DocumentDiscountMethod::class)
95 95
                                     ->selectablePlaceholder(false)
96 96
                                     ->default(DocumentDiscountMethod::PerLineItem)
@@ -260,12 +260,12 @@ class BillResource extends Resource
260 260
                     ->sortable()
261 261
                     ->toggleable(),
262 262
                 Tables\Columns\TextColumn::make('amount_paid')
263
-                    ->label('Amount Paid')
263
+                    ->label('Amount paid')
264 264
                     ->currencyWithConversion(static fn (Bill $record) => $record->currency_code)
265 265
                     ->sortable()
266 266
                     ->toggleable(),
267 267
                 Tables\Columns\TextColumn::make('amount_due')
268
-                    ->label('Amount Due')
268
+                    ->label('Amount due')
269 269
                     ->currencyWithConversion(static fn (Bill $record) => $record->currency_code)
270 270
                     ->sortable(),
271 271
             ])
@@ -278,99 +278,101 @@ class BillResource extends Resource
278 278
                     ->options(BillStatus::class)
279 279
                     ->native(false),
280 280
                 Tables\Filters\TernaryFilter::make('has_payments')
281
-                    ->label('Has Payments')
281
+                    ->label('Has payments')
282 282
                     ->queries(
283 283
                         true: fn (Builder $query) => $query->whereHas('payments'),
284 284
                         false: fn (Builder $query) => $query->whereDoesntHave('payments'),
285 285
                     ),
286 286
                 DateRangeFilter::make('date')
287
-                    ->fromLabel('From Date')
288
-                    ->untilLabel('To Date')
287
+                    ->fromLabel('From date')
288
+                    ->untilLabel('To date')
289 289
                     ->indicatorLabel('Date'),
290 290
                 DateRangeFilter::make('due_date')
291
-                    ->fromLabel('From Due Date')
292
-                    ->untilLabel('To Due Date')
291
+                    ->fromLabel('From due date')
292
+                    ->untilLabel('To due date')
293 293
                     ->indicatorLabel('Due'),
294 294
             ])
295 295
             ->actions([
296 296
                 Tables\Actions\ActionGroup::make([
297
-                    Tables\Actions\EditAction::make(),
298
-                    Tables\Actions\ViewAction::make(),
299
-                    Tables\Actions\DeleteAction::make(),
300
-                    Bill::getReplicateAction(Tables\Actions\ReplicateAction::class),
301
-                    Tables\Actions\Action::make('recordPayment')
302
-                        ->label('Record Payment')
303
-                        ->stickyModalHeader()
304
-                        ->stickyModalFooter()
305
-                        ->modalFooterActionsAlignment(Alignment::End)
306
-                        ->modalWidth(MaxWidth::TwoExtraLarge)
307
-                        ->icon('heroicon-o-credit-card')
308
-                        ->visible(function (Bill $record) {
309
-                            return $record->canRecordPayment();
310
-                        })
311
-                        ->mountUsing(function (Bill $record, Form $form) {
312
-                            $form->fill([
313
-                                'posted_at' => now(),
314
-                                'amount' => $record->amount_due,
315
-                            ]);
316
-                        })
317
-                        ->databaseTransaction()
318
-                        ->successNotificationTitle('Payment Recorded')
319
-                        ->form([
320
-                            Forms\Components\DatePicker::make('posted_at')
321
-                                ->label('Date'),
322
-                            Forms\Components\TextInput::make('amount')
323
-                                ->label('Amount')
324
-                                ->required()
325
-                                ->money(fn (Bill $record) => $record->currency_code)
326
-                                ->live(onBlur: true)
327
-                                ->helperText(function (Bill $record, $state) {
328
-                                    $billCurrency = $record->currency_code;
329
-                                    if (! CurrencyConverter::isValidAmount($state, $billCurrency)) {
330
-                                        return null;
331
-                                    }
332
-
333
-                                    $amountDue = $record->getRawOriginal('amount_due');
334
-                                    $amount = CurrencyConverter::convertToCents($state, $billCurrency);
335
-
336
-                                    if ($amount <= 0) {
337
-                                        return 'Please enter a valid positive amount';
338
-                                    }
339
-
340
-                                    $newAmountDue = $amountDue - $amount;
341
-
342
-                                    return match (true) {
343
-                                        $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $billCurrency),
344
-                                        $newAmountDue === 0 => 'Bill will be fully paid',
345
-                                        default => 'Amount exceeds bill total by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $billCurrency),
346
-                                    };
347
-                                })
348
-                                ->rules([
349
-                                    static fn (Bill $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) {
350
-                                        if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) {
351
-                                            $fail('Please enter a valid amount');
297
+                    Tables\Actions\ActionGroup::make([
298
+                        Tables\Actions\EditAction::make(),
299
+                        Tables\Actions\ViewAction::make(),
300
+                        Bill::getReplicateAction(Tables\Actions\ReplicateAction::class),
301
+                        Tables\Actions\Action::make('recordPayment')
302
+                            ->label('Record payment')
303
+                            ->stickyModalHeader()
304
+                            ->stickyModalFooter()
305
+                            ->modalFooterActionsAlignment(Alignment::End)
306
+                            ->modalWidth(MaxWidth::TwoExtraLarge)
307
+                            ->icon('heroicon-o-credit-card')
308
+                            ->visible(function (Bill $record) {
309
+                                return $record->canRecordPayment();
310
+                            })
311
+                            ->mountUsing(function (Bill $record, Form $form) {
312
+                                $form->fill([
313
+                                    'posted_at' => now(),
314
+                                    'amount' => $record->amount_due,
315
+                                ]);
316
+                            })
317
+                            ->databaseTransaction()
318
+                            ->successNotificationTitle('Payment recorded')
319
+                            ->form([
320
+                                Forms\Components\DatePicker::make('posted_at')
321
+                                    ->label('Date'),
322
+                                Forms\Components\TextInput::make('amount')
323
+                                    ->label('Amount')
324
+                                    ->required()
325
+                                    ->money(fn (Bill $record) => $record->currency_code)
326
+                                    ->live(onBlur: true)
327
+                                    ->helperText(function (Bill $record, $state) {
328
+                                        $billCurrency = $record->currency_code;
329
+                                        if (! CurrencyConverter::isValidAmount($state, $billCurrency)) {
330
+                                            return null;
352 331
                                         }
353
-                                    },
354
-                                ]),
355
-                            Forms\Components\Select::make('payment_method')
356
-                                ->label('Payment Method')
357
-                                ->required()
358
-                                ->options(PaymentMethod::class),
359
-                            Forms\Components\Select::make('bank_account_id')
360
-                                ->label('Account')
361
-                                ->required()
362
-                                ->options(BankAccount::query()
363
-                                    ->get()
364
-                                    ->pluck('account.name', 'id'))
365
-                                ->searchable(),
366
-                            Forms\Components\Textarea::make('notes')
367
-                                ->label('Notes'),
368
-                        ])
369
-                        ->action(function (Bill $record, Tables\Actions\Action $action, array $data) {
370
-                            $record->recordPayment($data);
371 332
 
372
-                            $action->success();
373
-                        }),
333
+                                        $amountDue = $record->getRawOriginal('amount_due');
334
+                                        $amount = CurrencyConverter::convertToCents($state, $billCurrency);
335
+
336
+                                        if ($amount <= 0) {
337
+                                            return 'Please enter a valid positive amount';
338
+                                        }
339
+
340
+                                        $newAmountDue = $amountDue - $amount;
341
+
342
+                                        return match (true) {
343
+                                            $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $billCurrency),
344
+                                            $newAmountDue === 0 => 'Bill will be fully paid',
345
+                                            default => 'Amount exceeds bill total by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $billCurrency),
346
+                                        };
347
+                                    })
348
+                                    ->rules([
349
+                                        static fn (Bill $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) {
350
+                                            if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) {
351
+                                                $fail('Please enter a valid amount');
352
+                                            }
353
+                                        },
354
+                                    ]),
355
+                                Forms\Components\Select::make('payment_method')
356
+                                    ->label('Payment method')
357
+                                    ->required()
358
+                                    ->options(PaymentMethod::class),
359
+                                Forms\Components\Select::make('bank_account_id')
360
+                                    ->label('Account')
361
+                                    ->required()
362
+                                    ->options(BankAccount::query()
363
+                                        ->get()
364
+                                        ->pluck('account.name', 'id'))
365
+                                    ->searchable(),
366
+                                Forms\Components\Textarea::make('notes')
367
+                                    ->label('Notes'),
368
+                            ])
369
+                            ->action(function (Bill $record, Tables\Actions\Action $action, array $data) {
370
+                                $record->recordPayment($data);
371
+
372
+                                $action->success();
373
+                            }),
374
+                    ])->dropdown(false),
375
+                    Tables\Actions\DeleteAction::make(),
374 376
                 ]),
375 377
             ])
376 378
             ->bulkActions([
@@ -380,8 +382,8 @@ class BillResource extends Resource
380 382
                         ->label('Replicate')
381 383
                         ->modalWidth(MaxWidth::Large)
382 384
                         ->modalDescription('Replicating bills will also replicate their line items. Are you sure you want to proceed?')
383
-                        ->successNotificationTitle('Bills Replicated Successfully')
384
-                        ->failureNotificationTitle('Failed to Replicate Bills')
385
+                        ->successNotificationTitle('Bills replicated successfully')
386
+                        ->failureNotificationTitle('Failed to replicate bills')
385 387
                         ->databaseTransaction()
386 388
                         ->deselectRecordsAfterCompletion()
387 389
                         ->excludeAttributes([
@@ -413,22 +415,22 @@ class BillResource extends Resource
413 415
                             'updated_at',
414 416
                         ]),
415 417
                     Tables\Actions\BulkAction::make('recordPayments')
416
-                        ->label('Record Payments')
418
+                        ->label('Record payments')
417 419
                         ->icon('heroicon-o-credit-card')
418 420
                         ->stickyModalHeader()
419 421
                         ->stickyModalFooter()
420 422
                         ->modalFooterActionsAlignment(Alignment::End)
421 423
                         ->modalWidth(MaxWidth::TwoExtraLarge)
422 424
                         ->databaseTransaction()
423
-                        ->successNotificationTitle('Payments Recorded')
424
-                        ->failureNotificationTitle('Failed to Record Payments')
425
+                        ->successNotificationTitle('Payments recorded')
426
+                        ->failureNotificationTitle('Failed to record payments')
425 427
                         ->deselectRecordsAfterCompletion()
426 428
                         ->beforeFormFilled(function (Collection $records, Tables\Actions\BulkAction $action) {
427 429
                             $isInvalid = $records->contains(fn (Bill $bill) => ! $bill->canRecordPayment());
428 430
 
429 431
                             if ($isInvalid) {
430 432
                                 Notification::make()
431
-                                    ->title('Payment Recording Failed')
433
+                                    ->title('Payment recording failed')
432 434
                                     ->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.')
433 435
                                     ->persistent()
434 436
                                     ->danger()
@@ -460,7 +462,7 @@ class BillResource extends Resource
460 462
                                     },
461 463
                                 ]),
462 464
                             Forms\Components\Select::make('payment_method')
463
-                                ->label('Payment Method')
465
+                                ->label('Payment method')
464 466
                                 ->required()
465 467
                                 ->options(PaymentMethod::class),
466 468
                             Forms\Components\Select::make('bank_account_id')
@@ -481,7 +483,7 @@ class BillResource extends Resource
481 483
                                 $formattedTotalAmountDue = CurrencyConverter::formatCentsToMoney($totalAmountDue);
482 484
 
483 485
                                 Notification::make()
484
-                                    ->title('Excess Payment Amount')
486
+                                    ->title('Excess payment amount')
485 487
                                     ->body("The payment amount exceeds the total amount due of {$formattedTotalAmountDue}. Please adjust the payment amount and try again.")
486 488
                                     ->persistent()
487 489
                                     ->warning()

+ 8
- 4
app/Filament/Company/Resources/Purchases/BillResource/Pages/ViewBill.php 파일 보기

@@ -25,10 +25,14 @@ class ViewBill extends ViewRecord
25 25
     protected function getHeaderActions(): array
26 26
     {
27 27
         return [
28
+            Actions\EditAction::make()
29
+                ->label('Edit bill')
30
+                ->outlined(),
28 31
             Actions\ActionGroup::make([
29
-                Actions\EditAction::make(),
32
+                Actions\ActionGroup::make([
33
+                    Bill::getReplicateAction(),
34
+                ])->dropdown(false),
30 35
                 Actions\DeleteAction::make(),
31
-                Bill::getReplicateAction(),
32 36
             ])
33 37
                 ->label('Actions')
34 38
                 ->button()
@@ -60,7 +64,7 @@ class ViewBill extends ViewRecord
60 64
                             ->label('Total')
61 65
                             ->money(),
62 66
                         TextEntry::make('amount_due')
63
-                            ->label('Amount Due')
67
+                            ->label('Amount due')
64 68
                             ->money(),
65 69
                         TextEntry::make('date')
66 70
                             ->label('Date')
@@ -69,7 +73,7 @@ class ViewBill extends ViewRecord
69 73
                             ->label('Due')
70 74
                             ->asRelativeDay(),
71 75
                         TextEntry::make('paid_at')
72
-                            ->label('Paid At')
76
+                            ->label('Paid at')
73 77
                             ->placeholder('Not Paid')
74 78
                             ->date(),
75 79
                     ]),

+ 3
- 3
app/Filament/Company/Resources/Purchases/BillResource/RelationManagers/PaymentsRelationManager.php 파일 보기

@@ -87,7 +87,7 @@ class PaymentsRelationManager extends RelationManager
87 87
                         },
88 88
                     ]),
89 89
                 Forms\Components\Select::make('payment_method')
90
-                    ->label('Payment Method')
90
+                    ->label('Payment method')
91 91
                     ->required()
92 92
                     ->options(PaymentMethod::class),
93 93
                 Forms\Components\Select::make('bank_account_id')
@@ -140,7 +140,7 @@ class PaymentsRelationManager extends RelationManager
140 140
             ])
141 141
             ->headerActions([
142 142
                 Tables\Actions\CreateAction::make()
143
-                    ->label('Record Payment')
143
+                    ->label('Record payment')
144 144
                     ->modalHeading(fn (Tables\Actions\CreateAction $action) => $action->getLabel())
145 145
                     ->modalWidth(MaxWidth::TwoExtraLarge)
146 146
                     ->visible(function () {
@@ -154,7 +154,7 @@ class PaymentsRelationManager extends RelationManager
154 154
                         ]);
155 155
                     })
156 156
                     ->databaseTransaction()
157
-                    ->successNotificationTitle('Payment Recorded')
157
+                    ->successNotificationTitle('Payment recorded')
158 158
                     ->action(function (Tables\Actions\CreateAction $action, array $data) {
159 159
                         /** @var Bill $record */
160 160
                         $record = $this->getOwnerRecord();

+ 14
- 11
app/Filament/Company/Resources/Purchases/VendorResource.php 파일 보기

@@ -34,11 +34,11 @@ class VendorResource extends Resource
34 34
                             ->columns(2)
35 35
                             ->schema([
36 36
                                 Forms\Components\TextInput::make('name')
37
-                                    ->label('Vendor Name')
37
+                                    ->label('Vendor name')
38 38
                                     ->required()
39 39
                                     ->maxLength(255),
40 40
                                 Forms\Components\Radio::make('type')
41
-                                    ->label('Vendor Type')
41
+                                    ->label('Vendor type')
42 42
                                     ->required()
43 43
                                     ->live()
44 44
                                     ->options(VendorType::class)
@@ -48,13 +48,13 @@ class VendorResource extends Resource
48 48
                                     ->nullable()
49 49
                                     ->visible(static fn (Forms\Get $get) => VendorType::parse($get('type')) === VendorType::Regular),
50 50
                                 Forms\Components\Select::make('contractor_type')
51
-                                    ->label('Contractor Type')
51
+                                    ->label('Contractor type')
52 52
                                     ->required()
53 53
                                     ->live()
54 54
                                     ->visible(static fn (Forms\Get $get) => VendorType::parse($get('type')) === VendorType::Contractor)
55 55
                                     ->options(ContractorType::class),
56 56
                                 Forms\Components\TextInput::make('ssn')
57
-                                    ->label('Social Security Number')
57
+                                    ->label('Social security number')
58 58
                                     ->required()
59 59
                                     ->live()
60 60
                                     ->mask('999-99-9999')
@@ -63,7 +63,7 @@ class VendorResource extends Resource
63 63
                                     ->visible(static fn (Forms\Get $get) => ContractorType::parse($get('contractor_type')) === ContractorType::Individual)
64 64
                                     ->maxLength(255),
65 65
                                 Forms\Components\TextInput::make('ein')
66
-                                    ->label('Employer Identification Number')
66
+                                    ->label('Employer identification number')
67 67
                                     ->required()
68 68
                                     ->live()
69 69
                                     ->mask('99-9999999')
@@ -85,11 +85,11 @@ class VendorResource extends Resource
85 85
                                 Forms\Components\Hidden::make('is_primary')
86 86
                                     ->default(true),
87 87
                                 Forms\Components\TextInput::make('first_name')
88
-                                    ->label('First Name')
88
+                                    ->label('First name')
89 89
                                     ->required()
90 90
                                     ->maxLength(255),
91 91
                                 Forms\Components\TextInput::make('last_name')
92
-                                    ->label('Last Name')
92
+                                    ->label('Last name')
93 93
                                     ->required()
94 94
                                     ->maxLength(255),
95 95
                                 Forms\Components\TextInput::make('email')
@@ -123,7 +123,7 @@ class VendorResource extends Resource
123 123
                                         Forms\Components\Builder\Block::make('toll_free')
124 124
                                             ->schema([
125 125
                                                 Forms\Components\TextInput::make('number')
126
-                                                    ->label('Toll Free')
126
+                                                    ->label('Toll free')
127 127
                                                     ->required()
128 128
                                                     ->maxLength(15),
129 129
                                             ])->maxItems(1),
@@ -177,7 +177,7 @@ class VendorResource extends Resource
177 177
                     ->toggleable(isToggledHiddenByDefault: true)
178 178
                     ->listWithLineBreaks(),
179 179
                 Tables\Columns\TextColumn::make('payable_balance')
180
-                    ->label('Payable Balance')
180
+                    ->label('Payable balance')
181 181
                     ->getStateUsing(function (Vendor $vendor) {
182 182
                         return $vendor->bills()
183 183
                             ->outstanding()
@@ -212,8 +212,11 @@ class VendorResource extends Resource
212 212
             ])
213 213
             ->actions([
214 214
                 Tables\Actions\ActionGroup::make([
215
-                    Tables\Actions\EditAction::make(),
216
-                    Tables\Actions\ViewAction::make(),
215
+                    Tables\Actions\ActionGroup::make([
216
+                        Tables\Actions\EditAction::make(),
217
+                        Tables\Actions\ViewAction::make(),
218
+                    ])->dropdown(false),
219
+                    Tables\Actions\DeleteAction::make(),
217 220
                 ]),
218 221
             ])
219 222
             ->bulkActions([

+ 34
- 2
app/Filament/Company/Resources/Purchases/VendorResource/Pages/ViewVendor.php 파일 보기

@@ -2,12 +2,19 @@
2 2
 
3 3
 namespace App\Filament\Company\Resources\Purchases\VendorResource\Pages;
4 4
 
5
+use App\Filament\Company\Resources\Purchases\BillResource\Pages\CreateBill;
5 6
 use App\Filament\Company\Resources\Purchases\VendorResource;
6 7
 use App\Filament\Company\Resources\Purchases\VendorResource\RelationManagers;
8
+use Filament\Actions\Action;
9
+use Filament\Actions\ActionGroup;
10
+use Filament\Actions\DeleteAction;
11
+use Filament\Actions\EditAction;
7 12
 use Filament\Infolists\Components\Section;
8 13
 use Filament\Infolists\Components\TextEntry;
9 14
 use Filament\Infolists\Infolist;
10 15
 use Filament\Resources\Pages\ViewRecord;
16
+use Filament\Support\Enums\IconPosition;
17
+use Filament\Support\Enums\IconSize;
11 18
 
12 19
 class ViewVendor extends ViewRecord
13 20
 {
@@ -25,6 +32,31 @@ class ViewVendor extends ViewRecord
25 32
         return $this->record->name;
26 33
     }
27 34
 
35
+    protected function getHeaderActions(): array
36
+    {
37
+        return [
38
+            EditAction::make()
39
+                ->label('Edit vendor')
40
+                ->outlined(),
41
+            ActionGroup::make([
42
+                ActionGroup::make([
43
+                    Action::make('newBill')
44
+                        ->label('New bill')
45
+                        ->icon('heroicon-m-document-plus')
46
+                        ->url(CreateBill::getUrl(['vendor' => $this->record->getKey()])),
47
+                ])->dropdown(false),
48
+                DeleteAction::make(),
49
+            ])
50
+                ->label('Actions')
51
+                ->button()
52
+                ->outlined()
53
+                ->dropdownPlacement('bottom-end')
54
+                ->icon('heroicon-c-chevron-down')
55
+                ->iconSize(IconSize::Small)
56
+                ->iconPosition(IconPosition::After),
57
+        ];
58
+    }
59
+
28 60
     protected function getHeaderWidgets(): array
29 61
     {
30 62
         return [
@@ -44,7 +76,7 @@ class ViewVendor extends ViewRecord
44 76
                         TextEntry::make('contact.email')
45 77
                             ->label('Email'),
46 78
                         TextEntry::make('contact.first_available_phone')
47
-                            ->label('Primary Phone'),
79
+                            ->label('Primary phone'),
48 80
                         TextEntry::make('website')
49 81
                             ->label('Website')
50 82
                             ->url(static fn ($state) => $state, true),
@@ -53,7 +85,7 @@ class ViewVendor extends ViewRecord
53 85
                     ->columns()
54 86
                     ->schema([
55 87
                         TextEntry::make('address.address_string')
56
-                            ->label('Billing Address')
88
+                            ->label('Billing address')
57 89
                             ->listWithLineBreaks(),
58 90
                         TextEntry::make('notes'),
59 91
                     ]),

+ 14
- 11
app/Filament/Company/Resources/Sales/ClientResource.php 파일 보기

@@ -34,7 +34,7 @@ class ClientResource extends Resource
34 34
                             ->columns()
35 35
                             ->schema([
36 36
                                 Forms\Components\TextInput::make('name')
37
-                                    ->label('Client Name')
37
+                                    ->label('Client name')
38 38
                                     ->required()
39 39
                                     ->maxLength(255),
40 40
                                 Forms\Components\TextInput::make('account_number')
@@ -52,11 +52,11 @@ class ClientResource extends Resource
52 52
                                 Forms\Components\Hidden::make('is_primary')
53 53
                                     ->default(true),
54 54
                                 Forms\Components\TextInput::make('first_name')
55
-                                    ->label('First Name')
55
+                                    ->label('First name')
56 56
                                     ->required()
57 57
                                     ->maxLength(255),
58 58
                                 Forms\Components\TextInput::make('last_name')
59
-                                    ->label('Last Name')
59
+                                    ->label('Last name')
60 60
                                     ->required()
61 61
                                     ->maxLength(255),
62 62
                                 Forms\Components\TextInput::make('email')
@@ -90,7 +90,7 @@ class ClientResource extends Resource
90 90
                                         Forms\Components\Builder\Block::make('toll_free')
91 91
                                             ->schema([
92 92
                                                 Forms\Components\TextInput::make('number')
93
-                                                    ->label('Toll Free')
93
+                                                    ->label('Toll free')
94 94
                                                     ->required()
95 95
                                                     ->maxLength(15),
96 96
                                             ])->maxItems(1),
@@ -137,12 +137,12 @@ class ClientResource extends Resource
137 137
                             ->addActionLabel('Add Contact')
138 138
                             ->schema([
139 139
                                 Forms\Components\TextInput::make('first_name')
140
-                                    ->label('First Name')
140
+                                    ->label('First name')
141 141
                                     ->required()
142 142
                                     ->live(onBlur: true)
143 143
                                     ->maxLength(255),
144 144
                                 Forms\Components\TextInput::make('last_name')
145
-                                    ->label('Last Name')
145
+                                    ->label('Last name')
146 146
                                     ->required()
147 147
                                     ->live(onBlur: true)
148 148
                                     ->maxLength(255),
@@ -206,7 +206,7 @@ class ClientResource extends Resource
206 206
                             ->contained(false)
207 207
                             ->schema([
208 208
                                 Forms\Components\Checkbox::make('same_as_billing')
209
-                                    ->label('Same as Billing Address')
209
+                                    ->label('Same as billing address')
210 210
                                     ->live()
211 211
                                     ->afterStateHydrated(function (?Address $record, Forms\Components\Checkbox $component) {
212 212
                                         if (! $record || $record->parent_address_id) {
@@ -239,7 +239,7 @@ class ClientResource extends Resource
239 239
                                 AddressFields::make()
240 240
                                     ->visible(static fn (Get $get) => ! $get('same_as_billing')),
241 241
                                 Forms\Components\Textarea::make('notes')
242
-                                    ->label('Delivery Instructions')
242
+                                    ->label('Delivery instructions')
243 243
                                     ->maxLength(255)
244 244
                                     ->columnSpanFull(),
245 245
                             ])->columns(),
@@ -265,7 +265,7 @@ class ClientResource extends Resource
265 265
                     ->toggleable()
266 266
                     ->state(static fn (Client $client) => $client->primaryContact->first_available_phone),
267 267
                 Tables\Columns\TextColumn::make('billingAddress.address_string')
268
-                    ->label('Billing Address')
268
+                    ->label('Billing address')
269 269
                     ->searchable()
270 270
                     ->toggleable(isToggledHiddenByDefault: true)
271 271
                     ->listWithLineBreaks(),
@@ -304,8 +304,11 @@ class ClientResource extends Resource
304 304
             ])
305 305
             ->actions([
306 306
                 Tables\Actions\ActionGroup::make([
307
-                    Tables\Actions\EditAction::make(),
308
-                    Tables\Actions\ViewAction::make(),
307
+                    Tables\Actions\ActionGroup::make([
308
+                        Tables\Actions\EditAction::make(),
309
+                        Tables\Actions\ViewAction::make(),
310
+                    ])->dropdown(false),
311
+                    Tables\Actions\DeleteAction::make(),
309 312
                 ]),
310 313
             ])
311 314
             ->bulkActions([

+ 48
- 6
app/Filament/Company/Resources/Sales/ClientResource/Pages/ViewClient.php 파일 보기

@@ -4,10 +4,19 @@ namespace App\Filament\Company\Resources\Sales\ClientResource\Pages;
4 4
 
5 5
 use App\Filament\Company\Resources\Sales\ClientResource;
6 6
 use App\Filament\Company\Resources\Sales\ClientResource\RelationManagers;
7
+use App\Filament\Company\Resources\Sales\EstimateResource\Pages\CreateEstimate;
8
+use App\Filament\Company\Resources\Sales\InvoiceResource\Pages\CreateInvoice;
9
+use App\Filament\Company\Resources\Sales\RecurringInvoiceResource\Pages\CreateRecurringInvoice;
10
+use Filament\Actions\Action;
11
+use Filament\Actions\ActionGroup;
12
+use Filament\Actions\DeleteAction;
13
+use Filament\Actions\EditAction;
7 14
 use Filament\Infolists\Components\Section;
8 15
 use Filament\Infolists\Components\TextEntry;
9 16
 use Filament\Infolists\Infolist;
10 17
 use Filament\Resources\Pages\ViewRecord;
18
+use Filament\Support\Enums\IconPosition;
19
+use Filament\Support\Enums\IconSize;
11 20
 use Illuminate\Contracts\Support\Htmlable;
12 21
 
13 22
 class ViewClient extends ViewRecord
@@ -28,6 +37,39 @@ class ViewClient extends ViewRecord
28 37
         return $this->record->name;
29 38
     }
30 39
 
40
+    protected function getHeaderActions(): array
41
+    {
42
+        return [
43
+            EditAction::make()
44
+                ->label('Edit client')
45
+                ->outlined(),
46
+            ActionGroup::make([
47
+                ActionGroup::make([
48
+                    Action::make('newInvoice')
49
+                        ->label('New invoice')
50
+                        ->icon('heroicon-m-document-plus')
51
+                        ->url(CreateInvoice::getUrl(['client' => $this->record->getKey()])),
52
+                    Action::make('newEstimate')
53
+                        ->label('New estimate')
54
+                        ->icon('heroicon-m-document-duplicate')
55
+                        ->url(CreateEstimate::getUrl(['client' => $this->record->getKey()])),
56
+                    Action::make('newRecurringInvoice')
57
+                        ->label('New recurring invoice')
58
+                        ->icon('heroicon-m-arrow-path')
59
+                        ->url(CreateRecurringInvoice::getUrl(['client' => $this->record->getKey()])),
60
+                ])->dropdown(false),
61
+                DeleteAction::make(),
62
+            ])
63
+                ->label('Actions')
64
+                ->button()
65
+                ->outlined()
66
+                ->dropdownPlacement('bottom-end')
67
+                ->icon('heroicon-c-chevron-down')
68
+                ->iconSize(IconSize::Small)
69
+                ->iconPosition(IconPosition::After),
70
+        ];
71
+    }
72
+
31 73
     protected function getHeaderWidgets(): array
32 74
     {
33 75
         return [
@@ -43,11 +85,11 @@ class ViewClient extends ViewRecord
43 85
                     ->columns()
44 86
                     ->schema([
45 87
                         TextEntry::make('primaryContact.full_name')
46
-                            ->label('Primary Contact'),
88
+                            ->label('Primary contact'),
47 89
                         TextEntry::make('primaryContact.email')
48
-                            ->label('Primary Email'),
90
+                            ->label('Primary email'),
49 91
                         TextEntry::make('primaryContact.first_available_phone')
50
-                            ->label('Primary Phone'),
92
+                            ->label('Primary phone'),
51 93
                         TextEntry::make('website')
52 94
                             ->label('Website')
53 95
                             ->url(static fn ($state) => $state, true),
@@ -56,13 +98,13 @@ class ViewClient extends ViewRecord
56 98
                     ->columns()
57 99
                     ->schema([
58 100
                         TextEntry::make('billingAddress.address_string')
59
-                            ->label('Billing Address')
101
+                            ->label('Billing address')
60 102
                             ->listWithLineBreaks(),
61 103
                         TextEntry::make('shippingAddress.address_string')
62
-                            ->label('Shipping Address')
104
+                            ->label('Shipping address')
63 105
                             ->listWithLineBreaks(),
64 106
                         TextEntry::make('notes')
65
-                            ->label('Delivery Instructions'),
107
+                            ->label('Delivery instructions'),
66 108
                     ]),
67 109
             ]);
68 110
     }

+ 37
- 35
app/Filament/Company/Resources/Sales/EstimateResource.php 파일 보기

@@ -111,12 +111,12 @@ class EstimateResource extends Resource
111 111
                             ]),
112 112
                             Forms\Components\Group::make([
113 113
                                 Forms\Components\TextInput::make('estimate_number')
114
-                                    ->label('Estimate Number')
114
+                                    ->label('Estimate number')
115 115
                                     ->default(fn () => Estimate::getNextDocumentNumber()),
116 116
                                 Forms\Components\TextInput::make('reference_number')
117
-                                    ->label('Reference Number'),
117
+                                    ->label('Reference number'),
118 118
                                 Forms\Components\DatePicker::make('date')
119
-                                    ->label('Estimate Date')
119
+                                    ->label('Estimate date')
120 120
                                     ->live()
121 121
                                     ->default(now())
122 122
                                     ->afterStateUpdated(function (Forms\Set $set, Forms\Get $get, $state) {
@@ -128,7 +128,7 @@ class EstimateResource extends Resource
128 128
                                         }
129 129
                                     }),
130 130
                                 Forms\Components\DatePicker::make('expiration_date')
131
-                                    ->label('Expiration Date')
131
+                                    ->label('Expiration date')
132 132
                                     ->default(function () use ($company) {
133 133
                                         return now()->addDays($company->defaultInvoice->payment_terms->getDays());
134 134
                                     })
@@ -136,7 +136,7 @@ class EstimateResource extends Resource
136 136
                                         return $get('date') ?? now();
137 137
                                     }),
138 138
                                 Forms\Components\Select::make('discount_method')
139
-                                    ->label('Discount Method')
139
+                                    ->label('Discount method')
140 140
                                     ->options(DocumentDiscountMethod::class)
141 141
                                     ->selectablePlaceholder(false)
142 142
                                     ->default(DocumentDiscountMethod::PerLineItem)
@@ -292,7 +292,7 @@ class EstimateResource extends Resource
292 292
                     ->badge()
293 293
                     ->searchable(),
294 294
                 Tables\Columns\TextColumn::make('expiration_date')
295
-                    ->label('Expiration Date')
295
+                    ->label('Expiration date')
296 296
                     ->asRelativeDay()
297 297
                     ->sortable(),
298 298
                 Tables\Columns\TextColumn::make('date')
@@ -319,25 +319,27 @@ class EstimateResource extends Resource
319 319
                     ->options(EstimateStatus::class)
320 320
                     ->native(false),
321 321
                 DateRangeFilter::make('date')
322
-                    ->fromLabel('From Date')
323
-                    ->untilLabel('To Date')
322
+                    ->fromLabel('From date')
323
+                    ->untilLabel('To date')
324 324
                     ->indicatorLabel('Date'),
325 325
                 DateRangeFilter::make('expiration_date')
326
-                    ->fromLabel('From Expiration Date')
327
-                    ->untilLabel('To Expiration Date')
326
+                    ->fromLabel('From expiration date')
327
+                    ->untilLabel('To expiration date')
328 328
                     ->indicatorLabel('Due'),
329 329
             ])
330 330
             ->actions([
331 331
                 Tables\Actions\ActionGroup::make([
332
-                    Tables\Actions\EditAction::make(),
333
-                    Tables\Actions\ViewAction::make(),
332
+                    Tables\Actions\ActionGroup::make([
333
+                        Tables\Actions\EditAction::make(),
334
+                        Tables\Actions\ViewAction::make(),
335
+                        Estimate::getReplicateAction(Tables\Actions\ReplicateAction::class),
336
+                        Estimate::getApproveDraftAction(Tables\Actions\Action::class),
337
+                        Estimate::getMarkAsSentAction(Tables\Actions\Action::class),
338
+                        Estimate::getMarkAsAcceptedAction(Tables\Actions\Action::class),
339
+                        Estimate::getMarkAsDeclinedAction(Tables\Actions\Action::class),
340
+                        Estimate::getConvertToInvoiceAction(Tables\Actions\Action::class),
341
+                    ])->dropdown(false),
334 342
                     Tables\Actions\DeleteAction::make(),
335
-                    Estimate::getReplicateAction(Tables\Actions\ReplicateAction::class),
336
-                    Estimate::getApproveDraftAction(Tables\Actions\Action::class),
337
-                    Estimate::getMarkAsSentAction(Tables\Actions\Action::class),
338
-                    Estimate::getMarkAsAcceptedAction(Tables\Actions\Action::class),
339
-                    Estimate::getMarkAsDeclinedAction(Tables\Actions\Action::class),
340
-                    Estimate::getConvertToInvoiceAction(Tables\Actions\Action::class),
341 343
                 ]),
342 344
             ])
343 345
             ->bulkActions([
@@ -347,8 +349,8 @@ class EstimateResource extends Resource
347 349
                         ->label('Replicate')
348 350
                         ->modalWidth(MaxWidth::Large)
349 351
                         ->modalDescription('Replicating estimates will also replicate their line items. Are you sure you want to proceed?')
350
-                        ->successNotificationTitle('Estimates Replicated Successfully')
351
-                        ->failureNotificationTitle('Failed to Replicate Estimates')
352
+                        ->successNotificationTitle('Estimates replicated successfully')
353
+                        ->failureNotificationTitle('Failed to replicate estimates')
352 354
                         ->databaseTransaction()
353 355
                         ->deselectRecordsAfterCompletion()
354 356
                         ->excludeAttributes([
@@ -386,14 +388,14 @@ class EstimateResource extends Resource
386 388
                         ->label('Approve')
387 389
                         ->icon('heroicon-o-check-circle')
388 390
                         ->databaseTransaction()
389
-                        ->successNotificationTitle('Estimates Approved')
390
-                        ->failureNotificationTitle('Failed to Approve Estimates')
391
+                        ->successNotificationTitle('Estimates approved')
392
+                        ->failureNotificationTitle('Failed to approve estimates')
391 393
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
392 394
                             $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeApproved());
393 395
 
394 396
                             if ($isInvalid) {
395 397
                                 Notification::make()
396
-                                    ->title('Approval Failed')
398
+                                    ->title('Approval failed')
397 399
                                     ->body('Only draft estimates can be approved. Please adjust your selection and try again.')
398 400
                                     ->persistent()
399 401
                                     ->danger()
@@ -410,17 +412,17 @@ class EstimateResource extends Resource
410 412
                             $action->success();
411 413
                         }),
412 414
                     Tables\Actions\BulkAction::make('markAsSent')
413
-                        ->label('Mark as Sent')
415
+                        ->label('Mark as sent')
414 416
                         ->icon('heroicon-o-paper-airplane')
415 417
                         ->databaseTransaction()
416
-                        ->successNotificationTitle('Estimates Sent')
417
-                        ->failureNotificationTitle('Failed to Mark Estimates as Sent')
418
+                        ->successNotificationTitle('Estimates sent')
419
+                        ->failureNotificationTitle('Failed to mark estimates as sent')
418 420
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
419 421
                             $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsSent());
420 422
 
421 423
                             if ($isInvalid) {
422 424
                                 Notification::make()
423
-                                    ->title('Sending Failed')
425
+                                    ->title('Sending failed')
424 426
                                     ->body('Only unsent estimates can be marked as sent. Please adjust your selection and try again.')
425 427
                                     ->persistent()
426 428
                                     ->danger()
@@ -437,17 +439,17 @@ class EstimateResource extends Resource
437 439
                             $action->success();
438 440
                         }),
439 441
                     Tables\Actions\BulkAction::make('markAsAccepted')
440
-                        ->label('Mark as Accepted')
442
+                        ->label('Mark as accepted')
441 443
                         ->icon('heroicon-o-check-badge')
442 444
                         ->databaseTransaction()
443
-                        ->successNotificationTitle('Estimates Accepted')
444
-                        ->failureNotificationTitle('Failed to Mark Estimates as Accepted')
445
+                        ->successNotificationTitle('Estimates accepted')
446
+                        ->failureNotificationTitle('Failed to mark estimates as accepted')
445 447
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
446 448
                             $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsAccepted());
447 449
 
448 450
                             if ($isInvalid) {
449 451
                                 Notification::make()
450
-                                    ->title('Acceptance Failed')
452
+                                    ->title('Acceptance failed')
451 453
                                     ->body('Only sent estimates that haven\'t been accepted can be marked as accepted. Please adjust your selection and try again.')
452 454
                                     ->persistent()
453 455
                                     ->danger()
@@ -464,21 +466,21 @@ class EstimateResource extends Resource
464 466
                             $action->success();
465 467
                         }),
466 468
                     Tables\Actions\BulkAction::make('markAsDeclined')
467
-                        ->label('Mark as Declined')
469
+                        ->label('Mark as declined')
468 470
                         ->icon('heroicon-o-x-circle')
469 471
                         ->requiresConfirmation()
470 472
                         ->databaseTransaction()
471 473
                         ->color('danger')
472 474
                         ->modalHeading('Mark Estimates as Declined')
473 475
                         ->modalDescription('Are you sure you want to mark the selected estimates as declined? This action cannot be undone.')
474
-                        ->successNotificationTitle('Estimates Declined')
475
-                        ->failureNotificationTitle('Failed to Mark Estimates as Declined')
476
+                        ->successNotificationTitle('Estimates declined')
477
+                        ->failureNotificationTitle('Failed to mark estimates as declined')
476 478
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
477 479
                             $isInvalid = $records->contains(fn (Estimate $record) => ! $record->canBeMarkedAsDeclined());
478 480
 
479 481
                             if ($isInvalid) {
480 482
                                 Notification::make()
481
-                                    ->title('Declination Failed')
483
+                                    ->title('Declination failed')
482 484
                                     ->body('Only sent estimates that haven\'t been declined can be marked as declined. Please adjust your selection and try again.')
483 485
                                     ->persistent()
484 486
                                     ->danger()

+ 15
- 11
app/Filament/Company/Resources/Sales/EstimateResource/Pages/ViewEstimate.php 파일 보기

@@ -34,15 +34,19 @@ class ViewEstimate extends ViewRecord
34 34
     protected function getHeaderActions(): array
35 35
     {
36 36
         return [
37
+            Actions\EditAction::make()
38
+                ->label('Edit estimate')
39
+                ->outlined(),
37 40
             Actions\ActionGroup::make([
38
-                Actions\EditAction::make(),
41
+                Actions\ActionGroup::make([
42
+                    Estimate::getApproveDraftAction(),
43
+                    Estimate::getMarkAsSentAction(),
44
+                    Estimate::getMarkAsAcceptedAction(),
45
+                    Estimate::getMarkAsDeclinedAction(),
46
+                    Estimate::getReplicateAction(),
47
+                    Estimate::getConvertToInvoiceAction(),
48
+                ])->dropdown(false),
39 49
                 Actions\DeleteAction::make(),
40
-                Estimate::getApproveDraftAction(),
41
-                Estimate::getMarkAsSentAction(),
42
-                Estimate::getMarkAsAcceptedAction(),
43
-                Estimate::getMarkAsDeclinedAction(),
44
-                Estimate::getReplicateAction(),
45
-                Estimate::getConvertToInvoiceAction(),
46 50
             ])
47 51
                 ->label('Actions')
48 52
                 ->button()
@@ -73,18 +77,18 @@ class ViewEstimate extends ViewRecord
73 77
                                     ->weight(FontWeight::SemiBold)
74 78
                                     ->url(static fn (Estimate $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])),
75 79
                                 TextEntry::make('expiration_date')
76
-                                    ->label('Expiration Date')
80
+                                    ->label('Expiration date')
77 81
                                     ->asRelativeDay(),
78 82
                                 TextEntry::make('approved_at')
79
-                                    ->label('Approved At')
83
+                                    ->label('Approved at')
80 84
                                     ->placeholder('Not Approved')
81 85
                                     ->date(),
82 86
                                 TextEntry::make('last_sent_at')
83
-                                    ->label('Last Sent')
87
+                                    ->label('Last sent')
84 88
                                     ->placeholder('Never')
85 89
                                     ->date(),
86 90
                                 TextEntry::make('accepted_at')
87
-                                    ->label('Accepted At')
91
+                                    ->label('Accepted at')
88 92
                                     ->placeholder('Not Accepted')
89 93
                                     ->date(),
90 94
                             ])->columnSpan(1),

+ 110
- 108
app/Filament/Company/Resources/Sales/InvoiceResource.php 파일 보기

@@ -123,12 +123,12 @@ class InvoiceResource extends Resource
123 123
                             ]),
124 124
                             Forms\Components\Group::make([
125 125
                                 Forms\Components\TextInput::make('invoice_number')
126
-                                    ->label('Invoice Number')
126
+                                    ->label('Invoice number')
127 127
                                     ->default(fn () => Invoice::getNextDocumentNumber()),
128 128
                                 Forms\Components\TextInput::make('order_number')
129 129
                                     ->label('P.O/S.O Number'),
130 130
                                 Forms\Components\DatePicker::make('date')
131
-                                    ->label('Invoice Date')
131
+                                    ->label('Invoice date')
132 132
                                     ->live()
133 133
                                     ->default(now())
134 134
                                     ->disabled(function (?Invoice $record) {
@@ -143,7 +143,7 @@ class InvoiceResource extends Resource
143 143
                                         }
144 144
                                     }),
145 145
                                 Forms\Components\DatePicker::make('due_date')
146
-                                    ->label('Payment Due')
146
+                                    ->label('Payment due')
147 147
                                     ->default(function () use ($company) {
148 148
                                         return now()->addDays($company->defaultInvoice->payment_terms->getDays());
149 149
                                     })
@@ -151,7 +151,7 @@ class InvoiceResource extends Resource
151 151
                                         return $get('date') ?? now();
152 152
                                     }),
153 153
                                 Forms\Components\Select::make('discount_method')
154
-                                    ->label('Discount Method')
154
+                                    ->label('Discount method')
155 155
                                     ->options(DocumentDiscountMethod::class)
156 156
                                     ->selectablePlaceholder(false)
157 157
                                     ->default(DocumentDiscountMethod::PerLineItem)
@@ -342,13 +342,13 @@ class InvoiceResource extends Resource
342 342
                     ->toggleable()
343 343
                     ->alignEnd(),
344 344
                 Tables\Columns\TextColumn::make('amount_paid')
345
-                    ->label('Amount Paid')
345
+                    ->label('Amount paid')
346 346
                     ->currencyWithConversion(static fn (Invoice $record) => $record->currency_code)
347 347
                     ->sortable()
348 348
                     ->alignEnd()
349 349
                     ->showOnTabs(['unpaid']),
350 350
                 Tables\Columns\TextColumn::make('amount_due')
351
-                    ->label('Amount Due')
351
+                    ->label('Amount due')
352 352
                     ->currencyWithConversion(static fn (Invoice $record) => $record->currency_code)
353 353
                     ->sortable()
354 354
                     ->alignEnd()
@@ -363,13 +363,13 @@ class InvoiceResource extends Resource
363 363
                     ->options(InvoiceStatus::class)
364 364
                     ->native(false),
365 365
                 Tables\Filters\TernaryFilter::make('has_payments')
366
-                    ->label('Has Payments')
366
+                    ->label('Has payments')
367 367
                     ->queries(
368 368
                         true: fn (Builder $query) => $query->whereHas('payments'),
369 369
                         false: fn (Builder $query) => $query->whereDoesntHave('payments'),
370 370
                     ),
371 371
                 Tables\Filters\SelectFilter::make('source_type')
372
-                    ->label('Source Type')
372
+                    ->label('Source type')
373 373
                     ->options([
374 374
                         DocumentType::Estimate->value => DocumentType::Estimate->getLabel(),
375 375
                         DocumentType::RecurringInvoice->value => DocumentType::RecurringInvoice->getLabel(),
@@ -385,102 +385,104 @@ class InvoiceResource extends Resource
385 385
                         };
386 386
                     }),
387 387
                 DateRangeFilter::make('date')
388
-                    ->fromLabel('From Date')
389
-                    ->untilLabel('To Date')
388
+                    ->fromLabel('From date')
389
+                    ->untilLabel('To date')
390 390
                     ->indicatorLabel('Date'),
391 391
                 DateRangeFilter::make('due_date')
392
-                    ->fromLabel('From Due Date')
393
-                    ->untilLabel('To Due Date')
392
+                    ->fromLabel('From due date')
393
+                    ->untilLabel('To due date')
394 394
                     ->indicatorLabel('Due'),
395 395
             ])
396 396
             ->actions([
397 397
                 Tables\Actions\ActionGroup::make([
398
-                    Tables\Actions\EditAction::make()
399
-                        ->url(static fn (Invoice $record) => Pages\EditInvoice::getUrl(['record' => $record])),
400
-                    Tables\Actions\ViewAction::make()
401
-                        ->url(static fn (Invoice $record) => Pages\ViewInvoice::getUrl(['record' => $record])),
402
-                    Tables\Actions\DeleteAction::make(),
403
-                    Invoice::getReplicateAction(Tables\Actions\ReplicateAction::class),
404
-                    Invoice::getApproveDraftAction(Tables\Actions\Action::class),
405
-                    Invoice::getMarkAsSentAction(Tables\Actions\Action::class),
406
-                    Tables\Actions\Action::make('recordPayment')
407
-                        ->label(fn (Invoice $record) => $record->status === InvoiceStatus::Overpaid ? 'Refund Overpayment' : 'Record Payment')
408
-                        ->stickyModalHeader()
409
-                        ->stickyModalFooter()
410
-                        ->modalFooterActionsAlignment(Alignment::End)
411
-                        ->modalWidth(MaxWidth::TwoExtraLarge)
412
-                        ->icon('heroicon-o-credit-card')
413
-                        ->visible(function (Invoice $record) {
414
-                            return $record->canRecordPayment();
415
-                        })
416
-                        ->mountUsing(function (Invoice $record, Form $form) {
417
-                            $form->fill([
418
-                                'posted_at' => now(),
419
-                                'amount' => $record->status === InvoiceStatus::Overpaid ? ltrim($record->amount_due, '-') : $record->amount_due,
420
-                            ]);
421
-                        })
422
-                        ->databaseTransaction()
423
-                        ->successNotificationTitle('Payment Recorded')
424
-                        ->form([
425
-                            Forms\Components\DatePicker::make('posted_at')
426
-                                ->label('Date'),
427
-                            Forms\Components\TextInput::make('amount')
428
-                                ->label('Amount')
429
-                                ->required()
430
-                                ->money(fn (Invoice $record) => $record->currency_code)
431
-                                ->live(onBlur: true)
432
-                                ->helperText(function (Invoice $record, $state) {
433
-                                    $invoiceCurrency = $record->currency_code;
434
-                                    if (! CurrencyConverter::isValidAmount($state, $invoiceCurrency)) {
435
-                                        return null;
436
-                                    }
437
-
438
-                                    $amountDue = $record->getRawOriginal('amount_due');
439
-
440
-                                    $amount = CurrencyConverter::convertToCents($state, $invoiceCurrency);
441
-
442
-                                    if ($amount <= 0) {
443
-                                        return 'Please enter a valid positive amount';
444
-                                    }
445
-
446
-                                    if ($record->status === InvoiceStatus::Overpaid) {
447
-                                        $newAmountDue = $amountDue + $amount;
448
-                                    } else {
449
-                                        $newAmountDue = $amountDue - $amount;
450
-                                    }
451
-
452
-                                    return match (true) {
453
-                                        $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $invoiceCurrency),
454
-                                        $newAmountDue === 0 => 'Invoice will be fully paid',
455
-                                        default => 'Invoice will be overpaid by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $invoiceCurrency),
456
-                                    };
457
-                                })
458
-                                ->rules([
459
-                                    static fn (Invoice $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) {
460
-                                        if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) {
461
-                                            $fail('Please enter a valid amount');
398
+                    Tables\Actions\ActionGroup::make([
399
+                        Tables\Actions\EditAction::make()
400
+                            ->url(static fn (Invoice $record) => Pages\EditInvoice::getUrl(['record' => $record])),
401
+                        Tables\Actions\ViewAction::make()
402
+                            ->url(static fn (Invoice $record) => Pages\ViewInvoice::getUrl(['record' => $record])),
403
+                        Invoice::getReplicateAction(Tables\Actions\ReplicateAction::class),
404
+                        Invoice::getApproveDraftAction(Tables\Actions\Action::class),
405
+                        Invoice::getMarkAsSentAction(Tables\Actions\Action::class),
406
+                        Tables\Actions\Action::make('recordPayment')
407
+                            ->label(fn (Invoice $record) => $record->status === InvoiceStatus::Overpaid ? 'Refund Overpayment' : 'Record Payment')
408
+                            ->stickyModalHeader()
409
+                            ->stickyModalFooter()
410
+                            ->modalFooterActionsAlignment(Alignment::End)
411
+                            ->modalWidth(MaxWidth::TwoExtraLarge)
412
+                            ->icon('heroicon-o-credit-card')
413
+                            ->visible(function (Invoice $record) {
414
+                                return $record->canRecordPayment();
415
+                            })
416
+                            ->mountUsing(function (Invoice $record, Form $form) {
417
+                                $form->fill([
418
+                                    'posted_at' => now(),
419
+                                    'amount' => $record->status === InvoiceStatus::Overpaid ? ltrim($record->amount_due, '-') : $record->amount_due,
420
+                                ]);
421
+                            })
422
+                            ->databaseTransaction()
423
+                            ->successNotificationTitle('Payment recorded')
424
+                            ->form([
425
+                                Forms\Components\DatePicker::make('posted_at')
426
+                                    ->label('Date'),
427
+                                Forms\Components\TextInput::make('amount')
428
+                                    ->label('Amount')
429
+                                    ->required()
430
+                                    ->money(fn (Invoice $record) => $record->currency_code)
431
+                                    ->live(onBlur: true)
432
+                                    ->helperText(function (Invoice $record, $state) {
433
+                                        $invoiceCurrency = $record->currency_code;
434
+                                        if (! CurrencyConverter::isValidAmount($state, $invoiceCurrency)) {
435
+                                            return null;
462 436
                                         }
463
-                                    },
464
-                                ]),
465
-                            Forms\Components\Select::make('payment_method')
466
-                                ->label('Payment Method')
467
-                                ->required()
468
-                                ->options(PaymentMethod::class),
469
-                            Forms\Components\Select::make('bank_account_id')
470
-                                ->label('Account')
471
-                                ->required()
472
-                                ->options(BankAccount::query()
473
-                                    ->get()
474
-                                    ->pluck('account.name', 'id'))
475
-                                ->searchable(),
476
-                            Forms\Components\Textarea::make('notes')
477
-                                ->label('Notes'),
478
-                        ])
479
-                        ->action(function (Invoice $record, Tables\Actions\Action $action, array $data) {
480
-                            $record->recordPayment($data);
481 437
 
482
-                            $action->success();
483
-                        }),
438
+                                        $amountDue = $record->getRawOriginal('amount_due');
439
+
440
+                                        $amount = CurrencyConverter::convertToCents($state, $invoiceCurrency);
441
+
442
+                                        if ($amount <= 0) {
443
+                                            return 'Please enter a valid positive amount';
444
+                                        }
445
+
446
+                                        if ($record->status === InvoiceStatus::Overpaid) {
447
+                                            $newAmountDue = $amountDue + $amount;
448
+                                        } else {
449
+                                            $newAmountDue = $amountDue - $amount;
450
+                                        }
451
+
452
+                                        return match (true) {
453
+                                            $newAmountDue > 0 => 'Amount due after payment will be ' . CurrencyConverter::formatCentsToMoney($newAmountDue, $invoiceCurrency),
454
+                                            $newAmountDue === 0 => 'Invoice will be fully paid',
455
+                                            default => 'Invoice will be overpaid by ' . CurrencyConverter::formatCentsToMoney(abs($newAmountDue), $invoiceCurrency),
456
+                                        };
457
+                                    })
458
+                                    ->rules([
459
+                                        static fn (Invoice $record): Closure => static function (string $attribute, $value, Closure $fail) use ($record) {
460
+                                            if (! CurrencyConverter::isValidAmount($value, $record->currency_code)) {
461
+                                                $fail('Please enter a valid amount');
462
+                                            }
463
+                                        },
464
+                                    ]),
465
+                                Forms\Components\Select::make('payment_method')
466
+                                    ->label('Payment method')
467
+                                    ->required()
468
+                                    ->options(PaymentMethod::class),
469
+                                Forms\Components\Select::make('bank_account_id')
470
+                                    ->label('Account')
471
+                                    ->required()
472
+                                    ->options(BankAccount::query()
473
+                                        ->get()
474
+                                        ->pluck('account.name', 'id'))
475
+                                    ->searchable(),
476
+                                Forms\Components\Textarea::make('notes')
477
+                                    ->label('Notes'),
478
+                            ])
479
+                            ->action(function (Invoice $record, Tables\Actions\Action $action, array $data) {
480
+                                $record->recordPayment($data);
481
+
482
+                                $action->success();
483
+                            }),
484
+                    ])->dropdown(false),
485
+                    Tables\Actions\DeleteAction::make(),
484 486
                 ]),
485 487
             ])
486 488
             ->bulkActions([
@@ -490,8 +492,8 @@ class InvoiceResource extends Resource
490 492
                         ->label('Replicate')
491 493
                         ->modalWidth(MaxWidth::Large)
492 494
                         ->modalDescription('Replicating invoices will also replicate their line items. Are you sure you want to proceed?')
493
-                        ->successNotificationTitle('Invoices Replicated Successfully')
494
-                        ->failureNotificationTitle('Failed to Replicate Invoices')
495
+                        ->successNotificationTitle('Invoices replicated successfully')
496
+                        ->failureNotificationTitle('Failed to replicate invoices')
495 497
                         ->databaseTransaction()
496 498
                         ->deselectRecordsAfterCompletion()
497 499
                         ->excludeAttributes([
@@ -529,14 +531,14 @@ class InvoiceResource extends Resource
529 531
                         ->label('Approve')
530 532
                         ->icon('heroicon-o-check-circle')
531 533
                         ->databaseTransaction()
532
-                        ->successNotificationTitle('Invoices Approved')
534
+                        ->successNotificationTitle('Invoices approved')
533 535
                         ->failureNotificationTitle('Failed to Approve Invoices')
534 536
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
535 537
                             $isInvalid = $records->contains(fn (Invoice $record) => ! $record->canBeApproved());
536 538
 
537 539
                             if ($isInvalid) {
538 540
                                 Notification::make()
539
-                                    ->title('Approval Failed')
541
+                                    ->title('Approval failed')
540 542
                                     ->body('Only draft invoices can be approved. Please adjust your selection and try again.')
541 543
                                     ->persistent()
542 544
                                     ->danger()
@@ -553,17 +555,17 @@ class InvoiceResource extends Resource
553 555
                             $action->success();
554 556
                         }),
555 557
                     Tables\Actions\BulkAction::make('markAsSent')
556
-                        ->label('Mark as Sent')
558
+                        ->label('Mark as sent')
557 559
                         ->icon('heroicon-o-paper-airplane')
558 560
                         ->databaseTransaction()
559
-                        ->successNotificationTitle('Invoices Sent')
561
+                        ->successNotificationTitle('Invoices sent')
560 562
                         ->failureNotificationTitle('Failed to Mark Invoices as Sent')
561 563
                         ->before(function (Collection $records, Tables\Actions\BulkAction $action) {
562 564
                             $isInvalid = $records->contains(fn (Invoice $record) => ! $record->canBeMarkedAsSent());
563 565
 
564 566
                             if ($isInvalid) {
565 567
                                 Notification::make()
566
-                                    ->title('Sending Failed')
568
+                                    ->title('Sending failed')
567 569
                                     ->body('Only unsent invoices can be marked as sent. Please adjust your selection and try again.')
568 570
                                     ->persistent()
569 571
                                     ->danger()
@@ -580,14 +582,14 @@ class InvoiceResource extends Resource
580 582
                             $action->success();
581 583
                         }),
582 584
                     Tables\Actions\BulkAction::make('recordPayments')
583
-                        ->label('Record Payments')
585
+                        ->label('Record payments')
584 586
                         ->icon('heroicon-o-credit-card')
585 587
                         ->stickyModalHeader()
586 588
                         ->stickyModalFooter()
587 589
                         ->modalFooterActionsAlignment(Alignment::End)
588 590
                         ->modalWidth(MaxWidth::TwoExtraLarge)
589 591
                         ->databaseTransaction()
590
-                        ->successNotificationTitle('Payments Recorded')
592
+                        ->successNotificationTitle('Payments recorded')
591 593
                         ->failureNotificationTitle('Failed to Record Payments')
592 594
                         ->deselectRecordsAfterCompletion()
593 595
                         ->beforeFormFilled(function (Collection $records, Tables\Actions\BulkAction $action) {
@@ -595,7 +597,7 @@ class InvoiceResource extends Resource
595 597
 
596 598
                             if ($isInvalid) {
597 599
                                 Notification::make()
598
-                                    ->title('Payment Recording Failed')
600
+                                    ->title('Payment recording failed')
599 601
                                     ->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.')
600 602
                                     ->persistent()
601 603
                                     ->danger()
@@ -627,7 +629,7 @@ class InvoiceResource extends Resource
627 629
                                     },
628 630
                                 ]),
629 631
                             Forms\Components\Select::make('payment_method')
630
-                                ->label('Payment Method')
632
+                                ->label('Payment method')
631 633
                                 ->required()
632 634
                                 ->options(PaymentMethod::class),
633 635
                             Forms\Components\Select::make('bank_account_id')
@@ -648,7 +650,7 @@ class InvoiceResource extends Resource
648 650
                                 $formattedTotalAmountDue = CurrencyConverter::formatCentsToMoney($totalAmountDue);
649 651
 
650 652
                                 Notification::make()
651
-                                    ->title('Excess Payment Amount')
653
+                                    ->title('Excess payment amount')
652 654
                                     ->body("The payment amount exceeds the total amount due of {$formattedTotalAmountDue}. Please adjust the payment amount and try again.")
653 655
                                     ->persistent()
654 656
                                     ->warning()

+ 1
- 1
app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ListInvoices.php 파일 보기

@@ -68,7 +68,7 @@ class ListInvoices extends ListRecords
68 68
                     ->visible(fn () => ! empty($this->recurringInvoice))
69 69
                     ->actions([
70 70
                         Action::make('clearFilter')
71
-                            ->label('Clear Filter')
71
+                            ->label('Clear filter')
72 72
                             ->button()
73 73
                             ->outlined()
74 74
                             ->action('clearFilter'),

+ 12
- 8
app/Filament/Company/Resources/Sales/InvoiceResource/Pages/ViewInvoice.php 파일 보기

@@ -34,12 +34,16 @@ class ViewInvoice extends ViewRecord
34 34
     protected function getHeaderActions(): array
35 35
     {
36 36
         return [
37
+            Actions\EditAction::make()
38
+                ->label('Edit invoice')
39
+                ->outlined(),
37 40
             Actions\ActionGroup::make([
38
-                Actions\EditAction::make(),
41
+                Actions\ActionGroup::make([
42
+                    Invoice::getApproveDraftAction(),
43
+                    Invoice::getMarkAsSentAction(),
44
+                    Invoice::getReplicateAction(),
45
+                ])->dropdown(false),
39 46
                 Actions\DeleteAction::make(),
40
-                Invoice::getApproveDraftAction(),
41
-                Invoice::getMarkAsSentAction(),
42
-                Invoice::getReplicateAction(),
43 47
             ])
44 48
                 ->label('Actions')
45 49
                 ->button()
@@ -70,21 +74,21 @@ class ViewInvoice extends ViewRecord
70 74
                                     ->weight(FontWeight::SemiBold)
71 75
                                     ->url(static fn (Invoice $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])),
72 76
                                 TextEntry::make('amount_due')
73
-                                    ->label('Amount Due')
77
+                                    ->label('Amount due')
74 78
                                     ->currency(static fn (Invoice $record) => $record->currency_code),
75 79
                                 TextEntry::make('due_date')
76 80
                                     ->label('Due')
77 81
                                     ->asRelativeDay(),
78 82
                                 TextEntry::make('approved_at')
79
-                                    ->label('Approved At')
83
+                                    ->label('Approved at')
80 84
                                     ->placeholder('Not Approved')
81 85
                                     ->date(),
82 86
                                 TextEntry::make('last_sent_at')
83
-                                    ->label('Last Sent')
87
+                                    ->label('Last sent')
84 88
                                     ->placeholder('Never')
85 89
                                     ->date(),
86 90
                                 TextEntry::make('paid_at')
87
-                                    ->label('Paid At')
91
+                                    ->label('Paid at')
88 92
                                     ->placeholder('Not Paid')
89 93
                                     ->date(),
90 94
                             ])->columnSpan(1),

+ 2
- 2
app/Filament/Company/Resources/Sales/InvoiceResource/RelationManagers/PaymentsRelationManager.php 파일 보기

@@ -94,7 +94,7 @@ class PaymentsRelationManager extends RelationManager
94 94
                         },
95 95
                     ]),
96 96
                 Forms\Components\Select::make('payment_method')
97
-                    ->label('Payment Method')
97
+                    ->label('Payment method')
98 98
                     ->required()
99 99
                     ->options(PaymentMethod::class),
100 100
                 Forms\Components\Select::make('bank_account_id')
@@ -161,7 +161,7 @@ class PaymentsRelationManager extends RelationManager
161 161
                         ]);
162 162
                     })
163 163
                     ->databaseTransaction()
164
-                    ->successNotificationTitle('Payment Recorded')
164
+                    ->successNotificationTitle('Payment recorded')
165 165
                     ->action(function (Tables\Actions\CreateAction $action, array $data) {
166 166
                         /** @var Invoice $record */
167 167
                         $record = $this->getOwnerRecord();

+ 12
- 10
app/Filament/Company/Resources/Sales/RecurringInvoiceResource.php 파일 보기

@@ -108,21 +108,21 @@ class RecurringInvoiceResource extends Resource
108 108
                             ]),
109 109
                             Forms\Components\Group::make([
110 110
                                 Forms\Components\Placeholder::make('invoice_number')
111
-                                    ->label('Invoice Number')
111
+                                    ->label('Invoice number')
112 112
                                     ->content('Auto-generated'),
113 113
                                 Forms\Components\TextInput::make('order_number')
114 114
                                     ->label('P.O/S.O Number'),
115 115
                                 Forms\Components\Placeholder::make('date')
116
-                                    ->label('Invoice Date')
116
+                                    ->label('Invoice date')
117 117
                                     ->content('Auto-generated'),
118 118
                                 Forms\Components\Select::make('payment_terms')
119
-                                    ->label('Payment Due')
119
+                                    ->label('Payment due')
120 120
                                     ->options(PaymentTerms::class)
121 121
                                     ->softRequired()
122 122
                                     ->default($company->defaultInvoice->payment_terms)
123 123
                                     ->live(),
124 124
                                 Forms\Components\Select::make('discount_method')
125
-                                    ->label('Discount Method')
125
+                                    ->label('Discount method')
126 126
                                     ->options(DocumentDiscountMethod::class)
127 127
                                     ->selectablePlaceholder(false)
128 128
                                     ->default(DocumentDiscountMethod::PerLineItem)
@@ -294,17 +294,17 @@ class RecurringInvoiceResource extends Resource
294 294
                     ->sortable()
295 295
                     ->showOnTabs(['draft']),
296 296
                 Tables\Columns\TextColumn::make('start_date')
297
-                    ->label('First Invoice')
297
+                    ->label('First invoice')
298 298
                     ->date()
299 299
                     ->sortable()
300 300
                     ->showOnTabs(['draft']),
301 301
                 Tables\Columns\TextColumn::make('last_date')
302
-                    ->label('Last Invoice')
302
+                    ->label('Last invoice')
303 303
                     ->date()
304 304
                     ->sortable()
305 305
                     ->hideOnTabs(['draft']),
306 306
                 Tables\Columns\TextColumn::make('next_date')
307
-                    ->label('Next Invoice')
307
+                    ->label('Next invoice')
308 308
                     ->date()
309 309
                     ->sortable()
310 310
                     ->hideOnTabs(['draft']),
@@ -325,10 +325,12 @@ class RecurringInvoiceResource extends Resource
325 325
             ])
326 326
             ->actions([
327 327
                 Tables\Actions\ActionGroup::make([
328
-                    Tables\Actions\EditAction::make(),
329
-                    Tables\Actions\ViewAction::make(),
328
+                    Tables\Actions\ActionGroup::make([
329
+                        Tables\Actions\EditAction::make(),
330
+                        Tables\Actions\ViewAction::make(),
331
+                        RecurringInvoice::getManageScheduleAction(Tables\Actions\Action::class),
332
+                    ])->dropdown(false),
330 333
                     Tables\Actions\DeleteAction::make(),
331
-                    RecurringInvoice::getUpdateScheduleAction(Tables\Actions\Action::class),
332 334
                 ]),
333 335
             ])
334 336
             ->bulkActions([

+ 16
- 12
app/Filament/Company/Resources/Sales/RecurringInvoiceResource/Pages/ViewRecurringInvoice.php 파일 보기

@@ -34,11 +34,15 @@ class ViewRecurringInvoice extends ViewRecord
34 34
     protected function getHeaderActions(): array
35 35
     {
36 36
         return [
37
+            Actions\EditAction::make()
38
+                ->label('Edit recurring invoice')
39
+                ->outlined(),
37 40
             Actions\ActionGroup::make([
38
-                Actions\EditAction::make(),
41
+                Actions\ActionGroup::make([
42
+                    RecurringInvoice::getManageScheduleAction(),
43
+                    RecurringInvoice::getApproveDraftAction(),
44
+                ])->dropdown(false),
39 45
                 Actions\DeleteAction::make(),
40
-                RecurringInvoice::getUpdateScheduleAction(),
41
-                RecurringInvoice::getApproveDraftAction(),
42 46
             ])
43 47
                 ->label('Actions')
44 48
                 ->button()
@@ -56,12 +60,12 @@ class ViewRecurringInvoice extends ViewRecord
56 60
             ->schema([
57 61
                 BannerEntry::make('scheduleIsNotSet')
58 62
                     ->info()
59
-                    ->title('Schedule Not Set')
63
+                    ->title('Schedule not set')
60 64
                     ->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.')
61 65
                     ->visible(fn (RecurringInvoice $record) => ! $record->hasValidStartDate())
62 66
                     ->columnSpanFull()
63 67
                     ->actions([
64
-                        RecurringInvoice::getUpdateScheduleAction(Action::class)
68
+                        RecurringInvoice::getManageScheduleAction(Action::class)
65 69
                             ->outlined(),
66 70
                     ]),
67 71
                 BannerEntry::make('readyToApprove')
@@ -87,11 +91,11 @@ class ViewRecurringInvoice extends ViewRecord
87 91
                                     ->weight(FontWeight::SemiBold)
88 92
                                     ->url(static fn (RecurringInvoice $record) => ClientResource::getUrl('edit', ['record' => $record->client_id])),
89 93
                                 TextEntry::make('last_date')
90
-                                    ->label('Last Invoice')
94
+                                    ->label('Last invoice')
91 95
                                     ->date()
92 96
                                     ->placeholder('Not Created'),
93 97
                                 TextEntry::make('next_date')
94
-                                    ->label('Next Invoice')
98
+                                    ->label('Next invoice')
95 99
                                     ->placeholder('Not Scheduled')
96 100
                                     ->date(),
97 101
                                 TextEntry::make('schedule')
@@ -103,7 +107,7 @@ class ViewRecurringInvoice extends ViewRecord
103 107
                                         return $record->getTimelineDescription();
104 108
                                     }),
105 109
                                 TextEntry::make('occurrences_count')
106
-                                    ->label('Created to Date')
110
+                                    ->label('Created to date')
107 111
                                     ->visible(static fn (RecurringInvoice $record) => $record->occurrences_count > 0)
108 112
                                     ->color('primary')
109 113
                                     ->weight(FontWeight::SemiBold)
@@ -112,19 +116,19 @@ class ViewRecurringInvoice extends ViewRecord
112 116
                                         return ListInvoices::getUrl(['recurringInvoice' => $record->id]);
113 117
                                     }),
114 118
                                 TextEntry::make('end_date')
115
-                                    ->label('Ends On')
119
+                                    ->label('Ends on')
116 120
                                     ->date()
117 121
                                     ->visible(fn (RecurringInvoice $record) => $record->end_type?->isOn()),
118 122
                                 TextEntry::make('approved_at')
119
-                                    ->label('Approved At')
123
+                                    ->label('Approved at')
120 124
                                     ->placeholder('Not Approved')
121 125
                                     ->date(),
122 126
                                 TextEntry::make('ended_at')
123
-                                    ->label('Ended At')
127
+                                    ->label('Ended at')
124 128
                                     ->date()
125 129
                                     ->visible(fn (RecurringInvoice $record) => $record->ended_at),
126 130
                                 TextEntry::make('total')
127
-                                    ->label('Invoice Amount')
131
+                                    ->label('Invoice amount')
128 132
                                     ->currency(static fn (RecurringInvoice $record) => $record->currency_code),
129 133
                             ])->columnSpan(1),
130 134
                         DocumentPreview::make()

+ 3
- 3
app/Filament/Forms/Components/AddressFields.php 파일 보기

@@ -16,11 +16,11 @@ class AddressFields extends Grid
16 16
 
17 17
         $this->schema([
18 18
             TextInput::make('address_line_1')
19
-                ->label('Address Line 1')
19
+                ->label('Address line 1')
20 20
                 ->required()
21 21
                 ->maxLength(255),
22 22
             TextInput::make('address_line_2')
23
-                ->label('Address Line 2')
23
+                ->label('Address line 2')
24 24
                 ->maxLength(255),
25 25
             CountrySelect::make('country_code')
26 26
                 ->clearStateField()
@@ -31,7 +31,7 @@ class AddressFields extends Grid
31 31
                 ->required()
32 32
                 ->maxLength(255),
33 33
             TextInput::make('postal_code')
34
-                ->label('Postal Code / Zip Code')
34
+                ->label('Postal code')
35 35
                 ->maxLength(255),
36 36
         ]);
37 37
     }

+ 1
- 1
app/Filament/Forms/Components/CreateCurrencySelect.php 파일 보기

@@ -68,7 +68,7 @@ class CreateCurrencySelect extends Select
68 68
     protected function createCurrencyAction(Action $action): Action
69 69
     {
70 70
         return $action
71
-            ->label('Add Currency')
71
+            ->label('Add currency')
72 72
             ->slideOver()
73 73
             ->modalWidth(MaxWidth::Medium);
74 74
     }

+ 2
- 2
app/Filament/Forms/Components/DocumentTotals.php 파일 보기

@@ -21,14 +21,14 @@ class DocumentTotals extends Grid
21 21
 
22 22
         $this->schema([
23 23
             Select::make('discount_computation')
24
-                ->label('Discount Computation')
24
+                ->label('Discount computation')
25 25
                 ->hiddenLabel()
26 26
                 ->options(AdjustmentComputation::class)
27 27
                 ->default(AdjustmentComputation::Percentage)
28 28
                 ->selectablePlaceholder(false)
29 29
                 ->live(),
30 30
             TextInput::make('discount_rate')
31
-                ->label('Discount Rate')
31
+                ->label('Discount rate')
32 32
                 ->hiddenLabel()
33 33
                 ->live()
34 34
                 ->extraInputAttributes(['class' => 'text-right'])

+ 7
- 7
app/Livewire/Company/Service/ConnectedAccount/ListInstitutions.php 파일 보기

@@ -64,7 +64,7 @@ class ListInstitutions extends Component implements HasActions, HasForms
64 64
         return Action::make('startImportingTransactions')
65 65
             ->link()
66 66
             ->icon('heroicon-o-cloud-arrow-down')
67
-            ->label('Start Importing Transactions')
67
+            ->label('Start importing transactions')
68 68
             ->modalWidth(fn () => $this->modalWidth)
69 69
             ->modalFooterActionsAlignment(fn () => $this->modalWidth === 'screen' ? Alignment::Center : Alignment::Start)
70 70
             ->stickyModalHeader()
@@ -72,7 +72,7 @@ class ListInstitutions extends Component implements HasActions, HasForms
72 72
             ->record(fn (array $arguments) => ConnectedBankAccount::find($arguments['connectedBankAccount']))
73 73
             ->form([
74 74
                 Placeholder::make('import_from')
75
-                    ->label('Import Transactions From')
75
+                    ->label('Import transactions from')
76 76
                     ->content(static fn (ConnectedBankAccount $connectedBankAccount): View => view(
77 77
                         'components.actions.transaction-import-modal',
78 78
                         compact('connectedBankAccount')
@@ -82,12 +82,12 @@ class ListInstitutions extends Component implements HasActions, HasForms
82 82
                     ->visible(static fn (ConnectedBankAccount $connectedBankAccount) => $connectedBankAccount->bank_account_id === null)
83 83
                     ->content(static fn (ConnectedBankAccount $connectedBankAccount) => 'If ' . $connectedBankAccount->name . ' already has transactions for an existing account, select the account to import transactions into.'),
84 84
                 Select::make('bank_account_id')
85
-                    ->label('Select Account')
85
+                    ->label('Select account')
86 86
                     ->visible(static fn (ConnectedBankAccount $connectedBankAccount) => $connectedBankAccount->bank_account_id === null)
87 87
                     ->options(fn (ConnectedBankAccount $connectedBankAccount) => $this->getBankAccountOptions($connectedBankAccount))
88 88
                     ->required(),
89 89
                 DatePicker::make('start_date')
90
-                    ->label('Start Date')
90
+                    ->label('Start date')
91 91
                     ->required()
92 92
                     ->placeholder('Select a start date for importing transactions.'),
93 93
             ])
@@ -126,7 +126,7 @@ class ListInstitutions extends Component implements HasActions, HasForms
126 126
         return Action::make('stopImportingTransactions')
127 127
             ->link()
128 128
             ->icon('heroicon-o-stop-circle')
129
-            ->label('Stop Importing Transactions')
129
+            ->label('Stop importing transactions')
130 130
             ->color('danger')
131 131
             ->requiresConfirmation()
132 132
             ->modalHeading('Stop Importing Transactions')
@@ -164,7 +164,7 @@ class ListInstitutions extends Component implements HasActions, HasForms
164 164
                     ->hiddenLabel()
165 165
                     ->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.'),
166 166
                 Select::make('connected_bank_account_id')
167
-                    ->label('Select Account')
167
+                    ->label('Select account')
168 168
                     ->softRequired()
169 169
                     ->selectablePlaceholder(false)
170 170
                     ->hint(
@@ -278,7 +278,7 @@ class ListInstitutions extends Component implements HasActions, HasForms
278 278
     public function sendErrorNotification(string $message): void
279 279
     {
280 280
         Notification::make()
281
-            ->title('Hold On...')
281
+            ->title('Hold on...')
282 282
             ->danger()
283 283
             ->body($message)
284 284
             ->persistent()

+ 6
- 6
app/Livewire/Company/Service/LiveCurrency/ListCompanyCurrencies.php 파일 보기

@@ -39,8 +39,8 @@ class ListCompanyCurrencies extends Component implements HasForms, HasTable
39 39
                     ->weight(FontWeight::Medium)
40 40
                     ->icon(static fn (Currency $record) => $record->isEnabled() ? 'heroicon-o-lock-closed' : null)
41 41
                     ->tooltip(function (Currency $record) {
42
-                        $tooltipMessage = translate('Default :Record', [
43
-                            'Record' => $this->getTableModelLabel(),
42
+                        $tooltipMessage = translate('Default :record', [
43
+                            'record' => $this->getTableModelLabel(),
44 44
                         ]);
45 45
 
46 46
                         if ($record->isEnabled()) {
@@ -70,7 +70,7 @@ class ListCompanyCurrencies extends Component implements HasForms, HasTable
70 70
             ])
71 71
             ->actions([
72 72
                 Tables\Actions\Action::make('update_rate')
73
-                    ->label('Update Rate')
73
+                    ->label('Update rate')
74 74
                     ->icon('heroicon-o-arrow-path')
75 75
                     ->hidden(static fn (Currency $record): bool => $record->isEnabled() || ($record->rate === $record->live_rate))
76 76
                     ->requiresConfirmation()
@@ -82,7 +82,7 @@ class ListCompanyCurrencies extends Component implements HasForms, HasTable
82 82
 
83 83
                             Notification::make()
84 84
                                 ->success()
85
-                                ->title('Exchange Rate Updated')
85
+                                ->title('Exchange rate updated')
86 86
                                 ->body(__('The exchange rate for :currency has been updated to reflect the current market rate.', [
87 87
                                     'currency' => $record->name,
88 88
                                 ]))
@@ -92,7 +92,7 @@ class ListCompanyCurrencies extends Component implements HasForms, HasTable
92 92
             ])
93 93
             ->bulkActions([
94 94
                 Tables\Actions\BulkAction::make('update_rate')
95
-                    ->label('Update Rate')
95
+                    ->label('Update rate')
96 96
                     ->icon('heroicon-o-arrow-path')
97 97
                     ->requiresConfirmation()
98 98
                     ->deselectRecordsAfterCompletion()
@@ -120,7 +120,7 @@ class ListCompanyCurrencies extends Component implements HasForms, HasTable
120 120
 
121 121
                             Notification::make()
122 122
                                 ->success()
123
-                                ->title('Exchange Rates Updated')
123
+                                ->title('Exchange rates updated')
124 124
                                 ->body($message)
125 125
                                 ->send();
126 126
                         }

+ 11
- 11
app/Models/Accounting/Estimate.php 파일 보기

@@ -263,12 +263,12 @@ class Estimate extends Document
263 263
     {
264 264
         return $action::make('approveDraft')
265 265
             ->label('Approve')
266
-            ->icon('heroicon-o-check-circle')
266
+            ->icon('heroicon-m-check-circle')
267 267
             ->visible(function (self $record) {
268 268
                 return $record->canBeApproved();
269 269
             })
270 270
             ->databaseTransaction()
271
-            ->successNotificationTitle('Estimate Approved')
271
+            ->successNotificationTitle('Estimate approved')
272 272
             ->action(function (self $record, MountableAction $action) {
273 273
                 $record->approveDraft();
274 274
 
@@ -279,12 +279,12 @@ class Estimate extends Document
279 279
     public static function getMarkAsSentAction(string $action = Action::class): MountableAction
280 280
     {
281 281
         return $action::make('markAsSent')
282
-            ->label('Mark as Sent')
283
-            ->icon('heroicon-o-paper-airplane')
282
+            ->label('Mark as sent')
283
+            ->icon('heroicon-m-paper-airplane')
284 284
             ->visible(static function (self $record) {
285 285
                 return $record->canBeMarkedAsSent();
286 286
             })
287
-            ->successNotificationTitle('Estimate Sent')
287
+            ->successNotificationTitle('Estimate sent')
288 288
             ->action(function (self $record, MountableAction $action) {
289 289
                 $record->markAsSent();
290 290
 
@@ -351,12 +351,12 @@ class Estimate extends Document
351 351
     {
352 352
         return $action::make('markAsAccepted')
353 353
             ->label('Mark as Accepted')
354
-            ->icon('heroicon-o-check-badge')
354
+            ->icon('heroicon-m-check-badge')
355 355
             ->visible(static function (self $record) {
356 356
                 return $record->canBeMarkedAsAccepted();
357 357
             })
358 358
             ->databaseTransaction()
359
-            ->successNotificationTitle('Estimate Accepted')
359
+            ->successNotificationTitle('Estimate accepted')
360 360
             ->action(function (self $record, MountableAction $action) {
361 361
                 $record->markAsAccepted();
362 362
 
@@ -378,14 +378,14 @@ class Estimate extends Document
378 378
     {
379 379
         return $action::make('markAsDeclined')
380 380
             ->label('Mark as Declined')
381
-            ->icon('heroicon-o-x-circle')
381
+            ->icon('heroicon-m-x-circle')
382 382
             ->visible(static function (self $record) {
383 383
                 return $record->canBeMarkedAsDeclined();
384 384
             })
385 385
             ->color('danger')
386 386
             ->requiresConfirmation()
387 387
             ->databaseTransaction()
388
-            ->successNotificationTitle('Estimate Declined')
388
+            ->successNotificationTitle('Estimate declined')
389 389
             ->action(function (self $record, MountableAction $action) {
390 390
                 $record->markAsDeclined();
391 391
 
@@ -407,12 +407,12 @@ class Estimate extends Document
407 407
     {
408 408
         return $action::make('convertToInvoice')
409 409
             ->label('Convert to Invoice')
410
-            ->icon('heroicon-o-arrow-right-on-rectangle')
410
+            ->icon('heroicon-m-arrow-right-on-rectangle')
411 411
             ->visible(static function (self $record) {
412 412
                 return $record->canBeConverted();
413 413
             })
414 414
             ->databaseTransaction()
415
-            ->successNotificationTitle('Estimate Converted to Invoice')
415
+            ->successNotificationTitle('Estimate converted to invoice')
416 416
             ->action(function (self $record, MountableAction $action) {
417 417
                 $record->convertToInvoice();
418 418
 

+ 5
- 5
app/Models/Accounting/Invoice.php 파일 보기

@@ -465,12 +465,12 @@ class Invoice extends Document
465 465
     {
466 466
         return $action::make('approveDraft')
467 467
             ->label('Approve')
468
-            ->icon('heroicon-o-check-circle')
468
+            ->icon('heroicon-m-check-circle')
469 469
             ->visible(function (self $record) {
470 470
                 return $record->canBeApproved();
471 471
             })
472 472
             ->databaseTransaction()
473
-            ->successNotificationTitle('Invoice Approved')
473
+            ->successNotificationTitle('Invoice approved')
474 474
             ->action(function (self $record, MountableAction $action) {
475 475
                 $record->approveDraft();
476 476
 
@@ -481,12 +481,12 @@ class Invoice extends Document
481 481
     public static function getMarkAsSentAction(string $action = Action::class): MountableAction
482 482
     {
483 483
         return $action::make('markAsSent')
484
-            ->label('Mark as Sent')
485
-            ->icon('heroicon-o-paper-airplane')
484
+            ->label('Mark as sent')
485
+            ->icon('heroicon-m-paper-airplane')
486 486
             ->visible(static function (self $record) {
487 487
                 return $record->canBeMarkedAsSent();
488 488
             })
489
-            ->successNotificationTitle('Invoice Sent')
489
+            ->successNotificationTitle('Invoice sent')
490 490
             ->action(function (self $record, MountableAction $action) {
491 491
                 $record->markAsSent();
492 492
 

+ 9
- 9
app/Models/Accounting/RecurringInvoice.php 파일 보기

@@ -379,13 +379,13 @@ class RecurringInvoice extends Document
379 379
         };
380 380
     }
381 381
 
382
-    public static function getUpdateScheduleAction(string $action = Action::class): MountableAction
382
+    public static function getManageScheduleAction(string $action = Action::class): MountableAction
383 383
     {
384
-        return $action::make('updateSchedule')
385
-            ->label(fn (self $record) => $record->hasSchedule() ? 'Update Schedule' : 'Set Schedule')
386
-            ->icon('heroicon-o-calendar-date-range')
384
+        return $action::make('manageSchedule')
385
+            ->label(fn (self $record) => $record->hasSchedule() ? 'Edit schedule' : 'Set schedule')
386
+            ->icon('heroicon-m-calendar-date-range')
387 387
             ->slideOver()
388
-            ->successNotificationTitle('Schedule Updated')
388
+            ->successNotificationTitle('Schedule saved')
389 389
             ->mountUsing(function (self $record, Form $form) {
390 390
                 $data = $record->attributesToArray();
391 391
 
@@ -492,7 +492,7 @@ class RecurringInvoice extends Document
492 492
                     ->contained(false)
493 493
                     ->schema([
494 494
                         Forms\Components\DatePicker::make('start_date')
495
-                            ->label('First Invoice Date')
495
+                            ->label('First invoice date')
496 496
                             ->softRequired()
497 497
                             ->live()
498 498
                             ->minDate(today())
@@ -506,7 +506,7 @@ class RecurringInvoice extends Document
506 506
                             $components = [];
507 507
 
508 508
                             $components[] = Forms\Components\Select::make('end_type')
509
-                                ->label('End Schedule')
509
+                                ->label('End schedule')
510 510
                                 ->options(EndType::class)
511 511
                                 ->softRequired()
512 512
                                 ->live()
@@ -533,7 +533,7 @@ class RecurringInvoice extends Document
533 533
 
534 534
                             return [
535 535
                                 Cluster::make($components)
536
-                                    ->label('Schedule Ends')
536
+                                    ->label('Schedule ends')
537 537
                                     ->required()
538 538
                                     ->markAsRequired(false),
539 539
                             ];
@@ -562,7 +562,7 @@ class RecurringInvoice extends Document
562 562
                 return $record->canBeApproved();
563 563
             })
564 564
             ->databaseTransaction()
565
-            ->successNotificationTitle('Recurring Invoice Approved')
565
+            ->successNotificationTitle('Recurring invoice approved')
566 566
             ->action(function (self $record, MountableAction $action) {
567 567
                 $record->approveDraft();
568 568
 

app/Providers/FilamentCompaniesServiceProvider.php → app/Providers/Filament/CompanyPanelProvider.php 파일 보기

@@ -1,6 +1,6 @@
1 1
 <?php
2 2
 
3
-namespace App\Providers;
3
+namespace App\Providers\Filament;
4 4
 
5 5
 use App\Actions\FilamentCompanies\AddCompanyEmployee;
6 6
 use App\Actions\FilamentCompanies\CreateConnectedAccount;
@@ -71,7 +71,7 @@ use Wallo\FilamentCompanies\FilamentCompanies;
71 71
 use Wallo\FilamentCompanies\Pages\Auth\Login;
72 72
 use Wallo\FilamentCompanies\Pages\Auth\Register;
73 73
 
74
-class FilamentCompaniesServiceProvider extends PanelProvider
74
+class CompanyPanelProvider extends PanelProvider
75 75
 {
76 76
     /**
77 77
      * @throws Exception

+ 1
- 1
app/Providers/TranslationServiceProvider.php 파일 보기

@@ -71,6 +71,6 @@ class TranslationServiceProvider extends ServiceProvider
71 71
             $label = str_replace(' id', '', $label);
72 72
         }
73 73
 
74
-        return ucwords($label);
74
+        return ucfirst($label);
75 75
     }
76 76
 }

+ 34
- 0
app/Services/AccountService.php 파일 보기

@@ -370,4 +370,38 @@ class AccountService
370 370
 
371 371
         return $earliestDate ?? today()->toDateTimeString();
372 372
     }
373
+
374
+    public function getUnpaidClientInvoices(?string $asOfDate = null): Builder
375
+    {
376
+        $asOfDate = $asOfDate ?? now()->toDateString();
377
+
378
+        return Invoice::query()
379
+            ->select([
380
+                'invoices.id',
381
+                'invoices.client_id',
382
+                'invoices.due_date',
383
+                'invoices.amount_due',
384
+                DB::raw('DATEDIFF(?, invoices.due_date) as days_overdue'),
385
+            ])
386
+            ->addBinding([$asOfDate], 'select')
387
+            ->unpaid()
388
+            ->where('amount_due', '>', 0);
389
+    }
390
+
391
+    public function getUnpaidVendorBills(?string $asOfDate = null): Builder
392
+    {
393
+        $asOfDate = $asOfDate ?? now()->toDateString();
394
+
395
+        return Bill::query()
396
+            ->select([
397
+                'bills.id',
398
+                'bills.vendor_id',
399
+                'bills.due_date',
400
+                'bills.amount_due',
401
+                DB::raw('DATEDIFF(?, bills.due_date) as days_overdue'),
402
+            ])
403
+            ->addBinding([$asOfDate], 'select')
404
+            ->outstanding()
405
+            ->where('amount_due', '>', 0);
406
+    }
373 407
 }

+ 10
- 8
app/Services/ExportService.php 파일 보기

@@ -125,9 +125,9 @@ class ExportService
125 125
 
126 126
             if (filled($category->summary)) {
127 127
                 $csv->insertOne($category->summary);
128
-            }
129 128
 
130
-            $csv->insertOne([]);
129
+                $csv->insertOne([]);
130
+            }
131 131
         }
132 132
 
133 133
         if (method_exists($report, 'getOverviewHeaders') && filled($report->getOverviewHeaders())) {
@@ -221,14 +221,16 @@ class ExportService
221 221
      * @throws CannotInsertRecord
222 222
      * @throws Exception
223 223
      */
224
-    protected function writeDataRowsToCsv(Writer $csv, array $header, array $data, array $columns): void
224
+    protected function writeDataRowsToCsv(Writer $csv, ?array $header, array $data, array $columns): void
225 225
     {
226
-        if (isset($header[0]) && is_array($header[0])) {
227
-            foreach ($header as $headerRow) {
228
-                $csv->insertOne($headerRow);
226
+        if ($header) {
227
+            if (isset($header[0]) && is_array($header[0])) {
228
+                foreach ($header as $headerRow) {
229
+                    $csv->insertOne($headerRow);
230
+                }
231
+            } else {
232
+                $csv->insertOne($header);
229 233
             }
230
-        } else {
231
-            $csv->insertOne($header);
232 234
         }
233 235
 
234 236
         // Output data rows

+ 97
- 17
app/Services/ReportService.php 파일 보기

@@ -2,15 +2,19 @@
2 2
 
3 3
 namespace App\Services;
4 4
 
5
+use App\Contracts\MoneyFormattableDTO;
5 6
 use App\DTO\AccountBalanceDTO;
6 7
 use App\DTO\AccountCategoryDTO;
7 8
 use App\DTO\AccountDTO;
8 9
 use App\DTO\AccountTransactionDTO;
9 10
 use App\DTO\AccountTypeDTO;
11
+use App\DTO\AgingBucketDTO;
10 12
 use App\DTO\CashFlowOverviewDTO;
13
+use App\DTO\EntityReportDTO;
11 14
 use App\DTO\ReportDTO;
12 15
 use App\Enums\Accounting\AccountCategory;
13 16
 use App\Enums\Accounting\AccountType;
17
+use App\Enums\Accounting\DocumentEntityType;
14 18
 use App\Enums\Accounting\TransactionType;
15 19
 use App\Models\Accounting\Account;
16 20
 use App\Models\Accounting\Transaction;
@@ -27,21 +31,26 @@ class ReportService
27 31
         protected AccountService $accountService,
28 32
     ) {}
29 33
 
30
-    public function formatBalances(array $balances): AccountBalanceDTO
34
+    /**
35
+     * @param  class-string<MoneyFormattableDTO>|null  $dtoClass
36
+     */
37
+    public function formatBalances(array $balances, ?string $dtoClass = null, bool $formatZeros = true): MoneyFormattableDTO | array
31 38
     {
32
-        $defaultCurrency = CurrencyAccessor::getDefaultCurrency();
39
+        $dtoClass ??= AccountBalanceDTO::class;
40
+
41
+        $formattedBalances = array_map(static function ($balance) use ($formatZeros) {
42
+            if (! $formatZeros && $balance === 0) {
43
+                return '';
44
+            }
33 45
 
34
-        foreach ($balances as $key => $balance) {
35
-            $balances[$key] = money($balance, $defaultCurrency)->format();
46
+            return CurrencyConverter::formatCentsToMoney($balance);
47
+        }, $balances);
48
+
49
+        if (! $dtoClass) {
50
+            return $formattedBalances;
36 51
         }
37 52
 
38
-        return new AccountBalanceDTO(
39
-            startingBalance: $balances['starting_balance'] ?? null,
40
-            debitBalance: $balances['debit_balance'] ?? null,
41
-            creditBalance: $balances['credit_balance'] ?? null,
42
-            netMovement: $balances['net_movement'] ?? null,
43
-            endingBalance: $balances['ending_balance'] ?? null,
44
-        );
53
+        return $dtoClass::fromArray($formattedBalances);
45 54
     }
46 55
 
47 56
     public function buildAccountBalanceReport(string $startDate, string $endDate, array $columns = []): ReportDTO
@@ -263,9 +272,9 @@ class ReportService
263 272
             return [
264 273
                 'type' => 'transaction',
265 274
                 'action' => match ($transaction->type) {
266
-                    TransactionType::Journal => 'updateJournalTransaction',
267
-                    TransactionType::Transfer => 'updateTransfer',
268
-                    default => 'updateTransaction',
275
+                    TransactionType::Journal => 'editJournalTransaction',
276
+                    TransactionType::Transfer => 'editTransfer',
277
+                    default => 'editTransaction',
269 278
                 },
270 279
                 'id' => $transaction->id,
271 280
             ];
@@ -361,10 +370,10 @@ class ReportService
361 370
 
362 371
         $formattedReportTotalBalances = $this->formatBalances($reportTotalBalances);
363 372
 
364
-        return new ReportDTO($accountCategories, $formattedReportTotalBalances, $columns, $trialBalanceType);
373
+        return new ReportDTO(categories: $accountCategories, overallTotal: $formattedReportTotalBalances, fields: $columns, reportType: $trialBalanceType);
365 374
     }
366 375
 
367
-    public function getRetainedEarningsBalances(string $startDate, string $endDate): AccountBalanceDTO
376
+    public function getRetainedEarningsBalances(string $startDate, string $endDate): MoneyFormattableDTO | array
368 377
     {
369 378
         $retainedEarningsAmount = $this->calculateRetainedEarnings($startDate, $endDate)->getAmount();
370 379
 
@@ -507,7 +516,7 @@ class ReportService
507 516
         );
508 517
     }
509 518
 
510
-    private function calculateTotalCashFlows(array $sections, string $startDate): AccountBalanceDTO
519
+    private function calculateTotalCashFlows(array $sections, string $startDate): MoneyFormattableDTO | array
511 520
     {
512 521
         $totalInflow = 0;
513 522
         $totalOutflow = 0;
@@ -819,4 +828,75 @@ class ReportService
819 828
             endDate: $asOfDateCarbon,
820 829
         );
821 830
     }
831
+
832
+    public function buildAgingReport(
833
+        string $asOfDate,
834
+        DocumentEntityType $entityType,
835
+        array $columns = [],
836
+        int $daysPerPeriod = 30,
837
+        int $numberOfPeriods = 4
838
+    ): ReportDTO {
839
+        $asOfDateCarbon = Carbon::parse($asOfDate);
840
+
841
+        $documents = $entityType === DocumentEntityType::Client
842
+            ? $this->accountService->getUnpaidClientInvoices($asOfDate)->with(['client:id,name'])->get()->groupBy('client_id')
843
+            : $this->accountService->getUnpaidVendorBills($asOfDate)->with(['vendor:id,name'])->get()->groupBy('vendor_id');
844
+
845
+        $categories = [];
846
+
847
+        $agingBuckets = ['current' => 0];
848
+
849
+        for ($i = 1; $i <= $numberOfPeriods; $i++) {
850
+            $agingBuckets["period_{$i}"] = 0;
851
+        }
852
+
853
+        $agingBuckets['over_periods'] = 0;
854
+        $agingBuckets['total'] = 0;
855
+
856
+        $totalAging = $agingBuckets;
857
+
858
+        foreach ($documents as $entityId => $entityDocuments) {
859
+            $aging = $agingBuckets;
860
+
861
+            foreach ($entityDocuments as $document) {
862
+                $daysOverdue = $document->days_overdue ?? 0;
863
+                $balance = $document->getRawOriginal('amount_due');
864
+
865
+                if ($daysOverdue <= 0) {
866
+                    $aging['current'] += $balance;
867
+                } else {
868
+                    $period = ceil($daysOverdue / $daysPerPeriod);
869
+
870
+                    if ($period <= $numberOfPeriods) {
871
+                        $aging["period_{$period}"] += $balance;
872
+                    } else {
873
+                        $aging['over_periods'] += $balance;
874
+                    }
875
+                }
876
+            }
877
+
878
+            $aging['total'] = array_sum($aging);
879
+
880
+            foreach ($aging as $bucket => $amount) {
881
+                $totalAging[$bucket] += $amount;
882
+            }
883
+
884
+            $entity = $entityDocuments->first()->{$entityType->value};
885
+
886
+            $categories[] = new EntityReportDTO(
887
+                name: $entity->name,
888
+                id: $entityId,
889
+                aging: $this->formatBalances($aging, AgingBucketDTO::class, false),
890
+            );
891
+        }
892
+
893
+        $totalAging['total'] = array_sum($totalAging);
894
+
895
+        return new ReportDTO(
896
+            categories: ['Entities' => $categories],
897
+            agingSummary: $this->formatBalances($totalAging, AgingBucketDTO::class),
898
+            fields: $columns,
899
+            endDate: $asOfDateCarbon,
900
+        );
901
+    }
822 902
 }

+ 85
- 0
app/Transformers/AgingReportTransformer.php 파일 보기

@@ -0,0 +1,85 @@
1
+<?php
2
+
3
+namespace App\Transformers;
4
+
5
+use App\DTO\EntityReportDTO;
6
+use App\DTO\ReportCategoryDTO;
7
+use App\DTO\ReportDTO;
8
+use App\Enums\Accounting\DocumentEntityType;
9
+
10
+class AgingReportTransformer extends BaseReportTransformer
11
+{
12
+    public function __construct(
13
+        ReportDTO $report,
14
+        private readonly DocumentEntityType $entityType,
15
+    ) {
16
+        parent::__construct($report);
17
+    }
18
+
19
+    public function getTitle(): string
20
+    {
21
+        return $this->entityType->getReportTitle();
22
+    }
23
+
24
+    /**
25
+     * @return ReportCategoryDTO[]
26
+     */
27
+    public function getCategories(): array
28
+    {
29
+        $categories = [];
30
+
31
+        foreach ($this->report->categories as $category) {
32
+            $data = array_map(function (EntityReportDTO $entity) {
33
+                $row = [];
34
+
35
+                foreach ($this->getColumns() as $column) {
36
+                    $columnName = $column->getName();
37
+
38
+                    $row[$columnName] = match ($columnName) {
39
+                        'entity_name' => [
40
+                            'name' => $entity->name,
41
+                            'id' => $entity->id,
42
+                        ],
43
+                        'current' => $entity->aging->current,
44
+                        'over_periods' => $entity->aging->overPeriods,
45
+                        'total' => $entity->aging->total,
46
+                        default => str_starts_with($columnName, 'period_')
47
+                            ? $entity->aging->periods[$columnName] ?? null
48
+                            : '',
49
+                    };
50
+                }
51
+
52
+                return $row;
53
+            }, $category);
54
+
55
+            $categories[] = new ReportCategoryDTO(
56
+                header: null,
57
+                data: $data,
58
+                summary: null,
59
+            );
60
+        }
61
+
62
+        return $categories;
63
+    }
64
+
65
+    public function getOverallTotals(): array
66
+    {
67
+        $totals = [];
68
+
69
+        foreach ($this->getColumns() as $column) {
70
+            $columnName = $column->getName();
71
+
72
+            $totals[$columnName] = match ($columnName) {
73
+                'entity_name' => 'Total',
74
+                'current' => $this->report->agingSummary->current,
75
+                'over_periods' => $this->report->agingSummary->overPeriods,
76
+                'total' => $this->report->agingSummary->total,
77
+                default => str_starts_with($columnName, 'period_')
78
+                    ? $this->report->agingSummary->periods[$columnName] ?? null
79
+                    : '',
80
+            };
81
+        }
82
+
83
+        return $totals;
84
+    }
85
+}

+ 1
- 1
bootstrap/providers.php 파일 보기

@@ -4,7 +4,7 @@ return [
4 4
     App\Providers\AppServiceProvider::class,
5 5
     App\Providers\AuthServiceProvider::class,
6 6
     App\Providers\Filament\AdminPanelProvider::class,
7
-    App\Providers\FilamentCompaniesServiceProvider::class,
7
+    App\Providers\Filament\CompanyPanelProvider::class,
8 8
     App\Providers\Filament\UserPanelProvider::class,
9 9
     App\Providers\Faker\FakerServiceProvider::class,
10 10
     App\Providers\MacroServiceProvider::class,

+ 396
- 318
composer.lock
파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
파일 보기


+ 85
- 85
package-lock.json 파일 보기

@@ -575,9 +575,9 @@
575 575
             }
576 576
         },
577 577
         "node_modules/@rollup/rollup-android-arm-eabi": {
578
-            "version": "4.31.0",
579
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.31.0.tgz",
580
-            "integrity": "sha512-9NrR4033uCbUBRgvLcBrJofa2KY9DzxL2UKZ1/4xA/mnTNyhZCWBuD8X3tPm1n4KxcgaraOYgrFKSgwjASfmlA==",
578
+            "version": "4.32.1",
579
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.32.1.tgz",
580
+            "integrity": "sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==",
581 581
             "cpu": [
582 582
                 "arm"
583 583
             ],
@@ -589,9 +589,9 @@
589 589
             ]
590 590
         },
591 591
         "node_modules/@rollup/rollup-android-arm64": {
592
-            "version": "4.31.0",
593
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.31.0.tgz",
594
-            "integrity": "sha512-iBbODqT86YBFHajxxF8ebj2hwKm1k8PTBQSojSt3d1FFt1gN+xf4CowE47iN0vOSdnd+5ierMHBbu/rHc7nq5g==",
592
+            "version": "4.32.1",
593
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.32.1.tgz",
594
+            "integrity": "sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==",
595 595
             "cpu": [
596 596
                 "arm64"
597 597
             ],
@@ -603,9 +603,9 @@
603 603
             ]
604 604
         },
605 605
         "node_modules/@rollup/rollup-darwin-arm64": {
606
-            "version": "4.31.0",
607
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.31.0.tgz",
608
-            "integrity": "sha512-WHIZfXgVBX30SWuTMhlHPXTyN20AXrLH4TEeH/D0Bolvx9PjgZnn4H677PlSGvU6MKNsjCQJYczkpvBbrBnG6g==",
606
+            "version": "4.32.1",
607
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.32.1.tgz",
608
+            "integrity": "sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==",
609 609
             "cpu": [
610 610
                 "arm64"
611 611
             ],
@@ -617,9 +617,9 @@
617 617
             ]
618 618
         },
619 619
         "node_modules/@rollup/rollup-darwin-x64": {
620
-            "version": "4.31.0",
621
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.31.0.tgz",
622
-            "integrity": "sha512-hrWL7uQacTEF8gdrQAqcDy9xllQ0w0zuL1wk1HV8wKGSGbKPVjVUv/DEwT2+Asabf8Dh/As+IvfdU+H8hhzrQQ==",
620
+            "version": "4.32.1",
621
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.32.1.tgz",
622
+            "integrity": "sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==",
623 623
             "cpu": [
624 624
                 "x64"
625 625
             ],
@@ -631,9 +631,9 @@
631 631
             ]
632 632
         },
633 633
         "node_modules/@rollup/rollup-freebsd-arm64": {
634
-            "version": "4.31.0",
635
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.31.0.tgz",
636
-            "integrity": "sha512-S2oCsZ4hJviG1QjPY1h6sVJLBI6ekBeAEssYKad1soRFv3SocsQCzX6cwnk6fID6UQQACTjeIMB+hyYrFacRew==",
634
+            "version": "4.32.1",
635
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.32.1.tgz",
636
+            "integrity": "sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==",
637 637
             "cpu": [
638 638
                 "arm64"
639 639
             ],
@@ -645,9 +645,9 @@
645 645
             ]
646 646
         },
647 647
         "node_modules/@rollup/rollup-freebsd-x64": {
648
-            "version": "4.31.0",
649
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.31.0.tgz",
650
-            "integrity": "sha512-pCANqpynRS4Jirn4IKZH4tnm2+2CqCNLKD7gAdEjzdLGbH1iO0zouHz4mxqg0uEMpO030ejJ0aA6e1PJo2xrPA==",
648
+            "version": "4.32.1",
649
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.32.1.tgz",
650
+            "integrity": "sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==",
651 651
             "cpu": [
652 652
                 "x64"
653 653
             ],
@@ -659,9 +659,9 @@
659 659
             ]
660 660
         },
661 661
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
662
-            "version": "4.31.0",
663
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.31.0.tgz",
664
-            "integrity": "sha512-0O8ViX+QcBd3ZmGlcFTnYXZKGbFu09EhgD27tgTdGnkcYXLat4KIsBBQeKLR2xZDCXdIBAlWLkiXE1+rJpCxFw==",
662
+            "version": "4.32.1",
663
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.32.1.tgz",
664
+            "integrity": "sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==",
665 665
             "cpu": [
666 666
                 "arm"
667 667
             ],
@@ -673,9 +673,9 @@
673 673
             ]
674 674
         },
675 675
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
676
-            "version": "4.31.0",
677
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.31.0.tgz",
678
-            "integrity": "sha512-w5IzG0wTVv7B0/SwDnMYmbr2uERQp999q8FMkKG1I+j8hpPX2BYFjWe69xbhbP6J9h2gId/7ogesl9hwblFwwg==",
676
+            "version": "4.32.1",
677
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.32.1.tgz",
678
+            "integrity": "sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==",
679 679
             "cpu": [
680 680
                 "arm"
681 681
             ],
@@ -687,9 +687,9 @@
687 687
             ]
688 688
         },
689 689
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
690
-            "version": "4.31.0",
691
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.31.0.tgz",
692
-            "integrity": "sha512-JyFFshbN5xwy6fulZ8B/8qOqENRmDdEkcIMF0Zz+RsfamEW+Zabl5jAb0IozP/8UKnJ7g2FtZZPEUIAlUSX8cA==",
690
+            "version": "4.32.1",
691
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.32.1.tgz",
692
+            "integrity": "sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==",
693 693
             "cpu": [
694 694
                 "arm64"
695 695
             ],
@@ -701,9 +701,9 @@
701 701
             ]
702 702
         },
703 703
         "node_modules/@rollup/rollup-linux-arm64-musl": {
704
-            "version": "4.31.0",
705
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.31.0.tgz",
706
-            "integrity": "sha512-kpQXQ0UPFeMPmPYksiBL9WS/BDiQEjRGMfklVIsA0Sng347H8W2iexch+IEwaR7OVSKtr2ZFxggt11zVIlZ25g==",
704
+            "version": "4.32.1",
705
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.32.1.tgz",
706
+            "integrity": "sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==",
707 707
             "cpu": [
708 708
                 "arm64"
709 709
             ],
@@ -715,9 +715,9 @@
715 715
             ]
716 716
         },
717 717
         "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
718
-            "version": "4.31.0",
719
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.31.0.tgz",
720
-            "integrity": "sha512-pMlxLjt60iQTzt9iBb3jZphFIl55a70wexvo8p+vVFK+7ifTRookdoXX3bOsRdmfD+OKnMozKO6XM4zR0sHRrQ==",
718
+            "version": "4.32.1",
719
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.32.1.tgz",
720
+            "integrity": "sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==",
721 721
             "cpu": [
722 722
                 "loong64"
723 723
             ],
@@ -729,9 +729,9 @@
729 729
             ]
730 730
         },
731 731
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
732
-            "version": "4.31.0",
733
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.31.0.tgz",
734
-            "integrity": "sha512-D7TXT7I/uKEuWiRkEFbed1UUYZwcJDU4vZQdPTcepK7ecPhzKOYk4Er2YR4uHKme4qDeIh6N3XrLfpuM7vzRWQ==",
732
+            "version": "4.32.1",
733
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.32.1.tgz",
734
+            "integrity": "sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==",
735 735
             "cpu": [
736 736
                 "ppc64"
737 737
             ],
@@ -743,9 +743,9 @@
743 743
             ]
744 744
         },
745 745
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
746
-            "version": "4.31.0",
747
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.31.0.tgz",
748
-            "integrity": "sha512-wal2Tc8O5lMBtoePLBYRKj2CImUCJ4UNGJlLwspx7QApYny7K1cUYlzQ/4IGQBLmm+y0RS7dwc3TDO/pmcneTw==",
746
+            "version": "4.32.1",
747
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.32.1.tgz",
748
+            "integrity": "sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==",
749 749
             "cpu": [
750 750
                 "riscv64"
751 751
             ],
@@ -757,9 +757,9 @@
757 757
             ]
758 758
         },
759 759
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
760
-            "version": "4.31.0",
761
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.31.0.tgz",
762
-            "integrity": "sha512-O1o5EUI0+RRMkK9wiTVpk2tyzXdXefHtRTIjBbmFREmNMy7pFeYXCFGbhKFwISA3UOExlo5GGUuuj3oMKdK6JQ==",
760
+            "version": "4.32.1",
761
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.32.1.tgz",
762
+            "integrity": "sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==",
763 763
             "cpu": [
764 764
                 "s390x"
765 765
             ],
@@ -771,9 +771,9 @@
771 771
             ]
772 772
         },
773 773
         "node_modules/@rollup/rollup-linux-x64-gnu": {
774
-            "version": "4.31.0",
775
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.31.0.tgz",
776
-            "integrity": "sha512-zSoHl356vKnNxwOWnLd60ixHNPRBglxpv2g7q0Cd3Pmr561gf0HiAcUBRL3S1vPqRC17Zo2CX/9cPkqTIiai1g==",
774
+            "version": "4.32.1",
775
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.32.1.tgz",
776
+            "integrity": "sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==",
777 777
             "cpu": [
778 778
                 "x64"
779 779
             ],
@@ -785,9 +785,9 @@
785 785
             ]
786 786
         },
787 787
         "node_modules/@rollup/rollup-linux-x64-musl": {
788
-            "version": "4.31.0",
789
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.31.0.tgz",
790
-            "integrity": "sha512-ypB/HMtcSGhKUQNiFwqgdclWNRrAYDH8iMYH4etw/ZlGwiTVxBz2tDrGRrPlfZu6QjXwtd+C3Zib5pFqID97ZA==",
788
+            "version": "4.32.1",
789
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.32.1.tgz",
790
+            "integrity": "sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==",
791 791
             "cpu": [
792 792
                 "x64"
793 793
             ],
@@ -799,9 +799,9 @@
799 799
             ]
800 800
         },
801 801
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
802
-            "version": "4.31.0",
803
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.31.0.tgz",
804
-            "integrity": "sha512-JuhN2xdI/m8Hr+aVO3vspO7OQfUFO6bKLIRTAy0U15vmWjnZDLrEgCZ2s6+scAYaQVpYSh9tZtRijApw9IXyMw==",
802
+            "version": "4.32.1",
803
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.32.1.tgz",
804
+            "integrity": "sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==",
805 805
             "cpu": [
806 806
                 "arm64"
807 807
             ],
@@ -813,9 +813,9 @@
813 813
             ]
814 814
         },
815 815
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
816
-            "version": "4.31.0",
817
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.31.0.tgz",
818
-            "integrity": "sha512-U1xZZXYkvdf5MIWmftU8wrM5PPXzyaY1nGCI4KI4BFfoZxHamsIe+BtnPLIvvPykvQWlVbqUXdLa4aJUuilwLQ==",
816
+            "version": "4.32.1",
817
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.32.1.tgz",
818
+            "integrity": "sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==",
819 819
             "cpu": [
820 820
                 "ia32"
821 821
             ],
@@ -827,9 +827,9 @@
827 827
             ]
828 828
         },
829 829
         "node_modules/@rollup/rollup-win32-x64-msvc": {
830
-            "version": "4.31.0",
831
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.31.0.tgz",
832
-            "integrity": "sha512-ul8rnCsUumNln5YWwz0ted2ZHFhzhRRnkpBZ+YRuHoRAlUji9KChpOUOndY7uykrPEPXVbHLlsdo6v5yXo/TXw==",
830
+            "version": "4.32.1",
831
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.32.1.tgz",
832
+            "integrity": "sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==",
833 833
             "cpu": [
834 834
                 "x64"
835 835
             ],
@@ -1074,9 +1074,9 @@
1074 1074
             }
1075 1075
         },
1076 1076
         "node_modules/caniuse-lite": {
1077
-            "version": "1.0.30001695",
1078
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001695.tgz",
1079
-            "integrity": "sha512-vHyLade6wTgI2u1ec3WQBxv+2BrTERV28UXQu9LO6lZ9pYeMk34vjXFLOxo1A4UBA8XTL4njRQZdno/yYaSmWw==",
1077
+            "version": "1.0.30001696",
1078
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
1079
+            "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
1080 1080
             "dev": true,
1081 1081
             "funding": [
1082 1082
                 {
@@ -1235,9 +1235,9 @@
1235 1235
             "license": "MIT"
1236 1236
         },
1237 1237
         "node_modules/electron-to-chromium": {
1238
-            "version": "1.5.84",
1239
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.84.tgz",
1240
-            "integrity": "sha512-I+DQ8xgafao9Ha6y0qjHHvpZ9OfyA1qKlkHkjywxzniORU2awxyz7f/iVJcULmrF2yrM3nHQf+iDjJtbbexd/g==",
1238
+            "version": "1.5.89",
1239
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.89.tgz",
1240
+            "integrity": "sha512-okLMJSmbI+XHr8aG+wCK+VPH+d38sHMED6/q1CTsCNkqfdOZL3k2ThWnh44HL6bJKj9cabPCSVLDv9ynsIm8qg==",
1241 1241
             "dev": true,
1242 1242
             "license": "ISC"
1243 1243
         },
@@ -2242,9 +2242,9 @@
2242 2242
             }
2243 2243
         },
2244 2244
         "node_modules/rollup": {
2245
-            "version": "4.31.0",
2246
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.31.0.tgz",
2247
-            "integrity": "sha512-9cCE8P4rZLx9+PjoyqHLs31V9a9Vpvfo4qNcs6JCiGWYhw2gijSetFbH6SSy1whnkgcefnUwr8sad7tgqsGvnw==",
2245
+            "version": "4.32.1",
2246
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.32.1.tgz",
2247
+            "integrity": "sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==",
2248 2248
             "dev": true,
2249 2249
             "license": "MIT",
2250 2250
             "dependencies": {
@@ -2258,25 +2258,25 @@
2258 2258
                 "npm": ">=8.0.0"
2259 2259
             },
2260 2260
             "optionalDependencies": {
2261
-                "@rollup/rollup-android-arm-eabi": "4.31.0",
2262
-                "@rollup/rollup-android-arm64": "4.31.0",
2263
-                "@rollup/rollup-darwin-arm64": "4.31.0",
2264
-                "@rollup/rollup-darwin-x64": "4.31.0",
2265
-                "@rollup/rollup-freebsd-arm64": "4.31.0",
2266
-                "@rollup/rollup-freebsd-x64": "4.31.0",
2267
-                "@rollup/rollup-linux-arm-gnueabihf": "4.31.0",
2268
-                "@rollup/rollup-linux-arm-musleabihf": "4.31.0",
2269
-                "@rollup/rollup-linux-arm64-gnu": "4.31.0",
2270
-                "@rollup/rollup-linux-arm64-musl": "4.31.0",
2271
-                "@rollup/rollup-linux-loongarch64-gnu": "4.31.0",
2272
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.31.0",
2273
-                "@rollup/rollup-linux-riscv64-gnu": "4.31.0",
2274
-                "@rollup/rollup-linux-s390x-gnu": "4.31.0",
2275
-                "@rollup/rollup-linux-x64-gnu": "4.31.0",
2276
-                "@rollup/rollup-linux-x64-musl": "4.31.0",
2277
-                "@rollup/rollup-win32-arm64-msvc": "4.31.0",
2278
-                "@rollup/rollup-win32-ia32-msvc": "4.31.0",
2279
-                "@rollup/rollup-win32-x64-msvc": "4.31.0",
2261
+                "@rollup/rollup-android-arm-eabi": "4.32.1",
2262
+                "@rollup/rollup-android-arm64": "4.32.1",
2263
+                "@rollup/rollup-darwin-arm64": "4.32.1",
2264
+                "@rollup/rollup-darwin-x64": "4.32.1",
2265
+                "@rollup/rollup-freebsd-arm64": "4.32.1",
2266
+                "@rollup/rollup-freebsd-x64": "4.32.1",
2267
+                "@rollup/rollup-linux-arm-gnueabihf": "4.32.1",
2268
+                "@rollup/rollup-linux-arm-musleabihf": "4.32.1",
2269
+                "@rollup/rollup-linux-arm64-gnu": "4.32.1",
2270
+                "@rollup/rollup-linux-arm64-musl": "4.32.1",
2271
+                "@rollup/rollup-linux-loongarch64-gnu": "4.32.1",
2272
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.32.1",
2273
+                "@rollup/rollup-linux-riscv64-gnu": "4.32.1",
2274
+                "@rollup/rollup-linux-s390x-gnu": "4.32.1",
2275
+                "@rollup/rollup-linux-x64-gnu": "4.32.1",
2276
+                "@rollup/rollup-linux-x64-musl": "4.32.1",
2277
+                "@rollup/rollup-win32-arm64-msvc": "4.32.1",
2278
+                "@rollup/rollup-win32-ia32-msvc": "4.32.1",
2279
+                "@rollup/rollup-win32-x64-msvc": "4.32.1",
2280 2280
                 "fsevents": "~2.3.2"
2281 2281
             }
2282 2282
         },

+ 4
- 0
resources/css/filament/company/theme.css 파일 보기

@@ -14,6 +14,10 @@
14 14
     @apply bg-platinum;
15 15
 }
16 16
 
17
+.fi-dropdown-panel {
18
+    @apply divide-gray-200/80;
19
+}
20
+
17 21
 .fi-badge {
18 22
     display: inline-flex;
19 23
 }

+ 174
- 166
resources/data/lang/ar.json 파일 보기

@@ -1,189 +1,197 @@
1 1
 {
2 2
     "General": "جنرال لواء",
3
-    "Number Prefix": "بادئة الأرقام",
4
-    "Number Digits": "أرقام الأرقام",
5
-    "Content": "المحتوى",
6
-    "Header": "رأس الصفحة",
7
-    "Template": "القالب",
8
-    "Number Next": "الرقم التالي",
9
-    "Accent Color": "لون أكسنت",
10
-    "Item Name": "اسم العنصر",
11
-    "Unit Name": "اسم الوحدة",
12
-    "Quantity": "الكمية",
13
-    "Symbol": "الرمز",
14
-    "Sales Tax": "ضريبة المبيعات",
15
-    "teal": "البط البري",
16
-    "Investment": "الاستثمار",
17
-    "sky": "سماء",
18
-    "Screen Extra Large": "شاشة كبيرة جدًا",
19
-    "General Partnership": "شراكة عامة",
20
-    "Sales": "المبيعات",
21
-    "Max Content Width": "عرض المحتوى الأقصى",
22
-    "yellow": "الأصفر",
23
-    "Phone Number": "رقم الهاتف",
24
-    "Code": "الكود",
25
-    "Yes": "نعم",
26
-    "Hours": "ساعات",
27
-    "gray": "رمادي",
28
-    "3X Large": "مقاس كبير 3 مرات",
29
-    "Tax": "ضريبة",
30
-    "Timezone": "المنطقة الزمنية",
31
-    "Type": "النوع",
32
-    "Primary Color": "اللون الأساسي",
33
-    "Top Navigation": "التنقل العلوي",
34
-    "Date Format": "صيغة التاريخ",
35
-    "Price Name": "اسم السعر",
36
-    "Credit": "الائتمان",
37
-    "Department": "قسم",
38
-    "Precision": "الدقة",
39
-    "Entity Type": "نوع الكيان",
40
-    "Before Number": "قبل الرقم",
41
-    "Net 10": "نت 10",
42
-    "Number Format": "صيغة الأرقام",
43
-    "Company Profile": "ملف الشركة",
44
-    "Purchase": "شراء",
45
-    "Select Position": "حدد الوظيفة",
46
-    "Due Upon Receipt": "تستحق عند الاستلام",
47
-    "zinc": "زنك",
48
-    "Rate": "معدل",
49
-    "Amount Name": "اسم المبلغ",
50
-    "Company Currencies": "عملات الشركة",
51
-    "Before Amount": "قبل المبلغ",
52
-    "Enabled": "تم تمكينه",
53
-    "Net 15": "شبكة 15",
54
-    "State \/ Province": "الولاية\/المقاطعة",
55
-    "Striped Tables": "طاولات مخططة",
56
-    "Net 90": "نت 90",
57
-    "Date & Time": "التاريخ والوقت",
58
-    "Entity": "الكيان",
3
+    "Bank account": "حساب بنكي",
4
+    "Currency": "العملة",
5
+    "Taxes & Discounts": "الضرائب والخصومات",
6
+    "Sales tax": "ضريبة المبيعات",
7
+    "Purchase tax": "ضريبة الشراء",
8
+    "Sales discount": "خصم المبيعات",
9
+    "Purchase discount": "خصم الشراء",
10
+    "Appearance": "المظهر",
59 11
     "Default": "إفتراضي",
60
-    "Bank Account": "حساب بنكي",
61
-    "Amount": "المبلغ",
12
+    "Company Profile": "ملف الشركة",
13
+    "Invoice": "الفاتورة",
14
+    "Localization": "التعريب",
15
+    "Discount": "الخصم",
16
+    "Tax": "ضريبة",
62 17
     "Accounting": "المحاسبة",
63 18
     "Banking": "الخدمات المصرفية",
64
-    "Service": "خدمة",
65 19
     "Account": "الحساب",
66
-    "Compound": "مركب",
67
-    "amber": "كهرمان",
68
-    "green": "خضراء",
69
-    "Loan": "قرض",
70
-    "Percent Position": "موضع النسبة المئوية",
71
-    "After Amount": "بعد المبلغ",
72
-    "neutral": "محايد",
73
-    "Main": "الرئيسية",
74
-    "Account Information": "معلومات الحساب",
75
-    "No": "لا",
76
-    "Classic": "كلاسيكي",
77
-    "Net 60": "نت 60",
78
-    "Computation": "الحساب",
79
-    "Symbol Position": "موضع الرمز",
80
-    "Select a symbol position": "حدد موضع الرمز",
81
-    "Default :Type :Record": "الخيار الافتراضي :Type :Record",
82
-    "Name": "الاسم",
20
+    "Department": "قسم",
83 21
     "Services": "خدمات",
84
-    "Financial & Fiscal": "المالية والمالية",
22
+    "Connected Accounts": "الحسابات المتصلة",
23
+    "Live Currency": "العملة الحية",
24
+    "Primary color": "اللون الأساسي",
25
+    "amber": "كهرمان",
85 26
     "blue": "أزرق",
86 27
     "cyan": "ازرق سماوي",
87
-    "Screen 2X Large": "شاشة كبيرة 2X",
88
-    "Medium": "متوسط",
89
-    "Subheader": "عنوان فرعي",
90
-    "Limited Partnership (LP)": "شراكة محدودة (LP)",
91
-    "Children": "الأطفال",
92
-    "Available": "متاح",
93
-    "Show Logo": "عرض الشعار",
94 28
     "emerald": "زمرد",
29
+    "fuchsia": "فوشيا",
30
+    "gray": "رمادي",
31
+    "green": "خضراء",
95 32
     "indigo": "نيلي",
96
-    "Current Balance": "الرصيد الحالي",
97
-    "Tax ID": "معرف الضريبة",
98
-    "Modal Width": "عرض مشروط",
99
-    "Fixed": "ثابت",
100
-    "Start Date": "تاريخ البدء",
33
+    "lime": "جير",
34
+    "neutral": "محايد",
101 35
     "orange": "البرتقالي",
102
-    "Invoice": "الفاتورة",
103
-    "Account Number": "رقم الحساب",
104
-    "Manager": "مدير",
105
-    "Sales Discount": "خصم المبيعات",
106
-    "Currency": "العملة",
107
-    "Localization": "التعريب",
108
-    "Parent Department": "قسم أولياء الأمور",
109
-    "Default :Record": "الخيار الافتراضي :Record",
110
-    "Disabled": "معاق",
111
-    "Appearance": "المظهر",
112
-    "Price": "السعر",
113
-    "fuchsia": "فوشيا",
114
-    "Language": "اللغة",
115
-    "Total": "المجموع",
116
-    "red": "أحمر",
117 36
     "pink": "وردي",
37
+    "purple": "أرجواني",
38
+    "red": "أحمر",
118 39
     "rose": "وردة",
40
+    "sky": "سماء",
41
+    "slate": "أردواز",
42
+    "stone": "حجر",
43
+    "teal": "البط البري",
119 44
     "violet": "بنفسج",
120
-    "Sole Proprietorship": "الملكية الفردية",
121
-    "All": "جميع",
122
-    "Layout": "التخطيط",
123
-    "Footer \/ Notes": "تذييل الصفحة\\ ملاحظات",
124
-    "Percentage": "النسبة المئوية",
125
-    "Purchase Tax": "ضريبة الشراء",
126
-    "Thousands Separator": "فاصل الآلاف",
127
-    "7X Large": "مقاس كبير 7 مرات",
128
-    "Side Navigation": "التنقل الجانبي",
129
-    "4X Large": "4 × كبير",
130
-    "Net 7": "نت 7",
131
-    "Live Rate": "السعر المباشر",
132
-    "Screen": "شاشة",
133
-    "Decimal Separator": "فاصل عشري",
134
-    "Currency List": "قائمة العملات",
135
-    "Zip \/ Postal Code": "الرمز البريدي\/الرمز البريدي",
136
-    "5X Large": "مقاس كبير 5 مرات",
137
-    "Purchase Discount": "خصم الشراء",
138
-    "Scope": "النطاق",
139
-    "lime": "جير",
140
-    "Subtype": "نوع فرعي",
141
-    "Extra Large": "مقاس كبير جدًا",
142
-    "Legal & Compliance": "الشؤون القانونية والامتثال",
143
-    "Navigation Layout": "تخطيط التنقل",
144
-    "Street Address": "عنوان الشارع",
145
-    "Description": "وصف",
146
-    "purple": "أرجواني",
45
+    "yellow": "الأصفر",
46
+    "zinc": "زنك",
147 47
     "Font": "الخط",
148
-    "Small": "صغير",
149
-    "Corporation": "مؤسسة",
150
-    "stone": "حجر",
151
-    "slate": "أردواز",
152
-    "Live Currency": "العملة الحية",
153
-    "Screen Large": "شاشة كبيرة",
154
-    "6X Large": "مقاس كبير 6 مرات",
48
+    "Enabled": "تم تمكينه",
49
+    "Disabled": "معاق",
50
+    "Identification": "تحديد",
51
+    "Email": "البريد الإلكتروني",
52
+    "Phone number": "رقم الهاتف",
53
+    "Logo": "الشعار",
54
+    "Location Details": "تفاصيل الموقع",
55
+    "Country": "البلد",
56
+    "State \/ Province": "الولاية\/المقاطعة",
57
+    "Street Address": "عنوان الشارع",
155 58
     "City \/ Town": "المدينة\/المدينة",
59
+    "Zip \/ Postal Code": "الرمز البريدي\/الرمز البريدي",
60
+    "Legal & Compliance": "الشؤون القانونية والامتثال",
61
+    "Entity type": "نوع الكيان",
62
+    "Tax ID": "معرف الضريبة",
63
+    "Sole Proprietorship": "الملكية الفردية",
64
+    "General Partnership": "شراكة عامة",
65
+    "Limited Partnership (LP)": "شراكة محدودة (LP)",
156 66
     "Limited Liability Partnership (LLP)": "شراكة ذات مسؤولية محدودة (LLP)",
157
-    "Payment Terms": "شروط الدفع",
158
-    "Data Presentation": "عرض البيانات",
159
-    "Connected Accounts": "الحسابات المتصلة",
160
-    "Modern": "حديث",
161
-    "Country": "البلد",
162
-    "Full": "كامل",
163
-    "Table Sort Direction": "اتجاه فرز الجدول",
67
+    "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)",
68
+    "Corporation": "مؤسسة",
164 69
     "Nonprofit": "غير ربحي",
165
-    "Records Per Page": "سجلات لكل صفحة",
166
-    "Location Details": "تفاصيل الموقع",
167
-    "Extra Small": "صغير جدًا",
168
-    "End Date": "تاريخ النهاية",
169
-    "Taxes & Discounts": "الضرائب والخصومات",
170
-    "After Number": "بعد الرقم",
171
-    "Time Format": "صيغة الوقت",
172
-    "Ascending": "تصاعدي",
70
+    "Number prefix": "بادئة الأرقام",
71
+    "Number digits": "أرقام الأرقام",
72
+    "Number next": "الرقم التالي",
73
+    "Payment terms": "شروط الدفع",
74
+    "Content": "المحتوى",
75
+    "Header": "رأس الصفحة",
76
+    "Subheader": "عنوان فرعي",
77
+    "Footer \/ notes": "تذييل الصفحة\\ ملاحظات",
78
+    "Template": "القالب",
79
+    "Show logo": "عرض الشعار",
80
+    "Accent color": "لون أكسنت",
81
+    "Item name": "اسم العنصر",
82
+    "Items": "العناصر",
83
+    "Products": "منتجات",
84
+    "Other": "أخرى",
85
+    "Unit name": "اسم الوحدة",
86
+    "Quantity": "الكمية",
87
+    "Hours": "ساعات",
88
+    "Price name": "اسم السعر",
89
+    "Price": "السعر",
90
+    "Rate": "معدل",
91
+    "Amount name": "اسم المبلغ",
92
+    "Amount": "المبلغ",
93
+    "Total": "المجموع",
94
+    "Due Upon Receipt": "تستحق عند الاستلام",
95
+    "Net 7": "نت 7",
96
+    "Net 10": "نت 10",
97
+    "Net 15": "شبكة 15",
173 98
     "Net 30": "شبكة 30",
174
-    "Identification": "تحديد",
175
-    "Email": "البريد الإلكتروني",
176
-    "2X Large": "2 × حجم كبير",
99
+    "Net 60": "نت 60",
100
+    "Net 90": "نت 90",
101
+    "Modern": "حديث",
102
+    "Classic": "كلاسيكي",
103
+    "Language": "اللغة",
104
+    "Timezone": "المنطقة الزمنية",
105
+    "Date & Time": "التاريخ والوقت",
106
+    "Date format": "صيغة التاريخ",
107
+    "Time format": "صيغة الوقت",
108
+    "Week start": "بداية الأسبوع",
109
+    "Before number": "قبل الرقم",
110
+    "After number": "بعد الرقم",
111
+    "Select position": "حدد الوظيفة",
112
+    "Financial & Fiscal": "المالية والمالية",
113
+    "Number format": "صيغة الأرقام",
114
+    "Percent position": "موضع النسبة المئوية",
115
+    "Name": "الاسم",
116
+    "Code": "الكود",
117
+    "Symbol": "الرمز",
118
+    "Default :record": "الخيار الافتراضي :record",
119
+    "Type": "النوع",
120
+    "Start date": "تاريخ البدء",
121
+    "End date": "تاريخ النهاية",
122
+    "Sales": "المبيعات",
123
+    "Default :type :record": "الخيار الافتراضي :type :record",
124
+    "Purchase": "شراء",
125
+    "Precision": "الدقة",
126
+    "Symbol position": "موضع الرمز",
127
+    "Before amount": "قبل المبلغ",
128
+    "After amount": "بعد المبلغ",
129
+    "Select a symbol position": "حدد موضع الرمز",
130
+    "Decimal separator": "فاصل عشري",
131
+    "Thousands separator": "فاصل الآلاف",
132
+    "Yes": "نعم",
133
+    "No": "لا",
134
+    "Description": "وصف",
135
+    "Computation": "الحساب",
136
+    "Scope": "النطاق",
137
+    "Percentage": "النسبة المئوية",
138
+    "Fixed": "ثابت",
177 139
     "None": "لا شيء",
178
-    "Discount": "الخصم",
179
-    "Depository": "جهة الإيداع",
180
-    "Week Start": "بداية الأسبوع",
181 140
     "Product": "المنتج",
182
-    "Items": "العناصر",
183
-    "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)",
184
-    "Large": "كبير",
185
-    "Descending": "تنازلي",
186
-    "Other": "أخرى",
187
-    "Logo": "الشعار",
188
-    "Products": "منتجات"
141
+    "Service": "خدمة",
142
+    "Compound": "مركب",
143
+    "Current balance": "الرصيد الحالي",
144
+    "Account Information": "معلومات الحساب",
145
+    "Subtype": "نوع فرعي",
146
+    "Account number": "رقم الحساب",
147
+    "Investment": "الاستثمار",
148
+    "Credit": "الائتمان",
149
+    "Depository": "جهة الإيداع",
150
+    "Loan": "قرض",
151
+    "Manager": "مدير",
152
+    "Children": "الأطفال",
153
+    "All": "جميع",
154
+    "Main": "الرئيسية",
155
+    "Parent department": "قسم أولياء الأمور",
156
+    "Currency List": "قائمة العملات",
157
+    "Company Currencies": "عملات الشركة",
158
+    "Entity": "الكيان",
159
+    "Available": "متاح",
160
+    "Live rate": "السعر المباشر",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 144
- 136
resources/data/lang/de.json 파일 보기

@@ -1,161 +1,134 @@
1 1
 {
2 2
     "General": "Allgemeines",
3
-    "Bank Account": "Bankkonto",
4
-    "slate": "Schiefer",
5
-    "indigo": "Indigoblau",
6
-    "lime": "Kalk",
7
-    "Extra Small": "Extra klein",
8
-    "Enabled": "Aktiviert",
9
-    "neutral": "neutral",
10
-    "Items": "Artikel",
11
-    "pink": "pink",
12
-    "Medium": "Mittel",
3
+    "Bank account": "Bankkonto",
4
+    "Currency": "Währung",
5
+    "Taxes & Discounts": "Steuern und Rabatte",
6
+    "Sales tax": "Umsatzsteuer",
7
+    "Purchase tax": "Umsatzsteuer",
8
+    "Sales discount": "Verkaufsrabatt",
9
+    "Purchase discount": "Rabatt beim Kauf",
10
+    "Appearance": "Aussehen",
11
+    "Default": "Standard",
12
+    "Company Profile": "Profil des Unternehmens",
13
+    "Invoice": "Rechnung",
14
+    "Localization": "Lokalisation",
15
+    "Discount": "Rabatt",
16
+    "Tax": "Steuer",
17
+    "Accounting": "Rechnungswesen",
18
+    "Banking": "Bankwesen",
13 19
     "Account": "Konto",
14
-    "Other": "Andere",
15
-    "Sales Tax": "Umsatzsteuer",
16 20
     "Department": "Abteilung",
17
-    "stone": "Stein",
18
-    "yellow": "gelb",
19
-    "Total": "Insgesamt",
20
-    "Zip \/ Postal Code": "PLZ\/PLZ",
21
-    "Price": "Preis",
22
-    "Content": "Inhalt",
23
-    "Accounting": "Rechnungswesen",
24
-    "Discount": "Rabatt",
21
+    "Services": "Dienstleistungen",
22
+    "Connected Accounts": "Verbundene Konten",
23
+    "Live Currency": "Live-Währung",
24
+    "Primary color": "Primäre Farbe",
25
+    "amber": "Bernstein",
26
+    "blue": "blau",
25 27
     "cyan": "Cyan",
28
+    "emerald": "Smaragd",
29
+    "fuchsia": "Fuchsie",
26 30
     "gray": "grau",
31
+    "green": "grün",
32
+    "indigo": "Indigoblau",
33
+    "lime": "Kalk",
34
+    "neutral": "neutral",
27 35
     "orange": "orange",
28
-    "blue": "blau",
36
+    "pink": "pink",
37
+    "purple": "lila",
38
+    "red": "rot",
39
+    "rose": "Rose",
40
+    "sky": "Himmel",
41
+    "slate": "Schiefer",
42
+    "stone": "Stein",
43
+    "teal": "blaugrün",
29 44
     "violet": "violett",
45
+    "yellow": "gelb",
46
+    "zinc": "Zink",
30 47
     "Font": "Schrift",
31
-    "Screen": "Bildschirm",
32
-    "Banking": "Bankwesen",
33
-    "emerald": "Smaragd",
48
+    "Enabled": "Aktiviert",
34 49
     "Disabled": "Deaktiviert",
35
-    "Extra Large": "Extra groß",
36
-    "Classic": "Klassisch",
37
-    "sky": "Himmel",
38
-    "Email": "E-Mail",
39
-    "State \/ Province": "Bundesstaat\/ Provinz",
40
-    "Language": "Sprache",
41
-    "zinc": "Zink",
42
-    "Layout": "Raumaufteilung",
43
-    "fuchsia": "Fuchsie",
44
-    "rose": "Rose",
45
-    "Large": "Groß",
46
-    "Ascending": "Aufsteigend",
47
-    "purple": "lila",
48
-    "Phone Number": "Telefonnummer",
49
-    "Quantity": "Menge",
50
-    "Localization": "Lokalisation",
51
-    "Tax": "Steuer",
52
-    "green": "grün",
53
-    "red": "rot",
54
-    "Small": "Klein",
55 50
     "Identification": "Identifikation",
56
-    "Products": "Produkte",
57
-    "Template": "Schablone",
58
-    "Modern": "modern",
59
-    "Date & Time": "Datum und Uhrzeit",
51
+    "Email": "E-Mail",
52
+    "Phone number": "Telefonnummer",
60 53
     "Logo": "Logo",
61
-    "Header": "Kopfzeile",
62
-    "Timezone": "Zeitzone",
63
-    "Full": "Voll",
54
+    "Location Details": "Angaben zum Standort",
64 55
     "Country": "Land",
65
-    "Services": "Dienstleistungen",
66
-    "Descending": "Absteigend",
67
-    "Amount": "Betrag",
68
-    "Appearance": "Aussehen",
69
-    "Invoice": "Rechnung",
70
-    "Entity Type": "Art der Entität",
71
-    "Corporation": "Korporation",
72
-    "Hours": "Stunden",
73
-    "Sales Discount": "Verkaufsrabatt",
74
-    "Rate": "Bewerte",
75
-    "2X Large": "2X Groß",
76
-    "Purchase Discount": "Rabatt beim Kauf",
77
-    "Navigation Layout": "Navigationslayout",
78
-    "Live Currency": "Live-Währung",
79
-    "Taxes & Discounts": "Steuern und Rabatte",
80
-    "Company Profile": "Profil des Unternehmens",
81
-    "General Partnership": "Allgemeine Partnerschaft",
82
-    "Net 7": "Netto 7",
83
-    "7X Large": "7X Groß",
84
-    "3X Large": "3X Groß",
85
-    "Number Prefix": "Nummernpräfix",
86
-    "Number Digits": "Anzahl Ziffern",
87
-    "Subheader": "Unterüberschrift",
88
-    "Accent Color": "Akzentfarbe",
89
-    "Due Upon Receipt": "Fällig bei Erhalt",
90
-    "Select Position": "Position wählen",
91
-    "Number Format": "Zahlenformat",
92
-    "Percent Position": "Prozentuale Position",
93
-    "Purchase Tax": "Umsatzsteuer",
94
-    "Connected Accounts": "Verbundene Konten",
95
-    "Max Content Width": "Max. Inhaltsbreite",
96
-    "Side Navigation": "Seitliche Navigation",
97
-    "Striped Tables": "Gestreifte Tische",
98
-    "4X Large": "4X Groß",
99
-    "6X Large": "6X Groß",
56
+    "State \/ Province": "Bundesstaat\/ Provinz",
57
+    "Street Address": "Straße & Adresse",
100 58
     "City \/ Town": "Stadt\/Stadt",
101
-    "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)",
102
-    "Primary Color": "Primäre Farbe",
59
+    "Zip \/ Postal Code": "PLZ\/PLZ",
103 60
     "Legal & Compliance": "Recht und Compliance",
104
-    "Default": "Standard",
61
+    "Entity type": "Art der Entität",
62
+    "Tax ID": "Steuer-ID",
105 63
     "Sole Proprietorship": "Einzelunternehmen",
64
+    "General Partnership": "Allgemeine Partnerschaft",
106 65
     "Limited Partnership (LP)": "Kommanditgesellschaft (LP)",
66
+    "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)",
107 67
     "Limited Liability Company (LLC)": "Gesellschaft mit beschränkter Haftung (LLC)",
68
+    "Corporation": "Korporation",
108 69
     "Nonprofit": "Gemeinnützig",
109
-    "Before Number": "Vor der Nummer",
110
-    "Currency": "Währung",
111
-    "Modal Width": "Modale Breite",
112
-    "Screen Extra Large": "Extragroßer Bildschirm",
113
-    "Show Logo": "Logo einblenden",
114
-    "Price Name": "Name des Preises",
115
-    "Amount Name": "Name des Betrags",
116
-    "Net 60": "Netto 60",
117
-    "Net 90": "Netto 90",
118
-    "Week Start": "Wochenstart",
119
-    "Street Address": "Straße & Adresse",
120
-    "Tax ID": "Steuer-ID",
121
-    "Date Format": "Datumsformat",
122
-    "Number Next": "Nummer Weiter",
70
+    "Number prefix": "Nummernpräfix",
71
+    "Number digits": "Anzahl Ziffern",
72
+    "Number next": "Nummer Weiter",
73
+    "Payment terms": "Zahlungsbedingungen",
74
+    "Content": "Inhalt",
75
+    "Header": "Kopfzeile",
76
+    "Subheader": "Unterüberschrift",
77
+    "Footer \/ notes": "Fußzeile\/\/Notizen",
78
+    "Template": "Schablone",
79
+    "Show logo": "Logo einblenden",
80
+    "Accent color": "Akzentfarbe",
81
+    "Item name": "Name des Artikels",
82
+    "Items": "Artikel",
83
+    "Products": "Produkte",
84
+    "Other": "Andere",
85
+    "Unit name": "Name der Einheit",
86
+    "Quantity": "Menge",
87
+    "Hours": "Stunden",
88
+    "Price name": "Name des Preises",
89
+    "Price": "Preis",
90
+    "Rate": "Bewerte",
91
+    "Amount name": "Name des Betrags",
92
+    "Amount": "Betrag",
93
+    "Total": "Insgesamt",
94
+    "Due Upon Receipt": "Fällig bei Erhalt",
95
+    "Net 7": "Netto 7",
123 96
     "Net 10": "Netto 10",
124 97
     "Net 15": "Netto 15",
125
-    "teal": "blaugrün",
126
-    "amber": "Bernstein",
127
-    "Location Details": "Angaben zum Standort",
128
-    "Item Name": "Name des Artikels",
129
-    "Time Format": "Zeitformat",
130
-    "Top Navigation": "Navigation nach oben",
131
-    "Screen Large": "Bildschirm groß",
132
-    "Unit Name": "Name der Einheit",
133
-    "Footer \/ Notes": "Fußzeile\/\/Notizen",
134
-    "5X Large": "5X Groß",
135 98
     "Net 30": "Netto 30",
136
-    "Table Sort Direction": "Sortierrichtung der Tabelle",
137
-    "Screen 2X Large": "Bildschirm 2X groß",
138
-    "After Number": "Nach Nummer",
99
+    "Net 60": "Netto 60",
100
+    "Net 90": "Netto 90",
101
+    "Modern": "modern",
102
+    "Classic": "Klassisch",
103
+    "Language": "Sprache",
104
+    "Timezone": "Zeitzone",
105
+    "Date & Time": "Datum und Uhrzeit",
106
+    "Date format": "Datumsformat",
107
+    "Time format": "Zeitformat",
108
+    "Week start": "Wochenstart",
109
+    "Before number": "Vor der Nummer",
110
+    "After number": "Nach Nummer",
111
+    "Select position": "Position wählen",
139 112
     "Financial & Fiscal": "Finanziell und steuerlich",
140
-    "Data Presentation": "Präsentation der Daten",
141
-    "Payment Terms": "Zahlungsbedingungen",
142
-    "Records Per Page": "Datensätze pro Seite",
113
+    "Number format": "Zahlenformat",
114
+    "Percent position": "Prozentuale Position",
143 115
     "Name": "Name",
144 116
     "Code": "Kode",
145 117
     "Symbol": "Symbol",
146
-    "Default :Record": "Standard :Record",
118
+    "Default :record": "Standard :record",
147 119
     "Type": "Typ",
148
-    "Start Date": "Startdatum",
149
-    "End Date": "Enddatum",
120
+    "Start date": "Startdatum",
121
+    "End date": "Enddatum",
150 122
     "Sales": "Verkäufe",
123
+    "Default :type :record": "Standard :type :record",
151 124
     "Purchase": "Kauf",
152 125
     "Precision": "Präzision",
153
-    "Symbol Position": "Position des Symbols",
154
-    "Before Amount": "Vor dem Betrag",
155
-    "After Amount": "Nach Betrag",
126
+    "Symbol position": "Position des Symbols",
127
+    "Before amount": "Vor dem Betrag",
128
+    "After amount": "Nach Betrag",
156 129
     "Select a symbol position": "Wählen Sie eine Symbolposition",
157
-    "Decimal Separator": "Dezimaltrennzeichen",
158
-    "Thousands Separator": "Tausender-Trennzeichen",
130
+    "Decimal separator": "Dezimaltrennzeichen",
131
+    "Thousands separator": "Tausender-Trennzeichen",
159 132
     "Yes": "Ja",
160 133
     "No": "Nein",
161 134
     "Description": "Beschreibung",
@@ -167,23 +140,58 @@
167 140
     "Product": "Produkt",
168 141
     "Service": "Bedienung",
169 142
     "Compound": "Verbindung",
170
-    "Current Balance": "Aktueller Saldo",
143
+    "Current balance": "Aktueller Saldo",
171 144
     "Account Information": "Informationen zum Konto",
172 145
     "Subtype": "Subtyp",
173
-    "Account Number": "Kontonummer",
146
+    "Account number": "Kontonummer",
147
+    "Investment": "Investition",
174 148
     "Credit": "Kredit",
149
+    "Depository": "Verwahrstelle",
175 150
     "Loan": "Darlehen",
176 151
     "Manager": "Geschäftsführer",
177 152
     "Children": "Kinder",
178
-    "Investment": "Investition",
179
-    "Depository": "Verwahrstelle",
180 153
     "All": "Alle",
181 154
     "Main": "Haupt",
182
-    "Entity": "Entität",
183
-    "Available": "Verfügbar",
184
-    "Parent Department": "Elternabteilung",
155
+    "Parent department": "Elternabteilung",
185 156
     "Currency List": "Liste der Währungen",
186 157
     "Company Currencies": "Währungen des Unternehmens",
187
-    "Live Rate": "Live-Tarif",
188
-    "Default :Type :Record": "Standard :Type :Record"
158
+    "Entity": "Entität",
159
+    "Available": "Verfügbar",
160
+    "Live rate": "Live-Tarif",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 46
- 74
resources/data/lang/en.json 파일 보기

@@ -1,12 +1,12 @@
1 1
 {
2 2
     "General": "General",
3
-    "Bank Account": "Bank Account",
3
+    "Bank account": "Bank account",
4 4
     "Currency": "Currency",
5 5
     "Taxes & Discounts": "Taxes & Discounts",
6
-    "Sales Tax": "Sales Tax",
7
-    "Purchase Tax": "Purchase Tax",
8
-    "Sales Discount": "Sales Discount",
9
-    "Purchase Discount": "Purchase Discount",
6
+    "Sales tax": "Sales tax",
7
+    "Purchase tax": "Purchase tax",
8
+    "Sales discount": "Sales discount",
9
+    "Purchase discount": "Purchase Discount",
10 10
     "Appearance": "Appearance",
11 11
     "Default": "Default",
12 12
     "Company Profile": "Company Profile",
@@ -21,7 +21,7 @@
21 21
     "Services": "Services",
22 22
     "Connected Accounts": "Connected Accounts",
23 23
     "Live Currency": "Live Currency",
24
-    "Primary Color": "Primary Color",
24
+    "Primary color": "Primary color",
25 25
     "amber": "amber",
26 26
     "blue": "blue",
27 27
     "cyan": "cyan",
@@ -45,39 +45,11 @@
45 45
     "yellow": "yellow",
46 46
     "zinc": "zinc",
47 47
     "Font": "Font",
48
-    "Layout": "Layout",
49
-    "Max Content Width": "Max Content Width",
50
-    "Modal Width": "Modal Width",
51
-    "Navigation Layout": "Navigation Layout",
52
-    "Top Navigation": "Top Navigation",
53
-    "Side Navigation": "Side Navigation",
54
-    "Striped Tables": "Striped Tables",
55 48
     "Enabled": "Enabled",
56 49
     "Disabled": "Disabled",
57
-    "Data Presentation": "Data Presentation",
58
-    "Table Sort Direction": "Table Sort Direction",
59
-    "Records Per Page": "Records Per Page",
60
-    "4X Large": "4X Large",
61
-    "5X Large": "5X Large",
62
-    "6X Large": "6X Large",
63
-    "7X Large": "7X Large",
64
-    "Screen Large": "Screen Large",
65
-    "Screen Extra Large": "Screen Extra Large",
66
-    "Screen 2X Large": "Screen 2X Large",
67
-    "Full": "Full",
68
-    "Extra Small": "Extra Small",
69
-    "Small": "Small",
70
-    "Medium": "Medium",
71
-    "Large": "Large",
72
-    "Extra Large": "Extra Large",
73
-    "2X Large": "2X Large",
74
-    "3X Large": "3X Large",
75
-    "Screen": "Screen",
76
-    "Ascending": "Ascending",
77
-    "Descending": "Descending",
78 50
     "Identification": "Identification",
79 51
     "Email": "Email",
80
-    "Phone Number": "Phone Number",
52
+    "Phone number": "Phone number",
81 53
     "Logo": "Logo",
82 54
     "Location Details": "Location Details",
83 55
     "Country": "Country",
@@ -86,7 +58,7 @@
86 58
     "City \/ Town": "City \/ Town",
87 59
     "Zip \/ Postal Code": "Zip \/ Postal Code",
88 60
     "Legal & Compliance": "Legal & Compliance",
89
-    "Entity Type": "Entity Type",
61
+    "Entity type": "Entity type",
90 62
     "Tax ID": "Tax ID",
91 63
     "Sole Proprietorship": "Sole Proprietorship",
92 64
     "General Partnership": "General Partnership",
@@ -95,28 +67,28 @@
95 67
     "Limited Liability Company (LLC)": "Limited Liability Company (LLC)",
96 68
     "Corporation": "Corporation",
97 69
     "Nonprofit": "Nonprofit",
98
-    "Number Prefix": "Number Prefix",
99
-    "Number Digits": "Number Digits",
100
-    "Number Next": "Number Next",
101
-    "Payment Terms": "Payment Terms",
70
+    "Number prefix": "Number prefix",
71
+    "Number digits": "Number digits",
72
+    "Number next": "Number next",
73
+    "Payment terms": "Payment terms",
102 74
     "Content": "Content",
103 75
     "Header": "Header",
104 76
     "Subheader": "Subheader",
105
-    "Footer \/ Notes": "Footer \/ Notes",
77
+    "Footer \/ notes": "Footer \/ notes",
106 78
     "Template": "Template",
107
-    "Show Logo": "Show Logo",
108
-    "Accent Color": "Accent Color",
109
-    "Item Name": "Item Name",
79
+    "Show logo": "Show logo",
80
+    "Accent color": "Accent color",
81
+    "Item name": "Item name",
110 82
     "Items": "Items",
111 83
     "Products": "Products",
112 84
     "Other": "Other",
113
-    "Unit Name": "Unit Name",
85
+    "Unit name": "Unit name",
114 86
     "Quantity": "Quantity",
115 87
     "Hours": "Hours",
116
-    "Price Name": "Price Name",
88
+    "Price name": "Price name",
117 89
     "Price": "Price",
118 90
     "Rate": "Rate",
119
-    "Amount Name": "Amount Name",
91
+    "Amount name": "Amount name",
120 92
     "Amount": "Amount",
121 93
     "Total": "Total",
122 94
     "Due Upon Receipt": "Due Upon Receipt",
@@ -131,32 +103,32 @@
131 103
     "Language": "Language",
132 104
     "Timezone": "Timezone",
133 105
     "Date & Time": "Date & Time",
134
-    "Date Format": "Date Format",
135
-    "Time Format": "Time Format",
136
-    "Week Start": "Week Start",
137
-    "Before Number": "Before Number",
138
-    "After Number": "After Number",
139
-    "Select Position": "Select Position",
106
+    "Date format": "Date format",
107
+    "Time format": "Time format",
108
+    "Week start": "Week start",
109
+    "Before number": "Before number",
110
+    "After number": "After number",
111
+    "Select position": "Select position",
140 112
     "Financial & Fiscal": "Financial & Fiscal",
141
-    "Number Format": "Number Format",
142
-    "Percent Position": "Percent Position",
113
+    "Number format": "Number format",
114
+    "Percent position": "Percent position",
143 115
     "Name": "Name",
144 116
     "Code": "Code",
145 117
     "Symbol": "Symbol",
146
-    "Default :Record": "Default :Record",
118
+    "Default :record": "Default :record",
147 119
     "Type": "Type",
148
-    "Start Date": "Start Date",
149
-    "End Date": "End Date",
120
+    "Start date": "Start date",
121
+    "End date": "End date",
150 122
     "Sales": "Sales",
151
-    "Default :Type :Record": "Default :Type :Record",
123
+    "Default :type :record": "Default :type :record",
152 124
     "Purchase": "Purchase",
153 125
     "Precision": "Precision",
154
-    "Symbol Position": "Symbol Position",
155
-    "Before Amount": "Before Amount",
156
-    "After Amount": "After Amount",
126
+    "Symbol position": "Symbol position",
127
+    "Before amount": "Before amount",
128
+    "After amount": "After amount",
157 129
     "Select a symbol position": "Select a symbol position",
158
-    "Decimal Separator": "Decimal Separator",
159
-    "Thousands Separator": "Thousands Separator",
130
+    "Decimal separator": "Decimal separator",
131
+    "Thousands separator": "Thousands separator",
160 132
     "Yes": "Yes",
161 133
     "No": "No",
162 134
     "Description": "Description",
@@ -168,10 +140,10 @@
168 140
     "Product": "Product",
169 141
     "Service": "Service",
170 142
     "Compound": "Compound",
171
-    "Current Balance": "Current Balance",
143
+    "Current balance": "Current balance",
172 144
     "Account Information": "Account Information",
173 145
     "Subtype": "Subtype",
174
-    "Account Number": "Account Number",
146
+    "Account number": "Account number",
175 147
     "Investment": "Investment",
176 148
     "Credit": "Credit",
177 149
     "Depository": "Depository",
@@ -180,17 +152,17 @@
180 152
     "Children": "Children",
181 153
     "All": "All",
182 154
     "Main": "Main",
183
-    "Parent Department": "Parent Department",
155
+    "Parent department": "Parent department",
184 156
     "Currency List": "Currency List",
185 157
     "Company Currencies": "Company Currencies",
186 158
     "Entity": "Entity",
187 159
     "Available": "Available",
188
-    "Live Rate": "Live Rate",
160
+    "Live rate": "Live rate",
189 161
     "Edit": "Edit",
190 162
     "Notes": "Notes",
191 163
     "Terms": "Terms",
192
-    "Ending Balance": "Ending Balance",
193
-    "Default :Type :Category": "Default :Type :Category",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
194 166
     "Category": "Category",
195 167
     "Configuration": "Configuration",
196 168
     "Dates": "Dates",
@@ -221,7 +193,7 @@
221 193
     "Scheduling Form": "Scheduling Form",
222 194
     "Approve": "Approve",
223 195
     "Frequency": "Frequency",
224
-    "Schedule Bounds": "Schedule Bounds",
225
-    "Time Zone": "Time Zone",
226
-    "Dates & Time": "Dates & Time"
227
-}
196
+    "Dates & Time": "Dates & Time",
197
+    "account": "account",
198
+    "currency": "currency"
199
+}

+ 119
- 149
resources/data/lang/es.json 파일 보기

@@ -1,191 +1,168 @@
1 1
 {
2 2
     "General": "General",
3
+    "Bank account": "Cuenta bancaria",
4
+    "Currency": "Moneda",
5
+    "Taxes & Discounts": "Impuestos y descuentos",
6
+    "Sales tax": "Impuesto sobre las ventas",
7
+    "Purchase tax": "Impuesto de compra",
8
+    "Sales discount": "Descuento de ventas",
9
+    "Purchase discount": "Descuento de compra",
10
+    "Appearance": "Apariencia",
11
+    "Default": "Predeterminado",
12
+    "Company Profile": "Perfil de la empresa",
3 13
     "Invoice": "Factura",
4
-    "neutral": "neutral",
5
-    "emerald": "esmeralda",
6
-    "slate": "pizarra",
7
-    "Bank Account": "Cuenta bancaria",
8 14
     "Localization": "Localización",
9
-    "zinc": "zinc",
10
-    "Disabled": "Discapacitado",
11
-    "Descending": "Descendiendo",
12
-    "Default": "Predeterminado",
13
-    "Account": "Cuenta",
14
-    "sky": "cielo",
15
-    "Country": "País",
16
-    "Modern": "Moderna",
17
-    "Currency": "Moneda",
18
-    "Sales Tax": "Impuesto sobre las ventas",
19 15
     "Discount": "Descuento",
16
+    "Tax": "Impuesto",
17
+    "Accounting": "Contabilidad",
20 18
     "Banking": "Banca",
19
+    "Account": "Cuenta",
20
+    "Department": "Departamento",
21
+    "Services": "Servicios",
22
+    "Connected Accounts": "Cuentas conectadas",
23
+    "Live Currency": "Moneda en vivo",
24
+    "Primary color": "Color primario",
21 25
     "amber": "ámbar",
26
+    "blue": "azul",
27
+    "cyan": "cian",
28
+    "emerald": "esmeralda",
29
+    "fuchsia": "fucsia",
22 30
     "gray": "gris",
23 31
     "green": "verde",
32
+    "indigo": "índigo",
24 33
     "lime": "cal",
34
+    "neutral": "neutral",
35
+    "orange": "naranja",
36
+    "pink": "rosa",
25 37
     "purple": "púrpura",
26 38
     "red": "rojo",
39
+    "rose": "rosa",
40
+    "sky": "cielo",
41
+    "slate": "pizarra",
42
+    "stone": "apedrear",
27 43
     "teal": "verde azulado",
44
+    "violet": "violeta",
45
+    "yellow": "amarillo",
46
+    "zinc": "zinc",
28 47
     "Font": "Tipo de letra",
29
-    "Full": "Lleno",
30
-    "Extra Small": "Extra pequeño",
31
-    "Medium": "Mediano",
32
-    "Large": "Grande",
33
-    "Extra Large": "Extra grande",
34
-    "Screen": "Pantalla",
35
-    "Ascending": "Ascendente",
48
+    "Enabled": "Habilitado",
49
+    "Disabled": "Discapacitado",
36 50
     "Identification": "Identificación",
51
+    "Email": "Correo electrónico",
52
+    "Phone number": "Número de teléfono",
53
+    "Logo": "Logotipo",
54
+    "Location Details": "Detalles de ubicación",
55
+    "Country": "País",
37 56
     "State \/ Province": "Estado\/provincia",
38 57
     "Street Address": "Dirección postal",
58
+    "City \/ Town": "Ciudad\/pueblo",
39 59
     "Zip \/ Postal Code": "Código postal o postal",
60
+    "Legal & Compliance": "Legislación y cumplimiento",
61
+    "Entity type": "Tipo de entidad",
62
+    "Tax ID": "ID fiscal",
40 63
     "Sole Proprietorship": "Empresa unipersonal",
64
+    "General Partnership": "Colaboración general",
65
+    "Limited Partnership (LP)": "Sociedad en comandita (LP)",
66
+    "Limited Liability Partnership (LLP)": "Sociedad de responsabilidad limitada (LLP)",
67
+    "Limited Liability Company (LLC)": "Sociedad de responsabilidad limitada (LLC)",
68
+    "Corporation": "Corporación",
41 69
     "Nonprofit": "Organización sin fines",
70
+    "Number prefix": "Prefijo numérico",
71
+    "Number digits": "Dígitos numéricos",
72
+    "Number next": "Número siguiente",
73
+    "Payment terms": "Condiciones de pago",
42 74
     "Content": "Contenido",
43 75
     "Header": "Cabecera",
76
+    "Subheader": "Subtítulo",
77
+    "Footer \/ notes": "Pie de página\/Notas",
44 78
     "Template": "plantilla",
79
+    "Show logo": "Mostrar logotipo",
80
+    "Accent color": "Color de acento",
81
+    "Item name": "Nombre del artículo",
45 82
     "Items": "Artículos",
46 83
     "Products": "Productos",
47 84
     "Other": "Otros",
85
+    "Unit name": "Nombre de la unidad",
86
+    "Quantity": "Cantidad",
48 87
     "Hours": "Horas",
88
+    "Price name": "Nombre del precio",
49 89
     "Price": "Precio",
50 90
     "Rate": "Tarifa",
91
+    "Amount name": "Nombre del importe",
51 92
     "Amount": "Monto",
93
+    "Total": "Total",
94
+    "Due Upon Receipt": "Vencimiento al recibirlo",
95
+    "Net 7": "Red 7",
96
+    "Net 10": "Neto 10",
97
+    "Net 15": "Neto 15",
98
+    "Net 30": "Neto 30",
99
+    "Net 60": "Neto 60",
100
+    "Net 90": "Neto 90",
101
+    "Modern": "Moderna",
102
+    "Classic": "Clásico",
52 103
     "Language": "Idioma",
53 104
     "Timezone": "Zona horaria",
54 105
     "Date & Time": "Fecha y hora",
55
-    "Select Position": "Seleccione posición",
106
+    "Date format": "Formato de fecha",
107
+    "Time format": "Formato de hora",
108
+    "Week start": "Inicio de semana",
109
+    "Before number": "Antes del número",
110
+    "After number": "Después del número",
111
+    "Select position": "Seleccione posición",
112
+    "Financial & Fiscal": "Financiero y fiscal",
113
+    "Number format": "Formato numérico",
114
+    "Percent position": "Posición porcentual",
56 115
     "Name": "Nombre",
57 116
     "Code": "Código",
58 117
     "Symbol": "Símbolo",
118
+    "Default :record": "Predeterminado :record",
59 119
     "Type": "Tipo",
60
-    "Start Date": "Fecha de inicio",
61
-    "End Date": "Fecha de finalización",
120
+    "Start date": "Fecha de inicio",
121
+    "End date": "Fecha de finalización",
62 122
     "Sales": "Ventas",
123
+    "Default :type :record": "Predeterminado :type :record",
63 124
     "Purchase": "Adquirir",
64 125
     "Precision": "Precisión",
126
+    "Symbol position": "Posición del símbolo",
127
+    "Before amount": "Cantidad anterior",
128
+    "After amount": "Después del importe",
129
+    "Select a symbol position": "Seleccione la posición de un símbolo",
130
+    "Decimal separator": "Separador decimal",
131
+    "Thousands separator": "Separador de miles",
65 132
     "Yes": "Sí",
66 133
     "No": "No",
67 134
     "Description": "Descripción",
68
-    "None": "Ninguna",
69
-    "Product": "Producto",
70
-    "Compound": "Compuesto",
71
-    "Account Information": "Información de la cuenta",
72
-    "Account Number": "Número de cuenta",
73
-    "Investment": "Inversión",
74
-    "Purchase Tax": "Impuesto de compra",
75
-    "Purchase Discount": "Descuento de compra",
76
-    "Appearance": "Apariencia",
77
-    "Company Profile": "Perfil de la empresa",
78
-    "Tax": "Impuesto",
79
-    "Department": "Departamento",
80
-    "Services": "Servicios",
81
-    "blue": "azul",
82
-    "cyan": "cian",
83
-    "fuchsia": "fucsia",
84
-    "indigo": "índigo",
85
-    "orange": "naranja",
86
-    "pink": "rosa",
87
-    "rose": "rosa",
88
-    "stone": "apedrear",
89
-    "violet": "violeta",
90
-    "yellow": "amarillo",
91
-    "Layout": "Disposición",
92
-    "Max Content Width": "Ancho máximo de contenido",
93
-    "Modal Width": "Anchura modal",
94
-    "Side Navigation": "Navegación lateral",
95
-    "Enabled": "Habilitado",
96
-    "Data Presentation": "Presentación de datos",
97
-    "5X Large": "5 veces más grande",
98
-    "6X Large": "6 veces más grande",
99
-    "Screen Large": "Pantalla grande",
100
-    "Screen Extra Large": "Pantalla extra grande",
101
-    "Small": "Pequeña",
102
-    "2X Large": "2 veces grande",
103
-    "Email": "Correo electrónico",
104
-    "Phone Number": "Número de teléfono",
105
-    "Logo": "Logotipo",
106
-    "Entity Type": "Tipo de entidad",
107
-    "Corporation": "Corporación",
108
-    "Item Name": "Nombre del artículo",
109
-    "Quantity": "Cantidad",
110
-    "Price Name": "Nombre del precio",
111
-    "Total": "Total",
112
-    "Net 7": "Red 7",
113
-    "Net 10": "Neto 10",
114
-    "Net 90": "Neto 90",
115
-    "Classic": "Clásico",
116
-    "Financial & Fiscal": "Financiero y fiscal",
117 135
     "Computation": "Computación",
136
+    "Scope": "Alcance",
118 137
     "Percentage": "Porcentaje",
119 138
     "Fixed": "Fijo",
139
+    "None": "Ninguna",
140
+    "Product": "Producto",
120 141
     "Service": "Servicio",
121
-    "Current Balance": "Saldo actual",
122
-    "Taxes & Discounts": "Impuestos y descuentos",
123
-    "Sales Discount": "Descuento de ventas",
124
-    "Accounting": "Contabilidad",
125
-    "Connected Accounts": "Cuentas conectadas",
126
-    "3X Large": "3 veces más grande",
127
-    "Footer \/ Notes": "Pie de página\/Notas",
128
-    "Decimal Separator": "Separador decimal",
129
-    "Scope": "Alcance",
130
-    "Top Navigation": "Navegación superior",
131
-    "Symbol Position": "Posición del símbolo",
132
-    "Striped Tables": "Mesas rayadas",
133
-    "Date Format": "Formato de fecha",
134
-    "Subheader": "Subtítulo",
135
-    "Default :Type :Record": "Predeterminado :Type :Record",
136
-    "Before Amount": "Cantidad anterior",
137
-    "Limited Partnership (LP)": "Sociedad en comandita (LP)",
138
-    "Tax ID": "ID fiscal",
139
-    "Show Logo": "Mostrar logotipo",
140
-    "Number Prefix": "Prefijo numérico",
141
-    "Net 15": "Neto 15",
142
-    "After Number": "Después del número",
143
-    "Number Format": "Formato numérico",
144
-    "Due Upon Receipt": "Vencimiento al recibirlo",
145
-    "7X Large": "7 veces más grande",
146
-    "Amount Name": "Nombre del importe",
147
-    "Default :Record": "Predeterminado :Record",
148
-    "Select a symbol position": "Seleccione la posición de un símbolo",
149
-    "Net 60": "Neto 60",
150
-    "Before Number": "Antes del número",
151
-    "4X Large": "4 veces más grande",
152
-    "Week Start": "Inicio de semana",
153
-    "City \/ Town": "Ciudad\/pueblo",
154
-    "Live Currency": "Moneda en vivo",
155
-    "Screen 2X Large": "Pantalla 2 veces grande",
156
-    "Payment Terms": "Condiciones de pago",
157
-    "Thousands Separator": "Separador de miles",
158
-    "Table Sort Direction": "Dirección de clasificación de tablas",
159
-    "General Partnership": "Colaboración general",
160
-    "Records Per Page": "Registros por página",
161
-    "Number Digits": "Dígitos numéricos",
162
-    "Navigation Layout": "Diseño de navegación",
163
-    "Location Details": "Detalles de ubicación",
164
-    "Primary Color": "Color primario",
165
-    "Net 30": "Neto 30",
166
-    "After Amount": "Después del importe",
167
-    "Limited Liability Partnership (LLP)": "Sociedad de responsabilidad limitada (LLP)",
168
-    "Limited Liability Company (LLC)": "Sociedad de responsabilidad limitada (LLC)",
169
-    "Unit Name": "Nombre de la unidad",
170
-    "Percent Position": "Posición porcentual",
171
-    "Legal & Compliance": "Legislación y cumplimiento",
172
-    "Number Next": "Número siguiente",
173
-    "Accent Color": "Color de acento",
142
+    "Compound": "Compuesto",
143
+    "Current balance": "Saldo actual",
144
+    "Account Information": "Información de la cuenta",
174 145
     "Subtype": "Subtipo",
175
-    "Time Format": "Formato de hora",
176
-    "Loan": "préstamo",
146
+    "Account number": "Número de cuenta",
147
+    "Investment": "Inversión",
177 148
     "Credit": "Crédito",
178
-    "Manager": "Gerente",
179
-    "All": "Todas",
180 149
     "Depository": "Depositario",
150
+    "Loan": "préstamo",
151
+    "Manager": "Gerente",
181 152
     "Children": "Niños",
182
-    "Company Currencies": "Monedas de la empresa",
153
+    "All": "Todas",
183 154
     "Main": "Principal",
184
-    "Entity": "Entidad",
155
+    "Parent department": "Departamento de padres",
185 156
     "Currency List": "Lista de divisas",
157
+    "Company Currencies": "Monedas de la empresa",
158
+    "Entity": "Entidad",
186 159
     "Available": "Disponible",
187
-    "Parent Department": "Departamento de padres",
188
-    "Live Rate": "Tarifa en vivo",
160
+    "Live rate": "Tarifa en vivo",
161
+    "Edit": "Editar",
162
+    "Notes": "Notas",
163
+    "Terms": "Términos",
164
+    "Ending balance": "Saldo final",
165
+    "Default :type :category": "Predeterminado :type :category",
189 166
     "Category": "Categoría",
190 167
     "Configuration": "Configuración",
191 168
     "Dates": "Fechas",
@@ -201,27 +178,20 @@
201 178
     "Primary Contact": "Contacto principal",
202 179
     "Billing Address": "Dirección de facturación",
203 180
     "Shipping Address": "Dirección de envío",
181
+    "Secondary Contacts": "Contactos secundarios",
182
+    "Address Information": "Información de dirección",
204 183
     "Invoice Header": "Encabezado de factura",
205 184
     "Invoice Details": "Detalles de la factura",
206
-    "Secondary Contacts": "Contactos secundarios",
207
-    "Edit": "Editar",
185
+    "Footer": "Pie de página",
186
+    "Invoice Footer": "Pie de página de la factura",
208 187
     "Bill Details": "Detalles de la factura",
209
-    "Frequency": "Frecuencia",
210
-    "Scheduling": "Programación",
211
-    "Notes": "Notas",
212 188
     "Create": "Crear",
213
-    "Invoice Footer": "Pie de página de la factura",
214
-    "Time Zone": "Zona horaria",
215
-    "Footer": "Pie de página",
216 189
     "Estimate Header": "Encabezado de estimación",
217
-    "Terms": "Términos",
190
+    "Estimate Details": "Detalles de la estimación",
218 191
     "Estimate Footer": "Estimar pie de página",
192
+    "Scheduling": "Programación",
219 193
     "Scheduling Form": "Formulario de programación",
220
-    "Default :Type :Category": "Predeterminado :Type :Category",
221 194
     "Approve": "Aprobar",
222
-    "Dates & Time": "Fechas y hora",
223
-    "Schedule Bounds": "Límites de programación",
224
-    "Ending Balance": "Saldo final",
225
-    "Address Information": "Información de dirección",
226
-    "Estimate Details": "Detalles de la estimación"
195
+    "Frequency": "Frecuencia",
196
+    "Dates & Time": "Fechas y hora"
227 197
 }

+ 153
- 145
resources/data/lang/fr.json 파일 보기

@@ -1,160 +1,134 @@
1 1
 {
2 2
     "General": "Général",
3
-    "stone": "pierre",
4
-    "fuchsia": "fuchsia",
5
-    "slate": "ardoise",
6
-    "cyan": "cyan",
3
+    "Bank account": "Compte bancaire",
7 4
     "Currency": "Devise",
8
-    "rose": "rose",
9
-    "Email": "Courrier électronique",
10
-    "Small": "Petit",
11
-    "Sales Tax": "Taxe de vente",
12
-    "red": "rouge",
13
-    "Discount": "Rabais",
5
+    "Taxes & Discounts": "Taxes et remises",
6
+    "Sales tax": "Taxe de vente",
7
+    "Purchase tax": "Taxe d'achat",
8
+    "Sales discount": "Rabais sur les ventes",
9
+    "Purchase discount": "Réduction d'achat",
10
+    "Appearance": "Apparence",
11
+    "Default": "Par défaut",
14 12
     "Company Profile": "Profil de l'entreprise",
13
+    "Invoice": "Facture",
14
+    "Localization": "Localisation",
15
+    "Discount": "Rabais",
16
+    "Tax": "Impôt",
17
+    "Accounting": "Comptabilité",
18
+    "Banking": "Services bancaires",
19
+    "Account": "Compte",
20
+    "Department": "Département",
15 21
     "Services": "Services",
16
-    "Medium": "Moyen",
17
-    "orange": "orange",
18
-    "Ascending": "Ascendant",
19
-    "Template": "Modèle",
20
-    "Price": "Prix",
21
-    "yellow": "jaune",
22
-    "Large": "Grand",
23
-    "Modern": "Moderne",
22
+    "Connected Accounts": "Comptes connectés",
23
+    "Live Currency": "Devise en direct",
24
+    "Primary color": "Couleur primaire",
25
+    "amber": "ambre",
26
+    "blue": "bleu",
27
+    "cyan": "cyan",
28
+    "emerald": "émeraude",
29
+    "fuchsia": "fuchsia",
30
+    "gray": "gris",
24 31
     "green": "vert",
25
-    "Hours": "Heures",
26
-    "Tax": "Impôt",
27
-    "Phone Number": "Numéro de téléphone",
28
-    "Zip \/ Postal Code": "Code postal\/Code postal",
29
-    "Sole Proprietorship": "Entreprise individuelle",
30
-    "Classic": "Classique",
31
-    "pink": "rose",
32
-    "zinc": "zinc",
32
+    "indigo": "indigo",
33
+    "lime": "citron vert",
33 34
     "neutral": "neutre",
34
-    "amber": "ambre",
35
+    "orange": "orange",
36
+    "pink": "rose",
35 37
     "purple": "pourpre",
36
-    "Logo": "Logo",
37
-    "Products": "Produits",
38
-    "gray": "gris",
39
-    "Disabled": "Désactivé",
40
-    "Full": "Complet",
41
-    "Descending": "Descendant",
42
-    "State \/ Province": "État\/province",
43
-    "Account": "Compte",
44
-    "Header": "En-tête",
45
-    "emerald": "émeraude",
38
+    "red": "rouge",
39
+    "rose": "rose",
40
+    "sky": "ciel",
41
+    "slate": "ardoise",
42
+    "stone": "pierre",
43
+    "teal": "sarcelle",
44
+    "violet": "violet",
45
+    "yellow": "jaune",
46
+    "zinc": "zinc",
46 47
     "Font": "Fonte",
48
+    "Enabled": "Activé",
49
+    "Disabled": "Désactivé",
47 50
     "Identification": "Identification",
51
+    "Email": "Courrier électronique",
52
+    "Phone number": "Numéro de téléphone",
53
+    "Logo": "Logo",
54
+    "Location Details": "Détails de l'emplacement",
55
+    "Country": "Pays",
56
+    "State \/ Province": "État\/province",
57
+    "Street Address": "Adresse de rue",
58
+    "City \/ Town": "Ville\/Localité",
59
+    "Zip \/ Postal Code": "Code postal\/Code postal",
60
+    "Legal & Compliance": "Juridique et conformité",
61
+    "Entity type": "Type d'entité",
62
+    "Tax ID": "Numéro fiscal",
63
+    "Sole Proprietorship": "Entreprise individuelle",
64
+    "General Partnership": "Partenariat général",
65
+    "Limited Partnership (LP)": "Société en commandite (LP)",
66
+    "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)",
67
+    "Limited Liability Company (LLC)": "Société à responsabilité limitée (LLC)",
48 68
     "Corporation": "Société",
69
+    "Nonprofit": "Sans but lucratif",
70
+    "Number prefix": "Préfixe numérique",
71
+    "Number digits": "Chiffres numériques",
72
+    "Number next": "Numéro suivant",
73
+    "Payment terms": "Modalités de paiement",
49 74
     "Content": "Contenu",
50
-    "Timezone": "Fuseau horaire",
51
-    "Invoice": "Facture",
52
-    "Department": "Département",
53
-    "Extra Large": "Très grand",
54
-    "Screen": "écran",
55
-    "violet": "violet",
56
-    "Name": "Nom",
57
-    "blue": "bleu",
58
-    "indigo": "indigo",
75
+    "Header": "En-tête",
76
+    "Subheader": "Sous-en-tête",
77
+    "Footer \/ notes": "Pied de page\/Remarques",
78
+    "Template": "Modèle",
79
+    "Show logo": "Afficher le logo",
80
+    "Accent color": "Couleur d'accent",
81
+    "Item name": "Nom de l'article",
82
+    "Items": "Objets",
83
+    "Products": "Produits",
59 84
     "Other": "Autres",
60
-    "Appearance": "Apparence",
61
-    "Banking": "Services bancaires",
85
+    "Unit name": "Nom de l'unité",
86
+    "Quantity": "Quantité",
87
+    "Hours": "Heures",
88
+    "Price name": "Nom du prix",
89
+    "Price": "Prix",
90
+    "Rate": "Tarif",
91
+    "Amount name": "Nom du montant",
62 92
     "Amount": "Montant",
63
-    "sky": "ciel",
64
-    "Enabled": "Activé",
65
-    "Layout": "Disposition",
66
-    "Street Address": "Adresse de rue",
67
-    "Items": "Objets",
68
-    "Country": "Pays",
69
-    "Accounting": "Comptabilité",
70
-    "lime": "citron vert",
71
-    "Extra Small": "Très petit",
72
-    "Default": "Par défaut",
73 93
     "Total": "Total",
74
-    "Language": "Langue",
75
-    "Bank Account": "Compte bancaire",
76
-    "Screen Large": "Grand écran",
77
-    "Navigation Layout": "Disposition de navigation",
78
-    "Connected Accounts": "Comptes connectés",
79
-    "Top Navigation": "Navigation supérieure",
80
-    "Data Presentation": "Présentation des données",
81
-    "Sales Discount": "Rabais sur les ventes",
82
-    "Net 30": "30 % nets",
83
-    "Taxes & Discounts": "Taxes et remises",
84
-    "Striped Tables": "Tables à rayures",
85
-    "7X Large": "7 fois plus grand",
86
-    "2X Large": "2 fois plus grand",
87
-    "Location Details": "Détails de l'emplacement",
88
-    "Payment Terms": "Modalités de paiement",
89
-    "Unit Name": "Nom de l'unité",
90
-    "Date & Time": "Date et heure",
91
-    "Financial & Fiscal": "Financier et fiscal",
92
-    "Purchase Discount": "Réduction d'achat",
93
-    "Primary Color": "Couleur primaire",
94
-    "Side Navigation": "Navigation latérale",
95
-    "4X Large": "4 fois plus grand",
96
-    "5X Large": "5 fois plus grand",
97
-    "6X Large": "6 fois plus grand",
98
-    "Number Prefix": "Préfixe numérique",
99
-    "Footer \/ Notes": "Pied de page\/Remarques",
100
-    "Accent Color": "Couleur d'accent",
101
-    "Item Name": "Nom de l'article",
102
-    "Net 15": "15 % nets",
103
-    "Date Format": "Format de date",
104
-    "Before Number": "Avant le numéro",
105
-    "Percent Position": "Position en pourcentage",
106
-    "Purchase Tax": "Taxe d'achat",
107
-    "Screen Extra Large": "Écran extra large",
108
-    "Entity Type": "Type d'entité",
109
-    "General Partnership": "Partenariat général",
110
-    "Amount Name": "Nom du montant",
94
+    "Due Upon Receipt": "À payer à la réception",
95
+    "Net 7": "Net 7",
111 96
     "Net 10": "10 % nets",
112
-    "Number Format": "Format numérique",
113
-    "3X Large": "3 fois plus grand",
114
-    "Limited Partnership (LP)": "Société en commandite (LP)",
115
-    "Number Next": "Numéro suivant",
116
-    "Week Start": "Début de semaine",
117
-    "Live Currency": "Devise en direct",
118
-    "Number Digits": "Chiffres numériques",
97
+    "Net 15": "15 % nets",
98
+    "Net 30": "30 % nets",
119 99
     "Net 60": "60 % nets",
120
-    "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)",
121
-    "Show Logo": "Afficher le logo",
122 100
     "Net 90": "Net 90",
123
-    "Tax ID": "Numéro fiscal",
124
-    "Due Upon Receipt": "À payer à la réception",
125
-    "Screen 2X Large": "Écran 2 fois plus grand",
126
-    "Price Name": "Nom du prix",
127
-    "Rate": "Tarif",
128
-    "Localization": "Localisation",
129
-    "teal": "sarcelle",
130
-    "Modal Width": "Largeur modale",
131
-    "Quantity": "Quantité",
132
-    "After Number": "Après le numéro",
133
-    "Legal & Compliance": "Juridique et conformité",
134
-    "Select Position": "Sélectionnez la position",
135
-    "Subheader": "Sous-en-tête",
136
-    "Net 7": "Net 7",
137
-    "Max Content Width": "Largeur maximale du contenu",
138
-    "Limited Liability Company (LLC)": "Société à responsabilité limitée (LLC)",
139
-    "Table Sort Direction": "Direction du tri des tableaux",
140
-    "Nonprofit": "Sans but lucratif",
141
-    "Records Per Page": "Enregistrements par page",
142
-    "City \/ Town": "Ville\/Localité",
143
-    "Time Format": "Format de l'heure",
101
+    "Modern": "Moderne",
102
+    "Classic": "Classique",
103
+    "Language": "Langue",
104
+    "Timezone": "Fuseau horaire",
105
+    "Date & Time": "Date et heure",
106
+    "Date format": "Format de date",
107
+    "Time format": "Format de l'heure",
108
+    "Week start": "Début de semaine",
109
+    "Before number": "Avant le numéro",
110
+    "After number": "Après le numéro",
111
+    "Select position": "Sélectionnez la position",
112
+    "Financial & Fiscal": "Financier et fiscal",
113
+    "Number format": "Format numérique",
114
+    "Percent position": "Position en pourcentage",
115
+    "Name": "Nom",
116
+    "Code": "Code",
144 117
     "Symbol": "Symbole",
118
+    "Default :record": ":record par défaut",
145 119
     "Type": "Tapez",
146
-    "Start Date": "Date de début",
147
-    "End Date": "Date de fin",
120
+    "Start date": "Date de début",
121
+    "End date": "Date de fin",
148 122
     "Sales": "Ventes",
149
-    "Default :Type :Record": "Par défaut :Type :Record",
123
+    "Default :type :record": "Par défaut :type :record",
150 124
     "Purchase": "Acheter",
151 125
     "Precision": "Précision",
152
-    "Symbol Position": "Position du symbole",
153
-    "Before Amount": "Avant le montant",
154
-    "After Amount": "Après le montant",
126
+    "Symbol position": "Position du symbole",
127
+    "Before amount": "Avant le montant",
128
+    "After amount": "Après le montant",
155 129
     "Select a symbol position": "Sélectionnez la position d'un symbole",
156
-    "Decimal Separator": "Séparateur décimal",
157
-    "Thousands Separator": "Séparateur de milliers",
130
+    "Decimal separator": "Séparateur décimal",
131
+    "Thousands separator": "Séparateur de milliers",
158 132
     "Yes": "Oui",
159 133
     "No": "Non",
160 134
     "Description": "Descriptif",
@@ -166,24 +140,58 @@
166 140
     "Product": "Produit",
167 141
     "Service": "Service",
168 142
     "Compound": "Composé",
143
+    "Current balance": "Solde actuel",
169 144
     "Account Information": "Informations sur le compte",
170 145
     "Subtype": "Sous-type",
171
-    "Account Number": "Numéro de compte",
146
+    "Account number": "Numéro de compte",
147
+    "Investment": "Investissement",
172 148
     "Credit": "Crédit",
149
+    "Depository": "Dépositaire",
150
+    "Loan": "Prêt",
173 151
     "Manager": "Directeur",
174 152
     "Children": "Enfants",
175
-    "Current Balance": "Solde actuel",
176
-    "Investment": "Investissement",
177
-    "Loan": "Prêt",
178 153
     "All": "Tous",
179 154
     "Main": "Principale",
180
-    "Available": "Disponible",
181
-    "Parent Department": "Département parent",
182
-    "Entity": "Entité",
183
-    "Company Currencies": "Devises des entreprises",
184
-    "Default :Record": ":Record par défaut",
185
-    "Live Rate": "Tarif en direct",
155
+    "Parent department": "Département parent",
186 156
     "Currency List": "Liste des devises",
187
-    "Depository": "Dépositaire",
188
-    "Code": "Code"
157
+    "Company Currencies": "Devises des entreprises",
158
+    "Entity": "Entité",
159
+    "Available": "Disponible",
160
+    "Live rate": "Tarif en direct",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 161
- 153
resources/data/lang/id.json 파일 보기

@@ -1,189 +1,197 @@
1 1
 {
2
+    "General": "Umum",
3
+    "Bank account": "Rekening Bank",
4
+    "Currency": "Mata uang",
5
+    "Taxes & Discounts": "Pajak & Diskon",
6
+    "Sales tax": "Pajak Penjualan",
7
+    "Purchase tax": "Pajak Pembelian",
8
+    "Sales discount": "Diskon Penjualan",
9
+    "Purchase discount": "Diskon Pembelian",
2 10
     "Appearance": "Penampilan",
3
-    "red": "merah",
4 11
     "Default": "Default",
5
-    "blue": "biru",
6
-    "sky": "langit",
7
-    "violet": "ungu",
8
-    "rose": "mawar",
9
-    "Currency": "Mata uang",
10
-    "Template": "Template",
11
-    "General": "Umum",
12
-    "Country": "Negara",
13
-    "Banking": "Perbankan",
14 12
     "Company Profile": "Profil Perusahaan",
15
-    "Enabled": "Diaktifkan",
16
-    "Name": "Nama",
17
-    "Code": "Kode",
18
-    "cyan": "biru kehijau-hijauan",
19
-    "Medium": "Sedang",
20
-    "State \/ Province": "Negara Bagian\/Provinsi",
21
-    "Sales": "Penjualan",
22
-    "emerald": "zamrud",
23
-    "lime": "kapur",
24
-    "Small": "Kecil",
25
-    "Screen": "Layar",
26
-    "Content": "Konten",
27
-    "Quantity": "Kuantitas",
28
-    "Price": "Harga",
29
-    "Rate": "Nilai",
30
-    "Amount": "Jumlah",
31
-    "Start Date": "Tanggal Mulai",
32
-    "Precision": "Presisi",
33
-    "Yes": "ya",
34
-    "Fixed": "Tetap",
35
-    "Product": "Produk",
13
+    "Invoice": "Faktur",
14
+    "Localization": "Lokalisasi",
15
+    "Discount": "Diskon",
16
+    "Tax": "Pajak",
36 17
     "Accounting": "Akuntansi",
18
+    "Banking": "Perbankan",
37 19
     "Account": "Akun",
38 20
     "Department": "Departemen",
21
+    "Services": "Jasa",
22
+    "Connected Accounts": "Akun Terhubung",
23
+    "Live Currency": "Mata Uang Langsung",
24
+    "Primary color": "Warna primer",
25
+    "amber": "kuning",
26
+    "blue": "biru",
27
+    "cyan": "biru kehijau-hijauan",
28
+    "emerald": "zamrud",
29
+    "fuchsia": "Fuchsia",
30
+    "gray": "abu-abu",
39 31
     "green": "hijau",
32
+    "indigo": "indigo",
33
+    "lime": "kapur",
40 34
     "neutral": "netral",
35
+    "orange": "oranye",
41 36
     "pink": "merah muda",
42 37
     "purple": "ungu",
38
+    "red": "merah",
39
+    "rose": "mawar",
40
+    "sky": "langit",
43 41
     "slate": "batu tulis",
44 42
     "stone": "batu",
43
+    "teal": "teal",
44
+    "violet": "ungu",
45 45
     "yellow": "kuning",
46 46
     "zinc": "seng",
47 47
     "Font": "Font",
48
-    "Large": "Besar",
48
+    "Enabled": "Diaktifkan",
49
+    "Disabled": "Dinonaktifkan",
50
+    "Identification": "Identifikasi",
49 51
     "Email": "E-Mail",
50
-    "Phone Number": "Nomor Telepon",
52
+    "Phone number": "Nomor Telepon",
51 53
     "Logo": "Logo",
54
+    "Location Details": "Detail Lokasi",
55
+    "Country": "Negara",
56
+    "State \/ Province": "Negara Bagian\/Provinsi",
57
+    "Street Address": "Alamat Jalan",
58
+    "City \/ Town": "Kota\/Kota",
59
+    "Zip \/ Postal Code": "Post\/Kode Pos",
60
+    "Legal & Compliance": "Hukum & Kepatuhan",
61
+    "Entity type": "Tipe Entitas",
62
+    "Tax ID": "ID Pajak",
63
+    "Sole Proprietorship": "Kepemilikan Tunggal",
64
+    "General Partnership": "Kemitraan Umum",
65
+    "Limited Partnership (LP)": "Kemitraan Terbatas (LP)",
66
+    "Limited Liability Partnership (LLP)": "Kemitraan Tanggung Jawab Terbatas (LLP)",
67
+    "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)",
52 68
     "Corporation": "Perusahaan",
53
-    "Payment Terms": "Ketentuan Pembayaran",
69
+    "Nonprofit": "Nirlaba",
70
+    "Number prefix": "Awalan Angka",
71
+    "Number digits": "Angka Digit",
72
+    "Number next": "Nomor Berikutnya",
73
+    "Payment terms": "Ketentuan Pembayaran",
74
+    "Content": "Konten",
54 75
     "Header": "Header",
76
+    "Subheader": "Subheader",
77
+    "Footer \/ notes": "Footer\/Catatan",
78
+    "Template": "Template",
79
+    "Show logo": "Tampilkan Logo",
80
+    "Accent color": "Warna Aksen",
81
+    "Item name": "Nama Item",
55 82
     "Items": "Barang",
83
+    "Products": "Produk",
56 84
     "Other": "Lainnya",
57
-    "Language": "Bahasa",
58
-    "Timezone": "Zona Waktu",
59
-    "Purchase": "Pembelian",
60
-    "No": "Tidak",
61
-    "Description": "Deskripsi",
62
-    "Scope": "Lingkup",
63
-    "Type": "Mengetik",
64
-    "Disabled": "Dinonaktifkan",
85
+    "Unit name": "Nama Unit",
86
+    "Quantity": "Kuantitas",
87
+    "Hours": "Jam",
88
+    "Price name": "Nama Harga",
89
+    "Price": "Harga",
90
+    "Rate": "Nilai",
91
+    "Amount name": "Nama Jumlah",
92
+    "Amount": "Jumlah",
65 93
     "Total": "Total",
66
-    "None": "Tidak ada",
67
-    "gray": "abu-abu",
68
-    "Records Per Page": "Catatan Per Halaman",
69
-    "Connected Accounts": "Akun Terhubung",
70
-    "Primary Color": "Warna primer",
71
-    "Ascending": "Menaik",
72
-    "Item Name": "Nama Item",
73
-    "Localization": "Lokalisasi",
74
-    "indigo": "indigo",
75
-    "6X Large": "6X Besar",
76
-    "Screen Large": "Layar Besar",
77
-    "Full": "Penuh",
78
-    "Live Currency": "Mata Uang Langsung",
79
-    "Products": "Produk",
80
-    "Accent Color": "Warna Aksen",
81
-    "Net 15": "Bersih 15",
82
-    "After Number": "Setelah Nomor",
83
-    "Bank Account": "Rekening Bank",
84
-    "Taxes & Discounts": "Pajak & Diskon",
85
-    "Data Presentation": "Presentasi Data",
86
-    "5X Large": "5X Besar",
87
-    "Extra Large": "Ekstra Besar",
88
-    "orange": "oranye",
89
-    "Subheader": "Subheader",
94
+    "Due Upon Receipt": "Jangka Waktu Penerimaan",
95
+    "Net 7": "Bersih 7",
90 96
     "Net 10": "Bersih 10",
91
-    "teal": "teal",
92
-    "Hours": "Jam",
93
-    "Date Format": "Format Tanggal",
94
-    "Services": "Jasa",
95
-    "Max Content Width": "Lebar Konten Maks",
96
-    "Zip \/ Postal Code": "Post\/Kode Pos",
97
-    "Number Digits": "Angka Digit",
98
-    "amber": "kuning",
99
-    "fuchsia": "Fuchsia",
100
-    "Modal Width": "Lebar Modal",
101
-    "Legal & Compliance": "Hukum & Kepatuhan",
97
+    "Net 15": "Bersih 15",
98
+    "Net 30": "Bersih 30",
102 99
     "Net 60": "Bersih 60",
100
+    "Net 90": "Bersih 90",
103 101
     "Modern": "Modern",
104
-    "End Date": "Tanggal Akhir",
105
-    "Discount": "Diskon",
106
-    "Table Sort Direction": "Arah Urutan Tabel",
107
-    "Limited Liability Partnership (LLP)": "Kemitraan Tanggung Jawab Terbatas (LLP)",
108
-    "City \/ Town": "Kota\/Kota",
102
+    "Classic": "Klasik",
103
+    "Language": "Bahasa",
104
+    "Timezone": "Zona Waktu",
109 105
     "Date & Time": "Tanggal & Waktu",
110
-    "Symbol Position": "Posisi Simbol",
111
-    "Striped Tables": "Meja Bergaris",
112
-    "Street Address": "Alamat Jalan",
113
-    "Number Prefix": "Awalan Angka",
114
-    "7X Large": "7X Besar",
115
-    "Number Format": "Format Angka",
116
-    "Percent Position": "Posisi Persentase",
117
-    "Descending": "Menurun",
118
-    "Price Name": "Nama Harga",
119
-    "Symbol": "Simbol",
120
-    "Percentage": "Persentase",
121
-    "Purchase Discount": "Diskon Pembelian",
122
-    "Invoice": "Faktur",
123
-    "Identification": "Identifikasi",
124
-    "After Amount": "Setelah Jumlah",
125
-    "2X Large": "2X Besar",
126
-    "Before Amount": "Sebelum Jumlah",
127
-    "Side Navigation": "Navigasi Samping",
128
-    "Net 7": "Bersih 7",
129
-    "Screen Extra Large": "Layar Ekstra Besar",
130
-    "Default :Type :Record": "Standar :Type :Record",
131
-    "Limited Partnership (LP)": "Kemitraan Terbatas (LP)",
132
-    "Navigation Layout": "Tata Letak Navigasi",
133
-    "Top Navigation": "Navigasi Teratas",
134
-    "Tax": "Pajak",
135
-    "Before Number": "Sebelum Nomor",
106
+    "Date format": "Format Tanggal",
107
+    "Time format": "Format Waktu",
108
+    "Week start": "Minggu Mulai",
109
+    "Before number": "Sebelum Nomor",
110
+    "After number": "Setelah Nomor",
111
+    "Select position": "Pilih Posisi",
136 112
     "Financial & Fiscal": "Keuangan & Fiskal",
113
+    "Number format": "Format Angka",
114
+    "Percent position": "Posisi Persentase",
115
+    "Name": "Nama",
116
+    "Code": "Kode",
117
+    "Symbol": "Simbol",
118
+    "Default :record": "Standar :record",
119
+    "Type": "Mengetik",
120
+    "Start date": "Tanggal Mulai",
121
+    "End date": "Tanggal Akhir",
122
+    "Sales": "Penjualan",
123
+    "Default :type :record": "Standar :type :record",
124
+    "Purchase": "Pembelian",
125
+    "Precision": "Presisi",
126
+    "Symbol position": "Posisi Simbol",
127
+    "Before amount": "Sebelum Jumlah",
128
+    "After amount": "Setelah Jumlah",
129
+    "Select a symbol position": "Pilih posisi simbol",
130
+    "Decimal separator": "Pemisah Desimal",
131
+    "Thousands separator": "Pemisah Ribuan",
132
+    "Yes": "ya",
133
+    "No": "Tidak",
134
+    "Description": "Deskripsi",
137 135
     "Computation": "Komputasi",
138
-    "Show Logo": "Tampilkan Logo",
139
-    "Thousands Separator": "Pemisah Ribuan",
140
-    "Purchase Tax": "Pajak Pembelian",
141
-    "Number Next": "Nomor Berikutnya",
142
-    "Sales Discount": "Diskon Penjualan",
143
-    "Screen 2X Large": "Layar 2X Besar",
144
-    "Due Upon Receipt": "Jangka Waktu Penerimaan",
145
-    "Decimal Separator": "Pemisah Desimal",
146
-    "Week Start": "Minggu Mulai",
147
-    "4X Large": "4X Besar",
148
-    "Select Position": "Pilih Posisi",
149
-    "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)",
150
-    "General Partnership": "Kemitraan Umum",
151
-    "Default :Record": "Standar :Record",
152
-    "Nonprofit": "Nirlaba",
153
-    "Net 90": "Bersih 90",
154
-    "Location Details": "Detail Lokasi",
155
-    "Entity Type": "Tipe Entitas",
156
-    "Classic": "Klasik",
157
-    "Sole Proprietorship": "Kepemilikan Tunggal",
158
-    "Footer \/ Notes": "Footer\/Catatan",
159
-    "Extra Small": "Ekstra Kecil",
160
-    "Time Format": "Format Waktu",
161
-    "Net 30": "Bersih 30",
162
-    "Amount Name": "Nama Jumlah",
163
-    "Unit Name": "Nama Unit",
164
-    "Subtype": "Subtipe",
165
-    "Account Number": "Nomor Rekening",
136
+    "Scope": "Lingkup",
137
+    "Percentage": "Persentase",
138
+    "Fixed": "Tetap",
139
+    "None": "Tidak ada",
140
+    "Product": "Produk",
166 141
     "Service": "Pelayanan",
167
-    "Manager": "pengelola",
168
-    "Account Information": "Informasi Akun",
169
-    "Children": "Anak-anak",
170
-    "Current Balance": "Saldo Saat Ini",
171
-    "Main": "Utama",
172 142
     "Compound": "Senyawa",
143
+    "Current balance": "Saldo Saat Ini",
144
+    "Account Information": "Informasi Akun",
145
+    "Subtype": "Subtipe",
146
+    "Account number": "Nomor Rekening",
147
+    "Investment": "Investasi",
173 148
     "Credit": "Kredit",
174
-    "All": "Semua",
175
-    "Loan": "Pinjaman",
176
-    "Entity": "Entitas",
177
-    "Available": "Tersedia",
178 149
     "Depository": "Depository",
150
+    "Loan": "Pinjaman",
151
+    "Manager": "pengelola",
152
+    "Children": "Anak-anak",
153
+    "All": "Semua",
154
+    "Main": "Utama",
155
+    "Parent department": "Departemen Orang Tua",
179 156
     "Currency List": "Daftar Mata Uang",
180 157
     "Company Currencies": "Mata Uang Perusahaan",
181
-    "Parent Department": "Departemen Orang Tua",
182
-    "Live Rate": "Tarif Langsung",
183
-    "Investment": "Investasi",
184
-    "Sales Tax": "Pajak Penjualan",
185
-    "Layout": "Tata Letak",
186
-    "3X Large": "3X Besar",
187
-    "Select a symbol position": "Pilih posisi simbol",
188
-    "Tax ID": "ID Pajak"
158
+    "Entity": "Entitas",
159
+    "Available": "Tersedia",
160
+    "Live rate": "Tarif Langsung",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 152
- 144
resources/data/lang/it.json 파일 보기

@@ -1,160 +1,134 @@
1 1
 {
2 2
     "General": "Generale",
3
+    "Bank account": "Conto bancario",
3 4
     "Currency": "Valuta",
4
-    "rose": "rosa",
5
-    "indigo": "indaco",
6
-    "Rate": "Tariffa",
5
+    "Taxes & Discounts": "Tasse e sconti",
6
+    "Sales tax": "Imposta sulle vendite",
7
+    "Purchase tax": "Imposta sugli acquisti",
8
+    "Sales discount": "Sconto sulle vendite",
9
+    "Purchase discount": "Sconto sull'acquisto",
10
+    "Appearance": "Aspetto",
11
+    "Default": "Predefinito",
12
+    "Company Profile": "Profilo dell'azienda",
13
+    "Invoice": "Fattura",
7 14
     "Localization": "Localizzazione",
8
-    "lime": "lime",
9 15
     "Discount": "Sconto",
16
+    "Tax": "Imposta",
17
+    "Accounting": "Contabilità",
18
+    "Banking": "Bancario",
19
+    "Account": "Account",
20
+    "Department": "Dipartimento",
21
+    "Services": "Servizi",
22
+    "Connected Accounts": "Account connessi",
23
+    "Live Currency": "Valuta in tempo reale",
24
+    "Primary color": "Colore primario",
25
+    "amber": "ambra",
10 26
     "blue": "blu",
11
-    "Screen": "Schermo",
12 27
     "cyan": "ciano",
13
-    "yellow": "giallo",
14
-    "Ascending": "Ascendente",
15
-    "Zip \/ Postal Code": "Zip\/Codice postale",
16
-    "Disabled": "Disabili",
17
-    "Small": "Piccolo",
18
-    "Hours": "Ore",
19
-    "Descending": "Discendente",
20
-    "Default": "Predefinito",
21
-    "slate": "ardesia",
22
-    "purple": "viola",
23
-    "Code": "Codice",
24
-    "neutral": "neutro",
25
-    "Invoice": "Fattura",
26
-    "green": "verde",
27
-    "red": "rosso",
28
-    "Email": "E-mail",
28
+    "emerald": "smeraldo",
29
+    "fuchsia": "fucsia",
29 30
     "gray": "grigio",
30
-    "Banking": "Bancario",
31
-    "Language": "Lingua",
32
-    "Department": "Dipartimento",
33
-    "Street Address": "Indirizzo",
34
-    "Account": "Account",
35
-    "Other": "Altro",
36
-    "Template": "Modello",
37
-    "Products": "Prodotti",
38
-    "zinc": "zinco",
39
-    "Layout": "Layout",
40
-    "Country": "Paese",
41
-    "Date & Time": "Data e ora",
42
-    "Name": "Nome",
31
+    "green": "verde",
32
+    "indigo": "indaco",
33
+    "lime": "lime",
34
+    "neutral": "neutro",
43 35
     "orange": "arancione",
44
-    "teal": "verde acqua",
45
-    "Identification": "Identificazione",
46
-    "Extra Small": "Extra piccolo",
47
-    "Classic": "Classico",
48
-    "Appearance": "Aspetto",
49
-    "Phone Number": "Numero di telefono",
50
-    "State \/ Province": "Stato\/Provincia",
51
-    "Header": "Intestazione",
52
-    "Corporation": "società per azioni",
53
-    "Amount": "Importo",
54
-    "Font": "Font",
55
-    "Full": "Completo",
56
-    "Bank Account": "Conto bancario",
57 36
     "pink": "rosa",
58
-    "Enabled": "Abilitato",
59
-    "Entity Type": "Tipo di entità",
60
-    "Services": "Servizi",
37
+    "purple": "viola",
38
+    "red": "rosso",
39
+    "rose": "rosa",
61 40
     "sky": "cielo",
62
-    "violet": "viola",
63
-    "Large": "Grande",
64
-    "Timezone": "Fuso orario",
65
-    "Modern": "Moderno",
41
+    "slate": "ardesia",
66 42
     "stone": "pietra",
67
-    "Content": "Contenuto",
68
-    "Sales Tax": "Imposta sulle vendite",
69
-    "Quantity": "Quantità",
70
-    "Total": "Totale",
71
-    "Medium": "Medio",
72
-    "Items": "Oggetti",
73
-    "Accounting": "Contabilità",
74
-    "amber": "ambra",
43
+    "teal": "verde acqua",
44
+    "violet": "viola",
45
+    "yellow": "giallo",
46
+    "zinc": "zinco",
47
+    "Font": "Font",
48
+    "Enabled": "Abilitato",
49
+    "Disabled": "Disabili",
50
+    "Identification": "Identificazione",
51
+    "Email": "E-mail",
52
+    "Phone number": "Numero di telefono",
75 53
     "Logo": "Logo",
76
-    "Price": "Prezzo",
77
-    "fuchsia": "fucsia",
78
-    "Screen Large": "Schermo grande",
79
-    "Taxes & Discounts": "Tasse e sconti",
80
-    "Date Format": "Formato data",
81
-    "6X Large": "6X Grande",
82
-    "Time Format": "Formato orario",
83
-    "Data Presentation": "Presentazione dei dati",
84
-    "Week Start": "Inizio settimana",
85
-    "Connected Accounts": "Account connessi",
86
-    "Live Currency": "Valuta in tempo reale",
87
-    "Primary Color": "Colore primario",
88
-    "Modal Width": "Larghezza modale",
89
-    "5X Large": "5X Grande",
90
-    "2X Large": "2X Grande",
91
-    "Show Logo": "Mostra logo",
92
-    "Net 60": "Rete 60",
93
-    "Net 90": "Rete 90",
94
-    "Select Position": "Seleziona posizione",
95
-    "Financial & Fiscal": "Finanziario e fiscale",
96
-    "Number Format": "Formato numerico",
97
-    "Purchase Tax": "Imposta sugli acquisti",
98
-    "Sales Discount": "Sconto sulle vendite",
99
-    "Purchase Discount": "Sconto sull'acquisto",
100
-    "Company Profile": "Profilo dell'azienda",
101
-    "Tax": "Imposta",
102
-    "emerald": "smeraldo",
103
-    "Navigation Layout": "Layout di navigazione",
104
-    "Records Per Page": "Record per pagina",
105
-    "4X Large": "4X Grande",
106
-    "7X Large": "7X Grande",
107
-    "Screen Extra Large": "Schermo extra grande",
108
-    "Screen 2X Large": "Schermo 2X grande",
109
-    "Extra Large": "Extra grande",
110 54
     "Location Details": "Dettagli sulla posizione",
111
-    "General Partnership": "Collaborazione generale",
112
-    "Limited Partnership (LP)": "Società in accomandita semplice (LP)",
113
-    "Subheader": "Sottotitolo",
114
-    "Footer \/ Notes": "Piè di pagina\/Note",
115
-    "Accent Color": "Colore dell'accento",
116
-    "Item Name": "Nome dell'articolo",
117
-    "Unit Name": "Nome dell'unità",
118
-    "Amount Name": "Nome dell'importo",
119
-    "Before Number": "Prima del numero",
120
-    "After Number": "Dopo il numero",
121
-    "Percent Position": "Posizione percentuale",
122
-    "Side Navigation": "Navigazione laterale",
123
-    "Table Sort Direction": "Direzione di ordinamento della tabella",
55
+    "Country": "Paese",
56
+    "State \/ Province": "Stato\/Provincia",
57
+    "Street Address": "Indirizzo",
124 58
     "City \/ Town": "Città\/paese",
59
+    "Zip \/ Postal Code": "Zip\/Codice postale",
60
+    "Legal & Compliance": "Legale e conformità",
61
+    "Entity type": "Tipo di entità",
125 62
     "Tax ID": "ID fiscale",
63
+    "Sole Proprietorship": "Ditta individuale",
64
+    "General Partnership": "Collaborazione generale",
65
+    "Limited Partnership (LP)": "Società in accomandita semplice (LP)",
126 66
     "Limited Liability Partnership (LLP)": "Società a responsabilità limitata (LLP)",
127
-    "Payment Terms": "Termini di pagamento",
128
-    "Number Digits": "Cifre numeriche",
129
-    "Net 15": "Rete 15",
130
-    "Max Content Width": "Larghezza massima del contenuto",
131
-    "Net 7": "Rete 7",
67
+    "Limited Liability Company (LLC)": "Società a responsabilità limitata (LLC)",
68
+    "Corporation": "società per azioni",
69
+    "Nonprofit": "Senza scopo di lucro",
70
+    "Number prefix": "Prefisso numerico",
71
+    "Number digits": "Cifre numeriche",
72
+    "Number next": "Numero successivo",
73
+    "Payment terms": "Termini di pagamento",
74
+    "Content": "Contenuto",
75
+    "Header": "Intestazione",
76
+    "Subheader": "Sottotitolo",
77
+    "Footer \/ notes": "Piè di pagina\/Note",
78
+    "Template": "Modello",
79
+    "Show logo": "Mostra logo",
80
+    "Accent color": "Colore dell'accento",
81
+    "Item name": "Nome dell'articolo",
82
+    "Items": "Oggetti",
83
+    "Products": "Prodotti",
84
+    "Other": "Altro",
85
+    "Unit name": "Nome dell'unità",
86
+    "Quantity": "Quantità",
87
+    "Hours": "Ore",
88
+    "Price name": "Nome del prezzo",
89
+    "Price": "Prezzo",
90
+    "Rate": "Tariffa",
91
+    "Amount name": "Nome dell'importo",
92
+    "Amount": "Importo",
93
+    "Total": "Totale",
132 94
     "Due Upon Receipt": "Dovuto al ricevimento",
95
+    "Net 7": "Rete 7",
133 96
     "Net 10": "Rete 10",
97
+    "Net 15": "Rete 15",
134 98
     "Net 30": "Rete 30",
135
-    "Legal & Compliance": "Legale e conformità",
136
-    "Number Prefix": "Prefisso numerico",
137
-    "Number Next": "Numero successivo",
138
-    "Price Name": "Nome del prezzo",
139
-    "Nonprofit": "Senza scopo di lucro",
140
-    "Top Navigation": "Navigazione principale",
141
-    "Striped Tables": "Tavoli a righe",
142
-    "Sole Proprietorship": "Ditta individuale",
143
-    "Limited Liability Company (LLC)": "Società a responsabilità limitata (LLC)",
144
-    "3X Large": "3X Grande",
99
+    "Net 60": "Rete 60",
100
+    "Net 90": "Rete 90",
101
+    "Modern": "Moderno",
102
+    "Classic": "Classico",
103
+    "Language": "Lingua",
104
+    "Timezone": "Fuso orario",
105
+    "Date & Time": "Data e ora",
106
+    "Date format": "Formato data",
107
+    "Time format": "Formato orario",
108
+    "Week start": "Inizio settimana",
109
+    "Before number": "Prima del numero",
110
+    "After number": "Dopo il numero",
111
+    "Select position": "Seleziona posizione",
112
+    "Financial & Fiscal": "Finanziario e fiscale",
113
+    "Number format": "Formato numerico",
114
+    "Percent position": "Posizione percentuale",
115
+    "Name": "Nome",
116
+    "Code": "Codice",
145 117
     "Symbol": "Simbolo",
146
-    "Default :Record": "Predefinito :Record",
118
+    "Default :record": "Predefinito :record",
147 119
     "Type": "Tipo",
148
-    "Start Date": "Data di inizio",
149
-    "End Date": "Data di fine",
120
+    "Start date": "Data di inizio",
121
+    "End date": "Data di fine",
150 122
     "Sales": "Vendite",
151
-    "Default :Type :Record": "Predefinito :Type :Record",
123
+    "Default :type :record": "Predefinito :type :record",
152 124
     "Purchase": "Acquisto",
153 125
     "Precision": "Precisione",
154
-    "Symbol Position": "Posizione del simbolo",
155
-    "After Amount": "Dopo l'importo",
126
+    "Symbol position": "Posizione del simbolo",
127
+    "Before amount": "Prima dell'importo",
128
+    "After amount": "Dopo l'importo",
156 129
     "Select a symbol position": "Seleziona la posizione del simbolo",
157
-    "Thousands Separator": "Separatore di migliaia",
130
+    "Decimal separator": "Separatore decimale",
131
+    "Thousands separator": "Separatore di migliaia",
158 132
     "Yes": "sì",
159 133
     "No": "No",
160 134
     "Description": "Descrizione",
@@ -165,25 +139,59 @@
165 139
     "None": "Nessuna",
166 140
     "Product": "Prodotto",
167 141
     "Service": "Servizio",
168
-    "Account Information": "Informazioni sull'account",
169
-    "Investment": "Investimento",
170
-    "Decimal Separator": "Separatore decimale",
171 142
     "Compound": "Composto",
172
-    "Current Balance": "Saldo attuale",
143
+    "Current balance": "Saldo attuale",
144
+    "Account Information": "Informazioni sull'account",
173 145
     "Subtype": "Sottotipo",
174
-    "Account Number": "Numero di conto",
146
+    "Account number": "Numero di conto",
147
+    "Investment": "Investimento",
148
+    "Credit": "Credito",
149
+    "Depository": "Depositario",
150
+    "Loan": "Prestito",
175 151
     "Manager": "Manager",
176 152
     "Children": "Bambini",
177 153
     "All": "Tutti",
178 154
     "Main": "Principale",
179
-    "Credit": "Credito",
180
-    "Loan": "Prestito",
181
-    "Available": "Disponibile",
182
-    "Depository": "Depositario",
183
-    "Entity": "Entità",
184
-    "Parent Department": "Reparto genitori",
155
+    "Parent department": "Reparto genitori",
185 156
     "Currency List": "Elenco delle valute",
186 157
     "Company Currencies": "Valute aziendali",
187
-    "Before Amount": "Prima dell'importo",
188
-    "Live Rate": "Tasso in tempo reale"
158
+    "Entity": "Entità",
159
+    "Available": "Disponibile",
160
+    "Live rate": "Tasso in tempo reale",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 160
- 152
resources/data/lang/nl.json 파일 보기

@@ -1,189 +1,197 @@
1 1
 {
2 2
     "General": "Generaal",
3
-    "Account": "Rekening",
4
-    "Department": "Afdeling",
5
-    "sky": "hemel",
6
-    "purple": "paars",
7
-    "Other": "Andere",
8
-    "gray": "grijs",
9
-    "Extra Small": "Extra klein",
10
-    "yellow": "geel",
11
-    "Default": "Standaard",
12
-    "Disabled": "Uitgeschakeld",
13
-    "Template": "Sjabloon",
14
-    "Total": "Totaal",
15
-    "stone": "steen",
16
-    "Ascending": "Oplopend",
17
-    "Logo": "Logo",
18
-    "Sales": "Verkoop",
3
+    "Bank account": "Bankrekening",
19 4
     "Currency": "Valuta",
5
+    "Taxes & Discounts": "Belastingen en kortingen",
6
+    "Sales tax": "Omzetbelasting",
7
+    "Purchase tax": "Aankoopbelasting",
8
+    "Sales discount": "Verkoopkorting",
9
+    "Purchase discount": "Aankoopkorting",
10
+    "Appearance": "Verschijning",
11
+    "Default": "Standaard",
12
+    "Company Profile": "Bedrijfsprofiel",
13
+    "Invoice": "Factuur",
20 14
     "Localization": "Lokalisatie",
21
-    "red": "rood",
22
-    "Sales Tax": "Omzetbelasting",
23
-    "lime": "kalk",
24
-    "Phone Number": "Telefoonnummer",
25
-    "Products": "Producten",
26
-    "Hours": "Uren",
15
+    "Discount": "Korting",
16
+    "Tax": "Belasting",
17
+    "Accounting": "Boekhouding",
18
+    "Banking": "Bankieren",
19
+    "Account": "Rekening",
20
+    "Department": "Afdeling",
21
+    "Services": "Diensten",
22
+    "Connected Accounts": "Gekoppelde accounts",
23
+    "Live Currency": "Levende valuta",
24
+    "Primary color": "Primaire kleur",
25
+    "amber": "barnsteen",
27 26
     "blue": "blauw",
27
+    "cyan": "cyaan",
28
+    "emerald": "smaragd",
29
+    "fuchsia": "fuchsia",
30
+    "gray": "grijs",
28 31
     "green": "groen",
29
-    "Extra Large": "Extra groot",
30
-    "Date & Time": "Datum en tijd",
31
-    "Name": "Naam",
32
-    "Purchase": "Aankoop",
32
+    "indigo": "indigo",
33
+    "lime": "kalk",
33 34
     "neutral": "neutraal",
34 35
     "orange": "oranje",
35
-    "Header": "Koptekst",
36
-    "Symbol": "Symbool",
37
-    "Type": "Typ",
38
-    "Accounting": "Boekhouding",
39
-    "Timezone": "Tijdzone",
40
-    "Content": "Inhoud",
41
-    "Enabled": "Ingeschakeld",
42
-    "zinc": "zink",
36
+    "pink": "roze",
37
+    "purple": "paars",
38
+    "red": "rood",
43 39
     "rose": "roos",
44
-    "Quantity": "Hoeveelheid",
45
-    "Code": "Code",
46
-    "Medium": "Middelgroot",
47
-    "Amount": "Bedrag",
48
-    "Language": "taal",
40
+    "sky": "hemel",
41
+    "slate": "leisteen",
42
+    "stone": "steen",
43
+    "teal": "groenblauw",
49 44
     "violet": "paars",
50
-    "pink": "roze",
45
+    "yellow": "geel",
46
+    "zinc": "zink",
51 47
     "Font": "Lettertype",
52
-    "Full": "Volledig",
53
-    "Large": "Groot",
54
-    "Screen": "Scherm",
55
-    "Descending": "Aflopend",
48
+    "Enabled": "Ingeschakeld",
49
+    "Disabled": "Uitgeschakeld",
50
+    "Identification": "Identificatie",
56 51
     "Email": "Email",
57
-    "Tax ID": "Fiscaal nummer",
58
-    "Price": "Prijs",
59
-    "Classic": "Klassiek",
60
-    "End Date": "Einddatum",
61
-    "Discount": "Korting",
62
-    "Layout": "Indeling",
52
+    "Phone number": "Telefoonnummer",
53
+    "Logo": "Logo",
54
+    "Location Details": "Details van de locatie",
63 55
     "Country": "Land",
56
+    "State \/ Province": "Staat\/provincie",
64 57
     "Street Address": "Adres",
65
-    "Corporation": "corporatie",
66
-    "slate": "leisteen",
67
-    "7X Large": "7x groot",
68
-    "Rate": "Tarief",
69
-    "Start Date": "Startdatum",
70
-    "indigo": "indigo",
71
-    "fuchsia": "fuchsia",
72
-    "Small": "Klein",
73
-    "Banking": "Bankieren",
74
-    "6X Large": "6x groot",
58
+    "City \/ Town": "Stad\/stad",
75 59
     "Zip \/ Postal Code": "Postcode\/postcode",
76
-    "Show Logo": "Logo weergeven",
77
-    "Default :Type :Record": "Standaard :Type :Record",
78
-    "Precision": "Nauwkeurigheid",
79
-    "Default :Record": "Standaard :Record",
80
-    "Footer \/ Notes": "Voettekst\/Notities",
81
-    "Item Name": "Naam van het item",
82
-    "Week Start": "Begin van de week",
83
-    "After Number": "Na nummer",
84
-    "Side Navigation": "Zijdelingse navigatie",
85
-    "Due Upon Receipt": "Verschuldigd bij ontvangst",
86
-    "teal": "groenblauw",
87
-    "Screen 2X Large": "Scherm 2X groot",
88
-    "3X Large": "3X groot",
89
-    "Percent Position": "Positie in procenten",
90
-    "Sales Discount": "Verkoopkorting",
91
-    "Symbol Position": "Positie van het symbool",
92
-    "Entity Type": "Entiteitstype",
93
-    "cyan": "cyaan",
94
-    "emerald": "smaragd",
95
-    "Appearance": "Verschijning",
96
-    "Connected Accounts": "Gekoppelde accounts",
60
+    "Legal & Compliance": "Juridische zaken en naleving",
61
+    "Entity type": "Entiteitstype",
62
+    "Tax ID": "Fiscaal nummer",
63
+    "Sole Proprietorship": "Eenmanszaak",
64
+    "General Partnership": "Algemeen partnerschap",
65
+    "Limited Partnership (LP)": "Beperkte vennootschap (LP)",
66
+    "Limited Liability Partnership (LLP)": "Partnerschap met beperkte aansprakelijkheid (LLP)",
67
+    "Limited Liability Company (LLC)": "Vennootschap met beperkte aansprakelijkheid (LLC)",
68
+    "Corporation": "corporatie",
97 69
     "Nonprofit": "Non-profitorganisatie",
70
+    "Number prefix": "Voorvoegsel van het nummer",
71
+    "Number digits": "Aantal cijfers",
72
+    "Number next": "Nummer Volgende",
73
+    "Payment terms": "Betalingsvoorwaarden",
74
+    "Content": "Inhoud",
75
+    "Header": "Koptekst",
98 76
     "Subheader": "Subkop",
99
-    "Before Amount": "Vóór het bedrag",
100
-    "Location Details": "Details van de locatie",
101
-    "Net 10": "Netto 10",
102
-    "Before Number": "Voor het nummer",
103
-    "Live Currency": "Levende valuta",
104
-    "Max Content Width": "Maximale breedte van de inhoud",
105
-    "Data Presentation": "Presentatie van gegevens",
106
-    "4X Large": "4X groot",
107
-    "Modern": "Modern",
108
-    "Purchase Tax": "Aankoopbelasting",
109
-    "Number Prefix": "Voorvoegsel van het nummer",
110
-    "Select a symbol position": "Selecteer een symboolpositie",
111
-    "Screen Large": "Groot scherm",
112
-    "Identification": "Identificatie",
113
-    "Unit Name": "Naam van de eenheid",
114
-    "Price Name": "Naam van de prijs",
115
-    "Purchase Discount": "Aankoopkorting",
116
-    "Payment Terms": "Betalingsvoorwaarden",
117
-    "Number Format": "Nummerformaat",
77
+    "Footer \/ notes": "Voettekst\/Notities",
78
+    "Template": "Sjabloon",
79
+    "Show logo": "Logo weergeven",
80
+    "Accent color": "Accentkleur",
81
+    "Item name": "Naam van het item",
82
+    "Items": "Artikelen",
83
+    "Products": "Producten",
84
+    "Other": "Andere",
85
+    "Unit name": "Naam van de eenheid",
86
+    "Quantity": "Hoeveelheid",
87
+    "Hours": "Uren",
88
+    "Price name": "Naam van de prijs",
89
+    "Price": "Prijs",
90
+    "Rate": "Tarief",
91
+    "Amount name": "Naam van het bedrag",
92
+    "Amount": "Bedrag",
93
+    "Total": "Totaal",
94
+    "Due Upon Receipt": "Verschuldigd bij ontvangst",
118 95
     "Net 7": "Net 7",
96
+    "Net 10": "Netto 10",
119 97
     "Net 15": "Netto 15",
120
-    "Decimal Separator": "Decimaal scheidingsteken",
121
-    "Thousands Separator": "Scheidingsteken voor duizenden",
122
-    "Limited Partnership (LP)": "Beperkte vennootschap (LP)",
123
-    "Navigation Layout": "Navigatie-indeling",
124
-    "Legal & Compliance": "Juridische zaken en naleving",
125
-    "Net 60": "Netto 60",
126
-    "Modal Width": "Modale breedte",
127
-    "Table Sort Direction": "Sorteerrichting van de tabel",
128
-    "Limited Liability Company (LLC)": "Vennootschap met beperkte aansprakelijkheid (LLC)",
129
-    "Bank Account": "Bankrekening",
130
-    "Time Format": "Tijdformaat",
131
-    "Company Profile": "Bedrijfsprofiel",
132
-    "City \/ Town": "Stad\/stad",
133
-    "Number Next": "Nummer Volgende",
134
-    "Amount Name": "Naam van het bedrag",
135
-    "Select Position": "Positie selecteren",
136
-    "Financial & Fiscal": "Financieel en fiscaal",
137
-    "Services": "Diensten",
138
-    "Number Digits": "Aantal cijfers",
139
-    "Records Per Page": "Records per pagina",
140 98
     "Net 30": "Netto 30",
141
-    "Date Format": "Datumformaat",
142
-    "Taxes & Discounts": "Belastingen en kortingen",
143
-    "Striped Tables": "Gestreepte tafels",
144
-    "State \/ Province": "Staat\/provincie",
99
+    "Net 60": "Netto 60",
145 100
     "Net 90": "Netto 90",
146
-    "General Partnership": "Algemeen partnerschap",
147
-    "Limited Liability Partnership (LLP)": "Partnerschap met beperkte aansprakelijkheid (LLP)",
148
-    "After Amount": "Na het bedrag",
149
-    "Accent Color": "Accentkleur",
150
-    "Invoice": "Factuur",
151
-    "Items": "Artikelen",
152
-    "2X Large": "2X groot",
153
-    "Tax": "Belasting",
154
-    "Primary Color": "Primaire kleur",
155
-    "5X Large": "5x groot",
156
-    "Sole Proprietorship": "Eenmanszaak",
157
-    "Top Navigation": "Navigatie bovenaan",
158
-    "amber": "barnsteen",
159
-    "Screen Extra Large": "Extra groot scherm",
160
-    "Description": "Omschrijving",
101
+    "Modern": "Modern",
102
+    "Classic": "Klassiek",
103
+    "Language": "taal",
104
+    "Timezone": "Tijdzone",
105
+    "Date & Time": "Datum en tijd",
106
+    "Date format": "Datumformaat",
107
+    "Time format": "Tijdformaat",
108
+    "Week start": "Begin van de week",
109
+    "Before number": "Voor het nummer",
110
+    "After number": "Na nummer",
111
+    "Select position": "Positie selecteren",
112
+    "Financial & Fiscal": "Financieel en fiscaal",
113
+    "Number format": "Nummerformaat",
114
+    "Percent position": "Positie in procenten",
115
+    "Name": "Naam",
116
+    "Code": "Code",
117
+    "Symbol": "Symbool",
118
+    "Default :record": "Standaard :record",
119
+    "Type": "Typ",
120
+    "Start date": "Startdatum",
121
+    "End date": "Einddatum",
122
+    "Sales": "Verkoop",
123
+    "Default :type :record": "Standaard :type :record",
124
+    "Purchase": "Aankoop",
125
+    "Precision": "Nauwkeurigheid",
126
+    "Symbol position": "Positie van het symbool",
127
+    "Before amount": "Vóór het bedrag",
128
+    "After amount": "Na het bedrag",
129
+    "Select a symbol position": "Selecteer een symboolpositie",
130
+    "Decimal separator": "Decimaal scheidingsteken",
131
+    "Thousands separator": "Scheidingsteken voor duizenden",
161 132
     "Yes": "Ja",
162
-    "Percentage": "Percentage",
163
-    "Scope": "Toepassingsgebied",
164 133
     "No": "Nee",
165
-    "Product": "Product",
166
-    "None": "Geen",
134
+    "Description": "Omschrijving",
135
+    "Computation": "Berekening",
136
+    "Scope": "Toepassingsgebied",
137
+    "Percentage": "Percentage",
167 138
     "Fixed": "Opgelost",
139
+    "None": "Geen",
140
+    "Product": "Product",
168 141
     "Service": "Service",
169 142
     "Compound": "Samenstelling",
170
-    "Computation": "Berekening",
171
-    "Current Balance": "Huidig saldo",
143
+    "Current balance": "Huidig saldo",
172 144
     "Account Information": "Accountgegevens",
173 145
     "Subtype": "Subtype",
174
-    "Account Number": "Rekeningnummer",
146
+    "Account number": "Rekeningnummer",
175 147
     "Investment": "Investering",
176 148
     "Credit": "Krediet",
177 149
     "Depository": "Depository",
150
+    "Loan": "Lening",
178 151
     "Manager": "Manager",
179 152
     "Children": "Kinderen",
180 153
     "All": "Alles",
181
-    "Entity": "Entiteit",
182
-    "Available": "Beschikbaar",
183 154
     "Main": "Belangrijkste",
184
-    "Parent Department": "Ouderafdeling",
185
-    "Loan": "Lening",
155
+    "Parent department": "Ouderafdeling",
156
+    "Currency List": "Valutalijst",
186 157
     "Company Currencies": "Valuta's van bedrijven",
187
-    "Live Rate": "Tarief live",
188
-    "Currency List": "Valutalijst"
158
+    "Entity": "Entiteit",
159
+    "Available": "Beschikbaar",
160
+    "Live rate": "Tarief live",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 120
- 143
resources/data/lang/pt.json 파일 보기

@@ -1,162 +1,134 @@
1 1
 {
2 2
     "General": "Geral",
3
-    "indigo": "índigo",
4
-    "slate": "ardósia",
5
-    "neutral": "neutro",
6
-    "purple": "roxo",
7
-    "orange": "laranja",
8
-    "Total": "Total",
9
-    "Email": "E-mail",
10
-    "Rate": "Tarifa",
11
-    "Discount": "Desconto",
12
-    "Font": "Fonte",
13
-    "State \/ Province": "Estado\/ Província",
14
-    "zinc": "zinco",
15
-    "Date & Time": "Data e hora",
3
+    "Bank account": "Conta bancária",
4
+    "Currency": "Moeda",
5
+    "Taxes & Discounts": "Impostos e descontos",
6
+    "Sales tax": "Imposto sobre vendas",
7
+    "Purchase tax": "Imposto de compra",
8
+    "Sales discount": "Desconto de vendas",
9
+    "Purchase discount": "Desconto na compra",
16 10
     "Appearance": "Aparência",
17
-    "rose": "rose",
18
-    "Phone Number": "Número de telefone",
19
-    "Department": "Departamento",
20
-    "Medium": "Médio",
21
-    "Price": "Preço",
22
-    "Tax": "Imposto",
23
-    "yellow": "amarelo",
24
-    "Screen": "Ecrã",
25
-    "Name": "Nome",
26
-    "red": "vermelho",
27
-    "sky": "céu",
28
-    "Full": "Completo",
29
-    "Other": "Outros",
11
+    "Default": "Padrão",
12
+    "Company Profile": "Perfil da empresa",
13
+    "Invoice": "Fatura",
30 14
     "Localization": "Localização",
31
-    "Items": "Itens",
32
-    "blue": "azul",
33
-    "Nonprofit": "Sem fins lucrativos",
34
-    "Content": "Conteúdo",
35
-    "Code": "Código",
15
+    "Discount": "Desconto",
16
+    "Tax": "Imposto",
17
+    "Accounting": "Contabilidade",
18
+    "Banking": "Serviços bancários",
19
+    "Account": "Conta",
20
+    "Department": "Departamento",
36 21
     "Services": "Serviços",
37
-    "Amount": "Quantia",
38
-    "Products": "Produtos",
39
-    "Modern": "Moderno",
40
-    "Quantity": "Quantidade",
41
-    "lime": "cal",
42
-    "stone": "pedra",
22
+    "Connected Accounts": "Contas conectadas",
23
+    "Live Currency": "Moeda ao vivo",
24
+    "Primary color": "Cor primária",
25
+    "amber": "âmbar",
26
+    "blue": "azul",
43 27
     "cyan": "ciano",
44
-    "Ascending": "Ascendente",
45
-    "Header": "cabeçalho",
46
-    "Net 30": "Rede 30",
47
-    "Descending": "Descendente",
48
-    "Logo": "Logotipo",
49
-    "Language": "Idioma",
50
-    "Large": "Grande",
51
-    "Account": "Conta",
52
-    "Entity Type": "Tipo de entidade",
53
-    "Extra Large": "Extra grande",
54
-    "Hours": "Horas",
55
-    "Invoice": "Fatura",
56
-    "Timezone": "Fuso horário",
57
-    "Company Profile": "Perfil da empresa",
58
-    "Sales Tax": "Imposto sobre vendas",
59
-    "Currency": "Moeda",
60
-    "Layout": "Layout",
61
-    "Accounting": "Contabilidade",
62
-    "Corporation": "Corporação",
63
-    "Default": "Padrão",
64
-    "violet": "violeta",
65
-    "green": "verde",
28
+    "emerald": "esmeralda",
66 29
     "fuchsia": "fúcsia",
67 30
     "gray": "cinzento",
68
-    "Street Address": "Endereço da rua",
69
-    "teal": "azul-petróleo",
70
-    "Tax ID": "Identificação fiscal",
71
-    "Template": "Modelo",
72
-    "Percent Position": "Posição percentual",
73
-    "Max Content Width": "Largura máxima do conteúdo",
74
-    "3X Large": "3X Grande",
75
-    "Banking": "Serviços bancários",
31
+    "green": "verde",
32
+    "indigo": "índigo",
33
+    "lime": "cal",
34
+    "neutral": "neutro",
35
+    "orange": "laranja",
76 36
     "pink": "rosa",
77
-    "Classic": "clássico",
78
-    "Identification": "Identificação",
79
-    "Time Format": "Formato de hora",
80
-    "Select Position": "Selecionar posição",
81
-    "Records Per Page": "Registros por página",
82
-    "Subheader": "Sub-cabeçalho",
83
-    "Unit Name": "Nome da unidade",
84
-    "Net 7": "Rede 7",
85
-    "Net 10": "Rede 10",
86
-    "Week Start": "Início da semana",
87
-    "Taxes & Discounts": "Impostos e descontos",
88
-    "Purchase Tax": "Imposto de compra",
89
-    "Sales Discount": "Desconto de vendas",
90
-    "Purchase Discount": "Desconto na compra",
91
-    "amber": "âmbar",
92
-    "Top Navigation": "Navegação superior",
93
-    "Striped Tables": "Mesas listradas",
37
+    "purple": "roxo",
38
+    "red": "vermelho",
39
+    "rose": "rose",
40
+    "sky": "céu",
41
+    "slate": "ardósia",
42
+    "stone": "pedra",
43
+    "teal": "azul-petróleo",
44
+    "violet": "violeta",
45
+    "yellow": "amarelo",
46
+    "zinc": "zinco",
47
+    "Font": "Fonte",
94 48
     "Enabled": "Ativado",
95 49
     "Disabled": "Desativado",
96
-    "Table Sort Direction": "Direção de classificação da tabela",
97
-    "6X Large": "6X Grande",
98
-    "Screen Large": "Tela grande",
99
-    "Extra Small": "Extra pequeno",
50
+    "Identification": "Identificação",
51
+    "Email": "E-mail",
52
+    "Phone number": "Número de telefone",
53
+    "Logo": "Logotipo",
100 54
     "Location Details": "Detalhes da localização",
55
+    "Country": "País",
56
+    "State \/ Province": "Estado\/ Província",
57
+    "Street Address": "Endereço da rua",
101 58
     "City \/ Town": "Cidade\/Cidade",
102 59
     "Zip \/ Postal Code": "CEP\/Código postal",
103 60
     "Legal & Compliance": "Legal e conformidade",
61
+    "Entity type": "Tipo de entidade",
62
+    "Tax ID": "Identificação fiscal",
104 63
     "Sole Proprietorship": "Propriedade individual",
64
+    "General Partnership": "Parceria geral",
65
+    "Limited Partnership (LP)": "Parceria Limitada (LP)",
105 66
     "Limited Liability Partnership (LLP)": "Parceria de Responsabilidade Limitada (LLP)",
106
-    "Number Prefix": "Prefixo numérico",
107
-    "Number Next": "Número seguinte",
108
-    "Footer \/ Notes": "Rodapé\/\/Notas",
109
-    "Show Logo": "Mostrar logotipo",
110
-    "Price Name": "Nome do preço",
67
+    "Limited Liability Company (LLC)": "Companhia de Responsabilidade Limitada (LLC)",
68
+    "Corporation": "Corporação",
69
+    "Nonprofit": "Sem fins lucrativos",
70
+    "Number prefix": "Prefixo numérico",
71
+    "Number digits": "Dígitos numéricos",
72
+    "Number next": "Número seguinte",
73
+    "Payment terms": "Condições de pagamento",
74
+    "Content": "Conteúdo",
75
+    "Header": "cabeçalho",
76
+    "Subheader": "Sub-cabeçalho",
77
+    "Footer \/ notes": "Rodapé\/\/Notas",
78
+    "Template": "Modelo",
79
+    "Show logo": "Mostrar logotipo",
80
+    "Accent color": "Cor de destaque",
81
+    "Item name": "Nome do item",
82
+    "Items": "Itens",
83
+    "Products": "Produtos",
84
+    "Other": "Outros",
85
+    "Unit name": "Nome da unidade",
86
+    "Quantity": "Quantidade",
87
+    "Hours": "Horas",
88
+    "Price name": "Nome do preço",
89
+    "Price": "Preço",
90
+    "Rate": "Tarifa",
91
+    "Amount name": "Nome do valor",
92
+    "Amount": "Quantia",
93
+    "Total": "Total",
111 94
     "Due Upon Receipt": "Vencido após o recebimento",
95
+    "Net 7": "Rede 7",
96
+    "Net 10": "Rede 10",
97
+    "Net 15": "Rede 15",
98
+    "Net 30": "Rede 30",
112 99
     "Net 60": "Rede 60",
113
-    "Date Format": "Formato de data",
114
-    "Before Number": "Antes do número",
115
-    "Number Format": "Formato numérico",
116
-    "Bank Account": "Conta bancária",
117
-    "Screen 2X Large": "Tela 2X Grande",
118
-    "Limited Liability Company (LLC)": "Companhia de Responsabilidade Limitada (LLC)",
119
-    "Accent Color": "Cor de destaque",
120
-    "Amount Name": "Nome do valor",
121
-    "emerald": "esmeralda",
122
-    "Side Navigation": "Navegação lateral",
123
-    "7X Large": "7X Grande",
124
-    "2X Large": "2X Grande",
125
-    "Item Name": "Nome do item",
126 100
     "Net 90": "Rede 90",
127
-    "Live Currency": "Moeda ao vivo",
128
-    "Number Digits": "Dígitos numéricos",
129
-    "4X Large": "4X Grande",
130
-    "Screen Extra Large": "Tela extra grande",
131
-    "Primary Color": "Cor primária",
132
-    "Modal Width": "Largura modal",
133
-    "General Partnership": "Parceria geral",
134
-    "Limited Partnership (LP)": "Parceria Limitada (LP)",
135
-    "After Number": "Depois do número",
136
-    "Small": "Pequeno",
137
-    "Payment Terms": "Condições de pagamento",
138
-    "Net 15": "Rede 15",
101
+    "Modern": "Moderno",
102
+    "Classic": "clássico",
103
+    "Language": "Idioma",
104
+    "Timezone": "Fuso horário",
105
+    "Date & Time": "Data e hora",
106
+    "Date format": "Formato de data",
107
+    "Time format": "Formato de hora",
108
+    "Week start": "Início da semana",
109
+    "Before number": "Antes do número",
110
+    "After number": "Depois do número",
111
+    "Select position": "Selecionar posição",
139 112
     "Financial & Fiscal": "Financeiro e fiscal",
140
-    "Connected Accounts": "Contas conectadas",
141
-    "Navigation Layout": "Layout de navegação",
142
-    "5X Large": "5X Grande",
143
-    "Country": "País",
144
-    "Data Presentation": "Apresentação de dados",
113
+    "Number format": "Formato numérico",
114
+    "Percent position": "Posição percentual",
115
+    "Name": "Nome",
116
+    "Code": "Código",
145 117
     "Symbol": "Símbolo",
146
-    "Default :Record": "Padrão :Record",
118
+    "Default :record": "Padrão :record",
147 119
     "Type": "Tipo",
148
-    "Start Date": "Data de início",
149
-    "End Date": "Data de término",
120
+    "Start date": "Data de início",
121
+    "End date": "Data de término",
150 122
     "Sales": "Vendas",
151
-    "Default :Type :Record": "Padrão :Type :Record",
123
+    "Default :type :record": "Padrão :type :record",
152 124
     "Purchase": "Compra",
153 125
     "Precision": "Precisão",
154
-    "Symbol Position": "Posição do símbolo",
155
-    "Before Amount": "Antes do valor",
156
-    "After Amount": "Após o valor",
126
+    "Symbol position": "Posição do símbolo",
127
+    "Before amount": "Antes do valor",
128
+    "After amount": "Após o valor",
157 129
     "Select a symbol position": "Selecione a posição de um símbolo",
158
-    "Decimal Separator": "Separador decimal",
159
-    "Thousands Separator": "Separador de milhares",
130
+    "Decimal separator": "Separador decimal",
131
+    "Thousands separator": "Separador de milhares",
160 132
     "Yes": "sim",
161 133
     "No": "Não",
162 134
     "Description": "Descrição",
@@ -168,29 +140,29 @@
168 140
     "Product": "Produto",
169 141
     "Service": "Serviço",
170 142
     "Compound": "Composto",
171
-    "Current Balance": "Saldo atual",
143
+    "Current balance": "Saldo atual",
172 144
     "Account Information": "Informações da conta",
173 145
     "Subtype": "Subtipo",
174
-    "Account Number": "Número da conta",
146
+    "Account number": "Número da conta",
175 147
     "Investment": "Investimento",
176 148
     "Credit": "Crédito",
149
+    "Depository": "Depositário",
177 150
     "Loan": "Empréstimo",
178 151
     "Manager": "Gestor",
179 152
     "Children": "Crianças",
180
-    "Main": "Principal",
181
-    "Depository": "Depositário",
182 153
     "All": "Todos",
183
-    "Entity": "Entidade",
184
-    "Available": "Disponível",
185
-    "Parent Department": "Departamento de pais",
154
+    "Main": "Principal",
155
+    "Parent department": "Departamento de pais",
186 156
     "Currency List": "Lista de moedas",
187
-    "Live Rate": "Tarifa ao vivo",
188 157
     "Company Currencies": "Moedas da empresa",
158
+    "Entity": "Entidade",
159
+    "Available": "Disponível",
160
+    "Live rate": "Tarifa ao vivo",
189 161
     "Edit": "Editar",
190 162
     "Notes": "Notas",
191 163
     "Terms": "Termos",
192
-    "Ending Balance": "Saldo Final",
193
-    "Default :Type :Category": "Padrão :Tipo :Categoria",
164
+    "Ending balance": "Saldo Final",
165
+    "Default :type :category": "Padrão :type :category",
194 166
     "Category": "Categoria",
195 167
     "Configuration": "Configuração",
196 168
     "Dates": "Datas",
@@ -216,5 +188,10 @@
216 188
     "Create": "Criar",
217 189
     "Estimate Header": "Cabeçalho do Orçamento",
218 190
     "Estimate Details": "Detalhes do Orçamento",
219
-    "Estimate Footer": "Rodapé do Orçamento"
191
+    "Estimate Footer": "Rodapé do Orçamento",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
220 197
 }

+ 158
- 150
resources/data/lang/tr.json 파일 보기

@@ -1,189 +1,197 @@
1 1
 {
2 2
     "General": "General",
3
-    "violet": "menekşe",
4
-    "slate": "arduvaz",
5
-    "yellow": "sarı",
6
-    "stone": "taş",
7
-    "Layout": "Düzen",
8
-    "Large": "Büyük",
9
-    "teal": "deniz mavisi",
10
-    "Banking": "Bankacılık",
11
-    "green": "yeşil",
12
-    "Ascending": "Yükselen",
13
-    "Department": "Departman",
14
-    "blue": "mavi",
15
-    "red": "kırmızı",
16
-    "Descending": "Azalan",
17
-    "State \/ Province": "Eyalet\/İl",
18
-    "Price": "FİYAT",
19
-    "Classic": "Klasik",
20
-    "Invoice": "Fatura",
21
-    "Screen": "Ekranı",
22
-    "Phone Number": "Telefon Numarası",
23
-    "Total": "Toplam",
24
-    "rose": "gül",
25
-    "Font": "Yazı Tipi",
26
-    "Amount": "Miktar",
27
-    "End Date": "Bitiş Tarihi",
28
-    "Header": "Başlık",
29
-    "Account": "Hesap",
30
-    "pink": "pembe",
31
-    "zinc": "çinko",
32
-    "Full": "Dolu",
33
-    "Medium": "Orta",
34
-    "Country": "Ülke",
35
-    "Corporation": "şirket",
36
-    "Template": "Şablon",
37
-    "Products": "Ürünlerimiz",
38
-    "Modern": "Çağdaş",
39
-    "Timezone": "Saat dilimi",
40
-    "Yes": "Evet",
41
-    "Computation": "Hesaplama",
42
-    "Percentage": "Yüzde",
43
-    "Product": "Ürün",
44
-    "Sales Tax": "Satış Vergisi",
3
+    "Bank account": "Banka Hesabı",
4
+    "Currency": "Para Birimi",
5
+    "Taxes & Discounts": "Vergiler ve İndirimler",
6
+    "Sales tax": "Satış Vergisi",
7
+    "Purchase tax": "Satın Alma Vergisi",
8
+    "Sales discount": "Satış İndirimi",
9
+    "Purchase discount": "Satın Alma İndirimi",
45 10
     "Appearance": "Görünüm",
46 11
     "Default": "Varsayılan",
12
+    "Company Profile": "Firma Profili",
13
+    "Invoice": "Fatura",
47 14
     "Localization": "Yerelleştirme",
48 15
     "Discount": "İndirim",
16
+    "Tax": "Vergi",
17
+    "Accounting": "Muhasebe",
18
+    "Banking": "Bankacılık",
19
+    "Account": "Hesap",
20
+    "Department": "Departman",
21
+    "Services": "HİZMETLER",
22
+    "Connected Accounts": "Bağlı Hesaplar",
23
+    "Live Currency": "Canlı Para Birimi",
24
+    "Primary color": "Ana Renk",
49 25
     "amber": "kehribar",
26
+    "blue": "mavi",
27
+    "cyan": "camgöbeği",
50 28
     "emerald": "zümrüt",
29
+    "fuchsia": "fuşya",
30
+    "gray": "gri",
31
+    "green": "yeşil",
32
+    "indigo": "çivit",
51 33
     "lime": "kireç",
52 34
     "neutral": "nötr",
35
+    "orange": "turuncu",
36
+    "pink": "pembe",
53 37
     "purple": "mor",
38
+    "red": "kırmızı",
39
+    "rose": "gül",
40
+    "sky": "gökyüzü",
41
+    "slate": "arduvaz",
42
+    "stone": "taş",
43
+    "teal": "deniz mavisi",
44
+    "violet": "menekşe",
45
+    "yellow": "sarı",
46
+    "zinc": "çinko",
47
+    "Font": "Yazı Tipi",
54 48
     "Enabled": "Etkin",
55
-    "Extra Large": "Ekstra Büyük",
49
+    "Disabled": "Engelli",
50
+    "Identification": "Tanımlama",
56 51
     "Email": "E-posta",
52
+    "Phone number": "Telefon Numarası",
57 53
     "Logo": "Logo",
54
+    "Location Details": "Konum Ayrıntıları",
55
+    "Country": "Ülke",
56
+    "State \/ Province": "Eyalet\/İl",
57
+    "Street Address": "Sokak Adresi",
58
+    "City \/ Town": "Şehir\/Kasaba",
59
+    "Zip \/ Postal Code": "Posta Kodu\/Posta Kodu",
60
+    "Legal & Compliance": "Yasal ve Uyum",
61
+    "Entity type": "Varlık Türü",
58 62
     "Tax ID": "Vergi Kimliği",
59
-    "Payment Terms": "Ödeme Koşulları",
63
+    "Sole Proprietorship": "Tek mülkiyet",
64
+    "General Partnership": "Genel Ortaklık",
65
+    "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)",
66
+    "Limited Liability Partnership (LLP)": "Sınırlı Sorumluluk Ortaklığı (LLP)",
67
+    "Limited Liability Company (LLC)": "Sınırlı Sorumluluk Şirketi (LLC)",
68
+    "Corporation": "şirket",
69
+    "Nonprofit": "kar amacı gütmeyen",
70
+    "Number prefix": "Numara Öneki",
71
+    "Number digits": "Sayı Rakamları",
72
+    "Number next": "Sonraki numara",
73
+    "Payment terms": "Ödeme Koşulları",
60 74
     "Content": "İçerik",
75
+    "Header": "Başlık",
76
+    "Subheader": "Alt başlık",
77
+    "Footer \/ notes": "Altbilgi\/Notlar",
78
+    "Template": "Şablon",
79
+    "Show logo": "Logoyu Göster",
80
+    "Accent color": "Vurgu Rengi",
81
+    "Item name": "Öğe Adı",
61 82
     "Items": "Öğeler",
83
+    "Products": "Ürünlerimiz",
62 84
     "Other": "Diğer",
85
+    "Unit name": "Birim Adı",
63 86
     "Quantity": "Miktar",
64 87
     "Hours": "Saatler",
88
+    "Price name": "Fiyat Adı",
89
+    "Price": "FİYAT",
90
+    "Rate": "Oranı",
91
+    "Amount name": "Miktar Adı",
92
+    "Amount": "Miktar",
93
+    "Total": "Toplam",
94
+    "Due Upon Receipt": "Alındıktan Sonra Ödenecek",
95
+    "Net 7": "Net 7",
96
+    "Net 10": "Net 10",
97
+    "Net 15": "Net 15",
98
+    "Net 30": "Net 30",
99
+    "Net 60": "Net 60",
100
+    "Net 90": "Net 90",
101
+    "Modern": "Çağdaş",
102
+    "Classic": "Klasik",
65 103
     "Language": "Dil",
104
+    "Timezone": "Saat dilimi",
105
+    "Date & Time": "Tarih ve Saat",
106
+    "Date format": "Tarih Biçimi",
107
+    "Time format": "Zaman Biçimi",
108
+    "Week start": "Hafta Başlangıcı",
109
+    "Before number": "Numaradan Önce",
110
+    "After number": "Numaradan Sonra",
111
+    "Select position": "Pozisyon Seçiniz",
112
+    "Financial & Fiscal": "Finansal ve Mali",
113
+    "Number format": "Sayı Biçimi",
114
+    "Percent position": "Yüzde Pozisyonu",
66 115
     "Name": "İsim",
67 116
     "Code": "Kod",
68 117
     "Symbol": "Sembol",
118
+    "Default :record": "Varsayılan :record",
69 119
     "Type": "Tür",
120
+    "Start date": "Başlangıç Tarihi",
121
+    "End date": "Bitiş Tarihi",
70 122
     "Sales": "Satışlar",
123
+    "Default :type :record": "Varsayılan :type :record",
124
+    "Purchase": "Satın alma",
71 125
     "Precision": "Hassasiyet",
126
+    "Symbol position": "Sembol Konumu",
127
+    "Before amount": "Miktardan Önce",
128
+    "After amount": "Miktardan Sonra",
129
+    "Select a symbol position": "Bir sembol konumu seçin",
130
+    "Decimal separator": "Ondalık Ayırıcı",
131
+    "Thousands separator": "Binlerce Ayırıcı",
132
+    "Yes": "Evet",
133
+    "No": "Hayır",
72 134
     "Description": "Açıklama",
135
+    "Computation": "Hesaplama",
136
+    "Scope": "Kapsam",
137
+    "Percentage": "Yüzde",
73 138
     "Fixed": "Sabit",
74 139
     "None": "Yok",
75
-    "Currency": "Para Birimi",
76
-    "Services": "HİZMETLER",
77
-    "gray": "gri",
78
-    "sky": "gökyüzü",
79
-    "No": "Hayır",
80
-    "Live Currency": "Canlı Para Birimi",
81
-    "cyan": "camgöbeği",
82
-    "Net 7": "Net 7",
83
-    "orange": "turuncu",
140
+    "Product": "Ürün",
84 141
     "Service": "Hizmet",
85
-    "Tax": "Vergi",
86
-    "fuchsia": "fuşya",
87
-    "indigo": "çivit",
88
-    "5X Large": "5X Büyük",
89
-    "Small": "Küçük",
90
-    "Unit Name": "Birim Adı",
91
-    "Net 10": "Net 10",
92
-    "Sales Discount": "Satış İndirimi",
93
-    "Decimal Separator": "Ondalık Ayırıcı",
94
-    "General Partnership": "Genel Ortaklık",
95
-    "Taxes & Discounts": "Vergiler ve İndirimler",
96
-    "Records Per Page": "Sayfa Başına Kayıtlar",
97
-    "Item Name": "Öğe Adı",
98
-    "Connected Accounts": "Bağlı Hesaplar",
99
-    "Primary Color": "Ana Renk",
100
-    "Entity Type": "Varlık Türü",
101
-    "Number Next": "Sonraki numara",
102
-    "Amount Name": "Miktar Adı",
103
-    "Striped Tables": "Çizgili Tablolar",
104
-    "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)",
105
-    "Show Logo": "Logoyu Göster",
106
-    "Week Start": "Hafta Başlangıcı",
107
-    "After Amount": "Miktardan Sonra",
108
-    "Bank Account": "Banka Hesabı",
109
-    "Top Navigation": "Üst Navigasyon",
110
-    "Default :Type :Record": "Varsayılan :Type :Record",
111
-    "Disabled": "Engelli",
112
-    "Number Prefix": "Numara Öneki",
113
-    "Limited Liability Partnership (LLP)": "Sınırlı Sorumluluk Ortaklığı (LLP)",
114
-    "Street Address": "Sokak Adresi",
115
-    "Legal & Compliance": "Yasal ve Uyum",
116
-    "Scope": "Kapsam",
117
-    "Nonprofit": "kar amacı gütmeyen",
118
-    "Identification": "Tanımlama",
119
-    "After Number": "Numaradan Sonra",
120
-    "Purchase": "Satın alma",
121
-    "Price Name": "Fiyat Adı",
122
-    "Accent Color": "Vurgu Rengi",
123
-    "Net 15": "Net 15",
124
-    "Time Format": "Zaman Biçimi",
125
-    "Select Position": "Pozisyon Seçiniz",
126
-    "Date & Time": "Tarih ve Saat",
127
-    "Navigation Layout": "Navigasyon Düzeni",
128
-    "Accounting": "Muhasebe",
129
-    "4X Large": "4X Büyük",
130
-    "Table Sort Direction": "Tablo Sıralama Yönü",
131
-    "Screen 2X Large": "Ekran 2X Büyük",
132
-    "2X Large": "2X Büyük",
133
-    "Symbol Position": "Sembol Konumu",
134
-    "6X Large": "6X Büyük",
135
-    "Side Navigation": "Yan Navigasyon",
136
-    "Net 60": "Net 60",
137
-    "Start Date": "Başlangıç Tarihi",
138
-    "Before Number": "Numaradan Önce",
139
-    "Company Profile": "Firma Profili",
140
-    "Data Presentation": "Veri Sunumu",
141
-    "7X Large": "7X Büyük",
142
-    "City \/ Town": "Şehir\/Kasaba",
143
-    "Net 90": "Net 90",
144
-    "Footer \/ Notes": "Altbilgi\/Notlar",
145
-    "Purchase Tax": "Satın Alma Vergisi",
146
-    "Zip \/ Postal Code": "Posta Kodu\/Posta Kodu",
147
-    "Percent Position": "Yüzde Pozisyonu",
148
-    "Screen Large": "Geniş Ekran",
149
-    "Thousands Separator": "Binlerce Ayırıcı",
150
-    "Subheader": "Alt başlık",
151
-    "Net 30": "Net 30",
152
-    "Default :Record": "Varsayılan :Record",
153
-    "Max Content Width": "Maksimum İçerik Genişliği",
154
-    "Limited Liability Company (LLC)": "Sınırlı Sorumluluk Şirketi (LLC)",
155
-    "Location Details": "Konum Ayrıntıları",
156
-    "Purchase Discount": "Satın Alma İndirimi",
157
-    "Select a symbol position": "Bir sembol konumu seçin",
158 142
     "Compound": "Bileşik",
159
-    "Rate": "Oranı",
160
-    "3X Large": "3X Büyük",
161
-    "Number Digits": "Sayı Rakamları",
162
-    "Date Format": "Tarih Biçimi",
163
-    "Screen Extra Large": "Ekstra Büyük Ekran",
164
-    "Extra Small": "Ekstra Küçük",
165
-    "Due Upon Receipt": "Alındıktan Sonra Ödenecek",
166
-    "Number Format": "Sayı Biçimi",
167
-    "Before Amount": "Miktardan Önce",
168
-    "Sole Proprietorship": "Tek mülkiyet",
169
-    "Modal Width": "Modal Genişliği",
170
-    "Financial & Fiscal": "Finansal ve Mali",
171
-    "Account Number": "Hesap Numarası",
172
-    "Manager": "yönetici",
173
-    "Subtype": "Alt Tür",
174
-    "Credit": "Kredi",
175
-    "All": "Hepsi",
176
-    "Loan": "Kredi",
143
+    "Current balance": "Mevcut Bakiye",
177 144
     "Account Information": "Hesap Bilgileri",
145
+    "Subtype": "Alt Tür",
146
+    "Account number": "Hesap Numarası",
178 147
     "Investment": "Yatırım",
148
+    "Credit": "Kredi",
179 149
     "Depository": "Depozito",
180
-    "Main": "Ana",
181
-    "Entity": "Varlık",
182
-    "Current Balance": "Mevcut Bakiye",
183
-    "Available": "Mevcut",
150
+    "Loan": "Kredi",
151
+    "Manager": "yönetici",
184 152
     "Children": "Çocuklar",
153
+    "All": "Hepsi",
154
+    "Main": "Ana",
155
+    "Parent department": "Ebeveyn Bölümü",
185 156
     "Currency List": "Para Birimi Listesi",
186 157
     "Company Currencies": "Şirket Para Birimleri",
187
-    "Parent Department": "Ebeveyn Bölümü",
188
-    "Live Rate": "Canlı Oran"
158
+    "Entity": "Varlık",
159
+    "Available": "Mevcut",
160
+    "Live rate": "Canlı Oran",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 149
- 141
resources/data/lang/zh.json 파일 보기

@@ -1,161 +1,134 @@
1 1
 {
2 2
     "General": "普通的",
3
-    "slate": "石板",
4
-    "lime": "石灰",
5
-    "Layout": "布局",
6
-    "purple": "紫色",
7
-    "Small": "小",
8
-    "Tax ID": "税号",
9
-    "Corporation": "公司",
10
-    "amber": "琥珀色",
11
-    "yellow": "黄色",
12
-    "Enabled": "已启用",
13
-    "Language": "语言",
14
-    "gray": "灰色",
15
-    "Email": "电子邮件",
16
-    "Full": "已满",
17
-    "Products": "产品",
18
-    "Phone Number": "电话号码",
19
-    "Header": "标题",
20
-    "Discount": "折扣",
21
-    "sky": "天空",
22
-    "Content": "内容",
23
-    "Template": "模板",
24
-    "Other": "其他",
25
-    "Rate": "费率",
3
+    "Bank account": "银行账户",
4
+    "Currency": "货币",
5
+    "Taxes & Discounts": "税收和折扣",
6
+    "Sales tax": "销售税",
7
+    "Purchase tax": "购置税",
8
+    "Sales discount": "销售折扣",
9
+    "Purchase discount": "购买折扣",
10
+    "Appearance": "外观",
11
+    "Default": "默认",
12
+    "Company Profile": "公司简介",
13
+    "Invoice": "发票",
26 14
     "Localization": "本地化",
27
-    "Large": "大号",
28
-    "Items": "物品",
29
-    "Quantity": "数量",
30
-    "Medium": "中等",
31
-    "Screen": "屏幕",
32
-    "Department": "部门",
33
-    "State \/ Province": "州\/省",
15
+    "Discount": "折扣",
16
+    "Tax": "税",
34 17
     "Accounting": "会计",
35
-    "violet": "紫色",
36
-    "Amount": "金额",
37
-    "teal": "蓝绿色",
38
-    "Country": "国家",
39
-    "Total": "总计",
40
-    "Classic": "经典",
41
-    "orange": "橙色",
42
-    "rose": "玫瑰",
43
-    "Extra Large": "超大号",
44
-    "Ascending": "上升",
45
-    "Price": "价格",
46
-    "Modern": "现代",
47 18
     "Banking": "银行业",
19
+    "Account": "账户",
20
+    "Department": "部门",
21
+    "Services": "服务",
22
+    "Connected Accounts": "关联账户",
23
+    "Live Currency": "实时货币",
24
+    "Primary color": "原色",
25
+    "amber": "琥珀色",
26
+    "blue": "蓝色",
27
+    "cyan": "青色",
48 28
     "emerald": "翡翠",
49
-    "Descending": "降序",
50
-    "Timezone": "时区",
51
-    "Tax": "税",
52
-    "Currency": "货币",
53
-    "Sales Tax": "销售税",
54
-    "Default": "默认",
29
+    "fuchsia": "紫红色",
30
+    "gray": "灰色",
31
+    "green": "绿色",
32
+    "indigo": "靛青",
33
+    "lime": "石灰",
55 34
     "neutral": "中立",
35
+    "orange": "橙色",
36
+    "pink": "粉色",
37
+    "purple": "紫色",
56 38
     "red": "红色",
39
+    "rose": "玫瑰",
40
+    "sky": "天空",
41
+    "slate": "石板",
57 42
     "stone": "石头",
58
-    "Appearance": "外观",
59
-    "cyan": "青色",
60
-    "green": "绿色",
61
-    "Invoice": "发票",
62
-    "Name": "姓名",
63
-    "blue": "蓝色",
43
+    "teal": "蓝绿色",
44
+    "violet": "紫色",
45
+    "yellow": "黄色",
64 46
     "zinc": "锌",
65 47
     "Font": "字体",
66
-    "Account": "账户",
67
-    "pink": "粉色",
68
-    "indigo": "靛青",
69
-    "Services": "服务",
48
+    "Enabled": "已启用",
49
+    "Disabled": "已禁用",
50
+    "Identification": "身份识别",
51
+    "Email": "电子邮件",
52
+    "Phone number": "电话号码",
70 53
     "Logo": "徽标",
71
-    "6X Large": "6X 大号",
72
-    "Unit Name": "单位名称",
73
-    "Hours": "小时",
74
-    "Net 60": "净值 60",
75
-    "Date Format": "日期格式",
76
-    "Sales Discount": "销售折扣",
77
-    "Purchase Discount": "购买折扣",
78
-    "Data Presentation": "数据演示",
79
-    "Payment Terms": "付款条款",
80
-    "Records Per Page": "每页记录数",
81
-    "Subheader": "副标题",
82
-    "Purchase Tax": "购置税",
83 54
     "Location Details": "位置详情",
84
-    "Price Name": "价格名称",
85
-    "Bank Account": "银行账户",
86
-    "3X Large": "3X 大号",
87
-    "Modal Width": "模态宽度",
88
-    "Disabled": "已禁用",
89
-    "7X Large": "7X 大号",
55
+    "Country": "国家",
56
+    "State \/ Province": "州\/省",
57
+    "Street Address": "街道地址",
58
+    "City \/ Town": "城市\/城镇",
59
+    "Zip \/ Postal Code": "邮政编码\/邮政编码",
90 60
     "Legal & Compliance": "法律与合规",
91
-    "Number Digits": "数字数字",
92
-    "Accent Color": "口音颜色",
93
-    "Financial & Fiscal": "金融与财政",
94
-    "Number Next": "下一个数字",
95
-    "Net 30": "Net 30",
96
-    "Time Format": "时间格式",
97
-    "Top Navigation": "热门导航",
61
+    "Entity type": "实体类型",
62
+    "Tax ID": "税号",
63
+    "Sole Proprietorship": "独资经营",
98 64
     "General Partnership": "普通合伙企业",
99
-    "Live Currency": "实时货币",
100
-    "Table Sort Direction": "表格排序方向",
101
-    "4X Large": "4X 大号",
102
-    "Screen Large": "屏幕大",
103
-    "2X Large": "2X 大号",
104
-    "Striped Tables": "条纹桌子",
105
-    "Zip \/ Postal Code": "邮政编码\/邮政编码",
106
-    "Primary Color": "原色",
107
-    "Select Position": "选择位置",
108
-    "Identification": "身份识别",
109
-    "Navigation Layout": "导航布局",
110
-    "Side Navigation": "侧面导航",
111
-    "Due Upon Receipt": "收货时到期",
112
-    "fuchsia": "紫红色",
65
+    "Limited Partnership (LP)": "有限合伙企业 (LP)",
113 66
     "Limited Liability Partnership (LLP)": "有限责任合伙企业 (LLP)",
67
+    "Limited Liability Company (LLC)": "有限责任公司(LLC)",
68
+    "Corporation": "公司",
114 69
     "Nonprofit": "非营利",
115
-    "Entity Type": "实体类型",
116
-    "Before Number": "在数字之前",
117
-    "Number Format": "数字格式",
118
-    "Extra Small": "超小",
70
+    "Number prefix": "数字前缀",
71
+    "Number digits": "数字数字",
72
+    "Number next": "下一个数字",
73
+    "Payment terms": "付款条款",
74
+    "Content": "内容",
75
+    "Header": "标题",
76
+    "Subheader": "副标题",
77
+    "Footer \/ notes": "页脚\/备注",
78
+    "Template": "模板",
79
+    "Show logo": "显示徽标",
80
+    "Accent color": "口音颜色",
81
+    "Item name": "物品名称",
82
+    "Items": "物品",
83
+    "Products": "产品",
84
+    "Other": "其他",
85
+    "Unit name": "单位名称",
86
+    "Quantity": "数量",
87
+    "Hours": "小时",
88
+    "Price name": "价格名称",
89
+    "Price": "价格",
90
+    "Rate": "费率",
91
+    "Amount name": "金额名称",
92
+    "Amount": "金额",
93
+    "Total": "总计",
94
+    "Due Upon Receipt": "收货时到期",
119 95
     "Net 7": "Net 7",
120
-    "After Number": "在数字之后",
121
-    "Taxes & Discounts": "税收和折扣",
122
-    "City \/ Town": "城市\/城镇",
123
-    "Limited Liability Company (LLC)": "有限责任公司(LLC)",
124
-    "Week Start": "本周开始",
125
-    "Number Prefix": "数字前缀",
126
-    "Show Logo": "显示徽标",
127
-    "Company Profile": "公司简介",
128
-    "Screen 2X Large": "屏幕 2X 大",
129
-    "Street Address": "街道地址",
130
-    "Footer \/ Notes": "页脚\/备注",
131
-    "Limited Partnership (LP)": "有限合伙企业 (LP)",
132
-    "Sole Proprietorship": "独资经营",
133
-    "5X Large": "5X 大号",
134
-    "Item Name": "物品名称",
135
-    "Date & Time": "日期和时间",
136
-    "Net 15": "Net 15",
137
-    "Amount Name": "金额名称",
138
-    "Percent Position": "百分比位置",
139 96
     "Net 10": "Net 10",
140
-    "Connected Accounts": "关联账户",
141
-    "Max Content Width": "最大内容宽度",
142
-    "Screen Extra Large": "屏幕超大",
97
+    "Net 15": "Net 15",
98
+    "Net 30": "Net 30",
99
+    "Net 60": "净值 60",
143 100
     "Net 90": "净值 90",
101
+    "Modern": "现代",
102
+    "Classic": "经典",
103
+    "Language": "语言",
104
+    "Timezone": "时区",
105
+    "Date & Time": "日期和时间",
106
+    "Date format": "日期格式",
107
+    "Time format": "时间格式",
108
+    "Week start": "本周开始",
109
+    "Before number": "在数字之前",
110
+    "After number": "在数字之后",
111
+    "Select position": "选择位置",
112
+    "Financial & Fiscal": "金融与财政",
113
+    "Number format": "数字格式",
114
+    "Percent position": "百分比位置",
115
+    "Name": "姓名",
144 116
     "Code": "代码",
145 117
     "Symbol": "符号",
118
+    "Default :record": "默认 :record",
146 119
     "Type": "类型",
147
-    "Start Date": "开始日期",
148
-    "Default :Record": "默认 :Record",
149
-    "End Date": "结束日期",
120
+    "Start date": "开始日期",
121
+    "End date": "结束日期",
150 122
     "Sales": "销售",
151
-    "Default :Type :Record": "默认 :Type :Record",
123
+    "Default :type :record": "默认 :type :record",
152 124
     "Purchase": "购买",
153 125
     "Precision": "精度",
154
-    "Symbol Position": "符号位置",
155
-    "Before Amount": "金额之前",
156
-    "After Amount": "扣除金额后",
126
+    "Symbol position": "符号位置",
127
+    "Before amount": "金额之前",
128
+    "After amount": "扣除金额后",
157 129
     "Select a symbol position": "选择符号位置",
158
-    "Decimal Separator": "小数分隔符",
130
+    "Decimal separator": "小数分隔符",
131
+    "Thousands separator": "千位分隔符",
159 132
     "Yes": "是的",
160 133
     "No": "没有",
161 134
     "Description": "描述",
@@ -167,23 +140,58 @@
167 140
     "Product": "产品",
168 141
     "Service": "服务",
169 142
     "Compound": "化合物",
170
-    "Subtype": "子类型",
171
-    "Account Number": "账号",
172
-    "Thousands Separator": "千位分隔符",
143
+    "Current balance": "当前余额",
173 144
     "Account Information": "账户信息",
145
+    "Subtype": "子类型",
146
+    "Account number": "账号",
174 147
     "Investment": "投资",
175 148
     "Credit": "信用",
149
+    "Depository": "存放处",
150
+    "Loan": "贷款",
176 151
     "Manager": "经理",
177 152
     "Children": "孩子们",
178 153
     "All": "全部",
179
-    "Available": "可用",
180 154
     "Main": "主要",
181
-    "Entity": "实体",
182
-    "Loan": "贷款",
183
-    "Depository": "存放处",
184
-    "Parent Department": "家长部",
155
+    "Parent department": "家长部",
185 156
     "Currency List": "货币清单",
186 157
     "Company Currencies": "公司货币",
187
-    "Live Rate": "实时汇率",
188
-    "Current Balance": "当前余额"
158
+    "Entity": "实体",
159
+    "Available": "可用",
160
+    "Live rate": "实时汇率",
161
+    "Edit": "Edit",
162
+    "Notes": "Notes",
163
+    "Terms": "Terms",
164
+    "Ending balance": "Ending balance",
165
+    "Default :type :category": "Default :type :category",
166
+    "Category": "Category",
167
+    "Configuration": "Configuration",
168
+    "Dates": "Dates",
169
+    "Adjustment Details": "Adjustment Details",
170
+    "Adjustments": "Adjustments",
171
+    "Sellable Configuration": "Sellable Configuration",
172
+    "Purchasable Configuration": "Purchasable Configuration",
173
+    "Sale Information": "Sale Information",
174
+    "Purchase Information": "Purchase Information",
175
+    "Billing": "Billing",
176
+    "Shipping": "Shipping",
177
+    "General Information": "General Information",
178
+    "Primary Contact": "Primary Contact",
179
+    "Billing Address": "Billing Address",
180
+    "Shipping Address": "Shipping Address",
181
+    "Secondary Contacts": "Secondary Contacts",
182
+    "Address Information": "Address Information",
183
+    "Invoice Header": "Invoice Header",
184
+    "Invoice Details": "Invoice Details",
185
+    "Footer": "Footer",
186
+    "Invoice Footer": "Invoice Footer",
187
+    "Bill Details": "Bill Details",
188
+    "Create": "Create",
189
+    "Estimate Header": "Estimate Header",
190
+    "Estimate Details": "Estimate Details",
191
+    "Estimate Footer": "Estimate Footer",
192
+    "Scheduling": "Scheduling",
193
+    "Scheduling Form": "Scheduling Form",
194
+    "Approve": "Approve",
195
+    "Frequency": "Frequency",
196
+    "Dates & Time": "Dates & Time"
189 197
 }

+ 1
- 1
resources/views/components/company/reports/layout.blade.php 파일 보기

@@ -50,7 +50,7 @@
50 50
 
51 51
         .table-class {
52 52
             border-collapse: collapse;
53
-            table-layout: fixed;
53
+            table-layout: auto;
54 54
             width: 100%;
55 55
         }
56 56
 

+ 23
- 19
resources/views/components/company/reports/report-pdf.blade.php 파일 보기

@@ -22,13 +22,15 @@
22 22
         </thead>
23 23
         @foreach($report->getCategories() as $category)
24 24
             <tbody>
25
-            <tr class="category-header-row">
26
-                @foreach($category->header as $index => $header)
27
-                    <td class="{{ $report->getAlignmentClass($index) }}">
28
-                        {{ $header }}
29
-                    </td>
30
-                @endforeach
31
-            </tr>
25
+            @if(! empty($category->header))
26
+                <tr class="category-header-row">
27
+                    @foreach($category->header as $index => $header)
28
+                        <td class="{{ $report->getAlignmentClass($index) }}">
29
+                            {{ $header }}
30
+                        </td>
31
+                    @endforeach
32
+                </tr>
33
+            @endif
32 34
             @foreach($category->data as $account)
33 35
                 <tr>
34 36
                     @foreach($account as $index => $cell)
@@ -97,19 +99,21 @@
97 99
                 </tr>
98 100
             @endforeach
99 101
 
100
-            <tr class="category-summary-row">
101
-                @foreach($category->summary as $index => $cell)
102
-                    <td class="{{ $report->getAlignmentClass($index) }}">
103
-                        {{ $cell }}
104
-                    </td>
105
-                @endforeach
106
-            </tr>
107
-
108
-            @unless($loop->last && empty($report->getOverallTotals()))
109
-                <tr class="spacer-row">
110
-                    <td colspan="{{ count($report->getHeaders()) }}"></td>
102
+            @if(! empty($category->summary))
103
+                <tr class="category-summary-row">
104
+                    @foreach($category->summary as $index => $cell)
105
+                        <td class="{{ $report->getAlignmentClass($index) }}">
106
+                            {{ $cell }}
107
+                        </td>
108
+                    @endforeach
111 109
                 </tr>
112
-            @endunless
110
+
111
+                @unless($loop->last && empty($report->getOverallTotals()))
112
+                    <tr class="spacer-row">
113
+                        <td colspan="{{ count($report->getHeaders()) }}"></td>
114
+                    </tr>
115
+                @endunless
116
+            @endif
113 117
             </tbody>
114 118
         @endforeach
115 119
         <tfoot>

+ 1
- 1
resources/views/components/company/tables/header.blade.php 파일 보기

@@ -3,7 +3,7 @@
3 3
     'alignmentClass',
4 4
 ])
5 5
 
6
-<thead class="divide-y divide-gray-200 dark:divide-white/5">
6
+<thead class="divide-y divide-gray-200 dark:divide-white/5 whitespace-nowrap">
7 7
 <tr class="bg-gray-50 dark:bg-white/5">
8 8
     @foreach($headers as $headerIndex => $headerCell)
9 9
         <th class="px-3 py-3.5 sm:first-of-type:ps-6 sm:last-of-type:pe-6 {{ $alignmentClass($headerIndex) }}">

+ 19
- 15
resources/views/components/company/tables/reports/detailed-report.blade.php 파일 보기

@@ -2,8 +2,10 @@
2 2
     <x-company.tables.header :headers="$report->getHeaders()" :alignment-class="[$report, 'getAlignmentClass']"/>
3 3
     @foreach($report->getCategories() as $accountCategory)
4 4
         <tbody class="divide-y divide-gray-200 whitespace-nowrap dark:divide-white/5">
5
-        <x-company.tables.category-header :category-headers="$accountCategory->header"
6
-                                          :alignment-class="[$report, 'getAlignmentClass']"/>
5
+        @if(! empty($accountCategory->header))
6
+            <x-company.tables.category-header :category-headers="$accountCategory->header"
7
+                                              :alignment-class="[$report, 'getAlignmentClass']"/>
8
+        @endif
7 9
         @foreach($accountCategory->data as $categoryAccount)
8 10
             <tr>
9 11
                 @foreach($categoryAccount as $accountIndex => $categoryAccountCell)
@@ -48,19 +50,21 @@
48 50
                 @endforeach
49 51
             </tr>
50 52
         @endforeach
51
-        <tr>
52
-            @foreach($accountCategory->summary as $accountCategorySummaryIndex => $accountCategorySummaryCell)
53
-                <x-company.tables.cell :alignment-class="$report->getAlignmentClass($accountCategorySummaryIndex)"
54
-                                       bold="true">
55
-                    {{ $accountCategorySummaryCell }}
56
-                </x-company.tables.cell>
57
-            @endforeach
58
-        </tr>
59
-        <tr>
60
-            <td colspan="{{ count($report->getHeaders()) }}">
61
-                <div class="min-h-12"></div>
62
-            </td>
63
-        </tr>
53
+        @if(! empty($accountCategory->summary))
54
+            <tr>
55
+                @foreach($accountCategory->summary as $accountCategorySummaryIndex => $accountCategorySummaryCell)
56
+                    <x-company.tables.cell :alignment-class="$report->getAlignmentClass($accountCategorySummaryIndex)"
57
+                                           bold="true">
58
+                        {{ $accountCategorySummaryCell }}
59
+                    </x-company.tables.cell>
60
+                @endforeach
61
+            </tr>
62
+            <tr>
63
+                <td colspan="{{ count($report->getHeaders()) }}">
64
+                    <div class="min-h-12"></div>
65
+                </td>
66
+            </tr>
67
+        @endif
64 68
         </tbody>
65 69
     @endforeach
66 70
     <x-company.tables.footer :totals="$report->getOverallTotals()" :alignment-class="[$report, 'getAlignmentClass']"/>

+ 3
- 3
resources/views/components/report-entry.blade.php 파일 보기

@@ -10,14 +10,14 @@
10 10
         @class([
11 11
             'inline-flex rounded-lg p-3 ring-4 ring-white dark:ring-gray-900',
12 12
             match ($iconColor) {
13
-                'gray' => 'fi-color-gray bg-gray-50 text-gray-700 dark:bg-gray-900 dark:text-gray-500',
14
-                default => 'fi-color-custom bg-custom-50 text-custom-700 dark:bg-custom-950 dark:text-custom-500',
13
+                'gray' => 'fi-color-gray bg-gray-50 text-gray-700 dark:bg-gray-950 dark:text-gray-300',
14
+                default => 'fi-color-custom bg-custom-50 text-custom-700 dark:bg-custom-950 dark:text-custom-300',
15 15
             },
16 16
         ])
17 17
         @style([
18 18
             \Filament\Support\get_color_css_variables(
19 19
                 $iconColor,
20
-                shades: [50, 500, 700, 950],
20
+                shades: [50, 300, 700, 950],
21 21
             ) => $iconColor !== 'gray',
22 22
         ])
23 23
     >

+ 2
- 2
resources/views/livewire/company/service/connected-account/list-institutions.blade.php 파일 보기

@@ -84,7 +84,7 @@
84 84
                             />
85 85
                         </div>
86 86
                         <h4 class="connected-account-empty-state-heading text-base font-semibold leading-6 text-gray-950 dark:text-white">
87
-                            {{ __('No Connected Accounts') }}
87
+                            {{ __('No connected accounts') }}
88 88
                         </h4>
89 89
                         <p class="connected-account-empty-state-description text-sm text-gray-500 dark:text-gray-400 mt-1">
90 90
                             {{ __('Connect your bank account to get started.') }}
@@ -94,7 +94,7 @@
94 94
                                 wire:click="$dispatch('createToken')"
95 95
                                 wire:loading.attr="disabled"
96 96
                             >
97
-                                {{ __('Connect Account') }}
97
+                                {{ __('Connect account') }}
98 98
                             </x-filament::button>
99 99
                         </div>
100 100
                     </div>

+ 6
- 6
tests/Feature/Accounting/TransactionTest.php 파일 보기

@@ -345,7 +345,7 @@ it('can update a deposit or withdrawal transaction', function (TransactionType $
345 345
     $newDescription = 'Updated Description';
346 346
 
347 347
     livewire(Transactions::class)
348
-        ->mountTableAction('updateTransaction', $transaction)
348
+        ->mountTableAction('editTransaction', $transaction)
349 349
         ->assertTableActionDataSet([
350 350
             'type' => $transactionType->value,
351 351
             'description' => $transaction->description,
@@ -377,8 +377,8 @@ it('does not show Edit Transfer or Edit Journal Transaction for deposit or withd
377 377
         ->create();
378 378
 
379 379
     livewire(Transactions::class)
380
-        ->assertTableActionHidden('updateTransfer', $transaction)
381
-        ->assertTableActionHidden('updateJournalTransaction', $transaction);
380
+        ->assertTableActionHidden('editTransfer', $transaction)
381
+        ->assertTableActionHidden('editJournalTransaction', $transaction);
382 382
 })->with([
383 383
     TransactionType::Deposit,
384 384
     TransactionType::Withdrawal,
@@ -394,7 +394,7 @@ it('can update a transfer transaction', function () {
394 394
     $newDescription = 'Updated Transfer Description';
395 395
 
396 396
     livewire(Transactions::class)
397
-        ->mountTableAction('updateTransfer', $transaction)
397
+        ->mountTableAction('editTransfer', $transaction)
398 398
         ->assertTableActionDataSet([
399 399
             'type' => TransactionType::Transfer->value,
400 400
             'description' => $transaction->description,
@@ -421,8 +421,8 @@ it('does not show Edit Transaction or Edit Journal Transaction for transfer tran
421 421
         ->create();
422 422
 
423 423
     livewire(Transactions::class)
424
-        ->assertTableActionHidden('updateTransaction', $transaction)
425
-        ->assertTableActionHidden('updateJournalTransaction', $transaction);
424
+        ->assertTableActionHidden('editTransaction', $transaction)
425
+        ->assertTableActionHidden('editJournalTransaction', $transaction);
426 426
 });
427 427
 
428 428
 it('replicates a transaction with correct journal entries', function () {

+ 2
- 1
vite.config.js 파일 보기

@@ -11,8 +11,9 @@ export default defineConfig({
11 11
             ],
12 12
             refresh: [
13 13
                 ...refreshPaths,
14
-                'app/Livewire/**',
15 14
                 'app/Filament/**',
15
+                'app/Livewire/**',
16
+                'app/Providers/Filament/**',
16 17
             ],
17 18
         }),
18 19
     ],

Loading…
취소
저장