items as $key => $item) { $sale->items[$key] = SaleItemWrapper::wrap($item); } $sale = SaleWrapper::wrap($sale); } return $resultAsArray ? $sales : reset($sales); } public static function prepareSale(array $data): array { $currencyContext = Contexts::get(CurrencyContext::class); $data['language_id'] = $data['id_language'] ?? null; $data['date_created'] = new \DateTimeImmutable($data['date_created']); $data['total_price'] = new TotalPrice( toDecimal($data['total_price']), toDecimal($data['total_price_without_vat']), $currencyContext->getOrDefault($data['currency'] ?? null) ); $data['order_id'] = $data['id_order']; $data['user_id'] = $data['id_user']; $data['seller_id'] = $data['id_seller']; $data['delivery_type_id'] = $data['id_delivery_type']; $data['data'] = json_decode($data['data'] ?: '', true) ?: []; $data['items'] = []; return $data; } public static function prepareSaleItem(Sale $sale, array $data): array { $currencyContext = Contexts::get(CurrencyContext::class); if (!empty($data['id_product'])) { $productListKey = $data['id_product']; if ($data['id_variation']) { $productListKey .= '/'.$data['id_variation']; } $data['product'] = $sale->productCollection[$productListKey] ?? null; } $data['product_id'] = $data['id_product']; $data['variation_id'] = $data['id_variation']; $data['piece_price'] = new Price( toDecimal($data['piece_price']), $currencyContext->getOrDefault($sale->currency), $data['tax'] ); $data['total_price'] = new Price( toDecimal($data['total_price']), $currencyContext->getOrDefault($sale->currency), $data['tax'] ); $data['data'] = json_decode($data['data'] ?: '', true) ?: []; return $data; } public function getSale(int $id): ?Sale { $sales = (clone $this->saleList) ->fetchItems() ->andSpec(Operator::equals(['s.id' => $id])) ->getSales(); if (!($sale = $sales->current())) { return null; } return $sale; } public function getSaleSecurityCode(Sale $sale): string { return md5(implode('*', [$sale->id, $sale->code, $sale->dateCreated->format('Y-m-D H:i:s')])); } }