Support » Plugin: WooCommerce and 1C:Enterprise/1С:Предприятие Data Exchange » Выгрузка нескольких типов цен

  • Resolved maxmatveevv

    (@maxmatveevv)


    Добрый день, подскажите как добавить выгрузку 2 типов цен?
    Оптовая цена реализована плагином WooCommerce Wholesale Prices, так же могу использовать плагин WooCommerce Prices By User Role. Есть кусок кода который нашел для реализации с плагином WooCommerce Prices By User Role, но не пойму что вставить:
    В функции wc1c_offers_end_element_handler добавил код:

    elseif (@$names[$depth – 1] == ‘Цены’ && $name == ‘Цена’) {
    if (!isset($wc1c_offer[‘Цена’]) && (!isset($wc1c_price[‘ИдТипаЦены’]) || $wc1c_price[‘ИдТипаЦены’] == $wc1c_price_type[‘Ид’])) $wc1c_offer[‘Цена’] = $wc1c_price;
    elseif (isset($wc1c_price[‘ИдТипаЦены’]) && $wc1c_price[‘ИдТипаЦены’] != $wc1c_price_type[‘Ид’]) {
    $wc1c_offer[‘Цены’][$wc1c_price[‘ИдТипаЦены’]] = $wc1c_price;
    }
    }

    В функции wc1c_replace_offer_post_meta этот код:

    $prices = array(
    ‘ЧТО НУЖНО ВСТАВИТЬ ТУТ’ => (isset($offer[‘Цены’][‘386cb545-136d-11e6-8985-001e67092268’][‘ЦенаЗаЕдиницу’]) ? wc1c_parse_decimal($offer[‘Цены’][‘386cb545-136d-11e6-8985-001e67092268’][‘ЦенаЗаЕдиницу’]) : wc1c_parse_decimal($offer[‘Цена’][‘ЦенаЗаЕдиницу’]))
    );
    $post_meta[‘festiUserRolePrices’] = ‘{‘;
    if ($prices) {
    foreach ($prices as $prices_name => $prices_value) {
    $post_meta[‘festiUserRolePrices’] .= ‘”‘.$prices_name.'”:”‘.$prices_value.'”,’;
    }
    $post_meta[‘festiUserRolePrices’] = substr($post_meta[‘festiUserRolePrices’], 0, -1);
    $post_meta[‘festiUserRolePrices’] .= ‘}’;
    $current_post_meta = get_post_meta($post_id);
    foreach ($current_post_meta as $meta_key => $meta_value) {
    $current_post_meta[$meta_key] = $meta_value[0];
    }

    foreach ($current_post_meta as $meta_key => $meta_value) {
    if (array_key_exists($meta_key, $post_meta)) continue;
    if($meta_key != ‘festiUserRolePrices’) continue;
    delete_post_meta($post_id, $meta_key);
    }
    }

    Заранее спасибо

