adminFront/src/model/cart.ts

172 lines
5.0 KiB
TypeScript
Raw Normal View History

2023-02-25 09:22:54 +00:00
import { ServiceType, Tariffs } from "./tariff";
2023-02-18 14:00:49 +00:00
2023-02-27 13:30:44 +00:00
/** @deprecated */
2023-02-18 14:00:49 +00:00
export interface CartSummary {
mbs: number;
points: number;
days: number;
}
2023-02-27 13:30:44 +00:00
/** @deprecated */
2023-02-18 14:00:49 +00:00
export interface Promocode {
id: number;
name: string;
endless: boolean;
from: string;
dueTo: string;
privileges: Array<Privileges>;
}
2023-02-27 13:30:44 +00:00
/** @deprecated */
2023-02-18 14:00:49 +00:00
export interface Privileges {
good: ServiceType,
discount: number;
}
2023-02-27 13:30:44 +00:00
/** @deprecated */
2023-02-18 14:00:49 +00:00
export interface Discount {
id: number;
name: string;
endless: boolean;
from: string;
dueTo: string;
privileges: Array<Privileges>;
active: boolean;
basketMore: number;
incomeMore: number;
toTime: number;
toCapacity: number;
2023-02-22 15:07:53 +00:00
}
// New types from snippet
export namespace Cart {
2023-02-25 09:22:54 +00:00
interface DiscountBase {
2023-02-22 15:07:53 +00:00
_id: string;
name: string;
description: string;
2023-02-27 13:30:44 +00:00
/** Этап применения скидки */
2023-02-22 15:07:53 +00:00
layer: number;
2023-02-25 09:22:54 +00:00
}
export interface PurchasesAmountDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "purchasesAmount";
condition: {
purchasesAmount: number;
};
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
2023-02-25 09:22:54 +00:00
}
export interface CartPurchasesAmountDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "cartPurchasesAmount";
condition: {
cartPurchasesAmount: number;
};
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
2023-02-25 09:22:54 +00:00
}
export interface PrivilegeDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "privilege";
condition: {
privilege: {
id: string;
2023-02-27 13:30:44 +00:00
/** Скидка применяется, если значение больше или равно этому значению */
2023-02-22 15:07:53 +00:00
value: number;
};
};
target: {
products: Array<{
2023-02-27 13:30:44 +00:00
/** TODO Судя по сниппету, это id привелегий, но названо "продукт" */
2023-02-22 15:07:53 +00:00
productId: string;
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
}>;
};
2023-02-25 09:22:54 +00:00
}
export interface ServiceDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "service";
condition: {
service: {
2023-02-25 09:22:54 +00:00
id: Tariffs.ServiceType;
2023-02-27 13:30:44 +00:00
/** Скидка применяется, если значение больше или равно этому значению */
2023-02-22 15:07:53 +00:00
value: number;
};
};
target: {
2023-02-25 09:22:54 +00:00
service: Tariffs.ServiceType;
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
};
2023-02-25 09:22:54 +00:00
}
export interface UserTypeDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "userType";
condition: {
userType: string;
};
target: {
IsAllProducts: boolean;
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
};
overwhelm: boolean;
2023-02-25 09:22:54 +00:00
}
export interface UserDiscount extends DiscountBase {
2023-02-22 15:07:53 +00:00
conditionType: "user";
condition: {
coupon: string;
user: string;
};
target: {
products: Array<{
2023-02-27 13:30:44 +00:00
/** TODO Судя по сниппету, это id привелегий, но названо "продукт" */
2023-02-22 15:07:53 +00:00
productId: string;
2023-02-27 13:30:44 +00:00
/** Множитель, на который умножается сумма при применении скидки */
2023-02-22 15:07:53 +00:00
factor: number;
}>;
};
overwhelm: boolean;
2023-02-25 09:22:54 +00:00
}
export type AnyDiscount =
| PurchasesAmountDiscount
| CartPurchasesAmountDiscount
| PrivilegeDiscount
| ServiceDiscount
| UserTypeDiscount
| UserDiscount;
export interface Promocode {
id: number;
name: string;
endless: boolean;
from: string;
dueTo: string;
2023-02-25 12:28:50 +00:00
privileges: Tariffs.Privilege[];
2023-02-25 09:22:54 +00:00
}
export interface CartItem {
2023-02-25 13:59:16 +00:00
item: Tariffs.Tariff;
2023-02-27 13:30:44 +00:00
/** Посчитанная цена пункта корзины */
2023-02-25 13:53:22 +00:00
price: number;
2023-02-25 09:22:54 +00:00
}
2023-02-22 15:07:53 +00:00
2023-02-27 13:30:44 +00:00
/** Пункт корзины с уже примененными скидками */
2023-02-25 09:22:54 +00:00
export interface CartItemTotal {
2023-02-27 13:30:44 +00:00
/** Массив с id примененных скидок */
2023-02-25 09:22:54 +00:00
envolvedDiscounts: string[];
totalPrice: number;
2023-02-25 13:59:16 +00:00
item: Tariffs.Tariff;
2023-02-25 09:22:54 +00:00
}
export interface CartTotal {
items: CartItemTotal[];
totalPrice: number;
2023-02-25 13:59:16 +00:00
priceByService: { [Key in Tariffs.ServiceType]: number; };
2023-02-27 13:30:44 +00:00
envolvedCartDiscounts: string[];
2023-02-25 09:22:54 +00:00
}
2023-02-18 14:00:49 +00:00
}