unable to add invoice fee tax in magento order total - magento

I am working on magento 1.7. i am working on payment gateway where i have added invoice fee now i have to add tax of invoice fee in tax group
please anyone help to solve this problem here is following my code i have tried to add tax amount in taxes but still not working may be i am doing something wrong
<?php
class ***_******_Model_Quote_TaxTotal
extends Mage_Sales_Model_Quote_Address_Total_Tax
{
public function collect(Mage_Sales_Model_Quote_Address $address)
{
$quote = $address->getQuote();
if (($quote->getId() == null)
|| ($address->getAddressType() != "shipping")
) {
return $this;
}
$payment = $quote->getPayment();
if (($payment->getMethod() != 'invoice')
&& (!count($quote->getPaymentsCollection()))
) {
return $this;
}
try {
/**
* Instead of relying on hasMethodInstance which would not always
* work when i.e the order total is reloaded with coupon codes, we
* try to get the instance directly instead.
*/
$methodInstance = $payment->getMethodInstance();
} catch (Mage_Core_Exception $e) {
return $this;
}
if (!$methodInstance instanceof Mage_Payment_Model_Method_Abstract) {
return $this;
}
if ($methodInstance->getCode() != 'invoice') {
return $this;
}
$fee = $methodInstance->getAddressInvoiceFee($address);
if(Mage::getStoreConfig('payment/invoice/tax_class') == '' ){
return $this;
}
$invoiceFee = $baseInvoiceFee = Mage::getStoreConfig('payment/invoice/_fee');
$fee = Mage::helper('invoice')->getInvoiceFeeArray($invoiceFee, $address, null);
if (!is_array($fee)) {
return $this;
}
$address->setTaxAmount($address->getTaxAmount() + 5454+ $fee['taxamount']);
$address->setBaseTaxAmount(
$address->getBaseTaxAmount() + 5454+ $fee['base_taxamount']
);
$address->setInvoiceTaxAmount($fee['taxamount']);
$address->setBaseInvoiceTaxAmount($fee['base_taxamount']);
return $this;
}
}
and this is config.xml
<sales>
<quote>
<totals>
<fee>
<class>invoice/sales_quote_address_total_fee</class>
</fee>
<invoicetax>
<class>invoice/quote_taxTotal</class>
<after>subtotal,discount,shipping,tax</after>
<before>grand_total</before>
</invoicetax>
</totals>
</quote>
</sales>

your code must be following i have following i modified your code
<?php
class *****_******_Model_Quote_TaxTotal extends Mage_Sales_Model_Quote_Address_Total_Tax
{
public function collect(Mage_Sales_Model_Quote_Address $address)
{
$collection = $address->getQuote()->getPaymentsCollection();
if ($collection->count() <= 0 || $address->getQuote()->getPayment()->getMethod() == null) {
return $this;
}
$paymentMethod = $address->getQuote()->getPayment()->getMethodInstance();
if ($paymentMethod->getCode() != 'invoice') {
return $this;
}
$store = $address->getQuote()->getStore();
$items = $address->getAllItems();
if (!count($items)) {
return $this;
}
$custTaxClassId = $address->getQuote()->getCustomerTaxClassId();
$taxCalculationModel = Mage::getSingleton('tax/calculation');
/* #var $taxCalculationModel Mage_Tax_Model_Calculation */
$request = $taxCalculationModel->getRateRequest(
$address,
$address->getQuote()->getBillingAddress(),
$custTaxClassId,
$store
);
$InvoiceTaxClass = Mage::helper('invoice')->getInvoiceTaxClass($store);
$InvoiceTax = 0;
$InvoiceBaseTax = 0;
if ($InvoiceTaxClass) {
if ($rate = $taxCalculationModel->getRate($request->setProductClassId($InvoiceTaxClass))) {
if (!Mage::helper('invoice')->InvoicePriceIncludesTax()) {
$InvoiceTax = $address->getFeeAmount() * $rate/100;
$InvoiceBaseTax= $address->getBaseFeeAmount() * $rate/100;
} else {
$InvoiceTax = $address->getPaymentTaxAmount();
$InvoiceBaseTax= $address->getBasePaymentTaxAmount();
}
$InvoiceTax = $store->roundPrice($InvoiceTax);
$InvoiceBaseTax= $store->roundPrice($InvoiceBaseTax);
$address->setTaxAmount($address->getTaxAmount() + $InvoiceTax);
$address->setBaseTaxAmount($address->getBaseTaxAmount() + $InvoiceBaseTax);
$this->_saveAppliedTaxes(
$address,
$taxCalculationModel->getAppliedRates($request),
$InvoiceTax,
$InvoiceBaseTax,
$rate
);
}
}
if (!Mage::helper('invoice')->InvoicePriceIncludesTax()) {
$address->setInvoiceTaxAmount($InvoiceTax);
$address->setBaseInvoiceTaxAmount($InvoiceBaseTax);
}
$address->setGrandTotal($address->getGrandTotal() + $address->getPaymentTaxAmount());
$address->setBaseGrandTotal($address->getBaseGrandTotal() + $address->getBasePaymentTaxAmount());
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
$store = $address->getQuote()->getStore();
/**
* Modify subtotal
*/
if (Mage::getSingleton('tax/config')->displayCartSubtotalBoth($store) ||
Mage::getSingleton('tax/config')->displayCartSubtotalInclTax($store)) {
if ($address->getSubtotalInclTax() > 0) {
$subtotalInclTax = $address->getSubtotalInclTax();
} else {
$subtotalInclTax = $address->getSubtotal()+ $address->getTaxAmount() -
$address->getShippingTaxAmount() - $address->getPaymentTaxAmount();
}
$address->addTotal(
array(
'code' => 'subtotal',
'title' => Mage::helper('sales')->__('Subtotal'),
'value' => $subtotalInclTax,
'value_incl_tax' => $subtotalInclTax,
'value_excl_tax' => $address->getSubtotal()
)
);
}
return $this;
}
}

Related

Prestashop shipping costs cleared after order confirmation

