import { Ref } from '@typegoose/typegoose'; import * as Interface from './marketing.interface'; import { Types } from 'mongoose'; import { Restaurant, Business } from '~backend/business/business.model'; import { ItemStrategyType, EffectTarget, User as IUser, RawEffect as IRawEffect, Effect as IEffect, EffectUsedItem as IEffectUsedItem, BaseEffectOptions as IBaseEffectOption, BillEffectOptions as IBillEffectOption, ItemEffectOptions as IItemEffectOption, PaymentEffectOptions as IPaymentEffectOption, SimpleItemStrategy as ISimpleItemStrategy, BuyXGetYItemStrategy as IBuyXGetYItemStrategy, BuyXItemAGetYItemBStrategy as IBuyXItemAGetYItemBStrategy, BuyXGetYV2Strategy as IBuyXGetYV2Strategy, ComboStrategy as IComboStrategy, ComboGroup as IComboGroup, TotalAdjustmentCause, BuyXGetYV2Priority } from '~core/modules/order/definitions'; import { Promotion as IPromotion } from '~core/modules/promotion'; import { EntityDocument } from '~core/db/baseRepository'; import { AdjustmentType, AdjustmentOptions } from '~core/helper/number'; import { AdjustmentAmount, DineroObject } from '~backend/utils/model'; import { ORDER_TYPE } from '~backend/order/order.interface'; export declare class AdjustmentObject implements AdjustmentOptions { type: AdjustmentType; amount: AdjustmentAmount; inclusive?: boolean; } export declare class BaseStrategy { type: ItemStrategyType; } export declare class SimpleItemStrategy extends BaseStrategy implements ISimpleItemStrategy { type: ItemStrategyType.simple; withAddons?: string[] | null; } export declare class BuyXGetYItemStrategy extends BaseStrategy implements IBuyXGetYItemStrategy { type: ItemStrategyType.buyXGetY; x: number; y: number; } export declare class BuyXAGetYBItemStrategy extends BaseStrategy implements IBuyXItemAGetYItemBStrategy { type: ItemStrategyType.buyXItemAGetYItemB; x: number; y: number; itemAIds: string[]; } export declare class BuyXGetYV2Strategy extends BaseStrategy implements IBuyXGetYV2Strategy { type: ItemStrategyType.buyXGetYV2; priority: BuyXGetYV2Priority; x: number; y: number; itemAIds: string[]; } export declare class ComboGroup implements IComboGroup { itemIds: string[]; count: number; } export declare class ComboStrategy extends BaseStrategy implements IComboStrategy { type: ItemStrategyType.combo; groups: ComboGroup[]; atLeast?: boolean; } export declare class BaseEffectOptions implements IBaseEffectOption { target: EffectTarget; } export declare class PaymentEffectOptions extends BaseEffectOptions implements IPaymentEffectOption { target: EffectTarget.payment; minPurchase: AdjustmentAmount | null; } export declare class BillEffectOptions extends BaseEffectOptions implements IBillEffectOption { target: EffectTarget.bill; minPurchase: AdjustmentAmount | null; } export declare class ItemEffectOptions extends BaseEffectOptions implements IItemEffectOption { target: EffectTarget.item; targetIds: string[] | null; maxQuantity: number | null; excludeAddonPrice?: boolean; strategy: ISimpleItemStrategy | IBuyXGetYItemStrategy | IBuyXItemAGetYItemBStrategy | IBuyXGetYV2Strategy | IComboStrategy; } export declare class RawEffect implements IRawEffect { adjustment: AdjustmentObject; availableOnlineOrder?: ORDER_TYPE[] | null; options: IBillEffectOption | IItemEffectOption | IPaymentEffectOption; priority?: number | null; } export declare class EffectUsedItem implements IEffectUsedItem { id: string; quantity: number; } export declare class Customer implements IUser { id: string; name: string; } export declare class Effect extends RawEffect implements IEffect { success: boolean; reason: string; name: string; from: TotalAdjustmentCause; referenceId: string; returnId?: string; items?: string[]; customer?: Customer; } export declare class BaseClaimOpts { type: Interface.VoucherType; } export declare class AfterSalesClaimOpts extends BaseClaimOpts implements Interface.AfterSalesClaimOpts { type: Interface.VoucherType.afterSales; minPurchase: AdjustmentAmount; maxPurchase: AdjustmentAmount; productIds?: string[] | null; minProductCount?: number; quantityMultiplier?: string; } export declare class SimpleClaimOpts extends BaseClaimOpts implements Interface.SimpleClaimOpts { type: Interface.VoucherType.simpleClaim; maxClaim: number; start: Date; end: Date; } export declare class MemberRewardOpts extends BaseClaimOpts implements Interface.MemberRewardOpts { type: Interface.VoucherType.memberReward; } export declare class FeedbackRewardOpts extends BaseClaimOpts implements Interface.FeedbackRewardOpts { type: Interface.VoucherType.feedbackReward; } export declare class MultipleUseVoucherOptions implements Interface.MultipleUseVoucherOptions { cooldown: number; maxUse: number; } export declare class Voucher implements Interface.Voucher { static _publicAppUrl: string | null; _id: Types.ObjectId; name: string; description?: string; business: Ref; targetRestaurant?: Ref[]; effect: RawEffect; validSince?: Date; validity: number; currentClaim: number; currentRedeem: number; hideInApp?: boolean; enableTransfer?: boolean; disable?: boolean; maxClaimsPerUser?: number; options: SimpleClaimOpts | AfterSalesClaimOpts | MemberRewardOpts; multipleUse?: MultipleUseVoucherOptions; verticalImage?: string; horizontalImage?: string; get publicClaimLink(): string; get id(): any; } export declare class RefVoucherModel extends Voucher implements Interface.VoucherRef { _id: Types.ObjectId; } export declare class UpdateVoucherDto implements Interface.UpdateVoucherPayload { updateClaim: boolean; voucher: Voucher; } export declare class DeletePromotionDto { _id: string; _rev: string; } export declare class Promotion implements IPromotion { name: string; targetRestaurant: string[] | null; effect: RawEffect; start: string; end?: string; } export declare class PromotionExist extends Promotion implements EntityDocument { _id: string; _rev: string; } export declare class BillItemCountDto implements Interface.BillItemCount { productId: string; count: number; } export declare class GetAvailableVoucherDto implements Interface.GetAvailableVoucher { billTotal: DineroObject; items: BillItemCountDto[]; } export declare class IssueAfterSalesVoucherDto implements Interface.IssueAfterSalesVoucher { phoneNumber: string; userId: string; voucherIds: string[]; } export declare class ChangeVoucherClaimOwnerDto implements Interface.ChangeVoucherClaimOwner { fromUserId: string; toPhoneNumber: string; claimIds: string[]; } export declare class CodeConfig implements Interface.CodeConfig { length: number; charset: string; prefix?: string; suffix?: string; pattern?: string; } export declare class CreateBatchVoucherClaimsDto implements Interface.CreateBatchVoucherClaims { voucher: Voucher; count: number; code: string; codeConfig: CodeConfig; } export declare class CreateClaimDto implements Interface.CreateClaim { phoneNumber: string; } export declare class IssueClaimDto { phoneNumber: string; userId: string; voucherIds: string[]; } export declare class VoucherClaimHistory implements Interface.VoucherClaimHistory { appliedAt: Date; restaurant: Ref | null; billId: string | null; } export declare class VoucherTransferHistory implements Interface.VoucherTransferHistory { transferAt: Date; from: string; to: string; } export declare class VoucherClaim implements Interface.VoucherClaim { static _publicAppUrl: string | null; _clientRequest: { date: Date; restaurantId?: string; orderType?: ORDER_TYPE; }; get frontend(): { hide: boolean; disable: boolean; reason: string; }; _id: Types.ObjectId; get id(): any; get redeemCode(): string | null; get claimSuccessLink(): string; get claimedAt(): Date; user: string; voucher: RefVoucherModel; redeemedAt: Date | null; appliedAt: Date | null; restaurant: Ref | null; billId: string | null; transferExpiredAt?: Date; transferHistory?: VoucherTransferHistory[]; expiredAt: Date; history?: VoucherClaimHistory[]; code: string | null; } export declare class TransferClaimDto implements Interface.TransferClaim { voucherClaim: VoucherClaim; phoneNumber: string; } export declare class FreeCreditOption implements Interface.FreeCreditOption { day: number; amount: number; remark?: string; } export declare class DeductCreditOption implements Interface.DeductCreditOption { amount: number; remark?: string; }