Merge branch 'dev' into 'main'
Users: replacing table with dataGrid && See merge request frontend/admin!13
This commit is contained in:
commit
7e8f012a07
@ -21,6 +21,7 @@ export default function Cart({ selectedTariffs }: Props) {
|
||||
const cartTotal = useCartStore(state => state.cartTotal);
|
||||
const setCartTotal = useCartStore(store => store.setCartTotal);
|
||||
const [couponField, setCouponField] = useState<string>("");
|
||||
const [loyaltyField, setLoyaltyField] = useState<string>("");
|
||||
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
||||
const [isNonCommercial, setIsNonCommercial] = useState<boolean>(false);
|
||||
|
||||
@ -89,7 +90,22 @@ export default function Cart({ selectedTariffs }: Props) {
|
||||
function handleCalcCartClick() {
|
||||
const cartTariffs = tariffs.filter(tariff => selectedTariffs.includes(tariff.id));
|
||||
const cartItems = cartTariffs.map(tariff => createCartItem(tariff));
|
||||
const cartData = calcCartData(testUser, cartItems, discounts, isNonCommercial, couponField);
|
||||
|
||||
const loyaltyValue = parseInt(loyaltyField);
|
||||
|
||||
if (!isFinite(loyaltyValue)) {
|
||||
setErrorMessage("Лояльность не число");
|
||||
return;
|
||||
}
|
||||
|
||||
const cartData = calcCartData({
|
||||
user: testUser,
|
||||
purchasesAmount: loyaltyValue,
|
||||
cartItems,
|
||||
discounts,
|
||||
isNonCommercial,
|
||||
coupon: couponField,
|
||||
});
|
||||
|
||||
if (cartData instanceof Error) {
|
||||
setErrorMessage(cartData.message);
|
||||
@ -173,7 +189,35 @@ export default function Cart({ selectedTariffs }: Props) {
|
||||
:
|
||||
<Alert severity="error">Подходящий купон не найден!</Alert>
|
||||
)}
|
||||
<Button onClick={handleCalcCartClick} sx={{ ml: "auto" }}>рассчитать</Button>
|
||||
<Box
|
||||
sx={{
|
||||
border: "1px solid white",
|
||||
padding: "3px",
|
||||
display: "flex",
|
||||
flexDirection: "column",
|
||||
ml: "auto",
|
||||
}}
|
||||
>
|
||||
<Input
|
||||
label="лояльность"
|
||||
size="small"
|
||||
type="number"
|
||||
value={loyaltyField}
|
||||
onChange={e => setLoyaltyField(e.target.value)}
|
||||
InputProps={{
|
||||
style: {
|
||||
backgroundColor: theme.palette.content.main,
|
||||
color: theme.palette.secondary.main,
|
||||
}
|
||||
}}
|
||||
InputLabelProps={{
|
||||
style: {
|
||||
color: theme.palette.secondary.main
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</Box>
|
||||
<Button onClick={handleCalcCartClick}>рассчитать</Button>
|
||||
</Paper>
|
||||
|
||||
{cartTotal?.items && cartTotal.items.length > 0 &&
|
||||
|
||||
@ -12,7 +12,12 @@ describe("cart tests", () => {
|
||||
it("без скидок", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[0]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -36,7 +41,12 @@ describe("cart tests", () => {
|
||||
);
|
||||
});
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discountsWithoutTemplategen) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts: discountsWithoutTemplategen,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -60,7 +70,12 @@ describe("cart tests", () => {
|
||||
);
|
||||
});
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discountsWithoutTemplategen) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts: discountsWithoutTemplategen,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -84,7 +99,12 @@ describe("cart tests", () => {
|
||||
);
|
||||
});
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discountsWithoutTemplategen) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts: discountsWithoutTemplategen,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -108,7 +128,12 @@ describe("cart tests", () => {
|
||||
);
|
||||
});
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discountsWithoutTemplategen) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts: discountsWithoutTemplategen,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -124,7 +149,12 @@ describe("cart tests", () => {
|
||||
it("история про то, как скидки за привилегии помешали получить скидку за сервис", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[5]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -140,7 +170,12 @@ describe("cart tests", () => {
|
||||
it("то же что и выше, но без лояльности", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[6]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -156,7 +191,12 @@ describe("cart tests", () => {
|
||||
it("история про то, как получилось получить скидку за сервис", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[7]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -172,7 +212,12 @@ describe("cart tests", () => {
|
||||
it("две скидки за сервис", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[8]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -188,7 +233,14 @@ describe("cart tests", () => {
|
||||
it("юзер использовал промокод id33. он заменяет скидку на p6 собой. в один момент времени может быть активирован только 1 промокод, т.е. после активации следующего, предыдущий заменяется. но в промокоде может быть несколько скидок. промокоды имеют скидки только на привелеги", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[9]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts, false, "ABCD") as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
isNonCommercial: false,
|
||||
coupon: "ABCD",
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -204,7 +256,13 @@ describe("cart tests", () => {
|
||||
it("юзер подтвердил свой статус НКО, поэтому, не смотря на то что он достиг по лояльности уровня скидки id2, она не применилась, а применилась id32", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[10]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts, true) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
isNonCommercial: true,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
@ -220,7 +278,12 @@ describe("cart tests", () => {
|
||||
it("case 12", () => {
|
||||
const testCase = prepareTestCase(exampleCartValues.testCases[11]);
|
||||
|
||||
const cartTotal = calcCartData(testCase.user, testCase.cartItems, discounts) as CartTotal;
|
||||
const cartTotal = calcCartData({
|
||||
user: testCase.user,
|
||||
purchasesAmount: testCase.user.PurchasesAmount,
|
||||
cartItems: testCase.cartItems,
|
||||
discounts,
|
||||
}) as CartTotal;
|
||||
const allEnvolvedDiscounts: string[] = [...cartTotal.envolvedCartDiscounts.map(discount => discount._id)];
|
||||
cartTotal.items.forEach(cartItem => {
|
||||
allEnvolvedDiscounts.push(...cartItem.envolvedDiscounts.map(discount => discount._id));
|
||||
|
||||
@ -3,13 +3,14 @@ import { ServiceType, SERVICE_LIST, Tariff } from "../../model/tariff";
|
||||
import { User } from "../../model/user";
|
||||
|
||||
|
||||
export function calcCartData(
|
||||
user: User,
|
||||
cartItems: CartItem[],
|
||||
discounts: AnyDiscount[],
|
||||
isNonCommercial: boolean = false,
|
||||
coupon?: string,
|
||||
): CartTotal | Error | null {
|
||||
export function calcCartData({ user, purchasesAmount, cartItems, discounts, isNonCommercial = false, coupon }: {
|
||||
user: User;
|
||||
purchasesAmount: number;
|
||||
cartItems: CartItem[];
|
||||
discounts: AnyDiscount[];
|
||||
isNonCommercial?: boolean;
|
||||
coupon?: string;
|
||||
}): CartTotal | Error | null {
|
||||
let isIncompatibleTariffs = false;
|
||||
|
||||
const defaultTariffTypePresent: { [Key in ServiceType]: boolean } = {
|
||||
@ -126,7 +127,7 @@ export function calcCartData(
|
||||
}
|
||||
|
||||
// layer 4
|
||||
const totalPurchasesAmountDiscount = findMaxTotalPurchasesAmountDiscount(discounts, user.PurchasesAmount);
|
||||
const totalPurchasesAmountDiscount = findMaxTotalPurchasesAmountDiscount(discounts, purchasesAmount);
|
||||
if (totalPurchasesAmountDiscount) {
|
||||
cartTotal.totalPrice *= totalPurchasesAmountDiscount.factor;
|
||||
cartTotal.envolvedCartDiscounts.push(totalPurchasesAmountDiscount);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user