diff --git a/about-us.php b/about-us.php index 04b7976..7be0321 100644 --- a/about-us.php +++ b/about-us.php @@ -183,7 +183,7 @@ -
+ -
+ @@ -437,7 +437,7 @@ -
+ 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 21284dc..e44f69b 100644 --- a/admin/index.php +++ b/admin/index.php @@ -13,6 +13,11 @@ if ($_SESSION["userId"] <> "") { if($_SESSION["user_type"]!="admin"){ header("location: login.php?alert=Only admins allowed here!"); } + +$all_orders = getAllOrder(); +date_default_timezone_set('Asia/Manila'); + + ?> @@ -24,6 +29,7 @@ if($_SESSION["user_type"]!="admin"){ oBanana B2B - Admin Dashboard + @@ -97,7 +103,7 @@ if($_SESSION["user_type"]!="admin"){
  • @@ -719,8 +725,27 @@ if($_SESSION["user_type"]!="admin"){
    -

    15,503

    -

    Daily Order

    + $val) { + $paymentStatus = strtolower($val['payment']['status']); + + $formattedOrderDate = date('m-d-Y', strtotime($val['order_date'])); + if ($formattedOrderDate == $currentDate) { + $orderCount++; + if($paymentStatus == "paid"){ + $dailyRevenue += $val['total_amount']; + } // Increment order count for each order on the current date + } + } + + $finalDailyRevenue = number_format($dailyRevenue, 2, '.', ','); + ?> +

    +

    Today's Order

    @@ -728,9 +753,9 @@ if($_SESSION["user_type"]!="admin"){
    -

    $98,503

    -

    Daily Revenue

    - +

    +

    Today's Revenue

    +
    @@ -741,6 +766,7 @@ if($_SESSION["user_type"]!="admin"){
    +

    Sales Report

    @@ -778,9 +804,9 @@ if($_SESSION["user_type"]!="admin"){

    Orders Overview

    - +
    - Download overall report
  • Order Completed
  • Order Unpaid
  • + style="color: #80e1c1 ">
    Order To Pay
  • Order returned
  • + style="color: #ff7b7b ">Order Returned
    @@ -799,11 +825,7 @@ if($_SESSION["user_type"]!="admin"){
    • Order Pending
    • -
    • Order Canceled
    • -
    • Order Broken
    • + style="color: #8061ef">Order To Ship
    @@ -995,9 +1017,6 @@ if($_SESSION["user_type"]!="admin"){

    Recent Orders

    -
    - -
    - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + $val) { + $paymentStatus = strtolower($val['payment']['status']); + $formattedOrderDate = date('m-d-Y', strtotime($val['order_date'])); + $orderId = $val['_id']; + $customerName = $val['customer'][0]['name']; + $vendorName = $val['items'][0]['vendor_name']; + $totalAmount = $val['total_amount']; + $orderStatus = strtoupper($val['status']); + + $statusClass = ''; + if ($orderStatus === 'UNPAID' || $orderStatus === 'RETURNED') { + $statusClass = '#cb3747'; + } elseif ($orderStatus === 'TO PAY') { + $statusClass = '#50d7ab'; + } elseif ($orderStatus === 'TO SHIP') { + $statusClass = '#9586cd'; + } + elseif ($orderStatus === 'TO RECEIVE') { + $statusClass = '#ffc319'; + } elseif ($orderStatus === 'COMPLETED') { + $statusClass = '#88aaf3'; + } + + if ($formattedOrderDate == $currentDate) { + $displayDate = date('m-d-Y, g:i A', strtotime($val['order_date'])); + ?> + + + + + + + + + + = 8) { + break; + } + } + } + ?>
    Order IDProduct NameUnitsCustomer NameVendor NameTotal Amount Order DateOrder Cost Status
    24541 - Coach Swagger - 1 UnitOct 20, 2018$230 - Completed - - -
    24541 - Toddler Shoes, Gucci Watch - 2 UnitsNov 15, 2018$550 - Delayed - - -
    24541 - Hat Black Suits - 1 UnitNov 18, 2018$325 - On Hold - - -
    24541 - Backpack Gents, Swimming Cap Slin - 5 UnitsDec 13, 2018$200 - Completed - - -
    24541 - Speed 500 Ignite - 1 UnitDec 23, 2018$150 - Cancelled - - -
    @@ -1427,6 +1351,8 @@ if($_SESSION["user_type"]!="admin"){ + + diff --git a/admin/login.php b/admin/login.php index f3565b9..4577757 100644 --- a/admin/login.php +++ b/admin/login.php @@ -31,7 +31,8 @@ if ($_SESSION["isLoggedIn"] == true and $_SESSION["user_type"] == "admin"){ - + + diff --git a/admin/order-history.php b/admin/order-history.php index 5846190..f3b9085 100644 --- a/admin/order-history.php +++ b/admin/order-history.php @@ -46,7 +46,8 @@ $allorders = json_encode($orders, true); - + + diff --git a/admin/vendor-product-grid.php b/admin/vendor-product-grid.php index 42c15a2..4b31163 100644 --- a/admin/vendor-product-grid.php +++ b/admin/vendor-product-grid.php @@ -190,7 +190,61 @@ if($_SESSION["user_type"]!="admin"){ const array = new Array(productData) console.log(array) // const parseJs =JSON.parse(productData) - function searchProduct(e){ + function searchProduct(e) { + const searchInput = document.getElementById('searchProduct'); + const productWrap = document.getElementById('productWrap'); + + // Clear previous search results + productWrap.innerHTML = ''; + + // Get search query and ensure it's lowercase + const query = searchInput.value.trim().toLowerCase(); + + // Filter products based on search query + const filteredProducts = array[0].filter(product => { + return product.product_name.toLowerCase().includes(query); + }); + + if (filteredProducts.length > 0) { + // Display filtered products + filteredProducts.forEach(prod => { + const productImage = prod.images.split(',') ?? []; + const image = productImage[0] ? + `product image` : + `placeholder image`; + + const card = document.createElement('div'); + card.classList.add('col-lg-3', 'col-md-4', 'col-sm-6'); + card.innerHTML = ` +
    +
    +
    +
    + ${image} +
    +
    +
    +

    ${prod.product_name}

    +

    ₱${prod.regular_price}

    +
    +
    +
    +
    +
    +
    +
    +
    + `; + productWrap.appendChild(card); + }); + } else { + // Display message if no products found + productWrap.innerHTML = `

    No Product Found.

    `; + } + } + const search = document.getElementById('searchProduct'); + search.addEventListener("input", searchProduct); + /* function searchProduct(e){ const searchInput = document.getElementById('searchProduct') let search = [] @@ -255,7 +309,7 @@ if($_SESSION["user_type"]!="admin"){ // console.log(search) } const search = document.getElementById('searchProduct') - search.addEventListener("input", searchProduct) + search.addEventListener("input", searchProduct) */
    @@ -180,6 +182,7 @@ if ($_SESSION["userId"] <> "") {
    + +
    @@ -308,6 +312,7 @@ if ($_SESSION["userId"] <> "") {
    +
    @@ -428,19 +433,30 @@ if ($_SESSION["userId"] <> "") {
    - + + + Unit Price:
    Subtotal:
    -
    -
    -
    - -
    +
    +
    +
    - +
    + +
    + +
    - + + +
    diff --git a/login_action.php b/login_action.php index adb9c4e..46ae719 100644 --- a/login_action.php +++ b/login_action.php @@ -19,7 +19,13 @@ if ($result > 0) { $_SESSION["isVendor"] = true; } - header("location: $url"); + + if ($url == "/forgot_password.php" || $url == "/forget_otp.php") + { + header("location: index.php"); + }else { + header("location: $url"); + } } else { // $_SESSION["loginError"] = "Invalid email or password. Please try again."; header("location: login.php?error=1"); diff --git a/product-left-sidebar.php b/product-left-sidebar.php index 8819a34..d0fac47 100644 --- a/product-left-sidebar.php +++ b/product-left-sidebar.php @@ -488,27 +488,34 @@ if (isset($_GET['id'])) {
    -
    '; + echo '
    -
    '; echo ''; - echo '
    +
    '; - echo '
    '; + echo '
    +
    '; + echo '
    '; echo ''; echo '
    '; } else { if (!empty($product_details['regular_price']) || !empty($product_details['sale_price'])) { - echo '
    -
    '; + echo '
    -
    '; echo ''; - echo '
    +
    '; - // echo '
    '; - echo '
    '; + echo '
    +
    '; + echo '
    '; echo '
    '; @@ -518,7 +525,8 @@ if (isset($_GET['id'])) { } } else { echo ''; + echo '
    '; } ?>
    + + @@ -151,7 +169,7 @@ $vendorPayoutData = json_decode($response, true);
    -
    +
    Upcoming Payout
    @@ -167,9 +185,9 @@ $vendorPayoutData = json_decode($response, true); foreach ($upcomingPayout as $x => $val) { $paymentStatus = strtolower($val['payment']['status']); - $orderStatus = $val['status']; + $orderStatus = strtolower($val['status']); $payoutStatus = empty($val['payout_status']); - if(( $paymentStatus == "paid") && ( $orderStatus == "COMPLETED") && ($payoutStatus == true)){ + if(( $paymentStatus == "paid") && ( $orderStatus == "completed") && ($payoutStatus == true)){ $orderAmount = $val['total_amount']; $payoutSum += $orderAmount; } @@ -201,7 +219,8 @@ $vendorPayoutData = json_decode($response, true);
    -
    + + +
    -
    - Receipient: Philippine National Bank (PNB) Account ending in + Receipient: Philippine National Bank (PNB) Account ending in
    -
    +
    -->
    Payout History
    @@ -320,7 +339,7 @@ $vendorPayoutData = json_decode($response, true);