add controllers, servoices
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use App\Models\Configuration;
|
||||
|
||||
class ExpenseContextService
|
||||
{
|
||||
public function getSchoolYear(): string
|
||||
{
|
||||
return (string) (Configuration::getConfig('school_year') ?? '');
|
||||
}
|
||||
|
||||
public function getSemester(): string
|
||||
{
|
||||
return (string) (Configuration::getConfig('semester') ?? '');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use App\Models\Expense;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ExpenseQueryService
|
||||
{
|
||||
public function listAll(): array
|
||||
{
|
||||
return $this->baseQuery()
|
||||
->orderByDesc('expenses.created_at')
|
||||
->get()
|
||||
->map(fn ($row) => (array) $row)
|
||||
->all();
|
||||
}
|
||||
|
||||
public function findById(int $id): ?array
|
||||
{
|
||||
$row = $this->baseQuery()
|
||||
->where('expenses.id', $id)
|
||||
->first();
|
||||
|
||||
return $row ? (array) $row : null;
|
||||
}
|
||||
|
||||
private function baseQuery()
|
||||
{
|
||||
return Expense::query()
|
||||
->selectRaw('
|
||||
expenses.*,
|
||||
u.firstname AS purchaser_firstname,
|
||||
u.lastname AS purchaser_lastname,
|
||||
approver.firstname AS approver_firstname,
|
||||
approver.lastname AS approver_lastname
|
||||
')
|
||||
->leftJoin('users as u', 'u.id', '=', 'expenses.purchased_by')
|
||||
->leftJoin('users as approver', 'approver.id', '=', 'expenses.approved_by');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use Illuminate\Http\UploadedFile;
|
||||
|
||||
class ExpenseReceiptService
|
||||
{
|
||||
public function storeReceipt(UploadedFile $file): string
|
||||
{
|
||||
$stored = $file->store('receipts');
|
||||
return basename($stored);
|
||||
}
|
||||
|
||||
public function receiptUrl(?string $filename): ?string
|
||||
{
|
||||
if (!$filename) {
|
||||
return null;
|
||||
}
|
||||
return url('receipts/' . $filename);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
class ExpenseRetailorService
|
||||
{
|
||||
public function listRetailors(): array
|
||||
{
|
||||
return [
|
||||
'Amazon',
|
||||
'Walmart',
|
||||
'Costco',
|
||||
"BJ's",
|
||||
'Market Basket',
|
||||
'Aldi',
|
||||
'Hannaford',
|
||||
"Sam's Club",
|
||||
'HomeGoods',
|
||||
'Hostinger',
|
||||
'Wicked Cheesy',
|
||||
'Shatila',
|
||||
'Brothers Pizzeria',
|
||||
'Paradise Biryani Pointe',
|
||||
'Emad Leiman',
|
||||
'Nova Trampoline Park',
|
||||
"Lubin's Awards",
|
||||
'Dollar Tree',
|
||||
'Stop & Shop',
|
||||
"Dunkin' Donuts",
|
||||
"Giovanni's Pizza",
|
||||
'Trader Joes',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ExpenseStaffService
|
||||
{
|
||||
public function listStaffUsers(): array
|
||||
{
|
||||
$rows = DB::table('users')
|
||||
->select('users.id', 'users.firstname', 'users.lastname', 'roles.name AS role_name')
|
||||
->leftJoin('user_roles', 'user_roles.user_id', '=', 'users.id')
|
||||
->leftJoin('roles', 'roles.id', '=', 'user_roles.role_id')
|
||||
->whereNotNull('roles.name')
|
||||
->get()
|
||||
->map(fn ($row) => (array) $row)
|
||||
->all();
|
||||
|
||||
$excludedRoles = array_map('strtolower', ['parent', 'student', 'guest']);
|
||||
$staff = [];
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$roleName = strtolower((string) ($row['role_name'] ?? ''));
|
||||
$id = (int) ($row['id'] ?? 0);
|
||||
if ($id <= 0 || in_array($roleName, $excludedRoles, true)) {
|
||||
continue;
|
||||
}
|
||||
if (!isset($staff[$id])) {
|
||||
$staff[$id] = [
|
||||
'id' => $id,
|
||||
'firstname' => $row['firstname'] ?? '',
|
||||
'lastname' => $row['lastname'] ?? '',
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
uasort($staff, static function ($a, $b) {
|
||||
$nameA = trim(($a['firstname'] ?? '') . ' ' . ($a['lastname'] ?? ''));
|
||||
$nameB = trim(($b['firstname'] ?? '') . ' ' . ($b['lastname'] ?? ''));
|
||||
return strcasecmp($nameA, $nameB);
|
||||
});
|
||||
|
||||
return array_values($staff);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use App\Models\Expense;
|
||||
|
||||
class ExpenseStatusService
|
||||
{
|
||||
public function updateStatus(Expense $expense, string $status, string $reason, int $userId): Expense
|
||||
{
|
||||
$expense->status = $status;
|
||||
$expense->status_reason = $reason;
|
||||
$expense->approved_by = $userId;
|
||||
$expense->updated_by = $userId;
|
||||
$expense->save();
|
||||
|
||||
return $expense;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Expenses;
|
||||
|
||||
use App\Models\Expense;
|
||||
|
||||
class ExpenseWriteService
|
||||
{
|
||||
public function __construct(private ExpenseContextService $context) {}
|
||||
|
||||
public function store(array $payload): Expense
|
||||
{
|
||||
$schoolYear = $payload['school_year'] ?? $this->context->getSchoolYear();
|
||||
$semester = $payload['semester'] ?? $this->context->getSemester();
|
||||
|
||||
$data = [
|
||||
'category' => $payload['category'],
|
||||
'amount' => $payload['amount'],
|
||||
'receipt_path' => $payload['receipt_path'] ?? null,
|
||||
'description' => $payload['description'] ?? null,
|
||||
'retailor' => $payload['retailor'] ?? null,
|
||||
'date_of_purchase' => $payload['date_of_purchase'],
|
||||
'purchased_by' => $payload['purchased_by'],
|
||||
'added_by' => $payload['added_by'],
|
||||
'status' => $payload['status'],
|
||||
'status_reason' => $payload['status_reason'] ?? null,
|
||||
'approved_by' => $payload['approved_by'] ?? null,
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
];
|
||||
|
||||
return Expense::query()->create($data);
|
||||
}
|
||||
|
||||
public function update(Expense $expense, array $payload): Expense
|
||||
{
|
||||
$expense->fill($payload);
|
||||
$expense->save();
|
||||
return $expense;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user