Viewing 6 replies - 1 through 6 (of 6 total)
  • sichinawa

    (@sichinawa)

    Мне кажется, что 1С не отдает 2 типа цен при обмене. Вам скорее всего надо это реализовывать формулой внутри WC.

    maxmatveevv

    (@maxmatveevv)

    Отдает, выдержка из файла обмена:
    <Цены><Цена><ИдТипаЦены>2d8726df-a4df-11ea-ba91-6c2b59cdf893</ИдТипаЦены><ЦенаЗаЕдиницу>183</ЦенаЗаЕдиницу><Валюта>643</Валюта><Единица>PCE</Единица><Коэффициент>1</Коэффициент></Цена><Цена><ИдТипаЦены>dee5bf38-abd6-11ea-ba92-6c2b59cdf893</ИдТипаЦены><ЦенаЗаЕдиницу>126.43</ЦенаЗаЕдиницу><Валюта>643</Валюта><Единица>PCE</Единица><Коэффициент>1</Коэффициент></Цена></Цены>
    Насколько тут видно 2 типа цены передается

    maxmatveevv

    (@maxmatveevv)

    а о какой формуле речь?

    sichinawa

    (@sichinawa)

    @maxmatveevv какой-то плагин мне попадался, для формирования цен, давно это было. Я тоже данным вопросом был как-то озадачен. Потом понял, что мне проще реализовать это купоном для оптовых клиентов.

    maxmatveevv

    (@maxmatveevv)

    Купоном в смысле какой то скидкой? если так то этот вариант не подойдет, так как нет определенного формирования цены на товар (разный процент наценки). В любом случае спасибо за оперативный ответ, может у кого найдется решение или подобная реализация. Вообще не нашел вариантов с плагинами которые бы выгружали несколько цен.Только дорабатывать

    maxmatveevv

    (@maxmatveevv)

    Нашел решение, может кому понадобится:
    Вместе этой функции:
    elseif (@$names[$depth – 1] == ‘Цены’ && $name == ‘Цена’) {
    if (!isset($wc1c_offer[‘Цена’]) && (!isset($wc1c_price[‘ИдТипаЦены’]) || $wc1c_price[‘ИдТипаЦены’] == $wc1c_price_type[‘Ид’])) $wc1c_offer[‘Цена’] = $wc1c_price;
    else $wc1c_offer[“Цена_{$wc1c_price[‘ИдТипаЦены’]}”] = $wc1c_price;
    }

    вставляем это:

    elseif (@$names[$depth – 1] == ‘Цены’ && $name == ‘Цена’) {
    if (!isset($wc1c_offer[‘Цена’]) && (!isset($wc1c_price[‘ИдТипаЦены’]) || $wc1c_price[‘ИдТипаЦены’] == $wc1c_price_type[‘Ид’])) $wc1c_offer[‘Цена’] = $wc1c_price;
    elseif (isset($wc1c_price[‘ИдТипаЦены’]) && $wc1c_price[‘ИдТипаЦены’] != $wc1c_price_type[‘Ид’]) {
    $wc1c_offer[‘Цены’][$wc1c_price[‘ИдТипаЦены’]] = $wc1c_price;
    }
    }

    Далее в функции wc1c_replace_offer_post_meta вставляем:

    $prices = array(
    ‘ЗДЕСЬ ВАШ ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ ИЗ ПЛАГИНА’ => (isset($offer[‘Цены’][‘dee5bf38-abd6-11ea-ba92-6c2b59cdf893’][‘ЦенаЗаЕдиницу’]) ? wc1c_parse_decimal($offer[‘Цены’][‘dee5bf38-abd6-11ea-ba92-6c2b59cdf893’][‘ЦенаЗаЕдиницу’]) : wc1c_parse_decimal($offer[‘Цена’][‘ЦенаЗаЕдиницу’]))
    );
    $post_meta[‘festiUserRolePrices’] = ‘{‘;
    if ($prices) {
    foreach ($prices as $prices_name => $prices_value) {
    $post_meta[‘festiUserRolePrices’] .= ‘”‘.$prices_name.'”:”‘.$prices_value.'”,’;
    }
    $post_meta[‘festiUserRolePrices’] = substr($post_meta[‘festiUserRolePrices’], 0, -1);
    $post_meta[‘festiUserRolePrices’] .= ‘}’;
    $current_post_meta = get_post_meta($post_id);
    foreach ($current_post_meta as $meta_key => $meta_value) {
    $current_post_meta[$meta_key] = $meta_value[0];
    }

    foreach ($current_post_meta as $meta_key => $meta_value) {
    if (array_key_exists($meta_key, $post_meta)) continue;
    if($meta_key != ‘festiUserRolePrices’) continue;
    delete_post_meta($post_id, $meta_key);
    }
    }

    Вместо “dee5bf38-abd6-11ea-ba92-6c2b59cdf893” ваш тип цены из offers.xml

    Все изменения в файле offers.php

Viewing 6 replies - 1 through 6 (of 6 total)
  • You must be logged in to reply to this topic.