Files
kupshop/bundles/KupShop/BalikonosBundle/BalikobotAdapters/BalikobotZasilkovnaAdapter.php
2025-08-02 16:30:27 +02:00

67 lines
2.4 KiB
PHP

<?php
namespace KupShop\BalikonosBundle\BalikobotAdapters;
use Query\Operator;
class BalikobotZasilkovnaAdapter implements IBalikobotAdapter
{
use \DatabaseCommunication;
public function __construct()
{
}
public function transformOrderData(\Order $order, array $data, array &$custom_data): array
{
if (empty($data['service_type']) || $data['service_type'] == -1) {
$data['branch_id'] = $order->getData('delivery_data', false)['idZ'] ?? $this->getBranchId($order->getData('delivery_data', false)['labelRouting'] ?? false);
} else {
$data['branch_id'] = $data['service_type'];
$data['service_type'] = '';
// Pokud mám vybranou nějakou službu a přitom mi příjde ID výdejního místa, jedná se o specialitku kdy mám výdejní místa do zahraničí
// Musí se do branch_id dát nejprve ID služby a pak ID místa. Je to Hack Balíkobotu, tohle zmizí, když zmigrujeme na API v2
if ($branchId = ($order->getData('delivery_data', false)['idZ'] ?? false)) {
$data['branch_id'] .= '-'.$branchId;
}
}
if (!empty($data['currency'])) {
$data['price'] = \CNB::convertPrice(\Decimal::fromString($data['price']), $data['ins_currency'], $data['currency'])->asFloat();
$data['ins_currency'] = $data['currency'];
// It's not a field expected by Balikobot
unset($data['currency']);
}
// Zásilkovna jako asi jediná nepodporuje ins_currency, takže musíme posílat cod_currency i když není žádná dobírka
if (empty($data['cod_currency'])) {
$data['cod_currency'] = $data['ins_currency'];
}
if (($custom_data['packages'] ?? 1) > 1) {
$data['price'] = toDecimal($data['price'])->div(toDecimal($custom_data['packages']))->asFloat();
$data['_zeroPriceForSubPackages'] = false;
}
return $data;
}
private function getBranchId($labelRouting)
{
if ($labelRouting) {
$result = sqlQueryBuilder()->select('id')
->from('kupshop_shared.delivery_zasilkovna')
->where(Operator::equals(['labelRouting' => $labelRouting]))
->execute()->fetchColumn();
if ($result) {
return $result;
}
}
return '';
}
}