1. here is the model define:
<global> <models> <openerpconnector> <class>Openlabs_OpenERPConnector_Model</class> </openerpconnector>
2. here is the resource api define:
plese look at <model> node
it is important
<sales_rma translate="title" module="Openlabs_OpenERPConnector"> <model>openerpconnector/sales_rma_api</model> <title>Custom Sales RMA API</title> <methods> <search translate="title" module="Openlabs_OpenERPConnector"> <title>Return the list of products ids that match with the filter</title> <method>search</method> </search> <info translate="title" module="Openlabs_OpenERPConnector"> <title>Return the rma and detail items and history info</title> <method>info</method> </info> <list translate="title" module="Openlabs_OpenERPConnector"> <title>Return the rma list info by filter data</title> <method>retrieveRmas</method> </list> <update translate="title" module="Openlabs_OpenERPConnector"> <title>update rma and rma items status by rma id and status data</title> <method>update</method> </update> <delete translate="title" module="Openlabs_OpenERPConnector"> <title>delete rma and rma items status and histories by rma incremnt id</title> <method>delete</method> </delete> </methods> </sales_rma>
3. Api.php
<?php /** * * @author Mohammed NAHHAS * @package Openlabs_OpenERPConnector * */ class Openlabs_OpenERPConnector_Model_Sales_Rma_Api extends Mage_Sales_Model_Api_Resource { /** * Return the list of products ids that match with the filter * The filter imported is required * @param array * @return array */ public function search($data) { $result = array(); $collection = Mage::getModel("enterprise_rma/rma")->getCollection(); //->addAttributeToFilter('imported', array('eq' => $data['imported'])); if(isset($data['limit'])) { $collection->setPageSize($data['limit']); $collection->setOrder('entity_id', 'ASC'); } if(isset($data['filters']) && is_array($data['filters'])) { $filters = $data['filters']; foreach($filters as $field => $value) { $collection->addFieldToFilter($field, $value); } } foreach ($collection as $order) { $result[] = $order['increment_id']; } return $result; } /** * Retrieve full order information * * @param string $orderIncrementId * @return array */ public function info($increment_id) { $rma = null; $collection = Mage::getModel("enterprise_rma/rma")->getCollection() ->addFieldToFilter('increment_id', array('eq' => $increment_id)); foreach ($collection as $rma) { $rma = $rma; break; } $result = $this->_getAttributes($rma, 'rma'); $result['items'] = array(); $item_collection = Mage::getModel("enterprise_rma/item")->getCollection()->addFieldToFilter( 'rma_entity_id', $rma->getId() ); foreach ($item_collection as $item) { $result['items'][] = $this->_getAttributes($item, 'item'); } $result['status_history'] = array(); $history_collection = Mage::getModel('enterprise_rma/rma_status_history')->getCollection() ->addFieldToFilter('rma_entity_id',$rma->getId()); foreach ($history_collection as $history) { $result['status_history'][] = $this->_getAttributes($history, 'rma_status_history'); } return $result; } public function retrieveRmas($data) { $result = array(); $collection = Mage::getModel("enterprise_rma/rma")->getCollection(); if(isset($data['limit'])) { $collection->setPageSize($data['limit']); $collection->setOrder('entity_id', 'ASC'); } if(isset($data['filters']) && is_array($data['filters'])) { $filters = $data['filters']; foreach($filters as $field => $value) { $collection->addFieldToFilter($field, $value); } } foreach ($collection as $rma) { $tmp = $this->_getAttributes($rma, 'rma'); $result[] = $tmp; } return $result; } public function update($rma_id, $data) { $collection = Mage::getModel("enterprise_rma/rma")->getCollection() ->addFieldToFilter('increment_id', array('eq' => $rma_id)); foreach ($collection as $rma) { $rma = $rma; break; } $rma_items = Mage::getModel("enterprise_rma/item")->getCollection()->addFieldToFilter( 'rma_entity_id', $rma->getId() ); if (isset ($data['status']) && !empty($data['status'])) { $status = $data['status']; //update items status foreach ($rma_items as $item) { $qty_requested = $item->getData('qty_requested'); if ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_AUTHORIZED) { $item->setData('qty_authorized' , $qty_requested); } else if ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_APPROVED) { $item->setData('qty_approved' , $qty_requested); } else if ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_RECEIVED) { $item->setData('qty_returned' , $qty_requested); } if ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_CLOSED) { $item->setStatus(Enterprise_Rma_Model_Rma_Source_Status::STATE_DENIED); } else { $item->setStatus($status); } $item->save(); } if ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_APPROVED) { //确认完成的订单 $rma->setData('status', Enterprise_Rma_Model_Rma_Source_Status::STATE_PROCESSED_CLOSED); } elseif ($status == Enterprise_Rma_Model_Rma_Source_Status::STATE_REJECTED) { //确认拒绝收到货物的订单 $rma->setData('status', Enterprise_Rma_Model_Rma_Source_Status::STATE_CLOSED); } else { $rma->setData('status', $status); } $rma->save(); return true; } else { $this->_fault('data_invalid', "Error, the attribut 'status' need to be specified"); } } public function delete($increment_id) { try { // get rma entity $collection = Mage::getModel("enterprise_rma/rma")->getCollection() ->addFieldToFilter('increment_id', array('eq' => $increment_id)); foreach ($collection as $rma) { $rma = $rma; break; } //get grid entity $collection_grid = Mage::getModel("enterprise_rma/grid")->getCollection() ->addFieldToFilter('increment_id', array('eq' => $increment_id)); foreach ($collection_grid as $rma_grid) { $grid = $rma_grid; break; } // get history entity $history_collection = Mage::getModel('enterprise_rma/rma_status_history')->getCollection() ->addFieldToFilter('rma_entity_id',$rma->getId()); foreach ($history_collection as $hc) { $hc = $hc; $hc->delete(); } //get rma_shipping_label $shipping_collection = Mage::getModel('enterprise_rma/shipping')->getCollection() ->addFieldToFilter('rma_entity_id',$rma->getId()); foreach ($shipping_collection as $sc) { $sc->delete(); } //get items $rma_items = Mage::getModel("enterprise_rma/item")->getCollection()->addFieldToFilter( 'rma_entity_id', $rma->getId() ); foreach ($rma_items as $item) { $item->delete(); } $grid->delete(); $rma->delete(); return true; } catch (Exception $e) { var_dump($e->getMessage()); $this->_fault('data_invalid', $e->getMessage()); } } protected function _getAttributes($object, $type, array $attributes = null) { $result = array(); if (!is_object($object)) { return $result; } foreach ($object->getData() as $attribute=>$value) { $result[$attribute] = $value; } if (isset($this->_attributesMap['global'])) { foreach ($this->_attributesMap['global'] as $alias=>$attributeCode) { $result[$alias] = $object->getData($attributeCode); } } if (isset($this->_attributesMap[$type])) { foreach ($this->_attributesMap[$type] as $alias=>$attributeCode) { $result[$alias] = $object->getData($attributeCode); } } return $result; } }
4. call example:
require_once 'abstract.php'; /** * Magento Compiler Shell Script * * @category Mage * @package Mage_Shell * @author Magento Core Team <core@magentocommerce.com> */ class Mage_Shell_Test extends Mage_Shell_Abstract { /** * Run script * */ public function run() { $client = new Zend_XmlRpc_Client('http://lifemore.svn-test.com/index.php/api/xmlrpc'); $api_user = 'uername'; $api_password = '******'; $session = $client->call('login', array($api_user, $api_password)); $params = array(array('filters'=>array('increment_id'=>array('eq'=>'300000005')))); $r = $client->call('call', array($session, 'sales_rma.search',$params)); var_dump($r); } } $shell = new Mage_Shell_Test(); $shell->run();
相关推荐
magento2-blog-module-tutorial, 关于如何从头开始创建 magento 2模块的教程,带有测试 2博客模块教程这个模块是 WIP,它将被更新为每个教程我目前正在写。介绍如何从头创建完整功能的Magento 2模块。 即使有测试,...
Ajax-magento2-catalog-infinite-scroll.zip,免费的Magento 2扩展,为目录添加无限滚动功能(通过AJAX实现)编码教程,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。...
Magento 2 Module Experius电子邮件捕获器--记录器``experius/module-emailcatcher``主要功能记录所有由Magento发送的电子邮件在弹出窗口中查看电子邮件内容(用于测试和样式设置的不错) 转发收到的电子邮件重新...
Magento 2模块-内容小部件 这是一个私人模块,目前不面向公众消费。概述Augustash_ContentWidgets模块为Magento...C app/code/Augustash/ContentWidgets/bin/magento module:enable --clear-static-content Augustas
Ajax-magento2-ajax-cart-quick.zip,magento 2 ajax购物车扩展插件提供舒适的购物体验。客户可以很容易地选择可配置的选项并在弹出窗口中编辑项目,而不会浪费重新加载页面的时间。,ajax代表异步javascript和xml。它...
Ajax-magento2-ajax-layered-navigation.zip,ajax分层导航magento 2提供了一个过滤器列表,帮助您的客户以最短的方式搜索和获得他们最喜欢的产品。这个扩展应用了现代ajax技术来增强过滤系统,以提高用户对页面上每...
Magento 2 是一个开源的电子商务平台,以其高度可定制性和强大的功能著称。"magento2-checkout-success-misc-script-源码.rar" 文件显然包含了与 Magento 2 的结账成功页面(checkout success page)相关的自定义...
Ajax-magento2-module-ajax.zip,用于ajax请求的magento 2模块,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页...
什么是magento2-module-gift-sales-rule规则Magento 2 Module? 此模块为Magento购物车价格规则功能提供了2个新操作: 根据当地条件向客户提供礼品产品 每次达到阈值时向客户提供礼品产品(例如,购物车中每30 $)...
此模块已作为Magento 2.4.0或更高版本的一部分正式移至Magento2 GitHub存储库中。 了解更多信息: : 要求 Magento社区版2.0.x-2.4.x或Magento企业版2.0.x-2.4.x 安装 支持 如果有任何问题,请如果仍然需要帮助,请...
composer require orba/magento2-module-style-guide 3.样式指南部分概述 样式指南的主要组成部分是章节。 每个部分都有一个标签和一个PHTML模板。 如果需要,节可以具有视图模型。 该部分可能被标记为已删除,
将图片上传器添加到Magento后端在后端上传的图像可以在前端int的相应页面中查看易于在任何magento安装中使用安装✓通过作曲家安装在Magento 2根文件夹中运行以下命令: composer require prateekkarki/module-...
Magento 2 是一款开源的电子商务平台,用于构建和管理在线商店。GCP(Google Cloud Platform)是谷歌提供的云服务,包括存储、计算和其他多种服务。这个"magento2-backup-gcp-源码.rar"文件可能包含了一套用于在GCP...
Magento 2-空白主题-SASS版本 Magento 2 Blank主题的基于SASS的版本,旨在尽可能接近核心代码。 安装 将此添加到您的项目依赖列表中, composer require snowdog/theme-blank-sass 将您的应用程序设置为developer...
"module-adc-popup"是专门为Magento 2设计的一款扩展,它的主要功能是在用户将商品添加到购物车时,会触发一个弹出窗口来增强用户体验。 **特性详解** 1. **添加到购物车弹出窗口**:此扩展的核心特性是在用户成功...
Magento是一款强大的开源电子商务平台,以其灵活性和可扩展性在电商领域广受青睐。"MAGENTO 蓝色主题模板适合1.4.1-1.6.1" 是为这个平台设计的一款专用于1.4.1到1.6.1版本的蓝色主题模板。该模板旨在提供一种专业且...
它用于Magefan的和要求Magento社区版2.0.x-2.4.x或Magento企业版2.0.x-2.4.x安装方法1-通过composer安装打开命令行使用命令“ cd”导航到您的magento2根目录运行命令:作曲家需要magefan / module-geoip composer ...
bin/magento module:enable Smile_StoreDelivery 安装模块并重建DI缓存 bin/magento setup:upgrade 如何配置 商店>配置>销售>送货方式>商店交货 场地 类型 已启用 是/否 标题 瓦尔查 方法名称 瓦尔查 价格 小数 ...
Magento Composer 安装程序 这个项目的目的是让能够安装 Magento 模块,并自动将它们集成到 Magento 安装中。 我们强烈建议您同时阅读上的通用作曲家文档 您还应该看到 项目详情 该项目仅涵盖 composer 的自定义...
标题 "phoenix-module-cashondelivery-1.0.2_lady4mf_magento_magento2_Pho" 提供的信息表明这是一个 Magento 2 模块,由 PhoenixModule 创建,版本号为 1.0.2,并且可能与 lady4mf 有关。这个模块专注于 "Cash on ...