From 978f3328ae61b566793ff325bf2822eddfc6d3f9 Mon Sep 17 00:00:00 2001 From: Patrick Hobusch Date: Fri, 30 Jun 2017 15:22:29 +0200 Subject: [PATCH 1/2] [IMP] Allow creating a ODataRow from OValues with relations based on a OModel Sometimes, for example when reading OValues from a OForm, it is necessary to convert them into a ODataRow with relation information in order to get these related ODataRows. This can now be achieved by providing the base OModel to the 'toDataRow' method, that takes care of the relation type of the associated OColumns and instantiates OX2XRecords based on the IDs if a relation is given. --- .../main/java/com/odoo/core/orm/OValues.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/app/src/main/java/com/odoo/core/orm/OValues.java b/app/src/main/java/com/odoo/core/orm/OValues.java index 3909935b0..05dde8882 100644 --- a/app/src/main/java/com/odoo/core/orm/OValues.java +++ b/app/src/main/java/com/odoo/core/orm/OValues.java @@ -23,6 +23,7 @@ import android.os.Bundle; import com.odoo.core.orm.fields.OColumn; +import com.odoo.core.orm.fields.OColumn.RelationType; import com.odoo.core.orm.fields.utils.DomainFilterParser; import com.odoo.core.utils.OObjectUtils; @@ -110,6 +111,41 @@ public ODataRow toDataRow() { return row; } + public ODataRow toDataRow(OModel base) { + if (base == null) { + return toDataRow(); + } + + ODataRow row = new ODataRow(); + + for (OColumn column : base.getColumns()) { + String columnName = column.getName(); + RelationType relationType = column.getRelationType(); + Object value = _values.get(columnName); + + if (value == null) { + row.put(columnName, column.getDefaultValue()); + } else if (relationType == null) { + row.put(columnName, value); + } else if (value instanceof Integer) { + Integer recordId = (Integer) value; + switch (relationType) { + case ManyToOne: + row.put(columnName, new OM2ORecord(base, column, recordId)); + break; + case OneToMany: + row.put(columnName, new OO2MRecord(base, column, recordId)); + break; + case ManyToMany: + row.put(columnName, new OM2MRecord(base, column, recordId)); + break; + } + } + } + + return row; + } + public ContentValues toContentValues() { ContentValues values = new ContentValues(); for (String key : _values.keySet()) { From c30bbf748db0063ba9f6e716ff9e80cba0a81dff Mon Sep 17 00:00:00 2001 From: Patrick Hobusch Date: Fri, 7 Jul 2017 16:12:59 +0200 Subject: [PATCH 2/2] [FIX] Fix parsing error when a reference ID in OValues is given as a string --- .../main/java/com/odoo/core/orm/OValues.java | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/odoo/core/orm/OValues.java b/app/src/main/java/com/odoo/core/orm/OValues.java index 05dde8882..7ab5fd7ba 100644 --- a/app/src/main/java/com/odoo/core/orm/OValues.java +++ b/app/src/main/java/com/odoo/core/orm/OValues.java @@ -21,6 +21,7 @@ import android.content.ContentValues; import android.os.Bundle; +import android.util.Log; import com.odoo.core.orm.fields.OColumn; import com.odoo.core.orm.fields.OColumn.RelationType; @@ -127,8 +128,23 @@ public ODataRow toDataRow(OModel base) { row.put(columnName, column.getDefaultValue()); } else if (relationType == null) { row.put(columnName, value); - } else if (value instanceof Integer) { - Integer recordId = (Integer) value; + } else { + Integer recordId = null; + + if (value instanceof Integer) { + recordId = (Integer) value; + } else if (value instanceof String) { + try { + recordId = Integer.parseInt(value.toString()); + } catch (NumberFormatException e) { + Log.d(TAG, "Could not parse integer from value " + value.toString()); + } + } + + if (recordId == null) { + continue; + } + switch (relationType) { case ManyToOne: row.put(columnName, new OM2ORecord(base, column, recordId));