tbondois / odoo-ripcord
Ripoo : a PHP7 XML-RPC client handler for Odoo External API
Installs: 96 618
Dependents: 1
Suggesters: 0
Security: 0
Stars: 13
Watchers: 2
Forks: 38
Open Issues: 6
Requires
- php: >=7.0
- ext-xmlrpc: *
- darkaonline/ripcord: ^0.1.6
Requires (Dev)
README
Ripoo is a PHP7 XML-RPC client handler for Odoo.
Forked from robroypt/odoo-client, itself using darkaonline/ripcord, Ripoo is a PSR-compliance edition of ripcord, the library used in example in the Odoo External API documentation for PHP.
This library is on GitHub and Packagist.
Supported versions
This library should work with all versions of Odoo, at least between 8.0 and 14.0, Community & Enterprise Editions. I personnaly tested it only with 11.0 but their API is the same. It can be used in all PHP frameworks, like Symfony, Laravel or Magento2. If you find any incompatibilities, please create an issue or submit a pull request.
Changelog
See CHANGELOG.md
Installation
composer require tbondois/odoo-ripcord
Update
- To update all your libraries included in your composer.json
composer update
- But if you want to update JUST this library :
composer update tbondois/odoo-ripcord
Add --with-dependencies
to also update others libraries used by this one.
Usage
- Instantiate a new client via instance itself :
use Ripoo\OdooClient; $host = 'example.odoo.com:8080'; $db = 'example-database'; $user = 'user@email.com'; $password = 'yourpassword'; $client = new OdooClient($host, $db, $user, $password);
- Or you can instanciate new client via ClientFactory, to centralize configuration use good Design Patterns .
Basic sample for Magento2 :
class RipooClientProvider { private $clientFactory; private $client; private $scopeConfig; function __construct( \Ripoo\OdooClientFactory $clientFactory, \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig ) { $this->clientFactory = $clientFactory; $this->scopeConfig = $scopeConfig; } public function createClient() : \Ripoo\OdooClient { // TODO secure injections $odooUrl = $this->scopeConfig->getValue('my/settings/odoo_url'); $odooDb = $this->scopeConfig->getValue('my/settings/odoo_database'); $odooUser = $this->scopeConfig->getValue('my/settings/odoo_user'); $odooPwd = $this->scopeConfig->getValue('my/settings/odoo_pwd'); $this->client = $this->clientFactory->create( $host, $odooDb, $odooUser, $odooPwd ); return $this->client; } public function getClient() : \Ripoo\OdooClient { // You can force nenewing a Client based on createdAt if (!$this->client) { $this->client = $this->createClient(); } return $this->client; } }
For the client to work you have to exclude the http://
and /xmlrpc/2
parts in the url. If you want to use another Odoo API, put it in the optional 5th parameter of constructor.
xmlrpc/2/common endpoint
Getting version information:
$client->version();
There is no login/authenticate method. The client does authentication for you, that is why the credentials are passed as constructor arguments.
xmlrpc/2/object endpoint
Search for records:
$criteria = [ ['customer', '=', true], ]; $offset = 0; $limit = 10; $client->search('res.partner', $criteria, $offset, $limit);
Search and count records.
$criteria = [ ['customer', '=', true], ]; $client->search_count('res.partner', $criteria);
Reading records:
$ids = $client->search('res.partner', [['customer', '=', true]], 0, 10); $fields = ['name', 'email', 'customer']; $customers = $client->read('res.partner', $ids, $fields);
Search and Read records:
$criteria = [ ['customer', '=', true], ]; $fields = ['name', 'email', 'customer']; $customers = $client->search_read('res.partner', $criteria, $fields, 10);
Creating records:
$data = [ 'name' => 'John Doe', 'email' => 'foo@bar.com', ]; $id = $client->create('res.partner', $data);
Updating records:
// change email address of user with current email address foo@bar.com $ids = $client->search('res.partner', [['email', '=', 'foo@bar.com']], 0, 1); $client->write('res.partner', $ids, ['email' => 'baz@quux.com']); // 'uncustomer' the first 10 customers $ids = $client->search('res.partner', [['customer', '=', true]], 0, 10); $client->write('res.partner', $ids, ['customer' => false]);
Deleting records:
$ids = $client->search('res.partner', [['email', '=', 'baz@quuz.com']], 0, 1); $client->unlink('res.partner', $ids);
How to know the model names
- Model
ir.models
will return a list of reachable models. - You can also use
erppeek
:
sudo pip install -U erppeek
erppeek --server=http://odoo.example.com -d your_db -u admin -p password
your_db >>> models()
License
MIT License. Copyright (c) 2018 Thomas Bondois. See LICENSE file.