67 lines
2.4 KiB
PHP
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 '';
|
|
}
|
|
}
|