From 9059f2013ed0f98d43b95de5989cbeb06959e00b Mon Sep 17 00:00:00 2001 From: Nikolai Date: Sat, 22 Oct 2022 12:05:13 +0600 Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=81=D0=BA=D0=B8=D0=B4=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LoggedIn/Content/Discounts/index.tsx | 22 ++++++- .../Content/Tariffs/DataGridElement/index.tsx | 65 +++++++++++++++++-- 2 files changed, 81 insertions(+), 6 deletions(-) diff --git a/src/Components/LoggedIn/Content/Discounts/index.tsx b/src/Components/LoggedIn/Content/Discounts/index.tsx index 1b3cc39..d3b0709 100644 --- a/src/Components/LoggedIn/Content/Discounts/index.tsx +++ b/src/Components/LoggedIn/Content/Discounts/index.tsx @@ -107,8 +107,16 @@ const Discounts: React.FC = () => { setService(event.target.value as string); }; + let { discountsArray, discountsArraySet } = useStore((state) => state); - //discountsArray = [...rows]; //УДАЛИТЬ + + const getDiscounts = localStorage.getItem("discounts"); + const store = useStore( (state) => state ); + + if( getDiscounts && !store.discountsArray.length ) { + const rows:Array = JSON.parse(getDiscounts); + if( rows.length ) { store.discountsArraySet( rows ); }; + } const { discountsActiveArray, discountsActiveArraySet } = useStore((state) => state); let discountsActiveArrayUpdated:Array; @@ -124,11 +132,19 @@ const Discounts: React.FC = () => { if( JSON.stringify(discountsActiveArray) != JSON.stringify(discountsActiveArrayUpdated) ) { discountsActiveArraySet( discountsActiveArrayUpdated ); + localStorage.setItem("activeDiscounts", JSON.stringify( discountsActiveArrayUpdated )); } } findActiveDiscounts(); - + + const getActiveDiscounts = localStorage.getItem("activeDiscounts"); + + if( getActiveDiscounts && !store.discountsArray.length ) { + const rows:Array = JSON.parse(getActiveDiscounts); + if( rows.length ) { store.discountsActiveArraySet( rows ); }; + } + const discountsArrayConverted = discountsArray.map( (item) => { const dateFrom = item.from ? new Date( Number(item.from) ) : ""; const dateDueTo = item.from ? new Date( Number(item.dueTo) ) : ""; @@ -172,6 +188,7 @@ const Discounts: React.FC = () => { const discountsArrayUpdated = [ ...discountsArray, newDiscount ]; discountsArraySet( discountsArrayUpdated ); + localStorage.setItem("discounts", JSON.stringify( discountsArrayUpdated )); } const fieldName = React.useRef(null); @@ -208,6 +225,7 @@ const Discounts: React.FC = () => { } ); discountsArraySet( discountsArray ); + localStorage.setItem("discounts", JSON.stringify( discountsArray )); } return ( diff --git a/src/Components/LoggedIn/Content/Tariffs/DataGridElement/index.tsx b/src/Components/LoggedIn/Content/Tariffs/DataGridElement/index.tsx index 6cea40e..a054bc7 100644 --- a/src/Components/LoggedIn/Content/Tariffs/DataGridElement/index.tsx +++ b/src/Components/LoggedIn/Content/Tariffs/DataGridElement/index.tsx @@ -15,6 +15,7 @@ import DeleteIcon from "@mui/icons-material/Delete"; import FormControlLabel from "@mui/material/FormControlLabel"; import Checkbox from "@mui/material/Checkbox"; import { PrivilegesProps, PromocodeProps } from "../../Promocode/types"; +import { DiscountProps } from "../../Discounts/types"; import theme from "../../../../../theme"; @@ -107,6 +108,24 @@ const DataGridElement: React.FC = ({ openModal }) => { let price = 0; let prices = 0; + const { discountsArray, discountsArraySet } = useStore((state) => state); + const { discountsActiveArray, discountsActiveArraySet } = useStore((state) => state); + + const getDiscounts = localStorage.getItem("discounts"); + const store = useStore( (state) => state ); + + if( getDiscounts && !store.discountsArray.length ) { + const rows:Array = JSON.parse(getDiscounts); + if( rows.length ) { store.discountsArraySet( rows ); }; + } + + const getActiveDiscounts = localStorage.getItem("activeDiscounts"); + + if( getActiveDiscounts && !store.discountsArray.length ) { + const rows:Array = JSON.parse(getActiveDiscounts); + if( rows.length ) { store.discountsActiveArraySet( rows ); }; + } + const [checkboxStates, setCheckboxStates] = React.useState(1); const checkboxToggle = () => { @@ -403,25 +422,45 @@ const DataGridElement: React.FC = ({ openModal }) => { { cartRowsData.map( (item) => { if( item.type == "package" ) { - // считаем цену + // считаем цену в пакетах price = 0; if( item.tariffs ) { item.tariffs.forEach( (tariff) => { - price += tariff.price; + let tariffPrice = tariff.price; // применяем скидки по промокоду if( selectedPromocode >= 0 && checkboxStates == 1 ) { promocodeArray[ selectedPromocode ].privileges.forEach( (privilege) => { if( tariff.service == privilege.good ) { - price = price * privilege.discount; + tariffPrice = tariffPrice * privilege.discount; } } ) } + + // применяем активные скидки + if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) { + discountsActiveArray.forEach( (activeDiscount) => { + discountsArray.forEach( (discount, i) => { + if( i == activeDiscount ) { + discount.privileges.forEach( (privilege) => { + if( tariff.service == privilege.good ) { + if( privilege.discount != 0 ) { + tariffPrice = tariffPrice * privilege.discount; + } + } + }); + } + }); + }); + } + + price += tariffPrice; + } ); } } else { - // считаем цену + // считаем цену в тарифах price = item.price; // применяем скидки по промокоду @@ -432,6 +471,24 @@ const DataGridElement: React.FC = ({ openModal }) => { } } ) } + + // применяем активные скидки + if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) { + discountsActiveArray.forEach( (activeDiscount) => { + discountsArray.forEach( (discount, i) => { + if( i == activeDiscount ) { + discount.privileges.forEach( (privilege) => { + if( item.service == privilege.good ) { + if( privilege.discount != 0 ) { + price = price * privilege.discount; + } + } + }); + } + }); + }); + } + } prices += price;