Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
PickingOrderCalculateTotalHeightService
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 calculate
0.00% covered (danger)
0.00%
0 / 9
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\PickingOrder\Services;
4
5use App\Events\ServiceProcessed;
6use App\Models\PickingOrder\PickingOrder;
7use App\Models\StockIO\StockIOProduct;
8use App\Models\User;
9use Domain\StockIO\Enums\StockProductStatusEnum;
10
11readonly class PickingOrderCalculateTotalHeightService
12{
13    /**
14     * @param PickingOrder $pickingOrder
15     * @param User $user
16     * @return float
17     */
18    public function calculate(PickingOrder $pickingOrder, User $user): float
19    {
20        $totalWeight = $pickingOrder->load(['stockIOProducts' => function ($query) {
21                                                $query->where('stock_io_products.status', '<>', StockProductStatusEnum::CANCELED);
22                                            },
23            'stockIOProducts.product.measure'])
24            ->stockIOProducts->sum(function (StockIOProduct $stockIOProduct) {
25                return round($stockIOProduct->getAttribute('amount') * $stockIOProduct->product->measure->getAttribute('gross_weight'), 4);
26            });
27
28        ServiceProcessed::dispatch(self::class, $user);
29        return $totalWeight;
30    }
31}