public function saveconfig()
 {
     $calc = new billingcalculator($this->params['id']);
     $conf = serialize($calc->calculator->parseConfig($this->params));
     $calc->update(array('config' => $conf));
     expHistory::back();
 }
Example #2
0
 function generateOrderReport()
 {
     global $db;
     //eDebug($this->params);
     $p = $this->params;
     //eDebug();
     //build
     $start_sql = "SELECT DISTINCT(o.id), ";
     $count_sql = "SELECT COUNT(DISTINCT(o.id)) as c, ";
     $sql = "o.invoice_id, FROM_UNIXTIME(o.purchased,'%c/%e/%y %h:%i:%s %p') as purchased_date, b.firstname as bfirst, b.lastname as blast, o.grand_total, os.title as status_title, ot.title as order_type";
     if (count($p['order_status_changed']) == 1 && $p['order_status_changed'][0] != -1 || count($p['order_status_changed']) > 1 || !empty($p['include_status_date']) && (!empty($p['date-sstartdate']) || !empty($p['date-senddate']))) {
         $sql .= ", FROM_UNIXTIME(osc.created_at,'%c/%e/%y %h:%i:%s %p') as status_changed_date";
     }
     $sql .= " from " . $db->prefix . "orders as o ";
     $sql .= "INNER JOIN " . $db->prefix . "orderitems as oi ON oi.orders_id = o.id ";
     $sql .= "INNER JOIN " . $db->prefix . "order_type as ot ON ot.id = o.order_type_id ";
     $sql .= "INNER JOIN " . $db->prefix . "product as p ON oi.product_id = p.id ";
     //if ($p['order_type'][0] != -1) $sql .= "INNER JOIN " . $db->prefix . "order_type as ot ON o.order_type_id = ot.id ";
     $sql .= "INNER JOIN " . $db->prefix . "order_status as os ON os.id = o.order_status_id ";
     if (count($p['order_status_changed']) == 1 && $p['order_status_changed'][0] != -1 || count($p['order_status_changed']) > 1 || !empty($p['include_status_date']) && (!empty($p['date-sstartdate']) || !empty($p['date-senddate']))) {
         $sql .= "INNER JOIN " . $db->prefix . "order_status_changes as osc ON osc.orders_id = o.id ";
     }
     $sql .= "INNER JOIN " . $db->prefix . "billingmethods as b ON b.orders_id = o.id ";
     $sql .= "INNER JOIN " . $db->prefix . "shippingmethods as s ON s.id = oi.shippingmethods_id ";
     $sql .= "LEFT JOIN " . $db->prefix . "geo_region as gr ON (gr.id = b.state OR gr.id = s.state) ";
     if ($p['discounts'][0] != -1) {
         $sql .= "LEFT JOIN " . $db->prefix . "order_discounts as od ON od.orders_id = o.id ";
     }
     $sqlwhere = "WHERE o.purchased != 0";
     if (!empty($p['include_purchased_date']) && !empty($p['date-pstartdate'])) {
         $sqlwhere .= " AND o.purchased >= " . strtotime($p['date-pstartdate'] . " " . $p['time-h-pstartdate'] . ":" . $p['time-m-pstartdate'] . " " . $p['ampm-pstartdate']);
     }
     /*if ($p->['time-h-startdate'] == )
       if ($p->['time-m-startdate'] == )
       if ($p->['ampm-startdate'] == )*/
     if (!empty($p['include_purchased_date']) && !empty($p['date-penddate'])) {
         $sqlwhere .= " AND o.purchased <= " . strtotime($p['date-penddate'] . " " . $p['time-h-penddate'] . ":" . $p['time-m-penddate'] . " " . $p['ampm-penddate']);
     }
     /*if ($p->['date-enddate'] == )
       if ($p->['time-h-enddate'] == )
       if ($p->['time-m-enddate'] == )
       if ($p->['ampm-enddate'] == )*/
     if (!empty($p['include_status_date']) && !empty($p['date-sstartdate'])) {
         $sqlwhere .= " AND osc.created_at >= " . strtotime($p['date-sstartdate'] . " " . $p['time-h-sstartdate'] . ":" . $p['time-m-sstartdate'] . " " . $p['ampm-sstartdate']);
     }
     if (!empty($p['include_status_date']) && !empty($p['date-senddate'])) {
         $sqlwhere .= " AND osc.created_at <= " . strtotime($p['date-senddate'] . " " . $p['time-h-senddate'] . ":" . $p['time-m-senddate'] . " " . $p['ampm-senddate']);
     }
     $inc = 0;
     $sqltmp = '';
     foreach ($p['order_status'] as $os) {
         if ($os == -1) {
             continue;
         } else {
             if ($inc == 0) {
                 $inc++;
                 $sqltmp .= " AND (o.order_status_id = " . $os;
             } else {
                 $sqltmp .= " OR o.order_status_id = " . $os;
             }
         }
     }
     if (!empty($sqltmp)) {
         $sqlwhere .= $sqltmp .= ")";
     }
     $inc = 0;
     $sqltmp = '';
     foreach ($p['order_status_changed'] as $osc) {
         if ($osc == -1) {
             continue;
         } else {
             if ($inc == 0) {
                 $inc++;
                 //$sqltmp .= " AND ((osc.to_status_id = " . $osc . " AND (osc.from_status_id != " . $osc . ")";
                 $sqltmp .= " AND (osc.to_status_id = " . $osc;
             } else {
                 //$sqltmp .= " OR (osc.to_status_id = " . $osc . " AND (osc.from_status_id != " . $osc . ")";
                 $sqltmp .= " OR osc.to_status_id = " . $osc;
             }
         }
     }
     if (!empty($sqltmp)) {
         $sqlwhere .= $sqltmp .= ")";
     }
     $inc = 0;
     $sqltmp = '';
     foreach ($p['order_type'] as $ot) {
         if ($ot == -1) {
             continue;
         } else {
             if ($inc == 0) {
                 $inc++;
                 $sqltmp .= " AND (o.order_type_id = " . $ot;
             } else {
                 $sqltmp .= " OR o.order_type_id = " . $ot;
             }
         }
     }
     if (!empty($sqltmp)) {
         $sqlwhere .= $sqltmp .= ")";
     }
     if (!empty($p['order-range-num'])) {
         $operator = '';
         switch ($p['order-range-op']) {
             case 'g':
                 $operator = '>';
                 break;
             case 'l':
                 $operator = '<';
                 break;
             case 'e':
                 $operator = '=';
                 break;
         }
         $sqlwhere .= " AND o.invoice_id" . $operator . $p['order-range-num'];
     }
     if (!empty($p['order-price-num'])) {
         $operator = '';
         switch ($p['order-price-op']) {
             case 'g':
                 $operator = '>';
                 break;
             case 'l':
                 $operator = '<';
                 break;
             case 'e':
                 $operator = '=';
                 break;
         }
         $sqlwhere .= " AND o.grand_total" . $operator . $p['order-price-num'];
     }
     if (!empty($p['pnam'])) {
         $sqlwhere .= " AND p.title LIKE '%" . $p['pnam'] . "%'";
     }
     if (!empty($p['sku'])) {
         $sqlwhere .= " AND p.model LIKE '%" . $p['sku'] . "%'";
     }
     $inc = 0;
     $sqltmp = '';
     if (isset($p['product_status'])) {
         foreach ($p['product_status'] as $pstat) {
             if ($pstat == -1) {
                 continue;
             }
             $product_status = new product_status($pstat);
             if ($inc == 0) {
                 $inc++;
                 $sqltmp .= " AND (oi.products_status = '" . $product_status->title . "'";
             } else {
                 $sqltmp .= " OR oi.products_status = '" . $product_status->title . "'";
             }
         }
     }
     if (!empty($sqltmp)) {
         $sqlwhere .= $sqltmp .= ")";
     }
     if (!empty($p['uidata'])) {
         $sqlwhere .= " AND oi.user_input_fields != '' AND oi.user_input_fields != 'a:0:{}'";
     }
     $inc = 0;
     $sqltmp = '';
     foreach ($p['discounts'] as $d) {
         if ($d == -1) {
             continue;
         } else {
             if ($inc == 0) {
                 $inc++;
                 $sqltmp .= " AND (od.discounts_id = " . $d;
             } else {
                 $sqltmp .= " OR od.discounts_id = " . $d;
             }
         }
     }
     if (!empty($sqltmp)) {
         $sqlwhere .= $sqltmp .= ")";
     }
     if (!empty($p['blshpname'])) {
         $sqlwhere .= " AND (b.firstname LIKE '%" . $p['blshpname'] . "%'";
         $sqlwhere .= " OR s.firstname LIKE '%" . $p['blshpname'] . "%'";
         $sqlwhere .= " OR b.lastname LIKE '%" . $p['blshpname'] . "%'";
         $sqlwhere .= " OR s.lastname LIKE '%" . $p['blshpname'] . "%')";
     }
     if (!empty($p['email'])) {
         $sqlwhere .= " AND (b.email LIKE '%" . $p['email'] . "%'";
         $sqlwhere .= " OR s.email LIKE '%" . $p['email'] . "%')";
     }
     if (!empty($p['zip'])) {
         if ($p['bl-sp-zip'] == 'b') {
             $sqlwhere .= " AND b.zip LIKE '%" . $p['zip'] . "%'";
         } else {
             if ($p['bl-sp-zip'] == 's') {
                 $sqlwhere .= " AND s.zip LIKE '%" . $p['zip'] . "%'";
             }
         }
     }
     if (isset($p['state'])) {
         $inc = 0;
         $sqltmp = '';
         foreach ($p['state'] as $s) {
             if ($s == -1) {
                 continue;
             } else {
                 if ($inc == 0) {
                     $inc++;
                     if ($p['bl-sp-state'] == 'b') {
                         $sqltmp .= " AND (b.state = " . $s;
                     } else {
                         if ($p['bl-sp-state'] == 's') {
                             $sqltmp .= " AND (s.state = " . $s;
                         }
                     }
                 } else {
                     if ($p['bl-sp-state'] == 'b') {
                         $sqltmp .= " OR b.state = " . $s;
                     } else {
                         if ($p['bl-sp-state'] == 's') {
                             $sqltmp .= " OR s.state = " . $s;
                         }
                     }
                 }
             }
         }
         if (!empty($sqltmp)) {
             $sqlwhere .= $sqltmp .= ")";
         }
     }
     if (isset($p['payment_method'])) {
         $inc = 0;
         $sqltmp = '';
         //get each calculator's id
         foreach ($p['payment_method'] as $s) {
             if ($s == -1) {
                 continue;
             }
             if ($s == 'VisaCard' || $s == 'AmExCard' || $s == 'MasterCard' || $s == 'DiscoverCard') {
                 $paymentQuery = 'b.billing_options LIKE "%' . $s . '%"';
             } else {
                 $bc = new billingcalculator();
                 $calc = $bc->findBy('calculator_name', $s);
                 $paymentQuery = 'billingcalculator_id = ' . $calc->id;
             }
             if ($inc == 0) {
                 $inc++;
                 $sqltmp .= " AND ( " . $paymentQuery;
             } else {
                 $sqltmp .= " OR " . $paymentQuery;
             }
         }
         if (!empty($sqltmp)) {
             $sqlwhere .= $sqltmp .= ")";
         }
     }
     //echo $sql . $sqlwhere . "<br>";
     /*
     Need: order, orderitems, order status, ordertype, billingmethods, geo region, shipping methods, products
         [date-startdate] => 
         [time-h-startdate] => 
         [time-m-startdate] => 
         [ampm-startdate] => am
         [date-enddate] => 
         [time-h-enddate] =>     
         [time-m-enddate] => 
         [ampm-enddate] => am
         [order_status] => Array
             (
                 [0] => 0
                 [1] => 1
                 [2] => 2
             )
     
         [order_type] => Array
             (
                 [0] => 0
                 [1] => 2
             )
     
         [order-range-op] => e
         [order-range-num] => 
         [order-price-op] => l
         [order-price-num] => 
         [pnam] => 
         [sku] => 
         [discounts] => Array
             (
                 [0] => -1
             )
     
         [blshpname] => 
         [email] => 
         [bl-sp-zip] => s
         [zip] => 
         [bl-sp-state] => s
         [state] => Array
             (
                 [0] => -1
             )
     
         [status] => Array
             (
                 [0] => -1
             )
     
     )
     */
     //$sqlwhere .= " ORDER BY purchased_date DESC";
     $count_sql .= $sql . $sqlwhere;
     $sql = $start_sql . $sql;
     expSession::set('order_print_query', $sql . $sqlwhere);
     $reportRecords = $db->selectObjectsBySql($sql . $sqlwhere);
     expSession::set('order_export_values', $reportRecords);
     //eDebug(expSession::get('order_export_values'));
     //$where = 1;//$this->aggregateWhereClause();
     //$order = 'id';
     $limit = empty($this->config['limit']) ? 350 : $this->config['limit'];
     //$prod = new product();
     // $order = new order();
     //$items = $prod->find('all', 1, 'id DESC',25);
     //$items = $order->find('all', 1, 'id DESC',25);
     //$res = $mod->find('all',$sql,'id',25);
     //eDebug($items);
     //eDebug($sql . $sqlwhere);
     $page = new expPaginator(array('count_sql' => $count_sql, 'sql' => $sql . $sqlwhere, 'limit' => $limit, 'order' => 'o.invoice_id', 'dir' => 'DESC', 'controller' => $this->baseclassname, 'action' => $this->params['action'], 'columns' => array('actupon' => true, 'Order #' => 'invoice_id|controller=order,action=show,showby=id', 'Purchased Date' => 'purchased_date', 'First' => 'bfirst', 'Last' => 'blast', 'Total' => 'grand_total', 'Status Changed Date' => 'status_changed_date', 'Order Type' => 'order_type', 'Status' => 'status_title')));
     //strftime("%a %d-%m-%Y", get_first_day(3, 1, 2007)); Thursday, 1 April 2010
     //$d_month_previous = date('n', mktime(0,0,0,(strftime("%m")-1),1,strftime("%Y")));
     $action_items = array('print_orders' => 'Print', 'export_odbc' => 'Export ODBC File', 'export_status_report' => 'Export Status Report', 'export_inventory' => 'Export Inventory File', 'export_user_input_report' => 'Export User Input File', 'export_order_items' => 'Export Order Items File', 'show_payment_summary' => 'Show Payment & Tax Summary');
     assign_to_template(array('page' => $page, 'action_items' => $action_items));
 }