%PDF- %PDF-
Direktori : /home/lightco1/www/plugins/csviaddon/virtuemart/com_virtuemart/model/export/ |
Current File : /home/lightco1/www/plugins/csviaddon/virtuemart/com_virtuemart/model/export/snelstart.php |
<?php /** * @package CSVI * @subpackage VirtueMart * * @author Roland Dalmulder <contact@csvimproved.com> * @copyright Copyright (C) 2006 - 2015 RolandD Cyber Produksi. All rights reserved. * @license GNU/GPLv3 http://www.gnu.org/licenses/gpl-3.0.html * @link http://www.csvimproved.com */ defined('_JEXEC') or die; require_once JPATH_ADMINISTRATOR . '/components/com_csvi/models/exports.php'; /** * Export VirtueMart order data for SnelStart. * * @package CSVI * @subpackage VirtueMart * @since 6.0 */ class Com_VirtuemartModelExportSnelstart extends CsviModelExports { /** * Export the data. * * @return bool True if body is exported | False if body is not exported. * * @since 6.0 * * @throws CsviException */ protected function exportBody() { if (parent::exportBody()) { // Check if we have a language set $language = $this->template->get('language', false); if (!$language) { throw new CsviException(JText::_('COM_CSVI_NO_LANGUAGE_SET')); } $order_discount = 0; $coupon_code = ''; $coupon_discount = ''; $address = strtoupper($this->template->get('order_address', false)); // Build something fancy to only get the fieldnames the user wants $userfields = array(); // Order ID is needed as controller $userfields[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_order_id'); // Process the other export fields $exportfields = $this->fields->getFields(); // Group by fields $groupbyfields = json_decode($this->template->get('groupbyfields', '', 'string')); $groupby = array(); if (isset($groupbyfields->name)) { $groupbyfields = array_flip($groupbyfields->name); } else { $groupbyfields = array(); } // Sort selected fields $sortfields = json_decode($this->template->get('sortfields', '', 'string')); $sortby = array(); if (isset($sortfields->name)) { $sortbyfields = array_flip($sortfields->name); } else { $sortbyfields = array(); } foreach ($exportfields as $field) { switch ($field->field_name) { case 'created_by': case 'created_on': case 'customer_note': case 'locked_by': case 'locked_on': case 'modified_by': case 'modified_on': case 'order_status': case 'virtuemart_user_id': case 'virtuemart_vendor_id': case 'virtuemart_order_id': case 'virtuemart_paymentmethod_id': case 'virtuemart_shipmentmethod_id': $userfields[] = $this->db->quoteName('#__virtuemart_orders.' . $field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.' . $field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.' . $field->field_name); } break; case 'virtuemart_product_id': $userfields[] = $this->db->quoteName('#__virtuemart_order_items.' . $field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_order_items.' . $field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_order_items.' . $field->field_name); } break; case 'email': case 'company': case 'title': case 'last_name': case 'first_name': case 'middle_name': case 'phone_1': case 'phone_2': case 'fax': case 'address_1': case 'address_2': case 'city': case 'zip': $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('BT') . ' THEN ' . $this->db->quoteName('user_info.' . $field->field_name) . ' ELSE NULL END) AS ' . $this->db->quoteName($field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName($field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName($field->field_name); } break; case 'id': $userfields[] = $this->db->quoteName('#__users.' . $field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__users.' . $field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__users.' . $field->field_name); } break; case 'payment_element': $userfields[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_paymentmethod_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_paymentmethod_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_paymentmethod_id'); } break; case 'shipment_element': $userfields[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_shipmentmethod_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_shipmentmethod_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_shipmentmethod_id'); } break; case 'state_2_code': case 'state_3_code': case 'state_name': $userfields[] = $this->db->quoteName('user_info.virtuemart_state_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('user_info.virtuemart_state_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('user_info.virtuemart_state_id'); } break; case 'country_2_code': case 'country_3_code': case 'country_name': case 'virtuemart_country_id': $userfields[] = $this->db->quoteName('user_info.virtuemart_country_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('user_info.virtuemart_country_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('user_info.virtuemart_country_id'); } break; case 'user_currency': $userfields[] = $this->db->quoteName('#__virtuemart_orders.user_currency_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.user_currency_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.user_currency_id'); } break; case 'username': $userfields[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_user_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_user_id'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.virtuemart_user_id'); } break; case 'full_name': $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('BT') . ' THEN ' . $this->db->quoteName('user_info.first_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('first_name'); $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('BT') . ' THEN ' . $this->db->quoteName('user_info.middle_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('middle_name'); $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('BT') . ' THEN ' . $this->db->quoteName('user_info.last_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('last_name'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('first_name'); $groupby[] = $this->db->quoteName('middle_name'); $groupby[] = $this->db->quoteName('last_name'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('first_name'); $sortby[] = $this->db->quoteName('middle_name'); $sortby[] = $this->db->quoteName('last_name'); } break; case 'product_price_total': $userfields[] = 'product_item_price*product_quantity AS product_price_total'; if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('product_price_total'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('product_price_total'); } break; case 'discount_percentage': $userfields[] = '('. $this->db->quoteName('order_discount') .' / ' . $this->db->quoteName('order_total') .') * 100 AS ' . $this->db->quoteName('discount_percentage'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('discount_percentage'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('discount_percentage'); } break; case 'product_subtotal_discount_percentage': $userfields[] = $this->db->quoteName('#__virtuemart_order_items.product_basePriceWithTax'); $userfields[] = $this->db->quoteName('#__virtuemart_order_items.product_final_price'); $userfields[] = $this->db->quoteName('#__virtuemart_order_items.product_subtotal_discount'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_order_items.product_basePriceWithTax'); $groupby[] = $this->db->quoteName('#__virtuemart_order_items.product_final_price'); $groupby[] = $this->db->quoteName('#__virtuemart_order_items.product_subtotal_discount'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_order_items.product_basePriceWithTax'); $sortby[] = $this->db->quoteName('#__virtuemart_order_items.product_final_price'); $sortby[] = $this->db->quoteName('#__virtuemart_order_items.product_subtotal_discount'); } break; case 'shipping_company': case 'shipping_title': case 'shipping_last_name': case 'shipping_first_name': case 'shipping_middle_name': case 'shipping_phone_1': case 'shipping_phone_2': case 'shipping_fax': case 'shipping_address_1': case 'shipping_address_2': case 'shipping_city': case 'shipping_zip': case 'shipping_email': $name = str_ireplace('shipping_', '', $field->field_name); $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.' . $name) . ' ELSE NULL END) AS ' . $this->db->quoteName($field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName($field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName($field->field_name); } break; case 'shipping_state_name': case 'shipping_state_2_code': case 'shipping_state_3_code': $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.virtuemart_state_id') . ' ELSE NULL END) AS ' . $this->db->quoteName('virtuemart_state_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName($field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName($field->field_name); } break; case 'shipping_country_name': case 'shipping_country_2_code': case 'shipping_country_3_code': $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.virtuemart_country_id') . ' ELSE NULL END) AS ' . $this->db->quoteName('virtuemart_country_id'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName($field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName($field->field_name); } break; case 'shipping_full_name': $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.first_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('shipping_first_name'); $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.middle_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('shipping_middle_name'); $userfields[] = 'MAX(CASE WHEN ' . $this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote('ST') . ' THEN ' . $this->db->quoteName('user_info.last_name') . ' ELSE NULL END) AS ' . $this->db->quoteName('shipping_last_name'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('shipping_first_name'); $groupby[] = $this->db->quoteName('shipping_middle_name'); $groupby[] = $this->db->quoteName('shipping_last_name'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('shipping_first_name'); $sortby[] = $this->db->quoteName('shipping_middle_name'); $sortby[] = $this->db->quoteName('shipping_last_name'); } break; case 'coupon_discount': // Coupon fields $userfields[] = $this->db->quoteName('#__virtuemart_orders.coupon_discount'); $userfields[] = $this->db->quoteName('#__virtuemart_orders.coupon_code'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_orders.coupon_discount'); $groupby[] = $this->db->quoteName('#__virtuemart_orders.coupon_code'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_orders.coupon_discount'); $sortby[] = $this->db->quoteName('#__virtuemart_orders.coupon_code'); } break; case 'total_order_items': case 'custom': // These are man made fields, do not try to get them from the database break; default: $userfields[] = $this->db->quoteName($field->field_name); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName($field->field_name); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName($field->field_name); } break; } } // Build the query $userfields = array_unique($userfields); $query = $this->db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from($this->db->quoteName('#__virtuemart_orders')); $query->leftJoin( $this->db->quoteName('#__virtuemart_order_items') . ' ON ' . $this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' = ' . $this->db->quoteName('#__virtuemart_order_items.virtuemart_order_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_order_userinfos', 'user_info') . ' ON ' . $this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' = ' . $this->db->quoteName('user_info.virtuemart_order_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_orderstates') . ' ON ' . $this->db->quoteName('#__virtuemart_orders.order_status') . ' = ' . $this->db->quoteName('#__virtuemart_orderstates.order_status_code') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_product_manufacturers') . ' ON ' . $this->db->quoteName('#__virtuemart_order_items.virtuemart_product_id') . ' = ' . $this->db->quoteName('#__virtuemart_product_manufacturers.virtuemart_product_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_manufacturers') . ' ON ' . $this->db->quoteName('#__virtuemart_product_manufacturers.virtuemart_manufacturer_id') . ' = '. $this->db->quoteName('#__virtuemart_manufacturers.virtuemart_manufacturer_id') ); $query->leftJoin( $this->db->quoteName('#__users') . ' ON ' . $this->db->quoteName('#__users.id') . ' = ' . $this->db->quoteName('user_info.virtuemart_user_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_countries') . ' ON ' . $this->db->quoteName('#__virtuemart_countries.virtuemart_country_id') . ' = ' . $this->db->quoteName('user_info.virtuemart_country_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_invoices') . ' ON ' . $this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' = ' . $this->db->quoteName('#__virtuemart_invoices.virtuemart_order_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_paymentmethods_' . $language) . ' ON ' . $this->db->quoteName('#__virtuemart_orders.virtuemart_paymentmethod_id') . ' = ' . $this->db->quoteName('#__virtuemart_paymentmethods_' . $language . '.virtuemart_paymentmethod_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_shipmentmethods_' . $language) . ' ON ' . $this->db->quoteName('#__virtuemart_orders.virtuemart_shipmentmethod_id') . ' = ' . $this->db->quoteName('#__virtuemart_shipmentmethods_' . $language . '.virtuemart_shipmentmethod_id') ); // Filter by manufacturer $manufacturer = $this->template->get('ordermanufacturer', false); if ($manufacturer && $manufacturer[0] != 'none') { $query->where($this->db->quoteName('#__virtuemart_manufacturers.virtuemart_manufacturer_id') . ' IN (' . implode(',', $manufacturer) . ')'); } // Filter by order number start $ordernostart = $this->template->get('ordernostart', 0, 'int'); if ($ordernostart > 0) { $query->where($this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' >= ' . (int) $ordernostart); } // Filter by order number end $ordernoend = $this->template->get('ordernoend', 0, 'int'); if ($ordernoend > 0) { $query->where($this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' <= ' . (int) $ordernoend); } // Filter by list of order numbers $orderlist = $this->template->get('orderlist'); if ($orderlist) { $query->where($this->db->quoteName('#__virtuemart_orders.virtuemart_order_id') . ' IN (' . $orderlist . ')'); } // Check for a pre-defined date $daterange = $this->template->get('orderdaterange', ''); if ($daterange != '') { $jdate = JFactory::getDate(); switch ($daterange) { case 'lastrun': if (substr($this->template->getLastrun(), 0, 4) != '0000') { $query->where($this->db->quoteName('#__virtuemart_orders.created_on') . ' > ' . $this->db->quote($this->template->getLastrun())); } break; case 'yesterday': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') = DATE_SUB(CURDATE(), INTERVAL 1 DAY)'); break; case 'thisweek': // Get the current day of the week $dayofweek = $jdate->__get('dayofweek'); $offset = $dayofweek - 1; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') <= CURDATE()'); break; case 'lastweek': // Get the current day of the week $dayofweek = $jdate->__get('dayofweek'); $offset = $dayofweek + 6; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') <= DATE_SUB(CURDATE(), INTERVAL ' . $dayofweek . ' DAY)'); break; case 'thismonth': // Get the current day of the week $dayofmonth = $jdate->__get('day'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $dayofmonth . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') <= CURDATE()'); break; case 'lastmonth': // Get the current day of the week $dayofmonth = $jdate->__get('day'); $month = date('n'); $year = date('y'); if ($month > 1) { $month--; } else { $month = 12; $year--; } $daysinmonth = date('t', mktime(0, 0, 0, $month, 25, $year)); $offset = ($daysinmonth + $dayofmonth) - 1; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') <= DATE_SUB(CURDATE(), INTERVAL ' . $dayofmonth . ' DAY)'); break; case 'thisquarter': // Find out which quarter we are in $month = $jdate->__get('month'); $year = date('Y'); $quarter = ceil($month / 3); switch ($quarter) { case '1': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-04-01')); break; case '2': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-04-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-07-01')); break; case '3': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-07-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-10-01')); break; case '4': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-10-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year++ . '-01-01')); break; } break; case 'lastquarter': // Find out which quarter we are in $month = $jdate->__get('month'); $year = date('Y'); $quarter = ceil($month / 3); if ($quarter == 1) { $quarter = 4; $year--; } else { $quarter--; } switch ($quarter) { case '1': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-04-01')); break; case '2': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-04-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-07-01')); break; case '3': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-07-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-10-01')); break; case '4': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-10-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year++ . '-01-01')); break; } break; case 'thisyear': $year = date('Y'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $year++; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-01-01')); break; case 'lastyear': $year = date('Y'); $year--; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $year++; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_orders.created_on') . ') < ' . $this->db->quote($year . '-01-01')); break; } } else { // Filter by order date start $orderdatestart = $this->template->get('orderdatestart', false); if ($orderdatestart) { $orderdate = JFactory::getDate($orderdatestart); $query->where($this->db->quoteName('#__virtuemart_orders') . '.' . $this->db->quoteName('created_on') . ' >= ' . $this->db->quote($orderdate->toSql())); } // Filter by order date end $orderdateend = $this->template->get('orderdateend', false); if ($orderdateend) { $orderdate = JFactory::getDate($orderdateend); $query->where($this->db->quoteName('#__virtuemart_orders') . '.' . $this->db->quoteName('created_on') . ' <= ' . $this->db->quote($orderdate->toSql())); } // Filter by order modified date start $ordermdatestart = $this->template->get('ordermdatestart', false); if ($ordermdatestart) { $ordermdate = JFactory::getDate($ordermdatestart); $query->where($this->db->quoteName('#__virtuemart_orders') . '.' . $this->db->quoteName('modified_on') . ' >= ' . $this->db->quote($ordermdate->toSql())); } // Filter by order modified date end $ordermdateend = $this->template->get('ordermdateend', false); if ($ordermdateend) { $ordermdate = JFactory::getDate($ordermdateend); $query->where($this->db->quoteName('#__virtuemart_orders') . '.' . $this->db->quoteName('modified_on') . ' <= ' . $this->db->quote($ordermdate->toSql())); } } // Filter by order status $orderstatus = $this->template->get('orderstatus', false); if ($orderstatus && $orderstatus[0] != '') { $query->where($this->db->quoteName('#__virtuemart_orders.order_status') . ' IN (\'' . implode("','", $orderstatus) . '\')'); } // Filter by order price start $pricestart = $this->template->get('orderpricestart', false, 'float'); if ($pricestart) { $query->where($this->db->quoteName('#__virtuemart_orders.order_total') . ' >= ' . $pricestart); } // Filter by order price end $priceend = $this->template->get('orderpriceend', false, 'float'); if ($priceend) { $query->where($this->db->quoteName('#__virtuemart_orders.order_total') . ' <= ' . $priceend); } // Filter by order user id $orderuser = $this->template->get('orderuser', false); if ($orderuser && $orderuser[0] != '') { $query->where($this->db->quoteName('#__virtuemart_orders.virtuemart_user_id') . ' IN (\'' . implode("','", $orderuser) . '\')'); } // Filter by order product $orderproduct = $this->template->get('orderproduct', false); if ($orderproduct && $orderproduct[0] != '') { $query->where($this->db->quoteName('#__virtuemart_order_items.order_item_sku') . ' IN (\'' . implode("','", $orderproduct) . '\')'); } // Filter by address type if ($address) { switch (strtoupper($address)) { case 'BTST': $query->where($this->db->quoteName('user_info.address_type') . ' IN (' . $this->db->quote('BT') . ', ' . $this->db->quote('ST') . ')'); break; default: $query->where($this->db->quoteName('user_info.address_type') . ' = ' . $this->db->quote(strtoupper($address))); break; } } // Filter by order currency $ordercurrency = $this->template->get('ordercurrency', false); if ($ordercurrency && $ordercurrency[0] != '') { $query->where($this->db->quoteName('#__virtuemart_orders.order_currency') . ' IN (\'' . implode("','", $ordercurrency) . '\')'); } // Filter by payment method $orderpayment = $this->template->get('orderpayment', false); if ($orderpayment && $orderpayment[0] != '') { $query->where($this->db->quoteName('#__virtuemart_orders.virtuemart_paymentmethod_id') . ' IN (\'' . implode("','", $orderpayment) . '\')'); } // Group the fields $groupby = array_unique($groupby); if (!empty($groupby)) { $query->group($groupby); } // Sort set fields $sortby = array_unique($sortby); if (!empty($sortby)) { $query->order($sortby); } // Add export limits $limits = $this->getExportLimit(); // Execute the query $this->csvidb->setQuery($query, $limits['offset'], $limits['limit']); $this->log->add('Export query' . $query->__toString(), false); // Check if there are any records $logcount = $this->csvidb->getNumRows(); if ($logcount > 0) { $orderid = null; while ($record = $this->csvidb->getRow()) { $this->log->incrementLinenumber(); // Add an order if (is_null($orderid) || $record->virtuemart_order_id != $orderid) { if (!is_null($orderid)) { // Output the contents $this->addExportContent($this->exportclass->NodeEnd()); $this->writeOutput(); } $orderid = $record->virtuemart_order_id; $this->addExportContent($this->exportclass->Order()); } // Add an orderline $this->addExportContent($this->exportclass->Orderline()); foreach ($exportfields as $field) { $fieldname = $field->field_name; // Set the field value if (isset($record->$fieldname)) { $fieldvalue = $record->$fieldname; } else { $fieldvalue = ''; } // Process the field switch ($fieldname) { case 'payment_element': $query = $this->db->getQuery(true); $query->select($fieldname); $query->from($this->db->quoteName('#__virtuemart_paymentmethods')); $query->where($this->db->quoteName('virtuemart_paymentmethod_id') . ' = ' . (int) $record->virtuemart_paymentmethod_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'shipment_element': $query = $this->db->getQuery(true); $query->select($this->db->quoteName($fieldname)); $query->from($this->db->quoteName('#__virtuemart_shipmentmethods')); $query->where($this->db->quoteName('virtuemart_shipmentmethod_id') . ' = ' . (int) $record->virtuemart_shipmentmethod_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'state_2_code': case 'state_3_code': case 'state_name': case 'shipping_state_2_code': case 'shipping_state_3_code': case 'shipping_state_name': $query = $this->db->getQuery(true); $query->select($this->db->quoteName(str_ireplace('shipping_', '', $fieldname))); $query->from($this->db->quoteName('#__virtuemart_states')); $query->where($this->db->quoteName('virtuemart_state_id') . ' = ' . (int) $record->virtuemart_state_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'country_2_code': case 'country_3_code': case 'country_name': case 'shipping_country_2_code': case 'shipping_country_3_code': case 'shipping_country_name': $query = $this->db->getQuery(true); $query->select($this->db->quoteName(str_ireplace('shipping_', '', $fieldname))); $query->from($this->db->quoteName('#__virtuemart_countries')); $query->where($this->db->quoteName('virtuemart_country_id') . ' = ' . (int) $record->virtuemart_country_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'user_currency': $query = $this->db->getQuery(true); $query->select($this->db->quoteName('currency_code_3')); $query->from($this->db->quoteName('#__virtuemart_currencies')); $query->where($this->db->quoteName('virtuemart_currency_id') . ' = ' . (int) $record->user_currency_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'user_email': $fieldvalue = $record->email; break; case 'user_id': $fieldvalue = $record->virtuemart_user_id; break; case 'created_on': case 'modified_on': case 'locked_on': $date = JFactory::getDate($record->$fieldname); $fieldvalue = date($this->template->get('export_date_format'), $date->toUnix()); break; case 'address_type': // Check if we have any content otherwise use the default value if (strlen(trim($fieldvalue)) == 0) { $fieldvalue = $field->default_value; } if ($fieldvalue == 'BT') { $fieldvalue = JText::_('COM_CSVI_BILLING_ADDRESS'); } elseif ($fieldvalue == 'ST') { $fieldvalue = JText::_('COM_CSVI_SHIPPING_ADDRESS'); } break; case 'full_name': $fieldvalue = str_replace(' ', ' ', $record->first_name . ' ' . $record->middle_name . ' ' . $record->last_name); break; case 'shipping_full_name': $fieldvalue = str_replace(' ', ' ', $record->shipping_first_name . ' ' . $record->shipping_middle_name . ' ' . $record->shipping_last_name); if (empty($fieldvalue)) { $fieldvalue = str_replace(' ', ' ', $record->first_name . ' ' . $record->middle_name . ' ' . $record->last_name); } break; case 'total_order_items': $query = $this->db->getQuery(true); $query->select('COUNT(' . $this->db->quoteName('virtuemart_order_id') . ') AS ' . $this->db->quoteName('totalitems')); $query->from($this->db->quoteName('#__virtuemart_order_items')); $query->where($this->db->quoteName('virtuemart_order_id') . ' = ' . (int) $record->virtuemart_order_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'username': $query = $this->db->getQuery(true); $query->select($this->db->quoteName($fieldname)); $query->from($this->db->quoteName('#__users')); $query->where($this->db->quoteName('id') . ' = ' . (int) $record->virtuemart_user_id); $this->db->setQuery($query); $fieldvalue = $this->db->loadResult(); break; case 'order_tax': case 'order_total': case 'order_subtotal': case 'order_shipment': case 'order_shipment_tax': case 'order_payment': case 'order_payment_tax': case 'order_discount': case 'user_currency_rate': case 'product_price_total': case 'discount_percentage': case 'product_item_price': case 'product_tax': case 'product_basePriceWithTax': case 'product_final_price': case 'product_subtotal_discount': case 'product_subtotal_with_tax': if (!empty($fieldvalue)) { $fieldvalue = number_format( $fieldvalue, $this->template->get('export_price_format_decimal', 2, 'int'), $this->template->get('export_price_format_decsep'), $this->template->get('export_price_format_thousep') ); } break; case 'product_subtotal_discount_percentage': if ($record->product_basePriceWithTax > 0) { $fieldvalue = number_format( ($record->product_subtotal_discount / $record->product_basePriceWithTax * 100) * -1, 3 ); } else { if ($record->product_subtotal_discount && $record->product_final_price) { $fieldvalue = number_format( ($record->product_subtotal_discount / $record->product_final_price * 100) * -1, 3 ); } } break; case 'order_discountAmount': // Set some discounts $order_discount = number_format($fieldvalue * -1, 3); $fieldvalue = null; break; case 'coupon_discount': // For coupon field usage if ($record->coupon_discount > 0) { $coupon_code = $record->coupon_code; $coupon_discount = number_format($record->coupon_discount * -1, 3); } $fieldvalue = number_format( $fieldvalue, $this->template->get('export_price_format_decimal', 2, 'int'), $this->template->get('export_price_format_decsep'), $this->template->get('export_price_format_thousep') ); break; } // Store the field value $this->fields->set($field->csvi_templatefield_id, $fieldvalue); } // Output the data $this->addExportFields(false); // Add the order discount row if (!empty($order_discount)) { foreach ($this->fields as $field) { if ($field->enabled) { $value = null; switch ($field->field_name) { case 'order_item_sku': $value = 'Korting'; break; case 'order_item_name': $value = 'Korting'; break; case 'product_quantity': $value = '1'; break; case 'product_item_price': $value = ($order_discount) ? $order_discount : 0; $order_discount = 0; break; } // Store the field value $this->fields->set($field->xml_node, $value); } } $this->addExportContent($this->exportclass->Orderline()); $this->addExportFields(false); } // Add the coupon discount if (!empty($coupon_code) && !empty($coupon_discount)) { foreach ($this->fields as $field) { $value = null; switch ($field->field_name) { case 'order_item_sku': $value = $coupon_code; break; case 'order_item_name': $value = $coupon_code; break; case 'product_quantity': $value = '1'; break; case 'product_item_price': $value = ($coupon_discount) ? $coupon_discount : 0; break; } // Store the field value $this->fields->set($field->xml_node, $value); } $this->addExportContent($this->exportclass->Orderline()); $this->addExportFields(false); } } // Close the XML structure $this->addExportContent($this->exportclass->NodeEnd()); $this->writeOutput(); } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } /** * Creates an array of custom database fields the user can use for import/export. * * @param string $table The table to get the fields for. * * @return array List of custom database fields. * * @since 3.0 */ private function dbFields($table) { $customfields = array(); $q = 'SHOW COLUMNS FROM ' . $this->db->quoteName('#__' . $table); $this->db->setQuery($q); $fields = $this->db->loadObjectList(); if (count($fields) > 0) { foreach ($fields as $field) { $customfields[$field->Field] = null; } } return $customfields; } }