скидка - "корзина больше"

This commit is contained in:
Nikolai 2022-11-08 15:20:45 +06:00
parent 129edcf29a
commit 29711e5a19
3 changed files with 74 additions and 11 deletions

@ -59,6 +59,12 @@ const columns: GridColDef[] = [
headerName: "Активна",
width: 100,
sortable: false,
},
{
field: "basketMore",
headerName: "Корзина больше",
width: 140,
sortable: false,
}
];
@ -72,7 +78,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 2",
discount: 0.2
}
], active: false },
], active: false, basketMore: 10 },
{ id: 2, name: "Скидка 2", endless: false, from: "", dueTo: "", privileges: [
{
good: "Товар 3",
@ -82,7 +88,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 4",
discount: 0.2
}
], active: true },
], active: true, basketMore: 10 },
{ id: 3, name: "Скидка 3", endless: false, from: "", dueTo: "", privileges: [
{
good: "Товар 5",
@ -92,7 +98,7 @@ const rows:Array<DiscountProps> = [
good: "Товар 6",
discount: 0.2
}
], active: false },
], active: false, basketMore: 10 },
];
const Discounts: React.FC = () => {
@ -110,6 +116,7 @@ const Discounts: React.FC = () => {
const { discountsArray, discountsArraySet } = useStore<StoreState>((state) => state);
//discountsArraySet( rows );
const { discountsActiveArray, discountsActiveArraySet } = useStore<StoreState>((state) => state);
let discountsActiveArrayUpdated:Array<number>;
@ -130,6 +137,8 @@ const Discounts: React.FC = () => {
findActiveDiscounts();
const discountsArrayConverted = discountsArray.map( (item) => {
const basketMorePerc = item.basketMore * 100 + "%";
const dateFrom = item.from ? new Date( Number(item.from) ) : "";
const dateDueTo = item.from ? new Date( Number(item.dueTo) ) : "";
@ -150,13 +159,13 @@ const Discounts: React.FC = () => {
return acc;
}, "" );
return { ...item, privileges: result, from: strFrom, dueTo: strDueTo }
return { ...item, privileges: result, from: strFrom, dueTo: strDueTo, basketMore: basketMorePerc }
} else {
return { ...item, from: strFrom, dueTo: strDueTo }
return { ...item, from: strFrom, dueTo: strDueTo, basketMore: basketMorePerc }
}
} );
const createDiscount = ( name:string, discount: number, addedMore: number ) => {
const createDiscount = ( name:string, discount: number, addedMore: number, basketMore: number ) => {
const newDiscount = {
id: new Date().getTime(),
name,
@ -167,7 +176,8 @@ const Discounts: React.FC = () => {
good: service,
discount: discount / 100
}],
active: false
active: false,
basketMore: basketMore / 100
}
const discountsArrayUpdated = [ ...discountsArray, newDiscount ];
@ -177,15 +187,24 @@ const Discounts: React.FC = () => {
const fieldName = React.useRef<HTMLInputElement | null>(null);
const fieldDiscount = React.useRef<HTMLInputElement | null>(null);
const fieldAddedMore = React.useRef<HTMLInputElement | null>(null);
const basketMore = React.useRef<HTMLInputElement | null>(null);
const cleraAddedMore = () => {
if (fieldAddedMore.current) {
fieldAddedMore.current.value = "";
}
}
const checkFields = () => {
if( fieldName.current != null
&& fieldDiscount.current != null
&& fieldAddedMore.current != null ) {
&& fieldAddedMore.current != null
&& basketMore.current != null ) {
createDiscount( fieldName.current.value,
Number(fieldDiscount.current.value),
Number(fieldAddedMore.current.value) );
Number(fieldAddedMore.current.value),
Number(basketMore.current.value) );
}
}
@ -351,6 +370,28 @@ const Discounts: React.FC = () => {
inputRef={ fieldAddedMore }
/>
<TextField
id = "standard-basic"
label = { "Объем в корзине" }
variant = "filled"
color = "secondary"
type = "number"
sx={{
marginTop: "15px"
}}
InputProps={{
style: {
backgroundColor: theme.palette.content.main,
color: theme.palette.secondary.main,
} }}
InputLabelProps={{
style: {
color: theme.palette.secondary.main
} }}
inputRef={ basketMore }
onChange={ () => cleraAddedMore() }
/>
<TableContainer component={Paper} sx={{
width: "100%",
marginTop: "35px",

@ -11,4 +11,5 @@ export interface DiscountProps {
dueTo: string
privileges: Array<PrivilegesProps>
active: boolean
basketMore: number
}

@ -579,12 +579,33 @@ const DataGridElement: React.FC<MWProps> = ({ openModal }) => {
});
});
}
console.log(percents)
price = price - (price * percents);
}
prices += price;
// применяем активные скидки за объем корзины
let more = 0;
let moreI = -1;
if( discountsActiveArray.length >= 0 && checkboxStates == 1 && selectedPromocode < 0 ) {
discountsActiveArray.forEach( (activeDiscount) => {
discountsArray.forEach( (discount, i) => {
if( i == activeDiscount && discount.basketMore ) {
if( more <= discount.basketMore ) {
more = discount.basketMore;
moreI = i;
}
}
});
});
}
if( moreI >= 0 ) {
price = price - ( price * discountsArray[ moreI ].basketMore );
}
return(
<ListItem key={ item.id }>
<ListItemAvatar>