Автор Тема: Ошибка при установке скидок  (Прочитано 1185 раз)

10 Февраль 2015, 10:00:36
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте. Приобрел модуль "Менеджер скидок", устанавливает скидки быстро и быстро их отменяет. Но все работало нормально, пока не перенес сайт на другой сервер. При сохранении параметров скидки пишет, либо дата указана неверно, либо выдает то, что на скриншоте. Посмотрите, пожалуйста, скажите, в чем именно ошибка?
10 Февраль 2015, 11:29:23
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Удалите старые скидки, удалите модуль, установите заново модуль.
10 Февраль 2015, 11:46:51
Ответ #2
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
где именно удалить старые скидки? на данный момент нет никаких скидок, в настройках модуля очищал все данные до этого, модуль удалял и заново устанавливал, но тот же результат. Может старые скидки где-то сохранились в каких-то файлах?
10 Февраль 2015, 11:54:14
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В базе данных в таблице ps_specific_price. Еще проверьте создает ли новые таблицы ваш модуль.
10 Февраль 2015, 12:07:46
Ответ #4
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Прилагаю скриншот бд, еще есть такие таблицы как ps_specific_price_prioriti, ps_specific_price_rule, ps_specific_price_condition, ps_specific_price_condition_group. Как узнать, какие таблицы создает модуль, а какие уже были ?
10 Февраль 2015, 12:09:39
Ответ #5
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
10 Февраль 2015, 12:17:52
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
В папке модуля файл php с именем модуля. В нем указано устанавливаются таблицы или нет.
10 Февраль 2015, 12:31:56
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Модуль запускате от суперадмина? Права пользователя проверяли?
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Февраль 2015, 12:38:50
Ответ #8
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
модуль загружал через тотал коммандер, затем произвел настройки скидок в админ-панеле в модуле, получается вот такая ошибка. Права не проверял. Модуль купил на Престалаб. Вот файл php, мне там вообще не ясно, создает этот модуль таблицы или нет.
10 Февраль 2015, 12:48:40
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
В модуле не опрелено значение для переменной id_customer. В новой версии prestashop в классе SpecificPrice.php обязательно указвать id_customer. Поэтому ошибка.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
10 Февраль 2015, 13:14:44
Ответ #10
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
где именно надо указывать этот id ?
10 Февраль 2015, 13:31:49
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
У вас в выводе ошибок все указано
Цитировать
SpecificPricing->id_customer is empty
При создании скидки нужно определить id_customer. В файле модуля добавьте определение этой переменной.
10 Февраль 2015, 14:06:57
Ответ #12
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Прописал то, что выделено жирным, правильно или надо еще что-то добавить?
<?php
private function _postValidation()
{
if(Tools::getValue('reductionmanager_from')&&(!Validate::isDate(Tools::getValue('reductionmanager_from'))))
$this->_postErrors[] = $this->l('Invalid').' '.$this->l('Date from');
if(Tools::getValue('reductionmanager_to')&&(!Validate::isDate(Tools::getValue('reductionmanager_to'))))
$this->_postErrors[] = $this->l('Invalid').' '.$this->l('Date to');
if(Tools::getValue('reductionmanager_reduction')&&(!Validate::isPrice(Tools::getValue('reductionmanager_reduction'))))
$this->_postErrors[] = $this->l('Invalid').' '.$this->l('Reduction');
if(Tools::getValue('reductionmanager_quantity')&&(!Validate::isInt(Tools::getValue('reductionmanager_quantity'))))
$this->_postErrors[] = $this->l('Invalid').' '.$this->l('Quantity');
if(Tools::getValue('reductionmanager_category')&&(!Validate::isInt(Tools::getValue('reductionmanager_category'))))
$this->_postErrors[] = $this->l('Invalid').' '.$this->l('Category');
}

