sefirosweb/laravel-odoo-connector

使用laravel ORM连接Odoo的驱动程序

v1.0.8 2024-09-25 07:28 UTC

This package is auto-updated.

Last update: 2024-09-25 07:29:26 UTC


README

使用laravel ORM连接Odoo的驱动程序,它基于JSON RPC。

Odoo Web服务文档 JSON RPC.

为什么使用laravel-odoo-connector而不是postgresql连接?

似乎直接连接到postgresql数据库比使用基于json-rpc的laravel-odoo-connector更简单。

优点是,当你执行“修改”或“创建”对象等操作时,Odoo有触发器会自动执行操作,

如果你使用原始的postgresql语句执行这些操作,这些事件/操作将不会执行,因此遵循Odoo工作流程很重要,Odoo提供json-rpc以执行这些操作,

例如,在Odoo中可以有一个触发器,在创建发票时将发票发送给客户,

此外,laravel-odoo-connector还提供了执行模型“操作”的能力,

例如,一旦创建了销售订单,就可以对其进行确认

$sale_order = SaleOrder::find(1);
$sale_order->action('action_confirm');

它会在odoo模型中触发“确认”按钮

安装 - Composer

您可以通过composer安装此包

composer require sefirosweb/laravel-odoo-connector

在database.php中添加odoo的配置

// database.php
    'connections' => [
        // ...

        'odoo' => [
            'driver' => 'odoo',
            'host' => env('ODOO_HOST', 'https://your-odoo-host.com'),
            'database' => env('ODOO_DB', 'db_name'),
            'username' => env('ODOO_USERNAME', 'user'),
            'password' => env('ODOO_PASSWORD', 'api_key'),
            'defaultOptions' => [
                'timeout' => 20,
                'context' => [
                    'lang' => 'es_ES'
                ],
            ],
        ],

    ],

用法

将odoo模型导入到您的控制器中

use Sefirosweb\LaravelOdooConnector\Http\Models\ProductProduct;

class YourController extends Controller
{
    public function index()
    {
        $products = ProductProduct::where('name', 'like', '%product%')->with('mrp_bom')->get();
        return view('products.index', compact('products'));
    }
}

您可以使用Eloquent ORM的所有方法,如findwherewhereHaswithcreateupdatedelete等。

$product = ProductProduct::find(1);
$product->name = 'New name';
$product->save();

$product = ProductProduct::create([
    'name' => 'Product 1',
    'description' => 'Description of product 1',
    'list_price' => 100,
    // ...
]);

自定义模型

很多时候需要修改模型或创建新的模型,发布配置文件并扩展模型,

class YourCustomProductProduct extends Sefirosweb\LaravelOdooConnector\Http\Models\ProductProduct
{
    protected $table = 'product.product';

    public function your_custom_belongs(): BelongTo
    {
        return $this->belongsTo(YourCustomModel::class, 'your_field_id');
    }
}

发布配置,以覆盖Odoo模型

php artisan vendor:publish --provider="Sefirosweb\LaravelOdooConnector\LaravelOdooConnectorServiceProvider"  --tag=config --force

通过这种方式,您可以添加更多关系或编辑它们,配置自己的模型,在文件config/laravel-odoo-connector.php

return [
    'ProductProduct' => App\Http\Models\YourCustomProductProduct::class,
    'ProductTemplate' => Sefirosweb\LaravelOdooConnector\Http\Models\ProductTemplate::class,
    'ResLang' => Sefirosweb\LaravelOdooConnector\Http\Models\ResLang::class,
    ///...
];

软删除

如果您需要使用软删除“active”,请导入Sefirosweb\LaravelOdooConnector\Http\Traits\SoftDeleteOdoo特质

use Sefirosweb\LaravelOdooConnector\Http\Traits\SoftDeleteOdoo;

class ProductProduct extends OdooModel
{
    use SoftDeleteOdoo;
    // ...
}

多个Odoo连接

在database.php中添加odoo的配置,仅在模型中添加连接

use Sefirosweb\LaravelOdooConnector\Http\Models\OdooModel;

class YourMainOdooModel extends OdooModel
{
    protected $connection = 'other_odoo_connection';

    public function getConnection()
    {
        return app('db')->connection('other_odoo_connection');
    }
}

自定义获取所有记录

如果您需要获取所有记录,可以在模型中使用get_all方法,这将分批执行,每次500条记录,以避免Odoo超时,与Eloquent ORM的all方法相同

$products = ProductProduct::get_all('id', 'name', 100);

模型操作

您可以执行模型的操作,例如确认销售订单

$sale_order = SaleOrder::find(1);
$sale_order->action('action_confirm');

对于自定义操作,您可以提供更多数据;

$args = [['id' => 1]];
SaleOrder::model_action('action_custom', $args);

待办事项

  • 添加Odoo的其他模型(pos、pos_line...)
  • 添加测试

测试

php artisan test packages/laravel-odoo-connector/tests/Feature/RandomTests.php