I'm on Prestashop 1.7.6. I made a simple test module for adding a custom carrier and manage it programmatically.
Everything works well during checkout: I see new carrier with the correct cost, if I select it the total of cart is correct! (the shipping cost is added).
After choosing the payment method and confirming the order (and I'm redirected to order confirmation page), the shipping costs disappear: is always free shipping!
I do not understand why..
I report the code of this test:
<?php
if (!defined('_PS_VERSION_')) {
exit;
}
class TxShipping extends CarrierModule
{
const PREFIX = 'tx_';
public $id_carrier;
private $loopCount = 0;
private $shipCost = 0;
protected $_hooks = array(
'actionCarrierUpdate',
'displayOrderConfirmation',
);
protected $_carriers = array(
//"Public carrier name" => "technical name",
'My new carrier' => 'txshipping',
);
public function __construct()
{
$this->name = 'txshipping';
$this->tab = 'shipping_logistics';
$this->version = '1.0.0';
$this->author = 'Gerry';
$this->need_instance = 0;
$this->ps_versions_compliancy = [
'min' => '1.7.1.0',
'max' => _PS_VERSION_
];
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Tx Shipping');
$this->description = $this->l('manage shipping costs');
$this->confirmUninstall = $this->l('Are you sure you want to uninstall?');
if (!Configuration::get('TXSHIPPING_NAME')) {
$this->warning = $this->l('No name provided');
}
}
public function getTemplate($area, $file)
{
return 'views/templates/' . $area . '/' . $file;
}
//-------------------------------------------------
// Hooks
//-------------------------------------------------
public function hookActionCarrierUpdate($params)
{
if ($params['carrier']->id_reference == Configuration::get(self::PREFIX . 'fcd_reference')) {
Configuration::updateValue(self::PREFIX . 'fcd', $params['carrier']->id);
}
}
public function getOrderShippingCost($params = null, $shipping_cost = 0) {
$curPage = $this->context->controller->php_self;
/* using test on which page is running cause the following code is always executed (even if is loading home page!?)
I don't understand why */
if ($curPage == "order") {
$this->loopCount++; // attempt for not to run the same code over and over.. but it doesn't work very well
if ($this->loopCount == 1) {
$this->shipCost = 77;
/*
$address = new Address($params->id_address_delivery);
$cap = $address->postcode;
$curID = $this->id_carrier; */
}
return floatval($this->shipCost);
} elseif ($curPage == "order-confirmation") {
$test = 76; // for simple test
return floatval($test);
} else {
if ($curPage != "pagenotfound") {
$this->loopCount = 0;
$this->shipCost = 0;
}
}
}
public function getOrderShippingCostExternal($params){
//return 999; costi spedizione
return $this->getOrderShippingCost($params, 0);
}
//-------------------------------------------------
// Setup
//-------------------------------------------------
public function install()
{
if (parent::install()) {
foreach ($this->_hooks as $hook) {
if (!$this->registerHook($hook)) {
return false;
}
}
if (!$this->createCarriers()) {
return false;
}
return true;
}
return false;
}
public function uninstall()
{
if (parent::uninstall()) {
foreach ($this->_hooks as $hook) {
if (!$this->unregisterHook($hook)) {
return false;
}
}
if (!$this->deleteCarriers()) {
return false;
}
return true;
}
return false;
}
//-------------------------------------------------
// Funzioni private
//-------------------------------------------------
protected function createCarriers()
{
foreach ($this->_carriers as $key => $value) {
//Create own carrier
$carrier = new Carrier();
$carrier->name = $key;
$carrier->id_tax_rules_group = 0;
$carrier->active = 1;
$carrier->deleted = 0;
foreach (Language::getLanguages(true) as $language)
$carrier->delay[(int)$language['id_lang']] = 'Delay [1-2 days]';
$carrier->shipping_handling = false;
$carrier->range_behavior = 0;
$carrier->is_module = true;
$carrier->shipping_external = true;
$carrier->external_module_name = $this->name;
$carrier->need_range = true;
if ($carrier->add()) {
$groups = Group::getGroups(true);
foreach ($groups as $group) {
Db::getInstance()->autoExecute(_DB_PREFIX_ . 'carrier_group', array(
'id_carrier' => (int) $carrier->id,
'id_group' => (int) $group['id_group']
), 'INSERT');
}
$rangePrice = new RangePrice();
$rangePrice->id_carrier = $carrier->id;
$rangePrice->delimiter1 = '0';
$rangePrice->delimiter2 = '1000000';
$rangePrice->add();
$rangeWeight = new RangeWeight();
$rangeWeight->id_carrier = $carrier->id;
$rangeWeight->delimiter1 = '0';
$rangeWeight->delimiter2 = '1000000';
$rangeWeight->add();
$zones = Zone::getZones(true);
foreach ($zones as $z) {
Db::getInstance()->autoExecute(_DB_PREFIX_ . 'carrier_zone',
array('id_carrier' => (int) $carrier->id, 'id_zone' => (int) $z['id_zone']), 'INSERT');
Db::getInstance()->autoExecuteWithNullValues(_DB_PREFIX_ . 'delivery',
array('id_carrier' => $carrier->id, 'id_range_price' => (int) $rangePrice->id, 'id_range_weight' => NULL, 'id_zone' => (int) $z['id_zone'], 'price' => '0'), 'INSERT');
Db::getInstance()->autoExecuteWithNullValues(_DB_PREFIX_ . 'delivery',
array('id_carrier' => $carrier->id, 'id_range_price' => NULL, 'id_range_weight' => (int) $rangeWeight->id, 'id_zone' => (int) $z['id_zone'], 'price' => '0'), 'INSERT');
}
copy(dirname(__FILE__) . '/views/img/carrier.jpg', _PS_SHIP_IMG_DIR_ . '/' . (int) $carrier->id . '.jpg');
Configuration::updateValue(self::PREFIX . $value, $carrier->id);
Configuration::updateValue(self::PREFIX . $value . '_reference', $carrier->id);
}
}
return true;
}
protected function deleteCarriers()
{
foreach ($this->_carriers as $value) {
$tmp_carrier_id = Configuration::get(self::PREFIX . $value);
$carrier = new Carrier($tmp_carrier_id);
$carrier->delete();
}
return true;
}
}
Im my opinion it has something to do with your $curPage
I'd go for this if instead:
if ($this->context->controller instanceof CartController || $this->context->controller instanceof OrderController) {
I don't understand this part of code:
} elseif ($curPage == "order-confirmation") {
why would you do something different on real order-confirmation page where order is already placed?

CodeIgniter Unable to connect to database

when i open CodeIgniter project than it can display not able to connect to database
Error message
A Database Error Occurred
Unable to connect to your database server using the provided settings.
Filename: C:\wamp\www\CodeIgniter-Standard-Project-master\system\database\DB_driver.php
Line Number: 76
DB_driver.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class CI_DB_driver {
var $username = 'root';
var $password = '';
var $hostname = 'localhost';
var $database = 'groups';
var $dbdriver = 'mysql';
var $dbprefix = '';
var $char_set = 'utf8';
var $dbcollat = 'utf8_general_ci';
var $autoinit = TRUE; // Whether to automatically initialize the DB
var $swap_pre = '';
var $port = '';
var $pconnect = true;
var $conn_id = FALSE;
var $result_id = FALSE;
var $db_debug = true;
var $benchmark = 0;
var $query_count = 0;
var $bind_marker = '?';
var $save_queries = TRUE;
var $queries = array();
var $query_times = array();
var $data_cache = array();
var $trans_enabled = TRUE;
var $trans_strict = TRUE;
var $_trans_depth = 0;
var $_trans_status = TRUE; // Used with transactions to determine if a rollback should occur
var $cache_on = FALSE;
var $cachedir = '';
var $cache_autodel = FALSE;
var $CACHE; // The cache class object
var $_protect_identifiers = TRUE;
var $_reserved_identifiers = array('*'); // Identifiers that should NOT be escaped
// These are use with Oracle
var $stmt_id;
var $curs_id;
var $limit_used;
function __construct($params)
{
if (is_array($params))
{
foreach ($params as $key => $val)
{
$this->$key = $val;
}
}
log_message('debug', 'Database Driver Class Initialized');
}
function initialize()
{
// If an existing connection resource is available
// there is no need to connect and select the database
if (is_resource($this->conn_id) OR is_object($this->conn_id))
{
return TRUE;
}
$this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();
// No connection resource? Throw an error
if ( ! $this->conn_id)
{
log_message('error', 'Unable to connect to the database');
if ($this->db_debug)
{
$this->display_error('db_unable_to_connect');
}
return FALSE;
}
// ----------------------------------------------------------------
// Select the DB... assuming a database name is specified in the config file
if ($this->database != '')
{
if ( ! $this->db_select())
{
log_message('error', 'Unable to select database: '.$this->database);
if ($this->db_debug)
{
$this->display_error('db_unable_to_select', $this->database);
}
return FALSE;
}
else
{
// We've selected the DB. Now we set the character set
if ( ! $this->db_set_charset($this->char_set, $this->dbcollat))
{
return FALSE;
}
return TRUE;
}
}
return TRUE;
}
// --------------------------------------------------------------------
function db_set_charset($charset, $collation)
{
if ( ! $this->_db_set_charset($this->char_set, $this->dbcollat))
{
log_message('error', 'Unable to set database connection charset: '.$this->char_set);
if ($this->db_debug)
{
$this->display_error('db_unable_to_set_charset', $this->char_set);
}
return FALSE;
}
return TRUE;
}
function platform()
{
return $this->dbdriver;
}
function version()
{
if (FALSE === ($sql = $this->_version()))
{
if ($this->db_debug)
{
return $this->display_error('db_unsupported_function');
}
return FALSE;
}
$driver_version_exceptions = array('oci8', 'sqlite', 'cubrid');
if (in_array($this->dbdriver, $driver_version_exceptions))
{
return $sql;
}
else
{
$query = $this->query($sql);
return $query->row('ver');
}
}
// --------------------------------------------------------------------
function query($sql, $binds = FALSE, $return_object = TRUE)
{
if ($sql == '')
{
if ($this->db_debug)
{
log_message('error', 'Invalid query: '.$sql);
return $this->display_error('db_invalid_query');
}
return FALSE;
}
// Verify table prefix and replace if necessary
if ( ($this->dbprefix != '' AND $this->swap_pre != '') AND ($this->dbprefix != $this->swap_pre) )
{
$sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
}
if ($this->cache_on == TRUE AND stristr($sql, 'SELECT'))
{
if ($this->_cache_init())
{
$this->load_rdriver();
if (FALSE !== ($cache = $this->CACHE->read($sql)))
{
return $cache;
}
}
}
// Compile binds if needed
if ($binds !== FALSE)
{
$sql = $this->compile_binds($sql, $binds);
}
// Save the query for debugging
if ($this->save_queries == TRUE)
{
$this->queries[] = $sql;
}
// Start the Query Timer
$time_start = list($sm, $ss) = explode(' ', microtime());
// Run the Query
if (FALSE === ($this->result_id = $this->simple_query($sql)))
{
if ($this->save_queries == TRUE)
{
$this->query_times[] = 0;
}
// This will trigger a rollback if transactions are being used
$this->_trans_status = FALSE;
if ($this->db_debug)
{
// grab the error number and message now, as we might run some
// additional queries before displaying the error
$error_no = $this->_error_number();
$error_msg = $this->_error_message();
// We call this function in order to roll-back queries
// if transactions are enabled. If we don't call this here
// the error message will trigger an exit, causing the
// transactions to remain in limbo.
$this->trans_complete();
// Log and display errors
log_message('error', 'Query error: '.$error_msg);
return $this->display_error(
array(
'Error Number: '.$error_no,
$error_msg,
$sql
)
);
}
return FALSE;
}
// Stop and aggregate the query time results
$time_end = list($em, $es) = explode(' ', microtime());
$this->benchmark += ($em + $es) - ($sm + $ss);
if ($this->save_queries == TRUE)
{
$this->query_times[] = ($em + $es) - ($sm + $ss);
}
// Increment the query counter
$this->query_count++;
// Was the query a "write" type?
// If so we'll simply return true
if ($this->is_write_type($sql) === TRUE)
{
// If caching is enabled we'll auto-cleanup any
// existing files related to this particular URI
if ($this->cache_on == TRUE AND $this->cache_autodel == TRUE AND $this->_cache_init())
{
$this->CACHE->delete();
}
return TRUE;
}
// Return TRUE if we don't need to create a result object
// Currently only the Oracle driver uses this when stored
// procedures are used
if ($return_object !== TRUE)
{
return TRUE;
}
// Load and instantiate the result driver
$driver = $this->load_rdriver();
$RES = new $driver();
$RES->conn_id = $this->conn_id;
$RES->result_id = $this->result_id;
if ($this->dbdriver == 'oci8')
{
$RES->stmt_id = $this->stmt_id;
$RES->curs_id = NULL;
$RES->limit_used = $this->limit_used;
$this->stmt_id = FALSE;
}
// oci8 vars must be set before calling this
$RES->num_rows = $RES->num_rows();
// Is query caching enabled? If so, we'll serialize the
// result object and save it to a cache file.
if ($this->cache_on == TRUE AND $this->_cache_init())
{
$CR = new CI_DB_result();
$CR->num_rows = $RES->num_rows();
$CR->result_object = $RES->result_object();
$CR->result_array = $RES->result_array();
// Reset these since cached objects can not utilize resource IDs.
$CR->conn_id = NULL;
$CR->result_id = NULL;
$this->CACHE->write($sql, $CR);
}
return $RES;
}
function load_rdriver()
{
$driver = 'CI_DB_'.$this->dbdriver.'_result';
if ( ! class_exists($driver))
{
include_once(BASEPATH.'database/DB_result.php');
include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result.php');
}
return $driver;
}
function simple_query($sql)
{
if ( ! $this->conn_id)
{
$this->initialize();
}
return $this->_execute($sql);
}
function trans_off()
{
$this->trans_enabled = FALSE;
}
function trans_strict($mode = TRUE)
{
$this->trans_strict = is_bool($mode) ? $mode : TRUE;
}
function trans_start($test_mode = FALSE)
{
if ( ! $this->trans_enabled)
{
return FALSE;
}
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 0)
{
$this->_trans_depth += 1;
return;
}
$this->trans_begin($test_mode);
}
function trans_complete()
{
if ( ! $this->trans_enabled)
{
return FALSE;
}
// When transactions are nested we only begin/commit/rollback the outermost ones
if ($this->_trans_depth > 1)
{
$this->_trans_depth -= 1;
return TRUE;
}
// The query() function will set this flag to FALSE in the event that a query failed
if ($this->_trans_status === FALSE)
{
$this->trans_rollback();
// If we are NOT running in strict mode, we will reset
// the _trans_status flag so that subsequent groups of transactions
// will be permitted.
if ($this->trans_strict === FALSE)
{
$this->_trans_status = TRUE;
}
log_message('debug', 'DB Transaction Failure');
return FALSE;
}
$this->trans_commit();
return TRUE;
}
function trans_status()
{
return $this->_trans_status;
}
function compile_binds($sql, $binds)
{
if (strpos($sql, $this->bind_marker) === FALSE)
{
return $sql;
}
if ( ! is_array($binds))
{
$binds = array($binds);
}
// Get the sql segments around the bind markers
$segments = explode($this->bind_marker, $sql);
// The count of bind should be 1 less then the count of segments
// If there are more bind arguments trim it down
if (count($binds) >= count($segments)) {
$binds = array_slice($binds, 0, count($segments)-1);
}
// Construct the binded query
$result = $segments[0];
$i = 0;
foreach ($binds as $bind)
{
$result .= $this->escape($bind);
$result .= $segments[++$i];
}
return $result;
}
function is_write_type($sql)
{
if ( ! preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD DATA|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK)\s+/i', $sql))
{
return FALSE;
}
return TRUE;
}
function elapsed_time($decimals = 6)
{
return number_format($this->benchmark, $decimals);
}
function total_queries()
{
return $this->query_count;
}
function last_query()
{
return end($this->queries);
}
function escape($str)
{
if (is_string($str))
{
$str = "'".$this->escape_str($str)."'";
}
elseif (is_bool($str))
{
$str = ($str === FALSE) ? 0 : 1;
}
elseif (is_null($str))
{
$str = 'NULL';
}
return $str;
}
function escape_like_str($str)
{
return $this->escape_str($str, TRUE);
}
function primary($table = '')
{
$fields = $this->list_fields($table);
if ( ! is_array($fields))
{
return FALSE;
}
return current($fields);
}
function list_tables($constrain_by_prefix = FALSE)
{
// Is there a cached result?
if (isset($this->data_cache['table_names']))
{
return $this->data_cache['table_names'];
}
if (FALSE === ($sql = $this->_list_tables($constrain_by_prefix)))
{
if ($this->db_debug)
{
return $this->display_error('db_unsupported_function');
}
return FALSE;
}
$retval = array();
$query = $this->query($sql);
if ($query->num_rows() > 0)
{
foreach ($query->result_array() as $row)
{
if (isset($row['TABLE_NAME']))
{
$retval[] = $row['TABLE_NAME'];
}
else
{
$retval[] = array_shift($row);
}
}
}
$this->data_cache['table_names'] = $retval;
return $this->data_cache['table_names'];
}
// --------------------------------------------------------------------
/**
* Determine if a particular table exists
* #access public
* #return boolean
*/
function table_exists($table_name)
{
return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE;
}
// --------------------------------------------------------------------
/**
* Fetch MySQL Field Names
*
* #access public
* #param string the table name
* #return array
*/
function list_fields($table = '')
{
// Is there a cached result?
if (isset($this->data_cache['field_names'][$table]))
{
return $this->data_cache['field_names'][$table];
}
if ($table == '')
{
if ($this->db_debug)
{
return $this->display_error('db_field_param_missing');
}
return FALSE;
}
if (FALSE === ($sql = $this->_list_columns($table)))
{
if ($this->db_debug)
{
return $this->display_error('db_unsupported_function');
}
return FALSE;
}
$query = $this->query($sql);
$retval = array();
foreach ($query->result_array() as $row)
{
if (isset($row['COLUMN_NAME']))
{
$retval[] = $row['COLUMN_NAME'];
}
else
{
$retval[] = current($row);
}
}
$this->data_cache['field_names'][$table] = $retval;
return $this->data_cache['field_names'][$table];
}
// --------------------------------------------------------------------
/**
* Determine if a particular field exists
* #access public
* #param string
* #param string
* #return boolean
*/
function field_exists($field_name, $table_name)
{
return ( ! in_array($field_name, $this->list_fields($table_name))) ? FALSE : TRUE;
}
// --------------------------------------------------------------------
/**
* Returns an object with field data
*
* #access public
* #param string the table name
* #return object
*/
function field_data($table = '')
{
if ($table == '')
{
if ($this->db_debug)
{
return $this->display_error('db_field_param_missing');
}
return FALSE;
}
$query = $this->query($this->_field_data($this->_protect_identifiers($table, TRUE, NULL, FALSE)));
return $query->field_data();
}
// --------------------------------------------------------------------
/**
* Generate an insert string
*
* #access public
* #param string the table upon which the query will be performed
* #param array an associative array data of key/values
* #return string
*/
function insert_string($table, $data)
{
$fields = array();
$values = array();
foreach ($data as $key => $val)
{
$fields[] = $this->_escape_identifiers($key);
$values[] = $this->escape($val);
}
return $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values);
}
// --------------------------------------------------------------------
/**
* Generate an update string
*
* #access public
* #param string the table upon which the query will be performed
* #param array an associative array data of key/values
* #param mixed the "where" statement
* #return string
*/
function update_string($table, $data, $where)
{
if ($where == '')
{
return false;
}
$fields = array();
foreach ($data as $key => $val)
{
$fields[$this->_protect_identifiers($key)] = $this->escape($val);
}
if ( ! is_array($where))
{
$dest = array($where);
}
else
{
$dest = array();
foreach ($where as $key => $val)
{
$prefix = (count($dest) == 0) ? '' : ' AND ';
if ($val !== '')
{
if ( ! $this->_has_operator($key))
{
$key .= ' =';
}
$val = ' '.$this->escape($val);
}
$dest[] = $prefix.$key.$val;
}
}
return $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $dest);
}
// --------------------------------------------------------------------
/**
* Tests whether the string has an SQL operator
*
* #access private
* #param string
* #return bool
*/
function _has_operator($str)
{
$str = trim($str);
if ( ! preg_match("/(\s|<|>|!|=|is null|is not null)/i", $str))
{
return FALSE;
}
return TRUE;
}
// --------------------------------------------------------------------
/**
* Enables a native PHP function to be run, using a platform agnostic wrapper.
*
* #access public
* #param string the function name
* #param mixed any parameters needed by the function
* #return mixed
*/
function call_function($function)
{
$driver = ($this->dbdriver == 'postgre') ? 'pg_' : $this->dbdriver.'_';
if (FALSE === strpos($driver, $function))
{
$function = $driver.$function;
}
if ( ! function_exists($function))
{
if ($this->db_debug)
{
return $this->display_error('db_unsupported_function');
}
return FALSE;
}
else
{
$args = (func_num_args() > 1) ? array_splice(func_get_args(), 1) : null;
return call_user_func_array($function, $args);
}
}
// --------------------------------------------------------------------
/**
* Set Cache Directory Path
*
* #access public
* #param string the path to the cache directory
* #return void
*/
function cache_set_path($path = '')
{
$this->cachedir = $path;
}
// --------------------------------------------------------------------
/**
* Enable Query Caching
*
* #access public
* #return void
*/
function cache_on()
{
$this->cache_on = TRUE;
return TRUE;
}
// --------------------------------------------------------------------
/**
* Disable Query Caching
*
* #access public
* #return void
*/
function cache_off()
{
$this->cache_on = FALSE;
return FALSE;
}
// --------------------------------------------------------------------
/**
* Delete the cache files associated with a particular URI
*
* #access public
* #return void
*/
function cache_delete($segment_one = '', $segment_two = '')
{
if ( ! $this->_cache_init())
{
return FALSE;
}
return $this->CACHE->delete($segment_one, $segment_two);
}
// --------------------------------------------------------------------
/**
* Delete All cache files
*
* #access public
* #return void
*/
function cache_delete_all()
{
if ( ! $this->_cache_init())
{
return FALSE;
}
return $this->CACHE->delete_all();
}
// --------------------------------------------------------------------
/**
* Initialize the Cache Class
*
* #access private
* #return void
*/
function _cache_init()
{
if (is_object($this->CACHE) AND class_exists('CI_DB_Cache'))
{
return TRUE;
}
if ( ! class_exists('CI_DB_Cache'))
{
if ( ! #include(BASEPATH.'database/DB_cache.php'))
{
return $this->cache_off();
}
}
$this->CACHE = new CI_DB_Cache($this); // pass db object to support multiple db connections and returned db objects
return TRUE;
}
// --------------------------------------------------------------------
/**
* Close DB Connection
*
* #access public
* #return void
*/
function close()
{
if (is_resource($this->conn_id) OR is_object($this->conn_id))
{
$this->_close($this->conn_id);
}
$this->conn_id = FALSE;
}
// --------------------------------------------------------------------
/**
* Display an error message
*
* #access public
* #param string the error message
* #param string any "swap" values
* #param boolean whether to localize the message
* #return string sends the application/error_db.php template
*/
function display_error($error = '', $swap = '', $native = FALSE)
{
$LANG =& load_class('Lang', 'core');
$LANG->load('db');
$heading = $LANG->line('db_error_heading');
if ($native == TRUE)
{
$message = $error;
}
else
{
$message = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error;
}
// Find the most likely culprit of the error by going through
// the backtrace until the source file is no longer in the
// database folder.
$trace = debug_backtrace();
foreach ($trace as $call)
{
if (isset($call['file']) && strpos($call['file'], BASEPATH.'database') === FALSE)
{
// Found it - use a relative path for safety
$message[] = 'Filename: '.str_replace(array(BASEPATH, APPPATH), '', $call['file']);
$message[] = 'Line Number: '.$call['line'];
break;
}
}
$error =& load_class('Exceptions', 'core');
echo $error->show_error($heading, $message, 'error_db');
exit;
}
// --------------------------------------------------------------------
/**
* Protect Identifiers
*
* This function adds backticks if appropriate based on db type
*
* #access private
* #param mixed the item to escape
* #return mixed the item with backticks
*/
function protect_identifiers($item, $prefix_single = FALSE)
{
return $this->_protect_identifiers($item, $prefix_single);
}
function _protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE)
{
if ( ! is_bool($protect_identifiers))
{
$protect_identifiers = $this->_protect_identifiers;
}
if (is_array($item))
{
$escaped_array = array();
foreach ($item as $k => $v)
{
$escaped_array[$this->_protect_identifiers($k)] = $this->_protect_identifiers($v);
}
return $escaped_array;
}
// Convert tabs or multiple spaces into single spaces
$item = preg_replace('/[\t ]+/', ' ', $item);
// If the item has an alias declaration we remove it and set it aside.
// Basically we remove everything to the right of the first space
$alias = '';
if (strpos($item, ' ') !== FALSE)
{
$alias = strstr($item, " ");
$item = substr($item, 0, - strlen($alias));
}
// This is basically a bug fix for queries that use MAX, MIN, etc.
// If a parenthesis is found we know that we do not need to
// escape the data or add a prefix. There's probably a more graceful
// way to deal with this, but I'm not thinking of it -- Rick
if (strpos($item, '(') !== FALSE)
{
return $item.$alias;
}
// Break the string apart if it contains periods, then insert the table prefix
// in the correct location, assuming the period doesn't indicate that we're dealing
// with an alias. While we're at it, we will escape the components
if (strpos($item, '.') !== FALSE)
{
$parts = explode('.', $item);
// Does the first segment of the exploded item match
// one of the aliases previously identified? If so,
// we have nothing more to do other than escape the item
if (in_array($parts[0], $this->ar_aliased_tables))
{
if ($protect_identifiers === TRUE)
{
foreach ($parts as $key => $val)
{
if ( ! in_array($val, $this->_reserved_identifiers))
{
$parts[$key] = $this->_escape_identifiers($val);
}
}
$item = implode('.', $parts);
}
return $item.$alias;
}
// Is there a table prefix defined in the config file? If not, no need to do anything
if ($this->dbprefix != '')
{
// We now add the table prefix based on some logic.
// Do we have 4 segments (hostname.database.table.column)?
// If so, we add the table prefix to the column name in the 3rd segment.
if (isset($parts[3]))
{
$i = 2;
}
// Do we have 3 segments (database.table.column)?
// If so, we add the table prefix to the column name in 2nd position
elseif (isset($parts[2]))
{
$i = 1;
}
// Do we have 2 segments (table.column)?
// If so, we add the table prefix to the column name in 1st segment
else
{
$i = 0;
}
// This flag is set when the supplied $item does not contain a field name.
// This can happen when this function is being called from a JOIN.
if ($field_exists == FALSE)
{
$i++;
}
// Verify table prefix and replace if necessary
if ($this->swap_pre != '' && strncmp($parts[$i], $this->swap_pre, strlen($this->swap_pre)) === 0)
{
$parts[$i] = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $parts[$i]);
}
// We only add the table prefix if it does not already exist
if (substr($parts[$i], 0, strlen($this->dbprefix)) != $this->dbprefix)
{
$parts[$i] = $this->dbprefix.$parts[$i];
}
// Put the parts back together
$item = implode('.', $parts);
}
if ($protect_identifiers === TRUE)
{
$item = $this->_escape_identifiers($item);
}
return $item.$alias;
}
// Is there a table prefix? If not, no need to insert it
if ($this->dbprefix != '')
{
// Verify table prefix and replace if necessary
if ($this->swap_pre != '' && strncmp($item, $this->swap_pre, strlen($this->swap_pre)) === 0)
{
$item = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $item);
}
// Do we prefix an item with no segments?
if ($prefix_single == TRUE AND substr($item, 0, strlen($this->dbprefix)) != $this->dbprefix)
{
$item = $this->dbprefix.$item;
}
}
if ($protect_identifiers === TRUE AND ! in_array($item, $this->_reserved_identifiers))
{
$item = $this->_escape_identifiers($item);
}
return $item.$alias;
}
}
If you have wampp server use this configuration.
If you have xampp use htdocx instead of www
C/wampp/www/Your-project-folder/application/config/database.php
$active_group = 'default';
$query_builder = TRUE;
$db['default'] = array(
'dsn' => '',
'hostname' => DB_HOST,
'username' => DB_USER,
'password' => DB_PASSWORD,
'database' => DB_NAME,
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Uncomment #mysql_connect($this->hostname, $this->username, $this->password, TRUE);
on system/database/mysql/mysql_driver in db_connect method delete the # from #mysql_connect($this->hostname, $this->username, $this->password, TRUE);
This will show you the connection error and post result here
PHP 5 or above and CI 3 supports only mysqli
EDIT
$db['default'] = array(
'dsn' => '',
'hostname' => DB_HOST,
'username' => DB_USER,
'password' => DB_PASSWORD,
'database' => DB_NAME,
'dbdriver' => 'mysqli',
Refer
Edit: application/database/config.php

How to include tax in minimum order amount magento

on a french ecommerce, we always display prices including taxes.
I have enabled the minimum order amount.
I've test it, it works but the system is based on subtotal excluding taxes.
I need the system based for the this case on global amount (including taxes)
Is it possible ?
Of course I tried to work with a minimum amount excluding taxes, but I manage two tax rates. So It can't be good.
Thanks for your help.
It's possible:
Copy file app/code/core/Mage/Sales/Model/Quote.php to app/code/local/Mage/Sales/Model/Quote.php
Open copied file and find validateMinimumAmount() function:
public function validateMinimumAmount($multishipping = false) {
$storeId = $this->getStoreId();
$minOrderActive = Mage::getStoreConfigFlag('sales/minimum_order/active', $storeId);
$minOrderMulti = Mage::getStoreConfigFlag('sales/minimum_order/multi_address', $storeId);
$minAmount = Mage::getStoreConfig('sales/minimum_order/amount', $storeId);
if (!$minOrderActive) {
return true;
}
$addresses = $this->getAllAddresses();
if ($multishipping) {
if ($minOrderMulti) {
foreach ($addresses as $address) {
foreach ($address->getQuote()->getItemsCollection() as $item) {
$amount = $item->getBaseRowTotal() - $item->getBaseDiscountAmount();
if ($amount < $minAmount) {
return false;
}
}
}
} else {
$baseTotal = 0;
foreach ($addresses as $address) {
/* #var $address Mage_Sales_Model_Quote_Address */
$baseTotal += $address->getBaseSubtotalWithDiscount();
}
if ($baseTotal < $minAmount) {
return false;
}
}
} else {
foreach ($addresses as $address) {
/* #var $address Mage_Sales_Model_Quote_Address */
if (!$address->validateMinimumAmount()) {
return false;
}
}
}
return true;
}
Replace this function with next:
public function validateMinimumAmount($multishipping = false)
{
$storeId = $this->getStoreId();
$minOrderActive = Mage::getStoreConfigFlag('sales/minimum_order/active', $storeId);
$minOrderMulti = Mage::getStoreConfigFlag('sales/minimum_order/multi_address', $storeId);
$minAmount = Mage::getStoreConfig('sales/minimum_order/amount', $storeId);
if (!$minOrderActive) {
return true;
}
$addresses = $this->getAllAddresses();
if ($multishipping) {
if ($minOrderMulti) {
foreach ($addresses as $address) {
$grandTotal = $address->getQuote()->collectTotals()->getGrandTotal();
if ($grandTotal < $minAmount) {
return false;
}
}
} else {
$grandTotal = 0;
foreach ($addresses as $address) {
/* #var $address Mage_Sales_Model_Quote_Address */
$grandTotal += $address->getQuote()->collectTotals()->getGrandTotal();
}
if ($grandTotal < $minAmount) {
return false;
}
}
} else {
foreach ($addresses as $address) {
/* #var $address Mage_Sales_Model_Quote_Address */
$grandTotal = $address->getQuote()->collectTotals()->getGrandTotal();
if ($grandTotal < $minAmount) {
return false;
}
}
}
return true;
}
Clear Magento Cache (System->Configuration->Cache Management).
In new function we use many collectTotals() calls for be sure what Grand Total already calculated but don't worry about calculations overhead because collectTotals() function contains protect from double totals calculation:
if ($this->getTotalsCollectedFlag()) {
return $this;
}
Rewrite the model Mage_Sales_Model_Quote_Address and override the method validateMinimumAmount:
<?php
class StackExchange_MinimumOrderValue_Model_Quote_Address extends Mage_Sales_Model_Quote_Address
{
/**
* Validate minimum amount
*
* #return bool
*/
public function validateMinimumAmount()
{
$storeId = $this->getQuote()->getStoreId();
if (!Mage::getStoreConfigFlag('sales/minimum_order/active', $storeId)) {
return true;
}
if ($this->getQuote()->getIsVirtual() && $this->getAddressType() == self::TYPE_SHIPPING) {
return true;
} elseif (!$this->getQuote()->getIsVirtual() && $this->getAddressType() != self::TYPE_SHIPPING) {
return true;
}
$amount = Mage::getStoreConfig('sales/minimum_order/amount', $storeId);
// $this->getBaseSubtotalInclTax() is sometimes null, so that we calculate it ourselves
$referenceAmount = $this->getBaseSubtotal() + $this->getBaseTaxAmount() + $this->getBaseHiddenTaxAmount() - $this->getBaseShippingTaxAmount() - abs($this->getBaseDiscountAmount());
if ($referenceAmount < $amount) {
return false;
}
return true;
}
}
The interesting thing is that $this->getBaseSubtotalInclTax() does not work. It is sometimes null - specifically, if you proceed from the cart to the checkout page. Hence, we calculate the subtotal inclusive tax ourselves. I hope my formula is correct, but it seems to work:
$referenceAmount = $this->getBaseSubtotal() + $this->getBaseTaxAmount() + $this->getBaseHiddenTaxAmount() - $this->getBaseShippingTaxAmount() - abs($this->getBaseDiscountAmount());

Magento - Apply Tax On Custom Quote Totals Field

I have created a surcharge module for Magento which adds a custom total field to the quote. The surcharge is input into Magento including tax. I have successfully got the module adding the surcharge to the quote and the grand total is correct on the checkout page.
My issue comes when trying to apply tax to the surcharge so that it gets included and displayed in the tax field on the checkout page. Currently it only includes the tax for the products and the shipping.
I have managed to calculate the tax for the surcharge but cant't get the tax applied to the quote so that it is displayed in the tax field but also don't think my approach is quite correct either. Any help would be much appreciated.
class ********_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract {
protected $_config = null;
public function __construct()
{
$this->setCode('surcharge_price');
$this->_config = Mage::getSingleton('tax/config');
$this->_store = Mage::app()->getStore();
}
protected function _calculateTax(Mage_Sales_Model_Quote_Address $address)
{
$calculator = Mage::getSingleton('tax/calculation');
$inclTax = $this->_config->priceIncludesTax($this->_store);
$taxRateRequest = $calculator->getRateRequest(
$address,
$address->getQuote()->getBillingAddress(),
$address->getQuote()->getCustomerTaxClassId(),
$this->_store
);
$taxRateRequest->setProductClassId(Mage::getStoreConfig('********/surcharges/tax_class', $this->_store));
$rate = $calculator->getRate($taxRateRequest);
$baseTax = $tax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true);
}
/**
* Collect address subtotal
*
* #param ********_Surcharges_Model_Quote_Address $address
* #return ********_Surcharges_Model_Quote_Address_Total_Surcharge
*/
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
$this->_setAmount(0)->_setBaseAmount(0);
// If Surcharges Is Enabled Then Calculate Away :-)
if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) {
$items = $this->_getAddressItems($address);
if (!count($items)) {
return $this;
}
// Calculate Total Surcharge For Items In Quote (Base Prices!)
$surcharge = 0.0;
foreach ($items as $item) {
$price = $item->getData('base_surcharge_price', null);
if(isset($price)) {
$surcharge += $item->getData('base_surcharge_price') * $item->getQty();
}
}
$this->_setAmount($surcharge);
$this->_setBaseAmount($surcharge);
$this->_calculateTax($address);
}
return $this;
}
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
if(Mage::getStoreConfig('********/surcharges/surcharge_enabled')) {
$surcharge = $address->getSurchargePriceAmount();
if(isset($surcharge) && $surcharge > 0) {
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::getStoreConfig('********/surcharges/surcharge_label'),
'value' => $surcharge
));
}
}
return $this;
}
public function getLabel()
{
return Mage::getStoreConfig('********/surcharges/surcharge_label');
}
I managed to solve this this using the following code. Not the best solution but spent hours trying to do it and didn't get anywhere fast. Asterix's need to be replaced.
class *****_Deposits_Model_Quote_Address_Total_Surcharge extends Mage_Sales_Model_Quote_Address_Total_Abstract {
protected $_taxConfig = null;
public function __construct()
{
$this->setCode('surcharge_price');
$this->_taxConfig = Mage::getSingleton('tax/config');
$this->_store = Mage::app()->getStore();
}
protected function _calculateTax(Mage_Sales_Model_Quote_Address $address)
{
$calculator = Mage::getSingleton('tax/calculation');
$calculator->setCustomer($address->getQuote()->getCustomer());
$inclTax = $this->_taxConfig->priceIncludesTax($this->_store);
$taxRateRequest = $calculator->getRateRequest(
$address,
$address->getQuote()->getBillingAddress(),
$address->getQuote()->getCustomerTaxClassId(),
$this->_store
);
$taxRateRequest->setProductClassId(Mage::getStoreConfig('*****/surcharges/tax_class', $this->_store));
$rate = $calculator->getRate($taxRateRequest);
if($rate > 0.0) {
$baseTax = $calculator->calcTaxAmount($address->getBaseSurchargePriceAmount(), $rate, $inclTax, true);
$tax = $address->getQuote()->getStore()->convertPrice($baseTax, false);
$address->addTotalAmount('tax', $tax);
$address->addBaseTotalAmount('tax', $baseTax);
$rates = array();
foreach ($address->getAppliedTaxes() as $rate) {
$rate['amount'] = $rate['amount'] + $tax;
$rate['base_amount'] = $rate['base_amount'] + $baseTax;
$rates[] = $rate;
}
$address->setAppliedTaxes($rates);
if($inclTax) {
$address->setGrandTotal($address->getGrandTotal() - $tax);
$address->setBaseGrandTotal($address->getBaseGrandTotal() - $baseTax);
}
}
}
/**
* Collect address subtotal
*
* #param *****_Surcharges_Model_Quote_Address $address
* #return *****_Surcharges_Model_Quote_Address_Total_Surcharge
*/
public function collect(Mage_Sales_Model_Quote_Address $address)
{
parent::collect($address);
// Clear Cached Values As Multiple Addresses Causes Values To Be Added Twice Otherwise!
$this->_setAmount(0)->_setBaseAmount(0);
// If Surcharges Is Enabled Then Calculate Away :-)
if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) {
$items = $this->_getAddressItems($address);
if (!count($items)) {
return $this;
}
// Calculate Total Surcharge For Items In Quote (Base Prices!)
$surcharge = 0.0;
foreach ($items as $item) {
$price = $item->getData('base_surcharge_price', null);
if(isset($price)) {
$surcharge += $item->getData('base_surcharge_price') * $item->getQty();
}
}
$this->_setAmount($address->getQuote()->getStore()->convertPrice($surcharge, false));
$this->_setBaseAmount($surcharge);
$this->_calculateTax($address);
}
return $this;
}
/**
* Assign subtotal amount and label to address object
*
* #param *****_Surcharges_Model_Quote_Address $address
* #return *****_Surcharges_Model_Quote_Address_Total_Surcharge
*/
public function fetch(Mage_Sales_Model_Quote_Address $address)
{
if(Mage::getStoreConfig('*****/surcharges/surcharge_enabled')) {
$surcharge = $address->getSurchargePriceAmount();
if(isset($surcharge) && $surcharge > 0) {
$address->addTotal(array(
'code' => $this->getCode(),
'title' => Mage::getStoreConfig('*****/surcharges/surcharge_label'),
'value' => $surcharge
));
}
}
return $this;
}
/**
* Get Surcharge label
*
* #return string
*/
public function getLabel()
{
return Mage::getStoreConfig('*****/surcharges/surcharge_label');
}
}

