19 lines
2.4 KiB
PHP
19 lines
2.4 KiB
PHP
<?php
|
|
namespace Tests\Support;
|
|
use App\Modules\Industry\IndustrialCosts;
|
|
use App\Shared\Context\CompanyContext;
|
|
use Illuminate\Support\Str;
|
|
final class IndustrialCostFixture {
|
|
public static function create(?array $base=null,bool $criterion=true): array {
|
|
IndustrialCosts::guard();$f=$base??DocumentPreviewFixture::create();
|
|
foreach(['manager'=>['view','prepare'],'reader'=>['view','validate']] as $who=>$rights)foreach($rights as $r)IdentityFixture::grant($f[$who]->id,$f['tenant'],$f['company'],'industrial_costs.'.$r,$f['unit']);
|
|
$c=app(IndustrialCosts::class);$key=fn()=>(string)Str::uuid();$select=fn($who)=>app(CompanyContext::class)->selectFor($f[$who]->id,$f['tenant'],$f['company'],$f['unit']);$select('manager');
|
|
$lot=$c->open($f['manager']->id,['reference'=>'LOT-TEST-'.Str::uuid(),'product_reference'=>'PROD-TEST-'.Str::uuid(),'product_name'=>'Produto industrial sintético','centre'=>'Centro Fabrico A — ensaio','period_start'=>'2026-10-01','period_end'=>'2026-10-31','currency'=>'MZN'],$key())['id'];$refs=[];
|
|
$add=function($kind,$data)use(&$refs,$c,$f,$lot,$select,$key){$select('manager');$id=$c->input($lot,$f['manager']->id,['kind'=>$kind,'source_ref'=>'IND-TEST-'.strtoupper($kind).'-'.Str::uuid(),'version'=>1,'previous_id'=>null,'data'=>$data,'evidence'=>'Origem/pressuposto industrial exclusivamente sintético.'],$key())['id'];$select('reader');$c->decide($lot,$f['reader']->id,['type'=>'input','id'=>$id,'version'=>1,'decision'=>'approved','reason'=>'Validação de dados sintéticos de custo, não verificação técnica real.'],$key());$refs[$kind]=['id'=>$id,'version'=>1];return $id;};
|
|
foreach(['material'=>['20','KG'],'labour'=>['300','MIN'],'pool'=>['600','MZN'],'machine'=>['5','HM'],'production'=>['10','UN']] as $kind=>[$quantity,$unit])$add($kind,['quantity'=>$quantity,'unit'=>$unit,'event_date'=>'2026-10-27']+($kind==='production'?['completed'=>true]:[]));
|
|
foreach(['material'=>['50','KG'],'labour'=>['100','H']] as $kind=>[$amount,$unit])$add($kind.'_rate',['source_id'=>$refs[$kind]['id'],'source_version'=>1,'amount'=>$amount,'currency'=>'MZN','unit'=>$unit]);
|
|
$criterionData=['pool_id'=>$refs['pool']['id'],'pool_version'=>1,'machine_id'=>$refs['machine']['id'],'machine_version'=>1,'capacity'=>'10','driver_unit'=>'HM','hypothesis'=>'synthetic_only'];
|
|
if($criterion)$add('criterion',$criterionData);$select('manager');return $f+compact('lot','refs','criterionData');
|
|
}
|
|
}
|