10 Commits

Author SHA1 Message Date
Jp
fc672e4f4a feat(TransmittalResource): enhance search functionality across related models
Implement wildcard search on transmittal series, notes, and files to improve user experience when filtering records. Also extend search capabilities to client company and branch code fields for more comprehensive filtering.
2026-02-12 16:12:35 +08:00
Jp
a77e95d2a5 feat: implement FilamentUser interface for User model
Add FilamentUser interface to allow access control within Filament admin panel. The canAccessPanel method currently returns true for all users, providing a foundation for future permission-based access restrictions.
2026-02-11 05:44:49 +08:00
Jp
ee65bdfb31 fix: force HTTPS scheme in all environments
Previously HTTPS was only enforced in production, which could lead to insecure URLs in other environments like staging. This change ensures consistent URL generation across all environments.
2026-02-11 05:41:22 +08:00
Jp
7fa8b75b29 fix: enforce HTTPS in production environment
Add URL::forceScheme('https') in AppServiceProvider to ensure all generated URLs use HTTPS when the application is in production. This improves security by enforcing secure connections.
2026-02-11 05:37:54 +08:00
Jp
a8ad07676a Merge branch 'main' of https://git.jpaleviado.site/kingjaypee12/MKM 2026-02-11 05:27:40 +08:00
Jp
6f04a60e43 Merge branch 'main' of https://github.com/kingjaypee12/MKM-App 2026-02-11 05:25:34 +08:00
Jp
76a52d7e82 fix(database): update foreign key constraints to cascade on delete
Update foreign key constraints on accounts and transmittals tables to cascade deletions, ensuring data integrity when referenced clients or branches are removed. The down migrations revert to the previous behavior.
2026-02-11 05:24:44 +08:00
5715ab10f2 Merge pull request 'update/ledger' (#1) from update/ledger into main
Reviewed-on: #1
2026-02-10 07:07:10 +00:00
138740648c Merge pull request #2 from kingjaypee12/update/ledger
refactor: streamline sales and expenses management in client resource
2026-02-10 15:06:57 +08:00
13a0f69ce3 Merge pull request #1 from kingjaypee12/update/ledger
fix: cascade delete related transactions and ledgers for sales and ex…
2026-02-09 22:26:19 +08:00
5 changed files with 118 additions and 4 deletions

View File

@@ -45,16 +45,36 @@ class TransmittalResource extends Resource
->columns([ ->columns([
Tables\Columns\Layout\Split::make([ Tables\Columns\Layout\Split::make([
Tables\Columns\TextColumn::make('series') Tables\Columns\TextColumn::make('series')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
$wildcardSearch = '%' . str_replace(' ', '%', $search) . '%';
return $query->where(function (Builder $query) use ($wildcardSearch) {
$query->where('series', 'like', $wildcardSearch)
->orWhereHas('notes', function (Builder $query) use ($wildcardSearch) {
$query->where('comment', 'like', $wildcardSearch);
})
->orWhereHas('files', function (Builder $query) use ($wildcardSearch) {
$query->where('description', 'like', $wildcardSearch);
});
});
})
->label('Series') ->label('Series')
->weight(FontWeight::Bold) ->weight(FontWeight::Bold)
->columnSpan(2), ->columnSpan(2),
Tables\Columns\Layout\Stack::make([ Tables\Columns\Layout\Stack::make([
Tables\Columns\TextColumn::make('client.company') Tables\Columns\TextColumn::make('client.company')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
return $query->whereHas('client', function (Builder $query) use ($search) {
$query->where('company', 'like', '%' . str_replace(' ', '%', $search) . '%');
});
})
->weight(FontWeight::SemiBold)->label('Client'), ->weight(FontWeight::SemiBold)->label('Client'),
Tables\Columns\TextColumn::make('branch.code') Tables\Columns\TextColumn::make('branch.code')
->searchable() ->searchable(query: function (Builder $query, string $search): Builder {
return $query->whereHas('branch', function (Builder $query) use ($search) {
$query->where('code', 'like', '%' . str_replace(' ', '%', $search) . '%');
});
})
->label('Branch'), ->label('Branch'),
]), ]),
]), ]),

View File

@@ -3,16 +3,23 @@
namespace App\Models; namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail; // use Illuminate\Contracts\Auth\MustVerifyEmail;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles; use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable class User extends Authenticatable implements FilamentUser
{ {
use HasFactory, HasPermissions, HasRoles, Notifiable; use HasFactory, HasPermissions, HasRoles, Notifiable;
public function canAccessPanel(Panel $panel): bool
{
return true;
}
/** /**
* The attributes that are mass assignable. * The attributes that are mass assignable.
* *

View File

@@ -4,6 +4,7 @@ namespace App\Providers;
use App\Policies\RolePolicy; use App\Policies\RolePolicy;
use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Role;
@@ -22,6 +23,8 @@ class AppServiceProvider extends ServiceProvider
*/ */
public function boot(): void public function boot(): void
{ {
URL::forceScheme('https');
Gate::before(function ($user, $ability) { Gate::before(function ($user, $ability) {
return $user->hasRole('super_admin') ? true : null; return $user->hasRole('super_admin') ? true : null;
}); });

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('accounts', function (Blueprint $table) {
$table->dropForeign(['client_id']);
$table->foreign('client_id')
->references('id')
->on('clients')
->cascadeOnDelete();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('accounts', function (Blueprint $table) {
$table->dropForeign(['client_id']);
$table->foreign('client_id')
->references('id')
->on('clients')
->nullOnDelete(); // Since it is nullable
});
}
};

View File

@@ -0,0 +1,48 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('transmittals', function (Blueprint $table) {
$table->dropForeign(['client_id']);
$table->dropForeign(['branch_id']);
$table->foreign('client_id')
->references('id')
->on('clients')
->cascadeOnDelete();
$table->foreign('branch_id')
->references('id')
->on('branches')
->cascadeOnDelete();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('transmittals', function (Blueprint $table) {
$table->dropForeign(['client_id']);
$table->dropForeign(['branch_id']);
$table->foreign('client_id')
->references('id')
->on('clients');
$table->foreign('branch_id')
->references('id')
->on('branches');
});
}
};