Skip to content

Commit c6065d0

Browse files
committed
feat: Laravel 11 and Transactions
1 parent ae1a3ff commit c6065d0

File tree

92 files changed

+3022
-2174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+3022
-2174
lines changed

.env.example

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,20 @@ APP_NAME=ERPSAAS
22
APP_ENV=local
33
APP_KEY=
44
APP_DEBUG=true
5+
APP_TIMEZONE=UTC
56
APP_URL=http://localhost
67

8+
APP_LOCALE=en
9+
APP_FALLBACK_LOCALE=en
10+
APP_FAKER_LOCALE=en_US
11+
12+
APP_MAINTENANCE_DRIVER=file
13+
APP_MAINTENANCE_STORE=database
14+
15+
BCRYPT_ROUNDS=12
16+
717
LOG_CHANNEL=stack
18+
LOG_STACK=single
819
LOG_DEPRECATIONS_CHANNEL=null
920
LOG_LEVEL=debug
1021

@@ -15,22 +26,29 @@ DB_DATABASE=erpsaas
1526
DB_USERNAME=root
1627
DB_PASSWORD=
1728

18-
BROADCAST_DRIVER=log
19-
CACHE_DRIVER=file
20-
FILESYSTEM_DISK=local
21-
QUEUE_CONNECTION=database
2229
SESSION_DRIVER=database
2330
SESSION_LIFETIME=120
31+
SESSION_ENCRYPT=false
32+
SESSION_PATH=/
33+
SESSION_DOMAIN=null
34+
35+
BROADCAST_CONNECTION=log
36+
FILESYSTEM_DISK=local
37+
QUEUE_CONNECTION=database
38+
39+
CACHE_STORE=database
40+
CACHE_PREFIX=
2441

2542
MEMCACHED_HOST=127.0.0.1
2643

44+
REDIS_CLIENT=phpredis
2745
REDIS_HOST=127.0.0.1
2846
REDIS_PASSWORD=null
2947
REDIS_PORT=6379
3048

31-
MAIL_MAILER=smtp
32-
MAIL_HOST=mailpit
33-
MAIL_PORT=1025
49+
MAIL_MAILER=log
50+
MAIL_HOST=127.0.0.1
51+
MAIL_PORT=2525
3452
MAIL_USERNAME=null
3553
MAIL_PASSWORD=null
3654
MAIL_ENCRYPTION=null
@@ -43,20 +61,15 @@ AWS_DEFAULT_REGION=us-east-1
4361
AWS_BUCKET=
4462
AWS_USE_PATH_STYLE_ENDPOINT=false
4563

46-
PUSHER_APP_ID=
47-
PUSHER_APP_KEY=
48-
PUSHER_APP_SECRET=
49-
PUSHER_HOST=
50-
PUSHER_PORT=443
51-
PUSHER_SCHEME=https
52-
PUSHER_APP_CLUSTER=mt1
53-
5464
VITE_APP_NAME="${APP_NAME}"
55-
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
56-
VITE_PUSHER_HOST="${PUSHER_HOST}"
57-
VITE_PUSHER_PORT="${PUSHER_PORT}"
58-
VITE_PUSHER_SCHEME="${PUSHER_SCHEME}"
59-
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
65+
66+
GITHUB_CLIENT_ID=
67+
GITHUB_CLIENT_SECRET=
6068

6169
CURRENCY_API_KEY=
70+
6271
TRANSMATIC_STORAGE=file
72+
73+
PLAID_CLIENT_ID=
74+
PLAID_CLIENT_SECRET=
75+
PLAID_ENVIRONMENT=sandbox

app/Actions/FilamentCompanies/CreateConnectedAccount.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
use Laravel\Socialite\Contracts\User as ProviderUser;
77
use Wallo\FilamentCompanies\ConnectedAccount;
88
use Wallo\FilamentCompanies\Contracts\CreatesConnectedAccounts;
9-
use Wallo\FilamentCompanies\Socialite;
9+
use Wallo\FilamentCompanies\FilamentCompanies;
1010

