Overslaan naar inhoud
Menu
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Deze vraag is gerapporteerd

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 ! 


Avatar
Annuleer
Gerelateerde posts Antwoorden Weergaven Activiteit
0
jul. 24
1509
1
nov. 22
3804
1
feb. 24
1153
0
dec. 23
925
2
aug. 24
8137