import { DiscountModuleTypeEnum, DiscountMethodTypeEnum, ServeType } from "../../enums"; import { EntireOrderDiscountModule } from "./entire-order-discount-module"; import { SelectedItemDiscountModule, SelectedItemDiscountItem } from "./selected-item-discount-module"; import { DiscountReference } from "../order"; export interface DiscountModule { type: DiscountModuleTypeEnum; id?: string; name: string; discountStartedAt: number; discountEndedAt: number; code?: string; disableTime?: number; advancedConditions?: DiscountAdvancedConditions; storeTemplateId?: string; } export interface DiscountItem { discountModuleId: string; productId: string; originAmount: number; } export interface ItemDiscountModule { discountModule: DiscountModule; discountItem: DiscountItem; } export interface TimePeriod { start: number; end: number; } export interface DaysOfWeekEnum { Monday: boolean; Tuesday: boolean; Wednesday: boolean; Thursday: boolean; Friday: boolean; Saturday: boolean; Sunday: boolean; } export interface DiscountAdvancedConditions { daysOfWeek?: DaysOfWeekEnum; dayPeriod?: TimePeriod; } export interface DiscountMethod { type: DiscountMethodTypeEnum; value: number; } export interface BaseRuleModel { discountRuleNo: string | number; applyMethod: "AutoApply" | "Coupon"; name: string; description?: string; note?: string | null; beginDatetime: string; endDatetime: string; isActive: number; targetCustomers: any; useCondition: any; moduleType: string; modulePayload: any; } export declare type UnionOfDiscountModule = EntireOrderDiscountModule | SelectedItemDiscountModule; export declare type UnionOfDiscountItem = SelectedItemDiscountItem; export interface EntireOrderDiscountModuleChoices { discountChoices?: DiscountModuleChoice[]; best?: DiscountReference; } export interface OrderItemDiscountModuleChoices { orderItemChoices?: { productId: string; discountChoices: DiscountModuleChoice[]; }[]; best?: DiscountReference[]; } export interface DiscountModuleChoice { discountId: string; discountName: string; discountAmount: number; discountQuantity: number; } export interface ApplySelectedItemDiscountModuleParam { cartItems: CartItem[]; itemDiscountModulesOfProducts: { productId: string; itemDiscountModules: ItemDiscountModule[]; }[]; serveType?: ServeType; customerId?: string; } export interface ApplyEntireOrderDiscountModuleParam { /** Sigma((product amount + attr amount )* quantity - item level discount) */ amount: number; discountModules: EntireOrderDiscountModule[]; serveType?: ServeType; customerId?: string; } export interface CartItemAttr { attributeId: string; additionalAmount: number; } export interface CartItem { id: string; productId: string; /** amount of single product */ productAmount: number; quantity: number; attributes: CartItemAttr[]; }