wallo 1 år sedan
förälder
incheckning
6357b2af8b
96 ändrade filer med 3640 tillägg och 4188 borttagningar
  1. 38
    0
      app/Contracts/AccountHandler.php
  2. 11
    0
      app/Enums/BankAccountType.php
  3. 36
    0
      app/Facades/Accounting.php
  4. 10
    0
      app/Filament/Company/Clusters/Settings.php
  5. 9
    12
      app/Filament/Company/Clusters/Settings/Pages/Appearance.php
  6. 13
    12
      app/Filament/Company/Clusters/Settings/Pages/CompanyDefault.php
  7. 7
    10
      app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php
  8. 7
    10
      app/Filament/Company/Clusters/Settings/Pages/Invoice.php
  9. 7
    10
      app/Filament/Company/Clusters/Settings/Pages/Localization.php
  10. 5
    3
      app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php
  11. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/CreateCurrency.php
  12. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/EditCurrency.php
  13. 25
    0
      app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/ListCurrencies.php
  14. 4
    3
      app/Filament/Company/Clusters/Settings/Resources/DiscountResource.php
  15. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/CreateDiscount.php
  16. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/EditDiscount.php
  17. 25
    0
      app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/ListDiscounts.php
  18. 4
    3
      app/Filament/Company/Clusters/Settings/Resources/TaxResource.php
  19. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/CreateTax.php
  20. 2
    2
      app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/EditTax.php
  21. 25
    0
      app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/ListTaxes.php
  22. 249
    247
      app/Filament/Company/Pages/Accounting/Transactions.php
  23. 18
    0
      app/Filament/Company/Pages/ManageCompany.php
  24. 0
    10
      app/Filament/Company/Pages/Service/ConnectedAccount.php
  25. 0
    10
      app/Filament/Company/Pages/Service/LiveCurrency.php
  26. 2
    13
      app/Filament/Company/Resources/Banking/AccountResource.php
  27. 0
    10
      app/Filament/Company/Resources/Core/DepartmentResource.php
  28. 0
    19
      app/Filament/Company/Resources/Setting/CurrencyResource/Pages/ListCurrencies.php
  29. 0
    19
      app/Filament/Company/Resources/Setting/DiscountResource/Pages/ListDiscounts.php
  30. 0
    19
      app/Filament/Company/Resources/Setting/TaxResource/Pages/ListTaxes.php
  31. 258
    0
      app/Filament/Components/PanelShiftDropdown.php
  32. 8
    6
      app/Listeners/ConfigureCompanyDefault.php
  33. 0
    147
      app/Listeners/ConfigureCompanyNavigation.php
  34. 3
    22
      app/Models/Accounting/Account.php
  35. 0
    7
      app/Models/Accounting/AccountSubtype.php
  36. 0
    16
      app/Models/Accounting/JournalEntry.php
  37. 2
    18
      app/Models/Accounting/Transaction.php
  38. 0
    16
      app/Models/Banking/BankAccount.php
  39. 0
    16
      app/Models/Banking/ConnectedBankAccount.php
  40. 18
    0
      app/Models/Banking/Institution.php
  41. 0
    15
      app/Models/Common/Contact.php
  42. 0
    15
      app/Models/Core/Department.php
  43. 0
    17
      app/Models/Setting/Appearance.php
  44. 0
    16
      app/Models/Setting/CompanyDefault.php
  45. 0
    16
      app/Models/Setting/CompanyProfile.php
  46. 0
    17
      app/Models/Setting/Currency.php
  47. 0
    17
      app/Models/Setting/Discount.php
  48. 0
    17
      app/Models/Setting/DocumentDefault.php
  49. 0
    17
      app/Models/Setting/Localization.php
  50. 0
    17
      app/Models/Setting/Tax.php
  51. 5
    0
      app/Observers/AccountObserver.php
  52. 26
    16
      app/Observers/TransactionObserver.php
  53. 9
    0
      app/Providers/AppServiceProvider.php
  54. 0
    4
      app/Providers/EventServiceProvider.php
  55. 61
    41
      app/Providers/FilamentCompaniesServiceProvider.php
  56. 27
    33
      app/Providers/TranslationServiceProvider.php
  57. 0
    12
      app/Repositories/Accounting/AccountSubtypeRepository.php
  58. 3
    2
      app/Services/AccountService.php
  59. 1
    1
      app/Services/ConnectedBankAccountService.php
  60. 22
    0
      app/Support/FilamentComponentConfigurator.php
  61. 17
    0
      app/Traits/Blamable.php
  62. 12
    7
      app/Traits/CompanyOwned.php
  63. 1
    2
      composer.json
  64. 192
    452
      composer.lock
  65. 0
    36
      database/migrations/2023_09_04_105800_create_tag_tables.php
  66. 80
    80
      package-lock.json
  67. 3
    0
      resources/css/filament/company/tailwind.config.js
  68. 13
    132
      resources/css/filament/company/theme.css
  69. 0
    12
      resources/css/filament/user/theme.css
  70. 165
    220
      resources/data/lang/ar.json
  71. 149
    204
      resources/data/lang/de.json
  72. 60
    121
      resources/data/lang/en.json
  73. 155
    217
      resources/data/lang/es.json
  74. 154
    209
      resources/data/lang/fr.json
  75. 153
    208
      resources/data/lang/id.json
  76. 147
    202
      resources/data/lang/it.json
  77. 153
    208
      resources/data/lang/nl.json
  78. 149
    204
      resources/data/lang/pt.json
  79. 153
    208
      resources/data/lang/tr.json
  80. 149
    204
      resources/data/lang/zh.json
  81. 173
    0
      resources/views/components/panel-shift-dropdown.blade.php
  82. 50
    0
      resources/views/components/panel-shift-dropdown/company-settings.blade.php
  83. 51
    0
      resources/views/components/panel-shift-dropdown/company-switcher.blade.php
  84. 16
    0
      resources/views/components/panel-shift-dropdown/content-handler.blade.php
  85. 38
    0
      resources/views/components/panel-shift-dropdown/display-accessibility.blade.php
  86. 81
    0
      resources/views/components/panel-shift-dropdown/item.blade.php
  87. 22
    0
      resources/views/components/panel-shift-dropdown/panel.blade.php
  88. 57
    0
      resources/views/components/panel-shift-dropdown/selected-tenant.blade.php
  89. 28
    0
      resources/views/components/panel-shift-dropdown/subpanel-header.blade.php
  90. 26
    0
      resources/views/components/panel-shift-dropdown/toggle.blade.php
  91. 2
    2
      resources/views/filament/company/pages/accounting/chart.blade.php
  92. 1
    1
      resources/views/filament/company/pages/setting/company-default.blade.php
  93. 6
    5
      resources/views/livewire/company/service/connected-account/list-institutions.blade.php
  94. 0
    216
      resources/views/vendor/filament-panels/components/topbar/index.blade.php
  95. 107
    0
      resources/views/vendor/filament-panels/components/user-menu.blade.php
  96. 127
    95
      resources/views/welcome.blade.php

+ 38
- 0
app/Contracts/AccountHandler.php Visa fil

@@ -0,0 +1,38 @@
1
+<?php
2
+
3
+namespace App\Contracts;
4
+
5
+use App\DTO\AccountBalanceDTO;
6
+use App\DTO\AccountBalanceReportDTO;
7
+use App\Enums\Accounting\AccountCategory;
8
+use App\Models\Accounting\Account;
9
+use App\ValueObjects\BalanceValue;
10
+
11
+interface AccountHandler
12
+{
13
+    public function getDebitBalance(Account $account, string $startDate, string $endDate): BalanceValue;
14
+
15
+    public function getCreditBalance(Account $account, string $startDate, string $endDate): BalanceValue;
16
+
17
+    public function getNetMovement(Account $account, string $startDate, string $endDate): BalanceValue;
18
+
19
+    public function getStartingBalance(Account $account, string $startDate): ?BalanceValue;
20
+
21
+    public function getEndingBalance(Account $account, string $startDate, string $endDate): ?BalanceValue;
22
+
23
+    public function calculateNetMovementByCategory(AccountCategory $category, int $debitBalance, int $creditBalance): int;
24
+
25
+    public function getBalances(Account $account, string $startDate, string $endDate): array;
26
+
27
+    public function getBalancesFormatted(Account $account, string $startDate, string $endDate): AccountBalanceDTO;
28
+
29
+    public function formatBalances(array $balances, string $currency): AccountBalanceDTO;
30
+
31
+    public function buildAccountBalanceReport(string $startDate, string $endDate): AccountBalanceReportDTO;
32
+
33
+    public function getTotalBalanceForAllBankAccounts(string $startDate, string $endDate): BalanceValue;
34
+
35
+    public function getAccountCategoryOrder(): array;
36
+
37
+    public function getEarliestTransactionDate(): string;
38
+}

+ 11
- 0
app/Enums/BankAccountType.php Visa fil

@@ -18,4 +18,15 @@ enum BankAccountType: string implements HasLabel
18 18
     {
19 19
         return translate($this->name);
20 20
     }
21
+
22
+    public function getDefaultSubtype(): string
23
+    {
24
+        return match ($this) {
25
+            self::Depository => 'Cash and Cash Equivalents',
26
+            self::Credit => 'Short-Term Borrowings',
27
+            self::Loan => 'Long-Term Borrowings',
28
+            self::Investment => 'Long-Term Investments',
29
+            self::Other => 'Other Current Assets',
30
+        };
31
+    }
21 32
 }

+ 36
- 0
app/Facades/Accounting.php Visa fil

@@ -0,0 +1,36 @@
1
+<?php
2
+
3
+namespace App\Facades;
4
+
5
+use App\Contracts\AccountHandler;
6
+use App\DTO\AccountBalanceDTO;
7
+use App\DTO\AccountBalanceReportDTO;
8
+use App\Enums\Accounting\AccountCategory;
9
+use App\Models\Accounting\Account;
10
+use App\ValueObjects\BalanceValue;
11
+use Illuminate\Support\Facades\Facade;
12
+
13
+/**
14
+ * @method static BalanceValue getDebitBalance(Account $account, string $startDate, string $endDate)
15
+ * @method static BalanceValue getCreditBalance(Account $account, string $startDate, string $endDate)
16
+ * @method static BalanceValue getNetMovement(Account $account, string $startDate, string $endDate)
17
+ * @method static BalanceValue|null getStartingBalance(Account $account, string $startDate)
18
+ * @method static BalanceValue|null getEndingBalance(Account $account, string $startDate, string $endDate)
19
+ * @method static int calculateNetMovementByCategory(AccountCategory $category, int $debitBalance, int $creditBalance)
20
+ * @method static array getBalances(Account $account, string $startDate, string $endDate)
21
+ * @method static AccountBalanceDTO getBalancesFormatted(Account $account, string $startDate, string $endDate)
22
+ * @method static AccountBalanceDTO formatBalances(array $balances, string $currency)
23
+ * @method static AccountBalanceReportDTO buildAccountBalanceReport(string $startDate, string $endDate)
24
+ * @method static BalanceValue getTotalBalanceForAllBankAccounts(string $startDate, string $endDate)
25
+ * @method static array getAccountCategoryOrder()
26
+ * @method static string getEarliestTransactionDate()
27
+ *
28
+ * @see AccountHandler
29
+ */
30
+class Accounting extends Facade
31
+{
32
+    protected static function getFacadeAccessor(): string
33
+    {
34
+        return AccountHandler::class;
35
+    }
36
+}

+ 10
- 0
app/Filament/Company/Clusters/Settings.php Visa fil

@@ -0,0 +1,10 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Clusters;
4
+
5
+use Filament\Clusters\Cluster;
6
+
7
+class Settings extends Cluster
8
+{
9
+    protected static ?string $navigationIcon = 'heroicon-o-squares-2x2';
10
+}

app/Filament/Company/Pages/Setting/Appearance.php → app/Filament/Company/Clusters/Settings/Pages/Appearance.php Visa fil

@@ -1,6 +1,6 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Pages\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Pages;
4 4
 
5 5
 use App\Enums\Font;
6 6
 use App\Enums\MaxContentWidth;
@@ -8,10 +8,10 @@ use App\Enums\ModalWidth;
8 8
 use App\Enums\PrimaryColor;
9 9
 use App\Enums\RecordsPerPage;
10 10
 use App\Enums\TableSortDirection;
11
+use App\Filament\Company\Clusters\Settings;
11 12
 use App\Models\Setting\Appearance as AppearanceModel;
12 13
 use Filament\Actions\Action;
13 14
 use Filament\Actions\ActionGroup;
14
-use Filament\Facades\Filament;
15 15
 use Filament\Forms\Components\Component;
16 16
 use Filament\Forms\Components\Section;
17 17
 use Filament\Forms\Components\Select;
@@ -19,6 +19,7 @@ use Filament\Forms\Form;
19 19
 use Filament\Notifications\Notification;
20 20
 use Filament\Pages\Concerns\InteractsWithFormActions;
21 21
 use Filament\Pages\Page;
22
+use Filament\Support\Enums\MaxWidth;
22 23
 use Filament\Support\Exceptions\Halt;
23 24
 use Illuminate\Auth\Access\AuthorizationException;
24 25
 use Illuminate\Contracts\Support\Htmlable;
@@ -37,10 +38,10 @@ class Appearance extends Page
37 38
 
38 39
     protected static ?string $title = 'Appearance';
39 40
 
40
-    protected static ?string $slug = 'settings/appearance';
41
-
42 41
     protected static string $view = 'filament.company.pages.setting.appearance';
43 42
 
43
+    protected static ?string $cluster = Settings::class;
44
+
44 45
     public ?array $data = [];
45 46
 
46 47
     #[Locked]
@@ -51,18 +52,14 @@ class Appearance extends Page
51 52
         return translate(static::$title);
52 53
     }
53 54
 
54
-    public static function getNavigationLabel(): string
55
+    public function getMaxContentWidth(): MaxWidth
55 56
     {
56
-        return translate(static::$title);
57
+        return MaxWidth::ScreenTwoExtraLarge;
57 58
     }
58 59
 
59
-    public static function getNavigationParentItem(): ?string
60
+    public static function getNavigationLabel(): string
60 61
     {
61
-        if (Filament::hasTopNavigation()) {
62
-            return translate('Personalization');
63
-        }
64
-
65
-        return null;
62
+        return translate(static::$title);
66 63
     }
67 64
 
68 65
     public function mount(): void

app/Filament/Company/Pages/Setting/CompanyDefault.php → app/Filament/Company/Clusters/Settings/Pages/CompanyDefault.php Visa fil

@@ -1,8 +1,9 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Pages\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Pages;
4 4
 
5 5
 use App\Events\CompanyDefaultUpdated;
6
+use App\Filament\Company\Clusters\Settings;
6 7
 use App\Models\Banking\BankAccount;
7 8
 use App\Models\Setting\CompanyDefault as CompanyDefaultModel;
8 9
 use App\Models\Setting\Currency;
@@ -10,7 +11,6 @@ use App\Models\Setting\Discount;
10 11
 use App\Models\Setting\Tax;
11 12
 use Filament\Actions\Action;
12 13
 use Filament\Actions\ActionGroup;
13
-use Filament\Facades\Filament;
14 14
 use Filament\Forms\Components\Component;
15 15
 use Filament\Forms\Components\Section;
16 16
 use Filament\Forms\Components\Select;
@@ -18,6 +18,7 @@ use Filament\Forms\Form;
18 18
 use Filament\Notifications\Notification;
19 19
 use Filament\Pages\Concerns\InteractsWithFormActions;
20 20
 use Filament\Pages\Page;
21
+use Filament\Support\Enums\MaxWidth;
21 22
 use Filament\Support\Exceptions\Halt;
22 23
 use Illuminate\Auth\Access\AuthorizationException;
23 24
 use Illuminate\Contracts\Support\Htmlable;
@@ -36,10 +37,10 @@ class CompanyDefault extends Page
36 37
 
37 38
     protected static ?string $title = 'Default';
38 39
 
39
-    protected static ?string $slug = 'settings/default';
40
-
41 40
     protected static string $view = 'filament.company.pages.setting.company-default';
42 41
 
42
+    protected static ?string $cluster = Settings::class;
43
+
43 44
     /**
44 45
      * @var array<string, mixed> | null
45 46
      */
@@ -58,13 +59,9 @@ class CompanyDefault extends Page
58 59
         return translate(static::$title);
59 60
     }
60 61
 
61
-    public static function getNavigationParentItem(): ?string
62
+    public function getMaxContentWidth(): MaxWidth
62 63
     {
63
-        if (Filament::hasTopNavigation()) {
64
-            return translate('Personalization');
65
-        }
66
-
67
-        return null;
64
+        return MaxWidth::ScreenTwoExtraLarge;
68 65
     }
69 66
 
70 67
     public function mount(): void
@@ -217,9 +214,13 @@ class CompanyDefault extends Page
217 214
             ])->columns();
218 215
     }
219 216
 
220
-    public function renderBadgeOptionLabel(string $label, string $color = 'primary', string $size = 'sm'): string
217
+    public function renderBadgeOptionLabel(string $label): string
221 218
     {
222
-        return Blade::render('<x-filament::badge color="' . $color . '" size="' . $size . '">' . e($label) . '</x-filament::badge>');
219
+        return Blade::render('filament::components.badge', [
220
+            'color' => 'primary',
221
+            'size' => 'sm',
222
+            'slot' => $label,
223
+        ]);
223 224
     }
224 225
 
225 226
     protected function handleRecordUpdate(CompanyDefaultModel $record, array $data): CompanyDefaultModel

app/Filament/Company/Pages/Setting/CompanyProfile.php → app/Filament/Company/Clusters/Settings/Pages/CompanyProfile.php Visa fil

@@ -1,15 +1,15 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Pages\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Pages;
4 4
 
5 5
 use App\Enums\EntityType;
6
+use App\Filament\Company\Clusters\Settings;
6 7
 use App\Models\Locale\City;
7 8
 use App\Models\Locale\Country;
8 9
 use App\Models\Locale\State;
9 10
 use App\Models\Setting\CompanyProfile as CompanyProfileModel;
10 11
 use Filament\Actions\Action;
11 12
 use Filament\Actions\ActionGroup;
12
-use Filament\Facades\Filament;
13 13
 use Filament\Forms\Components\Component;
14 14
 use Filament\Forms\Components\FileUpload;
15 15
 use Filament\Forms\Components\Group;
@@ -22,6 +22,7 @@ use Filament\Forms\Set;
22 22
 use Filament\Notifications\Notification;
23 23
 use Filament\Pages\Concerns\InteractsWithFormActions;
24 24
 use Filament\Pages\Page;
25
+use Filament\Support\Enums\MaxWidth;
25 26
 use Filament\Support\Exceptions\Halt;
26 27
 use Illuminate\Auth\Access\AuthorizationException;
27 28
 use Illuminate\Contracts\Support\Htmlable;
@@ -41,10 +42,10 @@ class CompanyProfile extends Page
41 42
 
42 43
     protected static ?string $title = 'Company Profile';
43 44
 
44
-    protected static ?string $slug = 'settings/company-profile';
45
-
46 45
     protected static string $view = 'filament.company.pages.setting.company-profile';
47 46
 
47
+    protected static ?string $cluster = Settings::class;
48
+
48 49
     public ?array $data = [];
49 50
 
50 51
     #[Locked]
@@ -60,13 +61,9 @@ class CompanyProfile extends Page
60 61
         return translate(static::$title);
61 62
     }
62 63
 
63
-    public static function getNavigationParentItem(): ?string
64
+    public function getMaxContentWidth(): MaxWidth
64 65
     {
65
-        if (Filament::hasTopNavigation()) {
66
-            return translate('Company');
67
-        }
68
-
69
-        return null;
66
+        return MaxWidth::ScreenTwoExtraLarge;
70 67
     }
71 68
 
72 69
     public function mount(): void

app/Filament/Company/Pages/Setting/Invoice.php → app/Filament/Company/Clusters/Settings/Pages/Invoice.php Visa fil

@@ -1,15 +1,15 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Pages\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Pages;
4 4
 
5 5
 use App\Enums\DocumentType;
6 6
 use App\Enums\Font;
7 7
 use App\Enums\PaymentTerms;
8 8
 use App\Enums\Template;
9
+use App\Filament\Company\Clusters\Settings;
9 10
 use App\Models\Setting\DocumentDefault as InvoiceModel;
10 11
 use Filament\Actions\Action;
11 12
 use Filament\Actions\ActionGroup;
12
-use Filament\Facades\Filament;
13 13
 use Filament\Forms\Components\Checkbox;
14 14
 use Filament\Forms\Components\ColorPicker;
15 15
 use Filament\Forms\Components\Component;
@@ -27,6 +27,7 @@ use Filament\Forms\Set;
27 27
 use Filament\Notifications\Notification;
28 28
 use Filament\Pages\Concerns\InteractsWithFormActions;
29 29
 use Filament\Pages\Page;
30
+use Filament\Support\Enums\MaxWidth;
30 31
 use Filament\Support\Exceptions\Halt;
31 32
 use Illuminate\Auth\Access\AuthorizationException;
32 33
 use Illuminate\Contracts\Support\Htmlable;
@@ -45,10 +46,10 @@ class Invoice extends Page
45 46
 
46 47
     protected static ?string $title = 'Invoice';
47 48
 
48
-    protected static ?string $slug = 'settings/invoice';
49
-
50 49
     protected static string $view = 'filament.company.pages.setting.invoice';
51 50
 
51
+    protected static ?string $cluster = Settings::class;
52
+
52 53
     public ?array $data = [];
53 54
 
54 55
     public ?InvoiceModel $record = null;
@@ -63,13 +64,9 @@ class Invoice extends Page
63 64
         return translate(static::$title);
64 65
     }
65 66
 
66
-    public static function getNavigationParentItem(): ?string
67
+    public function getMaxContentWidth(): MaxWidth
67 68
     {
68
-        if (Filament::hasTopNavigation()) {
69
-            return translate('Personalization');
70
-        }
71
-
72
-        return null;
69
+        return MaxWidth::ScreenTwoExtraLarge;
73 70
     }
74 71
 
75 72
     public function mount(): void

app/Filament/Company/Pages/Setting/Localization.php → app/Filament/Company/Clusters/Settings/Pages/Localization.php Visa fil

@@ -1,17 +1,17 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Pages\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Pages;
4 4
 
5 5
 use App\Enums\DateFormat;
6 6
 use App\Enums\NumberFormat;
7 7
 use App\Enums\TimeFormat;
8 8
 use App\Enums\WeekStart;
9
+use App\Filament\Company\Clusters\Settings;
9 10
 use App\Models\Setting\CompanyProfile as CompanyProfileModel;
10 11
 use App\Models\Setting\Localization as LocalizationModel;
11 12
 use App\Utilities\Localization\Timezone;
12 13
 use Filament\Actions\Action;
13 14
 use Filament\Actions\ActionGroup;
14
-use Filament\Facades\Filament;
15 15
 use Filament\Forms\Components\Component;
16 16
 use Filament\Forms\Components\Group;
17 17
 use Filament\Forms\Components\Section;
@@ -22,6 +22,7 @@ use Filament\Forms\Set;
22 22
 use Filament\Notifications\Notification;
23 23
 use Filament\Pages\Concerns\InteractsWithFormActions;
24 24
 use Filament\Pages\Page;
25
+use Filament\Support\Enums\MaxWidth;
25 26
 use Filament\Support\Exceptions\Halt;
26 27
 use Guava\FilamentClusters\Forms\Cluster;
27 28
 use Illuminate\Auth\Access\AuthorizationException;
@@ -40,10 +41,10 @@ class Localization extends Page
40 41
 
41 42
     protected static ?string $title = 'Localization';
42 43
 
43
-    protected static ?string $slug = 'settings/localization';
44
-
45 44
     protected static string $view = 'filament.company.pages.setting.localization';
46 45
 
46
+    protected static ?string $cluster = Settings::class;
47
+
47 48
     public ?array $data = [];
48 49
 
49 50
     #[Locked]
@@ -59,13 +60,9 @@ class Localization extends Page
59 60
         return translate(static::$title);
60 61
     }
61 62
 
62
-    public static function getNavigationParentItem(): ?string
63
+    public function getMaxContentWidth(): MaxWidth
63 64
     {
64
-        if (Filament::hasTopNavigation()) {
65
-            return translate('Company');
66
-        }
67
-
68
-        return null;
65
+        return MaxWidth::ScreenTwoExtraLarge;
69 66
     }
70 67
 
71 68
     public function mount(): void

app/Filament/Company/Resources/Setting/CurrencyResource.php → app/Filament/Company/Clusters/Settings/Resources/CurrencyResource.php Visa fil

@@ -1,9 +1,11 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Resources;
4 4
 
5 5
 use App\Facades\Forex;
6
-use App\Filament\Company\Resources\Setting\CurrencyResource\Pages;
6
+use App\Filament\Company\Clusters\Settings;
7
+use App\Filament\Company\Clusters\Settings\Resources\CurrencyResource\Pages;
8
+use App\Models\Accounting\Account;
7 9
 use App\Models\Setting\Currency;
8 10
 use App\Models\Setting\Currency as CurrencyModel;
9 11
 use App\Traits\ChecksForeignKeyConstraints;
@@ -29,7 +31,7 @@ class CurrencyResource extends Resource
29 31
 
30 32
     protected static ?string $modelLabel = 'Currency';
31 33
 
32
-    protected static ?string $slug = 'settings/currencies';
34
+    protected static ?string $cluster = Settings::class;
33 35
 
34 36
     public static function getModelLabel(): string
35 37
     {

app/Filament/Company/Resources/Setting/CurrencyResource/Pages/CreateCurrency.php → app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/CreateCurrency.php Visa fil

@@ -1,8 +1,8 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\CurrencyResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\CurrencyResource\Pages;
4 4
 
5
-use App\Filament\Company\Resources\Setting\CurrencyResource;
5
+use App\Filament\Company\Clusters\Settings\Resources\CurrencyResource;
6 6
 use App\Models\Setting\Currency;
7 7
 use App\Traits\HandlesResourceRecordCreation;
8 8
 use Filament\Resources\Pages\CreateRecord;

app/Filament/Company/Resources/Setting/CurrencyResource/Pages/EditCurrency.php → app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/EditCurrency.php Visa fil

@@ -1,8 +1,8 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\CurrencyResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\CurrencyResource\Pages;
4 4
 
5
-use App\Filament\Company\Resources\Setting\CurrencyResource;
5
+use App\Filament\Company\Clusters\Settings\Resources\CurrencyResource;
6 6
 use App\Models\Setting\Currency;
7 7
 use App\Traits\HandlesResourceRecordUpdate;
8 8
 use Filament\Actions;

+ 25
- 0
app/Filament/Company/Clusters/Settings/Resources/CurrencyResource/Pages/ListCurrencies.php Visa fil

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Clusters\Settings\Resources\CurrencyResource\Pages;
4
+
5
+use App\Filament\Company\Clusters\Settings\Resources\CurrencyResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\ListRecords;
8
+use Filament\Support\Enums\MaxWidth;
9
+
10
+class ListCurrencies extends ListRecords
11
+{
12
+    protected static string $resource = CurrencyResource::class;
13
+
14
+    protected function getHeaderActions(): array
15
+    {
16
+        return [
17
+            Actions\CreateAction::make(),
18
+        ];
19
+    }
20
+
21
+    public function getMaxContentWidth(): MaxWidth | string | null
22
+    {
23
+        return MaxWidth::ScreenTwoExtraLarge;
24
+    }
25
+}

app/Filament/Company/Resources/Setting/DiscountResource.php → app/Filament/Company/Clusters/Settings/Resources/DiscountResource.php Visa fil

@@ -1,13 +1,14 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Resources;
4 4
 
5 5
 use App\Enums\DateFormat;
6 6
 use App\Enums\DiscountComputation;
7 7
 use App\Enums\DiscountScope;
8 8
 use App\Enums\DiscountType;
9 9
 use App\Enums\TimeFormat;
10
-use App\Filament\Company\Resources\Setting\DiscountResource\Pages;
10
+use App\Filament\Company\Clusters\Settings;
11
+use App\Filament\Company\Clusters\Settings\Resources\DiscountResource\Pages;
11 12
 use App\Models\Setting\Discount;
12 13
 use App\Models\Setting\Localization;
13 14
 use App\Traits\NotifiesOnDelete;
@@ -29,7 +30,7 @@ class DiscountResource extends Resource
29 30
 
30 31
     protected static ?string $modelLabel = 'Discount';
31 32
 
32
-    protected static ?string $slug = 'settings/discounts';
33
+    protected static ?string $cluster = Settings::class;
33 34
 
34 35
     public static function getModelLabel(): string
35 36
     {

app/Filament/Company/Resources/Setting/DiscountResource/Pages/CreateDiscount.php → app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/CreateDiscount.php Visa fil

@@ -1,9 +1,9 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\DiscountResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\DiscountResource\Pages;
4 4
 
5 5
 use App\Enums\DiscountType;
6
-use App\Filament\Company\Resources\Setting\DiscountResource;
6
+use App\Filament\Company\Clusters\Settings\Resources\DiscountResource;
7 7
 use App\Models\Setting\Discount;
8 8
 use App\Traits\HandlesResourceRecordCreation;
9 9
 use Filament\Resources\Pages\CreateRecord;

app/Filament/Company/Resources/Setting/DiscountResource/Pages/EditDiscount.php → app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/EditDiscount.php Visa fil

@@ -1,9 +1,9 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\DiscountResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\DiscountResource\Pages;
4 4
 
5 5
 use App\Enums\DiscountType;
6
-use App\Filament\Company\Resources\Setting\DiscountResource;
6
+use App\Filament\Company\Clusters\Settings\Resources\DiscountResource;
7 7
 use App\Traits\HandlesResourceRecordUpdate;
8 8
 use Filament\Actions;
9 9
 use Filament\Resources\Pages\EditRecord;

+ 25
- 0
app/Filament/Company/Clusters/Settings/Resources/DiscountResource/Pages/ListDiscounts.php Visa fil

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Clusters\Settings\Resources\DiscountResource\Pages;
4
+
5
+use App\Filament\Company\Clusters\Settings\Resources\DiscountResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\ListRecords;
8
+use Filament\Support\Enums\MaxWidth;
9
+
10
+class ListDiscounts extends ListRecords
11
+{
12
+    protected static string $resource = DiscountResource::class;
13
+
14
+    protected function getHeaderActions(): array
15
+    {
16
+        return [
17
+            Actions\CreateAction::make(),
18
+        ];
19
+    }
20
+
21
+    public function getMaxContentWidth(): MaxWidth | string | null
22
+    {
23
+        return MaxWidth::ScreenTwoExtraLarge;
24
+    }
25
+}

app/Filament/Company/Resources/Setting/TaxResource.php → app/Filament/Company/Clusters/Settings/Resources/TaxResource.php Visa fil

@@ -1,11 +1,12 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting;
3
+namespace App\Filament\Company\Clusters\Settings\Resources;
4 4
 
5 5
 use App\Enums\TaxComputation;
6 6
 use App\Enums\TaxScope;
7 7
 use App\Enums\TaxType;
8
-use App\Filament\Company\Resources\Setting\TaxResource\Pages;
8
+use App\Filament\Company\Clusters\Settings;
9
+use App\Filament\Company\Clusters\Settings\Resources\TaxResource\Pages;
9 10
 use App\Models\Setting\Tax;
10 11
 use App\Traits\NotifiesOnDelete;
11 12
 use Closure;
@@ -26,7 +27,7 @@ class TaxResource extends Resource
26 27
 
27 28
     protected static ?string $modelLabel = 'Tax';
28 29
 
29
-    protected static ?string $slug = 'settings/taxes';
30
+    protected static ?string $cluster = Settings::class;
30 31
 
31 32
     public static function getModelLabel(): string
32 33
     {

app/Filament/Company/Resources/Setting/TaxResource/Pages/CreateTax.php → app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/CreateTax.php Visa fil

@@ -1,9 +1,9 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\TaxResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\TaxResource\Pages;
4 4
 
5 5
 use App\Enums\TaxType;
6
-use App\Filament\Company\Resources\Setting\TaxResource;
6
+use App\Filament\Company\Clusters\Settings\Resources\TaxResource;
7 7
 use App\Models\Setting\Tax;
8 8
 use App\Traits\HandlesResourceRecordCreation;
9 9
 use Filament\Resources\Pages\CreateRecord;

app/Filament/Company/Resources/Setting/TaxResource/Pages/EditTax.php → app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/EditTax.php Visa fil

@@ -1,9 +1,9 @@
1 1
 <?php
2 2
 
3
-namespace App\Filament\Company\Resources\Setting\TaxResource\Pages;
3
+namespace App\Filament\Company\Clusters\Settings\Resources\TaxResource\Pages;
4 4
 
5 5
 use App\Enums\TaxType;
6
-use App\Filament\Company\Resources\Setting\TaxResource;
6
+use App\Filament\Company\Clusters\Settings\Resources\TaxResource;
7 7
 use App\Traits\HandlesResourceRecordUpdate;
8 8
 use Filament\Actions;
9 9
 use Filament\Resources\Pages\EditRecord;

+ 25
- 0
app/Filament/Company/Clusters/Settings/Resources/TaxResource/Pages/ListTaxes.php Visa fil

@@ -0,0 +1,25 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Clusters\Settings\Resources\TaxResource\Pages;
4
+
5
+use App\Filament\Company\Clusters\Settings\Resources\TaxResource;
6
+use Filament\Actions;
7
+use Filament\Resources\Pages\ListRecords;
8
+use Filament\Support\Enums\MaxWidth;
9
+
10
+class ListTaxes extends ListRecords
11
+{
12
+    protected static string $resource = TaxResource::class;
13
+
14
+    protected function getHeaderActions(): array
15
+    {
16
+        return [
17
+            Actions\CreateAction::make(),
18
+        ];
19
+    }
20
+
21
+    public function getMaxContentWidth(): MaxWidth | string | null
22
+    {
23
+        return MaxWidth::ScreenTwoExtraLarge;
24
+    }
25
+}

+ 249
- 247
app/Filament/Company/Pages/Accounting/Transactions.php Visa fil

@@ -6,19 +6,20 @@ use App\Enums\Accounting\AccountCategory;
6 6
 use App\Enums\Accounting\JournalEntryType;
7 7
 use App\Enums\Accounting\TransactionType;
8 8
 use App\Enums\DateFormat;
9
+use App\Facades\Accounting;
10
+use App\Filament\Company\Pages\Service\ConnectedAccount;
9 11
 use App\Forms\Components\JournalEntryRepeater;
10 12
 use App\Models\Accounting\Account;
11 13
 use App\Models\Accounting\Transaction;
12 14
 use App\Models\Banking\BankAccount;
15
+use App\Models\Company;
13 16
 use App\Models\Setting\Localization;
14
-use App\Services\AccountService;
15 17
 use App\Traits\HasJournalEntryActions;
16 18
 use Awcodes\TableRepeater\Header;
17
-use Filament\Actions\ActionGroup;
18
-use Filament\Actions\CreateAction;
19
-use Filament\Actions\StaticAction;
19
+use Filament\Actions;
20
+use Filament\Facades\Filament;
20 21
 use Filament\Forms;
21
-use Filament\Forms\Components\Actions\Action;
22
+use Filament\Forms\Components\Actions\Action as FormAction;
22 23
 use Filament\Forms\Components\DatePicker;
23 24
 use Filament\Forms\Components\Grid;
24 25
 use Filament\Forms\Components\Select;
@@ -55,19 +56,26 @@ class Transactions extends Page implements HasTable
55 56
     use HasJournalEntryActions;
56 57
     use InteractsWithTable;
57 58
 
58
-    protected static ?string $navigationIcon = 'heroicon-o-document-text';
59
-
60 59
     protected static string $view = 'filament.company.pages.accounting.transactions';
61 60
 
62 61
     protected static ?string $model = Transaction::class;
63 62
 
63
+    protected static ?string $navigationParentItem = 'Chart of Accounts';
64
+
65
+    protected static ?string $navigationGroup = 'Accounting';
66
+
64 67
     public ?string $bankAccountIdFiltered = 'all';
65 68
 
66
-    protected AccountService $accountService;
69
+    public string $fiscalYearStartDate = '';
70
+
71
+    public string $fiscalYearEndDate = '';
67 72
 
68
-    public function boot(AccountService $accountService): void
73
+    public function mount(): void
69 74
     {
70
-        $this->accountService = $accountService;
75
+        /** @var Company $company */
76
+        $company = Filament::getTenant();
77
+        $this->fiscalYearStartDate = $company->locale->fiscalYearStartDate();
78
+        $this->fiscalYearEndDate = $company->locale->fiscalYearEndDate();
71 79
     }
72 80
 
73 81
     public static function getModel(): string
@@ -85,19 +93,21 @@ class Transactions extends Page implements HasTable
85 93
         return [
86 94
             $this->buildTransactionAction('addIncome', 'Add Income', TransactionType::Deposit),
87 95
             $this->buildTransactionAction('addExpense', 'Add Expense', TransactionType::Withdrawal),
88
-            ActionGroup::make([
89
-                CreateAction::make('addJournalTransaction')
96
+            Actions\ActionGroup::make([
97
+                Actions\CreateAction::make('addJournalTransaction')
90 98
                     ->label('Add Journal Transaction')
91 99
                     ->fillForm(fn (): array => $this->getFormDefaultsForType(TransactionType::Journal))
92 100
                     ->modalWidth(MaxWidth::Screen)
93 101
                     ->model(static::getModel())
94 102
                     ->form(fn (Form $form) => $this->journalTransactionForm($form))
95
-                    ->modalSubmitAction(fn (StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced()))
103
+                    ->modalSubmitAction(fn (Actions\StaticAction $action) => $action->disabled(! $this->isJournalEntryBalanced()))
96 104
                     ->groupedIcon(null)
97 105
                     ->modalHeading('Journal Entry')
98 106
                     ->mutateFormDataUsing(static fn (array $data) => array_merge($data, ['type' => TransactionType::Journal]))
99 107
                     ->afterFormFilled(fn () => $this->resetJournalEntryAmounts()),
100
-
108
+                Actions\Action::make('connectBank')
109
+                    ->label('Connect Your Bank')
110
+                    ->url(ConnectedAccount::getUrl()),
101 111
             ])
102 112
                 ->label('More')
103 113
                 ->button()
@@ -110,70 +120,20 @@ class Transactions extends Page implements HasTable
110 120
         ];
111 121
     }
112 122
 
113
-    protected function getFormDefaultsForType(TransactionType $type): array
114
-    {
115
-        $commonDefaults = [
116
-            'posted_at' => now()->format('Y-m-d'),
117
-        ];
118
-
119
-        return match ($type) {
120
-            TransactionType::Deposit, TransactionType::Withdrawal => array_merge($commonDefaults, $this->transactionDefaults($type)),
121
-            TransactionType::Journal => array_merge($commonDefaults, $this->journalEntryDefaults()),
122
-        };
123
-    }
124
-
125
-    protected function journalEntryDefaults(): array
126
-    {
127
-        return [
128
-            'journalEntries' => [
129
-                $this->defaultEntry(JournalEntryType::Debit),
130
-                $this->defaultEntry(JournalEntryType::Credit),
131
-            ],
132
-        ];
133
-    }
134
-
135
-    protected function defaultEntry(JournalEntryType $journalEntryType): array
136
-    {
137
-        return [
138
-            'type' => $journalEntryType,
139
-            'account_id' => static::getUncategorizedAccountByType($journalEntryType->isDebit() ? TransactionType::Withdrawal : TransactionType::Deposit)?->id,
140
-            'amount' => '0.00',
141
-        ];
142
-    }
143
-
144
-    public function buildTransactionAction(string $name, string $label, TransactionType $type): CreateAction
145
-    {
146
-        return CreateAction::make($name)
147
-            ->label($label)
148
-            ->modalWidth(MaxWidth::ThreeExtraLarge)
149
-            ->model(static::getModel())
150
-            ->fillForm(fn (): array => $this->getFormDefaultsForType($type))
151
-            ->form(fn (Form $form) => $this->transactionForm($form))
152
-            ->button()
153
-            ->outlined();
154
-    }
155
-
156
-    protected function transactionDefaults(TransactionType $type): array
157
-    {
158
-        return [
159
-            'type' => $type,
160
-            'bank_account_id' => BankAccount::where('enabled', true)->first()?->id,
161
-            'amount' => '0.00',
162
-            'account_id' => static::getUncategorizedAccountByType($type)?->id,
163
-        ];
164
-    }
165
-
166
-    public static function getUncategorizedAccountByType(TransactionType $type): ?Account
123
+    public function form(Form $form): Form
167 124
     {
168
-        [$category, $accountName] = match ($type) {
169
-            TransactionType::Deposit => [AccountCategory::Revenue, 'Uncategorized Income'],
170
-            TransactionType::Withdrawal => [AccountCategory::Expense, 'Uncategorized Expense'],
171
-            default => [null, null],
172
-        };
173
-
174
-        return Account::where('category', $category)
175
-            ->where('name', $accountName)
176
-            ->first();
125
+        return $form
126
+            ->schema([
127
+                Forms\Components\Select::make('bankAccountIdFiltered')
128
+                    ->label('Account')
129
+                    ->hiddenLabel()
130
+                    ->allowHtml()
131
+                    ->options($this->getBankAccountOptions(true, true))
132
+                    ->live()
133
+                    ->selectablePlaceholder(false)
134
+                    ->columnSpan(4),
135
+            ])
136
+            ->columns(14);
177 137
     }
178 138
 
179 139
     public function transactionForm(Form $form): Form
@@ -234,163 +194,6 @@ class Transactions extends Page implements HasTable
234 194
             ->columns(1);
235 195
     }
236 196
 
237
-    protected function getJournalTransactionFormEditTab(): Tab
238
-    {
239
-        return Tab::make('Edit')
240
-            ->label('Edit')
241
-            ->icon('heroicon-o-pencil-square')
242
-            ->schema([
243
-                $this->getTransactionDetailsGrid(),
244
-                $this->getJournalEntriesTableRepeater(),
245
-            ]);
246
-    }
247
-
248
-    protected function getJournalTransactionFormNotesTab(): Tab
249
-    {
250
-        return Tab::make('Notes')
251
-            ->label('Notes')
252
-            ->icon('heroicon-o-clipboard')
253
-            ->id('notes')
254
-            ->schema([
255
-                $this->getTransactionDetailsGrid(),
256
-                Textarea::make('notes')
257
-                    ->label('Notes')
258
-                    ->rows(10)
259
-                    ->autosize(),
260
-            ]);
261
-    }
262
-
263
-    protected function getTransactionDetailsGrid(): Grid
264
-    {
265
-        return Grid::make(8)
266
-            ->schema([
267
-                DatePicker::make('posted_at')
268
-                    ->label('Date')
269
-                    ->softRequired()
270
-                    ->displayFormat('Y-m-d'),
271
-                TextInput::make('description')
272
-                    ->label('Description')
273
-                    ->columnSpan(2),
274
-            ]);
275
-    }
276
-
277
-    protected function getJournalEntriesTableRepeater(): JournalEntryRepeater
278
-    {
279
-        return JournalEntryRepeater::make('journalEntries')
280
-            ->relationship('journalEntries')
281
-            ->hiddenLabel()
282
-            ->columns(4)
283
-            ->headers($this->getJournalEntriesTableRepeaterHeaders())
284
-            ->schema($this->getJournalEntriesTableRepeaterSchema())
285
-            ->streamlined()
286
-            ->deletable(fn (JournalEntryRepeater $repeater) => $repeater->getItemsCount() > 2)
287
-            ->minItems(2)
288
-            ->defaultItems(2)
289
-            ->addable(false)
290
-            ->footerItem(fn (): View => $this->getJournalTransactionModalFooter())
291
-            ->extraActions([
292
-                $this->buildAddJournalEntryAction(JournalEntryType::Debit),
293
-                $this->buildAddJournalEntryAction(JournalEntryType::Credit),
294
-            ]);
295
-    }
296
-
297
-    protected function getJournalEntriesTableRepeaterHeaders(): array
298
-    {
299
-        return [
300
-            Header::make('type')
301
-                ->width('150px')
302
-                ->label('Type'),
303
-            Header::make('description')
304
-                ->width('320px')
305
-                ->label('Description'),
306
-            Header::make('account_id')
307
-                ->width('320px')
308
-                ->label('Account'),
309
-            Header::make('amount')
310
-                ->width('192px')
311
-                ->label('Amount'),
312
-        ];
313
-    }
314
-
315
-    protected function getJournalEntriesTableRepeaterSchema(): array
316
-    {
317
-        return [
318
-            Select::make('type')
319
-                ->label('Type')
320
-                ->options(JournalEntryType::class)
321
-                ->live()
322
-                ->afterStateUpdated(function (Get $get, Set $set, ?string $state, ?string $old) {
323
-                    $this->adjustJournalEntryAmountsForTypeChange(JournalEntryType::parse($state), JournalEntryType::parse($old), $get('amount'));
324
-                })
325
-                ->softRequired(),
326
-            TextInput::make('description')
327
-                ->label('Description'),
328
-            Select::make('account_id')
329
-                ->label('Account')
330
-                ->options(fn (): array => $this->getChartAccountOptions())
331
-                ->live()
332
-                ->softRequired()
333
-                ->searchable(),
334
-            TextInput::make('amount')
335
-                ->label('Amount')
336
-                ->live()
337
-                ->mask(RawJs::make('$money($input)'))
338
-                ->afterStateUpdated(function (Get $get, Set $set, ?string $state, ?string $old) {
339
-                    $this->updateJournalEntryAmount(JournalEntryType::parse($get('type')), $state, $old);
340
-                })
341
-                ->softRequired(),
342
-        ];
343
-    }
344
-
345
-    protected function buildAddJournalEntryAction(JournalEntryType $type): Action
346
-    {
347
-        $typeLabel = $type->getLabel();
348
-
349
-        return Action::make("add{$typeLabel}Entry")
350
-            ->label("Add {$typeLabel} Entry")
351
-            ->button()
352
-            ->outlined()
353
-            ->color($type->isDebit() ? 'primary' : 'gray')
354
-            ->iconSize(IconSize::Small)
355
-            ->iconPosition(IconPosition::Before)
356
-            ->action(function (JournalEntryRepeater $component) use ($type) {
357
-                $state = $component->getState();
358
-                $newUuid = (string) Str::uuid();
359
-                $state[$newUuid] = $this->defaultEntry($type);
360
-
361
-                $component->state($state);
362
-            });
363
-    }
364
-
365
-    public function getJournalTransactionModalFooter(): View
366
-    {
367
-        return view(
368
-            'filament.company.components.actions.journal-entry-footer',
369
-            [
370
-                'debitAmount' => $this->getFormattedDebitAmount(),
371
-                'creditAmount' => $this->getFormattedCreditAmount(),
372
-                'difference' => $this->getFormattedBalanceDifference(),
373
-                'isJournalBalanced' => $this->isJournalEntryBalanced(),
374
-            ],
375
-        );
376
-    }
377
-
378
-    public function form(Form $form): Form
379
-    {
380
-        return $form
381
-            ->schema([
382
-                Forms\Components\Select::make('bankAccountIdFiltered')
383
-                    ->label('Account')
384
-                    ->hiddenLabel()
385
-                    ->allowHtml()
386
-                    ->options($this->getBankAccountOptions(true, true))
387
-                    ->live()
388
-                    ->selectablePlaceholder(false)
389
-                    ->columnSpan(4),
390
-            ])
391
-            ->columns(14);
392
-    }
393
-
394 197
     public function table(Table $table): Table
395 198
     {
396 199
         return $table
@@ -541,7 +344,7 @@ class Transactions extends Page implements HasTable
541 344
                         return [
542 345
                             $table->getFiltersApplyAction()
543 346
                                 ->close(),
544
-                            StaticAction::make('cancel')
347
+                            Actions\StaticAction::make('cancel')
545 348
                                 ->label($action->getModalCancelActionLabel())
546 349
                                 ->button()
547 350
                                 ->close()
@@ -612,6 +415,213 @@ class Transactions extends Page implements HasTable
612 415
             ]);
613 416
     }
614 417
 
418
+    protected function buildTransactionAction(string $name, string $label, TransactionType $type): Actions\CreateAction
419
+    {
420
+        return Actions\CreateAction::make($name)
421
+            ->label($label)
422
+            ->modalWidth(MaxWidth::ThreeExtraLarge)
423
+            ->model(static::getModel())
424
+            ->fillForm(fn (): array => $this->getFormDefaultsForType($type))
425
+            ->form(fn (Form $form) => $this->transactionForm($form))
426
+            ->button()
427
+            ->outlined();
428
+    }
429
+
430
+    protected function getFormDefaultsForType(TransactionType $type): array
431
+    {
432
+        $commonDefaults = [
433
+            'posted_at' => now()->format('Y-m-d'),
434
+        ];
435
+
436
+        return match ($type) {
437
+            TransactionType::Deposit, TransactionType::Withdrawal => array_merge($commonDefaults, $this->transactionDefaults($type)),
438
+            TransactionType::Journal => array_merge($commonDefaults, $this->journalEntryDefaults()),
439
+        };
440
+    }
441
+
442
+    protected function journalEntryDefaults(): array
443
+    {
444
+        return [
445
+            'journalEntries' => [
446
+                $this->defaultEntry(JournalEntryType::Debit),
447
+                $this->defaultEntry(JournalEntryType::Credit),
448
+            ],
449
+        ];
450
+    }
451
+
452
+    protected function defaultEntry(JournalEntryType $journalEntryType): array
453
+    {
454
+        return [
455
+            'type' => $journalEntryType,
456
+            'account_id' => static::getUncategorizedAccountByType($journalEntryType->isDebit() ? TransactionType::Withdrawal : TransactionType::Deposit)?->id,
457
+            'amount' => '0.00',
458
+        ];
459
+    }
460
+
461
+    protected function transactionDefaults(TransactionType $type): array
462
+    {
463
+        return [
464
+            'type' => $type,
465
+            'bank_account_id' => BankAccount::where('enabled', true)->first()?->id,
466
+            'amount' => '0.00',
467
+            'account_id' => static::getUncategorizedAccountByType($type)?->id,
468
+        ];
469
+    }
470
+
471
+    protected static function getUncategorizedAccountByType(TransactionType $type): ?Account
472
+    {
473
+        [$category, $accountName] = match ($type) {
474
+            TransactionType::Deposit => [AccountCategory::Revenue, 'Uncategorized Income'],
475
+            TransactionType::Withdrawal => [AccountCategory::Expense, 'Uncategorized Expense'],
476
+            default => [null, null],
477
+        };
478
+
479
+        return Account::where('category', $category)
480
+            ->where('name', $accountName)
481
+            ->first();
482
+    }
483
+
484
+    protected function getJournalTransactionFormEditTab(): Tab
485
+    {
486
+        return Tab::make('Edit')
487
+            ->label('Edit')
488
+            ->icon('heroicon-o-pencil-square')
489
+            ->schema([
490
+                $this->getTransactionDetailsGrid(),
491
+                $this->getJournalEntriesTableRepeater(),
492
+            ]);
493
+    }
494
+
495
+    protected function getJournalTransactionFormNotesTab(): Tab
496
+    {
497
+        return Tab::make('Notes')
498
+            ->label('Notes')
499
+            ->icon('heroicon-o-clipboard')
500
+            ->id('notes')
501
+            ->schema([
502
+                $this->getTransactionDetailsGrid(),
503
+                Textarea::make('notes')
504
+                    ->label('Notes')
505
+                    ->rows(10)
506
+                    ->autosize(),
507
+            ]);
508
+    }
509
+
510
+    protected function getTransactionDetailsGrid(): Grid
511
+    {
512
+        return Grid::make(8)
513
+            ->schema([
514
+                DatePicker::make('posted_at')
515
+                    ->label('Date')
516
+                    ->softRequired()
517
+                    ->displayFormat('Y-m-d'),
518
+                TextInput::make('description')
519
+                    ->label('Description')
520
+                    ->columnSpan(2),
521
+            ]);
522
+    }
523
+
524
+    protected function getJournalEntriesTableRepeater(): JournalEntryRepeater
525
+    {
526
+        return JournalEntryRepeater::make('journalEntries')
527
+            ->relationship('journalEntries')
528
+            ->hiddenLabel()
529
+            ->columns(4)
530
+            ->headers($this->getJournalEntriesTableRepeaterHeaders())
531
+            ->schema($this->getJournalEntriesTableRepeaterSchema())
532
+            ->streamlined()
533
+            ->deletable(fn (JournalEntryRepeater $repeater) => $repeater->getItemsCount() > 2)
534
+            ->minItems(2)
535
+            ->defaultItems(2)
536
+            ->addable(false)
537
+            ->footerItem(fn (): View => $this->getJournalTransactionModalFooter())
538
+            ->extraActions([
539
+                $this->buildAddJournalEntryAction(JournalEntryType::Debit),
540
+                $this->buildAddJournalEntryAction(JournalEntryType::Credit),
541
+            ]);
542
+    }
543
+
544
+    protected function getJournalEntriesTableRepeaterHeaders(): array
545
+    {
546
+        return [
547
+            Header::make('type')
548
+                ->width('150px')
549
+                ->label('Type'),
550
+            Header::make('description')
551
+                ->width('320px')
552
+                ->label('Description'),
553
+            Header::make('account_id')
554
+                ->width('320px')
555
+                ->label('Account'),
556
+            Header::make('amount')
557
+                ->width('192px')
558
+                ->label('Amount'),
559
+        ];
560
+    }
561
+
562
+    protected function getJournalEntriesTableRepeaterSchema(): array
563
+    {
564
+        return [
565
+            Select::make('type')
566
+                ->label('Type')
567
+                ->options(JournalEntryType::class)
568
+                ->live()
569
+                ->afterStateUpdated(function (Get $get, Set $set, ?string $state, ?string $old) {
570
+                    $this->adjustJournalEntryAmountsForTypeChange(JournalEntryType::parse($state), JournalEntryType::parse($old), $get('amount'));
571
+                })
572
+                ->softRequired(),
573
+            TextInput::make('description')
574
+                ->label('Description'),
575
+            Select::make('account_id')
576
+                ->label('Account')
577
+                ->options(fn (): array => $this->getChartAccountOptions())
578
+                ->live()
579
+                ->softRequired()
580
+                ->searchable(),
581
+            TextInput::make('amount')
582
+                ->label('Amount')
583
+                ->live()
584
+                ->mask(RawJs::make('$money($input)'))
585
+                ->afterStateUpdated(function (Get $get, Set $set, ?string $state, ?string $old) {
586
+                    $this->updateJournalEntryAmount(JournalEntryType::parse($get('type')), $state, $old);
587
+                })
588
+                ->softRequired(),
589
+        ];
590
+    }
591
+
592
+    protected function buildAddJournalEntryAction(JournalEntryType $type): FormAction
593
+    {
594
+        $typeLabel = $type->getLabel();
595
+
596
+        return FormAction::make("add{$typeLabel}Entry")
597
+            ->label("Add {$typeLabel} Entry")
598
+            ->button()
599
+            ->outlined()
600
+            ->color($type->isDebit() ? 'primary' : 'gray')
601
+            ->iconSize(IconSize::Small)
602
+            ->iconPosition(IconPosition::Before)
603
+            ->action(function (JournalEntryRepeater $component) use ($type) {
604
+                $state = $component->getState();
605
+                $newUuid = (string) Str::uuid();
606
+                $state[$newUuid] = $this->defaultEntry($type);
607
+
608
+                $component->state($state);
609
+            });
610
+    }
611
+
612
+    public function getJournalTransactionModalFooter(): View
613
+    {
614
+        return view(
615
+            'filament.company.components.actions.journal-entry-footer',
616
+            [
617
+                'debitAmount' => $this->getFormattedDebitAmount(),
618
+                'creditAmount' => $this->getFormattedCreditAmount(),
619
+                'difference' => $this->getFormattedBalanceDifference(),
620
+                'isJournalBalanced' => $this->isJournalEntryBalanced(),
621
+            ],
622
+        );
623
+    }
624
+
615 625
     protected function addIndicatorForSingleSelection($data, $key, $label, &$indicators): void
616 626
     {
617 627
         if (filled($data[$key])) {
@@ -709,21 +719,13 @@ class Transactions extends Page implements HasTable
709 719
         return array_merge($options, $bankAccountOptions);
710 720
     }
711 721
 
712
-    public function getAccountBalance(Account $account): ?string
722
+    protected function getAccountBalance(Account $account): ?string
713 723
     {
714
-        $company = $account->company;
715
-        $startDate = $company->locale->fiscalYearStartDate();
716
-        $endDate = $company->locale->fiscalYearEndDate();
717
-
718
-        return $this->accountService->getEndingBalance($account, $startDate, $endDate)?->formatted();
724
+        return Accounting::getEndingBalance($account, $this->fiscalYearStartDate, $this->fiscalYearEndDate)?->formatted();
719 725
     }
720 726
 
721
-    public function getBalanceForAllAccounts(): string
727
+    protected function getBalanceForAllAccounts(): string
722 728
     {
723
-        $company = auth()->user()->currentCompany;
724
-        $startDate = $company->locale->fiscalYearStartDate();
725
-        $endDate = $company->locale->fiscalYearEndDate();
726
-
727
-        return $this->accountService->getTotalBalanceForAllBankAccount($startDate, $endDate)->formatted();
729
+        return Accounting::getTotalBalanceForAllBankAccounts($this->fiscalYearStartDate, $this->fiscalYearEndDate)->formatted();
728 730
     }
729 731
 }

+ 18
- 0
app/Filament/Company/Pages/ManageCompany.php Visa fil

@@ -0,0 +1,18 @@
1
+<?php
2
+
3
+namespace App\Filament\Company\Pages;
4
+
5
+use Wallo\FilamentCompanies\Pages\Company\CompanySettings;
6
+
7
+class ManageCompany extends CompanySettings
8
+{
9
+    public static function getLabel(): string
10
+    {
11
+        return 'Manage Company';
12
+    }
13
+
14
+    public static function getSlug(): string
15
+    {
16
+        return 'manage-company';
17
+    }
18
+}

+ 0
- 10
app/Filament/Company/Pages/Service/ConnectedAccount.php Visa fil

@@ -3,7 +3,6 @@
3 3
 namespace App\Filament\Company\Pages\Service;
4 4
 
5 5
 use Filament\Actions\Action;
6
-use Filament\Facades\Filament;
7 6
 use Filament\Pages\Page;
8 7
 use Filament\Support\Enums\MaxWidth;
9 8
 use Illuminate\Contracts\Support\Htmlable;
@@ -26,15 +25,6 @@ class ConnectedAccount extends Page
26 25
         return translate(static::$title);
27 26
     }
28 27
 
29
-    public static function getNavigationParentItem(): ?string
30
-    {
31
-        if (Filament::hasTopNavigation()) {
32
-            return translate('Banking');
33
-        }
34
-
35
-        return null;
36
-    }
37
-
38 28
     protected function getHeaderActions(): array
39 29
     {
40 30
         return [

+ 0
- 10
app/Filament/Company/Pages/Service/LiveCurrency.php Visa fil

@@ -5,7 +5,6 @@ namespace App\Filament\Company\Pages\Service;
5 5
 use App\Facades\Forex;
6 6
 use App\Models\Service\CurrencyList;
7 7
 use App\Models\Setting\Currency;
8
-use Filament\Facades\Filament;
9 8
 use Filament\Pages\Page;
10 9
 use Illuminate\Contracts\Support\Htmlable;
11 10
 use Livewire\Attributes\Url;
@@ -31,15 +30,6 @@ class LiveCurrency extends Page
31 30
         return translate(static::$title);
32 31
     }
33 32
 
34
-    public static function getNavigationParentItem(): ?string
35
-    {
36
-        if (Filament::hasTopNavigation()) {
37
-            return translate('Banking');
38
-        }
39
-
40
-        return null;
41
-    }
42
-
43 33
     public static function shouldRegisterNavigation(): bool
44 34
     {
45 35
         return Forex::isEnabled();

+ 2
- 13
app/Filament/Company/Resources/Banking/AccountResource.php Visa fil

@@ -12,7 +12,6 @@ use App\Models\Banking\BankAccount;
12 12
 use App\Services\AccountService;
13 13
 use App\Utilities\Currency\CurrencyAccessor;
14 14
 use BackedEnum;
15
-use Filament\Facades\Filament;
16 15
 use Filament\Forms;
17 16
 use Filament\Forms\Form;
18 17
 use Filament\Notifications\Notification;
@@ -39,15 +38,6 @@ class AccountResource extends Resource
39 38
         return translate($modelLabel);
40 39
     }
41 40
 
42
-    public static function getNavigationParentItem(): ?string
43
-    {
44
-        if (Filament::hasTopNavigation()) {
45
-            return translate(static::$navigationGroup);
46
-        }
47
-
48
-        return null;
49
-    }
50
-
51 41
     public static function form(Form $form): Form
52 42
     {
53 43
         return $form
@@ -154,7 +144,7 @@ class AccountResource extends Resource
154 144
                                     }),
155 145
                             ]),
156 146
                         Forms\Components\Group::make()
157
-                            ->columns(2)
147
+                            ->columns()
158 148
                             ->columnSpanFull()
159 149
                             ->schema([
160 150
                                 Forms\Components\TextInput::make('number')
@@ -165,8 +155,7 @@ class AccountResource extends Resource
165 155
                                         return $rule->where('company_id', $companyId)->where('number', $state);
166 156
                                     })
167 157
                                     ->maxLength(20)
168
-                                    ->validationAttribute('account number')
169
-                                    ->required(),
158
+                                    ->validationAttribute('account number'),
170 159
                                 ToggleButton::make('enabled')
171 160
                                     ->localizeLabel('Default'),
172 161
                             ]),

+ 0
- 10
app/Filament/Company/Resources/Core/DepartmentResource.php Visa fil

@@ -5,7 +5,6 @@ namespace App\Filament\Company\Resources\Core;
5 5
 use App\Filament\Company\Resources\Core\DepartmentResource\Pages;
6 6
 use App\Filament\Company\Resources\Core\DepartmentResource\RelationManagers\ChildrenRelationManager;
7 7
 use App\Models\Core\Department;
8
-use Filament\Facades\Filament;
9 8
 use Filament\Forms;
10 9
 use Filament\Forms\Form;
11 10
 use Filament\Resources\Resource;
@@ -28,15 +27,6 @@ class DepartmentResource extends Resource
28 27
         return translate($modelLabel);
29 28
     }
30 29
 
31
-    public static function getNavigationParentItem(): ?string
32
-    {
33
-        if (Filament::hasTopNavigation()) {
34
-            return 'HR';
35
-        }
36
-
37
-        return null;
38
-    }
39
-
40 30
     public static function form(Form $form): Form
41 31
     {
42 32
         return $form

+ 0
- 19
app/Filament/Company/Resources/Setting/CurrencyResource/Pages/ListCurrencies.php Visa fil

@@ -1,19 +0,0 @@
1
-<?php
2
-
3
-namespace App\Filament\Company\Resources\Setting\CurrencyResource\Pages;
4
-
5
-use App\Filament\Company\Resources\Setting\CurrencyResource;
6
-use Filament\Actions;
7
-use Filament\Resources\Pages\ListRecords;
8
-
9
-class ListCurrencies extends ListRecords
10
-{
11
-    protected static string $resource = CurrencyResource::class;
12
-
13
-    protected function getHeaderActions(): array
14
-    {
15
-        return [
16
-            Actions\CreateAction::make(),
17
-        ];
18
-    }
19
-}

+ 0
- 19
app/Filament/Company/Resources/Setting/DiscountResource/Pages/ListDiscounts.php Visa fil

@@ -1,19 +0,0 @@
1
-<?php
2
-
3
-namespace App\Filament\Company\Resources\Setting\DiscountResource\Pages;
4
-
5
-use App\Filament\Company\Resources\Setting\DiscountResource;
6
-use Filament\Actions;
7
-use Filament\Resources\Pages\ListRecords;
8
-
9
-class ListDiscounts extends ListRecords
10
-{
11
-    protected static string $resource = DiscountResource::class;
12
-
13
-    protected function getHeaderActions(): array
14
-    {
15
-        return [
16
-            Actions\CreateAction::make(),
17
-        ];
18
-    }
19
-}

+ 0
- 19
app/Filament/Company/Resources/Setting/TaxResource/Pages/ListTaxes.php Visa fil

@@ -1,19 +0,0 @@
1
-<?php
2
-
3
-namespace App\Filament\Company\Resources\Setting\TaxResource\Pages;
4
-
5
-use App\Filament\Company\Resources\Setting\TaxResource;
6
-use Filament\Actions;
7
-use Filament\Resources\Pages\ListRecords;
8
-
9
-class ListTaxes extends ListRecords
10
-{
11
-    protected static string $resource = TaxResource::class;
12
-
13
-    protected function getHeaderActions(): array
14
-    {
15
-        return [
16
-            Actions\CreateAction::make(),
17
-        ];
18
-    }
19
-}

+ 258
- 0
app/Filament/Components/PanelShiftDropdown.php Visa fil

@@ -0,0 +1,258 @@
1
+<?php
2
+
3
+namespace App\Filament\Components;
4
+
5
+use Filament\Contracts\Plugin;
6
+use Filament\Panel;
7
+use Filament\Panel\Concerns\HasNavigation;
8
+use Filament\View\PanelsRenderHook;
9
+
10
+class PanelShiftDropdown implements Plugin
11
+{
12
+    use HasNavigation;
13
+
14
+    protected string $view = 'components.panel-shift-dropdown';
15
+
16
+    protected string $renderHook = PanelsRenderHook::USER_MENU_BEFORE;
17
+
18
+    protected bool $hasDisplayAndAccessibility = true;
19
+
20
+    protected bool $hasCompanySettings = true;
21
+
22
+    protected bool $hasLogoutItem = true;
23
+
24
+    protected int $groupIndex = 0;
25
+
26
+    public function displayAndAccessibility(bool $condition = true): static
27
+    {
28
+        $this->hasDisplayAndAccessibility = $condition;
29
+
30
+        return $this;
31
+    }
32
+
33
+    public function hasDisplayAndAccessibility(): bool
34
+    {
35
+        return $this->hasDisplayAndAccessibility;
36
+    }
37
+
38
+    public function companySettings(bool $condition = true): static
39
+    {
40
+        $this->hasCompanySettings = $condition;
41
+
42
+        return $this;
43
+    }
44
+
45
+    public function hasCompanySettings(): bool
46
+    {
47
+        return $this->hasCompanySettings;
48
+    }
49
+
50
+    public function logoutItem(bool $condition = true): static
51
+    {
52
+        $this->hasLogoutItem = $condition;
53
+
54
+        return $this;
55
+    }
56
+
57
+    public function hasLogoutItem(): bool
58
+    {
59
+        return $this->hasLogoutItem;
60
+    }
61
+
62
+    public function getNavigation(): array
63
+    {
64
+        if ($this->hasNavigationBuilder()) {
65
+            return $this->buildNavigation();
66
+        }
67
+
68
+        return [];
69
+    }
70
+
71
+    public static function make(): static
72
+    {
73
+        return app(static::class);
74
+    }
75
+
76
+    public function getId(): string
77
+    {
78
+        return 'panel-shift-dropdown';
79
+    }
80
+
81
+    public function register(Panel $panel): void
82
+    {
83
+        if ($this->hasNavigation()) {
84
+            $panel->renderHook($this->getRenderHook(), function () {
85
+                return view($this->view, [
86
+                    'component' => $this,
87
+                ]);
88
+            });
89
+        }
90
+    }
91
+
92
+    public function getNavigationAsHierarchyArray(): array
93
+    {
94
+        $navigation = $this->getNavigation();
95
+
96
+        $panels = $this->initializePanels();
97
+
98
+        foreach ($navigation as $item) {
99
+            $this->processItem($item, $panels);
100
+        }
101
+
102
+        $this->addCompanySettingsItems($panels);
103
+        $this->addAccessibilityItems($panels);
104
+
105
+        return $panels;
106
+    }
107
+
108
+    protected function initializePanels(): array
109
+    {
110
+        return [
111
+            'main' => [
112
+                'panelId' => 'main',
113
+                'label' => 'Main',
114
+                'items' => [],
115
+                'renderItems' => true,
116
+            ],
117
+        ];
118
+    }
119
+
120
+    protected function processItem($item, array &$panels, $parentId = 'main'): void
121
+    {
122
+        if (method_exists($item, 'getItems') && ! empty($item->getLabel())) {
123
+            $this->processGroupItem($item, $panels, $parentId);
124
+        } elseif (method_exists($item, 'getItems') && empty($item->getLabel())) {
125
+            foreach ($item->getItems() as $groupItem) {
126
+                $this->processItem($groupItem, $panels, $parentId);
127
+            }
128
+        } elseif (method_exists($item, 'getChildItems') && ! empty($item->getChildItems())) {
129
+            $this->processNavigationItem($item, $panels, $parentId);
130
+        } else {
131
+            $this->addStandaloneItem($item, $panels, $parentId);
132
+        }
133
+    }
134
+
135
+    protected function processGroupItem($item, array &$panels, $parentId): void
136
+    {
137
+        $uniqueId = 'group-' . ++$this->groupIndex;
138
+
139
+        $panels[$uniqueId] = $this->createPanel($uniqueId, $item);
140
+
141
+        $panels[$parentId]['items'][] = $this->createPanelReference($uniqueId, $item);
142
+
143
+        foreach ($item->getItems() as $groupItem) {
144
+            $this->processItem($groupItem, $panels, $uniqueId);
145
+        }
146
+    }
147
+
148
+    protected function processNavigationItem($item, array &$panels, $parentId): void
149
+    {
150
+        $uniqueId = 'group-' . ++$this->groupIndex;
151
+
152
+        $panels[$uniqueId] = $this->createPanel($uniqueId, $item);
153
+
154
+        $panels[$parentId]['items'][] = $this->createPanelReference($uniqueId, $item);
155
+
156
+        foreach ($item->getChildItems() as $childItem) {
157
+            $this->processItem($childItem, $panels, $uniqueId);
158
+        }
159
+    }
160
+
161
+    protected function addStandaloneItem($item, array &$panels, $parentId): void
162
+    {
163
+        $panels[$parentId]['items'][] = [
164
+            'url' => $item->getUrl(),
165
+            'label' => $item->getLabel(),
166
+            'icon' => $item->getIcon(),
167
+        ];
168
+    }
169
+
170
+    protected function addAccessibilityItems(array &$panels): void
171
+    {
172
+        if ($this->hasDisplayAndAccessibility()) {
173
+            $displayAndAccessibilityId = 'display-and-accessibility';
174
+            $panels['main']['items'][] = [
175
+                'panelId' => $displayAndAccessibilityId,
176
+                'label' => 'Display & Accessibility',
177
+                'icon' => 'heroicon-s-moon',
178
+            ];
179
+
180
+            $panels[$displayAndAccessibilityId] = [
181
+                'panelId' => $displayAndAccessibilityId,
182
+                'label' => 'Display & Accessibility',
183
+                'items' => [],
184
+                'renderItems' => false,
185
+            ];
186
+        }
187
+    }
188
+
189
+    protected function addCompanySettingsItems(array &$panels): void
190
+    {
191
+        if ($this->hasCompanySettings()) {
192
+            $companySettingsId = 'company-settings';
193
+            $panels['main']['items'][] = [
194
+                'panelId' => $companySettingsId,
195
+                'label' => 'Company Settings',
196
+                'icon' => 'heroicon-m-building-office-2',
197
+            ];
198
+
199
+            $panels[$companySettingsId] = [
200
+                'panelId' => $companySettingsId,
201
+                'label' => 'Company Settings',
202
+                'items' => [],
203
+                'renderItems' => false,
204
+            ];
205
+
206
+            $switchCompanyPanelId = 'company-switcher';
207
+            $panels[$companySettingsId]['items'][] = [
208
+                'panelId' => $switchCompanyPanelId,
209
+                'label' => 'Switch Company',
210
+                'icon' => '',
211
+            ];
212
+
213
+            $panels[$switchCompanyPanelId] = [
214
+                'panelId' => $switchCompanyPanelId,
215
+                'label' => 'Switch Company',
216
+                'items' => [],
217
+                'renderItems' => false,
218
+            ];
219
+        }
220
+    }
221
+
222
+    protected function createPanel($uniqueId, $item, $renderItems = true): array
223
+    {
224
+        return [
225
+            'panelId' => $uniqueId,
226
+            'label' => $item->getLabel(),
227
+            'icon' => $item->getIcon(),
228
+            'items' => [],
229
+            'renderItems' => $renderItems,
230
+        ];
231
+    }
232
+
233
+    protected function createPanelReference($uniqueId, $item): array
234
+    {
235
+        return [
236
+            'panelId' => $uniqueId,
237
+            'label' => $item->getLabel(),
238
+            'icon' => $item->getIcon(),
239
+        ];
240
+    }
241
+
242
+    public function boot(Panel $panel): void
243
+    {
244
+        // TODO: Implement boot() method.
245
+    }
246
+
247
+    public function renderHook(string $hook): static
248
+    {
249
+        $this->renderHook = $hook;
250
+
251
+        return $this;
252
+    }
253
+
254
+    public function getRenderHook(): string
255
+    {
256
+        return $this->renderHook;
257
+    }
258
+}

+ 8
- 6
app/Listeners/ConfigureCompanyDefault.php Visa fil

@@ -4,7 +4,6 @@ namespace App\Listeners;
4 4
 
5 5
 use App\Enums\DateFormat;
6 6
 use App\Enums\Font;
7
-use App\Enums\MaxContentWidth;
8 7
 use App\Enums\ModalWidth;
9 8
 use App\Enums\PrimaryColor;
10 9
 use App\Enums\RecordsPerPage;
@@ -35,7 +34,6 @@ class ConfigureCompanyDefault
35 34
         $stripedTables = $company->appearance->is_table_striped ?? false;
36 35
         $defaultPrimaryColor = $company->appearance->primary_color ?? PrimaryColor::from(PrimaryColor::DEFAULT);
37 36
         $modalWidth = $company->appearance->modal_width->value ?? ModalWidth::DEFAULT;
38
-        $maxContentWidth = $company->appearance->max_content_width->value ?? MaxContentWidth::DEFAULT;
39 37
         $defaultFont = $company->appearance->font->value ?? Font::DEFAULT;
40 38
         $default_language = $company->locale->language ?? config('transmatic.source_locale');
41 39
         $defaultTimezone = $company->locale->timezone ?? config('app.timezone');
@@ -70,8 +68,7 @@ class ConfigureCompanyDefault
70 68
 
71 69
         Filament::getPanel('company')
72 70
             ->font($defaultFont)
73
-            ->brandName($company->name)
74
-            ->maxContentWidth($maxContentWidth);
71
+            ->brandName($company->name);
75 72
 
76 73
         DatePicker::configureUsing(static function (DatePicker $component) use ($dateFormat, $weekStart) {
77 74
             $component
@@ -82,12 +79,17 @@ class ConfigureCompanyDefault
82 79
         Tab::configureUsing(static function (Tab $tab) {
83 80
             $label = $tab->getLabel();
84 81
 
85
-            $tab->label(ucwords(translate($label)));
82
+            $translatedLabel = translate($label);
83
+
84
+            $tab->label(ucwords($translatedLabel));
86 85
         }, isImportant: true);
87 86
 
88 87
         Section::configureUsing(static function (Section $section): void {
89 88
             $heading = $section->getHeading();
90
-            $section->heading(ucfirst(translate($heading)));
89
+
90
+            $translatedHeading = translate($heading);
91
+
92
+            $section->heading(ucfirst($translatedHeading));
91 93
         }, isImportant: true);
92 94
 
93 95
         ResourcesTab::configureUsing(static function (ResourcesTab $tab): void {

+ 0
- 147
app/Listeners/ConfigureCompanyNavigation.php Visa fil

@@ -1,147 +0,0 @@
1
-<?php
2
-
3
-namespace App\Listeners;
4
-
5
-use App\Events\CompanyConfigured;
6
-use App\Filament\Company\Pages\Accounting\AccountChart;
7
-use App\Filament\Company\Pages\Accounting\Transactions;
8
-use App\Filament\Company\Pages\Reports;
9
-use App\Filament\Company\Pages\Service\ConnectedAccount;
10
-use App\Filament\Company\Pages\Service\LiveCurrency;
11
-use App\Filament\Company\Pages\Setting\Appearance;
12
-use App\Filament\Company\Pages\Setting\CompanyDefault;
13
-use App\Filament\Company\Pages\Setting\CompanyProfile;
14
-use App\Filament\Company\Pages\Setting\Invoice;
15
-use App\Filament\Company\Pages\Setting\Localization;
16
-use App\Filament\Company\Resources\Banking\AccountResource;
17
-use App\Filament\Company\Resources\Core\DepartmentResource;
18
-use App\Filament\Company\Resources\Setting\CurrencyResource;
19
-use App\Filament\Company\Resources\Setting\DiscountResource;
20
-use App\Filament\Company\Resources\Setting\TaxResource;
21
-use Filament\Facades\Filament;
22
-use Filament\Navigation\NavigationBuilder;
23
-use Filament\Navigation\NavigationGroup;
24
-use Filament\Pages\Dashboard;
25
-
26
-class ConfigureCompanyNavigation
27
-{
28
-    /**
29
-     * Handle the event.
30
-     */
31
-    public function handle(CompanyConfigured $event): void
32
-    {
33
-        $company = $event->company;
34
-
35
-        $hasTopNavigation = $company->appearance->has_top_navigation ?? false;
36
-
37
-        Filament::getPanel('company')
38
-            ->topNavigation($hasTopNavigation)
39
-            ->sidebarCollapsibleOnDesktop(! $hasTopNavigation);
40
-
41
-        if (Filament::getPanel('company')->hasTopNavigation()) {
42
-            Filament::getPanel('company')->navigation(
43
-                $this->buildCompanyNavigation()
44
-            );
45
-        } else {
46
-            Filament::getPanel('company')->navigation(
47
-                $this->buildCompanySidebarNavigation()
48
-            );
49
-        }
50
-
51
-        NavigationGroup::configureUsing(static function (NavigationGroup $group): void {
52
-            $group->localizeLabel();
53
-        }, isImportant: true);
54
-    }
55
-
56
-    /**
57
-     * Build the company navigation.
58
-     */
59
-    protected function buildCompanyNavigation(): callable
60
-    {
61
-        return function (NavigationBuilder $builder): NavigationBuilder {
62
-            return $builder
63
-                ->items(Dashboard::getNavigationItems())
64
-                ->groups([
65
-                    $this->buildSettingsGroup(),
66
-                    $this->buildResourcesGroup(),
67
-                ]);
68
-        };
69
-    }
70
-
71
-    /**
72
-     * Build the settings group.
73
-     */
74
-    protected function buildSettingsGroup(): NavigationGroup
75
-    {
76
-        return NavigationGroup::make('Settings')
77
-            ->items([
78
-                ...CurrencyResource::getNavigationItems(),
79
-                ...DiscountResource::getNavigationItems(),
80
-                ...TaxResource::getNavigationItems(),
81
-                ...Appearance::getNavigationItems(),
82
-                ...CompanyDefault::getNavigationItems(),
83
-                ...Invoice::getNavigationItems(),
84
-                ...CompanyProfile::getNavigationItems(),
85
-                ...Localization::getNavigationItems(),
86
-            ]);
87
-    }
88
-
89
-    /**
90
-     * Build the resources group.
91
-     */
92
-    protected function buildResourcesGroup(): NavigationGroup
93
-    {
94
-        return NavigationGroup::make('Resources')
95
-            ->items([
96
-                ...AccountResource::getNavigationItems(),
97
-                ...ConnectedAccount::getNavigationItems(),
98
-                ...LiveCurrency::getNavigationItems(),
99
-                ...DepartmentResource::getNavigationItems(),
100
-            ]);
101
-    }
102
-
103
-    /**
104
-     * Build the company sidebar navigation.
105
-     */
106
-    protected function buildCompanySidebarNavigation(): callable
107
-    {
108
-        return static function (NavigationBuilder $builder): NavigationBuilder {
109
-            return $builder
110
-                ->items(Dashboard::getNavigationItems())
111
-                ->groups([
112
-                    NavigationGroup::make('Accounting')
113
-                        ->icon('heroicon-o-clipboard-document-list')
114
-                        ->extraSidebarAttributes(['class' => 'es-sidebar-group'])
115
-                        ->items([
116
-                            ...AccountChart::getNavigationItems(),
117
-                            ...Transactions::getNavigationItems(),
118
-                        ]),
119
-                    NavigationGroup::make('Banking')
120
-                        ->icon('heroicon-o-building-library')
121
-                        ->items(AccountResource::getNavigationItems()),
122
-                    NavigationGroup::make('HR')
123
-                        ->icon('heroicon-o-user-group')
124
-                        ->items(DepartmentResource::getNavigationItems()),
125
-                    NavigationGroup::make('Services')
126
-                        ->icon('heroicon-o-wrench-screwdriver')
127
-                        ->items([
128
-                            ...ConnectedAccount::getNavigationItems(),
129
-                            ...LiveCurrency::getNavigationItems(),
130
-                        ]),
131
-                    NavigationGroup::make('Settings')
132
-                        ->icon('heroicon-o-cog-8-tooth')
133
-                        ->items([
134
-                            ...Appearance::getNavigationItems(),
135
-                            ...CompanyProfile::getNavigationItems(),
136
-                            ...CurrencyResource::getNavigationItems(),
137
-                            ...CompanyDefault::getNavigationItems(),
138
-                            ...DiscountResource::getNavigationItems(),
139
-                            ...Invoice::getNavigationItems(),
140
-                            ...Localization::getNavigationItems(),
141
-                            ...TaxResource::getNavigationItems(),
142
-                        ]),
143
-                ])
144
-                ->items(Reports::getNavigationItems());
145
-        };
146
-    }
147
-}

+ 3
- 22
app/Models/Accounting/Account.php Visa fil

@@ -17,7 +17,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
17 17
 use Illuminate\Database\Eloquent\Relations\HasMany;
18 18
 use Illuminate\Database\Eloquent\Relations\MorphTo;
19 19
 use Illuminate\Support\Carbon;
20
-use Wallo\FilamentCompanies\FilamentCompanies;
21 20
 
22 21
 #[ObservedBy(AccountObserver::class)]
23 22
 class Account extends Model
@@ -53,11 +52,6 @@ class Account extends Model
53 52
         'default' => 'boolean',
54 53
     ];
55 54
 
56
-    public function company(): BelongsTo
57
-    {
58
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
59
-    }
60
-
61 55
     public function subtype(): BelongsTo
62 56
     {
63 57
         return $this->belongsTo(AccountSubtype::class, 'subtype_id');
@@ -79,32 +73,19 @@ class Account extends Model
79 73
         return $this->belongsTo(Currency::class, 'currency_code', 'code');
80 74
     }
81 75
 
82
-    public function createdBy(): BelongsTo
83
-    {
84
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
85
-    }
86
-
87
-    public function updatedBy(): BelongsTo
88
-    {
89
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
90
-    }
91
-
92 76
     public function accountable(): MorphTo
93 77
     {
94 78
         return $this->morphTo();
95 79
     }
96 80
 
97
-    public function getLastTransactionDateAttribute(): ?string
81
+    public function getLastTransactionDate(): ?string
98 82
     {
99 83
         $lastJournalEntryTransaction = $this->journalEntries()
100
-            ->with('transaction')
101
-            ->latest('transactions.posted_at')
102 84
             ->join('transactions', 'journal_entries.transaction_id', '=', 'transactions.id')
103
-            ->select('transactions.posted_at')
104
-            ->first();
85
+            ->max('transactions.posted_at');
105 86
 
106 87
         if ($lastJournalEntryTransaction) {
107
-            return Carbon::parse($lastJournalEntryTransaction->posted_at)->format('F j, Y');
88
+            return Carbon::parse($lastJournalEntryTransaction)->format('F j, Y');
108 89
         }
109 90
 
110 91
         return null;

+ 0
- 7
app/Models/Accounting/AccountSubtype.php Visa fil

@@ -9,9 +9,7 @@ use Database\Factories\Accounting\AccountSubtypeFactory;
9 9
 use Illuminate\Database\Eloquent\Factories\Factory;
10 10
 use Illuminate\Database\Eloquent\Factories\HasFactory;
11 11
 use Illuminate\Database\Eloquent\Model;
12
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
13 12
 use Illuminate\Database\Eloquent\Relations\HasMany;
14
-use Wallo\FilamentCompanies\FilamentCompanies;
15 13
 
16 14
 class AccountSubtype extends Model
17 15
 {
@@ -35,11 +33,6 @@ class AccountSubtype extends Model
35 33
         'type' => AccountType::class,
36 34
     ];
37 35
 
38
-    public function company(): BelongsTo
39
-    {
40
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
41
-    }
42
-
43 36
     public function accounts(): HasMany
44 37
     {
45 38
         return $this->hasMany(Account::class, 'subtype_id');

+ 0
- 16
app/Models/Accounting/JournalEntry.php Visa fil

@@ -15,7 +15,6 @@ use Illuminate\Database\Eloquent\Factories\Factory;
15 15
 use Illuminate\Database\Eloquent\Factories\HasFactory;
16 16
 use Illuminate\Database\Eloquent\Model;
17 17
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
18
-use Wallo\FilamentCompanies\FilamentCompanies;
19 18
 
20 19
 #[ObservedBy(JournalEntryObserver::class)]
21 20
 class JournalEntry extends Model
@@ -40,11 +39,6 @@ class JournalEntry extends Model
40 39
         'amount' => MoneyCast::class,
41 40
     ];
42 41
 
43
-    public function company(): BelongsTo
44
-    {
45
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
46
-    }
47
-
48 42
     public function account(): BelongsTo
49 43
     {
50 44
         return $this->belongsTo(Account::class, 'account_id');
@@ -60,16 +54,6 @@ class JournalEntry extends Model
60 54
         return $this->account()->where('accountable_type', BankAccount::class);
61 55
     }
62 56
 
63
-    public function createdBy(): BelongsTo
64
-    {
65
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
66
-    }
67
-
68
-    public function updatedBy(): BelongsTo
69
-    {
70
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
71
-    }
72
-
73 57
     public function isUncategorized(): bool
74 58
     {
75 59
         return $this->account->isUncategorized();

+ 2
- 18
app/Models/Accounting/Transaction.php Visa fil

@@ -16,7 +16,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
16 16
 use Illuminate\Database\Eloquent\Model;
17 17
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
18 18
 use Illuminate\Database\Eloquent\Relations\HasMany;
19
-use Wallo\FilamentCompanies\FilamentCompanies;
20 19
 
21 20
 #[ObservedBy(TransactionObserver::class)]
22 21
 class Transaction extends Model
@@ -28,9 +27,9 @@ class Transaction extends Model
28 27
     protected $fillable = [
29 28
         'company_id',
30 29
         'account_id', // Account from Chart of Accounts (Income/Expense accounts)
31
-        'bank_account_id', // Cash or Bank Account
30
+        'bank_account_id', // Cash/Bank Account
32 31
         'contact_id',
33
-        'type', // 'deposit', 'withdrawal', 'journal entry'
32
+        'type', // 'deposit', 'withdrawal', 'journal'
34 33
         'payment_channel',
35 34
         'description',
36 35
         'notes',
@@ -51,11 +50,6 @@ class Transaction extends Model
51 50
         'posted_at' => 'datetime',
52 51
     ];
53 52
 
54
-    public function company(): BelongsTo
55
-    {
56
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
57
-    }
58
-
59 53
     public function account(): BelongsTo
60 54
     {
61 55
         return $this->belongsTo(Account::class, 'account_id');
@@ -81,16 +75,6 @@ class Transaction extends Model
81 75
         return $this->journalEntries->contains(fn (JournalEntry $entry) => $entry->account->isUncategorized());
82 76
     }
83 77
 
84
-    public function createdBy(): BelongsTo
85
-    {
86
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
87
-    }
88
-
89
-    public function updatedBy(): BelongsTo
90
-    {
91
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
92
-    }
93
-
94 78
     protected static function newFactory(): Factory
95 79
     {
96 80
         return TransactionFactory::new();

+ 0
- 16
app/Models/Banking/BankAccount.php Visa fil

@@ -20,7 +20,6 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
20 20
 use Illuminate\Database\Eloquent\Relations\HasMany;
21 21
 use Illuminate\Database\Eloquent\Relations\HasOne;
22 22
 use Illuminate\Database\Eloquent\Relations\MorphOne;
23
-use Wallo\FilamentCompanies\FilamentCompanies;
24 23
 
25 24
 #[ObservedBy(BankAccountObserver::class)]
26 25
 class BankAccount extends Model
@@ -52,11 +51,6 @@ class BankAccount extends Model
52 51
         'mask',
53 52
     ];
54 53
 
55
-    public function company(): BelongsTo
56
-    {
57
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
58
-    }
59
-
60 54
     public function connectedBankAccount(): HasOne
61 55
     {
62 56
         return $this->hasOne(ConnectedBankAccount::class, 'bank_account_id');
@@ -77,16 +71,6 @@ class BankAccount extends Model
77 71
         return $this->hasMany(Transaction::class, 'bank_account_id');
78 72
     }
79 73
 
80
-    public function createdBy(): BelongsTo
81
-    {
82
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
83
-    }
84
-
85
-    public function updatedBy(): BelongsTo
86
-    {
87
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
88
-    }
89
-
90 74
     protected function mask(): Attribute
91 75
     {
92 76
         return Attribute::get(static function (mixed $value, array $attributes): ?string {

+ 0
- 16
app/Models/Banking/ConnectedBankAccount.php Visa fil

@@ -10,7 +10,6 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
10 10
 use Illuminate\Database\Eloquent\Model;
11 11
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
12 12
 use Illuminate\Database\Eloquent\Relations\HasOneThrough;
13
-use Wallo\FilamentCompanies\FilamentCompanies;
14 13
 
15 14
 class ConnectedBankAccount extends Model
16 15
 {
@@ -48,11 +47,6 @@ class ConnectedBankAccount extends Model
48 47
         'masked_number',
49 48
     ];
50 49
 
51
-    public function company(): BelongsTo
52
-    {
53
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
54
-    }
55
-
56 50
     public function institution(): BelongsTo
57 51
     {
58 52
         return $this->belongsTo(Institution::class, 'institution_id');
@@ -81,14 +75,4 @@ class ConnectedBankAccount extends Model
81 75
             return $attributes['mask'] ? '•••• ' . substr($attributes['mask'], -4) : null;
82 76
         });
83 77
     }
84
-
85
-    public function createdBy(): BelongsTo
86
-    {
87
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
88
-    }
89
-
90
-    public function updatedBy(): BelongsTo
91
-    {
92
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
93
-    }
94 78
 }

+ 18
- 0
app/Models/Banking/Institution.php Visa fil

@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
6 6
 use Illuminate\Database\Eloquent\Factories\HasFactory;
7 7
 use Illuminate\Database\Eloquent\Model;
8 8
 use Illuminate\Database\Eloquent\Relations\HasMany;
9
+use Illuminate\Support\Carbon;
9 10
 use Illuminate\Support\Facades\Storage;
10 11
 
11 12
 class Institution extends Model
@@ -39,6 +40,23 @@ class Institution extends Model
39 40
         return $this->hasMany(ConnectedBankAccount::class, 'institution_id');
40 41
     }
41 42
 
43
+    public function getLastTransactionDate(): ?string
44
+    {
45
+        $latestDate = $this->connectedBankAccounts->map(function ($connectedBankAccount) {
46
+            if ($connectedBankAccount->bankAccount) {
47
+                return $connectedBankAccount->bankAccount->transactions()->max('posted_at');
48
+            }
49
+
50
+            return null;
51
+        })->filter()->max();
52
+
53
+        if ($latestDate) {
54
+            return Carbon::parse($latestDate)->diffForHumans();
55
+        }
56
+
57
+        return null;
58
+    }
59
+
42 60
     protected function logoUrl(): Attribute
43 61
     {
44 62
         return Attribute::get(static function (mixed $value, array $attributes): ?string {

+ 0
- 15
app/Models/Common/Contact.php Visa fil

@@ -48,11 +48,6 @@ class Contact extends Model
48 48
         'type' => ContactType::class,
49 49
     ];
50 50
 
51
-    public function company(): BelongsTo
52
-    {
53
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
54
-    }
55
-
56 51
     public function currency(): BelongsTo
57 52
     {
58 53
         return $this->belongsTo(Currency::class, 'currency_code');
@@ -63,16 +58,6 @@ class Contact extends Model
63 58
         return $this->hasOne(FilamentCompanies::employeeshipModel(), 'contact_id');
64 59
     }
65 60
 
66
-    public function createdBy(): BelongsTo
67
-    {
68
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
69
-    }
70
-
71
-    public function updatedBy(): BelongsTo
72
-    {
73
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
74
-    }
75
-
76 61
     protected static function newFactory(): Factory
77 62
     {
78 63
         return ContactFactory::new();

+ 0
- 15
app/Models/Core/Department.php Visa fil

@@ -31,11 +31,6 @@ class Department extends Model
31 31
         'updated_by',
32 32
     ];
33 33
 
34
-    public function company(): BelongsTo
35
-    {
36
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
37
-    }
38
-
39 34
     public function manager(): BelongsTo
40 35
     {
41 36
         return $this->belongsTo(User::class, 'manager_id');
@@ -57,16 +52,6 @@ class Department extends Model
57 52
         return $this->hasMany(FilamentCompanies::employeeshipModel(), 'department_id');
58 53
     }
59 54
 
60
-    public function createdBy(): BelongsTo
61
-    {
62
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
63
-    }
64
-
65
-    public function updatedBy(): BelongsTo
66
-    {
67
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
68
-    }
69
-
70 55
     protected static function newFactory(): Factory
71 56
     {
72 57
         return DepartmentFactory::new();

+ 0
- 17
app/Models/Setting/Appearance.php Visa fil

@@ -14,8 +14,6 @@ use Database\Factories\Setting\AppearanceFactory;
14 14
 use Illuminate\Database\Eloquent\Factories\Factory;
15 15
 use Illuminate\Database\Eloquent\Factories\HasFactory;
16 16
 use Illuminate\Database\Eloquent\Model;
17
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
18
-use Wallo\FilamentCompanies\FilamentCompanies;
19 17
 
20 18
 class Appearance extends Model
21 19
 {
@@ -50,21 +48,6 @@ class Appearance extends Model
50 48
         'is_table_striped' => 'boolean',
51 49
     ];
52 50
 
53
-    public function company(): BelongsTo
54
-    {
55
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
56
-    }
57
-
58
-    public function createdBy(): BelongsTo
59
-    {
60
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
61
-    }
62
-
63
-    public function updatedBy(): BelongsTo
64
-    {
65
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
66
-    }
67
-
68 51
     protected static function newFactory(): Factory
69 52
     {
70 53
         return AppearanceFactory::new();

+ 0
- 16
app/Models/Setting/CompanyDefault.php Visa fil

@@ -12,7 +12,6 @@ use Illuminate\Database\Eloquent\Factories\Factory;
12 12
 use Illuminate\Database\Eloquent\Factories\HasFactory;
13 13
 use Illuminate\Database\Eloquent\Model;
14 14
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
15
-use Wallo\FilamentCompanies\FilamentCompanies;
16 15
 
17 16
 class CompanyDefault extends Model
18 17
 {
@@ -34,11 +33,6 @@ class CompanyDefault extends Model
34 33
         'updated_by',
35 34
     ];
36 35
 
37
-    public function company(): BelongsTo
38
-    {
39
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
40
-    }
41
-
42 36
     public function bankAccount(): BelongsTo
43 37
     {
44 38
         return $this->belongsTo(BankAccount::class, 'bank_account_id');
@@ -73,16 +67,6 @@ class CompanyDefault extends Model
73 67
             ->where('type', DiscountType::Purchase);
74 68
     }
75 69
 
76
-    public function createdBy(): BelongsTo
77
-    {
78
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
79
-    }
80
-
81
-    public function updatedBy(): BelongsTo
82
-    {
83
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
84
-    }
85
-
86 70
     protected static function newFactory(): Factory
87 71
     {
88 72
         return CompanyDefaultFactory::new();

+ 0
- 16
app/Models/Setting/CompanyProfile.php Visa fil

@@ -15,7 +15,6 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
15 15
 use Illuminate\Database\Eloquent\Model;
16 16
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
17 17
 use Illuminate\Support\Facades\Storage;
18
-use Wallo\FilamentCompanies\FilamentCompanies;
19 18
 
20 19
 class CompanyProfile extends Model
21 20
 {
@@ -60,11 +59,6 @@ class CompanyProfile extends Model
60 59
         });
61 60
     }
62 61
 
63
-    public function company(): BelongsTo
64
-    {
65
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
66
-    }
67
-
68 62
     public function country(): BelongsTo
69 63
     {
70 64
         return $this->belongsTo(Country::class, 'country', 'id');
@@ -80,16 +74,6 @@ class CompanyProfile extends Model
80 74
         return $this->belongsTo(State::class, 'state_id', 'id');
81 75
     }
82 76
 
83
-    public function createdBy(): BelongsTo
84
-    {
85
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
86
-    }
87
-
88
-    public function updatedBy(): BelongsTo
89
-    {
90
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
91
-    }
92
-
93 77
     public function getCountryName(): string
94 78
     {
95 79
         return Country::findByIsoCode2($this->country)?->name ?? '';

+ 0
- 17
app/Models/Setting/Currency.php Visa fil

@@ -16,10 +16,8 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
16 16
 use Illuminate\Database\Eloquent\Factories\Factory;
17 17
 use Illuminate\Database\Eloquent\Factories\HasFactory;
18 18
 use Illuminate\Database\Eloquent\Model;
19
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
20 19
 use Illuminate\Database\Eloquent\Relations\HasMany;
21 20
 use Illuminate\Database\Eloquent\Relations\HasOne;
22
-use Wallo\FilamentCompanies\FilamentCompanies;
23 21
 
24 22
 class Currency extends Model
25 23
 {
@@ -70,11 +68,6 @@ class Currency extends Model
70 68
         });
71 69
     }
72 70
 
73
-    public function company(): BelongsTo
74
-    {
75
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
76
-    }
77
-
78 71
     public function defaultCurrency(): HasOne
79 72
     {
80 73
         return $this->hasOne(CompanyDefault::class, 'currency_code', 'code');
@@ -90,16 +83,6 @@ class Currency extends Model
90 83
         return $this->hasMany(AccountHistory::class, 'currency_code', 'code');
91 84
     }
92 85
 
93
-    public function createdBy(): BelongsTo
94
-    {
95
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
96
-    }
97
-
98
-    public function updatedBy(): BelongsTo
99
-    {
100
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
101
-    }
102
-
103 86
     protected static function newFactory(): Factory
104 87
     {
105 88
         return CurrencyFactory::new();

+ 0
- 17
app/Models/Setting/Discount.php Visa fil

@@ -14,9 +14,7 @@ use Database\Factories\Setting\DiscountFactory;
14 14
 use Illuminate\Database\Eloquent\Factories\Factory;
15 15
 use Illuminate\Database\Eloquent\Factories\HasFactory;
16 16
 use Illuminate\Database\Eloquent\Model;
17
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
18 17
 use Illuminate\Database\Eloquent\Relations\HasOne;
19
-use Wallo\FilamentCompanies\FilamentCompanies;
20 18
 
21 19
 class Discount extends Model
22 20
 {
@@ -53,11 +51,6 @@ class Discount extends Model
53 51
         'enabled' => 'boolean',
54 52
     ];
55 53
 
56
-    public function company(): BelongsTo
57
-    {
58
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
59
-    }
60
-
61 54
     public function defaultSalesDiscount(): HasOne
62 55
     {
63 56
         return $this->hasOne(CompanyDefault::class, 'sales_discount_id');
@@ -68,16 +61,6 @@ class Discount extends Model
68 61
         return $this->hasOne(CompanyDefault::class, 'purchase_discount_id');
69 62
     }
70 63
 
71
-    public function createdBy(): BelongsTo
72
-    {
73
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
74
-    }
75
-
76
-    public function updatedBy(): BelongsTo
77
-    {
78
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
79
-    }
80
-
81 64
     protected static function newFactory(): Factory
82 65
     {
83 66
         return DiscountFactory::new();

+ 0
- 17
app/Models/Setting/DocumentDefault.php Visa fil

@@ -16,9 +16,7 @@ use Illuminate\Database\Eloquent\Casts\Attribute;
16 16
 use Illuminate\Database\Eloquent\Factories\Factory;
17 17
 use Illuminate\Database\Eloquent\Factories\HasFactory;
18 18
 use Illuminate\Database\Eloquent\Model;
19
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
20 19
 use Illuminate\Support\Facades\Storage;
21
-use Wallo\FilamentCompanies\FilamentCompanies;
22 20
 
23 21
 class DocumentDefault extends Model
24 22
 {
@@ -75,21 +73,6 @@ class DocumentDefault extends Model
75 73
         });
76 74
     }
77 75
 
78
-    public function company(): BelongsTo
79
-    {
80
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
81
-    }
82
-
83
-    public function createdBy(): BelongsTo
84
-    {
85
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
86
-    }
87
-
88
-    public function updatedBy(): BelongsTo
89
-    {
90
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
91
-    }
92
-
93 76
     public function scopeType(Builder $query, string | DocumentType $type): Builder
94 77
     {
95 78
         return $query->where($this->qualifyColumn('type'), $type);

+ 0
- 17
app/Models/Setting/Localization.php Visa fil

@@ -13,10 +13,8 @@ use Database\Factories\Setting\LocalizationFactory;
13 13
 use Illuminate\Database\Eloquent\Factories\Factory;
14 14
 use Illuminate\Database\Eloquent\Factories\HasFactory;
15 15
 use Illuminate\Database\Eloquent\Model;
16
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
17 16
 use NumberFormatter;
18 17
 use ResourceBundle;
19
-use Wallo\FilamentCompanies\FilamentCompanies;
20 18
 use Wallo\Transmatic\Facades\Transmatic;
21 19
 
22 20
 class Localization extends Model
@@ -51,21 +49,6 @@ class Localization extends Model
51 49
         'number_format' => NumberFormat::class,
52 50
     ];
53 51
 
54
-    public function company(): BelongsTo
55
-    {
56
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
57
-    }
58
-
59
-    public function createdBy(): BelongsTo
60
-    {
61
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
62
-    }
63
-
64
-    public function updatedBy(): BelongsTo
65
-    {
66
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
67
-    }
68
-
69 52
     public static function getLocale(string $language, string $countryCode): string
70 53
     {
71 54
         $fullLocale = "{$language}_{$countryCode}";

+ 0
- 17
app/Models/Setting/Tax.php Visa fil

@@ -14,9 +14,7 @@ use Database\Factories\Setting\TaxFactory;
14 14
 use Illuminate\Database\Eloquent\Factories\Factory;
15 15
 use Illuminate\Database\Eloquent\Factories\HasFactory;
16 16
 use Illuminate\Database\Eloquent\Model;
17
-use Illuminate\Database\Eloquent\Relations\BelongsTo;
18 17
 use Illuminate\Database\Eloquent\Relations\HasOne;
19
-use Wallo\FilamentCompanies\FilamentCompanies;
20 18
 
21 19
 class Tax extends Model
22 20
 {
@@ -49,11 +47,6 @@ class Tax extends Model
49 47
         'enabled' => 'boolean',
50 48
     ];
51 49
 
52
-    public function company(): BelongsTo
53
-    {
54
-        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
55
-    }
56
-
57 50
     public function defaultSalesTax(): HasOne
58 51
     {
59 52
         return $this->hasOne(CompanyDefault::class, 'sales_tax_id');
@@ -64,16 +57,6 @@ class Tax extends Model
64 57
         return $this->hasOne(CompanyDefault::class, 'purchase_tax_id');
65 58
     }
66 59
 
67
-    public function createdBy(): BelongsTo
68
-    {
69
-        return $this->belongsTo(FilamentCompanies::userModel(), 'created_by');
70
-    }
71
-
72
-    public function updatedBy(): BelongsTo
73
-    {
74
-        return $this->belongsTo(FilamentCompanies::userModel(), 'updated_by');
75
-    }
76
-
77 60
     protected static function newFactory(): Factory
78 61
     {
79 62
         return TaxFactory::new();

+ 5
- 0
app/Observers/AccountObserver.php Visa fil

@@ -42,6 +42,8 @@ class AccountObserver
42 42
         $generatedAccountCode = AccountCode::generate($account->company_id, $account->subtype_id);
43 43
 
44 44
         $account->code = $generatedAccountCode;
45
+
46
+        $account->save();
45 47
     }
46 48
 
47 49
     /**
@@ -50,7 +52,10 @@ class AccountObserver
50 52
     public function created(Account $account): void
51 53
     {
52 54
         // $bankAccount = $account->accountable;
55
+
56
+        info('Observer triggered for Account: ', $account->toArray());
53 57
         if (($account->accountable_type === BankAccount::class) && $account->code === null) {
58
+            info('Setting fields for Bank Account');
54 59
             $this->setFieldsForBankAccount($account);
55 60
         }
56 61
 

+ 26
- 16
app/Observers/TransactionObserver.php Visa fil

@@ -52,36 +52,46 @@ class TransactionObserver
52 52
      */
53 53
     public function updated(Transaction $transaction): void
54 54
     {
55
-        $changes = $transaction->getChanges();
56
-
57
-        $relevantChanges = array_intersect_key($changes, array_flip(['amount', 'description', 'account_id', 'bank_account_id', 'type']));
58
-
59
-        if (empty($relevantChanges)) {
55
+        if ($transaction->type === TransactionType::Journal || $this->hasRelevantChanges($transaction) === false) {
60 56
             return;
61 57
         }
62 58
 
63 59
         $chartAccount = $transaction->account;
64
-        $bankAccount = $transaction->bankAccount->account;
60
+        $bankAccount = $transaction->bankAccount?->account;
61
+
62
+        if (! $chartAccount || ! $bankAccount) {
63
+            return;
64
+        }
65 65
 
66 66
         $journalEntries = $transaction->journalEntries;
67 67
 
68 68
         $debitEntry = $journalEntries->where('type', 'debit')->first();
69 69
         $creditEntry = $journalEntries->where('type', 'credit')->first();
70 70
 
71
+        if (! $debitEntry || ! $creditEntry) {
72
+            return;
73
+        }
74
+
71 75
         $debitAccount = $transaction->type === TransactionType::Withdrawal ? $chartAccount : $bankAccount;
72 76
         $creditAccount = $transaction->type === TransactionType::Withdrawal ? $bankAccount : $chartAccount;
73 77
 
74
-        $debitEntry?->update([
75
-            'account_id' => $debitAccount->id,
76
-            'amount' => $transaction->amount,
77
-            'description' => $transaction->description,
78
-        ]);
78
+        $this->updateJournalEntriesForTransaction($debitEntry, $debitAccount, $transaction);
79
+        $this->updateJournalEntriesForTransaction($creditEntry, $creditAccount, $transaction);
80
+    }
79 81
 
80
-        $creditEntry?->update([
81
-            'account_id' => $creditAccount->id,
82
-            'amount' => $transaction->amount,
83
-            'description' => $transaction->description,
84
-        ]);
82
+    protected function hasRelevantChanges(Transaction $transaction): bool
83
+    {
84
+        return $transaction->wasChanged(['amount', 'account_id', 'bank_account_id', 'type']);
85
+    }
86
+
87
+    protected function updateJournalEntriesForTransaction(JournalEntry $journalEntry, Account $account, Transaction $transaction): void
88
+    {
89
+        DB::transaction(static function () use ($journalEntry, $account, $transaction) {
90
+            $journalEntry->update([
91
+                'account_id' => $account->id,
92
+                'amount' => $transaction->amount,
93
+            ]);
94
+        });
85 95
     }
86 96
 
87 97
     /**

+ 9
- 0
app/Providers/AppServiceProvider.php Visa fil

@@ -2,6 +2,8 @@
2 2
 
3 3
 namespace App\Providers;
4 4
 
5
+use App\Contracts\AccountHandler;
6
+use App\Services\AccountService;
5 7
 use BezhanSalleh\PanelSwitch\PanelSwitch;
6 8
 use Filament\Notifications\Livewire\Notifications;
7 9
 use Filament\Support\Assets\Js;
@@ -11,6 +13,13 @@ use Illuminate\Support\ServiceProvider;
11 13
 
12 14
 class AppServiceProvider extends ServiceProvider
13 15
 {
16
+    /**
17
+     * All of the container bindings that should be registered.
18
+     */
19
+    public array $bindings = [
20
+        AccountHandler::class => AccountService::class,
21
+    ];
22
+
14 23
     /**
15 24
      * Register any application services.
16 25
      */

+ 0
- 4
app/Providers/EventServiceProvider.php Visa fil

@@ -12,7 +12,6 @@ use App\Events\PlaidSuccess;
12 12
 use App\Events\StartTransactionImport;
13 13
 use App\Listeners\ConfigureChartOfAccounts;
14 14
 use App\Listeners\ConfigureCompanyDefault;
15
-use App\Listeners\ConfigureCompanyNavigation;
16 15
 use App\Listeners\CreateCompanyDefaults;
17 16
 use App\Listeners\CreateConnectedAccount;
18 17
 use App\Listeners\HandleTransactionImport;
@@ -20,8 +19,6 @@ use App\Listeners\SyncAssociatedModels;
20 19
 use App\Listeners\SyncWithCompanyDefaults;
21 20
 use App\Listeners\UpdateAccountBalances;
22 21
 use App\Listeners\UpdateCurrencyRates;
23
-use App\Models\Setting\Currency;
24
-use App\Observers\CurrencyObserver;
25 22
 use Illuminate\Auth\Events\Registered;
26 23
 use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
27 24
 use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
@@ -45,7 +42,6 @@ class EventServiceProvider extends ServiceProvider
45 42
         ],
46 43
         CompanyConfigured::class => [
47 44
             ConfigureCompanyDefault::class,
48
-            ConfigureCompanyNavigation::class,
49 45
         ],
50 46
         CompanyGenerated::class => [
51 47
             CreateCompanyDefaults::class,

+ 61
- 41
app/Providers/FilamentCompaniesServiceProvider.php Visa fil

@@ -17,25 +17,37 @@ use App\Actions\FilamentCompanies\UpdateCompanyName;
17 17
 use App\Actions\FilamentCompanies\UpdateConnectedAccount;
18 18
 use App\Actions\FilamentCompanies\UpdateUserPassword;
19 19
 use App\Actions\FilamentCompanies\UpdateUserProfileInformation;
20
+use App\Filament\Company\Clusters\Settings;
21
+use App\Filament\Company\Pages\Accounting\AccountChart;
22
+use App\Filament\Company\Pages\Accounting\Transactions;
20 23
 use App\Filament\Company\Pages\CreateCompany;
24
+use App\Filament\Company\Pages\ManageCompany;
25
+use App\Filament\Company\Pages\Reports;
26
+use App\Filament\Company\Pages\Service\ConnectedAccount;
27
+use App\Filament\Company\Pages\Service\LiveCurrency;
28
+use App\Filament\Company\Resources\Banking\AccountResource;
29
+use App\Filament\Company\Resources\Core\DepartmentResource;
30
+use App\Filament\Components\PanelShiftDropdown;
21 31
 use App\Http\Middleware\ConfigureCurrentCompany;
22 32
 use App\Livewire\UpdatePassword;
23 33
 use App\Livewire\UpdateProfileInformation;
24 34
 use App\Models\Company;
35
+use App\Support\FilamentComponentConfigurator;
25 36
 use Exception;
26
-use Filament\Actions\CreateAction;
27
-use Filament\Actions\EditAction;
28
-use Filament\Forms\Components\DatePicker;
29
-use Filament\Forms\Components\DateTimePicker;
37
+use Filament\Actions;
38
+use Filament\Forms;
30 39
 use Filament\Forms\Components\Select;
31 40
 use Filament\Http\Middleware\Authenticate;
32 41
 use Filament\Http\Middleware\DisableBladeIconComponents;
33 42
 use Filament\Http\Middleware\DispatchServingFilamentEvent;
43
+use Filament\Navigation\NavigationBuilder;
44
+use Filament\Navigation\NavigationGroup;
34 45
 use Filament\Pages;
46
+use Filament\Pages\Dashboard;
35 47
 use Filament\Panel;
36 48
 use Filament\PanelProvider;
37 49
 use Filament\Support\Colors\Color;
38
-use Filament\Support\Enums\Alignment;
50
+use Filament\Tables;
39 51
 use Filament\Widgets;
40 52
 use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
41 53
 use Illuminate\Cookie\Middleware\EncryptCookies;
@@ -50,7 +62,6 @@ use Wallo\FilamentCompanies\Enums\Provider;
50 62
 use Wallo\FilamentCompanies\FilamentCompanies;
51 63
 use Wallo\FilamentCompanies\Pages\Auth\Login;
52 64
 use Wallo\FilamentCompanies\Pages\Auth\Register;
53
-use Wallo\FilamentCompanies\Pages\Company\CompanySettings;
54 65
 
55 66
 class FilamentCompaniesServiceProvider extends PanelProvider
56 67
 {
@@ -66,6 +77,7 @@ class FilamentCompaniesServiceProvider extends PanelProvider
66 77
             ->login(Login::class)
67 78
             ->registration(Register::class)
68 79
             ->passwordReset()
80
+            ->tenantMenu(false)
69 81
             ->plugin(
70 82
                 FilamentCompanies::make()
71 83
                     ->userPanel('user')
@@ -87,17 +99,54 @@ class FilamentCompaniesServiceProvider extends PanelProvider
87 99
                         features: [Feature::RememberSession, Feature::ProviderAvatars],
88 100
                     ),
89 101
             )
102
+            ->plugin(
103
+                PanelShiftDropdown::make()
104
+                    ->logoutItem()
105
+                    ->companySettings(),
106
+            )
90 107
             ->colors([
91 108
                 'primary' => Color::Indigo,
92 109
                 'gray' => Color::Gray,
93 110
             ])
111
+            ->navigation(function (NavigationBuilder $builder): NavigationBuilder {
112
+                return $builder
113
+                    ->items([
114
+                        ...Dashboard::getNavigationItems(),
115
+                        ...Reports::getNavigationItems(),
116
+                    ])
117
+                    ->groups([
118
+                        NavigationGroup::make('Accounting')
119
+                            ->localizeLabel()
120
+                            ->icon('heroicon-o-clipboard-document-list')
121
+                            ->extraSidebarAttributes(['class' => 'es-sidebar-group'])
122
+                            ->items([
123
+                                ...AccountChart::getNavigationItems(),
124
+                                ...Transactions::getNavigationItems(),
125
+                            ]),
126
+                        NavigationGroup::make('Banking')
127
+                            ->localizeLabel()
128
+                            ->icon('heroicon-o-building-library')
129
+                            ->items(AccountResource::getNavigationItems()),
130
+                        NavigationGroup::make('HR')
131
+                            ->icon('heroicon-o-user-group')
132
+                            ->items(DepartmentResource::getNavigationItems()),
133
+                        NavigationGroup::make('Services')
134
+                            ->localizeLabel()
135
+                            ->icon('heroicon-o-wrench-screwdriver')
136
+                            ->items([
137
+                                ...ConnectedAccount::getNavigationItems(),
138
+                                ...LiveCurrency::getNavigationItems(),
139
+                            ]),
140
+                    ]);
141
+            })
94 142
             ->viteTheme('resources/css/filament/company/theme.css')
95 143
             ->brandLogo(static fn () => view('components.icons.logo'))
96 144
             ->tenant(Company::class)
97
-            ->tenantProfile(CompanySettings::class)
145
+            ->tenantProfile(ManageCompany::class)
98 146
             ->tenantRegistration(CreateCompany::class)
99 147
             ->discoverResources(in: app_path('Filament/Company/Resources'), for: 'App\\Filament\\Company\\Resources')
100 148
             ->discoverPages(in: app_path('Filament/Company/Pages'), for: 'App\\Filament\\Company\\Pages')
149
+            ->discoverClusters(in: app_path('Filament/Company/Clusters'), for: 'App\\Filament\\Company\\Clusters')
101 150
             ->pages([
102 151
                 Pages\Dashboard::class,
103 152
             ])
@@ -183,42 +232,13 @@ class FilamentCompaniesServiceProvider extends PanelProvider
183 232
     {
184 233
         $this->configureSelect();
185 234
 
186
-        CreateAction::configureUsing(static function (CreateAction $action) {
187
-            $action
188
-                ->createAnother(false)
189
-                ->stickyModalHeader()
190
-                ->stickyModalFooter()
191
-                ->modalFooterActionsAlignment(Alignment::End);
192
-        });
193
-
194
-        DatePicker::configureUsing(static function (DatePicker $component) {
195
-            $component->native(false);
196
-        });
197
-
198
-        DateTimePicker::configureUsing(static function (DateTimePicker $component) {
235
+        Actions\CreateAction::configureUsing(static fn (Actions\CreateAction $action) => FilamentComponentConfigurator::configureActionModals($action));
236
+        Actions\EditAction::configureUsing(static fn (Actions\EditAction $action) => FilamentComponentConfigurator::configureActionModals($action));
237
+        Tables\Actions\EditAction::configureUsing(static fn (Tables\Actions\EditAction $action) => FilamentComponentConfigurator::configureActionModals($action));
238
+        Tables\Actions\CreateAction::configureUsing(static fn (Tables\Actions\CreateAction $action) => FilamentComponentConfigurator::configureActionModals($action));
239
+        Forms\Components\DateTimePicker::configureUsing(static function (Forms\Components\DateTimePicker $component) {
199 240
             $component->native(false);
200 241
         });
201
-
202
-        EditAction::configureUsing(static function (EditAction $action) {
203
-            $action
204
-                ->stickyModalHeader()
205
-                ->stickyModalFooter()
206
-                ->modalFooterActionsAlignment(Alignment::End);
207
-        });
208
-
209
-        \Filament\Tables\Actions\EditAction::configureUsing(static function (\Filament\Tables\Actions\EditAction $action) {
210
-            $action
211
-                ->stickyModalHeader()
212
-                ->stickyModalFooter()
213
-                ->modalFooterActionsAlignment(Alignment::End);
214
-        });
215
-
216
-        \Filament\Tables\Actions\CreateAction::configureUsing(static function (\Filament\Tables\Actions\CreateAction $action) {
217
-            $action
218
-                ->stickyModalHeader()
219
-                ->stickyModalFooter()
220
-                ->modalFooterActionsAlignment(Alignment::End);
221
-        });
222 242
     }
223 243
 
224 244
     /**

+ 27
- 33
app/Providers/TranslationServiceProvider.php Visa fil

@@ -26,46 +26,19 @@ class TranslationServiceProvider extends ServiceProvider
26 26
     public function boot(): void
27 27
     {
28 28
         Field::macro('localizeLabel', function (string | Htmlable | Closure | null $customLabel = null): static {
29
-            if (filled($customLabel)) {
30
-                $label = $customLabel;
31
-            } else {
32
-                $label = $this->getLabel();
33
-
34
-                if (str_ends_with($label, ' id')) {
35
-                    $label = str_replace(' id', '', $label);
36
-                }
37
-
38
-                $label = ucwords($label);
39
-            }
40
-
41
-            $this->label(translate($label));
42
-
43
-            return $this;
29
+            return TranslationServiceProvider::localizeLabelGeneric($this, $customLabel);
44 30
         });
45 31
 
46 32
         Column::macro('localizeLabel', function (string | Htmlable | Closure | null $customLabel = null): static {
47
-            if (filled($customLabel)) {
48
-                $label = $customLabel;
49
-            } else {
50
-                $label = $this->getLabel();
51
-
52
-                if (str_ends_with($label, ' id')) {
53
-                    $label = str_replace(' id', '', $label);
54
-                }
55
-
56
-                $label = ucwords($label);
57
-            }
58
-
59
-            $this->label(translate($label));
60
-
61
-            return $this;
33
+            return TranslationServiceProvider::localizeLabelGeneric($this, $customLabel);
62 34
         });
63 35
 
64 36
         NavigationGroup::macro('localizeLabel', function () {
65 37
             $label = $this->getLabel();
66 38
 
67
-            if ($label !== 'HR' && filled($label)) {
68
-                $this->label(translate($label));
39
+            if (filled($label)) {
40
+                $translatedLabel = translate($label);
41
+                $this->label(ucfirst($translatedLabel));
69 42
             }
70 43
 
71 44
             return $this;
@@ -74,9 +47,30 @@ class TranslationServiceProvider extends ServiceProvider
74 47
         Tab::macro('localizeLabel', function () {
75 48
             $label = $this->getLabel();
76 49
 
77
-            $this->label(ucfirst(translate($label)));
50
+            if (filled($label)) {
51
+                $translatedLabel = translate($label);
52
+                $this->label(ucfirst($translatedLabel));
53
+            }
78 54
 
79 55
             return $this;
80 56
         });
81 57
     }
58
+
59
+    public static function localizeLabelGeneric($object, string | Htmlable | Closure | null $customLabel = null)
60
+    {
61
+        $label = filled($customLabel) ? $customLabel : static::processedLabel($object->getLabel());
62
+
63
+        $object->label(translate($label));
64
+
65
+        return $object;
66
+    }
67
+
68
+    public static function processedLabel(Htmlable | null | string $label): string
69
+    {
70
+        if (str_ends_with($label, ' id')) {
71
+            $label = str_replace(' id', '', $label);
72
+        }
73
+
74
+        return ucwords($label);
75
+    }
82 76
 }

+ 0
- 12
app/Repositories/Accounting/AccountSubtypeRepository.php Visa fil

@@ -2,24 +2,12 @@
2 2
 
3 3
 namespace App\Repositories\Accounting;
4 4
 
5
-use App\Enums\BankAccountType;
6 5
 use App\Models\Accounting\AccountSubtype;
7 6
 use App\Models\Company;
8 7
 use Illuminate\Database\Eloquent\ModelNotFoundException;
9 8
 
10 9
 class AccountSubtypeRepository
11 10
 {
12
-    public function getDefaultAccountSubtypeByType(BankAccountType $type): string
13
-    {
14
-        return match ($type) {
15
-            BankAccountType::Depository => 'Cash and Cash Equivalents',
16
-            BankAccountType::Credit => 'Short-Term Borrowings',
17
-            BankAccountType::Loan => 'Long-Term Borrowings',
18
-            BankAccountType::Investment => 'Long-Term Investments',
19
-            BankAccountType::Other => 'Other Current Assets',
20
-        };
21
-    }
22
-
23 11
     public function findAccountSubtypeByNameOrFail(Company $company, $name): AccountSubtype
24 12
     {
25 13
         $accountSubtype = $company->accountSubtypes()

+ 3
- 2
app/Services/AccountService.php Visa fil

@@ -3,6 +3,7 @@
3 3
 namespace App\Services;
4 4
 
5 5
 use Akaunting\Money\Money;
6
+use App\Contracts\AccountHandler;
6 7
 use App\DTO\AccountBalanceDTO;
7 8
 use App\DTO\AccountBalanceReportDTO;
8 9
 use App\DTO\AccountCategoryDTO;
@@ -15,7 +16,7 @@ use App\Repositories\Accounting\JournalEntryRepository;
15 16
 use App\ValueObjects\BalanceValue;
16 17
 use Illuminate\Database\Eloquent\Collection;
17 18
 
18
-class AccountService
19
+class AccountService implements AccountHandler
19 20
 {
20 21
     protected JournalEntryRepository $journalEntryRepository;
21 22
 
@@ -191,7 +192,7 @@ class AccountService
191 192
         return new AccountBalanceReportDTO($accountCategories, $formattedReportTotalBalances);
192 193
     }
193 194
 
194
-    public function getTotalBalanceForAllBankAccount(string $startDate, string $endDate): BalanceValue
195
+    public function getTotalBalanceForAllBankAccounts(string $startDate, string $endDate): BalanceValue
195 196
     {
196 197
         $bankAccountsAccounts = Account::where('accountable_type', BankAccount::class)
197 198
             ->get();

+ 1
- 1
app/Services/ConnectedBankAccountService.php Visa fil

@@ -41,7 +41,7 @@ class ConnectedBankAccountService
41 41
 
42 42
     public function processNewAccountForBank(BankAccount $bankAccount, Company $company, ConnectedBankAccount $connectedBankAccount): Account
43 43
     {
44
-        $defaultAccountSubtypeName = $this->accountSubtypeRepository->getDefaultAccountSubtypeByType($bankAccount->type);
44
+        $defaultAccountSubtypeName = $bankAccount->type->getDefaultSubtype();
45 45
 
46 46
         $accountSubtype = $this->accountSubtypeRepository->findAccountSubtypeByNameOrFail($company, $defaultAccountSubtypeName);
47 47
 

+ 22
- 0
app/Support/FilamentComponentConfigurator.php Visa fil

@@ -0,0 +1,22 @@
1
+<?php
2
+
3
+namespace App\Support;
4
+
5
+use Filament\Actions\CreateAction;
6
+use Filament\Actions\MountableAction;
7
+use Filament\Support\Enums\Alignment;
8
+
9
+class FilamentComponentConfigurator
10
+{
11
+    public static function configureActionModals(MountableAction $action): void
12
+    {
13
+        $action
14
+            ->stickyModalHeader()
15
+            ->stickyModalFooter()
16
+            ->modalFooterActionsAlignment(Alignment::End);
17
+
18
+        if ($action instanceof CreateAction) {
19
+            $action->createAnother(false);
20
+        }
21
+    }
22
+}

+ 17
- 0
app/Traits/Blamable.php Visa fil

@@ -2,7 +2,9 @@
2 2
 
3 3
 namespace App\Traits;
4 4
 
5
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
5 6
 use Illuminate\Support\Facades\Auth;
7
+use Wallo\FilamentCompanies\FilamentCompanies;
6 8
 
7 9
 trait Blamable
8 10
 {
@@ -19,4 +21,19 @@ trait Blamable
19 21
             $model->updated_by = $auth;
20 22
         });
21 23
     }
24
+
25
+    public function createdBy(): BelongsTo
26
+    {
27
+        return $this->belongsTo($this->userModel(), 'created_by');
28
+    }
29
+
30
+    public function updatedBy(): BelongsTo
31
+    {
32
+        return $this->belongsTo($this->userModel(), 'updated_by');
33
+    }
34
+
35
+    protected function userModel(): string
36
+    {
37
+        return FilamentCompanies::userModel();
38
+    }
22 39
 }

+ 12
- 7
app/Traits/CompanyOwned.php Visa fil

@@ -3,8 +3,11 @@
3 3
 namespace App\Traits;
4 4
 
5 5
 use App\Scopes\CurrentCompanyScope;
6
-use Filament\Notifications\Notification;
6
+use Illuminate\Database\Eloquent\ModelNotFoundException;
7
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
7 8
 use Illuminate\Support\Facades\Auth;
9
+use Illuminate\Support\Facades\Log;
10
+use Wallo\FilamentCompanies\FilamentCompanies;
8 11
 
9 12
 trait CompanyOwned
10 13
 {
@@ -15,16 +18,18 @@ trait CompanyOwned
15 18
                 if (Auth::check() && Auth::user()->currentCompany) {
16 19
                     $model->company_id = Auth::user()->currentCompany->id;
17 20
                 } else {
18
-                    Notification::make()
19
-                        ->danger()
20
-                        ->title('Oops! Unable to Assign Company')
21
-                        ->body('We encountered an issue while creating the record. Please ensure you are logged in and have a valid company associated with your account.')
22
-                        ->persistent()
23
-                        ->send();
21
+                    Log::info('CompanyOwned trait: No company_id set on model ' . get_class($model) . ' ' . $model->id);
22
+
23
+                    throw new ModelNotFoundException('CompanyOwned trait: No company_id set on model ' . get_class($model) . ' ' . $model->id);
24 24
                 }
25 25
             }
26 26
         });
27 27
 
28 28
         static::addGlobalScope(new CurrentCompanyScope);
29 29
     }
30
+
31
+    public function company(): BelongsTo
32
+    {
33
+        return $this->belongsTo(FilamentCompanies::companyModel(), 'company_id');
34
+    }
30 35
 }

+ 1
- 2
composer.json Visa fil

@@ -19,7 +19,6 @@
19 19
         "barryvdh/laravel-dompdf": "^2.1",
20 20
         "bezhansalleh/filament-panel-switch": "^1.0",
21 21
         "filament/filament": "^3.2.29",
22
-        "filament/spatie-laravel-tags-plugin": "^3.0-stable",
23 22
         "guava/filament-clusters": "^1.1",
24 23
         "guzzlehttp/guzzle": "^7.8",
25 24
         "laravel/framework": "^11.0",
@@ -61,7 +60,7 @@
61 60
         ],
62 61
         "post-update-cmd": [
63 62
             "@php artisan vendor:publish --tag=laravel-assets --ansi --force",
64
-            "npm run build || echo \"Skipping npm run build (npm not available)\""
63
+            "npm up && npm run build || echo \"Skipping npm update and build (npm not available)\""
65 64
         ],
66 65
         "post-root-package-install": [
67 66
             "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""

+ 192
- 452
composer.lock
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


+ 0
- 36
database/migrations/2023_09_04_105800_create_tag_tables.php Visa fil

@@ -1,36 +0,0 @@
1
-<?php
2
-
3
-use Illuminate\Database\Migrations\Migration;
4
-use Illuminate\Database\Schema\Blueprint;
5
-use Illuminate\Support\Facades\Schema;
6
-
7
-return new class extends Migration
8
-{
9
-    public function up(): void
10
-    {
11
-        Schema::create('tags', function (Blueprint $table) {
12
-            $table->id();
13
-
14
-            $table->json('name');
15
-            $table->json('slug');
16
-            $table->string('type')->nullable();
17
-            $table->integer('order_column')->nullable();
18
-
19
-            $table->timestamps();
20
-        });
21
-
22
-        Schema::create('taggables', function (Blueprint $table) {
23
-            $table->foreignId('tag_id')->constrained()->cascadeOnDelete();
24
-
25
-            $table->morphs('taggable');
26
-
27
-            $table->unique(['tag_id', 'taggable_id', 'taggable_type']);
28
-        });
29
-    }
30
-
31
-    public function down(): void
32
-    {
33
-        Schema::dropIfExists('taggables');
34
-        Schema::dropIfExists('tags');
35
-    }
36
-};

+ 80
- 80
package-lock.json Visa fil

@@ -507,9 +507,9 @@
507 507
             }
508 508
         },
509 509
         "node_modules/@rollup/rollup-android-arm-eabi": {
510
-            "version": "4.13.2",
511
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.2.tgz",
512
-            "integrity": "sha512-3XFIDKWMFZrMnao1mJhnOT1h2g0169Os848NhhmGweEcfJ4rCi+3yMCOLG4zA61rbJdkcrM/DjVZm9Hg5p5w7g==",
510
+            "version": "4.14.1",
511
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.1.tgz",
512
+            "integrity": "sha512-fH8/o8nSUek8ceQnT7K4EQbSiV7jgkHq81m9lWZFIXjJ7lJzpWXbQFpT/Zh6OZYnpFykvzC3fbEvEAFZu03dPA==",
513 513
             "cpu": [
514 514
                 "arm"
515 515
             ],
@@ -520,9 +520,9 @@
520 520
             ]
521 521
         },
522 522
         "node_modules/@rollup/rollup-android-arm64": {
523
-            "version": "4.13.2",
524
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.2.tgz",
525
-            "integrity": "sha512-GdxxXbAuM7Y/YQM9/TwwP+L0omeE/lJAR1J+olu36c3LqqZEBdsIWeQ91KBe6nxwOnb06Xh7JS2U5ooWU5/LgQ==",
523
+            "version": "4.14.1",
524
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.1.tgz",
525
+            "integrity": "sha512-Y/9OHLjzkunF+KGEoJr3heiD5X9OLa8sbT1lm0NYeKyaM3oMhhQFvPB0bNZYJwlq93j8Z6wSxh9+cyKQaxS7PQ==",
526 526
             "cpu": [
527 527
                 "arm64"
528 528
             ],
@@ -533,9 +533,9 @@
533 533
             ]
534 534
         },
535 535
         "node_modules/@rollup/rollup-darwin-arm64": {
536
-            "version": "4.13.2",
537
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.2.tgz",
538
-            "integrity": "sha512-mCMlpzlBgOTdaFs83I4XRr8wNPveJiJX1RLfv4hggyIVhfB5mJfN4P8Z6yKh+oE4Luz+qq1P3kVdWrCKcMYrrA==",
536
+            "version": "4.14.1",
537
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.1.tgz",
538
+            "integrity": "sha512-+kecg3FY84WadgcuSVm6llrABOdQAEbNdnpi5X3UwWiFVhZIZvKgGrF7kmLguvxHNQy+UuRV66cLVl3S+Rkt+Q==",
539 539
             "cpu": [
540 540
                 "arm64"
541 541
             ],
@@ -546,9 +546,9 @@
546 546
             ]
547 547
         },
548 548
         "node_modules/@rollup/rollup-darwin-x64": {
549
-            "version": "4.13.2",
550
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.2.tgz",
551
-            "integrity": "sha512-yUoEvnH0FBef/NbB1u6d3HNGyruAKnN74LrPAfDQL3O32e3k3OSfLrPgSJmgb3PJrBZWfPyt6m4ZhAFa2nZp2A==",
549
+            "version": "4.14.1",
550
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.1.tgz",
551
+            "integrity": "sha512-2pYRzEjVqq2TB/UNv47BV/8vQiXkFGVmPFwJb+1E0IFFZbIX8/jo1olxqqMbo6xCXf8kabANhp5bzCij2tFLUA==",
552 552
             "cpu": [
553 553
                 "x64"
554 554
             ],
@@ -559,9 +559,9 @@
559 559
             ]
560 560
         },
561 561
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
562
-            "version": "4.13.2",
563
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.2.tgz",
564
-            "integrity": "sha512-GYbLs5ErswU/Xs7aGXqzc3RrdEjKdmoCrgzhJWyFL0r5fL3qd1NPcDKDowDnmcoSiGJeU68/Vy+OMUluRxPiLQ==",
562
+            "version": "4.14.1",
563
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.1.tgz",
564
+            "integrity": "sha512-mS6wQ6Do6/wmrF9aTFVpIJ3/IDXhg1EZcQFYHZLHqw6AzMBjTHWnCG35HxSqUNphh0EHqSM6wRTT8HsL1C0x5g==",
565 565
             "cpu": [
566 566
                 "arm"
567 567
             ],
@@ -572,9 +572,9 @@
572 572
             ]
573 573
         },
574 574
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
575
-            "version": "4.13.2",
576
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.2.tgz",
577
-            "integrity": "sha512-L1+D8/wqGnKQIlh4Zre9i4R4b4noxzH5DDciyahX4oOz62CphY7WDWqJoQ66zNR4oScLNOqQJfNSIAe/6TPUmQ==",
575
+            "version": "4.14.1",
576
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.1.tgz",
577
+            "integrity": "sha512-p9rGKYkHdFMzhckOTFubfxgyIO1vw//7IIjBBRVzyZebWlzRLeNhqxuSaZ7kCEKVkm/kuC9fVRW9HkC/zNRG2w==",
578 578
             "cpu": [
579 579
                 "arm64"
580 580
             ],
@@ -585,9 +585,9 @@
585 585
             ]
586 586
         },
587 587
         "node_modules/@rollup/rollup-linux-arm64-musl": {
588
-            "version": "4.13.2",
589
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.2.tgz",
590
-            "integrity": "sha512-tK5eoKFkXdz6vjfkSTCupUzCo40xueTOiOO6PeEIadlNBkadH1wNOH8ILCPIl8by/Gmb5AGAeQOFeLev7iZDOA==",
588
+            "version": "4.14.1",
589
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.1.tgz",
590
+            "integrity": "sha512-nDY6Yz5xS/Y4M2i9JLQd3Rofh5OR8Bn8qe3Mv/qCVpHFlwtZSBYSPaU4mrGazWkXrdQ98GB//H0BirGR/SKFSw==",
591 591
             "cpu": [
592 592
                 "arm64"
593 593
             ],
@@ -598,9 +598,9 @@
598 598
             ]
599 599
         },
600 600
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
601
-            "version": "4.13.2",
602
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.13.2.tgz",
603
-            "integrity": "sha512-zvXvAUGGEYi6tYhcDmb9wlOckVbuD+7z3mzInCSTACJ4DQrdSLPNUeDIcAQW39M3q6PDquqLWu7pnO39uSMRzQ==",
601
+            "version": "4.14.1",
602
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.1.tgz",
603
+            "integrity": "sha512-im7HE4VBL+aDswvcmfx88Mp1soqL9OBsdDBU8NqDEYtkri0qV0THhQsvZtZeNNlLeCUQ16PZyv7cqutjDF35qw==",
604 604
             "cpu": [
605 605
                 "ppc64le"
606 606
             ],
@@ -611,9 +611,9 @@
611 611
             ]
612 612
         },
613 613
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
614
-            "version": "4.13.2",
615
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.2.tgz",
616
-            "integrity": "sha512-C3GSKvMtdudHCN5HdmAMSRYR2kkhgdOfye4w0xzyii7lebVr4riCgmM6lRiSCnJn2w1Xz7ZZzHKuLrjx5620kw==",
614
+            "version": "4.14.1",
615
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.1.tgz",
616
+            "integrity": "sha512-RWdiHuAxWmzPJgaHJdpvUUlDz8sdQz4P2uv367T2JocdDa98iRw2UjIJ4QxSyt077mXZT2X6pKfT2iYtVEvOFw==",
617 617
             "cpu": [
618 618
                 "riscv64"
619 619
             ],
@@ -624,9 +624,9 @@
624 624
             ]
625 625
         },
626 626
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
627
-            "version": "4.13.2",
628
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.13.2.tgz",
629
-            "integrity": "sha512-l4U0KDFwzD36j7HdfJ5/TveEQ1fUTjFFQP5qIt9gBqBgu1G8/kCaq5Ok05kd5TG9F8Lltf3MoYsUMw3rNlJ0Yg==",
627
+            "version": "4.14.1",
628
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.1.tgz",
629
+            "integrity": "sha512-VMgaGQ5zRX6ZqV/fas65/sUGc9cPmsntq2FiGmayW9KMNfWVG/j0BAqImvU4KTeOOgYSf1F+k6at1UfNONuNjA==",
630 630
             "cpu": [
631 631
                 "s390x"
632 632
             ],
@@ -637,9 +637,9 @@
637 637
             ]
638 638
         },
639 639
         "node_modules/@rollup/rollup-linux-x64-gnu": {
640
-            "version": "4.13.2",
641
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.2.tgz",
642
-            "integrity": "sha512-xXMLUAMzrtsvh3cZ448vbXqlUa7ZL8z0MwHp63K2IIID2+DeP5iWIT6g1SN7hg1VxPzqx0xZdiDM9l4n9LRU1A==",
640
+            "version": "4.14.1",
641
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.1.tgz",
642
+            "integrity": "sha512-9Q7DGjZN+hTdJomaQ3Iub4m6VPu1r94bmK2z3UeWP3dGUecRC54tmVu9vKHTm1bOt3ASoYtEz6JSRLFzrysKlA==",
643 643
             "cpu": [
644 644
                 "x64"
645 645
             ],
@@ -650,9 +650,9 @@
650 650
             ]
651 651
         },
652 652
         "node_modules/@rollup/rollup-linux-x64-musl": {
653
-            "version": "4.13.2",
654
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.2.tgz",
655
-            "integrity": "sha512-M/JYAWickafUijWPai4ehrjzVPKRCyDb1SLuO+ZyPfoXgeCEAlgPkNXewFZx0zcnoIe3ay4UjXIMdXQXOZXWqA==",
653
+            "version": "4.14.1",
654
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.1.tgz",
655
+            "integrity": "sha512-JNEG/Ti55413SsreTguSx0LOVKX902OfXIKVg+TCXO6Gjans/k9O6ww9q3oLGjNDaTLxM+IHFMeXy/0RXL5R/g==",
656 656
             "cpu": [
657 657
                 "x64"
658 658
             ],
@@ -663,9 +663,9 @@
663 663
             ]
664 664
         },
665 665
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
666
-            "version": "4.13.2",
667
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.2.tgz",
668
-            "integrity": "sha512-2YWwoVg9KRkIKaXSh0mz3NmfurpmYoBBTAXA9qt7VXk0Xy12PoOP40EFuau+ajgALbbhi4uTj3tSG3tVseCjuA==",
666
+            "version": "4.14.1",
667
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.1.tgz",
668
+            "integrity": "sha512-ryS22I9y0mumlLNwDFYZRDFLwWh3aKaC72CWjFcFvxK0U6v/mOkM5Up1bTbCRAhv3kEIwW2ajROegCIQViUCeA==",
669 669
             "cpu": [
670 670
                 "arm64"
671 671
             ],
@@ -676,9 +676,9 @@
676 676
             ]
677 677
         },
678 678
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
679
-            "version": "4.13.2",
680
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.2.tgz",
681
-            "integrity": "sha512-2FSsE9aQ6OWD20E498NYKEQLneShWes0NGMPQwxWOdws35qQXH+FplabOSP5zEe1pVjurSDOGEVCE2agFwSEsw==",
679
+            "version": "4.14.1",
680
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.1.tgz",
681
+            "integrity": "sha512-TdloItiGk+T0mTxKx7Hp279xy30LspMso+GzQvV2maYePMAWdmrzqSNZhUpPj3CGw12aGj57I026PgLCTu8CGg==",
682 682
             "cpu": [
683 683
                 "ia32"
684 684
             ],
@@ -689,9 +689,9 @@
689 689
             ]
690 690
         },
691 691
         "node_modules/@rollup/rollup-win32-x64-msvc": {
692
-            "version": "4.13.2",
693
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.2.tgz",
694
-            "integrity": "sha512-7h7J2nokcdPePdKykd8wtc8QqqkqxIrUz7MHj6aNr8waBRU//NLDVnNjQnqQO6fqtjrtCdftpbTuOKAyrAQETQ==",
692
+            "version": "4.14.1",
693
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.1.tgz",
694
+            "integrity": "sha512-wQGI+LY/Py20zdUPq+XCem7JcPOyzIJBm3dli+56DJsQOHbnXZFEwgmnC6el1TPAfC8lBT3m+z69RmLykNUbew==",
695 695
             "cpu": [
696 696
                 "x64"
697 697
             ],
@@ -918,9 +918,9 @@
918 918
             }
919 919
         },
920 920
         "node_modules/caniuse-lite": {
921
-            "version": "1.0.30001600",
922
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz",
923
-            "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==",
921
+            "version": "1.0.30001607",
922
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz",
923
+            "integrity": "sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==",
924 924
             "dev": true,
925 925
             "funding": [
926 926
                 {
@@ -1066,9 +1066,9 @@
1066 1066
             "dev": true
1067 1067
         },
1068 1068
         "node_modules/electron-to-chromium": {
1069
-            "version": "1.4.719",
1070
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.719.tgz",
1071
-            "integrity": "sha512-FbWy2Q2YgdFzkFUW/W5jBjE9dj+804+98E4Pup78JBPnbdb3pv6IneY2JCPKdeKLh3AOKHQeYf+KwLr7mxGh6Q==",
1069
+            "version": "1.4.730",
1070
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.730.tgz",
1071
+            "integrity": "sha512-oJRPo82XEqtQAobHpJIR3zW5YO3sSRRkPz2an4yxi1UvqhsGm54vR/wzTFV74a3soDOJ8CKW7ajOOX5ESzddwg==",
1072 1072
             "dev": true
1073 1073
         },
1074 1074
         "node_modules/emoji-regex": {
@@ -1820,9 +1820,9 @@
1820 1820
             }
1821 1821
         },
1822 1822
         "node_modules/postcss-nesting": {
1823
-            "version": "12.1.0",
1824
-            "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.0.tgz",
1825
-            "integrity": "sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==",
1823
+            "version": "12.1.1",
1824
+            "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.1.1.tgz",
1825
+            "integrity": "sha512-qc74KvIAQNa5ujZKG1UV286dhaDW6basbUy2i9AzNU/T8C9hpvGu9NZzm1SfePe2yP7sPYgpA8d4sPVopn2Hhw==",
1826 1826
             "dev": true,
1827 1827
             "funding": [
1828 1828
                 {
@@ -1836,7 +1836,7 @@
1836 1836
             ],
1837 1837
             "dependencies": {
1838 1838
                 "@csstools/selector-resolve-nested": "^1.1.0",
1839
-                "@csstools/selector-specificity": "^3.0.2",
1839
+                "@csstools/selector-specificity": "^3.0.3",
1840 1840
                 "postcss-selector-parser": "^6.0.13"
1841 1841
             },
1842 1842
             "engines": {
@@ -1869,9 +1869,9 @@
1869 1869
             }
1870 1870
         },
1871 1871
         "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": {
1872
-            "version": "3.0.2",
1873
-            "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.2.tgz",
1874
-            "integrity": "sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==",
1872
+            "version": "3.0.3",
1873
+            "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz",
1874
+            "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==",
1875 1875
             "dev": true,
1876 1876
             "funding": [
1877 1877
                 {
@@ -1997,9 +1997,9 @@
1997 1997
             }
1998 1998
         },
1999 1999
         "node_modules/rollup": {
2000
-            "version": "4.13.2",
2001
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.2.tgz",
2002
-            "integrity": "sha512-MIlLgsdMprDBXC+4hsPgzWUasLO9CE4zOkj/u6j+Z6j5A4zRY+CtiXAdJyPtgCsc42g658Aeh1DlrdVEJhsL2g==",
2000
+            "version": "4.14.1",
2001
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.1.tgz",
2002
+            "integrity": "sha512-4LnHSdd3QK2pa1J6dFbfm1HN0D7vSK/ZuZTsdyUAlA6Rr1yTouUTL13HaDOGJVgby461AhrNGBS7sCGXXtT+SA==",
2003 2003
             "dev": true,
2004 2004
             "dependencies": {
2005 2005
                 "@types/estree": "1.0.5"
@@ -2012,21 +2012,21 @@
2012 2012
                 "npm": ">=8.0.0"
2013 2013
             },
2014 2014
             "optionalDependencies": {
2015
-                "@rollup/rollup-android-arm-eabi": "4.13.2",
2016
-                "@rollup/rollup-android-arm64": "4.13.2",
2017
-                "@rollup/rollup-darwin-arm64": "4.13.2",
2018
-                "@rollup/rollup-darwin-x64": "4.13.2",
2019
-                "@rollup/rollup-linux-arm-gnueabihf": "4.13.2",
2020
-                "@rollup/rollup-linux-arm64-gnu": "4.13.2",
2021
-                "@rollup/rollup-linux-arm64-musl": "4.13.2",
2022
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.13.2",
2023
-                "@rollup/rollup-linux-riscv64-gnu": "4.13.2",
2024
-                "@rollup/rollup-linux-s390x-gnu": "4.13.2",
2025
-                "@rollup/rollup-linux-x64-gnu": "4.13.2",
2026
-                "@rollup/rollup-linux-x64-musl": "4.13.2",
2027
-                "@rollup/rollup-win32-arm64-msvc": "4.13.2",
2028
-                "@rollup/rollup-win32-ia32-msvc": "4.13.2",
2029
-                "@rollup/rollup-win32-x64-msvc": "4.13.2",
2015
+                "@rollup/rollup-android-arm-eabi": "4.14.1",
2016
+                "@rollup/rollup-android-arm64": "4.14.1",
2017
+                "@rollup/rollup-darwin-arm64": "4.14.1",
2018
+                "@rollup/rollup-darwin-x64": "4.14.1",
2019
+                "@rollup/rollup-linux-arm-gnueabihf": "4.14.1",
2020
+                "@rollup/rollup-linux-arm64-gnu": "4.14.1",
2021
+                "@rollup/rollup-linux-arm64-musl": "4.14.1",
2022
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.14.1",
2023
+                "@rollup/rollup-linux-riscv64-gnu": "4.14.1",
2024
+                "@rollup/rollup-linux-s390x-gnu": "4.14.1",
2025
+                "@rollup/rollup-linux-x64-gnu": "4.14.1",
2026
+                "@rollup/rollup-linux-x64-musl": "4.14.1",
2027
+                "@rollup/rollup-win32-arm64-msvc": "4.14.1",
2028
+                "@rollup/rollup-win32-ia32-msvc": "4.14.1",
2029
+                "@rollup/rollup-win32-x64-msvc": "4.14.1",
2030 2030
                 "fsevents": "~2.3.2"
2031 2031
             }
2032 2032
         },
@@ -2351,13 +2351,13 @@
2351 2351
             "dev": true
2352 2352
         },
2353 2353
         "node_modules/vite": {
2354
-            "version": "5.2.6",
2355
-            "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz",
2356
-            "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==",
2354
+            "version": "5.2.8",
2355
+            "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz",
2356
+            "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
2357 2357
             "dev": true,
2358 2358
             "dependencies": {
2359 2359
                 "esbuild": "^0.20.1",
2360
-                "postcss": "^8.4.36",
2360
+                "postcss": "^8.4.38",
2361 2361
                 "rollup": "^4.13.0"
2362 2362
             },
2363 2363
             "bin": {

+ 3
- 0
resources/css/filament/company/tailwind.config.js Visa fil

@@ -20,6 +20,9 @@ export default {
20 20
                 white: '#F3F4F6',
21 21
                 platinum: '#E8E9EB',
22 22
             },
23
+            transitionTimingFunction: {
24
+                'ease-smooth': 'cubic-bezier(0.08, 0.52, 0.52, 1)',
25
+            }
23 26
         }
24 27
     }
25 28
 }

+ 13
- 132
resources/css/filament/company/theme.css Visa fil

@@ -8,6 +8,19 @@
8 8
     @apply w-full;
9 9
 }
10 10
 
11
+.choices:focus-visible {
12
+    outline: none;
13
+}
14
+
15
+.choices__group {
16
+    color: rgba(var(--gray-900), 1);
17
+    font-weight: bold;
18
+}
19
+
20
+.choices[data-type="select-one"] .choices__inner {
21
+    height: 2.25rem;
22
+}
23
+
11 24
 .table-repeater-container {
12 25
     @apply rounded-none ring-0;
13 26
 }
@@ -78,10 +91,6 @@
78 91
     }
79 92
 }
80 93
 
81
-.choices:focus-visible {
82
-    outline: none;
83
-}
84
-
85 94
 .es-table__header-ctn, .es-table__footer-ctn {
86 95
     @apply divide-y divide-gray-200 dark:divide-white/10 h-12;
87 96
 }
@@ -114,11 +123,6 @@
114 123
     padding-right: 3rem;
115 124
 }
116 125
 
117
-.choices__group {
118
-    color: rgba(var(--gray-900), 1);
119
-    font-weight: bold;
120
-}
121
-
122 126
 .connected-account-header .fi-icon-btn.fi-ac-icon-btn-action {
123 127
     @apply text-primary-500 hover:text-danger-600 focus-visible:text-danger-600 focus-visible:ring-danger-500 dark:text-primary-400 dark:hover:text-danger-300 dark:focus-visible:text-danger-300 dark:focus-visible:ring-danger-500;
124 128
 }
@@ -183,18 +187,6 @@
183 187
     transition: background-color 0.3s, top 0.3s;
184 188
 }
185 189
 
186
-.fi-topbar > nav {
187
-    @apply relative flex justify-center;
188
-
189
-    > ul {
190
-        @apply absolute -translate-x-2/4 gap-x-0 left-2/4;
191
-    }
192
-
193
-    > div {
194
-        @apply static;
195
-    }
196
-}
197
-
198 190
 .fi-topbar > nav.topbar-hovered, .fi-sidebar-header.topbar-hovered {
199 191
     background-color: rgba(255, 255, 255, 0.75) !important;
200 192
 }
@@ -211,117 +203,6 @@
211 203
     background-color: rgba(10, 16, 33, 0.5) !important;
212 204
 }
213 205
 
214
-.fi-dropdown.fi-topbar-dropdown .fi-dropdown-panel {
215
-    transition: max-width 0.3s linear 0.1s, opacity 0.1s linear 0.1s;
216
-    @apply absolute -translate-x-1/2 left-1/2 !important;
217
-}
218
-
219
-.fi-topbar-item > * {
220
-    @apply h-16 rounded-none !bg-transparent border-b-2 border-transparent;
221
-}
222
-
223
-.fi-topbar-item > button > svg {
224
-    transition: transform 0.1s ease-in-out, color 0.1s ease-in-out;
225
-}
226
-
227
-.fi-topbar-item-active {
228
-    & > a, & > button {
229
-        @apply border-primary-600 dark:border-primary-400;
230
-    }
231
-
232
-    > button {
233
-        @apply text-gray-700 dark:text-gray-200;
234
-    }
235
-
236
-    > button > svg {
237
-        @apply text-gray-400 dark:text-gray-500;
238
-    }
239
-}
240
-
241
-.fi-topbar-item > a:hover, a:focus-visible {
242
-    @apply text-primary-600 dark:text-primary-400 border-primary-600 dark:border-primary-400;
243
-
244
-    > svg {
245
-        @apply text-primary-500;
246
-    }
247
-}
248
-
249
-.fi-topbar-dropdown[aria-expanded="true"], .fi-topbar-dropdown[aria-expanded="false"] .fi-dropdown-trigger[aria-expanded="true"] {
250
-    .fi-topbar-item > button {
251
-        @apply text-primary-600 dark:text-primary-400 border-primary-600 dark:border-primary-400 !important;
252
-
253
-        > svg {
254
-            @apply rotate-180 text-primary-500;
255
-        }
256
-    }
257
-}
258
-
259
-.menu-groups {
260
-    @apply flex flex-row relative transition-[unset] m-0 px-12 py-9;
261
-
262
-    .menu-group {
263
-        @apply flex flex-col justify-between relative z-[3] mx-2.5 my-0 p-0;
264
-    }
265
-}
266
-
267
-.submenu-wrap {
268
-    .submenu {
269
-        @apply flex flex-wrap m-0 p-0;
270
-    }
271
-
272
-    .submenu.cols-1 {
273
-        @apply w-60;
274
-    }
275
-
276
-    .menu-label, .menu-label-invisible-spacer {
277
-        @apply text-gray-700 dark:text-gray-200 text-base font-medium mb-4 pb-4 border-b border-gray-200 dark:border-gray-700 min-h-[2.5625rem];
278
-    }
279
-
280
-    .menu-label-invisible-spacer {
281
-        @apply invisible;
282
-    }
283
-}
284
-
285
-.menu-item {
286
-    @apply cursor-pointer -left-4 leading-tight relative w-[calc(100%_-_10px)] p-2;
287
-}
288
-
289
-.fi-topbar-dropdown-list-item {
290
-    @apply flex justify-between relative transition-[left] duration-200 z-[2] rounded-none left-0;
291
-
292
-    &::after {
293
-        @apply bg-primary-600 dark:bg-primary-400 content-[''] block h-0 left-[-1rem] absolute transition-all duration-300 w-px top-[calc(100%_+_0.5rem)];
294
-    }
295
-
296
-    &:hover {
297
-        @apply left-4 !bg-transparent;
298
-    }
299
-
300
-    &:hover > span {
301
-        @apply text-primary-600 dark:text-primary-400;
302
-    }
303
-
304
-    &:hover::after {
305
-        @apply -top-2 h-[calc(100%+1rem)];
306
-    }
307
-
308
-    &:hover .bg {
309
-        @apply w-full;
310
-    }
311
-
312
-    > span {
313
-        @apply flex flex-col relative z-[1] font-medium;
314
-    }
315
-
316
-    .bg {
317
-        @apply h-[calc(100%+1rem)] -left-4 absolute -top-2 transition-[width] duration-200 delay-100 bg-gradient-to-r from-primary-600/10 dark:from-primary-400/10;
318
-    }
319
-}
320
-
321
-.choices[data-type="select-one"] .choices__inner {
322
-    height: 2.25rem;
323
-}
324
-
325 206
 .fi-badge {
326 207
     display: inline-flex;
327 208
 }

+ 0
- 12
resources/css/filament/user/theme.css Visa fil

@@ -62,18 +62,6 @@
62 62
     transition: background-color 0.3s, top 0.3s;
63 63
 }
64 64
 
65
-.fi-topbar > nav {
66
-    @apply relative flex justify-center;
67
-
68
-    > ul {
69
-        @apply absolute -translate-x-2/4 gap-x-0 left-2/4;
70
-    }
71
-
72
-    > div {
73
-        @apply static;
74
-    }
75
-}
76
-
77 65
 .fi-topbar > nav.topbar-hovered, .fi-sidebar-header.topbar-hovered {
78 66
     background-color: rgba(255, 255, 255, 0.75) !important;
79 67
 }

+ 165
- 220
resources/data/lang/ar.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "جنرال لواء",
3
-    "End Date": "تاريخ النهاية",
4
-    "Percentage": "النسبة المئوية",
5
-    "Bank Name": "اسم البنك",
6
-    "Account Number": "رقم الحساب",
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": "شراكة عامة",
7 20
     "Sales": "المبيعات",
8
-    "Fixed": "ثابت",
9
-    "Purchase": "شراء",
10
-    "Description": "وصف",
11
-    "Account Information": "معلومات الحساب",
12
-    "Opening Balance": "الرصيد الافتتاحي",
13
-    "Scope": "النطاق",
14
-    "Product": "المنتج",
15
-    "None": "لا شيء",
16
-    "Status": "الحالة",
17
-    "Service": "خدمة",
18
-    "Bank": "مصرف",
19
-    "Tags": "العلامات",
20
-    "Open": "افتح",
21
-    "Compound": "مركب",
22
-    "Merchant": "تاجر",
23
-    "Current Balance": "الرصيد الحالي",
24
-    "Additional Information": "معلومات إضافية",
25
-    "IBAN": "إيبان",
26
-    "Savings": "التوفير",
27
-    "Bank Information": "معلومات البنك",
28
-    "Bank Address": "عنوان البنك",
29
-    "ACH Number": "رقم ACH",
30
-    "Bank Phone": "هاتف البنك",
31
-    "Primary Color": "اللون الأساسي",
32
-    "BIC\/SWIFT Code": "كود بيك\/سويفت",
33
-    "Checking": "التحقق",
34
-    "Currency & Balance": "العملة والرصيد",
35
-    "pink": "وردي",
36
-    "purple": "أرجواني",
37
-    "Invoice": "الفاتورة",
38
-    "Data Presentation": "عرض البيانات",
39
-    "Default": "الإعداد الافتراضي",
40
-    "Localization": "التعريب",
41
-    "Account": "الحساب",
42
-    "Font": "فونت",
43
-    "Descending": "تنازلي",
44
-    "Appearance": "المظهر",
45
-    "Settings": "إعدادات",
46
-    "Side Navigation": "التنقل الجانبي",
47
-    "Disabled": "معاق",
48
-    "Discount": "خصم",
49
-    "Striped Tables": "طاولات مخططة",
50
-    "Identification": "تحديد",
51
-    "fuchsia": "فوشيا",
52
-    "Layout": "التخطيط",
53
-    "rose": "وردة",
54
-    "Logo": "الشعار",
55
-    "Table Sort Direction": "اتجاه فرز الجدول",
56
-    "Currency": "العملة",
21
+    "Max Content Width": "عرض المحتوى الأقصى",
22
+    "yellow": "الأصفر",
57 23
     "Phone Number": "رقم الهاتف",
58
-    "Email": "البريد الإلكتروني",
59
-    "Due Upon Receipt": "تاريخ الاستحقاق عند الاستلام",
60
-    "Price": "السعر",
24
+    "Code": "الكود",
25
+    "Yes": "نعم",
26
+    "Hours": "ساعات",
27
+    "gray": "رمادي",
28
+    "3X Large": "مقاس كبير 3 مرات",
61 29
     "Tax": "ضريبة",
30
+    "Timezone": "المنطقة الزمنية",
31
+    "Type": "النوع",
32
+    "Primary Color": "اللون الأساسي",
33
+    "Top Navigation": "التنقل العلوي",
34
+    "Date Format": "صيغة التاريخ",
35
+    "Price Name": "اسم السعر",
36
+    "Credit": "الائتمان",
62 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": "زنك",
63 48
     "Rate": "معدل",
64
-    "Timezone": "منطقة زمنية",
65
-    "Language": "اللغة",
66
-    "Date Format": "صيغة التاريخ",
67
-    "Time Format": "صيغة الوقت",
49
+    "Amount Name": "اسم المبلغ",
50
+    "Company Currencies": "عملات الشركة",
51
+    "Before Amount": "قبل المبلغ",
52
+    "Enabled": "تم تمكينه",
53
+    "Net 15": "شبكة 15",
68 54
     "State \/ Province": "الولاية\/المقاطعة",
69
-    "6X Large": "مقاس 6 × كبير",
70
-    "Modern": "حديث",
71
-    "Modal Width": "عرض مشروط",
72
-    "Before Number": "قبل الرقم",
73
-    "Screen Large": "شاشة كبيرة",
74
-    "Navigation Layout": "تخطيط التنقل",
75
-    "Sales Tax": "ضريبة المبيعات",
76
-    "Net 7": "نت 7",
77
-    "Classic": "كلاسيكي",
78
-    "Expense Category": "فئة المصاريف",
79
-    "Net 30": "نت 30",
55
+    "Striped Tables": "طاولات مخططة",
56
+    "Net 90": "نت 90",
80 57
     "Date & Time": "التاريخ والوقت",
81
-    "Select Position": "حدد الوظيفة",
82
-    "Net 10": "نت 10",
83
-    "Income": "الدخل",
58
+    "Entity": "الكيان",
59
+    "Default": "إفتراضي",
60
+    "Bank Account": "حساب بنكي",
61
+    "Amount": "المبلغ",
62
+    "Accounting": "المحاسبة",
63
+    "Banking": "الخدمات المصرفية",
64
+    "Service": "خدمة",
65
+    "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": "كلاسيكي",
84 77
     "Net 60": "نت 60",
85
-    "Code": "الكود",
86
-    "Type": "النوع",
87 78
     "Computation": "الحساب",
88
-    "After Number": "بعد الرقم",
89
-    "Yes": "نعم",
90
-    "Item": "البند",
91
-    "Symbol": "الرمز",
92
-    "Net 90": "نت 90",
93
-    "Purchase Discount": "خصم الشراء",
94
-    "Color": "اللون",
95
-    "Net 15": "نت 15",
96
-    "Start Date": "تاريخ البدء",
97
-    "Purchase Tax": "ضريبة الشراء",
98
-    "Name": "الاسم",
99
-    "No": "لا",
100
-    "Precision": "الدقة",
101
-    "Financial & Fiscal": "المالية والضريبية",
102
-    "Fiscal Year Start": "بداية السنة المالية",
103
-    "After Amount": "بعد المبلغ",
104 79
     "Symbol Position": "موضع الرمز",
105
-    "Thousands Separator": "فاصل الآلاف",
106
-    "Percent Position": "موضع النسبة المئوية",
107 80
     "Select a symbol position": "حدد موضع الرمز",
108
-    "Taxes & Discounts": "الضرائب والخصومات",
109
-    "Fiscal Year End": "نهاية السنة المالية",
110
-    "Before Amount": "قبل المبلغ",
111
-    "Expense": "مصروف",
81
+    "Default :Type :Record": "الخيار الافتراضي :Type :Record",
82
+    "Name": "الاسم",
83
+    "Services": "خدمات",
84
+    "Financial & Fiscal": "المالية والمالية",
85
+    "blue": "أزرق",
86
+    "cyan": "ازرق سماوي",
87
+    "Screen 2X Large": "شاشة كبيرة 2X",
88
+    "Medium": "متوسط",
89
+    "Subheader": "عنوان فرعي",
90
+    "Limited Partnership (LP)": "شراكة محدودة (LP)",
91
+    "Children": "الأطفال",
92
+    "Available": "متاح",
93
+    "Show Logo": "عرض الشعار",
94
+    "emerald": "زمرد",
95
+    "indigo": "نيلي",
96
+    "Current Balance": "الرصيد الحالي",
97
+    "Tax ID": "معرف الضريبة",
98
+    "Modal Width": "عرض مشروط",
99
+    "Fixed": "ثابت",
100
+    "Start Date": "تاريخ البدء",
101
+    "orange": "البرتقالي",
102
+    "Invoice": "الفاتورة",
103
+    "Account Number": "رقم الحساب",
104
+    "Manager": "مدير",
112 105
     "Sales Discount": "خصم المبيعات",
113
-    "Number Format": "صيغة الأرقام",
114
-    "Company Profile": "ملف تعريف الشركة",
115
-    "Week Start": "بداية الأسبوع",
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
+    "pink": "وردي",
118
+    "rose": "وردة",
119
+    "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": "شاشة",
116 133
     "Decimal Separator": "فاصل عشري",
134
+    "Currency List": "قائمة العملات",
117 135
     "Zip \/ Postal Code": "الرمز البريدي\/الرمز البريدي",
118
-    "Corporation": "مؤسسة",
119
-    "Country": "البلد",
120
-    "Number Digits": "أرقام الأرقام",
136
+    "5X Large": "مقاس كبير 5 مرات",
137
+    "Purchase Discount": "خصم الشراء",
138
+    "Scope": "النطاق",
139
+    "lime": "جير",
140
+    "Subtype": "نوع فرعي",
141
+    "Extra Large": "مقاس كبير جدًا",
121 142
     "Legal & Compliance": "الشؤون القانونية والامتثال",
122
-    "Limited Liability Partnership (LLP)": "شراكة ذات مسؤولية محدودة (LLP)",
123
-    "Number Prefix": "بادئة الرقم",
124
-    "Tax ID": "معرف الضريبة",
125
-    "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)",
126
-    "Sole Proprietorship": "الملكية الفردية",
143
+    "Navigation Layout": "تخطيط التنقل",
127 144
     "Street Address": "عنوان الشارع",
128
-    "Nonprofit": "غير ربحية",
129
-    "Entity Type": "نوع الكيان",
130
-    "City \/ Town": "المدينة\/البلدة",
131
-    "General Partnership": "شراكة عامة",
132
-    "Full": "كامل",
133
-    "Large": "كبير",
134
-    "Top Navigation": "التنقل العلوي",
135
-    "Extra Large": "كبير جدًا",
136
-    "5X Large": "مقاس 5 أضعاف مقاس كبير",
137
-    "Ascending": "تصاعدي",
138
-    "Screen Extra Large": "شاشة كبيرة جدًا",
139
-    "cyan": "ازرق سماوي",
140
-    "red": "أحمر",
141
-    "amber": "كهرمان",
142
-    "teal": "أزرق مخضر",
143
-    "emerald": "زمرد",
144
-    "blue": "أزرق",
145
-    "green": "خضراء",
146
-    "neutral": "محايد",
147
-    "sky": "سماء",
148
-    "indigo": "نيلي",
149
-    "zinc": "زنك",
150
-    "yellow": "الأصفر",
151
-    "slate": "أردواز",
152
-    "gray": "رمادي",
145
+    "Description": "وصف",
146
+    "purple": "أرجواني",
147
+    "Font": "الخط",
153 148
     "Small": "صغير",
154
-    "Screen": "شاشة",
149
+    "Corporation": "مؤسسة",
155 150
     "stone": "حجر",
156
-    "violet": "بنفسج",
157
-    "Medium": "متوسط",
158
-    "Enabled": "تم تمكينه",
159
-    "Records Per Page": "السجلات لكل صفحة",
160
-    "lime": "جير",
161
-    "Screen 2X Large": "شاشة كبيرة بحجم 2X",
162
-    "3X Large": "مقاس 3 أضعاف مقاس كبير",
163
-    "Accent Color": "لون أكسنت",
164
-    "orange": "البرتقالي",
165
-    "Credit Card": "بطاقة ائتمان",
166
-    "Services": "خدمات",
167
-    "Category": "الفئة",
168
-    "Other": "أخرى",
169
-    "Header": "رأس",
170
-    "Template": "قالب",
171
-    "Quantity": "الكمية",
172
-    "Unit Name": "اسم الوحدة",
173
-    "Money Market": "سوق المال",
174
-    "Items": "العناصر",
175
-    "7X Large": "مقاس 7 × كبير",
176
-    "Extra Small": "صغير جدًا",
177
-    "Hours": "ساعات",
178
-    "2X Large": "مقاس 2 × كبير",
179
-    "Terms": "الشروط",
180
-    "Item Name": "اسم العنصر",
181
-    "Footer \/ Notes": "تذييل الصفحة\/ملاحظات",
182
-    "4X Large": "مقاس 4 × كبير",
183
-    "Number Next": "الرقم التالي",
184
-    "Subheader": "العنوان الفرعي",
185
-    "Price Name": "اسم السعر",
186
-    "Show Logo": "عرض الشعار",
187
-    "Payment Terms": "شروط الدفع",
188
-    "International Bank Information": "معلومات البنك الدولي",
189
-    "Max Content Width": "عرض المحتوى الأقصى",
190
-    "ABA Number": "رقم ABA",
191
-    "Limited Partnership (LP)": "الشراكة المحدودة (LP)",
192
-    "Amount Name": "اسم المبلغ",
193
-    "Content": "المحتوى",
194
-    "Routing Information": "معلومات التوجيه",
195
-    "Products": "منتجات",
196
-    "Categories": "الفئات",
197
-    "Banking": "الخدمات المصرفية",
198
-    "Location Details": "تفاصيل الموقع",
199
-    "Income Category": "فئة الدخل",
200
-    "Amount": "المبلغ",
201
-    "Total": "المجموع",
202
-    "All": "جميع",
203
-    "Main": "الرئيسية",
204
-    "Default :Record": "الافتراضي :Record",
205
-    "Supported": "مدعوم",
151
+    "slate": "أردواز",
206 152
     "Live Currency": "العملة الحية",
207
-    "Features": "الميزات",
208
-    "Currency Rate": "سعر العملة",
209
-    "in use": "قيد الاستخدام",
210
-    "Currency List": "قائمة العملات",
211
-    "Separators must be unique.": "يجب أن تكون الفواصل فريدة.",
212
-    "Manager": "مدير",
213
-    "The :Type :record \":name\" already exists.": "إن :Type :record \":name\" موجود بالفعل.",
214
-    "Children": "الأطفال",
215
-    "Default :Type :Record": "الإعداد الافتراضي :Type :Record",
216
-    "Entity": "الكيان",
217
-    "Available": "متاح",
218
-    "Unavailable": "غير متوفره",
219
-    "Currencies": "العملات",
220
-    "Company Rates": "أسعار الشركة",
221
-    "Live Rate": "معدل البث المباشر",
222
-    "Company Currencies": "عملات الشركة",
223
-    "Action Denied": "تم رفض الإجراء",
224
-    "The rate must be between 0 and 100.": "يجب أن يكون المعدل بين 0 و 100.",
225
-    "The rate must be greater than 0.": "يجب أن يكون المعدل أكبر من 0.",
226
-    "Parent Department": "قسم أولياء الأمور",
227
-    "Company": "الشركة",
228
-    "Management": "الإدارة",
229
-    "Website": "الموقع الإلكتروني",
230
-    "Resources": "الموارد",
231
-    "Finance": "التمويل",
232
-    "Personalization": "التخصيص",
233
-    "Connected": "متصل",
234
-    "Manual": "دليل",
235
-    "Accounts": "الحسابات",
153
+    "Screen Large": "شاشة كبيرة",
154
+    "6X Large": "مقاس كبير 6 مرات",
155
+    "City \/ Town": "المدينة\/المدينة",
156
+    "Limited Liability Partnership (LLP)": "شراكة ذات مسؤولية محدودة (LLP)",
157
+    "Payment Terms": "شروط الدفع",
158
+    "Data Presentation": "عرض البيانات",
236 159
     "Connected Accounts": "الحسابات المتصلة",
237
-    "Subtype": "نوع فرعي",
238
-    "Credit": "الائتمان",
239
-    "Investment": "الاستثمار",
240
-    "Routing Number": "رقم التوجيه",
160
+    "Modern": "حديث",
161
+    "Country": "البلد",
162
+    "Full": "كامل",
163
+    "Table Sort Direction": "اتجاه فرز الجدول",
164
+    "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": "تصاعدي",
173
+    "Net 30": "شبكة 30",
174
+    "Identification": "تحديد",
175
+    "Email": "البريد الإلكتروني",
176
+    "2X Large": "2 × حجم كبير",
177
+    "None": "لا شيء",
178
+    "Discount": "الخصم",
241 179
     "Depository": "جهة الإيداع",
242
-    "Brokerage": "الوساطة",
243
-    "Loan": "قرض"
180
+    "Week Start": "بداية الأسبوع",
181
+    "Product": "المنتج",
182
+    "Items": "العناصر",
183
+    "Limited Liability Company (LLC)": "شركة ذات مسؤولية محدودة (LLC)",
184
+    "Large": "كبير",
185
+    "Descending": "تنازلي",
186
+    "Other": "أخرى",
187
+    "Logo": "الشعار",
188
+    "Products": "منتجات"
244 189
 }

+ 149
- 204
resources/data/lang/de.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "Allgemeines",
3
-    "gray": "grau",
3
+    "Bank Account": "Bankkonto",
4 4
     "slate": "Schiefer",
5
+    "indigo": "Indigoblau",
6
+    "lime": "Kalk",
7
+    "Extra Small": "Extra klein",
8
+    "Enabled": "Aktiviert",
5 9
     "neutral": "neutral",
6
-    "red": "rot",
10
+    "Items": "Artikel",
11
+    "pink": "pink",
12
+    "Medium": "Mittel",
13
+    "Account": "Konto",
14
+    "Other": "Andere",
15
+    "Sales Tax": "Umsatzsteuer",
16
+    "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",
25
+    "cyan": "Cyan",
26
+    "gray": "grau",
7 27
     "orange": "orange",
8
-    "teal": "blaugrün",
9
-    "lime": "Kalk",
10 28
     "blue": "blau",
11
-    "indigo": "Indigoblau",
12
-    "fuchsia": "Fuchsie",
13
-    "zinc": "Zink",
14
-    "green": "grün",
29
+    "violet": "violett",
15 30
     "Font": "Schrift",
16 31
     "Screen": "Bildschirm",
32
+    "Banking": "Bankwesen",
17 33
     "emerald": "Smaragd",
18
-    "amber": "Bernstein",
19
-    "Enabled": "Aktiviert",
20
-    "Category": "Kategorie",
21
-    "yellow": "gelb",
22
-    "cyan": "Cyan",
23
-    "Descending": "Absteigend",
24
-    "Email": "E-Mail",
25
-    "Country": "Land",
34
+    "Disabled": "Deaktiviert",
26 35
     "Extra Large": "Extra groß",
27
-    "pink": "pink",
28
-    "rose": "Rose",
29
-    "State \/ Province": "Bundesland\/Provinz",
30
-    "Categories": "Kategorien",
31
-    "Layout": "Raumaufteilung",
36
+    "Classic": "Klassisch",
32 37
     "sky": "Himmel",
33
-    "stone": "Stein",
34
-    "Settings": "Einstellungen",
35
-    "Tax ID": "Steuer-ID",
36
-    "Side Navigation": "Seitliche Navigation",
37
-    "Invoice": "Rechnung",
38
-    "Entity Type": "Entitätstyp",
39
-    "Disabled": "Deaktiviert",
40
-    "Full": "Voll",
41
-    "Account": "Konto",
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ß",
42 46
     "Ascending": "Aufsteigend",
43
-    "Localization": "Lokalisation",
44
-    "violet": "violett",
45
-    "Currency": "Währung",
46
-    "Department": "Abteilung",
47
-    "Logo": "Logo",
48
-    "Total": "Insgesamt",
49
-    "Appearance": "Aussehen",
50
-    "Discount": "Rabatt",
51
-    "Sales Tax": "Umsatzsteuer",
47
+    "purple": "lila",
52 48
     "Phone Number": "Telefonnummer",
53
-    "Street Address": "Straße\/Adresse",
54
-    "Default": "Standard",
49
+    "Quantity": "Menge",
50
+    "Localization": "Lokalisation",
55 51
     "Tax": "Steuer",
56
-    "Large": "Groß",
57
-    "Medium": "Mittel",
58
-    "Banking": "Bankwesen",
59
-    "Data Presentation": "Präsentation der Daten",
60
-    "Primary Color": "Primäre Farbe",
61
-    "Top Navigation": "Top-Navigation",
62
-    "Navigation Layout": "Navigationslayout",
63
-    "4X Large": "4X Groß",
64
-    "Identification": "Identifizierung",
65
-    "5X Large": "5X groß",
66
-    "Company Profile": "Profil des Unternehmens",
67
-    "Zip \/ Postal Code": "PLZ\/PLZ",
68
-    "Purchase Tax": "Kaufsteuer",
69
-    "6X Large": "6X Groß",
70
-    "Small": "klein",
71
-    "Location Details": "Angaben zum Standort",
72
-    "Content": "Inhalt",
73
-    "Income Category": "Einkommenskategorie",
52
+    "green": "grün",
53
+    "red": "rot",
54
+    "Small": "Klein",
55
+    "Identification": "Identifikation",
74 56
     "Products": "Produkte",
75
-    "Max Content Width": "Max. Breite des Inhalts",
76
-    "Purchase Discount": "Rabatt beim Kauf",
77
-    "Striped Tables": "Gestreifte Tische",
78
-    "Item Name": "Name des Artikels",
79
-    "3X Large": "3X Groß",
57
+    "Template": "Schablone",
58
+    "Modern": "modern",
59
+    "Date & Time": "Datum und Uhrzeit",
60
+    "Logo": "Logo",
80 61
     "Header": "Kopfzeile",
81
-    "Due Upon Receipt": "Fällig nach Erhalt",
82
-    "Terms": "Bedingungen",
83
-    "Screen Large": "Großer Bildschirm",
84
-    "2X Large": "2X Groß",
62
+    "Timezone": "Zeitzone",
63
+    "Full": "Voll",
64
+    "Country": "Land",
85 65
     "Services": "Dienstleistungen",
86
-    "Screen 2X Large": "Bildschirm 2X groß",
66
+    "Descending": "Absteigend",
67
+    "Amount": "Betrag",
68
+    "Appearance": "Aussehen",
69
+    "Invoice": "Rechnung",
70
+    "Entity Type": "Art der Entität",
71
+    "Corporation": "Korporation",
87 72
     "Hours": "Stunden",
88
-    "Quantity": "Menge",
89
-    "Items": "Artikel",
90
-    "Corporation": "Konzern",
91
-    "Other": "Andere",
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",
92 79
     "Taxes & Discounts": "Steuern und Rabatte",
93
-    "Extra Small": "Extra klein",
94
-    "Template": "Vorlage",
95
-    "Expense Category": "Ausgabenkategorie",
96
-    "Net 15": "Weiter 15",
97
-    "Net 10": "Weiter 10",
98
-    "Amount": "Betrag",
99
-    "Table Sort Direction": "Sortierrichtung der Tabelle",
100
-    "Modal Width": "Modale Breite",
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ß",
101 100
     "City \/ Town": "Stadt\/Stadt",
101
+    "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)",
102
+    "Primary Color": "Primäre Farbe",
102 103
     "Legal & Compliance": "Recht und Compliance",
103
-    "Records Per Page": "Datensätze pro Seite",
104
-    "Net 7": "Netz 7",
105
-    "Subheader": "Unterüberschrift",
106
-    "Number Prefix": "Nummernpräfix",
107
-    "Show Logo": "Logo einblenden",
108
-    "Nonprofit": "Gemeinnützig",
104
+    "Default": "Standard",
105
+    "Sole Proprietorship": "Einzelunternehmen",
106
+    "Limited Partnership (LP)": "Kommanditgesellschaft (LP)",
109 107
     "Limited Liability Company (LLC)": "Gesellschaft mit beschränkter Haftung (LLC)",
110
-    "7X Large": "7X Groß",
111
-    "Accent Color": "Akzentfarbe",
108
+    "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",
112 115
     "Amount Name": "Name des Betrags",
113
-    "Footer \/ Notes": "Fußzeile\/\/Hinweise",
114
-    "General Partnership": "Allgemeine Partnerschaft",
115
-    "purple": "lila",
116
-    "Sales Discount": "Verkaufsrabatt",
116
+    "Net 60": "Netto 60",
117 117
     "Net 90": "Netto 90",
118
-    "Language": "Sprache",
119
-    "Classic": "Klassisch",
120
-    "Date & Time": "Datum und Uhrzeit",
118
+    "Week Start": "Wochenstart",
119
+    "Street Address": "Straße & Adresse",
120
+    "Tax ID": "Steuer-ID",
121
+    "Date Format": "Datumsformat",
122
+    "Number Next": "Nummer Weiter",
123
+    "Net 10": "Netto 10",
124
+    "Net 15": "Netto 15",
125
+    "teal": "blaugrün",
126
+    "amber": "Bernstein",
127
+    "Location Details": "Angaben zum Standort",
128
+    "Item Name": "Name des Artikels",
121 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
+    "Net 30": "Netto 30",
136
+    "Table Sort Direction": "Sortierrichtung der Tabelle",
137
+    "Screen 2X Large": "Bildschirm 2X groß",
122 138
     "After Number": "Nach Nummer",
123
-    "Select Position": "Position wählen",
124
-    "Timezone": "Zeitzone",
125
-    "Before Number": "Vor der Nummer",
126
-    "Name": "Nome",
127
-    "Modern": "modern",
128
-    "Date Format": "Format des Datums",
129
-    "Type": "Typ",
130
-    "Code": "Kodieren",
131
-    "Color": "Farbe",
132
-    "Net 60": "Netto 60",
133
-    "No": "Nein",
134
-    "Symbol": "Symbol",
135
-    "Net 30": "Weiter 30",
136 139
     "Financial & Fiscal": "Finanziell und steuerlich",
137
-    "Item": "Artikel",
138
-    "Fiscal Year Start": "Beginn des Geschäftsjahres",
139
-    "Fiscal Year End": "Ende des Geschäftsjahres",
140
-    "Fixed": "Behoben",
140
+    "Data Presentation": "Präsentation der Daten",
141
+    "Payment Terms": "Zahlungsbedingungen",
142
+    "Records Per Page": "Datensätze pro Seite",
143
+    "Name": "Name",
144
+    "Code": "Kode",
145
+    "Symbol": "Symbol",
146
+    "Default :Record": "Standard :Record",
147
+    "Type": "Typ",
148
+    "Start Date": "Startdatum",
141 149
     "End Date": "Enddatum",
142
-    "Week Start": "Wochenstart",
143
-    "Yes": "Ja",
144
-    "Product": "Produkt",
145
-    "Description": "Beschreibung",
150
+    "Sales": "Verkäufe",
146 151
     "Purchase": "Kauf",
147 152
     "Precision": "Präzision",
148
-    "Bank": "Bank",
149
-    "After Amount": "Nach dem Betrag",
150
-    "Compound": "Verbindung",
151
-    "None": "Keine",
152
-    "Percentage": "Prozentsatz",
153
-    "Start Date": "Datum des Beginns",
154
-    "Sales": "Umsatz",
155
-    "Account Number": "Kontonummer",
156
-    "Expense": "Kosten",
157
-    "Select a symbol position": "Wählen Sie eine Symbolposition",
158
-    "Status": "Status",
159
-    "Service": "Dienst",
153
+    "Symbol Position": "Position des Symbols",
160 154
     "Before Amount": "Vor dem Betrag",
161
-    "Open": "Offen",
162
-    "Percent Position": "Prozentuale Position",
163
-    "Number Format": "Format der Zahl",
164
-    "Computation": "Berechnung",
165
-    "Scope": "Geltungsbereich",
166
-    "Tags": "Schlagworte",
155
+    "After Amount": "Nach Betrag",
156
+    "Select a symbol position": "Wählen Sie eine Symbolposition",
167 157
     "Decimal Separator": "Dezimaltrennzeichen",
168 158
     "Thousands Separator": "Tausender-Trennzeichen",
169
-    "Additional Information": "Zusätzliche Informationen",
170
-    "Symbol Position": "Position des Symbols",
171
-    "Money Market": "Geldmarkt",
172
-    "Savings": "Ersparnisse",
173
-    "Bank Name": "Name der Bank",
174
-    "Bank Address": "Adresse der Bank",
175
-    "IBAN": "IBAN",
176
-    "Opening Balance": "Eröffnungssaldo",
177
-    "Merchant": "Händler",
159
+    "Yes": "Ja",
160
+    "No": "Nein",
161
+    "Description": "Beschreibung",
162
+    "Computation": "Berechnung",
163
+    "Scope": "Geltungsbereich",
164
+    "Percentage": "Prozentsatz",
165
+    "Fixed": "Behoben",
166
+    "None": "Keine",
167
+    "Product": "Produkt",
168
+    "Service": "Bedienung",
169
+    "Compound": "Verbindung",
178 170
     "Current Balance": "Aktueller Saldo",
179
-    "Screen Extra Large": "Bildschirm extragroß",
180
-    "Routing Information": "Informationen zur Weiterleitung",
181
-    "International Bank Information": "Internationale Bankinformationen",
182
-    "Bank Information": "Informationen zur Bank",
183
-    "ACH Number": "ACH-Nummer",
184
-    "Income": "Einnahmen",
185
-    "Payment Terms": "Zahlungsbedingungen",
186
-    "Bank Phone": "Bank-Telefon",
187
-    "ABA Number": "ABA-Nummer",
188
-    "Currency & Balance": "Währung und Saldo",
189
-    "BIC\/SWIFT Code": "BIC\/SWIFT-Code",
190 171
     "Account Information": "Informationen zum Konto",
191
-    "Price Name": "Name des Preises",
192
-    "Limited Liability Partnership (LLP)": "Partnerschaft mit beschränkter Haftung (LLP)",
193
-    "Price": "Preis",
194
-    "Sole Proprietorship": "Einzelunternehmen",
195
-    "Credit Card": "Kreditkarte",
196
-    "Checking": "Überprüfung",
197
-    "Limited Partnership (LP)": "Kommanditgesellschaft (LP)",
198
-    "Number Digits": "Zahl Ziffern",
199
-    "Number Next": "Nummer Weiter",
200
-    "Unit Name": "Name der Einheit",
201
-    "Rate": "Bewerten",
202
-    "Available": "Verfügbar",
203
-    "Supported": "Unterstützt",
172
+    "Subtype": "Subtyp",
173
+    "Account Number": "Kontonummer",
174
+    "Credit": "Kredit",
175
+    "Loan": "Darlehen",
176
+    "Manager": "Geschäftsführer",
204 177
     "Children": "Kinder",
205
-    "Default :Record": "Standard :Record",
178
+    "Investment": "Investition",
179
+    "Depository": "Verwahrstelle",
206 180
     "All": "Alle",
207 181
     "Main": "Haupt",
208
-    "Features": "Funktionen",
209
-    "Manager": "Geschäftsführer",
210
-    "Company Rates": "Tarife für Unternehmen",
211
-    "Separators must be unique.": "Trennzeichen müssen eindeutig sein.",
212
-    "in use": "im Einsatz",
213
-    "Unavailable": "Nicht verfügbar",
214
-    "Default :Type :Record": "Standard :Type :Record",
215
-    "Live Currency": "Live-Währung",
216
-    "Currency Rate": "Währungskurs",
217
-    "The :Type :record \":name\" already exists.": "Das :Type :record \":name\" ist bereits vorhanden.",
218
-    "Company Currencies": "Unternehmenswährungen",
219
-    "Currency List": "Liste der Währungen",
220
-    "Currencies": "Währungen",
221
-    "The rate must be between 0 and 100.": "Die Rate muss zwischen 0 und 100 liegen.",
222
-    "The rate must be greater than 0.": "Die Rate muss größer als 0 sein.",
223
-    "Parent Department": "Elternabteilung",
224
-    "Action Denied": "Aktion verweigert",
225
-    "Live Rate": "Live-Rate",
226 182
     "Entity": "Entität",
227
-    "Website": "Webseite",
228
-    "Resources": "Ressourcen",
229
-    "Management": "Verwaltung",
230
-    "Finance": "Finanzen",
231
-    "Company": "Firma",
232
-    "Personalization": "Personalisierung",
233
-    "Investment": "Investition",
234
-    "Subtype": "Subtyp",
235
-    "Routing Number": "Routing-Nummer",
236
-    "Credit": "Kredit",
237
-    "Connected Accounts": "Verbundene Konten",
238
-    "Connected": "Verbunden",
239
-    "Accounts": "Konten",
240
-    "Manual": "Manuell",
241
-    "Loan": "Darlehen",
242
-    "Brokerage": "Maklertätigkeit",
243
-    "Depository": "Verwahrstelle"
183
+    "Available": "Verfügbar",
184
+    "Parent Department": "Elternabteilung",
185
+    "Currency List": "Liste der Währungen",
186
+    "Company Currencies": "Währungen des Unternehmens",
187
+    "Live Rate": "Live-Tarif",
188
+    "Default :Type :Record": "Standard :Type :Record"
244 189
 }

+ 60
- 121
resources/data/lang/en.json Visa fil

@@ -1,28 +1,49 @@
1 1
 {
2 2
     "General": "General",
3
+    "Bank Account": "Bank Account",
4
+    "Currency": "Currency",
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",
10
+    "Appearance": "Appearance",
11
+    "Default": "Default",
12
+    "Company Profile": "Company Profile",
13
+    "Invoice": "Invoice",
14
+    "Localization": "Localization",
15
+    "Discount": "Discount",
16
+    "Tax": "Tax",
17
+    "Accounting": "Accounting",
18
+    "Banking": "Banking",
19
+    "Account": "Account",
20
+    "Department": "Department",
21
+    "Services": "Services",
22
+    "Connected Accounts": "Connected Accounts",
23
+    "Live Currency": "Live Currency",
3 24
     "Primary Color": "Primary Color",
4
-    "slate": "slate",
5
-    "gray": "gray",
6
-    "zinc": "zinc",
7
-    "neutral": "neutral",
8
-    "stone": "stone",
9
-    "red": "red",
10
-    "orange": "orange",
11 25
     "amber": "amber",
12
-    "yellow": "yellow",
13
-    "lime": "lime",
14
-    "green": "green",
15
-    "emerald": "emerald",
16
-    "teal": "teal",
17
-    "cyan": "cyan",
18
-    "sky": "sky",
19 26
     "blue": "blue",
20
-    "indigo": "indigo",
21
-    "violet": "violet",
22
-    "purple": "purple",
27
+    "cyan": "cyan",
28
+    "emerald": "emerald",
23 29
     "fuchsia": "fuchsia",
30
+    "gray": "gray",
31
+    "green": "green",
32
+    "indigo": "indigo",
33
+    "lime": "lime",
34
+    "neutral": "neutral",
35
+    "orange": "orange",
24 36
     "pink": "pink",
37
+    "purple": "purple",
38
+    "red": "red",
25 39
     "rose": "rose",
40
+    "sky": "sky",
41
+    "slate": "slate",
42
+    "stone": "stone",
43
+    "teal": "teal",
44
+    "violet": "violet",
45
+    "yellow": "yellow",
46
+    "zinc": "zinc",
26 47
     "Font": "Font",
27 48
     "Layout": "Layout",
28 49
     "Max Content Width": "Max Content Width",
@@ -54,31 +75,10 @@
54 75
     "Screen": "Screen",
55 76
     "Ascending": "Ascending",
56 77
     "Descending": "Descending",
57
-    "Appearance": "Appearance",
58
-    "Default": "Default",
59
-    "Company Profile": "Company Profile",
60
-    "Invoice": "Invoice",
61
-    "Localization": "Localization",
62
-    "Account": "Account",
63
-    "Department": "Department",
64
-    "Category": "Category",
65
-    "Currency": "Currency",
66
-    "Discount": "Discount",
67
-    "Tax": "Tax",
68
-    "Settings": "Settings",
69
-    "Banking": "Banking",
70
-    "Taxes & Discounts": "Taxes & Discounts",
71
-    "Sales Tax": "Sales Tax",
72
-    "Purchase Tax": "Purchase Tax",
73
-    "Sales Discount": "Sales Discount",
74
-    "Purchase Discount": "Purchase Discount",
75
-    "Categories": "Categories",
76
-    "Income Category": "Income Category",
77
-    "Expense Category": "Expense Category",
78 78
     "Identification": "Identification",
79
-    "Logo": "Logo",
80 79
     "Email": "Email",
81 80
     "Phone Number": "Phone Number",
81
+    "Logo": "Logo",
82 82
     "Location Details": "Location Details",
83 83
     "Country": "Country",
84 84
     "State \/ Province": "State \/ Province",
@@ -102,7 +102,6 @@
102 102
     "Content": "Content",
103 103
     "Header": "Header",
104 104
     "Subheader": "Subheader",
105
-    "Terms": "Terms",
106 105
     "Footer \/ Notes": "Footer \/ Notes",
107 106
     "Template": "Template",
108 107
     "Show Logo": "Show Logo",
@@ -110,7 +109,6 @@
110 109
     "Item Name": "Item Name",
111 110
     "Items": "Items",
112 111
     "Products": "Products",
113
-    "Services": "Services",
114 112
     "Other": "Other",
115 113
     "Unit Name": "Unit Name",
116 114
     "Quantity": "Quantity",
@@ -140,20 +138,18 @@
140 138
     "After Number": "After Number",
141 139
     "Select Position": "Select Position",
142 140
     "Financial & Fiscal": "Financial & Fiscal",
143
-    "Fiscal Year Start": "Fiscal Year Start",
144
-    "Fiscal Year End": "Fiscal Year End",
145 141
     "Number Format": "Number Format",
146 142
     "Percent Position": "Percent Position",
147 143
     "Name": "Name",
148
-    "Type": "Type",
149
-    "Color": "Color",
150
-    "Expense": "Expense",
151
-    "Income": "Income",
152
-    "Item": "Item",
153
-    "Yes": "Yes",
154
-    "No": "No",
155 144
     "Code": "Code",
156 145
     "Symbol": "Symbol",
146
+    "Default :Record": "Default :Record",
147
+    "Type": "Type",
148
+    "Start Date": "Start Date",
149
+    "End Date": "End Date",
150
+    "Sales": "Sales",
151
+    "Default :Type :Record": "Default :Type :Record",
152
+    "Purchase": "Purchase",
157 153
     "Precision": "Precision",
158 154
     "Symbol Position": "Symbol Position",
159 155
     "Before Amount": "Before Amount",
@@ -161,92 +157,35 @@
161 157
     "Select a symbol position": "Select a symbol position",
162 158
     "Decimal Separator": "Decimal Separator",
163 159
     "Thousands Separator": "Thousands Separator",
164
-    "Computation": "Computation",
165
-    "Start Date": "Start Date",
166
-    "End Date": "End Date",
167
-    "Sales": "Sales",
168
-    "Fixed": "Fixed",
169
-    "Purchase": "Purchase",
170
-    "Percentage": "Percentage",
160
+    "Yes": "Yes",
161
+    "No": "No",
171 162
     "Description": "Description",
163
+    "Computation": "Computation",
172 164
     "Scope": "Scope",
165
+    "Percentage": "Percentage",
166
+    "Fixed": "Fixed",
173 167
     "None": "None",
174 168
     "Product": "Product",
175 169
     "Service": "Service",
176 170
     "Compound": "Compound",
177
-    "Bank": "Bank",
178
-    "Status": "Status",
179 171
     "Current Balance": "Current Balance",
180
-    "Open": "Open",
181 172
     "Account Information": "Account Information",
173
+    "Subtype": "Subtype",
182 174
     "Account Number": "Account Number",
183
-    "Currency & Balance": "Currency & Balance",
184
-    "Opening Balance": "Opening Balance",
185
-    "Bank Information": "Bank Information",
186
-    "Bank Name": "Bank Name",
187
-    "Bank Phone": "Bank Phone",
188
-    "Bank Address": "Bank Address",
189
-    "Additional Information": "Additional Information",
190
-    "Tags": "Tags",
191
-    "Routing Information": "Routing Information",
192
-    "ABA Number": "ABA Number",
193
-    "ACH Number": "ACH Number",
194
-    "International Bank Information": "International Bank Information",
195
-    "BIC\/SWIFT Code": "BIC\/SWIFT Code",
196
-    "IBAN": "IBAN",
197
-    "Checking": "Checking",
198
-    "Savings": "Savings",
199
-    "Money Market": "Money Market",
200
-    "Credit Card": "Credit Card",
201
-    "Merchant": "Merchant",
175
+    "Investment": "Investment",
176
+    "Credit": "Credit",
177
+    "Depository": "Depository",
178
+    "Loan": "Loan",
202 179
     "Manager": "Manager",
203 180
     "Children": "Children",
204 181
     "All": "All",
205 182
     "Main": "Main",
206 183
     "Parent Department": "Parent Department",
207
-    "Action Denied": "Action Denied",
208
-    "The rate must be between 0 and 100.": "The rate must be between 0 and 100.",
209
-    "The rate must be greater than 0.": "The rate must be greater than 0.",
210
-    "The :Type :record \":name\" already exists.": "The :Type :record \":name\" already exists.",
211
-    "Default :Type :Record": "Default :Type :Record",
212
-    "Default :Record": "Default :Record",
213
-    "Separators must be unique.": "Separators must be unique.",
214
-    "in use": "in use",
215
-    "Features": "Features",
216
-    "Supported": "Supported",
217
-    "Available": "Available",
218
-    "Entity": "Entity",
219
-    "Live Currency": "Live Currency",
220
-    "Unavailable": "Unavailable",
221
-    "Company Rates": "Company Rates",
222
-    "Currency Rate": "Currency Rate",
223
-    "Currencies": "Currencies",
224
-    "Live Rate": "Live Rate",
225 184
     "Currency List": "Currency List",
226 185
     "Company Currencies": "Company Currencies",
227
-    "Website": "Website",
228
-    "Management": "Management",
229
-    "Resources": "Resources",
230
-    "Finance": "Finance",
231
-    "Personalization": "Personalization",
232
-    "Company": "Company",
233
-    "Connected Accounts": "Connected Accounts",
234
-    "Subtype": "Subtype",
235
-    "Routing Number": "Routing Number",
236
-    "Investment": "Investment",
237
-    "Credit": "Credit",
238
-    "Depository": "Depository",
239
-    "Loan": "Loan",
240
-    "Brokerage": "Brokerage",
241
-    "Connected": "Connected",
242
-    "Manual": "Manual",
243
-    "Accounts": "Accounts",
244
-    "Accounting": "Accounting",
245
-    "Bank Account": "Bank Account",
246
-    "Starting Balance": "Starting Balance",
247
-    "Account Identification": "Account Identification",
248
-    "Account Settings": "Account Settings",
249
-    "Financial Details": "Financial Details",
186
+    "Entity": "Entity",
187
+    "Available": "Available",
188
+    "Live Rate": "Live Rate",
250 189
     "Edit": "Edit",
251 190
     "Notes": "Notes"
252
-}
191
+}

+ 155
- 217
resources/data/lang/es.json Visa fil

@@ -1,251 +1,189 @@
1 1
 {
2 2
     "General": "General",
3
-    "green": "verde",
4
-    "sky": "cielo",
5
-    "gray": "gris",
3
+    "Invoice": "Factura",
6 4
     "neutral": "neutral",
7
-    "red": "rojo",
8
-    "teal": "verde azulado",
9 5
     "emerald": "esmeralda",
10
-    "Enabled": "Habilitado",
11
-    "Medium": "Medio",
6
+    "slate": "pizarra",
7
+    "Bank Account": "Cuenta bancaria",
8
+    "Localization": "Localización",
12 9
     "zinc": "zinc",
13
-    "Full": "Lleno",
14
-    "yellow": "amarillo",
15
-    "Side Navigation": "Navegación lateral",
16
-    "amber": "ámbar",
17
-    "Layout": "Maquetación",
18
-    "rose": "rosa",
19
-    "blue": "azul",
20
-    "cyan": "cian",
21
-    "orange": "naranja",
22
-    "stone": "apedrear",
23
-    "Primary Color": "Color primario",
24
-    "Total": "Total",
25
-    "Net 10": "10 netos",
26
-    "5X Large": "5X grande",
27
-    "Max Content Width": "Ancho máximo de contenido",
28 10
     "Disabled": "Discapacitado",
29
-    "Appearance": "Apariencia",
30
-    "Large": "Grande",
31
-    "Invoice": "Factura",
32
-    "Extra Small": "Extra pequeña",
33
-    "Screen": "Pantalla",
11
+    "Descending": "Descendiendo",
12
+    "Default": "Predeterminado",
34 13
     "Account": "Cuenta",
35
-    "Company Profile": "Perfil de la empresa",
36
-    "Extra Large": "Extra grande",
37
-    "Category": "Categoría",
14
+    "sky": "cielo",
15
+    "Country": "País",
16
+    "Modern": "Moderna",
17
+    "Currency": "Moneda",
18
+    "Sales Tax": "Impuesto sobre las ventas",
38 19
     "Discount": "Descuento",
39
-    "purple": "morado",
40
-    "Tax": "Impuesto",
20
+    "Banking": "Banca",
21
+    "amber": "ámbar",
22
+    "gray": "gris",
23
+    "green": "verde",
41 24
     "lime": "cal",
42
-    "Descending": "Descendente",
43
-    "indigo": "índigo",
25
+    "purple": "púrpura",
26
+    "red": "rojo",
27
+    "teal": "verde azulado",
44 28
     "Font": "Tipo de letra",
45
-    "fuchsia": "fucsia",
46
-    "violet": "violeta",
47
-    "Default": "Predeterminado",
48
-    "Department": "Departamento",
49
-    "Small": "Pequeño",
50
-    "slate": "pizarra",
51
-    "Banking": "Banca",
52
-    "Settings": "Ajustes",
53
-    "Currency": "Divisa",
29
+    "Full": "Lleno",
30
+    "Extra Small": "Extra pequeño",
31
+    "Medium": "Mediano",
32
+    "Large": "Grande",
33
+    "Extra Large": "Extra grande",
34
+    "Screen": "Pantalla",
54 35
     "Ascending": "Ascendente",
55
-    "Localization": "Localización",
56
-    "Email": "Correo electrónico",
57 36
     "Identification": "Identificación",
58
-    "Street Address": "Dirección de calle",
59
-    "Sales Tax": "Impuesto sobre las ventas",
60
-    "Phone Number": "Número de teléfono",
61
-    "Expense Category": "Categoría de gastos",
62
-    "pink": "rosa",
63
-    "4X Large": "4 veces más grande",
64
-    "Categories": "Categorías",
65
-    "Zip \/ Postal Code": "Código postal\/postal",
66
-    "Entity Type": "Tipo de entidad",
67
-    "2X Large": "2 veces grande",
37
+    "State \/ Province": "Estado\/provincia",
38
+    "Street Address": "Dirección postal",
39
+    "Zip \/ Postal Code": "Código postal o postal",
40
+    "Sole Proprietorship": "Empresa unipersonal",
41
+    "Nonprofit": "Organización sin fines",
42
+    "Content": "Contenido",
43
+    "Header": "Cabecera",
44
+    "Template": "plantilla",
45
+    "Items": "Artículos",
68 46
     "Products": "Productos",
69
-    "Item Name": "Nombre del artículo",
70
-    "Taxes & Discounts": "Impuestos y descuentos",
71
-    "Price": "Precio",
72
-    "Sales Discount": "Descuento de ventas",
73
-    "Hours": "Horas",
74 47
     "Other": "Otros",
75
-    "Terms": "Términos",
76
-    "Table Sort Direction": "Dirección de clasificación de tablas",
77
-    "Items": "Artículos",
78
-    "Amount": "Monto",
79
-    "Services": "Servicios",
80
-    "City \/ Town": "Ciudad\/Pueblo",
81
-    "Purchase Tax": "Impuesto de compra",
82
-    "General Partnership": "Asociación general",
83
-    "Legal & Compliance": "Asuntos legales y cumplimiento",
84
-    "Corporation": "Corporación",
85
-    "Tax ID": "Número de identificación fiscal",
86
-    "Location Details": "Detalles de ubicación",
87
-    "Number Next": "Número siguiente",
88
-    "Payment Terms": "Condiciones de pago",
89
-    "Number Digits": "Dígitos numéricos",
90
-    "Unit Name": "Nombre de la unidad",
91
-    "Purchase Discount": "Descuento de compra",
92
-    "Net 7": "Neto 7",
93
-    "Limited Liability Partnership (LLP)": "Sociedad de responsabilidad limitada (LLP)",
94
-    "Limited Liability Company (LLC)": "Sociedad de responsabilidad limitada (LLC)",
95
-    "Footer \/ Notes": "Pie de página\/Notas",
96
-    "Accent Color": "Color de acento",
97
-    "Amount Name": "Nombre del importe",
98
-    "Price Name": "Nombre del precio",
99
-    "Show Logo": "Mostrar logotipo",
100
-    "Due Upon Receipt": "Vencimiento al recibirlo",
48
+    "Hours": "Horas",
49
+    "Price": "Precio",
101 50
     "Rate": "Tarifa",
102
-    "Net 15": "Neto 15",
103
-    "Subheader": "Subtítulo",
104
-    "Data Presentation": "Presentación de datos",
105
-    "Classic": "Clásico",
106
-    "Modern": "Moderna",
51
+    "Amount": "Monto",
107 52
     "Language": "Idioma",
108
-    "Template": "plantilla",
109
-    "Content": "Contenido",
110
-    "Nonprofit": "No lucrativo",
111
-    "Quantity": "Cantidad",
112
-    "No": "No",
113 53
     "Timezone": "Zona horaria",
114
-    "Country": "País",
115
-    "Fiscal Year End": "Fin de año fiscal",
116
-    "Sole Proprietorship": "Propietario único",
117
-    "Income": "Ingresos",
118
-    "Item": "Artículo",
119
-    "Expense": "Gasto",
120
-    "Name": "Nombre",
121 54
     "Date & Time": "Fecha y hora",
122
-    "Before Number": "Antes del número",
123
-    "Yes": "Sí",
124
-    "Color": "Color",
125
-    "Precision": "Precisión",
126
-    "Number Prefix": "Prefijo numérico",
127
-    "After Number": "Después del número",
128
-    "Time Format": "Formato de hora",
129
-    "Net 60": "60 netos",
130
-    "Scope": "Alcance",
131
-    "Percent Position": "Posición porcentual",
132
-    "Week Start": "Inicio de semana",
133
-    "Financial & Fiscal": "Financiero y fiscal",
134
-    "Sales": "Ventas",
135
-    "Product": "Producto",
136
-    "Status": "Estado",
137
-    "Type": "Tipo",
138
-    "Compound": "Compuesto",
139
-    "Current Balance": "Saldo actual",
140
-    "Number Format": "Formato de número",
141
-    "Symbol": "Símbolo",
142
-    "After Amount": "Después de la cantidad",
143
-    "Description": "Descripción",
144
-    "Service": "Servicio",
145 55
     "Select Position": "Seleccione posición",
146
-    "Start Date": "Fecha de inicio",
56
+    "Name": "Nombre",
147 57
     "Code": "Código",
148
-    "Before Amount": "Importe anterior",
149
-    "Open": "Abrir",
150
-    "Fiscal Year Start": "Inicio del año fiscal",
58
+    "Symbol": "Símbolo",
59
+    "Type": "Tipo",
60
+    "Start Date": "Fecha de inicio",
61
+    "End Date": "Fecha de finalización",
62
+    "Sales": "Ventas",
63
+    "Purchase": "Adquirir",
64
+    "Precision": "Precisión",
65
+    "Yes": "Sí",
66
+    "No": "No",
67
+    "Description": "Descripción",
151 68
     "None": "Ninguna",
152
-    "Additional Information": "Información adicional",
153
-    "Striped Tables": "Mesas rayadas",
154
-    "6X Large": "6X grande",
155
-    "Percentage": "Porcentaje",
156
-    "Select a symbol position": "Seleccione la posición de un símbolo",
157
-    "Symbol Position": "Posición del símbolo",
69
+    "Product": "Producto",
70
+    "Compound": "Compuesto",
158 71
     "Account Information": "Información de la cuenta",
159
-    "Bank Name": "Nombre del banco",
160
-    "Decimal Separator": "Separador decimal",
161
-    "Bank": "Banco",
162
-    "Bank Address": "Dirección bancaria",
163
-    "Thousands Separator": "Separador de miles",
164 72
     "Account Number": "Número de cuenta",
165
-    "Bank Information": "Información bancaria",
166
-    "Tags": "Etiquetas",
167
-    "Currency & Balance": "Moneda y saldo",
168
-    "Net 90": "Neto 90",
169
-    "Records Per Page": "Registros por página",
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",
170 99
     "Screen Large": "Pantalla grande",
171
-    "Opening Balance": "Saldo inicial",
172
-    "Screen 2X Large": "Pantalla 2 veces grande",
173 100
     "Screen Extra Large": "Pantalla extra grande",
174
-    "7X Large": "7 veces más grande",
175
-    "Savings": "Ahorros",
176
-    "Merchant": "Comerciante",
177
-    "IBAN": "IBAN",
178
-    "Checking": "Comprobando",
179
-    "Bank Phone": "Teléfono del banco",
180
-    "Credit Card": "Tarjeta de crédito",
181
-    "Routing Information": "Información de enrutamiento",
182
-    "BIC\/SWIFT Code": "Código BIC\/SWIFT",
183
-    "International Bank Information": "Información bancaria internacional",
184
-    "ACH Number": "Número ACH",
185
-    "ABA Number": "Número ABA",
186
-    "Money Market": "Mercado monetario",
187
-    "Date Format": "Formato de fecha",
188
-    "Net 30": "30 netos",
189
-    "Income Category": "Categoría de ingresos",
190
-    "State \/ Province": "Estado\/provincia",
191
-    "Header": "Cabecera",
101
+    "Small": "Pequeña",
102
+    "2X Large": "2 veces grande",
103
+    "Email": "Correo electrónico",
104
+    "Phone Number": "Número de teléfono",
192 105
     "Logo": "Logotipo",
193
-    "Navigation Layout": "Diseño de navegación",
194
-    "Top Navigation": "Navegación superior",
195
-    "Modal Width": "Anchura modal",
196
-    "Limited Partnership (LP)": "Sociedad en comandita (LP)",
197
-    "3X Large": "3 veces más grande",
198
-    "Purchase": "Compra",
199
-    "Fixed": "Fijo",
200
-    "End Date": "Fecha de finalización",
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",
201 117
     "Computation": "Computación",
118
+    "Percentage": "Porcentaje",
119
+    "Fixed": "Fijo",
120
+    "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",
202 135
     "Default :Type :Record": "Predeterminado :Type :Record",
203
-    "Children": "Niños",
204
-    "Main": "Principal",
205
-    "All": "Todos",
206
-    "in use": "en uso",
207
-    "Separators must be unique.": "Los separadores deben ser únicos.",
208
-    "Features": "Características",
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",
209 147
     "Default :Record": "Predeterminado :Record",
210
-    "Available": "Disponible",
211
-    "Parent Department": "Departamento de padres",
212
-    "Manager": "Gerente",
213
-    "Company Rates": "Tarifas de la empresa",
214
-    "Currencies": "Divisas",
215
-    "Unavailable": "No disponible",
216
-    "Supported": "Soportado",
217
-    "Entity": "Entidad",
218
-    "Live Rate": "Tarifa en vivo",
219
-    "Company Currencies": "Divisas de la empresa",
220
-    "Currency List": "Lista de divisas",
221
-    "Action Denied": "Acción denegada",
222
-    "The rate must be greater than 0.": "La tasa debe ser superior a 0.",
223
-    "Live Currency": "Divisa en vivo",
224
-    "The :Type :record \":name\" already exists.": "El :Type :record \":name\" ya existe.",
225
-    "Currency Rate": "Tipo de cambio",
226
-    "The rate must be between 0 and 100.": "La tasa debe estar entre 0 y 100.",
227
-    "Resources": "Recursos",
228
-    "Company": "Empresa",
229
-    "Website": "Sitio web",
230
-    "Management": "Administración",
231
-    "Finance": "Finanzas",
232
-    "Personalization": "Personalización",
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",
233 174
     "Subtype": "Subtipo",
234
-    "Investment": "Inversión",
235
-    "Connected": "Conectado",
175
+    "Time Format": "Formato de hora",
236 176
     "Loan": "préstamo",
237
-    "Manual": "Manual",
238
-    "Accounts": "Cuentas",
239 177
     "Credit": "Crédito",
240
-    "Routing Number": "Número de ruta",
241
-    "Brokerage": "Corretaje",
178
+    "Manager": "Gerente",
179
+    "All": "Todas",
242 180
     "Depository": "Depositario",
243
-    "Connected Accounts": "Cuentas conectadas",
244
-    "Account Identification": "Account Identification",
245
-    "Account Settings": "Account Settings",
246
-    "Financial Details": "Financial Details",
247
-    "Accounting": "Accounting",
248
-    "Bank Account": "Bank Account",
249
-    "Starting Balance": "Starting Balance",
250
-    "Oh Yes": "Oh Yes"
181
+    "Children": "Niños",
182
+    "Company Currencies": "Monedas de la empresa",
183
+    "Main": "Principal",
184
+    "Entity": "Entidad",
185
+    "Currency List": "Lista de divisas",
186
+    "Available": "Disponible",
187
+    "Parent Department": "Departamento de padres",
188
+    "Live Rate": "Tarifa en vivo"
251 189
 }

+ 154
- 209
resources/data/lang/fr.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "Général",
3
+    "stone": "pierre",
4
+    "fuchsia": "fuchsia",
3 5
     "slate": "ardoise",
4
-    "yellow": "jaune",
6
+    "cyan": "cyan",
7
+    "Currency": "Devise",
8
+    "rose": "rose",
9
+    "Email": "Courrier électronique",
10
+    "Small": "Petit",
11
+    "Sales Tax": "Taxe de vente",
12
+    "red": "rouge",
13
+    "Discount": "Rabais",
14
+    "Company Profile": "Profil de l'entreprise",
15
+    "Services": "Services",
16
+    "Medium": "Moyen",
5 17
     "orange": "orange",
6
-    "emerald": "émeraude",
7
-    "lime": "citron vert",
8
-    "teal": "sarcelle",
9
-    "stone": "pierre",
10
-    "amber": "ambre",
11
-    "pink": "rose",
12
-    "gray": "gris",
13
-    "zinc": "zinc",
14
-    "green": "vert",
15 18
     "Ascending": "Ascendant",
16
-    "Enabled": "Activé",
17
-    "neutral": "neutre",
18
-    "Tax ID": "Numéro d'identification fiscale",
19
-    "Side Navigation": "Navigation latérale",
20
-    "red": "rouge",
21
-    "Amount": "Montant",
22
-    "Department": "Département",
23
-    "Products": "Produits",
24
-    "Total": "Total",
25
-    "sky": "ciel",
26
-    "Layout": "Mise en page",
27
-    "Other": "Autres",
28
-    "Rate": "Taux",
29
-    "Hours": "Heures",
19
+    "Template": "Modèle",
30 20
     "Price": "Prix",
31
-    "Services": "Des services",
32
-    "Font": "police",
33
-    "Quantity": "Quantité",
34
-    "6X Large": "6X Grand",
35
-    "Small": "Petit",
36
-    "Appearance": "Apparence",
37
-    "Company Profile": "Profil de l'entreprise",
38
-    "Modal Width": "Largeur modale",
39
-    "Invoice": "Facture",
40
-    "Subheader": "Sous-en-tête",
41
-    "Discount": "Rabais",
21
+    "yellow": "jaune",
22
+    "Large": "Grand",
23
+    "Modern": "Moderne",
24
+    "green": "vert",
25
+    "Hours": "Heures",
42 26
     "Tax": "Impôt",
43
-    "Localization": "Localisation",
44
-    "Banking": "Banques",
45
-    "Account": "Compte",
46
-    "Currency": "Devise",
27
+    "Phone Number": "Numéro de téléphone",
47 28
     "Zip \/ Postal Code": "Code postal\/Code postal",
48
-    "Show Logo": "Afficher le logo",
49
-    "Default": "Par défaut",
50
-    "Category": "Catégorie",
51
-    "General Partnership": "Partenariat général",
52
-    "Limited Liability Company (LLC)": "Société à responsabilité limitée (LLC)",
53
-    "Identification": "Identification",
54
-    "Limited Partnership (LP)": "Société en commandite (LP)",
55
-    "Accent Color": "Couleur d'accent",
56
-    "Number Digits": "Chiffres numériques",
57
-    "Navigation Layout": "Disposition de navigation",
58
-    "Content": "Contenu",
29
+    "Sole Proprietorship": "Entreprise individuelle",
30
+    "Classic": "Classique",
31
+    "pink": "rose",
32
+    "zinc": "zinc",
33
+    "neutral": "neutre",
34
+    "amber": "ambre",
35
+    "purple": "pourpre",
59 36
     "Logo": "Logo",
37
+    "Products": "Produits",
38
+    "gray": "gris",
60 39
     "Disabled": "Désactivé",
61
-    "Country": "Pays",
62
-    "Street Address": "Adresse de rue",
63
-    "Email": "Courrier électronique",
64
-    "Primary Color": "Couleur principale",
40
+    "Full": "Complet",
65 41
     "Descending": "Descendant",
66
-    "Settings": "Réglages",
67
-    "Entity Type": "Type d'entité",
68
-    "Price Name": "Nom du prix",
69
-    "Net 10": "Filet 10",
70
-    "Amount Name": "Nom du montant",
71
-    "Net 7": "Filet 7",
72
-    "Item Name": "Nom de l'article",
73 42
     "State \/ Province": "État\/province",
74
-    "Screen": "écran",
75
-    "Sales Tax": "Taxe de vente",
76
-    "Sole Proprietorship": "Entreprise individuelle",
77
-    "Terms": "Termes",
78
-    "Corporation": "Société",
43
+    "Account": "Compte",
79 44
     "Header": "En-tête",
80
-    "Large": "Grand",
81
-    "Phone Number": "Numéro de téléphone",
82
-    "Full": "Complet",
83
-    "Nonprofit": "Sans but lucratif",
84
-    "Medium": "Moyen",
85
-    "Template": "Modèle",
86
-    "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)",
87
-    "Expense Category": "Catégorie de dépenses",
88
-    "Number Next": "Numéro suivant",
89
-    "Table Sort Direction": "Direction de tri du tableau",
90
-    "Unit Name": "Nom de l'unité",
91
-    "Striped Tables": "Tables à rayures",
92
-    "Number Prefix": "Préfixe du numéro",
45
+    "emerald": "émeraude",
46
+    "Font": "Fonte",
47
+    "Identification": "Identification",
48
+    "Corporation": "Société",
49
+    "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",
59
+    "Other": "Autres",
60
+    "Appearance": "Apparence",
61
+    "Banking": "Services bancaires",
62
+    "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
+    "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",
93 79
     "Top Navigation": "Navigation supérieure",
94
-    "Payment Terms": "Modalités de paiement",
95
-    "Taxes & Discounts": "Taxes et remises",
96
-    "Purchase Discount": "Rabais d'achat",
97
-    "Footer \/ Notes": "Pied de page\/\/Remarques",
98
-    "fuchsia": "fuchsia",
80
+    "Data Presentation": "Présentation des données",
99 81
     "Sales Discount": "Rabais sur les ventes",
100
-    "Categories": "Catégories",
101
-    "Legal & Compliance": "Juridique et conformité",
102
-    "3X Large": "3X Grand",
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",
103 87
     "Location Details": "Détails de l'emplacement",
104
-    "indigo": "indigo",
105
-    "purple": "pourpre",
106
-    "Income Category": "Catégorie de revenus",
107
-    "Items": "Objets",
108
-    "blue": "bleu",
109
-    "rose": "rose",
110
-    "Screen Extra Large": "Ecran extra large",
111
-    "cyan": "cyan",
112
-    "violet": "violet",
113
-    "Records Per Page": "Enregistrements par page",
114
-    "City \/ Town": "Ville\/Village",
115
-    "Purchase Tax": "Taxe d'achat",
116
-    "Extra Large": "Très grand",
117
-    "Max Content Width": "Largeur maximale du contenu",
118
-    "Net 90": "Net 90",
119
-    "Classic": "Classique",
120
-    "Timezone": "Fuseau horaire",
88
+    "Payment Terms": "Modalités de paiement",
89
+    "Unit Name": "Nom de l'unité",
121 90
     "Date & Time": "Date et heure",
122
-    "After Number": "Après le numéro",
123
-    "Select Position": "Sélectionnez la position",
124 91
     "Financial & Fiscal": "Financier et fiscal",
125
-    "Fiscal Year End": "Fin de l'année fiscale",
126
-    "Modern": "Moderne",
127
-    "Expense": "Dépense",
128
-    "Precision": "Précision",
129
-    "Name": "Nom",
130
-    "Language": "Langue",
131
-    "Type": "Type",
132
-    "Color": "Couleur",
133
-    "Income": "Revenu",
134
-    "Yes": "Oui",
135
-    "No": "Non",
136
-    "Computation": "Calcul",
137
-    "Net 30": "Filet 30",
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",
138 103
     "Date Format": "Format de date",
139
-    "Net 60": "Filet 60",
140 104
     "Before Number": "Avant le numéro",
141
-    "Net 15": "Filet 15",
142
-    "Item": "Article",
143
-    "Due Upon Receipt": "À payer à la réception",
144
-    "Fiscal Year Start": "Début de l'année fiscale",
145 105
     "Percent Position": "Position en pourcentage",
146
-    "Symbol": "Symbole",
147
-    "Time Format": "Format de l'heure",
148
-    "End Date": "Date de fin",
149
-    "Select a symbol position": "Sélectionnez la position d'un symbole",
150
-    "Week Start": "Début de semaine",
151
-    "None": "Aucune",
152
-    "Product": "Produit",
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",
111
+    "Net 10": "10 % nets",
153 112
     "Number Format": "Format numérique",
154
-    "Percentage": "Pourcentage",
155
-    "Description": "Descriptif",
156
-    "Fixed": "Fixé",
157
-    "Bank": "Banque",
158
-    "Open": "Ouvert",
159
-    "Bank Name": "Nom de la banque",
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",
119
+    "Net 60": "60 % nets",
120
+    "Limited Liability Partnership (LLP)": "Partenariat à responsabilité limitée (LLP)",
121
+    "Show Logo": "Afficher le logo",
122
+    "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",
144
+    "Symbol": "Symbole",
145
+    "Type": "Tapez",
160 146
     "Start Date": "Date de début",
161
-    "Code": "Code",
162
-    "Status": "État",
147
+    "End Date": "Date de fin",
163 148
     "Sales": "Ventes",
164
-    "Scope": "Champ",
165
-    "Account Number": "Numéro de compte",
166
-    "Service": "Service",
167
-    "IBAN": "IBAN",
149
+    "Default :Type :Record": "Par défaut :Type :Record",
150
+    "Purchase": "Acheter",
151
+    "Precision": "Précision",
168 152
     "Symbol Position": "Position du symbole",
169
-    "Decimal Separator": "Séparateur décimal",
170 153
     "Before Amount": "Avant le montant",
171
-    "Additional Information": "Informations supplémentaires",
172 154
     "After Amount": "Après le montant",
155
+    "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",
158
+    "Yes": "Oui",
159
+    "No": "Non",
160
+    "Description": "Descriptif",
161
+    "Computation": "Calcul",
162
+    "Scope": "Portée",
163
+    "Percentage": "Pourcentage",
164
+    "Fixed": "Fixé",
165
+    "None": "Aucune",
166
+    "Product": "Produit",
167
+    "Service": "Service",
173 168
     "Compound": "Composé",
174
-    "Money Market": "Marché monétaire",
175 169
     "Account Information": "Informations sur le compte",
176
-    "Bank Address": "Adresse de la banque",
177
-    "Opening Balance": "Solde d'ouverture",
178
-    "Current Balance": "Solde actuel",
179
-    "Purchase": "Acheter",
180
-    "Savings": "Économies",
181
-    "Bank Information": "Informations bancaires",
182
-    "Credit Card": "Carte de crédit",
183
-    "Thousands Separator": "Séparateur de milliers",
184
-    "Bank Phone": "Téléphone de la banque",
185
-    "Checking": "Vérification",
186
-    "ACH Number": "Numéro ACH",
187
-    "Merchant": "Marchand",
188
-    "Currency & Balance": "Devise et solde",
189
-    "Tags": "Balises",
190
-    "International Bank Information": "Informations bancaires internationales",
191
-    "Routing Information": "Informations de routage",
192
-    "ABA Number": "Numéro ABA",
193
-    "BIC\/SWIFT Code": "Code BIC\/SWIFT",
194
-    "5X Large": "5X Grand",
195
-    "Screen Large": "Grand écran",
196
-    "2X Large": "2 x grand",
197
-    "Extra Small": "Très petit",
198
-    "Screen 2X Large": "Écran 2 fois plus grand",
199
-    "7X Large": "7X Grand",
200
-    "4X Large": "4X Grand",
201
-    "Data Presentation": "Présentation des données",
202
-    "Live Currency": "Devise en direct",
170
+    "Subtype": "Sous-type",
171
+    "Account Number": "Numéro de compte",
172
+    "Credit": "Crédit",
173
+    "Manager": "Directeur",
203 174
     "Children": "Enfants",
204
-    "The :Type :record \":name\" already exists.": "Le :Type :record \":name\" existe déjà.",
205
-    "Features": "Fonctionnalités",
206
-    "Currency List": "Liste des devises",
175
+    "Current Balance": "Solde actuel",
176
+    "Investment": "Investissement",
177
+    "Loan": "Prêt",
207 178
     "All": "Tous",
208
-    "Main": "Principal",
209
-    "Unavailable": "Non disponible",
210
-    "Default :Record": "Par défaut :Record",
211
-    "Supported": "Supporté",
179
+    "Main": "Principale",
212 180
     "Available": "Disponible",
213
-    "in use": "en cours d'utilisation",
214
-    "Company Rates": "Tarifs d'entreprise",
215
-    "Currency Rate": "Taux de change",
216
-    "Default :Type :Record": "Par défaut :Type :Record",
217
-    "Separators must be unique.": "Les séparateurs doivent être uniques.",
218
-    "Manager": "Directeur",
219
-    "Company Currencies": "Devises des entreprises",
220
-    "Currencies": "Devises",
221
-    "Live Rate": "Taux en temps réel",
222
-    "Entity": "Entité",
223
-    "Action Denied": "Action refusée",
224 181
     "Parent Department": "Département parent",
225
-    "The rate must be between 0 and 100.": "Le taux doit être compris entre 0 et 100.",
226
-    "The rate must be greater than 0.": "Le taux doit être supérieur à 0.",
227
-    "Management": "Gestion",
228
-    "Website": "Site Web",
229
-    "Resources": "Ressources",
230
-    "Finance": "Finances",
231
-    "Company": "Entreprise",
232
-    "Personalization": "Personnalisation",
233
-    "Manual": "manuel",
234
-    "Connected": "Connecté",
235
-    "Connected Accounts": "Comptes connectés",
236
-    "Subtype": "Sous-type",
237
-    "Routing Number": "Numéro de routage",
238
-    "Loan": "Prêt",
239
-    "Brokerage": "Courtage",
240
-    "Credit": "Crédit",
241
-    "Investment": "Investissement",
182
+    "Entity": "Entité",
183
+    "Company Currencies": "Devises des entreprises",
184
+    "Default :Record": ":Record par défaut",
185
+    "Live Rate": "Tarif en direct",
186
+    "Currency List": "Liste des devises",
242 187
     "Depository": "Dépositaire",
243
-    "Accounts": "Comptes"
188
+    "Code": "Code"
244 189
 }

+ 153
- 208
resources/data/lang/id.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "Appearance": "Penampilan",
3
-    "gray": "abu-abu",
4
-    "neutral": "netral",
5
-    "orange": "oranye",
6
-    "sky": "langit",
7
-    "purple": "ungu",
8
-    "slate": "batu tulis",
9
-    "zinc": "seng",
10
-    "stone": "batu",
11
-    "yellow": "kuning",
12
-    "lime": "kapur",
13
-    "green": "hijau",
3
+    "red": "merah",
4
+    "Default": "Default",
14 5
     "blue": "biru",
6
+    "sky": "langit",
15 7
     "violet": "ungu",
8
+    "rose": "mawar",
9
+    "Currency": "Mata uang",
10
+    "Template": "Template",
16 11
     "General": "Umum",
17
-    "cyan": "biru kehijau-hijauan",
18
-    "Descending": "Menurun",
19
-    "red": "merah",
20
-    "Income Category": "Kategori Pendapatan",
21
-    "Ascending": "Menaik",
22
-    "Department": "Departemen",
23
-    "Account": "Akun",
24
-    "Settings": "Pengaturan",
25
-    "Tax": "Pajak",
26 12
     "Country": "Negara",
27
-    "Template": "Template",
28
-    "Corporation": "Perusahaan",
29
-    "Font": "Font",
30
-    "Terms": "Ketentuan",
31
-    "Items": "Barang",
32
-    "Category": "Kategori",
33
-    "Default": "Default",
34
-    "Currency": "Mata uang",
35
-    "rose": "mawar",
36
-    "Other": "Lainnya",
37
-    "Invoice": "Faktur",
38
-    "Identification": "Identifikasi",
39
-    "Price": "Harga",
40
-    "Sole Proprietorship": "Kepemilikan Tunggal",
41
-    "Header": "Header",
42 13
     "Banking": "Perbankan",
14
+    "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",
43 26
     "Content": "Konten",
44
-    "Services": "Jasa",
27
+    "Quantity": "Kuantitas",
28
+    "Price": "Harga",
29
+    "Rate": "Nilai",
45 30
     "Amount": "Jumlah",
31
+    "Start Date": "Tanggal Mulai",
32
+    "Precision": "Presisi",
33
+    "Yes": "ya",
34
+    "Fixed": "Tetap",
35
+    "Product": "Produk",
36
+    "Accounting": "Akuntansi",
37
+    "Account": "Akun",
38
+    "Department": "Departemen",
39
+    "green": "hijau",
40
+    "neutral": "netral",
41
+    "pink": "merah muda",
42
+    "purple": "ungu",
43
+    "slate": "batu tulis",
44
+    "stone": "batu",
45
+    "yellow": "kuning",
46
+    "zinc": "seng",
47
+    "Font": "Font",
48
+    "Large": "Besar",
49
+    "Email": "E-Mail",
50
+    "Phone Number": "Nomor Telepon",
51
+    "Logo": "Logo",
52
+    "Corporation": "Perusahaan",
46 53
     "Payment Terms": "Ketentuan Pembayaran",
47
-    "Rate": "Nilai",
54
+    "Header": "Header",
55
+    "Items": "Barang",
56
+    "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",
48 65
     "Total": "Total",
49
-    "Products": "Produk",
50
-    "Quantity": "Kuantitas",
51
-    "Categories": "Kategori",
52
-    "Hours": "Jam",
53
-    "Phone Number": "Nomor Telepon",
54
-    "Email": "E-Mail",
55
-    "Nonprofit": "Nirlaba",
66
+    "None": "Tidak ada",
67
+    "gray": "abu-abu",
68
+    "Records Per Page": "Catatan Per Halaman",
69
+    "Connected Accounts": "Akun Terhubung",
56 70
     "Primary Color": "Warna primer",
57
-    "fuchsia": "Fuchsia",
58
-    "Enabled": "Diaktifkan",
59
-    "Discount": "Diskon",
60
-    "emerald": "zamrud",
61
-    "Modal Width": "Lebar Modal",
62
-    "Logo": "Logo",
71
+    "Ascending": "Menaik",
63 72
     "Item Name": "Nama Item",
64
-    "Navigation Layout": "Tata Letak Navigasi",
65
-    "5X Large": "5X Besar",
66
-    "2X Large": "2X Besar",
67
-    "Side Navigation": "Navigasi Samping",
68
-    "Sales Discount": "Diskon Penjualan",
69
-    "pink": "merah muda",
70
-    "Taxes & Discounts": "Pajak & Diskon",
71
-    "Footer \/ Notes": "Footer\/Catatan",
72
-    "Accent Color": "Warna Aksen",
73
-    "Layout": "Tata Letak",
74
-    "Zip \/ Postal Code": "Post\/Kode Pos",
75
-    "Price Name": "Nama Harga",
76
-    "indigo": "indigo",
77 73
     "Localization": "Lokalisasi",
78
-    "Purchase Discount": "Diskon Pembelian",
79
-    "Max Content Width": "Lebar Konten Maks",
80
-    "Screen": "Layar",
81
-    "State \/ Province": "Negara Bagian\/Provinsi",
82
-    "Net 10": "Bersih 10",
83
-    "Limited Partnership (LP)": "Kemitraan Terbatas (LP)",
84
-    "Expense Category": "Kategori Pengeluaran",
85
-    "Number Next": "Nomor Berikutnya",
86
-    "teal": "teal",
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",
87 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",
88 89
     "Subheader": "Subheader",
89
-    "Tax ID": "ID Pajak",
90
+    "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",
90 101
     "Legal & Compliance": "Hukum & Kepatuhan",
91
-    "Street Address": "Alamat Jalan",
92
-    "General Partnership": "Kemitraan Umum",
93
-    "Sales Tax": "Pajak Penjualan",
94
-    "Purchase Tax": "Pajak Pembelian",
95
-    "Number Prefix": "Awalan Angka",
96
-    "Entity Type": "Tipe Entitas",
102
+    "Net 60": "Bersih 60",
103
+    "Modern": "Modern",
104
+    "End Date": "Tanggal Akhir",
105
+    "Discount": "Diskon",
106
+    "Table Sort Direction": "Arah Urutan Tabel",
97 107
     "Limited Liability Partnership (LLP)": "Kemitraan Tanggung Jawab Terbatas (LLP)",
98
-    "Company Profile": "Profil Perusahaan",
99
-    "amber": "kuning",
100
-    "Show Logo": "Tampilkan Logo",
101
-    "7X Large": "7X Besar",
102
-    "3X Large": "3X Besar",
103
-    "Number Digits": "Angka Digit",
104
-    "Location Details": "Detail Lokasi",
105
-    "Due Upon Receipt": "Jangka Waktu Penerimaan",
106 108
     "City \/ Town": "Kota\/Kota",
107
-    "Unit Name": "Nama Unit",
108
-    "Top Navigation": "Navigasi Teratas",
109
+    "Date & Time": "Tanggal & Waktu",
110
+    "Symbol Position": "Posisi Simbol",
109 111
     "Striped Tables": "Meja Bergaris",
110
-    "Amount Name": "Nama Jumlah",
111
-    "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)",
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",
112 128
     "Net 7": "Bersih 7",
113
-    "Language": "Bahasa",
114
-    "Classic": "Klasik",
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",
115 135
     "Before Number": "Sebelum Nomor",
116
-    "Timezone": "Zona Waktu",
136
+    "Financial & Fiscal": "Keuangan & Fiskal",
137
+    "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",
117 148
     "Select Position": "Pilih Posisi",
118
-    "After Number": "Setelah Nomor",
119
-    "Name": "Nama",
120
-    "Color": "Warna",
121
-    "Code": "Kode",
122
-    "Modern": "Modern",
123
-    "No": "Tidak",
124
-    "Item": "Barang",
125
-    "Net 60": "Bersih 60",
126
-    "End Date": "Tanggal Akhir",
127
-    "Fiscal Year End": "Akhir Tahun Anggaran",
149
+    "Limited Liability Company (LLC)": "Perseroan Terbatas (LLC)",
150
+    "General Partnership": "Kemitraan Umum",
151
+    "Default :Record": "Standar :Record",
152
+    "Nonprofit": "Nirlaba",
128 153
     "Net 90": "Bersih 90",
129
-    "Date & Time": "Tanggal & Waktu",
130
-    "Week Start": "Minggu Mulai",
131
-    "Compound": "Senyawa",
132
-    "Type": "Mengetik",
133
-    "Sales": "Penjualan",
134
-    "Start Date": "Tanggal Mulai",
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",
135 160
     "Time Format": "Format Waktu",
136
-    "Description": "Deskripsi",
137
-    "Purchase": "Pembelian",
138
-    "None": "Tidak ada",
139
-    "Product": "Produk",
140
-    "Yes": "ya",
141
-    "Service": "Pelayanan",
142
-    "Fiscal Year Start": "Mulai Tahun Anggaran",
143
-    "Percentage": "Persentase",
144
-    "Bank": "Bank",
145 161
     "Net 30": "Bersih 30",
146
-    "Precision": "Presisi",
147
-    "Status": "Status",
148
-    "Fixed": "Tetap",
149
-    "Scope": "Lingkup",
162
+    "Amount Name": "Nama Jumlah",
163
+    "Unit Name": "Nama Unit",
164
+    "Subtype": "Subtipe",
150 165
     "Account Number": "Nomor Rekening",
151
-    "Symbol": "Simbol",
152
-    "Income": "Penghasilan",
153
-    "Date Format": "Format Tanggal",
154
-    "Symbol Position": "Posisi Simbol",
155
-    "Computation": "Komputasi",
156
-    "Percent Position": "Posisi Persentase",
157
-    "Financial & Fiscal": "Keuangan & Fiskal",
158
-    "Number Format": "Format Angka",
159
-    "Select a symbol position": "Pilih posisi simbol",
160
-    "After Amount": "Setelah Jumlah",
161
-    "Thousands Separator": "Pemisah Ribuan",
162
-    "Expense": "Pengeluaran",
163
-    "Tags": "Tag",
164
-    "Before Amount": "Sebelum Jumlah",
165
-    "Checking": "Memeriksa",
166
-    "Additional Information": "Informasi Tambahan",
167
-    "IBAN": "IBAN",
168
-    "Bank Name": "Nama Bank",
169
-    "Decimal Separator": "Pemisah Desimal",
170
-    "Open": "Buka",
171
-    "Currency & Balance": "Mata Uang & Saldo",
172
-    "Opening Balance": "Saldo Pembukaan",
173
-    "Disabled": "Dinonaktifkan",
174
-    "Bank Information": "Informasi Bank",
166
+    "Service": "Pelayanan",
167
+    "Manager": "pengelola",
175 168
     "Account Information": "Informasi Akun",
176
-    "ACH Number": "Nomor ACH",
169
+    "Children": "Anak-anak",
177 170
     "Current Balance": "Saldo Saat Ini",
178
-    "Full": "Penuh",
179
-    "International Bank Information": "Informasi Bank Internasional",
180
-    "Bank Address": "Alamat Bank",
181
-    "Merchant": "Pedagang",
182
-    "Savings": "Tabungan",
183
-    "Small": "Kecil",
184
-    "Money Market": "Pasar Uang",
185
-    "Credit Card": "Kartu Kredit",
186
-    "Extra Small": "Ekstra Kecil",
187
-    "Bank Phone": "Telepon Bank",
188
-    "Medium": "Sedang",
189
-    "Routing Information": "Informasi Perutean",
190
-    "Data Presentation": "Presentasi Data",
191
-    "Table Sort Direction": "Arah Urutan Tabel",
192
-    "Screen Large": "Layar Besar",
193
-    "Large": "Besar",
194
-    "Extra Large": "Ekstra Besar",
195
-    "ABA Number": "Nomor ABA",
196
-    "Records Per Page": "Catatan Per Halaman",
197
-    "Screen 2X Large": "Layar 2X Besar",
198
-    "6X Large": "6X Besar",
199
-    "Screen Extra Large": "Layar Ekstra Besar",
200
-    "4X Large": "4X Besar",
201
-    "BIC\/SWIFT Code": "Kode BIC\/SWIFT",
202 171
     "Main": "Utama",
203
-    "Parent Department": "Departemen Orang Tua",
204
-    "Separators must be unique.": "Pemisah harus unik.",
205
-    "Default :Type :Record": "Standar :Type :Record",
206
-    "Default :Record": "Standar :Record",
207
-    "in use": "sedang digunakan",
208
-    "Entity": "Entitas",
172
+    "Compound": "Senyawa",
173
+    "Credit": "Kredit",
209 174
     "All": "Semua",
175
+    "Loan": "Pinjaman",
176
+    "Entity": "Entitas",
210 177
     "Available": "Tersedia",
211
-    "Live Currency": "Mata Uang Langsung",
212
-    "Currency Rate": "Kurs Mata Uang",
213
-    "Live Rate": "Tarif Langsung",
214
-    "Manager": "pengelola",
215
-    "Children": "Anak-anak",
216
-    "Features": "Fitur",
217
-    "Company Rates": "Tarif Perusahaan",
218
-    "Currencies": "Mata Uang",
219
-    "Supported": "Didukung",
178
+    "Depository": "Depository",
220 179
     "Currency List": "Daftar Mata Uang",
221
-    "Unavailable": "Tidak tersedia",
222
-    "The rate must be greater than 0.": "Nilai harus lebih besar dari 0.",
223 180
     "Company Currencies": "Mata Uang Perusahaan",
224
-    "Action Denied": "Tindakan Ditolak",
225
-    "The rate must be between 0 and 100.": "Tarifnya harus antara 0 dan 100.",
226
-    "The :Type :record \":name\" already exists.": ":Type :record \":name\" sudah ada.",
227
-    "Company": "Perusahaan",
228
-    "Management": "Manajemen",
229
-    "Website": "Situs Web",
230
-    "Resources": "Sumber daya",
231
-    "Finance": "Keuangan",
232
-    "Personalization": "Personalisasi",
233
-    "Connected": "Terhubung",
234
-    "Manual": "Manual",
235
-    "Subtype": "Subtipe",
236
-    "Connected Accounts": "Akun Terhubung",
237
-    "Brokerage": "Pialang",
181
+    "Parent Department": "Departemen Orang Tua",
182
+    "Live Rate": "Tarif Langsung",
238 183
     "Investment": "Investasi",
239
-    "Routing Number": "Nomor Routing",
240
-    "Credit": "Kredit",
241
-    "Loan": "Pinjaman",
242
-    "Depository": "Depository",
243
-    "Accounts": "Akun"
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"
244 189
 }

+ 147
- 202
resources/data/lang/it.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "Generale",
3
-    "stone": "pietra",
4
-    "gray": "grigio",
5
-    "neutral": "neutro",
6
-    "yellow": "giallo",
7
-    "lime": "lime",
3
+    "Currency": "Valuta",
4
+    "rose": "rosa",
8 5
     "indigo": "indaco",
6
+    "Rate": "Tariffa",
7
+    "Localization": "Localizzazione",
8
+    "lime": "lime",
9
+    "Discount": "Sconto",
10
+    "blue": "blu",
11
+    "Screen": "Schermo",
12
+    "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",
9 26
     "green": "verde",
10
-    "orange": "arancione",
11
-    "sky": "cielo",
12
-    "emerald": "smeraldo",
27
+    "red": "rosso",
28
+    "Email": "E-mail",
29
+    "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",
13 38
     "zinc": "zinco",
14 39
     "Layout": "Layout",
15
-    "Enabled": "Abilitato",
16
-    "rose": "rosa",
17
-    "Disabled": "Disabili",
18
-    "violet": "viola",
19
-    "Medium": "Medio",
40
+    "Country": "Paese",
41
+    "Date & Time": "Data e ora",
42
+    "Name": "Nome",
43
+    "orange": "arancione",
44
+    "teal": "verde acqua",
45
+    "Identification": "Identificazione",
46
+    "Extra Small": "Extra piccolo",
47
+    "Classic": "Classico",
20 48
     "Appearance": "Aspetto",
21
-    "purple": "viola",
22
-    "Invoice": "Fattura",
23
-    "Descending": "Decrescente",
24
-    "cyan": "ciano",
25
-    "Settings": "Impostazioni",
26
-    "Default": "Impostazione predefinita",
27
-    "Entity Type": "Tipo di entità",
28
-    "Localization": "Localizzazione",
29 49
     "Phone Number": "Numero di telefono",
30
-    "Category": "Categoria",
31
-    "Discount": "Sconto",
32
-    "Currency": "Valuta",
33
-    "blue": "blu",
34
-    "Small": "Piccolo",
35 50
     "State \/ Province": "Stato\/Provincia",
36
-    "Street Address": "Indirizzo stradale",
37 51
     "Header": "Intestazione",
38
-    "Price": "Prezzo",
39
-    "pink": "rosa",
40
-    "Extra Large": "Extra grande",
41
-    "Ascending": "Ascendente",
42
-    "Email": "Posta elettronica",
43
-    "Template": "Modello",
52
+    "Corporation": "società per azioni",
44 53
     "Amount": "Importo",
45
-    "slate": "ardesia",
46 54
     "Font": "Font",
55
+    "Full": "Completo",
56
+    "Bank Account": "Conto bancario",
57
+    "pink": "rosa",
58
+    "Enabled": "Abilitato",
59
+    "Entity Type": "Tipo di entità",
60
+    "Services": "Servizi",
61
+    "sky": "cielo",
62
+    "violet": "viola",
47 63
     "Large": "Grande",
48
-    "Account": "Account",
49
-    "Other": "Altro",
50
-    "Items": "Oggetti",
51
-    "Rate": "Tariffa",
52
-    "teal": "foglia di tè",
53
-    "Banking": "Servizi bancari",
64
+    "Timezone": "Fuso orario",
65
+    "Modern": "Moderno",
66
+    "stone": "pietra",
54 67
     "Content": "Contenuto",
55
-    "Item Name": "Nome dell'articolo",
56
-    "Quantity": "Quantità",
57
-    "Department": "Dipartimento",
58 68
     "Sales Tax": "Imposta sulle vendite",
59
-    "Logo": "Logo",
60
-    "Country": "Paese",
61
-    "Corporation": "società per azioni",
62
-    "Terms": "Termini",
63
-    "Hours": "Ore",
69
+    "Quantity": "Quantità",
64 70
     "Total": "Totale",
65
-    "red": "rosso",
66
-    "Full": "Completo",
67
-    "Tax": "Tasse",
68
-    "Extra Small": "Extra piccolo",
71
+    "Medium": "Medio",
72
+    "Items": "Oggetti",
73
+    "Accounting": "Contabilità",
74
+    "amber": "ambra",
75
+    "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",
69 83
     "Data Presentation": "Presentazione dei dati",
70
-    "Identification": "Identificazione",
71
-    "5X Large": "5X Grande",
72
-    "Screen": "Schermo",
73
-    "Company Profile": "Profilo aziendale",
84
+    "Week Start": "Inizio settimana",
85
+    "Connected Accounts": "Account connessi",
86
+    "Live Currency": "Valuta in tempo reale",
74 87
     "Primary Color": "Colore primario",
75
-    "Nonprofit": "Senza scopo di lucro",
76
-    "4X Large": "4X Grande",
77
-    "fuchsia": "fucsia",
88
+    "Modal Width": "Larghezza modale",
89
+    "5X Large": "5X Grande",
78 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",
79 97
     "Purchase Tax": "Imposta sugli acquisti",
80
-    "City \/ Town": "Città\/Paese",
81
-    "Accent Color": "Colore dell'accento",
82
-    "Taxes & Discounts": "Tasse e sconti",
83
-    "Screen Extra Large": "Schermo extra large",
84
-    "Number Next": "Numero successivo",
85
-    "Unit Name": "Nome dell'unità",
86 98
     "Sales Discount": "Sconto sulle vendite",
87
-    "6X Large": "6X Grande",
88
-    "General Partnership": "Partenariato generale",
89
-    "Tax ID": "Codice fiscale",
90
-    "Subheader": "Sottointestazione",
91
-    "Services": "Servizi",
92
-    "amber": "ambra",
93
-    "Number Digits": "Cifre numeriche",
94
-    "Payment Terms": "Termini di pagamento",
95
-    "7X Large": "7X Grande",
96
-    "Limited Liability Company (LLC)": "Società a responsabilità limitata (LLC)",
97
-    "Sole Proprietorship": "Ditta individuale",
98
-    "Top Navigation": "Navigazione principale",
99
-    "Location Details": "Dettagli sulla posizione",
100
-    "Screen 2X Large": "Schermo 2X Large",
101
-    "Net 7": "Rete 7",
102 99
     "Purchase Discount": "Sconto sull'acquisto",
103
-    "Table Sort Direction": "Direzione di ordinamento della tabella",
104
-    "3X Large": "3X Grande",
100
+    "Company Profile": "Profilo dell'azienda",
101
+    "Tax": "Imposta",
102
+    "emerald": "smeraldo",
105 103
     "Navigation Layout": "Layout di navigazione",
106
-    "Number Prefix": "Prefisso numerico",
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
+    "Location Details": "Dettagli sulla posizione",
111
+    "General Partnership": "Collaborazione generale",
112
+    "Limited Partnership (LP)": "Società in accomandita semplice (LP)",
113
+    "Subheader": "Sottotitolo",
107 114
     "Footer \/ Notes": "Piè di pagina\/Note",
108
-    "Expense Category": "Categoria di spesa",
109
-    "Striped Tables": "Tavoli a righe",
110
-    "Products": "Prodotti",
111
-    "Categories": "Categorie",
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",
124
+    "City \/ Town": "Città\/paese",
125
+    "Tax ID": "ID fiscale",
112 126
     "Limited Liability Partnership (LLP)": "Società a responsabilità limitata (LLP)",
113
-    "Due Upon Receipt": "Scaduto al ricevimento",
114
-    "Limited Partnership (LP)": "Società in accomandita semplice (LP)",
115
-    "Records Per Page": "Record per pagina",
116
-    "Net 15": "Netto 15",
117
-    "Show Logo": "Mostra logo",
118
-    "Net 10": "Netto 10",
119
-    "Income Category": "Categoria di reddito",
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",
132
+    "Due Upon Receipt": "Dovuto al ricevimento",
133
+    "Net 10": "Rete 10",
134
+    "Net 30": "Rete 30",
120 135
     "Legal & Compliance": "Legale e conformità",
121
-    "Zip \/ Postal Code": "Zip\/Codice postale",
122
-    "Modal Width": "Larghezza modale",
136
+    "Number Prefix": "Prefisso numerico",
137
+    "Number Next": "Numero successivo",
123 138
     "Price Name": "Nome del prezzo",
124
-    "Screen Large": "Schermo grande",
125
-    "Side Navigation": "Navigazione laterale",
126
-    "Max Content Width": "Larghezza massima del contenuto",
127
-    "Amount Name": "Nome dell'importo",
128
-    "Timezone": "Fuso orario",
129
-    "Modern": "Moderno",
130
-    "Before Number": "Prima del numero",
131
-    "Classic": "Classico",
132
-    "Language": "Lingua",
133
-    "Select Position": "Seleziona posizione",
134
-    "Fiscal Year End": "Fine dell'anno fiscale",
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",
145
+    "Symbol": "Simbolo",
146
+    "Default :Record": "Predefinito :Record",
135 147
     "Type": "Tipo",
136
-    "Color": "Colore",
137
-    "Net 30": "Netto 30",
138
-    "Net 60": "netto 60",
139
-    "Date & Time": "Data e ora",
140
-    "Date Format": "Formato della data",
141
-    "Time Format": "Formato orario",
142
-    "Expense": "Spese",
143
-    "Yes": "sì",
144
-    "Precision": "Precisione",
145 148
     "Start Date": "Data di inizio",
146
-    "Number Format": "Formato numerico",
147
-    "Name": "Nome",
148
-    "Item": "Oggetto",
149
-    "Code": "Codice",
150
-    "Computation": "Calcolo",
151
-    "Purchase": "Acquisto",
152
-    "Net 90": "Netto 90",
153
-    "After Number": "Dopo il numero",
154
-    "Fixed": "Fisso",
155
-    "Bank": "Banca",
156
-    "Financial & Fiscal": "Finanziario e fiscale",
157
-    "Description": "Descrizione",
158
-    "Week Start": "Inizio settimana",
159
-    "Income": "Reddito",
160 149
     "End Date": "Data di fine",
161
-    "Symbol": "Simbolo",
162
-    "Percentage": "Percentuale",
150
+    "Sales": "Vendite",
151
+    "Default :Type :Record": "Predefinito :Type :Record",
152
+    "Purchase": "Acquisto",
153
+    "Precision": "Precisione",
154
+    "Symbol Position": "Posizione del simbolo",
155
+    "After Amount": "Dopo l'importo",
156
+    "Select a symbol position": "Seleziona la posizione del simbolo",
157
+    "Thousands Separator": "Separatore di migliaia",
158
+    "Yes": "sì",
163 159
     "No": "No",
160
+    "Description": "Descrizione",
161
+    "Computation": "Computazione",
164 162
     "Scope": "Ambito",
165
-    "Percent Position": "Posizione percentuale",
166
-    "Status": "Stato",
167
-    "Additional Information": "Informazioni aggiuntive",
163
+    "Percentage": "Percentuale",
164
+    "Fixed": "Fisso",
165
+    "None": "Nessuna",
168 166
     "Product": "Prodotto",
169
-    "Tags": "Etichette",
170
-    "Open": "Aperta",
171
-    "None": "Nessuno",
172 167
     "Service": "Servizio",
173
-    "Symbol Position": "Posizione del simbolo",
174
-    "Before Amount": "Prima dell'importo",
175
-    "Decimal Separator": "Separatore decimale",
176
-    "Bank Name": "Nome della banca",
177
-    "Sales": "Vendite",
178
-    "Opening Balance": "Saldo di apertura",
179
-    "After Amount": "Dopo l'importo",
180
-    "Bank Information": "Informazioni bancarie",
181
-    "Fiscal Year Start": "Inizio dell'anno fiscale",
182
-    "Account Number": "Numero di conto",
183
-    "Credit Card": "Carta di credito",
184
-    "Savings": "Risparmi",
185
-    "Select a symbol position": "Seleziona una posizione del simbolo",
186
-    "International Bank Information": "Informazioni bancarie internazionali",
187
-    "Thousands Separator": "Separatore delle migliaia",
188
-    "Bank Address": "Indirizzo della banca",
189 168
     "Account Information": "Informazioni sull'account",
190
-    "Currency & Balance": "Valuta e saldo",
191
-    "Routing Information": "Informazioni sul routing",
192
-    "Compound": "Mescola",
169
+    "Investment": "Investimento",
170
+    "Decimal Separator": "Separatore decimale",
171
+    "Compound": "Composto",
193 172
     "Current Balance": "Saldo attuale",
194
-    "IBAN": "IBAN",
195
-    "Checking": "Verifica",
196
-    "Merchant": "Mercante",
197
-    "ACH Number": "Numero ACH",
198
-    "ABA Number": "Numero ABA",
199
-    "BIC\/SWIFT Code": "Codice BIC\/SWIFT",
200
-    "Money Market": "Mercato monetario",
201
-    "Bank Phone": "Telefono della banca",
173
+    "Subtype": "Sottotipo",
174
+    "Account Number": "Numero di conto",
202 175
     "Manager": "Manager",
203
-    "Main": "Principali",
204 176
     "Children": "Bambini",
205 177
     "All": "Tutti",
206
-    "Features": "Caratteristiche",
207
-    "The :Type :record \":name\" already exists.": "Il :Type :record \":name\" esiste già.",
208
-    "Separators must be unique.": "I separatori devono essere univoci.",
209
-    "Supported": "Supportato",
178
+    "Main": "Principale",
179
+    "Credit": "Credito",
180
+    "Loan": "Prestito",
210 181
     "Available": "Disponibile",
211
-    "Company Rates": "Tariffe aziendali",
212
-    "Currencies": "Valute",
213
-    "Default :Type :Record": "Predefinito :Type :Record",
214
-    "Live Currency": "Valuta in tempo reale",
215
-    "Currency Rate": "Tasso di valuta",
216
-    "Live Rate": "Tariffa in tempo reale",
182
+    "Depository": "Depositario",
183
+    "Entity": "Entità",
184
+    "Parent Department": "Reparto genitori",
217 185
     "Currency List": "Elenco delle valute",
218 186
     "Company Currencies": "Valute aziendali",
219
-    "in use": "in uso",
220
-    "Entity": "Entità",
221
-    "Unavailable": "Non disponibile",
222
-    "Default :Record": ":Record predefinito",
223
-    "Action Denied": "Azione negata",
224
-    "The rate must be between 0 and 100.": "La tariffa deve essere compresa tra 0 e 100.",
225
-    "The rate must be greater than 0.": "La tariffa deve essere maggiore di 0.",
226
-    "Parent Department": "Dipartimento dei genitori",
227
-    "Resources": "Risorse",
228
-    "Company": "Azienda",
229
-    "Website": "Sito Web",
230
-    "Finance": "Finanza",
231
-    "Personalization": "Personalizzazione",
232
-    "Management": "Direzione",
233
-    "Connected Accounts": "Account connessi",
234
-    "Subtype": "Sottotipo",
235
-    "Connected": "Connesso",
236
-    "Depository": "Depositario",
237
-    "Loan": "Prestito",
238
-    "Investment": "Investimento",
239
-    "Brokerage": "Intermediazione",
240
-    "Routing Number": "Numero di routing",
241
-    "Manual": "Manuale",
242
-    "Accounts": "Account",
243
-    "Credit": "Credito"
244
-}
187
+    "Before Amount": "Prima dell'importo",
188
+    "Live Rate": "Tasso in tempo reale"
189
+}

+ 153
- 208
resources/data/lang/nl.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "Generaal",
3
-    "neutral": "neutraal",
4
-    "stone": "steen",
5
-    "cyan": "cyaan",
6
-    "Disabled": "Uitgeschakeld",
3
+    "Account": "Rekening",
4
+    "Department": "Afdeling",
7 5
     "sky": "hemel",
6
+    "purple": "paars",
7
+    "Other": "Andere",
8 8
     "gray": "grijs",
9
-    "red": "rood",
10
-    "green": "groen",
11
-    "Category": "Categorie",
12
-    "amber": "barnsteen",
13
-    "Font": "Lettertype",
14
-    "Appearance": "Verschijning",
15
-    "Default": "Standaard",
9
+    "Extra Small": "Extra klein",
16 10
     "yellow": "geel",
17
-    "blue": "blauw",
18
-    "pink": "roze",
19
-    "rose": "roos",
20
-    "Layout": "Indeling",
21
-    "violet": "paars",
22
-    "Categories": "Categorieën",
23
-    "Account": "Account",
24
-    "purple": "paars",
25
-    "Banking": "Bankieren",
26
-    "Corporation": "corporatie",
27
-    "emerald": "smaragd",
28
-    "Invoice": "Factuur",
29
-    "Street Address": "Straatadres",
30
-    "Descending": "Aflopend",
31
-    "Department": "Afdeling",
32
-    "Tax": "Belasting",
11
+    "Default": "Standaard",
12
+    "Disabled": "Uitgeschakeld",
13
+    "Template": "Sjabloon",
14
+    "Total": "Totaal",
15
+    "stone": "steen",
16
+    "Ascending": "Oplopend",
17
+    "Logo": "Logo",
18
+    "Sales": "Verkoop",
19
+    "Currency": "Valuta",
20
+    "Localization": "Lokalisatie",
21
+    "red": "rood",
22
+    "Sales Tax": "Omzetbelasting",
23
+    "lime": "kalk",
33 24
     "Phone Number": "Telefoonnummer",
34
-    "State \/ Province": "Staat\/provincie",
35
-    "slate": "leisteen",
25
+    "Products": "Producten",
26
+    "Hours": "Uren",
27
+    "blue": "blauw",
28
+    "green": "groen",
29
+    "Extra Large": "Extra groot",
30
+    "Date & Time": "Datum en tijd",
31
+    "Name": "Naam",
32
+    "Purchase": "Aankoop",
33
+    "neutral": "neutraal",
36 34
     "orange": "oranje",
37
-    "lime": "kalk",
35
+    "Header": "Koptekst",
36
+    "Symbol": "Symbool",
37
+    "Type": "Typ",
38
+    "Accounting": "Boekhouding",
39
+    "Timezone": "Tijdzone",
40
+    "Content": "Inhoud",
38 41
     "Enabled": "Ingeschakeld",
39
-    "Legal & Compliance": "Wetgeving en naleving",
40
-    "Entity Type": "Entiteitstype",
41
-    "Terms": "Termen",
42
-    "Discount": "Korting",
43
-    "Sales Tax": "Omzetbelasting",
44 42
     "zinc": "zink",
45
-    "Currency": "Valuta",
46
-    "Item Name": "Naam van het item",
47
-    "Email": "E-mailadres",
48
-    "Header": "Koptekst",
49
-    "Products": "Producten",
50
-    "Services": "Diensten",
51
-    "Price": "Prijs",
43
+    "rose": "roos",
52 44
     "Quantity": "Hoeveelheid",
53
-    "Rate": "Tarief",
54
-    "Full": "Volledig",
55
-    "Country": "Land",
56
-    "Content": "Inhoud",
45
+    "Code": "Code",
46
+    "Medium": "Middelgroot",
57 47
     "Amount": "Bedrag",
58
-    "Extra Small": "Extra klein",
59
-    "Template": "Sjabloon",
60
-    "Items": "Voorwerpen",
61
-    "Extra Large": "Extra groot",
62
-    "Logo": "Logo",
63
-    "Other": "Ander",
64
-    "Medium": "Gemiddeld",
65
-    "Total": "Totaal",
66
-    "Hours": "Uren",
67
-    "Ascending": "Oplopend",
68
-    "Small": "Klein",
48
+    "Language": "taal",
49
+    "violet": "paars",
50
+    "pink": "roze",
51
+    "Font": "Lettertype",
52
+    "Full": "Volledig",
69 53
     "Large": "Groot",
70 54
     "Screen": "Scherm",
71
-    "fuchsia": "fuchsia",
72
-    "teal": "taling",
73
-    "Top Navigation": "Navigatie bovenaan",
74
-    "Payment Terms": "Betalingsvoorwaarden",
75
-    "Screen Large": "Groot scherm",
55
+    "Descending": "Aflopend",
56
+    "Email": "Email",
57
+    "Tax ID": "Fiscaal nummer",
58
+    "Price": "Prijs",
59
+    "Classic": "Klassiek",
60
+    "End Date": "Einddatum",
61
+    "Discount": "Korting",
62
+    "Layout": "Indeling",
63
+    "Country": "Land",
64
+    "Street Address": "Adres",
65
+    "Corporation": "corporatie",
66
+    "slate": "leisteen",
67
+    "7X Large": "7x groot",
68
+    "Rate": "Tarief",
69
+    "Start Date": "Startdatum",
76 70
     "indigo": "indigo",
77
-    "Striped Tables": "Gestreepte tafels",
78
-    "Table Sort Direction": "Sorteerrichting van de tabel",
79
-    "City \/ Town": "Stad\/dorp",
80
-    "Location Details": "Locatiegegevens",
81
-    "Localization": "Lokalisatie",
82
-    "5X Large": "5x groot",
83
-    "Records Per Page": "Records per pagina",
84
-    "Max Content Width": "Maximale breedte van de inhoud",
85
-    "Modal Width": "Modale breedte",
86
-    "Sole Proprietorship": "Eenmanszaak",
87
-    "Data Presentation": "Presentatie van gegevens",
88
-    "Identification": "Identificatie",
89
-    "Navigation Layout": "Navigatie-indeling",
90
-    "Limited Partnership (LP)": "Beperkt partnerschap (LP)",
91
-    "Sales Discount": "Verkoopkorting",
92
-    "Accent Color": "Accentkleur",
93
-    "Income Category": "Inkomenscategorie",
94
-    "Settings": "Instellingen",
71
+    "fuchsia": "fuchsia",
72
+    "Small": "Klein",
73
+    "Banking": "Bankieren",
74
+    "6X Large": "6x groot",
75
+    "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",
95 85
     "Due Upon Receipt": "Verschuldigd bij ontvangst",
96
-    "General Partnership": "Algemeen partnerschap",
97
-    "Limited Liability Partnership (LLP)": "Partnerschap met beperkte aansprakelijkheid (LLP)",
98
-    "Amount Name": "Naam van het bedrag",
86
+    "teal": "groenblauw",
87
+    "Screen 2X Large": "Scherm 2X groot",
99 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",
97
+    "Nonprofit": "Non-profitorganisatie",
98
+    "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",
100 106
     "4X Large": "4X groot",
101
-    "Tax ID": "BTW-nummer",
102
-    "Show Logo": "Logo tonen",
103
-    "6X Large": "6x groot",
104
-    "7X Large": "7x groot",
105
-    "Screen 2X Large": "Scherm 2x groot",
107
+    "Modern": "Modern",
106 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",
118
+    "Net 7": "Net 7",
107 119
     "Net 15": "Netto 15",
108
-    "Subheader": "Subkop",
109
-    "Zip \/ Postal Code": "Postcode\/postcode",
110
-    "Net 10": "Netto 10",
111
-    "Side Navigation": "Navigatie aan de zijkant",
112
-    "Primary Color": "Primaire kleur",
113
-    "Footer \/ Notes": "Voettekst\/Notities",
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",
114 128
     "Limited Liability Company (LLC)": "Vennootschap met beperkte aansprakelijkheid (LLC)",
129
+    "Bank Account": "Bankrekening",
130
+    "Time Format": "Tijdformaat",
115 131
     "Company Profile": "Bedrijfsprofiel",
116
-    "Purchase Discount": "Aankoopkorting",
117
-    "Net 30": "Netto 30",
118
-    "Expense Category": "Uitgavencategorie",
119
-    "Nonprofit": "Non-profitorganisatie",
120
-    "Screen Extra Large": "Scherm extra groot",
121
-    "Price Name": "Naam van de prijs",
122
-    "Taxes & Discounts": "Belastingen en kortingen",
123
-    "Number Prefix": "Nummervoorvoegsel",
124
-    "Unit Name": "Naam van de eenheid",
125
-    "Net 7": "Netto 7",
126
-    "Before Number": "Voor nummer",
127
-    "Language": "Taal",
128
-    "Number Next": "Nummer volgend",
132
+    "City \/ Town": "Stad\/stad",
133
+    "Number Next": "Nummer Volgende",
134
+    "Amount Name": "Naam van het bedrag",
129 135
     "Select Position": "Positie selecteren",
130
-    "Date & Time": "Datum en tijd",
131
-    "After Number": "Na nummer",
132
-    "Type": "Typ",
133
-    "Item": "Voorwerp",
134
-    "Color": "Kleur",
135
-    "No": "Nee",
136
-    "Symbol": "Symbool",
137
-    "Classic": "Klassiek",
138
-    "Timezone": "Tijdzone",
139
-    "Name": "Naam",
140
-    "Modern": "Modern",
136
+    "Financial & Fiscal": "Financieel en fiscaal",
137
+    "Services": "Diensten",
141 138
     "Number Digits": "Aantal cijfers",
142
-    "Time Format": "Tijdformaat",
143
-    "Net 60": "Netto 60",
139
+    "Records Per Page": "Records per pagina",
140
+    "Net 30": "Netto 30",
141
+    "Date Format": "Datumformaat",
142
+    "Taxes & Discounts": "Belastingen en kortingen",
143
+    "Striped Tables": "Gestreepte tafels",
144
+    "State \/ Province": "Staat\/provincie",
144 145
     "Net 90": "Netto 90",
145
-    "Financial & Fiscal": "Financieel en fiscaal",
146
-    "Expense": "Uitgaven",
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",
147 152
     "2X Large": "2X groot",
148
-    "Percent Position": "Positie in procenten",
149
-    "Week Start": "Begin van de week",
150
-    "Date Format": "Datumformaat",
151
-    "Fiscal Year End": "Einde van het fiscale jaar",
152
-    "Number Format": "Formaat van het getal",
153
-    "Code": "Code",
154
-    "Precision": "Nauwkeurigheid",
155
-    "Income": "Inkomen",
156
-    "Sales": "Verkoop",
157
-    "Purchase": "Aankoop",
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",
158 161
     "Yes": "Ja",
159
-    "Start Date": "Startdatum",
160
-    "Computation": "Berekening",
162
+    "Percentage": "Percentage",
161 163
     "Scope": "Toepassingsgebied",
162
-    "Description": "Omschrijving",
163
-    "Fixed": "Opgelost",
164
-    "Compound": "Verbinding",
165
-    "Account Number": "Rekeningnummer",
166
-    "Service": "Service",
167
-    "Open": "Open",
168
-    "Bank": "Bank",
164
+    "No": "Nee",
169 165
     "Product": "Product",
170
-    "After Amount": "Na het bedrag",
171
-    "Percentage": "Percentage",
172
-    "End Date": "Einddatum",
173
-    "Fiscal Year Start": "Begin van het fiscale jaar",
174
-    "Decimal Separator": "Decimaal scheidingsteken",
175
-    "Thousands Separator": "Scheidingsteken voor duizenden",
176
-    "Additional Information": "Aanvullende informatie",
177
-    "Tags": "Labels",
178 166
     "None": "Geen",
179
-    "Before Amount": "Vóór het bedrag",
180
-    "Status": "Status",
181
-    "Symbol Position": "Positie van het symbool",
182
-    "Money Market": "Geldmarkt",
167
+    "Fixed": "Opgelost",
168
+    "Service": "Service",
169
+    "Compound": "Samenstelling",
170
+    "Computation": "Berekening",
183 171
     "Current Balance": "Huidig saldo",
184
-    "Bank Information": "Bankgegevens",
185
-    "Select a symbol position": "Selecteer een symboolpositie",
186
-    "Checking": "Controleren",
187
-    "Currency & Balance": "Valuta en saldo",
188
-    "Opening Balance": "Beginsaldo",
189
-    "Bank Name": "Naam van de bank",
190
-    "International Bank Information": "Internationale bankgegevens",
191
-    "Account Information": "Accountinformatie",
192
-    "ABA Number": "ABA-nummer",
193
-    "Routing Information": "Informatie over de routering",
194
-    "ACH Number": "ACH-nummer",
195
-    "IBAN": "IBAN",
196
-    "Bank Phone": "Telefoon van de bank",
197
-    "Credit Card": "Creditcard",
198
-    "BIC\/SWIFT Code": "BIC-\/SWIFT-code",
199
-    "Savings": "Besparingen",
200
-    "Merchant": "Koopman",
201
-    "Bank Address": "Adres van de bank",
202
-    "Default :Type :Record": "Standaard :Type :Record",
172
+    "Account Information": "Accountgegevens",
173
+    "Subtype": "Subtype",
174
+    "Account Number": "Rekeningnummer",
175
+    "Investment": "Investering",
176
+    "Credit": "Krediet",
177
+    "Depository": "Depository",
178
+    "Manager": "Manager",
203 179
     "Children": "Kinderen",
204
-    "Main": "Belangrijkste",
205
-    "Separators must be unique.": "Afscheiders moeten uniek zijn.",
206
-    "Features": "Kenmerken",
207
-    "Entity": "Entiteit",
208
-    "Unavailable": "Niet beschikbaar",
209 180
     "All": "Alles",
210
-    "The :Type :record \":name\" already exists.": "De :Type :record \":name\" bestaat al.",
211
-    "Default :Record": "Standaard :Record",
212
-    "in use": "in gebruik",
213
-    "Supported": "Ondersteund",
214
-    "Live Currency": "Valuta live",
215
-    "Currency Rate": "Valutakoers",
216
-    "Currencies": "Valuta's",
217
-    "Currency List": "Valutalijst",
218
-    "Manager": "Manager",
181
+    "Entity": "Entiteit",
219 182
     "Available": "Beschikbaar",
220
-    "Company Rates": "Tarieven voor bedrijven",
221
-    "Live Rate": "Live tarief",
222
-    "Company Currencies": "Valuta's van bedrijven",
223
-    "Action Denied": "Actie afgewezen",
183
+    "Main": "Belangrijkste",
224 184
     "Parent Department": "Ouderafdeling",
225
-    "The rate must be greater than 0.": "De snelheid moet groter zijn dan 0.",
226
-    "The rate must be between 0 and 100.": "Het tarief moet tussen 0 en 100 liggen.",
227
-    "Personalization": "Personalisatie",
228
-    "Website": "Website",
229
-    "Resources": "Hulpbronnen",
230
-    "Finance": "Financiën",
231
-    "Company": "Bedrijf",
232
-    "Management": "Management",
233
-    "Subtype": "Subtype",
234
-    "Routing Number": "Routeringsnummer",
235
-    "Connected Accounts": "Gekoppelde accounts",
236
-    "Manual": "Handboek",
237
-    "Accounts": "Accounts",
238
-    "Investment": "Investering",
239 185
     "Loan": "Lening",
240
-    "Connected": "Verbonden",
241
-    "Credit": "Krediet",
242
-    "Depository": "Depository",
243
-    "Brokerage": "Makelaardij"
186
+    "Company Currencies": "Valuta's van bedrijven",
187
+    "Live Rate": "Tarief live",
188
+    "Currency List": "Valutalijst"
244 189
 }

+ 149
- 204
resources/data/lang/pt.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "Geral",
3
-    "stone": "pedra",
4
-    "yellow": "amarelo",
5
-    "green": "verde",
6
-    "zinc": "zinco",
7
-    "cyan": "ciano",
3
+    "indigo": "índigo",
8 4
     "slate": "ardósia",
9
-    "gray": "cinzento",
5
+    "neutral": "neutro",
6
+    "purple": "roxo",
10 7
     "orange": "laranja",
11
-    "lime": "cal",
12
-    "teal": "azul-petróleo",
13
-    "blue": "azul",
14
-    "Descending": "Descendente",
15
-    "amber": "âmbar",
16
-    "emerald": "esmeralda",
17
-    "Invoice": "Fatura",
18
-    "Appearance": "Aparência",
19
-    "Category": "Categoria",
8
+    "Total": "Total",
9
+    "Email": "E-mail",
10
+    "Rate": "Tarifa",
20 11
     "Discount": "Desconto",
21
-    "neutral": "neutro",
22
-    "sky": "céu",
23
-    "Location Details": "Detalhes da localização",
24
-    "Categories": "Categorias",
25
-    "Identification": "Identificação",
12
+    "Font": "Fonte",
13
+    "State \/ Province": "Estado\/ Província",
14
+    "zinc": "zinco",
15
+    "Date & Time": "Data e hora",
16
+    "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 26
     "red": "vermelho",
27
-    "Banking": "Banca",
28
-    "Settings": "Configurações",
29
-    "Content": "Conteúdo",
30
-    "Email": "E-mail",
31
-    "Tax ID": "ID fiscal",
32
-    "Default": "Padrão",
33
-    "Sales Tax": "Imposto sobre vendas",
27
+    "sky": "céu",
28
+    "Full": "Completo",
29
+    "Other": "Outros",
34 30
     "Localization": "Localização",
35
-    "Account": "Conta",
36 31
     "Items": "Itens",
37
-    "Street Address": "Endereço da rua",
38
-    "City \/ Town": "Cidade\/ Cidade",
39
-    "Country": "País",
32
+    "blue": "azul",
33
+    "Nonprofit": "Sem fins lucrativos",
34
+    "Content": "Conteúdo",
35
+    "Code": "Código",
36
+    "Services": "Serviços",
37
+    "Amount": "Quantia",
38
+    "Products": "Produtos",
39
+    "Modern": "Moderno",
40 40
     "Quantity": "Quantidade",
41
-    "Terms": "Termos",
42
-    "Total": "Total",
43
-    "Department": "Departamento",
44
-    "State \/ Province": "Estado\/Província",
41
+    "lime": "cal",
42
+    "stone": "pedra",
43
+    "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",
45 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",
46 62
     "Corporation": "Corporação",
47
-    "Products": "Produtos",
48
-    "Rate": "Tarifa",
49
-    "Phone Number": "Número de telefone",
50
-    "Other": "Outros",
63
+    "Default": "Padrão",
51 64
     "violet": "violeta",
52
-    "Tax": "Imposto",
53
-    "Item Name": "Nome do item",
54
-    "Logo": "Logotipo",
55
-    "Amount": "Quantidade",
65
+    "green": "verde",
66
+    "fuchsia": "fúcsia",
67
+    "gray": "cinzento",
68
+    "Street Address": "Endereço da rua",
69
+    "teal": "azul-petróleo",
70
+    "Tax ID": "Identificação fiscal",
56 71
     "Template": "Modelo",
57
-    "Currency": "Moeda",
58
-    "Services": "Serviços",
59
-    "Font": "Fonte",
60
-    "rose": "rose",
61
-    "Nonprofit": "Sem fins lucrativos",
62
-    "purple": "roxo",
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",
63 76
     "pink": "rosa",
64
-    "Entity Type": "Tipo de entidade",
65
-    "Layout": "Layout",
66
-    "Extra Small": "Extra pequeno",
67
-    "Large": "Grande",
68
-    "Ascending": "Ascendente",
69
-    "Medium": "Médio",
70
-    "indigo": "índigo",
71
-    "Small": "Pequeno",
72
-    "Enabled": "Habilitado",
73
-    "Net 15": "Rede 15",
74
-    "Side Navigation": "Navegação lateral",
75
-    "Price": "Preço",
76
-    "Disabled": "Desativado",
77
-    "Purchase Discount": "Desconto na compra",
78
-    "Full": "Completo",
79
-    "Sales Discount": "Desconto de vendas",
80
-    "Number Next": "Número seguinte",
81
-    "Income Category": "Categoria de renda",
82
-    "Screen": "Ecrã",
83
-    "Extra Large": "Extra grande",
84
-    "Sole Proprietorship": "Propriedade exclusiva",
85
-    "Number Digits": "Dígitos numéricos",
86
-    "Expense Category": "Categoria de despesa",
87
-    "General Partnership": "Parceria geral",
88
-    "Taxes & Discounts": "Impostos e descontos",
89
-    "Show Logo": "Mostrar logotipo",
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",
90 83
     "Unit Name": "Nome da unidade",
91
-    "Amount Name": "Nome do valor",
92
-    "Subheader": "Subtítulo",
93
-    "Purchase Tax": "Imposto de compra",
94
-    "Limited Partnership (LP)": "Parceria limitada (LP)",
95 84
     "Net 7": "Rede 7",
96
-    "Company Profile": "Perfil da empresa",
97
-    "Limited Liability Partnership (LLP)": "Parceria de responsabilidade limitada (LLP)",
98 85
     "Net 10": "Rede 10",
99
-    "Due Upon Receipt": "Vencido após o recebimento",
100
-    "Max Content Width": "Largura máxima do conteúdo",
101
-    "7X Large": "7X Grande",
102
-    "Accent Color": "Cor de destaque",
103
-    "Striped Tables": "Mesas listradas",
104
-    "Screen 2X Large": "Tela 2X grande",
105
-    "Records Per Page": "Registros por página",
106
-    "Screen Extra Large": "Tela extra grande",
107
-    "3X Large": "3X Grande",
108
-    "Navigation Layout": "Layout de navegação",
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",
109 92
     "Top Navigation": "Navegação superior",
110
-    "Zip \/ Postal Code": "CEP\/Código postal",
111
-    "Header": "cabeçalho",
112
-    "Data Presentation": "Apresentação de dados",
113
-    "2X Large": "2X Grande",
93
+    "Striped Tables": "Mesas listradas",
94
+    "Enabled": "Ativado",
95
+    "Disabled": "Desativado",
114 96
     "Table Sort Direction": "Direção de classificação da tabela",
97
+    "6X Large": "6X Grande",
115 98
     "Screen Large": "Tela grande",
116
-    "Price Name": "Nome do preço",
117
-    "Number Prefix": "Prefixo numérico",
99
+    "Extra Small": "Extra pequeno",
100
+    "Location Details": "Detalhes da localização",
101
+    "City \/ Town": "Cidade\/Cidade",
102
+    "Zip \/ Postal Code": "CEP\/Código postal",
118 103
     "Legal & Compliance": "Legal e conformidade",
119
-    "fuchsia": "fúcsia",
120
-    "Payment Terms": "Condições de pagamento",
121
-    "Footer \/ Notes": "Rodapé\/Notas",
104
+    "Sole Proprietorship": "Propriedade individual",
105
+    "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",
111
+    "Due Upon Receipt": "Vencido após o recebimento",
112
+    "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",
122 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
+    "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",
123 131
     "Primary Color": "Cor primária",
124
-    "5X Large": "5X Grande",
125
-    "Date & Time": "Data e hora",
126
-    "Classic": "clássico",
127
-    "Modern": "Moderno",
128
-    "Before Number": "Antes do número",
129 132
     "Modal Width": "Largura modal",
133
+    "General Partnership": "Parceria geral",
134
+    "Limited Partnership (LP)": "Parceria Limitada (LP)",
130 135
     "After Number": "Depois do número",
131
-    "Color": "Cor",
132
-    "6X Large": "6X Grande",
133
-    "Name": "Nome",
134
-    "Item": "Item",
135
-    "No": "Não",
136
-    "Code": "Código",
137
-    "Language": "Idioma",
138
-    "Select Position": "Selecionar posição",
136
+    "Small": "Pequeno",
137
+    "Payment Terms": "Condições de pagamento",
138
+    "Net 15": "Rede 15",
139
+    "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",
145
+    "Symbol": "Símbolo",
146
+    "Default :Record": "Padrão :Record",
139 147
     "Type": "Tipo",
140
-    "Net 90": "Líquido 90",
141
-    "Income": "Renda",
142
-    "Precision": "Precisão",
143
-    "Net 60": "Líquido 60",
144
-    "Timezone": "Fuso horário",
145
-    "Sales": "Vendas",
146
-    "Week Start": "Início da semana",
147
-    "Net 30": "Rede 30",
148
-    "Yes": "sim",
149 148
     "Start Date": "Data de início",
150 149
     "End Date": "Data de término",
151
-    "Computation": "Computação",
152
-    "Date Format": "Formato de data",
150
+    "Sales": "Vendas",
151
+    "Default :Type :Record": "Padrão :Type :Record",
153 152
     "Purchase": "Compra",
153
+    "Precision": "Precisão",
154
+    "Symbol Position": "Posição do símbolo",
155
+    "Before Amount": "Antes do valor",
156
+    "After Amount": "Após o valor",
157
+    "Select a symbol position": "Selecione a posição de um símbolo",
158
+    "Decimal Separator": "Separador decimal",
159
+    "Thousands Separator": "Separador de milhares",
160
+    "Yes": "sim",
161
+    "No": "Não",
162
+    "Description": "Descrição",
163
+    "Computation": "Computação",
164
+    "Scope": "Escopo",
154 165
     "Percentage": "Porcentagem",
155
-    "Product": "Produto",
166
+    "Fixed": "Fixo",
156 167
     "None": "Nenhum",
157
-    "Open": "Aberto",
168
+    "Product": "Produto",
158 169
     "Service": "Serviço",
170
+    "Compound": "Composto",
159 171
     "Current Balance": "Saldo atual",
160 172
     "Account Information": "Informações da conta",
161
-    "Additional Information": "Informações adicionais",
162
-    "Number Format": "Formato numérico",
163
-    "Financial & Fiscal": "Financeiro e fiscal",
164
-    "Percent Position": "Posição percentual",
165
-    "Symbol Position": "Posição do símbolo",
166
-    "Scope": "Escopo",
167
-    "Expense": "Despesa",
168
-    "Bank": "Banco",
169
-    "Fixed": "Fixo",
170
-    "Description": "Descrição",
171
-    "Status": "Status",
172
-    "Decimal Separator": "Separador decimal",
173
-    "Compound": "Composto",
174
-    "Before Amount": "Antes do valor",
175
-    "Select a symbol position": "Selecione a posição de um símbolo",
176
-    "Routing Information": "Informações de roteamento",
173
+    "Subtype": "Subtipo",
177 174
     "Account Number": "Número da conta",
178
-    "Fiscal Year End": "Fim do ano fiscal",
179
-    "Time Format": "Formato de hora",
180
-    "Currency & Balance": "Moeda e saldo",
181
-    "Opening Balance": "Saldo de abertura",
182
-    "ACH Number": "Número ACH",
183
-    "Thousands Separator": "Separador de milhares",
184
-    "Bank Address": "Endereço bancário",
185
-    "IBAN": "IBAN",
186
-    "Bank Phone": "Telefone bancário",
187
-    "Bank Information": "Informações bancárias",
188
-    "Bank Name": "Nome do banco",
189
-    "ABA Number": "Número ABA",
190
-    "Tags": "Etiquetas",
191
-    "After Amount": "Após o valor",
192
-    "Credit Card": "Cartão de crédito",
193
-    "Merchant": "Comerciante",
194
-    "Money Market": "Mercado monetário",
195
-    "Checking": "Verificando",
196
-    "International Bank Information": "Informações bancárias internacionais",
197
-    "Savings": "Poupança",
198
-    "Symbol": "Símbolo",
199
-    "BIC\/SWIFT Code": "Código BIC\/SWIFT",
200
-    "Fiscal Year Start": "Início do ano fiscal",
201
-    "4X Large": "4X Grande",
202
-    "Children": "Crianças",
203
-    "Supported": "Suportado",
204
-    "Separators must be unique.": "Os separadores devem ser exclusivos.",
205
-    "Company Rates": "Tarifas da empresa",
206
-    "Entity": "Entidade",
207
-    "in use": "em uso",
175
+    "Investment": "Investimento",
176
+    "Credit": "Crédito",
177
+    "Loan": "Empréstimo",
208 178
     "Manager": "Gestor",
209
-    "Default :Record": "Padrão :Record",
210
-    "Unavailable": "Indisponível",
211
-    "Currency Rate": "Taxa de câmbio",
212
-    "Currencies": "Moedas",
213
-    "All": "Todos",
179
+    "Children": "Crianças",
214 180
     "Main": "Principal",
215
-    "Default :Type :Record": "Padrão :Type :Record",
181
+    "Depository": "Depositário",
182
+    "All": "Todos",
183
+    "Entity": "Entidade",
216 184
     "Available": "Disponível",
217
-    "Live Rate": "Tarifa ao vivo",
218
-    "Currency List": "Lista de moedas",
219
-    "Company Currencies": "Moedas da empresa",
220
-    "Features": "Características",
221
-    "The :Type :record \":name\" already exists.": "O :Type :record \":name\" já existe.",
222
-    "Action Denied": "Ação negada",
223
-    "Live Currency": "Moeda ao vivo",
224 185
     "Parent Department": "Departamento de pais",
225
-    "The rate must be between 0 and 100.": "A taxa deve estar entre 0 e 100.",
226
-    "The rate must be greater than 0.": "A taxa deve ser maior que 0.",
227
-    "Website": "Site",
228
-    "Personalization": "Personalização",
229
-    "Management": "Gestão",
230
-    "Resources": "Recursos",
231
-    "Finance": "Finanças",
232
-    "Company": "Companhia",
233
-    "Subtype": "Subtipo",
234
-    "Connected": "Conectado",
235
-    "Connected Accounts": "Contas conectadas",
236
-    "Credit": "Crédito",
237
-    "Investment": "Investimento",
238
-    "Depository": "Depositário",
239
-    "Brokerage": "Corretagem",
240
-    "Routing Number": "Número de roteamento",
241
-    "Loan": "Empréstimo",
242
-    "Manual": "Manual",
243
-    "Accounts": "Contas"
186
+    "Currency List": "Lista de moedas",
187
+    "Live Rate": "Tarifa ao vivo",
188
+    "Company Currencies": "Moedas da empresa"
244 189
 }

+ 153
- 208
resources/data/lang/tr.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "General",
3
-    "cyan": "camgöbeği",
4
-    "purple": "mor",
5
-    "Font": "Yazı Tipi",
6
-    "blue": "mavi",
7
-    "green": "yeşil",
8
-    "Ascending": "Yükselen",
9
-    "Descending": "Azalan",
10
-    "sky": "gökyüzü",
11
-    "Disabled": "Engelli",
12 3
     "violet": "menekşe",
13
-    "Sales Tax": "Satış Vergisi",
14
-    "lime": "kireç",
15
-    "Extra Large": "Ekstra Büyük",
16
-    "Discount": "İndirim",
17
-    "rose": "gül",
18
-    "Settings": "Ayarlar",
19 4
     "slate": "arduvaz",
20
-    "Currency": "Para Birimi",
21
-    "Tax ID": "Vergi Kimliği",
22
-    "Logo": "Logo",
23
-    "Extra Small": "Ekstra Küçük",
24
-    "Department": "Departman",
25
-    "teal": "deniz mavisi",
26
-    "Small": "Küçük",
27
-    "Rate": "Oranı",
28
-    "Large": "Büyük",
5
+    "yellow": "sarı",
6
+    "stone": "taş",
29 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",
30 20
     "Invoice": "Fatura",
31
-    "Terms": "Şartlar",
32
-    "Categories": "Kategoriler",
33
-    "Content": "İçerik",
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",
34 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",
45
+    "Appearance": "Görünüm",
46
+    "Default": "Varsayılan",
35 47
     "Localization": "Yerelleştirme",
36
-    "Banking": "Bankacılık",
48
+    "Discount": "İndirim",
49
+    "amber": "kehribar",
50
+    "emerald": "zümrüt",
51
+    "lime": "kireç",
37 52
     "neutral": "nötr",
38
-    "Country": "Ülke",
53
+    "purple": "mor",
39 54
     "Enabled": "Etkin",
40
-    "Item Name": "Öğe Adı",
55
+    "Extra Large": "Ekstra Büyük",
56
+    "Email": "E-posta",
57
+    "Logo": "Logo",
58
+    "Tax ID": "Vergi Kimliği",
59
+    "Payment Terms": "Ödeme Koşulları",
60
+    "Content": "İçerik",
41 61
     "Items": "Öğeler",
42
-    "Full": "Dolu",
43
-    "Template": "Şablon",
44
-    "Screen": "Ekranı",
45
-    "Nonprofit": "kar amacı gütmeyen",
46
-    "Services": "HİZMETLER",
47 62
     "Other": "Diğer",
48
-    "orange": "turuncu",
49
-    "Category": "Kategori",
50
-    "Email": "E-posta",
51
-    "gray": "gri",
52 63
     "Quantity": "Miktar",
53 64
     "Hours": "Saatler",
54
-    "Street Address": "Sokak Adresi",
55
-    "Default": "Varsayılan",
56
-    "Amount": "Miktar",
57
-    "red": "kırmızı",
65
+    "Language": "Dil",
66
+    "Name": "İsim",
67
+    "Code": "Kod",
68
+    "Symbol": "Sembol",
69
+    "Type": "Tür",
70
+    "Sales": "Satışlar",
71
+    "Precision": "Hassasiyet",
72
+    "Description": "Açıklama",
73
+    "Fixed": "Sabit",
74
+    "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",
84
+    "Service": "Hizmet",
58 85
     "Tax": "Vergi",
59
-    "Price": "FİYAT",
60
-    "Header": "Başlık",
61
-    "yellow": "sarı",
62
-    "amber": "kehribar",
63
-    "Medium": "Orta",
64
-    "pink": "pembe",
65
-    "Corporation": "şirket",
66
-    "Total": "Toplam",
67
-    "zinc": "çinko",
68
-    "6X Large": "6X Büyük",
69
-    "3X Large": "3X Büyük",
70
-    "Primary Color": "Ana Renk",
71
-    "Navigation Layout": "Navigasyon Düzeni",
72
-    "7X Large": "7X Büyük",
73
-    "Screen Extra Large": "Ekstra Büyük Ekran",
74
-    "2X Large": "2X Büyük",
75
-    "Records Per Page": "Sayfa Başına Kayıtlar",
86
+    "fuchsia": "fuşya",
76 87
     "indigo": "çivit",
77
-    "Data Presentation": "Veri Sunumu",
78
-    "emerald": "zümrüt",
79
-    "Number Prefix": "Numara Öneki",
80
-    "Top Navigation": "Üst Navigasyon",
81
-    "Location Details": "Konum Ayrıntıları",
82
-    "Income Category": "Gelir Kategorisi",
83
-    "Sole Proprietorship": "Tek mülkiyet",
84
-    "Striped Tables": "Çizgili Tablolar",
85
-    "Purchase Discount": "Satın Alma İndirimi",
86
-    "Price Name": "Fiyat Adı",
87
-    "stone": "taş",
88
-    "City \/ Town": "Şehir\/Kasaba",
89
-    "Net 30": "Net 30",
90
-    "Entity Type": "Varlık Türü",
91
-    "Footer \/ Notes": "Altbilgi\/Notlar",
92
-    "Phone Number": "Telefon Numarası",
93
-    "Net 15": "Net 15",
94
-    "Number Digits": "Sayı Rakamları",
95
-    "Account": "Hesap",
96
-    "Company Profile": "Firma Profili",
97
-    "Max Content Width": "Maksimum İçerik Genişliği",
98
-    "Taxes & Discounts": "Vergiler ve İndirimler",
99
-    "Table Sort Direction": "Tablo Sıralama Yönü",
100
-    "Legal & Compliance": "Yasal ve Uyum",
101
-    "Due Upon Receipt": "Alındıktan Sonra Ödenecek",
102
-    "Payment Terms": "Ödeme Koşulları",
103
-    "Modal Width": "Modal Genişliği",
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ı",
104 94
     "General Partnership": "Genel Ortaklık",
105
-    "4X Large": "4X Büyük",
106
-    "Net 90": "Net 90",
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",
107 102
     "Amount Name": "Miktar Adı",
103
+    "Striped Tables": "Çizgili Tablolar",
104
+    "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)",
108 105
     "Show Logo": "Logoyu Göster",
109
-    "Appearance": "Görünüm",
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",
110 113
     "Limited Liability Partnership (LLP)": "Sınırlı Sorumluluk Ortaklığı (LLP)",
111
-    "Screen Large": "Geniş Ekran",
112
-    "5X Large": "5X Büyük",
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ü",
113 131
     "Screen 2X Large": "Ekran 2X Büyük",
114
-    "Net 10": "Net 10",
132
+    "2X Large": "2X Büyük",
133
+    "Symbol Position": "Sembol Konumu",
134
+    "6X Large": "6X Büyük",
135
+    "Side Navigation": "Yan Navigasyon",
115 136
     "Net 60": "Net 60",
116
-    "Number Next": "Sonraki numara",
117
-    "Unit Name": "Birim Adı",
118
-    "Sales Discount": "Satış İndirimi",
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",
119 145
     "Purchase Tax": "Satın Alma Vergisi",
120
-    "Side Navigation": "Yan Navigasyon",
121
-    "Identification": "Tanımlama",
122
-    "fuchsia": "fuşya",
123 146
     "Zip \/ Postal Code": "Posta Kodu\/Posta Kodu",
124
-    "Accent Color": "Vurgu Rengi",
147
+    "Percent Position": "Yüzde Pozisyonu",
148
+    "Screen Large": "Geniş Ekran",
149
+    "Thousands Separator": "Binlerce Ayırıcı",
125 150
     "Subheader": "Alt başlık",
126
-    "State \/ Province": "Eyalet\/İl",
127
-    "Expense Category": "Gider Kategorisi",
128
-    "Limited Partnership (LP)": "Sınırlı Ortaklık (LP)",
129
-    "Net 7": "Net 7",
151
+    "Net 30": "Net 30",
152
+    "Default :Record": "Varsayılan :Record",
153
+    "Max Content Width": "Maksimum İçerik Genişliği",
130 154
     "Limited Liability Company (LLC)": "Sınırlı Sorumluluk Şirketi (LLC)",
131
-    "Modern": "Çağdaş",
132
-    "Before Number": "Numaradan Önce",
133
-    "Classic": "Klasik",
134
-    "Select Position": "Pozisyon Seçiniz",
135
-    "Yes": "Evet",
136
-    "Income": "Gelir",
137
-    "Color": "Renk",
138
-    "Timezone": "Saat dilimi",
139
-    "No": "Hayır",
140
-    "Language": "Dil",
141
-    "Name": "İsim",
142
-    "Symbol": "Sembol",
143
-    "Type": "Tür",
144
-    "After Number": "Numaradan Sonra",
145
-    "Precision": "Hassasiyet",
146
-    "Sales": "Satışlar",
147
-    "Start Date": "Başlangıç Tarihi",
148
-    "Fixed": "Sabit",
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
+    "Compound": "Bileşik",
159
+    "Rate": "Oranı",
160
+    "3X Large": "3X Büyük",
161
+    "Number Digits": "Sayı Rakamları",
149 162
     "Date Format": "Tarih Biçimi",
150
-    "Current Balance": "Mevcut Bakiye",
151
-    "Time Format": "Zaman Biçimi",
152
-    "Code": "Kod",
153
-    "Item": "Öğe",
154
-    "Product": "Ürün",
155
-    "Description": "Açıklama",
156
-    "Week Start": "Hafta Başlangıcı",
157
-    "End Date": "Bitiş Tarihi",
158
-    "Scope": "Kapsam",
159
-    "Computation": "Hesaplama",
160
-    "Purchase": "Satın alma",
161
-    "Financial & Fiscal": "Finansal ve Mali",
162
-    "Open": "Açık",
163
-    "None": "Yok",
164
-    "Account Information": "Hesap Bilgileri",
165
-    "Percentage": "Yüzde",
166
-    "Expense": "Gider",
167
-    "Bank Name": "Banka Adı",
168
-    "Percent Position": "Yüzde Pozisyonu",
169
-    "Tags": "Etiketler",
170
-    "Fiscal Year Start": "Mali Yıl Başlangıcı",
171
-    "Bank": "Banka",
172
-    "Date & Time": "Tarih ve Saat",
173
-    "ABA Number": "ABA Numarası",
174
-    "After Amount": "Miktardan Sonra",
175
-    "Before Amount": "Miktardan Önce",
176
-    "Status": "Durum",
177
-    "Savings": "Tasarruf",
163
+    "Screen Extra Large": "Ekstra Büyük Ekran",
164
+    "Extra Small": "Ekstra Küçük",
165
+    "Due Upon Receipt": "Alındıktan Sonra Ödenecek",
178 166
     "Number Format": "Sayı Biçimi",
179
-    "Service": "Hizmet",
180
-    "Credit Card": "Kredi Kartı",
181
-    "IBAN": "IBAN",
182
-    "Select a symbol position": "Bir sembol konumu seçin",
167
+    "Before Amount": "Miktardan Önce",
168
+    "Sole Proprietorship": "Tek mülkiyet",
169
+    "Modal Width": "Modal Genişliği",
170
+    "Financial & Fiscal": "Finansal ve Mali",
183 171
     "Account Number": "Hesap Numarası",
184
-    "Additional Information": "Ek Bilgiler",
185
-    "Symbol Position": "Sembol Konumu",
186
-    "Thousands Separator": "Binlerce Ayırıcı",
187
-    "Fiscal Year End": "Mali Yıl Sonu",
188
-    "Compound": "Bileşik",
189
-    "Currency & Balance": "Para Birimi ve Bakiye",
190
-    "Bank Information": "Banka Bilgileri",
191
-    "ACH Number": "ACH Numarası",
192
-    "Money Market": "Para Piyasası",
193
-    "Decimal Separator": "Ondalık Ayırıcı",
194
-    "Opening Balance": "Açılış Bakiyesi",
195
-    "Routing Information": "Yönlendirme Bilgileri",
196
-    "BIC\/SWIFT Code": "BIC\/SWIFT Kodu",
197
-    "International Bank Information": "Uluslararası Banka Bilgileri",
198
-    "Bank Phone": "Banka Telefonu",
199
-    "Bank Address": "Banka Adresi",
200
-    "Merchant": "Tüccar",
201
-    "Checking": "Kontrol etmek",
202
-    "Default :Type :Record": "Varsayılan :Type :Record",
203
-    "Currencies": "Para Birimleri",
204
-    "Separators must be unique.": "Ayırıcılar benzersiz olmalıdır.",
205
-    "in use": "kullanımda",
206
-    "Features": "Özellikler",
207
-    "Supported": "desteklenen",
208
-    "Entity": "Varlık",
209
-    "Unavailable": "Kullanılamıyor",
210
-    "Company Rates": "Şirket Fiyatları",
211
-    "Company Currencies": "Şirket Para Birimleri",
212 172
     "Manager": "yönetici",
213
-    "All": "Hepsi",
214
-    "The :Type :record \":name\" already exists.": ":Type :record \":name\" zaten var.",
215
-    "Default :Record": "Varsayılan :Record",
216
-    "Available": "Mevcut",
217
-    "Live Currency": "Canlı Para Birimi",
218
-    "Currency List": "Para Birimi Listesi",
219
-    "Children": "Çocuklar",
220
-    "Main": "Ana",
221
-    "Currency Rate": "Döviz Kuru",
222
-    "Parent Department": "Ebeveyn Bölümü",
223
-    "The rate must be greater than 0.": "Oranın 0'dan büyük olması gerekir.",
224
-    "Live Rate": "Canlı Oran",
225
-    "The rate must be between 0 and 100.": "Oranın 0 ile 100 arasında olması gerekir.",
226
-    "Action Denied": "Eylem Reddedildi",
227
-    "Website": "İnternet sitesi",
228
-    "Management": "Yönetim",
229
-    "Resources": "Kaynaklar",
230
-    "Personalization": "Kişiselleştirme",
231
-    "Company": "ŞİRKETİ",
232
-    "Finance": "Finans",
233
-    "Connected Accounts": "Bağlı Hesaplar",
234
-    "Connected": "Bağlı",
235 173
     "Subtype": "Alt Tür",
236 174
     "Credit": "Kredi",
175
+    "All": "Hepsi",
237 176
     "Loan": "Kredi",
177
+    "Account Information": "Hesap Bilgileri",
238 178
     "Investment": "Yatırım",
239
-    "Brokerage": "Aracılık",
240 179
     "Depository": "Depozito",
241
-    "Routing Number": "Yönlendirme Numarası",
242
-    "Manual": "El Kitabı",
243
-    "Accounts": "Hesaplar"
180
+    "Main": "Ana",
181
+    "Entity": "Varlık",
182
+    "Current Balance": "Mevcut Bakiye",
183
+    "Available": "Mevcut",
184
+    "Children": "Çocuklar",
185
+    "Currency List": "Para Birimi Listesi",
186
+    "Company Currencies": "Şirket Para Birimleri",
187
+    "Parent Department": "Ebeveyn Bölümü",
188
+    "Live Rate": "Canlı Oran"
244 189
 }

+ 149
- 204
resources/data/lang/zh.json Visa fil

@@ -1,244 +1,189 @@
1 1
 {
2 2
     "General": "普通的",
3
-    "pink": "粉色",
4
-    "emerald": "翡翠",
5
-    "green": "绿色",
6
-    "teal": "蓝绿色",
7
-    "rose": "玫瑰",
8
-    "Data Presentation": "数据演示",
9
-    "purple": "紫色",
10
-    "Department": "部门",
11
-    "cyan": "青色",
12
-    "Layout": "布局",
13
-    "red": "红色",
14
-    "Font": "字体",
15
-    "Full": "完整",
16
-    "Category": "类别",
17
-    "violet": "紫色",
18
-    "orange": "橙色",
19
-    "Company Profile": "公司简介",
20
-    "blue": "蓝色",
21
-    "Logo": "徽标",
22
-    "Currency": "货币",
3
+    "slate": "石板",
23 4
     "lime": "石灰",
24
-    "Email": "电子邮件",
25
-    "Country": "国家",
26
-    "amber": "琥珀色",
27
-    "sky": "天空",
28
-    "Medium": "中等",
29
-    "Side Navigation": "侧面导航",
30
-    "Disabled": "已禁用",
5
+    "Layout": "布局",
6
+    "purple": "紫色",
31 7
     "Small": "小",
32
-    "Banking": "银行业",
33
-    "Enabled": "已启用",
34
-    "Extra Small": "超小",
35
-    "Categories": "类别",
8
+    "Tax ID": "税号",
9
+    "Corporation": "公司",
10
+    "amber": "琥珀色",
36 11
     "yellow": "黄色",
37
-    "indigo": "靛青",
38
-    "Price": "价格",
39
-    "Amount": "金额",
40
-    "Default": "默认",
41
-    "Items": "物品",
12
+    "Enabled": "已启用",
13
+    "Language": "语言",
14
+    "gray": "灰色",
15
+    "Email": "电子邮件",
16
+    "Full": "已满",
42 17
     "Products": "产品",
43
-    "Other": "其他",
44
-    "Tax": "税",
18
+    "Phone Number": "电话号码",
19
+    "Header": "标题",
20
+    "Discount": "折扣",
21
+    "sky": "天空",
22
+    "Content": "内容",
45 23
     "Template": "模板",
24
+    "Other": "其他",
25
+    "Rate": "费率",
26
+    "Localization": "本地化",
27
+    "Large": "大号",
28
+    "Items": "物品",
46 29
     "Quantity": "数量",
47
-    "Large": "大",
48
-    "Item Name": "物品名",
49
-    "Content": "内容",
50
-    "Phone Number": "电话号码",
30
+    "Medium": "中等",
31
+    "Screen": "屏幕",
32
+    "Department": "部门",
51 33
     "State \/ Province": "州\/省",
52
-    "Nonprofit": "非营利",
53
-    "Terms": "条款",
54
-    "Hours": "时长",
55
-    "gray": "灰色",
56
-    "Account": "账户",
57
-    "Corporation": "公司",
58
-    "Extra Large": "超大",
34
+    "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
+    "Banking": "银行业",
48
+    "emerald": "翡翠",
49
+    "Descending": "降序",
50
+    "Timezone": "时区",
51
+    "Tax": "税",
52
+    "Currency": "货币",
53
+    "Sales Tax": "销售税",
54
+    "Default": "默认",
55
+    "neutral": "中立",
56
+    "red": "红色",
59 57
     "stone": "石头",
60
-    "Screen": "屏幕",
61
-    "Services": "服务",
62
-    "Rate": "评分",
63
-    "Entity Type": "实体类型",
64
-    "zinc": "锌",
65 58
     "Appearance": "外观",
59
+    "cyan": "青色",
60
+    "green": "绿色",
66 61
     "Invoice": "发票",
67
-    "neutral": "中立",
68
-    "Descending": "降序",
69
-    "Ascending": "上升",
70
-    "Total": "共计",
71
-    "slate": "石板",
72
-    "Street Address": "街道地址",
73
-    "Primary Color": "原色",
74
-    "Navigation Layout": "导航布局",
75
-    "Localization": "本地化",
76
-    "Top Navigation": "顶部导航",
77
-    "7X Large": "7X 大号",
62
+    "Name": "姓名",
63
+    "blue": "蓝色",
64
+    "zinc": "锌",
65
+    "Font": "字体",
66
+    "Account": "账户",
67
+    "pink": "粉色",
68
+    "indigo": "靛青",
69
+    "Services": "服务",
70
+    "Logo": "徽标",
78 71
     "6X Large": "6X 大号",
79
-    "fuchsia": "紫红色",
80
-    "Settings": "设置",
81
-    "Table Sort Direction": "表格排序方向",
82
-    "Number Next": "下一个数字",
83
-    "Tax ID": "税号",
72
+    "Unit Name": "单位名称",
73
+    "Hours": "小时",
74
+    "Net 60": "净值 60",
75
+    "Date Format": "日期格式",
84 76
     "Sales Discount": "销售折扣",
85
-    "Location Details": "位置详情",
77
+    "Purchase Discount": "购买折扣",
78
+    "Data Presentation": "数据演示",
79
+    "Payment Terms": "付款条款",
80
+    "Records Per Page": "每页记录数",
81
+    "Subheader": "副标题",
86 82
     "Purchase Tax": "购置税",
87
-    "Expense Category": "费用类别",
83
+    "Location Details": "位置详情",
88 84
     "Price Name": "价格名称",
89
-    "Discount": "折扣",
85
+    "Bank Account": "银行账户",
86
+    "3X Large": "3X 大号",
87
+    "Modal Width": "模态宽度",
88
+    "Disabled": "已禁用",
89
+    "7X Large": "7X 大号",
90 90
     "Legal & Compliance": "法律与合规",
91 91
     "Number Digits": "数字数字",
92
-    "Header": "标题",
93
-    "Max Content Width": "最大内容宽度",
94
-    "Screen Extra Large": "屏幕超大",
95
-    "Payment Terms": "付款条款",
96
-    "City \/ Town": "城市\/城镇",
97
-    "Purchase Discount": "购买折扣",
98
-    "General Partnership": "普通合伙企业",
99
-    "Number Prefix": "数字前缀",
100 92
     "Accent Color": "口音颜色",
101
-    "Income Category": "收入类别",
102
-    "Identification": "识别",
103
-    "5X Large": "5X 大号",
93
+    "Financial & Fiscal": "金融与财政",
94
+    "Number Next": "下一个数字",
95
+    "Net 30": "Net 30",
96
+    "Time Format": "时间格式",
97
+    "Top Navigation": "热门导航",
98
+    "General Partnership": "普通合伙企业",
99
+    "Live Currency": "实时货币",
100
+    "Table Sort Direction": "表格排序方向",
104 101
     "4X Large": "4X 大号",
105
-    "Net 7": "Net 7",
106
-    "Subheader": "副标题",
107
-    "Striped Tables": "条纹桌子",
108
-    "Unit Name": "单位名称",
109
-    "Sole Proprietorship": "独资经营",
110
-    "Limited Partnership (LP)": "有限合伙企业 (LP)",
111 102
     "Screen Large": "屏幕大",
112
-    "Net 15": "Net 15",
113
-    "Screen 2X Large": "屏幕 2 倍大",
114
-    "Show Logo": "显示徽标",
115
-    "Limited Liability Partnership (LLP)": "有限责任合伙企业(LLP)",
116
-    "Due Upon Receipt": "收货后到期",
117
-    "Net 10": "Net 10",
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": "紫红色",
113
+    "Limited Liability Partnership (LLP)": "有限责任合伙企业 (LLP)",
114
+    "Nonprofit": "非营利",
115
+    "Entity Type": "实体类型",
116
+    "Before Number": "在数字之前",
117
+    "Number Format": "数字格式",
118
+    "Extra Small": "超小",
119
+    "Net 7": "Net 7",
120
+    "After Number": "在数字之后",
121
+    "Taxes & Discounts": "税收和折扣",
122
+    "City \/ Town": "城市\/城镇",
118 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": "街道地址",
119 130
     "Footer \/ Notes": "页脚\/备注",
120
-    "Records Per Page": "每页记录数",
121
-    "Taxes & Discounts": "税收和折扣",
122
-    "3X Large": "3X 大号",
123
-    "Sales Tax": "销售税",
124
-    "2X Large": "2 倍大号",
125
-    "Zip \/ Postal Code": "邮政编码 \/邮政编码",
131
+    "Limited Partnership (LP)": "有限合伙企业 (LP)",
132
+    "Sole Proprietorship": "独资经营",
133
+    "5X Large": "5X 大号",
134
+    "Item Name": "物品名称",
135
+    "Date & Time": "日期和时间",
136
+    "Net 15": "Net 15",
126 137
     "Amount Name": "金额名称",
127
-    "Modal Width": "模态宽度",
128
-    "Classic": "经典",
129
-    "Before Number": "在数字之前",
130
-    "Language": "语言",
131
-    "Select Position": "选择职位",
132
-    "Timezone": "时区",
133
-    "Modern": "现代",
134
-    "Color": "颜色",
135
-    "No": "没有",
136
-    "After Number": "编号之后",
137
-    "Yes": "是的",
138
-    "Name": "姓名",
139
-    "Item": "物品",
140
-    "Net 60": "Net 60",
141
-    "Income": "收入",
142
-    "Symbol": "符号",
143
-    "Financial & Fiscal": "金融与财政",
144
-    "Fiscal Year Start": "财政年度开始",
145
-    "Net 90": "Net 90",
146
-    "Expense": "费用",
147
-    "Number Format": "数字格式",
148 138
     "Percent Position": "百分比位置",
149
-    "Fiscal Year End": "财政年度结束",
150
-    "Date Format": "日期格式",
151
-    "Date & Time": "日期和时间",
152
-    "Select a symbol position": "选择符号位置",
153
-    "Net 30": "Net 30",
139
+    "Net 10": "Net 10",
140
+    "Connected Accounts": "关联账户",
141
+    "Max Content Width": "最大内容宽度",
142
+    "Screen Extra Large": "屏幕超大",
143
+    "Net 90": "净值 90",
154 144
     "Code": "代码",
155
-    "Computation": "计算",
156
-    "Type": "键入",
145
+    "Symbol": "符号",
146
+    "Type": "类型",
147
+    "Start Date": "开始日期",
148
+    "Default :Record": "默认 :Record",
149
+    "End Date": "结束日期",
150
+    "Sales": "销售",
151
+    "Default :Type :Record": "默认 :Type :Record",
157 152
     "Purchase": "购买",
153
+    "Precision": "精度",
154
+    "Symbol Position": "符号位置",
155
+    "Before Amount": "金额之前",
156
+    "After Amount": "扣除金额后",
157
+    "Select a symbol position": "选择符号位置",
158
+    "Decimal Separator": "小数分隔符",
159
+    "Yes": "是的",
160
+    "No": "没有",
158 161
     "Description": "描述",
159
-    "Sales": "销售",
160
-    "Fixed": "已修复",
161
-    "None": "没有",
162
-    "Compound": "化合物",
162
+    "Computation": "计算",
163 163
     "Scope": "范围",
164
-    "Precision": "精度",
165
-    "Service": "服务",
166
-    "End Date": "结束日期",
167
-    "Status": "状态",
168
-    "Open": "打开",
169
-    "Account Information": "账户信息",
170
-    "Start Date": "开始日期",
171 164
     "Percentage": "百分比",
172
-    "Opening Balance": "期初余额",
173
-    "Bank Name": "银行名称",
174
-    "Savings": "储蓄",
175
-    "Bank": "银行",
176
-    "Checking": "正在检查",
165
+    "Fixed": "已修复",
166
+    "None": "无",
177 167
     "Product": "产品",
178
-    "After Amount": "扣除金额",
179
-    "Merchant": "商人",
168
+    "Service": "服务",
169
+    "Compound": "化合物",
170
+    "Subtype": "子类型",
171
+    "Account Number": "账号",
180 172
     "Thousands Separator": "千位分隔符",
181
-    "Currency & Balance": "货币与余额",
182
-    "Decimal Separator": "小数分隔符",
183
-    "Current Balance": "当前余额",
184
-    "Account Number": "账户号码",
185
-    "Tags": "标签",
186
-    "Bank Address": "银行地址",
187
-    "Bank Phone": "银行电话",
188
-    "Money Market": "货币市场",
189
-    "BIC\/SWIFT Code": "BIC\/SWIFT 代码",
190
-    "Bank Information": "银行信息",
191
-    "Additional Information": "其他信息",
192
-    "ACH Number": "ACH 号码",
193
-    "IBAN": "IBAN",
194
-    "International Bank Information": "国际银行信息",
195
-    "Week Start": "本周开始",
196
-    "Credit Card": "信用卡",
197
-    "Routing Information": "路由信息",
198
-    "ABA Number": "ABA 号码",
199
-    "Symbol Position": "符号位置",
200
-    "Time Format": "时间格式",
201
-    "Before Amount": "之前的金额",
202
-    "Default :Type :Record": "默认 :Type :Record",
203
-    "Features": "特征",
204
-    "Live Currency": "实时货币",
205
-    "Default :Record": "默认 :Record",
206
-    "Currency List": "货币清单",
173
+    "Account Information": "账户信息",
174
+    "Investment": "投资",
175
+    "Credit": "信用",
207 176
     "Manager": "经理",
208
-    "in use": "在使用中",
209
-    "Supported": "支持的",
210
-    "Company Rates": "公司费率",
177
+    "Children": "孩子们",
211 178
     "All": "全部",
212
-    "The :Type :record \":name\" already exists.": ":Type :record “:name” 已经存在。",
213 179
     "Available": "可用",
214
-    "Unavailable": "不可用",
215
-    "Currency Rate": "货币汇率",
216
-    "Currencies": "货币",
217
-    "Children": "孩子们",
218
-    "Separators must be unique.": "分隔符必须是唯一的。",
219
-    "Live Rate": "实时汇率",
220
-    "Company Currencies": "公司货币",
221 180
     "Main": "主要",
222 181
     "Entity": "实体",
223
-    "Action Denied": "操作被拒绝",
224
-    "Parent Department": "家长部门",
225
-    "The rate must be between 0 and 100.": "速率必须介于 0 和 100 之间。",
226
-    "The rate must be greater than 0.": "速率必须大于 0。",
227
-    "Finance": "财务",
228
-    "Website": "网站",
229
-    "Personalization": "个性化",
230
-    "Management": "管理",
231
-    "Company": "公司",
232
-    "Resources": "资源",
233
-    "Connected Accounts": "关联账户",
234
-    "Investment": "投资",
235 182
     "Loan": "贷款",
236
-    "Subtype": "子类型",
237
-    "Credit": "信用",
238
-    "Brokerage": "经纪业务",
239
-    "Connected": "已连接",
240
-    "Routing Number": "路由号码",
241 183
     "Depository": "存放处",
242
-    "Accounts": "账户",
243
-    "Manual": "手册"
184
+    "Parent Department": "家长部",
185
+    "Currency List": "货币清单",
186
+    "Company Currencies": "公司货币",
187
+    "Live Rate": "实时汇率",
188
+    "Current Balance": "当前余额"
244 189
 }

+ 173
- 0
resources/views/components/panel-shift-dropdown.blade.php Visa fil

@@ -0,0 +1,173 @@
1
+@php
2
+    $items = filament()->getUserMenuItems();
3
+    $logoutItem = $items['logout'] ?? null;
4
+    $currentTenant = filament()->getTenant();
5
+    $currentTenantName = $currentTenant ? filament()->getTenantName($currentTenant) : null;
6
+
7
+    $navigation = $component->getNavigation();
8
+    $hasDisplayAndAccessibility = $component->hasDisplayAndAccessibility();
9
+    $hasCompanySettings = $component->hasCompanySettings();
10
+    $hasLogoutItem = $component->hasLogoutItem();
11
+    $panels = $component->getNavigationAsHierarchyArray();
12
+@endphp
13
+
14
+<div x-data="panelShiftDropdown">
15
+    <div x-on:click="toggleDropdown()" class="flex cursor-pointer">
16
+        <button
17
+            type="button"
18
+            class="fi-tenant-menu-trigger group flex w-full items-center justify-center gap-x-3 rounded-lg p-2 text-sm font-medium outline-none transition duration-75 hover:bg-gray-100 focus-visible:bg-gray-100 dark:hover:bg-white/5 dark:focus-visible:bg-white/5"
19
+        >
20
+            <x-filament-panels::avatar.tenant
21
+                :tenant="$currentTenant"
22
+                class="shrink-0"
23
+            />
24
+
25
+            <span class="grid justify-items-start text-start">
26
+                @if ($currentTenant instanceof \Filament\Models\Contracts\HasCurrentTenantLabel)
27
+                    <span class="text-xs text-gray-500 dark:text-gray-400">
28
+                        {{ $currentTenant->getCurrentTenantLabel() }}
29
+                    </span>
30
+                @endif
31
+
32
+                <span class="text-gray-950 dark:text-white">
33
+                    {{ $currentTenantName }}
34
+                </span>
35
+            </span>
36
+
37
+            <x-filament::icon
38
+                icon="heroicon-m-chevron-down"
39
+                class="h-5 w-5 transition duration-75 text-gray-400 group-hover:text-gray-500 group-focus-visible:text-gray-500 dark:text-gray-500 dark:group-hover:text-gray-400 dark:group-focus-visible:text-gray-400"
40
+                x-bind:class="{ 'rotate-180': open }"
41
+            />
42
+        </button>
43
+    </div>
44
+    <div x-show="open" class="flex flex-col transition duration-200 ease-in-out grow shrink mt-4 absolute z-10 w-screen max-w-[360px] end-8 rounded-lg bg-white shadow-lg ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10 overflow-hidden">
45
+        @foreach($panels as $panelId => $panel)
46
+            <x-panel-shift-dropdown.panel :panel-id="$panelId">
47
+                @if($panelId !== 'main' && isset($panel['label']))
48
+                    <x-panel-shift-dropdown.subpanel-header :label="$panel['label']" :panel-id="$panelId" />
49
+                @endif
50
+                @if($panel['renderItems'])
51
+                    @foreach($panel['items'] as $item)
52
+                        <x-panel-shift-dropdown.content-handler :item="$item" />
53
+                    @endforeach
54
+                @endif
55
+                @if($panelId === 'company-settings')
56
+                    <x-panel-shift-dropdown.company-settings :current-tenant="$currentTenant" icon="heroicon-m-building-office-2" />
57
+                @endif
58
+                @if($panelId === 'company-switcher')
59
+                    <x-panel-shift-dropdown.company-switcher :current-tenant="$currentTenant" icon="heroicon-m-adjustments-horizontal" />
60
+                @endif
61
+                @if($panelId === 'display-and-accessibility')
62
+                    <x-panel-shift-dropdown.display-accessibility icon="heroicon-s-moon"/>
63
+                @endif
64
+                @if($panelId === 'main' && $hasLogoutItem)
65
+                    <x-panel-shift-dropdown.item
66
+                        tag="form"
67
+                        method="post"
68
+                        :action="$logoutItem?->getUrl() ?? filament()->getLogoutUrl()"
69
+                        :label="$logoutItem?->getLabel() ?? __('filament-panels::layout.actions.logout.label')"
70
+                        :icon="$logoutItem?->getIcon() ?? \Filament\Support\Facades\FilamentIcon::resolve('panels::user-menu.logout-button') ?? 'heroicon-m-arrow-left-on-rectangle'"
71
+                    />
72
+                @endif
73
+            </x-panel-shift-dropdown.panel>
74
+        @endforeach
75
+    </div>
76
+</div>
77
+
78
+<script>
79
+    document.addEventListener('alpine:init', () => {
80
+        Alpine.data('panelShiftDropdown', () => ({
81
+            open: false,
82
+            navigationStack: ['main'],
83
+            theme: localStorage.getItem('theme') || '{{ filament()->getDefaultThemeMode()->value }}',
84
+            themeLabels: {
85
+                light: 'Off',
86
+                dark: 'On',
87
+                system: 'System',
88
+            },
89
+
90
+            toggleDropdown() {
91
+                this.open = !this.open;
92
+            },
93
+
94
+            setActiveMenu(menu) {
95
+                if (this.open) {
96
+                    this.transitionPanel(menu, 'forward');
97
+                }
98
+            },
99
+
100
+            focusMenuItem(menuItemRef) {
101
+                this.$nextTick(() => {
102
+                    setTimeout(() => {
103
+                        this.$refs[menuItemRef]?.focus();
104
+                    }, 200);
105
+                });
106
+            },
107
+
108
+            focusBackButton(backButtonRef) {
109
+                this.$nextTick(() => {
110
+                    setTimeout(() => {
111
+                        this.$refs[backButtonRef]?.focus();
112
+                    }, 200);
113
+                });
114
+            },
115
+
116
+            goBack() {
117
+                if (this.open && this.navigationStack.length > 1) {
118
+                    this.transitionPanel(this.navigationStack.at(-2), 'back');
119
+                }
120
+            },
121
+
122
+            currentActiveMenu() {
123
+                return this.navigationStack.at(-1);
124
+            },
125
+
126
+            transitionPanel(target, direction) {
127
+                const currentPanel = this.$refs[this.currentActiveMenu()];
128
+                const targetPanel = this.$refs[target];
129
+
130
+                const translateX = direction === 'forward' ? '-100%' : '100%';
131
+                currentPanel.style.transform = `translateX(${translateX})`;
132
+
133
+                setTimeout(() => {
134
+                    currentPanel.classList.add('hide');
135
+                    targetPanel.classList.remove('hide');
136
+                    targetPanel.style.transform = 'translateX(0)';
137
+
138
+                    if (direction === 'forward') {
139
+                        this.navigationStack.push(target);
140
+                    } else {
141
+                        this.navigationStack.pop();
142
+                    }
143
+                }, 200);
144
+            },
145
+
146
+            setTheme(newTheme) {
147
+                this.theme = newTheme;
148
+            },
149
+
150
+            init() {
151
+                this.$watch('theme', (value) => {
152
+                    this.$dispatch('theme-changed', value);
153
+                });
154
+
155
+                this.$watch('open', (value) => {
156
+                    if (value) {
157
+                        if (this.navigationStack.length === 1) {
158
+                            const mainPanel = this.$refs.main;
159
+                            mainPanel.classList.remove('hide');
160
+                            mainPanel.style.transform = 'translateX(0)';
161
+                        }
162
+                    } else {
163
+                        this.navigationStack = ['main'];
164
+                    }
165
+                });
166
+            },
167
+
168
+            getThemeLabel(value) {
169
+                return this.themeLabels[value] || value;
170
+            },
171
+        }));
172
+    });
173
+</script>

+ 50
- 0
resources/views/components/panel-shift-dropdown/company-settings.blade.php Visa fil

@@ -0,0 +1,50 @@
1
+@props([
2
+    'icon' => null,
3
+    'currentTenant' => null,
4
+])
5
+
6
+@php
7
+    $currentTenantName = filament()->getTenantName($currentTenant);
8
+    $currentCompany = auth()->user()->currentCompany;
9
+    $currentCompanyOwner = $currentCompany->owner;
10
+    $items = filament()->getTenantMenuItems();
11
+    $profileItem = $items['profile'] ?? null;
12
+    $profileItemUrl = $profileItem?->getUrl();
13
+@endphp
14
+
15
+<li class="grid grid-flow-col auto-cols-max gap-x-2 items-start p-2">
16
+    <div class="icon h-9 w-9 flex items-center justify-center rounded-full bg-gray-200 dark:bg-white/10">
17
+        <x-filament::icon
18
+            :icon="$icon"
19
+            class="h-6 w-6 text-gray-600 dark:text-gray-200"
20
+        />
21
+    </div>
22
+    <div>
23
+        <div class="px-2 pb-2">
24
+            <h2 class="text-gray-800 dark:text-gray-200 text-base font-semibold">
25
+                {{ $currentTenantName }}
26
+            </h2>
27
+            <p class="text-sm font-normal text-gray-500 dark:text-gray-400">
28
+                {{ $currentCompanyOwner->email }}
29
+            </p>
30
+        </div>
31
+    </div>
32
+</li>
33
+
34
+<x-panel-shift-dropdown.item
35
+    :url="\App\Filament\Company\Clusters\Settings::getUrl()"
36
+    label="All Settings"
37
+    icon="heroicon-m-cog-6-tooth"
38
+/>
39
+
40
+<x-panel-shift-dropdown.item
41
+    :url="$profileItemUrl ?? filament()->getTenantProfileUrl()"
42
+    :label="$profileItem?->getLabel() ?? filament()->getTenantProfilePage()::getLabel()"
43
+    icon="heroicon-m-briefcase"
44
+/>
45
+
46
+<x-panel-shift-dropdown.toggle
47
+    label="Switch Company"
48
+    icon="heroicon-m-arrows-right-left"
49
+    panel-id="company-switcher"
50
+/>

+ 51
- 0
resources/views/components/panel-shift-dropdown/company-switcher.blade.php Visa fil

@@ -0,0 +1,51 @@
1
+@props([
2
+    'icon' => null,
3
+    'currentTenant' => null,
4
+])
5
+
6
+@php
7
+    $currentTenantName = filament()->getTenantName($currentTenant);
8
+    $currentCompany = auth()->user()->currentCompany;
9
+    $currentCompanyOwner = $currentCompany->owner;
10
+    $items = filament()->getTenantMenuItems();
11
+
12
+    $profileItem = $items['profile'] ?? null;
13
+    $profileItemUrl = $profileItem?->getUrl();
14
+
15
+    $registrationItem = $items['register'] ?? null;
16
+    $registrationItemUrl = $registrationItem?->getUrl();
17
+    $isRegistrationItemVisible = $registrationItem?->isVisible() ?? true;
18
+    $hasRegistrationItem = ((filament()->hasTenantRegistration() && filament()->getTenantRegistrationPage()::canView()) || filled($registrationItemUrl)) && $isRegistrationItemVisible;
19
+
20
+    $canSwitchTenants = count($tenants = array_filter(
21
+        filament()->getUserTenants(filament()->auth()->user()),
22
+        fn (\Illuminate\Database\Eloquent\Model $tenant): bool => ! $tenant->is($currentTenant),
23
+    ));
24
+@endphp
25
+
26
+
27
+@if($currentTenant)
28
+    <x-panel-shift-dropdown.selected-tenant
29
+        icon="heroicon-m-check"
30
+        icon-color="primary"
31
+        :url="filament()->getUrl($currentTenant)"
32
+        :image="filament()->getTenantAvatarUrl($currentTenant)"
33
+        :label="$currentTenantName"
34
+    />
35
+@endif
36
+@if($canSwitchTenants)
37
+    @foreach($tenants as $tenant)
38
+        <x-panel-shift-dropdown.item
39
+            :url="filament()->getUrl($tenant)"
40
+            :label="filament()->getTenantName($tenant)"
41
+            :image="filament()->getTenantAvatarUrl($tenant)"
42
+        />
43
+    @endforeach
44
+@endif
45
+@if($hasRegistrationItem)
46
+    <x-panel-shift-dropdown.item
47
+        :url="$registrationItemUrl ?? filament()->getTenantRegistrationUrl()"
48
+        :label="$registrationItem?->getLabel() ?? filament()->getTenantRegistrationPage()::getLabel()"
49
+        :icon="$registrationItem?->getIcon() ?? \Filament\Support\Facades\FilamentIcon::resolve('panels::tenant-menu.registration-button') ?? 'heroicon-m-plus'"
50
+    />
51
+@endif

+ 16
- 0
resources/views/components/panel-shift-dropdown/content-handler.blade.php Visa fil

@@ -0,0 +1,16 @@
1
+@props([
2
+    'item',
3
+])
4
+
5
+@if(isset($item['panelId']))
6
+    {{-- Render a submenu toggle for groups in the main panel --}}
7
+    <x-panel-shift-dropdown.toggle :label="$item['label']" :icon="$item['icon']" :panel-id="$item['panelId']" />
8
+@elseif(!empty($item['items']))
9
+    {{-- For nested groups, recursively render their items --}}
10
+    @foreach($item['items'] as $nestedItem)
11
+        <x-panel-shift-dropdown.content-handler :item="$nestedItem" />
12
+    @endforeach
13
+@elseif(isset($item['url']))
14
+    {{-- Render standalone items --}}
15
+    <x-panel-shift-dropdown.item :url="$item['url']" :label="$item['label']" :icon="$item['icon']" />
16
+@endif

+ 38
- 0
resources/views/components/panel-shift-dropdown/display-accessibility.blade.php Visa fil

@@ -0,0 +1,38 @@
1
+@props([
2
+    'icon' => null,
3
+])
4
+
5
+<li class="grid grid-flow-col auto-cols-auto gap-x-2 items-start p-2">
6
+    <div class="icon h-9 w-9 flex items-center justify-center rounded-full bg-gray-200 dark:bg-white/10">
7
+        <x-filament::icon
8
+            :icon="$icon"
9
+            class="h-6 w-6 text-gray-600 dark:text-gray-200"
10
+        />
11
+    </div>
12
+    <div>
13
+        <div class="px-2 pb-2">
14
+            <h2 class="text-gray-800 dark:text-gray-200 text-base font-semibold">
15
+                {{ __('Dark mode') }}
16
+            </h2>
17
+            <p class="text-sm font-normal text-gray-500 dark:text-gray-400">
18
+                {{ __('Adjust the appearance to reduce glare and give your eyes a break.') }}
19
+            </p>
20
+        </div>
21
+        <!-- Custom radio buttons for Theme setting -->
22
+        <template x-for="(label, value) in themeLabels" :key="value">
23
+            <div class="cursor-pointer p-2 rounded-lg hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5" x-on:click="setTheme(value)">
24
+                <label class="text-sm font-medium flex items-center justify-between cursor-pointer">
25
+                    <span x-text="label"></span>
26
+                    <input type="radio" class="sr-only" :id="'theme' + value" :name="'theme'" :value="value" x-model="theme">
27
+                    <span
28
+                        class="h-3 w-3 ring-2 rounded-full"
29
+                        x-bind:class="{
30
+                            'border-2 border-white dark:border-gray-800 bg-primary-500 dark:bg-primary-400 ring-primary-500 dark:ring-primary-400': theme === value,
31
+                            'ring-gray-400 dark:ring-gray-600': theme !== value
32
+                        }"
33
+                    ></span>
34
+                </label>
35
+            </div>
36
+        </template>
37
+    </div>
38
+</li>

+ 81
- 0
resources/views/components/panel-shift-dropdown/item.blade.php Visa fil

@@ -0,0 +1,81 @@
1
+@props([
2
+    'url' => null,
3
+    'icon' => null,
4
+    'image' => null,
5
+    'label' => null,
6
+    'tag' => 'a',
7
+])
8
+
9
+@php
10
+    $buttonClasses = \Illuminate\Support\Arr::toCssClasses([
11
+        'text-gray-700 dark:text-gray-200 text-sm font-medium flex items-center p-2 rounded-lg hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5',
12
+        'w-full' => $tag === 'form',
13
+    ]);
14
+
15
+    $iconWrapperClasses = \Illuminate\Support\Arr::toCssClasses([
16
+        'icon h-9 w-9 flex justify-center items-center mr-4 rounded-full bg-gray-200 dark:bg-white/10',
17
+    ]);
18
+
19
+    $iconClasses = \Illuminate\Support\Arr::toCssClasses([
20
+        'h-6 w-6 text-gray-600 dark:text-gray-200',
21
+    ]);
22
+
23
+    $imageClasses = \Illuminate\Support\Arr::toCssClasses([
24
+        'h-9 w-9 rounded-full bg-cover bg-center mr-4',
25
+    ]);
26
+@endphp
27
+<li>
28
+    @if($tag === 'form')
29
+        <form
30
+            {{ $attributes->only(['action', 'method', 'wire:submit']) }}
31
+        >
32
+            @csrf
33
+
34
+            <button
35
+                type="submit"
36
+                {{
37
+                    $attributes
38
+                        ->only(['class'])
39
+                        ->class([$buttonClasses])
40
+                }}
41
+            >
42
+                @if($image)
43
+                    <div class="{{ $imageClasses }}" style="background-image: url('{{ $image }}')"></div>
44
+                @else
45
+                    <div class="{{ $iconWrapperClasses }}">
46
+                        <x-filament::icon
47
+                            :icon="$icon ?? 'heroicon-m-document-text'"
48
+                            :class="$iconClasses"
49
+                        />
50
+                    </div>
51
+                @endif
52
+                @if($label)
53
+                    <span>{{ $label }}</span>
54
+                @endif
55
+            </button>
56
+        </form>
57
+    @else
58
+        <a
59
+            href="{{ $url }}"
60
+            {{
61
+                $attributes
62
+                    ->only(['class'])
63
+                    ->class([$buttonClasses])
64
+            }}
65
+        >
66
+            @if($image)
67
+                <div class="{{ $imageClasses }}" style="background-image: url('{{ $image }}')"></div>
68
+            @else
69
+                <div class="{{ $iconWrapperClasses }}">
70
+                    <x-filament::icon
71
+                        :icon="$icon ?? 'heroicon-m-document-text'"
72
+                        :class="$iconClasses"
73
+                    />
74
+                </div>
75
+            @endif
76
+            @if($label)
77
+                <span>{{ $label }}</span>
78
+            @endif
79
+        </a>
80
+    @endif
81
+</li>

+ 22
- 0
resources/views/components/panel-shift-dropdown/panel.blade.php Visa fil

@@ -0,0 +1,22 @@
1
+@props([
2
+    'panelId' => null,
3
+])
4
+
5
+<style>
6
+    .transition-class {
7
+        transition-property: transform, opacity;
8
+        transition-duration: 0.2s;
9
+        transition-timing-function: ease-in-out;
10
+    }
11
+
12
+    .hide {
13
+        display: none;
14
+    }
15
+</style>
16
+
17
+<ul
18
+    x-ref="{{ $panelId }}"
19
+    class="w-full p-2.5 list-none flex flex-col space-y-2 hide transition-class"
20
+>
21
+    {{ $slot }}
22
+</ul>

+ 57
- 0
resources/views/components/panel-shift-dropdown/selected-tenant.blade.php Visa fil

@@ -0,0 +1,57 @@
1
+@props([
2
+    'icon' => null,
3
+    'image' => null,
4
+    'label' => null,
5
+    'iconColor' => null,
6
+    'url' => null,
7
+])
8
+
9
+@php
10
+    $buttonClasses = \Illuminate\Support\Arr::toCssClasses([
11
+        'text-gray-700 dark:text-gray-200 text-sm font-medium flex items-center p-2 rounded-lg hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5',
12
+        'justify-between' => $icon && $label,
13
+    ]);
14
+
15
+    $iconClasses = \Illuminate\Support\Arr::toCssClasses([
16
+        'h-6 w-6',
17
+        match ($iconColor) {
18
+            'gray' => 'text-gray-600 dark:text-gray-500',
19
+            default => 'text-custom-500 dark:text-custom-400',
20
+        },
21
+    ]);
22
+
23
+    $iconStyles = \Illuminate\Support\Arr::toCssStyles([
24
+        \Filament\Support\get_color_css_variables(
25
+            $iconColor,
26
+            shades: [400, 500],
27
+        ) => $iconColor !== 'gray',
28
+    ]);
29
+
30
+    $imageClasses = \Illuminate\Support\Arr::toCssClasses([
31
+        'h-9 w-9 rounded-full bg-cover bg-center mr-4',
32
+    ]);
33
+@endphp
34
+<li>
35
+    <a
36
+        href="{{ $url }}"
37
+        {{
38
+            $attributes
39
+                ->only(['class'])
40
+                ->class([$buttonClasses])
41
+        }}
42
+    >
43
+        @if($image)
44
+            <div class="{{ $imageClasses }}" style="background-image: url('{{ $image }}')"></div>
45
+        @endif
46
+        @if($label)
47
+            <span class="flex-1">{{ $label }}</span>
48
+        @endif
49
+        @if($icon)
50
+            <x-filament::icon
51
+                :icon="$icon"
52
+                :class="$iconClasses"
53
+                :style="$iconStyles"
54
+            />
55
+        @endif
56
+    </a>
57
+</li>

+ 28
- 0
resources/views/components/panel-shift-dropdown/subpanel-header.blade.php Visa fil

@@ -0,0 +1,28 @@
1
+@props([
2
+    'label' => null,
3
+    'panelId' => null,
4
+])
5
+
6
+@php
7
+    $targetId = \Illuminate\Support\Str::slug($label);
8
+@endphp
9
+
10
+<li class="grid grid-flow-col auto-cols-max gap-x-2 items-start p-2">
11
+    <button
12
+        x-ref="{{ $panelId }}-back"
13
+        @click="goBack()"
14
+        @keydown.enter="focusMenuItem('{{ $panelId }}-forward')"
15
+        aria-label="Back"
16
+        class="icon h-9 w-9 flex items-center justify-center rounded-full hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5 cursor-pointer"
17
+    >
18
+        <x-filament::icon
19
+            icon="heroicon-m-arrow-left"
20
+            class="h-6 w-6 text-gray-600 dark:text-gray-200"
21
+        />
22
+    </button>
23
+    <div class="px-2" aria-live="polite">
24
+        <h1 class="text-gray-700 dark:text-gray-200 text-lg font-bold">
25
+            {{ $label }}
26
+        </h1>
27
+    </div>
28
+</li>

+ 26
- 0
resources/views/components/panel-shift-dropdown/toggle.blade.php Visa fil

@@ -0,0 +1,26 @@
1
+@props([
2
+    'label' => null,
3
+    'icon' => null,
4
+    'panelId' => null,
5
+])
6
+
7
+<li>
8
+    <button
9
+        x-ref="{{ $panelId }}-forward"
10
+        @click="setActiveMenu('{{ $panelId }}')"
11
+        @keydown.enter="focusBackButton('{{ $panelId }}-back')"
12
+        aria-label="Go to {{ $label }}"
13
+        class="w-full text-gray-700 dark:text-gray-200 text-sm font-medium flex items-center justify-between p-2 rounded-lg hover:bg-gray-50 focus-visible:bg-gray-50 dark:hover:bg-white/5 dark:focus-visible:bg-white/5">
14
+        <div class="flex items-center">
15
+            <div class="icon h-9 w-9 flex justify-center items-center mr-4 rounded-full bg-gray-200 dark:bg-white/10">
16
+                @if($icon)
17
+                    <x-filament::icon :icon="$icon" class="h-6 w-6 text-gray-600 dark:text-gray-200"/>
18
+                @endif
19
+            </div>
20
+            @if($label)
21
+                <span>{{ $label }}</span>
22
+            @endif
23
+        </div>
24
+        <x-filament::icon icon="heroicon-m-chevron-right" class="text-gray-300 h-8 w-8 pointer-events-none"/>
25
+    </button>
26
+</li>

+ 2
- 2
resources/views/filament/company/pages/accounting/chart.blade.php Visa fil

@@ -53,8 +53,8 @@
53 53
                                             {{ $account->name }}
54 54
                                             <br>
55 55
                                             <small class="text-gray-500 dark:text-gray-400">
56
-                                                @if($account->last_transaction_date)
57
-                                                    Last transaction on {{ $account->last_transaction_date }}
56
+                                                @if($account->getLastTransactionDate())
57
+                                                    Last transaction on {{ $account->getLastTransactionDate() }}
58 58
                                                 @else
59 59
                                                     No transactions for this account
60 60
                                                 @endif

+ 1
- 1
resources/views/filament/company/pages/setting/company-default.blade.php Visa fil

@@ -1,4 +1,4 @@
1
-<x-filament-panels::page style="margin-bottom: 500px">
1
+<x-filament-panels::page>
2 2
     <x-filament-panels::form wire:submit="save">
3 3
         {{ $this->form }}
4 4
 

+ 6
- 5
resources/views/livewire/company/service/connected-account/list-institutions.blade.php Visa fil

@@ -19,10 +19,11 @@
19 19
                             {{ $institution->name }}
20 20
                         </h3>
21 21
 
22
-                        {{-- Eventually we will need to assert last updated time based on when the last time one of the accounts for the institution last has transactions imported --}}
23
-                        <p class="connected-account-section-header-description text-sm leading-6 text-gray-500 dark:text-gray-400">
24
-                            {{ __('Last Updated') }} {{ $institution->updated_at->diffForHumans() }}
25
-                        </p>
22
+                        @if($institution->getLastTransactionDate())
23
+                            <p class="connected-account-section-header-description text-sm leading-6 text-gray-500 dark:text-gray-400">
24
+                                {{ __('Last updated') }} {{ $institution->getLastTransactionDate() }}
25
+                            </p>
26
+                        @endif
26 27
                     </div>
27 28
 
28 29
                     {{ ($this->deleteBankConnection)(['institution' => $institution->id]) }}
@@ -38,7 +39,7 @@
38 39
 
39 40
                             @if($connectedBankAccount->bankAccount?->account)
40 41
                                 <div class="account-balance flex text-base leading-6 text-gray-700 dark:text-gray-200 space-x-1">
41
-                                    <strong>{{ $this->getAccountBalance($connectedBankAccount->bankAccount->account) }}</strong>
42
+                                    <strong wire:poll.visible>{{ $this->getAccountBalance($connectedBankAccount->bankAccount->account) }}</strong>
42 43
                                     <p>{{ $connectedBankAccount->bankAccount->account->currency_code }}</p>
43 44
                                 </div>
44 45
                             @endif

+ 0
- 216
resources/views/vendor/filament-panels/components/topbar/index.blade.php Visa fil

@@ -1,216 +0,0 @@
1
-@props([
2
-    'navigation',
3
-])
4
-
5
-<div
6
-    {{
7
-        $attributes->class([
8
-            'fi-topbar sticky top-0 z-20 overflow-x-clip',
9
-            'fi-topbar-with-navigation' => filament()->hasTopNavigation(),
10
-        ])
11
-    }}
12
->
13
-    <nav
14
-        class="flex h-16 items-center gap-x-4 bg-white px-4 shadow-sm ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10 md:px-6 lg:px-8"
15
-    >
16
-        {{ \Filament\Support\Facades\FilamentView::renderHook('panels::topbar.start') }}
17
-
18
-        @if(filament()->hasNavigation())
19
-            <x-filament::icon-button
20
-                color="gray"
21
-                icon="heroicon-o-bars-3"
22
-                icon-alias="panels::topbar.open-sidebar-button"
23
-                icon-size="lg"
24
-                :label="__('filament-panels::layout.actions.sidebar.expand.label')"
25
-                x-cloak
26
-                x-data="{}"
27
-                x-on:click="$store.sidebar.open()"
28
-                x-show="! $store.sidebar.isOpen"
29
-                @class([
30
-                    'lg:hidden' => (! filament()->isSidebarFullyCollapsibleOnDesktop()) || filament()->isSidebarCollapsibleOnDesktop(),
31
-                ])
32
-            />
33
-
34
-            <x-filament::icon-button
35
-                color="gray"
36
-                icon="heroicon-o-x-mark"
37
-                icon-alias="panels::topbar.close-sidebar-button"
38
-                icon-size="lg"
39
-                :label="__('filament-panels::layout.actions.sidebar.collapse.label')"
40
-                x-cloak
41
-                x-data="{}"
42
-                x-on:click="$store.sidebar.close()"
43
-                x-show="$store.sidebar.isOpen"
44
-                class="lg:hidden"
45
-            />
46
-        @endif
47
-
48
-        @if (filament()->hasTopNavigation() || (! filament()->hasNavigation()))
49
-            <div class="me-6 hidden lg:flex">
50
-                @if ($homeUrl = filament()->getHomeUrl())
51
-                    <a {{ \Filament\Support\generate_href_html($homeUrl) }}>
52
-                        <x-filament-panels::logo />
53
-                    </a>
54
-                @else
55
-                    <x-filament-panels::logo />
56
-                @endif
57
-            </div>
58
-
59
-            @if (filament()->hasTenancy() && filament()->hasTenantMenu())
60
-                <x-filament-panels::tenant-menu class="hidden lg:block" />
61
-            @endif
62
-
63
-            @if (filament()->hasNavigation())
64
-                <ul class="me-4 hidden items-center gap-x-4 lg:flex">
65
-                    @foreach($navigation as $group)
66
-                        @if ($group->getLabel() === null)
67
-                            @foreach ($group->getItems() as $item)
68
-                                <x-filament-panels::topbar.item
69
-                                    :active="$item->isActive()"
70
-                                    :active-icon="$item->getActiveIcon()"
71
-                                    :badge="$item->getBadge()"
72
-                                    :badge-color="$item->getBadgeColor()"
73
-                                    :icon="$item->getIcon()"
74
-                                    :should-open-url-in-new-tab="$item->shouldOpenUrlInNewTab()"
75
-                                    :url="$item->getUrl()"
76
-                                >
77
-                                    {{ $item->getLabel() }}
78
-                                </x-filament-panels::topbar.item>
79
-                            @endforeach
80
-                        @endif
81
-                    @endforeach
82
-
83
-                    @foreach ($navigation as $group)
84
-                        @php
85
-                            $groupLabel = $group->getLabel();
86
-                            $groupItems = collect($group->getItems());
87
-                            $subgroups = $groupItems->groupBy(fn(\Filament\Navigation\NavigationItem $item) => $item->getParentItem())->filter(fn($subgroup, $key) => filled($key));
88
-                            $standaloneItems = $groupItems->reject(fn(\Filament\Navigation\NavigationItem $item) => filled($item->getParentItem()));
89
-                            $itemsCount = $groupItems->count();
90
-                        @endphp
91
-
92
-                        @if ($groupLabel)
93
-                            <x-filament::dropdown
94
-                                offset="0"
95
-                                width="max-w-fit"
96
-                                placement="bottom-start"
97
-                                teleport
98
-                                x-on:mouseenter="open"
99
-                                x-on:mouseleave="close"
100
-                                :attributes="
101
-                                    \Filament\Support\prepare_inherited_attributes($attributes)
102
-                                    ->class(['fi-topbar-dropdown'])
103
-                                "
104
-                            >
105
-                                <x-slot name="trigger">
106
-                                    <x-filament-panels::topbar.item
107
-                                        :active="$group->isActive()"
108
-                                        :icon="$group->getIcon()"
109
-                                    >
110
-                                        {{ $groupLabel }}
111
-                                    </x-filament-panels::topbar.item>
112
-                                </x-slot>
113
-
114
-                                <x-filament::dropdown.list>
115
-                                    @if($subgroups->isNotEmpty() || $standaloneItems->isNotEmpty())
116
-                                        <ul class="menu-groups">
117
-                                            @foreach($subgroups as $subgroupTitle => $subgroupItems)
118
-                                                <li class="menu-group cols-1">
119
-                                                    <div class="submenu-wrap">
120
-                                                        <div class="menu-label">{{ $subgroupTitle }}</div>
121
-                                                        <ul class="submenu cols-1">
122
-                                                            @foreach($subgroupItems as $item)
123
-                                                                <li class="menu-item cols-1">
124
-                                                                    <x-filament::dropdown.list.item
125
-                                                                        @class(['fi-topbar-dropdown-list-item' => $itemsCount > 1])
126
-                                                                        :badge="$item->getBadge()"
127
-                                                                        :badge-color="$item->getBadgeColor()"
128
-                                                                        :href="$item->getUrl()"
129
-                                                                        :icon="$item->isActive() ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon()"
130
-                                                                        tag="a"
131
-                                                                        :target="$item->shouldOpenUrlInNewTab() ? '_blank' : null"
132
-                                                                    >
133
-                                                                        {{ $item->getLabel() }}
134
-                                                                    </x-filament::dropdown.list.item>
135
-                                                                </li>
136
-                                                            @endforeach
137
-                                                        </ul>
138
-                                                    </div>
139
-                                                </li>
140
-                                            @endforeach
141
-                                            @if($standaloneItems->isNotEmpty())
142
-                                                <li class="menu-group cols-1">
143
-                                                    <div class="submenu-wrap">
144
-                                                        <div class="menu-label-invisible-spacer"></div>
145
-                                                        <ul class="submenu cols-1">
146
-                                                            @foreach($itemsWithoutSubgroup as $item)
147
-                                                                <li class="menu-item cols-1">
148
-                                                                    <x-filament::dropdown.list.item
149
-                                                                        @class([
150
-                                                                            'fi-topbar-dropdown-list-item' => $itemsCount > 1,
151
-                                                                        ])
152
-                                                                        :badge="$item->getBadge()"
153
-                                                                        :badge-color="$item->getBadgeColor()"
154
-                                                                        :href="$item->getUrl()"
155
-                                                                        :icon="$item->isActive() ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon()"
156
-                                                                        tag="a"
157
-                                                                        :target="$item->shouldOpenUrlInNewTab() ? '_blank' : null"
158
-                                                                    >
159
-                                                                        {{ $item->getLabel() }}
160
-                                                                    </x-filament::dropdown.list.item>
161
-                                                                </li>
162
-                                                            @endforeach
163
-                                                        </ul>
164
-                                                    </div>
165
-                                                </li>
166
-                                            @endif
167
-                                        </ul>
168
-                                    @else
169
-                                        @foreach ($group->getItems() as $item)
170
-                                            <x-filament::dropdown.list.item
171
-                                                @class([
172
-                                                    'fi-topbar-dropdown-list-item' => $itemsCount > 1,
173
-                                                ])
174
-                                                :badge="$item->getBadge()"
175
-                                                :badge-color="$item->getBadgeColor()"
176
-                                                :href="$item->getUrl()"
177
-                                                :icon="$item->isActive() ? ($item->getActiveIcon() ?? $item->getIcon()) : $item->getIcon()"
178
-                                                tag="a"
179
-                                                :target="$item->shouldOpenUrlInNewTab() ? '_blank' : null"
180
-                                            >
181
-                                                {{ $item->getLabel() }}
182
-                                            </x-filament::dropdown.list.item>
183
-                                        @endforeach
184
-                                    @endif
185
-                                </x-filament::dropdown.list>
186
-                            </x-filament::dropdown>
187
-                        @endif
188
-                    @endforeach
189
-                </ul>
190
-            @endif
191
-        @endif
192
-
193
-        <div
194
-            x-persist="topbar.end"
195
-            class="ms-auto flex items-center gap-x-4"
196
-        >
197
-            {{ \Filament\Support\Facades\FilamentView::renderHook('panels::global-search.before') }}
198
-
199
-            @if (filament()->isGlobalSearchEnabled())
200
-                @livewire(Filament\Livewire\GlobalSearch::class, ['lazy' => true])
201
-            @endif
202
-
203
-            {{ \Filament\Support\Facades\FilamentView::renderHook('panels::global-search.after') }}
204
-
205
-            @if (filament()->auth()->check())
206
-                @if (filament()->hasDatabaseNotifications())
207
-                    @livewire(Filament\Livewire\DatabaseNotifications::class, ['lazy' => true])
208
-                @endif
209
-
210
-                <x-filament-panels::user-menu />
211
-            @endif
212
-        </div>
213
-
214
-        {{ \Filament\Support\Facades\FilamentView::renderHook('panels::topbar.end') }}
215
-    </nav>
216
-</div>

+ 107
- 0
resources/views/vendor/filament-panels/components/user-menu.blade.php Visa fil

@@ -0,0 +1,107 @@
1
+@php
2
+    $user = filament()->auth()->user();
3
+    $items = filament()->getUserMenuItems();
4
+
5
+    $profileItem = $items['profile'] ?? $items['account'] ?? null;
6
+    $profileItemUrl = $profileItem?->getUrl();
7
+    $profilePage = filament()->getProfilePage();
8
+    $hasProfileItem = filament()->hasProfile() || filled($profileItemUrl);
9
+
10
+    $logoutItem = $items['logout'] ?? null;
11
+
12
+    $items = \Illuminate\Support\Arr::except($items, ['account', 'logout', 'profile']);
13
+
14
+    $hasPanelShiftDropdown = filament()->hasPlugin('panel-shift-dropdown');
15
+    $hasTenant = filament()->getTenant() !== null;
16
+@endphp
17
+
18
+
19
+@if($hasTenant)
20
+    {{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_BEFORE) }}
21
+@endif
22
+
23
+@if (! $hasPanelShiftDropdown)
24
+    <x-filament::dropdown
25
+        placement="bottom-end"
26
+        teleport
27
+        :attributes="
28
+            \Filament\Support\prepare_inherited_attributes($attributes)
29
+                ->class(['fi-user-menu'])
30
+        "
31
+    >
32
+        <x-slot name="trigger">
33
+            <button
34
+                aria-label="{{ __('filament-panels::layout.actions.open_user_menu.label') }}"
35
+                type="button"
36
+                class="shrink-0"
37
+            >
38
+                <x-filament-panels::avatar.user :user="$user" />
39
+            </button>
40
+        </x-slot>
41
+
42
+        @if ($profileItem?->isVisible() ?? true)
43
+            {{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_BEFORE) }}
44
+
45
+            @if ($hasProfileItem)
46
+                <x-filament::dropdown.list>
47
+                    <x-filament::dropdown.list.item
48
+                        :color="$profileItem?->getColor()"
49
+                        :icon="$profileItem?->getIcon() ?? \Filament\Support\Facades\FilamentIcon::resolve('panels::user-menu.profile-item') ?? 'heroicon-m-user-circle'"
50
+                        :href="$profileItemUrl ?? filament()->getProfileUrl()"
51
+                        :target="($profileItem?->shouldOpenUrlInNewTab() ?? false) ? '_blank' : null"
52
+                        tag="a"
53
+                    >
54
+                        {{ $profileItem?->getLabel() ?? ($profilePage ? $profilePage::getLabel() : null) ?? filament()->getUserName($user) }}
55
+                    </x-filament::dropdown.list.item>
56
+                </x-filament::dropdown.list>
57
+            @else
58
+                <x-filament::dropdown.header
59
+                    :color="$profileItem?->getColor()"
60
+                    :icon="$profileItem?->getIcon() ?? \Filament\Support\Facades\FilamentIcon::resolve('panels::user-menu.profile-item') ?? 'heroicon-m-user-circle'"
61
+                >
62
+                    {{ $profileItem?->getLabel() ?? filament()->getUserName($user) }}
63
+                </x-filament::dropdown.header>
64
+            @endif
65
+
66
+            {{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_PROFILE_AFTER) }}
67
+        @endif
68
+
69
+        @if (filament()->hasDarkMode() && (! filament()->hasDarkModeForced()))
70
+            <x-filament::dropdown.list>
71
+                <x-filament-panels::theme-switcher />
72
+            </x-filament::dropdown.list>
73
+        @endif
74
+
75
+        <x-filament::dropdown.list>
76
+            @foreach ($items as $key => $item)
77
+                @php
78
+                    $itemPostAction = $item->getPostAction();
79
+                @endphp
80
+
81
+                <x-filament::dropdown.list.item
82
+                    :action="$itemPostAction"
83
+                    :color="$item->getColor()"
84
+                    :href="$item->getUrl()"
85
+                    :icon="$item->getIcon()"
86
+                    :method="filled($itemPostAction) ? 'post' : null"
87
+                    :tag="filled($itemPostAction) ? 'form' : 'a'"
88
+                    :target="$item->shouldOpenUrlInNewTab() ? '_blank' : null"
89
+                >
90
+                    {{ $item->getLabel() }}
91
+                </x-filament::dropdown.list.item>
92
+            @endforeach
93
+
94
+            <x-filament::dropdown.list.item
95
+                :action="$logoutItem?->getUrl() ?? filament()->getLogoutUrl()"
96
+                :color="$logoutItem?->getColor()"
97
+                :icon="$logoutItem?->getIcon() ?? \Filament\Support\Facades\FilamentIcon::resolve('panels::user-menu.logout-button') ?? 'heroicon-m-arrow-left-on-rectangle'"
98
+                method="post"
99
+                tag="form"
100
+            >
101
+                {{ $logoutItem?->getLabel() ?? __('filament-panels::layout.actions.logout.label') }}
102
+            </x-filament::dropdown.list.item>
103
+        </x-filament::dropdown.list>
104
+    </x-filament::dropdown>
105
+@endif
106
+
107
+{{ \Filament\Support\Facades\FilamentView::renderHook(\Filament\View\PanelsRenderHook::USER_MENU_AFTER) }}

+ 127
- 95
resources/views/welcome.blade.php
Filskillnaden har hållits tillbaka eftersom den är för stor
Visa fil


Laddar…
Avbryt
Spara