1
0
mirror of synced 2025-01-19 09:21:41 +03:00

Корректировка получения НДС товаров в каталоге

This commit is contained in:
Mozgito 2022-08-22 10:26:21 +03:00
parent f87c07e2e1
commit a012f48a20
6 changed files with 55 additions and 6 deletions

View File

@ -1,3 +1,6 @@
## 2022-08-22 v.6.1.5
- Корректировка получения НДС товаров в каталоге
## 2022-07-21 v.6.1.4 ## 2022-07-21 v.6.1.4
- Исправление ошибки при записи товаров в HL блок лояльности - Исправление ошибки при записи товаров в HL блок лояльности

View File

@ -1 +1 @@
- Исправление ошибки при записи товаров в HL блок лояльности - Корректировка получения НДС товаров в каталоге

View File

@ -1,6 +1,6 @@
<?php <?php
$arModuleVersion = [ $arModuleVersion = [
'VERSION' => '6.1.4', 'VERSION' => '6.1.5',
'VERSION_DATE' => '2022-07-21 12:00:00' 'VERSION_DATE' => '2022-08-22 11:00:00'
]; ];

View File

@ -57,6 +57,7 @@ class QueryParamsMolder
'CATALOG_GROUP_' . $basePriceId, 'CATALOG_GROUP_' . $basePriceId,
'ID', 'ID',
'LID', 'LID',
'VAT_ID',
]; ];
return $params; return $params;

View File

@ -6,6 +6,7 @@ use Bitrix\Highloadblock\HighloadBlockTable;
use CCatalog; use CCatalog;
use CCatalogGroup; use CCatalogGroup;
use CCatalogSku; use CCatalogSku;
use CCatalogVat;
use CIBlock; use CIBlock;
use Intaro\RetailCrm\Service\Hl; use Intaro\RetailCrm\Service\Hl;
use RetailcrmConfigProvider; use RetailcrmConfigProvider;
@ -79,12 +80,17 @@ class SettingsService
/** /**
* @var string * @var string
*/ */
public $setupProfileName = ''; public $setupProfileName = '';
/** /**
* @var array * @var array
*/ */
public $priceTypes = []; public $priceTypes = [];
/**
* @var array
*/
public $vatRates = [];
/** /**
* @var \Intaro\RetailCrm\Icml\SettingsService|null * @var \Intaro\RetailCrm\Icml\SettingsService|null
@ -110,6 +116,7 @@ class SettingsService
= $this->getSingleSetting('SETUP_PROFILE_NAME') ?? GetMessage('PROFILE_NAME_EXAMPLE'); = $this->getSingleSetting('SETUP_PROFILE_NAME') ?? GetMessage('PROFILE_NAME_EXAMPLE');
$this->getPriceTypes(); $this->getPriceTypes();
$this->getVatRates();
} }
/** /**
@ -136,6 +143,15 @@ class SettingsService
} }
} }
public function getVatRates()
{
$dbVatRate = CCatalogVat::GetListEx(['SORT' => 'ASC'], ['ACTIVE' => 'Y'], false, false, ['ID', 'NAME', 'RATE']);
while ($arVatRate = $dbVatRate->Fetch()) {
$this->vatRates[$arVatRate['ID']] = $arVatRate;
}
}
/** /**
* @param string $selected * @param string $selected
* @param string $key * @param string $key

View File

@ -4,6 +4,7 @@ namespace Intaro\RetailCrm\Icml;
use Bitrix\Catalog\ProductTable; use Bitrix\Catalog\ProductTable;
use Bitrix\Main\ArgumentException; use Bitrix\Main\ArgumentException;
use Intaro\RetailCrm\Component\ServiceLocator;
use Intaro\RetailCrm\Icml\Utils\IcmlUtils; use Intaro\RetailCrm\Icml\Utils\IcmlUtils;
use Intaro\RetailCrm\Model\Bitrix\Orm\CatalogIblockInfo; use Intaro\RetailCrm\Model\Bitrix\Orm\CatalogIblockInfo;
use Intaro\RetailCrm\Model\Bitrix\Xml\OfferParam; use Intaro\RetailCrm\Model\Bitrix\Xml\OfferParam;
@ -82,11 +83,17 @@ class XmlOfferBuilder
* @var \Intaro\RetailCrm\Model\Bitrix\Xml\XmlOffer * @var \Intaro\RetailCrm\Model\Bitrix\Xml\XmlOffer
*/ */
private $xmlOffer; private $xmlOffer;
/** /**
* @var array * @var array
*/ */
private $categories; private $categories;
/**
* @var array
*/
private $vatRates;
/** /**
* IcmlDataManager constructor. * IcmlDataManager constructor.
* *
@ -100,6 +107,9 @@ class XmlOfferBuilder
{ {
$this->setup = $setup; $this->setup = $setup;
$this->purchasePriceNull = RetailcrmConfigProvider::getCrmPurchasePrice(); $this->purchasePriceNull = RetailcrmConfigProvider::getCrmPurchasePrice();
/** @var \Intaro\RetailCrm\Icml\SettingsService $settingsService */
$settingsService = ServiceLocator::get(SettingsService::class);
$this->vatRates = $settingsService->vatRates;
$this->measures = $this->prepareMeasures($measure); $this->measures = $this->prepareMeasures($measure);
$this->defaultServerName = $defaultServerName; $this->defaultServerName = $defaultServerName;
} }
@ -240,7 +250,7 @@ class XmlOfferBuilder
$this->xmlOffer->name = $item['NAME']; $this->xmlOffer->name = $item['NAME'];
$this->xmlOffer->xmlId = $item['EXTERNAL_ID'] ?? ''; $this->xmlOffer->xmlId = $item['EXTERNAL_ID'] ?? '';
$this->xmlOffer->productName = $item['NAME']; $this->xmlOffer->productName = $item['NAME'];
$this->xmlOffer->vatRate = $item['CATALOG_VAT'] ?? 'none'; $this->xmlOffer->vatRate = $this->getVatRate($item);
$this->xmlOffer->unitCode = $this->getUnitCode($item['CATALOG_MEASURE'], $item['ID']); $this->xmlOffer->unitCode = $this->getUnitCode($item['CATALOG_MEASURE'], $item['ID']);
} }
@ -267,6 +277,25 @@ class XmlOfferBuilder
return null; return null;
} }
/**
* Возвращает значение активной ставки НДС, если она указана в товаре
*
* @param array $product
* @return string
*/
private function getVatRate(array $product): string
{
if (!empty($product['VAT_ID']) && array_key_exists($product['VAT_ID'], $this->vatRates)) {
return $this->vatRates[$product['VAT_ID']]['RATE'];
}
if (!empty($product['CATALOG_VAT_ID']) && array_key_exists($product['CATALOG_VAT_ID'], $this->vatRates)) {
return $this->vatRates[$product['CATALOG_VAT_ID']]['RATE'];
}
return 'none';
}
/** /**
* Возвращает массив обычных свойств * Возвращает массив обычных свойств
* *