1111
class CreateConnectedAccount implements CreatesConnectedAccounts
1212
{
@@ -15,7 +15,7 @@ class CreateConnectedAccount implements CreatesConnectedAccounts
1515
*/
1616
public function create(Authenticatable $user, string $provider, ProviderUser $providerUser): ConnectedAccount
1717
{
18-
return Socialite::connectedAccountModel()::forceCreate([
18+
return FilamentCompanies::connectedAccountModel()::forceCreate([
1919
'user_id' => $user->getAuthIdentifier(),
2020
'provider' => strtolower($provider),
2121
'provider_id' => $providerUser->getId(),

app/Actions/FilamentCompanies/CreateNewUser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Illuminate\Support\Facades\Hash;
99
use Illuminate\Support\Facades\Validator;
1010
use Wallo\FilamentCompanies\Contracts\CreatesNewUsers;
11-
use Wallo\FilamentCompanies\Features;
11+
use Wallo\FilamentCompanies\FilamentCompanies;
1212

1313
class CreateNewUser implements CreatesNewUsers
1414
{
@@ -23,7 +23,7 @@ public function create(array $input): User
2323
'name' => ['required', 'string', 'max:255'],
2424
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
2525
'password' => ['required', 'string', 'min:8', 'confirmed'],
26-
'terms' => Features::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
26+
'terms' => FilamentCompanies::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
2727
])->validate();
2828

2929
return DB::transaction(function () use ($input) {

app/Actions/FilamentCompanies/CreateUserFromProvider.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
use Laravel\Socialite\Contracts\User as ProviderUserContract;
99
use Wallo\FilamentCompanies\Contracts\CreatesConnectedAccounts;
1010
use Wallo\FilamentCompanies\Contracts\CreatesUserFromProvider;
11-
use Wallo\FilamentCompanies\Features;
12-
use Wallo\FilamentCompanies\Socialite;
11+
use Wallo\FilamentCompanies\Enums\Feature;
12+
use Wallo\FilamentCompanies\FilamentCompanies;
1313

1414
class CreateUserFromProvider implements CreatesUserFromProvider
1515
{
@@ -53,8 +53,8 @@ public function create(string $provider, ProviderUserContract $providerUser): Us
5353

5454
private function shouldSetProfilePhoto(ProviderUserContract $providerUser): bool
5555
{
56-
return Socialite::hasProviderAvatarsFeature() &&
57-
Features::managesProfilePhotos() &&
56+
return Feature::ProviderAvatars->isEnabled() &&
57+
FilamentCompanies::managesProfilePhotos() &&
5858
$providerUser->getAvatar();
5959
}
6060

app/Actions/FilamentCompanies/ResolveSocialiteUser.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Laravel\Socialite\Contracts\User;
66
use Laravel\Socialite\Facades\Socialite;
77
use Wallo\FilamentCompanies\Contracts\ResolvesSocialiteUsers;
8-
use Wallo\FilamentCompanies\Socialite as FilamentCompaniesSocialite;
8+
use Wallo\FilamentCompanies\Enums\Feature;
99

1010
class ResolveSocialiteUser implements ResolvesSocialiteUsers
1111
{
@@ -16,7 +16,7 @@ public function resolve(string $provider): User
1616
{
1717
$user = Socialite::driver($provider)->user();
1818

19-
if (FilamentCompaniesSocialite::generatesMissingEmails()) {
19+
if (Feature::GenerateMissingEmails->isEnabled()) {
2020
$user->email = $user->getEmail() ?? ("{$user->id}@{$provider}" . config('app.domain'));
2121
}
2222

app/Console/Kernel.php

Lines changed: 0 additions & 27 deletions
This file was deleted.

app/Enums/Accounting/AccountType.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ public function getCategory(): AccountCategory
5555
self::OperatingExpense, self::NonOperatingExpense, self::ContraExpense, self::UncategorizedExpense => AccountCategory::Expense,
5656
};
5757
}
58+
59+
public function isUncategorized(): bool
60+
{
61+
return match ($this) {
62+
self::UncategorizedRevenue, self::UncategorizedExpense => true,
63+
default => false,
64+
};
65+
}
5866
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace App\Enums\Accounting;
4+
5+
use App\Enums\Concerns\ParsesEnum;
6+
use Filament\Support\Contracts\HasLabel;
7+
8+
enum JournalEntryType: string implements HasLabel
9+
{
10+
use ParsesEnum;
11+
12+
case Debit = 'debit';
13+
case Credit = 'credit';
14+
15+
public function getLabel(): ?string
16+
{
17+
return $this->name;
18+
}
19+
20+
public function isDebit(): bool
21+
{
22+
return $this === self::Debit;
23+
}
24+
25+
public function isCredit(): bool
26+
{
27+
return $this === self::Credit;
28+
}
29+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
3+
namespace App\Enums\Accounting;
4+
5+
use App\Enums\Concerns\ParsesEnum;
6+
use Filament\Support\Contracts\HasLabel;
7+
8+
enum TransactionType: string implements HasLabel
9+
{
10+
use ParsesEnum;
11+
12+
case Deposit = 'deposit';
13+
case Withdrawal = 'withdrawal';
14+
case Journal = 'journal';
15+
16+
public function getLabel(): ?string
17+
{
18+
return $this->name;
19+
}
20+
}

app/Enums/Concerns/ParsesEnum.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace App\Enums\Concerns;
4+
5+
trait ParsesEnum
6+
{
7+
public static function parse(string | self $value): self
8+
{
9+
if ($value instanceof self) {
10+
return $value;
11+
}
12+
13+
return self::from($value);
14+
}
15+
}

app/Enums/Concerns/Utilities.php

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,4 @@ public static function caseNames(): array
1313
{
1414
return array_column(static::cases(), 'name');
1515
}
16-
17-
public static function constantNames(): array
18-
{
19-
$allConstants = array_keys((new \ReflectionClass(static::class))->getConstants());
20-
$caseNames = static::caseNames();
21-
22-
return array_values(array_diff($allConstants, $caseNames));
23-
}
24-
25-
public static function constantValues(): array
26-
{
27-
$allConstants = array_values((new \ReflectionClass(static::class))->getConstants());
28-
$caseValues = static::caseValues();
29-
30-
return array_values(array_diff_key($allConstants, $caseValues));
31-
}
3216
}

app/Filament/Company/Pages/Accounting/AccountChart.php

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
namespace App\Filament\Company\Pages\Accounting;
44

55
use App\Enums\Accounting\AccountCategory;
6-
use App\Models\Accounting\Account;
76
use App\Models\Accounting\Account as ChartModel;
87
use App\Models\Accounting\AccountSubtype;
9-
use App\Services\AccountService;
108
use App\Utilities\Accounting\AccountCode;
119
use App\Utilities\Currency\CurrencyAccessor;
1210
use Filament\Actions\Action;
@@ -37,27 +35,11 @@ class AccountChart extends Page
3735
#[Url]
3836
public ?string $activeTab = null;
3937

40-
protected AccountService $accountService;
41-
42-
public function boot(AccountService $accountService): void
43-
{
44-
$this->accountService = $accountService;
45-
}
46-
4738
public function mount(): void
4839
{
4940
$this->activeTab = $this->activeTab ?? AccountCategory::Asset->value;
5041
}
5142

52-
public function getAccountBalance(Account $account): ?string
53-
{
54-
$company = $account->company;
55-
$startDate = $company->locale->fiscalYearStartDate();
56-
$endDate = $company->locale->fiscalYearEndDate();
57-
58-
return $this->accountService->getEndingBalance($account, $startDate, $endDate)?->formatted();
59-
}
60-
6143
protected function configureAction(Action $action): void
6244
{
6345
$action
@@ -186,6 +168,6 @@ protected function getHeaderActions(): array
186168

187169
public function getCategoryLabel($categoryValue): string
188170
{
189-
return AccountCategory::from($categoryValue)->getLabel();
171+
return AccountCategory::from($categoryValue)->getPluralLabel();
190172
}
191173
}

0 commit comments

Comments
 (0)