Exemple #1
0
 function OrderDelivery($orderID, $bPaid, $recurringID = 0)
 {
     global $DB, $APPLICATION;
     $orderID = IntVal($orderID);
     if ($orderID <= 0) {
         return False;
     }
     $bPaid = $bPaid ? True : False;
     $recurringID = IntVal($recurringID);
     $arOrder = CSaleOrder::GetByID($orderID);
     if ($arOrder) {
         $dbBasketList = CSaleBasket::GetList(array("NAME" => "ASC"), array("ORDER_ID" => $orderID));
         while ($arBasket = $dbBasketList->Fetch()) {
             if (strlen($arBasket["PAY_CALLBACK_FUNC"]) > 0 || strlen($arBasket["PRODUCT_PROVIDER_CLASS"]) > 0) {
                 if ($bPaid) {
                     /** @var $productProvider IBXSaleProductProvider */
                     if ($productProvider = CSaleBasket::GetProductProvider($arBasket)) {
                         $arFields = $productProvider::DeliverProduct(array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "USER_ID" => $arOrder["USER_ID"], "PAID" => $bPaid, "ORDER_ID" => $orderID, 'BASKET_ID' => $arBasket['ID']));
                     } else {
                         $arFields = CSaleBasket::ExecuteCallbackFunction($arBasket["PAY_CALLBACK_FUNC"], $arBasket["MODULE"], $arBasket["PRODUCT_ID"], $arOrder["USER_ID"], $bPaid, $orderID, $arBasket["QUANTITY"]);
                     }
                     if ($arFields && is_array($arFields) && count($arFields) > 0) {
                         $arFields["ORDER_ID"] = $orderID;
                         $arFields["REMAINING_ATTEMPTS"] = Defined("SALE_PROC_REC_ATTEMPTS") ? SALE_PROC_REC_ATTEMPTS : 3;
                         $arFields["SUCCESS_PAYMENT"] = "Y";
                         if ($recurringID > 0) {
                             CSaleRecurring::Update($recurringID, $arFields);
                         } else {
                             CSaleRecurring::Add($arFields);
                         }
                     } elseif ($recurringID > 0) {
                         CSaleRecurring::Delete($recurringID);
                     }
                 } else {
                     /** @var $productProvider IBXSaleProductProvider */
                     if ($productProvider = CSaleBasket::GetProductProvider($arBasket)) {
                         $productProvider::DeliverProduct(array("PRODUCT_ID" => $arBasket["PRODUCT_ID"], "USER_ID" => $arOrder["USER_ID"], "PAID" => $bPaid, "ORDER_ID" => $orderID, 'BASKET_ID' => $arBasket['ID']));
                     } else {
                         CSaleBasket::ExecuteCallbackFunction($arBasket["PAY_CALLBACK_FUNC"], $arBasket["MODULE"], $arBasket["PRODUCT_ID"], $arOrder["USER_ID"], $bPaid, $orderID, $arBasket["QUANTITY"]);
                     }
                     $dbRecur = CSaleRecurring::GetList(array(), array("USER_ID" => $arOrder["USER_ID"], "PRODUCT_ID" => $arBasket["PRODUCT_ID"], "MODULE" => $arBasket["MODULE"]));
                     while ($arRecur = $dbRecur->Fetch()) {
                         CSaleRecurring::Delete($arRecur["ID"]);
                     }
                 }
             }
         }
     }
 }
 $CANCELED = $CANCELED == "Y" ? "Y" : "N";
 $PRIOR_DATE = Trim($PRIOR_DATE);
 $REMAINING_ATTEMPTS = IntVal($REMAINING_ATTEMPTS);
 $SUCCESS_PAYMENT = $SUCCESS_PAYMENT == "Y" ? "Y" : "N";
 $arFields = array("CANCELED" => $CANCELED, "PRIOR_DATE" => strlen($PRIOR_DATE) > 0 ? $PRIOR_DATE : False, "NEXT_DATE" => $NEXT_DATE, "DESCRIPTION" => strlen($DESCRIPTION) > 0 ? $DESCRIPTION : False, "CANCELED_REASON" => strlen($CANCELED_REASON) > 0 ? $CANCELED_REASON : False, "ORDER_ID" => $ORDER_ID, "REMAINING_ATTEMPTS" => $REMAINING_ATTEMPTS, "SUCCESS_PAYMENT" => $SUCCESS_PAYMENT);
 if ($saleModulePermissions >= "W") {
     $arFields["USER_ID"] = $USER_ID;
     $arFields["MODULE"] = $MODULE;
     $arFields["PRODUCT_ID"] = $PRODUCT_ID;
     $arFields["PRODUCT_NAME"] = $PRODUCT_NAME;
     $arFields["PRODUCT_URL"] = $PRODUCT_URL;
     $arFields["CALLBACK_FUNC"] = $CALLBACK_FUNC;
     $arFields["PRODUCT_PROVIDER_CLASS"] = $PRODUCT_PROVIDER_CLASS;
 }
 if ($ID > 0) {
     $res = CSaleRecurring::Update($ID, $arFields);
 } else {
     $ID = CSaleRecurring::Add($arFields);
     $res = $ID > 0;
 }
 if (!$res) {
     $bVarsFromForm = true;
     if ($ex = $APPLICATION->GetException()) {
         $errorMessage .= $ex->GetString() . ".<br>";
     } else {
         $errorMessage .= GetMessage("SRE_ERROR_SAVING") . ".<br>";
     }
 } else {
     if (strlen($apply) <= 0) {
         LocalRedirect("/bitrix/admin/sale_recurring_admin.php?lang=" . LANGUAGE_ID . GetFilterParams("filter_", false));
     }
                        } else {
                            $lAdmin->AddGroupError(str_replace("#ID#", $ID, GetMessage("SRA_ERROR_DELETE")), $ID);
                        }
                    }
                    $DB->Commit();
                } else {
                    $lAdmin->AddGroupError(GetMessage("SRA_NO_PERMS2DELETE"), $ID);
                }
                break;
            case "cancel":
            case "uncancel":
                $arFields = array("CANCELED" => $_REQUEST['action'] == "cancel" ? "Y" : "N");
                if ($_REQUEST['action'] != "cancel") {
                    $arFields["REMAINING_ATTEMPTS"] = Defined("SALE_PROC_REC_ATTEMPTS") ? SALE_PROC_REC_ATTEMPTS : 3;
                }
                if (!CSaleRecurring::Update($ID, $arFields)) {
                    if ($ex = $APPLICATION->GetException()) {
                        $lAdmin->AddGroupError($ex->GetString(), $ID);
                    } else {
                        $lAdmin->AddGroupError(str_replace("#ID#", $id, GetMessage("SRA_ERROR_UPDATE")), $ID);
                    }
                }
                break;
        }
    }
}
$dbResultList = CSaleRecurring::GetList(array($by => $order), $arFilter, false, false, array("*"));
$dbResultList = new CAdminResult($dbResultList, $sTableID);
$dbResultList->NavStart();
$lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("SRA_NAV")));
$lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "USER_ID", "content" => GetMessage("SRA_USER1"), "sort" => "user_id", "default" => true), array("id" => "CANCELED", "content" => GetMessage('SRA_CANC'), "sort" => "canceled", "default" => true), array("id" => "PRIOR_DATE", "content" => GetMessage("SRA_LAST_RENEW"), "sort" => "prior_date", "default" => true), array("id" => "NEXT_DATE", "content" => GetMessage("SRA_NEXT_RENEW"), "sort" => "next_date", "default" => true), array("id" => "SUCCESS_PAYMENT", "content" => GetMessage("SRA_SUCCESS_PAY"), "sort" => "success_payment", "default" => true)));
Exemple #4
0
	/**
	 * <p>Метод осуществляет отмену продления подписки с кодом ID.</p>
	 *
	 *
	 *
	 *
	 * @param int $ID  Код записи с информацией о продлении.
	 *
	 *
	 *
	 * @param string $val  "Y", если подписка отменяется, и "N", если подписка
	 * восстанавливается.
	 *
	 *
	 *
	 * @param  $string  Причина отмены подписки.
	 *
	 *
	 *
	 * @param descriptio $n = ""] 
	 *
	 *
	 *
	 * @return bool <p>Метод возвращает код отменяемой записи или <i>false</i> в случае
	 * ошибки.</p><br><br>
	 *
	 * @static
	 * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csalerecurring/csalerecurring.cancelrecurring.php
	 * @author Bitrix
	 */
	public static function CancelRecurring($ID, $val, $description = "")
	{
		global $DB, $USER;

		$ID = IntVal($ID);
		$val = (($val != "Y") ? "N" : "Y");
		$description = Trim($description);

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

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

		if ($arRecurring["CANCELED"] == $val)
		{
			$GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $ID, GetMessage("SKGR_DUB_CANCEL")), "ALREADY_FLAG");
			return False;
		}

		$arFields = array(
				"CANCELED" => $val,
				"DATE_CANCELED" => (($val == "Y") ? Date(CDatabase::DateFormatToPHP(CLang::GetDateFormat("FULL", LANG))) : False),
				"CANCELED_REASON" => ( strlen($description)>0 ? $description : false )
			);
		$res = CSaleRecurring::Update($ID, $arFields);

		unset($GLOBALS["SALE_RECURRING"]["SALE_RECURRING_CACHE_".$ID]);

		$arRecurring = CSaleRecurring::GetByID($ID);
		$dbUser = CUser::GetByID($arRecurring["USER_ID"]);
		$arUser = $dbUser->Fetch();

		$arOrder = CSaleOrder::GetByID($arRecurring["ORDER_ID"]);

		$arFields = array(
			"RECURRING_ID" => $ID,
			"PRODUCT_NAME" => $arRecurring["PRODUCT_NAME"],
			"EMAIL" => $arUser["EMAIL"],
			"CANCELED_REASON" => $description,
			"SALE_EMAIL" => COption::GetOptionString("sale", "order_email", "order@".$SERVER_NAME)
		);
		$eventName = "SALE_RECURRING_CANCEL";

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

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

		return $res;
	}