Skip to content

Commit 876024f

Browse files
Frank Gevaertsfpoyer
authored andcommitted
Add support for writing DATE and DATETIME fields in UTC
Content of this commit is a merge between Franck Gevaerts' work proposed in PR #17 and some refactoring/cleanup of that same method.
1 parent f1b355b commit 876024f

1 file changed

Lines changed: 52 additions & 15 deletions

File tree

src/main/java/com/debortoliwines/odoo/api/ObjectAdapter.java

Lines changed: 52 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import java.util.Date;
2525
import java.util.HashMap;
2626
import java.util.Map;
27+
import java.util.TimeZone;
2728

2829
import org.apache.xmlrpc.XmlRpcException;
2930

@@ -731,36 +732,72 @@ public RowCollection searchAndReadObject(final FilterCollection filter, final St
731732
}
732733

733734
private Object formatValueForWrite(Field fld, Object value) {
734-
if (value == null)
735-
return false;
735+
Object result;
736+
if (value == null) {
737+
result = false;
738+
} else {
739+
result = formatValueBasedOnFieldTypeForWrite(fld, value);
740+
}
741+
return result;
742+
743+
}
736744

745+
private Object formatValueBasedOnFieldTypeForWrite(Field fld, Object value) {
746+
Object result;
737747
switch (fld.getType()) {
738748
case BOOLEAN:
739-
// value = value;
749+
result = value;
740750
break;
741751
case FLOAT:
742-
value = Double.parseDouble(value.toString());
743-
break;
744-
case MANY2ONE:
745-
value = Double.valueOf(value.toString()).intValue();
752+
result = Double.valueOf(value.toString());
746753
break;
747754
case MANY2MANY:
748-
// For write, otherwise it is a comma separated list of strings used
749-
// by import
750-
if (value instanceof Object[])
751-
value = new Object[][] { new Object[] { 6, 0, (Object[]) value } };
755+
result = formatManyToManyForWrite(value);
752756
break;
757+
case MANY2ONE:
753758
case ONE2MANY:
754759
case INTEGER:
755-
// To make sure 1.0 is converted to 1
756-
value = Double.valueOf(value.toString()).intValue();
760+
result = formatIntegerForWrite(value);
761+
break;
762+
case DATE:
763+
result = formatDateForWrite(value);
764+
break;
765+
case DATETIME:
766+
result = formatDateTimeForWrite(value);
757767
break;
758768
default:
759-
value = value.toString();
769+
result = value.toString();
760770
break;
761771
}
772+
return result;
773+
}
762774

763-
return value;
775+
private Object formatManyToManyForWrite(Object value) {
776+
// For write, otherwise it is a comma separated list of strings used
777+
// by import
778+
if (value instanceof Object[]) {
779+
Object[] tmp = new Object[] { 6, 0, (Object[]) value };
780+
return new Object[][] { tmp };
781+
} else {
782+
return value;
783+
}
784+
}
785+
786+
private Object formatIntegerForWrite(Object value) {
787+
// To make sure 1.0 is converted to 1
788+
return Double.valueOf(value.toString()).intValue();
789+
}
790+
791+
private Object formatDateTimeForWrite(Object value) {
792+
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
793+
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
794+
return sdf.format(value);
795+
}
796+
797+
private Object formatDateForWrite(Object value) {
798+
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
799+
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
800+
return sdf.format(value);
764801
}
765802

766803
/**

0 commit comments

Comments
 (0)