From 52431a2c615c21bc33020e5a38bf97089d9e7427 Mon Sep 17 00:00:00 2001 From: JP Date: Sun, 11 Aug 2024 20:03:49 +0800 Subject: [PATCH] feat: updates --- app/Actions/Account/StoreAccount.php | 28 ++++ app/Actions/Account/StoreAccountBalance.php | 30 ++++ app/Actions/Branch/StoreBranch.php | 13 +- app/Commands/Account/CreateAccountCommand.php | 22 +++ app/Commands/Account/CreateBalanceCommand.php | 28 ++++ app/Commands/Branches/CreateBranchCommand.php | 6 +- app/DataObjects/CreateAccountDTO.php | 15 ++ app/Exports/TransmittalsExport.php | 73 +++++----- app/Filament/Resources/BranchResource.php | 36 ++++- .../BranchResource/Pages/EditBranch.php | 17 +++ .../AccountsRelationManager.php | 62 +++++++++ .../BalancesRelationManager.php | 97 +++++++++++++ app/Filament/Resources/ClientResource.php | 40 +++--- .../ClientResource/Pages/ViewClient.php | 8 +- .../AccountsRelationManager.php | 8 +- .../BranchesRelationManager.php | 49 +++++-- .../TransmittalsRelationManager.php | 32 +---- app/Filament/Resources/ExpenseResource.php | 60 ++++++++ .../ExpenseResource/Pages/CreateExpense.php | 11 ++ .../ExpenseResource/Pages/EditExpense.php | 19 +++ .../ExpenseResource/Pages/ListExpenses.php | 19 +++ app/Filament/Resources/SaleResource.php | 60 ++++++++ .../SaleResource/Pages/CreateSale.php | 11 ++ .../Resources/SaleResource/Pages/EditSale.php | 19 +++ .../SaleResource/Pages/ListSales.php | 19 +++ .../Resources/TransmittalResource.php | 130 +++++++++--------- .../Pages/CreateTransmittal.php | 96 ++++--------- app/Forms/Components/BranchAccounts.php | 10 ++ app/Livewire/BranchAccountsForm.php | 13 ++ app/Models/Account.php | 36 ++++- app/Models/Branch.php | 41 +++--- app/Models/Client.php | 15 +- app/Models/User.php | 4 +- app/Observers/AccountObserver.php | 56 ++++++++ app/Observers/BranchObserver.php | 62 +++++++++ app/Observers/ClientObserver.php | 87 ++++++++++++ .../Account/CreateAccountProcess.php | 15 ++ app/Providers/Filament/AdminPanelProvider.php | 11 +- composer.json | 1 + composer.lock | 67 ++++++++- config/database.php | 2 +- public/images/logo-dark.png | Bin 0 -> 35306 bytes public/images/logo-light.png | Bin 0 -> 36198 bytes .../components/branch-accounts.blade.php | 8 ++ .../livewire/branch-accounts-form.blade.php | 3 + 45 files changed, 1152 insertions(+), 287 deletions(-) create mode 100644 app/Actions/Account/StoreAccount.php create mode 100644 app/Actions/Account/StoreAccountBalance.php create mode 100644 app/Commands/Account/CreateAccountCommand.php create mode 100644 app/Commands/Account/CreateBalanceCommand.php create mode 100644 app/DataObjects/CreateAccountDTO.php create mode 100644 app/Filament/Resources/BranchResource/RelationManagers/AccountsRelationManager.php create mode 100644 app/Filament/Resources/BranchResource/RelationManagers/BalancesRelationManager.php create mode 100644 app/Filament/Resources/ExpenseResource.php create mode 100644 app/Filament/Resources/ExpenseResource/Pages/CreateExpense.php create mode 100644 app/Filament/Resources/ExpenseResource/Pages/EditExpense.php create mode 100644 app/Filament/Resources/ExpenseResource/Pages/ListExpenses.php create mode 100644 app/Filament/Resources/SaleResource.php create mode 100644 app/Filament/Resources/SaleResource/Pages/CreateSale.php create mode 100644 app/Filament/Resources/SaleResource/Pages/EditSale.php create mode 100644 app/Filament/Resources/SaleResource/Pages/ListSales.php create mode 100644 app/Forms/Components/BranchAccounts.php create mode 100644 app/Livewire/BranchAccountsForm.php create mode 100644 app/Observers/AccountObserver.php create mode 100644 app/Observers/BranchObserver.php create mode 100644 app/Observers/ClientObserver.php create mode 100644 app/Processes/Account/CreateAccountProcess.php create mode 100644 public/images/logo-dark.png create mode 100644 public/images/logo-light.png create mode 100644 resources/views/forms/components/branch-accounts.blade.php create mode 100644 resources/views/livewire/branch-accounts-form.blade.php diff --git a/app/Actions/Account/StoreAccount.php b/app/Actions/Account/StoreAccount.php new file mode 100644 index 0000000..1c7368e --- /dev/null +++ b/app/Actions/Account/StoreAccount.php @@ -0,0 +1,28 @@ +account = $this->createAccountCommand->execute($payload->data); + + return $next($payload); + + } catch (Exception $exception) { + throw new LogicException('Error Storing Account: '.$exception->getMessage()); + } + } +} diff --git a/app/Actions/Account/StoreAccountBalance.php b/app/Actions/Account/StoreAccountBalance.php new file mode 100644 index 0000000..0ac7998 --- /dev/null +++ b/app/Actions/Account/StoreAccountBalance.php @@ -0,0 +1,30 @@ +data['account_id'] = $payload->account->id; + $payload->balance = $this->createBalanceCommand->execute($payload->data); + + return $next($payload->account); + + } catch (Exception $exception) { + throw new LogicException('Error Storing Account Balance: '.$exception->getMessage()); + } + } +} diff --git a/app/Actions/Branch/StoreBranch.php b/app/Actions/Branch/StoreBranch.php index 3f09511..6f305da 100644 --- a/app/Actions/Branch/StoreBranch.php +++ b/app/Actions/Branch/StoreBranch.php @@ -5,27 +5,28 @@ namespace App\Actions\Branch; use App\Actions\BaseAction; use App\Commands\Branches\CreateBranchCommand; use App\DataObjects\CreateBranchDTO; +use Closure; use Exception; +use LogicException; use Spatie\LaravelData\Data; class StoreBranch extends BaseAction { - - public function __construct(private CreateBranchCommand $createBranchCommand) {} + public function __construct(private readonly CreateBranchCommand $createBranchCommand) {} /** * @throws Exception */ - public function __invoke(CreateBranchDTO | Data $payload, \Closure $next) + public function __invoke(CreateBranchDTO|Data $payload, Closure $next) { try { $payload->branch = $this->createBranchCommand->execute($payload->data); + return $next($payload); - } catch (Exception $exception) - { - throw new \LogicException('Error Storing Branch: ' . $exception->getMessage()); + } catch (Exception $exception) { + throw new LogicException('Error Storing Branch: '.$exception->getMessage()); } } } diff --git a/app/Commands/Account/CreateAccountCommand.php b/app/Commands/Account/CreateAccountCommand.php new file mode 100644 index 0000000..8eb5dfb --- /dev/null +++ b/app/Commands/Account/CreateAccountCommand.php @@ -0,0 +1,22 @@ + Account::query()->updateOrCreate([ + 'id' => $data['id'] ?? null, + 'client_id' => $data['client_id'], + ], Arr::except($data, ['starting_balance', 'branch_id'])), + attempts: 2 + ); + } +} diff --git a/app/Commands/Account/CreateBalanceCommand.php b/app/Commands/Account/CreateBalanceCommand.php new file mode 100644 index 0000000..95e16d3 --- /dev/null +++ b/app/Commands/Account/CreateBalanceCommand.php @@ -0,0 +1,28 @@ + Balance::query()->updateOrCreate( + [ + 'id' => $data['id'] ?? null, + 'account_id' => $data['account_id'], + 'is_starting' => isset($data['starting_balance']), + 'branch_id' => $data['branch_id'] ?? null, + ], + [ + 'balance' => $data['starting_balance'], + ] + ), + attempts: 2 + ); + } +} diff --git a/app/Commands/Branches/CreateBranchCommand.php b/app/Commands/Branches/CreateBranchCommand.php index e09f590..bf58b03 100644 --- a/app/Commands/Branches/CreateBranchCommand.php +++ b/app/Commands/Branches/CreateBranchCommand.php @@ -4,17 +4,17 @@ namespace App\Commands\Branches; use App\Commands\Command; use App\Models\Branch; +use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Arr; use Illuminate\Support\Facades\DB; class CreateBranchCommand implements Command { - public function execute(array $data): \Illuminate\Database\Eloquent\Model + public function execute(array $data): Model { return DB::transaction( - callback: fn() => Branch::query()->updateOrCreate(['id' => $data['id'] ?? null], Arr::except($data, ['series'])), + callback: fn () => Branch::query()->updateOrCreate(['id' => $data['id'] ?? null, 'client_id' => $data['client_id']], Arr::except($data, ['series'])), attempts: 2 ); } - } diff --git a/app/DataObjects/CreateAccountDTO.php b/app/DataObjects/CreateAccountDTO.php new file mode 100644 index 0000000..95c576c --- /dev/null +++ b/app/DataObjects/CreateAccountDTO.php @@ -0,0 +1,15 @@ +with(['client','branch', 'files.notes', 'files.remarks'])->whereIn('id', Arr::flatten($this->id))->get(); + $transmittals = Transmittal::query()->with(['client', 'branch', 'files.notes', 'files.remarks'])->whereIn('id', Arr::flatten($this->id))->get(); + return View::make('transmittal.export.transmittal-export-table')->with(['transmittals' => $transmittals]); } - /** * @throws Exception */ @@ -58,37 +53,57 @@ class TransmittalsExport implements FromCollection, WithMapping, ShouldAutoSize, 'series', 'files', 'notes', - 'remarks' + 'remarks', ]; } public function collection() { - $transmittals = Transmittal::query()->with(['client','branch', 'files.notes', 'files.remarks']) - ->withCount(['files','notes','remarks'])->with(['files' => function($files) { - $files->withCount(['notes','remarks']); + $transmittals = Transmittal::query()->with(['client', 'branch', 'files.notes', 'files.remarks']) + ->withCount(['files', 'notes', 'remarks'])->with(['files' => function ($files) { + $files->withCount(['notes', 'remarks']); }]) ->whereIn('id', Arr::flatten($this->id))->get(); - - return $transmittals; } public function map($transmittal): array { - - $data = []; - - $firstFile = $transmittal->files->first(); + $data[] = [ + $transmittal->series, + $firstFile?->description, + $firstFile->notes->first()?->comment, + $firstFile->remarks->first()?->remark, + ]; - $data[] = [$transmittal->series, $firstFile?->description, $firstFile->notes->first()?->comment, $firstFile->remarks->first()?->remark]; + //iterate comments and remarks for first file + $notes = $firstFile->notes->pluck('comment'); + $remarks = $firstFile->remarks->pluck('remark'); + $fileNoteCount = count($notes); + $fileRemarkCount = count($remarks); + + $fileRowCount = $fileNoteCount; + if ($fileRemarkCount > $fileNoteCount) { + $fileRowCount = $fileRemarkCount; + } + + for ($i = 1; $i < $fileRowCount; $i++) { + $data[] = [ + '', + '', + $notes[$i] ?? '', + $remarks[$i] ?? '', + ]; + } + + //file iteration except for first file $fileRowCounter = 0; foreach ($transmittal->files as $file) { $notes = $file->notes->pluck('comment'); @@ -98,20 +113,20 @@ class TransmittalsExport implements FromCollection, WithMapping, ShouldAutoSize, $fileRemarkCount = count($remarks); $fileRowCount = $fileNoteCount; - if($fileRemarkCount > $fileNoteCount) { + if ($fileRemarkCount > $fileNoteCount) { $fileRowCount = $fileRemarkCount; } - - if($fileRowCounter != 0) { + if ($fileRowCounter != 0) { $data[] = [ '', - $file->description , - $notes[$fileRowCounter - 1] ?? '', - $remarks[$fileRowCounter - 1] ?? '', + $file->description, + $file->notes->first()?->comment ?? '', + $file->remarks->first()?->remark ?? '', ]; - for ($i = 0; $i < $fileRowCount; $i++) { + //iterate for remaining notes and remarks + for ($i = 1; $i < $fileRowCount; $i++) { $data[] = [ '', '', @@ -124,10 +139,6 @@ class TransmittalsExport implements FromCollection, WithMapping, ShouldAutoSize, $fileRowCounter++; } - - - - return $data; } } diff --git a/app/Filament/Resources/BranchResource.php b/app/Filament/Resources/BranchResource.php index d0c4a2a..1e15082 100644 --- a/app/Filament/Resources/BranchResource.php +++ b/app/Filament/Resources/BranchResource.php @@ -3,15 +3,16 @@ namespace App\Filament\Resources; use App\Filament\Resources\BranchResource\Pages; -use App\Filament\Resources\BranchResource\RelationManagers; +use App\Filament\Resources\BranchResource\RelationManagers\BalancesRelationManager; use App\Models\Branch; -use Filament\Forms; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\Resource; +use Filament\Support\RawJs; use Filament\Tables; use Filament\Tables\Table; -use Illuminate\Database\Eloquent\Builder; -use Illuminate\Database\Eloquent\SoftDeletingScope; +use Illuminate\Validation\Rules\Unique; class BranchResource extends Resource { @@ -19,14 +20,34 @@ class BranchResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack'; - protected static bool $shouldRegisterNavigation = false; public static function form(Form $form): Form { return $form ->schema([ - // + Select::make('client_id')->relationship('client', 'id') + ->getOptionLabelFromRecordUsing(fn ($record) => $record->company) + ->disabled() + ->columnSpan(2), + + TextInput::make('code')->required() + ->unique( + 'branches', + 'code', + ignoreRecord: true, + modifyRuleUsing: fn (Unique $rule) => $rule->where('client_id', app(static::getModel())->id) + ), + + TextInput::make('series')->label('Current Series') + ->required() + ->numeric() + ->integer() + ->maxLength(6) + ->minLength(1) + ->mask(RawJs::make(<<<'JS' + '999999' + JS)), ]); } @@ -52,7 +73,8 @@ class BranchResource extends Resource public static function getRelations(): array { return [ - // + // AccountsRelationManager::make(), + BalancesRelationManager::make(), ]; } diff --git a/app/Filament/Resources/BranchResource/Pages/EditBranch.php b/app/Filament/Resources/BranchResource/Pages/EditBranch.php index a61a6d5..df74f6d 100644 --- a/app/Filament/Resources/BranchResource/Pages/EditBranch.php +++ b/app/Filament/Resources/BranchResource/Pages/EditBranch.php @@ -3,13 +3,30 @@ namespace App\Filament\Resources\BranchResource\Pages; use App\Filament\Resources\BranchResource; +use App\Filament\Resources\ClientResource; use Filament\Actions; use Filament\Resources\Pages\EditRecord; +use Illuminate\Database\Eloquent\Model; class EditBranch extends EditRecord { protected static string $resource = BranchResource::class; + public function mutateFormDataBeforeFill(array $data): array + { + $data['series'] = $this->getRecord()->current_series; + + return $data; + } + + public function handleRecordUpdate(Model $record, array $data): Model + { + $data['client_id'] = $record->client_id; + $data['id'] = $record->id; + + return ClientResource::saveBranch($data); + } + protected function getHeaderActions(): array { return [ diff --git a/app/Filament/Resources/BranchResource/RelationManagers/AccountsRelationManager.php b/app/Filament/Resources/BranchResource/RelationManagers/AccountsRelationManager.php new file mode 100644 index 0000000..15ea694 --- /dev/null +++ b/app/Filament/Resources/BranchResource/RelationManagers/AccountsRelationManager.php @@ -0,0 +1,62 @@ +whereHas('balances', function (Builder $query) { + $query->where('branch_id', $this->getOwnerRecord()->id); + }); + } + + public function form(Form $form): Form + { + return $form + ->schema([ + Forms\Components\TextInput::make('branch_id') + ->required() + ->maxLength(255), + ]); + } + + public function table(Table $table): Table + { + return $table + ->recordTitleAttribute('branch_id') + ->columns([ + Tables\Columns\TextColumn::make('account'), + Tables\Columns\TextColumn::make('branch_id'), + Tables\Columns\TextColumn::make('normal_balance'), + Tables\Columns\TextColumn::make('starting_balance'), + Tables\Columns\TextColumn::make('current_balance'), + ]) + ->filters([ + // + ]) + ->headerActions([ + Tables\Actions\CreateAction::make(), + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } +} diff --git a/app/Filament/Resources/BranchResource/RelationManagers/BalancesRelationManager.php b/app/Filament/Resources/BranchResource/RelationManagers/BalancesRelationManager.php new file mode 100644 index 0000000..d85d997 --- /dev/null +++ b/app/Filament/Resources/BranchResource/RelationManagers/BalancesRelationManager.php @@ -0,0 +1,97 @@ +whereHas('balances', function (Builder $query) { + $query->where('branch_id', $this->getOwnerRecord()->id); + }); + } + + public function table(Table $table): Table + { + return $table + ->recordTitleAttribute('branch_id') + ->columns([ + Tables\Columns\TextColumn::make('account')->sortable(), + Tables\Columns\TextColumn::make('accountType.normal_balance') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'Debit' => 'success', + 'Credit' => 'danger', + }) + ->sortable() + ->formatStateUsing(fn ($state): string => ucfirst($state)), + Tables\Columns\TextColumn::make('starting_balance')->label('Starting Balance'), + Tables\Columns\TextColumn::make('current_balance')->label('Current Balance'), + ]) + ->filters([ + // + ]) + ->headerActions([ + Tables\Actions\CreateAction::make() + ->using(fn (array $data) => $this->saveAccount($data)), + ]) + ->actions([ + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public function saveAccount(array $data): Account + { + $data['branch_id'] = $this->getOwnerRecord()->id; + $data['normal_balance'] = $data['normal_balance'] ?? AccountType::find($data['account_type_id'])?->normal_balance; + $data['client_id'] = $this->getOwnerRecord()->client_id; + $payload = new CreateAccountDTO(data: $data); + + return app(CreateAccountProcess::class)->run($payload); + } + + public function form(Form $form): Form + { + return $form + ->schema($this->getAccountForm()) + ->columns(1); + } + + public function getAccountForm(): array + { + return [ + Forms\Components\Grid::make() + ->schema([ + Forms\Components\Select::make('account_type_id') + ->label('Account Type') + ->relationship('accountType', 'type'), + Forms\Components\TextInput::make('account'), + Forms\Components\Textarea::make('description'), + Forms\Components\TextInput::make('starting_balance') + ->integer(), + ])->columns(1), + ]; + } +} diff --git a/app/Filament/Resources/ClientResource.php b/app/Filament/Resources/ClientResource.php index d5d1e26..89c5b97 100644 --- a/app/Filament/Resources/ClientResource.php +++ b/app/Filament/Resources/ClientResource.php @@ -2,18 +2,18 @@ namespace App\Filament\Resources; - +use App\DataObjects\CreateBranchDTO; +use App\Filament\Resources\ClientResource\Pages\EditClient; +use App\Filament\Resources\ClientResource\Pages\ListClients; +use App\Filament\Resources\ClientResource\Pages\ViewClient; use App\Filament\Resources\ClientResource\RelationManagers\AccountsRelationManager; use App\Filament\Resources\ClientResource\RelationManagers\BranchesRelationManager; use App\Filament\Resources\ClientResource\RelationManagers\TransmittalsRelationManager; +use App\Models\Branch; use App\Models\Client; +use App\Processes\Branch\CreateBranchProcess; use Filament\Forms; use Filament\Forms\Form; -use Filament\Infolists\Components\Grid; -use Filament\Infolists\Components\Section; -use Filament\Infolists\Components\Split; -use Filament\Infolists\Components\TextEntry; -use Filament\Infolists\Infolist; use Filament\Resources\Resource; use Filament\Tables; use Filament\Tables\Table; @@ -28,7 +28,7 @@ class ClientResource extends Resource public static function authorizeView(Model $record): void { - parent::authorizeView($record); // TODO: Change the autogenerated stub + parent::authorizeView($record); } public static function form(Form $form): Form @@ -43,7 +43,7 @@ class ClientResource extends Resource Forms\Components\Select::make('type_id') ->relationship('type', 'type') ->label('Type')->required(), - ])->columns(2) + ])->columns(2), ])->columns(3); } @@ -61,16 +61,16 @@ class ClientResource extends Resource Tables\Filters\Filter::make('Vatable') ->query(fn (Builder $query) => $query->orWhereHas('type', function (Builder $query) { $query->where('type', 'Vatable'); - }) ), + })), Tables\Filters\Filter::make('Non-Vatable') ->query(fn (Builder $query) => $query->orWhereHas('type', function (Builder $query) { $query->where('type', 'Non Vatable'); - }) ) + })), ]) ->actions([ Tables\Actions\ViewAction::make(), Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make()->requiresConfirmation() + Tables\Actions\DeleteAction::make()->requiresConfirmation(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ @@ -79,23 +79,29 @@ class ClientResource extends Resource ]); } - - public static function getRelations(): array { return [ AccountsRelationManager::class, BranchesRelationManager::class, - TransmittalsRelationManager::class + TransmittalsRelationManager::class, ]; } public static function getPages(): array { return [ - 'view' => \App\Filament\Resources\ClientResource\Pages\ViewClient:: route('/{record}'), - 'edit' => \App\Filament\Resources\ClientResource\Pages\EditClient::route('/{record}/edit'), - 'index' => \App\Filament\Resources\ClientResource\Pages\ListClients::route('/'), + 'view' => ViewClient::route('/{record}'), + 'edit' => EditClient::route('/{record}/edit'), + 'index' => ListClients::route('/'), ]; } + + public static function saveBranch($data): Branch + { + $createBranchProcess = new CreateBranchProcess; + $payload = new CreateBranchDTO(data: $data); + + return $createBranchProcess->run($payload)->branch; + } } diff --git a/app/Filament/Resources/ClientResource/Pages/ViewClient.php b/app/Filament/Resources/ClientResource/Pages/ViewClient.php index 7b1ec02..4693bf9 100644 --- a/app/Filament/Resources/ClientResource/Pages/ViewClient.php +++ b/app/Filament/Resources/ClientResource/Pages/ViewClient.php @@ -4,11 +4,7 @@ namespace App\Filament\Resources\ClientResource\Pages; use App\Filament\Resources\ClientResource; use App\Filament\Resources\ClientResource\RelationManagers\AccountsRelationManager; -use App\Filament\Resources\ClientResource\RelationManagers\BranchesRelationManager; use App\Filament\Resources\ClientResource\RelationManagers\TransmittalsRelationManager; -use App\Models\Account; -use App\Models\Transmittal; -use Filament\Actions; use Filament\Infolists\Components\Grid; use Filament\Infolists\Components\RepeatableEntry; use Filament\Infolists\Components\Section; @@ -41,8 +37,8 @@ class ViewClient extends ViewRecord TextEntry::make('current_series')->label('Branch Current Series'), ]) ->hiddenLabel() - ->grid(2) - ])->collapsible() + ->grid(2), + ])->collapsible(), ]); } diff --git a/app/Filament/Resources/ClientResource/RelationManagers/AccountsRelationManager.php b/app/Filament/Resources/ClientResource/RelationManagers/AccountsRelationManager.php index ce1d634..244d537 100644 --- a/app/Filament/Resources/ClientResource/RelationManagers/AccountsRelationManager.php +++ b/app/Filament/Resources/ClientResource/RelationManagers/AccountsRelationManager.php @@ -22,11 +22,11 @@ class AccountsRelationManager extends RelationManager Forms\Components\TextInput::make('account')->required(), Forms\Components\Textarea::make('description')->nullable(), Forms\Components\Select::make('account_type_id') - ->relationship('accountType','type') + ->relationship('accountType', 'type') ->required(), Forms\Components\Select::make('normal_balance')->options( - ['debit' => 'Debit','credit' => 'Credit'] - )->required() + ['debit' => 'Debit', 'credit' => 'Credit'] + )->required(), ]); } @@ -35,7 +35,7 @@ class AccountsRelationManager extends RelationManager return $table ->recordTitleAttribute('client_id') ->columns([ - Tables\Columns\TextColumn::make('account')->description(fn (Account $record): string => $record->description), + Tables\Columns\TextColumn::make('account')->description(fn (Account $record): string => $record->description ?? ''), Tables\Columns\TextColumn::make('accountType.type'), Tables\Columns\TextColumn::make('normal_balance'), ]) diff --git a/app/Filament/Resources/ClientResource/RelationManagers/BranchesRelationManager.php b/app/Filament/Resources/ClientResource/RelationManagers/BranchesRelationManager.php index 34175d0..5dd584a 100644 --- a/app/Filament/Resources/ClientResource/RelationManagers/BranchesRelationManager.php +++ b/app/Filament/Resources/ClientResource/RelationManagers/BranchesRelationManager.php @@ -2,7 +2,9 @@ namespace App\Filament\Resources\ClientResource\RelationManagers; -use App\DataObjects\CreateBranchDTO; +use App\Filament\Resources\BranchResource\Pages\EditBranch; +use App\Filament\Resources\ClientResource; +use App\Models\Branch; use App\Processes\Branch\CreateBranchProcess; use Filament\Forms; use Filament\Forms\Form; @@ -10,6 +12,7 @@ use Filament\Resources\RelationManagers\RelationManager; use Filament\Support\RawJs; use Filament\Tables; use Filament\Tables\Table; +use Illuminate\Validation\Rules\Unique; class BranchesRelationManager extends RelationManager { @@ -18,15 +21,24 @@ class BranchesRelationManager extends RelationManager protected static bool $shouldCheckPolicyExistence = true; protected CreateBranchProcess $createBranchProcess; - public function __construct() { - $this->createBranchProcess = new CreateBranchProcess(); + + public function __construct() + { + $this->createBranchProcess = new CreateBranchProcess; } public function form(Form $form): Form { return $form ->schema([ - Forms\Components\TextInput::make('code')->required()->unique('branches','code'), + Forms\Components\Hidden::make('id'), + Forms\Components\TextInput::make('code')->required() + ->unique( + 'branches', + 'code', + ignoreRecord: true, + modifyRuleUsing: fn (Unique $rule) => $rule->where('client_id', $this->getOwnerRecord()->id) + ), Forms\Components\TextInput::make('series')->label('Current Series') ->required() ->numeric() @@ -35,7 +47,7 @@ class BranchesRelationManager extends RelationManager ->minLength(1) ->mask(RawJs::make(<<<'JS' '999999' - JS)) + JS)), ])->columns(1); } @@ -52,17 +64,16 @@ class BranchesRelationManager extends RelationManager ]) ->headerActions([ Tables\Actions\CreateAction::make() - ->mutateFormDataUsing(function (array $data): array { - $data['client_id'] = $this->ownerRecord->id; - return $data; - }) - ->using(function($data) { - $payload = new CreateBranchDTO(data: $data); - return $this->createBranchProcess->run($payload)->branch; - }), + ->mutateFormDataUsing(fn ($data) => $this->appendCientId($data)) + ->using(fn ($data) => $this->saveBranch($data)), ]) ->actions([ - Tables\Actions\EditAction::make(), + // Tables\Actions\ViewAction::make()->url(fn ($record) => EditBranch::getUrl(['record' => $record->id])), + Tables\Actions\EditAction::make() + ->fillForm(fn ($record) => ['id' => $record->id, 'code' => $record->code, 'series' => $record->current_series]) + ->mutateFormDataUsing(fn ($data) => $this->appendCientId($data)) + ->using(fn ($data) => $this->saveBranch($data)) + ->url(fn ($record) => EditBranch::getUrl(['record' => $record->id])), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ @@ -72,5 +83,15 @@ class BranchesRelationManager extends RelationManager ]); } + public function appendCientId($data): array + { + $data['client_id'] = $this->ownerRecord->id; + return $data; + } + + public function saveBranch($data): Branch + { + return ClientResource::saveBranch($data); + } } diff --git a/app/Filament/Resources/ClientResource/RelationManagers/TransmittalsRelationManager.php b/app/Filament/Resources/ClientResource/RelationManagers/TransmittalsRelationManager.php index efeccf0..d1315e4 100644 --- a/app/Filament/Resources/ClientResource/RelationManagers/TransmittalsRelationManager.php +++ b/app/Filament/Resources/ClientResource/RelationManagers/TransmittalsRelationManager.php @@ -2,22 +2,7 @@ namespace App\Filament\Resources\ClientResource\RelationManagers; -use App\Commands\Transmittal\GenerateTransmittalSeries; -use App\Commands\Transmittal\StoreTransmittalCommand; -use App\DataObjects\CreateTransmittalDTO; use App\Filament\Resources\TransmittalResource; -use App\Models\Branch; -use App\Models\Client; -use App\Models\Transmittal; -use App\Processes\Transmittal\CreateTransmittalProcess; -use Filament\Actions\Action; -use Filament\Actions\CreateAction; -use Filament\Forms; -use Filament\Forms\Components\DatePicker; -use Filament\Forms\Components\Repeater; -use Filament\Forms\Components\Select; -use Filament\Forms\Components\Textarea; -use Filament\Forms\Components\TextInput; use Filament\Forms\Form; use Filament\Resources\RelationManagers\RelationManager; use Filament\Tables; @@ -33,30 +18,23 @@ class TransmittalsRelationManager extends RelationManager return auth()->user()->can('update_transmittal'); } - protected CreateTransmittalProcess $transmittalProcess; - - public function __construct() - { - $this->transmittalProcess = new CreateTransmittalProcess(); - } - public function form(Form $form): Form { return TransmittalResource::form($form) ->fill( - ['client_id' => $this->getOwnerRecord()->id] - ); + ['client_id' => $this->getOwnerRecord()->id] + ); } public function table(Table $table): Table { return TransmittalResource::table($table)->headerActions([ - Tables\Actions\Action::make('New Transmittal')->action('openCreateForm') + Tables\Actions\Action::make('New Transmittal')->action('openCreateForm'), ]); } - public function openCreateForm() { + public function openCreateForm() + { return redirect()->route('filament.admin.resources.transmittals.create'); } - } diff --git a/app/Filament/Resources/ExpenseResource.php b/app/Filament/Resources/ExpenseResource.php new file mode 100644 index 0000000..fb54c24 --- /dev/null +++ b/app/Filament/Resources/ExpenseResource.php @@ -0,0 +1,60 @@ +schema([ + // + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + // + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListExpenses::route('/'), + 'create' => Pages\CreateExpense::route('/create'), + 'edit' => Pages\EditExpense::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/ExpenseResource/Pages/CreateExpense.php b/app/Filament/Resources/ExpenseResource/Pages/CreateExpense.php new file mode 100644 index 0000000..7a21ead --- /dev/null +++ b/app/Filament/Resources/ExpenseResource/Pages/CreateExpense.php @@ -0,0 +1,11 @@ +schema([ + // + ]); + } + + public static function table(Table $table): Table + { + return $table + ->columns([ + // + ]) + ->filters([ + // + ]) + ->actions([ + Tables\Actions\EditAction::make(), + ]) + ->bulkActions([ + Tables\Actions\BulkActionGroup::make([ + Tables\Actions\DeleteBulkAction::make(), + ]), + ]); + } + + public static function getRelations(): array + { + return [ + // + ]; + } + + public static function getPages(): array + { + return [ + 'index' => Pages\ListSales::route('/'), + 'create' => Pages\CreateSale::route('/create'), + 'edit' => Pages\EditSale::route('/{record}/edit'), + ]; + } +} diff --git a/app/Filament/Resources/SaleResource/Pages/CreateSale.php b/app/Filament/Resources/SaleResource/Pages/CreateSale.php new file mode 100644 index 0000000..f6d96fc --- /dev/null +++ b/app/Filament/Resources/SaleResource/Pages/CreateSale.php @@ -0,0 +1,11 @@ +schema(static::getFormSchema()); + return parent::getEloquentQuery()->orderBy('id', 'desc'); } - - public static function table(Table $table): Table { return $table @@ -93,19 +84,74 @@ class TransmittalResource extends Resource Tables\Actions\BulkAction::make('Bulk Export')->action(function ($records) { static::exportTransmittal(Arr::flatten($records->pluck('id'))); - }) + }), ]), ]); } - public static function getRelations(): array + public static function getTableActions(): array { return [ - // + Tables\Actions\Action::make('Export')->action(fn ($record) => static::exportTransmittal([$record->id])), + Tables\Actions\ViewAction::make(), + Tables\Actions\Action::make('Update Status') + ->fillForm(function ($record) { + return [ + 'user_id' => $record->user_id, + 'date_dispatch' => $record->date_dispatch, + 'date_received' => $record->date_received, + 'received_by' => $record->received_by, + ]; + }) + ->form([ + Select::make('user_id')->label('Dispatch By') + ->relationship('user', 'name') + ->searchable() + ->preload(), + Datepicker::make('date_dispatch')->label('Dispatch Date') + ->native(false)->default(now()), + TextInput::make('received_by')->label('Received By'), + Datepicker::make('date_received')->label('Date Received')->native(false), + ]) + ->action(function ($data, $record) { + $data['id'] = $record->id; + (new StoreTransmittalCommand)->execute($data); + }) + ->icon('heroicon-o-pencil-square') + ->slideOver() + ->hidden(! auth()->user()->can('update_transmittal')), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make(), ]; } - public static function getFormSchema() : array + public static function exportTransmittal(array $id): void + { + $recipient = auth()->user(); + + static::generateExportNotification(); + + (new TransmittalsExport([$id]))->store('public/transmittal-export.xlsx')->chain([ + app(ExportCompleteJob::class, ['user' => $recipient]), + ]); + } + + public static function generateExportNotification(): Notification + { + + return Notification::make() + ->title('Your export will be ready. check your notification for file download link.') + ->success() + ->send(); + } + + public static function form(Form $form): Form + { + return $form + ->schema(static::getFormSchema()); + } + + public static function getFormSchema(): array { return [ Forms\Components\Select::make('client_id') @@ -143,65 +189,17 @@ class TransmittalResource extends Resource ]), ]) ->columns(3) - ->columnSpan(3) + ->columnSpan(3), ]; } - public static function getTableActions () : array + public static function getRelations(): array { return [ - Tables\Actions\Action::make('Export')->action(fn ($record) => static::exportTransmittal([$record->id])), - Tables\Actions\ViewAction::make(), - Tables\Actions\Action::make('Update Status') - ->fillForm(function($record) { - return [ - 'user_id' => $record->user_id, - 'date_dispatch' => $record->date_dispatch, - 'date_received' => $record->date_received, - 'received_by' => $record->received_by, - ]; - }) - ->form([ - Select::make('user_id')->label('Dispatch By') - ->relationship('user', 'name') - ->searchable() - ->preload(), - Datepicker::make('date_dispatch')->label('Dispatch Date') - ->native(false)->default(now()), - TextInput::make('received_by')->label('Received By'), - Datepicker::make('date_received')->label('Date Received')->native(false), - ]) - ->action(function ($data, $record) { - $data['id'] = $record->id; - (new StoreTransmittalCommand())->execute($data); - }) - ->icon('heroicon-o-pencil-square') - ->slideOver() - ->hidden(!auth()->user()->can('update_transmittal')), - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), + // ]; } - public static function generateExportNotification() : Notification { - - - return Notification::make() - ->title('Your export will be ready. check your notification for file download link.') - ->success() - ->send(); - } - - public static function exportTransmittal(array $id) : void { - $recipient = auth()->user(); - - static::generateExportNotification(); - - (new TransmittalsExport([$id]))->store('public/transmittal-export.xlsx')->chain([ - app(ExportCompleteJob::class, [ 'user' => $recipient]) - ]); - } - public static function getPages(): array { return [ diff --git a/app/Filament/Resources/TransmittalResource/Pages/CreateTransmittal.php b/app/Filament/Resources/TransmittalResource/Pages/CreateTransmittal.php index 292c14a..ffcb105 100644 --- a/app/Filament/Resources/TransmittalResource/Pages/CreateTransmittal.php +++ b/app/Filament/Resources/TransmittalResource/Pages/CreateTransmittal.php @@ -2,92 +2,54 @@ namespace App\Filament\Resources\TransmittalResource\Pages; -use App\Exports\TransmittalsExport; use App\Filament\Resources\TransmittalResource; -use App\Jobs\ExportCompleteJob; -use Filament\Actions; use Filament\Actions\Action; -use Filament\Forms\Form; -use Filament\Notifications\Notification; use Filament\Resources\Pages\CreateRecord; -use Filament\Support\Exceptions\Halt; -use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Storage; use Throwable; -use Filament\Notifications\Actions\Action as NotificationAction; class CreateTransmittal extends CreateRecord { protected static string $resource = TransmittalResource::class; + public bool $willExport = false; + + /** + * @throws Throwable + */ + public function createAndExport(): void + { + $this->willExport = true; + $this->create(); + } + + public function afterCreate() + { + if ($this->willExport) { + TransmittalResource::exportTransmittal([$this->record->id]); + } + } + + public function getCreatedNotificationMessage(): ?string + { + if ($this->willExport) { + return 'Transmittal Was Created Successfully!, Check your notification for file download link'; + } + + return 'Transmittal Was Created Successfully!'; + } + protected function getFormActions(): array { return [ $this->getCreateFormAction(), $this->getCreateAnotherFormAction(), - Action::make('Create and Export')->action('saveAndExport')->color('success'), - $this->getCancelFormAction() + Action::make('Create and Export')->action('createAndExport')->color('success'), + $this->getCancelFormAction(), ]; } - /** - * @throws Throwable - */ - public function saveAndExport(): void - { - $this->authorizeAccess(); - try { - DB::beginTransaction(); - - $this->callHook('beforeValidate'); - - $data = $this->form->getState(); - - $this->callHook('afterValidate'); - - $data = $this->mutateFormDataBeforeCreate($data); - - $this->callHook('beforeCreate'); - - $this->record = $this->handleRecordCreation($data); - - $this->form->model($this->getRecord())->saveRelationships(); - - $this->callHook('afterCreate'); - - DB::commit(); - } catch (Halt $exception) { - $exception->shouldRollbackDatabaseTransaction() ? - DB::rollBack() : - DB::commit(); - - return; - } catch (Throwable $exception) { - DB::rollBack(); - - throw $exception; - } - - $this->rememberData(); - - TransmittalResource::exportTransmittal([$this->record->id]); - - Notification::make() - ->success() - ->title('Transmittal Was Created Successfully!, Check your notification for file download link') - ->send(); - - } - - public function getCreatedNotificationMessage(): ?string - { - return 'Transmittal Was Created Successfully!'; // TODO: Change the autogenerated stub - } - protected function getRedirectUrl(): string { return $this->previousUrl ?? $this->getResource()::getUrl('index'); } - - } diff --git a/app/Forms/Components/BranchAccounts.php b/app/Forms/Components/BranchAccounts.php new file mode 100644 index 0000000..dff1380 --- /dev/null +++ b/app/Forms/Components/BranchAccounts.php @@ -0,0 +1,10 @@ +belongsTo(AccountType::class); } - public function client() : BelongsTo + public function client(): BelongsTo { return $this->belongsTo(Client::class); } + + public function getStartingBalanceAttribute() + { + if ($this->balances()->exists()) { + return $this->balances() + ->where('is_starting', true) + ->orderBy('id', 'desc')->first()->balance; + } + + return null; + } + + public function balances(): HasMany + { + return $this->hasMany(Balance::class); + } + + public function getCurrentBalanceAttribute() + { + if ($this->balances()->exists()) { + return $this->balances() + ->orderBy('id', 'desc')->first()->balance; + } + + return null; + } } diff --git a/app/Models/Branch.php b/app/Models/Branch.php index d5335a1..360df28 100644 --- a/app/Models/Branch.php +++ b/app/Models/Branch.php @@ -2,50 +2,49 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Casts\Attribute; +use App\Observers\BranchObserver; +use Illuminate\Database\Eloquent\Attributes\ObservedBy; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Znck\Eloquent\Traits\BelongsToThrough; +#[ObservedBy(BranchObserver::class)] class Branch extends Model { + use BelongsToThrough; use HasFactory; protected $guarded = []; /** * Get the client that owns the Branch - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function client(): BelongsTo { return $this->belongsTo(Client::class); } + public function getCurrentSeriesAttribute() + { + if ($this->series()->count() > 0) { + return $this->series()->orderBy('id', 'desc')->first()->series; + } + + return null; + } + /** * Get all of the series for the Branch - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function series(): HasMany { return $this->hasMany(Series::class); } - public function getCurrentSeriesAttribute() - { - if ($this->series()->count() > 0) { - return $this->series()->orderBy('id', 'desc')->first()->series; - } - return null; - } - /** * Get all of the sales for the Branch - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function sales(): HasMany { @@ -54,11 +53,19 @@ class Branch extends Model /** * Get all of the expenses for the Branch - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function expenses(): HasMany { return $this->hasMany(Expense::class); } + + public function balances(): HasMany + { + return $this->hasMany(Balance::class); + } + + public function accounts(): \Znck\Eloquent\Relations\BelongsToThrough + { + return $this->belongsToThrough(Account::class, Balance::class); + } } diff --git a/app/Models/Client.php b/app/Models/Client.php index 92eaa6e..f1c121f 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -2,13 +2,15 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Casts\Attribute; +use App\Observers\ClientObserver; +use Illuminate\Database\Eloquent\Attributes\ObservedBy; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\BelongsToMany; use Illuminate\Database\Eloquent\Relations\HasMany; +#[ObservedBy([ClientObserver::class])] class Client extends Model { use HasFactory; @@ -19,7 +21,7 @@ class Client extends Model public function getFullNameAttribute() { - return $this->lname . ', ' . $this->fname . ' ' . $this->mname; + return $this->lname.', '.$this->fname.' '.$this->mname; } public function getVatableAttribute() @@ -29,8 +31,6 @@ class Client extends Model /** * Get all of the branches for the Client - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany */ public function branches(): HasMany { @@ -39,8 +39,6 @@ class Client extends Model /** * Get the type associated with the Client - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function type(): BelongsTo { @@ -54,17 +52,14 @@ class Client extends Model /** * The users that belong to the Client - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); } - public function transmittals() : HasMany + public function transmittals(): HasMany { return $this->hasMany(Transmittal::class); } - } diff --git a/app/Models/User.php b/app/Models/User.php index 1e8a643..c5e03fb 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,8 +3,6 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; -use BezhanSalleh\FilamentShield\Traits\HasPanelShield; -use Filament\Models\Contracts\FilamentUser; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; @@ -13,7 +11,7 @@ use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable { - use HasFactory, Notifiable, HasRoles, HasPermissions; + use HasFactory, HasPermissions, HasRoles, Notifiable; /** * The attributes that are mass assignable. diff --git a/app/Observers/AccountObserver.php b/app/Observers/AccountObserver.php new file mode 100644 index 0000000..440aea0 --- /dev/null +++ b/app/Observers/AccountObserver.php @@ -0,0 +1,56 @@ +balances()->exists()) { + $account->balances()->create([ + 'balance' => 0, + 'is_starting' => true, + ]); + } + }, 2); + } + + /** + * Handle the Account "updated" event. + */ + public function updated(Account $account): void + { + // + } + + /** + * Handle the Account "deleted" event. + */ + public function deleted(Account $account): void + { + // + } + + /** + * Handle the Account "restored" event. + */ + public function restored(Account $account): void + { + // + } + + /** + * Handle the Account "force deleted" event. + */ + public function forceDeleted(Account $account): void + { + // + } +} diff --git a/app/Observers/BranchObserver.php b/app/Observers/BranchObserver.php new file mode 100644 index 0000000..4f31460 --- /dev/null +++ b/app/Observers/BranchObserver.php @@ -0,0 +1,62 @@ +client->accounts; + DB::transaction(function () use ($branch, $accounts) { + foreach ($accounts as $account) { + $branch->balances()->updateOrCreate( + attributes: [ + 'account_id' => $account->id, + 'is_starting' => true, + ], + values: [ + 'balance' => $account->starting_balance, + ]); + } + }, 2); + + } + + /** + * Handle the Branch "updated" event. + */ + public function updated(Branch $branch): void + { + // + } + + /** + * Handle the Branch "deleted" event. + */ + public function deleted(Branch $branch): void + { + // + } + + /** + * Handle the Branch "restored" event. + */ + public function restored(Branch $branch): void + { + // + } + + /** + * Handle the Branch "force deleted" event. + */ + public function forceDeleted(Branch $branch): void + { + // + } +} diff --git a/app/Observers/ClientObserver.php b/app/Observers/ClientObserver.php new file mode 100644 index 0000000..19678c2 --- /dev/null +++ b/app/Observers/ClientObserver.php @@ -0,0 +1,87 @@ +accounts()->createMany([ + [ + 'account_type_id' => 1, + 'account' => 'Cash', + 'normal_balance' => 'debit', + ], + [ + 'account_type_id' => 1, + 'account' => 'Input Tax', + 'normal_balance' => 'debit', + ], + [ + 'account_type_id' => 1, + 'account' => 'Creditable Withholding Tax', + 'normal_balance' => 'debit', + ], + [ + 'account_type_id' => 2, + 'account' => 'Output Tax', + 'normal_balance' => 'credit', + ], + [ + 'account_type_id' => 2, + 'account' => 'Payable Withholding Tax', + 'normal_balance' => 'credit', + ], + [ + 'account_type_id' => 5, + 'account' => 'Vat Exempt Revenue', + 'normal_balance' => 'credit', + ], + [ + 'account_type_id' => 4, + 'account' => 'Sales Discount', + 'normal_balance' => 'debit', + ], + ]); + }); + } + + /** + * Handle the Client "updated" event. + */ + public function updated(Client $client): void + { + // + } + + /** + * Handle the Client "deleted" event. + */ + public function deleted(Client $client): void + { + // + } + + /** + * Handle the Client "restored" event. + */ + public function restored(Client $client): void + { + // + } + + /** + * Handle the Client "force deleted" event. + */ + public function forceDeleted(Client $client): void + { + // + } +} diff --git a/app/Processes/Account/CreateAccountProcess.php b/app/Processes/Account/CreateAccountProcess.php new file mode 100644 index 0000000..510951a --- /dev/null +++ b/app/Processes/Account/CreateAccountProcess.php @@ -0,0 +1,15 @@ +id('admin') ->path('admin') ->login() + ->brandLogo(asset('images/logo-light.png')) + ->darkModeBrandLogo(asset('images/logo-dark.png')) + ->brandLogoHeight('2.5rem') ->colors([ 'primary' => Color::Amber, ]) @@ -55,11 +59,11 @@ class AdminPanelProvider extends PanelProvider Authenticate::class, ]) ->plugins([ - \BezhanSalleh\FilamentShield\FilamentShieldPlugin::make() + FilamentShieldPlugin::make() ->gridColumns([ 'default' => 1, 'sm' => 2, - 'lg' => 3 + 'lg' => 3, ]) ->sectionColumnSpan(1) ->checkboxListColumns([ @@ -72,7 +76,6 @@ class AdminPanelProvider extends PanelProvider 'sm' => 2, ]), ]) - ->viteTheme('resources/css/filament/admin/theme.css') - ; + ->viteTheme('resources/css/filament/admin/theme.css'); } } diff --git a/composer.json b/composer.json index a4babff..052f6d1 100644 --- a/composer.json +++ b/composer.json @@ -19,6 +19,7 @@ "malzariey/filament-daterangepicker-filter": "^2.8", "pxlrbt/filament-excel": "^2.3", "spatie/laravel-data": "^4.7", + "staudenmeir/belongs-to-through": "^2.16", "yemenopensource/filament-excel": "*" }, "require-dev": { diff --git a/composer.lock b/composer.lock index 44da807..52356dd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "f908c6791028758e39e2ab5689fc67fd", + "content-hash": "366e87ad704c235f10c87aa17c669966", "packages": [ { "name": "amphp/amp", @@ -6967,6 +6967,71 @@ ], "time": "2024-03-13T16:08:30+00:00" }, + { + "name": "staudenmeir/belongs-to-through", + "version": "v2.16", + "source": { + "type": "git", + "url": "https://github.com/staudenmeir/belongs-to-through.git", + "reference": "79667db6660fa0065b24415bab29a5f85a0128c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staudenmeir/belongs-to-through/zipball/79667db6660fa0065b24415bab29a5f85a0128c7", + "reference": "79667db6660fa0065b24415bab29a5f85a0128c7", + "shasum": "" + }, + "require": { + "illuminate/database": "^11.0", + "php": "^8.2" + }, + "require-dev": { + "barryvdh/laravel-ide-helper": "^3.0", + "orchestra/testbench": "^9.0", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Staudenmeir\\BelongsToThrough\\IdeHelperServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Znck\\Eloquent\\": "src/", + "Staudenmeir\\BelongsToThrough\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Rahul Kadyan", + "email": "hi@znck.me" + }, + { + "name": "Jonas Staudenmeir", + "email": "mail@jonas-staudenmeir.de" + } + ], + "description": "Laravel Eloquent BelongsToThrough relationships", + "support": { + "issues": "https://github.com/staudenmeir/belongs-to-through/issues", + "source": "https://github.com/staudenmeir/belongs-to-through/tree/v2.16" + }, + "funding": [ + { + "url": "https://paypal.me/JonasStaudenmeir", + "type": "custom" + } + ], + "time": "2024-03-09T09:53:11+00:00" + }, { "name": "symfony/clock", "version": "v7.1.1", diff --git a/config/database.php b/config/database.php index 125949e..5b17312 100644 --- a/config/database.php +++ b/config/database.php @@ -55,7 +55,7 @@ return [ 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, - 'strict' => true, + 'strict' => false, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), diff --git a/public/images/logo-dark.png b/public/images/logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..06bc3fe062cfdfe9b6f503340989edb9c353f96c GIT binary patch literal 35306 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�Pc^A!rm+Rd9G90k z8UKcMZbzDQ`>+GozY;iWuMZ3;M*N_b>9(2uucC+p%&w66Cvp6%^@M{S7ZP->fTNfE z^zf;mVPw4jcF%IzeoESG)Fqc9DNRq;VjYMm*IUJPaiek9l-b7G-;nXaT)9DsT(e%Z zi;6Umf3vs_ZnIoP(AJ+f?unL@+06Tw$l*O&;x)Mve|6}E6Hb%_tdwW06xB#$_67{% z|K%<8yhu82PMBMTwbcq<53PN1A_;F>U3~+S<0|aZlU*Dgfg5S+b?cd8cC9i+sLuTHd2WZI}I<40M?ERae>6 zYmyJ1otqMDVxW14im2%SilPT?_%X-dY54qV{`Ek|(f#i!Q*Ad*G=g$kye&E^ZW3F! zKpJ28Rq9qmGxdLz9x`k1(aDT#s~-pDM|Eh^gtS)AVVcjqmL^JABZkzdD;KJcw&$lp z4lp_;^s!*KpK?tc?BadelD+!*J2%ol<9Xtr1%xdRF%6bgpwN=b12WaH4Nwi+xIGh2 z)AkTbHj5EO=^`uqW zx0o;E`dHT81sUhM=xKF+(oE4!+C^laZrgF_oFx?y56Eztzg@6QWue@$-1PO0MmzcTkoJh15hwz=;#LjSh_{$D-&f2-{Or=|Y?Y5w2z-od}4 XeHKrpW!a$d?{YOIZN*vzoACbu-kp*f literal 0 HcmV?d00001 diff --git a/public/images/logo-light.png b/public/images/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..9998a376b054607a323f164f0909d4b428b0616f GIT binary patch literal 36198 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 +
+ +
+ diff --git a/resources/views/livewire/branch-accounts-form.blade.php b/resources/views/livewire/branch-accounts-form.blade.php new file mode 100644 index 0000000..65872d9 --- /dev/null +++ b/resources/views/livewire/branch-accounts-form.blade.php @@ -0,0 +1,3 @@ +
+ The Master doesn't talk, he acts. +