import * as React from 'react'; import { enqueueSnackbar } from 'notistack'; import { DeleteFilled } from '@ant-design/icons'; import { useState, useEffect, Fragment, useRef } from 'react'; import { Empty } from 'antd'; import dayjs from 'dayjs'; var utc = require('dayjs/plugin/utc'); dayjs.extend(utc); import axios from 'axios'; import HoverSocialCard from 'components/cards/statistics/HoverSocialCard'; import { useTheme } from '@mui/material/styles'; import { Avatar, Box, Button, Grid, Tabs, Tab, IconButton, Stack, Chip, Typography, Table, TableCell, TableBody, TableHead, Dialog, TableRow, DialogContent, DialogTitle, Tooltip, FormControl, OutlinedInput, InputAdornment, Skeleton, TextField, Autocomplete } from '@mui/material'; import { SearchOutlined, CloseOutlined } from '@ant-design/icons'; import ClearIcon from '@mui/icons-material/Clear'; import { addDays, addMonths, addWeeks, endOfMonth, endOfWeek, startOfMonth, startOfWeek } from 'date-fns'; import { DateRangePicker } from 'mui-daterange-picker'; import TableContainer from '@mui/material/TableContainer'; import TablePagination from '@mui/material/TablePagination'; import TableSortLabel from '@mui/material/TableSortLabel'; import { visuallyHidden } from '@mui/utils'; import Loader from 'components/Loader'; import { FilterList } from '@mui/icons-material'; const Orders = () => { const tid = localStorage.getItem('tenantid'); const [page, setPage] = React.useState(0); const [rowsPerPage, setRowsPerPage] = React.useState(10); const [pageCountObj, setPageCountObj] = React.useState({}); const [pageCount, setPageCount] = React.useState(); const [startdate, setStartdate] = useState(dayjs().format('YYYY-MM-DD')); const [enddate, setEnddate] = useState(dayjs().format('YYYY-MM-DD')); const [percentage1, setPercentage1] = useState('0'); const [percentage2, setPercentage2] = useState('0'); const [percentage3, setPercentage3] = useState('0'); const [percentage4, setPercentage4] = useState('0'); let [orderarr, setArr] = useState([]); const [coveredorders, setCoveredorders] = useState(''); const [uncoveredorders, setUncoveredorders] = useState(''); const [cancelled, setCancelled] = useState(''); const [created, setCreated] = useState(''); const [tabstatus, setTabstatus] = useState('Created'); const [loading, setLoading] = useState(true); const theme = useTheme(); let [rows, setRows] = useState([]); const [tabvalue, setTabvalue] = useState(0); const [open, setOpen] = useState(false); const [tabstatus1, setTabstatus1] = useState('Today'); const [datestatus, setDatestatus] = useState('Today'); const [searchword, setSearchword] = useState(''); const [currentStatus, setCurrentStatus] = useState('created'); const [createdLenght, setCreatedLenght] = useState(); const [pendingLenght, setPendingLenght] = useState(); const [deliveredlenght, setDeliveredlenght] = useState(); const [cancelledLenght, setCancelledLenght] = useState(); const handleChangetab = (e, i) => { setTabvalue(i); if (i === 0) { setTabstatus('Created'); setCurrentStatus('created'); setPageCount(pageCountObj.created); } if (i === 1) { setTabstatus('Pending'); setCurrentStatus('pending'); setPageCount(pageCountObj.pending); } if (i === 2) { setTabstatus('Delivered'); setCurrentStatus('delivered'); setPageCount(pageCountObj.delivered); } if (i === 3) { setTabstatus('Cancelled'); setCurrentStatus('cancelled'); setPageCount(pageCountObj.cancelled); } console.log(i); }; const okclicked = () => { setOpen(false); }; const textFieldRef = useRef(null); /* ============================================= || handleKeyPress (ctrl+k)| ============================================= */ useEffect(() => { const handleKeyPress = (event) => { if (event.key === 'k' && (event.metaKey || event.ctrlKey)) { event.preventDefault(); textFieldRef.current.focus(); } if (event.key === 'Escape' && document.activeElement === textFieldRef.current) { // Remove focus from the TextField textFieldRef.current.blur(); } }; document.addEventListener('keydown', handleKeyPress); return () => { document.removeEventListener('keydown', handleKeyPress); }; }, []); useEffect(() => { var day = 60 * 60 * 24 * 1000; var startDate = new Date(); if (tabstatus1 === 'Tomorrow') { setEnddate(new Date(startDate.getTime() + day).toISOString().substring(0, 10)); setStartdate(new Date(startDate.getTime() + day).toISOString().substring(0, 10)); } else if (tabstatus1 === 'Today') { setEnddate(new Date().toISOString().substring(0, 10)); setStartdate(new Date().toISOString().substring(0, 10)); } else if (tabstatus1 === 'Week') { setStartdate(new Date(startDate.getTime() - day * 7).toISOString().substring(0, 10)); setEnddate(new Date().toISOString().substring(0, 10)); } }, [tabstatus1]); const fetchtablecovered = async () => { try { await axios .get( `${ process.env.REACT_APP_URL }/orders/tenant/getorders/?tenantid=${tid}&status=${currentStatus}&fromdate=${startdate}&todate=${enddate}&pageno=${ page + 1 }&pagesize=${rowsPerPage}&keyword=${searchword}` ) .then((res) => { setArr(res.data.details); setRows(res.data.details); }) .catch((err) => { console.log(err); }); } catch (err) { console.log(err); } }; useEffect(() => { fetchtablecovered(); }, [tabstatus, startdate, enddate, page, rowsPerPage, searchword]); const fetchpercentage = async () => { setLoading(true); try { await axios .get(`${process.env.REACT_APP_URL}/orders/getordersummary/?tenantid=${tid}`) .then((res) => { console.log(res); setCoveredorders(res.data.details.delivered.toString()); setCancelled(res.data.details.cancelled.toString()); setUncoveredorders(res.data.details.pending.toString()); setCreated(res.data.details.created.toString()); setPercentage1((Math.round((res.data.details.created / res.data.details.total) * 100) || 0).toString()); setPercentage3((Math.round((res.data.details.delivered / res.data.details.total) * 100) || 0).toString()); setPercentage4((Math.round((res.data.details.cancelled / res.data.details.total) * 100) || 0).toString()); setPercentage2((Math.round((res.data.details.pending / res.data.details.total) * 100) || 0).toString()); setLoading(false); }) .catch((err) => { console.log(err); setLoading(false); }); } catch (err) { console.log(err); setLoading(false); } }; useEffect(() => { fetchpercentage(); }, []); const fetchorderscount = async () => { setLoading(true); try { await axios .get(`${process.env.REACT_APP_URL}/orders/getordersummary/?tenantid=${tid}&fromdate=${startdate}&todate=${enddate}`) .then((res) => { console.log('fetchorderscount', res.data.details); setCreatedLenght(res.data.details.created); setPendingLenght(res.data.details.pending); setDeliveredlenght(res.data.details.delivered); setCancelledLenght(res.data.details.cancelled); tabvalue === 0 && setPageCount(res.data.details.created); tabvalue === 1 && setPageCount(res.data.details.pending); tabvalue === 2 && setPageCount(res.data.details.delivered); tabvalue === 3 && setPageCount(res.data.details.cancelled); setLoading(false); }) .catch((err) => { console.log(err); setLoading(false); }); } catch (err) { console.log(err); setLoading(false); } }; useEffect(() => { fetchorderscount(); }, [tabvalue]); const headCells = [ { id: 'sno', disablePadding: true, label: 'S NO' }, { id: 'orderid', numeric: false, disablePadding: false, label: 'ORDER ID' }, { id: 'eventname', disablePadding: false, label: 'Pickup' }, { id: 'eventname4', disablePadding: false, label: 'Delivery' }, { id: 'itemcount', disablePadding: false, label: 'NOTES' }, { id: 'orderstatus', disablePadding: false, label: 'STATUS' }, { id: 'action', disablePadding: false, label: 'ACTION' } ]; function EnhancedTableHead(props) { const { order, orderBy, onRequestSort } = props; const createSortHandler = (property) => (event) => { onRequestSort(event, property); }; return ( {headCells.map((headCell) => ( {headCell.label} {orderBy === headCell.id ? ( {order === 'desc' ? 'sorted descending' : 'sorted ascending'} ) : null} ))} ); } function EnhancedTable() { const [open, setOpen] = useState(false); const [orderheaderid, setOrderheaderid] = useState(''); const cancelorder = async () => { await axios .put(`${process.env.REACT_APP_URL}/orders/updateorder`, { orderheaderid: orderheaderid, orderstatus: 'cancelled', cancelled: dayjs().format('YYYY-MM-DD HH:mm:ss') }) .then((res) => { console.log(res); if (res.data.status) { enqueueSnackbar('Order Cancelled Successfully', { variant: 'success', anchorOrigin: { vertical: 'top', horizontal: 'right' }, autoHideDuration: 2000 }); handleClose(true); fetchtablecovered(); fetchorderscount(); } }) .catch((err) => { console.log(err); }); }; const handleChangePage = (event, newPage) => { setPage(newPage); }; const handleChangeRowsPerPage = (event) => { setRowsPerPage(parseInt(event.target.value, 10)); setPage(0); }; const handleClose = () => { setOpen(false); setOrderheaderid(''); }; function AlertCustomerDelete({ // title, open, handleClose }) { // const [deletepassword, setDeletepassword] = useState(''); return ( handleClose(false)} maxWidth="xs"> {/* */} Are you sure you want to cancel this order? {/* Please type in the order number to confirm. */} ); } return ( {loading && ( <> {[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((item, index) => ( ))} )} {rows?.length == 0 && ( <> )} {rows?.map((row, index) => { return ( <> {page * rowsPerPage + index + 1} {row.orderid} {dayjs(row.deliverydate).utc().format('DD/MM/YYYY')} {dayjs(row.deliverydate).utc().format('hh:mm A')} {row.pickupcustomer} {row.pickupcontactno} {row.pickupsuburb || row.pickupaddress.slice(0, 20)} {row.deliverycustomer} {row.deliverycontactno} {/* {row.pickupaddress.slice(0, 20)} */} {row.deliverysuburb || row.deliveryaddress.slice(0, 20)} {row.ordernotes} {/* */} {row.orderstatus === 'pending' && } {row.orderstatus === 'modified' && } {row.orderstatus === 'cancelled' && } {row.orderstatus === 'delivered' && } {row.orderstatus === 'processing' && } {row.orderstatus === 'ready' && } {row.orderstatus === 'confirmed' && } {row.orderstatus === 'active' && } {row.orderstatus === 'closed' && } {row.orderstatus === 'created' && } {row.orderstatus == 'created' && ( <> { e.stopPropagation(); setOrderheaderid(row.orderheaderid); setOpen(true); }} > )} ); })}
); } return ( <> {loading && } Orders : created} percentage={percentage1.toString()} color={theme.palette.primary.main} /> : uncoveredorders} percentage={percentage2.toString()} color={theme.palette.warning.main} /> : coveredorders} percentage={percentage3.toString()} color={theme.palette.success.main} /> : cancelled} percentage={percentage4.toString()} color={theme.palette.secondary[600]} /> {startdate && enddate && ( {dayjs(startdate).format('DD/MM/YYYY')} - {dayjs(enddate).format('DD/MM/YYYY')} } variant="combined" color="warning" size="small" /> )} setOpen(true)} > } iconPosition="end" /> } iconPosition="end" /> } iconPosition="end" /> } iconPosition="end" /> { setSearchword(e.target.value); }} autoComplete="off" startAdornment={ } endAdornment={ { setSearchword(''); fetchtablecovered(); fetchorderscount(); }} > } /> Select Filter Options setOpen(!open)} id="daterange1" onChange={(range) => { if (range.label === 'All') { setStartdate(''); setEnddate(''); setOpen(false); } else { setStartdate(dayjs(range.startDate).format('YYYY-MM-DD')); setEnddate(dayjs(range.endDate).format('YYYY-MM-DD')); if (range.label) { setDatestatus(range.label); } else { setDatestatus(''); } } console.log(range); }} definedRanges={[ { label: 'Today', startDate: new Date(), endDate: new Date() }, { label: 'Yesterday', startDate: addDays(new Date(), -1), endDate: addDays(new Date(), -1) }, { label: 'Tomorrow', startDate: addDays(new Date(), +1), endDate: addDays(new Date(), +1) }, { label: 'This Week', startDate: startOfWeek(new Date()), endDate: endOfWeek(new Date()) }, { label: 'Last Week', startDate: startOfWeek(addWeeks(new Date(), -1)), endDate: endOfWeek(addWeeks(new Date(), -1)) }, { label: 'Last 7 Days', startDate: addWeeks(new Date(), -1), endDate: new Date() }, { label: 'This Month', startDate: startOfMonth(new Date()), endDate: endOfMonth(new Date()) }, { label: 'Last Month', startDate: startOfMonth(addMonths(new Date(), -1)), endDate: endOfMonth(addMonths(new Date(), -1)) } // { // label: 'All', // startDate: new Date(), // endDate: addDays(new Date(), -1), // }, ]} /> ); }; export default Orders;