Files
SGF/scripts/receipt-workspace-source.php
T
2026-11-04 09:37:20 +02:00

9 lines
3.1 KiB
PHP

<?php
// Minimum original workflow setup for the changed receipt boundary; not a rerun of earlier suites.
$requestCommand=function($role,$id,$action,$data)use($call){$base='/api/purchasing-requests';$r=$call($role,$id?$base.'/'.$id:$base);$p=$call($role,$base.'/'.$id.'/preview',['operation_key'=>(string)Str::uuid(),'revision'=>$id?$r['data']['revision']:$r['data']['new_revision'],'action'=>$action,'data'=>$data]);if($p['status']!==200)throw new RuntimeException('Source request preview');$r=$call($role,$base.'/'.$id.'/confirm',['preview'=>$p['data']['preview']]);if($r['status']!==201)throw new RuntimeException('Source request confirmation');return $r['data'];};
$r=$requestCommand('requester',0,'save',['cost_center_id'=>$n['centre'],'priority'=>'normal','needed_by'=>date('Y-m-d',strtotime('+30 days')),'justification'=>'Origem QA da conferencia do catalogo fisico.','items'=>[['description'=>'Material recepcao QA','category'=>'Material','purchase_type'=>'consumable','quantity'=>'1.000','unit'=>'UN','unit_price'=>'100.00','tax_rate'=>'0']]]);$request=$r['request_id'];$requestCommand('requester',$request,'submit',[]);$requestCommand('approver',$request,'decide',['decision'=>'approved','comment'=>'Necessidade sintetica conferida distintamente.']);
$source='/api/purchasing-sourcing/requests/'.$request;$line=(int)$db->table('requisition_items')->where('requisition_id',$request)->value('id');$sourceCommand=function($role,$action,$data)use($call,$source){$r=$call($role,$source);$p=$call($role,$source.'/preview',['operation_key'=>(string)Str::uuid(),'revision'=>$r['data']['revision'],'action'=>$action,'data'=>$data]);if($p['status']!==200)throw new RuntimeException('Source sourcing preview');$r=$call($role,$source.'/confirm',['preview'=>$p['data']['preview']]);if($r['status']!==201)throw new RuntimeException('Source sourcing confirmation');return $r['data'];};$quotes=[];
foreach($n['supplier_ids']as$i=>$supplier)$quotes[]=$sourceCommand('actor','quote',['supplier_id'=>$supplier,'reference'=>'QA-RECEIPT-CATALOG-'.($i+1),'delivery_days'=>5,'valid_until'=>date('Y-m-d',strtotime('+30 days')),'payment_terms'=>'Condicoes QA','no_conflict'=>true,'items'=>[['requisition_item_id'=>$line,'unit_price'=>(string)(100+$i*20),'discount_type'=>'none','discount_value'=>'0']]])['quotation_id'];
foreach($quotes as$q)foreach(['actor','issuer']as$role)$sourceCommand($role,'evaluate',['quotation_id'=>$q,'quality'=>'8','history'=>'5','payment'=>'8','comment'=>'Avaliacao individual da origem sintetica.','no_conflict'=>true]);
$award=$sourceCommand('actor','select',['quotation_id'=>$quotes[0],'justification'=>'Escolha sintetica pela comparacao documentada.','delivery_date'=>date('Y-m-d',strtotime('+7 days')),'delivery_location'=>'Armazem QA'])['award_id'];$sourceCommand('approver','decide',['award_id'=>$award,'decision'=>'approved','comment'=>'Conferencia distinta da adjudicacao QA.']);$url='/api/purchasing-orders/awards/'.$award;$r=$call('actor',$url);$p=$call('actor',$url.'/preview',['revision'=>$r['data']['revision']]);$r=$call('actor',$url.'/issue',['preview'=>$p['data']['preview']]);if($r['status']!==201)throw new RuntimeException('Source order missing');$order=$r['data']['order'];