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