Newer
Older
<?php
/**
* This file contains QUI\ERP\Shipping\Rules\Factory
*/
namespace QUI\ERP\Shipping\Rules;
use QUI;
use QUI\ERP\Shipping\Rules\Factory as RuleFactory;
use function array_filter;
use function array_flip;
use function is_array;
use function is_int;
use function is_integer;
use function is_numeric;
use function json_encode;
/**
* Class Factory
*
* @package QUI\ERP\Shipping\Types
*/
class Factory extends QUI\CRUD\Factory
{
/**
* absolute discount
*/
const DISCOUNT_TYPE_ABS = 0;
/**
* percentage discount
*/
const DISCOUNT_TYPE_PERCENTAGE = 1;
/**
* percentage discount from order sum (total) // PERCENTAGE_ORDER
*/
const DISCOUNT_TYPE_PC_ORDER = 2;
/**
* Handler constructor.
*/
public function __construct()
{
parent::__construct();
$this->Events->addEvent('onCreateBegin', function () {
Permission::checkPermission('quiqqer.shipping.rule.create');
});
// create new translation var for the area
$this->Events->addEvent('onCreateEnd', function () {
QUI\Translator::publish('quiqqer/shipping');
});
}
/**
* @param array $data
* @return ShippingRule
*
* @throws QUI\Exception
*/

Henning Leutz
committed
public function createChild(array $data = []): ShippingRule
'active',
'title',
'workingTitle',
'date_from',
'date_until',
'priority',
'purchase_quantity_from',
'purchase_quantity_until',
'purchase_value_from',
'articles_only',
'unit_terms',
'no_rule_after'
$data = array_filter($data, function ($k) use ($allowed) {
if (!isset($data['active']) || !is_integer($data['active'])) {
if (!isset($data['purchase_quantity_from']) || !is_integer($data['purchase_quantity_from'])) {
$data['purchase_quantity_from'] = 0;
}
if (!isset($data['purchase_quantity_until']) || !is_integer($data['purchase_quantity_until'])) {
$data['purchase_quantity_until'] = 0;
}
if (!isset($data['priority']) || !is_numeric($data['priority'])) {
} elseif (!is_int($data['priority'])) {
$data['discount'] = 0;
} else {
$data['discount'] = QUI\ERP\Money\Price::validatePrice($data['discount']);
if (isset($data['unit_terms']) && is_array($data['unit_terms'])) {
$data['unit_terms'] = json_encode($data['unit_terms']);
}
if (!isset($data['unit_terms'])) {
$data['unit_terms'] = '';
$data['articles_only'] = 0;
} else {
$data['articles_only'] = (int)$data['articles_only'];
$data['no_rule_after'] = 0;
} else {
$data['no_rule_after'] = (int)$data['no_rule_after'];
}
$data['discount_type'] = (int)$data['discount_type'];
}
switch ($data['discount_type']) {
case 'ABS':
$data['discount_type'] = RuleFactory::DISCOUNT_TYPE_ABS;
break;
case 'PERCENTAGE':
$data['discount_type'] = RuleFactory::DISCOUNT_TYPE_PERCENTAGE;
break;
case 'PERCENTAGE_ORDER':
$data['discount_type'] = RuleFactory::DISCOUNT_TYPE_PC_ORDER;
break;
case RuleFactory::DISCOUNT_TYPE_ABS:
case RuleFactory::DISCOUNT_TYPE_PERCENTAGE:
case RuleFactory::DISCOUNT_TYPE_PC_ORDER:
break;
default:
$data['discount_type'] = RuleFactory::DISCOUNT_TYPE_ABS;
}
// start creating
QUI::getEvents()->fireEvent('shippingRuleCreateBegin', [$data]);
/* @var $NewChild ShippingRule */
$NewChild = parent::createChild($data);
$localeTitle = 'shipping.' . $NewChild->getId() . '.rule.title';
$localeWTitle = 'shipping.' . $NewChild->getId() . '.rule.workingTitle';

Henning Leutz
committed

Henning Leutz
committed
$localeTitle,
QUI::getLocale()->get('quiqqer/shipping', 'new.shipping.rule.placeholder')
);
$this->createShippingLocale(

Henning Leutz
committed
$localeWTitle,
QUI::getLocale()->get('quiqqer/shipping', 'new.shipping.rule.placeholder')

Henning Leutz
committed
// set translations
if (!empty($data['title']) && is_array($data['title'])) {

Henning Leutz
committed
$title = [];
foreach ($data['title'] as $lang => $v) {

Henning Leutz
committed
$title[$lang] = $v;
}
}
QUI\Translator::edit(
'quiqqer/shipping',
$localeTitle,
'quiqqer/shipping',
$title
);
}
if (!empty($data['workingTitle']) && is_array($data['workingTitle'])) {

Henning Leutz
committed
$title = [];
foreach ($data['workingTitle'] as $lang => $v) {

Henning Leutz
committed
$title[$lang] = $v;
}
}
QUI\Translator::edit(
'quiqqer/shipping',
$localeWTitle,
'quiqqer/shipping',
$title
);
}
QUI\Translator::publish('quiqqer/shipping');
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
QUI::getEvents()->fireEvent('shippingCreateEnd', [$NewChild]);

Henning Leutz
committed
// @phpstan-ignore-next-line
return $NewChild;
}
/**
* @return string
*/
public function getDataBaseTableName(): string
{
return 'shipping_rules';
}
/**
* @return string
*/
public function getChildClass(): string
{
return ShippingRule::class;
}
/**
* @return array
*/
public function getChildAttributes(): array
'date_from',
'date_until',
'purchase_quantity_from',
'purchase_quantity_until',
'purchase_value_from',
'purchase_value_until',
'priority',
'areas',
'categories',
'articles',
'articles_only',
];
}
/**
* @param int $id
*
* @return ShippingRule
public function getChild($id): ShippingRule
/* @var ShippingRule $Shipping */

Henning Leutz
committed
// @phpstan-ignore-next-line
return $Shipping;
}
/**
* Creates a locale
*
* @param string $var
* @param string $title
protected function createShippingLocale(string $var, string $title): void
{
$current = QUI::getLocale()->getCurrent();
if (QUI::getLocale()->isLocaleString($title)) {
$parts = QUI::getLocale()->getPartsOfLocaleString($title);
$title = QUI::getLocale()->get($parts[0], $parts[1]);
}
try {
QUI\Translator::addUserVar('quiqqer/shipping', $var, [
]);
} catch (QUI\Exception $Exception) {
QUI\System\Log::addNotice($Exception->getMessage());
}
}
}