private function _postProcess()
{
        
$products=self::getSimpleProducts(Tools::getValue('categoryBox'));
       [
b$id_customer 0;  [/b]
        
$id_shop 0;
        
$id_currency 0;
        
$id_country 0;
        
$id_group 0;
        
$price 0;
        
$from_quantity Tools::getValue('reductionmanager_quantity');
        
$reduction = (float)(Tools::getValue('reductionmanager_reduction'));
        
$reduction_type = !$reduction 'amount' Tools::getValue('reductionmanager_type');
        
$from Tools::getValue('reductionmanager_from');
        
$to Tools::getValue('reductionmanager_to');

        
$success=0;
        
$errors=0;

        foreach(
$products as $product)
        {
            
$specificPrice = new SpecificPrice();
[b]$specificPrice ->id_customer $customer['id_customer'];[/b]
            
$specificPrice->id_product $product['id_product'];
            
$specificPrice->id_shop = (int)($id_shop);
            
$specificPrice->id_currency = (int)($id_currency);
            
$specificPrice->id_country = (int)($id_country);
            
$specificPrice->id_group = (int)($id_group);
            
$specificPrice->price = (float)($price);
            
$specificPrice->from_quantity = (int)($from_quantity);
            
$specificPrice->reduction = (float)($reduction_type == 'percentage' $reduction 100 $reduction);
            
$specificPrice->reduction_type $reduction_type;
            
$specificPrice->from = !$from '0000-00-00 00:00:00' $from;
            
$specificPrice->to = !$to '0000-00-00 00:00:00' $to;
if ($specificPrice->add())
                
$success++;
            else
                
$errors++;
        }
$this->_html .= $this->displayConfirmation($this->l('Updated').' ' $success .' ' $this->l('products').'. ' .$this->l('Errors').' ' .$errors);
}
10 Февраль 2015, 14:23:49
Ответ #13
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Попробуйте установить, если в коде ошибки, то будет сообщение при установки модуля.
10 Февраль 2015, 15:12:52
Ответ #14
  • Пользователь
  • **
  • Сообщений: 78
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
все равно выдает ошибку, и как я понимаю, не одну. Вот в раскрытом виде, вероятно они все связаны. Понятно, что нужно прописать какой-то код с переменной id_customer в файле ObjectModel.php, но какой???
[b]Property SpecificPrice->id_customer is empty
at line 837 in file classes/ObjectModel.php[/b]

831.
832. $message = $this->validateField($field, $this->$field);
833. if ($message !== true)
834. {
835. if ($die)
836. throw new PrestaShopException($message);
837. return $error_return ? $message : false;
838. }
839. }
840.
841. return true;

