Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 228 #229

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1269,6 +1269,96 @@
},
"response": []
},
{
"name": "api/v1/models/{table name}/{id} - Location Converter",
"request": {
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
},
{
"key": "Accept",
"type": "text",
"value": "application/json"
},
{
"key": "Authorization",
"type": "text",
"value": "Bearer {{authToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"Name\": \"Monroe\",\n \"C_Location_ID\": {\n \"id\": 125, // if id = 0 a new C_Location is created an linked to the record\n \"address1\": \"address 1\",\n \"address2\": \"address 2\",\n \"address3\": \"address 3\",\n \"address4\": \"address 4\",\n \"address5\": \"address 5\",\n \"postal\": \"postal\",\n \"postal_add\": \"add\",\n \"c_country_id\": 100,\n \"c_region_id\": 102,\n \"regionname\": \"RN\",\n \"c_city_id\": 0,\n \"city\": \"Near Village\",\n \"comments\": \"comments\",\n \"isactive\": true\n }\n}"
},
"url": {
"raw": "{{protocol}}://{{host}}:{{port}}/api/v1/models/c_bpartner_location/117",
"protocol": "{{protocol}}",
"host": [
"{{host}}"
],
"port": "{{port}}",
"path": [
"api",
"v1",
"models",
"c_bpartner_location",
"117"
]
},
"description": "Update record by id and using the Location converter to update/create location using the same request"
},
"response": []
},
{
"name": "api/v1/models/{table name}/{id} - Image Converter",
"request": {
"method": "PUT",
"header": [
{
"key": "Content-Type",
"name": "Content-Type",
"type": "text",
"value": "application/json"
},
{
"key": "Accept",
"type": "text",
"value": "application/json"
},
{
"key": "Authorization",
"type": "text",
"value": "Bearer {{authToken}}"
}
],
"body": {
"mode": "raw",
"raw": "{\n \"AD_Image_ID\":{\n \"id\":5000074, //optional, if not informed a new ad_image is created an linked to the record\n \"file_name\":\"idempiereLogo.jpg\",\n \"url\":\"org/idempiere/idempiereLogo.jpg\",\n \"data\":\"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\"\n }\n}"
},
"url": {
"raw": "{{protocol}}://{{host}}:{{port}}/api/v1/models/ad_user/100",
"protocol": "{{protocol}}",
"host": [
"{{host}}"
],
"port": "{{port}}",
"path": [
"api",
"v1",
"models",
"ad_user",
"100"
]
},
"description": "Update record by id and using the Image converter to update/create location using the same request"
},
"response": []
},
{
"name": "api/v1/models/{table name}/{id}",
"request": {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ public PO fromJson(JsonObject json, PO po) {
* @param newValue
* @return true if it has been modified
*/
private boolean isValueUpdated(Object oldValue, Object newValue) {
public static boolean isValueUpdated(Object oldValue, Object newValue) {
if (oldValue == null && newValue == null)
return false; // both values are null, nothing to update
if ( oldValue != null
Expand All @@ -235,7 +235,7 @@ private boolean isValueUpdated(Object oldValue, Object newValue) {
* @param prevValue
* @return true if it can be updated, throws AdempiereException depending on the SysConfig keys REST_ERROR_ON_NON_UPDATABLE_COLUMN and REST_ALLOW_UPDATE_SECURE_COLUMN
*/
private boolean isUpdatable(MColumn column, boolean validateUpdateable, PO po) {
public static boolean isUpdatable(MColumn column, boolean validateUpdateable, PO po) {
boolean errorOnNonUpdatable = MSysConfig.getBooleanValue("REST_ERROR_ON_NON_UPDATABLE_COLUMN", true);

if (validateUpdateable && !column.isUpdateable()) {
Expand Down Expand Up @@ -292,7 +292,7 @@ private boolean isUpdatable(MColumn column, boolean validateUpdateable, PO po) {
return true;
}

final List<String> ALLOWED_EXTRA_COLUMNS = new ArrayList<>(
final static List<String> ALLOWED_EXTRA_COLUMNS = new ArrayList<>(
List.of(
"doc-action",
"id",
Expand All @@ -307,7 +307,7 @@ private boolean isUpdatable(MColumn column, boolean validateUpdateable, PO po) {
* @param json
* @param po
*/
private void validateJsonFields(JsonObject json, PO po) {
public static void validateJsonFields(JsonObject json, PO po) {
boolean errorOnNonExisting = MSysConfig.getBooleanValue("REST_ERROR_ON_NON_EXISTING_COLUMN", true);
Set<String> jsonFields = json.keySet();
if (errorOnNonExisting) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,232 @@
/**********************************************************************
* This file is part of iDempiere ERP Open Source *
* http://www.idempiere.org *
* *
* Copyright (C) Contributors *
* *
* This program is free software; you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation; either version 2 *
* of the License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the Free Software *
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, *
* MA 02110-1301, USA. *
* *
* Contributors: *
* - Trek Global Corporation *
* - Heng Sin Low *
**********************************************************************/
package com.trekglobal.idempiere.rest.api.json;

import java.util.Set;

import org.compiere.model.GridField;
import org.compiere.model.Lookup;
import org.compiere.model.MColumn;
import org.compiere.model.MLocation;
import org.compiere.model.MLocationLookup;
import org.compiere.model.MLookupFactory;
import org.compiere.model.MProcessPara;
import org.compiere.model.MTable;
import org.compiere.model.MValRule;
import org.compiere.model.POInfo;
import org.compiere.util.DisplayType;
import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.compiere.util.Util;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;

/**
* json type converter for C_Location
* @author muriloht (devCoffee, muriloht@devcoffee.com.br)
*
*/
public class LocationTypeConverter implements ITypeConverter<Object> {

/**
* default constructor
*/
public LocationTypeConverter() {

}

@Override
public Object toJsonValue(MColumn column, Object value) {
String label = Msg.getElement(Env.getCtx(), column.getColumnName());
Lookup lookup = new MLocationLookup(Env.getCtx(), 0);
return toJsonValue(column.getAD_Reference_ID(), label, lookup, column.getReferenceTableName(), value);
}

@Override
public Object toJsonValue(GridField field, Object value) {
return toJsonValue(field.getDisplayType(), field.getHeader(), field.getLookup(), getReferenceTableNameFromField(field), value);
}

private String getReferenceTableNameFromField(GridField field) {
String refTableName = null;
if (field.getVO().isProcess) {
MProcessPara pp = field.getAD_Column_ID() > 0 ? MProcessPara.get(field.getAD_Column_ID()) : null;
if (pp != null)
refTableName = pp.getReferenceTableName();
} else {
MColumn column = field.getAD_Column_ID() > 0 ? MColumn.get(Env.getCtx(), field.getAD_Column_ID()) : null;
if (column != null)
refTableName = column.getReferenceTableName();
}
return refTableName;
}

private Object toJsonValue(int displayType, String label, Lookup lookup, String refTableName, Object value) {
if (lookup != null) {
MLocation loc = MLocation.get((Integer)value);
JsonObject ref = new JsonObject();
ref.addProperty("propertyLabel", label);
if (value instanceof Number)
ref.addProperty("id", ((Number)value).intValue());
else
ref.addProperty("id", value.toString());
String display = lookup.getDisplay(value);
if (!Util.isEmpty(display, true)) {
ref.addProperty("identifier", display);
}
if (!Util.isEmpty(refTableName))
ref.addProperty("model-name", refTableName.toLowerCase());

MColumn[] columns = MTable.get(MLocation.Table_ID).getColumns(false);
String columnName = null;
Object columnValue = null;

for(MColumn column : columns) {
if(column.isKey())continue;

columnName = column.getColumnName();

if (columnName.endsWith("_ID")) {
if((columnValue = loc.get_Value(columnName))!=null) {
JsonObject refChild = new JsonObject();
refChild.addProperty("propertyLabel",Msg.getElement(Env.getCtx(), columnName));
if (value instanceof Number)
refChild.addProperty("id", (Integer)columnValue);
else
refChild.addProperty("id", value.toString());
String displayValue = getColumnLookup(column).getDisplay(columnValue);
if(displayValue!=null)
refChild.addProperty("identifier",displayValue);
refChild.addProperty("model-name", MTable.get(Env.getCtx(), columnName.replace("_ID", "")).getTableName().toLowerCase());
ref.add(columnName, refChild);
}
} else {
if((columnValue = loc.get_Value(columnName))!=null) {
ref.addProperty(columnName, columnValue.toString());
}
}
}
return ref;
} else {
return null;
}
}

@Override
public Object fromJsonValue(GridField field, JsonElement value) {
return fromJson(value);
}

@Override
public Object fromJsonValue(MColumn column, JsonElement value) {
return fromJson(value);
}

public Object fromJson(JsonElement element) {
if (element != null && element.isJsonObject()) {

JsonObject json = element.getAsJsonObject();
JsonElement idField = json.get("id");
int C_Location_ID = 0;
if (idField != null) {
JsonPrimitive primitive = (JsonPrimitive) idField;
if (primitive.isNumber())
C_Location_ID = primitive.getAsInt();
else
C_Location_ID = 0;
}

MLocation po = new MLocation(Env.getCtx(), C_Location_ID, null);

MTable table = MTable.get(Env.getCtx(), MLocation.Table_ID);
POInfo poInfo = POInfo.getPOInfo(Env.getCtx(), table.getAD_Table_ID());
DefaultPOSerializer.validateJsonFields(json, po);
Set<String> jsonFields = json.keySet();
for(int i = 0; i < poInfo.getColumnCount(); i++) {
String columnName = poInfo.getColumnName(i);
String propertyName = TypeConverterUtils.toPropertyName(columnName);
if (!jsonFields.contains(propertyName) && !jsonFields.contains(columnName))
continue;
JsonElement field = json.get(propertyName);
if (field == null)
field = json.get(columnName);
if (field == null)
continue;
MColumn column = table.getColumn(columnName);
Object value = TypeConverterUtils.fromJsonValue(column, field);
if (! DefaultPOSerializer.isValueUpdated(po.get_ValueOfColumn(column.getAD_Column_ID()), value))
continue;
if (! DefaultPOSerializer.isUpdatable(column, false, po))
continue;
if ( value != null
&& value instanceof Integer) {
if (((Integer)value).intValue() < 0 && DisplayType.isID(column.getAD_Reference_ID())) {
element = null;
} else if (((Integer)value).intValue() == 0 && DisplayType.isLookup(column.getAD_Reference_ID())) {
if (! MTable.isZeroIDTable(column.getReferenceTableName()))
element = null;
}
}
po.set_ValueOfColumn(column.getAD_Column_ID(), value);
}
po.saveEx();
return po.get_ID();
}

if (element instanceof JsonPrimitive)
{
JsonPrimitive primitive = (JsonPrimitive) element;

if (primitive.isNumber())
return primitive.getAsInt();
}

return null;
}

private Lookup getColumnLookup(MColumn column) {
int WindowNo = 0;
Lookup lookup = null;
try {
String validationCode = null;
if (column.getAD_Val_Rule_ID() > 0) {
MValRule rule = MValRule.get(Env.getCtx(), column.getAD_Val_Rule_ID());
validationCode = rule.getCode();
}

lookup = MLookupFactory.get(Env.getCtx(), WindowNo, column.getAD_Column_ID(), column.getAD_Reference_ID(),
Env.getLanguage(Env.getCtx()), column.getColumnName(), column.getAD_Reference_Value_ID(),
column.isParent(), validationCode);

} catch (Exception e) {
lookup = null;
}
return lookup;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -186,8 +186,9 @@ private static ITypeConverter getTypeConverter(int displayType, Object value) {
typeConverter = new DateTypeConverter();
} else if (DisplayType.YesNo == displayType) {
typeConverter = new YesNoTypeConverter();
} else if (displayType == Location
|| displayType == Locator
}else if(displayType==Location){
return new LocationTypeConverter();
} else if (displayType == Locator
|| displayType == Account
|| displayType == PAttribute
|| displayType == Payment
Expand Down Expand Up @@ -215,8 +216,9 @@ private static ITypeConverter getTypeConverter(int displayType, JsonElement valu
typeConverter = new DateTypeConverter();
} else if (DisplayType.YesNo == displayType && (isBoolean(value) || isString(value))) {
typeConverter = new YesNoTypeConverter();
} else if (displayType == Location
|| displayType == Locator
}else if(displayType==Location){
return new LocationTypeConverter();
}else if (displayType == Locator
|| displayType == Account
|| displayType == PAttribute
|| displayType == Payment
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,7 @@ public Response tokenRefresh(RefreshParameters refresh) {
JsonObject responseNode = new JsonObject();
Builder builder = JWT.create().withSubject(userName);
builder.withClaim(LoginClaims.AD_Client_ID.name(), clientId);
Env.setContext(Env.getCtx(), Env.AD_CLIENT_ID, clientId);
builder.withClaim(LoginClaims.AD_User_ID.name(), userId);
builder.withClaim(LoginClaims.AD_Role_ID.name(), roleId);
builder.withClaim(LoginClaims.AD_Org_ID.name(), orgId);
Expand Down
Loading