From 95d2332aa2cfb7472399fd1f955507dd3a25fc77 Mon Sep 17 00:00:00 2001 From: gelonspr Date: Tue, 23 Apr 2024 09:34:12 +0800 Subject: [PATCH] fixed vendor-payments and added doughnut chart for admin dashboard --- admin/assets/js/dashboard-chart.js | 160 +++++++++++++++++++++++++++++ admin/index.php | 17 ++- vendor-payments.php | 10 +- 3 files changed, 173 insertions(+), 14 deletions(-) create mode 100644 admin/assets/js/dashboard-chart.js 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'); oBanana B2B - Admin Dashboard + @@ -803,9 +804,9 @@ date_default_timezone_set('Asia/Manila');

Orders Overview

- +
- Download overall report @@ -824,11 +825,7 @@ date_default_timezone_set('Asia/Manila');
@@ -1354,6 +1351,8 @@ date_default_timezone_set('Asia/Manila'); + + diff --git a/vendor-payments.php b/vendor-payments.php index 486de53..aab47e6 100644 --- a/vendor-payments.php +++ b/vendor-payments.php @@ -488,10 +488,10 @@ if ($_SESSION["isCustomer"] == true) { console.log(response); var paymentId = response.payment.reference_number; $('#paymentIdSpan').text(paymentId); - var gross_price = response.payment.details[0]?.attributes.data.attributes.amount; + var gross_price = (response.payment.details[0]?.attributes.data.attributes.amount / 100).toFixed(2); var payment_status = response.payment.status; var fee = response.payment.details[0]?.attributes.data.attributes.fee; - var net_amount = response.payment.details[0]?.attributes.data.attributes.payments[0].attributes.net_amount; + var net_amount = (response.payment.details[0]?.attributes.data.attributes.payments[0].attributes.net_amount / 100).toFixed(2); var desc = response.items[0].product.name; var method = response.payment_method; var name = response.billing_address.billing_first_name + " " + response.billing_address.billing_last_name; @@ -522,7 +522,7 @@ if ($_SESSION["isCustomer"] == true) {
Gross Amount
-
₱ ${net_amount}
+
₱ ${gross_price}
Fees
Net Amount
-
₱ ${gross_price}
+
₱ ${net_amount}
Payment Description
@@ -598,7 +598,7 @@ if ($_SESSION["isCustomer"] == true) {
Net Amount
-
₱ ${gross_price}
+
₱ ${net_amount}
Payment Description