Skip to content

Commit 4e76e2d

Browse files
author
Antoine Huret
committed
correct bug in create multiple instances in one call
1 parent f26c354 commit 4e76e2d

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

odoo.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -224,21 +224,31 @@ func getValuesFromInterface(v interface{}) map[string]interface{} {
224224
// Create new model instances.
225225
// https://www.odoo.com/documentation/13.0/webservices/odoo.html#create-records
226226
func (c *Client) Create(model string, values []interface{}) ([]int64, error) {
227+
var args []interface{}
227228
if len(values) == 0 {
228229
return nil, nil
230+
} else if len(values) == 1 {
231+
args = []interface{}{getValuesFromInterface(values[0])}
232+
} else {
233+
vv := make([]interface{}, len(values))
234+
for i := 0; i < len(values); i++ {
235+
vv[i] = getValuesFromInterface(values[i])
236+
}
237+
args = []interface{}{vv}
229238
}
230-
var vv []interface{}
231-
for _, v := range values {
232-
vv = append(vv, getValuesFromInterface(v))
233-
}
234-
resp, err := c.ExecuteKw("create", model, vv, nil)
239+
resp, err := c.ExecuteKw("create", model, args, nil)
235240
if err != nil {
236241
return nil, err
237242
}
238243
if len(values) == 1 {
239244
return []int64{resp.(int64)}, nil
240245
}
241-
return resp.([]int64), nil
246+
r := resp.([]interface{})
247+
ids := make([]int64, len(r))
248+
for i := 0; i < len(ids); i++ {
249+
ids[i] = r[i].(int64)
250+
}
251+
return ids, nil
242252
}
243253

244254
// Update existing model row(s).

0 commit comments

Comments
 (0)