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 (
);
}
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"
/>
>
);
};
export default Orders;