Skip to content
Code-Schnipsel Gruppen Projekte
Commit 2fa84c12 erstellt von Patrick Müller's avatar Patrick Müller
Dateien durchsuchen

feat: ShippingTimePeriod

Übergeordneter c0188f3c
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
Keine zugehörigen Merge Requests gefunden
.quiqqer-shipping-fields-shippingtimeperiod {
border-bottom: 1px solid #dedede;
flex-basis: 100%;
margin: 0 0 10px 0;
padding: 0 0 10px 0;
width: 100%;
}
.quiqqer-shipping-fields-shippingtimeperiod select {
width: 100%;
}
\ No newline at end of file
/**
* @module package/quiqqer/shipping/bin/backend/controls/products/fields/ShippingTimePeriod
* @author www.pcsg.de (Patrick Müller)
*/
define('package/quiqqer/shipping/bin/backend/controls/products/fields/ShippingTimePeriod', [
'package/quiqqer/products/bin/controls/fields/types/TimePeriod',
'Locale',
'css!package/quiqqer/shipping/bin/backend/controls/products/fields/ShippingTimePeriod.css'
], function (TimePeriod, QUILocale) {
"use strict";
var lg = 'quiqqer/shipping';
return new Class({
Extends: TimePeriod,
Type : 'package/quiqqer/shipping/bin/backend/controls/products/fields/ShippingTimePeriod',
Binds: [
'$onImport',
'$onOptionSelectChange',
'$onSelectChange',
'$setValue',
'getValue'
],
initialize: function (options) {
this.parent(options);
this.$OptionsSelect = null;
this.addEvents({
onImport: this.$onImport
});
},
/**
* Event: onImport
*/
$onImport: function () {
var self = this,
Elm = this.getElm(),
Value = false;
this.parent();
var OptionsContainer = new Element('div', {
'class': 'quiqqer-shipping-fields-shippingtimeperiod'
}).inject(this.$Content, 'top');
this.$OptionsSelect = new Element('select', {
name : 'option',
events: {
change: this.$onOptionSelectChange
}
}).inject(OptionsContainer);
var options = ['timeperiod', 'unavailable', 'immediately_available'],
lgPrefix = 'controls.products.fields.ShippingTimePeriod.';
for (var i = 0, len = options.length; i < len; i++) {
var option = options[i];
new Element('option', {
value: option,
html : QUILocale.get(lg, lgPrefix + 'option.' + option)
}).inject(this.$OptionsSelect);
}
(function () {
if (!Elm.value) {
self.$OptionsSelect.value = 'timeperiod';
return;
}
Value = JSON.decode(Elm.value);
self.$OptionsSelect.value = Value.option;
self.$onOptionSelectChange();
}).delay(200);
},
/**
* Executed if an option is selected
*/
$onOptionSelectChange: function () {
var option = this.$OptionsSelect.value;
if (option === 'timeperiod') {
this.$UnitSelect.disabled = false;
this.$FromInput.disabled = false;
this.$ToInput.disabled = false;
} else {
this.$UnitSelect.disabled = true;
this.$FromInput.disabled = true;
this.$ToInput.disabled = true;
}
this.$setValue();
},
/**
* Set field value to input
*/
$setValue: function () {
this.getElm().value = JSON.encode({
from : this.$FromInput.value.trim(),
to : this.$ToInput.value.trim(),
unit : this.$UnitSelect.value,
option: this.$OptionsSelect.value
});
},
/**
* Return the current value
*
* @returns {Object}
*/
getValue: function () {
return {
from : this.$FromInput.value.trim(),
to : this.$ToInput.value.trim(),
unit : this.$UnitSelect.value,
option: this.$OptionsSelect.value
};
}
});
});
......@@ -157,6 +157,81 @@
This message is displayed to the user if the order can't be continued and will be canceled.
]]></en>
</locale>
<!-- Fields -->
<locale name="field.ShippingTimePeriod">
<de><![CDATA[Lieferzeitraum]]></de>
<en><![CDATA[Delivery period]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.unavailable">
<de><![CDATA[derzeit nicht verfügbar]]></de>
<en><![CDATA[currently not available]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.immediately_available">
<de><![CDATA[sofort verfügbar]]></de>
<en><![CDATA[immediately available]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.from_to">
<de><![CDATA[ca. [from] bis [to]]]></de>
<en><![CDATA[approx. [from] to [to]]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.second">
<de><![CDATA[Sekunde]]></de>
<en><![CDATA[second]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.minute">
<de><![CDATA[Minute]]></de>
<en><![CDATA[minute]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.hour">
<de><![CDATA[Stunde]]></de>
<en><![CDATA[hour]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.day">
<de><![CDATA[Tag]]></de>
<en><![CDATA[day]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.week">
<de><![CDATA[Woche]]></de>
<en><![CDATA[week]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.month">
<de><![CDATA[Monat]]></de>
<en><![CDATA[month]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_single.year">
<de><![CDATA[Jahr]]></de>
<en><![CDATA[year]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.second">
<de><![CDATA[Sekunden]]></de>
<en><![CDATA[seconds]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.minute">
<de><![CDATA[Minuten]]></de>
<en><![CDATA[minutes]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.hour">
<de><![CDATA[Stunden]]></de>
<en><![CDATA[hours]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.day">
<de><![CDATA[Tage]]></de>
<en><![CDATA[days]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.week">
<de><![CDATA[Wochen]]></de>
<en><![CDATA[weeks]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.month">
<de><![CDATA[Monate]]></de>
<en><![CDATA[months]]></en>
</locale>
<locale name="fields.ShippingTimeFrontendView.timeperiod.unit_multi.year">
<de><![CDATA[Jahre]]></de>
<en><![CDATA[years]]></en>
</locale>
</groups>
<groups name="quiqqer/shipping" datatype="php">
......@@ -539,6 +614,21 @@
<de><![CDATA[Erstellen]]></de>
<en><![CDATA[Create]]></en>
</locale>
<!-- Fields -->
<locale name="controls.products.fields.ShippingTimePeriod.option.timeperiod">
<de><![CDATA[Lieferzeit auswählen]]></de>
<en><![CDATA[Choose shipping time]]></en>
</locale>
<locale name="controls.products.fields.ShippingTimePeriod.option.unavailable">
<de><![CDATA[Derzeit nicht lieferbar]]></de>
<en><![CDATA[Currently not available]]></en>
</locale>
<locale name="controls.products.fields.ShippingTimePeriod.option.immediately_available">
<de><![CDATA[Sofort verfügbar]]></de>
<en><![CDATA[Immediately available]]></en>
</locale>
</groups>
<groups name="quiqqer/order">
......
<quiqqer>
<products>
<fields>
<field src="\QUI\ERP\Shipping\Products\Fields\ShippingTimePeriod" name="shipping.ShippingTimePeriod">
<locale group="quiqqer/shipping" var="field.ShippingTimePeriod"/>
</field>
</fields>
</products>
</quiqqer>
\ No newline at end of file
<?php
namespace QUI\ERP\Shipping\Products\Fields;
use QUI;
/**
* Class UnitSelectFrontendView
*
* View control for showing UnitSelect values in the product frontend
*/
class ShippingTimeFrontendView extends QUI\ERP\Products\Field\View
{
/**
* Render the view, return the html
*
* @return string
* @throws QUI\Exception
*/
public function create()
{
if (!$this->hasViewPermission()) {
return '';
}
$Engine = QUI::getTemplateManager()->getEngine();
$L = QUI::getLocale();
$lg = 'quiqqer/shipping';
/** @var ShippingTimePeriod $Field */
$Field = QUI\ERP\Products\Handler\Fields::getField($this->getId());
$value = $this->getValue();
switch ($value['option']) {
case ShippingTimePeriod::OPTION_UNAVAILABLE:
$valueText = $L->get($lg, 'fields.ShippingTimeFrontendView.unavailable');
break;
case ShippingTimePeriod::OPTION_IMMEDIATELY_AVAILABLE:
$valueText = $L->get($lg, 'fields.ShippingTimeFrontendView.immediately_available');
break;
default:
$from = $value['from'];
$to = $value['to'];
$unit = $value['unit'];
if (empty($to) && empty($from)) {
$valueText = $L->get($lg, 'fields.ShippingTimeFrontendView.unavailable');
break;
}
$singleTime = true;
if ($from === $to) {
$valueText = $from;
} elseif (empty($from) && !empty($to)) {
$valueText = $to;
} elseif (!empty($from) && empty($to)) {
$valueText = $from;
} else {
$valueText = $L->get($lg, 'fields.ShippingTimeFrontendView.timeperiod.from_to', [
'from' => $from,
'to' => $to
]);
$singleTime = false;
}
if ($singleTime) {
$valueText .= ' '.$L->get($lg, 'fields.ShippingTimeFrontendView.timeperiod.unit_single.'.$unit);
} else {
$valueText .= ' '.$L->get($lg, 'fields.ShippingTimeFrontendView.timeperiod.unit_multi.'.$unit);
}
}
$Engine->assign([
'title' => $this->getTitle(),
'valueText' => $valueText
]);
return $Engine->fetch(\dirname(__FILE__).'/UnitSelectFrontendView.html');
}
}
<?php
namespace QUI\ERP\Shipping\Products\Fields;
use QUI;
use QUI\ERP\Products\Field\Types\TimePeriod;
/**
* Class TimePeriod
*
* Define an arbitrary time period.
*/
class ShippingTimePeriod extends TimePeriod
{
const OPTION_TIMEPERIOD = 'timeperiod';
const OPTION_UNAVAILABLE = 'unavailable';
const OPTION_IMMEDIATELY_AVAILABLE = 'immediately_available';
/**
* Check the value
* is the value valid for the field type?
*
* @param array
* @throws \QUI\ERP\Products\Field\Exception
*/
public function validate($value)
{
parent::validate($value);
if (empty($value)) {
return;
}
if (\is_string($value)) {
$value = \json_decode($value, true);
}
if (!\array_key_exists('option', $value)) {
throw new QUI\ERP\Products\Field\Exception([
'quiqqer/products',
'exception.field.invalid',
[
'fieldId' => $this->getId(),
'fieldTitle' => $this->getTitle(),
'fieldType' => $this->getType()
]
]);
}
}
/**
* Cleanup the value, so the value is valid
*
* @param string|array $value
* @return array|null
*/
public function cleanup($value)
{
$value = parent::cleanup($value);
if (empty($value)) {
return $value;
}
switch ($value['option']) {
case self::OPTION_TIMEPERIOD:
case self::OPTION_UNAVAILABLE:
case self::OPTION_IMMEDIATELY_AVAILABLE:
break;
default:
return $this->defaultValue;
}
return $value;
}
/**
* @return string
*/
public function getJavaScriptControl()
{
return 'package/quiqqer/shipping/bin/backend/controls/products/fields/ShippingTimePeriod';
}
/**
* Return the FrontendView
*
* @return ShippingTimeFrontendView
*/
public function getFrontendView()
{
return new ShippingTimeFrontendView($this->getFieldDataForView());
}
}
<div class="grid-50 mobile-grid-50 grid-parent product-data-fields-title">
{$title}:
</div>
<div class="grid-50 mobile-grid-50 grid-parent product-data-fields-value">
{$valueText}
</div>
\ No newline at end of file
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren