Merge branch 'dev' into 'main'

Users: replacing table with dataGrid &&

See merge request frontend/admin!13
This commit is contained in:
Mikhail 2023-05-17 13:08:02 +00:00
commit 7e8f012a07
3 changed files with 130 additions and 22 deletions

@ -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);