PHP code example of bannerstop / odoo-connect
1. Go to this page and download the library: Download bannerstop/odoo-connect library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
bannerstop / odoo-connect example snippets
use Bannerstop\OdooConnect\Client\OdooConnection;
use Bannerstop\OdooConnect\Client\OdooClient;
use Bannerstop\OdooConnect\Builder\RequestBuilder;
use Bannerstop\OdooConnect\Config\Config;
// Connection
$connection = new OdooConnection(
baseUrl: 'https://your-odoo-relay.com',
apiKey: 'your-api-key',
db: 'your-database'
);
// Client with default settings
$client = new OdooClient($connection);
// Client with custom settings
$client = new OdooClient(
connection: $connection,
config: new Config(returnDataTimezone: 'Europe/Berlin', odooTimezone: 'UTC'),
requestsPerSecond: 5, // Rate limiting (default: 3, 0 = disabled)
maxRetries: 3, // Retry on failure with exponential backoff (default: 3)
timeout: 15.0, // HTTP timeout in seconds (default: 10.0)
);
// RequestBuilder + Services
$requestBuilder = new RequestBuilder($client);
$orderService = new OrderService($requestBuilder);
$customerService = new CustomerService($requestBuilder);
$invoiceService = new InvoiceService($requestBuilder);
$purchaseOrderService = new PurchaseOrderService($requestBuilder);
$trackingCodeService = new TrackingCodeService($requestBuilder);
use Bannerstop\OdooConnect\Config\Config;
$config = new Config(
returnDataTimezone: 'Europe/Berlin', // Timezone for returned data (default: PHP default)
odooTimezone: 'UTC' // Timezone Odoo uses (default: UTC)
);
$client = new OdooClient($connection, config: $config);
$order = $orderService->getOrderByOrderId('S3136366');
echo $order->orderId; // "S3136366"
echo $order->state->value; // "sale"
echo $order->amountTotal; // 129.99
echo $order->spark; // "some-value" or null
use Bannerstop\OdooConnect\Enum\Field\OrderField;
$order = $orderService->getOrderByOrderId('S3136366', [
OrderField::ID,
OrderField::ORDER_ID,
OrderField::STATE,
OrderField::AMOUNT_TOTAL,
]);
echo $order['id']; // 12345
echo $order['name']; // "S3136366"
echo $order['state']; // "sale"
echo $order['amount_total']; // 129.99
use Bannerstop\OdooConnect\Enum\Model;
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->where('state', '=', 'sale')
->where('date_order', '>=', '2025-01-01')
->where('date_order', '<=', '2025-12-31')
->get();
// Orders without spark
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->where('spark', '=', false)
->get();
// Orders that have a spark
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->where('spark', '!=', false)
->get();
use Bannerstop\OdooConnect\Enum\State;
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->state(State::SALES_ORDER)
->get();
// First 10 orders sorted by id descending
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->where('state', '=', 'sale')
->limit(10)
->offset(0)
->order('id DESC')
->getRaw();
// Page 2
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->where('state', '=', 'sale')
->limit(10)
->offset(10)
->order('id DESC')
->getRaw();
// Multi-field sorting
$orders = $requestBuilder
->model(Model::SALE_ORDER)
->order('date_order DESC, name ASC')
->getRaw();
$orders = $orderService->getOrdersByDate('2025-01-01', '2025-12-31', limit: 20, order: 'date_order DESC');
$items = $orderService->getOrderItemsByOrderId('S12345', limit: 5, offset: 10);
$invoices = $invoiceService->getInvoicesByShopOrderId('SHOP-123', limit: 10);
$codes = $trackingCodeService->searchTrackingCodes(orderId: 'S12345', limit: 10, order: 'id DESC');
// Fetch single order
$order = $orderService->getOrderByOrderId('S3136366');
$order = $orderService->getOrderByShopOrderId('SHOP-123');
$order = $orderService->getOrderByShopOrderId('SHOP-123', type: State::SALES_ORDER);
// Fetch multiple orders
$orders = $orderService->getOrdersByDate('2025-01-01', '2025-03-01');
$orders = $orderService->getOrdersByDate('2025-01-01', '2025-03-01', type: State::QUOTE);
// Fetch order line items
$items = $orderService->getOrderItemsByOrderId('S3136366');
// Update fields
$orderService->updateOrderFields($odooId, [OrderField::ORIGIN->value => 'web']);
$orderService->updateOrderLastJiraSync($odooId);
$orderService->updateOrderDateProofAcceptance($odooId);
$orderService->updateOrderDateProofAcceptance($odooId, new DateTime('2025-06-15'));
// Spark
$orderService->updateOrderSpark($odooId, 'spark-value');
$orderService->updateOrderSpark($odooId, false); // clear
$orderService->updateOrderItemSpark($lineId, 'spark-value');
// Add tracking code
$trackingId = $orderService->addTrackingCode(
orderId: 'S3136366',
carrier: 'DHL',
trackingCode: 'ABC123456',
);
// Or with known internal ID (skips lookup)
$trackingId = $orderService->addTrackingCode('S3136366', 'DHL', 'ABC123456', id: 12345);
$customer = $customerService->getCustomerById('42');
echo $customer->name;
echo $customer->email;
echo $customer->city;
echo $customer->countryName;
$customerService->updateSpark($odooId, 'spark-value');
$customerService->updateSpark($odooId, false); // clear
// Fetch invoices by shop order reference
$invoices = $invoiceService->getInvoicesByShopOrderId('SHOP-123');
// Fetch single invoice
$invoice = $invoiceService->getInvoiceByInvoiceId('INV/2025/0001');
echo $invoice->amountTotal;
echo $invoice->amountResidual;
$invoiceService->updateSpark($odooId, 'spark-value');
use Bannerstop\OdooConnect\Enum\PurchaseState;
$pos = $purchaseOrderService->getPurchaseOrdersByName('PO-123');
$pos = $purchaseOrderService->getPurchaseOrdersByDate(
'2025-01-01', '2025-06-01',
state: PurchaseState::PURCHASE,
limit: 50,
);
// Search by order ID, code, or both
$codes = $trackingCodeService->searchTrackingCodes(orderId: 'S3136366');
$codes = $trackingCodeService->searchTrackingCodes(code: 'ABC123456');
$codes = $trackingCodeService->searchTrackingCodes(orderId: 'S3136366', code: 'ABC123456');
$trackingCodeService->updateSpark($odooId, 'spark-value');
$trackingId = $orderService->addTrackingCode('S3136366', 'DHL', 'ABC123456');
$newId = $requestBuilder
->model(Model::BS_TRACKING_CODE)
->create([
'name' => 'TC-001',
'carrier' => 'UPS',
'code' => 'UPS123456',
'sale_order_id' => 12345,
]);
$orderService->updateOrderFields($odooId, [
OrderField::ORIGIN->value => 'website',
]);
$orderService->updateOrderSpark($odooId, 'new-spark');
$customerService->updateSpark($odooId, 'new-spark');
$invoiceService->updateSpark($odooId, 'new-spark');
$trackingCodeService->updateSpark($odooId, 'new-spark');
// Pass false to clear spark
$orderService->updateOrderSpark($odooId, false);
$requestBuilder
->model(Model::SALE_ORDER)
->recordId($odooId)
->updateFields([
'origin' => 'website',
'spark' => 'new-value',
])
->update();
use Bannerstop\OdooConnect\Exception\OdooClientException;
use Bannerstop\OdooConnect\Exception\OdooApiException;
use Bannerstop\OdooConnect\Exception\OdooRecordNotFoundException;
try {
$order = $orderService->getOrderByOrderId('S9999999');
} catch (OdooRecordNotFoundException $e) {
// Record not found in Odoo
echo $e->getMessage();
} catch (OdooApiException $e) {
// Odoo API returned an error
echo $e->getMessage();
echo $e->getOdooMessage(); // Original Odoo error message
} catch (OdooClientException $e) {
// HTTP/network error (timeout, connection refused, max retries exceeded)
echo $e->getMessage();
}