Files
kupshop/class/deliveries/class.Lockers.php
2025-08-02 16:30:27 +02:00

116 lines
3.1 KiB
PHP

<?php
class Lockers extends Delivery
{
public static $type = Delivery::TYPE_POINT;
public static $className = 'Lockers';
protected $templateDescription = 'deliveries/delivery.Lockers.widget.tpl';
protected $AdminTemplateSettings = 'deliveries/block.delivery.Lockers.tpl';
public function getName()
{
$info = self::getInfo();
return parent::getName().' - '.$info['box_name'];
}
public function storeDeliveryInfo($data)
{
$data = array_filter($data['lockers'] ?? []);
$data += $this->getInfo($data['lockers_id'], $data['lockers_carrier']);
return empty($data) ? [] : ($this->data = $data);
}
public function getInfo($id = null, $carrier = null)
{
if (is_null($id)) {
$id = getVal('lockers_id', $this->data);
}
if (is_null($carrier)) {
$carrier = getVal('lockers_carrier', $this->data);
}
if (!$id || !$carrier) {
return ['box_name' => translate_shop('branch_unknown', 'delivery')];
}
$data = $this->data;
$data['lockers_id'] = $id;
$data['carrier'] = $carrier;
$box_name = $data['lockers_box_name'] ?? null;
if (!$box_name) {
$data['box_name'] = translate_shop('branch_unknown', 'delivery');
$data['address'] = '';
} else {
$box_name = explode(',', $box_name);
$data['box_name'] = array_shift($box_name);
$data['address'] = trim(implode(',', $box_name));
}
return $data;
}
/**
* @param $data admin order data
* @param Order $order
*
* @return bool|string
*/
public function applyToOrder(&$data, $order)
{
$info = $this->getInfo();
if (empty($info['lockers_id'])) {
return translate_shop('branch_not_selected', 'delivery');
}
return true;
}
/**
* @param $cart CartBase
*/
public function applyToCart(CartBase $cart)
{
$info = $this->getInfo();
if (empty($info['lockers_id'])) {
return;
}
if (isset($cart->invoice['name'])) {
$cart->delivery['name'] = $cart->invoice['name'];
$cart->delivery['surname'] = $cart->invoice['surname'];
$cart->delivery['firm'] = $info['box_name'];
$cart->delivery['custom_address'] = $info['address'];
}
}
public function printDeliveryInfo()
{
$info = $this->getInfo();
if (empty($info['lockers_id'])) {
return $info['box_name'];
}
return "<strong>{$info['box_name']}</strong>, {$info['address']}";
}
public function isInPerson()
{
return true;
}
public function checkSelected(Cart $cart, ?Payment $payment = null)
{
if (empty($this->data['lockers_id']) && $cart->hasData('delivery')) {
throw new \KupShop\OrderingBundle\Exception\DeliveryException(translate_shop('branch_not_selected', 'delivery'));
}
return parent::checkSelected($cart, $payment);
}
}