start_date = strtotime(date('Y-m-01', current_time('timestamp'))); $sales_by_date->end_date = current_time('timestamp'); } elseif ($interval == 'day') { $sales_by_date->start_date = current_time('timestamp'); $sales_by_date->end_date = current_time('timestamp'); } elseif ($dates) { $sales_by_date->start_date = $dates[0]; $sales_by_date->end_date = $dates[1]; } $sales_by_date->chart_groupby = 'day'; $sales_by_date->group_by_query = 'YEAR(posts.post_date), MONTH(posts.post_date), DAY(posts.post_date)'; $report_data = $sales_by_date->get_report_data(); return array($reports, $report_data); } public static function advanced_dashboard_chart_loop_value_orders() { # Loop for value and number of orders chart $advanced_dashboard_call_month = self::advanced_dashboard_call('month'); # Month interval $date = $advanced_dashboard_call_month[1]->orders[0]->post_date; $formatDate = DateTime::createFromFormat('Y-m-d H:i:s', $date); $yearForNumber = $formatDate->format('Y'); $monthForNumber = $formatDate->format('m'); $numberOfDays = cal_days_in_month(CAL_GREGORIAN, $monthForNumber, $yearForNumber); $JStableValue = array(); # For days with orders for ($i = 0; $i <= count($advanced_dashboard_call_month[1]->orders); ++$i) { $value = $advanced_dashboard_call_month[1]->orders[$i]->post_date; #Dates of orders $orderCount = $advanced_dashboard_call_month[1]->order_counts[$i]->count; #Number of orders in each day if (isset($value)) { $valueFormat = DateTime::createFromFormat('Y-m-d H:i:s', $value); $year = $valueFormat->format('Y'); $month = $valueFormat->format('m'); $day = $valueFormat->format('j'); $valueSet = $year . "/" . $month . "/" . $day; $JStableValue[$i]['date'] = $valueSet; $JStableValue[$i]['value'] = $advanced_dashboard_call_month[1]->orders[$i]->total_sales; $JStableValue[$i]['orders'] = $orderCount; } } $JStable = self::advanced_dashboard_zero_days($numberOfDays, $JStableValue, $formatDate, $type = 'value'); # Add days with no orders to chart foreach ($JStable as $JSdata) { $valueFormat = DateTime::createFromFormat('Y/m/j', $JSdata['date']); $Comparedate = $valueFormat->format('Y/m/j'); self::$Currentdate = date('Y/m/j', time()); $year = $valueFormat->format('Y'); $month = $valueFormat->format('m') - 1; $day = $valueFormat->format('j'); $valueSet = $year . ", " . $month . ", " . $day; echo "[new Date(" . $valueSet . "), " . $JSdata['value'] . ", " . $JSdata['orders'] . "],"; if ($Comparedate == self::$Currentdate) { break; } } } public static function advanced_dashboard_chart_loop_qty() { $qtyData = self::advanced_dashboard_sql_qty(); # SQL qty data miner $formatDate = DateTime::createFromFormat('Y-m-d', $qtyData[0]->date); $yearForNumber = $formatDate->format('Y'); $monthForNumber = $formatDate->format('m'); $numberOfDays = cal_days_in_month(CAL_GREGORIAN, $monthForNumber, $yearForNumber); $JStableValue = array(); # For days with qty $i = 0; foreach ($qtyData as $JSdataQty) { # Poulate chart with non-zero qty $formatDateLoop = DateTime::createFromFormat('Y-m-d', $JSdataQty->date); $year = $formatDateLoop->format('Y'); $month = $formatDateLoop->format('m'); $day = $formatDateLoop->format('j'); $valueSet = $year . "/" . $month . "/" . $day; $JStableValue[$i]['date'] = $valueSet; $JStableValue[$i]['qty'] = $JSdataQty->qty; ++$i; } $JStable = self::advanced_dashboard_zero_days($numberOfDays, $JStableValue, $formatDate, $type = 'qty'); # Add days with no orders to chart foreach ($JStable as $JSdataQty) { $formatDate = DateTime::createFromFormat('Y/m/d', $JSdataQty['date']); $Comparedate = $formatDate->format('Y/m/j'); $year = $formatDate->format('Y'); $month = $formatDate->format('m') - 1; $day = $formatDate->format('j'); $valueSet = $year . ", " . $month . ", " . $day; echo "[new Date(" . $valueSet . "), " . $JSdataQty['qty'] . "],"; if ($Comparedate == self::$Currentdate) { break; } } } public static function advanced_dashboard_sql_qty() { # SQL data miner quantity global $wpdb; $dates = Advanced_Dashboard_View::advanced_dashboard_dates(); if ($dates) { $startDateSQL = date('Y-m-d', $dates[0]); $endDateSQL = date('Y-m-d H:i:s', $dates[1]); } else { $startDateSQL = date('Y-m-01', current_time('timestamp')); $endDateSQL = date('Y-m-d H:i:s', current_time('timestamp')); } $query = array(); $query['fields'] = "SELECT SUM({$wpdb->prefix}woocommerce_order_itemmeta.meta_value) AS qty, DATE({$wpdb->prefix}posts.post_date) AS date FROM {$wpdb->prefix}woocommerce_order_itemmeta"; $query['join'] = "INNER JOIN {$wpdb->prefix}woocommerce_order_items ON {$wpdb->prefix}woocommerce_order_itemmeta.order_item_id = {$wpdb->prefix}woocommerce_order_items.order_item_id "; $query['join'] .= "INNER JOIN {$wpdb->prefix}posts ON {$wpdb->prefix}woocommerce_order_items.order_id = {$wpdb->prefix}posts.ID "; $query['where'] = "WHERE {$wpdb->prefix}posts.post_status IN ( 'wc-" . implode("','wc-", array('completed', 'processing', 'on-hold')) . "' ) "; $query['where'] = "AND {$wpdb->prefix}woocommerce_order_itemmeta.meta_key = '_qty' "; $query['where'] .= "AND {$wpdb->prefix}posts.post_date >= '" . $startDateSQL . "' "; $query['where'] .= "AND {$wpdb->prefix}posts.post_date <= '" . $endDateSQL . "' "; $query['groupby'] = "GROUP BY date "; $query['orderby'] = "ORDER BY date ASC"; $qtyData = $wpdb->get_results(implode(' ', $query)); return $qtyData; } public static function advanced_dashboard_zero_days($numberOfDays, $JStableValue, $formatDate, $type) { # Show zero days on chart (days without orders) if (!function_exists('in_array_r')) { # Avoid redeclaring function function in_array_r($needle, $haystack, $strict = false) { # Remove duplicate dates from "no value" array foreach ($haystack as $item) { if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { return true; } } return false; } } $JStableNoValue = array(); # For empty days, without orders for ($i = 1; $i <= $numberOfDays; ++$i) { $year = $formatDate->format('Y'); $month = $formatDate->format('m'); $day = $i; $valueSet = $year . "/" . $month . "/" . $day; if (!in_array_r($valueSet, $JStableValue) && $type == 'value') { $JStableNoValue[$i]['date'] = $valueSet; $JStableNoValue[$i]['value'] = 0; $JStableNoValue[$i]['orders'] = 0; } if (!in_array_r($valueSet, $JStableValue) && $type == 'qty') { $JStableNoValue[$i]['date'] = $valueSet; $JStableNoValue[$i]['qty'] = 0; } } $JStable = array_merge($JStableValue, $JStableNoValue); if (!function_exists('date_compare')) { # Avoid redeclaring function function date_compare($a, $b) { return strtotime($a['date']) - strtotime($b['date']); } } usort($JStable, 'date_compare'); return $JStable; } public static function advanced_dashboard_chart1_view() { # Div of chart1 hook ?>