Номер заказа в мобильном приложении

Интернет-магазин интегрирован с ресторанной системой IIKO, где у каждого заказа свой номер. Причем есть особенность что номер заказа не уникальный.
В таблице shop_order я добавил столбец order_number и при отправке заказа в IIKO я указываю в нем номер заказа из IIKO.

В мобильном приложении курьерам удобней видеть номера заказов из IIKO, а не ShopScript.
Есть ли возможность подменить номер заказа?

Первое и очевидное решение это подправить все методы API, используемые приложением и подменить номер.
Но править необходимо несколько методов (список, просмотр заказа, действия и прочее)
И правки затрутся при обновлении. Да и есть проблема в том что номер заказа не уникальный.
Получается нужен внутренний номер, который будет id записи в БД и отображаемый.

Есть ли другие варианты, кроме подмены хардкодом в методах API ?

2 ответа

  • 1
    realevd 9 октября 2018 03:57 #

    Реализовал следующим способом:

    В плагине создал копию класса shopOrderSearchMethod в файле lib/custom/shop.order.search.method.php. Таким образом метод API получение списка заказов обрабатывается кастомным классом, где в конце метода execute добавил подмену у всех заказов id_encoded на нужное мне значение.

    Но если в исходном классе появятся какие-нибудь новые поля или подобное, то приложение может отвалиться. Нужно следить при каждом обновлении ShopScript.

    Жаль нельзя таким способом наследовать класс, чтобы было:

        public function execute()
        {
            parent::execute();
            $this->replaceOrderEncodedIds();
        }


    • +1
      enso_studio@mail.ru enso_studio@mail.ru 9 октября 2018 04:40 #

      А почему это нельзя наследовать? Очень даже можно - плагин может иметь свои api методы.

      • +1
        realevd realevd 9 октября 2018 19:00 #

        Это я знаю. Но мне нужны не свои методы API, а переопределить API метод order.search приложения shop, который дергает мобильное приложение.

        Как заставить контроллер вызывать при этом не shopOrderSearchMethod::execute, а допустим shopPluginOrderSearchMethod? Ну или какой-нибудь другой свой класс в плагине?

        Если только каким-то хитрым rewrite в apache/nginx заменить на метод API плагина. Но это тоже не дело.

        И как ниже писал, исходников на приложение нет и заменить вызов метода на другой нет возможности.

  • 1
    enso_studio@mail.ru 9 октября 2018 04:36 #

    Неа, нужно было номер IIKO передавать как параметр заказа (shopOrderParamsModel) и тогда его легче было получить в письмах/формах.

    • +1
      realevd realevd 9 октября 2018 18:50 #

      В письмах и так проблем нет проставить свой номер заказа. Что {$order.iiko_number}, что {$order.params.iiko_number} особой разницы нет. Можно конечно хранить его было в shopOrderParamsModel, но исторически так получилось что номер в основной таблице и переделывать сейчас смысла нет. Кроме номера там еще есть guid заказа, который часто используется в запросах (найти заказ по guid) и когда guid в основной таблице, то не нужно делать лишний JOIN и на колонку можно индекс создать. В то время когда guid добавлял заодно добавил и колонку для номера заказа.


      Но проблема не в этом. Нужно отображать номер заказа из IIKO в официальном мобильном приложении для ShopScript, а точнее в его части по работе с курьерами. И не важно где хранится номер заказа, оно всегда отображает в качестве номера заказа то, что придет по API в поле id_encoded.

      Исходников на приложение нет и что-то поменять в нем не могу.

Добавить ответ

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