Version Notes
Kleinere Fehlerbehebungen
Download this release
Release Info
| Developer | smilla AG |
| Extension | Smilla_Sobuintegration |
| Version | 1.0.2 |
| Comparing to | |
| See all releases | |
Code changes from version 1.0.1 to 1.0.2
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Log.php +28 -0
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Log/Grid.php +69 -0
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Options.php +12 -0
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Options/Abstract.php +71 -0
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Productxml.php +105 -0
- app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/RicardoIntegrationbackend.php +5 -0
- app/code/local/Smilla/RicardoIntegration/Helper/Data.php +35 -0
- app/code/local/Smilla/RicardoIntegration/Helper/Sftp.php +18 -0
- app/code/local/Smilla/RicardoIntegration/Helper/Xml.php +43 -0
- app/code/local/Smilla/RicardoIntegration/Model/Cron.php +31 -0
- app/code/local/Smilla/RicardoIntegration/Model/Entity/Attribute.php +91 -0
- app/code/local/Smilla/RicardoIntegration/Model/Log.php +12 -0
- app/code/local/Smilla/RicardoIntegration/Model/Mysql4/Log.php +8 -0
- app/code/local/Smilla/RicardoIntegration/Model/Mysql4/Log/Collection.php +12 -0
- app/code/local/Smilla/RicardoIntegration/Model/Observer.php +12 -0
- app/code/local/Smilla/RicardoIntegration/controllers/Adminhtml/LogController.php +140 -0
- app/code/local/Smilla/RicardoIntegration/controllers/Adminhtml/RicardointegrationbackendController.php +174 -0
- app/code/local/Smilla/RicardoIntegration/etc/adminhtml.xml +23 -0
- app/code/local/Smilla/RicardoIntegration/etc/config.xml +241 -0
- app/code/local/Smilla/RicardoIntegration/etc/system.xml +94 -0
- app/code/local/Smilla/RicardoIntegration/sql/attributericardo_setup/mysql4-install-0.1.0.php +13 -0
- app/code/local/Smilla/RicardoIntegration/sql/categoryattributericardo_setup/mysql4-install-0.1.0.php +29 -0
- app/code/local/Smilla/RicardoIntegration/sql/logtablericardo_setup/mysql4-install-0.1.0.php +19 -0
- app/code/local/Smilla/RicardoIntegration/sql/productattributericardo_setup/mysql4-install-0.1.0.php +25 -0
- app/code/local/Smilla/RicardoIntegration/sql/salesattributericardo_setup/mysql4-install-0.1.0.php +11 -0
- app/code/local/Smilla/RicardoIntegration/xsd/orderImport.xsd +219 -0
- app/code/local/Smilla/RicardoIntegration/xsd/productImport.xsd +132 -0
- app/code/local/Smilla/Sobuintegration/Model/Observer.php +73 -73
- app/code/local/Smilla/Sobuintegration/controllers/ShareController.php +0 -11
- app/design/frontend/base/default/template/sobu/order/share.phtml +3 -3
- app/etc/modules/Smilla_Sobuintegration.xml +1 -1
- package.xml +5 -5
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Log.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
class Smilla_RicardoIntegration_Block_Adminhtml_Log extends Mage_Adminhtml_Block_Widget_Grid_Container{
|
| 5 |
+
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
|
| 9 |
+
$this->_controller = "adminhtml_log";
|
| 10 |
+
$this->_blockGroup = "ricardointegration";
|
| 11 |
+
$this->_headerText = Mage::helper("ricardointegration")->__("Log Manager");
|
| 12 |
+
$this->_addButtonLabel = Mage::helper("ricardointegration")->__("Add New Item");
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
$data = array(
|
| 16 |
+
'label' => 'Download Product XML',
|
| 17 |
+
'onclick' => "window.open('".$this->getUrl('ricardointegration/adminhtml_ricardointegrationbackend/products')."')"
|
| 18 |
+
);
|
| 19 |
+
Mage_Adminhtml_Block_Widget_Container::addButton('download_to_mas', $data, 0, 100, 'header', 'header');
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
parent::__construct();
|
| 25 |
+
$this->_removeButton('add');
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Log/Grid.php
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Smilla_RicardoIntegration_Block_Adminhtml_Log_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
parent::__construct();
|
| 9 |
+
$this->setId("logGrid");
|
| 10 |
+
$this->setDefaultSort("id");
|
| 11 |
+
$this->setDefaultDir("DESC");
|
| 12 |
+
$this->setSaveParametersInSession(true);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
protected function _prepareCollection()
|
| 16 |
+
{
|
| 17 |
+
$collection = Mage::getModel("ricardointegration/log")->getCollection();
|
| 18 |
+
$this->setCollection($collection);
|
| 19 |
+
return parent::_prepareCollection();
|
| 20 |
+
}
|
| 21 |
+
protected function _prepareColumns()
|
| 22 |
+
{
|
| 23 |
+
$this->addColumn("id", array(
|
| 24 |
+
"header" => Mage::helper("ricardointegration")->__("ID"),
|
| 25 |
+
"align" =>"right",
|
| 26 |
+
"width" => "50px",
|
| 27 |
+
"type" => "number",
|
| 28 |
+
"index" => "id",
|
| 29 |
+
));
|
| 30 |
+
|
| 31 |
+
$this->addColumn("execution_time", array(
|
| 32 |
+
"header" => Mage::helper("ricardointegration")->__("Execution Time"),
|
| 33 |
+
"index" => "execution_time",
|
| 34 |
+
"type" => "datetime",
|
| 35 |
+
));
|
| 36 |
+
|
| 37 |
+
$this->addColumn('type', array(
|
| 38 |
+
'header' => Mage::helper('ricardointegration')->__('Type'),
|
| 39 |
+
'index' => 'type',
|
| 40 |
+
));
|
| 41 |
+
|
| 42 |
+
$this->addColumn("status", array(
|
| 43 |
+
"header" => Mage::helper("ricardointegration")->__("Status"),
|
| 44 |
+
"index" => "status",
|
| 45 |
+
"type" => "options",
|
| 46 |
+
"frame_callback" => array(Mage::helper('ricardointegration'), 'decorateStatus'),
|
| 47 |
+
"options" => array(
|
| 48 |
+
Mage_Cron_Model_Schedule::STATUS_PENDING => Mage_Cron_Model_Schedule::STATUS_PENDING,
|
| 49 |
+
Mage_Cron_Model_Schedule::STATUS_SUCCESS => Mage_Cron_Model_Schedule::STATUS_SUCCESS,
|
| 50 |
+
Mage_Cron_Model_Schedule::STATUS_ERROR => Mage_Cron_Model_Schedule::STATUS_ERROR,
|
| 51 |
+
Mage_Cron_Model_Schedule::STATUS_MISSED => Mage_Cron_Model_Schedule::STATUS_MISSED,
|
| 52 |
+
Mage_Cron_Model_Schedule::STATUS_RUNNING => Mage_Cron_Model_Schedule::STATUS_RUNNING,
|
| 53 |
+
)
|
| 54 |
+
));
|
| 55 |
+
|
| 56 |
+
//$this->addExportType('*/*/exportCsv', Mage::helper('sales')->__('CSV'));
|
| 57 |
+
|
| 58 |
+
return parent::_prepareColumns();
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
public function getRowUrl($row)
|
| 62 |
+
{
|
| 63 |
+
return '#';
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
|
| 69 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Options.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
class Smilla_RicardoIntegration_Block_Adminhtml_Options extends Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Options
|
| 5 |
+
{
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
|
| 9 |
+
parent::__construct();
|
| 10 |
+
$this->setTemplate('ricardointegration/attribute/options.phtml');
|
| 11 |
+
}
|
| 12 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Options/Abstract.php
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
abstract class Smilla_RicardoIntegration_Block_Adminhtml_Options_Abstract extends Mage_Eav_Block_Adminhtml_Attribute_Edit_Options_Abstract {
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* Retrieve attribute option values if attribute input type select or multiselect
|
| 6 |
+
*
|
| 7 |
+
* @return array
|
| 8 |
+
*/
|
| 9 |
+
public function getOptionValues()
|
| 10 |
+
{
|
| 11 |
+
$attributeType = $this->getAttributeObject()->getFrontendInput();
|
| 12 |
+
$defaultValues = $this->getAttributeObject()->getDefaultValue();
|
| 13 |
+
if ($attributeType == 'select' || $attributeType == 'multiselect') {
|
| 14 |
+
$defaultValues = explode(',', $defaultValues);
|
| 15 |
+
} else {
|
| 16 |
+
$defaultValues = array();
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
switch ($attributeType) {
|
| 20 |
+
case 'select':
|
| 21 |
+
$inputType = 'radio';
|
| 22 |
+
break;
|
| 23 |
+
case 'multiselect':
|
| 24 |
+
$inputType = 'checkbox';
|
| 25 |
+
break;
|
| 26 |
+
default:
|
| 27 |
+
$inputType = '';
|
| 28 |
+
break;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
$values = $this->getData('option_values');
|
| 32 |
+
if (is_null($values)) {
|
| 33 |
+
$values = array();
|
| 34 |
+
$optionCollection = Mage::getResourceModel('eav/entity_attribute_option_collection')
|
| 35 |
+
->setAttributeFilter($this->getAttributeObject()->getId())
|
| 36 |
+
->setPositionOrder('desc', true)
|
| 37 |
+
->load();
|
| 38 |
+
|
| 39 |
+
foreach ($optionCollection as $option) {
|
| 40 |
+
$value = array();
|
| 41 |
+
if (in_array($option->getId(), $defaultValues)) {
|
| 42 |
+
$value['checked'] = 'checked="checked"';
|
| 43 |
+
} else {
|
| 44 |
+
$value['checked'] = '';
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$value['intype'] = $inputType;
|
| 48 |
+
$value['id'] = $option->getId();
|
| 49 |
+
/* edit start */
|
| 50 |
+
$value['ricardo_code'] = $option->getRicardoCode();
|
| 51 |
+
/* edit end */
|
| 52 |
+
$value['sort_order'] = $option->getSortOrder();
|
| 53 |
+
foreach ($this->getStores() as $store) {
|
| 54 |
+
$storeValues = $this->getStoreOptionValues($store->getId());
|
| 55 |
+
if (isset($storeValues[$option->getId()])) {
|
| 56 |
+
$value['store'.$store->getId()] = htmlspecialchars($storeValues[$option->getId()]);
|
| 57 |
+
}
|
| 58 |
+
else {
|
| 59 |
+
$value['store'.$store->getId()] = '';
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
$values[] = new Varien_Object($value);
|
| 63 |
+
}
|
| 64 |
+
$this->setData('option_values', $values);
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
return $values;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/Productxml.php
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Smilla_RicardoIntegration_Block_Adminhtml_Productxml extends Mage_Adminhtml_Block_Template {
|
| 4 |
+
public function getRicardoCategories($product){
|
| 5 |
+
if(count($product->getCategoryIds()) == 0){
|
| 6 |
+
return array();
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
$result = array();
|
| 10 |
+
$categoryCollection = Mage::getResourceModel('catalog/category_collection')
|
| 11 |
+
->addAttributeToSelect('name')
|
| 12 |
+
->addAttributeToSelect('ricardo_category')
|
| 13 |
+
->addAttributeToFilter('entity_id', $product->getCategoryIds())
|
| 14 |
+
->addIsActiveFilter();
|
| 15 |
+
|
| 16 |
+
foreach($categoryCollection as $category){
|
| 17 |
+
if(strlen(trim($category->getRicardoCategory())) > 0){
|
| 18 |
+
$result[] = $category;
|
| 19 |
+
}
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
return $result;
|
| 24 |
+
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
public function getAdditionalAttributes($product){
|
| 28 |
+
|
| 29 |
+
// Read Attributemapping from Configuration
|
| 30 |
+
$attributesString = Mage::getStoreConfig('ricardosettings/catalog/attributes', Mage::app()->getStore());
|
| 31 |
+
|
| 32 |
+
$mappedAttributes = array();
|
| 33 |
+
foreach(preg_split("/((\r?\n)|(\r\n?))/", $attributesString) as $attributesMapping){
|
| 34 |
+
list($magentoAttribute, $ricardoAttribute) = explode('>', $attributesMapping);
|
| 35 |
+
$mappedAttributes[trim($magentoAttribute)] = trim($ricardoAttribute);
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
$result = array();
|
| 39 |
+
|
| 40 |
+
// Read Magento Product attributes
|
| 41 |
+
foreach($product->getAttributes() as $attribute){
|
| 42 |
+
if(array_key_exists($attribute->getAttributeCode(), $mappedAttributes)){
|
| 43 |
+
$ricardoAttribute = $mappedAttributes[$attribute->getAttributeCode()];
|
| 44 |
+
$result[$ricardoAttribute] = $attribute;
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
return $result;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
public function getParentProduct($_product){
|
| 54 |
+
$parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')->getParentIdsByChild($_product->getId());
|
| 55 |
+
if(isset($parentIds[0])){
|
| 56 |
+
return $_configurable_product = Mage::getModel('catalog/product')->load($parentIds[0]);
|
| 57 |
+
} else {
|
| 58 |
+
return false;
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
public function getAttributeValue($_product, $attribute_code){
|
| 63 |
+
if(strlen($ricardocode = $_product->getAttributeRicardoCode($attribute_code)) > 0){
|
| 64 |
+
// Ricardo Code Value
|
| 65 |
+
$result = $ricardocode;
|
| 66 |
+
} else {
|
| 67 |
+
// Dropdown text
|
| 68 |
+
if(strlen($dropdownvalue = $_product->getAttributeText($attribute_code)) > 0){
|
| 69 |
+
$result = $dropdownvalue;
|
| 70 |
+
} else {
|
| 71 |
+
if(strlen($value = $_product->getData($attribute_code)) > 0 || !$this->getParentProduct($_product)){
|
| 72 |
+
$result = $value;
|
| 73 |
+
} else {
|
| 74 |
+
$result = $this->getParentProduct()->getData($attribute_code);
|
| 75 |
+
}
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
return $result;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/*
|
| 82 |
+
<?php $ricardocode = $_product->getAttributeRicardoCode($attribute->getAttributeCode()); ?>
|
| 83 |
+
|
| 84 |
+
(strlen($ricardocode) > 0) ? $ricardocode : $_product->getAttributeText($attribute->getAttributeCode()); ?>
|
| 85 |
+
<?php $value = (strlen($value) == 0 && $_configurable_product) ? $_configurable_product->getData($attribute->getAttributeCode()) : $value; ?>
|
| 86 |
+
*/
|
| 87 |
+
|
| 88 |
+
public function getBundlingId($product){
|
| 89 |
+
|
| 90 |
+
$attributeCode = Mage::getStoreConfig('ricardosettings/catalog/bundleattribute', Mage::app()->getStore());
|
| 91 |
+
return $product->getData($attributeCode);
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
public function getLocalizedProduct($product){
|
| 95 |
+
$storeViews = Mage::getModel('core/store')
|
| 96 |
+
->getCollection()
|
| 97 |
+
->setLoadDefault(true);
|
| 98 |
+
$result = array();
|
| 99 |
+
foreach($storeViews as $storeId => $store) {
|
| 100 |
+
$locale = substr(Mage::getStoreConfig('general/locale/code', $storeId), 0, 2);
|
| 101 |
+
$result[$locale] = Mage::getModel('catalog/product')->setStoreId($storeId)->load($product->getId());
|
| 102 |
+
}
|
| 103 |
+
return $result;
|
| 104 |
+
}
|
| 105 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Block/Adminhtml/RicardoIntegrationbackend.php
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Smilla_RicardoIntegration_Block_Adminhtml_RicardoIntegrationbackend extends Mage_Adminhtml_Block_Template {
|
| 4 |
+
|
| 5 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Helper/Data.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Helper_Data extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Decorate status values
|
| 7 |
+
*
|
| 8 |
+
* @param $status
|
| 9 |
+
* @return string
|
| 10 |
+
*/
|
| 11 |
+
public function decorateStatus($status) {
|
| 12 |
+
switch ($status) {
|
| 13 |
+
case Mage_Cron_Model_Schedule::STATUS_SUCCESS:
|
| 14 |
+
$result = '<span class="grid-severity-notice"><span>'.$status.'</span></span>';
|
| 15 |
+
break;
|
| 16 |
+
case Mage_Cron_Model_Schedule::STATUS_PENDING:
|
| 17 |
+
$result = '<span class="bar-lightgray"><span>'.$status.'</span></span>';
|
| 18 |
+
break;
|
| 19 |
+
case Mage_Cron_Model_Schedule::STATUS_RUNNING:
|
| 20 |
+
$result = '<span class="bar-yellow"><span>'.$status.'</span></span>';
|
| 21 |
+
break;
|
| 22 |
+
case Mage_Cron_Model_Schedule::STATUS_MISSED:
|
| 23 |
+
$result = '<span class="bar-orange"><span>'.$status.'</span></span>';
|
| 24 |
+
break;
|
| 25 |
+
case Mage_Cron_Model_Schedule::STATUS_ERROR:
|
| 26 |
+
$result = '<span class="grid-severity-critical"><span>'.$status.'</span></span>';
|
| 27 |
+
break;
|
| 28 |
+
default:
|
| 29 |
+
$result = $status;
|
| 30 |
+
break;
|
| 31 |
+
}
|
| 32 |
+
return $result;
|
| 33 |
+
}
|
| 34 |
+
}
|
| 35 |
+
|
app/code/local/Smilla/RicardoIntegration/Helper/Sftp.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Helper_Sftp extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
public function writeRemoteFile($remoteFilename, $content){
|
| 5 |
+
require_once('lib'.DS .'phpseclib'.DS .'Net'.DS .'SFTP.php');
|
| 6 |
+
|
| 7 |
+
// SFTP
|
| 8 |
+
$sftp = new Net_SFTP('www.ncn.eu');
|
| 9 |
+
if (!$sftp->login('ssh-649954-ncn', 'q2w3e4r')) {
|
| 10 |
+
exit('Login Failed');
|
| 11 |
+
}
|
| 12 |
+
#$attributesString = Mage::getStoreConfig('ricardosettings/catalog/attributes', Mage::app()->getStore());
|
| 13 |
+
|
| 14 |
+
return $sftp->put($remoteFilename, $content);
|
| 15 |
+
|
| 16 |
+
}
|
| 17 |
+
}
|
| 18 |
+
|
app/code/local/Smilla/RicardoIntegration/Helper/Xml.php
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Helper_Xml extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
public function generateProductXml(){
|
| 5 |
+
|
| 6 |
+
$collection = Mage::getModel('catalog/product')
|
| 7 |
+
->getCollection()
|
| 8 |
+
#->addAttributeToFilter('export_ricardo', 1)
|
| 9 |
+
->addAttributeToFilter('status', 1)
|
| 10 |
+
->addAttributeToSelect('*');
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
$layout = Mage::getSingleton('core/layout');
|
| 14 |
+
$block_header = Mage::getSingleton('core/layout')->createBlock(
|
| 15 |
+
'Smilla_RicardoIntegration_Block_Adminhtml_Productxml',
|
| 16 |
+
'productxml',
|
| 17 |
+
array('template' => 'ricardointegration/productxml.phtml')
|
| 18 |
+
);
|
| 19 |
+
$block_header->setCollection($collection);
|
| 20 |
+
|
| 21 |
+
$xmlresult = $block_header->toHtml();
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
// Check against XSD File
|
| 25 |
+
if(!@$this->checkXsd($xmlresult, Mage::getModuleDir('', 'Smilla_RicardoIntegration').DS.'xsd'.DS .'productImport.xsd')){
|
| 26 |
+
echo "Fehler bei XSD Validierung!";
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
return $xmlresult;
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
private function checkXsd($content, $xsdfilepath){
|
| 36 |
+
$xml= new DOMDocument();
|
| 37 |
+
$xml->loadXML($content, LIBXML_NOBLANKS);
|
| 38 |
+
return $xml->schemaValidate($xsdfilepath);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
}
|
| 43 |
+
|
app/code/local/Smilla/RicardoIntegration/Model/Cron.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Model_Cron{
|
| 3 |
+
public function SyncCatalog(){
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
$xmlhelper = Mage::helper('ricardointegration/xml');
|
| 7 |
+
$sftphelper = Mage::helper('ricardointegration/sftp');
|
| 8 |
+
$filename = 'products_'.time().'.cron.xml';
|
| 9 |
+
|
| 10 |
+
$log = Mage::getModel("ricardointegration/log")
|
| 11 |
+
->setExecutionTime(date('Y-m-d H:i:s'))
|
| 12 |
+
->setType('Write Product Catalog ('.$filename.'). '.(string) $result)
|
| 13 |
+
->setStatus(Mage_Cron_Model_Schedule::STATUS_SUCCESS) // Mage_Cron_Model_Schedule::STATUS_ERROR
|
| 14 |
+
->save();
|
| 15 |
+
|
| 16 |
+
$result = $sftphelper->writeRemoteFile('/kunden/179933_49716/rp-hosting/2/2/ricardotest/'.$filename, $xmlhelper->generateProductXml());
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
}
|
| 20 |
+
public function SyncSales(){
|
| 21 |
+
//do something
|
| 22 |
+
/*
|
| 23 |
+
$log = Mage::getModel("ricardointegration/log")
|
| 24 |
+
->setExecutionTime(date('Y-m-d H:i:s'))
|
| 25 |
+
->setType('Read Sale File XXXX.xml')
|
| 26 |
+
->setStatus(Mage_Cron_Model_Schedule::STATUS_SUCCESS) // Mage_Cron_Model_Schedule::STATUS_ERROR
|
| 27 |
+
->save();
|
| 28 |
+
*/
|
| 29 |
+
|
| 30 |
+
}
|
| 31 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Model/Entity/Attribute.php
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Model_Entity_Attribute extends Mage_Eav_Model_Resource_Entity_Attribute
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
/**
|
| 7 |
+
* Save attribute options
|
| 8 |
+
*
|
| 9 |
+
* @param Mage_Eav_Model_Entity_Attribute $object
|
| 10 |
+
* @return Mage_Eav_Model_Resource_Entity_Attribute
|
| 11 |
+
*/
|
| 12 |
+
protected function _saveOption(Mage_Core_Model_Abstract $object)
|
| 13 |
+
{
|
| 14 |
+
$option = $object->getOption();
|
| 15 |
+
if (is_array($option)) {
|
| 16 |
+
$adapter = $this->_getWriteAdapter();
|
| 17 |
+
$optionTable = $this->getTable('eav/attribute_option');
|
| 18 |
+
$optionValueTable = $this->getTable('eav/attribute_option_value');
|
| 19 |
+
|
| 20 |
+
$stores = Mage::app()->getStores(true);
|
| 21 |
+
if (isset($option['value'])) {
|
| 22 |
+
$attributeDefaultValue = array();
|
| 23 |
+
if (!is_array($object->getDefault())) {
|
| 24 |
+
$object->setDefault(array());
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
foreach ($option['value'] as $optionId => $values) {
|
| 28 |
+
$intOptionId = (int) $optionId;
|
| 29 |
+
if (!empty($option['delete'][$optionId])) {
|
| 30 |
+
if ($intOptionId) {
|
| 31 |
+
$adapter->delete($optionTable, array('option_id = ?' => $intOptionId));
|
| 32 |
+
}
|
| 33 |
+
continue;
|
| 34 |
+
}
|
| 35 |
+
/* changes start */
|
| 36 |
+
$sortOrder = !empty($option['order'][$optionId]) ? $option['order'][$optionId] : 0;
|
| 37 |
+
$ricardo_code = !empty($option['ricardo_code'][$optionId]) ? $option['ricardo_code'][$optionId] : '';
|
| 38 |
+
|
| 39 |
+
if (!$intOptionId) {
|
| 40 |
+
$data = array(
|
| 41 |
+
'attribute_id' => $object->getId(),
|
| 42 |
+
'sort_order' => $sortOrder,
|
| 43 |
+
'ricardo_code' => $ricardo_code
|
| 44 |
+
);
|
| 45 |
+
$adapter->insert($optionTable, $data);
|
| 46 |
+
$intOptionId = $adapter->lastInsertId($optionTable);
|
| 47 |
+
} else {
|
| 48 |
+
$data = array('sort_order' => $sortOrder, 'ricardo_code' => $ricardo_code);
|
| 49 |
+
$where = array('option_id =?' => $intOptionId);
|
| 50 |
+
$adapter->update($optionTable, $data, $where);
|
| 51 |
+
}
|
| 52 |
+
/* changes end */
|
| 53 |
+
if (in_array($optionId, $object->getDefault())) {
|
| 54 |
+
if ($object->getFrontendInput() == 'multiselect') {
|
| 55 |
+
$attributeDefaultValue[] = $intOptionId;
|
| 56 |
+
} elseif ($object->getFrontendInput() == 'select') {
|
| 57 |
+
$attributeDefaultValue = array($intOptionId);
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
// Default value
|
| 62 |
+
if (!isset($values[0])) {
|
| 63 |
+
Mage::throwException(Mage::helper('eav')->__('Default option value is not defined'));
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
$adapter->delete($optionValueTable, array('option_id =?' => $intOptionId));
|
| 67 |
+
foreach ($stores as $store) {
|
| 68 |
+
if (isset($values[$store->getId()])
|
| 69 |
+
&& (!empty($values[$store->getId()])
|
| 70 |
+
|| $values[$store->getId()] == "0")
|
| 71 |
+
) {
|
| 72 |
+
$data = array(
|
| 73 |
+
'option_id' => $intOptionId,
|
| 74 |
+
'store_id' => $store->getId(),
|
| 75 |
+
'value' => $values[$store->getId()],
|
| 76 |
+
);
|
| 77 |
+
$adapter->insert($optionValueTable, $data);
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
$bind = array('default_value' => implode(',', $attributeDefaultValue));
|
| 82 |
+
$where = array('attribute_id =?' => $object->getId());
|
| 83 |
+
$adapter->update($this->getMainTable(), $bind, $where);
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
return $this;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Model/Log.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Smilla_RicardoIntegration_Model_Log extends Mage_Core_Model_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct(){
|
| 6 |
+
|
| 7 |
+
$this->_init("ricardointegration/log");
|
| 8 |
+
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
}
|
| 12 |
+
|
app/code/local/Smilla/RicardoIntegration/Model/Mysql4/Log.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Model_Mysql4_Log extends Mage_Core_Model_Mysql4_Abstract
|
| 3 |
+
{
|
| 4 |
+
protected function _construct()
|
| 5 |
+
{
|
| 6 |
+
$this->_init("ricardointegration/log", "id");
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/local/Smilla/RicardoIntegration/Model/Mysql4/Log/Collection.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Model_Mysql4_Log_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
public function _construct(){
|
| 6 |
+
$this->_init("ricardointegration/log");
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
}
|
| 12 |
+
|
app/code/local/Smilla/RicardoIntegration/Model/Observer.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Model_Observer
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
public function salesUpdate(Varien_Event_Observer $observer)
|
| 6 |
+
{
|
| 7 |
+
//Mage::dispatchEvent('admin_session_user_login_success', array('user'=>$user));
|
| 8 |
+
//$user = $observer->getEvent()->getUser();
|
| 9 |
+
//$user->doSomething();
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
}
|
app/code/local/Smilla/RicardoIntegration/controllers/Adminhtml/LogController.php
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Smilla_RicardoIntegration_Adminhtml_LogController extends Mage_Adminhtml_Controller_Action
|
| 4 |
+
{
|
| 5 |
+
protected function _initAction()
|
| 6 |
+
{
|
| 7 |
+
$this->loadLayout()->_setActiveMenu("ricardointegration/log")->_addBreadcrumb(Mage::helper("adminhtml")->__("Log Manager"),Mage::helper("adminhtml")->__("Log Manager"));
|
| 8 |
+
return $this;
|
| 9 |
+
}
|
| 10 |
+
public function indexAction()
|
| 11 |
+
{
|
| 12 |
+
$this->_title($this->__("RicardoIntegration"));
|
| 13 |
+
$this->_title($this->__("Manager Log"));
|
| 14 |
+
|
| 15 |
+
$this->_initAction();
|
| 16 |
+
$this->renderLayout();
|
| 17 |
+
}
|
| 18 |
+
public function editAction()
|
| 19 |
+
{
|
| 20 |
+
$this->_title($this->__("RicardoIntegration"));
|
| 21 |
+
$this->_title($this->__("Log"));
|
| 22 |
+
$this->_title($this->__("Edit Item"));
|
| 23 |
+
|
| 24 |
+
$id = $this->getRequest()->getParam("id");
|
| 25 |
+
$model = Mage::getModel("ricardointegration/log")->load($id);
|
| 26 |
+
if ($model->getId()) {
|
| 27 |
+
Mage::register("log_data", $model);
|
| 28 |
+
$this->loadLayout();
|
| 29 |
+
$this->_setActiveMenu("ricardointegration/log");
|
| 30 |
+
$this->_addBreadcrumb(Mage::helper("adminhtml")->__("Log Manager"), Mage::helper("adminhtml")->__("Log Manager"));
|
| 31 |
+
$this->_addBreadcrumb(Mage::helper("adminhtml")->__("Log Description"), Mage::helper("adminhtml")->__("Log Description"));
|
| 32 |
+
$this->getLayout()->getBlock("head")->setCanLoadExtJs(true);
|
| 33 |
+
$this->_addContent($this->getLayout()->createBlock("ricardointegration/adminhtml_log_edit"))->_addLeft($this->getLayout()->createBlock("ricardointegration/adminhtml_log_edit_tabs"));
|
| 34 |
+
$this->renderLayout();
|
| 35 |
+
}
|
| 36 |
+
else {
|
| 37 |
+
Mage::getSingleton("adminhtml/session")->addError(Mage::helper("ricardointegration")->__("Item does not exist."));
|
| 38 |
+
$this->_redirect("*/*/");
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
public function newAction()
|
| 43 |
+
{
|
| 44 |
+
|
| 45 |
+
$this->_title($this->__("RicardoIntegration"));
|
| 46 |
+
$this->_title($this->__("Log"));
|
| 47 |
+
$this->_title($this->__("New Item"));
|
| 48 |
+
|
| 49 |
+
$id = $this->getRequest()->getParam("id");
|
| 50 |
+
$model = Mage::getModel("ricardointegration/log")->load($id);
|
| 51 |
+
|
| 52 |
+
$data = Mage::getSingleton("adminhtml/session")->getFormData(true);
|
| 53 |
+
if (!empty($data)) {
|
| 54 |
+
$model->setData($data);
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
Mage::register("log_data", $model);
|
| 58 |
+
|
| 59 |
+
$this->loadLayout();
|
| 60 |
+
$this->_setActiveMenu("ricardointegration/log");
|
| 61 |
+
|
| 62 |
+
$this->getLayout()->getBlock("head")->setCanLoadExtJs(true);
|
| 63 |
+
|
| 64 |
+
$this->_addBreadcrumb(Mage::helper("adminhtml")->__("Log Manager"), Mage::helper("adminhtml")->__("Log Manager"));
|
| 65 |
+
$this->_addBreadcrumb(Mage::helper("adminhtml")->__("Log Description"), Mage::helper("adminhtml")->__("Log Description"));
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
$this->_addContent($this->getLayout()->createBlock("ricardointegration/adminhtml_log_edit"))->_addLeft($this->getLayout()->createBlock("ricardointegration/adminhtml_log_edit_tabs"));
|
| 69 |
+
|
| 70 |
+
$this->renderLayout();
|
| 71 |
+
|
| 72 |
+
}
|
| 73 |
+
public function saveAction()
|
| 74 |
+
{
|
| 75 |
+
|
| 76 |
+
$post_data=$this->getRequest()->getPost();
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
if ($post_data) {
|
| 80 |
+
|
| 81 |
+
try {
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
$model = Mage::getModel("ricardointegration/log")
|
| 86 |
+
->addData($post_data)
|
| 87 |
+
->setId($this->getRequest()->getParam("id"))
|
| 88 |
+
->save();
|
| 89 |
+
|
| 90 |
+
Mage::getSingleton("adminhtml/session")->addSuccess(Mage::helper("adminhtml")->__("Log was successfully saved"));
|
| 91 |
+
Mage::getSingleton("adminhtml/session")->setLogData(false);
|
| 92 |
+
|
| 93 |
+
if ($this->getRequest()->getParam("back")) {
|
| 94 |
+
$this->_redirect("*/*/edit", array("id" => $model->getId()));
|
| 95 |
+
return;
|
| 96 |
+
}
|
| 97 |
+
$this->_redirect("*/*/");
|
| 98 |
+
return;
|
| 99 |
+
}
|
| 100 |
+
catch (Exception $e) {
|
| 101 |
+
Mage::getSingleton("adminhtml/session")->addError($e->getMessage());
|
| 102 |
+
Mage::getSingleton("adminhtml/session")->setLogData($this->getRequest()->getPost());
|
| 103 |
+
$this->_redirect("*/*/edit", array("id" => $this->getRequest()->getParam("id")));
|
| 104 |
+
return;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
}
|
| 108 |
+
$this->_redirect("*/*/");
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
|
| 112 |
+
|
| 113 |
+
public function deleteAction()
|
| 114 |
+
{
|
| 115 |
+
if( $this->getRequest()->getParam("id") > 0 ) {
|
| 116 |
+
try {
|
| 117 |
+
$model = Mage::getModel("ricardointegration/log");
|
| 118 |
+
$model->setId($this->getRequest()->getParam("id"))->delete();
|
| 119 |
+
Mage::getSingleton("adminhtml/session")->addSuccess(Mage::helper("adminhtml")->__("Item was successfully deleted"));
|
| 120 |
+
$this->_redirect("*/*/");
|
| 121 |
+
}
|
| 122 |
+
catch (Exception $e) {
|
| 123 |
+
Mage::getSingleton("adminhtml/session")->addError($e->getMessage());
|
| 124 |
+
$this->_redirect("*/*/edit", array("id" => $this->getRequest()->getParam("id")));
|
| 125 |
+
}
|
| 126 |
+
}
|
| 127 |
+
$this->_redirect("*/*/");
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
|
| 131 |
+
/**
|
| 132 |
+
* Export order grid to CSV format
|
| 133 |
+
*/
|
| 134 |
+
public function exportCsvAction()
|
| 135 |
+
{
|
| 136 |
+
$fileName = 'log.csv';
|
| 137 |
+
$grid = $this->getLayout()->createBlock('ricardointegration/adminhtml_log_grid');
|
| 138 |
+
$this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
|
| 139 |
+
}
|
| 140 |
+
}
|
app/code/local/Smilla/RicardoIntegration/controllers/Adminhtml/RicardointegrationbackendController.php
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_RicardoIntegration_Adminhtml_RicardointegrationbackendController extends Mage_Adminhtml_Controller_Action
|
| 3 |
+
{
|
| 4 |
+
public function indexAction()
|
| 5 |
+
{
|
| 6 |
+
|
| 7 |
+
$xmlhelper = Mage::helper('ricardointegration/xml');
|
| 8 |
+
$sftphelper = Mage::helper('ricardointegration/sftp');
|
| 9 |
+
$xmlcontent = $xmlhelper->generateProductXml();
|
| 10 |
+
#$sftphelper->writeRemoteFile('/kunden/179933_49716/rp-hosting/2/2/ricardotest/products_'.time().'.xml', $xmlhelper->generateProductXml());
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
$orderxml = simplexml_load_file('orders_example.xml');
|
| 14 |
+
|
| 15 |
+
$transaction = Mage::getModel('core/resource_transaction');
|
| 16 |
+
$storeId = 1;
|
| 17 |
+
$groupId = 1;
|
| 18 |
+
$currency = 'CHF';
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
$reservedOrderId = Mage::getSingleton('eav/config')->getEntityType('order')->fetchNewIncrementId($storeId);
|
| 26 |
+
|
| 27 |
+
$order = Mage::getModel('sales/order')
|
| 28 |
+
->setIncrementId($reservedOrderId)
|
| 29 |
+
->setStoreId($storeId)
|
| 30 |
+
->setQuoteId(0)
|
| 31 |
+
->setGlobal_currency_code($currency)
|
| 32 |
+
->setBase_currency_code($currency)
|
| 33 |
+
->setStore_currency_code($currency)
|
| 34 |
+
->setRicardo_customerid($orderxml->order->customerId)
|
| 35 |
+
->setRicardo_ordernumber($orderxml->order->orderNumber)
|
| 36 |
+
->setOrder_currency_code($currency);
|
| 37 |
+
//Set your store currency USD or any other
|
| 38 |
+
|
| 39 |
+
// set Customer data
|
| 40 |
+
$order->setCustomerPrefix($orderxml->order->paymentAddress->title)
|
| 41 |
+
->setCustomerFirstname($orderxml->order->paymentAddress->firstName)
|
| 42 |
+
#->setCustomer_email('hu@smilla.com')
|
| 43 |
+
->setCustomerLastname($orderxml->order->paymentAddress->lastName)
|
| 44 |
+
->setCustomerGroupId($groupId)
|
| 45 |
+
->setCustomer_is_guest(1);
|
| 46 |
+
|
| 47 |
+
// set Billing Address
|
| 48 |
+
$billingAddress = Mage::getModel('sales/order_address')
|
| 49 |
+
->setStoreId($storeId)
|
| 50 |
+
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_BILLING)
|
| 51 |
+
->setPrefix($orderxml->order->paymentAddress->title)
|
| 52 |
+
->setFirstname($orderxml->order->paymentAddress->firstName)
|
| 53 |
+
#->setMiddlename('')
|
| 54 |
+
->setLastname($orderxml->order->paymentAddress->lastName)
|
| 55 |
+
#->setCompany('smilla')
|
| 56 |
+
->setStreet($orderxml->order->paymentAddress->streetName.' '.$orderxml->order->paymentAddress->streetNumber)
|
| 57 |
+
->setPostcode($orderxml->order->paymentAddress->zip)
|
| 58 |
+
->setCity($orderxml->order->paymentAddress->city)
|
| 59 |
+
->setCountry_id($orderxml->order->paymentAddress->country)
|
| 60 |
+
#->setRegion($billing->getRegion())
|
| 61 |
+
#->setRegion_id($billing->getRegionId())
|
| 62 |
+
#->setTelephone('1234435')
|
| 63 |
+
->setFax('');
|
| 64 |
+
$order->setBillingAddress($billingAddress);
|
| 65 |
+
|
| 66 |
+
$shippingAddress = Mage::getModel('sales/order_address')
|
| 67 |
+
->setStoreId($storeId)
|
| 68 |
+
->setAddressType(Mage_Sales_Model_Quote_Address::TYPE_SHIPPING)
|
| 69 |
+
->setPrefix($orderxml->order->deliveryAddress->title)
|
| 70 |
+
->setFirstname($orderxml->order->deliveryAddress->firstName)
|
| 71 |
+
#->setMiddlename('')
|
| 72 |
+
->setLastname($orderxml->order->deliveryAddress->lastName)
|
| 73 |
+
#->setCompany('smilla')
|
| 74 |
+
->setStreet($orderxml->order->deliveryAddress->streetName.' '.$orderxml->order->deliveryAddress->streetNumber)
|
| 75 |
+
->setPostcode($orderxml->order->deliveryAddress->zip)
|
| 76 |
+
->setCity($orderxml->order->deliveryAddress->city)
|
| 77 |
+
->setCountry_id($orderxml->order->deliveryAddress->country)
|
| 78 |
+
#->setRegion($shipping->getRegion())
|
| 79 |
+
#->setRegion_id($shipping->getRegionId())
|
| 80 |
+
#->setTelephone('1234435')
|
| 81 |
+
->setFax('');
|
| 82 |
+
|
| 83 |
+
$order->setShippingAddress($shippingAddress)
|
| 84 |
+
->setShipping_method('flatrate_flatrate')
|
| 85 |
+
->setCollectShippingRates(false);
|
| 86 |
+
/*->setShippingDescription($this->getCarrierName('flatrate'));*/
|
| 87 |
+
/*some error i am getting here need to solve further*/
|
| 88 |
+
|
| 89 |
+
//you can set your payment method name here as per your need
|
| 90 |
+
$orderPayment = Mage::getModel('sales/order_payment')
|
| 91 |
+
->setStoreId($storeId)
|
| 92 |
+
->setCustomerPaymentId(0)
|
| 93 |
+
->setMethod('purchaseorder')
|
| 94 |
+
->setPo_number($orderxml->order->paymentOrderNumber);
|
| 95 |
+
$order->setPayment($orderPayment);
|
| 96 |
+
|
| 97 |
+
// let say, we have 2 products
|
| 98 |
+
//check that your products exists
|
| 99 |
+
//need to add code for configurable products if any
|
| 100 |
+
$subTotal = 0;
|
| 101 |
+
$products = array(
|
| 102 |
+
'5' => array(
|
| 103 |
+
'qty' => 2
|
| 104 |
+
),
|
| 105 |
+
'6' => array(
|
| 106 |
+
'qty' => 1
|
| 107 |
+
)
|
| 108 |
+
);
|
| 109 |
+
|
| 110 |
+
foreach ($products as $productId=>$product) {
|
| 111 |
+
$_product = Mage::getModel('catalog/product')->load($productId);
|
| 112 |
+
$rowTotal = $_product->getPrice() * $product['qty'];
|
| 113 |
+
$orderItem = Mage::getModel('sales/order_item')
|
| 114 |
+
->setStoreId($storeId)
|
| 115 |
+
->setQuoteItemId(0)
|
| 116 |
+
->setQuoteParentItemId(NULL)
|
| 117 |
+
->setProductId($productId)
|
| 118 |
+
->setProductType($_product->getTypeId())
|
| 119 |
+
->setQtyBackordered(NULL)
|
| 120 |
+
#->setTotalQtyOrdered($product['rqty'])
|
| 121 |
+
->setTaxPercent(8)
|
| 122 |
+
->setTaxAmount(5.67)
|
| 123 |
+
->setQtyOrdered($product['qty'])
|
| 124 |
+
->setName($_product->getName())
|
| 125 |
+
->setSku($_product->getSku())
|
| 126 |
+
->setPrice($_product->getPrice())
|
| 127 |
+
->setBasePrice($_product->getPrice() / 1.19)
|
| 128 |
+
->setOriginalPrice($_product->getPrice())
|
| 129 |
+
->setRowTotal($rowTotal * $product['qty'])
|
| 130 |
+
->setBaseRowTotal($rowTotal * $product['qty'] / 1.19)#
|
| 131 |
+
|
| 132 |
+
;
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
$subTotal += $rowTotal;
|
| 136 |
+
$order->addItem($orderItem);
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
$order->setSubtotal($orderxml->order->totalPrice / 1.08)
|
| 140 |
+
->setBaseSubtotal($orderxml->order->totalPrice / 1.08)
|
| 141 |
+
->setTaxAmount($orderxml->order->totalPrice * 0.08)
|
| 142 |
+
->setBaseTaxAmount($orderxml->order->totalPrice * 0.08)
|
| 143 |
+
->setShippingAmount((double) $orderxml->order->deliveryCosts)
|
| 144 |
+
->setBaseShippingAmount((double) $orderxml->order->deliveryCosts)
|
| 145 |
+
->setGrandTotal((double) $orderxml->order->totalPrice + (double) $orderxml->order->deliveryCosts)
|
| 146 |
+
->setBaseGrandTotal((double) $orderxml->order->totalPrice + (double) $orderxml->order->deliveryCosts);
|
| 147 |
+
|
| 148 |
+
#$order->setCustomerNote('Comment duummy');
|
| 149 |
+
|
| 150 |
+
#$order->collectShippingRates();
|
| 151 |
+
|
| 152 |
+
$transaction->addObject($order);
|
| 153 |
+
$transaction->addCommitCallback(array($order, 'place'));
|
| 154 |
+
$transaction->addCommitCallback(array($order, 'save'));
|
| 155 |
+
$transaction->save();
|
| 156 |
+
echo "Order created";
|
| 157 |
+
#$this->loadLayout();
|
| 158 |
+
#$this->_title($this->__("Ricardo Integration"));
|
| 159 |
+
#$this->renderLayout();
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
public function productsAction()
|
| 163 |
+
{
|
| 164 |
+
|
| 165 |
+
$xmlhelper = Mage::helper('ricardointegration/xml');
|
| 166 |
+
$xmlcontent = $xmlhelper->generateProductXml();
|
| 167 |
+
|
| 168 |
+
$this->getResponse()->setHeader('Content-type', 'application/xml');
|
| 169 |
+
$this->getResponse()->setHeader('Content-Disposition', 'attachment;filename=products_'.time().'.xml');
|
| 170 |
+
$this->getResponse()->setBody($xmlcontent);
|
| 171 |
+
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
}
|
app/code/local/Smilla/RicardoIntegration/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<acl>
|
| 4 |
+
<resources>
|
| 5 |
+
<admin>
|
| 6 |
+
<children>
|
| 7 |
+
<system>
|
| 8 |
+
<children>
|
| 9 |
+
<config>
|
| 10 |
+
<children>
|
| 11 |
+
<ricardosettings translate="title" module="ricardointegration">
|
| 12 |
+
<title>Settings Section</title>
|
| 13 |
+
<sort_order>0</sort_order>
|
| 14 |
+
</ricardosettings>
|
| 15 |
+
</children>
|
| 16 |
+
</config>
|
| 17 |
+
</children>
|
| 18 |
+
</system>
|
| 19 |
+
</children>
|
| 20 |
+
</admin>
|
| 21 |
+
</resources>
|
| 22 |
+
</acl>
|
| 23 |
+
</config>
|
app/code/local/Smilla/RicardoIntegration/etc/config.xml
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Smilla_RicardoIntegration>
|
| 5 |
+
<version>0.1.0</version>
|
| 6 |
+
</Smilla_RicardoIntegration>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<helpers>
|
| 10 |
+
<ricardointegration>
|
| 11 |
+
<class>Smilla_RicardoIntegration_Helper</class>
|
| 12 |
+
</ricardointegration>
|
| 13 |
+
</helpers>
|
| 14 |
+
<blocks>
|
| 15 |
+
<adminhtml>
|
| 16 |
+
<rewrite>
|
| 17 |
+
<catalog_product_attribute_edit_tab_options>Smilla_RicardoIntegration_Block_Adminhtml_Options</catalog_product_attribute_edit_tab_options>
|
| 18 |
+
</rewrite>
|
| 19 |
+
</adminhtml>
|
| 20 |
+
|
| 21 |
+
<ricardointegration>
|
| 22 |
+
<class>Smilla_RicardoIntegration_Block</class>
|
| 23 |
+
</ricardointegration>
|
| 24 |
+
</blocks>
|
| 25 |
+
<models>
|
| 26 |
+
<ricardointegration>
|
| 27 |
+
<class>Smilla_RicardoIntegration_Model</class>
|
| 28 |
+
<resourceModel>ricardointegration_mysql4</resourceModel>
|
| 29 |
+
</ricardointegration>
|
| 30 |
+
<ricardointegration_mysql4>
|
| 31 |
+
<class>Smilla_RicardoIntegration_Model_Mysql4</class>
|
| 32 |
+
<entities>
|
| 33 |
+
<log>
|
| 34 |
+
<table>ricardolog</table>
|
| 35 |
+
</log>
|
| 36 |
+
</entities>
|
| 37 |
+
</ricardointegration_mysql4>
|
| 38 |
+
<eav_resource>
|
| 39 |
+
<rewrite>
|
| 40 |
+
<attribute>Smilla_RicardoIntegration_Model_Entity_Attribute</attribute>
|
| 41 |
+
</rewrite>
|
| 42 |
+
</eav_resource>
|
| 43 |
+
</models>
|
| 44 |
+
<resources>
|
| 45 |
+
<ricardointegration_setup>
|
| 46 |
+
<setup>
|
| 47 |
+
<module>Smilla_RicardoIntegration</module>
|
| 48 |
+
</setup>
|
| 49 |
+
<connection>
|
| 50 |
+
<use>core_setup</use>
|
| 51 |
+
</connection>
|
| 52 |
+
</ricardointegration_setup>
|
| 53 |
+
<ricardointegration_write>
|
| 54 |
+
<connection>
|
| 55 |
+
<use>core_write</use>
|
| 56 |
+
</connection>
|
| 57 |
+
</ricardointegration_write>
|
| 58 |
+
<ricardointegration_read>
|
| 59 |
+
<connection>
|
| 60 |
+
<use>core_read</use>
|
| 61 |
+
</connection>
|
| 62 |
+
</ricardointegration_read>
|
| 63 |
+
<categoryattributericardo_setup>
|
| 64 |
+
<setup>
|
| 65 |
+
<module>Smilla_RicardoIntegration</module>
|
| 66 |
+
<class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
|
| 67 |
+
</setup>
|
| 68 |
+
<connection>
|
| 69 |
+
<use>core_setup</use>
|
| 70 |
+
</connection>
|
| 71 |
+
</categoryattributericardo_setup>
|
| 72 |
+
<categoryattributericardo_write>
|
| 73 |
+
<connection>
|
| 74 |
+
<use>core_write</use>
|
| 75 |
+
</connection>
|
| 76 |
+
</categoryattributericardo_write>
|
| 77 |
+
<categoryattributericardo_read>
|
| 78 |
+
<connection>
|
| 79 |
+
<use>core_read</use>
|
| 80 |
+
</connection>
|
| 81 |
+
</categoryattributericardo_read>
|
| 82 |
+
<salesattributericardo_setup>
|
| 83 |
+
<setup>
|
| 84 |
+
<module>Smilla_RicardoIntegration</module>
|
| 85 |
+
<class>Mage_Sales_Model_Mysql4_Setup</class>
|
| 86 |
+
</setup>
|
| 87 |
+
<connection>
|
| 88 |
+
<use>core_setup</use>
|
| 89 |
+
</connection>
|
| 90 |
+
</salesattributericardo_setup>
|
| 91 |
+
|
| 92 |
+
<logtablericardo_setup>
|
| 93 |
+
<setup>
|
| 94 |
+
<module>Smilla_RicardoIntegration</module>
|
| 95 |
+
<class>Mage_Sales_Model_Mysql4_Setup</class>
|
| 96 |
+
</setup>
|
| 97 |
+
<connection>
|
| 98 |
+
<use>core_setup</use>
|
| 99 |
+
</connection>
|
| 100 |
+
</logtablericardo_setup>
|
| 101 |
+
<logtablericardo_setup>
|
| 102 |
+
<connection>
|
| 103 |
+
<use>core_write</use>
|
| 104 |
+
</connection>
|
| 105 |
+
</logtablericardo_setup>
|
| 106 |
+
<logtablericardo_setup>
|
| 107 |
+
<connection>
|
| 108 |
+
<use>core_read</use>
|
| 109 |
+
</connection>
|
| 110 |
+
</logtablericardo_setup>
|
| 111 |
+
|
| 112 |
+
<attributericardo_setup>
|
| 113 |
+
<setup>
|
| 114 |
+
<module>Smilla_RicardoIntegration</module>
|
| 115 |
+
<class>Mage_Sales_Model_Mysql4_Setup</class>
|
| 116 |
+
</setup>
|
| 117 |
+
<connection>
|
| 118 |
+
<use>core_setup</use>
|
| 119 |
+
</connection>
|
| 120 |
+
</attributericardo_setup>
|
| 121 |
+
<salesattributericardo_write>
|
| 122 |
+
<connection>
|
| 123 |
+
<use>core_write</use>
|
| 124 |
+
</connection>
|
| 125 |
+
</salesattributericardo_write>
|
| 126 |
+
<salesattributericardo_read>
|
| 127 |
+
<connection>
|
| 128 |
+
<use>core_read</use>
|
| 129 |
+
</connection>
|
| 130 |
+
</salesattributericardo_read>
|
| 131 |
+
|
| 132 |
+
<productattributericardo_setup>
|
| 133 |
+
<setup>
|
| 134 |
+
<module>Smilla_RicardoIntegration</module>
|
| 135 |
+
<class>Mage_Sales_Model_Mysql4_Setup</class>
|
| 136 |
+
</setup>
|
| 137 |
+
<connection>
|
| 138 |
+
<use>core_setup</use>
|
| 139 |
+
</connection>
|
| 140 |
+
</productattributericardo_setup>
|
| 141 |
+
<productattributericardo_setup>
|
| 142 |
+
<connection>
|
| 143 |
+
<use>core_write</use>
|
| 144 |
+
</connection>
|
| 145 |
+
</productattributericardo_setup>
|
| 146 |
+
<productattributericardo_setup>
|
| 147 |
+
<connection>
|
| 148 |
+
<use>core_read</use>
|
| 149 |
+
</connection>
|
| 150 |
+
</productattributericardo_setup>
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
</resources>
|
| 154 |
+
<events>
|
| 155 |
+
<sales_model_service_quote_submit_success> <!-- identifier of the event we want to catch -->
|
| 156 |
+
<observers>
|
| 157 |
+
<sales_model_service_quote_submit_success_handler> <!-- identifier of the event handler -->
|
| 158 |
+
<type>model</type> <!-- class method call type; valid are model, object and singleton -->
|
| 159 |
+
<class>ricardointegration/observer</class> <!-- observers class alias -->
|
| 160 |
+
<method>salesUpdate</method> <!-- observer's method to be called -->
|
| 161 |
+
<args></args> <!-- additional arguments passed to observer -->
|
| 162 |
+
</sales_model_service_quote_submit_success_handler>
|
| 163 |
+
</observers>
|
| 164 |
+
</sales_model_service_quote_submit_success>
|
| 165 |
+
</events>
|
| 166 |
+
</global>
|
| 167 |
+
<admin>
|
| 168 |
+
<routers>
|
| 169 |
+
<ricardointegration>
|
| 170 |
+
<use>admin</use>
|
| 171 |
+
<args>
|
| 172 |
+
<module>Smilla_RicardoIntegration</module>
|
| 173 |
+
<frontName>ricardointegration</frontName>
|
| 174 |
+
</args>
|
| 175 |
+
</ricardointegration>
|
| 176 |
+
</routers>
|
| 177 |
+
</admin>
|
| 178 |
+
<adminhtml>
|
| 179 |
+
<menu>
|
| 180 |
+
<ricardointegration module="ricardointegration">
|
| 181 |
+
<title>RicardoIntegration</title>
|
| 182 |
+
<sort_order>100</sort_order>
|
| 183 |
+
<children>
|
| 184 |
+
<ricardointegrationbackend module="ricardointegration">
|
| 185 |
+
<title>Ricardo Integration</title>
|
| 186 |
+
<sort_order>0</sort_order>
|
| 187 |
+
<action>ricardointegration/adminhtml_ricardointegrationbackend</action>
|
| 188 |
+
</ricardointegrationbackend>
|
| 189 |
+
<log module="ricardointegration">
|
| 190 |
+
<title>Log</title>
|
| 191 |
+
<sort_order>0</sort_order>
|
| 192 |
+
<action>ricardointegration/adminhtml_log</action>
|
| 193 |
+
</log>
|
| 194 |
+
</children>
|
| 195 |
+
</ricardointegration>
|
| 196 |
+
</menu>
|
| 197 |
+
<acl>
|
| 198 |
+
<resources>
|
| 199 |
+
<all>
|
| 200 |
+
<title>Allow Everything</title>
|
| 201 |
+
</all>
|
| 202 |
+
<admin>
|
| 203 |
+
<children>
|
| 204 |
+
<ricardointegration translate="title" module="ricardointegration">
|
| 205 |
+
<title>Ricardo</title>
|
| 206 |
+
<sort_order>1000</sort_order>
|
| 207 |
+
<children>
|
| 208 |
+
<ricardointegrationbackend translate="title">
|
| 209 |
+
<title>Test</title>
|
| 210 |
+
</ricardointegrationbackend>
|
| 211 |
+
<log translate="title">
|
| 212 |
+
<title>Manage Log</title>
|
| 213 |
+
<sort_order>0</sort_order>
|
| 214 |
+
</log>
|
| 215 |
+
</children>
|
| 216 |
+
</ricardointegration>
|
| 217 |
+
</children>
|
| 218 |
+
</admin>
|
| 219 |
+
</resources>
|
| 220 |
+
</acl>
|
| 221 |
+
<layout>
|
| 222 |
+
<updates>
|
| 223 |
+
<ricardointegration>
|
| 224 |
+
<file>ricardointegration.xml</file>
|
| 225 |
+
</ricardointegration>
|
| 226 |
+
</updates>
|
| 227 |
+
</layout>
|
| 228 |
+
</adminhtml>
|
| 229 |
+
<crontab>
|
| 230 |
+
<jobs>
|
| 231 |
+
<ricardointegration_synccatalog>
|
| 232 |
+
<schedule><cron_expr>0 0 * * *</cron_expr></schedule>
|
| 233 |
+
<run><model>ricardointegration/cron::SyncCatalog</model></run>
|
| 234 |
+
</ricardointegration_synccatalog>
|
| 235 |
+
<ricardointegration_syncsales>
|
| 236 |
+
<schedule><cron_expr>*/10 * * * *</cron_expr></schedule>
|
| 237 |
+
<run><model>ricardointegration/cron::SyncSales</model></run>
|
| 238 |
+
</ricardointegration_syncsales>
|
| 239 |
+
</jobs>
|
| 240 |
+
</crontab>
|
| 241 |
+
</config>
|
app/code/local/Smilla/RicardoIntegration/etc/system.xml
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<tabs>
|
| 4 |
+
<ricardo translate="label" module="ricardointegration">
|
| 5 |
+
<label>Ricardo</label>
|
| 6 |
+
<sort_order>100</sort_order>
|
| 7 |
+
</ricardo>
|
| 8 |
+
</tabs>
|
| 9 |
+
<sections>
|
| 10 |
+
<ricardosettings translate="label" module="ricardointegration">
|
| 11 |
+
<label>Settings</label>
|
| 12 |
+
<tab>ricardo</tab>
|
| 13 |
+
<frontend_type>text</frontend_type>
|
| 14 |
+
<sort_order>0</sort_order>
|
| 15 |
+
<show_in_default>1</show_in_default>
|
| 16 |
+
<show_in_website>1</show_in_website>
|
| 17 |
+
<show_in_store>1</show_in_store>
|
| 18 |
+
<groups>
|
| 19 |
+
<general translate="label">
|
| 20 |
+
<label>General</label>
|
| 21 |
+
<frontend_type>text</frontend_type>
|
| 22 |
+
<sort_order>0</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 |
+
<fields>
|
| 27 |
+
<sftphost translate="label">
|
| 28 |
+
<label>Ricardo SFTP Server</label>
|
| 29 |
+
<frontend_type>text</frontend_type>
|
| 30 |
+
<sort_order>10</sort_order>
|
| 31 |
+
<show_in_default>1</show_in_default>
|
| 32 |
+
<show_in_website>1</show_in_website>
|
| 33 |
+
<show_in_store>1</show_in_store>
|
| 34 |
+
</sftphost>
|
| 35 |
+
<sftpuser translate="label">
|
| 36 |
+
<label>Ricardo SFTP Username</label>
|
| 37 |
+
<frontend_type>text</frontend_type>
|
| 38 |
+
<sort_order>20</sort_order>
|
| 39 |
+
<show_in_default>1</show_in_default>
|
| 40 |
+
<show_in_website>1</show_in_website>
|
| 41 |
+
<show_in_store>1</show_in_store>
|
| 42 |
+
</sftpuser>
|
| 43 |
+
<sftppassword translate="label">
|
| 44 |
+
<label>Ricardo SFTP Password</label>
|
| 45 |
+
<frontend_type>text</frontend_type>
|
| 46 |
+
<sort_order>30</sort_order>
|
| 47 |
+
<show_in_default>1</show_in_default>
|
| 48 |
+
<show_in_website>1</show_in_website>
|
| 49 |
+
<show_in_store>1</show_in_store>
|
| 50 |
+
</sftppassword>
|
| 51 |
+
|
| 52 |
+
</fields>
|
| 53 |
+
</general>
|
| 54 |
+
<catalog translate="label">
|
| 55 |
+
<label>Catalog Mapping Settings</label>
|
| 56 |
+
<frontend_type>text</frontend_type>
|
| 57 |
+
<sort_order>10</sort_order>
|
| 58 |
+
<show_in_default>1</show_in_default>
|
| 59 |
+
<show_in_website>1</show_in_website>
|
| 60 |
+
<show_in_store>1</show_in_store>
|
| 61 |
+
<fields>
|
| 62 |
+
<attributes translate="label">
|
| 63 |
+
<label>Attribute Mapping</label>
|
| 64 |
+
<comment>
|
| 65 |
+
<![CDATA[Magento Attributes mapped to Ricardo Attributes.<br>
|
| 66 |
+
One per Line.<br>
|
| 67 |
+
Example: "manufacturer > brand"
|
| 68 |
+
]]>
|
| 69 |
+
</comment>
|
| 70 |
+
<frontend_type>textarea</frontend_type>
|
| 71 |
+
<sort_order>10</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>1</show_in_website>
|
| 74 |
+
<show_in_store>1</show_in_store>
|
| 75 |
+
</attributes>
|
| 76 |
+
<bundleattribute translate="label">
|
| 77 |
+
<label>Bundeling ID Attributecode</label>
|
| 78 |
+
<comment>
|
| 79 |
+
<![CDATA[
|
| 80 |
+
Magento Attribute Code for Ricardo Bundling (EAN)
|
| 81 |
+
]]>
|
| 82 |
+
</comment>
|
| 83 |
+
<frontend_type>text</frontend_type>
|
| 84 |
+
<sort_order>30</sort_order>
|
| 85 |
+
<show_in_default>1</show_in_default>
|
| 86 |
+
<show_in_website>1</show_in_website>
|
| 87 |
+
<show_in_store>1</show_in_store>
|
| 88 |
+
</bundleattribute>
|
| 89 |
+
</fields>
|
| 90 |
+
</catalog>
|
| 91 |
+
</groups>
|
| 92 |
+
</ricardosettings>
|
| 93 |
+
</sections>
|
| 94 |
+
</config>
|
app/code/local/Smilla/RicardoIntegration/sql/attributericardo_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
$installer->startSetup();
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
$table = $installer->getTable('eav_attribute_option');
|
| 7 |
+
$installer->getConnection()->addColumn(
|
| 8 |
+
$table,
|
| 9 |
+
'ricardo_code',
|
| 10 |
+
"VARCHAR( 255 ) NULL"
|
| 11 |
+
);
|
| 12 |
+
|
| 13 |
+
$installer->endSetup();
|
app/code/local/Smilla/RicardoIntegration/sql/categoryattributericardo_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
$installer->startSetup();
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
$installer->addAttribute("catalog_category", "ricardo_category", array(
|
| 7 |
+
"type" => "varchar",
|
| 8 |
+
"backend" => "",
|
| 9 |
+
"frontend" => "",
|
| 10 |
+
"label" => "Ricardo Category Code",
|
| 11 |
+
"input" => "text",
|
| 12 |
+
"class" => "",
|
| 13 |
+
"source" => "",
|
| 14 |
+
"global" => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 15 |
+
"visible" => true,
|
| 16 |
+
"required" => false,
|
| 17 |
+
"user_defined" => false,
|
| 18 |
+
"default" => "",
|
| 19 |
+
"searchable" => false,
|
| 20 |
+
"filterable" => false,
|
| 21 |
+
"comparable" => false,
|
| 22 |
+
|
| 23 |
+
"visible_on_front" => false,
|
| 24 |
+
"unique" => false,
|
| 25 |
+
"note" => ""
|
| 26 |
+
|
| 27 |
+
));
|
| 28 |
+
$installer->endSetup();
|
| 29 |
+
|
app/code/local/Smilla/RicardoIntegration/sql/logtablericardo_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
$installer->startSetup();
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
$installer->run("
|
| 7 |
+
DROP TABLE IF EXISTS ".$this->getTable('ricardolog').";
|
| 8 |
+
CREATE TABLE ".$this->getTable('ricardolog')." (
|
| 9 |
+
`id` int(11) unsigned NOT NULL auto_increment,
|
| 10 |
+
`type` varchar(255) NOT NULL default '',
|
| 11 |
+
`execution_time` datetime NULL,
|
| 12 |
+
`status` varchar(255) NOT NULL default '',
|
| 13 |
+
PRIMARY KEY (`id`)
|
| 14 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
| 15 |
+
|
| 16 |
+
");
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
$installer->endSetup();
|
app/code/local/Smilla/RicardoIntegration/sql/productattributericardo_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
$installer->startSetup();
|
| 4 |
+
|
| 5 |
+
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
|
| 6 |
+
|
| 7 |
+
$installer->startSetup();
|
| 8 |
+
|
| 9 |
+
$setup->addAttribute('catalog_product', 'ricardo_enabled', array(
|
| 10 |
+
'group' => 'General',
|
| 11 |
+
'label' => 'Sync to Ricardo?',
|
| 12 |
+
'type' => 'int',
|
| 13 |
+
'input' => 'boolean',
|
| 14 |
+
'visible' => true,
|
| 15 |
+
'required' => false,
|
| 16 |
+
'position' => 10000,
|
| 17 |
+
'global' => 'Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL',
|
| 18 |
+
'note' => '',
|
| 19 |
+
'default' => true,
|
| 20 |
+
'default_value_yesno' => '1',
|
| 21 |
+
));
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
$installer->endSetup();
|
| 25 |
+
|
app/code/local/Smilla/RicardoIntegration/sql/salesattributericardo_setup/mysql4-install-0.1.0.php
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
$installer->startSetup();
|
| 4 |
+
|
| 5 |
+
$installer->addAttribute("quote", "ricardo_ordernumber", array("type"=>"varchar", 'visible' => true));
|
| 6 |
+
$installer->addAttribute("quote", "ricardo_customerid", array("type"=>"varchar", 'visible' => true));
|
| 7 |
+
|
| 8 |
+
# add to order ?
|
| 9 |
+
|
| 10 |
+
$installer->endSetup();
|
| 11 |
+
|
app/code/local/Smilla/RicardoIntegration/xsd/orderImport.xsd
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" version="1.0">
|
| 3 |
+
|
| 4 |
+
<xs:element name="orders" type="orderOptions" />
|
| 5 |
+
|
| 6 |
+
<xs:complexType name="orderOptions">
|
| 7 |
+
<xs:all>
|
| 8 |
+
<xs:element minOccurs="0" name="orderStatus" type="orderStatusDto"/>
|
| 9 |
+
<xs:element minOccurs="0" name="orderReturn" type="orderReturnDto"/>
|
| 10 |
+
<xs:element minOccurs="0" name="orderCancel" type="orderCancelDto"/>
|
| 11 |
+
<xs:element minOccurs="0" name="order" type="orderDto"/>
|
| 12 |
+
</xs:all>
|
| 13 |
+
</xs:complexType>
|
| 14 |
+
|
| 15 |
+
<xs:complexType name="orderCancelDto">
|
| 16 |
+
<xs:all>
|
| 17 |
+
<xs:element minOccurs="0" name="cancelledReason" type="cancelReason"/>
|
| 18 |
+
<xs:element minOccurs="0" name="entries">
|
| 19 |
+
<xs:complexType>
|
| 20 |
+
<xs:sequence>
|
| 21 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry" type="orderCancelEntryDto"/>
|
| 22 |
+
</xs:sequence>
|
| 23 |
+
</xs:complexType>
|
| 24 |
+
</xs:element>
|
| 25 |
+
<xs:element minOccurs="0" name="merchantNotes" type="xs:string"/>
|
| 26 |
+
<xs:element minOccurs="1" name="orderNumber" type="xs:string"/>
|
| 27 |
+
</xs:all>
|
| 28 |
+
</xs:complexType>
|
| 29 |
+
|
| 30 |
+
<xs:complexType name="orderCancelEntryDto">
|
| 31 |
+
<xs:all>
|
| 32 |
+
<xs:element minOccurs="1" name="quantity" type="xs:positiveInteger"/>
|
| 33 |
+
<xs:element minOccurs="1" name="refNumber" type="xs:string"/>
|
| 34 |
+
</xs:all>
|
| 35 |
+
</xs:complexType>
|
| 36 |
+
|
| 37 |
+
<xs:complexType name="orderDto">
|
| 38 |
+
<xs:all>
|
| 39 |
+
<xs:element minOccurs="1" maxOccurs="1" name="customerId" type="xs:string"/>
|
| 40 |
+
<xs:element minOccurs="1" maxOccurs="1" name="customerLanguage" type="xs:string"/>
|
| 41 |
+
<xs:element minOccurs="0" maxOccurs="1" name="paymentOrderNumber" type="xs:string"/>
|
| 42 |
+
<xs:element minOccurs="1" maxOccurs="1" name="orderNumber" type="xs:string"/>
|
| 43 |
+
<xs:element minOccurs="0" maxOccurs="1" name="orderStatus" type="orderStatus"/>
|
| 44 |
+
<xs:element minOccurs="1" maxOccurs="1" name="orderType" type="orderType"/>
|
| 45 |
+
<xs:element minOccurs="0" maxOccurs="1" name="merchantOrderNumber" type="xs:string"/>
|
| 46 |
+
<xs:element minOccurs="0" maxOccurs="1" name="deliveryStatus" type="deliveryStatus"/>
|
| 47 |
+
<xs:element minOccurs="1" maxOccurs="1" name="totalPrice" type="currencyValueDto"/>
|
| 48 |
+
<xs:element minOccurs="1" maxOccurs="1" name="deliveryCosts" type="currencyValueDto"/>
|
| 49 |
+
<xs:element minOccurs="0" maxOccurs="1" name="paymentAddress" type="addressDto"/>
|
| 50 |
+
<xs:element minOccurs="0" maxOccurs="1" name="deliveryAddress" type="addressDto"/>
|
| 51 |
+
<xs:element minOccurs="1" maxOccurs="1" name="entries">
|
| 52 |
+
<xs:complexType>
|
| 53 |
+
<xs:sequence>
|
| 54 |
+
<xs:element maxOccurs="unbounded" minOccurs="1" name="entry" type="orderEntryDto"/>
|
| 55 |
+
</xs:sequence>
|
| 56 |
+
</xs:complexType>
|
| 57 |
+
</xs:element>
|
| 58 |
+
<xs:element minOccurs="1" maxOccurs="1" name="creationDate" type="xs:dateTime"/>
|
| 59 |
+
<xs:element minOccurs="1" maxOccurs="1" name="modificationDate" type="xs:dateTime"/>
|
| 60 |
+
</xs:all>
|
| 61 |
+
</xs:complexType>
|
| 62 |
+
|
| 63 |
+
<xs:complexType name="currencyValueDto">
|
| 64 |
+
<xs:simpleContent>
|
| 65 |
+
<xs:extension base="positiveDouble">
|
| 66 |
+
<xs:attribute name="currency" type="xs:string" use="required"/>
|
| 67 |
+
</xs:extension>
|
| 68 |
+
</xs:simpleContent>
|
| 69 |
+
</xs:complexType>
|
| 70 |
+
|
| 71 |
+
<xs:complexType name="addressDto">
|
| 72 |
+
<xs:all>
|
| 73 |
+
<xs:element minOccurs="1" name="title" type="xs:string"/>
|
| 74 |
+
<xs:element minOccurs="1" name="firstName" type="xs:string"/>
|
| 75 |
+
<xs:element minOccurs="1" name="lastName" type="xs:string"/>
|
| 76 |
+
<xs:element minOccurs="1" name="streetName" type="xs:string"/>
|
| 77 |
+
<xs:element minOccurs="1" name="streetNumber" type="xs:string"/>
|
| 78 |
+
<xs:element minOccurs="1" name="zip" type="xs:string"/>
|
| 79 |
+
<xs:element minOccurs="1" name="city" type="xs:string"/>
|
| 80 |
+
<xs:element minOccurs="1" name="country" type="xs:string"/>
|
| 81 |
+
<xs:element minOccurs="0" name="company" type="xs:string"/>
|
| 82 |
+
<xs:element minOccurs="0" name="pobox" type="xs:string"/>
|
| 83 |
+
</xs:all>
|
| 84 |
+
</xs:complexType>
|
| 85 |
+
|
| 86 |
+
<xs:complexType name="orderEntryDto">
|
| 87 |
+
<xs:all>
|
| 88 |
+
<xs:element minOccurs="1" name="refNumber" type="xs:string"/>
|
| 89 |
+
<xs:element minOccurs="1" name="productCode" type="xs:string"/>
|
| 90 |
+
<xs:element minOccurs="1" name="entryNumber" type="xs:int"/>
|
| 91 |
+
<xs:element minOccurs="1" name="name" type="xs:string"/>
|
| 92 |
+
<xs:element minOccurs="1" name="quantity" type="xs:positiveInteger"/>
|
| 93 |
+
<xs:element minOccurs="1" name="totalPrice" type="currencyValueDto"/>
|
| 94 |
+
<xs:element minOccurs="0" name="commissioningFee" type="positiveDouble"/>
|
| 95 |
+
<xs:element minOccurs="0" name="options">
|
| 96 |
+
<xs:complexType>
|
| 97 |
+
<xs:sequence>
|
| 98 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="option" type="orderOptionDto"/>
|
| 99 |
+
</xs:sequence>
|
| 100 |
+
</xs:complexType>
|
| 101 |
+
</xs:element>
|
| 102 |
+
</xs:all>
|
| 103 |
+
</xs:complexType>
|
| 104 |
+
|
| 105 |
+
<xs:complexType name="orderOptionDto">
|
| 106 |
+
<xs:sequence>
|
| 107 |
+
<xs:element minOccurs="0" name="name" type="keyValueDto"/>
|
| 108 |
+
<xs:element minOccurs="0" name="value" type="keyValueDto"/>
|
| 109 |
+
</xs:sequence>
|
| 110 |
+
</xs:complexType>
|
| 111 |
+
|
| 112 |
+
<xs:complexType name="keyValueDto">
|
| 113 |
+
<xs:simpleContent>
|
| 114 |
+
<xs:extension base="xs:string">
|
| 115 |
+
<xs:attribute name="key" type="xs:string" use="required"/>
|
| 116 |
+
</xs:extension>
|
| 117 |
+
</xs:simpleContent>
|
| 118 |
+
</xs:complexType>
|
| 119 |
+
|
| 120 |
+
<xs:complexType name="orderStatusDto">
|
| 121 |
+
<xs:all>
|
| 122 |
+
<xs:element minOccurs="0" name="cancelledReason" type="cancelReason"/>
|
| 123 |
+
<xs:element minOccurs="0" name="delayedInfo" type="delayInfo"/>
|
| 124 |
+
<xs:element minOccurs="0" name="merchantNotes" type="xs:string"/>
|
| 125 |
+
<xs:element minOccurs="1" name="orderNumber" type="xs:string"/>
|
| 126 |
+
<xs:element minOccurs="1" name="orderStatus" type="orderStatus"/>
|
| 127 |
+
<xs:element minOccurs="0" name="paymentStatus" type="paymentStatus"/>
|
| 128 |
+
<xs:element minOccurs="0" name="shippingStatus" type="deliveryStatus"/>
|
| 129 |
+
</xs:all>
|
| 130 |
+
</xs:complexType>
|
| 131 |
+
|
| 132 |
+
<xs:complexType name="orderReturnDto">
|
| 133 |
+
<xs:all>
|
| 134 |
+
<xs:element minOccurs="1" name="deliveryCosts" type="positiveDouble"/>
|
| 135 |
+
<xs:element minOccurs="1" name="entries">
|
| 136 |
+
<xs:complexType>
|
| 137 |
+
<xs:sequence>
|
| 138 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry" type="orderReturnEntryDto"/>
|
| 139 |
+
</xs:sequence>
|
| 140 |
+
</xs:complexType>
|
| 141 |
+
</xs:element>
|
| 142 |
+
<xs:element minOccurs="0" name="merchantNotes" type="xs:string"/>
|
| 143 |
+
<xs:element minOccurs="1" name="orderNumber" type="xs:string"/>
|
| 144 |
+
<xs:element minOccurs="0" name="returnNumber" type="xs:string"/>
|
| 145 |
+
</xs:all>
|
| 146 |
+
</xs:complexType>
|
| 147 |
+
|
| 148 |
+
<xs:complexType name="orderReturnEntryDto">
|
| 149 |
+
<xs:all>
|
| 150 |
+
<xs:element minOccurs="1" name="quantity" type="xs:positiveInteger"/>
|
| 151 |
+
<xs:element minOccurs="1" name="refNumber" type="xs:string"/>
|
| 152 |
+
<xs:element minOccurs="0" name="totalPrice" type="xs:double"/>
|
| 153 |
+
</xs:all>
|
| 154 |
+
</xs:complexType>
|
| 155 |
+
|
| 156 |
+
<xs:simpleType name="statusDto">
|
| 157 |
+
<xs:restriction base="xs:string">
|
| 158 |
+
<xs:enumeration value="INFO"/>
|
| 159 |
+
<xs:enumeration value="WARN"/>
|
| 160 |
+
<xs:enumeration value="ERROR"/>
|
| 161 |
+
<xs:enumeration value="FATAL"/>
|
| 162 |
+
</xs:restriction>
|
| 163 |
+
</xs:simpleType>
|
| 164 |
+
|
| 165 |
+
<xs:simpleType name="orderStatus">
|
| 166 |
+
<xs:restriction base="xs:string">
|
| 167 |
+
<xs:enumeration value="OPEN"/>
|
| 168 |
+
<xs:enumeration value="IN_PROGRESS"/>
|
| 169 |
+
<xs:enumeration value="COMPLETED"/>
|
| 170 |
+
<xs:enumeration value="DELAYED"/>
|
| 171 |
+
<xs:enumeration value="CANCELLED"/>
|
| 172 |
+
</xs:restriction>
|
| 173 |
+
</xs:simpleType>
|
| 174 |
+
|
| 175 |
+
<xs:simpleType name="orderType">
|
| 176 |
+
<xs:restriction base="xs:string">
|
| 177 |
+
<xs:enumeration value="MERCHANT_ORDER"/>
|
| 178 |
+
<xs:enumeration value="CUSTOMER_RETURN_ORDER"/>
|
| 179 |
+
<xs:enumeration value="CANCEL_ORDER"/>
|
| 180 |
+
</xs:restriction>
|
| 181 |
+
</xs:simpleType>
|
| 182 |
+
|
| 183 |
+
<xs:simpleType name="deliveryStatus">
|
| 184 |
+
<xs:restriction base="xs:string">
|
| 185 |
+
<xs:enumeration value="NOT_SHIPPED"/>
|
| 186 |
+
<xs:enumeration value="SHIPPED"/>
|
| 187 |
+
</xs:restriction>
|
| 188 |
+
</xs:simpleType>
|
| 189 |
+
|
| 190 |
+
<xs:simpleType name="cancelReason">
|
| 191 |
+
<xs:restriction base="xs:string">
|
| 192 |
+
<xs:enumeration value="no_longer_available"/>
|
| 193 |
+
<xs:enumeration value="not_published"/>
|
| 194 |
+
<xs:enumeration value="other"/>
|
| 195 |
+
</xs:restriction>
|
| 196 |
+
</xs:simpleType>
|
| 197 |
+
|
| 198 |
+
<xs:simpleType name="delayInfo">
|
| 199 |
+
<xs:restriction base="xs:string">
|
| 200 |
+
<xs:enumeration value="d1"/>
|
| 201 |
+
<xs:enumeration value="d2"/>
|
| 202 |
+
<xs:enumeration value="d3"/>
|
| 203 |
+
</xs:restriction>
|
| 204 |
+
</xs:simpleType>
|
| 205 |
+
|
| 206 |
+
<xs:simpleType name="paymentStatus">
|
| 207 |
+
<xs:restriction base="xs:string">
|
| 208 |
+
<xs:enumeration value="NOT_PAID"/>
|
| 209 |
+
<xs:enumeration value="PAID"/>
|
| 210 |
+
</xs:restriction>
|
| 211 |
+
</xs:simpleType>
|
| 212 |
+
|
| 213 |
+
<xs:simpleType name="positiveDouble">
|
| 214 |
+
<xs:restriction base="xs:double">
|
| 215 |
+
<xs:minInclusive value="0"/>
|
| 216 |
+
</xs:restriction>
|
| 217 |
+
</xs:simpleType>
|
| 218 |
+
|
| 219 |
+
</xs:schema>
|
app/code/local/Smilla/RicardoIntegration/xsd/productImport.xsd
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" version="1.0">
|
| 3 |
+
|
| 4 |
+
<xs:complexType name="productsType">
|
| 5 |
+
<xs:sequence minOccurs="1" maxOccurs="unbounded">
|
| 6 |
+
<xs:element name="product" type="productDto" />
|
| 7 |
+
</xs:sequence>
|
| 8 |
+
</xs:complexType>
|
| 9 |
+
|
| 10 |
+
<xs:complexType name="productDto">
|
| 11 |
+
<xs:choice maxOccurs="unbounded">
|
| 12 |
+
<xs:element name="refNumber" type="xs:string" />
|
| 13 |
+
<xs:element minOccurs="0" name="refGroup" type="xs:string" />
|
| 14 |
+
<xs:element minOccurs="0" name="attributes">
|
| 15 |
+
<xs:complexType>
|
| 16 |
+
<xs:sequence>
|
| 17 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="attribute" type="attributeDto" />
|
| 18 |
+
</xs:sequence>
|
| 19 |
+
</xs:complexType>
|
| 20 |
+
</xs:element>
|
| 21 |
+
<xs:element minOccurs="0" name="bundlingId" type="xs:string" />
|
| 22 |
+
<xs:element minOccurs="0" name="categories">
|
| 23 |
+
<xs:complexType>
|
| 24 |
+
<xs:sequence>
|
| 25 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="category" type="xs:string" />
|
| 26 |
+
</xs:sequence>
|
| 27 |
+
</xs:complexType>
|
| 28 |
+
</xs:element>
|
| 29 |
+
<xs:element minOccurs="0" name="deliveryCosts" type="currencyValueDto" />
|
| 30 |
+
<xs:element minOccurs="0" name="description" type="i18NTextDto" />
|
| 31 |
+
<xs:element minOccurs="0" name="name" type="i18NTextDto" />
|
| 32 |
+
<xs:element minOccurs="0" name="options">
|
| 33 |
+
<xs:complexType>
|
| 34 |
+
<xs:sequence>
|
| 35 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="option" type="optionDto" />
|
| 36 |
+
</xs:sequence>
|
| 37 |
+
</xs:complexType>
|
| 38 |
+
</xs:element>
|
| 39 |
+
<xs:element minOccurs="0" name="price" type="priceDto" />
|
| 40 |
+
<xs:element minOccurs="0" name="stock" type="xs:int" />
|
| 41 |
+
<xs:element minOccurs="0" name="summary" type="i18NTextDto" />
|
| 42 |
+
</xs:choice>
|
| 43 |
+
</xs:complexType>
|
| 44 |
+
<xs:complexType name="attributeDto">
|
| 45 |
+
<xs:sequence>
|
| 46 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry" type="attributeValueDto" />
|
| 47 |
+
</xs:sequence>
|
| 48 |
+
<xs:attribute name="key" type="xs:string" />
|
| 49 |
+
<xs:attribute name="unit" type="xs:string" />
|
| 50 |
+
</xs:complexType>
|
| 51 |
+
<xs:complexType name="attributeValueDto">
|
| 52 |
+
<xs:sequence>
|
| 53 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="translation" nillable="true" type="i18NValueDto" />
|
| 54 |
+
<xs:element minOccurs="0" name="value" type="xs:string" />
|
| 55 |
+
</xs:sequence>
|
| 56 |
+
</xs:complexType>
|
| 57 |
+
<xs:complexType name="i18NValueDto">
|
| 58 |
+
<xs:simpleContent>
|
| 59 |
+
<xs:extension base="xs:string">
|
| 60 |
+
<xs:attribute name="locale" type="xs:string" use="required" />
|
| 61 |
+
</xs:extension>
|
| 62 |
+
</xs:simpleContent>
|
| 63 |
+
</xs:complexType>
|
| 64 |
+
<xs:complexType name="currencyValueDto">
|
| 65 |
+
<xs:simpleContent>
|
| 66 |
+
<xs:extension base="xs:string">
|
| 67 |
+
<xs:attribute name="currency" type="xs:string" use="required" />
|
| 68 |
+
</xs:extension>
|
| 69 |
+
</xs:simpleContent>
|
| 70 |
+
</xs:complexType>
|
| 71 |
+
<xs:complexType name="i18NTextDto">
|
| 72 |
+
<xs:sequence>
|
| 73 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="translation" nillable="true" type="i18NValueDto" />
|
| 74 |
+
</xs:sequence>
|
| 75 |
+
</xs:complexType>
|
| 76 |
+
<xs:complexType name="optionDto">
|
| 77 |
+
<xs:sequence>
|
| 78 |
+
<xs:element minOccurs="0" name="name" type="i18NTextDto" />
|
| 79 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="value" type="optionValueDto" />
|
| 80 |
+
</xs:sequence>
|
| 81 |
+
<xs:attribute name="key" type="xs:string" />
|
| 82 |
+
</xs:complexType>
|
| 83 |
+
<xs:complexType name="optionValueDto">
|
| 84 |
+
<xs:choice maxOccurs="unbounded">
|
| 85 |
+
<xs:element minOccurs="0" name="key" type="xs:string" />
|
| 86 |
+
<xs:element minOccurs="0" name="name" type="i18NTextDto" />
|
| 87 |
+
</xs:choice>
|
| 88 |
+
</xs:complexType>
|
| 89 |
+
<xs:complexType name="priceDto">
|
| 90 |
+
<xs:choice maxOccurs="unbounded">
|
| 91 |
+
<xs:element minOccurs="0" name="absoluteDiscount" type="xs:double" />
|
| 92 |
+
<xs:element minOccurs="0" name="originalPrice" type="xs:double" />
|
| 93 |
+
<xs:element minOccurs="0" name="relativeDiscount" type="xs:double" />
|
| 94 |
+
<xs:element name="value" type="xs:double" />
|
| 95 |
+
</xs:choice>
|
| 96 |
+
<xs:attribute name="currency" type="xs:string" use="required" />
|
| 97 |
+
</xs:complexType>
|
| 98 |
+
<xs:complexType name="importProductResponse">
|
| 99 |
+
<xs:sequence>
|
| 100 |
+
<xs:element minOccurs="0" name="return" type="responseDto" />
|
| 101 |
+
</xs:sequence>
|
| 102 |
+
</xs:complexType>
|
| 103 |
+
<xs:complexType name="responseDto">
|
| 104 |
+
<xs:sequence>
|
| 105 |
+
<xs:element minOccurs="0" name="key" type="xs:string" />
|
| 106 |
+
<xs:element minOccurs="0" name="messages">
|
| 107 |
+
<xs:complexType>
|
| 108 |
+
<xs:sequence>
|
| 109 |
+
<xs:element maxOccurs="unbounded" minOccurs="0" name="message" type="messageDto" />
|
| 110 |
+
</xs:sequence>
|
| 111 |
+
</xs:complexType>
|
| 112 |
+
</xs:element>
|
| 113 |
+
<xs:element minOccurs="0" name="status" type="statusDto" />
|
| 114 |
+
</xs:sequence>
|
| 115 |
+
</xs:complexType>
|
| 116 |
+
<xs:complexType name="messageDto">
|
| 117 |
+
<xs:sequence>
|
| 118 |
+
<xs:element minOccurs="0" name="message" type="xs:string" />
|
| 119 |
+
<xs:element minOccurs="0" name="status" type="statusDto" />
|
| 120 |
+
</xs:sequence>
|
| 121 |
+
</xs:complexType>
|
| 122 |
+
<xs:simpleType name="statusDto">
|
| 123 |
+
<xs:restriction base="xs:string">
|
| 124 |
+
<xs:enumeration value="INFO" />
|
| 125 |
+
<xs:enumeration value="WARN" />
|
| 126 |
+
<xs:enumeration value="ERROR" />
|
| 127 |
+
<xs:enumeration value="FATAL" />
|
| 128 |
+
</xs:restriction>
|
| 129 |
+
</xs:simpleType>
|
| 130 |
+
|
| 131 |
+
<xs:element name="products" type="productsType"/>
|
| 132 |
+
</xs:schema>
|
app/code/local/Smilla/Sobuintegration/Model/Observer.php
CHANGED
|
@@ -1,74 +1,74 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
class Smilla_Sobuintegration_Model_Observer
|
| 3 |
-
{
|
| 4 |
-
|
| 5 |
-
public function __construct()
|
| 6 |
-
{
|
| 7 |
-
|
| 8 |
-
}
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Event: salesrule_rule_condition_combine
|
| 12 |
-
*
|
| 13 |
-
* @param $observer
|
| 14 |
-
*/
|
| 15 |
-
public function addConditionToSalesRule($observer)
|
| 16 |
-
{
|
| 17 |
-
|
| 18 |
-
$additional = $observer->getAdditional();
|
| 19 |
-
$conditions = (array)$additional->getConditions();
|
| 20 |
-
|
| 21 |
-
$conditions = array_merge_recursive($conditions, array(
|
| 22 |
-
array('label' => Mage::helper('sobuintegration')->__('sobu Benefit'), 'value' => 'sobuintegration/condition_benefit'),
|
| 23 |
-
));
|
| 24 |
-
|
| 25 |
-
$additional->setConditions($conditions);
|
| 26 |
-
$observer->setAdditional($additional);
|
| 27 |
-
|
| 28 |
-
return $observer;
|
| 29 |
-
}
|
| 30 |
-
|
| 31 |
-
/**
|
| 32 |
-
* Register Sale to Sobu
|
| 33 |
-
*
|
| 34 |
-
* @param $observer
|
| 35 |
-
* @return boolean
|
| 36 |
-
*/
|
| 37 |
-
public function registerSobuSale(Varien_Event_Observer $observer)
|
| 38 |
-
{
|
| 39 |
-
$order = $observer->getEvent()->getOrder();
|
| 40 |
-
$clickId = (int) Mage::getSingleton('core/session')->getSobuClickId();
|
| 41 |
-
|
| 42 |
-
// Sobu ClickId exists?
|
| 43 |
-
if ($clickId > 0) {
|
| 44 |
-
// Register Sale (Server-2-Server)
|
| 45 |
-
$api_url = 'https://www.sobu.ch/register';
|
| 46 |
-
$postdata = array(
|
| 47 |
-
'apiKey' => Mage::helper('sobuintegration/data')->getApiKey(),
|
| 48 |
-
'orderId' => $order->getRealOrderId(),
|
| 49 |
-
'total' => Mage::helper('sobuintegration/data')->getTotal($order),
|
| 50 |
-
'signature' => Mage::helper('sobuintegration/data')->getDigitalSignature(($order->getRealOrderId()).'#'.Mage::helper('sobuintegration/data')->getTotal($order)),
|
| 51 |
-
'clickId' => $clickId,
|
| 52 |
-
);
|
| 53 |
-
|
| 54 |
-
$ch = curl_init($api_url);
|
| 55 |
-
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
| 56 |
-
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($postdata));
|
| 57 |
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| 58 |
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
| 59 |
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
| 60 |
-
$result = json_decode(curl_exec($ch));
|
| 61 |
-
curl_close($ch);
|
| 62 |
-
if($result->isError){
|
| 63 |
-
// Error sending Requ est
|
| 64 |
-
} else {
|
| 65 |
-
// Remove Session Data
|
| 66 |
-
Mage::getSingleton('core/session')->unsSobuClickId();
|
| 67 |
-
Mage::getSingleton('core/session')->unsSobuVoucherCode();
|
| 68 |
-
}
|
| 69 |
-
|
| 70 |
-
}
|
| 71 |
-
|
| 72 |
-
return true;
|
| 73 |
-
}
|
| 74 |
}
|
| 1 |
+
<?php
|
| 2 |
+
class Smilla_Sobuintegration_Model_Observer
|
| 3 |
+
{
|
| 4 |
+
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Event: salesrule_rule_condition_combine
|
| 12 |
+
*
|
| 13 |
+
* @param $observer
|
| 14 |
+
*/
|
| 15 |
+
public function addConditionToSalesRule($observer)
|
| 16 |
+
{
|
| 17 |
+
|
| 18 |
+
$additional = $observer->getAdditional();
|
| 19 |
+
$conditions = (array)$additional->getConditions();
|
| 20 |
+
|
| 21 |
+
$conditions = array_merge_recursive($conditions, array(
|
| 22 |
+
array('label' => Mage::helper('sobuintegration')->__('sobu Benefit'), 'value' => 'sobuintegration/condition_benefit'),
|
| 23 |
+
));
|
| 24 |
+
|
| 25 |
+
$additional->setConditions($conditions);
|
| 26 |
+
$observer->setAdditional($additional);
|
| 27 |
+
|
| 28 |
+
return $observer;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Register Sale to Sobu
|
| 33 |
+
*
|
| 34 |
+
* @param $observer
|
| 35 |
+
* @return boolean
|
| 36 |
+
*/
|
| 37 |
+
public function registerSobuSale(Varien_Event_Observer $observer)
|
| 38 |
+
{
|
| 39 |
+
$order = $observer->getEvent()->getOrder();
|
| 40 |
+
$clickId = (int) Mage::getSingleton('core/session')->getSobuClickId();
|
| 41 |
+
|
| 42 |
+
// Sobu ClickId exists?
|
| 43 |
+
if ($clickId > 0) {
|
| 44 |
+
// Register Sale (Server-2-Server)
|
| 45 |
+
$api_url = 'https://www.sobu.ch/register';
|
| 46 |
+
$postdata = array(
|
| 47 |
+
'apiKey' => Mage::helper('sobuintegration/data')->getApiKey(),
|
| 48 |
+
'orderId' => $order->getRealOrderId(),
|
| 49 |
+
'total' => Mage::helper('sobuintegration/data')->getTotal($order),
|
| 50 |
+
'signature' => Mage::helper('sobuintegration/data')->getDigitalSignature(($order->getRealOrderId()).'#'.Mage::helper('sobuintegration/data')->getTotal($order)),
|
| 51 |
+
'clickId' => $clickId,
|
| 52 |
+
);
|
| 53 |
+
|
| 54 |
+
$ch = curl_init($api_url);
|
| 55 |
+
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
|
| 56 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($postdata));
|
| 57 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| 58 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
|
| 59 |
+
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
|
| 60 |
+
$result = json_decode(curl_exec($ch));
|
| 61 |
+
curl_close($ch);
|
| 62 |
+
if($result->isError){
|
| 63 |
+
// Error sending Requ est
|
| 64 |
+
} else {
|
| 65 |
+
// Remove Session Data
|
| 66 |
+
Mage::getSingleton('core/session')->unsSobuClickId();
|
| 67 |
+
Mage::getSingleton('core/session')->unsSobuVoucherCode();
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
return true;
|
| 73 |
+
}
|
| 74 |
}
|
app/code/local/Smilla/Sobuintegration/controllers/ShareController.php
CHANGED
|
@@ -5,20 +5,9 @@ class Smilla_Sobuintegration_ShareController extends Mage_Core_Controller_Front_
|
|
| 5 |
public function orderAction()
|
| 6 |
{
|
| 7 |
|
| 8 |
-
$loginUrl = Mage::helper('customer')->getLoginUrl();
|
| 9 |
-
if (!Mage::getSingleton('customer/session')->authenticate($this, $loginUrl)) {
|
| 10 |
-
$this->setFlag('', self::FLAG_NO_DISPATCH, true);
|
| 11 |
-
}
|
| 12 |
-
|
| 13 |
$this->loadLayout();
|
| 14 |
$this->order = Mage::getModel('sales/order')->load($this->getRequest()->getParam('order_id'));
|
| 15 |
|
| 16 |
-
if (!$this->_canViewOrder($this->order)) {
|
| 17 |
-
// Not authorized for this order
|
| 18 |
-
$this->_redirect('customer/account');
|
| 19 |
-
}
|
| 20 |
-
|
| 21 |
-
|
| 22 |
$this->renderLayout();
|
| 23 |
|
| 24 |
}
|
| 5 |
public function orderAction()
|
| 6 |
{
|
| 7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
$this->loadLayout();
|
| 9 |
$this->order = Mage::getModel('sales/order')->load($this->getRequest()->getParam('order_id'));
|
| 10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
$this->renderLayout();
|
| 12 |
|
| 13 |
}
|
app/design/frontend/base/default/template/sobu/order/share.phtml
CHANGED
|
@@ -6,9 +6,9 @@
|
|
| 6 |
</p>
|
| 7 |
|
| 8 |
<form name="publish" method="POST" action="<?php echo $this->__('https://www.sobu.ch/publish') ?>">
|
| 9 |
-
<input type="hidden" name="apiKey" value="
|
| 10 |
-
<input type="hidden" name="order" value='
|
| 11 |
-
<input type="hidden" name="signature" value="
|
| 12 |
</form>
|
| 13 |
|
| 14 |
<script type="text/javascript">
|
| 6 |
</p>
|
| 7 |
|
| 8 |
<form name="publish" method="POST" action="<?php echo $this->__('https://www.sobu.ch/publish') ?>">
|
| 9 |
+
<input type="hidden" name="apiKey" value="<?php echo $this->getApiKey() ?>"/>
|
| 10 |
+
<input type="hidden" name="order" value='<?php echo $orderdata = $this->getOrderData() ?>'/>
|
| 11 |
+
<input type="hidden" name="signature" value="<?php echo $this->getSignatureData($orderdata) ?>"/>
|
| 12 |
</form>
|
| 13 |
|
| 14 |
<script type="text/javascript">
|
app/etc/modules/Smilla_Sobuintegration.xml
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Smilla_Sobuintegration>
|
| 5 |
-
<active>
|
| 6 |
<codePool>local</codePool>
|
| 7 |
</Smilla_Sobuintegration>
|
| 8 |
</modules>
|
| 2 |
<config>
|
| 3 |
<modules>
|
| 4 |
<Smilla_Sobuintegration>
|
| 5 |
+
<active>false</active>
|
| 6 |
<codePool>local</codePool>
|
| 7 |
</Smilla_Sobuintegration>
|
| 8 |
</modules>
|
package.xml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Smilla_Sobuintegration</name>
|
| 4 |
-
<version>1.0.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>GNU General Public License (GPL)</license>
|
| 7 |
<channel>community</channel>
|
|
@@ -9,11 +9,11 @@
|
|
| 9 |
<summary>Integrieren Sie Ihren Shop in das sobu Netzwerk. Käufe Teilen, Sobu Rabatte uvm. </summary>
|
| 10 |
<description>Durch die sobu Magento Extension ist es möglich einen Magento-Shop in das sobu Netzwerk zu integrieren.
|
| 11 |
Vorraussetzung ist eine Magento Installation sowie ein gültiger Vertrag mit der sobu-Plattform. Weitere Informationen dazu finden Sie unter: https://www.sobu.ch/de/partner</description>
|
| 12 |
-
<notes>
|
| 13 |
<authors><author><name>smilla AG</name><user>smilla</user><email>hendrik.unkenholz@smilla.com</email></author></authors>
|
| 14 |
-
<date>
|
| 15 |
-
<time>
|
| 16 |
-
<contents><target name="magelocal"><dir name="Smilla"><dir name="PostChShippingLabel"><dir name="Block"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="b28a6d60ecebf1df36a323717630f852"/></dir></dir><dir name="View"><file name="Postchshippinglabel.php" hash="2ba040c5f973d8f5287dbe64e29e3950"/></dir></dir><dir name="Helper"><file name="Data.php" hash="e821c705ee985f2fd6606b724dd999e0"/></dir><dir name="Model"><dir name="Source"><file name="Codeoptions.php" hash="4f73854bde626b90fcfcb568f2931857"/><file name="Formatoptions.php" hash="0dbe915bd42b21f17abbcbfb758dc741"/></dir></dir><dir name="controllers"><file name="PostchshippinglabelController.php" hash="9b83ae915a3cf3b7e5cea5cdde88f085"/></dir><dir name="etc"><file name="config.xml" hash="e8d9455d7111a3bea63ee942f48170b4"/><file name="system.xml" hash="b7f321041ca485bfeea6059da3690b19"/></dir></dir><dir name="Sobuintegration"><dir name="Block"><file name="Generatebutton.php" hash="74084f97064fa5806d715ead2ffef14d"/><file name="Share.php" hash="266f41ed10e3e7aca0281ca130e534c1"/></dir><dir name="Helper"><file name="Data.php" hash="7eb0a0bbc1ea135e53d44dce5b4f5a6c"/></dir><dir name="Model"><dir name="Condition"><file name="Benefit.php" hash="c852f11bad38a4c257c55da1e04800c5"/></dir><file name="Observer.php" hash="
|
| 17 |
<compatible/>
|
| 18 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 19 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Smilla_Sobuintegration</name>
|
| 4 |
+
<version>1.0.2</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license>GNU General Public License (GPL)</license>
|
| 7 |
<channel>community</channel>
|
| 9 |
<summary>Integrieren Sie Ihren Shop in das sobu Netzwerk. Käufe Teilen, Sobu Rabatte uvm. </summary>
|
| 10 |
<description>Durch die sobu Magento Extension ist es möglich einen Magento-Shop in das sobu Netzwerk zu integrieren.
|
| 11 |
Vorraussetzung ist eine Magento Installation sowie ein gültiger Vertrag mit der sobu-Plattform. Weitere Informationen dazu finden Sie unter: https://www.sobu.ch/de/partner</description>
|
| 12 |
+
<notes>Kleinere Fehlerbehebungen</notes>
|
| 13 |
<authors><author><name>smilla AG</name><user>smilla</user><email>hendrik.unkenholz@smilla.com</email></author></authors>
|
| 14 |
+
<date>2014-05-13</date>
|
| 15 |
+
<time>17:02:53</time>
|
| 16 |
+
<contents><target name="magelocal"><dir name="Smilla"><dir name="PostChShippingLabel"><dir name="Block"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="b28a6d60ecebf1df36a323717630f852"/></dir></dir><dir name="View"><file name="Postchshippinglabel.php" hash="2ba040c5f973d8f5287dbe64e29e3950"/></dir></dir><dir name="Helper"><file name="Data.php" hash="e821c705ee985f2fd6606b724dd999e0"/></dir><dir name="Model"><dir name="Source"><file name="Codeoptions.php" hash="4f73854bde626b90fcfcb568f2931857"/><file name="Formatoptions.php" hash="0dbe915bd42b21f17abbcbfb758dc741"/></dir></dir><dir name="controllers"><file name="PostchshippinglabelController.php" hash="9b83ae915a3cf3b7e5cea5cdde88f085"/></dir><dir name="etc"><file name="config.xml" hash="e8d9455d7111a3bea63ee942f48170b4"/><file name="system.xml" hash="b7f321041ca485bfeea6059da3690b19"/></dir></dir><dir name="RicardoIntegration"><dir name="Block"><dir name="Adminhtml"><dir name="Log"><file name="Grid.php" hash="858a47ef63ab3c30717183ae30df5b54"/></dir><file name="Log.php" hash="a31fd35c41c13932cd096dfd53a0cfb4"/><dir name="Options"><file name="Abstract.php" hash="e7636146ce09f7172a70998ac68a94dc"/></dir><file name="Options.php" hash="b59dd5a984c9c12a296543a0a377c049"/><file name="Productxml.php" hash="0ff6f735f75854bfe91a0d283ebcc72a"/><file name="RicardoIntegrationbackend.php" hash="a4c9dfc16a12688cda604d549c8da6a0"/></dir></dir><dir name="Helper"><file name="Data.php" hash="87e7e45c2581c3d320c2c1c4ad126792"/><file name="Sftp.php" hash="23e40ca497940cc762f5230a4edd1774"/><file name="Xml.php" hash="f00956a0d4fe6cba592b808a34c01f89"/></dir><dir name="Model"><file name="Cron.php" hash="4d733059b3f248c0faca7aff625b00cf"/><dir name="Entity"><file name="Attribute.php" hash="6e449b11ce6a18bdffbc2f982109d899"/></dir><file name="Log.php" hash="98f40c774baf75020b4edac574160550"/><dir name="Mysql4"><dir name="Log"><file name="Collection.php" hash="b00f4b299ecd1ff488f227fb93df0e12"/></dir><file name="Log.php" hash="841dcf2f9d488b89b37cd498a5e997da"/></dir><file name="Observer.php" hash="c7fc47483ea0f2c89923ea243d401f37"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="LogController.php" hash="7541aeaafd51789e09df8b07528484da"/><file name="RicardointegrationbackendController.php" hash="186dd23afa037d86c931d0b693e9fbb7"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="51cc2c3c5693e3efaefade943d0112ec"/><file name="config.xml" hash="197dc60c3ec9b5ac51774ba499f5b9e0"/><file name="system.xml" hash="a3860eedd89aab0c1edb3662089f37c1"/></dir><dir name="sql"><dir name="attributericardo_setup"><file name="mysql4-install-0.1.0.php" hash="81130e87f55c2e8fe40bc092fad189c7"/></dir><dir name="categoryattributericardo_setup"><file name="mysql4-install-0.1.0.php" hash="877d494dd26214a5dc0f744f0f587e23"/></dir><dir name="logtablericardo_setup"><file name="mysql4-install-0.1.0.php" hash="dc4907e1dda0613903855dd22b093600"/></dir><dir name="productattributericardo_setup"><file name="mysql4-install-0.1.0.php" hash="d06a6879352e9e3d95218d02d0f8a36a"/></dir><dir name="salesattributericardo_setup"><file name="mysql4-install-0.1.0.php" hash="b33c68a4d1873638861da53556251f84"/></dir></dir><dir name="xsd"><file name="orderImport.xsd" hash="8464a2d14f9f1e24524207ffac416bb2"/><file name="productImport.xsd" hash="d7fed24985319a7172ea1e77c78c075a"/></dir></dir><dir name="Sobuintegration"><dir name="Block"><file name="Generatebutton.php" hash="74084f97064fa5806d715ead2ffef14d"/><file name="Share.php" hash="266f41ed10e3e7aca0281ca130e534c1"/></dir><dir name="Helper"><file name="Data.php" hash="7eb0a0bbc1ea135e53d44dce5b4f5a6c"/></dir><dir name="Model"><dir name="Condition"><file name="Benefit.php" hash="c852f11bad38a4c257c55da1e04800c5"/></dir><file name="Observer.php" hash="caf15474f209dda6d05b051774d46556"/></dir><dir name="controllers"><file name="AdminController.php" hash="d3848d4ed2e3cbb5fa6ff0f78518c43e"/><file name="ShareController.php" hash="4052f2454f69e8f48f252b9613f77611"/></dir><dir name="etc"><file name="config.xml" hash="3c778cedc46f383fdd1cf5534d016b1c"/><file name="system.xml" hash="b0a2f556320269272b4759da27c2564a"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="sobu"><dir name="checkout"><file name="share.phtml" hash="98885793a3bb35964fd64297f8c0f89f"/></dir><dir name="order"><file name="share.phtml" hash="1465ed5efb372a26e9d85b70c8aa5472"/></dir><dir name="sales"><dir name="order"><file name="share.phtml" hash="1b1556f175008a1114fa933cad2500d6"/><file name="totals.phtml" hash="60a502bfd89474dfa57bc799a4f4e504"/></dir></dir><dir name="share"><file name="info.phtml" hash="fdcd922d8f651b11714251ddef64abf9"/><file name="link.phtml" hash="f9f8f4708750fd2852f0d0ec42ceff83"/></dir></dir></dir><dir name="layout"><file name="sobuintegration.xml" hash="139553188e2acb3fe61d9b4d4079e679"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="sobu"><file name="banner_share.png" hash="f5a41a1af0a68d368ab048d138c28e5c"/><file name="banner_share_01.png" hash="045706753e361031b5a93ac38ebe1cfb"/><file name="banner_share_02.png" hash="75857a645c0a81d51975c10df8afd999"/><file name="banner_share_04.png" hash="9246b8dfbaefe3c89ead9d0ab3110fb2"/><file name="banner_share_04_de_CH.png" hash="9246b8dfbaefe3c89ead9d0ab3110fb2"/><file name="banner_share_04_en_US.png" hash="20f56f02dfc8310c9bb5d2fc7a31fab1"/><file name="banner_share_04_fr_FR.png" hash="752b197fad998b2b67cdaadc51cfa1b7"/><file name="banner_share_04_it_CH.png" hash="ff866ad36a170366544fb0fc202ecfe9"/><file name="banner_share_05.png" hash="a6ae54c9e1c7fd1d5f940cf77d8640a3"/><file name="infobanner_de_CH.png" hash="61a07e90f4c73b357efb2bfa478d3e83"/><file name="infobanner_en_US.png" hash="a2b7d488f8a860ddcfaf153b864f5cd2"/><file name="infobanner_fr_FR.png" hash="8b34ce6774dbb17c80b9dfdf32b3897c"/><file name="infobanner_it_CH.png" hash="a6ef1614f657b9cbe56be4e3f8ac4493"/><file name="sobu_image_de_CH.png" hash="be62ec89cb228685809b21b313e2f6e4"/><file name="sobu_image_de_DE.png" hash="be62ec89cb228685809b21b313e2f6e4"/><file name="sobu_image_en_US.png" hash="bf60e9823c3604c5a71a28db6a49d506"/><file name="sobu_image_fr_FR.png" hash="9d5492a4575127c1fe607360baac2de7"/><file name="sobu_image_it_CH.png" hash="8c3a8d776857fdff4e8938280a96d692"/><file name="sobulogo_de_CH.png" hash="fa4206c0e37b7dc3273c281e90e824be"/><file name="sobulogo_de_DE.png" hash="fa4206c0e37b7dc3273c281e90e824be"/><file name="sobulogo_en_US.png" hash="c3ec67330d2fb72e7acc7e7d3ca24640"/><file name="sobulogo_fr_FR.png" hash="c4eb66c697896792e8821f267f23849b"/><file name="sobulogo_it_CH.png" hash="d036e1709bca5d87059224954dce1683"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="de_CH"><file name="Smilla_Sobuintegration.csv" hash="2e3e0c02b2e3366d7ff4db018a8b728c"/></dir><dir name="de_DE"><file name="Smilla_Sobuintegration.csv" hash="2e3e0c02b2e3366d7ff4db018a8b728c"/></dir><dir name="en_US"><file name="Smilla_Sobuintegration.csv" hash="d15ddb9d6ab6266654aa5fb36dbc4a2f"/></dir><dir name="fr_FR"><file name="Smilla_Sobuintegration.csv" hash="c018ec8d75f620e140336322fbd5d321"/></dir><dir name="it_CH"><file name="Smilla_Sobuintegration.csv" hash="5b736f3a4463054576d6ecc40d2c278d"/></dir><dir name="it_IT"><file name="Smilla_Sobuintegration.csv" hash="5b736f3a4463054576d6ecc40d2c278d"/></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Smilla_Sobuintegration.xml" hash="efb9060a1842749c0bc74eb30bdec8b8"/></dir></target></contents>
|
| 17 |
<compatible/>
|
| 18 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 19 |
</package>
|
