9 if ((!array_key_exists(
"TAX_LOCATION", $arOrder) || intval($arOrder[
"TAX_LOCATION"]) <= 0) && (!$arOrder[
"USE_VAT"] || $arOrder[
"USE_VAT"]!=
"Y"))
14 static::calculateTax($arOrder,
$arOptions, $arErrors);
27 (!array_key_exists(
"TAX_LOCATION", $arOrder) || trim((
string)$arOrder[
"TAX_LOCATION"]) ===
"")
28 && (!$arOrder[
"USE_VAT"] || $arOrder[
"USE_VAT"] !=
"Y")
34 $arOrder[
"TAX_PRICE"] = 0.0;
36 if (!$arOrder[
"USE_VAT"])
38 if (!array_key_exists(
"TAX_EXEMPT", $arOrder))
40 $arOrder[
"TAX_EXEMPT"] =
array();
41 $arUserGroups = CUser::GetUserGroup($arOrder[
"USER_ID"]);
44 while ($TaxExemptList = $dbTaxExemptList->Fetch())
46 if (!in_array(intval($TaxExemptList[
"TAX_ID"]), $arOrder[
"TAX_EXEMPT"]))
47 $arOrder[
"TAX_EXEMPT"][] = intval($TaxExemptList[
"TAX_ID"]);
51 if (!array_key_exists(
"TAX_LIST", $arOrder))
53 $arOrder[
"TAX_LIST"] =
array();
55 static $proxyOrderTaxList =
array();
57 $proxyOrderTaxKey = $arOrder[
"SITE_ID"].
"|".$arOrder[
"PERSON_TYPE_ID"].
"|".$arOrder[
"TAX_LOCATION"];
59 if (isset($proxyOrderTaxList[$proxyOrderTaxKey]) && is_array($proxyOrderTaxList[$proxyOrderTaxKey]))
61 $arOrder[
"TAX_LIST"] = $proxyOrderTaxList[$proxyOrderTaxKey];
66 array(
"APPLY_ORDER" =>
"ASC"),
68 "LID" => $arOrder[
"SITE_ID"],
69 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
71 "LOCATION_CODE" => $arOrder[
"TAX_LOCATION"],
74 while ($arTaxRate = $dbTaxRate->GetNext())
76 if (!in_array(intval($arTaxRate[
"TAX_ID"]), $arOrder[
"TAX_EXEMPT"]))
78 if ($arTaxRate[
"IS_PERCENT"] !=
"Y")
81 $arTaxRate[
"CURRENCY"] = $arOrder[
"CURRENCY"];
83 $arOrder[
"TAX_LIST"][] = $arTaxRate;
87 $proxyOrderTaxList[$proxyOrderTaxKey] = $arOrder[
"TAX_LIST"];
92 if (!empty($arOrder[
"TAX_LIST"]) && is_array($arOrder[
"TAX_LIST"]))
94 foreach ($arOrder[
"TAX_LIST"] as &$taxValue)
96 if (isset($taxValue[
'VALUE_MONEY']))
97 unset($taxValue[
'VALUE_MONEY']);
103 if (!empty($arOrder[
"TAX_LIST"]))
105 if (!empty($arOrder[
"BASKET_ITEMS"]) && is_array($arOrder[
"BASKET_ITEMS"]))
107 foreach ($arOrder[
"BASKET_ITEMS"] as $arItem)
110 $arItem[
"PRICE"] * $arItem[
"QUANTITY"],
111 $arOrder[
"TAX_LIST"],
115 foreach ($arOrder[
"TAX_LIST"] as &$arTax)
117 $arTax[
"VALUE_MONEY"] += $arTax[
"TAX_VAL"];
118 $arTax[
"VALUE_MONEY_FORMATED"] =
SaleFormatCurrency($arTax[
"VALUE_MONEY"], $arOrder[
"CURRENCY"]);
123 foreach ($arOrder[
"TAX_LIST"] as $arTax)
125 if ($arTax[
"IS_IN_PRICE"] !=
"Y"
128 $arOrder[
"TAX_PRICE"] += $arTax[
"VALUE_MONEY"];
134 $arOrder[
"TAX_LIST"] =
array();
135 $arOrder[
"TAX_PRICE"] = 0;
143 if (!array_key_exists(
"TAX_LIST", $arOrder))
145 $arOrder[
"TAX_LIST"][] =
array(
148 "VALUE" => $arOrder[
"VAT_RATE"] * 100,
149 "VALUE_FORMATED" =>
"(".($arOrder[
"VAT_RATE"] * 100).
"%, ".
GetMessage(
"SOA_VAT_INCLUDED").
")",
150 "VALUE_MONEY" => $arOrder[
"VAT_SUM"],
151 "VALUE_MONEY_FORMATED" =>
SaleFormatCurrency($arOrder[
"VAT_SUM"], $arOrder[
"CURRENCY"]),
152 "APPLY_ORDER" => 100,
153 "IS_IN_PRICE" =>
"Y",
155 'TAX_VAL' => $arOrder[
'VAT_SUM'],
165 if ((!array_key_exists(
"TAX_LOCATION", $arOrder) || intval($arOrder[
"TAX_LOCATION"]) <= 0) && (!$arOrder[
"USE_VAT"] || $arOrder[
"USE_VAT"]!=
"Y"))
170 static::calculateDeliveryTax($arOrder,
$arOptions, $arErrors);
183 (!array_key_exists(
"TAX_LOCATION", $arOrder) || trim((
string)$arOrder[
"TAX_LOCATION"]) ===
"")
184 && (empty($arOrder[
"USE_VAT"]) || $arOrder[
"USE_VAT"] !=
"Y")
190 if (!array_key_exists(
"COUNT_DELIVERY_TAX",
$arOptions))
192 $arOptions[
"COUNT_DELIVERY_TAX"] = COption::GetOptionString(
"sale",
"COUNT_DELIVERY_TAX",
"N");
195 if ((
double)$arOrder[
"DELIVERY_PRICE"] <= 0 ||
$arOptions[
"COUNT_DELIVERY_TAX"] !=
"Y")
200 if (!$arOrder[
"USE_VAT"] || $arOrder[
"USE_VAT"] !=
"Y")
202 if (!array_key_exists(
"TAX_EXEMPT", $arOrder))
204 $arUserGroups = CUser::GetUserGroup($arOrder[
"USER_ID"]);
207 while ($TaxExemptList = $dbTaxExemptList->Fetch())
209 if (!in_array(intval($TaxExemptList[
"TAX_ID"]), $arOrder[
"TAX_EXEMPT"]))
210 $arOrder[
"TAX_EXEMPT"][] = intval($TaxExemptList[
"TAX_ID"]);
214 if (!array_key_exists(
"TAX_LIST", $arOrder))
216 $arOrder[
"TAX_LIST"] =
array();
219 array(
"APPLY_ORDER" =>
"ASC"),
221 "LID" => $arOrder[
"SITE_ID"],
222 "PERSON_TYPE_ID" => $arOrder[
"PERSON_TYPE_ID"],
224 "LOCATION_CODE" => $arOrder[
"TAX_LOCATION"],
227 while ($arTaxRate = $dbTaxRate->GetNext())
229 if (is_array($arOrder[
"TAX_EXEMPT"]) && !in_array(intval($arTaxRate[
"TAX_ID"]), $arOrder[
"TAX_EXEMPT"]))
231 if ($arTaxRate[
"IS_PERCENT"] !=
"Y")
234 $arTaxRate[
"CURRENCY"] = $arOrder[
"CURRENCY"];
236 $arOrder[
"TAX_LIST"][] = $arTaxRate;
241 if (
count($arOrder[
"TAX_LIST"]) > 0)
244 $arOrder[
"DELIVERY_PRICE"],
245 $arOrder[
"TAX_LIST"],
249 $arOrder[
"TAX_PRICE"] = 0;
250 foreach ($arOrder[
"TAX_LIST"] as &$arTax)
253 $arTax[
'VALUE_MONEY_FORMATED'] =
SaleFormatCurrency($arTax[
"VALUE_MONEY"], $arOrder[
"CURRENCY"]);
255 if ($arTax[
"IS_IN_PRICE"] !=
"Y"
258 $arOrder[
"TAX_PRICE"] += $arTax[
"VALUE_MONEY"];
269 $deliveryVat = $arOrder[
"DELIVERY_PRICE"] * $arOrder[
"VAT_RATE"] / (1 + $arOrder[
"VAT_RATE"]);
271 $arOrder[
"VAT_SUM"] += $deliveryVat;
272 $arOrder[
"VAT_DELIVERY"] += $deliveryVat;
276 $arOrder[
"TAX_LIST"][0] =
array(
279 "VALUE" => $arOrder[
"VAT_RATE"] * 100,
280 "VALUE_FORMATED" =>
"(".($arOrder[
"VAT_RATE"] * 100).
"%, ".
GetMessage(
"SOA_VAT_INCLUDED").
")",
281 "VALUE_MONEY" => $arOrder[
"VAT_SUM"],
282 "VALUE_MONEY_FORMATED" =>
SaleFormatCurrency($arOrder[
"VAT_SUM"], $arOrder[
"CURRENCY"]),
283 "APPLY_ORDER" => 100,
284 "IS_IN_PRICE" =>
"Y",
296 public static function DoSaveOrderTax(
$orderId, $taxList, &$arErrors = [])
298 $duplicateList =
array();
302 $orderTaxClass = static::getOrderTaxEntityName();
303 $res = $orderTaxClass::GetList(
304 array(
'ID' =>
'ASC'),
308 array(
"ID",
"TAX_NAME",
"CODE")
313 if (!array_key_exists(
$hash, $idList))
325 if (is_array($taxList))
327 foreach ($taxList as $itemData)
331 "TAX_NAME" => $itemData[
"NAME"],
332 "IS_PERCENT" => $itemData[
"IS_PERCENT"],
333 "VALUE" => $itemData[
"VALUE"],
334 "VALUE_MONEY" => $itemData[
"VALUE_MONEY"],
335 "APPLY_ORDER" => $itemData[
"APPLY_ORDER"],
336 "IS_IN_PRICE" => $itemData[
"IS_IN_PRICE"],
337 "CODE" => $itemData[
"CODE"]
340 $hash = $itemData[
"NAME"].
"|".$itemData[
"CODE"];
343 if (array_key_exists(
$hash, $idList))
346 $orderTaxClass = static::getOrderTaxEntityName();
347 $taxId = $orderTaxClass::Update($idList[
$hash],
$fields);
348 unset($idList[
$hash]);
354 $orderTaxClass = static::getOrderTaxEntityName();
355 $taxId = $orderTaxClass::Add(
$fields);
361 $historyClass = static::getHistoryEntityName();
362 $historyClass::addLog(
365 $isNew ?
'TAX_ADD' :
'TAX_UPDATE',
369 "NAME" => $itemData[
"NAME"],
370 "CODE" => $itemData[
"CODE"]
372 $historyClass::SALE_ORDER_HISTORY_LOG_LEVEL_1
380 foreach ($idList as
$code => $id)
383 $orderTaxClass = static::getOrderTaxEntityName();
384 $orderTaxClass::Delete($id);
388 $historyClass = static::getHistoryEntityName();
389 $historyClass::addLog(
396 $historyClass::SALE_ORDER_HISTORY_LOG_LEVEL_1
401 if (!empty($duplicateList))
403 foreach ($duplicateList as
$hash => $id)
406 $orderTaxClass = static::getOrderTaxEntityName();
407 $orderTaxClass::Delete($id);
411 $historyClass = static::getHistoryEntityName();
412 $historyClass::addLog(
415 'TAX_DUPLICATE_DELETED',
419 $historyClass::SALE_ORDER_HISTORY_LOG_LEVEL_1
427 $historyClass = static::getHistoryEntityName();
428 $historyClass::addAction(
442 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SKGT_EMPTY_SITE"),
"ERROR_NO_LID");
447 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SKGT_EMPTY_NAME"),
"ERROR_NO_NAME");
453 $dbSite = CSite::GetByID(
$arFields[
"LID"]);
454 if (!$dbSite->Fetch())
474 $strUpdate =
$DB->PrepareUpdate(
"b_sale_tax",
$arFields);
475 $strSql =
"UPDATE b_sale_tax SET ".
476 " TIMESTAMP_X = ".$DB->GetNowFunction().
", ".
478 "WHERE ID = ".$ID.
" ";
490 while ($ar_taxrates = $db_taxrates->Fetch())
495 $DB->Query(
"DELETE FROM b_sale_tax_exempt2group WHERE TAX_ID = ".
$ID.
"",
true);
496 return $DB->Query(
"DELETE FROM b_sale_tax WHERE ID = ".
$ID.
"",
true);
505 "SELECT ID, LID, NAME, CODE, DESCRIPTION, ".$DB->DateToCharFunction(
"TIMESTAMP_X",
"FULL").
" as TIMESTAMP_X ".
507 "WHERE ID = ".$ID.
"";
520 $arSqlSearch = Array();
531 $countFiltersKeys =
count($filter_keys);
532 for (
$i=0;
$i<$countFiltersKeys;
$i++)
535 if (
$val ==
'')
continue;
546 switch (mb_strtoupper(
$key))
549 $arSqlSearch[] =
"T.ID ".($bInvert?
"<>":
"=").
" ".intval(
$val).
" ";
552 $arSqlSearch[] =
"T.LID ".($bInvert?
"<>":
"=").
" '".
$val.
"' ";
555 $arSqlSearch[] =
"T.CODE ".($bInvert?
"<>":
"=").
" '".
$val.
"' ";
561 $countSqlSearch =
count($arSqlSearch);
562 for(
$i=0;
$i<$countSqlSearch;
$i++)
564 $strSqlSearch .=
" AND ";
565 $strSqlSearch .=
" (".$arSqlSearch[
$i].
") ";
569 "SELECT T.ID, T.LID, T.NAME, T.CODE, T.DESCRIPTION, ".$DB->DateToCharFunction(
"T.TIMESTAMP_X",
"FULL").
" as TIMESTAMP_X ".
570 "FROM b_sale_tax T ".
572 " ".$strSqlSearch.
" ";
574 $arSqlOrder = Array();
575 foreach ($arOrder as $by=>
$order)
577 $by = mb_strtoupper($by);
582 if ($by ==
"ID") $arSqlOrder[] =
" T.ID ".$order.
" ";
583 elseif ($by ==
"LID") $arSqlOrder[] =
" T.LID ".$order.
" ";
584 elseif ($by ==
"CODE") $arSqlOrder[] =
" T.CODE ".$order.
" ";
585 elseif ($by ==
"TIMESTAMP_X") $arSqlOrder[] =
" T.TIMESTAMP_X ".$order.
" ";
588 $arSqlOrder[] =
" T.NAME ".$order.
" ";
594 $countSqlOrder =
count($arSqlOrder);
598 $strSqlOrder =
" ORDER BY ";
602 $strSqlOrder .= $arSqlOrder[
$i];
604 $strSql .= $strSqlOrder;
612 $arSqlSearch = Array();
623 $countFilterKeys =
count($filter_keys);
624 for (
$i = 0;
$i < $countFilterKeys;
$i++)
627 if (!is_array($vals))
628 $vals =
array($vals);
639 $arSqlSearch_tmp =
array();
641 $countVals =
count($vals);
642 for ($j = 0; $j < $countVals; $j++)
646 switch (mb_strtoupper(
$key))
649 $arSqlSearch_tmp[] =
"TE2G.GROUP_ID ".($bInvert?
"<>":
"=").
" ".intval(
$val).
" ";
652 $arSqlSearch_tmp[] =
"TE2G.TAX_ID ".($bInvert?
"<>":
"=").
" ".intval(
$val).
" ";
657 $strSqlSearch_tmp =
"";
658 $countSqlSearchTmp =
count($arSqlSearch_tmp);
659 for ($j = 0; $j < $countSqlSearchTmp; $j++)
662 $strSqlSearch_tmp .= ($bInvert ?
" AND " :
" OR ");
663 $strSqlSearch_tmp .=
"(".$arSqlSearch_tmp[$j].
")";
666 if ($strSqlSearch_tmp !=
"")
667 $arSqlSearch[] =
"(".$strSqlSearch_tmp.
")";
671 $countSqlSearch =
count($arSqlSearch);
672 for (
$i = 0;
$i < $countSqlSearch;
$i++)
674 $strSqlSearch .=
" AND ";
675 $strSqlSearch .=
" (".$arSqlSearch[
$i].
") ";
679 "SELECT TE2G.GROUP_ID, TE2G.TAX_ID ".
680 "FROM b_sale_tax_exempt2group TE2G ".
682 " ".$strSqlSearch.
" ";
699 "INSERT INTO b_sale_tax_exempt2group(GROUP_ID, TAX_ID) ".
700 "VALUES(".$arFields[
"GROUP_ID"].
", ".
$arFields[
"TAX_ID"].
")";
710 $strSql =
"DELETE FROM b_sale_tax_exempt2group WHERE ";
712 $arSqlSearch = Array();
719 $countFilterKeys =
count($filter_keys);
720 for (
$i=0;
$i<$countFilterKeys;
$i++)
723 if (intval(
$val)<=0)
continue;
725 $arSqlSearch[] =
" ".$key.
" = ".intval(
$val).
" ";
728 $countSqlSearch =
count($arSqlSearch);
729 if ($countSqlSearch<=0)
734 for (
$i=0;
$i<$countSqlSearch;
$i++)
736 if (
$i==0) $strSqlSearch .=
" ";
737 else $strSqlSearch .=
" AND ";
738 $strSqlSearch .=
" (".$arSqlSearch[
$i].
") ";
741 $strSql .= $strSqlSearch;
743 return $DB->Query($strSql,
true);
751 return CSaleOrderTax::class;
759 return \Bitrix\Sale\OrderHistory::class;
static roundPrecision($value)
static ConvertCurrency($valSum, $curFrom, $curTo, $valDate="")
static tryTranslateIDToCode($id)
static CountTaxes($Price, &$arTaxList, $DefCurrency)
static AddExempt($arFields)
static GetList($arOrder=Array("NAME"=>"ASC"), $arFilter=Array())
static GetExemptList($arFilter=array())
static calculateDeliveryTax(&$arOrder, $arOptions, &$arErrors=[])
static DoProcessOrderDelivery(&$arOrder, $arOptions, &$arErrors)
static CheckFields($ACTION, &$arFields)
static calculateTax(&$arOrder, $arOptions, &$arErrors=[])
static getOrderTaxEntityName()
static DeleteExempt($arFields)
static getHistoryEntityName()
static Update($ID, $arFields)
static DoProcessOrderBasket(&$arOrder, $arOptions, &$arErrors)
static GetList($arOrder=array("APPLY_ORDER"=>"ASC"), $arFilter=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
DelDuplicateSort(&$arSort)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"
SaleFormatCurrency($fSum, $strCurrency, $OnlyValue=false, $withoutFormat=false)
$GLOBALS['_____370096793']