расчёт стоимости в корзине

This commit is contained in:
ArtChaos189 2023-06-15 19:14:48 +03:00
parent b7f06fcf28
commit cdc56c900b
3 changed files with 112 additions and 59 deletions

@ -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) => ({