Fatal error: Call to a member function getId() on a non-object in... Magento Problem

I'm trying to setup ZetaPrint on a website. On one of the last steps, I have to do ZetaPrints templates synchronization profile, on System > Import/Export > Advanced Profiles
But When I do the "Add new profile" I get this error:
Fatal error: Call to a member function getId() on a non-object in /nfs/c06/h02/mnt/93577/domains/cannafresh.com/html/store/app/code/core/Mage/Adminhtml/controllers/System/Convert/ProfileController.php on line 117
The file is the original one from magento, I can't figure out the error... can anyone help me? Here's the whole code below:
<?php
/**
* Convert Advanced admin controller
*
* #category Mage
* #package Mage_Adminhtml
* #author Magento Core Team
*/
class Mage_Adminhtml_System_Convert_ProfileController extends Mage_Adminhtml_Controller_Action
{
protected function _initProfile($idFieldName = 'id')
{
$this->_title($this->__('System'))
->_title($this->__('Import and Export'))
->_title($this->__('Profiles'));
$profileId = (int) $this->getRequest()->getParam($idFieldName);
$profile = Mage::getModel('dataflow/profile');
if ($profileId) {
$profile->load($profileId);
if (!$profile->getId()) {
Mage::getSingleton('adminhtml/session')->addError('The profile you are trying to save no longer exists');
$this->_redirect('*/*');
return false;
}
}
Mage::register('current_convert_profile', $profile);
return $this;
}
/**
* Profiles list action
*/
public function indexAction()
{
$this->_title($this->__('System'))
->_title($this->__('Import and Export'))
->_title($this->__('Advanced Profiles'));
if ($this->getRequest()->getQuery('ajax')) {
$this->_forward('grid');
return;
}
$this->loadLayout();
/**
* Set active menu item
*/
$this->_setActiveMenu('system/convert');
/**
* Append profiles block to content
*/
$this->_addContent(
$this->getLayout()->createBlock('adminhtml/system_convert_profile', 'convert_profile')
);
/**
* Add breadcrumb item
*/
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Import/Export'), Mage::helper('adminhtml')->__('Import/Export Advanced'));
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Advanced Profiles'), Mage::helper('adminhtml')->__('Advanced Profiles'));
$this->renderLayout();
}
public function gridAction()
{
$this->getResponse()->setBody($this->getLayout()->createBlock('adminhtml/system_convert_profile_grid')->toHtml());
}
/**
* Profile edit action
*/
public function editAction()
{
$this->_initProfile();
$this->loadLayout();
$profile = Mage::registry('current_convert_profile');
// set entered data if was error when we do save
$data = Mage::getSingleton('adminhtml/session')->getConvertProfileData(true);
if (!empty($data)) {
$profile->addData($data);
}
$this->_title($profile->getId() ? $profile->getName() : $this->__('New Profile'));
$this->_setActiveMenu('system/convert');
$this->_addContent(
$this->getLayout()->createBlock('adminhtml/system_convert_profile_edit')
);
/**
* Append edit tabs to left block
*/
$this->_addLeft($this->getLayout()->createBlock('adminhtml/system_convert_profile_edit_tabs'));
$this->renderLayout();
}
/**
* Create new profile action
*/
public function newAction()
{
$this->_forward('edit');
}
/**
* Delete profile action
*/
public function deleteAction()
{
$this->_initProfile();
$profile = Mage::registry('current_convert_profile');
if ($profile->getId()) {
try {
$profile->delete();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('The profile has been deleted.'));
}
catch (Exception $e){
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
}
}
$this->_redirect('*/*');
}
/**
* Save profile action
*/
public function saveAction()
{
if ($data = $this->getRequest()->getPost()) {
if (!$this->_initProfile('profile_id')) {
return ;
}
$profile = Mage::registry('current_convert_profile');
// Prepare profile saving data
if (isset($data)) {
$profile->addData($data);
}
try {
$profile->save();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('The profile has been saved.'));
}
catch (Exception $e){
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setConvertProfileData($data);
$this->getResponse()->setRedirect($this->getUrl('*/*/edit', array('id'=>$profile->getId())));
return;
}
if ($this->getRequest()->getParam('continue')) {
$this->_redirect('*/*/edit', array('id'=>$profile->getId()));
} else {
$this->_redirect('*/*');
}
}
else {
Mage::getSingleton('adminhtml/session')->addError($this->__('Invalid POST data (please check post_max_size and upload_max_filesize settings in your php.ini file).'));
$this->_redirect('*/*');
}
}
public function runAction()
{
$this->_initProfile();
$this->loadLayout();
$this->renderLayout();
}
public function batchRunAction()
{
if ($this->getRequest()->isPost()) {
$batchId = $this->getRequest()->getPost('batch_id',0);
$rowIds = $this->getRequest()->getPost('rows');
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
/* #var $batchModel Mage_Dataflow_Model_Batch */
if (!$batchModel->getId()) {
//exit
return ;
}
if (!is_array($rowIds) || count($rowIds) < 1) {
//exit
return ;
}
if (!$batchModel->getAdapter()) {
//exit
return ;
}
$batchImportModel = $batchModel->getBatchImportModel();
$importIds = $batchImportModel->getIdCollection();
$adapter = Mage::getModel($batchModel->getAdapter());
$adapter->setBatchParams($batchModel->getParams());
$errors = array();
$saved = 0;
foreach ($rowIds as $importId) {
$batchImportModel->load($importId);
if (!$batchImportModel->getId()) {
$errors[] = Mage::helper('dataflow')->__('Skip undefined row.');
continue;
}
try {
$importData = $batchImportModel->getBatchData();
$adapter->saveRow($importData);
}
catch (Exception $e) {
$errors[] = $e->getMessage();
continue;
}
$saved ++;
}
$result = array(
'savedRows' => $saved,
'errors' => $errors
);
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
public function batchFinishAction()
{
if ($batchId = $this->getRequest()->getParam('id')) {
$batchModel = Mage::getModel('dataflow/batch')->load($batchId);
/* #var $batchModel Mage_Dataflow_Model_Batch */
if ($batchModel->getId()) {
$result = array();
try {
$batchModel->beforeFinish();
}
catch (Mage_Core_Exception $e) {
$result['error'] = $e->getMessage();
}
catch (Exception $e) {
$result['error'] = Mage::helper('adminhtml')->__('An error occurred while finishing process. Please refresh the cache');
}
$batchModel->delete();
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
}
}
}
/**
* Customer orders grid
*
*/
public function historyAction() {
$this->_initProfile();
$this->getResponse()->setBody($this->getLayout()->createBlock('adminhtml/system_convert_profile_edit_tab_history')->toHtml());
}
protected function _isAllowed()
{
// switch ($this->getRequest()->getActionName()) {
// case 'index':
// $aclResource = 'admin/system/convert/profiles';
// break;
// case 'grid':
// $aclResource = 'admin/system/convert/profiles';
// break;
// case 'run':
// $aclResource = 'admin/system/convert/profiles/run';
// break;
// default:
// $aclResource = 'admin/system/convert/profiles/edit';
// break;
// }
return Mage::getSingleton('admin/session')->isAllowed('admin/system/convert/profiles');
}
}
Thanks Luis

Resources