chore: initial commit of existing codebase
This commit is contained in:
commit
11e94889b2
292 files changed
+38586
No files matched your search
@@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Purchase;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\PurchaseRequest;
|
||||
use App\Models\PurchaseRequestItem;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class PurchaseRequestController extends Controller
|
||||
{
|
||||
public function index()
|
||||
{
|
||||
$requests = PurchaseRequest::with(['requestedBy', 'items'])->latest()->paginate(15);
|
||||
|
||||
return view('purchase.requests.index', compact('requests'));
|
||||
}
|
||||
|
||||
public function create()
|
||||
{
|
||||
return view('purchase.requests.create');
|
||||
}
|
||||
|
||||
public function store(Request $request)
|
||||
{
|
||||
$request->validate([
|
||||
'date' => 'required|date',
|
||||
'project_name' => 'required|string|max:255',
|
||||
'department' => 'nullable|string|max:255',
|
||||
'requested_by_name' => 'required|string|max:255',
|
||||
'required_date_text' => 'nullable|string|max:100',
|
||||
'location' => 'nullable|string|max:255',
|
||||
'remarks' => 'nullable|string',
|
||||
'items' => 'required|array|min:1',
|
||||
'items.*.description' => 'required|string',
|
||||
'items.*.unit' => 'nullable|string|max:50',
|
||||
'items.*.quantity_required' => 'required|numeric|min:0.01',
|
||||
'items.*.purpose_use' => 'nullable|string|max:255',
|
||||
'items.*.required_date' => 'nullable|date',
|
||||
]);
|
||||
|
||||
DB::transaction(function () use ($request) {
|
||||
$year = now()->format('y');
|
||||
$next = PurchaseRequest::max('id') + 1;
|
||||
$mprNumber = 'MPR' . $year . '-' . str_pad($next, 4, '0', STR_PAD_LEFT);
|
||||
|
||||
$pr = PurchaseRequest::create([
|
||||
'request_number' => $mprNumber,
|
||||
'date' => $request->date,
|
||||
'project_name' => $request->project_name,
|
||||
'department' => $request->department,
|
||||
'requested_by_name' => $request->requested_by_name,
|
||||
'required_date_text' => $request->required_date_text,
|
||||
'location' => $request->location,
|
||||
'remarks' => $request->remarks,
|
||||
'status' => 'pending',
|
||||
'requested_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
foreach ($request->items as $item) {
|
||||
if (empty(trim($item['description']))) {
|
||||
continue;
|
||||
}
|
||||
PurchaseRequestItem::create([
|
||||
'purchase_request_id' => $pr->id,
|
||||
'description' => $item['description'],
|
||||
'unit' => $item['unit'] ?? null,
|
||||
'quantity_required' => $item['quantity_required'],
|
||||
'purpose_use' => $item['purpose_use'] ?? null,
|
||||
'required_date' => $item['required_date'] ?? null,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return redirect()->route('purchase.requests.index')->with('success', 'Purchase request submitted successfully.');
|
||||
}
|
||||
|
||||
public function show(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->load(['items', 'requestedBy', 'approvedBy']);
|
||||
|
||||
return view('purchase.requests.show', compact('purchaseRequest'));
|
||||
}
|
||||
|
||||
public function edit(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->load('items');
|
||||
|
||||
return view('purchase.requests.edit', compact('purchaseRequest'));
|
||||
}
|
||||
|
||||
public function update(Request $request, PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$request->validate([
|
||||
'date' => 'required|date',
|
||||
'project_name' => 'required|string|max:255',
|
||||
'department' => 'nullable|string|max:255',
|
||||
'requested_by_name' => 'required|string|max:255',
|
||||
'required_date_text' => 'nullable|string|max:100',
|
||||
'location' => 'nullable|string|max:255',
|
||||
'remarks' => 'nullable|string',
|
||||
'items' => 'required|array|min:1',
|
||||
'items.*.description' => 'required|string',
|
||||
'items.*.unit' => 'nullable|string|max:50',
|
||||
'items.*.quantity_required' => 'required|numeric|min:0.01',
|
||||
'items.*.purpose_use' => 'nullable|string|max:255',
|
||||
'items.*.required_date' => 'nullable|date',
|
||||
]);
|
||||
|
||||
DB::transaction(function () use ($request, $purchaseRequest) {
|
||||
$purchaseRequest->update([
|
||||
'date' => $request->date,
|
||||
'project_name' => $request->project_name,
|
||||
'department' => $request->department,
|
||||
'requested_by_name' => $request->requested_by_name,
|
||||
'required_date_text' => $request->required_date_text,
|
||||
'location' => $request->location,
|
||||
'remarks' => $request->remarks,
|
||||
]);
|
||||
|
||||
$purchaseRequest->items()->delete();
|
||||
|
||||
foreach ($request->items as $item) {
|
||||
if (empty(trim($item['description']))) {
|
||||
continue;
|
||||
}
|
||||
PurchaseRequestItem::create([
|
||||
'purchase_request_id' => $purchaseRequest->id,
|
||||
'description' => $item['description'],
|
||||
'unit' => $item['unit'] ?? null,
|
||||
'quantity_required' => $item['quantity_required'],
|
||||
'purpose_use' => $item['purpose_use'] ?? null,
|
||||
'required_date' => $item['required_date'] ?? null,
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
return redirect()->route('purchase.requests.show', $purchaseRequest)->with('success', 'Purchase request updated successfully.');
|
||||
}
|
||||
|
||||
public function destroy(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->delete();
|
||||
|
||||
return redirect()->route('purchase.requests.index')->with('success', 'Purchase request deleted.');
|
||||
}
|
||||
|
||||
public function approve(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->update([
|
||||
'status' => 'approved',
|
||||
'approved_by' => auth()->id(),
|
||||
'approved_at' => now(),
|
||||
]);
|
||||
|
||||
return redirect()->back()->with('success', 'Purchase request approved.');
|
||||
}
|
||||
|
||||
public function reject(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->update(['status' => 'rejected']);
|
||||
|
||||
return redirect()->back()->with('success', 'Purchase request rejected.');
|
||||
}
|
||||
|
||||
public function print(PurchaseRequest $purchaseRequest)
|
||||
{
|
||||
$purchaseRequest->load(['items', 'requestedBy', 'approvedBy']);
|
||||
|
||||
return view('purchase.requests.print', compact('purchaseRequest'));
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user