%PDF- %PDF-
Direktori : /home1/lightco1/www/plugins/csviaddon/virtuemart/com_virtuemart/model/export/ |
Current File : //home1/lightco1/www/plugins/csviaddon/virtuemart/com_virtuemart/model/export/orderitem.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 items. * * @package CSVI * @subpackage VirtueMart * @since 6.0 */ class Com_VirtuemartModelExportOrderitem extends CsviModelExports { /** * Export the data. * * @return bool True if body is exported | False if body is not exported. * * @since 6.0 */ protected function exportBody() { if (parent::exportBody()) { // Build something fancy to only get the fieldnames the user wants $userfields = array(); $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_on': case 'delivery_date': case 'modified_on': case 'locked_on': case 'created_by': case 'modified_by': case 'locked_by': case 'virtuemart_order_id': case 'order_status': case 'virtuemart_vendor_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 'product_sku': $userfields[] = $this->db->quoteName('#__virtuemart_order_items.order_item_sku', 'product_sku'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('#__virtuemart_order_items.order_item_sku'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('#__virtuemart_order_items.order_item_sku'); } break; case 'full_name': $userfields[] = $this->db->quoteName('user_info1.first_name'); $userfields[] = $this->db->quoteName('user_info1.middle_name'); $userfields[] = $this->db->quoteName('user_info1.last_name'); if (array_key_exists($field->field_name, $groupbyfields)) { $groupby[] = $this->db->quoteName('user_info1.first_name'); $groupby[] = $this->db->quoteName('user_info1.middle_name'); $groupby[] = $this->db->quoteName('user_info1.last_name'); } if (array_key_exists($field->field_name, $sortbyfields)) { $sortby[] = $this->db->quoteName('user_info1.first_name'); $sortby[] = $this->db->quoteName('user_info1.middle_name'); $sortby[] = $this->db->quoteName('user_info1.last_name'); } 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; } } // Construct the query $userfields = array_unique($userfields); $query = $this->db->getQuery(true); $query->select(implode(",\n", $userfields)); $query->from($this->db->quoteName('#__virtuemart_order_items')); $query->leftJoin( $this->db->quoteName('#__virtuemart_orders') . ' 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_info1') . ' ON ' . $this->db->quoteName('user_info1.virtuemart_order_id') . ' = ' . $this->db->quoteName('#__virtuemart_order_items.virtuemart_order_id') ); $query->leftJoin( $this->db->quoteName('#__virtuemart_orderstates') . ' ON ' . $this->db->quoteName('#__virtuemart_orderstates.order_status_code') . ' = ' . $this->db->quoteName('#__virtuemart_order_items.order_status') ); // Filter by order number start $ordernostart = $this->template->get('orderitemnostart', 0, 'int'); if ($ordernostart > 0) { $query->where($this->db->quoteName('#__virtuemart_order_items.virtuemart_order_id') . ' >= ' . (int) $ordernostart); } // Filter by order number end $ordernoend = $this->template->get('orderitemnoend', 0, 'int'); if ($ordernoend > 0) { $query->where($this->db->quoteName('#__virtuemart_order_items.virtuemart_order_id') . ' <= ' . (int) $ordernoend); } // Filter by list of order numbers $orderlist = $this->template->get('orderitemlist'); if ($orderlist) { $query->where($this->db->quoteName('#__virtuemart_order_items.virtuemart_order_id') . ' IN (' . $orderlist . ')'); } // Check for a pre-defined date $daterange = $this->template->get('orderitemdaterange', ''); if ($daterange != '') { $jdate = JFactory::getDate(); switch ($daterange) { case 'lastrun': if (substr($this->template->getLastrun(), 0, 4) != '0000') { $query->where($this->db->quoteName('#__virtuemart_order_items.created_on') . ' > ' . $this->db->quote($this->template->getLastrun())); } break; case 'yesterday': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $dayofmonth . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= DATE_SUB(CURDATE(), INTERVAL ' . $offset . ' DAY)'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-04-01')); break; case '2': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-04-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-07-01')); break; case '3': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-07-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-10-01')); break; case '4': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-10-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.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_order_items.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-04-01')); break; case '2': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-04-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-07-01')); break; case '3': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-07-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-10-01')); break; case '4': $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-10-01')); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year++ . '-01-01')); break; } break; case 'thisyear': $year = date('Y'); $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $year++; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-01-01')); break; case 'lastyear': $year = date('Y'); $year--; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') >= ' . $this->db->quote($year . '-01-01')); $year++; $query->where('DATE(' . $this->db->quoteName('#__virtuemart_order_items.created_on') . ') < ' . $this->db->quote($year . '-01-01')); break; } } else { // Filter by order date start $orderdatestart = $this->template->get('orderitemdatestart', false); if ($orderdatestart) { $orderdate = JFactory::getDate($orderdatestart); $query->where($this->db->quoteName('#__virtuemart_order_items.created_on') . ' >= ' . $this->db->quote($orderdate->toSql())); } // Filter by order date end $orderdateend = $this->template->get('orderitemdateend', false); if ($orderdateend) { $orderdate = JFactory::getDate($orderdateend); $query->where($this->db->quoteName('#__virtuemart_order_items.created_on') . ' <= ' . $this->db->quote($orderdate->toSql())); } // Filter by order modified date start $ordermdatestart = $this->template->get('orderitemmdatestart', false); if ($ordermdatestart) { $ordermdate = JFactory::getDate($ordermdatestart); $query->where($this->db->quoteName('#__virtuemart_order_items.modified_on') . ' >= ' . $this->db->quote($ordermdate->toSql())); } // Filter by order modified date end $ordermdateend = $this->template->get('orderitemmdateend', false); if ($ordermdateend) { $ordermdate = JFactory::getDate($ordermdateend); $query->where($this->db->quoteName('#__virtuemart_order_items.modified_on') . ' <= ' . $this->db->quote($ordermdate->toSql())); } } // Filter by order status $orderstatus = $this->template->get('orderitemstatus', false); if ($orderstatus && $orderstatus[0] != '') { $query->where($this->db->quoteName('#__virtuemart_order_items.order_status') . ' IN (\'' . implode("','", $orderstatus) . '\')'); } // Filter by order price start $pricestart = $this->template->get('orderitempricestart', false, 'float'); if ($pricestart) { $query->where($this->db->quoteName('#__virtuemart_orders.order_total') . ' >= ' . $pricestart); } // Filter by order price end $priceend = $this->template->get('orderitempriceend', false, 'float'); if ($priceend) { $query->where($this->db->quoteName('#__virtuemart_orders.order_total') . ' <= ' . $priceend); } // Filter by order product $orderproduct = $this->template->get('orderitemproduct', false); if ($orderproduct && $orderproduct[0] != '') { $query->where($this->db->quoteName('#__virtuemart_order_items.order_item_sku') . ' IN (\'' . implode("','", $orderproduct) . '\')'); } // Filter by order currency $ordercurrency = $this->template->get('orderitemcurrency', false); if ($ordercurrency && $ordercurrency[0] != '') { $query->where($this->db->quoteName('#__virtuemart_orders.order_currency') . ' IN (\'' . implode("','", $ordercurrency) . '\')'); } // 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) { while ($record = $this->csvidb->getRow()) { $this->log->incrementLinenumber(); 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 '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 'product_item_price': case 'product_final_price': case 'product_price': case 'product_basePriceWithTax': case 'product_discountedPriceWithoutTax': case 'product_priceWithoutTax': case 'product_subtotal_discount': case 'product_subtotal_with_tax': case 'product_tax': if ($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 'full_name': $fieldvalue = str_replace(' ', ' ', $record->first_name . ' ' . $record->middle_name . ' ' . $record->last_name); break; } // Store the field value $this->fields->set($field->csvi_templatefield_id, $fieldvalue); } // Output the data $this->addExportFields(); // Output the contents $this->writeOutput(); } } else { $this->addExportContent(JText::_('COM_CSVI_NO_DATA_FOUND')); // Output the contents $this->writeOutput(); } } } }