import React, { useState, useEffect } from "react"; import { Box, Typography, Grid, Button, FormControl, Dialog, DialogActions, DialogContent, Table, TableBody, TableCell, TableHead, TableRow, Paper, DialogContentText, DialogTitle, TextField, Divider, Chip, } from "@mui/material"; import onvoicesData from "../../assets/incoicedata.json"; import { useNavigate, useParams } from "react-router-dom"; import { TableContainer } from "@material-ui/core"; import axios from "axios"; // Import axios for HTTP requests import { isAutheticated } from "src/auth"; import Swal from "sweetalert2"; import OrderDetailsDialog from "./partialOrderModal"; import InvoiceTable from "./invoiceTable"; import PendingOrderTable from "./pendingOrderTable"; const ViewInvoices = () => { const [invoice, setInvoice] = useState(null); // State to store order details const [status, setStatus] = useState(""); const [openConfirmDialog, setOpenConfirmDialog] = useState(false); const [openDispatchDialog, setOpenDispatchDialog] = useState(false); const [openDeliveredDialog, setOpenDeliveredDialog] = useState(false); // New dialog state for delivery confirmation const [courierName, setCourierName] = useState(""); const [couriertrackingId, setCourierId] = useState(""); const [deliveryDate, setDeliveryDate] = useState(""); const token = isAutheticated(); // State for delivery date const [invoiceStatus, setInvoiceStatus] = useState(""); const [loading, setLoading] = useState(true); // Loading state const [error, setError] = useState(null); // Error state const navigate = useNavigate(); const { id } = useParams(); // Get order ID from URL params useEffect(() => { const fetchOrderDetails = async () => { try { const response = await axios.get(`/api/invoice/details/${id}`, { headers: { Authorization: `Bearer ${token}`, }, }); // console.log(response); setInvoice(response.data); setStatus(response.data.courierStatus); setLoading(false); } catch (err) { console.log(err); setError("Failed to fetch order details"); setLoading(false); } }; fetchOrderDetails(); }, [id]); const handleStatusChange = (event) => { setInvoiceStatus(event.target.value); }; const handleUpdateClick = () => { if (invoiceStatus === "dispatched") { setOpenDispatchDialog(true); } else if (invoiceStatus === "delivered") { setOpenDeliveredDialog(true); } }; const handleConfirmUpdate = async (e) => { e.preventDefault(); try { if (invoiceStatus === "dispatched") { const res = await axios.put( `/api/invoice/dispatched/${id}`, { courierName, couriertrackingId, }, { headers: { Authorization: `Bearer ${token}`, }, } ); // console.log(res); if (res.status === 200) { Swal.fire("Invoice Status updated", "Invoice Dispatched", "success"); navigate(`/orders/dispatched`); } } else if (invoiceStatus === "delivered") { const deli = await axios.put( `/api/invoice/delivered/${id}`, {}, { headers: { "Access-Control-Allow-Origin": "*", Authorization: `Bearer ${token}`, }, } ); if (deli.status === 200) { Swal.fire("Order Status updated", `Order Dispatched`, "success"); navigate(`/orders/delivered`); } } } catch (error) { Swal.fire("Something went wrong ", error.message, "error"); } setOpenDispatchDialog(false); setOpenDeliveredDialog(false); // Close delivered dialog }; const handleCancel = async () => { setOpenDispatchDialog(false); setOpenDeliveredDialog(false); // Close delivered dialog }; if (loading) { return Loading...; } if (error) { return {error}; } return ( Invoice Id : {invoice?.invoiceId} Invoice {/* */} Invoice ID Invoice Items Subtotal GST Total Invoice Amount Courier Status {invoice.invoiceId} {invoice.items.map((item) => (
{item.name} ({item.SKU}) x{" "} {item.processquantity}
))}
₹{invoice.subtotal.toFixed(2)} ₹{invoice.gstTotal.toFixed(2)} ₹{invoice.invoiceAmount.toFixed(2)}
{/* Order Summary Product Price (₹) Quantity Subtotal (₹) GST (%) GST Amount (₹) Total with GST (₹) {invoice?.orderId?.orderItem.map((item, index) => { const subtotal = item.price * item.quantity; const gstAmount = ((item.GST * item.price) / 100) * item.quantity; const totalWithGST = subtotal + gstAmount; return ( {item.productId.name} {item.productId.name} ₹{item.price} {item.quantity} ₹{subtotal} {item.GST}% ₹{gstAmount} ₹{totalWithGST} ); })}
*/} Invoice Summary Total Items: {invoice?.items.length} Total Subtotal: ₹{invoice?.subtotal} Total GST: ₹{invoice?.gstTotal} Grand Total: ₹{invoice?.invoiceAmount}
Customer Details SBU: {invoice?.orderId?.addedBy.SBU} Name: {invoice?.orderId?.addedBy.name} Email id: {invoice?.orderId?.addedBy.email} Number: {invoice?.orderId?.addedBy.phone} Bill Address {invoice?.orderId?.billTo} Ship Address {invoice?.orderId?.shipTo} Payment mode {invoice?.orderId?.paymentMode} {/* Order Status {order?.status} {invoice?.courierStatus === "cancelled" && ( {order?.order_Cancelled_Reason} )} */} {invoice?.status !== "delivered" && ( )} {invoiceStatus && ( )}
{/* Dialogs for updating status */} Update Order Status Are you sure you want to update the status to {invoiceStatus}? {/* Dialog for dispatch details */} Dispatch Details
Please provide courier name and ID for dispatch: setCourierName(e.target.value)} /> setCourierId(e.target.value)} />
Confirm Delivery
Please confirm the delivery details: setDeliveryDate(e.target.value)} InputLabelProps={{ shrink: true, }} />
); }; const formatAMPM = (date) => { var hours = new Date(date).getHours(); var minutes = new Date(date).getMinutes(); var ampm = hours >= 12 ? "PM" : "AM"; hours = hours % 12; hours = hours ? hours : 12; minutes = minutes < 10 ? "0" + minutes : minutes; var strTime = hours + ":" + minutes + " " + ampm; return strTime; }; export default ViewInvoices;