MiniShop2. Отдельная доставка для каждой категории

Подскажите, как правильнее реализовать данную задачу.
Есть магазин, в нем есть несколько категории товаров.У каждой категории своя логика обсчета стоимости доставки. При этом если из одной категории более одного товара, то стоимость доставки каждого товара считается отдельно.
Например:
для категории 1 стоимость доставки до 6ти единиц 500р., от 6 до 15ти единиц стоимость 1000р., от 25ти единиц бесплатно.
для категории 2 стоимость доставки до 3х единиц 400р, от 3х до 5ти единиц стоимость 800р.
ну и так далее.
То есть если в корзине мы имеем:
1) товар 1 из категории 1 в количестве 5шт.(Доставка 500р)
2) товар 2 из категории 1 в количестве 9шт.(Доставка 1000р)
3) товар 3 из категории 1 в количестве 29шт.(Доставка 0р)
4) товар 1 из категории 2 в количестве 4шт.(Доставка 800р)
итого стоимость товара + доставка 2300р
grasp graspoff
23 марта 2014, 11:55
modx.pro
4
2 198
0

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

Aртур Чикин
23 марта 2014, 18:29
0
для категории 1 стоимость доставки до 6ти единиц 500р., от 6 до 15ти единиц стоимость 1000р.
Всегда думал что чем больше заказываешь тем выгоднее получается. У вас же как то на оборот. Выгоднее оформить несколько маленьких заказов чем один общий

И потом не совсем могу понять для каких целей нужно все товары отделять в отдельные посылки и отправлять одному пользователю в место того что бы сложить все в одну большую посылку и отправить?
    grasp graspoff
    23 марта 2014, 18:34
    0
    Доставка 5 единиц 500р = 100р/ед., за 15 единиц 1000р ~ 66р./ед.
    А если вес единицы 300-400 кг, то проблематично отправить консолидированную посылку.
      Володя
      23 марта 2014, 18:53
      0
      наверно написанием своего класса оформления заказа — msOrderHandler
      Тут подробнее — bezumkin.ru/modx/minishop2/classes/804/
        grasp graspoff
        23 марта 2014, 20:10
        0
        Я просто не очень понимаю, как для каждого отдельного товара доставку привязать.
          Aртур Чикин
          23 марта 2014, 20:13
          -1
          Написать подробное ТЗ и нанять PHP разработчика.
            grasp graspoff
            23 марта 2014, 20:22
            -1
            Да у меня в общем то все готово. Только в этом затык. Если через msOrderHandler точно получится, то я думаю разберусь. Я на самом деле уточнить хотел, через getcost делать, или как то по другому. И да, спасибо вам большое за ваш ценный комментарий :)
              Володя
              23 марта 2014, 20:44
              +1
              Ну а почему не получится? Получаете список товаров, дергаете их категории с ценами за доставку. условные единицы (как прописать уж придумаете). И высчитываете общую стоимость…
                grasp graspoff
                24 марта 2014, 11:59
                0
                Владимир спасибо. Буду реализовывать.
                  grasp graspoff
                  24 марта 2014, 19:40
                  0
                  Владимир еще раз спасибо. Все получилось.
                    Володя
                    24 марта 2014, 19:50
                    0
                    Да пожалуйста! )
                    Можете код приложить, может кому то еще пригодится…
                      grasp graspoff
                      24 марта 2014, 19:56
                      3
                      +1
                      class myDelivery extends msDeliveryHandler {
                          public function getCost(msOrderInterface $order, msDelivery $delivery, $cost=0) {
                          $totalCostDL=0;
                          $products=$this->ms2->cart->get();
                          foreach($products as $product){
                              $costDL=$this->getPrDlCost($product);
                              $totalCostDL += $costDL;
                          }
                          $cost += $totalCostDL;
                          return $cost;
                      	}
                      Ну и функция с логикой
                      private function getPrDlCost($product) {
                              $PrDlCost=1000000;
                              $pids = $this->modx->getParentIds($product['id'],1);
                              $PrCategory = $pids[0];
                              $PrCount = $product[count];
                              switch ($PrCategory) {
                      	case '67': 
                      				if ($PrCount <= 6) $PrDlCost = 1200;
                      				if ($PrCount > 6 && $PrCount <= 15) $PrDlCost = 1700;
                      				if ($PrCount > 15 && $PrCount < 25) $PrDlCost = 3900;
                      				if ($PrCount >= 25) $PrDlCost = 0;
                                      break;
                      		....
                      	}

          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          11