расчёт стоимости в корзине
This commit is contained in:
parent
b7f06fcf28
commit
cdc56c900b
@ -16,7 +16,7 @@ import {
|
|||||||
} from "@mui/material";
|
} from "@mui/material";
|
||||||
import Input from "@kitUI/input";
|
import Input from "@kitUI/input";
|
||||||
import { useCartStore } from "@root/stores/cart";
|
import { useCartStore } from "@root/stores/cart";
|
||||||
import { useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import { GridSelectionModel } from "@mui/x-data-grid";
|
import { GridSelectionModel } from "@mui/x-data-grid";
|
||||||
import { testUser } from "@root/stores/mocks/user";
|
import { testUser } from "@root/stores/mocks/user";
|
||||||
import { useDiscountStore } from "@root/stores/discounts";
|
import { useDiscountStore } from "@root/stores/discounts";
|
||||||
@ -24,11 +24,30 @@ import { calcCartData, createCartItem, findDiscountFactor, formatDiscountFactor
|
|||||||
import { useTariffStore } from "@root/stores/tariffs";
|
import { useTariffStore } from "@root/stores/tariffs";
|
||||||
import { AnyDiscount, CartItemTotal } from "@root/model/cart";
|
import { AnyDiscount, CartItemTotal } from "@root/model/cart";
|
||||||
import { findPrivilegeById } from "@root/stores/privileges";
|
import { findPrivilegeById } from "@root/stores/privileges";
|
||||||
|
import { Privilege } from "@root/model/tariff";
|
||||||
|
import { enqueueSnackbar } from "notistack";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
selectedTariffs: GridSelectionModel;
|
selectedTariffs: GridSelectionModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface MergedTariff {
|
||||||
|
_id: string;
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
privilegeId: string;
|
||||||
|
serviceName: string;
|
||||||
|
price: number;
|
||||||
|
isCustom: boolean;
|
||||||
|
createdAt: string;
|
||||||
|
isDeleted: boolean;
|
||||||
|
amount: number;
|
||||||
|
customPricePerUnit?: number;
|
||||||
|
privilegies: Privilege[];
|
||||||
|
isFront: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export default function Cart({ selectedTariffs }: Props) {
|
export default function Cart({ selectedTariffs }: Props) {
|
||||||
const tariffs = useTariffStore((store) => store.tariffs);
|
const tariffs = useTariffStore((store) => store.tariffs);
|
||||||
const discounts = useDiscountStore((store) => store.discounts);
|
const discounts = useDiscountStore((store) => store.discounts);
|
||||||
@ -39,6 +58,43 @@ export default function Cart({ selectedTariffs }: Props) {
|
|||||||
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
const [errorMessage, setErrorMessage] = useState<string | null>(null);
|
||||||
const [isNonCommercial, setIsNonCommercial] = useState<boolean>(false);
|
const [isNonCommercial, setIsNonCommercial] = useState<boolean>(false);
|
||||||
|
|
||||||
|
const exampleTariffs = useTariffStore((state) => state.tariffs);
|
||||||
|
const [tariffss, setTariffs] = useState<any>();
|
||||||
|
const mergeTariffs: MergedTariff[] = [...exampleTariffs, ...(tariffss || [])];
|
||||||
|
|
||||||
|
console.log(cartTotal, "cartTotal");
|
||||||
|
|
||||||
|
const getTariffs = () => {
|
||||||
|
axios({
|
||||||
|
method: "get",
|
||||||
|
url: "https://admin.pena.digital/strator/tariff",
|
||||||
|
})
|
||||||
|
.then((data: any) => {
|
||||||
|
setTariffs(data.data.tariffs);
|
||||||
|
|
||||||
|
// data.data.tariffs.forEach(async (t:any) => {
|
||||||
|
// if (t._id) {
|
||||||
|
// console.log(t._id)
|
||||||
|
// await axios({
|
||||||
|
// method: "delete",
|
||||||
|
// url: "https://admin.pena.digital/strator/tariff/delete",
|
||||||
|
// headers: {
|
||||||
|
// Authorization: `Bearer ${token}`,
|
||||||
|
// },
|
||||||
|
// data: { id: t._id },
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// })
|
||||||
|
})
|
||||||
|
.catch((error) => {
|
||||||
|
enqueueSnackbar("Ошибка получения тарифов");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
useEffect(() => {
|
||||||
|
getTariffs();
|
||||||
|
}, []);
|
||||||
|
|
||||||
const cartRows = cartTotal?.items.map((cartItemTotal) => {
|
const cartRows = cartTotal?.items.map((cartItemTotal) => {
|
||||||
const privilege = findPrivilegeById(cartItemTotal.tariff.privilegeId);
|
const privilege = findPrivilegeById(cartItemTotal.tariff.privilegeId);
|
||||||
|
|
||||||
@ -96,13 +152,14 @@ export default function Cart({ selectedTariffs }: Props) {
|
|||||||
</Box>
|
</Box>
|
||||||
);
|
);
|
||||||
|
|
||||||
function handleCalcCartClick() { //рассчитать
|
function handleCalcCartClick() {
|
||||||
const cartTariffs = tariffs.filter((tariff) => selectedTariffs.includes(tariff.id));
|
//рассчитать
|
||||||
|
const cartTariffs = mergeTariffs.filter((tariff) => selectedTariffs.includes(tariff._id ? tariff._id : tariff.id));
|
||||||
const cartItems = cartTariffs.map((tariff) => createCartItem(tariff));
|
const cartItems = cartTariffs.map((tariff) => createCartItem(tariff));
|
||||||
console.log(cartTariffs)
|
console.log(cartTariffs);
|
||||||
console.log(cartItems)
|
console.log(cartItems);
|
||||||
console.log("selectedTariffs")
|
console.log("selectedTariffs");
|
||||||
console.log(selectedTariffs)
|
console.log(selectedTariffs);
|
||||||
|
|
||||||
let loyaltyValue = parseInt(loyaltyField);
|
let loyaltyValue = parseInt(loyaltyField);
|
||||||
|
|
||||||
@ -110,12 +167,14 @@ export default function Cart({ selectedTariffs }: Props) {
|
|||||||
|
|
||||||
const activeDiscounts = discounts.filter((discount) => !discount.disabled);
|
const activeDiscounts = discounts.filter((discount) => !discount.disabled);
|
||||||
|
|
||||||
console.log({ user: testUser,
|
console.log({
|
||||||
|
user: testUser,
|
||||||
purchasesAmount: loyaltyValue,
|
purchasesAmount: loyaltyValue,
|
||||||
cartItems,
|
cartItems,
|
||||||
discounts: activeDiscounts,
|
discounts: activeDiscounts,
|
||||||
isNonCommercial,
|
isNonCommercial,
|
||||||
coupon: couponField,})
|
coupon: couponField,
|
||||||
|
});
|
||||||
const cartData = calcCartData({
|
const cartData = calcCartData({
|
||||||
user: testUser,
|
user: testUser,
|
||||||
purchasesAmount: loyaltyValue,
|
purchasesAmount: loyaltyValue,
|
||||||
|
@ -16,7 +16,7 @@ import axios from "axios";
|
|||||||
import { authStore } from "@root/stores/auth";
|
import { authStore } from "@root/stores/auth";
|
||||||
import DeleteModal from "@root/kitUI/DeleteModal";
|
import DeleteModal from "@root/kitUI/DeleteModal";
|
||||||
import EditModal from "./EditModal";
|
import EditModal from "./EditModal";
|
||||||
import {TariffDG, Privilege} from "./types"
|
import { TariffDG, Privilege } from "./types";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
selectedTariffs: GridSelectionModel;
|
selectedTariffs: GridSelectionModel;
|
||||||
@ -36,7 +36,7 @@ interface MergedTariff {
|
|||||||
amount?: number;
|
amount?: number;
|
||||||
customPricePerUnit?: number;
|
customPricePerUnit?: number;
|
||||||
privilegies: Privilege[];
|
privilegies: Privilege[];
|
||||||
isFront: boolean
|
isFront: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Props) {
|
export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Props) {
|
||||||
@ -51,8 +51,6 @@ export default function TariffsDG({ selectedTariffs, handleSelectionChange }: Pr
|
|||||||
const [errorDelete, setErrorDelete] = useState(false);
|
const [errorDelete, setErrorDelete] = useState(false);
|
||||||
|
|
||||||
const mergeTariffs: MergedTariff[] = [...exampleTariffs, ...(tariffs || [])];
|
const mergeTariffs: MergedTariff[] = [...exampleTariffs, ...(tariffs || [])];
|
||||||
console.log("exampleTariffs")
|
|
||||||
console.log(exampleTariffs)
|
|
||||||
|
|
||||||
const tariffDeleteDataGrid = async (tarifIid: string) => {
|
const tariffDeleteDataGrid = async (tarifIid: string) => {
|
||||||
if (exampleTariffs.find((tariff) => tariff.id === tarifIid)) {
|
if (exampleTariffs.find((tariff) => tariff.id === tarifIid)) {
|
||||||
@ -72,7 +70,7 @@ console.log(exampleTariffs)
|
|||||||
});
|
});
|
||||||
setDeletedRows((prevDeletedRows) => [...prevDeletedRows, tarifIid]);
|
setDeletedRows((prevDeletedRows) => [...prevDeletedRows, tarifIid]);
|
||||||
enqueueSnackbar("Тариф удалён");
|
enqueueSnackbar("Тариф удалён");
|
||||||
getTariffs()
|
getTariffs();
|
||||||
} catch (error: any) {
|
} catch (error: any) {
|
||||||
setErrorDelete(true);
|
setErrorDelete(true);
|
||||||
enqueueSnackbar("Ошибка удаления :", error.message);
|
enqueueSnackbar("Ошибка удаления :", error.message);
|
||||||
@ -109,7 +107,7 @@ console.log(exampleTariffs)
|
|||||||
enqueueSnackbar(error.message);
|
enqueueSnackbar(error.message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getTariffs()
|
getTariffs();
|
||||||
|
|
||||||
enqueueSnackbar(`Deleted: ${deleted.join(", ")}`);
|
enqueueSnackbar(`Deleted: ${deleted.join(", ")}`);
|
||||||
enqueueSnackbar(`Not deleted: ${notDeleted.join(", ")}`);
|
enqueueSnackbar(`Not deleted: ${notDeleted.join(", ")}`);
|
||||||
@ -120,8 +118,8 @@ console.log(exampleTariffs)
|
|||||||
method: "get",
|
method: "get",
|
||||||
url: "https://admin.pena.digital/strator/tariff",
|
url: "https://admin.pena.digital/strator/tariff",
|
||||||
})
|
})
|
||||||
.then((data:any) => {
|
.then((data: any) => {
|
||||||
setTariffs(data.data.tariffs)
|
setTariffs(data.data.tariffs);
|
||||||
|
|
||||||
// data.data.tariffs.forEach(async (t:any) => {
|
// data.data.tariffs.forEach(async (t:any) => {
|
||||||
// if (t._id) {
|
// if (t._id) {
|
||||||
@ -140,13 +138,11 @@ console.log(exampleTariffs)
|
|||||||
})
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
enqueueSnackbar("Ошибка получения тарифов");
|
enqueueSnackbar("Ошибка получения тарифов");
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
getTariffs()
|
getTariffs();
|
||||||
}, [])
|
}, []);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const columns: GridColDef[] = [
|
const columns: GridColDef[] = [
|
||||||
{ field: "id", headerName: "ID", width: 100 },
|
{ field: "id", headerName: "ID", width: 100 },
|
||||||
@ -184,7 +180,6 @@ console.log(exampleTariffs)
|
|||||||
<IconButton onClick={() => setChangedTariff(row)}>
|
<IconButton onClick={() => setChangedTariff(row)}>
|
||||||
<ModeEditOutlineOutlinedIcon />
|
<ModeEditOutlineOutlinedIcon />
|
||||||
</IconButton>
|
</IconButton>
|
||||||
|
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -195,12 +190,11 @@ console.log(exampleTariffs)
|
|||||||
return name[0];
|
return name[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
console.log(mergeTariffs);
|
||||||
console.log(mergeTariffs)
|
|
||||||
const gridData = mergeTariffs
|
const gridData = mergeTariffs
|
||||||
.filter((tariff) => !tariff.isDeleted)
|
.filter((tariff) => !tariff.isDeleted)
|
||||||
.map((tariff) => {
|
.map((tariff) => {
|
||||||
console.log(tariff)
|
console.log(tariff);
|
||||||
return {
|
return {
|
||||||
id: tariff._id ? tariff._id : tariff.id,
|
id: tariff._id ? tariff._id : tariff.id,
|
||||||
name: tariff.name,
|
name: tariff.name,
|
||||||
@ -221,9 +215,9 @@ console.log(mergeTariffs)
|
|||||||
total: tariff.amount
|
total: tariff.amount
|
||||||
? tariff.amount * (tariff.customPricePerUnit ?? findPrivilegeById(tariff.privilegeId)?.price ?? 0)
|
? tariff.amount * (tariff.customPricePerUnit ?? findPrivilegeById(tariff.privilegeId)?.price ?? 0)
|
||||||
: 0,
|
: 0,
|
||||||
isFront: tariff.isFront ? tariff.isFront : false
|
isFront: tariff.isFront ? tariff.isFront : false,
|
||||||
|
};
|
||||||
}});
|
});
|
||||||
|
|
||||||
const selectedTariff = gridData.find((tariff) => tariff.id === selectedTariffs[0]);
|
const selectedTariff = gridData.find((tariff) => tariff.id === selectedTariffs[0]);
|
||||||
const selectedTariffPrivilege = selectedTariff ? selectedTariff.privilege : [];
|
const selectedTariffPrivilege = selectedTariff ? selectedTariff.privilege : [];
|
||||||
@ -269,10 +263,12 @@ console.log(mergeTariffs)
|
|||||||
tariffId={selectedTariffs}
|
tariffId={selectedTariffs}
|
||||||
tariffName={allName()}
|
tariffName={allName()}
|
||||||
open={openDeleteModal}
|
open={openDeleteModal}
|
||||||
handleClose={() => {setOpenDeleteModal(false)}}
|
handleClose={() => {
|
||||||
|
setOpenDeleteModal(false);
|
||||||
|
}}
|
||||||
/>
|
/>
|
||||||
{console.log(changedTariff)}
|
{console.log(changedTariff)}
|
||||||
<EditModal tariff={changedTariff} getTariffs={getTariffs}/>
|
<EditModal tariff={changedTariff} getTariffs={getTariffs} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { Tariff } from "@root/model/tariff";
|
import { Tariff } from "@root/model/tariff";
|
||||||
import { create } from "zustand";
|
import { create } from "zustand";
|
||||||
import { persist } from "zustand/middleware";
|
import { persist } from "zustand/middleware";
|
||||||
import { exampleTariffs } from "./mocks/tariffs";
|
|
||||||
|
|
||||||
interface TariffStore {
|
interface TariffStore {
|
||||||
tariffs: Tariff[];
|
tariffs: Tariff[];
|
||||||
@ -22,8 +21,7 @@ export const useTariffStore = create<TariffStore>()(
|
|||||||
export const addTariffs = (newTariffs: Tariff[]) =>
|
export const addTariffs = (newTariffs: Tariff[]) =>
|
||||||
useTariffStore.setState((state) => ({ tariffs: [...state.tariffs, ...newTariffs] }));
|
useTariffStore.setState((state) => ({ tariffs: [...state.tariffs, ...newTariffs] }));
|
||||||
|
|
||||||
export const updateTariffs = (newTariff: Tariff[]) =>
|
export const updateTariffs = (newTariff: Tariff[]) => useTariffStore.setState((state) => ({ tariffs: newTariff }));
|
||||||
useTariffStore.setState((state) => ({ tariffs: newTariff }));
|
|
||||||
|
|
||||||
export const deleteTariffs = (tariffId: string) =>
|
export const deleteTariffs = (tariffId: string) =>
|
||||||
useTariffStore.setState((state) => ({
|
useTariffStore.setState((state) => ({
|
||||||
|
Loading…
Reference in New Issue
Block a user