-
-
-
%s net sales this month", 'woocommerce'), wc_price($advanced_dashboard_call_month[1]->net_sales)); ?>
-
%s - " . __("Net Sales amount", 'woocommerce'), wc_price($advanced_dashboard_call_day[1]->net_sales)); ?>
-
%s order awaiting processing", "%s orders awaiting processing", $processing_count, 'woocommerce'), $processing_count); ?>
-
%s order on-hold", "%s orders on-hold", $on_hold_count, 'woocommerce'), $on_hold_count); ?>
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
?>