Example #1
0
 function Update($ID, $arFields)
 {
     global $DB;
     $ID = IntVal($ID);
     if (!CSaleTaxRate::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     $strUpdate = $DB->PrepareUpdate("b_sale_tax_rate", $arFields);
     $strSql = "UPDATE b_sale_tax_rate SET " . "\tTIMESTAMP_X = " . $DB->GetNowFunction() . ", " . "\t" . $strUpdate . " " . "WHERE ID = " . $ID . " ";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (is_set($arFields, "TAX_LOCATION")) {
         CSaleTaxRate::SetTaxRateLocation($ID, $arFields["TAX_LOCATION"]);
     }
     return $ID;
 }
Example #2
0
 /**
  * <p>Метод добавляет новую ставку налога с параметрами из массива arFields. Метод динамичный.</p>
  *
  *
  * @param array $arFields  Ассоциативный массив параметров новой ставки налога. Ключами
  * являются названия параметров ставки, а значениями -
  * соответствующие значения.<br> Допустимые ключи: <ul> <li> <b>TAX_ID</b> - код
  * налога;</li> <li> <b>PERSON_TYPE_ID</b> - тип плательщика;</li> <li> <b>VALUE</b> - величина
  * налога (в процентах);</li> <li> <b>CURRENCY</b> - валюта;</li> <li> <b>IS_PERCENT</b> -
  * всегда значение "Y";</li> <li> <b>IS_IN_PRICE</b> - налог уже включен в цену
  * товара;</li> <li> <b>APPLY_ORDER</b> - порядок применения;</li> <li> <b>ACTIVE</b> - флаг
  * (Y/N) активности налога;</li> <li> <b>TAX_LOCATION</b> - массив для указания
  * местоположений и групп местоположений, для которых действует эта
  * ставка. Каждый элемент массива представляет собой ассоциативный
  * массив с ключами: <ul> <li> <b>LOCATION_ID</b> - код местоположения или группы
  * местоположений;</li> <li> <b>LOCATION_TYPE</b> - "L" для местоположения и "G" для
  * группы местоположений.</li> </ul> </li> </ul>
  *
  * @return int <p>Возвращается код добавленной ставки налога или <i>false</i> в случае
  * ошибки.</p> <br><br>
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaletaxrate/csaletaxrate__add.40a40d86.php
  * @author Bitrix
  */
 public static function Add($arFields, $arOptions = array())
 {
     global $DB;
     if (!CSaleTaxRate::CheckFields("ADD", $arFields)) {
         return false;
     }
     $arInsert = $DB->PrepareInsert("b_sale_tax_rate", $arFields);
     $strSql = "INSERT INTO b_sale_tax_rate(" . $arInsert[0] . ", TIMESTAMP_X) " . "VALUES(" . $arInsert[1] . ", " . $DB->GetNowFunction() . ")";
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     $ID = IntVal($DB->LastID());
     if (is_set($arFields, "TAX_LOCATION")) {
         CSaleTaxRate::SetTaxRateLocation($ID, $arFields["TAX_LOCATION"], $arOptions);
     }
     return $ID;
 }
Example #3
0
 function Delete($ID)
 {
     global $DB;
     $ID = IntVal($ID);
     $db_taxrates = CSaleTaxRate::GetList(array(), array("TAX_ID" => $ID));
     while ($ar_taxrates = $db_taxrates->Fetch()) {
         CSaleTaxRate::Delete($ar_taxrates["ID"]);
     }
     $DB->Query("DELETE FROM b_sale_tax_exempt2group WHERE TAX_ID = " . $ID . "", true);
     return $DB->Query("DELETE FROM b_sale_tax WHERE ID = " . $ID . "", true);
 }
Example #4
0
                break;
            case "activate":
            case "deactivate":
                $arFields = array("ACTIVE" => $_REQUEST['action'] == "activate" ? "Y" : "N");
                if (!CSaleTaxRate::Update($ID, $arFields)) {
                    if ($ex = $APPLICATION->GetException()) {
                        $lAdmin->AddGroupError($ex->GetString(), $ID);
                    } else {
                        $lAdmin->AddGroupError(GetMessage("ERROR_EDIT_TAX_RATE"), $ID);
                    }
                }
                break;
        }
    }
}
$dbResultList = CSaleTaxRate::GetList(array($by => $order), $arFilter);
$dbResultList = new CAdminResult($dbResultList, $sTableID);
$dbResultList->NavStart();
$lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("SALE_TAX_RATE_LIST")));
$lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "ID", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("RATE_ACTIVE"), "sort" => "ACTIVE", "default" => true, "align" => "center"), array("id" => "TIMESTAMP_X", "content" => GetMessage("TAX_TIMESTAMP"), "sort" => "TIMESTAMP_X", "default" => true), array("id" => "NAME", "content" => GetMessage("TAX_NAME"), "sort" => "NAME", "default" => true), array("id" => "PERSON_TYPE_ID", "content" => GetMessage("RATE_PERSON_TYPE"), "sort" => "PERSON_TYPE_ID", "default" => true), array("id" => "VALUE", "content" => GetMessage("RATE_VALUE"), "sort" => "", "default" => true), array("id" => "IS_IN_PRICE", "content" => GetMessage("RATE_IS_INPRICE"), "sort" => "IS_IN_PRICE", "default" => true), array("id" => "APPLY_ORDER", "content" => GetMessage("RATE_APPLY_ORDER"), "sort" => "APPLY_ORDER", "default" => true)));
$arVisibleColumns = $lAdmin->GetVisibleHeaderColumns();
$arPersonTypeList = array();
$dbPersonType = CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array());
while ($arPersonType = $dbPersonType->Fetch()) {
    $arPersonTypeList[$arPersonType["ID"]] = array("ID" => $arPersonType["ID"], "NAME" => htmlspecialcharsEx($arPersonType["NAME"]), "LID" => implode(", ", $arPersonType["LIDS"]));
}
while ($arTaxRate = $dbResultList->NavNext(true, "f_")) {
    $row =& $lAdmin->AddRow($f_ID, $arTaxRate);
    $row->AddField("ID", $f_ID);
    $row->AddField("ACTIVE", $f_ACTIVE == "Y" ? GetMessage("RATE_YES") : GetMessage("RATE_NET"));
    $row->AddField("TIMESTAMP_X", $f_TIMESTAMP_X);
Example #5
0
		<tr class="adm-detail-required-field">
			<td width="40%" valign="top"><?php 
    echo GetMessage("F_LOCATION2");
    ?>
:</td>
			<td width="60%" valign="top">
				<select name="LOCATION2[]" size="5" multiple>
					<?php 
    $db_vars = CSaleLocationGroup::GetList(array("NAME" => "ASC"), array(), LANG);
    ?>
					<?php 
    $arLOCATION2 = array();
    if ($bInitVars) {
        $arLOCATION2 = $LOCATION2;
    } else {
        $db_location = CSaleTaxRate::GetLocationList(array("TAX_RATE_ID" => $ID, "LOCATION_TYPE" => "G"));
        while ($arLocation = $db_location->Fetch()) {
            $arLOCATION2[] = $arLocation["LOCATION_ID"];
        }
    }
    if (!is_array($arLOCATION2)) {
        $arLOCATION2 = array();
    }
    ?>
					<?php 
    while ($vars = $db_vars->Fetch()) {
        ?>
						<option value="<?php 
        echo $vars["ID"];
        ?>
"<?php 
Example #6
0
				$arUserGroups = $USER->GetUserGroupArray();

				$dbTaxExemptList = CSaleTax::GetExemptList(array("GROUP_ID" => $arUserGroups));
				while ($TaxExemptList = $dbTaxExemptList->Fetch())
				{
					if (!in_array(IntVal($TaxExemptList["TAX_ID"]), $arResult["TaxExempt"]))
					{
						$arResult["TaxExempt"][] = IntVal($TaxExemptList["TAX_ID"]);
					}
				}

				$dbTaxRate = CSaleTaxRate::GetList(
						array("APPLY_ORDER"=>"ASC"),
						array(
								"LID" => SITE_ID,
								"PERSON_TYPE_ID" => $arUserResult["PERSON_TYPE_ID"],
								"ACTIVE" => "Y",
								"LOCATION" => $arUserResult["TAX_LOCATION"],
							)
					);
				while ($arTaxRate = $dbTaxRate->GetNext())
				{
					if (!in_array(IntVal($arTaxRate["TAX_ID"]), $arResult["TaxExempt"]))
					{
						$arResult["arTaxList"][] = $arTaxRate;
					}
				}

				$arTaxSums = array();
				if (count($arResult["arTaxList"]) > 0)
				{
Example #7
0
         }
     }
 }
 // TAX
 $arTaxPrice = array();
 for ($i = 0; $i < count($arBasketList); $i++) {
     $arTaxPrice[$i] = 0;
 }
 $arTaxList = array();
 $arOrderTaxList = array();
 for ($i = 0; $i < count($arBasketList); $i++) {
     $arOrderTaxList[$i] = array();
 }
 if ($bNeedReCount) {
     if (!$bUseVat) {
         $dbTaxRate = CSaleTaxRate::GetList(array("APPLY_ORDER" => "ASC"), array("LID" => $LID, "PERSON_TYPE_ID" => $PERSON_TYPE_ID, "ACTIVE" => "Y", "LOCATION" => $TAX_LOCATION));
         $i = -1;
         while ($arTaxRate = $dbTaxRate->Fetch()) {
             if (!in_array(IntVal($arTaxRate["TAX_ID"]), $arTaxExempt)) {
                 $i++;
                 $arTaxList[] = array("ID" => 0, "IND" => $i, "TAX_NAME" => $arTaxRate["NAME"], "VALUE" => $arTaxRate["VALUE"], "VALUE_MONEY" => 0, "APPLY_ORDER" => $arTaxRate["APPLY_ORDER"], "CODE" => $arTaxRate["CODE"], "IS_IN_PRICE" => $arTaxRate["IS_IN_PRICE"] == "Y" ? "Y" : "N");
             }
         }
     } else {
         $arTaxList[] = array("ID" => 0, "TAX_NAME" => GetMessage("SOE_VAT"), "IS_PERCENT" => "Y", "VALUE" => $vatRate * 100, "VALUE_MONEY" => 0, "APPLY_ORDER" => 100, "IS_IN_PRICE" => "Y", "CODE" => "VAT");
     }
 } else {
     $TAX_COUNTER = IntVal($TAX_COUNTER);
     for ($i = 0; $i <= $TAX_COUNTER; $i++) {
         ${"TAX_NAME_" . $i} = Trim(${"TAX_NAME_" . $i});
         if (strlen(${"TAX_NAME_" . $i}) > 0) {
Example #8
0
$taxies = array();
$allTaxies = CCrmTax::GetAll();
foreach ($allTaxies as $k => $v) {
    $tax = array();
    $tax['ID'] = $tax['~ID'] = $k;
    // Key is Currency ID
    $tax['TIMESTAMP_X'] = $tax['~TIMESTAMP_X'] = CCrmComponentHelper::TrimDateTimeString(FormatDate('FULL', MakeTimeStamp($v['TIMESTAMP_X'])));
    $tax['LID'] = $arLangs[$v['LID']];
    $tax['NAME'] = $v['NAME'];
    $tax['CODE'] = $v['CODE'];
    $tax['PATH_TO_TAX_SHOW'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_SHOW'], array('tax_id' => $k));
    $tax['PATH_TO_TAX_EDIT'] = CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_EDIT'], array('tax_id' => $k));
    $tax['PATH_TO_TAX_SHOW_RATES'] = CHTTP::urlAddParams($tax['PATH_TO_TAX_EDIT'], array("FORM_ID" => $arResult['EDIT_FORM_ID'], $arResult['EDIT_FORM_ID'] . "_active_tab" => 'tab_rateslist'));
    $tax['PATH_TO_TAX_DELETE'] = CHTTP::urlAddParams(CComponentEngine::MakePathFromTemplate($arParams['PATH_TO_TAX_LIST'], array('tax_id' => $k)), array('action_' . $arResult['GRID_ID'] => 'delete', 'ID' => $k, 'sessid' => bitrix_sessid()));
    $rateNum = 0;
    $dbRes = CSaleTaxRate::GetList(array(), array("TAX_ID" => $tax['ID']));
    while ($dbRes->Fetch()) {
        $rateNum++;
    }
    if ($rateNum > 0) {
        $rateNumShow = "<a href=\"" . $tax['PATH_TO_TAX_SHOW_RATES'] . "\">" . $rateNum . "</a>";
    } else {
        $rateNumShow = "0";
    }
    $tax['STAV'] = $rateNumShow;
    $tax['~NAME'] = htmlspecialcharsBack($tax['NAME']);
    $tax['~LID'] = htmlspecialcharsBack($tax['LID']);
    $tax['~CODE'] = htmlspecialcharsBack($tax['CODE']);
    $taxies[] = $tax;
}
if (is_array($sort) && count($sort) > 0) {
Example #9
0
 $arResult['VALUE'] = isset($arTaxRate['VALUE']) ? strval($arTaxRate['VALUE']) : '';
 $arResult['IS_IN_PRICE'] = isset($arTaxRate['IS_IN_PRICE']) && $arTaxRate['IS_IN_PRICE'] == 'Y' ? true : false;
 $arResult['APPLY_ORDER'] = isset($arTaxRate['APPLY_ORDER']) ? intval($arTaxRate['APPLY_ORDER']) : 100;
 $arTax = CCrmTax::GetById($arResult['TAX_ID']);
 $arResult['TAX_NAME'] = htmlspecialcharsbx($arTax['NAME']);
 $arLOCATION1 = array();
 if ($lpEnabled) {
     $arResult['LOCATION1'] = array();
     $arResult['LOCATION1_LIST'] = array();
     if (isset($_POST['LOCATION1']) || isset($_POST['LOCATION2'])) {
         $arResult['LOCATION_QUERY'] = array('L' => isset($LOCATION1) ? $LOCATION1 : array(), 'G' => isset($LOCATION2) ? $LOCATION2 : array());
     } else {
         $arResult['LOCATION_QUERY'] = false;
     }
 } else {
     $db_location = CSaleTaxRate::GetLocationList(array("TAX_RATE_ID" => $arResult['ID'], "LOCATION_TYPE" => "L"));
     while ($arLocation = $db_location->Fetch()) {
         $arLOCATION1[] = $arLocation["LOCATION_ID"];
     }
     if (!is_array($arLOCATION1)) {
         $arLOCATION1 = array();
     }
     $arResult['LOCATION1'] = $arLOCATION1;
     $arLocationsList = array();
     $dbLocList = CSaleLocation::GetList(array("SORT" => "ASC", "COUNTRY_NAME_LANG" => "ASC", "COUNTRY_NAME_ORIG" => "ASC", "REGION_NAME_LANG" => "ASC", "REGION_NAME_ORIG" => "ASC", "CITY_NAME_LANG" => "ASC", "CITY_NAME_ORIG" => "ASC"), array("LID" => LANGUAGE_ID));
     while ($arLoc = $dbLocList->Fetch()) {
         $arLocationsList[$arLoc['ID']] = array();
         //$arLoc;
         if (in_array(intval($arLoc['ID']), $arResult['LOCATION1'])) {
             $arLocationsList[$arLoc['ID']]['SELECTED'] = true;
         } else {
Example #10
0
         }
     }
 }
 $dbPaySystem = CSalePaySystem::GetList(array("SORT" => "ASC", "PSA_NAME" => "ASC"), $arFilter);
 $bFirst = True;
 while ($arPaySystem = $dbPaySystem->Fetch()) {
     if (IntVal($arResult["PAY_SYSTEM_ID"]) == IntVal($arPaySystem["ID"]) || IntVal($arResult["PAY_SYSTEM_ID"]) <= 0 && $bFirst) {
         $arPaySystem["CHECKED"] = "Y";
     }
     $arPaySystem["PSA_NAME"] = htmlspecialcharsEx($arPaySystem["PSA_NAME"]);
     $arResult["PAY_SYSTEM"][] = $arPaySystem;
     $bFirst = false;
 }
 $bHaveTaxExempts = False;
 if (is_array($arResult["TaxExempt"]) && count($arResult["TaxExempt"]) > 0) {
     $dbTaxRateList = CSaleTaxRate::GetList(array("APPLY_ORDER" => "ASC"), array("LID" => SITE_ID, "PERSON_TYPE_ID" => $PERSON_TYPE, "IS_IN_PRICE" => "N", "ACTIVE" => "Y", "LOCATION" => IntVal($TAX_LOCATION)));
     while ($arTaxRateList = $dbTaxRateList->GetNext()) {
         if (in_array(IntVal($arTaxRateList["TAX_ID"]), $arResult["TaxExempt"])) {
             $arResult["HaveTaxExempts"] = "Y";
             break;
         }
     }
 }
 if (CModule::IncludeModule("statistic")) {
     $event1 = "eStore";
     $event2 = "Step4_4";
     $event3 = "";
     foreach ($arProductsInBasket as $ar_prod) {
         $event3 .= $ar_prod["PRODUCT_ID"] . ", ";
     }
     $e = $event1 . "/" . $event2 . "/" . $event3;
Example #11
0
 public static function isTaxMode()
 {
     if (self::isVatMode()) {
         return false;
     }
     if (!CModule::IncludeModule('sale')) {
         return false;
     }
     $count = 0;
     $dbActiveTaxRates = CSaleTaxRate::GetList(array(), array('ACTIVE' => 'Y'));
     $arFields = $dbActiveTaxRates->Fetch();
     return is_array($arFields);
 }
Example #12
0
 /**
  * <p>Метод изменяет параметры ставки налога с кодом ID. Метод динамичный.</p>
  *
  *
  * @param int $ID  Код ставки налога. </ht
  *
  * @param array $arFields  Ассоциативный массив новых параметров ставки налога. Ключами
  * являются названия параметров ставки, а значениями -
  * соответствующие значения.<br><br> Допустимые ключи: <ul> <li> <b>TAX_ID</b> -
  * код налога;</li> <li> <b>PERSON_TYPE_ID</b> - тип плательщика;</li> <li> <b>VALUE</b> -
  * величина налога (в процентах);</li> <li> <b>CURRENCY</b> - валюта;</li> <li>
  * <b>IS_PERCENT</b> - всегда значение "Y";</li> <li> <b>IS_IN_PRICE</b> - налог уже включен
  * в цену товара;</li> <li> <b>APPLY_ORDER</b> - порядок применения;</li> <li> <b>ACTIVE</b> -
  * флаг (Y/N) активности налога;</li> <li> <b>TAX_LOCATION</b> - массив для указания
  * местоположений и групп местоположений, для которых действует эта
  * ставка. Каждый элемент массива представляет собой ассоциативный
  * массив с ключами: <ul> <li> <b>LOCATION_ID</b> - код местоположения или группы
  * местоположений;</li> <li> <b>LOCATION_TYPE</b> - "L" для местоположения и "G" для
  * группы местоположений.</li> </ul> </li> </ul>
  *
  * @return int <p>Возвращается код измененной ставки налога или <i>false</i> в случае
  * ошибки.</p> <br><br>
  *
  * @static
  * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaletaxrate/csaletaxrate__update.bd202837.php
  * @author Bitrix
  */
 public static function Update($ID, $arFields, $arOptions = array())
 {
     global $DB;
     $ID = intval($ID);
     if (0 >= $ID) {
         return false;
     }
     if (!CSaleTaxRate::CheckFields("UPDATE", $arFields)) {
         return false;
     }
     $strUpdate = $DB->PrepareUpdate("b_sale_tax_rate", $arFields);
     $strSql = "UPDATE b_sale_tax_rate SET TIMESTAMP_X = " . $DB->GetNowFunction() . ", " . $strUpdate . " WHERE ID = " . $ID;
     $DB->Query($strSql, false, "File: " . __FILE__ . "<br>Line: " . __LINE__);
     if (array_key_exists("TAX_LOCATION", $arFields)) {
         CSaleTaxRate::SetTaxRateLocation($ID, $arFields["TAX_LOCATION"], $arOptions);
     }
     return $ID;
 }
Example #13
0
                        $error = GetMessage('CRM_TAXRATE_UPDATE_GENERAL_ERROR');
                    }
                    ShowError($error);
                    return;
                }
            }
        }
    }
    if (!isset($_POST['AJAX_CALL'])) {
        LocalRedirect($APPLICATION->GetCurPage());
    }
} elseif ($_SERVER['REQUEST_METHOD'] == 'GET' && check_bitrix_sessid() && isset($_GET['action_' . $arResult['GRID_ID']])) {
    if ($arResult['CAN_DELETE'] && $_GET['action_' . $arResult['GRID_ID']] === 'delete') {
        $rateID = isset($_GET['ID']) ? $_GET['ID'] : '';
        if ($rateID > 0) {
            if (!CSaleTaxRate::Delete($rateID)) {
                ShowError(GetMessage('CRM_TAXRATE_DELETION_GENERAL_ERROR'));
            }
        }
        unset($_GET['ID'], $_REQUEST['ID']);
        // otherwise the filter will work
    }
    if (!isset($_GET['AJAX_CALL'])) {
        LocalRedirect($bInternal ? '?' . $arParams['TAX_FORM_ID'] . '_active_tab=tab_props' : '');
    }
}
$gridOptions = new CCrmGridOptions($arResult['GRID_ID']);
$gridSorting = $gridOptions->GetSorting(array('sort' => array('ID' => 'asc'), 'vars' => array('by' => 'by', 'order' => 'order')));
$sort = $arResult['SORT'] = $gridSorting['sort'];
$arResult['SORT_VARS'] = $gridSorting['vars'];
$dbPersonType = CSalePersonType::GetList(array("SORT" => "ASC", "NAME" => "ASC"), array());
Example #14
0
}
if (strlen($lang) <= 0) {
    $lang = "ru";
}
$bRus = false;
if ($lang == "ru") {
    $bRus = true;
}
__IncludeLang(GetLangFileName(dirname(__FILE__) . "/lang/", "/step8.php", $lang));
$dbLocation = CSaleLocation::GetList(array("ID" => "ASC"), array("LID" => $lang));
if ($arLocation = $dbLocation->Fetch()) {
    $arLocation4Delivery = array();
    do {
        $arLocation4Delivery[] = array("LOCATION_ID" => $arLocation["ID"], "LOCATION_TYPE" => "L");
    } while ($arLocation = $dbLocation->Fetch());
    //Location group
    $dblocationGroupID = CSaleLocationGroup::GetList(array("ID" => "DESC"));
    if ($arLocationGroupID = $dblocationGroupID->Fetch()) {
        $locationGroupID = $arLocationGroupID["ID"];
    }
    $arLocation4Delivery[] = array("LOCATION_ID" => $locationGroupID, "LOCATION_TYPE" => "G");
    //delivery handler
    CSaleDeliveryHandler::Set("simple", array("LID" => "", "ACTIVE" => "Y", "HID" => "simple", "NAME" => GetMessage("SALE_WIZARD_COUR1"), "SORT" => 100, "DESCRIPTION" => "", "HANDLERS" => "/bitrix/modules/sale/delivery/delivery_simple.php", "SETTINGS" => "", "PROFILES" => "", "TAX_RATE" => 0, "CONFIG" => array("price_" . $locationGroupID => "100")));
    //Tax
    $taxID = CSaleTax::Add(array("LID" => $siteID, "NAME" => GetMessage("SALE_WIZARD_VAT"), "CODE" => "NDS"));
    $dbPerson = CSalePersonType::GetList(array("SORT" => "DESC"));
    if ($arPerson = $dbPerson->Fetch()) {
        //Tax rate
        CSaleTaxRate::Add(array("TAX_ID" => $taxID, "PERSON_TYPE_ID" => $arPerson["ID"], "VALUE" => 18, "CURRENCY" => $bRus ? "RUB" : "USD", "IS_PERCENT" => "Y", "IS_IN_PRICE" => "Y", "APPLY_ORDER" => 100, "ACTIVE" => "Y", "TAX_LOCATION" => $arLocation4Delivery));
    }
}
Example #15
0
 /**
  * @return array
  */
 protected function loadAvailableList()
 {
     $order = $this->getOrder();
     $basket = $order->getBasket();
     if (!$basket) {
         return null;
     }
     if (!$order->isUsedVat()) {
         $taxExemptList = static::loadExemptList($order->getUserId());
         $taxRateRes = \CSaleTaxRate::GetList(array("APPLY_ORDER" => "ASC"), array("LID" => $order->getSiteId(), "PERSON_TYPE_ID" => $order->getPersonTypeId(), "ACTIVE" => "Y", "LOCATION" => $order->getTaxLocation()));
         while ($taxRate = $taxRateRes->GetNext()) {
             if (!in_array(intval($taxRate["TAX_ID"]), $taxExemptList)) {
                 if ($taxRate["IS_PERCENT"] != "Y") {
                     $taxRate["VALUE"] = RoundEx(\CCurrencyRates::convertCurrency($taxRate["VALUE"], $taxRate["CURRENCY"], $order->getCurrency()), SALE_VALUE_PRECISION);
                     $taxRate["CURRENCY"] = $order->getCurrency();
                 }
                 $this->availableList[] = $taxRate;
             }
         }
     } else {
         $this->availableList[] = array("NAME" => Loc::getMessage("SOA_VAT"), "IS_PERCENT" => "Y", "VALUE" => $order->getVatRate() * 100, "VALUE_FORMATED" => "(" . $order->getVatRate() * 100 . "%, " . GetMessage("SOA_VAT_INCLUDED") . ")", "VALUE_MONEY" => $order->getVatSum(), "VALUE_MONEY_FORMATED" => SaleFormatCurrency($order->getVatSum(), $order->getCurrency()), "APPLY_ORDER" => 100, "IS_IN_PRICE" => "Y", "CODE" => "VAT");
     }
     return $this->availableList;
 }
