diff --git a/admin/assets/js/dashboard-chart.js b/admin/assets/js/dashboard-chart.js new file mode 100644 index 0000000..8a66047 --- /dev/null +++ b/admin/assets/js/dashboard-chart.js @@ -0,0 +1,160 @@ +$(document).ready(function() { + "use strict"; + + let responseData; + + function fetchDataAndInitializeChart() { + fetchData() + .then(function (response) { + responseData = response.data; + console.log(responseData); + const completedOrdersCount = countCompletedOrders(responseData); + const toPayOrdersCount = countToPayOrders(responseData); + const toShipOrdersCount = countToShipOrders(responseData); + const returnedOrdersCount = countReturnedpOrders(responseData); + initializeChart(completedOrdersCount, toPayOrdersCount, toShipOrdersCount, returnedOrdersCount); + }) + .catch(function (error) { + console.error('Error fetching data:', error); + }); + } + fetchDataAndInitializeChart(); + function fetchData() { + return axios.get('https://api.obanana.shop/api/v1/orders/'); + } + + + function countCompletedOrders(data) { + let completedOrdersCount = 0; + data.forEach(function(order) { + if (order.status === 'COMPLETED') { + completedOrdersCount++; + } + }); + console.log(completedOrdersCount) + return completedOrdersCount; + } + + + function countToPayOrders(data) { + let toPayOrdersCount = 0; + data.forEach(function(order) { + if (order.status === 'TO PAY') { + toPayOrdersCount++; + } + }); + console.log(toPayOrdersCount) + return toPayOrdersCount; + } + + + function countToShipOrders(data) { + let toShipOrdersCount = 0; + data.forEach(function(order) { + if (order.status === 'TO SHIP') { + toShipOrdersCount++; + } + }); + console.log(toShipOrdersCount) + return toShipOrdersCount; + } + function countReturnedpOrders(data) { + let returnedOrdersCount = 0; + data.forEach(function(order) { + if (order.status === 'RETURNED') { + returnedOrdersCount++; + } + }); + console.log(returnedOrdersCount) + return returnedOrdersCount; + } + + function initializeChart(completedOrdersCount , toPayOrdersCount, toShipOrdersCount, returnedOrdersCount) { + var doughnut = document.getElementById("doughnut-chart"); + if (doughnut !== null) { + var myDoughnutChart = new Chart(doughnut, { + type: "doughnut", + data: { + labels: ["Completed", "To Pay", "To Ship", "Returned"], + datasets: [ + { + label: "Order Status", + data: [completedOrdersCount, toPayOrdersCount, toShipOrdersCount, returnedOrdersCount], + backgroundColor: ["#88aaf3", "#50d7ab", "#9586cd", "#ed9090"], + borderWidth: 1 + } + ] + }, + options: { + responsive: true, + maintainAspectRatio: false, + legend: { + display: false + }, + cutoutPercentage: 75, + tooltips: { + callbacks: { + title: function(tooltipItem, data) { + return "Order : " + data["labels"][tooltipItem[0]["index"]]; + }, + label: function(tooltipItem, data) { + return data["datasets"][0]["data"][tooltipItem["index"]]; + } + }, + titleFontColor: "#888", + bodyFontColor: "#555", + titleFontSize: 12, + bodyFontSize: 14, + backgroundColor: "rgba(256,256,256,0.95)", + displayColors: true, + borderColor: "rgba(220, 220, 220, 0.9)", + borderWidth: 2 + } + } + }); + } + } + + function convertToCSV(data) { + const columnTitles = ['ORDER ID', 'STATUS', 'BUYER NAME', 'TOTAL AMOUNT', 'ORDER DATE', + 'ORDER TIME', 'PRODUCT NAME','PRICE', 'QUANTITY', + 'VENDOR ID', 'VENDOR NAME',]; + const header = columnTitles.join(',') + '\n'; + const body = data.map(order => { + const orderDate = new Date(order.order_date).toLocaleDateString('en-US'); + const orderTime = new Date(order.order_date).toLocaleTimeString('en-US'); + const productName = order.items.length > 0 ? `"${order.items[0].product.name}"` : ''; + return [ + order._id, + order.status, + order.customer[0]?.name, + order.total_amount, + orderDate, + orderTime, + productName, + order.items[0]?.price, + order.items[0]?.quantity, + order.items[0]?.vendor_id, + order.items[0]?.vendor_name + ].join(','); + }).join('\n'); + return header + body; + } + function downloadCSV(filename) { + const csv = convertToCSV(responseData); + const blob = new Blob([csv], { type: 'text/csv' }); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(url); + } + + $('#download-btn').on('click', function(event) { + event.preventDefault(); + downloadCSV('orders_data.csv'); + }); +}); diff --git a/admin/index.php b/admin/index.php index 54eafe1..e44f69b 100644 --- a/admin/index.php +++ b/admin/index.php @@ -29,6 +29,7 @@ date_default_timezone_set('Asia/Manila');