parent
90d7e1f866
commit
8627548d7c
@ -1,3 +1,6 @@
|
|||||||
|
## 2024-04-23 4.7.7
|
||||||
|
* Added transfer of services via ICML catalog
|
||||||
|
|
||||||
## 2024-04-22 4.7.6
|
## 2024-04-22 4.7.6
|
||||||
* Support WP 6.5
|
* Support WP 6.5
|
||||||
|
|
||||||
|
1
Makefile
1
Makefile
@ -47,4 +47,3 @@ coverage:
|
|||||||
|
|
||||||
build_archive:
|
build_archive:
|
||||||
zip -r $(ARCHIVE_NAME) ./src/*
|
zip -r $(ARCHIVE_NAME) ./src/*
|
||||||
|
|
||||||
|
@ -444,3 +444,9 @@ msgstr "Se requiere clave API con acceso a una tienda"
|
|||||||
|
|
||||||
msgid "The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match"
|
msgid "The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match"
|
||||||
msgstr "La moneda del sitio web es distinto a la tienda del CRM. Para el funcionamiento correcto de la integración, las monedas del CMS y CRM deben coincid"
|
msgstr "La moneda del sitio web es distinto a la tienda del CRM. Para el funcionamiento correcto de la integración, las monedas del CMS y CRM deben coincid"
|
||||||
|
|
||||||
|
msgid "Uploading services"
|
||||||
|
msgstr "Descarga de servicios"
|
||||||
|
|
||||||
|
msgid "Goods with the 'virtual' option enabled will be uploaded to Simla as services"
|
||||||
|
msgstr "Los bienes con la opción 'virtual' activada se cargarán en Simla como servicios"
|
||||||
|
@ -453,3 +453,9 @@ msgstr "Требуется API ключ с доступом к одному ма
|
|||||||
|
|
||||||
msgid "The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match"
|
msgid "The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match"
|
||||||
msgstr "Валюта сайта отличается от валюты магазина в CRM. Для корректной работы интеграции, валюты в CRM и CMS должны совпадать"
|
msgstr "Валюта сайта отличается от валюты магазина в CRM. Для корректной работы интеграции, валюты в CRM и CMS должны совпадать"
|
||||||
|
|
||||||
|
msgid "Uploading services"
|
||||||
|
msgstr "Выгрузка услуг"
|
||||||
|
|
||||||
|
msgid "Goods with the 'virtual' option enabled will be uploaded to Simla as services"
|
||||||
|
msgstr "Товары с включенной опцией 'виртуальные' будут выгружаться в CRM как услуги"
|
||||||
|
@ -144,6 +144,18 @@ abstract class WC_Retailcrm_Abstracts_Settings extends WC_Integration
|
|||||||
),
|
),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
$this->form_fields['icml_unload_services'] = [
|
||||||
|
'label' => __('Enabled', 'retailcrm'),
|
||||||
|
'title' => __('Uploading services', 'retailcrm'),
|
||||||
|
'class' => 'checkbox',
|
||||||
|
'type' => 'checkbox',
|
||||||
|
'desc_tip' => true,
|
||||||
|
'description' => __(
|
||||||
|
"Goods with the 'virtual' option enabled will be uploaded to Simla as services",
|
||||||
|
"retailcrm"
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
foreach (get_post_statuses() as $statusKey => $statusValue) {
|
foreach (get_post_statuses() as $statusKey => $statusValue) {
|
||||||
$this->form_fields['p_' . $statusKey] = [
|
$this->form_fields['p_' . $statusKey] = [
|
||||||
'title' => $statusValue,
|
'title' => $statusValue,
|
||||||
|
@ -36,6 +36,8 @@ if (!class_exists('WC_Retailcrm_Icml')) :
|
|||||||
|
|
||||||
protected $icmlWriter;
|
protected $icmlWriter;
|
||||||
|
|
||||||
|
protected $unloadServices = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WC_Retailcrm_Icml constructor.
|
* WC_Retailcrm_Icml constructor.
|
||||||
*
|
*
|
||||||
@ -47,6 +49,10 @@ if (!class_exists('WC_Retailcrm_Icml')) :
|
|||||||
$this->tmpFile = sprintf('%s.tmp', $this->file);
|
$this->tmpFile = sprintf('%s.tmp', $this->file);
|
||||||
$this->settings = get_option(WC_Retailcrm_Base::$option_key);
|
$this->settings = get_option(WC_Retailcrm_Base::$option_key);
|
||||||
$this->icmlWriter = new WC_Retailcrm_Icml_Writer($this->tmpFile);
|
$this->icmlWriter = new WC_Retailcrm_Icml_Writer($this->tmpFile);
|
||||||
|
$this->unloadServices = (
|
||||||
|
isset($this->settings['icml_unload_services'])
|
||||||
|
&& $this->settings['icml_unload_services'] === WC_Retailcrm_Base::YES
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function changeBindBySku($useXmlId)
|
public function changeBindBySku($useXmlId)
|
||||||
@ -252,7 +258,8 @@ if (!class_exists('WC_Retailcrm_Icml')) :
|
|||||||
'categoryId' => $termList,
|
'categoryId' => $termList,
|
||||||
'dimensions' => $dimensions,
|
'dimensions' => $dimensions,
|
||||||
'weight' => $weight,
|
'weight' => $weight,
|
||||||
'tax' => isset($tax) ? $tax['rate'] : 'none'
|
'tax' => isset($tax) ? $tax['rate'] : 'none',
|
||||||
|
'type' => ($this->unloadServices && $product->is_virtual()) ? 'service' : 'product',
|
||||||
];
|
];
|
||||||
|
|
||||||
if ($product->get_sku() !== '') {
|
if ($product->get_sku() !== '') {
|
||||||
|
@ -121,6 +121,7 @@ if (!class_exists('WC_Retailcrm_Icml_Writer')) :
|
|||||||
$this->writer->writeAttribute('id', $offer['id']);
|
$this->writer->writeAttribute('id', $offer['id']);
|
||||||
$this->writer->writeAttribute('productId', $offer['productId']);
|
$this->writer->writeAttribute('productId', $offer['productId']);
|
||||||
$this->writer->writeAttribute('quantity', (int) $offer['quantity'] ?? 0);
|
$this->writer->writeAttribute('quantity', (int) $offer['quantity'] ?? 0);
|
||||||
|
$this->writer->writeAttribute('type', $offer['type']);
|
||||||
|
|
||||||
if (isset($offer['categoryId'])) {
|
if (isset($offer['categoryId'])) {
|
||||||
if (is_array($offer['categoryId'])) {
|
if (is_array($offer['categoryId'])) {
|
||||||
|
@ -197,6 +197,9 @@ return [
|
|||||||
"Se requiere clave API con acceso a una tienda",
|
"Se requiere clave API con acceso a una tienda",
|
||||||
"The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match" =>
|
"The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match" =>
|
||||||
"La moneda del sitio web es distinto a la tienda del CRM. Para el funcionamiento correcto de la integración, las monedas del CMS y CRM deben coincid",
|
"La moneda del sitio web es distinto a la tienda del CRM. Para el funcionamiento correcto de la integración, las monedas del CMS y CRM deben coincid",
|
||||||
|
"Uploading services" => "Descarga de servicios",
|
||||||
|
"Goods with the 'virtual' option enabled will be uploaded to Simla as services" =>
|
||||||
|
"Los bienes con la opción 'virtual' activada se cargarán en Simla como servicios"
|
||||||
],
|
],
|
||||||
"language" => "es",
|
"language" => "es",
|
||||||
"x-generator" => "GlotPress/2.4.0-alpha",
|
"x-generator" => "GlotPress/2.4.0-alpha",
|
||||||
|
Binary file not shown.
@ -196,6 +196,9 @@ return [
|
|||||||
"Требуется API ключ с доступом к одному магазину",
|
"Требуется API ключ с доступом к одному магазину",
|
||||||
"The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match" =>
|
"The currency of the site differs from the currency of the store in CRM. For the integration to work correctly, the currencies in CRM and CMS must match" =>
|
||||||
"Валюта сайта отличается от валюты магазина в CRM. Для корректной работы интеграции, валюты в CRM и CMS должны совпадать",
|
"Валюта сайта отличается от валюты магазина в CRM. Для корректной работы интеграции, валюты в CRM и CMS должны совпадать",
|
||||||
|
"Uploading services" => "Выгрузка услуг",
|
||||||
|
"Goods with the 'virtual' option enabled will be uploaded to Simla as services" =>
|
||||||
|
"Товары с включенной опцией 'виртуальные' будут выгружаться в CRM как услуги"
|
||||||
],
|
],
|
||||||
"language" => "ru",
|
"language" => "ru",
|
||||||
"x-generator" => "GlotPress/2.4.0-alpha",
|
"x-generator" => "GlotPress/2.4.0-alpha",
|
||||||
|
Binary file not shown.
@ -5,7 +5,7 @@ Tags: Интеграция, Simla.com, simla
|
|||||||
Requires PHP: 7.0
|
Requires PHP: 7.0
|
||||||
Requires at least: 5.3
|
Requires at least: 5.3
|
||||||
Tested up to: 6.5
|
Tested up to: 6.5
|
||||||
Stable tag: 4.7.6
|
Stable tag: 4.7.7
|
||||||
License: GPLv1 or later
|
License: GPLv1 or later
|
||||||
License URI: http://www.gnu.org/licenses/gpl-1.0.html
|
License URI: http://www.gnu.org/licenses/gpl-1.0.html
|
||||||
|
|
||||||
@ -82,6 +82,9 @@ Asegúrate de tener una clave API específica para cada tienda. Las siguientes i
|
|||||||
|
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
= 4.7.7 =
|
||||||
|
* Added transfer of services via ICML catalog
|
||||||
|
|
||||||
= 4.7.6 =
|
= 4.7.6 =
|
||||||
* Support WP 6.5
|
* Support WP 6.5
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
* Description: Integration plugin for WooCommerce & Simla.com
|
* Description: Integration plugin for WooCommerce & Simla.com
|
||||||
* Author: RetailDriver LLC
|
* Author: RetailDriver LLC
|
||||||
* Author URI: http://retailcrm.pro/
|
* Author URI: http://retailcrm.pro/
|
||||||
* Version: 4.7.6
|
* Version: 4.7.7
|
||||||
* Tested up to: 6.5
|
* Tested up to: 6.5
|
||||||
* Requires Plugins: woocommerce
|
* Requires Plugins: woocommerce
|
||||||
* WC requires at least: 5.4
|
* WC requires at least: 5.4
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
*
|
*
|
||||||
* @link https://wordpress.org/plugins/woo-retailcrm/
|
* @link https://wordpress.org/plugins/woo-retailcrm/
|
||||||
*
|
*
|
||||||
* @version 4.7.6
|
* @version 4.7.7
|
||||||
*
|
*
|
||||||
* @package RetailCRM
|
* @package RetailCRM
|
||||||
*/
|
*/
|
||||||
|
@ -80,6 +80,7 @@ class WC_Retailcrm_Test_Case_Helper extends WC_Unit_Test_Case
|
|||||||
'product_description' => 'full',
|
'product_description' => 'full',
|
||||||
'stores_for_uploading' => ['woocommerce', 'main'],
|
'stores_for_uploading' => ['woocommerce', 'main'],
|
||||||
'woo_coupon_apply_field' => 'testField',
|
'woo_coupon_apply_field' => 'testField',
|
||||||
|
'icml_unload_services' => 'yes'
|
||||||
];
|
];
|
||||||
|
|
||||||
update_option(WC_Retailcrm_Base::$option_key, $options);
|
update_option(WC_Retailcrm_Base::$option_key, $options);
|
||||||
|
@ -17,6 +17,9 @@ class WC_Retailcrm_Icml_Test extends WC_Retailcrm_Test_Case_Helper
|
|||||||
{
|
{
|
||||||
WC_Helper_Product::create_simple_product();
|
WC_Helper_Product::create_simple_product();
|
||||||
WC_Helper_Product::create_variation_product();
|
WC_Helper_Product::create_variation_product();
|
||||||
|
|
||||||
|
$this->createVirtualProduct();
|
||||||
|
$this->setOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGenerate()
|
public function testGenerate()
|
||||||
@ -35,9 +38,9 @@ class WC_Retailcrm_Icml_Test extends WC_Retailcrm_Test_Case_Helper
|
|||||||
$this->assertNotEmpty($xmlArray['shop']['categories']['category']);
|
$this->assertNotEmpty($xmlArray['shop']['categories']['category']);
|
||||||
$this->assertCount(2, $xmlArray['shop']['categories']['category']);
|
$this->assertCount(2, $xmlArray['shop']['categories']['category']);
|
||||||
$this->assertNotEmpty($xmlArray['shop']['offers']['offer']);
|
$this->assertNotEmpty($xmlArray['shop']['offers']['offer']);
|
||||||
$this->assertCount(7, $xmlArray['shop']['offers']['offer']);
|
|
||||||
$this->assertNotEmpty($xmlArray['shop']['offers']['offer'][0]);
|
$this->assertNotEmpty($xmlArray['shop']['offers']['offer'][0]);
|
||||||
$this->assertNotEmpty($xmlArray['shop']['offers']['offer'][1]);
|
$this->assertNotEmpty($xmlArray['shop']['offers']['offer'][1]);
|
||||||
|
$this->assertNotEmpty($xmlArray['shop']['offers']['offer'][2]);
|
||||||
|
|
||||||
foreach ($xmlArray['shop']['offers']['offer'] as $product) {
|
foreach ($xmlArray['shop']['offers']['offer'] as $product) {
|
||||||
$this->assertNotEmpty($product['name']);
|
$this->assertNotEmpty($product['name']);
|
||||||
@ -48,6 +51,35 @@ class WC_Retailcrm_Icml_Test extends WC_Retailcrm_Test_Case_Helper
|
|||||||
$this->assertNotEmpty($product['vatRate']);
|
$this->assertNotEmpty($product['vatRate']);
|
||||||
$this->assertEquals('none', $product['vatRate']);
|
$this->assertEquals('none', $product['vatRate']);
|
||||||
$this->assertContains('Dummy', $product['productName']);
|
$this->assertContains('Dummy', $product['productName']);
|
||||||
|
$this->assertNotEmpty($product['@attributes']['type']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$attributesList = array_column($xmlArray['shop']['offers']['offer'], '@attributes');
|
||||||
|
$typeList = array_column($attributesList, 'type');
|
||||||
|
|
||||||
|
$this->assertContains('service', $typeList);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function createVirtualProduct()
|
||||||
|
{
|
||||||
|
$product = wp_insert_post([
|
||||||
|
'post_title' => 'Dummy Product',
|
||||||
|
'post_type' => 'product',
|
||||||
|
'post_status' => 'publish',
|
||||||
|
]);
|
||||||
|
|
||||||
|
update_post_meta($product, '_price', '10');
|
||||||
|
update_post_meta($product, '_regular_price', '10');
|
||||||
|
update_post_meta($product, '_sale_price', '');
|
||||||
|
update_post_meta($product, '_sku', 'DUMMY SKU');
|
||||||
|
update_post_meta($product, '_manage_stock', 'no');
|
||||||
|
update_post_meta($product, '_tax_status', 'taxable');
|
||||||
|
update_post_meta($product, '_downloadable', 'no');
|
||||||
|
update_post_meta($product, '_virtual', 'yes');
|
||||||
|
update_post_meta($product, '_stock_status', 'instock');
|
||||||
|
update_post_meta($product, '_weight', '1.1');
|
||||||
|
wp_set_object_terms($product, 'simple', 'product_type');
|
||||||
|
|
||||||
|
return new WC_Product_Simple($product);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user