| ... | ... |
@@ -97,7 +97,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_reservation'] = array |
| 97 | 97 |
'palettes' => array |
| 98 | 98 |
( |
| 99 | 99 |
'__selector__' => array(), |
| 100 |
- 'default' => 'pid,uid,behaelter,sorten,lage,ernteart,upload' |
|
| 100 |
+ 'default' => 'pid,uid,unit,amount,behaelter,upload' |
|
| 101 | 101 |
), |
| 102 | 102 |
|
| 103 | 103 |
// Subpalettes |
| ... | ... |
@@ -146,11 +146,42 @@ $GLOBALS['TL_DCA']['tl_vr_wa_reservation'] = array |
| 146 | 146 |
'sql' => "blob NULL", |
| 147 | 147 |
'relation' => array('type' => 'hasMany', 'load' => 'lazy', 'table'=>'tl_vr_wa_lage')
|
| 148 | 148 |
), |
| 149 |
+ 'unit' => array |
|
| 150 |
+ ( |
|
| 151 |
+ 'exclude' => true, |
|
| 152 |
+ 'inputType' => 'select', |
|
| 153 |
+ 'eval' => array |
|
| 154 |
+ ( |
|
| 155 |
+ 'mandatory' => false, |
|
| 156 |
+ 'includeBlankOption' => true, |
|
| 157 |
+ 'blankOptionLabel' => &$GLOBALS['TL_LANG']['MSC']['wa_container'], |
|
| 158 |
+ 'tl_class' => 'clr w50', |
|
| 159 |
+ ), |
|
| 160 |
+ 'sql' => "int(10) unsigned NOT NULL default '0'", |
|
| 161 |
+ 'relation' => array |
|
| 162 |
+ ( |
|
| 163 |
+ 'table' => 'tl_vr_wa_units', |
|
| 164 |
+ 'load' => 'lazy', |
|
| 165 |
+ 'type' => 'hasOne', |
|
| 166 |
+ 'field' => 'id' |
|
| 167 |
+ ) |
|
| 168 |
+ ), |
|
| 169 |
+ 'amount' => array |
|
| 170 |
+ ( |
|
| 171 |
+ 'exclude' => true, |
|
| 172 |
+ 'inputType' => 'text', |
|
| 173 |
+ 'eval' => array |
|
| 174 |
+ ( |
|
| 175 |
+ 'rgxp'=>'natural', |
|
| 176 |
+ 'tl_class'=>'w50', |
|
| 177 |
+ ), |
|
| 178 |
+ 'sql' => "smallint(3) unsigned NOT NULL default 0", |
|
| 179 |
+ ), |
|
| 149 | 180 |
'behaelter' => array |
| 150 | 181 |
( |
| 151 | 182 |
'exclude' => true, |
| 152 | 183 |
'inputType' => 'text', |
| 153 |
- 'eval' => array('rgxp'=>'natural','tl_class'=>'w50'),
|
|
| 184 |
+ 'eval' => array('rgxp'=>'natural','tl_class'=>'clr w50','readonly'=>true),
|
|
| 154 | 185 |
'sql' => "smallint(3) unsigned NOT NULL default 0", |
| 155 | 186 |
), |
| 156 | 187 |
'sorten' => array |
| ... | ... |
@@ -88,7 +88,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_slottypes'] = array |
| 88 | 88 |
// Palettes |
| 89 | 89 |
'palettes' => array |
| 90 | 90 |
( |
| 91 |
- 'default' => '{title_legend},title;{config_legend},duration,containers,units;{expert_legend},default'
|
|
| 91 |
+ 'default' => '{title_legend},title;{config_legend},duration,containers;{expert_legend},default'
|
|
| 92 | 92 |
), |
| 93 | 93 |
|
| 94 | 94 |
// Subpalettes |
| ... | ... |
@@ -157,19 +157,6 @@ $GLOBALS['TL_DCA']['tl_vr_wa_slottypes'] = array |
| 157 | 157 |
), |
| 158 | 158 |
'sql' => "int(4) NOT NULL default 0" |
| 159 | 159 |
), |
| 160 |
- 'units' => array |
|
| 161 |
- ( |
|
| 162 |
- 'exclude' => true, |
|
| 163 |
- 'inputType' => 'checkbox', |
|
| 164 |
- 'foreignKey' => "tl_vr_wa_units.title", |
|
| 165 |
- 'eval' => array |
|
| 166 |
- ( |
|
| 167 |
- 'mandatory' => false, |
|
| 168 |
- 'multiple' => true, |
|
| 169 |
- 'tl_class' => 'clr' |
|
| 170 |
- ), |
|
| 171 |
- 'sql' => "blob NULL" |
|
| 172 |
- ), |
|
| 173 | 160 |
'default' => array |
| 174 | 161 |
( |
| 175 | 162 |
'exclude' => true, |
| ... | ... |
@@ -110,7 +110,7 @@ $GLOBALS['TL_DCA']['tl_vr_wa_standort'] = array |
| 110 | 110 |
'palettes' => array |
| 111 | 111 |
( |
| 112 | 112 |
'__selector__' => ['nc_enable'], |
| 113 |
- 'default' => '{title_legend},title;{notification_legend},nc_enable'
|
|
| 113 |
+ 'default' => '{title_legend},title;{units_legend},units;{notification_legend},nc_enable'
|
|
| 114 | 114 |
), |
| 115 | 115 |
|
| 116 | 116 |
// Subpalettes |
| ... | ... |
@@ -143,6 +143,24 @@ $GLOBALS['TL_DCA']['tl_vr_wa_standort'] = array |
| 143 | 143 |
), |
| 144 | 144 |
'sql' => "varchar(255) NOT NULL default ''" |
| 145 | 145 |
), |
| 146 |
+ 'units' => array |
|
| 147 |
+ ( |
|
| 148 |
+ 'exclude' => true, |
|
| 149 |
+ 'inputType' => 'checkbox', |
|
| 150 |
+ 'foreignKey' => "tl_vr_wa_units.title", |
|
| 151 |
+ 'eval' => array |
|
| 152 |
+ ( |
|
| 153 |
+ 'mandatory' => false, |
|
| 154 |
+ 'multiple' => true, |
|
| 155 |
+ 'tl_class' => 'clr' |
|
| 156 |
+ ), |
|
| 157 |
+ 'sql' => "blob NULL", |
|
| 158 |
+ 'relation' => array |
|
| 159 |
+ ( |
|
| 160 |
+ 'type' => 'hasMany', |
|
| 161 |
+ 'load' => 'lazy' |
|
| 162 |
+ ) |
|
| 163 |
+ ), |
|
| 146 | 164 |
'nc_enable' => array |
| 147 | 165 |
( |
| 148 | 166 |
'exclude' => true, |
| ... | ... |
@@ -12,6 +12,10 @@ $GLOBALS['TL_LANG']['tl_vr_wa_reservation']['pid'][0] = 'Zeitslot'; |
| 12 | 12 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['pid'][1] = 'Der gebuchte Zeitslot.'; |
| 13 | 13 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['behaelter'][0] = 'Behälteranzahl'; |
| 14 | 14 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['behaelter'][1] = 'Die Anzahl an Behälter, die der Winzer anliefert.'; |
| 15 |
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['amount'][0] = 'Anzahl'; |
|
| 16 |
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['amount'][1] = 'Die Anzahl der ausgewählten Einheit, die der Winzer anliefert.'; |
|
| 17 |
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['unit'][0] = 'Behältereinheit'; |
|
| 18 |
+$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['unit'][1] = 'Die Behältereinheit, die der Winzer anliefert.'; |
|
| 15 | 19 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['sorten'][0] = 'Sorten'; |
| 16 | 20 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['sorten'][1] = 'Die Sorten, die der Winzer anliefert.'; |
| 17 | 21 |
$GLOBALS['TL_LANG']['tl_vr_wa_reservation']['lage'][0] = 'Lage'; |
| ... | ... |
@@ -18,6 +18,8 @@ $GLOBALS['TL_LANG']['tl_vr_wa_slot']['behaelter'][0] = 'Behälter'; |
| 18 | 18 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['behaelter'][1] = 'Anzahl der Behälter, die verarbeitet werden können.'; |
| 19 | 19 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['lage'][0] = 'Lage'; |
| 20 | 20 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['lage'][1] = 'Lage der angelieferten Reben.'; |
| 21 |
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['units'][0] = 'Zusätzliche Container-Einheiten'; |
|
| 22 |
+$GLOBALS['TL_LANG']['tl_vr_wa_slot']['units'][1] = 'Zusätzlich wählbare Behältereinheiten für die Slotbuchung.'; |
|
| 21 | 23 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['leseart'][0] = 'Leseart'; |
| 22 | 24 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['leseart'][1] = 'Die verwendete Leseart.'; |
| 23 | 25 |
$GLOBALS['TL_LANG']['tl_vr_wa_slot']['sorten'][0] = 'Rebsorten'; |
| ... | ... |
@@ -10,12 +10,15 @@ |
| 10 | 10 |
|
| 11 | 11 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['title'][0] = 'Titel'; |
| 12 | 12 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['title'][1] = 'Der Name des Anlieferungs-Standorts.'; |
| 13 |
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['units'][0] = 'Zusätzliche Behälter-Einheiten'; |
|
| 14 |
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['units'][1] = 'Zusätzlich wählbare Behältereinheiten für die Slotbuchung.'; |
|
| 13 | 15 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_enable'][0] = 'Benachrichtigungen aktivieren'; |
| 14 | 16 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_enable'][1] = 'Ermöglicht das Versenden von Benachrichtigungen beim Veröffentlichen neuer Nachrichten.'; |
| 15 | 17 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification'][0] = 'Benachrichtigung'; |
| 16 | 18 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['nc_notification'][1] = 'Die zu versendende Benachrichtigung.'; |
| 17 | 19 |
|
| 18 | 20 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['title_legend'] = 'Standort'; |
| 21 |
+$GLOBALS['TL_LANG']['tl_vr_wa_standort']['units_legend'] = 'Einheiten-Einstellungen'; |
|
| 19 | 22 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['notification_legend'] = 'Benachrichtigung-Einstellungen'; |
| 20 | 23 |
|
| 21 | 24 |
$GLOBALS['TL_LANG']['tl_vr_wa_standort']['rebsorte'] = 'Rebsorten'; |
| ... | ... |
@@ -50,19 +50,15 @@ |
| 50 | 50 |
<div class="t-label">Standort</div> |
| 51 | 51 |
{{ standort.standort }}
|
| 52 | 52 |
</div> |
| 53 |
- <div class="col-3"> |
|
| 53 |
+ <div class="col"> |
|
| 54 | 54 |
<div class="t-label">Verfügbare Behälterkapazität</div> |
| 55 | 55 |
{{ bookings.behaelterAvailable }}
|
| 56 | 56 |
</div> |
| 57 |
- <div class="col"> |
|
| 58 |
- <div class="t-label">Verarbeitete Sorten</div> |
|
| 59 |
- {{ bookings.sorten|join(', ') }}
|
|
| 60 |
- </div> |
|
| 61 | 57 |
</h3> |
| 62 | 58 |
<div class="bookings u-row-striped"> |
| 63 | 59 |
{% for booking in bookings.items %}
|
| 64 | 60 |
<div class="row u-items-center"> |
| 65 |
- <div class="col-1 time icon-uhr-outline"> |
|
| 61 |
+ <div class="col-2 time icon-uhr-outline"> |
|
| 66 | 62 |
<div class="t-label">Uhrzeit</div> |
| 67 | 63 |
{{ booking.slot.time|date('H:i') }}
|
| 68 | 64 |
<div class="t-label">Standort</div> |
| ... | ... |
@@ -71,16 +67,10 @@ |
| 71 | 67 |
<div class="col-3 behaelter icon-behaelter-outline"> |
| 72 | 68 |
<div class="t-label">Gebuchte Behälterkapazität</div> |
| 73 | 69 |
{{ booking.behaelter }}
|
| 74 |
- <div class="t-label">Ernteart</div> |
|
| 75 |
- {{ booking.ernteart|join(', ') }}
|
|
| 76 |
- </div> |
|
| 77 |
- <div class="col-3 behaelter icon-behaelter-outline"> |
|
| 78 |
- <div class="t-label">Anliefernde Sorten</div> |
|
| 79 |
- {{ booking.sorte|join(', ') }}
|
|
| 80 |
- <div class="t-label">Lage</div> |
|
| 81 |
- {{ booking.lage|join(', ') }}
|
|
| 70 |
+ <div class="t-label">Anlieferungseinheit</div> |
|
| 71 |
+ {{ booking.amount }} x {{ booking.unit }}
|
|
| 82 | 72 |
</div> |
| 83 |
- <div class="col-3 rebsorten icon-reben-outline"> |
|
| 73 |
+ <div class="col-5 rebsorten icon-reben-outline"> |
|
| 84 | 74 |
<div class="t-label">Mitglied</div> |
| 85 | 75 |
{% if booking.member is not null %}
|
| 86 | 76 |
{% if booking.member.memberno is defined %}
|
| ... | ... |
@@ -24,6 +24,7 @@ use Doctrine\DBAL\Connection; |
| 24 | 24 |
use Symfony\Component\HttpFoundation\RequestStack; |
| 25 | 25 |
use Symfony\Component\HttpFoundation\Response; |
| 26 | 26 |
use Symfony\Component\Routing\Annotation\Route; |
| 27 |
+use Symfony\Contracts\Translation\TranslatorInterface; |
|
| 27 | 28 |
use Twig\Environment as TwigEnvironment; |
| 28 | 29 |
use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLeseartModel; |
| 29 | 30 |
use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungRebsorteModel; |
| ... | ... |
@@ -39,13 +40,15 @@ class WeinanlieferungBookingsController extends AbstractController |
| 39 | 40 |
private $tokenManager; |
| 40 | 41 |
private $request; |
| 41 | 42 |
private $db; |
| 43 |
+ private $translator; |
|
| 42 | 44 |
|
| 43 |
- public function __construct(TwigEnvironment $twig, ContaoCsrfTokenManager $tokenManager, RequestStack $requestStack, Connection $db) |
|
| 45 |
+ public function __construct(TwigEnvironment $twig, ContaoCsrfTokenManager $tokenManager, RequestStack $requestStack, Connection $db, TranslatorInterface $translator) |
|
| 44 | 46 |
{
|
| 45 | 47 |
$this->twig = $twig; |
| 46 | 48 |
$this->tokenManager = $tokenManager; |
| 47 | 49 |
$this->request = $requestStack->getCurrentRequest(); |
| 48 | 50 |
$this->db = $db; |
| 51 |
+ $this->translator = $translator; |
|
| 49 | 52 |
|
| 50 | 53 |
$container = System::getContainer(); |
| 51 | 54 |
$objSession = $container->get('session');
|
| ... | ... |
@@ -192,11 +195,19 @@ class WeinanlieferungBookingsController extends AbstractController |
| 192 | 195 |
$strStandort = $Standort->title; |
| 193 | 196 |
} |
| 194 | 197 |
|
| 198 |
+ // Unit |
|
| 199 |
+ $unitLabel = $this->translator->trans('tl_vr_wa_units.containers.0', [], 'contao_tl_vr_wa_units');
|
|
| 200 |
+ if (($Unit = $booking->getRelated('unit')) !== null)
|
|
| 201 |
+ {
|
|
| 202 |
+ $unitLabel = $Unit->title; |
|
| 203 |
+ } |
|
| 204 |
+ |
|
| 195 | 205 |
$arrData['days'][$day->dayBegin][$Slot->pid]['times'][$Slot->time]['items'][] = array_merge($booking->row(), [ |
| 196 | 206 |
'sorte' => $arrSorten, |
| 197 | 207 |
'ernteart' => $arrErnteart, |
| 198 | 208 |
'lage' => $arrLagen, |
| 199 | 209 |
'slot' => $Slot->row(), |
| 210 |
+ 'unit' => $unitLabel, |
|
| 200 | 211 |
'standort' => $strStandort, |
| 201 | 212 |
'member' => $booking->getRelated('uid') !== null ? $booking->getRelated('uid')->row() : null
|
| 202 | 213 |
]); |
| ... | ... |
@@ -15,20 +15,27 @@ namespace vonRotenberg\WeinanlieferungBundle\EventListener\DataContainer; |
| 15 | 15 |
use Contao\CoreBundle\ServiceAnnotation\Callback; |
| 16 | 16 |
use Contao\DataContainer; |
| 17 | 17 |
use Contao\Date; |
| 18 |
+use Contao\Input; |
|
| 18 | 19 |
use Contao\StringUtil; |
| 19 | 20 |
use Doctrine\DBAL\Connection; |
| 21 |
+use Symfony\Contracts\Translation\TranslatorInterface; |
|
| 20 | 22 |
use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungLeseartModel; |
| 21 | 23 |
use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungRebsorteModel; |
| 22 | 24 |
use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungSlotsModel; |
| 25 |
+use vonRotenberg\WeinanlieferungBundle\Model\WeinanlieferungUnitsModel; |
|
| 23 | 26 |
|
| 24 | 27 |
class WeinanlieferungReservationContainerListener |
| 25 | 28 |
{
|
| 26 | 29 |
/** @var Connection */ |
| 27 | 30 |
protected $db; |
| 28 | 31 |
|
| 29 |
- public function __construct(Connection $db) |
|
| 32 |
+ private $translator; |
|
| 33 |
+ |
|
| 34 |
+ |
|
| 35 |
+ public function __construct(Connection $db,TranslatorInterface $translator) |
|
| 30 | 36 |
{
|
| 31 | 37 |
$this->db = $db; |
| 38 |
+ $this->translator = $translator; |
|
| 32 | 39 |
} |
| 33 | 40 |
|
| 34 | 41 |
|
| ... | ... |
@@ -145,4 +152,52 @@ class WeinanlieferungReservationContainerListener |
| 145 | 152 |
|
| 146 | 153 |
return $arrData; |
| 147 | 154 |
} |
| 155 |
+ |
|
| 156 |
+ /** |
|
| 157 |
+ * @Callback(table="tl_vr_wa_reservation", target="fields.unit.options") |
|
| 158 |
+ */ |
|
| 159 |
+ public function onUnitsOptionsCallback(DataContainer $dc) |
|
| 160 |
+ {
|
|
| 161 |
+ $arrOptions = []; |
|
| 162 |
+ |
|
| 163 |
+ if ( |
|
| 164 |
+ ($Slot = WeinanlieferungSlotsModel::findByPk($dc->activeRecord->pid)) !== null |
|
| 165 |
+ && ($Site = $Slot->getRelated('pid')) !== null
|
|
| 166 |
+ ) |
|
| 167 |
+ {
|
|
| 168 |
+ if (($Units = $Site->getRelated('units')) !== null)
|
|
| 169 |
+ {
|
|
| 170 |
+ foreach ($Units as $unit) |
|
| 171 |
+ {
|
|
| 172 |
+ $arrOptions[$unit->id] = $unit->title . ' (' . $unit->containers . ' '.$this->translator->trans('tl_vr_wa_units.containers.0', [], 'contao_tl_vr_wa_units').')';
|
|
| 173 |
+ } |
|
| 174 |
+ } |
|
| 175 |
+ |
|
| 176 |
+ } |
|
| 177 |
+ |
|
| 178 |
+ |
|
| 179 |
+ return $arrOptions; |
|
| 180 |
+ } |
|
| 181 |
+ |
|
| 182 |
+ /** |
|
| 183 |
+ * @Callback(table="tl_vr_wa_reservation", target="fields.amount.save") |
|
| 184 |
+ */ |
|
| 185 |
+ public function adjustContainers($varValue, DataContainer $dc) |
|
| 186 |
+ {
|
|
| 187 |
+ $intUnit = (Input::post('unit') !== null) ? intval(Input::post('unit')) : intval($dc->activeRecord->unit);
|
|
| 188 |
+ |
|
| 189 |
+ $intContainers = $varValue; |
|
| 190 |
+ |
|
| 191 |
+ if ($intUnit) |
|
| 192 |
+ {
|
|
| 193 |
+ if (($Unit = WeinanlieferungUnitsModel::findByPk($intUnit)) !== null) |
|
| 194 |
+ {
|
|
| 195 |
+ $intContainers = intval($varValue) * intval($Unit->containers); |
|
| 196 |
+ } |
|
| 197 |
+ } |
|
| 198 |
+ |
|
| 199 |
+ $this->db->update($dc->table,['behaelter'=>$intContainers],['id'=>$dc->activeRecord->id]); |
|
| 200 |
+ |
|
| 201 |
+ return $varValue; |
|
| 202 |
+ } |
|
| 148 | 203 |
} |