[b]ObjectModelCore->validateFields - [line 255 - classes/ObjectModel.php] - [0 Argument][/b]
249. *
250. * @return array All object fields
251. */
252. public function getFields()
253. {
254. $this->validateFields();
255. $fields = $this->formatFields(self::FORMAT_COMMON);
256.
257. // For retro compatibility
258. if (Shop::isTableAssociated($this->def['table']))
259. $fields = array_merge($fields, $this->getFieldsShop());

[b]ObjectModelCore->getFields - [line 455 - classes/ObjectModel.php] - [0 Argument][/b]
449. // Database insertion
450. if (isset($this->id) && !Tools::getValue('forceIDs'))
451. unset($this->id);
452. if (Shop::checkIdShopDefault($this->def['table']))
453. $this->id_shop_default = min($id_shop_list);
454. if (!$result = ObjectModel::$db->insert($this->def['table'], $this->getFields(), $null_values))
455. return false;
456.
457. // Get object id in database
458. $this->id = ObjectModel::$db->Insert_ID();
459.

[b]ObjectModelCore->add - [line 94 - classes/SpecificPrice.php] - [2 Arguments][/b]
88. protected static $_specificPriceCache = array();
89. protected static $_cache_priorities = array();
90.
91. public function add($autodate = true, $nullValues = false)
92. {
93. if (parent::add($autodate, $nullValues))
94. {
95. // Flush cache when we adding a new specific price
96. SpecificPrice::$_specificPriceCache = array();
97. Product::flushPriceCache();
98. // Set cache of feature detachable to true

[b]SpecificPriceCore->add - [line 173 - modules/reductionmanager/reductionmanager.php] - [0 Argument][/b]
167.             $specificPrice->from_quantity = (int)($from_quantity);
168.             $specificPrice->reduction = (float)($reduction_type == 'percentage' ? $reduction / 100 : $reduction);
169.             $specificPrice->reduction_type = $reduction_type;
170.             $specificPrice->from = !$from ? '0000-00-00 00:00:00' : $from;
171.             $specificPrice->to = !$to ? '0000-00-00 00:00:00' : $to;
172. if ($specificPrice->add())
173.                 $success++;
174.             else
175.                 $errors++;
176.         }
177. $this->_html .= $this->displayConfirmation($this->l('Updated').' ' . $success .' ' . $this->l('products').'. ' .$this->l('Errors').' ' .$errors);

[b]reductionmanager->_postProcess - [line 43 - modules/reductionmanager/reductionmanager.php] - [0 Argument][/b]
37. {
38. if (Tools::isSubmit('submitreductionmanager'))
39. {
40. $this->_postValidation();
41. if (!sizeof($this->_postErrors))
42. $this->_postProcess();
43. else
44. foreach ($this->_postErrors AS $err)
45. $this->_html .= $this->displayError($err);;
46. }
47.         elseif (Tools::isSubmit('submitclear'))

[b]reductionmanager->getContent - [line 685 - controllers/admin/AdminModulesController.php] - [0 Argument][/b]
679. // We check if method of module exists
680. if (!method_exists($module, $method))
681. throw new PrestaShopException('Method of module can\'t be found');
682.
683. // Get the return value of current method
684. $echo = $module->{$method}();
685.
686. // After a successful install of a single module that has a configuration method, to the configuration page
687. if ($key == 'install' && $echo === true && strpos(Tools::getValue('install'), '|') === false && method_exists($module, 'getContent'))
688. Tools::redirectAdmin(self::$currentIndex.'&token='.$this->token.'&configure='.$module->name.'&conf=12');
689. }

[b]AdminModulesControllerCore->postProcessCallback - [line 811 - controllers/admin/AdminModulesController.php] - [0 Argument][/b]
805. $ppmReturn = $this->$ppm();
806. }
807.
808. // Call appropriate module callback
809. if (!isset($ppmReturn))
810. $this->postProcessCallback();
811.
812. if ($back = Tools::getValue('back'))
813. Tools::redirectAdmin($back);
814. }
815.

[b]AdminModulesControllerCore->postProcess - [line 158 - classes/controller/Controller.php] - [0 Argument][/b]
152. // setMedia MUST be called before postProcess
153. if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
154. $this->setMedia();
155.
156. // postProcess handles ajaxProcess
157. $this->postProcess();
158.
159. if (!empty($this->redirect_after))
160. $this->redirect();
161.
162. if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))

[b]ControllerCore->run - [line 348 - classes/Dispatcher.php] - [0 Argument][/b]
342. // Execute hook dispatcher
343. if (isset($params_hook_action_dispatcher))
344. Hook::exec('actionDispatcher', $params_hook_action_dispatcher);
345.
346. // Running controller
347. $controller->run();
348. }
349. catch (PrestaShopException $e)
350. {
351. $e->displayMessage();
352. }

[b]DispatcherCore->dispatch - [line 53 - admin1911/index.php] - [0 Argument][/b]
47. $_POST['controller'] = strtolower($_POST['tab']);
48. if (!isset($_REQUEST['controller']) && isset($_REQUEST['tab']))
49. $_REQUEST['controller'] = strtolower($_REQUEST['tab']);
50.
51. // Prepare and trigger admin dispatcher
52. Dispatcher::getInstance()->dispatch();