feat: initial commit

This commit is contained in:
JP
2024-08-05 08:04:35 +08:00
parent 0f3c3db73b
commit 140e821e0c
194 changed files with 14509 additions and 254 deletions

24
app/Models/Account.php Normal file
View File

@@ -0,0 +1,24 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Account extends Model
{
use HasFactory;
protected $guarded= [];
public function accountType() : BelongsTo
{
return $this->belongsTo(AccountType::class);
}
public function client() : BelongsTo
{
return $this->belongsTo(Client::class);
}
}

View File

@@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
class AccountType extends Model
{
use HasFactory;
protected $guarded = [];
/**
* Get all of the accounts for the AccountType
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function accounts(): HasMany
{
return $this->hasMany(Account::class);
}
}

29
app/Models/Balance.php Normal file
View File

@@ -0,0 +1,29 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Balance extends Model
{
use HasFactory;
protected $guarded = [];
public function account(): BelongsTo
{
return $this->belongsTo(Account::class);
}
/**
* Get the ledger that owns the Balance
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function ledger(): BelongsTo
{
return $this->belongsTo(Ledger::class);
}
}

64
app/Models/Branch.php Normal file
View File

@@ -0,0 +1,64 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Branch extends Model
{
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);
}
/**
* 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
{
return $this->hasMany(Sale::class);
}
/**
* Get all of the expenses for the Branch
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function expenses(): HasMany
{
return $this->hasMany(Expense::class);
}
}

70
app/Models/Client.php Normal file
View File

@@ -0,0 +1,70 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
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;
class Client extends Model
{
use HasFactory;
protected $guarded = [];
protected $appends = ['vatable'];
public function getFullNameAttribute()
{
return $this->lname . ', ' . $this->fname . ' ' . $this->mname;
}
public function getVatableAttribute()
{
return $this->type->type == 'Vatable' ? true : false;
}
/**
* Get all of the branches for the Client
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function branches(): HasMany
{
return $this->hasMany(Branch::class);
}
/**
* Get the type associated with the Client
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function type(): BelongsTo
{
return $this->belongsTo(ClientType::class);
}
public function accounts(): HasMany
{
return $this->hasMany(Account::class);
}
/**
* 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
{
return $this->hasMany(Transmittal::class);
}
}

13
app/Models/ClientType.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class ClientType extends Model
{
use HasFactory;
protected $table = 'types';
}

13
app/Models/Comment.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
use HasFactory;
protected $guarded = [];
}

11
app/Models/Expense.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Expense extends Model
{
use HasFactory;
}

30
app/Models/File.php Normal file
View File

@@ -0,0 +1,30 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class File extends Model
{
use HasFactory;
protected $guarded = [];
public function transmittal(): BelongsTo
{
return $this->belongsTo(Transmittal::class);
}
public function notes(): HasMany
{
return $this->hasMany(Comment::class);
}
public function remarks(): HasMany
{
return $this->hasMany(Remark::class);
}
}

33
app/Models/Journal.php Normal file
View File

@@ -0,0 +1,33 @@
<?php
namespace App\Models;
use App\Traits\HasPeriod;
use App\Traits\HasUser;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class Journal extends Model
{
use HasFactory;
protected $guarded = [];
protected $casts = ['happened_on' => 'date'];
public function ledger(): HasOne
{
return $this->hasOne(Ledger::class);
}
public function scopeDateCreatedFilter(Builder $query, $date) : Builder
{
$dates = explode(' to ',$date);
if (isset($dates[1])) {
return $query->whereBetween('happened_on' ,[$dates[0], $dates[1]]);
}
return $query->where('happened_on', $dates[0]);
}
}

65
app/Models/Ledger.php Normal file
View File

@@ -0,0 +1,65 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Ledger extends Model
{
use HasFactory;
protected $guarded = [];
public function scopeIsTransaction($query)
{
return $query->whereNotNull('transaction_id');
}
public function scopeIsJournal($query)
{
return $query->whereNull('transaction_id');
}
public function account(): BelongsTo
{
return $this->belongsTo(Account::class);
}
public function journal(): BelongsTo
{
return $this->belongsTo(Journal::class);
}
public function transaction() : BelongsTo
{
return $this->belongsTo(Transaction::class);
}
public function scopeDateCreatedFilter(Builder $query, $date) : Builder
{
$dates = explode(' to ',$date);
if (isset($dates[1])) {
return $query->whereHas('transaction', function ($transaction) use ($dates) {
$transaction->whereBetween('happened_on' ,[$dates[0], $dates[1]]);
});
}
return $query->whereHas('transaction', function ($transaction) use ($dates) {
$transaction->where('created_at', $dates[0]);
});
}
/**
* Get all of the balances for the Ledger
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function balances(): HasMany
{
return $this->hasMany(Balance::class);
}
}

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Spatie\Permission\Models\Permission;
class PermissionType extends Model
{
use HasFactory;
/**
* Get all of the permissions for the PermissionType
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function permissions(): HasMany
{
return $this->hasMany(Permission::class);
}
}

13
app/Models/Remark.php Normal file
View File

@@ -0,0 +1,13 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Remark extends Model
{
use HasFactory;
protected $guarded = [];
}

11
app/Models/Sale.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Sale extends Model
{
use HasFactory;
}

11
app/Models/SaleSeries.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class SaleSeries extends Model
{
use HasFactory;
}

19
app/Models/Series.php Normal file
View File

@@ -0,0 +1,19 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Series extends Model
{
use HasFactory;
protected $guarded = [];
// public function setSeriesAttribute($value)
// {
// $this->attributes['series'] = str_pad($value, 6, '0', STR_PAD_LEFT);
// }
}

View File

@@ -0,0 +1,55 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
class Transaction extends Model
{
use HasFactory;
protected $guarded = [];
/**
* Get the expense that owns the Transaction
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function expense(): BelongsTo
{
return $this->belongsTo(Expense::class);
}
/**
* Get the sale that owns the Transaction
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function sale(): BelongsTo
{
return $this->belongsTo(Sale::class);
}
/**
* Get the account that owns the Transaction
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function account(): BelongsTo
{
return $this->belongsTo(Account::class);
}
/**
* Get the ledgers associated with the Transaction
*
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function ledgers(): HasMany
{
return $this->hasMany(Ledger::class);
}
}

View File

@@ -0,0 +1,82 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasManyThrough;
use Illuminate\Database\Query\Builder;
use Laravel\Prompts\Note;
class Transmittal extends Model
{
use HasFactory;
protected $guarded = [];
protected $casts = [
'date_created' => 'date',
'date_dispatch' => 'date',
'date_received' => 'date'
];
public function files(): HasMany
{
return $this->hasMany(File::class);
}
public function notes(): HasManyThrough
{
return $this->hasManyThrough(Comment::class, File::class);
}
public function remarks(): HasManyThrough
{
return $this->hasManyThrough(Remark::class, File::class);
}
public function client(): BelongsTo
{
return $this->belongsTo(Client::class);
}
public function branch(): BelongsTo
{
return $this->belongsTo(Branch::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function scopeDateCreatedFilter(Builder $query, $date) : Builder
{
$dates = explode(' to ',$date);
if(isset($dates[1])) {
return $query->whereBetween('date_created' ,[$dates[0], $dates[1]]);
}
return $query->where('date_created', $dates[0]);
}
public function scopeDateDispatchedFilter(Builder $query, $date) : Builder
{
$dates = explode(' to ',$date);
if(isset($dates[1])) {
return $query->whereBetween('date_dispatch', [$dates[0], $dates[1]]);
}
return $query->where('date_dispatch', $dates[0]);
}
public function scopeDateReceivedFilter(Builder $query, $date) : Builder
{
$dates = explode(' to ',$date);
if(isset($dates[1])) {
return $query->whereBetween('date_received', [$dates[0], $dates[1]]);
}
return $query->where('date_received', $dates[0]);
}
}

11
app/Models/Type.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Type extends Model
{
use HasFactory;
}

View File

@@ -3,13 +3,17 @@
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;
use Spatie\Permission\Traits\HasPermissions;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasFactory, Notifiable;
use HasFactory, Notifiable, HasRoles, HasPermissions;
/**
* The attributes that are mass assignable.