loadByCarrier(Tools::getValue('id_carrier'), Context::getContext()->shop->id); /* render the list of weekdays */ $i = 0; $weekday_item = array(); $weekdays = array(); foreach (DDWDateTimeHelper::$weekday_map as $weekday) { $ddw_weekday = new DDWWeekdayModel(); $ddw_weekday->loadWeekday(Tools::getValue('id_carrier'), $i, Context::getContext()->shop->id); $weekday_item['label'] = DDWDateTimeHelper::translateWeekday($weekday, $this->sibling); $weekday_item['id_weekday'] = $i; $weekday_item['enabled'] = $ddw_weekday->enabled; $weekdays[] = $weekday_item; $i++; } Context::getContext()->smarty->assign(array( 'id_carrier' => Tools::getValue('id_carrier'), 'module_config_url' => $this->module_config_url, 'ddw' => $ddw, 'weekdays' => $weekdays )); return $this->sibling->display($this->sibling->module_file, 'views/templates/admin/config/weekdays.tpl'); } /** * Render edit weekday form * @return mixed */ public function renderEditForm() { $id_weekday = (int)Tools::getValue('id'); $id_carrier = (int)Tools::getValue('id_carrier'); $id_shop = (int)Tools::getValue('id_shop'); $ddw_weekday = new DDWWeekdayModel(); $ddw_weekday->loadWeekday(Tools::getValue('id_carrier'), Tools::getValue('id'), Context::getContext()->shop->id); $ddw_timeslots = new DDWTimeslotModel(); $timeslots = $ddw_timeslots->getTimeSlotsForWeekday(Tools::getValue('id_carrier'), Tools::getValue('id'), Context::getContext()->shop->id); $weekday_cutofftime = sprintf('%02d', $ddw_weekday->cutofftime_hours) . ':' . sprintf('%02d', $ddw_weekday->cutofftime_minutes); $fields_form = array(); $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->sibling->l('General Settings', $this->route), 'icon' => 'icon-cogs' ), 'input' => array( array( 'type' => 'hidden', 'name' => 'id_ddw' ), array( 'type' => 'hidden', 'name' => 'id_carrier' ), array( 'type' => 'hidden', 'name' => 'ddw_timeslots' ), array( 'type' => 'hidden', 'name' => 'id_shop' ), array( 'type' => 'hidden', 'name' => 'id' ), array( 'type' => 'switch', 'label' => $this->sibling->l('Weekday Enabled?', $this->route), 'name' => 'weekday_enabled', 'desc' => $this->sibling->l('Select if the weekday is available for delivery', $this->route), 'values' => array( array( 'id' => 'weekday_enabled_on', 'value' => 1, 'label' => $this->trans('Yes', array(), 'Admin.Global'), ), array( 'id' => 'weekday_enabled_off', 'value' => 0, 'label' => $this->trans('No', array(), 'Admin.Global'), ), ), ), array( 'type' => 'switch', 'label' => $this->sibling->l('Override main Preparation days settings?', $this->route), 'name' => 'minmax_enabled', 'desc' => $this->sibling->l('This option will allow you override some of the general settings', $this->route), 'values' => array( array( 'id' => 'minmax_enabled_on', 'value' => 1, 'label' => $this->trans('Yes', array(), 'Admin.Global'), ), array( 'id' => 'minmax_enabled_off', 'value' => 0, 'label' => $this->trans('No', array(), 'Admin.Global'), ) ), ), array( 'type' => 'text', 'label' => $this->sibling->l('Order Preparation Days', $this->route), 'name' => 'min_days', 'desc' => $this->sibling->l('Number of days it will take before the order can be delivered from the current day. 0 days is same day delivery, 1 is next day etc', $this->route), 'suffix' => $this->sibling->l('days', $this->route), 'size' => 4, 'class' => 'fixed-width-xl', ), array( 'type' => 'text', 'label' => $this->sibling->l('Maximum Days', $this->route), 'name' => 'max_days', 'desc' => $this->sibling->l('All dates in the calendar after this number of days (from the current day) will be disabled', $this->route), 'suffix' => $this->sibling->l('days', $this->route), 'size' => 4, 'class' => 'fixed-width-xl', ), array( 'type' => 'text', 'label' => $this->sibling->l('Order Preparation Time', $this->route), 'name' => 'timeslots_prep_minutes', 'desc' => $this->sibling->l('The time it takes to prepare an order for delivery in minutes. Time slots within this period will be unavailable to the customer.', $this->route), 'prefix' => $this->renderIcon('alarm_on'), 'suffix' => $this->sibling->l('minutes', $this->route), 'size' => 4, 'class' => 'fixed-width-xl', ), array( 'type' => 'switch', 'label' => $this->sibling->l('Cut off time enabled?', $this->route), 'name' => 'weekday_cutofftime_enabled', 'values' => array( array( 'id' => 'weekday_cutofftime_enabled_on', 'value' => 1, 'label' => $this->trans('Yes', array(), 'Admin.Global'), ), array( 'id' => 'weekday_cutofftime_enabled_off', 'value' => 0, 'label' => $this->trans('No', array(), 'Admin.Global'), ), ), ), array( 'type' => 'html', 'label' => $this->sibling->l('Cut off time', $this->route), 'name' => 'weekday_cutofftime', 'desc' => $this->sibling->l('Cut off time or deadline after which the order preparation day rolls over to the next available day', $this->route), 'html_content' => $this->renderTimeFieldIcon('weekday_cutofftime', $weekday_cutofftime), ), array( 'type' => 'text', 'label' => $this->sibling->l('Order Preparation Days after cut off time', $this->route), 'name' => 'min_days_postcutoff', 'desc' => $this->sibling->l('Number of days before the delivery can be made after the cut off time has passed', $this->route), 'suffix' => $this->sibling->l('days', $this->route), 'size' => 4, 'class' => 'fixed-width-xl', ), array( 'type' => 'text', 'label' => $this->sibling->l('Order Limit for the day', $this->route), 'name' => 'day_order_limit', 'desc' => $this->sibling->l('This weekday wil become unavailable after this many orders have been placed', $this->route), 'suffix' => $this->sibling->l('orders', $this->route), 'size' => 4, 'class' => 'fixed-width-xl', ), array( 'type' => 'html', 'label' => $this->sibling->l('Timeslots', $this->route), 'html_content' => $this->renderFieldButton($this->sibling->l('Edit Timeslots for this weekday', $this->route), 'edit-timeslots', '#edit-timeslots', 'icon-list', 'btn-secondary'), 'desc' => $this->sibling->l('Manage time slots for the customer to select for this week day', $this->route), ) ), 'submit' => array( 'title' => $this->sibling->l('Save', $this->route), 'class' => 'btn btn-ddw-date-save pull-right' ) ); $helper = new HelperForm(); $this->setupHelperConfigForm($helper, $this->route, 'process'); $helper->fields_value['id'] = $id_weekday; $helper->fields_value['id_carrier'] = $id_carrier; $helper->fields_value['id_shop'] = $id_shop; if ((int)$ddw_weekday->id_carrier > 0) { $helper->fields_value['weekday_enabled'] = $ddw_weekday->enabled; $helper->fields_value['min_days'] = $ddw_weekday->min_days; $helper->fields_value['max_days'] = $ddw_weekday->max_days; $helper->fields_value['timeslots_prep_minutes'] = $ddw_weekday->timeslots_prep_minutes; $helper->fields_value['minmax_enabled'] = $ddw_weekday->minmax_enabled; $helper->fields_value['weekday_cutofftime_enabled'] = $ddw_weekday->cutofftime_enabled; $helper->fields_value['min_days_postcutoff'] = $ddw_weekday->min_days_postcutoff; $helper->fields_value['day_order_limit'] = $ddw_weekday->order_limit; } Context::getContext()->smarty->assign(array( 'form' => $helper->generateForm($fields_form), 'id_carrier' => $id_carrier, 'ddw_weekday' => $ddw_weekday, 'ddw_timeslots' => $timeslots, 'hour_values' => range(0, 23), 'min_values' => range(0, 59), 'model' => 'weekdays' )); return $this->sibling->display($this->sibling->module_file, 'views/templates/admin/config/datepopup_edit.tpl'); } /** * process weekday form */ public function processForm() { $id = (int)Tools::getValue('id'); $id_carrier = (int)Tools::getValue('id_carrier'); $id_shop = (int)Tools::getValue('id_shop'); $ddw_weekday = new DDWWeekdayModel(); $ddw_weekday->loadWeekday($id_carrier, $id, $id_shop); if (empty($ddw_weekday->id_carrier)) { $ddw_weekday->id_carrier = $id_carrier; } if (empty($ddw_weekday->id_weekday)) { $ddw_weekday->id_weekday = $id; } if (empty($ddw_weekday->id_shop)) { $ddw_weekday->id_shop = $id_shop; } $weekday_cutofftime_parts = explode(':', Tools::getValue('weekday_cutofftime')); $weekday_cutofftime_hours = $weekday_cutofftime_parts[0]; $weekday_cutofftime_minutes = $weekday_cutofftime_parts[1]; $ddw_weekday->enabled = (int)Tools::getValue('weekday_enabled'); $ddw_weekday->minmax_enabled = (int)Tools::getValue('minmax_enabled'); $ddw_weekday->min_days = Tools::getValue('min_days'); $ddw_weekday->max_days = Tools::getValue('max_days'); $ddw_weekday->timeslots_prep_minutes = Tools::getValue('timeslots_prep_minutes'); $ddw_weekday->cutofftime_enabled = (int)Tools::getValue('weekday_cutofftime_enabled'); $ddw_weekday->cutofftime_hours = (int)$weekday_cutofftime_hours; $ddw_weekday->cutofftime_minutes = (int)$weekday_cutofftime_minutes; $ddw_weekday->min_days_postcutoff = (int)Tools::getValue('min_days_postcutoff'); $ddw_weekday->order_limit = (int)Tools::getValue('day_order_limit'); $ddw_weekday->save(); if ($ddw_weekday->id > 0) { DDWTimeslotModel::deleteAllByCarrier(Tools::getValue('id_carrier'), Context::getContext()->shop->id, Tools::getValue('id')); $timeslots = Tools::jsonDecode(Tools::getValue('ddw_timeslots')); $i = 0; if (is_array($timeslots)) { foreach ($timeslots as $timeslot) { $ddw_timeslot = new DDWTimeslotModel(); $ddw_timeslot->id_weekday = Tools::getValue('id'); $ddw_timeslot->id_ddw_specificdate = 0; $ddw_timeslot->id_carrier = $id_carrier; $ddw_timeslot->id_shop = Context::getContext()->shop->id; $ddw_timeslot->time_start = DDWTimeslotModel::formatHumanTime($timeslot->time_start); $ddw_timeslot->time_end = DDWTimeslotModel::formatHumanTime($timeslot->time_end); $ddw_timeslot->order_limit = (int)$timeslot->order_limit; $ddw_timeslot->position = $i; $ddw_timeslot->enabled = (int)$timeslot->enabled; $ddw_timeslot->add(false); $i++; } } } return json_encode(array()); } public function route() { switch (Tools::getValue('action')) { case 'renderlist': die($this->renderList()); case 'processform': die($this->processForm()); default: return $this->renderEditForm(); } } }