import React, {useState} from "react"; import {Button, Card, CardActions, CardContent, CardHeader, Grid, Typography} from "@mui/material"; import MenuItemCard from "./menu-item-card"; import {calculateTotalPrice, formatDate} from "../functions"; import {useAuthContext} from "../../configurations/AuthContext"; import {AssignOrderAdmin, AssignOrderDriver, OrderStatus, UpdateOrder} from "../../services/order-service"; import {Link, useLocation, useNavigate} from "react-router-dom"; import {UserRole} from "../../services/user-service"; import PaymentModal from "../modals/payment-modal"; const OrderCard = ({order}) => { const [naracka, setNaracka] = useState(order ?? undefined); const [openPaymentModal, setOpenPaymentModal] = useState(false); const {isAuthorized, loggedUserRole} = useAuthContext(); const navigate = useNavigate(); const location = useLocation(); const [detectAdminAction, setDetectAdminAction] = useState(false); const handleSaveNaracka = async (status) => { let updatedOrder = { potrosuvacId: naracka?.potrosuvac?.id, status: status, menuItems: naracka.narackaMenuItems.map(nmp => ({menuItemId: nmp?.menuItem?.id, quantity: nmp.quantity})) } setNaracka({...naracka, status: status}); await UpdateOrder(naracka.id, updatedOrder) navigate(location.pathname, {replace: true}); } const handleAssignAdmin = async (status) => { let adminRequest = { adminId: loggedUserRole?.roleId, approvalStatus: status, } await AssignOrderAdmin(naracka.id, adminRequest) navigate(location.pathname, {replace: true}); } const handleAssignVozac = async (status) => { let driverRequest = { vozacId: loggedUserRole?.roleId, deliveryStatus: status, } await AssignOrderDriver(naracka.id, driverRequest) navigate(location.pathname, {replace: true}); } const handleAddRemoveToNaracka = async (menuItem) => { const existingIndex = naracka.narackaMenuItems.findIndex(narackaMenu => narackaMenu.menuItem.id === menuItem.menuItemId); if (existingIndex !== -1) { // If the menu item exists, update its quantity if (menuItem.quantity === 0) { // Show confirm alert const shouldRemove = window.confirm("Are you sure you want to remove this item?"); if (shouldRemove) { await setNaracka(prevState => ({ ...prevState, narackaMenuItems: prevState.narackaMenuItems.filter((item, index) => index !== existingIndex) })); } } else { await setNaracka(prevState => ({ ...prevState, narackaMenuItems: prevState.narackaMenuItems.map((item, index) => { if (index === existingIndex) { return {...item, quantity: menuItem.quantity}; } return item; }) })); } } else if (menuItem.quantity !== 0) { // If the menu item doesn't exist and its quantity is not 0, add it to the naracka await setNaracka(prevState => ({ ...prevState, narackaMenuItems: [...prevState.narackaMenuItems, menuItem] })); } }; return ( naracka &&
User: {order?.potrosuvac?.korisnik?.username}
Address: {order?.potrosuvac?.address}
Contact: {order?.potrosuvac?.phoneNumber}
}/> {formatDate(order.datum)} {order.status} {naracka.narackaMenuItems && naracka.narackaMenuItems.length > 0 && naracka.narackaMenuItems.map((narackaMenu) => narackaMenu.quantity > 0 && window.location.reload()} itemchange={handleAddRemoveToNaracka}/> )} Total Price: {calculateTotalPrice(naracka?.narackaMenuItems)} MKD {isAuthorized(order?.potrosuvac?.id) && order?.status === OrderStatus.PendingUserApproval && <> } {loggedUserRole?.role === UserRole.Admin && ![OrderStatus.Finished, OrderStatus.Terminated, OrderStatus.PendingUserApproval].includes(order.status) && <> {![OrderStatus.Finished, OrderStatus.Approved, OrderStatus.Delivering].includes(order.status) && } {![OrderStatus.Finished, OrderStatus.Terminated].includes(order.status) && } {![OrderStatus.Finished, OrderStatus.PendingAdminApproval].includes(order.status) && } } {loggedUserRole?.role === UserRole.Vozac && [OrderStatus.Approved, OrderStatus.Delivering].includes(order.status) && <> {order.status !== OrderStatus.Delivering && < Button onClick={() => handleAssignVozac(OrderStatus.Delivering)}>Pick up Order} {![OrderStatus.Finished, OrderStatus.PendingAdminApproval, OrderStatus.Approved].includes(order.status) && < Button onClick={() => handleAssignVozac(OrderStatus.Finished)}>Finish Order} < Button onClick={() => handleAssignVozac(OrderStatus.Terminated)}>Cancel Order } {openPaymentModal && setOpenPaymentModal(false)}/>}
) } export default OrderCard;