details: /erp/devel/pi/rev/01618445546d
changeset: 11152:01618445546d
user: Antonio Moreno <antonio.moreno <at> openbravo.com>
date: Wed Mar 09 17:02:32 2011 +0100
summary: Remove wrong comment
details: /erp/devel/pi/rev/359778f925d1
changeset: 11153:359778f925d1
user: Antonio Moreno <antonio.moreno <at> openbravo.com>
date: Wed Mar 09 18:52:41 2011 +0100
summary: Fixed issue 16178. Three things related to CSV have been fixed:
- Dates will be formatted according to the user-defined format
- Column names will be the correct translated field names
- Columns with list reference will be exported using the translated identifier
for the list item.
diffstat:
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
| 1 +
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
| 5 +-
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
| 2 -
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceServlet.java
| 112 ++++++++-
4 files changed, 102 insertions(+), 18 deletions(-)
diffs (231 lines):
diff -r bbf253597190 -r 359778f925d1
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
Wed Mar 09 18:19:24 2011 +0100
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-grid.js
Wed Mar 09 18:52:41 2011 +0100
@@ -356,6 +356,7 @@
_noCount: true, // never do count for export
exportAs: expProp.exportAs || 'csv',
viewState: expProp.viewState,
+ tabId: expProp.tabId,
exportToFile: true,
_textMatchStyle: 'substring'
}, this.getCriteria());
diff -r bbf253597190 -r 359778f925d1
modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
---
a/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
Wed Mar 09 18:19:24 2011 +0100
+++
b/modules/org.openbravo.client.application/web/org.openbravo.client.application/js/ob-toolbar.js
Wed Mar 09 18:52:41 2011 +0100
@@ -209,9 +209,10 @@
exportDisplay: 'download',
params: {
exportToFile: true
- }
+ },
+ viewState: this.view.viewGrid.getViewState(),
+ tab: this.view.tabId
};
- requestProperties.viewState = this.view.viewGrid.getViewState();
this.view.viewGrid.exportData(requestProperties);
},
disabled: false,
diff -r bbf253597190 -r 359778f925d1
modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
---
a/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
Wed Mar 09 18:19:24 2011 +0100
+++
b/modules/org.openbravo.client.kernel/src/org/openbravo/client/kernel/reference/UIDefinition.java
Wed Mar 09 18:52:41 2011 +0100
@@ -447,8 +447,6 @@
return new FieldProviderFactory(noinpDataMap);
}
- // Old method which parses SQL such as the one in Default values of columns,
or auxiliary inputs
- // TODO: This method probably shouldn't be here, need to find a better place
to put it
public static String parseSQL(String code, ArrayList<String> colNames) {
if (code == null || code.trim().equals(""))
return "";
diff -r bbf253597190 -r 359778f925d1
modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceServlet.java
---
a/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceServlet.java
Wed Mar 09 18:19:24 2011 +0100
+++
b/modules/org.openbravo.service.datasource/src/org/openbravo/service/datasource/DataSourceServlet.java
Wed Mar 09 18:52:41 2011 +0100
@@ -42,8 +42,12 @@
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
+import org.hibernate.Query;
import org.openbravo.base.exception.OBException;
import org.openbravo.base.exception.OBSecurityException;
+import org.openbravo.base.model.Entity;
+import org.openbravo.base.model.Property;
+import org.openbravo.base.model.domaintype.EnumerateDomainType;
import org.openbravo.base.secureApp.VariablesSecureApp;
import org.openbravo.base.session.OBPropertiesProvider;
import org.openbravo.client.kernel.BaseKernelServlet;
@@ -57,6 +61,10 @@
import org.openbravo.erpCommon.businessUtility.Preferences;
import org.openbravo.erpCommon.security.UsageAudit;
import org.openbravo.erpCommon.utility.PropertyException;
+import org.openbravo.model.ad.datamodel.Column;
+import org.openbravo.model.ad.ui.Field;
+import org.openbravo.model.ad.ui.FieldTrl;
+import org.openbravo.model.ad.ui.Tab;
import org.openbravo.service.json.DefaultJsonDataService;
import org.openbravo.service.json.JsonConstants;
import org.openbravo.service.json.JsonUtils;
@@ -173,7 +181,6 @@
}
}
// now do the action
-
boolean isExport = "true".equals(parameters.get("exportToFile"));
if (isExport) {
String exportAs = parameters.get("exportAs");
@@ -184,13 +191,15 @@
response.setContentType("text/csv; charset=UTF-8");
response.setHeader("Content-Disposition", "attachment;
filename=ExportedData.csv");
if (getDataSource(request) instanceof DefaultDataSourceService) {
- QueryJSONWriterToCSV writer = new QueryJSONWriterToCSV(request,
response, parameters);
+ QueryJSONWriterToCSV writer = new QueryJSONWriterToCSV(request,
response, parameters,
+ getDataSource(request).getEntity());
((DefaultDataSourceService)
getDataSource(request)).fetch(parameters, writer);
} else {
String result = getDataSource(request).fetch(parameters);
JSONObject jsonResult = new JSONObject(result);
JSONArray data =
jsonResult.getJSONObject("response").getJSONArray("data");
- QueryJSONWriterToCSV writer = new QueryJSONWriterToCSV(request,
response, parameters);
+ QueryJSONWriterToCSV writer = new QueryJSONWriterToCSV(request,
response, parameters,
+ getDataSource(request).getEntity());
for (int i = 0; i < data.length(); i++) {
writer.write(data.getJSONObject(i));
}
@@ -213,13 +222,19 @@
String fieldSeparator;
String decimalSeparator;
List<String> fieldProperties;
+ Map<String, String> niceFieldProperties = new HashMap<String, String>();
boolean propertiesWritten = false;
+ Map<String, Map<String, String>> refLists = new HashMap<String,
Map<String, String>>();
+ List<String> refListCols = new ArrayList<String>();
+ List<String> dateCols = new ArrayList<String>();
+ List<String> dateTimeCols = new ArrayList<String>();
public QueryJSONWriterToCSV(HttpServletRequest request,
HttpServletResponse response,
- Map<String, String> parameters) {
- response.setContentType("text/csv; charset=UTF-8");
- response.setHeader("Content-Disposition", "attachment;
filename=ExportedData.csv");
+ Map<String, String> parameters, Entity entity) {
try {
+ OBContext.setAdminMode();
+ response.setContentType("text/csv; charset=UTF-8");
+ response.setHeader("Content-Disposition", "attachment;
filename=ExportedData.csv");
writer = response.getWriter();
VariablesSecureApp vars = new VariablesSecureApp(request);
decimalSeparator =
vars.getSessionValue("#DecimalSeparator|generalQtyEdition").substring(0,
@@ -255,18 +270,80 @@
}
}
+ // Now we calculate ref lists and nice property names
+ final String userLanguageId =
OBContext.getOBContext().getLanguage().getId();
+ for (Property prop : entity.getProperties()) {
+ if (!fieldProperties.contains(prop.getName())) {
+ continue;
+ }
+ Column col = OBDal.getInstance().get(Column.class,
prop.getColumnId());
+ if (parameters.get("tab") != null &&
!parameters.get("tab").equals("")) {
+ Tab tab = OBDal.getInstance().get(Tab.class,
parameters.get("tab"));
+ for (Field field : tab.getADFieldList()) {
+ if (!field.getColumn().getId().equals(col.getId())) {
+ continue;
+ }
+ niceFieldProperties.put(prop.getName(), field.getName());
+ for (FieldTrl fieldTrl : field.getADFieldTrlList()) {
+ if (fieldTrl.getLanguage().getId().equals(userLanguageId)) {
+ niceFieldProperties.put(prop.getName(), fieldTrl.getName());
+ }
+ }
+ }
+ } else {
+ niceFieldProperties.put(prop.getName(), col.getName());
+ }
+ if (!(prop.getDomainType() instanceof EnumerateDomainType)) {
+ continue;
+ }
+ String referenceId = col.getReferenceSearchKey().getId();
+ Map<String, String> reflists = new HashMap<String, String>();
+ final String hql = "select al.searchKey, al.name from ADList al
where "
+ + " al.reference.id=? and al.active=true";
+ final Query qry = OBDal.getInstance().getSession().createQuery(hql);
+ qry.setString(0, referenceId);
+ for (Object o : qry.list()) {
+ final Object[] row = (Object[]) o;
+ reflists.put(row[0].toString(), row[1].toString());
+ }
+ final String hqltrl = "select al.searchKey, trl.name from ADList al,
ADListTrl trl where "
+ + " al.reference.id=? and trl.listReference=al and
trl.language.id=?"
+ + " and al.active=true and trl.active=true and
trl.translation=true";
+ final Query qrytrl =
OBDal.getInstance().getSession().createQuery(hqltrl);
+ qrytrl.setString(0, referenceId);
+ qrytrl.setString(1, userLanguageId);
+ for (Object o : qrytrl.list()) {
+ final Object[] row = (Object[]) o;
+ reflists.put(row[0].toString(), row[1].toString());
+ }
+ refListCols.add(prop.getName());
+ refLists.put(prop.getName(), reflists);
+ }
+
+ // We also store the date properties
+ for (Property prop : entity.getProperties()) {
+ if (prop.isDate()) {
+ dateCols.add(prop.getName());
+ } else if (prop.isDatetime()) {
+ dateTimeCols.add(prop.getName());
+ }
+ }
+
if (fieldProperties.size() > 0) {
// If the request came with the view state information, we get the
properties from there
for (int i = 0; i < fieldProperties.size(); i++) {
if (i > 0) {
writer.append(fieldSeparator);
}
- writer.append("\"").append(fieldProperties.get(i)).append("\"");
+
writer.append("\"").append(niceFieldProperties.get(fieldProperties.get(i)))
+ .append("\"");
}
propertiesWritten = true;
}
} catch (Exception e) {
throw new OBException("Error while exporting a CSV file", e);
+ } finally {
+ OBContext.restorePreviousMode();
}
}
@@ -329,19 +406,26 @@
}
Object keyValue = json.has(key + "._identifier") ? json.get(key +
"._identifier") : json
.get(key);
- if (keyValue instanceof Number && keyValue != null) {
+ if (refListCols.contains(key)) {
+ keyValue = refLists.get(key).get(keyValue);
+ } else if (keyValue instanceof Number && keyValue != null) {
keyValue = keyValue.toString().replace(".", decimalSeparator);
- }
- if ((keyValue instanceof Date) && keyValue != null) {
- // TODO This currently will never happen. Dates in JSONObjects are
represented as
- // Strings, and therefore keyValue will never be Date or DateTime.
Once a BaseOBObject
- // is exported instead of a JSONObject, this will be done properly
+ } else if (dateCols.contains(key) && keyValue != null) {
+ Date date =
JsonUtils.createDateFormat().parse(keyValue.toString());
String pattern =
RequestContext.get().getSessionAttribute("#AD_JAVADATEFORMAT")
.toString();
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
dateFormat.setLenient(true);
- keyValue = dateFormat.format((Date) keyValue);
+ keyValue = dateFormat.format(date);
+ } else if (dateTimeCols.contains(key) && keyValue != null) {
+ Date date =
JsonUtils.createDateTimeFormat().parse(keyValue.toString());
+ String pattern =
RequestContext.get().getSessionAttribute("#AD_JAVADATETIMEFORMAT")
+ .toString();
+ SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
+ dateFormat.setLenient(true);
+ keyValue = dateFormat.format(date);
}
+
if (keyValue != null && !keyValue.toString().equals("null")) {
keyValue = Replace.replace(keyValue.toString(), "\"", "\"\"");
} else {
------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
Openbravo-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openbravo-commits