[ self::GET_METHOD_KEY_PAYLOAD => self::removeSensitiveKeys($cartRule, self::SENSITIVE_KEYS), ] ]; } /** * @param array $cartRules * @return array */ public static function buildPostPayload($cartRules) { $coupons = []; foreach ($cartRules as $value) { $coupons[] = [ 'code' => $value->code, 'id' => $value->id, 'date_from' => self::convertDateStringToUTC($value->date_from), 'date_to' => self::convertDateStringToUTC($value->date_to), ]; } return [ KlaviyoV3Api::DATA_KEY_PAYLOAD => [ self::POST_METHOD_KEY_PAYLOAD => $coupons, ] ]; } /** * Generate multiple cart rules from a cart rule template * * @param int $cartRuleId * @param int $quantity * @param DateTime $dateFrom * @param DateTime $dateTo * @param string $codePrefix * @return array */ public static function generateFromId($cartRuleId, $quantity, $dateFrom, $dateTo, $codePrefix = '') { $klaviyops = KlaviyoPsModule::getInstance(); /** @var CartRuleService $cartRuleService */ $cartRuleService = $klaviyops->getService('klaviyops.prestashop_services.cart_rule'); // Check count limit if ($quantity <= 0 || $quantity > KlaviyoValue::WEBSERVICE_CREATE_DELETE_LIMIT) { throw new KlaviyoException(sprintf('The count must be >0 and <=%s', KlaviyoValue::WEBSERVICE_CREATE_DELETE_LIMIT)); } // Check timeframe $serverTimezone = new DateTimeZone(Configuration::get('PS_TIMEZONE')); $now = new DateTime('now', $serverTimezone); if ( empty($dateFrom) || empty($dateTo) || $dateTo < $now ) { throw new KlaviyoException('date_to must be in the future'); } if ($dateFrom > $dateTo) { throw new KlaviyoException('date_to must be later than date_from'); } $cartRule = $cartRuleService->getObjectById($cartRuleId); $res = []; for ($i = 0; $i < $quantity; $i++) { $generatedCode = Tools::passwdGen(10, 'ALPHANUMERIC'); if ($codePrefix !== '') { $generatedCode = "{$codePrefix}_" . $generatedCode; } $res[] = $cartRuleService->duplicate($cartRule, [ 'code' => $generatedCode, 'quantity' => 1, 'quantity_per_user' => 1, 'highlight' => 0, 'active' => 1, 'id_customer' => 0, 'date_from' => $dateFrom->format(KlaviyoValue::WEBSERVICE_DATE_TIME_FORMAT), 'date_to' => $dateTo->format(KlaviyoValue::WEBSERVICE_DATE_TIME_FORMAT), ]); } return $res; } /** * Generate multiple cart rules from a cart rule template * * @param string $code * @param int $quantity * @param DateTime $dateFrom * @param DateTime $dateTo * @param string $codePrefix * @return array */ public static function generateFromCode($code, $quantity, ?DateTime $dateFrom, ?DateTime $dateTo, $codePrefix) { // Check if code exist $cartRuleId = CartRule::getIdByCode($code); if (!$cartRuleId) { throw new KlaviyoException(sprintf("The cart rule '%s' does not exist.", $code)); } return self::generateFromId($cartRuleId, $quantity, $dateFrom, $dateTo, $codePrefix); } }