How toinsert purchase order from PHPXMLRPC if my odoo instance is MultiCompany, I always have this error :
Traceback (most recent call last):\n File "/home/odoo/src/odoo/16.0/odoo/addons/base/controllers/rpc.py", line 150, in xmlrpc_2\n response = self._xmlrpc(service)\n File "/home/odoo/src/custom/trial/saas_trial/controllers/main.py", line 302, in _xmlrpc\n res = super(OdooRPC, self)._xmlrpc(service)\n File "/home/odoo/src/odoo/16.0/odoo/addons/base/controllers/rpc.py", line 130, in _xmlrpc\n result = dispatch_rpc(service, method, params)\n File "/home/odoo/src/odoo/16.0/odoo/http.py", line 366, in dispatch_rpc\n return dispatch(method, params)\n File "/home/odoo/src/odoo/16.0/odoo/service/model.py", line 37, in dispatch\n res = execute_kw(db, uid, *params[3:])\n File "/home/odoo/src/odoo/16.0/odoo/service/model.py", line 59, in execute_kw\n return execute(db, uid, obj, method, *args, **kw or {})\n File "/home/odoo/src/odoo/16.0/odoo/service/model.py", line 65, in execute\n res = execute_cr(cr, uid, obj, method, *args, **kw)\n File "/home/odoo/src/odoo/16.0/odoo/service/model.py", line 50, in execute_cr\n result = retrying(partial(odoo.api.call_kw, recs, method, args, kw), env)\n File "/home/odoo/src/odoo/16.0/odoo/service/model.py", line 133, in retrying\n result = func()\n File "/home/odoo/src/odoo/16.0/odoo/api.py", line 464, in call_kw\n result = _call_kw_model_create(method, model, args, kwargs)\n File "/home/odoo/src/odoo/16.0/odoo/api.py", line 444, in _call_kw_model_create\n result = method(recs, *args, **kwargs)\n File "", line 2, in create\n File "/home/odoo/src/odoo/16.0/odoo/api.py", line 415, in _model_create_multi\n return create(self, arg)\n File "/home/odoo/src/odoo/16.0/addons/purchase/models/purchase.py", line 238, in create\n company_id = vals.get('company_id', self.default_get(['company_id'])['company_id'])\n AttributeError: 'list' object has no attribute 'get'\n
Here is my code using :
"phpxmlrpc/phpxmlrpc": "^4.10"
public function createPurchaseOrderDraft($partner_id, array $orderLines, $company_id)
{
$response = $this->getResponse();
$uid = $response->value()->scalarval();
$models = new \PhpXmlRpc\Client($this->odooUrl . '/xmlrpc/2/object');
$message = new Request('execute_kw');
// Ajout des paramètres par défaut
$this->addDefaultParam($message, $uid, "purchase.order", "create");
$data = [
new Value(
[
new Value("company_id", "string"),
new Value("=", "string"),
new Value($company_id, "int"),
], "array"
),
new Value(
[
new Value("partner_id", "string"),
new Value("=", "string"),
new Value($partner_id, "int"),
], "array"
),
new Value(
[
new Value(
[
new Value("state", "string"),
new Value("=", "string"),
new Value("draft", "string"),
], "array"
),
], "array"
),
new Value(
[
new Value(
[
new Value("name", "string"),
new Value("=", "string"),
new Value("Commande d'achat", "string"),
], "array"
),
], "array"
),
];
$date = (new \DateTime())->format('Y-m-d H:i:s');
$orderLinesData = [];
foreach ($orderLines as $orderLine) {
$oneLine = new Value([
new Value(0, "int"),
new Value(false, "boolean"),
new Value([
new Value([
new Value("name", "string"),
new Value("=", "string"),
new Value($orderLine['name'], "int"),
], "array"),
//date_planned
new Value([
new Value("date_planned", "string"),
new Value("=", "string"),
new Value($date, "string"),
], "array"),
new Value([
new Value("product_id", "string"),
new Value("=", "string"),
new Value($orderLine['product_id'], "int"),
], "array"),
new Value([
new Value("product_qty", "string"),
new Value("=", "string"),
new Value($orderLine['product_qty'], "int"),
], "array"),
new Value([
new Value("price_unit", "string"),
new Value("=", "string"),
new Value(0, "int"),
], "array"),
], "array"),
], "array");
$orderLinesData[] = $oneLine;
}
$data[] = new Value($orderLinesData, "array");
// Construction des données de commande
$args = [
new Value(
$data
, "array"
),
];
$message->addParam(new Value($args, 'array'));
$response = $models->send($message);
Regards !