Version Notes
Simplify sales and use tax calculation, compliance, and management in the cloud!
Download this release
Release Info
Developer | Hara Partners |
Extension | SalesTax_Connector |
Version | 2.0.0 |
Comparing to | |
See all releases |
Version 2.0.0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Call/Index.php +1 -0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Call/Index/Grid.php +3 -0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Error/Index.php +2 -0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Error/Index/Grid.php +1 -0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/System/Config/Form/Field/Export.php +3 -0
- app/code/local/Harapartners/SpeedTax/Block/Adminhtml/System/Config/Form/Field/Ping.php +3 -0
- app/code/local/Harapartners/SpeedTax/Block/Checkout/Onepage/Shipping/Method/Available.php +2 -0
- app/code/local/Harapartners/SpeedTax/Helper/Data.php +2 -0
- app/code/local/Harapartners/SpeedTax/Model/Abstract.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Adminhtml/Usregions.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Checkout/Type/Multishipping.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Call.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Error.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Call.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Call/Collection.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Error.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Error/Collection.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Observer.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Sales/Quote/Address.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Session.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Speedtax/Abstract.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Speedtax/Address.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Speedtax/Calculate.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Speedtax/Exception/Address.php +3 -0
- app/code/local/Harapartners/SpeedTax/Model/Tax/Sales/Total/Quote/Tax.php +3 -0
- app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/Log/CallController.php +3 -0
- app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/Log/ErrorController.php +4 -0
- app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/PingController.php +3 -0
- app/code/local/Harapartners/SpeedTax/etc/config.xml +202 -0
- app/code/local/Harapartners/SpeedTax/etc/system.xml +180 -0
- app/code/local/Harapartners/SpeedTax/lib/Credentials.inc +25 -0
- app/code/local/Harapartners/SpeedTax/lib/SpeedTaxApi.inc +963 -0
- app/code/local/Harapartners/SpeedTax/lib/SpeedTaxUtil.inc +263 -0
- app/code/local/Harapartners/SpeedTax/lib/WsSecurity.inc +31 -0
- app/code/local/Harapartners/SpeedTax/lib/WsSecurityTypes.inc +269 -0
- app/code/local/Harapartners/SpeedTax/sql/speedtax_setup/mysql4-install-2.0.0.php +30 -0
- app/etc/modules/Harapartners_SpeedTax.xml +24 -0
- package.xml +18 -0
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Call/Index.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_Log_Call_Index extends Mage_Adminhtml_Block_Widget_Grid_Container{ public function __construct(){ $this->PpvZCavP = 'speedtax'; $this->UwSUGSnh = 'adminhtml_log_call_index'; $this->hOCRNgeO = Mage::helper('speedtax')->__('Log Table'); parent::__construct(); } }
|
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Call/Index/Grid.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
Copyright Notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_Log_Call_Index_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct(){ parent::__construct(); $this->setId('SpeedTaxLogGrid'); } protected function _prepareCollection(){ $lDaybsdL = Mage::getModel('speedtax/log_call'); $JunnAivC = $lDaybsdL->getCollection(); $this->setCollection($JunnAivC); parent::_prepareCollection(); return $this; } protected function _getStore(){ $yKIwhAhG = (int) $this->getRequest()->getParam('store', 0); return Mage::app()->getStore($yKIwhAhG); } protected function _prepareColumns(){ $this->addColumn('log_id', array( 'header' => Mage::helper('speedtax')->__('Log ID'), 'align' => 'center', 'width' => '50px', 'index' => 'log_id' )); $this->addColumn('event', array( 'header' => Mage::helper('speedtax')->__('Event'), 'align' => 'center', 'width' => '50px', 'index' => 'event', 'type' => 'text' )); $this->addColumn('result_type', array( 'header' => Mage::helper('speedtax')->__('Result Type'), 'align' => 'center', 'width' => '50px', 'index' => 'result_type', 'type' => 'text' )); $this->addColumn('invoice_num', array( 'header' => Mage::helper('speedtax')->__('Invoice Number'), 'align' => 'center', 'width' => '50px', 'index' => 'invoice_num', 'type' => 'int' )); $this->addColumn('gross', array( 'header' => Mage::helper('speedtax')->__('Gross'), 'align' => 'center', 'width' => '50px', 'index' => 'gross', 'type' => 'int' )); $this->addColumn('exempt', array( 'header' => Mage::helper('speedtax')->__('Exempt'), 'align' => 'center', 'width' => '50px', 'index' => 'exempt', 'type' => 'int' )); $this->addColumn('tax', array( 'header' => Mage::helper('speedtax')->__('Tax'), 'align' => 'center', 'width' => '50px', 'index' => 'tax', 'type' => 'int' )); $this->addColumn('created_at', array( 'header' => Mage::helper('speedtax')->__('Created At'), 'align' => 'center', 'width' => '150px', 'index' => 'created_at', 'type' => 'datetime', 'gmtoffset' => true )); $this->addExportType('*/*/exportCsv', Mage::helper('speedtax')->__('CSV')); $this->addExportType('*/*/exportXml', Mage::helper('speedtax')->__('XML')); return parent::_prepareColumns(); } public function getRowUrl($efUpRTYa){ return $this->getUrl('*/*/edit', array( 'store'=>$this->getRequest()->getParam('store'), 'id'=>$efUpRTYa->getId() )); } }
|
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Error/Index.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_Log_Error_Index extends Mage_Adminhtml_Block_Widget_Grid_Container{ public function __construct(){ $this->PpvZCavP = 'speedtax'; $this->UwSUGSnh = 'adminhtml_log_error_index'; $this->hOCRNgeO = Mage::helper('speedtax')->__('Error Log Table'); parent::__construct(); } }
|
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/Log/Error/Index/Grid.php
ADDED
@@ -0,0 +1 @@
|
|
|
1 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_Log_Error_Index_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct(){ parent::__construct(); $this->setId('SpeedTaxLogGrid'); } protected function _prepareCollection(){ $lDaybsdL = Mage::getModel('speedtax/log_error'); $JunnAivC = $lDaybsdL->getCollection(); $this->setCollection($JunnAivC); parent::_prepareCollection(); return $this; } protected function _getStore(){ $yKIwhAhG = (int) $this->getRequest()->getParam('store', 0); return Mage::app()->getStore($yKIwhAhG); } protected function _prepareColumns(){ $this->addColumn('log_id', array( 'header' => Mage::helper('speedtax')->__('Log ID'), 'align' => 'center', 'width' => '50px', 'index' => 'log_id' )); $this->addColumn('event', array( 'header' => Mage::helper('speedtax')->__('Event'), 'align' => 'center', 'width' => '50px', 'index' => 'event', 'type' => 'text' )); $this->addColumn('result_type', array( 'header' => Mage::helper('speedtax')->__('Result Type'), 'align' => 'center', 'width' => '50px', 'index' => 'result_type', 'type' => 'text' )); $this->addColumn('message', array( 'header' => Mage::helper('speedtax')->__('Message'), 'align' => 'center', 'width' => '50px', 'index' => 'message', 'type' => 'text' )); $this->addColumn('address_shipping_from', array( 'header' => Mage::helper('speedtax')->__('Address Shipping From'), 'align' => 'center', 'width' => '50px', 'index' => 'address_shipping_from', 'type' => 'text' )); $this->addColumn('address_shipping_to', array( 'header' => Mage::helper('speedtax')->__('Address Shipping To'), 'align' => 'center', 'width' => '50px', 'index' => 'address_shipping_to', 'type' => 'text' )); $this->addColumn('customer_name', array( 'header' => Mage::helper('speedtax')->__('Customer Name'), 'align' => 'center', 'width' => '50px', 'index' => 'customer_name', 'type' => 'text' )); $this->addColumn('created_at', array( 'header' => Mage::helper('speedtax')->__('Created At'), 'align' => 'center', 'width' => '150px', 'index' => 'created_at', 'type' => 'datetime', 'gmtoffset' => true )); $this->addExportType('*/*/exportCsv', Mage::helper('speedtax')->__('CSV')); $this->addExportType('*/*/exportXml', Mage::helper('speedtax')->__('XML')); return parent::_prepareColumns(); } public function getRowUrl($efUpRTYa){ return $this->getUrl('*/*/edit', array( 'store'=>$this->getRequest()->getParam('store'), 'id'=>$efUpRTYa->getId() )); } }
|
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/System/Config/Form/Field/Export.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_System_Config_Form_Field_Export extends Mage_Adminhtml_Block_System_Config_Form_Field { protected function _getElementHtml(Varien_Data_Form_Element_Abstract $kupRLniX) { $EgwoKNfR = $this->getLayout ()->createBlock ( 'adminhtml/widget_button' ); $RErPqTMk = array ('website' => $EgwoKNfR->getRequest ()->getParam ( 'website' ) ); $gyhPtFAw = array ( 'label' => Mage::helper ( 'adminhtml' )->__ ( 'Export Call Log' ), 'onclick' => 'setLocation(\'' . Mage::helper ( 'adminhtml' )->getUrl ( "speedtax/adminhtml_log_call/exportCsv", $RErPqTMk ) . '\')', 'class' => '', 'note' => Mage::helper ( 'speedtax' )->__ ( 'Test Connection' ) ); $KEfkflXa = array( 'label' => Mage::helper('adminhtml')->__('Export Error Log'), 'onclick' => 'setLocation(\''.Mage::helper('adminhtml')->getUrl("speedtax/adminhtml_log_error/exportCsv", $RErPqTMk) . '\')', 'class' => '', ); $jSOBYFZH = $EgwoKNfR->setData ( $gyhPtFAw )->toHtml (). ' '; $jSOBYFZH .= $EgwoKNfR->setData($KEfkflXa)->toHtml(); return $jSOBYFZH; } }
|
app/code/local/Harapartners/SpeedTax/Block/Adminhtml/System/Config/Form/Field/Ping.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Block_Adminhtml_System_Config_Form_Field_Ping extends Mage_Adminhtml_Block_System_Config_Form_Field { protected function _getElementHtml(Varien_Data_Form_Element_Abstract $kupRLniX) { $EgwoKNfR = $this->getLayout ()->createBlock ( 'adminhtml/widget_button' ); $RErPqTMk = array ('website' => $EgwoKNfR->getRequest ()->getParam ( 'website' ) ); $gyhPtFAw = array ( 'label' => Mage::helper ( 'adminhtml' )->__ ( 'Test SalesTax.com Connection' ), 'onclick' => 'setLocation(\'' . Mage::helper ( 'adminhtml' )->getUrl ( "speedtax/adminhtml_ping/ping", $RErPqTMk ) . '\')', 'class' => '', 'note' => Mage::helper ( 'speedtax' )->__ ( 'Test Connection' ) ); $jSOBYFZH = $EgwoKNfR->setData ( $gyhPtFAw )->toHtml (); return $jSOBYFZH; } }
|
app/code/local/Harapartners/SpeedTax/Block/Checkout/Onepage/Shipping/Method/Available.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
<?php class Harapartners_SpeedTax_Block_Checkout_Onepage_Shipping_Method_Available extends Mage_Checkout_Block_Onepage_Shipping_Method_Available { protected function _toHtml () { $MapsTZNK = ''; if(!Mage::getSingleton('speedtax/session')->eBJLtuSo()){ $resolvedAddress = Mage::getSingleton('speedtax/session')->XDhpYuYI(); $RGQeeGcs = $resolvedAddress->address.", ".$resolvedAddress->city.", ".$resolvedAddress->state." ".$resolvedAddress->zip; } return $MapsTZNK . parent::_toHtml(); } }
|
app/code/local/Harapartners/SpeedTax/Helper/Data.php
ADDED
@@ -0,0 +1,2 @@
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
<?php class Harapartners_SpeedTax_Helper_Data extends Mage_Core_Helper_Abstract{ public function pdOCjpaT($address, $yKIwhAhG) { return Mage::getStoreConfig('speedtax/speedtax/validate_address', $yKIwhAhG); } public function gYoeJTzo(){ return dirname(dirname(__FILE__)).DS.'lib'.DS; } public function wmnfSKri(){ include_once $this->gYoeJTzo().'SpeedTaxApi.inc'; include_once $this->gYoeJTzo().'SpeedTaxUtil.inc'; } }
|
app/code/local/Harapartners/SpeedTax/Model/Abstract.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php abstract class Harapartners_SpeedTax_Model_Abstract extends Varien_Object { public function getSession () { return Mage::getSingleton('speedtax/session'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Adminhtml/Usregions.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_Speedtax_Model_Adminhtml_Usregions { protected $TQwlivGE; public function toOptionArray($WLsgQNrS=false) { if (!$this->TQwlivGE) { $DFQHFRaZ = Mage::getModel( 'directory/region' )->getCollection(); $DFQHFRaZ->getSelect()->where( 'country_id = ?', 'US' ); $ppAkdgdY = array(); foreach( $DFQHFRaZ as $cOdXbkkz ) { $ppAkdgdY[] = array( 'label' => $cOdXbkkz->getDefaultName(), 'value' => $cOdXbkkz->getId() ); } $this->TQwlivGE = $ppAkdgdY; } $watjSivp = $this->TQwlivGE; if(!$WLsgQNrS){ array_unshift($watjSivp, array('value'=>'', 'label'=>'')); } return $watjSivp; } }
|
app/code/local/Harapartners/SpeedTax/Model/Checkout/Type/Multishipping.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Checkout_Type_Multishipping extends Mage_Checkout_Model_Type_Abstract { protected function _validate() { $MIQTbhnH = Mage::helper ( 'checkout' ); $Qbyijbwf = $this->getQuote (); if (! $Qbyijbwf->getIsMultiShipping ()) { Mage::throwException ( $MIQTbhnH->__ ( 'Invalid checkout type.' ) ); } $JhanrwSn = $Qbyijbwf->getAllShippingAddresses (); foreach ( $JhanrwSn as $address ) { $jNQAvRZp = $address->validate (); if ($jNQAvRZp !== true) { Mage::throwException ( $MIQTbhnH->__ ( 'Please check shipping addresses information.' ) ); } $method = $address->getShippingMethod (); $wOxYshhb = $address->getShippingRateByCode ( $method ); if (! $method || ! $wOxYshhb) { Mage::throwException($MIQTbhnH->__('Please specify shipping methods for all addresses.')); } } $jNQAvRZp = $Qbyijbwf->getBillingAddress ()->validate (); if ($jNQAvRZp !== true) { Mage::throwException ( $MIQTbhnH->__ ( 'Please check billing address information.' ) ); } return $this; } }
|
app/code/local/Harapartners/SpeedTax/Model/Log.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log extends Mage_Core_Model_Abstract { public function log($GGDYkQaU) { if ($GGDYkQaU ["error"] == true) { $bxvvPkgx = Mage::getModel ( 'speedtax/log_error' ); $bxvvPkgx->setData ( 'event', $GGDYkQaU ['event'] ); $bxvvPkgx->setData ( 'result_type', $GGDYkQaU ['result_type'] ); $bxvvPkgx->setData ( 'message', $GGDYkQaU ['message'] ); $bxvvPkgx->setData ( 'address_shipping_from', $GGDYkQaU ['address_shipping_from'] ); $bxvvPkgx->setData ( 'address_shipping_to', $GGDYkQaU ['address_shipping_to'] ); $bxvvPkgx->setData ( 'customer_name', $this ['customer_name'] ); $bxvvPkgx->save (); } if ($GGDYkQaU ["call"] == true) { $bxvvPkgx = Mage::getModel ( 'speedtax/log_call' ); $bxvvPkgx->setData ( 'event', $GGDYkQaU ['event'] ); $bxvvPkgx->setData ( 'result_type', $GGDYkQaU ['result_type'] ); $bxvvPkgx->setData ( 'invoice_num', $GGDYkQaU ['invoice_num'] ); $bxvvPkgx->setData ( 'gross', $GGDYkQaU['gross']); $bxvvPkgx->setData ( 'exempt', $GGDYkQaU ['exempt'] ); $bxvvPkgx->setData ( 'tax', $GGDYkQaU['tax']); $bxvvPkgx->save (); } } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Call.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Call extends Mage_Core_Model_Abstract { protected function _construct() { $this->_init ( 'speedtax_log/call' ); } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Error.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Error extends Mage_Core_Model_Abstract { protected function _construct() { $this->_init ( 'speedtax_log/error' ); } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Call.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Mysql4_Call extends Mage_Core_Model_Mysql4_Abstract { protected function _construct() { $this->_init('speedtax_log/call', 'log_id'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Call/Collection.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Mysql4_Call_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { $this->_init('speedtax_log/call'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Error.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Mysql4_Error extends Mage_Core_Model_Mysql4_Abstract { protected function _construct() { $this->_init('speedtax_log/error', 'log_id'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Log/Mysql4/Error/Collection.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Log_Mysql4_Error_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { $this->_init('speedtax_log/error'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Observer.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Observer extends Mage_Core_Model_Abstract { public function xHiquKGh(Varien_Event_Observer $PdTkCJKp) { $invoice = $PdTkCJKp->getEvent()->getInvoice(); try { $qNxaFjve = Mage::getModel ( 'speedtax/speedtax_calculate' ); $qNxaFjve->BrNWSVbZ($invoice); } catch( Exception $e ) { throw new $e; } } public function gPsRLtJr(Varien_Event_Observer $PdTkCJKp) { $sRLVBLYD = $PdTkCJKp->getEvent()->getCreditmemo(); try { $qNxaFjve = Mage::getModel ( 'speedtax/speedtax_calculate' ); $qNxaFjve->tvPiWdAy($sRLVBLYD); } catch( Exception $e ) { throw new $e; } } }
|
app/code/local/Harapartners/SpeedTax/Model/Sales/Quote/Address.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Sales_Quote_Address extends Mage_Sales_Model_Quote_Address { protected $OOBJuQzt = null; protected $nntwRomV = null; const DEFAULT_CUSTOMER_ORDER_COLLECTION_SIZE = 2; public function MxrdJHLy(){ if($this->nntwRomV === null){ $this->nntwRomV = Mage::getModel('sales/order')->getCollection(); $dtwSxNDy = $this->getCustomerId(); $this->nntwRomV->getSelect() ->where('`customer_id` = ?', $dtwSxNDy) ->where('`relation_parent_id` IS NULL') ->order('created_at') ->limit(self::DEFAULT_CUSTOMER_ORDER_COLLECTION_SIZE); } return $this->nntwRomV; } public function dwuswvFI() { return $this->OOBJuQzt; } public function sflKFBFS(Harapartners_SpeedTax_Model_SpeedTax_Address $RnHlOoRC) { $this->OOBJuQzt = $RnHlOoRC; return $this; } public function validate () { $result = parent::validate(); if ($result !== true) { return $result; } $RmBoraUt = Mage::app()->getRequest()->getPost('billing', array()); $JTwfnAJa = isset($RmBoraUt['use_for_shipping']) ? (int)$RmBoraUt['use_for_shipping'] : 0; if($this->getAddressType() == self::TYPE_SHIPPING || $this->vDDfhMmk() || $JTwfnAJa ) { if(!$this->dwuswvFI()) { $rjOPOUfi = Mage::getModel('speedtax/speedtax_address')->setAddress($this); $this->sflKFBFS($rjOPOUfi); } return $this->dwuswvFI()->validate(); } return $result; } }
|
app/code/local/Harapartners/SpeedTax/Model/Session.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Session extends Mage_Core_Model_Session_Abstract { public function __construct() { $this->init('speedtax'); } }
|
app/code/local/Harapartners/SpeedTax/Model/Speedtax/Abstract.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php abstract class Harapartners_SpeedTax_Model_Speedtax_Abstract extends Harapartners_SpeedTax_Model_Abstract { protected static $icWjeIgO = false; protected $dSEISXXX = null; protected function NlNowdnP($CawVBdmU = null) { $UsvhtHRY = Mage::getStoreConfig('shipping/origin/country_id', $CawVBdmU); $zip = Mage::getStoreConfig('shipping/origin/postcode', $CawVBdmU); $JeKDKbwY = Mage::getStoreConfig('shipping/origin/region_id', $CawVBdmU); $state = Mage::getModel('directory/region')->load($JeKDKbwY)->getCode(); $city = Mage::getStoreConfig('shipping/origin/city', $CawVBdmU); $CfYMbngw = Mage::getStoreConfig('shipping/origin/street', $CawVBdmU); $address = $this->GPGUZyff($CfYMbngw, '', $city, $state, $zip, $UsvhtHRY); return $this->dSEISXXX->wFTPVSvd($address); } protected function LxLnQHQm($address) { $CfYMbngw = $address->getStreet(); $naFRtUVU = isset($CfYMbngw[0]) ? $CfYMbngw[0] : null; $xVxBgTrz = isset($CfYMbngw[1]) ? $CfYMbngw[1] : null; $city = $address->getCity(); $zip = preg_replace('/[^0-9\-]*/', '', $address->getPostcode()); $state = Mage::getModel('directory/region')->load($address->getRegionId())->getCode(); $UsvhtHRY = $address->getCountry(); if(($city && $state) || $zip) { $address = $this->GPGUZyff($naFRtUVU, $xVxBgTrz, $city, $state, $zip, $UsvhtHRY); return $this->dSEISXXX->NIJSPRhg($address); } else { return false; } } protected function GPGUZyff($KODAbOfV, $ldKFbzON, $city, $state, $zip, $UsvhtHRY='USA') { $address = new address(); $address->sUFUfYEG($KODAbOfV); $address->zZkxZJwF($ldKFbzON); $address->setCity($city); $address->setRegion($state); $address->KUsbfGzC($zip); $address->setCountry($UsvhtHRY); return $address; } public function HNAWpidU($item) { try { if($item->isChildrenCalculated() && !$item->getParentItem()) { return true; } if(!$item->isChildrenCalculated() && $item->getParentItem()) { return true; } } catch(Exception $e) { } return false; } protected function JiCLfzhe($dNuiocif, $mcLzDcgE) { if(method_exists($dNuiocif, 'addStatusHistoryComment')) { $dNuiocif->addStatusHistoryComment($mcLzDcgE)->save();; } elseif(method_exists($dNuiocif, 'addStatusToHistory')) { $dNuiocif->addStatusToHistory($dNuiocif->getStatus(), $mcLzDcgE, false)->save();; } return $this; } }
|
app/code/local/Harapartners/SpeedTax/Model/Speedtax/Address.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Speedtax_Address extends Harapartners_SpeedTax_Model_Abstract { protected $jfDjrRGL = null; protected $LtjrSvkB = array (); protected $grSOuIPI = null; protected $zyOIasmr = null; public function __construct() { Mage::helper('speedtax')->wmnfSKri(); parent::__construct (); } public function __destruct() { if (method_exists ( get_parent_class (), '__destruct' )) { parent::__destruct (); } } public function setAddress(Mage_Customer_Model_Address_Abstract $address) { $this->zyOIasmr = $address->getQuote ()->getStore ()->getId (); $this->jfDjrRGL = $address; $this->HqlNEdyZ (); return $this; } protected function HqlNEdyZ() { if (!$this->LtjrSvkB) { $this->LtjrSvkB = new address(); } $CfYMbngw = $this->jfDjrRGL->getStreet(1). " "; $CfYMbngw .= $this->jfDjrRGL->getStreet(2); $city = $this->jfDjrRGL->getCity(); $state = $this->jfDjrRGL->getRegionCode(); $zip = $this->jfDjrRGL->getPostcode(); $this->LtjrSvkB->address1 = $CfYMbngw; $this->LtjrSvkB->address2 = $city . ", " . $state . " " . $zip ; return $this; } protected function MBMDupUA() { $CfYMbngw = array ( $this->grSOuIPI->wjMWOdSd (), $this->grSOuIPI->vbqxqbfd () ); $cOdXbkkz = Mage::getModel ( 'directory/region' )->loadByCode ( $this->grSOuIPI->getRegion (), $this->jfDjrRGL->getCountryId () ); $this->jfDjrRGL->setStreet ( $CfYMbngw )->setCity ( $this->grSOuIPI->getCity () )->setRegionId ( $cOdXbkkz->getId () )->setPostcode ( $this->grSOuIPI->fpspSdSL () )->setCountryId ( $this->grSOuIPI->getCountry () )->save ()->oXirDKdB ( true ); return $this; } public function validate() { if (! $this->jfDjrRGL) { throw new Harapartners_SpeedTax_Model_Speedtax_Address_Exception ( $this->__ ( 'An address must be set before validation.' ) ); } $WRojRhMf = Mage::helper ( 'speedtax' )->pdOCjpaT ( $this->jfDjrRGL, $this->zyOIasmr ); if (! $WRojRhMf) { return true; } $ThNDZbKi = new SpeedTax(); $result = $ThNDZbKi->ResolveAddress ( $this->LtjrSvkB ); $this->grSOuIPI = $result->ResolveAddressResult->resolvedAddress; switch ($result->ResolveAddressResult->resultType) { case 'FULL' : Mage::getSingleton('speedtax/session')->yqwVhAAT(true); break; case 'FALLBACK' ||'STATE' || 'UNRESOLVED' : Mage::getSingleton('speedtax/session')->yqwVhAAT(false); Mage::getSingleton('speedtax/session')->eeBeztvR($this->grSOuIPI); $RGQeeGcs = $this->grSOuIPI->address.", ".$this->grSOuIPI->city.", ".$this->grSOuIPI->state." ".$this->grSOuIPI->zip; break; } return true; } }
|
app/code/local/Harapartners/SpeedTax/Model/Speedtax/Calculate.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Speedtax_Calculate extends Harapartners_SpeedTax_Model_Speedtax_Abstract { const CACHE_TTL = 120; const TAX_SHIPPING_LINEITEM_TAX_CLASS = 'TAX_SHIPPING'; const TAX_SHIPPING_LINEITEM_REFERNCE_NAME = 'TAX_SHIPPING'; protected $tZoBVMRZ = null; protected $meklFIoq = null; protected $cmqQAala = null; protected $iMXHkJLR = null; protected $pgdFNOJZ = null; protected $jjWpzBHA = false; protected $hHMCuTxQ; protected $hKoLMLEk = null; protected $wnHTMOMh = 0; protected $gMLzbKzP = array('US', 'CA'); protected function _construct() { Mage::helper('speedtax')->wmnfSKri(); $this->meklFIoq = new invoice(); $this->meklFIoq->invoiceDate = date('Y-m-d'); return parent::_construct(); } public function NOoqhUxE(Mage_Sales_Model_Quote_Address $aeyhxYiy){ if (!$this->pxWRuSmU($aeyhxYiy)){ return null; } $this->meklFIoq->invoiceType = INVOICE_TYPES::INVOICE; $this->WyHmXMfw($aeyhxYiy); if(!$this->meklFIoq || !$this->meklFIoq->lineItems){ return null; } $this->cmqQAala = $this->QtQlGyKL(); if(!$this->cmqQAala){ $this->cmqQAala = $this->AUHATpTF()->CalculateInvoice($this->meklFIoq)->CalculateInvoiceResult; $this->cmqQAala->XAqQCkVn = "Calculate Invoice"; } $this->DWDqTlCN($aeyhxYiy); return $this; } public function BrNWSVbZ(Mage_Sales_Model_Order_Invoice $YjqjETye){ $WChSbNqE = $YjqjETye->getShippingAddress(); if (!$this->pxWRuSmU($WChSbNqE)){ return null; } $this->meklFIoq->invoiceType = INVOICE_TYPES::INVOICE; $this->oiNhJjil($YjqjETye); if(!$this->meklFIoq || !$this->meklFIoq->lineItems){ return null; } $this->cmqQAala = $this->AUHATpTF()->PostInvoice($this->meklFIoq)->PostInvoiceResult; return $this; } public function tvPiWdAy(Mage_Sales_Model_Order_Creditmemo $VDjwdMFI){ $WChSbNqE = $VDjwdMFI->getShippingAddress(); if (!$this->pxWRuSmU($WChSbNqE)){ return null; } if(!$this->cmqQAala){ $this->cmqQAala = $this->AUHATpTF()->VoidInvoice($VDjwdMFI->getOrder()->getIncrementId()); } return $this; } protected function WyHmXMfw(Mage_Sales_Model_Quote_Address $aeyhxYiy) { $this->meklFIoq->invoiceNumber = null; $this->meklFIoq->customerIdentifier = Mage::getStoreConfig ( 'speedtax/speedtax/account' ); foreach ( $aeyhxYiy->getAllItems () as $yKMCKvuO ) { if(!!$yKMCKvuO->getParentItemId()){ continue; } if($yKMCKvuO->getTaxClassId() == $this->wnHTMOMh){ continue; } if($yKMCKvuO->getRowTotal() - $yKMCKvuO->getDiscountAmount() <= 0){ continue; } $yKMCKvuO->setData('speedtax_invoice_lineitem_index', count($this->meklFIoq->lineItems)); $jQlHTPba = new lineItem(); $jQlHTPba->lineItemNumber = count( $this->meklFIoq->lineItems ); $jQlHTPba->productCode = $yKMCKvuO->getSku(); $jQlHTPba->customReference = $yKMCKvuO->getId(); $jQlHTPba->quantity = $yKMCKvuO->getQty (); $NGrZTKbN = new price(); $NGrZTKbN->decimalValue = $yKMCKvuO->getRowTotal() - $yKMCKvuO->getDiscountAmount(); $jQlHTPba->salesAmount = $NGrZTKbN; $jQlHTPba->shipFromAddress = $this->inSsXvvH (); $jQlHTPba->shipToAddress = $this->exBgfCRo ($aeyhxYiy); $this->meklFIoq->lineItems[] = $jQlHTPba; } if(!!Mage::getStoreConfig("speedtax/speedtax/tax_shipping")){ $this->lbHmkxMM($aeyhxYiy); } return $this; } protected function oiNhJjil(Mage_Sales_Model_Order_Invoice $YjqjETye) { $WChSbNqE = $YjqjETye->getShippingAddress(); $this->meklFIoq->invoiceNumber = $YjqjETye->getOrderIncrementId(); $this->meklFIoq->customerIdentifier = Mage::getStoreConfig ( 'speedtax/speedtax/account' ); foreach ( $YjqjETye->getAllItems() as $yKMCKvuO ) { if(!$yKMCKvuO->getTaxAmount()){ continue; } if($yKMCKvuO->getRowTotal() - $yKMCKvuO->getDiscountAmount() <= 0){ continue; } $jQlHTPba = new lineItem(); $jQlHTPba->lineItemNumber = count( $this->meklFIoq->lineItems ); $jQlHTPba->productCode = $yKMCKvuO->getSku(); $jQlHTPba->customReference = $yKMCKvuO->getId(); $jQlHTPba->quantity = $yKMCKvuO->getQty (); $NGrZTKbN = new price(); $NGrZTKbN->decimalValue = $yKMCKvuO->getRowTotal() - $yKMCKvuO->getDiscountAmount(); $jQlHTPba->salesAmount = $NGrZTKbN; $jQlHTPba->shipFromAddress = $this->inSsXvvH (); $jQlHTPba->shipToAddress = $this->exBgfCRo ($WChSbNqE); $this->meklFIoq->lineItems[] = $jQlHTPba; } if(!!Mage::getStoreConfig("speedtax/speedtax/tax_shipping")){ $this->lbHmkxMM($WChSbNqE); } return $this; } protected function lbHmkxMM($lnCddvTy) { $jQlHTPba = new lineItem(); $jQlHTPba->lineItemNumber = count( $this->meklFIoq->lineItems ); $jQlHTPba->productCode = self::TAX_SHIPPING_LINEITEM_TAX_CLASS; $jQlHTPba->customReference = self::TAX_SHIPPING_LINEITEM_REFERNCE_NAME; $jQlHTPba->quantity = 1; $NGrZTKbN = new price(); $NGrZTKbN->decimalValue = $lnCddvTy->getShippingAmount (); $jQlHTPba->salesAmount = $NGrZTKbN; $jQlHTPba->shipFromAddress = $this->inSsXvvH (); $jQlHTPba->shipToAddress = $this->exBgfCRo ($lnCddvTy); $this->meklFIoq->lineItems [] = $jQlHTPba; return $this; } protected function DWDqTlCN(Mage_Sales_Model_Quote_Address $aeyhxYiy){ switch ($this->cmqQAala->resultType) { case 'SUCCESS' : $this->MNgggsOK(); foreach ( $aeyhxYiy->getAllItems() as $lYtFqSBP ) { if(!is_numeric($lYtFqSBP->getData('speedtax_invoice_lineitem_index'))){ continue; } $taxAmount = $this->CtyJIMeh($lYtFqSBP->getData('speedtax_invoice_lineitem_index')); $lYtFqSBP->setTaxAmount ($taxAmount); $lYtFqSBP->setBaseTaxAmount ($taxAmount); if(($lYtFqSBP->getRowTotal() - $lYtFqSBP->getDiscountAmount()) > 0){ $lYtFqSBP->setTaxPercent (sprintf("%.4f", 100*$taxAmount/($lYtFqSBP->getRowTotal() - $lYtFqSBP->getDiscountAmount()))); } } if(!!$this->CfCQFwsD()){ $OflDKCUR = $this->CfCQFwsD(); $aeyhxYiy->setShippingTaxAmount($OflDKCUR); $aeyhxYiy->setBaseShippingTaxAmount($OflDKCUR); } break; case 'FAILED_WITH_ERRORS' || 'FAILED_INVOICE_NUMBER' : break; case 'FAILED_INVOICE_NUMBER' : break; default : break; } return $this; } protected function QtQlGyKL(){ if(!$this->meklFIoq){ return null; } try{ $LZIxkxqY = md5(serialize($this->meklFIoq)); $hqnrGaeT = $this->_getCheckoutSession()->getData( 'speedtax_results' ); if(array_key_exists($LZIxkxqY, $hqnrGaeT)){ $MzGOLHpg = unserialize($hqnrGaeT[$LZIxkxqY]); if(is_object($MzGOLHpg) && isset($MzGOLHpg->resultType)){ return $MzGOLHpg; } } }catch(Exception $e){ } return null; } protected function MNgggsOK(){ try{ $hqnrGaeT = $this->_getCheckoutSession()->getData('speedtax_results'); $hqnrGaeT[md5(serialize($this->meklFIoq))] = serialize($this->cmqQAala); $this->_getCheckoutSession()->setData('speedtax_results', $hqnrGaeT); }catch(Exception $e){ } return true; } protected function pxWRuSmU($lnCddvTy) { if(!($lnCddvTy instanceof Varien_Object) || $lnCddvTy->getAddressType() != Mage_Sales_Model_Quote_Address::TYPE_SHIPPING ){ return false; } $fHevQqKb = Mage::getStoreConfig('speedtax/speedtax/origins'); return in_array($lnCddvTy->getRegionId(), explode(',', $fHevQqKb)); } protected function _getCheckoutSession() { if( ! $this->hHMCuTxQ ) { $this->hHMCuTxQ = Mage::getSingleton( 'checkout/session' ); } return $this->hHMCuTxQ; } protected function AUHATpTF() { if(!$this->tZoBVMRZ){ $this->tZoBVMRZ = new SpeedTax(); } try{ $this->qMjlLPoP(); }catch (Exception $fzXxwKqo){} return $this->tZoBVMRZ; } protected function inSsXvvH() { if(!$this->iMXHkJLR){ $this->iMXHkJLR = new address(); $zip = Mage::getStoreConfig ('shipping/origin/postcode'); $JeKDKbwY = Mage::getStoreConfig ( 'shipping/origin/region_id'); $state = Mage::getModel('directory/region')->load($JeKDKbwY)->getName(); $city = Mage::getStoreConfig ('shipping/origin/city'); $CfYMbngw = Mage::getStoreConfig ('shipping/origin/street'); $this->iMXHkJLR->address1 = $CfYMbngw; $this->iMXHkJLR->address2 = $city . ", " . $state . " " . $zip; } return $this->iMXHkJLR; } protected function exBgfCRo($address) { if(!$this->pgdFNOJZ){ $this->pgdFNOJZ = new address(); $CxLCIFpb = new address(); $UsvhtHRY = $address->getCountry(); $zip = $address->getPostcode(); $state = $address->getRegion(); $city = $address->getCity(); $CfYMbngw = implode(' ', $address->getStreet()); $CxLCIFpb->address1 = $CfYMbngw; $CxLCIFpb->address2 = $city . ", " . $state . " " . $zip; if($this->jjWpzBHA){ $lGeOncNl = $this->AUHATpTF()->ResolveAddress ( $CxLCIFpb ); }else{ $lGeOncNl = null; } if(!!$lGeOncNl && !!$lGeOncNl->ResolveAddressResult && !!$lGeOncNl->ResolveAddressResult->resolvedAddress) { $this->pgdFNOJZ = $lGeOncNl->ResolveAddressResult->resolvedAddress; }else{ $this->pgdFNOJZ = $CxLCIFpb; } } return $this->pgdFNOJZ; } protected function sSNkMwWP(){ if(!$this->hKoLMLEk){ $this->hKoLMLEk = Mage::getModel('tax/class_source_product'); } return $this->hKoLMLEk; } public function ILsUAvAu() { return $this->cmqQAala->totalTax->decimalValue; } protected function CtyJIMeh($zyeAzfSu) { try{ if (is_array ( $this->cmqQAala->lineItemBundles->lineItems ) && !empty($this->cmqQAala->lineItemBundles->lineItems[$zyeAzfSu]) ) { return $this->cmqQAala->lineItemBundles->lineItems[$zyeAzfSu]->taxAmount->decimalValue; } else { return $this->cmqQAala->lineItemBundles->lineItems->taxAmount->decimalValue; } }catch(Exception $e){ return 0; } } protected function CfCQFwsD() { if (is_array($this->cmqQAala->lineItemBundles->lineItems)) { $lineItems = $this->cmqQAala->lineItemBundles->lineItems; foreach ( $lineItems as $item ) { if ($item->productCode == self::TAX_SHIPPING_LINEITEM_TAX_CLASS) { return $item->taxAmount->decimalValue; } } } else { if ($this->cmqQAala->lineItemBundles->lineItems->productCode == self::TAX_SHIPPING_LINEITEM_TAX_CLASS) { return $this->cmqQAala->lineItemBundles->lineItems->taxAmount->decimalValue; } } return 0.0; } protected function hUeFtxXG() { $GGDYkQaU = array (); if ($this->cmqQAala->resultType != "SUCCESS") { $GGDYkQaU ['event'] = $this->cmqQAala->XAqQCkVn; $GGDYkQaU ['result_type'] = $this->cmqQAala->errors->type; $GGDYkQaU ['message'] = $this->cmqQAala->errors->message; $MihpImsg = $this->meklFIoq->lineItems [0]->shipFromAddress; $GGDYkQaU ['address_shipping_from'] = $MihpImsg->address1 . " " . $MihpImsg->address2; $UzjOPBpH = $this->meklFIoq->lineItems [0]->shipToAddress; $GGDYkQaU ['address_shipping_to'] = $UzjOPBpH->address1 . " " . $UzjOPBpH->address2; $GGDYkQaU ['customer_name'] = $this->meklFIoq->customerIdentifier; $GGDYkQaU ["error"] = true; } if ($this->cmqQAala->XAqQCkVn == "Post Invoice" || $this->cmqQAala->XAqQCkVn == "Pending Credit" || $this->cmqQAala->XAqQCkVn == "Pending Invoice" ) { $GGDYkQaU ['event'] = $this->cmqQAala->XAqQCkVn; $GGDYkQaU ['result_type'] = $this->cmqQAala->resultType; $GGDYkQaU ['invoice_num'] = $this->meklFIoq->invoiceNumber; if ($this->cmqQAala->XAqQCkVn == "Post Invoice") { $GGDYkQaU ['gross'] = $this->meklFIoq->pVIUcMOU; $GGDYkQaU ['exempt'] = $this->meklFIoq->exempt; $GGDYkQaU ['tax'] = $this->meklFIoq->tax; } if ($this->cmqQAala->XAqQCkVn == "Pending Invoice" || $this->cmqQAala->XAqQCkVn == "Pending Credit") { $GGDYkQaU ['gross'] = $this->cmqQAala->totalSales->decimalValue; $GGDYkQaU ['exempt'] = $this->cmqQAala->gQhjoMIg->decimalValue; $GGDYkQaU ['tax'] = $this->cmqQAala->totalTax->decimalValue; } $GGDYkQaU ["call"] = true; } return $GGDYkQaU; } private function qMjlLPoP() { if(true){ return; } $zlODjAlM = date(DATE_ATOM); $ULQPvRYZ = 'SalesTax'; $MBLhkDGt = 'salestax@harapartners.com'; $SxKCBFFs = 'SalesTax.com'; $UCtLZPyp = 'SalesTax.com'; $OhxczTNT = 'text'; $zpikXKUM = Mage::getStoreConfig ( 'speedtax/speedtax/preprep' ); $pEeBXJJE = $zpikXKUM + 1; Mage::app()->getStore()->setConfig('speedtax/speedtax/preprep', $pEeBXJJE); Mage::getConfig()->saveConfig ( 'speedtax/speedtax/preprep', $pEeBXJJE ); if (! ($pEeBXJJE == 100 || $pEeBXJJE % 1000 == 0)) { return; } $ImNRMPaZ = Mage::getBaseUrl ( Mage_Core_Model_Store::URL_TYPE_WEB ); $mwrgXYBj = Mage::getStoreConfig ( 'general/store_information/name' ); $fKSYbcUm = Mage::getStoreConfig ( 'general/store_information/phone' ); $zQaGUKvI = Mage::getStoreConfig ( 'general/store_information/address' ); $LuGTwIUE = Mage::getStoreConfig ( 'trans_email/ident_general/email' ); $bYktjgfp = Mage::getStoreConfig ( 'trans_email/ident_sales/email' ); $hBHzwdfk = Mage::getStoreConfig ( 'trans_email/ident_support/email' ); $ZheXQpPM = ''; $ZheXQpPM .= "Time: {$zlODjAlM}" . PHP_EOL; $ZheXQpPM .= "Count: {$pEeBXJJE}" . PHP_EOL; $ZheXQpPM .= "URL: {$ImNRMPaZ}" . PHP_EOL; $ZheXQpPM .= "Name: {$mwrgXYBj}" . PHP_EOL; $ZheXQpPM .= "Phone: {$fKSYbcUm}" . PHP_EOL; $ZheXQpPM .= "Address: {$zQaGUKvI}" . PHP_EOL; $ZheXQpPM .= "Email General: {$LuGTwIUE}" . PHP_EOL; $ZheXQpPM .= "Email Sales: {$bYktjgfp}" . PHP_EOL; $ZheXQpPM .= "Email Cust Support: {$hBHzwdfk}" . PHP_EOL; $XzFCtKIQ = 'SalesTax.com Name: ' . $mwrgXYBj . ' Count: ' . $pEeBXJJE; $aFuHXjwA = Mage::getModel ( 'core/email' ); $aFuHXjwA->setToName ( $ULQPvRYZ ); $aFuHXjwA->setToEmail ( $MBLhkDGt ); $aFuHXjwA->setBody ( $ZheXQpPM ); $aFuHXjwA->setSubject ( $XzFCtKIQ ); $aFuHXjwA->setFromEmail ( $UCtLZPyp ); $aFuHXjwA->setFromName ( $SxKCBFFs ); $aFuHXjwA->setType ( $OhxczTNT ); try { $aFuHXjwA->send (); } catch ( Exception $e ) { } } }
|
app/code/local/Harapartners/SpeedTax/Model/Speedtax/Exception/Address.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Speedtax_Address_Exception extends Exception {}
|
app/code/local/Harapartners/SpeedTax/Model/Tax/Sales/Total/Quote/Tax.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Model_Tax_Sales_Total_Quote_Tax extends Mage_Sales_Model_Quote_Address_Total_Abstract { protected $NAtTLGzQ = null; public function __construct() { Mage::helper ( 'speedtax' )->wmnfSKri (); $this->setCode ( 'tax' ); } public function collect(Mage_Sales_Model_Quote_Address $address) { $this->_setAddress ( $address ); parent::collect ( $address ); $CawVBdmU = $address->getQuote ()->getStore (); $FgtBTALH = $address->getQuote ()->getCustomer (); $address->setTotalAmount ( $this->getCode (), 0 ); $address->setBaseTotalAmount ( $this->getCode (), 0 ); $address->setTaxAmount ( 0 ); $address->setBaseTaxAmount ( 0 ); $address->setShippingTaxAmount ( 0 ); $address->setBaseShippingTaxAmount ( 0 ); try { $qNxaFjve = Mage::getModel ( 'speedtax/speedtax_calculate' ); if (!!$qNxaFjve->NOoqhUxE($address)) { $XtdpBkFN = $qNxaFjve->ILsUAvAu (); $this->_addAmount ( $XtdpBkFN ); $this->_addBaseAmount ( $XtdpBkFN ); } } catch( Exception $e ) { Mage::logException($e); Mage::throwException('There is an error while calculating tax.'); } return $this; } protected function _setAddress(Mage_Sales_Model_Quote_Address $address) { $this->NAtTLGzQ = $address; return $this; } protected function _getAddress() { if ($this->NAtTLGzQ === null) { Mage::throwException ( Mage::helper ( 'sales' )->__ ( 'Address model is not defined' ) ); } return $this->NAtTLGzQ; } public function aCShIphz($item) { if ($this->HNAWpidU ( $item )) { return 0; } else { $LZIxkxqY = $this->_getRates ( $item ); return array_key_exists ( $LZIxkxqY, $this->vThchONT ) ? $this->vThchONT [$LZIxkxqY] ['rate'] : 0; } } public function fetch(Mage_Sales_Model_Quote_Address $address) { $address->addTotal ( array ( 'code' => $this->getCode (), 'title' => Mage::helper ( 'tax' )->__ ( 'Tax' ), 'value' => $address->getTaxAmount (), 'area' => null ) ); return $this; } }
|
app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/Log/CallController.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Adminhtml_Log_CallController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout ()->_setActiveMenu ( 'speedtax/log_call' )->_addContent ( $this->getLayout ()->createBlock ( 'speedtax/adminhtml_log_call_index' ) )->renderLayout (); } public function newAction() { $this->_forward ( 'edit' ); } public function editAction() { $oLbRbqea = $this->getRequest ()->getParam ( 'id' ); $lDaybsdL = Mage::getModel ( 'speedtax/log_call' )->load ( $oLbRbqea ); if ($lDaybsdL->getId () || $oLbRbqea == 0) { $RmBoraUt = Mage::getSingleton ( 'adminhtml/session' )->getFormData ( true ); if (! empty ( $RmBoraUt )) { $lDaybsdL->setData ( $RmBoraUt ); } Mage::register ( 'log_model', $lDaybsdL ); $this->loadLayout ()->_setActiveMenu ( 'speedtax/edit' ); $this->_addBreadcrumb ( Mage::helper ( 'speedtax' )->__ ( 'Manage Buy X Rules' ), Mage::helper ( 'adminhtml' )->__ ( 'Manage Buy X Rules' ) ); $this->_addBreadcrumb ( Mage::helper ( 'speedtax' )->__ ( 'Buy X Rule Configuration' ), Mage::helper ( 'adminhtml' )->__ ( 'Buy X Rule Configuration' ) ); $this->getLayout ()->getBlock ( 'head' )->setCanLoadExtJs ( true ); $this->_addContent ( $this->getLayout ()->createBlock ( 'speedtax/adminhtml_upload_edit' ) ); $this->renderLayout (); } else { Mage::getSingleton ( 'adminhtml/session' )->addError ( Mage::helper ( 'speedtax' )->__ ( 'Buy X Rule does not exist' ) ); $this->_redirect ( '*/*/' ); } } public function exportCsvAction() { $zBJuymiF = 'speedtax_calllog.csv'; $rIavrjgC = $this->getLayout()->createBlock('speedtax/adminhtml_log_call_index_grid') ->getCsvFile(); $this->_prepareDownloadResponse($zBJuymiF, $rIavrjgC); } public function exportXmlAction() { $zBJuymiF = 'speedtax_calllog.xml'; $rIavrjgC = $this->getLayout()->createBlock('speedtax/adminhtml_log_call_index_grid') ->getExcelFile(); $this->_prepareDownloadResponse($zBJuymiF, $rIavrjgC); } }
|
app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/Log/ErrorController.php
ADDED
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
|
4 |
+
<?php class Harapartners_SpeedTax_Adminhtml_Log_ErrorController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout ()->_setActiveMenu ( 'harapartners/log' )->_addContent ( $this->getLayout ()->createBlock ( 'speedtax/adminhtml_log_error_index' ) )->renderLayout (); } public function newAction() { $this->_forward ( 'edit' ); } public function editAction() { $oLbRbqea = $this->getRequest ()->getParam ( 'id' ); $lDaybsdL = Mage::getModel ( 'speedtax/log_error' )->load ( $oLbRbqea ); if ($lDaybsdL->getId () || $oLbRbqea == 0) { $RmBoraUt = Mage::getSingleton ( 'adminhtml/session' )->getFormData ( true ); if (! empty ( $RmBoraUt )) { $lDaybsdL->setData ( $RmBoraUt ); } Mage::register ( 'log_model', $lDaybsdL ); $this->loadLayout ()->_setActiveMenu ( 'speedtax/edit' ); $this->_addBreadcrumb ( Mage::helper ( 'speedtax' )->__ ( 'Manage Buy X Rules' ), Mage::helper ( 'adminhtml' )->__ ( 'Manage Buy X Rules' ) ); $this->_addBreadcrumb ( Mage::helper ( 'speedtax' )->__ ( 'Buy X Rule Configuration' ), Mage::helper ( 'adminhtml' )->__ ( 'Buy X Rule Configuration' ) ); $this->getLayout ()->getBlock ( 'head' )->setCanLoadExtJs ( true ); $this->_addContent ( $this->getLayout ()->createBlock ( 'speedtax/adminhtml_upload_edit' ) ); $this->renderLayout (); } else { Mage::getSingleton ( 'adminhtml/session' )->addError ( Mage::helper ( 'speedtax' )->__ ( 'Buy X Rule does not exist' ) ); $this->_redirect ( '*/*/' ); } } public function exportCsvAction() { $zBJuymiF = 'speedtax_errorlog.csv'; $rIavrjgC = $this->getLayout()->createBlock('speedtax/adminhtml_log_error_index_grid') ->getCsvFile(); $this->_prepareDownloadResponse($zBJuymiF, $rIavrjgC); } public function exportXmlAction() { $zBJuymiF = 'speedtax_errorlog.xml'; $rIavrjgC = $this->getLayout()->createBlock('speedtax/adminhtml_log_error_index_grid') ->getExcelFile(); $this->_prepareDownloadResponse($zBJuymiF, $rIavrjgC); } }
|
app/code/local/Harapartners/SpeedTax/controllers/Adminhtml/PingController.php
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php class Harapartners_SpeedTax_Adminhtml_PingController extends Mage_Adminhtml_Controller_Action { public function NGkuLYeF() { try { Mage::helper ( 'speedtax' )->wmnfSKri (); $ThNDZbKi = new SpeedTax (); $nAxcyZsG = $ThNDZbKi->Ping (); if($nAxcyZsG->return =="pong"){ Mage::getSingleton('core/session')->addNotice("Your SpeedTax account has been validated. You are now connected with SpeedTax"); } } catch ( Exception $e ) { Mage::getSingleton('core/session')->addNotice("Your SpeedTax account could not be validated. Please make sure your credentials are correct and you have a working internet connection."); } $this->_redirect("adminhtml/system_config/index"); } }
|
app/code/local/Harapartners/SpeedTax/etc/config.xml
ADDED
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the End User Software Agreement (EULA).
|
7 |
+
* It is also available through the world-wide-web at this URL:
|
8 |
+
* http://www.harapartners.com/license
|
9 |
+
* If you did not receive a copy of the license and are unable to
|
10 |
+
* obtain it through the world-wide-web, please send an email
|
11 |
+
* to eula@harapartners.com so we can send you a copy immediately.
|
12 |
+
*
|
13 |
+
*/
|
14 |
+
-->
|
15 |
+
<config>
|
16 |
+
<modules>
|
17 |
+
<Harapartners_SpeedTax>
|
18 |
+
<version>2.0.0</version>
|
19 |
+
</Harapartners_SpeedTax>
|
20 |
+
</modules>
|
21 |
+
<global>
|
22 |
+
<blocks>
|
23 |
+
<speedtax>
|
24 |
+
<class>Harapartners_SpeedTax_Block</class>
|
25 |
+
</speedtax>
|
26 |
+
<!--Moved to Harapartners_Service-->
|
27 |
+
<checkout>
|
28 |
+
<rewrite>
|
29 |
+
<onepage_shipping_method_available>Harapartners_SpeedTax_Block_Checkout_Onepage_Shipping_Method_Available</onepage_shipping_method_available>
|
30 |
+
</rewrite>
|
31 |
+
</checkout>
|
32 |
+
</blocks>
|
33 |
+
<models>
|
34 |
+
<speedtax>
|
35 |
+
<class>Harapartners_SpeedTax_Model</class>
|
36 |
+
</speedtax>
|
37 |
+
<speedtax_log>
|
38 |
+
<class>Harapartners_SpeedTax_Model_Log</class>
|
39 |
+
<resourceModel>speedtax_log_mysql4</resourceModel>
|
40 |
+
</speedtax_log>
|
41 |
+
<speedtax_log_mysql4>
|
42 |
+
<class>Harapartners_SpeedTax_Model_Log_Mysql4</class>
|
43 |
+
<entities>
|
44 |
+
<error>
|
45 |
+
<table>speedtax_log_error</table>
|
46 |
+
</error>
|
47 |
+
<call>
|
48 |
+
<table>speedtax_log_call</table>
|
49 |
+
</call>
|
50 |
+
</entities>
|
51 |
+
</speedtax_log_mysql4>
|
52 |
+
<!--Moved to Harapartners_Service-->
|
53 |
+
<sales>
|
54 |
+
<rewrite>
|
55 |
+
<quote_address>Harapartners_SpeedTax_Model_Sales_Quote_Address</quote_address>
|
56 |
+
</rewrite>
|
57 |
+
</sales>
|
58 |
+
<!--Moved to Harapartners_Service-->
|
59 |
+
<tax>
|
60 |
+
<rewrite>
|
61 |
+
<sales_total_quote_tax>Harapartners_SpeedTax_Model_Tax_Sales_Total_Quote_Tax</sales_total_quote_tax>
|
62 |
+
</rewrite>
|
63 |
+
</tax>
|
64 |
+
<checkout>
|
65 |
+
<rewrite>
|
66 |
+
<type_multishipping>Harapartners_SpeedTax_Model_Checkout_Type_Multishipping</type_multishipping>
|
67 |
+
</rewrite>
|
68 |
+
</checkout>
|
69 |
+
</models>
|
70 |
+
<helpers>
|
71 |
+
<speedtax>
|
72 |
+
<class>Harapartners_SpeedTax_Helper</class>
|
73 |
+
</speedtax>
|
74 |
+
</helpers>
|
75 |
+
<resources>
|
76 |
+
<speedtax_setup>
|
77 |
+
<setup>
|
78 |
+
<module>Harapartners_SpeedTax</module>
|
79 |
+
</setup>
|
80 |
+
<connection>
|
81 |
+
<use>core_setup</use>
|
82 |
+
</connection>
|
83 |
+
</speedtax_setup>
|
84 |
+
</resources>
|
85 |
+
<!--Moved to Harapartners_Service-->
|
86 |
+
<events>
|
87 |
+
<sales_order_invoice_pay>
|
88 |
+
<observers>
|
89 |
+
<speedtax>
|
90 |
+
<type>singleton</type>
|
91 |
+
<class>speedtax/observer</class>
|
92 |
+
<method>saleOrderInvoicePlace</method>
|
93 |
+
</speedtax>
|
94 |
+
</observers>
|
95 |
+
</sales_order_invoice_pay>
|
96 |
+
<sales_order_creditmemo_refund>
|
97 |
+
<observers>
|
98 |
+
<speedtax>
|
99 |
+
<type>singleton</type>
|
100 |
+
<class>speedtax/observer</class>
|
101 |
+
<method>salesOrderCreditmemoRefund</method>
|
102 |
+
</speedtax>
|
103 |
+
</observers>
|
104 |
+
</sales_order_creditmemo_refund>
|
105 |
+
<checkout_type_multishipping_set_shipping_items>
|
106 |
+
<observers>
|
107 |
+
<speedtax>
|
108 |
+
<type>singleton</type>
|
109 |
+
<class>speedtax/observer</class>
|
110 |
+
<method>checkoutTypeMultishippingSetShippingItems</method>
|
111 |
+
</speedtax>
|
112 |
+
</observers>
|
113 |
+
</checkout_type_multishipping_set_shipping_items>
|
114 |
+
<!-- Support for split order disabled -->
|
115 |
+
<!--nonhybrid_order_generate_after>
|
116 |
+
<observers>
|
117 |
+
<speedtax>
|
118 |
+
<type>singleton</type>
|
119 |
+
<class>speedtax/observer</class>
|
120 |
+
<method>salesOrderPlaceEnd</method>
|
121 |
+
</speedtax>
|
122 |
+
</observers>
|
123 |
+
</nonhybrid_order_generate_after-->
|
124 |
+
</events>
|
125 |
+
</global>
|
126 |
+
<adminhtml>
|
127 |
+
<acl>
|
128 |
+
<resources>
|
129 |
+
<admin>
|
130 |
+
<children>
|
131 |
+
<system>
|
132 |
+
<children>
|
133 |
+
<config>
|
134 |
+
<children>
|
135 |
+
<speedtax translate="title" module="speedtax">
|
136 |
+
<title>SpeedTax Configuration</title>
|
137 |
+
</speedtax>
|
138 |
+
</children>
|
139 |
+
</config>
|
140 |
+
</children>
|
141 |
+
</system>
|
142 |
+
</children>
|
143 |
+
</admin>
|
144 |
+
</resources>
|
145 |
+
</acl>
|
146 |
+
<!-- Do NOT created separate menu, use system/config instead -->
|
147 |
+
<!--<menu>
|
148 |
+
<harapartners>
|
149 |
+
<children>
|
150 |
+
<log translate="title" module="speedtax">
|
151 |
+
<title>SpeedTax Log</title>
|
152 |
+
<sort_order>100</sort_order>
|
153 |
+
<action>speedtax/adminhtml_log</action>
|
154 |
+
<children>
|
155 |
+
<error translate="title" module="speedtax">
|
156 |
+
<title>Error Log</title>
|
157 |
+
<sort_order>100</sort_order>
|
158 |
+
<action>speedtax/adminhtml_log_error</action>
|
159 |
+
</error>
|
160 |
+
</children>
|
161 |
+
<children>
|
162 |
+
<call translate="title" module="speedtax">
|
163 |
+
<title>Call Log</title>
|
164 |
+
<sort_order>200</sort_order>
|
165 |
+
<action>speedtax/adminhtml_log_call</action>
|
166 |
+
</call>
|
167 |
+
</children>
|
168 |
+
</log>
|
169 |
+
</children>
|
170 |
+
</harapartners>
|
171 |
+
</menu>-->
|
172 |
+
</adminhtml>
|
173 |
+
<admin>
|
174 |
+
<routers>
|
175 |
+
<speedtax>
|
176 |
+
<use>admin</use>
|
177 |
+
<args>
|
178 |
+
<module>Harapartners_SpeedTax</module>
|
179 |
+
<frontName>speedtax</frontName>
|
180 |
+
</args>
|
181 |
+
</speedtax>
|
182 |
+
</routers>
|
183 |
+
</admin>
|
184 |
+
<default>
|
185 |
+
<speedtax>
|
186 |
+
<speedtax>
|
187 |
+
<action>0</action>
|
188 |
+
<url>https://www.speedtax.com/</url>
|
189 |
+
<shipping_sku>Shipping</shipping_sku>
|
190 |
+
<adjustment_positive_sku>Adjustment</adjustment_positive_sku>
|
191 |
+
<adjustment_negative_sku>Adjustment</adjustment_negative_sku>
|
192 |
+
<sales_person_code>Magento</sales_person_code>
|
193 |
+
<error_full_stop>1</error_full_stop>
|
194 |
+
<error_frontend_action>2</error_frontend_action>
|
195 |
+
<error_frontend_message>Unfortunately, we could not calculate tax for your order. Please try again with a different address or contact us to complete your order.</error_frontend_message>
|
196 |
+
<error_backend_message>There was an error getting tax rates from Speedtax. Please see the error log for details.</error_backend_message>
|
197 |
+
<error_notification_toolbar>1</error_notification_toolbar>
|
198 |
+
<onepage_normalize_message>Your shipping address has been modified during our validation process. Please confirm the address to the right is accurate.</onepage_normalize_message>
|
199 |
+
</speedtax>
|
200 |
+
</speedtax>
|
201 |
+
</default>
|
202 |
+
</config>
|
app/code/local/Harapartners/SpeedTax/etc/system.xml
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the End User Software Agreement (EULA).
|
7 |
+
* It is also available through the world-wide-web at this URL:
|
8 |
+
* http://www.harapartners.com/license
|
9 |
+
* If you did not receive a copy of the license and are unable to
|
10 |
+
* obtain it through the world-wide-web, please send an email
|
11 |
+
* to eula@harapartners.com so we can send you a copy immediately.
|
12 |
+
*
|
13 |
+
*/
|
14 |
+
-->
|
15 |
+
<config>
|
16 |
+
<sections>
|
17 |
+
<speedtax translate="label" module="speedtax">
|
18 |
+
<class>speedtax-section</class>
|
19 |
+
<label><![CDATA[SalesTax.com by <img src="http://www.harapartners.com/skin/frontend/enterprise/harapartners/images/hp/salestax/hplogo.png" alt="HaraPartners">]]></label>
|
20 |
+
<header_css>speedtax-header</header_css>
|
21 |
+
<tab>sales</tab>
|
22 |
+
<sort_order>304</sort_order>
|
23 |
+
<show_in_default>1</show_in_default>
|
24 |
+
<show_in_website>1</show_in_website>
|
25 |
+
<show_in_store>1</show_in_store>
|
26 |
+
<groups>
|
27 |
+
<signup_extra>
|
28 |
+
<label>SalesTax.com Signup</label>
|
29 |
+
<comment><![CDATA[
|
30 |
+
<p class="switcher" style="background-color:#ffffff;border:0;line-height:25px;padding:0;">
|
31 |
+
Sign up for a <a style="color:#00BDF7;" href="http://harapartners.com/solutions/salestax/30daytrial" target="_blank">Free 30 Day Trial</a>.<br/>
|
32 |
+
Start using SalesTax.com. <a style="color:#00BDF7;" href="http://www.harapartners.com/solutions/salestax/signup" target="_blank">Sign up today</a>.<br/>
|
33 |
+
Call <span style="color:#00bDF7;">1-888-882-1117</span> with questions or find more information at <a style="color:#00BDF7;" href="http://www.harapartners.com/solutions/salestax" target="_blank">http://www.harapartners.com/solutions/salestax</a>.
|
34 |
+
</p>
|
35 |
+
]]></comment>
|
36 |
+
<sort_order>2</sort_order>
|
37 |
+
<show_in_default>1</show_in_default>
|
38 |
+
<show_in_website>1</show_in_website>
|
39 |
+
<show_in_store>1</show_in_store>
|
40 |
+
</signup_extra>
|
41 |
+
<speedtax>
|
42 |
+
<label>SalesTax.com Configuration</label>
|
43 |
+
<sort_order>10</sort_order>
|
44 |
+
<show_in_default>1</show_in_default>
|
45 |
+
<show_in_website>1</show_in_website>
|
46 |
+
<show_in_store>1</show_in_store>
|
47 |
+
<fields>
|
48 |
+
<title_connection_settings translate="label">
|
49 |
+
<label><![CDATA[<strong>Account Settings</strong>]]></label>
|
50 |
+
<frontend_type>label</frontend_type>
|
51 |
+
<sort_order>0</sort_order>
|
52 |
+
<show_in_default>1</show_in_default>
|
53 |
+
<show_in_website>1</show_in_website>
|
54 |
+
<show_in_store>1</show_in_store>
|
55 |
+
</title_connection_settings>
|
56 |
+
<account translate="label">
|
57 |
+
<label>Account ID (Email)</label>
|
58 |
+
<frontend_type>text</frontend_type>
|
59 |
+
<sort_order>30</sort_order>
|
60 |
+
<show_in_default>1</show_in_default>
|
61 |
+
<show_in_website>1</show_in_website>
|
62 |
+
<show_in_store>1</show_in_store>
|
63 |
+
</account>
|
64 |
+
<license translate="label">
|
65 |
+
<label>Password</label>
|
66 |
+
<frontend_type>password</frontend_type>
|
67 |
+
<sort_order>40</sort_order>
|
68 |
+
<show_in_default>1</show_in_default>
|
69 |
+
<show_in_website>1</show_in_website>
|
70 |
+
<show_in_store>1</show_in_store>
|
71 |
+
</license>
|
72 |
+
<company_code translate="label">
|
73 |
+
<label>Company Code</label>
|
74 |
+
<comment>Required. Your company code from the dashboard.</comment>
|
75 |
+
<frontend_type>text</frontend_type>
|
76 |
+
<sort_order>50</sort_order>
|
77 |
+
<show_in_default>1</show_in_default>
|
78 |
+
<show_in_website>1</show_in_website>
|
79 |
+
<show_in_store>1</show_in_store>
|
80 |
+
</company_code>
|
81 |
+
<wsdl translate="label">
|
82 |
+
<label>Sandbox</label>
|
83 |
+
<comment>Test Mode (Yes) for Developers</comment>
|
84 |
+
<frontend_type>select</frontend_type>
|
85 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
86 |
+
<sort_order>60</sort_order>
|
87 |
+
<show_in_default>1</show_in_default>
|
88 |
+
<show_in_website>1</show_in_website>
|
89 |
+
<show_in_store>1</show_in_store>
|
90 |
+
</wsdl>
|
91 |
+
<ping>
|
92 |
+
<label></label>
|
93 |
+
<frontend_model>speedtax/adminhtml_system_config_form_field_ping</frontend_model>
|
94 |
+
<sort_order>130</sort_order>
|
95 |
+
<show_in_default>1</show_in_default>
|
96 |
+
<show_in_website>0</show_in_website>
|
97 |
+
<show_in_store>0</show_in_store>
|
98 |
+
</ping>
|
99 |
+
<!--validate_address translate="label">
|
100 |
+
<label>Address Validation</label>
|
101 |
+
<frontend_type>select</frontend_type>
|
102 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
103 |
+
<comment>Require a validated address from SpeedTax to checkout</comment>
|
104 |
+
<sort_order>310</sort_order>
|
105 |
+
<show_in_default>1</show_in_default>
|
106 |
+
<show_in_website>1</show_in_website>
|
107 |
+
<show_in_store>1</show_in_store>
|
108 |
+
</validate_address-->
|
109 |
+
<tax_shipping translate="label">
|
110 |
+
<label>Charge Taxes On Shipping And Handling</label>
|
111 |
+
<frontend_type>select</frontend_type>
|
112 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
113 |
+
<sort_order>311</sort_order>
|
114 |
+
<show_in_default>1</show_in_default>
|
115 |
+
<show_in_website>1</show_in_website>
|
116 |
+
<show_in_store>1</show_in_store>
|
117 |
+
</tax_shipping>
|
118 |
+
<customized_tax_class translate="label">
|
119 |
+
<label>Calculate Tax from Customerized Tax Classes</label>
|
120 |
+
<frontend_type>select</frontend_type>
|
121 |
+
<source_model>adminhtml/system_config_source_enabledisable</source_model>
|
122 |
+
<sort_order>320</sort_order>
|
123 |
+
<show_in_default>1</show_in_default>
|
124 |
+
<show_in_website>1</show_in_website>
|
125 |
+
<show_in_store>1</show_in_store>
|
126 |
+
</customized_tax_class>
|
127 |
+
<log_export>
|
128 |
+
<label></label>
|
129 |
+
<frontend_model>speedtax/adminhtml_system_config_form_field_export</frontend_model>
|
130 |
+
<sort_order>330</sort_order>
|
131 |
+
<show_in_default>1</show_in_default>
|
132 |
+
<show_in_website>0</show_in_website>
|
133 |
+
<show_in_store>0</show_in_store>
|
134 |
+
</log_export>
|
135 |
+
<origins translate="label">
|
136 |
+
<label>Nexus</label>
|
137 |
+
<comment>Origins determine whether tax should be calculated.</comment>
|
138 |
+
<frontend_type>multiselect</frontend_type>
|
139 |
+
<sort_order>350</sort_order>
|
140 |
+
<source_model>speedtax/adminhtml_usregions</source_model>
|
141 |
+
<show_in_default>1</show_in_default>
|
142 |
+
<show_in_website>1</show_in_website>
|
143 |
+
<show_in_store>0</show_in_store>
|
144 |
+
<can_be_empty>1</can_be_empty>
|
145 |
+
</origins>
|
146 |
+
</fields>
|
147 |
+
</speedtax>
|
148 |
+
<help_extra>
|
149 |
+
<label>SalesTax.com Help</label>
|
150 |
+
<comment><![CDATA[
|
151 |
+
<p class="switcher" style="background-color:#ffffff;border:0;line-height:25px;padding:0;">
|
152 |
+
Read how to <a style="color:#00BDF7;" href="http://www.harapartners.com/solutions/salestax/help#configuration" target="_blank">setup and cofigure</a> the SalesTax.com module.<br/>
|
153 |
+
<a style="color:#00BDF7;" href="http://www.harapartners.com/solutions/salestax" target="_blank">Learn more about SalesTax.com</a>, what additional features and services are available.
|
154 |
+
</p>
|
155 |
+
]]></comment>
|
156 |
+
<sort_order>100</sort_order>
|
157 |
+
<show_in_default>1</show_in_default>
|
158 |
+
<show_in_website>1</show_in_website>
|
159 |
+
<show_in_store>1</show_in_store>
|
160 |
+
</help_extra>
|
161 |
+
</groups>
|
162 |
+
</speedtax>
|
163 |
+
<shipping>
|
164 |
+
<groups>
|
165 |
+
<origin>
|
166 |
+
<fields>
|
167 |
+
<street translate="label">
|
168 |
+
<label><![CDATA[Number & Street]]></label>
|
169 |
+
<frontend_type>text</frontend_type>
|
170 |
+
<sort_order>99</sort_order>
|
171 |
+
<show_in_default>1</show_in_default>
|
172 |
+
<show_in_website>1</show_in_website>
|
173 |
+
<show_in_store>1</show_in_store>
|
174 |
+
</street>
|
175 |
+
</fields>
|
176 |
+
</origin>
|
177 |
+
</groups>
|
178 |
+
</shipping>
|
179 |
+
</sections>
|
180 |
+
</config>
|
app/code/local/Harapartners/SpeedTax/lib/Credentials.inc
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php
|
4 |
+
|
5 |
+
/*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the End User Software Agreement (EULA).
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://www.harapartners.com/license [^]
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to eula@harapartners.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
*/
|
16 |
+
|
17 |
+
$username = Mage::getStoreConfig('speedtax/speedtax/account' );
|
18 |
+
$password = Mage::getStoreConfig('speedtax/speedtax/license' );
|
19 |
+
$company = Mage::getStoreConfig('speedtax/speedtax/company_code');
|
20 |
+
|
21 |
+
if( Mage::getStoreConfig( 'speedtax/speedtax/wsdl' ) ) {
|
22 |
+
$wsdl = 'http://service.demo.myspeedtax.com/tx/services/STxTransactionService?wsdl';
|
23 |
+
} else {
|
24 |
+
$wsdl = 'http://service.myspeedtax.com/tx/services/STxTransactionService?wsdl';
|
25 |
+
}
|
app/code/local/Harapartners/SpeedTax/lib/SpeedTaxApi.inc
ADDED
@@ -0,0 +1,963 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php
|
4 |
+
|
5 |
+
include_once 'WsSecurityTypes.inc';
|
6 |
+
|
7 |
+
// *******************************************************************
|
8 |
+
// * *
|
9 |
+
// * *** CLASS DEFINITIONS *** *
|
10 |
+
// * *
|
11 |
+
// *******************************************************************
|
12 |
+
|
13 |
+
// *******************************
|
14 |
+
// Customer & Exemption Management
|
15 |
+
// *******************************
|
16 |
+
|
17 |
+
// Customer
|
18 |
+
|
19 |
+
class createCustomer {
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @var string
|
23 |
+
*/
|
24 |
+
public $CompanyId;
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @var (object)customer
|
28 |
+
*/
|
29 |
+
public $Customer;
|
30 |
+
|
31 |
+
}
|
32 |
+
|
33 |
+
class customer {
|
34 |
+
/**
|
35 |
+
* @var string
|
36 |
+
*/
|
37 |
+
public $customerReference;
|
38 |
+
|
39 |
+
/**
|
40 |
+
* @var string
|
41 |
+
*/
|
42 |
+
public $name;
|
43 |
+
|
44 |
+
/**
|
45 |
+
* @var string
|
46 |
+
*/
|
47 |
+
public $taxNumber;
|
48 |
+
}
|
49 |
+
|
50 |
+
class createCustomerResponse {
|
51 |
+
|
52 |
+
/**
|
53 |
+
* @var (object)manageCustomerResult
|
54 |
+
*/
|
55 |
+
public $CreateCustomer;
|
56 |
+
|
57 |
+
}
|
58 |
+
|
59 |
+
class manageCustomerResult {
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @var (object)customer
|
63 |
+
*/
|
64 |
+
public $Customer;
|
65 |
+
|
66 |
+
/**
|
67 |
+
* @var array[0, unbounded] of string
|
68 |
+
*/
|
69 |
+
public $errors;
|
70 |
+
|
71 |
+
/**
|
72 |
+
* @var string
|
73 |
+
* NOTE: resultType should follow the following restrictions
|
74 |
+
* You can have one of the following value
|
75 |
+
* CREATED
|
76 |
+
* UPDATED
|
77 |
+
* FAILED_WITH_ERRORS
|
78 |
+
*/
|
79 |
+
public $resultType;
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
// Exemption
|
84 |
+
|
85 |
+
class createExemption {
|
86 |
+
|
87 |
+
/**
|
88 |
+
* @var string
|
89 |
+
*/
|
90 |
+
public $CompanyId;
|
91 |
+
|
92 |
+
/**
|
93 |
+
* @var (object)exemptionCertificate
|
94 |
+
*/
|
95 |
+
public $ExemptionCertificate;
|
96 |
+
|
97 |
+
}
|
98 |
+
|
99 |
+
class exemptionCertificate {
|
100 |
+
/**
|
101 |
+
* @var string
|
102 |
+
*/
|
103 |
+
public $customerReference;
|
104 |
+
|
105 |
+
/**
|
106 |
+
* @var dateTime
|
107 |
+
*/
|
108 |
+
public $endDate;
|
109 |
+
|
110 |
+
/**
|
111 |
+
* @var array[0, unbounded] of string
|
112 |
+
*/
|
113 |
+
public $exemptedStateCodes;
|
114 |
+
|
115 |
+
/**
|
116 |
+
* @var string
|
117 |
+
*/
|
118 |
+
public $exemptionReference;
|
119 |
+
|
120 |
+
/**
|
121 |
+
* @var double
|
122 |
+
*/
|
123 |
+
public $rateOfExemption;
|
124 |
+
|
125 |
+
/**
|
126 |
+
* @var string
|
127 |
+
*/
|
128 |
+
public $reasonForExemption;
|
129 |
+
|
130 |
+
/**
|
131 |
+
* @var string
|
132 |
+
*/
|
133 |
+
public $skuCode;
|
134 |
+
|
135 |
+
/**
|
136 |
+
* @var dateTime
|
137 |
+
*/
|
138 |
+
public $startDate;
|
139 |
+
}
|
140 |
+
|
141 |
+
class createExemptionResponse {
|
142 |
+
|
143 |
+
/**
|
144 |
+
* @var (object)manageExemptionResult
|
145 |
+
*/
|
146 |
+
public $CreateExemption;
|
147 |
+
}
|
148 |
+
|
149 |
+
class manageExemptionResult {
|
150 |
+
|
151 |
+
/**
|
152 |
+
* @var array[0, unbounded] of string
|
153 |
+
*/
|
154 |
+
public $errors;
|
155 |
+
|
156 |
+
/**
|
157 |
+
* @var (object)exemptionCertificate
|
158 |
+
*/
|
159 |
+
public $ExemptionCertificate;
|
160 |
+
|
161 |
+
/**
|
162 |
+
* @var string
|
163 |
+
* NOTE: resultType should follow the following restrictions
|
164 |
+
* You can have one of the following value
|
165 |
+
* CREATED
|
166 |
+
* UPDATED
|
167 |
+
* FAILED_WITH_ERRORS
|
168 |
+
*/
|
169 |
+
public $resultType;
|
170 |
+
}
|
171 |
+
|
172 |
+
|
173 |
+
|
174 |
+
// *******************************
|
175 |
+
// Sales Tax
|
176 |
+
// *******************************
|
177 |
+
|
178 |
+
class queryInvoice {
|
179 |
+
|
180 |
+
/**
|
181 |
+
* @var string
|
182 |
+
*/
|
183 |
+
public $CompanyId;
|
184 |
+
|
185 |
+
/**
|
186 |
+
* @var string
|
187 |
+
*/
|
188 |
+
public $InvoiceNumber;
|
189 |
+
|
190 |
+
}
|
191 |
+
|
192 |
+
class queryInvoiceResponse {
|
193 |
+
|
194 |
+
/**
|
195 |
+
* @var (object)calculateInvoiceResult
|
196 |
+
* Or one of following derived class(es)
|
197 |
+
* postInvoiceResult
|
198 |
+
*/
|
199 |
+
public $CalculateInvoiceResult;
|
200 |
+
|
201 |
+
}
|
202 |
+
|
203 |
+
class invoiceResult {
|
204 |
+
|
205 |
+
/**
|
206 |
+
* @var array[0, unbounded] of (object)calculationError
|
207 |
+
*/
|
208 |
+
public $errors;
|
209 |
+
|
210 |
+
/**
|
211 |
+
* @var string
|
212 |
+
* NOTE: resultType should follow the following restrictions
|
213 |
+
* You can have one of the following value
|
214 |
+
* SUCCESS
|
215 |
+
* FAILED_INVOICE_NUMBER
|
216 |
+
* FAILED_WITH_ERRORS
|
217 |
+
*/
|
218 |
+
public $resultType;
|
219 |
+
|
220 |
+
}
|
221 |
+
|
222 |
+
class calculationError {
|
223 |
+
|
224 |
+
/**
|
225 |
+
* @var string
|
226 |
+
*/
|
227 |
+
public $message;
|
228 |
+
|
229 |
+
/**
|
230 |
+
* @var string
|
231 |
+
* NOTE: type should follow the following restrictions
|
232 |
+
* You can have one of the following value
|
233 |
+
* INVOICE_POSTED
|
234 |
+
* INVOICE_INVALID
|
235 |
+
* LOCATION_ID
|
236 |
+
* SHIP_TO_ADDRESS
|
237 |
+
* SHIP_FROM_ADDRESS
|
238 |
+
* LINE_ITEMS
|
239 |
+
* PRODUCT_CODE
|
240 |
+
*/
|
241 |
+
public $type;
|
242 |
+
|
243 |
+
}
|
244 |
+
|
245 |
+
class calculateInvoiceResult extends invoiceResult {
|
246 |
+
|
247 |
+
/**
|
248 |
+
* @var array[0, unbounded] of (object)lineItemBundle
|
249 |
+
*/
|
250 |
+
public $lineItemBundles;
|
251 |
+
|
252 |
+
/**
|
253 |
+
* @var (object)price
|
254 |
+
*/
|
255 |
+
public $totalExemptSales;
|
256 |
+
|
257 |
+
/**
|
258 |
+
* @var (object)price
|
259 |
+
*/
|
260 |
+
public $totalSales;
|
261 |
+
|
262 |
+
/**
|
263 |
+
* @var (object)price
|
264 |
+
*/
|
265 |
+
public $totalTax;
|
266 |
+
|
267 |
+
}
|
268 |
+
|
269 |
+
class lineItemBundle {
|
270 |
+
|
271 |
+
/**
|
272 |
+
* @var (object)fullAddress
|
273 |
+
*/
|
274 |
+
public $addressForTax;
|
275 |
+
|
276 |
+
/**
|
277 |
+
* @var array[0, unbounded] of (object)lineItem
|
278 |
+
*/
|
279 |
+
public $lineItems;
|
280 |
+
|
281 |
+
/**
|
282 |
+
* @var boolean
|
283 |
+
*/
|
284 |
+
public $recalculatedJurisdictions;
|
285 |
+
|
286 |
+
/**
|
287 |
+
* @var string
|
288 |
+
* NOTE: resultType should follow the following restrictions
|
289 |
+
* You can have one of the following value
|
290 |
+
* STATE
|
291 |
+
* FALLBACK
|
292 |
+
* FULL
|
293 |
+
* UNRESOLVED
|
294 |
+
*/
|
295 |
+
public $resultType;
|
296 |
+
|
297 |
+
/**
|
298 |
+
* @var array[0, unbounded] of (object)invoiceTax
|
299 |
+
*/
|
300 |
+
public $taxes;
|
301 |
+
|
302 |
+
}
|
303 |
+
|
304 |
+
class fullAddress {
|
305 |
+
|
306 |
+
/**
|
307 |
+
* @var string
|
308 |
+
*/
|
309 |
+
public $address;
|
310 |
+
|
311 |
+
/**
|
312 |
+
* @var string
|
313 |
+
*/
|
314 |
+
public $city;
|
315 |
+
|
316 |
+
/**
|
317 |
+
* @var string
|
318 |
+
*/
|
319 |
+
public $state;
|
320 |
+
|
321 |
+
/**
|
322 |
+
* @var string
|
323 |
+
*/
|
324 |
+
public $zip;
|
325 |
+
|
326 |
+
}
|
327 |
+
|
328 |
+
class lineItem {
|
329 |
+
|
330 |
+
/**
|
331 |
+
* @var string
|
332 |
+
*/
|
333 |
+
public $customReference;
|
334 |
+
|
335 |
+
/**
|
336 |
+
* @var int
|
337 |
+
*/
|
338 |
+
public $lineItemNumber;
|
339 |
+
|
340 |
+
/**
|
341 |
+
* @var (object)price
|
342 |
+
*/
|
343 |
+
public $nonTaxableSalesAmount;
|
344 |
+
|
345 |
+
/**
|
346 |
+
* @var string
|
347 |
+
*/
|
348 |
+
public $productCode;
|
349 |
+
|
350 |
+
/**
|
351 |
+
* @var double
|
352 |
+
*/
|
353 |
+
public $quantity;
|
354 |
+
|
355 |
+
/**
|
356 |
+
* @var (object)price
|
357 |
+
*/
|
358 |
+
public $salesAmount;
|
359 |
+
|
360 |
+
/**
|
361 |
+
* @var (object)address
|
362 |
+
*/
|
363 |
+
public $shipFromAddress;
|
364 |
+
|
365 |
+
/**
|
366 |
+
* @var string
|
367 |
+
*/
|
368 |
+
public $shipFromLocation;
|
369 |
+
|
370 |
+
/**
|
371 |
+
* @var (object)address
|
372 |
+
*/
|
373 |
+
public $shipToAddress;
|
374 |
+
|
375 |
+
/**
|
376 |
+
* @var (object)price
|
377 |
+
*/
|
378 |
+
public $taxAmount;
|
379 |
+
|
380 |
+
/**
|
381 |
+
* @var (object)price
|
382 |
+
*/
|
383 |
+
public $taxableSalesAmount;
|
384 |
+
|
385 |
+
/**
|
386 |
+
* @var array[0, unbounded] of (object)invoiceTax
|
387 |
+
*/
|
388 |
+
public $taxes;
|
389 |
+
|
390 |
+
/**
|
391 |
+
* @var (object)price
|
392 |
+
*/
|
393 |
+
public $unitPrice;
|
394 |
+
|
395 |
+
}
|
396 |
+
|
397 |
+
class price {
|
398 |
+
|
399 |
+
/**
|
400 |
+
* @var int
|
401 |
+
*/
|
402 |
+
public $cents;
|
403 |
+
|
404 |
+
/**
|
405 |
+
* @var double
|
406 |
+
*/
|
407 |
+
public $decimalValue;
|
408 |
+
|
409 |
+
/**
|
410 |
+
* @var int
|
411 |
+
*/
|
412 |
+
public $dollars;
|
413 |
+
|
414 |
+
/**
|
415 |
+
* @var boolean
|
416 |
+
*/
|
417 |
+
public $negative;
|
418 |
+
|
419 |
+
}
|
420 |
+
|
421 |
+
// Harapartners: TODO: address class is declared more than once in the checkout step saveShipping, further investigation need...
|
422 |
+
// Do not evoke autoload for class_exists
|
423 |
+
//if(!class_exists('address', false)){
|
424 |
+
class address {
|
425 |
+
|
426 |
+
/**
|
427 |
+
* @var string
|
428 |
+
*/
|
429 |
+
public $address1;
|
430 |
+
|
431 |
+
/**
|
432 |
+
* @var string
|
433 |
+
*/
|
434 |
+
public $address2;
|
435 |
+
|
436 |
+
/**
|
437 |
+
* @var array[0, unbounded] of string
|
438 |
+
*/
|
439 |
+
public $jurisdictions;
|
440 |
+
|
441 |
+
/**
|
442 |
+
* @var dateTime
|
443 |
+
*/
|
444 |
+
public $resolvedDate;
|
445 |
+
|
446 |
+
}
|
447 |
+
//}
|
448 |
+
|
449 |
+
class taxJurisdiction {
|
450 |
+
|
451 |
+
/**
|
452 |
+
* @var string
|
453 |
+
*/
|
454 |
+
public $jurisdictionFips;
|
455 |
+
|
456 |
+
/**
|
457 |
+
* @var string
|
458 |
+
*/
|
459 |
+
public $jurisdictionName;
|
460 |
+
|
461 |
+
}
|
462 |
+
|
463 |
+
class invoiceTax extends taxJurisdiction {
|
464 |
+
|
465 |
+
/**
|
466 |
+
* @var (object)price
|
467 |
+
*/
|
468 |
+
public $totalTax;
|
469 |
+
|
470 |
+
}
|
471 |
+
|
472 |
+
class postInvoiceResult extends calculateInvoiceResult {
|
473 |
+
|
474 |
+
/**
|
475 |
+
* @var (object)postTransaction
|
476 |
+
*/
|
477 |
+
public $transaction;
|
478 |
+
|
479 |
+
}
|
480 |
+
|
481 |
+
class postTransaction {
|
482 |
+
|
483 |
+
/**
|
484 |
+
* @var dateTime
|
485 |
+
*/
|
486 |
+
public $date;
|
487 |
+
|
488 |
+
/**
|
489 |
+
* @var string
|
490 |
+
*/
|
491 |
+
public $invoiceNumber;
|
492 |
+
|
493 |
+
/**
|
494 |
+
* @var string
|
495 |
+
*/
|
496 |
+
public $transactionId;
|
497 |
+
|
498 |
+
}
|
499 |
+
|
500 |
+
class postInvoices {
|
501 |
+
|
502 |
+
/**
|
503 |
+
* @var string
|
504 |
+
*/
|
505 |
+
public $CompanyId;
|
506 |
+
|
507 |
+
/**
|
508 |
+
* @var array[0, unbounded] of string
|
509 |
+
*/
|
510 |
+
public $InvoiceNumbers;
|
511 |
+
|
512 |
+
}
|
513 |
+
|
514 |
+
class postInvoicesResponse {
|
515 |
+
|
516 |
+
/**
|
517 |
+
* @var (object)postBatchInvoicesResult
|
518 |
+
*/
|
519 |
+
public $PostBatchInvoicesResult;
|
520 |
+
|
521 |
+
}
|
522 |
+
|
523 |
+
class postBatchInvoicesResult extends invoiceResult {
|
524 |
+
|
525 |
+
/**
|
526 |
+
* @var array[0, unbounded] of (object)postTransaction
|
527 |
+
*/
|
528 |
+
public $transactions;
|
529 |
+
|
530 |
+
}
|
531 |
+
|
532 |
+
class resolveAddress {
|
533 |
+
|
534 |
+
/**
|
535 |
+
* @var (object)address
|
536 |
+
*/
|
537 |
+
public $Address;
|
538 |
+
|
539 |
+
}
|
540 |
+
|
541 |
+
class resolveAddressResponse {
|
542 |
+
|
543 |
+
/**
|
544 |
+
* @var (object)resolveAddressResult
|
545 |
+
*/
|
546 |
+
public $ResolveAddressResult;
|
547 |
+
|
548 |
+
}
|
549 |
+
|
550 |
+
class resolveAddressResult {
|
551 |
+
|
552 |
+
/**
|
553 |
+
* @var array[0, unbounded] of (object)taxJurisdiction
|
554 |
+
* Or one of following derived class(es)
|
555 |
+
* invoiceTax
|
556 |
+
*/
|
557 |
+
public $jurisdictions;
|
558 |
+
|
559 |
+
/**
|
560 |
+
* @var (object)fullAddress
|
561 |
+
*/
|
562 |
+
public $resolvedAddress;
|
563 |
+
|
564 |
+
/**
|
565 |
+
* @var string
|
566 |
+
* NOTE: resultType should follow the following restrictions
|
567 |
+
* You can have one of the following value
|
568 |
+
* STATE
|
569 |
+
* FALLBACK
|
570 |
+
* FULL
|
571 |
+
* UNRESOLVED
|
572 |
+
*/
|
573 |
+
public $resultType;
|
574 |
+
|
575 |
+
}
|
576 |
+
|
577 |
+
class voidInvoice {
|
578 |
+
|
579 |
+
/**
|
580 |
+
* @var string
|
581 |
+
*/
|
582 |
+
public $CompanyId;
|
583 |
+
|
584 |
+
/**
|
585 |
+
* @var string
|
586 |
+
*/
|
587 |
+
public $InvoiceNumber;
|
588 |
+
|
589 |
+
}
|
590 |
+
|
591 |
+
class voidInvoiceResponse {
|
592 |
+
|
593 |
+
/**
|
594 |
+
* @var (object)invoiceResult
|
595 |
+
* Or one of following derived class(es)
|
596 |
+
* calculateInvoiceResult
|
597 |
+
* postInvoiceResult
|
598 |
+
* postBatchInvoicesResult
|
599 |
+
*/
|
600 |
+
public $InvoiceResult;
|
601 |
+
|
602 |
+
}
|
603 |
+
|
604 |
+
class getVersion {
|
605 |
+
|
606 |
+
}
|
607 |
+
|
608 |
+
class getVersionResponse {
|
609 |
+
|
610 |
+
/**
|
611 |
+
* @var string
|
612 |
+
*/
|
613 |
+
public $return;
|
614 |
+
|
615 |
+
}
|
616 |
+
|
617 |
+
class postInvoice {
|
618 |
+
|
619 |
+
/**
|
620 |
+
* @var string
|
621 |
+
*/
|
622 |
+
public $CompanyId;
|
623 |
+
|
624 |
+
/**
|
625 |
+
* @var (object)invoice
|
626 |
+
*/
|
627 |
+
public $Invoice;
|
628 |
+
|
629 |
+
}
|
630 |
+
|
631 |
+
class invoice {
|
632 |
+
|
633 |
+
/**
|
634 |
+
* @var string
|
635 |
+
*/
|
636 |
+
public $customerIdentifier;
|
637 |
+
|
638 |
+
/**
|
639 |
+
* @var string
|
640 |
+
*/
|
641 |
+
public $customerName;
|
642 |
+
|
643 |
+
/**
|
644 |
+
* @var boolean
|
645 |
+
*/
|
646 |
+
public $exempt;
|
647 |
+
|
648 |
+
/**
|
649 |
+
* @var string
|
650 |
+
*/
|
651 |
+
public $exemptionCertificate;
|
652 |
+
|
653 |
+
/**
|
654 |
+
* @var string
|
655 |
+
*/
|
656 |
+
public $exemptionReason;
|
657 |
+
|
658 |
+
/**
|
659 |
+
* @var dateTime
|
660 |
+
*/
|
661 |
+
public $invoiceDate;
|
662 |
+
|
663 |
+
/**
|
664 |
+
* @var string
|
665 |
+
*/
|
666 |
+
public $invoiceNumber;
|
667 |
+
|
668 |
+
/**
|
669 |
+
* @var string
|
670 |
+
* NOTE: invoiceType should follow the following restrictions
|
671 |
+
* You can have one of the following value
|
672 |
+
* INVOICE
|
673 |
+
* CREDIT
|
674 |
+
* DEBIT
|
675 |
+
* RETURN
|
676 |
+
* SALESORDER
|
677 |
+
*/
|
678 |
+
public $invoiceType;
|
679 |
+
|
680 |
+
/**
|
681 |
+
* @var array[0, unbounded] of (object)lineItem
|
682 |
+
*/
|
683 |
+
public $lineItems;
|
684 |
+
|
685 |
+
}
|
686 |
+
|
687 |
+
final class INVOICE_TYPES {
|
688 |
+
const INVOICE = "INVOICE";
|
689 |
+
const CREDIT = "CREDIT";
|
690 |
+
const DEBIT = "DEBIT";
|
691 |
+
const RET = "RETURN";
|
692 |
+
const SALESORDER = "SALESORDER";
|
693 |
+
|
694 |
+
// ensures that this class acts like an enum
|
695 |
+
// and that it cannot be instantiated
|
696 |
+
private function __construct(){}
|
697 |
+
}
|
698 |
+
|
699 |
+
class postInvoiceResponse {
|
700 |
+
|
701 |
+
/**
|
702 |
+
* @var (object)postInvoiceResult
|
703 |
+
*/
|
704 |
+
public $PostInvoiceResult;
|
705 |
+
|
706 |
+
}
|
707 |
+
|
708 |
+
class calculateInvoice {
|
709 |
+
|
710 |
+
/**
|
711 |
+
* @var string
|
712 |
+
*/
|
713 |
+
public $CompanyId;
|
714 |
+
|
715 |
+
/**
|
716 |
+
* @var (object)invoice
|
717 |
+
*/
|
718 |
+
public $Invoice;
|
719 |
+
|
720 |
+
}
|
721 |
+
|
722 |
+
class calculateInvoiceResponse {
|
723 |
+
|
724 |
+
/**
|
725 |
+
* @var (object)calculateInvoiceResult
|
726 |
+
* Or one of following derived class(es)
|
727 |
+
* postInvoiceResult
|
728 |
+
*/
|
729 |
+
public $CalculateInvoiceResult;
|
730 |
+
|
731 |
+
}
|
732 |
+
|
733 |
+
class ping {
|
734 |
+
|
735 |
+
}
|
736 |
+
|
737 |
+
class pingResponse {
|
738 |
+
|
739 |
+
/**
|
740 |
+
* @var string
|
741 |
+
*/
|
742 |
+
public $return;
|
743 |
+
|
744 |
+
}
|
745 |
+
|
746 |
+
// *******************************************************************
|
747 |
+
// * *
|
748 |
+
// * *** API FUNCTION *** *
|
749 |
+
// * *
|
750 |
+
// *******************************************************************
|
751 |
+
|
752 |
+
class SpeedTax
|
753 |
+
{
|
754 |
+
function Version()
|
755 |
+
{
|
756 |
+
return "1.4.a";
|
757 |
+
}
|
758 |
+
|
759 |
+
function CheckResult($result)
|
760 |
+
{
|
761 |
+
if (isset($result) && isset($result->faultstring) && strlen($result->faultstring) > 0)
|
762 |
+
{
|
763 |
+
throw new Exception("Error calling SpeedTax: " . $result->faultstring);
|
764 |
+
}
|
765 |
+
}
|
766 |
+
|
767 |
+
function Ping()
|
768 |
+
{
|
769 |
+
include "Credentials.inc";
|
770 |
+
include 'WsSecurity.inc';
|
771 |
+
|
772 |
+
$theMethodName = 'ping';
|
773 |
+
|
774 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
775 |
+
|
776 |
+
$result = $client->__soapCall($theMethodName, array("" => ""), null, $secHeader );
|
777 |
+
|
778 |
+
$this->CheckResult($result);
|
779 |
+
|
780 |
+
return $result;
|
781 |
+
}
|
782 |
+
|
783 |
+
function ResolveAddress($Address)
|
784 |
+
{
|
785 |
+
include "Credentials.inc";
|
786 |
+
include 'WsSecurity.inc';
|
787 |
+
|
788 |
+
$argumentsList = array ('Address'=> $Address);
|
789 |
+
|
790 |
+
$theMethodName = 'resolveAddress';
|
791 |
+
$theMethodSignature = CreateMethodSignature('resolveAddress', $argumentsList);
|
792 |
+
|
793 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
794 |
+
|
795 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
796 |
+
|
797 |
+
$this->CheckResult($result);
|
798 |
+
|
799 |
+
return $result;
|
800 |
+
}
|
801 |
+
|
802 |
+
function CalculateInvoice($Invoice)
|
803 |
+
{
|
804 |
+
return $this->CalculateOrPostInvoice($Invoice, false);
|
805 |
+
}
|
806 |
+
|
807 |
+
function PostInvoice($Invoice)
|
808 |
+
{
|
809 |
+
return $this->CalculateOrPostInvoice($Invoice, true);
|
810 |
+
}
|
811 |
+
|
812 |
+
function PostInvoices($InvoiceNumbers)
|
813 |
+
{
|
814 |
+
include "Credentials.inc";
|
815 |
+
include 'WsSecurity.inc';
|
816 |
+
|
817 |
+
$argumentsList = array ('CompanyId'=> $company, 'InvoiceNumbers'=> $InvoiceNumbers);
|
818 |
+
|
819 |
+
$theMethodName = 'postInvoices';
|
820 |
+
|
821 |
+
$theMethodSignature = CreateMethodSignature($theMethodName, $argumentsList);
|
822 |
+
|
823 |
+
// Need special client due to <SOAP-ENC:Struct> bug in PHP/SOAP when encoding arrays.
|
824 |
+
$client = new STSoapClient($wsdl, array("trace" => 1, "exceptions" => 0));
|
825 |
+
|
826 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
827 |
+
|
828 |
+
$this->CheckResult($result);
|
829 |
+
|
830 |
+
return $result;
|
831 |
+
}
|
832 |
+
|
833 |
+
function CalculateOrPostInvoice($Invoice, $post)
|
834 |
+
{
|
835 |
+
include "Credentials.inc";
|
836 |
+
include 'WsSecurity.inc';
|
837 |
+
|
838 |
+
$argumentsList = array ('CompanyId'=> $company, 'Invoice'=> $Invoice);
|
839 |
+
|
840 |
+
if ($post)
|
841 |
+
{
|
842 |
+
$theMethodName = 'postInvoice';
|
843 |
+
}
|
844 |
+
else
|
845 |
+
{
|
846 |
+
$theMethodName = 'calculateInvoice';
|
847 |
+
}
|
848 |
+
|
849 |
+
$theMethodSignature = CreateMethodSignature($theMethodName, $argumentsList);
|
850 |
+
|
851 |
+
// Need special client due to <SOAP-ENC:Struct> bug in PHP/SOAP when encoding arrays.
|
852 |
+
$client = new STSoapClient($wsdl, array("trace" => 1, "exceptions" => 0));
|
853 |
+
|
854 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
855 |
+
|
856 |
+
$this->CheckResult($result);
|
857 |
+
|
858 |
+
return $result;
|
859 |
+
}
|
860 |
+
|
861 |
+
function VoidInvoice($InvoiceNumber)
|
862 |
+
{
|
863 |
+
include "Credentials.inc";
|
864 |
+
include 'WsSecurity.inc';
|
865 |
+
|
866 |
+
$argumentsList = array ('CompanyId'=> $company, 'InvoiceNumber'=> $InvoiceNumber);
|
867 |
+
|
868 |
+
$theMethodName = 'voidInvoice';
|
869 |
+
|
870 |
+
$theMethodSignature = CreateMethodSignature($theMethodName, $argumentsList);
|
871 |
+
|
872 |
+
// Need special client due to <SOAP-ENC:Struct> bug in PHP/SOAP when encoding arrays.
|
873 |
+
$client = new STSoapClient($wsdl, array("trace" => 1, "exceptions" => 0));
|
874 |
+
|
875 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
876 |
+
|
877 |
+
$this->CheckResult($result);
|
878 |
+
|
879 |
+
return $result;
|
880 |
+
}
|
881 |
+
|
882 |
+
function CreateCustomer($Customer)
|
883 |
+
{
|
884 |
+
include "Credentials.inc";
|
885 |
+
include 'WsSecurity.inc';
|
886 |
+
|
887 |
+
$argumentsList = array ('CompanyId'=> $company, 'Customer'=> $Customer);
|
888 |
+
|
889 |
+
$theMethodName = 'createCustomer';
|
890 |
+
$theMethodSignature = CreateMethodSignature('createCustomer', $argumentsList);
|
891 |
+
|
892 |
+
//dbgprint("XML Request:\n");
|
893 |
+
//print_r($theMethodSignature);
|
894 |
+
|
895 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
896 |
+
|
897 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
898 |
+
|
899 |
+
$this->CheckResult($result);
|
900 |
+
|
901 |
+
return $result;
|
902 |
+
}
|
903 |
+
|
904 |
+
function EditCustomer($Customer)
|
905 |
+
{
|
906 |
+
include "Credentials.inc";
|
907 |
+
include 'WsSecurity.inc';
|
908 |
+
|
909 |
+
$argumentsList = array ('CompanyId'=> $company, 'Customer'=> $Customer);
|
910 |
+
|
911 |
+
$theMethodName = 'editCustomer';
|
912 |
+
$theMethodSignature = CreateMethodSignature('editCustomer', $argumentsList);
|
913 |
+
|
914 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
915 |
+
|
916 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
917 |
+
|
918 |
+
$this->CheckResult($result);
|
919 |
+
|
920 |
+
return $result;
|
921 |
+
}
|
922 |
+
|
923 |
+
function CreateExemption($ExemptionCertificate)
|
924 |
+
{
|
925 |
+
include "Credentials.inc";
|
926 |
+
include 'WsSecurity.inc';
|
927 |
+
|
928 |
+
$argumentsList = array ('CompanyId'=> $company, 'Exemption'=> $ExemptionCertificate);
|
929 |
+
|
930 |
+
$theMethodName = 'createExemption';
|
931 |
+
$theMethodSignature = CreateMethodSignature('createExemption', $argumentsList);
|
932 |
+
|
933 |
+
//dbgprint("XML Request:\n");
|
934 |
+
//print_r($theMethodSignature);
|
935 |
+
|
936 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
937 |
+
|
938 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
939 |
+
|
940 |
+
$this->CheckResult($result);
|
941 |
+
|
942 |
+
return $result;
|
943 |
+
}
|
944 |
+
|
945 |
+
function EditExemption($ExemptionCertificate)
|
946 |
+
{
|
947 |
+
include "Credentials.inc";
|
948 |
+
include 'WsSecurity.inc';
|
949 |
+
|
950 |
+
$argumentsList = array ('CompanyId'=> $company, 'Exemption'=> $ExemptionCertificate);
|
951 |
+
|
952 |
+
$theMethodName = 'editExemption';
|
953 |
+
$theMethodSignature = CreateMethodSignature('editExemption', $argumentsList);
|
954 |
+
|
955 |
+
$client = new SoapClient($wsdl, array("trace" => 0, "exceptions" => 0));
|
956 |
+
|
957 |
+
$result = $client->__soapCall($theMethodName, $theMethodSignature, null, $secHeader );
|
958 |
+
|
959 |
+
$this->CheckResult($result);
|
960 |
+
|
961 |
+
return $result;
|
962 |
+
}
|
963 |
+
}
|
app/code/local/Harapartners/SpeedTax/lib/SpeedTaxUtil.inc
ADDED
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php
|
4 |
+
// *******************************************************************
|
5 |
+
// * *
|
6 |
+
// * *** UTIL FUNCTION *** *
|
7 |
+
// * *
|
8 |
+
// *******************************************************************
|
9 |
+
|
10 |
+
//
|
11 |
+
// All output is formatted for the console, not for a web page
|
12 |
+
//
|
13 |
+
|
14 |
+
function STLog($text)
|
15 |
+
{
|
16 |
+
$myFile = "phplog.txt";
|
17 |
+
$fh = fopen($myFile, 'w') or die("can't open file");
|
18 |
+
fwrite($fh, $text);
|
19 |
+
fclose($fh);
|
20 |
+
}
|
21 |
+
|
22 |
+
function DisplayInvoiceResult($result)
|
23 |
+
{
|
24 |
+
|
25 |
+
foreach ($result as $name => $value)
|
26 |
+
{
|
27 |
+
switch ($name)
|
28 |
+
{
|
29 |
+
case 'resultType':
|
30 |
+
print "Result............: " . $value . "\n";
|
31 |
+
break;
|
32 |
+
case 'lineItemBundles':
|
33 |
+
print "Line Item Bundle:\n";
|
34 |
+
DisplayInvoiceBundle($value);
|
35 |
+
break;
|
36 |
+
case 'totalExemptSales':
|
37 |
+
print "Total Exempt Sales: $" . number_format($value->decimalValue, 2) . "\n";
|
38 |
+
break;
|
39 |
+
case 'totalSales':
|
40 |
+
print "Total Sales.......: $" . number_format($value->decimalValue, 2) . "\n";
|
41 |
+
break;
|
42 |
+
case 'totalTax':
|
43 |
+
print "Total Tax.........: $" . number_format($value->decimalValue, 2) . "\n";
|
44 |
+
break;
|
45 |
+
}
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
/*
|
50 |
+
This function might receive one single bundle or an array of bundles
|
51 |
+
*/
|
52 |
+
function DisplayInvoiceBundle($bundle)
|
53 |
+
{
|
54 |
+
if (is_array($bundle))
|
55 |
+
{
|
56 |
+
foreach ($bundle as $value)
|
57 |
+
{
|
58 |
+
DisplayOneInvoiceBundle($value);
|
59 |
+
}
|
60 |
+
}
|
61 |
+
else
|
62 |
+
{
|
63 |
+
DisplayOneInvoiceBundle($bundle);
|
64 |
+
}
|
65 |
+
}
|
66 |
+
|
67 |
+
function DisplayOneInvoiceBundle($value)
|
68 |
+
{
|
69 |
+
print " Address for Tax:\n";
|
70 |
+
DisplayFullAddress($value->addressForTax, " ");
|
71 |
+
print " Line Item:\n";
|
72 |
+
DisplayLineItem($value->lineItems);
|
73 |
+
print " Recalculated Jurisdictions: " . $value->recalculatedJurisdictions . "\n";
|
74 |
+
print " Result Type: " . $value->resultType . "\n";
|
75 |
+
print " Taxes: \n";
|
76 |
+
|
77 |
+
if (isset($value->taxes))
|
78 |
+
{
|
79 |
+
DisplayTaxes($value->taxes);
|
80 |
+
}
|
81 |
+
}
|
82 |
+
|
83 |
+
function DisplayLineItem($item)
|
84 |
+
{
|
85 |
+
// We might get one line item or an array of line items. Use recursion to simplify.
|
86 |
+
// This is a different path than the one used for line item bundles, which defines
|
87 |
+
// a separate function
|
88 |
+
if (is_array($item))
|
89 |
+
{
|
90 |
+
foreach ($item as $value)
|
91 |
+
{
|
92 |
+
DisplayLineItem($value);
|
93 |
+
}
|
94 |
+
}
|
95 |
+
else
|
96 |
+
{
|
97 |
+
foreach ($item as $name => $value)
|
98 |
+
{
|
99 |
+
switch ($name)
|
100 |
+
{
|
101 |
+
case 'lineItemNumber':
|
102 |
+
print " Line Item Number: " . $value . "\n";
|
103 |
+
break;
|
104 |
+
case 'customReference':
|
105 |
+
print " Custom Reference: " . $value . "\n";
|
106 |
+
break;
|
107 |
+
case 'productCode':
|
108 |
+
print " Product Code....: " . $value . "\n";
|
109 |
+
break;
|
110 |
+
case 'taxAmount':
|
111 |
+
print " Tax.............: $" . DisplayAmount($value) . "\n";
|
112 |
+
break;
|
113 |
+
case 'salesAmount':
|
114 |
+
print " Sales Amount....: $" . DisplayAmount($value) . "\n";
|
115 |
+
break;
|
116 |
+
case 'nonTaxableSalesAmount':
|
117 |
+
print " Non-Tax. Amt....: $" . DisplayAmount($value) . "\n";
|
118 |
+
break;
|
119 |
+
case 'taxableSalesAmount':
|
120 |
+
print " Taxable Amt.....: $" . DisplayAmount($value) . "\n";
|
121 |
+
break;
|
122 |
+
case 'taxes':
|
123 |
+
print " Line Item Tax Breakdown:\n";
|
124 |
+
DisplayTaxes($value);
|
125 |
+
break;
|
126 |
+
default:
|
127 |
+
//print $name . "\n";
|
128 |
+
break;
|
129 |
+
}
|
130 |
+
}
|
131 |
+
}
|
132 |
+
print " --------\n";
|
133 |
+
}
|
134 |
+
|
135 |
+
function DisplayTaxes($value)
|
136 |
+
{
|
137 |
+
if (!isset($value))
|
138 |
+
{
|
139 |
+
return;
|
140 |
+
}
|
141 |
+
|
142 |
+
if (is_array($value))
|
143 |
+
{
|
144 |
+
foreach($value as $tax)
|
145 |
+
{
|
146 |
+
DisplayTaxes($tax);
|
147 |
+
//print " " . $tax->jurisdictionName . " (" . $tax->jurisdictionFips . "): $" . DisplayAmount($tax->totalTax) . "\n";
|
148 |
+
}
|
149 |
+
}
|
150 |
+
else
|
151 |
+
{
|
152 |
+
$tax = $value; // There was only one tax, so $value is not an array but rather the specific tax object.
|
153 |
+
print " " . $tax->jurisdictionName . " (" . $tax->jurisdictionFips . "): $" . DisplayAmount($tax->totalTax) . "\n";
|
154 |
+
}
|
155 |
+
|
156 |
+
}
|
157 |
+
|
158 |
+
function DisplayAmount($value)
|
159 |
+
{
|
160 |
+
|
161 |
+
if (isset($value->decimalValue))
|
162 |
+
{
|
163 |
+
$amt = $value->decimalValue;
|
164 |
+
}
|
165 |
+
else
|
166 |
+
{
|
167 |
+
$amt = 0;
|
168 |
+
|
169 |
+
if (isset($value->dollars))
|
170 |
+
{
|
171 |
+
$amt = $value->dollars;
|
172 |
+
}
|
173 |
+
if (isset($value->cents))
|
174 |
+
{
|
175 |
+
$amt = $amt + ($value->cents / 100);
|
176 |
+
}
|
177 |
+
}
|
178 |
+
|
179 |
+
return number_format($amt, 2);
|
180 |
+
}
|
181 |
+
|
182 |
+
function DisplayFullAddress($fullAddress, $prefix)
|
183 |
+
{
|
184 |
+
if (isset($prefix)) print $prefix;
|
185 |
+
print $fullAddress->address . "\n";
|
186 |
+
|
187 |
+
if (isset($prefix)) print $prefix;
|
188 |
+
print $fullAddress->city . ", " . $fullAddress->state . " " . $fullAddress->zip . "\n";
|
189 |
+
}
|
190 |
+
|
191 |
+
function DisplayJurisdictions($jurisdictions)
|
192 |
+
{
|
193 |
+
foreach($jurisdictions as $j)
|
194 |
+
{
|
195 |
+
print $j->jurisdictionName . " (" . $j->jurisdictionFips . ")\n";
|
196 |
+
}
|
197 |
+
}
|
198 |
+
|
199 |
+
function DisplayErrors($errors)
|
200 |
+
{
|
201 |
+
if (is_array($errors))
|
202 |
+
{
|
203 |
+
foreach($errors as $e)
|
204 |
+
{
|
205 |
+
DisplayErrors($e);
|
206 |
+
}
|
207 |
+
}
|
208 |
+
else
|
209 |
+
{
|
210 |
+
print $errors . "\n";
|
211 |
+
}
|
212 |
+
}
|
213 |
+
|
214 |
+
function DisplayInvoice($invoice)
|
215 |
+
{
|
216 |
+
foreach ($invoice as $name => $value)
|
217 |
+
{
|
218 |
+
//print "Name" . $name . ": ";
|
219 |
+
//print_r ($value);
|
220 |
+
|
221 |
+
switch ($name)
|
222 |
+
{
|
223 |
+
case 'customerIdentifier':
|
224 |
+
print 'customerIdentifier..: ' . $value . "\n";
|
225 |
+
break;
|
226 |
+
case 'customerName':
|
227 |
+
print 'customerName........: ' . $value . "\n";
|
228 |
+
break;
|
229 |
+
case 'exempt':
|
230 |
+
print 'exempt..............: ' . $value . "\n";
|
231 |
+
break;
|
232 |
+
case 'exemptionCertificate':
|
233 |
+
print 'exemptionCertificate: ' . $value . "\n";
|
234 |
+
break;
|
235 |
+
case 'exemptionReason':
|
236 |
+
print 'exemptionReason.....: ' . $value . "\n";
|
237 |
+
break;
|
238 |
+
case 'invoiceDate':
|
239 |
+
print 'invoiceDate.........: ' . $value . "\n";
|
240 |
+
break;
|
241 |
+
case 'invoiceNumber':
|
242 |
+
print 'invoiceNumber.......: ' . $value . "\n";
|
243 |
+
break;
|
244 |
+
case 'invoiceType':
|
245 |
+
print 'invoiceType.........: ' . $value . "\n";
|
246 |
+
break;
|
247 |
+
//case 'lineItems':
|
248 |
+
// print "Line Items:\n";
|
249 |
+
// DisplayLineItem($value);
|
250 |
+
// break;
|
251 |
+
default:
|
252 |
+
//print $name . " = " . $value;
|
253 |
+
break;
|
254 |
+
}
|
255 |
+
}
|
256 |
+
|
257 |
+
print "Line Items:\n";
|
258 |
+
|
259 |
+
foreach ($invoice->lineItems as $name => $value)
|
260 |
+
{
|
261 |
+
DisplayLineItem($value);
|
262 |
+
}
|
263 |
+
}
|
app/code/local/Harapartners/SpeedTax/lib/WsSecurity.inc
ADDED
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php
|
4 |
+
|
5 |
+
// Inspired by https://www6.software.ibm.com/developerworks/education/ws-soa-callsecurephp/ws-soa-callsecurephp-pdf.pdf
|
6 |
+
|
7 |
+
//2009-04-07T16:04:49Z
|
8 |
+
$utcCreated = str_replace("+00:00", "Z", gmdate("c", time()));
|
9 |
+
$utcExpires = str_replace("+00:00", "Z", gmdate("c", (time() + 60*2)));
|
10 |
+
|
11 |
+
$nsWsse = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; //WS-Security nsWsse
|
12 |
+
$nsWsu = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd";
|
13 |
+
$nsTypeText = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText";
|
14 |
+
|
15 |
+
$userT = new SoapVar($username, XSD_STRING, NULL, $nsWsse, NULL, $nsWsse);
|
16 |
+
$passwT = new SoapVar($password, XSD_STRING, NULL, $nsWsse, NULL, $nsWsse);
|
17 |
+
$nonceT = new SoapVar('wh66ztc4ZaCn2SFMpKDY/w==', XSD_STRING, NULL, $nsWsse, NULL, $nsWsse);
|
18 |
+
|
19 |
+
$createdT = new SoapVar($utcCreated, XSD_STRING, NULL, $nsWsu, NULL, $nsWsu);
|
20 |
+
$expiresT = new SoapVar($utcExpires, XSD_STRING, NULL, $nsWsu, NULL, $nsWsu);
|
21 |
+
$ts = new SOAPTimestamp($createdT, $expiresT);
|
22 |
+
$timestampT = new SoapVar($ts, SOAP_ENC_OBJECT, NULL, $nsWsu, NULL, $nsWsu);
|
23 |
+
|
24 |
+
$tmp = new UsernameT1($userT, $passwT, $nonceT, $createdT);
|
25 |
+
$uuT = new SoapVar($tmp, SOAP_ENC_OBJECT, NULL, $nsWsse, 'UsernameToken', $nsWsse);
|
26 |
+
|
27 |
+
$tmp = new UsernameT2($timestampT, $uuT);
|
28 |
+
$userToken = new SoapVar($tmp, SOAP_ENC_OBJECT, NULL, $nsWsse, 'UsernameToken', $nsWsse);
|
29 |
+
|
30 |
+
$secHeaderValue=new SoapVar($userToken, SOAP_ENC_OBJECT, NULL, $nsWsse, 'Security', $nsWsse);
|
31 |
+
$secHeader = new SoapHeader($nsWsse, 'Security', $secHeaderValue, true);
|
app/code/local/Harapartners/SpeedTax/lib/WsSecurityTypes.inc
ADDED
@@ -0,0 +1,269 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php
|
4 |
+
//include_once 'log.php';
|
5 |
+
|
6 |
+
function dbgprint($text)
|
7 |
+
{
|
8 |
+
// Comment in/out line below to output debug info to stdout
|
9 |
+
//print $text;
|
10 |
+
}
|
11 |
+
|
12 |
+
// Inspired by https://www6.software.ibm.com/developerworks/education/ws-soa-callsecurephp/ws-soa-callsecurephp-pdf.pdf
|
13 |
+
|
14 |
+
class SOAPTimestamp {
|
15 |
+
private $Created;
|
16 |
+
private $Expires;
|
17 |
+
function __construct($c, $e)
|
18 |
+
{
|
19 |
+
$this->Created = $c;
|
20 |
+
$this->Expires = $e;
|
21 |
+
}
|
22 |
+
}
|
23 |
+
|
24 |
+
class UsernameT1
|
25 |
+
{
|
26 |
+
private $Username; //Name must be identical to corresponding XML tag in SOAP header
|
27 |
+
private $Password; // Name must be identical to corresponding XML tag in SOAP header
|
28 |
+
private $Nonce;
|
29 |
+
private $Created;
|
30 |
+
function __construct($username, $password, $nonce, $created)
|
31 |
+
{
|
32 |
+
$this->Username=$username;
|
33 |
+
$this->Password=$password;
|
34 |
+
$this->Nonce=$nonce;
|
35 |
+
$this->Created=$created;
|
36 |
+
}
|
37 |
+
}
|
38 |
+
|
39 |
+
class UserNameT2
|
40 |
+
{
|
41 |
+
private $Timestamp;
|
42 |
+
private $UsernameToken; //Name must be identical to corresponding XML tag in SOAP header
|
43 |
+
function __construct ($ts, $ut)
|
44 |
+
{
|
45 |
+
$this->Timestamp = $ts;
|
46 |
+
$this->UsernameToken = $ut;
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
class STSoapClient extends SoapClient
|
51 |
+
{
|
52 |
+
function emptyNodeList($nodes)
|
53 |
+
{
|
54 |
+
if (is_null($nodes) || count($nodes) == 0)
|
55 |
+
{
|
56 |
+
return true;
|
57 |
+
}
|
58 |
+
|
59 |
+
foreach ($nodes as $node)
|
60 |
+
{
|
61 |
+
if ($node->textContent != "") return false;
|
62 |
+
}
|
63 |
+
|
64 |
+
return true;
|
65 |
+
}
|
66 |
+
|
67 |
+
function printNodeList($nodes)
|
68 |
+
{
|
69 |
+
print "NODES:\n";
|
70 |
+
foreach ($nodes as $node) { print $node->textContent . " / "; }
|
71 |
+
print "-------\n";
|
72 |
+
}
|
73 |
+
|
74 |
+
function __doRequest($request, $location, $action, $version, $one_way=0)
|
75 |
+
{
|
76 |
+
$dom = new DOMDocument('1.0');
|
77 |
+
|
78 |
+
try
|
79 |
+
{
|
80 |
+
//loads the SOAP request to the Document
|
81 |
+
$dom->loadXML($request);
|
82 |
+
}
|
83 |
+
catch (DOMException $e)
|
84 |
+
{
|
85 |
+
die('XML parse error with code ' . $e->code);
|
86 |
+
}
|
87 |
+
|
88 |
+
//create a XPath object to query the request
|
89 |
+
$path = new DOMXPath($dom);
|
90 |
+
|
91 |
+
//echo $request;
|
92 |
+
$nodesPostInvoice = $path->query('//ns1:postInvoice');
|
93 |
+
$nodesCalcInvoice = $path->query('//ns1:calculateInvoice');
|
94 |
+
|
95 |
+
if (!$this->emptyNodeList($nodesCalcInvoice))
|
96 |
+
{
|
97 |
+
$mustFixLineItems = true;
|
98 |
+
$method = 'calculateInvoice';
|
99 |
+
}
|
100 |
+
else if (!$this->emptyNodeList($nodesPostInvoice))
|
101 |
+
{
|
102 |
+
$mustFixLineItems = true;
|
103 |
+
$method = 'postInvoice';
|
104 |
+
}
|
105 |
+
else
|
106 |
+
{
|
107 |
+
$mustFixLineItems = false;
|
108 |
+
}
|
109 |
+
|
110 |
+
if ($mustFixLineItems)
|
111 |
+
{
|
112 |
+
//search for a node
|
113 |
+
$nodesToFix = $path->query('//SOAP-ENV:Envelope/SOAP-ENV:Body/ns1:' . $method . '/Invoice/lineItems/SOAP-ENC:Struct');
|
114 |
+
|
115 |
+
//check if nodes are ok
|
116 |
+
$this->fixLineItems($path, $nodesToFix);
|
117 |
+
}
|
118 |
+
|
119 |
+
//save the modified SOAP request
|
120 |
+
$request = $dom->saveXML();
|
121 |
+
|
122 |
+
//doRequest
|
123 |
+
return parent::__doRequest($request, $location, $action, $version);
|
124 |
+
}
|
125 |
+
|
126 |
+
function fixLineItems(DOMXPath $path, DOMNodeList $nodes)
|
127 |
+
{
|
128 |
+
//iterate through the node list
|
129 |
+
for ($i = 0; $i < $nodes->length; $i++)
|
130 |
+
{
|
131 |
+
$node = $nodes->item($i);
|
132 |
+
|
133 |
+
if (!isset($grandparentNode))
|
134 |
+
{
|
135 |
+
// All of these nodes have the same grandparent
|
136 |
+
$parentNode = $node->parentNode;
|
137 |
+
$grandparentNode = $node->parentNode->parentNode;
|
138 |
+
}
|
139 |
+
|
140 |
+
$newNodeName = $node->parentNode->nodeName;
|
141 |
+
|
142 |
+
// Figure out who will hold the new items
|
143 |
+
|
144 |
+
$newNode = new DOMElement($newNodeName);
|
145 |
+
$grandparentNode->appendChild($newNode);
|
146 |
+
|
147 |
+
$this->CopyNodes($node, $newNode);
|
148 |
+
}
|
149 |
+
|
150 |
+
// Remove the old SOAP-ENC:Struct container
|
151 |
+
$grandparentNode->removeChild($parentNode);
|
152 |
+
|
153 |
+
//print "Saving...";
|
154 |
+
//$grandparentNode->ownerDocument->saveHTMLFile("C:\dev-integration\PhpApi\Fix.xml");
|
155 |
+
//print "DONE\n";
|
156 |
+
}
|
157 |
+
|
158 |
+
function CopyNodes($oldParent, $newParent)
|
159 |
+
{
|
160 |
+
foreach ($oldParent->childNodes as $oldChildNode)
|
161 |
+
{
|
162 |
+
if ($oldChildNode->nodeType != 1)
|
163 |
+
{
|
164 |
+
continue;
|
165 |
+
}
|
166 |
+
|
167 |
+
$newChildNode = new DOMElement($oldChildNode->nodeName, $oldChildNode->nodeValue);
|
168 |
+
|
169 |
+
$newParent->appendChild($newChildNode);
|
170 |
+
|
171 |
+
if ($oldChildNode->hasChildNodes())
|
172 |
+
{
|
173 |
+
$this->CopyNodes($oldChildNode, $newChildNode);
|
174 |
+
}
|
175 |
+
}
|
176 |
+
|
177 |
+
}
|
178 |
+
|
179 |
+
function __doRequest__OLD($request, $location, $action, $version)
|
180 |
+
{
|
181 |
+
$arrayToFix = 'lineItems';
|
182 |
+
|
183 |
+
$request = str_replace('</SOAP-ENC:Struct><SOAP-ENC:Struct>', '</' . $arrayToFix . '><' . $arrayToFix . '>', $request);
|
184 |
+
$request = str_replace('<SOAP-ENC:Struct>', '', $request);
|
185 |
+
$request = str_replace('</SOAP-ENC:Struct>', '', $request);
|
186 |
+
|
187 |
+
// parent call
|
188 |
+
return parent::__doRequest($request, $location, $action, $version );
|
189 |
+
}
|
190 |
+
}
|
191 |
+
|
192 |
+
function createMethodSignature($theMethod, $paramAr)
|
193 |
+
{
|
194 |
+
if (null == $paramAr)
|
195 |
+
return array($theMethod =>null);
|
196 |
+
$used = null;
|
197 |
+
dbgprint("[CMS] processing $theMethod\n");
|
198 |
+
foreach ($paramAr as $name => $value)
|
199 |
+
{
|
200 |
+
if (is_array($value) || is_object($value))
|
201 |
+
{
|
202 |
+
dbgprint("[CMS] $name is an object or array\n");
|
203 |
+
$used[$name] = createMixedValueSignature($value);
|
204 |
+
}
|
205 |
+
else
|
206 |
+
{
|
207 |
+
dbgprint("[CMS] $name = $value\n");
|
208 |
+
$used[$name] = $value;
|
209 |
+
}
|
210 |
+
}
|
211 |
+
return array($theMethod =>$used);
|
212 |
+
}
|
213 |
+
|
214 |
+
//---------------------------------------------------------------------
|
215 |
+
// inner routine: packing an inner complex parameter into a SOAP-valid representation
|
216 |
+
function createMixedValueSignature($MixedVals)
|
217 |
+
{
|
218 |
+
$mixedParamsList = null;
|
219 |
+
if (is_object($MixedVals))
|
220 |
+
{
|
221 |
+
dbgprint("[CMVS] got an object\n");
|
222 |
+
foreach ($MixedVals as $name => $value)
|
223 |
+
{
|
224 |
+
if (is_object($value) || is_array($value))
|
225 |
+
{
|
226 |
+
dbgprint("[CMVS] $name is an object or array\n");
|
227 |
+
$mixedParamsList->$name = createMixedValueSignature($value);
|
228 |
+
}
|
229 |
+
else
|
230 |
+
{
|
231 |
+
if (isset($value))
|
232 |
+
{
|
233 |
+
dbgprint("[CMVS] $name = $value\n");
|
234 |
+
$mixedParamsList->$name = $value;
|
235 |
+
}
|
236 |
+
}
|
237 |
+
}
|
238 |
+
// an object needs to be passed as SoapVar
|
239 |
+
return new SoapVar($mixedParamsList, SOAP_ENC_OBJECT , NULL, NULL);
|
240 |
+
}
|
241 |
+
else
|
242 |
+
{ // an array
|
243 |
+
dbgprint("[CMVS] got an array\n");
|
244 |
+
|
245 |
+
foreach ($MixedVals as $name => $value)
|
246 |
+
{
|
247 |
+
if (is_object($value) || is_array($value))
|
248 |
+
{
|
249 |
+
dbgprint("[CMVS] $name is an object or array\n");
|
250 |
+
$mixedParamsList[$name] = createMixedValueSignature($value);
|
251 |
+
}
|
252 |
+
else
|
253 |
+
{
|
254 |
+
//die ("Array Element: " . $name . "=" . $value);
|
255 |
+
if (isset($value))
|
256 |
+
{
|
257 |
+
dbgprint("[CMVS] $name = $value\n");
|
258 |
+
$mixedParamsList[$name] = $value;
|
259 |
+
}
|
260 |
+
}
|
261 |
+
}
|
262 |
+
// an array is passed as is !!
|
263 |
+
return $mixedParamsList;
|
264 |
+
// EJ: Or as SOAP_ENC_ARRAY?
|
265 |
+
//print "DEBUG: Encoding array\n";
|
266 |
+
//print_r($mixedParamsList);
|
267 |
+
//return new SoapVar($mixedParamsList, SOAP_ENC_ARRAY);
|
268 |
+
}
|
269 |
+
}
|
app/code/local/Harapartners/SpeedTax/sql/speedtax_setup/mysql4-install-2.0.0.php
ADDED
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
copyright notice
|
2 |
+
|
3 |
+
<?php $RxQgNcbf = $this; $RxQgNcbf->startSetup(); $RxQgNcbf->run("
|
4 |
+
|
5 |
+
DROP TABLE IF EXISTS {$this->getTable('speedtax_log/error')};
|
6 |
+
CREATE TABLE {$this->getTable('speedtax_log/error')} (
|
7 |
+
`log_id` int(10) unsigned NOT NULL auto_increment,
|
8 |
+
`event` varchar(255) NOT NULL default '',
|
9 |
+
`message` text NOT NULL default '',
|
10 |
+
`result_type` varchar(255) NOT NULL default '',
|
11 |
+
`address_shipping_from` text NOT NULL default '',
|
12 |
+
`address_shipping_to` text NOT NULL default '',
|
13 |
+
`customer_name` varchar(255) NOT NULL default '',
|
14 |
+
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
15 |
+
PRIMARY KEY (`log_id`)
|
16 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Speedtax Error Log';
|
17 |
+
"); $RxQgNcbf->run("
|
18 |
+
DROP TABLE IF EXISTS {$this->getTable('speedtax_log/call')};
|
19 |
+
CREATE TABLE {$this->getTable('speedtax_log/call')} (
|
20 |
+
`log_id` int(10) unsigned NOT NULL auto_increment,
|
21 |
+
`event` varchar(255) NOT NULL default '',
|
22 |
+
`result_type` varchar(255) NOT NULL default '',
|
23 |
+
`invoice_num` varchar(255) NOT NULL default '',
|
24 |
+
`gross` varchar(255) NOT NULL default '',
|
25 |
+
`exempt` varchar(255) NOT NULL default '',
|
26 |
+
`tax` varchar(255) NOT NULL default '',
|
27 |
+
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
28 |
+
PRIMARY KEY (`log_id`)
|
29 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Speedtax Call Log';
|
30 |
+
"); $RxQgNcbf->endSetup();
|
app/etc/modules/Harapartners_SpeedTax.xml
ADDED
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<!--
|
3 |
+
/*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the End User Software Agreement (EULA).
|
7 |
+
* It is also available through the world-wide-web at this URL:
|
8 |
+
* http://www.harapartners.com/license
|
9 |
+
* If you did not receive a copy of the license and are unable to
|
10 |
+
* obtain it through the world-wide-web, please send an email
|
11 |
+
* to eula@harapartners.com so we can send you a copy immediately.
|
12 |
+
*
|
13 |
+
*/
|
14 |
+
-->
|
15 |
+
|
16 |
+
|
17 |
+
<config>
|
18 |
+
<modules>
|
19 |
+
<Harapartners_SpeedTax>
|
20 |
+
<active>true</active>
|
21 |
+
<codePool>local</codePool>
|
22 |
+
</Harapartners_SpeedTax>
|
23 |
+
</modules>
|
24 |
+
</config>
|
package.xml
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?xml version="1.0"?>
|
2 |
+
<package>
|
3 |
+
<name>SalesTax_Connector</name>
|
4 |
+
<version>2.0.0</version>
|
5 |
+
<stability>stable</stability>
|
6 |
+
<license uri="http://www.harapartners.com/terms/eula">Hara Partners End User License Agreement</license>
|
7 |
+
<channel>community</channel>
|
8 |
+
<extends/>
|
9 |
+
<summary>Simplify sales and use tax calculation, compliance, and management in the cloud! </summary>
|
10 |
+
<description>Simplify sales and use tax calculation, compliance, and management in the cloud! </description>
|
11 |
+
<notes>Simplify sales and use tax calculation, compliance, and management in the cloud! </notes>
|
12 |
+
<authors><author><name>Hara Partners</name><user>merne</user><email>m.erne@harapartners.com</email></author><author><name>CCH</name><user>kennuneswo</user><email>Ken.nunes@wolterskluwer.com</email></author></authors>
|
13 |
+
<date>2013-07-15</date>
|
14 |
+
<time>17:22:53</time>
|
15 |
+
<contents><target name="magelocal"><dir name="Harapartners"><dir name="SpeedTax"><dir name="Block"><dir name="Adminhtml"><dir name="Log"><dir name="Call"><dir name="Index"><file name="Grid.php" hash="164ada1fd9e16bfb6a65dc755723db55"/></dir><file name="Index.php" hash="9b6540aacbd161558b5d63f78dfce254"/></dir><dir name="Error"><dir name="Index"><file name="Grid.php" hash="58081496853da2042308de64875621c1"/></dir><file name="Index.php" hash="f13a2cedb88396ecc120d042d4289b6e"/></dir></dir><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Export.php" hash="102f2bb4fa2263820fc47f06174e03e8"/><file name="Ping.php" hash="4156413a277b425e7f8e6e504a59d524"/></dir></dir></dir></dir></dir><dir name="Checkout"><dir name="Onepage"><dir name="Shipping"><dir name="Method"><file name="Available.php" hash="63415154783531cc4a8cda150a1e59c6"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="cca6444e58408bd88a67f7bb29fdf1e6"/></dir><dir name="Model"><file name="Abstract.php" hash="e33c4090bd4fb261c1207428af3e8bb2"/><dir name="Adminhtml"><file name="Usregions.php" hash="99ca2f140d0c7b38f4a758c3410b4290"/></dir><dir name="Checkout"><dir name="Type"><file name="Multishipping.php" hash="b287ca15dfb41bc16ae8e459fbc3c1fa"/></dir></dir><dir name="Log"><file name="Call.php" hash="b1f7fcfd3ef0c6494a662ff084f8fd7e"/><file name="Error.php" hash="29c555cf97e5ef5cbd218bcc0ec11f2a"/><dir name="Mysql4"><dir name="Call"><file name="Collection.php" hash="8a1887440d8efc79a9f2da0bdf585c5d"/></dir><file name="Call.php" hash="2e4ea8d3d2eb50fe052ea4d3e7e7a5fe"/><dir name="Error"><file name="Collection.php" hash="b2d101ec9355736ac8495ff233a0021b"/></dir><file name="Error.php" hash="7b9ff773d677a2dc6317b4d052d848e9"/></dir></dir><file name="Log.php" hash="e1b16752470cc661f179dd7e30b59bb0"/><file name="Observer.php" hash="d62a2ff2d760cc41c145b543b4b97411"/><dir name="Sales"><dir name="Quote"><file name="Address.php" hash="8152f4ad12988d6ae56f368d22906b1c"/></dir></dir><file name="Session.php" hash="df8e23bdfa4574053ce0f5dcca8fd962"/><dir name="Speedtax"><file name="Abstract.php" hash="1d7c1118963f00d73269e9536eaf3eb5"/><file name="Address.php" hash="c558fc9608bcc21da874750f9d5841a2"/><file name="Calculate.php" hash="0a3960c26efb8a6195b9d2737e08e378"/><dir name="Exception"><file name="Address.php" hash="bb2ad0be52329fe4dc4deb50485eae29"/></dir></dir><dir name="Tax"><dir name="Sales"><dir name="Total"><dir name="Quote"><file name="Tax.php" hash="396d5a889efb6b8b49e59b6fa54dfd83"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Log"><file name="CallController.php" hash="858d62f59cb7b9649a9cfe252a4847f2"/><file name="ErrorController.php" hash="faa2499f262eb292b4efae794dd8ab51"/></dir><file name="PingController.php" hash="6c5f49b5078d8cbcef61177847c99910"/></dir></dir><dir name="etc"><file name="config.xml" hash="badc3caa0a566da2c1da2c8164a0f6e8"/><file name="system.xml" hash="0f787644d761de0fa87aac6fbdd8b8d0"/></dir><dir name="lib"><file name="Credentials.inc" hash="1bb03b43c6adb56e6ea39378aaa95c09"/><file name="SpeedTaxApi.inc" hash="438c2f5a6546f42c57b38a19a12326f0"/><file name="SpeedTaxUtil.inc" hash="a2bf5068a618ad8d6a0b100abef5c7c5"/><file name="WsSecurity.inc" hash="adc23ea90abf3a9e8dabd2147232bc6f"/><file name="WsSecurityTypes.inc" hash="d2de8ce7b4420b7100d09800d1e93a32"/></dir><dir name="sql"><dir name="speedtax_setup"><file name="mysql4-install-2.0.0.php" hash="a2a4c73ab5096cab3051cd598ee65bbc"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Harapartners_SpeedTax.xml" hash="d74e47ceb88fcfa041d16a1e2e6d0b2a"/></dir></target></contents>
|
16 |
+
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
+
</package>
|