Preserva entrega A aceite de servicos em rascunho
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace App\Modules\Services\Http;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Modules\Services\ServiceWorkflow;
|
||||
use App\Modules\Services\ServiceAccess;
|
||||
use App\Modules\Services\ServicePermissions;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
final class ServiceController extends Controller
|
||||
{
|
||||
public function index(Request $request, string $area, ServiceWorkflow $workflow) { return response()->json(['records' => $workflow->list($area, $request->user()->id)]); }
|
||||
public function show(Request $request, string $area, int $id, ServiceWorkflow $workflow) { return response()->json($workflow->show($area, $id, $request->user()->id)); }
|
||||
public function create(Request $request, string $area, ServiceWorkflow $workflow) { return $this->save($request, $area, null, $workflow); }
|
||||
public function update(Request $request, string $area, int $id, ServiceWorkflow $workflow) { return $this->save($request, $area, $id, $workflow); }
|
||||
|
||||
private function save(Request $request, string $area, ?int $id, ServiceWorkflow $workflow)
|
||||
{
|
||||
abort_unless(in_array($area, ServicePermissions::AREAS, true), 404);
|
||||
$rules = ['name' => ServicePermissions::unitScoped($area) ? 'sometimes|required|string|max:255' : 'required|string|max:255',
|
||||
'description' => 'nullable|string|max:2000', 'version' => $id ? 'required|integer|min:1' : 'prohibited'];
|
||||
if ($area === 'clients') { unset($rules['description']); }
|
||||
if (ServicePermissions::unitScoped($area)) {
|
||||
$rules += ['currency' => 'nullable|string|regex:/^[A-Z]{3}$/', 'lines' => $area === 'service_drafts' ? 'required|array|min:1|max:100' : 'sometimes|array|min:1|max:100',
|
||||
'lines.*' => 'array:service_id,service_name,description,quantity,unit_price', 'lines.*.service_id' => 'required|integer|min:1',
|
||||
'lines.*.service_name' => 'sometimes|string|max:255', 'lines.*.description' => 'nullable|string|max:2000', 'lines.*.quantity' => 'nullable|string|max:30', 'lines.*.unit_price' => 'nullable|string|max:30'];
|
||||
if ($area === 'service_drafts') { $rules['client_id'] = 'required|integer|min:1'; }
|
||||
else { $rules['source_id'] = $id ? 'prohibited' : 'required|integer|min:1'; $rules['reload_source'] = 'sometimes|boolean'; }
|
||||
}
|
||||
$unknown = array_diff(array_keys($request->all()), array_keys($rules));
|
||||
abort_if($unknown !== [], 422, 'Campo não suportado ou identificador protegido.');
|
||||
$data = $request->validate($rules);
|
||||
$key = (string) $request->header('Idempotency-Key', '');
|
||||
return response()->json($workflow->save($area, $id, $request->user()->id, $data, $key), $id ? 200 : 201);
|
||||
}
|
||||
|
||||
public function accesses(Request $request, string $area, ServiceAccess $access) { return response()->json($access->listing($area, $request->user()->id)); }
|
||||
public function changeAccess(Request $request, string $area, ServiceAccess $access)
|
||||
{
|
||||
$data = $request->validate(['email' => 'required|email|max:255', 'action' => 'required|string', 'grant' => 'required|boolean', 'reason' => 'required|string|max:500']);
|
||||
abort_if(array_diff(array_keys($request->all()), ['email','action','grant','reason']) !== [], 422);
|
||||
$access->change($area, $request->user()->id, $data);
|
||||
return response()->json(['ok' => true]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user