commit de compras
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
namespace App\Modules\Purchasing;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Tempo\Purchasing\Embedded\Services\ReceiptWorkflow;
|
||||
|
||||
/** Read projection of the native matching quantities; never a reservation or writer. */
|
||||
final class InvoiceMatchingProgress
|
||||
{
|
||||
public function quantities(int $ordered,int $accepted,int $returned,int $reversed,int $validated,int $pending):array
|
||||
{
|
||||
$net=$accepted-$returned-$reversed;$ceiling=min($ordered,$net);
|
||||
return ['ordered_milli'=>$ordered,'accepted_milli'=>$accepted,'returned_milli'=>$returned,'reversed_milli'=>$reversed,'accepted_net_milli'=>$net,'validated_milli'=>$validated,'pending_milli'=>$pending,'remaining_milli'=>max(0,$ceiling-$validated),'deficit_milli'=>max(0,$validated-$ceiling)];
|
||||
}
|
||||
public function forOrder(object $order,array $state):array
|
||||
{
|
||||
$ids=array_column($state['order']['items'],'id');if($ids===[])return [];
|
||||
$accepted=DB::table('goods_receipt_items')->where('tenant_id',$order->tenant_id)->whereIn('purchase_order_item_id',$ids)->groupBy('purchase_order_item_id')->selectRaw('purchase_order_item_id,SUM(accepted_milli) AS accepted')->get()->keyBy('purchase_order_item_id');
|
||||
$invoiced=DB::table('invoice_items as l')->join('invoices as i','i.id','=','l.invoice_id')->where(['l.tenant_id'=>$order->tenant_id,'i.tenant_id'=>$order->tenant_id,'i.purchase_order_id'=>$order->id])->whereIn('l.purchase_order_item_id',$ids)->groupBy('l.purchase_order_item_id')->selectRaw("l.purchase_order_item_id,SUM(CASE WHEN i.status='validated' THEN l.quantity_milli ELSE 0 END) AS validated,SUM(CASE WHEN i.status='pending' THEN l.quantity_milli ELSE 0 END) AS pending")->get()->keyBy('purchase_order_item_id');
|
||||
$effects=array_column($state['physical_corrections'],null,'line');$rows=[];
|
||||
foreach($state['order']['items']as$line){$id=$line['id'];
|
||||
$rows[]=['line_id'=>$id,'description'=>$line['description'],'unit'=>$line['unit']]+$this->quantities(ReceiptWorkflow::milli($line['quantity']),(int)($accepted[$id]->accepted??0),(int)($effects[$id]['returned']??0),(int)($effects[$id]['reversed']??0),(int)($invoiced[$id]->validated??0),(int)($invoiced[$id]->pending??0));
|
||||
}return $rows;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user