59 lines
1.7 KiB
PHP
59 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Contract;
|
|
use App\Models\Document;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Storage;
|
|
|
|
class DocumentController extends Controller
|
|
{
|
|
/**
|
|
* Store a new document for a contract.
|
|
*/
|
|
public function store(Request $request, Contract $contract)
|
|
{
|
|
// Simple validation
|
|
$request->validate([
|
|
'file' => 'required|file|mimes:pdf,docx,jpg,png|max:10240', // 10MB limit
|
|
'description' => 'nullable|string|max:255',
|
|
]);
|
|
|
|
if ($request->hasFile('file')) {
|
|
$path = $request->file('file')->store('contracts/' . $contract->id, 'public');
|
|
|
|
$contract->documents()->create([
|
|
'filename' => $request->file('file')->getClientOriginalName(),
|
|
'path' => $path,
|
|
'mime_type' => $request->file('file')->getMimeType(),
|
|
'size' => $request->file('file')->getSize(),
|
|
'description' => $request->input('description'),
|
|
'uploaded_by' => auth()->id(),
|
|
]);
|
|
|
|
return back()->with('success', 'Document uploaded successfully.');
|
|
}
|
|
|
|
return back()->with('error', 'No file uploaded.');
|
|
}
|
|
|
|
/**
|
|
* Delete a document.
|
|
*/
|
|
public function destroy(Document $document)
|
|
{
|
|
// Check permission (manager or admin or uploader?)
|
|
if (!auth()->user()->isManager() && auth()->id() !== $document->uploaded_by) {
|
|
abort(403);
|
|
}
|
|
|
|
// Delete from storage
|
|
Storage::disk('public')->delete($document->path);
|
|
|
|
$document->delete();
|
|
|
|
return back()->with('success', 'Document deleted.');
|
|
}
|
|
}
|