Вы здесь

Как создать розничную цену на основе закупочной?

0

У товара есть цена закупки.

Нужно создать вторую цену на основе коэффициента, допустим умножением цены закупки на 1.2 (+20%).
Цену закупки покупатель видеть не должен ни на каком этапе оформления заказа, а должен оперировать только ценой, полученной в результате работы коэффициента.

Еще очень желательно иметь возможность изменения коэффициента в любой момент с автоматическим пересчетом цен на все товары.

Насколько это реально сделать на Commerce, Drupal 8?

Пытался пойти разными путями, изучил несклько модулей для комерца, но пока без результатно.

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

Версия Drupal: 
8.x
Связанные проекты: 
Drupal Commerce
Вопрос задан 28.01.2017 - 01:14

Ответы

0

Не стал делать на комерце. Сделал на Basic Cart. Код, формирующий цены на основе закупочной получился примерно таким:

        $products = \Drupal::entityManager()->getStorage('node')->loadByProperties(array('type' => 'product'));;

        foreach ($products as $nid => $product) {
            $product->set("add_to_cart_price", $product->field_product_whoole_price->value*1.3);
            $product->save();
        }
Ответ дан 29.01.2017 - 04:49

Вопрос - а куда этот код нужно помещать ?

И пожелание. Если это сайт на заказ, то писать коэффициент, формирующий цену, в код - не очень хорошее решение. Завтра заказчики заходят поменять этот коэффициент и сами это сделать не смогут.

Комментарий оставлен 29.01.2017 - 13:27

у меня этот код написан в данном файле:
\modules\custom\click_admin_menu\src\Plugin\Block\ClickAdminMenu.php

<?php
/**
 * @file
 * Contains \Drupal\click_admin_menu\Plugin\Block\YourBlockName.
 */

namespace Drupal\click_admin_menu\Plugin\Block;
use Drupal\Core\Block\BlockBase;
use Drupal\node\Entity\Node;

/**
 * Provides my custom block.
 *
 * @Block(
 *   id = "clickmenu",
 *   admin_label = @Translation("click admin menu"),
 *   category = @Translation("Blocks")
 * )
 */
class ClickAdminMenu extends BlockBase {

/**
   * {@inheritdoc}
   */
    public function build() {

        //$node = Node::load(3);

        $products = \Drupal::entityManager()->getStorage('node')->loadByProperties(array('type' => 'product'));

        foreach ($products as $nid => $product) {
            $buy_price = $product->field_product_whoole_price->value;

            // если закупка меньше 100 руб, ставим наценку 30%
            if($buy_price < 100){
                $markup = 1.35;

            // если закупка меньше 500 руб, наценка 20%
            } else if($buy_price > 100 & $buy_price < 500){
                $markup = 1.25;

            // если закупка больше 500 руб, наценка 15%
            } else if($buy_price > 500){
                $markup = 1.25;
            } 

            $product->set("add_to_cart_price", $buy_price*$markup);
            $product->save();
        }



        $destination = substr($_SERVER['REQUEST_URI'], 1);

        return array(
            '#attached' => array(
                'library' =>  array(
                  'click_admin_menu/click_admin_menu'
                ),
              ),
              '#type' => 'markup',
              '#markup' => '',
        );
    }

}
Комментарий оставлен 09.09.2017 - 10:24