commit de compras
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
namespace Tempo\Integration\Purchasing;
|
||||
|
||||
use App\Enums\PurchasingRole;
|
||||
use App\Models\User;
|
||||
use App\Services\{ConflictGuard,CurrentActor,OrganizationAccess};
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Tempo\Finance\GeneralLedger\{LedgerSchema,StockComposition};
|
||||
|
||||
/** Explicit QA adapter for the native physical book. Not installed by the SGF provider. */
|
||||
final class StockValuationAdapter
|
||||
{
|
||||
public static function for(User $actor):StockComposition
|
||||
{
|
||||
$scope=['tenant_id'=>(int)$actor->tenant_id,'company_id'=>0,'unit_id'=>0];
|
||||
$person='qa-stock-person-'.$actor->id;
|
||||
$read=function(string $action='view',bool $lock=false)use($actor,$scope,$person):void{
|
||||
abort_unless(app()->environment(['testing','payable-testing'])&&config('stock-ledger.synthetic_enabled')===true,403);
|
||||
LedgerSchema::assertSynthetic(DB::connection());
|
||||
abort_unless(auth()->id()===$actor->id,403);
|
||||
if($lock){app(ConflictGuard::class)->lockCompany($actor);app(CurrentActor::class)->lock($actor,[PurchasingRole::Finance,PurchasingRole::Admin]);}
|
||||
$fresh=User::query()->findOrFail($actor->id);
|
||||
abort_unless((int)$fresh->tenant_id===$scope['tenant_id']&&$fresh->hasFunctions([PurchasingRole::Finance,PurchasingRole::Admin])&&!app(OrganizationAccess::class)->maintenanceOnly($fresh),403);
|
||||
abort_unless(DB::table('pa_access')->where($scope)->where(['user_id'=>$fresh->id,'person'=>$person,'action'=>'general_ledger.'.$action])->exists(),403);
|
||||
};
|
||||
$read();return new StockComposition(DB::connection(),$scope,$actor->id,$person,fn($action)=>$read($action,true),fn()=>$read());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user