Example #16
0
	/**
	 * <p>Метод осуществляет продление подписки с кодом ID.</p> <p><b>Примечание</b>. Метод использует внутреннюю транзакцию. Если у вас используется <b>MySQL</b> и <b>InnoDB</b>, и ранее была открыта транзакция, то ее необходимо закрыть до подключения метода.</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код записи с информацией о продлении.
	 *
	 *
	 *
	 * @return bool <p>Метод возвращает <i>true</i> в случае успешного продления или <i>false</i>
	 * в случае ошибки.</p><br><br>
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalerecurring/csalerecurring.nextpayment.php
	 * @author Bitrix
	 */
	public static function NextPayment($ID)
	{
		global $DB;
		global $USER;

		$ID = IntVal($ID);
		if ($ID <= 0)
		{
			$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGR_NO_RECID"), "NO_RECORD_ID");
			return False;
		}

		$arRecur = CSaleRecurring::GetByID($ID);
		if (!$arRecur)
		{
			$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $ID, GetMessage("SKGR_NO_RECID1")), "NO_RECORD");
			return False;
		}

		$arOrder = CSaleOrder::GetByID($arRecur["ORDER_ID"]);
		if (!$arOrder)
		{
			$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $arRecur["ORDER_ID"], GetMessage("SKGR_NO_ORDER1")), "NO_ORDER");
			return False;
		}


		$bSuccess = True;
		$newOrderID = IntVal($arRecur["ORDER_ID"]);

		/** @var $productProvider IBXSaleProductProvider */
		if ($productProvider = CSaleBasket::GetProductProvider($arRecur))
		{
			$arProduct = $productProvider::RecurringOrderProduct(array(
				"PRODUCT_ID" => $arRecur["PRODUCT_ID"],
				"USER_ID"    => $arOrder["USER_ID"]
			));
		}
		else
		{
			$arProduct = CSaleRecurring::ExecuteCallbackFunction(
					$arRecur["CALLBACK_FUNC"],
					$arRecur["MODULE"],
					$arRecur["PRODUCT_ID"],
					$arOrder["USER_ID"]
				);
		}

		if (!$arProduct || !is_array($arProduct) || count($arProduct) <= 0)
		{
			CSaleRecurring::CancelRecurring($arRecur["ID"], "Y", "Product is not found");

			/*
			$arFields = array(
					"CANCELED" => "Y",
					"DATE_CANCELED" => Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))),
					"CANCELED_REASON" => "Product is not found"
				);
			CSaleRecurring::Update($arRecur["ID"], $arFields);
			*/
			//CSaleRecurring::Delete($arRecur["ID"]);

			return True;
		}

		if ($arProduct["WITHOUT_ORDER"] == "Y" || $arRecur["SUCCESS_PAYMENT"] == "Y")
		{
			$baseSiteCurrency = CSaleLang::GetLangCurrency($arOrder["LID"]);
			$productPrice = roundEx(CCurrencyRates::ConvertCurrency($arProduct["PRICE"], $arProduct["CURRENCY"], $baseSiteCurrency), SALE_VALUE_PRECISION);

			// Delivery
			$deliveryPrice = 0;
			$deliveryID = 0;
			$arOrder["DELIVERY_ID"] = IntVal($arOrder["DELIVERY_ID"]);
			if ($arOrder["DELIVERY_ID"] > 0)
			{
				$deliveryLocation = 0;
				$dbOrderPropValues = CSaleOrderPropsValue::GetList(
						array(),
						array(
								"ORDER_ID" => $arRecur["ORDER_ID"],
								"PROP_IS_LOCATION" => "Y"
							),
						false,
						false,
						array("VALUE")
					);
				if ($arOrderPropValues = $dbOrderPropValues->Fetch())
					$deliveryLocation = IntVal($arOrderPropValues["VALUE"]);

				$dbDelivery = CSaleDelivery::GetList(
						array("SORT" => "ASC", "NAME" => "ASC"),
						array(
								"LID" => $arOrder["LID"],
								"WEIGHT" => DoubleVal($arProduct["WEIGHT"]) * DoubleVal($arProduct["QUANTITY"]), // Changed by Sigurd, 2007-08-16
								"ORDER_PRICE" => $productPrice * DoubleVal($arProduct["QUANTITY"]),
								"ACTIVE" => "Y",
								"LOCATION" => $deliveryLocation
							)
					);
				while ($arDelivery = $dbDelivery->Fetch())
				{
					$deliveryPriceTmp = roundEx(CCurrencyRates::ConvertCurrency($arDelivery["PRICE"], $arDelivery["CURRENCY"], $baseSiteCurrency), SALE_VALUE_PRECISION);
					if (IntVal($arDelivery["ID"]) == $arOrder["DELIVERY_ID"])
					{
						$deliveryID = IntVal($arDelivery["ID"]);
						$deliveryPrice = $deliveryPriceTmp;
						break;
					}
					if ($deliveryPriceTmp < $deliveryPrice || $deliveryID <= 0)
					{
						$deliveryID = IntVal($arDelivery["ID"]);
						$deliveryPrice = $deliveryPriceTmp;
					}
				}

				if ($deliveryID <= 0)
				{
					$GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGR_NO_DELIVERY"), "NO_DELIVERY");
					return False;
				}
			}

			// Sale discounts
			$discount = 0;
			$discountPrice = $productPrice;
			$discountProduct = 0;
			$dbDiscount = CSaleDiscount::GetList(
					array("SORT" => "ASC"),
					array(
							"LID" => $arOrder["LID"],
							"ACTIVE" => "Y",
							"!>ACTIVE_FROM" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
							"!<ACTIVE_TO" => Date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL"))),
							"<=PRICE_FROM" => $productPrice,
							">=PRICE_TO" => $productPrice,
							"USER_GROUPS" => $USER->GetUserGroup($arOrder['USER_ID']),
						)
				);
			if ($arDiscount = $dbDiscount->Fetch())
			{
				if ($arDiscount["DISCOUNT_TYPE"] == "P")
				{
					$discountProduct = roundEx($productPrice * $arDiscount["DISCOUNT_VALUE"] / 100, SALE_VALUE_PRECISION);
					$discount = roundEx($discountProduct * DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION); // Changed by Sigurd, 2007-08-16
					$discountPrice = $productPrice - $discountProduct;
				}
				else
				{
					$discountValue = CCurrencyRates::ConvertCurrency($arDiscount["DISCOUNT_VALUE"], $arDiscount["CURRENCY"], $baseSiteCurrency);
					$discountValue = roundEx($discountValue, SALE_VALUE_PRECISION);

					$discountProduct = roundEx(1.0 * $discountValue / DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION);// Changed by Sigurd, 2007-08-16
					$discount = roundEx($curDiscount * DoubleVal($arProduct["QUANTITY"]), SALE_VALUE_PRECISION);
					$discountPrice = $productPrice - $discountProduct;
				}
			}

			$bUseVat = false;
			$vatRate = 0;
			if(DoubleVal($arProduct["VAT_RATE"]) > 0)
			{
				$bUseVat = true;
				$vatRate = $arProduct["VAT_RATE"];
			}

			// Tax
			$arTaxExempt = array();
			$dbUserGroups = CUser::GetUserGroupEx($arOrder["USER_ID"]);
			while ($arUserGroups = $dbUserGroups->Fetch())
			{
				$dbTaxExemptTmp = CSaleTax::GetExemptList(array("GROUP_ID" => $arUserGroups["GROUP_ID"]));
				while ($arTaxExemptTmp = $dbTaxExemptTmp->Fetch())
				{
					$arTaxExemptTmp["TAX_ID"] = IntVal($arTaxExemptTmp["TAX_ID"]);
					if (!in_array($arTaxExemptTmp["TAX_ID"], $arTaxExempt))
						$arTaxExempt[] = $arTaxExemptTmp["TAX_ID"];
				}
			}

			$taxPrice = 0;
			$taxVatPrice = 0;
			if(!$bUseVat)
			{
				$taxLocation = 0;
				$dbOrderPropValues = CSaleOrderPropsValue::GetList(
						array(),
						array(
								"ORDER_ID" => $arRecur["ORDER_ID"],
								"PROP_IS_LOCATION4TAX" => "Y"
							),
						false,
						false,
						array("VALUE")
					);
				if ($arOrderPropValues = $dbOrderPropValues->Fetch())
					$taxLocation = IntVal($arOrderPropValues["VALUE"]);

				$arTaxList = array();
				$dbTaxRateTmp = CSaleTaxRate::GetList(
						array("APPLY_ORDER" => "ASC"),
						array(
								"LID" => $arOrder["LID"],
								"PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"],
								"ACTIVE" => "Y",
								"LOCATION" => $taxLocation
							)
					);
				while ($arTaxRateTmp = $dbTaxRateTmp->Fetch())
				{
					if (!in_array(IntVal($arTaxRateTmp["TAX_ID"]), $arTaxExempt))
					{
						$arTaxList[] = $arTaxRateTmp;
					}
				}
			}
			else
			{
				$arTaxList[] = Array(
							"ID" => 0,
							"TAX_NAME" => GetMessage("SKGR_VAT"),
							"IS_PERCENT" => "Y",
							"VALUE" => $vatRate*100,
							"VALUE_MONEY" => 0,
							"APPLY_ORDER" => 100,
							"IS_IN_PRICE" => "Y",
							"CODE" => "VAT"
				);
			}


			$arTaxSums = array();

			if (!empty($arTaxList))
			{
				if(!$bUseVat)
				{
					$taxPriceTmp = CSaleOrderTax::CountTaxes(
							$discountPrice * DoubleVal($arProduct["QUANTITY"]),
							$arTaxList,
							$baseSiteCurrency
						);

					for ($di = 0, $intCount = count($arTaxList); $di < $intCount; $di++)
					{
						$arTaxList[$di]["VALUE_MONEY"] += $arTaxList[$di]["TAX_VAL"];
					}

					for ($di = 0, $intCount = count($arTaxList); $di < $intCount; $di++)
					{
						$arTaxSums[$arTaxList[$di]["TAX_ID"]]["VALUE"] = $arTaxList[$di]["VALUE_MONEY"];
						$arTaxSums[$arTaxList[$di]["TAX_ID"]]["NAME"] = $arTaxList[$di]["NAME"];
						if ($arTaxList[$di]["IS_IN_PRICE"] != "Y")
						{
							$taxPrice += $arTaxList[$di]["VALUE_MONEY"];
						}
					}
				}
				else
				{
					$arTaxList[0]["VALUE_MONEY"] = (($discountPrice / ($vatRate +1)) * $vatRate) * DoubleVal($arProduct["QUANTITY"]);
					$taxVatPrice = $arTaxList[0]["VALUE_MONEY"];
				}
			}


			// Changed by Sigurd, 2007-08-16
			$totalOrderPrice = $discountPrice * DoubleVal($arProduct["QUANTITY"]) + $deliveryPrice + $taxPrice;

			$arProduct["WITHOUT_ORDER"] = (($arProduct["WITHOUT_ORDER"]=="Y") ? "Y" : "N");
			if ($arProduct["WITHOUT_ORDER"] == "N")
			{
				$DB->StartTransaction();

				// Saving
				$arSaleUser = CSaleUser::GetList(Array(), Array("USER_ID" => $arOrder["USER_ID"]));
				if(!empty($arSaleUser))
				{
					$currentFUser = $arSaleUser["ID"];
				}
				else
				{
					$currentFUser = CSaleUser::_Add(
							array(
									"=DATE_INSERT" => $DB->GetNowFunction(),
									"=DATE_UPDATE" => $DB->GetNowFunction(),
									"USER_ID" => $arOrder["USER_ID"]
								)
						);
				}

				$arFields = array(
						"FUSER_ID" => $currentFUser,
						"PRODUCT_ID" => $arProduct["PRODUCT_ID"],
						"PRODUCT_NAME" => $arProduct["PRODUCT_NAME"],
						"PRODUCT_URL" => $arProduct["PRODUCT_URL"],
						"PRODUCT_PRICE_ID" => $arProduct["PRODUCT_PRICE_ID"],
						"PRICE" => $arProduct["PRICE"],
						"CURRENCY" => $arProduct["CURRENCY"],
						"WEIGHT" => $arProduct["WEIGHT"],
						"QUANTITY" => $arProduct["QUANTITY"],
						"LID" => $arOrder["LID"],
						"DELAY" => "N",
						"CAN_BUY" => "Y",
						"NAME" => $arProduct["NAME"],
						"CALLBACK_FUNC" => $arProduct["CALLBACK_FUNC"],
						"ORDER_CALLBACK_FUNC" => $arProduct["ORDER_CALLBACK_FUNC"],
						"CANCEL_CALLBACK_FUNC" => $arProduct["CANCEL_CALLBACK_FUNC"],
						"PAY_CALLBACK_FUNC" => $arProduct["PAY_CALLBACK_FUNC"],
						"PRODUCT_PROVIDER_CLASS" => $arProduct["PRODUCT_PROVIDER_CLASS"],
						"MODULE" => $arRecur["MODULE"],
						"NOTES" => $arProduct["CATALOG_GROUP_NAME"],
						"DETAIL_PAGE_URL" => $arProduct["DETAIL_PAGE_URL"],
						"VATE_RATE" => $arProduct["VATE_RATE"],
						"PRODUCT_XML_ID" => $arProduct["PRODUCT_XML_ID"],
						"RENEWAL" => "Y"
					);

				$basketID = CSaleBasket::Add($arFields);

				$basketID = IntVal($basketID);
				if ($basketID <= 0)
					$bSuccess = False;

				if ($bSuccess)
				{
					if (CModule::IncludeModule("statistic"))
						CStatistic::Set_Event("eStore", "add2basket", $arFields["PRODUCT_ID"]);

					$arFields = array(
							"LID" => $arOrder["LID"],
							"PERSON_TYPE_ID" => $arOrder["PERSON_TYPE_ID"],
							"PAYED" => "N",
							"CANCELED" => "N",
							"STATUS_ID" => "N",
							"PRICE_DELIVERY" => $deliveryPrice,
							"ALLOW_DELIVERY" => "N",
							"PRICE" => $totalOrderPrice,
							"CURRENCY" => $baseSiteCurrency,
							"DISCOUNT_VALUE" => $discount,
							"USER_ID" => $arOrder["USER_ID"],
							"PAY_SYSTEM_ID" => $arOrder["PAY_SYSTEM_ID"],
							"DELIVERY_ID" => $deliveryID,
							"USER_DESCRIPTION" => $arOrder["USER_DESCRIPTION"],
							"TAX_VALUE" => (($bUseVat)? $taxVatPrice : $taxPrice),
							"STAT_GID" => $arOrder["STAT_GID"],
							"RECURRING_ID" => $arRecur["ID"]
						);

					$newOrderID = CSaleOrder::Add($arFields);

					$newOrderID = IntVal($newOrderID);
					if ($newOrderID <= 0)
						$bSuccess = False;
				}

				if ($bSuccess)
				{
					$arDiscounts = array();
					$arDiscounts[$basketID] = $discountProduct;
					CSaleBasket::OrderBasket($newOrderID, $currentFUser, $arOrder["LID"], $arDiscounts);
				}

				if ($bSuccess)
				{
					for ($it = 0, $intCount = count($arTaxList); $it < $intCount; $it++)
					{
						$arFields = array(
							"ORDER_ID" => $newOrderID,
							"TAX_NAME" => $arTaxList[$it]["TAX_NAME"],
							"IS_PERCENT" => $arTaxList[$it]["IS_PERCENT"],
							"VALUE" => ($arTaxList[$it]["IS_PERCENT"]=="Y") ? $arTaxList[$it]["VALUE"] : RoundEx(CCurrencyRates::ConvertCurrency($arTaxList[$it]["VALUE"], $arTaxList[$it]["CURRENCY"], $baseSiteCurrency), 2),
							"VALUE_MONEY" => $arTaxList[$it]["VALUE_MONEY"],
							"APPLY_ORDER" => $arTaxList[$it]["APPLY_ORDER"],
							"IS_IN_PRICE" => $arTaxList[$it]["IS_IN_PRICE"],
							"CODE" => $arTaxList[$it]["CODE"]
							);
						CSaleOrderTax::Add($arFields);
					}

					$dbOrderPropValues = CSaleOrderPropsValue::GetList(
							array(),
							array("ORDER_ID" => $arRecur["ORDER_ID"]),
							false,
							false,
							array("ORDER_PROPS_ID", "NAME", "CODE", "VALUE", "PROP_IS_PAYER", "PROP_IS_EMAIL")
						);
					while ($arOrderPropValues = $dbOrderPropValues->Fetch())
					{
						$arFields = array(
							"ORDER_ID" => $newOrderID,
							"ORDER_PROPS_ID" => $arOrderPropValues["ORDER_PROPS_ID"],
							"NAME" => $arOrderPropValues["NAME"],
							"CODE" => $arOrderPropValues["CODE"],
							"VALUE" => $arOrderPropValues["VALUE"]
							);
						CSaleOrderPropsValue::Add($arFields);

						if ($arOrderPropValues["PROP_IS_PAYER"] == "Y")
							$payerName = $arOrderPropValues["VALUE"];
						if ($arOrderPropValues["PROP_IS_EMAIL"] == "Y")
							$payerEMail = $arOrderPropValues["VALUE"];
					}
				}

				if ($bSuccess)
				{
					if (CModule::IncludeModule("statistic"))
						CStatistic::Set_Event("eStore", "order_create", $newOrderID);
				}

				if ($bSuccess)
				{
					$strOrderList = "";
					$dbBasketTmp = CSaleBasket::GetList(
						array("NAME" => "ASC"),
						array("ORDER_ID" => $newOrderID)
					);
					while ($arBasketTmp = $dbBasketTmp->Fetch())
					{
						$strOrderList .= $arBasketTmp["NAME"]." - ".$arBasketTmp["QUANTITY"]." ".GetMessage("SALE_QUANTITY_UNIT");
						$strOrderList .= "\n";
					}

					if (strlen($payerName) <= 0 || strlen($payerEMail) <= 0)
					{
						$dbUser = CUser::GetByID($arOrder["USER_ID"]);
						if ($arUser = $dbUser->Fetch())
						{
							if (strlen($payerName) <= 0)
								$payerName = $arUser["NAME"].((strlen($arUser["NAME"])<=0 || strlen($arUser["LAST_NAME"])<=0) ? "" : " ").$arUser["LAST_NAME"];
							if (strlen($payerEMail) <= 0)
								$payerEMail = $arUser["EMAIL"];
						}
					}

					$arFields = Array(
						"ORDER_ID" => $newOrderID,
						"ORDER_DATE" => Date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT", $arOrder["LID"]))),
						"ORDER_USER" => $payerName,
						"PRICE" => SaleFormatCurrency($totalOrderPrice, $baseSiteCurrency),
						"BCC" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME),
						"EMAIL" => $payerEMail,
						"ORDER_LIST" => $strOrderList,
						"SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME)
					);
					$eventName = "SALE_NEW_ORDER_RECURRING";

					$bSend = true;
					foreach(GetModuleEvents("sale", "OnOrderRecurringSendEmail", true) as $arEvent)
					{
						if (ExecuteModuleEventEx($arEvent, Array($newOrderID, &$eventName, &$arFields))===false)
							$bSend = false;
					}

					if($bSend)
					{
						$event = new CEvent;
						$event->Send($eventName, $arOrder["LID"], $arFields, "N");
					}
				}

				if ($bSuccess)
					$DB->Commit();
				else
					$DB->Rollback();
			}
		}
		else
		{
			$totalOrderPrice = $arOrder["PRICE"];
			$baseSiteCurrency = $arOrder["CURRENCY"];
		}

		$res = False;
		if ($bSuccess)
		{
			$res = CSaleUserAccount::Pay($arOrder["USER_ID"], $totalOrderPrice, $baseSiteCurrency, $newOrderID, True);
			if ($res)
			{
				if ($arProduct["WITHOUT_ORDER"] == "N")
				{
					CSaleOrder::PayOrder($newOrderID, "Y", False, False, $arRecur["ID"]);
					CSaleOrder::DeliverOrder($newOrderID, "Y", $arRecur["ID"]);
					CSaleOrder::DeductOrder($newOrderID, "Y", "", true, array(), $arRecur["ID"]);
				}
				else
				{
					/** @var $productProvider IBXSaleProductProvider */
					if ($productProvider = CSaleBasket::GetProductProvider($arProduct))
					{
						$r = $productProvider::DeliverProduct(array(
							"PRODUCT_ID" => $arProduct["PRODUCT_ID"],
							"USER_ID"    => $arOrder["USER_ID"],
							"PAID"       => true
						));
					}
					else
					{
						$r = CSaleBasket::ExecuteCallbackFunction(
							$arProduct["PAY_CALLBACK_FUNC"],
							$arRecur["MODULE"],
							$arProduct["PRODUCT_ID"],
							$arOrder["USER_ID"],
							true
						);
					}
				}

				$arFields = array(
					"ORDER_ID" => $newOrderID,
					"PRODUCT_NAME" => $arProduct["PRODUCT_NAME"],
					"PRODUCT_URL" => $arProduct["PRODUCT_URL"],
					"PRICE_TYPE" => $arProduct["PRICE_TYPE"],
					"RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"],
					"RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"],
					"WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"],
					"PRIOR_DATE" => Date($GLOBALS["DB"]->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID))),
					"NEXT_DATE" => $arProduct["NEXT_DATE"],
					"REMAINING_ATTEMPTS" => (Defined("SALE_PROC_REC_ATTEMPTS") ? SALE_PROC_REC_ATTEMPTS : 3),
					"SUCCESS_PAYMENT" => "Y"
				);

				CSaleRecurring::Update($arRecur["ID"], $arFields);
			}
			else
			{
				$arFields = array(
						"ORDER_ID" => $newOrderID,
						"PRODUCT_NAME" => $arProduct["PRODUCT_NAME"],
						"PRODUCT_URL" => $arProduct["PRODUCT_URL"],
						"PRICE_TYPE" => $arProduct["PRICE_TYPE"],
						"RECUR_SCHEME_LENGTH" => $arProduct["RECUR_SCHEME_LENGTH"],
						"RECUR_SCHEME_TYPE" => $arProduct["RECUR_SCHEME_TYPE"],
						"WITHOUT_ORDER" => $arProduct["WITHOUT_ORDER"],
						"NEXT_DATE" => Date($GLOBALS["DB"]->DateFormatToPHP(CLang::GetDateFormat("FULL", SITE_ID)), time() + SALE_PROC_REC_TIME + CTimeZone::GetOffset()),
						"REMAINING_ATTEMPTS" => (IntVal($arRecur["REMAINING_ATTEMPTS"]) - 1),
						"SUCCESS_PAYMENT" => "N"
					);
				CSaleRecurring::Update($arRecur["ID"], $arFields);

				if ((IntVal($arRecur["REMAINING_ATTEMPTS"]) - 1) <= 0)
				{
					CSaleRecurring::CancelRecurring($arRecur["ID"], "Y", "Can't pay order");
					/*
					$arFields["CANCELED"] = "Y";
					$arFields["DATE_CANCELED"] = Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG)));
					$arFields["CANCELED_REASON"] = "Can't pay order";
					*/
				}
			}
		}

		return $res;
	}
