From 4e76e2da1fb5ad019bc83e219bcd49e2a83a8664 Mon Sep 17 00:00:00 2001 From: Antoine Huret Date: Thu, 13 Apr 2023 14:13:19 +0200 Subject: [PATCH] correct bug in create multiple instances in one call --- odoo.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/odoo.go b/odoo.go index 89767826..8dba2725 100644 --- a/odoo.go +++ b/odoo.go @@ -224,21 +224,31 @@ func getValuesFromInterface(v interface{}) map[string]interface{} { // Create new model instances. // https://www.odoo.com/documentation/13.0/webservices/odoo.html#create-records func (c *Client) Create(model string, values []interface{}) ([]int64, error) { + var args []interface{} if len(values) == 0 { return nil, nil + } else if len(values) == 1 { + args = []interface{}{getValuesFromInterface(values[0])} + } else { + vv := make([]interface{}, len(values)) + for i := 0; i < len(values); i++ { + vv[i] = getValuesFromInterface(values[i]) + } + args = []interface{}{vv} } - var vv []interface{} - for _, v := range values { - vv = append(vv, getValuesFromInterface(v)) - } - resp, err := c.ExecuteKw("create", model, vv, nil) + resp, err := c.ExecuteKw("create", model, args, nil) if err != nil { return nil, err } if len(values) == 1 { return []int64{resp.(int64)}, nil } - return resp.([]int64), nil + r := resp.([]interface{}) + ids := make([]int64, len(r)) + for i := 0; i < len(ids); i++ { + ids[i] = r[i].(int64) + } + return ids, nil } // Update existing model row(s).