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)));
/** * <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; }