Files
SGF/app/Modules/Accounting/GeneralLedgerController.php
T
2026-11-04 09:37:20 +02:00

66 lines
5.1 KiB
PHP

<?php
namespace App\Modules\Accounting;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
final class GeneralLedgerController extends Controller
{
public function financialReceipt(Request $r,string $domain,string $key,GeneralLedger $ledger)
{
abort_if($r->query()!==[],422);try{$data=$ledger->financialReceipt($r->user(),$domain,$key);}catch(\InvalidArgumentException $e){abort(422,$e->getMessage());}catch(\DomainException $e){abort(403,$e->getMessage());}abort_if($data===null,404,'Comprovativo não encontrado neste domínio, contexto e captura.');return response()->json($data)->header('Cache-Control','no-store');
}
public function receipt(Request $r,string $key,GeneralLedger $ledger)
{
abort_if($r->query()!==[],422);try{$data=$ledger->receipt($r->user(),$key);}catch(\InvalidArgumentException $e){abort(422,$e->getMessage());}catch(\DomainException $e){abort(403,$e->getMessage());}abort_if($data===null,404,'Comprovativo não encontrado neste contexto e nesta captura.');return response()->json($data)->header('Cache-Control','no-store');
}
public function report(Request $r,string $kind,GeneralLedger $ledger)
{
$d=$r->validate(['from_on'=>'required|date_format:Y-m-d','to_on'=>'required|date_format:Y-m-d|after_or_equal:from_on','account_id'=>'sometimes|required|integer|min:1','page'=>'sometimes|integer|min:1|max:100000','per_page'=>'sometimes|integer|in:25,100']);
abort_if(array_diff(array_keys($r->query()),array_keys($d))!==[],422);
try{$data=$ledger->report($r->user(),$kind,$d);}
catch(\InvalidArgumentException $e){abort(422,$e->getMessage());}
catch(\DomainException $e){abort(403,$e->getMessage());}
if($r->is('api/*'))return response()->json($data)->header('Cache-Control','no-store');
return response(\Tempo\Finance\GeneralLedger\ReportsWorkspace::render($data,['host'=>'ERP SGF','return_url'=>'/general-ledger','industrial_links'=>config('industrial_ledger.synthetic_enabled')===true,'cost_links'=>config('cost_ledger.synthetic_enabled')===true,'sales_links'=>config('sales_ledger.synthetic_enabled')===true]))->header('Cache-Control','no-store');
}
private function options(Request $r):array
{
$d=$r->validate(['industrial_lot_id'=>'sometimes|required|integer|min:1','cost_order_id'=>'sometimes|required|integer|min:1','sales_invoice_id'=>'sometimes|required|integer|min:1','obligation_id'=>'sometimes|required|integer|min:1','page'=>'sometimes|integer|min:1|max:100000','period_key'=>'sometimes|required|string|max:80','account_id'=>'sometimes|nullable|integer|min:1']);
abort_if(array_diff(array_keys($r->query()),array_keys($d))!==[],422);if(array_key_exists('account_id',$d)&&$d['account_id']===null)unset($d['account_id']);return $d;
}
public function index(Request $r,GeneralLedger $ledger)
{
try{return response()->json($ledger->listing($r->user(),$this->options($r)))->header('Cache-Control','no-store');}
catch(\DomainException $e){abort(403,$e->getMessage());}
}
public function page(Request $r,GeneralLedger $ledger)
{
try{return response()->view('accounting.general-ledger',['data'=>$ledger->listing($r->user(),$this->options($r))])->header('Cache-Control','no-store');}
catch(\DomainException $e){abort(403,$e->getMessage());}
}
public function command(Request $r,string $action,GeneralLedger $ledger)
{
if(!in_array($action,['prepare','validate','post'],true))abort_unless(config('general_ledger.cycle_enabled')===true,403);
try{return response()->json($ledger->engine($r->user())->command($action,$r->all(),(string)$r->header('Idempotency-Key')))->header('Cache-Control','no-store');}
catch(\InvalidArgumentException $e){abort(422,$e->getMessage());}
catch(\DomainException $e){abort(409,$e->getMessage());}
}
public function cycle(Request $r,GeneralLedger $ledger)
{
$d=$r->validate(['page'=>'sometimes|integer|min:1|max:100000']);abort_if(array_diff(array_keys($r->query()),['page'])!==[],422);
$page=(int)($d['page']??1);$data=$ledger->cycle($r->user(),$page);
return response(\Tempo\Finance\GeneralLedger\CycleWorkspace::render($data,['host'=>'ERP SGF','csrf'=>csrf_token(),'context'=>$r->session()->get('company_context.token'),'scope'=>$r->session()->get('company_context'),'financial_url'=>'/supplier-payments','return_url'=>'/general-ledger','page_url'=>'/general-ledger/cycle']))->header('Cache-Control','no-store');
}
public function cycleData(Request $r,GeneralLedger $ledger)
{
$d=$r->validate(['page'=>'sometimes|integer|min:1|max:100000']);abort_if(array_diff(array_keys($r->query()),['page'])!==[],422);
return response()->json($ledger->cycle($r->user(),(int)($d['page']??1)))->header('Cache-Control','no-store');
}
public function flow(Request $r,GeneralLedger $ledger)
{
$d=$r->validate(['source'=>'required|integer|min:1']);
abort_if(array_diff(array_keys($r->query()),['source'])!==[],422);
return response()->view('accounting.payable-flow',['flow'=>$ledger->flow($r->user(),(int)$d['source'])])->header('Cache-Control','no-store');
}
}