Ejemplo n.º 1
0
 /**
  * @override
  * @throws Exception
  */
 protected function prepareData()
 {
     $saleDiscountId = null;
     $wasAdded = false;
     $xmlId = $this->arParams['DISCOUNT_XML_ID'];
     $saleDiscountValue = (double) $this->arParams['DISCOUNT_VALUE'];
     $saleDiscountUnit = (string) $this->arParams['DISCOUNT_UNIT'];
     $fieldsAdd = array('LID' => $this->getSiteId(), 'NAME' => Loc::getMessage("CVP_DISCOUNT_NAME"), 'ACTIVE' => 'Y', 'ACTIVE_FROM' => '', 'ACTIVE_TO' => '', 'PRIORITY' => 1, 'SORT' => 100, 'LAST_DISCOUNT' => 'Y', 'XML_ID' => $xmlId, 'USER_GROUPS' => array(2), 'ACTIONS' => serialize(array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND'), 'CHILDREN' => array(array('CLASS_ID' => 'ActSaleBsktGrp', 'DATA' => array('Type' => 'Discount', 'Value' => $saleDiscountValue, 'Unit' => $saleDiscountUnit, 'All' => 'AND'), 'CHILDREN' => array())))), 'CONDITIONS' => serialize(array('CLASS_ID' => 'CondGroup', 'DATA' => array('All' => 'AND', 'True' => 'True'), 'CHILDREN' => array())));
     if (strlen($xmlId) <= 0) {
         return;
     }
     $fields = array('XML_ID' => $xmlId, 'ACTIVE' => 'Y');
     $saleDiscountDb = CSaleDiscount::GetList(array('DATE_CREATE' => 'DESC'), $fields, false, false, array('ID', 'ACTIONS', 'CONDITIONS'));
     if ($saleDiscount = $saleDiscountDb->Fetch()) {
         if ($saleDiscount['ACTIONS'] == $fieldsAdd['ACTIONS'] && $saleDiscount['CONDITIONS'] == $fieldsAdd['CONDITIONS']) {
             $saleDiscountId = $saleDiscount['ID'];
         }
     }
     if (!$saleDiscountId) {
         $fieldsAdd['ACTIVE'] = 'N';
         $saleDiscountId = CSaleDiscount::Add($fieldsAdd);
         $wasAdded = true;
     }
     $this->arResult['COUPON'] = '';
     if ($saleDiscountId) {
         $coupon = \Bitrix\Sale\Internals\DiscountCouponTable::generateCoupon(true);
         //$activeFrom = new \Bitrix\Main\Type\DateTime;
         //$activeTo = clone $activeFrom;
         $addDb = \Bitrix\Sale\Internals\DiscountCouponTable::add(array('DISCOUNT_ID' => $saleDiscountId, 'COUPON' => $coupon, 'TYPE' => \Bitrix\Sale\Internals\DiscountCouponTable::TYPE_ONE_ORDER, 'MAX_USE' => 1, 'USER_ID' => 0, 'DESCRIPTION' => $this->arParams['COUPON_DESCRIPTION']));
         if ($addDb->isSuccess()) {
             $this->arResult['COUPON'] = $coupon;
             if ($wasAdded) {
                 CSaleDiscount::Update($saleDiscountId, array('ACTIVE' => 'Y'));
             }
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * Update use coupon flag for discount list.
  *
  * @return void
  */
 public static function updateUseCoupons()
 {
     if (!self::isCheckedCouponsUse() || empty(self::$discountCheckList)) {
         return;
     }
     Main\Type\Collection::normalizeArrayValuesByInt(self::$discountCheckList);
     if (empty(self::$discountCheckList)) {
         return;
     }
     $withoutCoupons = array_fill_keys(self::$discountCheckList, true);
     $withCoupons = array();
     $couponIterator = DiscountCouponTable::getList(array('select' => array('DISCOUNT_ID', new Main\Entity\ExpressionField('CNT', 'COUNT(*)')), 'filter' => array('@DISCOUNT_ID' => self::$discountCheckList), 'group' => array('DISCOUNT_ID')));
     while ($coupon = $couponIterator->fetch()) {
         $coupon['CNT'] = (int) $coupon['CNT'];
         if ($coupon['CNT'] > 0) {
             $coupon['DISCOUNT_ID'] = (int) $coupon['DISCOUNT_ID'];
             unset($withoutCoupons[$coupon['DISCOUNT_ID']]);
             $withCoupons[$coupon['DISCOUNT_ID']] = true;
         }
     }
     unset($coupon, $couponIterator);
     if (!empty($withoutCoupons)) {
         $withoutCoupons = array_keys($withoutCoupons);
         DiscountTable::setUseCoupons($withoutCoupons, 'N');
     }
     if (!empty($withCoupons)) {
         $withCoupons = array_keys($withCoupons);
         DiscountTable::setUseCoupons($withCoupons, 'Y');
     }
     unset($withCoupons, $withoutCoupons);
     static::clearDiscountCheckList();
 }
Ejemplo n.º 3
0
if (!empty($errors)) {
    $errorMessage = new CAdminMessage(array('DETAILS' => implode('<br>', $errors), 'TYPE' => 'ERROR', 'MESSAGE' => Loc::getMessage('BX_SALE_DISCOUNT_COUPON_ERR_SAVE'), 'HTML' => true));
    echo $errorMessage->Show();
    unset($errorMessage);
}
$selectFields = array();
if (!$multiCoupons) {
    $defaultValues = array('DISCOUNT_ID' => '', 'COUPON' => '', 'ACTIVE' => 'Y', 'ACTIVE_FROM' => null, 'ACTIVE_TO' => null, 'TYPE' => Internals\DiscountCouponTable::TYPE_ONE_ORDER, 'MAX_USE' => 0, 'USE_COUNT' => 0, 'USER_ID' => 0, 'DESCRIPTION' => '');
    $selectFields = array('ID', 'DISCOUNT_NAME' => 'DISCOUNT.NAME');
    $selectFields = array_merge($selectFields, array_keys($defaultValues));
} else {
    $defaultValues = array('COUNT' => '', array('DISCOUNT_ID' => '', 'ACTIVE_FROM' => null, 'ACTIVE_TO' => null, 'TYPE' => Internals\DiscountCouponTable::TYPE_ONE_ORDER, 'MAX_USE' => 0));
}
$coupon = array();
if (!$multiCoupons && $couponID > 0) {
    $couponIterator = Internals\DiscountCouponTable::getList(array('select' => $selectFields, 'filter' => array('=ID' => $couponID)));
    if (!($coupon = $couponIterator->fetch())) {
        $couponID = 0;
    }
    unset($couponIterator);
}
if ($couponID == 0) {
    $coupon = $defaultValues;
}
if (!$multiCoupons) {
    $coupon['DISCOUNT_NAME'] = (string) $coupon['DISCOUNT_NAME'];
    $coupon['DISCOUNT_ID'] = (int) $coupon['DISCOUNT_ID'];
    $coupon['TYPE'] = (int) $coupon['TYPE'];
    $coupon['USE_COUNT'] = (int) $coupon['USE_COUNT'];
    $coupon['MAX_USE'] = (int) $coupon['MAX_USE'];
    $coupon['USER_ID'] = (int) $coupon['USER_ID'];
Ejemplo n.º 4
0
	{
		$totalPages = ceil($totalCount/$navyParams['SIZEN']);
		if ($navyParams['PAGEN'] > $totalPages)
			$navyParams['PAGEN'] = $totalPages;
		$getListParams['limit'] = $navyParams['SIZEN'];
		$getListParams['offset'] = $navyParams['SIZEN']*($navyParams['PAGEN']-1);
	}
	else
	{
		$navyParams['PAGEN'] = 1;
		$getListParams['limit'] = $navyParams['SIZEN'];
		$getListParams['offset'] = 0;
	}
}

$couponIterator = new CAdminResult(Internals\DiscountCouponTable::getList($getListParams), $adminListTableID);
if ($usePageNavigation)
{
	$couponIterator->NavStart($getListParams['limit'], $navyParams['SHOW_ALL'], $navyParams['PAGEN']);
	$couponIterator->NavRecordCount = $totalCount;
	$couponIterator->NavPageCount = $totalPages;
	$couponIterator->NavPageNomer = $navyParams['PAGEN'];
}
else
{
	$couponIterator->NavStart();
}

$adminList->NavText($couponIterator->GetNavPrint(Loc::getMessage('BT_SALE_DISCOUNT_COUPON_LIST_MESS_NAV')));
while ($coupon = $couponIterator->Fetch())
{
Ejemplo n.º 5
0
    unset($countQuery);
    $totalCount = (int) $totalCount['CNT'];
    if ($totalCount > 0) {
        $totalPages = ceil($totalCount / $navyParams['SIZEN']);
        if ($navyParams['PAGEN'] > $totalPages) {
            $navyParams['PAGEN'] = $totalPages;
        }
        $getListParams['limit'] = $navyParams['SIZEN'];
        $getListParams['offset'] = $navyParams['SIZEN'] * ($navyParams['PAGEN'] - 1);
    } else {
        $navyParams['PAGEN'] = 1;
        $getListParams['limit'] = $navyParams['SIZEN'];
        $getListParams['offset'] = 0;
    }
}
$couponIterator = new CAdminSubResult(Internals\DiscountCouponTable::getList($getListParams), $adminListTableID, $adminList->GetListUrl(true));
if ($usePageNavigation) {
    $couponIterator->NavStart($getListParams['limit'], $navyParams['SHOW_ALL'], $navyParams['PAGEN']);
    $couponIterator->NavRecordCount = $totalCount;
    $couponIterator->NavPageCount = $totalPages;
    $couponIterator->NavPageNomer = $navyParams['PAGEN'];
} else {
    $couponIterator->NavStart();
}
$adminList->NavText($couponIterator->GetNavPrint(Loc::getMessage('BT_SALE_DISCOUNT_COUPON_LIST_MESS_NAV')));
while ($coupon = $couponIterator->Fetch()) {
    $coupon['ID'] = (int) $coupon['ID'];
    $coupon['MAX_USE'] = (int) $coupon['MAX_USE'];
    $coupon['USE_COUNT'] = (int) $coupon['USE_COUNT'];
    if ($selectFieldsMap['CREATED_BY']) {
        $coupon['CREATED_BY'] = (int) $coupon['CREATED_BY'];
Ejemplo n.º 6
0
                } else {
                    $errors[] = str_replace('#ID#', $discountID, GetMessage('BT_SALE_DISCOUNT_EDIT_ERR_UPDATE'));
                }
            }
        } else {
            $discountID = (int) CSaleDiscount::Add($arFields);
            if ($discountID <= 0) {
                if ($ex = $APPLICATION->GetException()) {
                    $errors[] = $ex->GetString();
                } else {
                    $errors[] = GetMessage('BT_SALE_DISCOUNT_EDIT_ERR_ADD');
                }
            } else {
                if ($couponsAdd) {
                    $couponsFields['DISCOUNT_ID'] = $discountID;
                    $couponsResult = Internals\DiscountCouponTable::addPacket($couponsFields, $additionalFields['COUPON_COUNT']);
                    if (!$couponsResult->isSuccess()) {
                        $errors = $couponsResult->getErrorMessages();
                    }
                }
            }
        }
    }
    if (empty($errors)) {
        if (empty($_POST['apply'])) {
            LocalRedirect("/bitrix/admin/sale_discount.php?lang=" . LANGUAGE_ID . GetFilterParams("filter_", false));
        } else {
            LocalRedirect("/bitrix/admin/sale_discount_edit.php?lang=" . LANGUAGE_ID . "&ID=" . $discountID . '&' . $control->ActiveTabParam());
        }
    }
}
Ejemplo n.º 7
0
 /**
  * Clear freeze coupons.
  *
  * @param array $coupon		Coupon data.
  * @return bool
  */
 protected static function filterFreezeCoupons($coupon)
 {
     if (empty(self::$couponTypes)) {
         self::$couponTypes = Internals\DiscountCouponTable::getCouponTypes(true);
     }
     return isset($coupon['TYPE']) && isset(self::$couponTypes[$coupon['TYPE']]) && $coupon['STATUS'] != self::STATUS_FREEZE;
 }
Ejemplo n.º 8
0
 public function runOperation()
 {
     global $APPLICATION;
     $found = false;
     $filter = array('>ID' => $this->lastID, '=VERSION' => Sale\Internals\DiscountTable::VERSION_15);
     $discountsIterator = Sale\Internals\DiscountTable::getList(array('select' => array('ID', 'MODIFIED_BY', 'TIMESTAMP_X', 'CONDITIONS_LIST', 'ACTIONS_LIST', 'NAME'), 'filter' => $filter, 'order' => array('ID' => 'ASC'), 'limit' => $this->maxOperationCounter));
     while ($discount = $discountsIterator->fetch()) {
         $found = true;
         $error = array();
         $rawFields = array('ID' => $discount['ID'], 'CONDITIONS' => $discount['CONDITIONS_LIST'], 'ACTIONS' => $discount['ACTIONS_LIST']);
         if (\CSaleDiscount::checkFields('UPDATE', $rawFields)) {
             $fields = array('MODIFIED_BY' => $discount['MODIFIED_BY'], 'TIMESTAMP_X' => $discount['TIMESTAMP_X'], 'UNPACK' => $rawFields['UNPACK'], 'APPLICATION' => $rawFields['APPLICATION']);
             if (isset($rawFields['EXECUTE_MODULE'])) {
                 $fields['EXECUTE_MODULE'] = $rawFields['EXECUTE_MODULE'];
             }
             $useCoupons = 'N';
             $coupon = Sale\Internals\DiscountCouponTable::getList(array('select' => array('ID', 'DISCOUNT_ID'), 'filter' => array('=DISCOUNT_ID' => $discount['ID']), 'limit' => 1))->fetch();
             if (!empty($coupon)) {
                 $useCoupons = 'Y';
             }
             $fields['USE_COUPONS'] = $useCoupons;
             unset($coupon, $useCoupons);
             $updateResult = Sale\Internals\DiscountTable::update($discount['ID'], $fields);
             if ($updateResult->isSuccess()) {
                 if (isset($rawFields['ENTITIES'])) {
                     Sale\Internals\DiscountEntitiesTable::updateByDiscount($discount['ID'], $rawFields['ENTITIES'], true);
                 }
                 if (isset($rawFields['HANDLERS']['MODULES'])) {
                     Sale\Internals\DiscountModuleTable::updateByDiscount($discount['ID'], $rawFields['HANDLERS']['MODULES'], true);
                 }
             } else {
                 $error = $updateResult->getErrorMessages();
             }
         } else {
             if ($ex = $APPLICATION->GetException()) {
                 $error[] = $ex->GetString();
             } else {
                 $error[] = Loc::getMessage('SALE_DISCOUNT_REINDEX_UPDATE_UNKNOWN_ERROR');
             }
         }
         $this->lastID = $discount['ID'];
         $this->allOperationCounter++;
         if (!empty($error)) {
             $this->errorCounter++;
             $this->errors[] = Loc::getMessage('SALE_DISCOUNT_REINDEX_ORDER_ERROR_REPORT', array('#URL#' => str_replace('#ID#', $discount['ID'], $this->discountEditUrl), '#TITLE#' => trim((string) $discount['NAME']) != '' ? $discount['NAME'] : $discount['ID'], '#ERRORS#' => implode('; ', $error)));
         }
         if ($this->maxExecutionTime > 0 && time() - $this->startOperationTime > $this->maxExecutionTime) {
             break;
         }
     }
     unset($discount, $discountsIterator);
     if (!$found) {
         $this->finishOperation = true;
     }
 }
Ejemplo n.º 9
0
 /**
  * Default onAfterDelete handler. Absolutely necessary.
  *
  * @param Main\Entity\Event $event		Event object.
  * @return void
  */
 public static function onAfterDelete(Main\Entity\Event $event)
 {
     $id = $event->getParameter('id');
     $id = end($id);
     DiscountEntitiesTable::deleteByDiscount($id);
     DiscountModuleTable::deleteByDiscount($id);
     DiscountGroupTable::deleteByDiscount($id);
     if (self::$deleteCoupons !== false) {
         DiscountCouponTable::deleteByDiscount(self::$deleteCoupons);
         self::$deleteCoupons = false;
     }
     unset($id);
 }
Ejemplo n.º 10
0
 /**
  * Check coupon type.
  *
  * @param int $value					Coupon type.
  * @param array|int $primary			Primary key.
  * @param array $row					Current data.
  * @param Main\Entity\Field $field		Field object.
  * @return bool|string
  */
 public static function checkType($value, $primary, array $row, Main\Entity\Field $field)
 {
     if (Internals\DiscountCouponTable::isValidCouponType($value) || $value == Internals\DiscountCouponTable::TYPE_ARCHIVED) {
         return true;
     }
     return Loc::getMessage('ORDER_COUPONS_VALIDATOR_TYPE');
 }
Ejemplo n.º 11
0
use Bitrix\Main\Loader;
use Bitrix\Sale\Internals;
require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php';
Loc::loadMessages(__FILE__);
global $USER;
$result = array('STATUS' => 'OK', 'MESSAGE' => '', 'COUPON' => '');
if ($result['STATUS'] == 'OK') {
    if (!isset($USER) || !$USER instanceof CUser) {
        $result['STATUS'] = 'ERROR';
        $result['MESSAGE'] = Loc::getMessage('BX_SALE_TOOLS_GEN_CPN_ERR_USER');
    } elseif (!$USER->IsAuthorized()) {
        $result['STATUS'] = 'ERROR';
        $result['MESSAGE'] = Loc::getMessage('BX_SALE_TOOLS_GEN_CPN_ERR_AUTH');
    }
}
if ($result['STATUS'] == 'OK') {
    if (!check_bitrix_sessid()) {
        $result['STATUS'] = 'ERROR';
        $result['MESSAGE'] = Loc::getMessage('BX_SALE_TOOLS_GEN_CPN_ERR_SESSION');
    }
}
if ($result['STATUS'] == 'OK') {
    if (!Loader::includeModule('sale')) {
        $result['STATUS'] = 'ERROR';
        $result['MESSAGE'] = Loc::getMessage('BX_SALE_TOOLS_GEN_CPN_ERR_MODULE');
    }
}
if ($result['STATUS'] == 'OK') {
    $result['COUPON'] = Internals\DiscountCouponTable::generateCoupon(true);
}
echo CUtil::PhpToJSObject($result);
Ejemplo n.º 12
0
 /**
  * Save coupon.
  *
  * @param array $coupon		Coupon data.
  * @return Result
  */
 public static function saveCoupon($coupon)
 {
     if (self::$init === false) {
         self::init();
     }
     $result = new Result();
     $process = true;
     $resultData = array('ID' => 0, 'ORDER_ID' => 0, 'ORDER_DISCOUNT_ID' => 0, 'COUPON' => '', 'TYPE' => Internals\DiscountCouponTable::TYPE_UNKNOWN, 'COUPON_ID' => 0, 'DATA' => array());
     if (empty($coupon) || !is_array($coupon)) {
         $process = false;
         $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_COUPON'), self::ERROR_ID));
     }
     if ($process) {
         if (empty($coupon['ORDER_DISCOUNT_ID']) || (int) $coupon['ORDER_DISCOUNT_ID'] <= 0) {
             $process = false;
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_EMPTY_COUPON'), self::ERROR_ID));
         }
         if (empty($coupon['COUPON'])) {
             $process = false;
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_COUPON_CODE_ABSENT'), self::ERROR_ID));
         }
         if (!isset($coupon['TYPE'])) {
             $process = false;
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_COUPON_TYPE_ABSENT', array('#COUPON#' => $coupon['COUPON'])), self::ERROR_ID));
         } elseif (!Internals\DiscountCouponTable::isValidCouponType($coupon['TYPE']) && $coupon['TYPE'] != Internals\DiscountCouponTable::TYPE_ARCHIVED) {
             $process = false;
             $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_COUPON_TYPE_BAD', array('#COUPON#' => $coupon['COUPON'])), self::ERROR_ID));
         }
     }
     if ($process) {
         if ($coupon['TYPE'] != Internals\DiscountCouponTable::TYPE_ARCHIVED) {
             if (empty($coupon['COUPON_ID']) || (int) $coupon['COUPON_ID'] <= 0) {
                 $process = false;
                 $result->addError(new Main\Entity\EntityError(Loc::getMessage('SALE_ORDER_DISCOUNT_ERR_COUPON_ID_BAD', array('#COUPON#' => $coupon['COUPON'])), self::ERROR_ID));
             }
         }
     }
     if ($process) {
         $orderCouponIterator = Internals\OrderCouponsTable::getList(array('select' => array('*'), 'filter' => array('=COUPON' => $coupon['COUPON'], '=ORDER_ID' => $coupon['ORDER_ID'])));
         if ($orderCoupon = $orderCouponIterator->fetch()) {
             $resultData = $orderCoupon;
         } else {
             $fields = $coupon;
             if (array_key_exists('ID', $fields)) {
                 unset($fields['ID']);
             }
             $couponResult = Internals\OrderCouponsTable::add($fields);
             if ($couponResult->isSuccess()) {
                 $resultData = $fields;
                 $resultData['ID'] = $couponResult->getId();
             } else {
                 $process = false;
                 $result->addErrors($couponResult->getErrors());
             }
             unset($couponResult, $fields);
         }
         unset($orderCoupon, $orderCouponIterator);
     }
     if ($process) {
         $result->setId($resultData['ID']);
         $result->setData($resultData);
     }
     unset($process, $resultData);
     return $result;
 }