first commit
This commit is contained in:
115
bundles/KupShop/SalesBundle/Util/SalesUtil.php
Normal file
115
bundles/KupShop/SalesBundle/Util/SalesUtil.php
Normal file
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace KupShop\SalesBundle\Util;
|
||||
|
||||
use KupShop\KupShopBundle\Context\CurrencyContext;
|
||||
use KupShop\KupShopBundle\Util\Contexts;
|
||||
use KupShop\KupShopBundle\Util\Entity\EntityUtil;
|
||||
use KupShop\KupShopBundle\Util\Price\Price;
|
||||
use KupShop\KupShopBundle\Util\Price\TotalPrice;
|
||||
use KupShop\SalesBundle\Entity\Sale;
|
||||
use KupShop\SalesBundle\Entity\Wrapper\SaleItemWrapper;
|
||||
use KupShop\SalesBundle\Entity\Wrapper\SaleWrapper;
|
||||
use KupShop\SalesBundle\SaleList\SaleList;
|
||||
use Query\Operator;
|
||||
|
||||
class SalesUtil
|
||||
{
|
||||
public function __construct(
|
||||
protected readonly SaleList $saleList,
|
||||
protected readonly EntityUtil $entityUtil,
|
||||
) {
|
||||
}
|
||||
|
||||
public static function wrapSales(Sale|array $sales): SaleWrapper|array
|
||||
{
|
||||
$resultAsArray = true;
|
||||
if (!is_array($sales)) {
|
||||
$sales = [$sales];
|
||||
$resultAsArray = false;
|
||||
}
|
||||
|
||||
foreach ($sales as &$sale) {
|
||||
foreach ($sale->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')]));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user