import { IG2ProductExternalValues } from '../G2'; import ITranslation from '../Translation'; export default interface IDiscountRule { readonly id?: string; readonly draft: boolean; readonly name: ITranslation[]; readonly discountRule_type?: 'promotion' | 'tier-pricing'; readonly is_stackable?: boolean; readonly description: ITranslation[]; readonly promo_code?: { readonly disabled: boolean; readonly code: string; readonly limit_users?: string | string[]; readonly once_per_client: boolean; readonly total_usage_limit?: number; readonly use_quantity?: number; readonly used_by_user_id?: string[]; }; readonly rules?: IRule[]; readonly noExtraRules: boolean; readonly appliesTo: { readonly label?: AppliesToEnum; readonly value: string; readonly check_attribute_value?: string; readonly check_other_items_category?: string; }; readonly result: { readonly action?: ResultActionEnum; readonly action_value: number | string; readonly action_sku?: string | string[]; readonly action_categories?: string[]; readonly action_qte?: number; readonly action_is_amount?: boolean; readonly apply_on_discounted_price?: boolean; readonly exclude_services_and_fees?: boolean; readonly exclude_discounted_products?: boolean; }; readonly authorization?: { readonly date: Date; readonly note: string; }[]; readonly overridden?: boolean; readonly external_values?: IG2ProductExternalValues; } export declare enum AppliesToEnum { ALLPRODUCTS = "allproducts", PRODUCT = "product", CATEGORY = "category", CART = "cart" } export declare enum ResultActionEnum { AMOUNT = "amount", PERCENT = "percent", GET = "get", FREE_SHIPPING = "free_shipping", FLATERATE_SHIPPING = "flatrate_shipping", AMOUNT_SKU = "amount_sku", PERCENT_SKU = "percent_sku", AMOUNT_CATEGORY = "amount_category", PERCENT_CATEGORY = "percent_category", AMOUNT_AFTER_TAXES = "amount_after_taxes", PERCENT_AFTER_TAXES = "percent_after_taxes" } export declare enum RuleFieldEnum { CUSTOMER = "customer", CUSTOMER_TYPE = "customer_type", QUANTITY = "quantity", DATE = "date", ATTRIBUTE = "attribute", CATEGORY = "category", PRODUCT = "product", CART_TOTAL = "cart_total", CART_ITEM_TOTAL = "cart_itemTotal", CART_ITEM = "cart_items", CART_SHIPPING = "cart_shipping", PRODUCT_PRICE = "product_price", SKU = "sku", SLUG = "slug", DECLINATION = "declinaison", WEEKDAY = "weekday", ORDER_TYPE = "order_type", CART_ITEM_CATEGORIES = "cart_item_categories", PAYMENT_METHOD = "payment_method", CUSTOMER_TERMS_CODE = "customer_terms_code", CART_PLATFORM = "cart_platform", ORDER_DAY = "order_day", CART_TYPE = "cart_type" } export declare enum RuleConditionEnum { AND = "AND", OR = "OR" } export interface IRule { field?: RuleFieldEnum; ruleDetails: IRuleDetails[]; condition?: RuleConditionEnum; } export interface IRuleDetails { operator?: '==' | '!=' | '>=' | '>' | '<' | '<=' | 'contains' | 'between' | 'contains-not'; value: any[]; condition?: RuleConditionEnum; } export declare const getDefaultDiscountRule: (discountRule_type: any, addExternalValues?: string[]) => { external_values?: { [key: string]: string; } | undefined; draft: boolean; name: never[]; discountRule_type: any; is_stackable: boolean; description: never[]; appliesTo: { value: string; check_attribute: boolean; check_attribute_value: string; check_other_items_category: string; }; promo_code: { disabled: boolean; code: string; once_per_client: boolean; }; noExtraRules: boolean; rules: { ruleDetails: { operator: any; value: never[]; condition: RuleConditionEnum; }[]; condition: RuleConditionEnum; field: RuleFieldEnum; }[]; result: { action: any; action_value: string; action_sku: string; }; }; /** * Exemple: * * Product = 5.00$ * * Discount rule: * quantity >= 10 ? remove 2 * * Result: * If applied to cart: * 11 Product = (before) 55.00$ (after) 53.00$ * * attribute color == red ? percent 10 * 1 red Product = (before) 5.00$ (after) 4.50$ * * attribute color == red ? percent -20 * 1 red Product = (before) 5.00$ (after) 6.00$ */