Example #17
0
 $fieldShow = $f_NAME . "<br><small>" . $f_DESCRIPTION . "</small><br>";
 if ($row->VarsFromForm() && $_REQUEST["FIELDS"]) {
     $valName = $_REQUEST["FIELDS"][$f_ID]["NAME"];
     $valDescr = $_REQUEST["FIELDS"][$f_ID]["DESCRIPTION"];
 } else {
     $valName = $f_NAME;
     $valDescr = $f_DESCRIPTION;
 }
 $fieldEdit = "<input type=\"text\" name=\"FIELDS[" . $f_ID . "][NAME]\" value=\"" . htmlspecialcharsbx($valName) . "\" size=\"30\"><br>";
 $fieldEdit .= "<input type=\"text\" name=\"FIELDS[" . $f_ID . "][DESCRIPTION]\" value=\"" . htmlspecialcharsbx($valDescr) . "\" size=\"30\">";
 $row->AddField("NAME", $fieldShow, $fieldEdit);
 $row->AddInputField("CODE");
 $fieldShow = "";
 if (in_array("STAV", $arVisibleColumns)) {
     $num = 0;
     $dbRes = CSaleTaxRate::GetList(array(), array("TAX_ID" => $f_ID));
     while ($dbRes->Fetch()) {
         $num++;
     }
     if ($num > 0) {
         $fieldShow = "<a href=\"sale_tax_rate.php?lang=" . LANG . "&filter_tax_id=" . $f_ID . "&set_filter=Y\" title=\"" . GetMessage("TAX_RATE_DESCR") . "\">" . $num . "</a>";
     } else {
         $fieldShow = "0";
     }
 }
 $row->AddField("STAV", $fieldShow);
 $arActions = array();
 $arActions[] = array("ICON" => "edit", "TEXT" => GetMessage("TAX_EDIT_DESCR"), "ACTION" => $lAdmin->ActionRedirect("sale_tax_edit.php?ID=" . $f_ID . "&lang=" . LANG . GetFilterParams("filter_") . ""), "DEFAULT" => true);
 if ($saleModulePermissions >= "W") {
     $arActions[] = array("SEPARATOR" => true);
     $arActions[] = array("ICON" => "delete", "TEXT" => GetMessage("SALE_DELETE_DESCR"), "ACTION" => "if(confirm('" . GetMessage('TAX_DEL_CONF') . "')) " . $lAdmin->ActionDoGroup($f_ID, "delete"));