470 lines
14 KiB
PHP
470 lines
14 KiB
PHP
<?php
|
|
|
|
/**
|
|
* SOTESHOP/stDelivery
|
|
*
|
|
* Ten plik należy do aplikacji stDelivery opartej na licencji (Professional License SOTE).
|
|
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
|
|
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
|
|
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
|
|
*
|
|
* @package stDeliveryPlugin
|
|
* @subpackage actions
|
|
* @copyright SOTE (www.sote.pl)
|
|
* @license http://www.sote.pl/license/sote (Professional License SOTE)
|
|
* @version $Id: actions.class.php 14270 2011-07-22 12:09:39Z bartek $
|
|
* @author Marcin Olejnczak <marcin.olejniczak@sote.pl>
|
|
*/
|
|
|
|
/**
|
|
* Delivery actions.
|
|
*
|
|
* @author Marcin Olejnczak <marcin.olejniczak@sote.pl>
|
|
*
|
|
* @package stDeliveryPlugin
|
|
* @subpackage actions
|
|
* @property Delivery $delivery
|
|
*/
|
|
class stDeliveryBackendActions extends autoStDeliveryBackendActions
|
|
{
|
|
public function executeIndex()
|
|
{
|
|
return $this->redirect('stDeliveryBackend/list');
|
|
}
|
|
|
|
protected function updateConfigFromRequest()
|
|
{
|
|
parent::updateConfigFromRequest();
|
|
|
|
$config = $this->getRequestParameter('config');
|
|
|
|
$ids = stJQueryToolsHelper::parseTokensFromRequest($config['alternate_deliveries'], true);
|
|
|
|
$this->config->set('alternate_deliveries', $ids, false);
|
|
}
|
|
|
|
public function validateConfig()
|
|
{
|
|
$request = $this->getRequest();
|
|
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST)
|
|
{
|
|
$timeValidator = new stTimeValidator();
|
|
$timeValidator->initialize($this->getContext());
|
|
|
|
$error = null;
|
|
$value = $request->getParameter('config[express_delivery_order_time_limit]');
|
|
|
|
if (!$timeValidator->execute($value, $error))
|
|
{
|
|
$request->setError('config{express_delivery_order_time_limit}', $error);
|
|
}
|
|
}
|
|
|
|
return !$request->hasErrors();
|
|
}
|
|
|
|
public function validateEdit()
|
|
{
|
|
$request = $this->getRequest();
|
|
$i18n = $this->getContext()->getI18N();
|
|
|
|
if ($this->getRequest()->getMethod() == sfRequest::POST)
|
|
{
|
|
$nv = new sfNumberValidator();
|
|
|
|
$nv->initialize($this->getContext(), array(
|
|
'min_error' => 'Wartość pola "%s" nie może być ujemna',
|
|
'nan_error' => 'Wartość pola "%s" posiada nieprawidłowy format (prawidłowy format: 10, 10.00)',
|
|
'min' => 0,
|
|
'type' => 'any'
|
|
));
|
|
|
|
$sections = $this->getRequestParameter('delivery[sections]', array());
|
|
|
|
$deliveryType = DeliveryTypePeer::retrieveByPK($request->getParameter('delivery[type_id]'));
|
|
|
|
if (null !== $deliveryType)
|
|
{
|
|
$this->validateDeliveryTypeConfiguration($deliveryType);
|
|
|
|
if ($deliveryType->isType('ppk') || $deliveryType->isType('ppo'))
|
|
{
|
|
$params = $request->getParameter('delivery');
|
|
|
|
if (!isset($params['params']['usluga']) || $params['params']['usluga'] === "")
|
|
{
|
|
$request->setError('delivery{pp_usluga}', 'Musisz wybrać usługę dla Poczty Polskiej');
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($request->getParameter('delivery[section_cost_type]'))
|
|
{
|
|
if (empty($sections))
|
|
{
|
|
$request->setError('delivery{sections}', 'Musisz zdefiniować przynajmniej jeden koszt dodatkowy');
|
|
}
|
|
else
|
|
{
|
|
foreach ($sections as $k1 => $v1)
|
|
{
|
|
if (!$nv->execute($v1['from'], $error))
|
|
{
|
|
$request->setError('delivery{sections}{' . $k1 . '}{from}', sprintf($error, 'Od'));
|
|
|
|
$request->setError('delivery{sections}', 'Popraw błędy');
|
|
}
|
|
|
|
if (!$nv->execute($v1['cost_netto'], $error))
|
|
{
|
|
$request->setError('delivery{sections}{' . $k1 . '}{cost_netto}', sprintf($error, 'Koszt'));
|
|
|
|
$request->setError('delivery{sections}', 'Popraw błędy');
|
|
}
|
|
|
|
if (!$nv->execute($v1['cost_brutto'], $error))
|
|
{
|
|
$request->setError('delivery{sections}{' . $k1 . '}{cost_brutto}', sprintf($error, 'Koszt'));
|
|
|
|
$request->setError('delivery{sections}', 'Popraw błędy');
|
|
}
|
|
|
|
|
|
foreach ($sections as $k2 => $v2)
|
|
{
|
|
if ($request->hasError('delivery{sections}{' . $k1 . '}{from}'))
|
|
continue;
|
|
|
|
if ($k1 != $k2 && floatval($v1['from']) == floatval($v2['from']))
|
|
{
|
|
$request->setError('delivery{sections}{' . $k1 . '}{from}', 'Wartości pola "Od" nie mogą być takie same');
|
|
|
|
$request->setError('delivery{sections}', 'Popraw błędy');
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$payments = $this->getRequestParameter('delivery[payments]', array());
|
|
|
|
$one_payment_active = false;
|
|
|
|
foreach ($payments as $payment)
|
|
{
|
|
if (isset($payment['is_active']))
|
|
{
|
|
$one_payment_active = true;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!$one_payment_active)
|
|
{
|
|
$request->setError('delivery{payments}', 'Musisz aktywować przynajmniej jedną płatność');
|
|
}
|
|
else
|
|
{
|
|
foreach ($payments as $k => $payment)
|
|
{
|
|
if (!isset($payment['is_active']))
|
|
continue;
|
|
|
|
if (!$nv->execute($payment['free_from'], $error))
|
|
{
|
|
$request->setError('delivery{payments}{' . $k . '}{free_from}', sprintf($error, 'Darmowa od'));
|
|
|
|
$request->setError('delivery{payments}', 'Popraw błędy');
|
|
}
|
|
|
|
if (!$nv->execute($payment['cost_netto'], $error))
|
|
{
|
|
$request->setError('delivery{payments}{' . $k . '}{cost_netto}', sprintf($error, 'Koszt'));
|
|
|
|
$request->setError('delivery{payments}', 'Popraw błędy');
|
|
}
|
|
|
|
if (!$nv->execute($payment['cost_brutto'], $error))
|
|
{
|
|
$request->setError('delivery{payments}{' . $k . '}{cost_brutto}', sprintf($error, 'Koszt'));
|
|
|
|
$request->setError('delivery{payments}', 'Popraw błędy');
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($request->hasParameter('delivery[express_delivery_order_time_limit]'))
|
|
{
|
|
$timeValidator = new stTimeValidator();
|
|
$timeValidator->initialize($this->getContext());
|
|
|
|
$error = null;
|
|
$value = $request->getParameter('delivery[express_delivery_order_time_limit]');
|
|
|
|
if (!$timeValidator->execute($value, $error))
|
|
{
|
|
$request->setError('delivery{express_delivery_order_time_limit}', $error);
|
|
}
|
|
}
|
|
|
|
$data = $this->getRequestParameter('delivery');
|
|
|
|
if (isset($data['is_weekend_delivery']))
|
|
{
|
|
$timeValidator = new stTimeValidator();
|
|
$timeValidator->initialize($this->getContext());
|
|
|
|
foreach (['weekend_delivery_availability_from', 'weekend_delivery_availability_to'] as $field)
|
|
{
|
|
$error = null;
|
|
|
|
if (!empty($data[$field]['day']) && !$timeValidator->execute($data[$field]['time'], $error))
|
|
{
|
|
$request->setError("delivery{{$field}}", $error);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return !$request->hasErrors();
|
|
}
|
|
|
|
protected function updateDeliveryFromRequest()
|
|
{
|
|
parent::updateDeliveryFromRequest();
|
|
|
|
$delivery = $this->getRequestParameter('delivery');
|
|
|
|
$this->delivery->setCostNetto($delivery['cost_netto']);
|
|
|
|
$this->delivery->setCostBrutto($delivery['cost_brutto']);
|
|
|
|
$this->delivery->setSectionCostType(!empty($delivery['section_cost_type']) ? $delivery['section_cost_type'] : null);
|
|
|
|
$this->delivery->setIsDefault(isset($delivery['is_default']) ? $delivery['is_default'] : null);
|
|
|
|
if ($this->delivery->getIsWeekendDelivery())
|
|
{
|
|
$this->delivery->setWeekendDeliveryCostNetto($delivery['weekend_delivery_cost_netto']);
|
|
$this->delivery->setWeekendDeliveryCostBrutto($delivery['weekend_delivery_cost_brutto']);
|
|
}
|
|
else
|
|
{
|
|
$this->delivery->setWeekendDeliveryCostNetto(null);
|
|
$this->delivery->setWeekendDeliveryCostBrutto(null);
|
|
}
|
|
|
|
if ($this->delivery->getIsExpressDelivery())
|
|
{
|
|
$this->delivery->setExpressDeliveryCostNetto($delivery['express_delivery_cost_netto']);
|
|
$this->delivery->setExpressDeliveryCostBrutto($delivery['express_delivery_cost_brutto']);
|
|
}
|
|
else
|
|
{
|
|
$this->delivery->setExpressDeliveryCostNetto(null);
|
|
$this->delivery->setExpressDeliveryCostBrutto(null);
|
|
}
|
|
|
|
if (isset($delivery['min_order_quantity']))
|
|
{
|
|
$this->delivery->setMinOrderQuantity($delivery['min_order_quantity']);
|
|
}
|
|
|
|
if (isset($delivery['min_order_weight']))
|
|
{
|
|
$this->delivery->setMinOrderWeight($delivery['min_order_weight']);
|
|
}
|
|
|
|
if (isset($delivery['min_order_amount']))
|
|
{
|
|
$this->delivery->setMinOrderAmount($delivery['min_order_amount']);
|
|
}
|
|
|
|
if (isset($delivery['max_order_quantity']))
|
|
{
|
|
$this->delivery->setMaxOrderQuantity($delivery['max_order_quantity']);
|
|
}
|
|
|
|
if (isset($delivery['max_order_weight']))
|
|
{
|
|
$this->delivery->setMaxOrderWeight($delivery['max_order_weight']);
|
|
}
|
|
|
|
if (isset($delivery['max_order_amount']))
|
|
{
|
|
$this->delivery->setMaxOrderAmount($delivery['max_order_amount']);
|
|
}
|
|
|
|
if (isset($delivery['params']))
|
|
{
|
|
$this->delivery->setParams($delivery['params']);
|
|
}
|
|
else
|
|
{
|
|
$this->delivery->setParams(null);
|
|
}
|
|
|
|
$this->delivery->setCountriesAreaId(isset($delivery['countries_area_id']) ? $delivery['countries_area_id'] : null);
|
|
|
|
if ($this->delivery->isType('inpostp'))
|
|
{
|
|
$this->delivery->setPaczkomatyType('ALL');
|
|
$this->delivery->setPaczkomatySize($delivery['paczkomaty_size']);
|
|
$dimensions = json_decode($delivery['paczkomaty_dimension']);
|
|
$this->delivery->setWidth($dimensions[1]);
|
|
$this->delivery->setHeight($dimensions[0]);
|
|
$this->delivery->setDepth($dimensions[2]);
|
|
}
|
|
else
|
|
{
|
|
$this->delivery->setPaczkomatyType('NONE');
|
|
$this->delivery->setPaczkomatySize(null);
|
|
}
|
|
|
|
if (!isset($delivery['express_delivery_order_time_limit']))
|
|
{
|
|
$this->delivery->setExpressDeliveryOrderTimeLimit(null);
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param Delivery $delivery
|
|
*/
|
|
protected function saveDelivery($delivery)
|
|
{
|
|
parent::saveDelivery($delivery);
|
|
|
|
$this->savePayment($delivery);
|
|
$this->saveSections($delivery);
|
|
}
|
|
|
|
protected function savePayment($delivery)
|
|
{
|
|
$delivery_payments = $this->getRequestParameter('delivery[payments]', array());
|
|
|
|
$is_default_payment = $this->getRequestParameter('delivery[is_default_payment]');
|
|
|
|
$c = new Criteria();
|
|
|
|
$c->add(DeliveryHasPaymentTypePeer::DELIVERY_ID, $delivery->getId());
|
|
|
|
DeliveryHasPaymentTypePeer::doDelete($c);
|
|
|
|
foreach ($delivery_payments as $payment_id => $delivery_payment)
|
|
{
|
|
$dhp = new DeliveryHasPaymentType();
|
|
|
|
$dhp->setDeliveryId($delivery->getId());
|
|
|
|
$dhp->setPaymentTypeId($payment_id);
|
|
|
|
$dhp->setCostNetto($delivery_payment['cost_type'] == '%' ? $delivery_payment['cost_brutto'] : $delivery_payment['cost_netto']);
|
|
|
|
$dhp->setCostBrutto($delivery_payment['cost_brutto']);
|
|
|
|
$dhp->setFreeFrom($delivery_payment['free_from']);
|
|
|
|
$dhp->setCostType($delivery_payment['cost_type']);
|
|
|
|
$dhp->setIsDefault($is_default_payment == $payment_id);
|
|
|
|
$dhp->setIsActive(isset($delivery_payment['is_active']));
|
|
|
|
$dhp->setCourierCost($delivery_payment['courier_cost']);
|
|
|
|
$dhp->save();
|
|
}
|
|
}
|
|
|
|
protected function saveSections($delivery)
|
|
{
|
|
$delivery_sections = $this->getRequestParameter('delivery[sections]', array());
|
|
|
|
$c = new Criteria();
|
|
|
|
$c->add(DeliverySectionsPeer::DELIVERY_ID, $delivery->getId());
|
|
|
|
DeliverySectionsPeer::doDelete($c);
|
|
|
|
if ($this->getRequestParameter('delivery[section_cost_type]'))
|
|
{
|
|
foreach ($delivery_sections as $delivery_section)
|
|
{
|
|
$ds = new DeliverySections();
|
|
|
|
$ds->setFrom($delivery_section['from']);
|
|
|
|
$ds->setCostNetto($delivery_section['cost_netto']);
|
|
|
|
$ds->setCostBrutto($delivery_section['cost_brutto']);
|
|
|
|
$ds->setDeliveryId($delivery->getId());
|
|
|
|
$ds->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
protected function getLabels()
|
|
{
|
|
$labels = parent::getLabels();
|
|
|
|
$labels['delivery{sections}'] = $labels['delivery{edit_additional_cost}'];
|
|
|
|
$labels['delivery{payments}'] = $labels['delivery{edit_payment}'];
|
|
|
|
$labels['delivery{max_order_quantity}'] = 'Ukryj wyświetlanie';
|
|
|
|
$labels['delivery{max_order_amount}'] = 'Ukryj wyświetlanie';
|
|
|
|
$labels['delivery{max_order_weight}'] = 'Ukryj wyświetlanie';
|
|
|
|
$labels['delivery{countries_area_id}'] = 'Strefa';
|
|
|
|
return $labels;
|
|
}
|
|
|
|
protected function getDeliveryOrCreate($id = 'id')
|
|
{
|
|
$delivery = parent::getDeliveryOrCreate($id);
|
|
|
|
if (null !== $delivery->getDeliveryType())
|
|
{
|
|
$this->validateDeliveryTypeConfiguration($delivery->getDeliveryType());
|
|
}
|
|
|
|
return $delivery;
|
|
}
|
|
|
|
protected function getDeliveryTypeDeliveryTypeOrCreate($id = 'id')
|
|
{
|
|
$deliveryType = parent::getDeliveryTypeDeliveryTypeOrCreate($id);
|
|
|
|
if ($deliveryType->getIsSystemDefault())
|
|
{
|
|
return $this->redirect('@stDelivery?action=deliveryTypeList');
|
|
}
|
|
|
|
return $deliveryType;
|
|
}
|
|
|
|
protected function validateDeliveryTypeConfiguration(DeliveryType $deliveryType)
|
|
{
|
|
$deliveryTypeConfigurationValidator = new stDeliveryTypeConfigurationValidator();
|
|
$deliveryTypeConfigurationValidator->initialize($this->getContext());
|
|
|
|
$currentDeliveryType = $deliveryType->getType();
|
|
|
|
if (!$deliveryTypeConfigurationValidator->execute($currentDeliveryType, $error))
|
|
{
|
|
$this->getRequest()->setError('delivery{type_id}', $error);
|
|
}
|
|
}
|
|
}
|