Трансферы - отсутствует информация о складе в хуке Не принято

1

Не буду мучать долгими предысториями. Просто факт. При изменении остатков через трансферы в хук не передается информация о складе. Вообще. Лишь sku_id & count. У меня от этого плагин не может корректно работать.

11 комментариев

  • +1
    Евгений Леман Евгений Леман 31 октября 2018 19:40 #

    Ну и зачем тему сюда то перенесли? В бег-репортах ей и место. Не должен срабатывать хук на новое поступление. Особенно в таком виде.

  • +1
    Павел Трофимов Павел Трофимов 31 октября 2018 00:55 #

    А о каком хуке речь?

    • +1
      Евгений Леман Евгений Леман 31 октября 2018 02:12 #

      И действительно. Самое главное то я и забыл указать :) product_save()

      • +1
        Павел Трофимов Павел Трофимов 31 октября 2018 02:57 #

        Ну... В принципе-то по sku_id можно из модельки shopStockProducts получить всю инфу по складам. А каждый раз ее оттуда дергать при манипуляциях с товаром, наверное, не очень разумно с т.з. ресурсоемкости.

        • +1
          Евгений Леман Евгений Леман 31 октября 2018 03:06 #

          Слишком уж костыльно и затратно. Точно не годится для опубликованного продажного плагина.

          • +1
            Павел Трофимов Павел Трофимов 31 октября 2018 03:27 #

            Дык что получается-то... Получается, что для плагина, которому это действительно нужно самому запросить - это затратно, а вот если оно через хук прилетать будет всем подряд, предварительно таким же образом запрашиваясь - это не затратно? =)  Неувязочка =)

            З.Ы. Там отдельный метод есть получения инфы по sku_id

            • +1
              Евгений Леман Евгений Леман 31 октября 2018 03:46 #

              Чтобы передавать ID склада, который мы указываем при трансфере, нужно делать отдельный запрос? Ну ок.

            • +1
              Евгений Леман Евгений Леман 31 октября 2018 04:09 #

              Вот блин, вынудил меня код ковырять... Там ошибка заключается внутри метода applyStockDiffs() модели shopTransfer:

              foreach ($stock_diff_map as $stock_id => $diff) {
              	if (!isset($all_stocks[$stock_id])) {
              		continue;
              	}
              	$diff = (int) $diff;
              	if ($diff == 0) {
              		continue;
              	}
              	if (isset($product->skus[$sku_id]['stock'][$stock_id])) {
              		$data[$sku_id]['stock'][$stock_id] = $product->skus[$sku_id]['stock'][$stock_id] + $diff;
              	} else {
              		$data[$sku_id]['stock'][$stock_id] = $diff;
              	}
              }
              

              $data в последующем и передается в хук. И склады тут указываются как и должны... но только при условии, что склад существует. В этом и загвоздка при трансфере нового поступления. В этом случае инфа о складе вообще не передается.

              Не знаю зачем для этого используют трансферы, но это уже дело клиента(и ему подобных), который обнаружил недочет и сообщил мне.

              • +1
                Евгений Леман Евгений Леман 31 октября 2018 04:13 #

                А если быть точнее, то хук в принципе не должен вызываться в подобном случае. Ведь у товара нет никаких изменений. Трансфер лишь "в пути". Ну или... не мне об этом думать и не в 4 часа ночи :)

                Зато поковырявшись я нашел простой временный фикс для плагина.

                • +1
                  Павел Трофимов Павел Трофимов 31 октября 2018 05:08 #

                  Зато поковырявшись я нашел простой временный фикс для плагина.

                  И это главное! =)

                  А вообще да, согласен, нечего там хуку product_save ошиваться...

                • +1
                  EnsoStudio EnsoStudio 31 октября 2018 11:55 #

                  Вроде логично что при "Новое поступление (нет склада-источника)" не передаются данные.

                  в $data['instance'] передается объект shopProduct т.ч. никаких доп.запросов для получения списка складов не требуется.

                  Добавить комментарий

                  Чтобы добавить комментарий, зарегистрируйтесь или войдите