Учет остатков

Василий, можете описать алгоритм учета остатков — самый простой(без доп условий).
Хотя бы теорию(если есть пример — вообще классно). А то не могу выбрать правильное место для проверки.
Спасибо.
Евгений
07 июля 2013, 16:15
modx.pro
1
2 813
0

Комментарии: 13

Евгений
08 июля 2013, 20:36
0
У кого-нибудь есть идее?
Предполагаю что лучше будет проверять при оформлении заказа, но как тогда при событии msOnBeforeAddToOrder вернуть пользователю ошибку?
Спасибо!
    Василий Наумкин
    09 июля 2013, 05:55
    0
    Самое просто: добавить новое поле в товар и там хранить остатки. Это лучше сделать плагином, но можно и ТВ.

    Затем нужно проверять возможность добавления товара в корзину. Системным плагином по событию msOnBeforeAddToOrder это делать не получится, ибо я такого не предусмотрел =)

    Зато можно расширить класс корзины, и немного изменить метод add(), чтобы он проверял остатки и возвращал success() или error().

    В течении пары недель я планирую сделать такой простой учет остатков в стандартной версии MS2, без учета цветов, размеров и прочего, чисто ресурсами.
      Евгений
      09 июля 2013, 20:49
      0
      Спасибо за ответ!
      Я добавил поле remains, через плагин.
      И задумался где лучше это делать.
      Проверить наличие при добавлении в корзину а ведь могут в корзину добавить несколько человек, и потом оформить заказ и остаток уже будет в минусе(товара не хватит :) )

      А вот изменения этих остатков получается надо делать при оформлении заказа.

      Кстати, а у меня потом не будет ошибок при обновлении, из-за добавленного поля через плагин?
        Василий Наумкин
        09 июля 2013, 21:10
        0
        Логику работы ты уж сам продумывай.

        Проблем не будет, нет. Оно так специально и сделано.
          Мордынский Николай
          10 июля 2013, 13:46
          0
          просто еще раз проверять наличие при нажатии оформить если товар закончился выводить сообщение что опоздали вы ьбатенька
            Евгений
            10 июля 2013, 14:08
            0
            Так и хотел)
            Но:
            Системным плагином по событию msOnBeforeAddToOrder это делать не получится, ибо я такого не предусмотрел =)
            С другой стороны можно метод оформления заказа переписать на свой. Надо копать)
      Евгений
      10 июля 2013, 14:48
      0
      Василий, вопрос не по теме, но хотелось бы спросить.

      В последней версии магазина, есть такое изменение:
      Added placeholder [[+payment_link]] in the new user email. It will work only if payment method has function getPaymentLink(msOrder $order);
      Оно очень подходит для организации оплаты товара после проверки заказа менеджером… Но у меня не сработала с первого раза. Есть ли там какая-либо «магия»? В класс оплаты я добавил метод getPaymentLink(msOrder $order). Этого достаточно? Чтобы в письме по определенному статусу отправить ссылку на оплату?
      Artem Zig
      24 июля 2013, 12:25
      0
      Добрый день, только начинаю разбираться в miniShop2 (да и вообще в целом с php, xPdo, JSON и пр.), возник следующий вопрос, попробую объяснить:

      Если принимать платежи только через он-лайн (visa, mastercard, webmoney) системы, возможно ли реализовать списывание остатков (которые я добавлю самостоятельно плагином) только после успешного окончания платежа и ре-директа пользователя на страницу с успешной оплатой.

      Смысл в том что в интернет-магазине будут продаваться вещи в единственном экземпляре. И хочется реализовать подобную логику, во избежание следующей ситуации:
      1) Валера заказывает вещь через сайт
      2) Выбирает платеж через “Почту России” / оплата через терминал и пр.
      3) Оформляет заказ
      4) Вещь автоматически резервируется в магазине и никто из желающих не сможет ее купить, так как она в 1 экземпляре
      5) Валера встречает свою любовь детства и уходит в запой
      6) Ждем платеж от Валеры 3-5 дней, и не дождавшись, выводим вещь обратно на продажу.
      7) Ее покупает Вася.
      8) Через неделю Валера выходит из запоя, оплачивает вещь (которой уже нет в наличии) и ждет заказ который мы не сможем выполнить.

      Надеюсь смог объяснить, что хотел.

      Заранее спасибо за ответы/советы :)
        Василий Наумкин
        24 июля 2013, 14:19
        0
        При оплате происходит смена статуса заказа, которая соправоздается 2мя системными событиями: msOnBeforeChangeOrderStatus и msOnChangeOrderStatus. Одно событие до переключения, другое после.

        В них передаются 2 параметра: $order — то есть объект msOrder и $status — номер статуса. Из объекта msOrder можно вытащить любую информацию: и заказанные товары, и что угодно — учи xPDO.

        Документация по плагинам MODX.
          Artem Zig
          24 июля 2013, 17:42
          0
          спасибо! буду разбираться
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        13