This commit is contained in:
2026-10-27 13:57:09 +02:00
parent d10ba06edc
commit 9962084087
27 changed files with 823 additions and 3 deletions
+2 -2
View File
@@ -64,13 +64,13 @@ final class DirectCosts
$id=DB::table('dc_rates')->insertGetId($s+array_merge($d,['order_id'=>$order,'amount'=>(string)BigDecimal::of($d['amount'])->stripTrailingZeros(),'actor_id'=>$actor,'created_at'=>now()]));return ['id'=>$id,'version'=>$d['version'],'kind'=>'rate'];
});
}
private function value(BigRational $n): string {try{return (string)$n->toBigDecimal()->stripTrailingZeros();}catch(\Brick\Math\Exception\RoundingNecessaryException){return (string)$n->simplified();}}
private function value(BigRational $n): string {return \App\Shared\Costs\ExactCostMath::text($n);}
private function compose(int $order,array $lines): array {
abort_unless(count($lines)===2,422,'Este ensaio exige um consumo e um tempo efectivos.');$out=[];$seen=[];$kinds=[];$pending=[];$sum=BigRational::of(0);
foreach($lines as $line){
$d=$this->exact($line,['entry_id'=>'required|integer|min:1','entry_version'=>'required|integer|min:1','rate_id'=>'present|nullable|integer|min:1','rate_version'=>'present|nullable|integer|min:1']);
$e=$this->source($d['entry_id'],$d['entry_version'],$order);abort_if(isset($seen[$e->id]),422,'Origem duplicada.');$seen[$e->id]=true;$kinds[]=$e->kind;
$quantity=$e->kind==='time'?BigRational::of($e->minutes)->dividedBy(60):BigRational::of($e->quantity);
$quantity=$e->kind==='time'?\App\Shared\Costs\ExactCostMath::hours($e->minutes):BigRational::of($e->quantity);
$rate=null;$cost=null;
if($d['rate_id']!==null){
$r=$this->row('rate',$d['rate_id'],$order);