Exemplo n.º 1
0
 public function dailyPrunePendingPayPalOrders()
 {
     Cart66Setting::setValue('daily_prune_pending_orders_last_checked', Cart66Common::localTs());
     $o = new Cart66Order();
     $dayStart = date('Y-m-d 00:00:00', strtotime('48 hours ago', Cart66Common::localTs()));
     $dayEnd = date('Y-m-d 00:00:00', strtotime('24 hours ago', Cart66Common::localTs()));
     $orders = $o->getOrderRows("WHERE status in ('paypal_pending','checkout_pending') AND ordered_on >= '{$dayStart}' AND ordered_on < '{$dayEnd}'");
     foreach ($orders as $order) {
         Cart66Common::log('[' . basename(__FILE__) . ' - line ' . __LINE__ . "] yes, i am to delete an order or more: " . $order->id);
         $o->load($order->id);
         $o->deleteMe(true, true);
     }
 }
Exemplo n.º 2
0
  
 <?php 
$setting = new Cart66Setting();
$stats = trim(Cart66Setting::getValue('status_options'));
if (strlen($stats) >= 1) {
    $stats = explode(',', $stats);
    ?>
      <p style="float: left; clear: both; margin-top:0; padding-top: 0;"><?php 
    _e('Filter Orders by Status', 'cart66');
    ?>
:
        <?php 
    foreach ($stats as $s) {
        $s = trim(strtolower($s));
        Cart66Common::log('[' . basename(__FILE__) . ' - line ' . __LINE__ . "] Order status query: WHERE status='{$s}'");
        $tmpRows = $order->getOrderRows("WHERE status='{$s}'", null, null, 'id');
        $n = count($tmpRows);
        if ($n > 0) {
            $url = Cart66Common::replaceQueryString("page=cart66_admin&status={$s}");
            echo "<a href=\"{$url}\">" . ucwords($s) . " (" . count($tmpRows) . ")</a> &nbsp;|&nbsp; ";
        } else {
            echo ucwords($s) . " (0) &nbsp;|&nbsp;";
        }
    }
    ?>
        <a href="?page=cart66_admin">All (<?php 
    echo count($order->getOrderRows("WHERE `status` != 'checkout_pending'", null, null, 'id'));
    ?>
)</a>
      </p>
  <?php 
 public static function ordersTable()
 {
     $columns = array('id', 'trans_id', 'bill_first_name', 'bill_last_name', 'total', 'ordered_on', 'shipping_method', 'status', 'email', 'notes', 'authorization', "concat_ws(' ', bill_first_name,bill_last_name)");
     $indexColumn = "id";
     $tableName = Cart66Common::getTableName('orders');
     $where = self::dataTablesWhere($columns, 'status', 'checkout_pending', '!=');
     if ($where == "") {
         $where = "WHERE `status` != 'checkout_pending'";
     } else {
         $where .= " AND `status` != 'checkout_pending'";
     }
     $limit = self::dataTablesLimit() == '' ? null : self::dataTablesLimit();
     $orderBy = self::dataTablesOrder($columns);
     $iTotal = self::totalRows($indexColumn, $tableName);
     $iFilteredTotal = self::filteredRows($indexColumn, $tableName, $where);
     $data = array();
     $order = new Cart66Order();
     $orders = $order->getOrderRows($where, $orderBy, $limit);
     foreach ($orders as $o) {
         $data[] = array($o->id, $o->trans_id, $o->bill_first_name, $o->bill_last_name, Cart66Common::currency($o->total), date(get_option('date_format'), strtotime($o->ordered_on)), $o->shipping_method, $o->status, $o->notes);
     }
     $array = array('sEcho' => $_GET['sEcho'], 'iTotalRecords' => $iTotal[0], 'iTotalDisplayRecords' => $iFilteredTotal[0], 'aaData' => $data);
     echo json_encode($array);
     die;
 }
Exemplo n.º 4
0
    public static function cart66_statistics_widget()
    {
        function totalFromRange($start, $end)
        {
            global $wpdb;
            $tableName = Cart66Common::getTableName('orders');
            $sql = "SELECT sum(total) as total from {$tableName} where ordered_on > '{$start}' AND ordered_on < '{$end}'";
            $result = $wpdb->get_row($sql, ARRAY_A);
            $output = $result ? (double) $result['total'] : "N/A";
            return $output;
        }
        // TODAY
        $yday = date('Y-m-d 00:00:00', strtotime('yesterday'));
        $dayStart = date('Y-m-d 00:00:00', strtotime('today'));
        $dayEnd = date('Y-m-d 00:00:00', strtotime('tomorrow'));
        $mdayStart = date('Y-m-01 00:00:00', strtotime('today'));
        $mdayEnd = date('Y-m-01 00:00:00', strtotime('next month'));
        $today_total = totalFromRange($dayStart, $dayEnd);
        $yesterday_total = totalFromRange($yday, $dayStart);
        $month_total = totalFromRange($mdayStart, $mdayEnd);
        $total_product_sales = Cart66DataTables::productsSearch();
        $total_sales_amount = Cart66DataTables::totalSalesForMonth($total_product_sales);
        $daily_avg = ($month_total - $today_total) / date('j', strtotime('yesterday'));
        //number_format($month_total/date("j"),2);
        $total_days = date('t', strtotime('now'));
        $est_month = $total_days * $daily_avg;
        ?>
    <div class="cart66Tabbed">
      <ul class="tabs">
        <li class="t1"><a class="t1 tab" href="javascript:void(0)"><?php 
        _e('Summary', 'cart66');
        ?>
</a></li>
        <li class="t2"><a class="t2 tab" href="javascript:void(0)"><?php 
        _e('Today/Yesterday', 'cart66');
        ?>
</a></li>
        <li class="t3"><a class="t3 tab" href="javascript:void(0)"><?php 
        echo date("F, Y", strtotime("now"));
        ?>
</a></li>
        <li class="t4"><a class="t4 tab" href="javascript:void(0)"><?php 
        _e('Daily Average', 'cart66');
        ?>
</a></li>
        <li class="t5"><a class="t5 tab" href="javascript:void(0)"><?php 
        _e('Estimate', 'cart66');
        ?>
</a></li>
      </ul>
      <div class="loading">
        <h2 class="center"><?php 
        _e('loading...', 'cart66');
        ?>
</h2>
      </div>
      <div class="t1 pane">
        <table id="statSummary" cellspacing="0" cellpadding="0">
        <tfoot>
        <tr>
          <td>
           <?php 
        _e('Last Updated', 'cart66');
        ?>
:
          </td>
          <td class="right">
            <?php 
        echo date(get_option('date_format'), Cart66Common::localTs());
        ?>
 <?php 
        echo date(get_option('time_format'), Cart66Common::localTs());
        ?>
          </td>
        </tr>
        </tfoot>
          <tbody>
          <tr class="t4 tab summaryDetails">
            <td>
             <?php 
        echo date('F');
        _e(' Daily Average', 'cart66');
        ?>
:
            </td>
            <td class="right">
             <a class="t4 tab" href="javascript:void(0)"><?php 
        echo Cart66Common::currency($daily_avg);
        ?>
</a>
            </td>
          </tr>
          <tr class="t2 tab summaryDetails">
            <td>
              <?php 
        _e('Today\'s Total', 'cart66');
        ?>
:
            </td>
            <td class="right">
              <a class="t2 tab" href="javascript:void(0)"><?php 
        echo Cart66Common::currency($today_total);
        ?>
</a>
            </td>
          </tr>
          <tr class="t2 tab summaryDetails">
            <td>
              <?php 
        _e('Yesterday\'s Total', 'cart66');
        ?>
:
            </td>
            <td class="right">
              <a class="t2 tab" href="javascript:void(0)"><?php 
        echo Cart66Common::currency($yesterday_total);
        ?>
</a>
            </td>
          </tr>
          <tr class="t3 tab summaryDetails">
            <td>
              <?php 
        echo date("F", strtotime("now"));
        ?>
 <?php 
        _e('Total', 'cart66');
        ?>
:
            </td>
            <td class="right">
             <a class="t3 tab" href="javascript:void(0)"><?php 
        echo Cart66Common::currency($month_total);
        ?>
</a>
            </td>
          </tr>
          <tr class="t5 tab summaryDetails">
            <td>
             <?php 
        _e('Estimated', 'cart66');
        ?>
 <?php 
        echo date("F", strtotime('now'));
        ?>
 <?php 
        _e('Total', 'cart66');
        ?>
:
            </td>
            <td class="right">
             <a class="t5 tab" href="javascript:void(0)"><?php 
        echo Cart66Common::currency($est_month);
        ?>
</a>
            </td>
          </tr>
          </tbody>
        </table>
      </div>
      <div class="t2 pane">
        <table id="dayStats" cellpadding="0" cellspacing="0">
          <tr class="summaryDetails dayStats">
            <td>
              <?php 
        _e('Today\'s Total', 'cart66');
        ?>
: <strong><?php 
        echo Cart66Common::currency($today_total);
        ?>
</strong>
            </td>
            <td class="right">
              <?php 
        _e('Yesterday\'s Total', 'cart66');
        ?>
: <strong><?php 
        echo Cart66Common::currency($yesterday_total);
        ?>
</strong>
            </td>
          </tr>
          <tr>
            <td class="wideOrders" colspan="2">
              <table width="100%" id="todaysOrders" cellpadding="0" cellspacing="0">
              <thead>
                <tr>
                  <th colspan="2" class="left"><?php 
        _e('Today\'s Order Details', 'cart66');
        ?>
</th>
                  <th class="right"><?php 
        _e('Order Total', 'cart66');
        ?>
</th>
                </tr>
                </thead>
              <?php 
        $Orders = new Cart66Order();
        $todaysOrders = $Orders->getOrderRows(" WHERE ordered_on > '{$dayStart}' AND ordered_on < '{$dayEnd}' AND id>0", "order by ordered_on DESC");
        if ($todaysOrders) {
            $i = 1;
            ?>
                <tbody>
                  <?php 
            foreach ($todaysOrders as $order) {
                ?>
                    <tr>
                      <td class="rowNumber">
                        <h2><?php 
                echo $i;
                ?>
</h2>
                      </td>
                      <td class="orderInformation">
                        <p><?php 
                echo $order->bill_first_name . " " . $order->bill_last_name;
                ?>
<br>
                          <span class='orderDate'><?php 
                echo Cart66Common::getElapsedTime($order->ordered_on);
                ?>
</span>
                        </p>
                      </td>
                      <td class='right'>
                        <?php 
                echo Cart66Common::currency($order->total);
                ?>
                      </td>
                      <?php 
                $i++;
                ?>
                    </tr>
                  <?php 
            }
            ?>
                </tbody>
                <?php 
        } else {
            ?>
                <tfoot>
                <tr>
                  <td colspan='3'>
                    <h2 class="noOrders"><?php 
            _e('No orders yet today', 'cart66');
            ?>
</h2>
                  </td>
                </tr>
                </tfoot>
              <?php 
        }
        ?>
              </table>
            </td>
          </tr>
        </table>    
      </div>
      <div class="t3 pane">
        <table id="productTable" cellpadding="0" cellspacing="0">
          <tr>
            <thead>
              <tr>
                <th class="left"><?php 
        _e('Product Name', 'cart66');
        ?>
</th>
                <th class="center"><?php 
        _e('Sales', 'cart66');
        ?>
</th>
                <th class="right"><?php 
        _e('Income', 'cart66');
        ?>
</th>
              </tr>
            </thead>
            <tfoot>
              <tr>
                <th class="left"><strong><?php 
        echo date("F, Y", strtotime('now'));
        ?>
</strong></th>
                <?php 
        if (isset($total_sales_amount['total_sales'])) {
            $totalSales = $total_sales_amount['total_sales']['total_quantity'];
            $totalAmount = $total_sales_amount['total_sales']['total_amount'];
        } else {
            $totalSales = '0';
            $totalAmount = '0';
        }
        ?>
                <th class="center"><strong><?php 
        echo $totalSales;
        ?>
</strong></th>
                <th class="right"><strong><?php 
        echo Cart66Common::currency($totalAmount);
        ?>
</strong></th>
              </tr>
            </tfoot>
          </tr>
        </table>
      </div>
      <div class="t4 pane">
        <div>
          <table id="dailyAverage" cellpadding="0" cellspacing="0">
              <?php 
        $column = 0;
        for ($i = 6; $i > 0; $i--) {
            $tmonth_start = date('Y-m-01 00:00:00', strtotime("{$i} months ago"));
            $tmonth_end = date('Y-m-01 00:00:00', strtotime($i - 1 . " months ago"));
            $tmonth_total = totalFromRange($tmonth_start, $tmonth_end);
            $tmonth_days = date('t', strtotime("{$i} months ago"));
            ?>
                <?php 
            if ($tmonth_total != "") {
                ?>
              <thead>
                <tr>
                  <th class="left" colspan="2">
                  <?php 
                echo date('F, Y', strtotime("{$i} months ago"));
                ?>
                  </th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td><?php 
                _e('Total Income', 'cart66');
                ?>
:</td>
                  <td class="right"><strong><?php 
                echo Cart66Common::currency($tmonth_total);
                ?>
</strong></td>
                </tr>
                <tr>
                  <td><?php 
                _e('Daily Average', 'cart66');
                ?>
:</td>
                  <td class="right"><strong><?php 
                echo Cart66Common::currency($tmonth_total / $tmonth_days);
                ?>
</strong></td>
                </tr>
                </tbody>
                <?php 
            }
        }
        $ystart = date("Y-01-01 00:00:00");
        $yend = date("Y-01-01 00:00:00", strtotime("next year"));
        $year_total = totalFromRange($ystart, $yend);
        $day_of_year = date('z');
        ?>
              <thead>
                <tr>
                  <th class="left" colspan="2">YTD - <?php 
        echo date('Y');
        ?>
</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td><?php 
        _e('Total Income', 'cart66');
        ?>
:</td>
                  <td class="right"><strong><?php 
        echo Cart66Common::currency($year_total);
        ?>
</strong></td>
                </tr>
                <tr>
                    <td><?php 
        _e('Daily Average', 'cart66');
        ?>
:</td>
                    <td class="right"><strong><?php 
        echo Cart66Common::currency($year_total / $day_of_year);
        ?>
</strong></td>
                </tr>
              </tbody>
          </table>
        </div>
      </div>
      <div class="t5 pane">
        <table id="estimatedSummary" cellspacing="0" cellpadding="0">
          <tbody>
            <tr>
              <td>
                <?php 
        _e('Today', 'cart66');
        ?>
:
              </td>
              <td class="right">
                <?php 
        echo date(get_option('date_format'), strtotime('now'));
        ?>
              </td>
            </tr>
            <tr>
              <td>
                <?php 
        _e('Total Days in', 'cart66');
        ?>
 <?php 
        echo date("F", strtotime('now'));
        ?>
:
              </td>
              <td class="right">
                <?php 
        echo $total_days;
        ?>
              </td>
            </tr>
            <tr>
              <td>
                <?php 
        _e('Remaining Days in', 'cart66');
        ?>
 <?php 
        echo date("F", strtotime('now'));
        ?>
:
              </td>
              <td class="right">
                <?php 
        echo $total_days - date('j', strtotime('now'));
        ?>
              </td>
            </tr>
            <tr>
              <td>
                <?php 
        _e('Estimated Remaining Income', 'cart66');
        ?>
:
              </td>
              <td class="right">
                <?php 
        echo Cart66Common::currency(($total_days - date('j', strtotime('now'))) * $daily_avg);
        ?>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
    <script type="text/javascript">
      (function($){
        $(document).ready(function(){
          
          /* API method to get paging information */
          $.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
          {
              return {
                  "iStart":         oSettings._iDisplayStart,
                  "iEnd":           oSettings.fnDisplayEnd(),
                  "iLength":        oSettings._iDisplayLength,
                  "iTotal":         oSettings.fnRecordsTotal(),
                  "iFilteredTotal": oSettings.fnRecordsDisplay(),
                  "iPage":          Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
                  "iTotalPages":    Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
              };
          }

          /* Bootstrap style pagination control */
          $.extend( $.fn.dataTableExt.oPagination, {
              "bootstrap": {
                  "fnInit": function( oSettings, nPaging, fnDraw ) {
                      var oLang = oSettings.oLanguage.oPaginate;
                      var fnClickHandler = function ( e ) {
                          e.preventDefault();
                          if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
                              fnDraw( oSettings );
                          }
                      };

                      $(nPaging).addClass('pagination').append(
                          '<ul>'+
                              '<li class="prev disabled"><a href="#">&larr; '+oLang.sPrevious+'</a></li>'+
                              '<li class="next disabled"><a href="#">'+oLang.sNext+' &rarr; </a></li>'+
                          '</ul>'
                      );
                      var els = $('a', nPaging);
                      $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
                      $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
                  },

                  "fnUpdate": function ( oSettings, fnDraw ) {
                      var iListLength = 5;
                      var oPaging = oSettings.oInstance.fnPagingInfo();
                      var an = oSettings.aanFeatures.p;
                      var i, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);

                      if ( oPaging.iTotalPages < iListLength) {
                          iStart = 1;
                          iEnd = oPaging.iTotalPages;
                      }
                      else if ( oPaging.iPage <= iHalf ) {
                          iStart = 1;
                          iEnd = iListLength;
                      } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
                          iStart = oPaging.iTotalPages - iListLength + 1;
                          iEnd = oPaging.iTotalPages;
                      } else {
                          iStart = oPaging.iPage - iHalf + 1;
                          iEnd = iStart + iListLength - 1;
                      }

                      for ( i=0, iLen=an.length ; i<iLen ; i++ ) {
                          // Remove the middle elements
                          $('li:gt(0)', an[i]).filter(':not(:last)').remove();

                          // Add the new list items and their event handlers
                          for ( j=iStart ; j<=iEnd ; j++ ) {
                              sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
                              $('<li '+sClass+'><a href="#">'+j+'</a></li>')
                                  .insertBefore( $('li:last', an[i])[0] )
                                  .bind('click', function (e) {
                                      e.preventDefault();
                                      oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
                                      fnDraw( oSettings );
                                  } );
                          }

                          // Add / remove disabled classes from the static elements
                          if ( oPaging.iPage === 0 ) {
                              $('li:first', an[i]).addClass('disabled');
                          } else {
                              $('li:first', an[i]).removeClass('disabled');
                          }

                          if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
                              $('li:last', an[i]).addClass('disabled');
                          } else {
                              $('li:last', an[i]).removeClass('disabled');
                          }
                      }
                  }
              }
          } );
          
          
          $('#productTable').dataTable({
            "bProcessing": true,
            "bServerSide": true,
            "bPagination": true,
            "bLengthChange": false,
            "iDisplayLength": 6,
            "sPaginationType": "bootstrap",
            "sAjaxSource": ajaxurl + "?action=dashboard_products_table",
            "aoColumns": [
              { "sClass": "left" },
              { "sClass": "center" },
              { "sClass": "right" },
            ],
            "oLanguage": { 
              "sZeroRecords": "<?php 
        _e('No matching Products found', 'cart66');
        ?>
", 
              "sSearch": "<?php 
        _e('Search', 'cart66');
        ?>
:", 
              "sInfo": "<?php 
        _e('Showing', 'cart66');
        ?>
 _START_ <?php 
        _e('to', 'cart66');
        ?>
 _END_ <?php 
        _e('of', 'cart66');
        ?>
 _TOTAL_ <?php 
        _e('entries', 'cart66');
        ?>
", 
              "sInfoEmpty": "<?php 
        _e('Showing 0 to 0 of 0 entries', 'cart66');
        ?>
", 
              "oPaginate": {
                "sNext": "<?php 
        _e('Next', 'cart66');
        ?>
", 
                "sPrevious": "<?php 
        _e('Previous', 'cart66');
        ?>
", 
                "sLast": "<?php 
        _e('Last', 'cart66');
        ?>
", 
                "sFirst": "<?php 
        _e('First', 'cart66');
        ?>
"
              }, 
              "sInfoFiltered": "(<?php 
        _e('filtered from', 'cart66');
        ?>
 _MAX_ <?php 
        _e('total entries', 'cart66');
        ?>
)", 
              "sLengthMenu": "<?php 
        _e('Show', 'cart66');
        ?>
 _MENU_ <?php 
        _e('entries', 'cart66');
        ?>
", 
              "sLoadingRecords": "<?php 
        _e('Loading', 'cart66');
        ?>
...", 
              "sProcessing": "<?php 
        _e('Processing', 'cart66');
        ?>
..." 
            }
          });
        })
      })(jQuery);
    </script> 
    <script type="text/javascript">
      (function($){
        $(document).ready(function() {
          // setting the tabs in the sidebar hide and show, setting the current tab
          $('div.pane').hide();
          $('div.t1').show();
          $('div.loading').hide();
          $('div.cart66Tabbed ul.tabs li.t1 a').addClass('tab-current');
          // SIDEBAR TABS
          $('div.cart66Tabbed ul li a, div.t1 a, div.t1 tr.summaryDetails').click(function(){
            if($(this).hasClass('tab')) {
              var thisClass = this.className.slice(0,2);
              $('div.pane').hide();
              $('div.' + thisClass).fadeIn(300);
              $('div.cart66Tabbed ul.tabs li a').removeClass('tab-current');
              $('div.cart66Tabbed ul.tabs li a.' + thisClass).addClass('tab-current');
            }
          });
        });
      })(jQuery);
    </script><?php 
    }