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..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,8 +21,10 @@ 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; import com.odoo.core.orm.fields.utils.DomainFilterParser; import com.odoo.core.utils.OObjectUtils; @@ -110,6 +112,56 @@ 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 { + 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)); + 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()) {