diff --git a/db/ddlutils/oracle/views/AD_FIELD_V.sql b/db/ddlutils/oracle/views/AD_FIELD_V.sql
index 9d7ca395d9..67134ef926 100644
--- a/db/ddlutils/oracle/views/AD_FIELD_V.sql
+++ b/db/ddlutils/oracle/views/AD_FIELD_V.sql
@@ -9,8 +9,11 @@ CREATE OR REPLACE VIEW AD_FIELD_V AS
  COALESCE(f.IsMandatory, c.IsMandatory) AS IsMandatory, 
     c.IsIdentifier, c.IsTranslated, COALESCE(f.AD_Reference_Value_ID, c.AD_Reference_Value_ID) AS AD_Reference_Value_ID, 
  c.Callout, COALESCE(f.AD_Reference_ID, c.AD_Reference_ID) AS AD_Reference_ID, 
-    COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) AS AD_Val_Rule_ID, c.AD_Process_ID, c.IsAlwaysUpdateable,
- c.ReadOnlyLogic, c.MandatoryLogic, c.IsUpdateable, c.IsEncrypted AS IsEncryptedColumn, 
+    COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) AS AD_Val_Rule_ID, c.AD_Process_ID, 
+ COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable,
+ COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic,
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic, 
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, c.IsEncrypted AS IsEncryptedColumn, 
     c.IsSelectionColumn,
  tbl.TableName, c.ValueMin, c.ValueMax,
  fg.NAME AS FieldGroup, vr.Code AS ValidationCode,
@@ -19,13 +22,13 @@ CREATE OR REPLACE VIEW AD_FIELD_V AS
  c.IsAutocomplete, COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
 	f.isdisplayedgrid, 
 	f.seqnogrid,
-	c.seqnoselection, f.xposition, f.columnspan, f.numlines, c.isToolbarButton
+	c.seqnoselection, f.xposition, f.columnspan, f.numlines, 
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
 FROM AD_FIELD f 
   INNER JOIN AD_TAB t ON (f.AD_Tab_ID = t.AD_Tab_ID)
   LEFT OUTER JOIN AD_FIELDGROUP fg ON (f.AD_FieldGroup_ID = fg.AD_FieldGroup_ID) 
   LEFT OUTER JOIN AD_COLUMN c ON (f.AD_Column_ID = c.AD_Column_ID)
  INNER JOIN AD_TABLE tbl ON (c.AD_Table_ID = tbl.AD_Table_ID)
- INNER JOIN AD_REFERENCE r ON (c.AD_Reference_ID = r.AD_Reference_ID)
  LEFT OUTER JOIN AD_VAL_RULE vr ON (vr.AD_Val_Rule_ID = COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID))
 WHERE f.IsActive = 'Y' 
   AND c.IsActive = 'Y';
diff --git a/db/ddlutils/oracle/views/AD_FIELD_VT.sql b/db/ddlutils/oracle/views/AD_FIELD_VT.sql
index b84f819d03..896f74b808 100644
--- a/db/ddlutils/oracle/views/AD_FIELD_VT.sql
+++ b/db/ddlutils/oracle/views/AD_FIELD_VT.sql
@@ -9,8 +9,11 @@ CREATE OR REPLACE VIEW AD_FIELD_VT AS
    COALESCE(f.IsMandatory, c.IsMandatory) AS IsMandatory, 
       c.IsIdentifier, c.IsTranslated, COALESCE(f.AD_Reference_Value_ID, c.AD_Reference_Value_ID) AS AD_Reference_Value_ID, 
    c.Callout, COALESCE(f.AD_Reference_ID, c.AD_Reference_ID) AS AD_Reference_ID, 
-      COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) as AD_Val_Rule_ID, c.AD_Process_ID, c.IsAlwaysUpdateable,
-   c.ReadOnlyLogic, c.MandatoryLogic, c.IsUpdateable, c.IsEncrypted AS IsEncryptedColumn, c.IsSelectionColumn,
+      COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) as AD_Val_Rule_ID, c.AD_Process_ID, 
+   COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable,
+   COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic,
+   COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic,  
+   COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, c.IsEncrypted AS IsEncryptedColumn, c.IsSelectionColumn,
    tbl.TableName, c.ValueMin, c.ValueMax, 
    fgt.NAME AS FieldGroup, vr.Code AS ValidationCode,
    f.Included_Tab_ID, fg.FieldGroupType, fg.IsCollapsedByDefault,
@@ -18,7 +21,8 @@ CREATE OR REPLACE VIEW AD_FIELD_VT AS
    c.IsAutocomplete, COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
 	f.isdisplayedgrid, 
 	f.seqnogrid,
-	c.seqnoselection, f.xposition, f.columnspan, f.numlines, c.isToolbarButton
+	c.seqnoselection, f.xposition, f.columnspan, f.numlines, 
+  COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
   FROM AD_FIELD f 
    INNER JOIN AD_FIELD_TRL trl ON (f.AD_Field_ID = trl.AD_Field_ID)
     INNER JOIN AD_TAB t ON (f.AD_Tab_ID = t.AD_Tab_ID)
@@ -27,7 +31,6 @@ CREATE OR REPLACE VIEW AD_FIELD_VT AS
    (f.AD_FieldGroup_ID = fgt.AD_FieldGroup_ID AND trl.AD_LANGUAGE=fgt.AD_LANGUAGE)
     LEFT OUTER JOIN AD_COLUMN c ON (f.AD_Column_ID = c.AD_Column_ID)
    INNER JOIN AD_TABLE tbl ON (c.AD_Table_ID = tbl.AD_Table_ID)
-   INNER JOIN AD_REFERENCE r ON (c.AD_Reference_ID = r.AD_Reference_ID)
    LEFT OUTER JOIN AD_VAL_RULE vr ON (vr.AD_Val_Rule_ID=COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID))
   WHERE f.IsActive = 'Y' 
   AND c.IsActive = 'Y';
diff --git a/db/ddlutils/oracle/views/M_Storage.sql b/db/ddlutils/oracle/views/M_Storage.sql
new file mode 100644
index 0000000000..bc414b8657
--- /dev/null
+++ b/db/ddlutils/oracle/views/M_Storage.sql
@@ -0,0 +1,59 @@
+CREATE OR REPLACE VIEW m_storage
+AS
+  SELECT s.m_product_id,
+         s.m_locator_id,
+         s.ad_client_id,
+         s.ad_org_id,
+         s.isactive,
+         s.created,
+         s.createdby,
+         s.updated,
+         s.updatedby,
+         s.qtyonhand,
+         0 AS qtyreserved,
+         0 AS qtyordered,
+         s.datelastinventory,
+         s.m_attributesetinstance_id,
+         s.m_storageonhand_uu
+  FROM   m_storageonhand s
+  UNION
+  SELECT sr.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         sr.ad_client_id,
+         sr.ad_org_id,
+         sr.isactive,
+         sr.created,
+         sr.createdby,
+         sr.updated,
+         sr.updatedby,
+         0                     AS qtyonhand,
+         sr.qty                AS qtyreserved,
+         0                     AS qtyordered,
+         sr.datelastinventory,
+         sr.m_attributesetinstance_id,
+         sr.m_storagereservation_uu
+  FROM   m_storagereservation sr
+         JOIN m_warehouse w
+           ON sr.m_warehouse_id = w.m_warehouse_id
+  WHERE  sr.issotrx = 'Y'
+  UNION
+  SELECT so.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         so.ad_client_id,
+         so.ad_org_id,
+         so.isactive,
+         so.created,
+         so.createdby,
+         so.updated,
+         so.updatedby,
+         0                     AS qtyonhand,
+         0                     AS qtyreserved,
+         so.qty                AS qtyordered,
+         so.datelastinventory,
+         so.m_attributesetinstance_id,
+         so.m_storagereservation_uu
+  FROM   m_storagereservation so
+         JOIN m_warehouse w
+           ON so.m_warehouse_id = w.m_warehouse_id
+  WHERE  so.issotrx = 'N'
+;
diff --git a/db/ddlutils/oracle/views/RV_STORAGE_PER_PRODUCT.sql b/db/ddlutils/oracle/views/RV_STORAGE_PER_PRODUCT.sql
new file mode 100644
index 0000000000..cd331292f5
--- /dev/null
+++ b/db/ddlutils/oracle/views/RV_STORAGE_PER_PRODUCT.sql
@@ -0,0 +1,14 @@
+CREATE OR REPLACE VIEW rv_storage_per_product AS 
+SELECT strg.AD_Client_ID, strg.AD_Org_ID
+ , p.M_Product_ID, p.Value, p.Name
+ , p.Description, p.UPC, p.SKU
+ , p.C_UOM_ID, p.M_Product_Category_ID, p.Classification, p.Weight, p.Volume, p.VersionNo
+ , p.GuaranteeDays, p.GuaranteeDaysMin
+ , strg.SumQtyOnHand
+FROM M_Product p
+  INNER JOIN ( SELECT M_Product_ID, M_Locator_ID, SUM (QtyOnHand) as SumQtyOnHand
+                      , AD_Client_ID, AD_Org_ID
+               FROM RV_Storage
+               GROUP BY M_Product_ID, M_Locator_ID, AD_Client_ID, AD_Org_ID) strg ON (p.M_Product_ID = strg.M_Product_ID)
+  INNER JOIN M_Locator l ON (strg.M_Locator_ID=l.M_Locator_ID)
+;
diff --git a/db/ddlutils/postgresql/procedures/altercolumn.sql b/db/ddlutils/postgresql/procedures/altercolumn.sql
new file mode 100644
index 0000000000..f6f2c8e91f
--- /dev/null
+++ b/db/ddlutils/postgresql/procedures/altercolumn.sql
@@ -0,0 +1,111 @@
+create or replace function altercolumn(tablename name, columnname name, datatype name,
+nullclause varchar, defaultclause varchar) returns void as $$
+declare
+   command text;
+   viewtext text[];
+   viewname name[];
+   dropviews name[];
+   i int;
+   j int;
+   v record;
+   sqltype       text;
+   sqltype_short text;
+   typename name;
+begin
+   if datatype is not null then
+	select pg_type.typname, format_type(pg_type.oid, pg_attribute.atttypmod)
+        into typename, sqltype
+        from pg_class, pg_attribute, pg_type
+        where relname = lower(tablename)
+        and relkind = 'r'
+        and pg_class.oid = pg_attribute.attrelid
+        and attname = lower(columnname)
+        and atttypid = pg_type.oid;
+        sqltype_short := sqltype;
+        if typename = 'numeric' then
+	   sqltype_short := replace(sqltype, ',0', '');
+        elsif strpos(sqltype,'character varying') = 1 then
+	   sqltype_short := replace(sqltype, 'character varying', 'varchar');
+        elsif sqltype = 'timestamp without time zone' then
+           sqltype_short := 'timestamp';
+        end if;
+        if lower(datatype) <> sqltype and lower(datatype) <> sqltype_short then
+		i := 0;
+		for v in select a.relname, a.oid 
+			from pg_class a, pg_depend b, pg_depend c, pg_class d, pg_attribute e
+			where a.oid = b.refobjid
+			and b.objid = c.objid
+			and b.refobjid <> c.refobjid
+			and b.deptype = 'n'
+			and c.refobjid = d.oid
+			and d.relname = lower(tablename)
+			and d.relkind = 'r'
+			and d.oid = e.attrelid
+			and e.attname = lower(columnname)
+			and c.refobjsubid = e.attnum
+			and a.relkind = 'v'
+		 loop
+		    i := i + 1;
+		    viewtext[i] := pg_get_viewdef(v.oid);
+		    viewname[i] := v.relname;
+		end loop;
+		if i > 0 then
+		   begin
+		     for j in 1 .. i loop
+		        command := 'drop view ' || viewname[j];
+		        execute command;
+		        dropviews[j] := viewname[j];
+		     end loop;
+                     exception
+                        when others then
+                          i := array_upper(dropviews, 1);
+                          if i > 0 then
+                             for j in 1 .. i loop
+                                command := 'create or replace view ' || dropviews[j] || ' as ' || viewtext[j];
+		                execute command;
+                             end loop;
+                          end if;
+                          raise exception 'Failed to recreate dependent view';
+                   end;
+		end if;
+		command := 'alter table ' || lower(tablename) || ' alter column ' || lower(columnname) || ' type ' || lower(datatype);
+		execute command;
+                i := array_upper(dropviews, 1);
+		if i > 0 then
+		   for j in 1 .. i loop
+		     command := 'create or replace view ' || dropviews[j] || ' as ' || viewtext[j];
+		     execute command;
+		   end loop;
+		end if;
+        end if;
+   end if;
+   
+   if defaultclause is not null then
+       if lower(defaultclause) = 'null' then
+          command := 'alter table ' || lower(tablename) || ' alter column ' || lower(columnname) || ' drop default ';
+       else
+	  command := 'alter table ' || lower(tablename) || ' alter column ' || lower(columnname) || ' set default ''' || defaultclause || '''';
+       end if;
+       execute command;
+   end if;
+   
+   if nullclause is not null then
+      if lower(nullclause) = 'not null' then
+          command := 'alter table ' || lower(tablename) || ' alter column ' || lower(columnname) || ' set not null';
+          execute command;
+      elsif lower(nullclause) = 'null' then
+          command := 'alter table ' || lower(tablename) || ' alter column ' || lower(columnname) || ' drop not null';
+          execute command;
+      end if;
+   end if;
+end;
+$$ language plpgsql;
+
+/*
+create table t_alter_column
+( tablename name, columnname name, datatype name, nullclause varchar(10), defaultclause varchar(200));
+
+create rule alter_column_rule as on insert to t_alter_column
+do instead select altercolumn(new.tablename, new.columnname, new.datatype, new.nullclause,
+new.defaultclause);
+*/
diff --git a/db/ddlutils/postgresql/views/AD_FIELD_V.sql b/db/ddlutils/postgresql/views/AD_FIELD_V.sql
index 1b483d739a..40299e4f51 100644
--- a/db/ddlutils/postgresql/views/AD_FIELD_V.sql
+++ b/db/ddlutils/postgresql/views/AD_FIELD_V.sql
@@ -8,19 +8,22 @@ CREATE OR REPLACE VIEW ad_field_v AS
  COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, c.callout, 
  COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id, 
  COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id, 
- c.isalwaysupdateable, c.readonlylogic, c.mandatorylogic, c.isupdateable, 
+ COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable, 
+ COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic, 
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic, 
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, 
  c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, 
  fg.name AS fieldgroup, vr.code AS validationcode, f.included_tab_id, fg.fieldgrouptype, fg.iscollapsedbydefault, 
  COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete,
  COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
 	f.isdisplayedgrid, 
 	f.seqnogrid,
-	c.seqnoselection, f.xposition, f.columnspan, f.numlines, c.isToolbarButton
+	c.seqnoselection, f.xposition, f.columnspan, f.numlines, 
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
    FROM ad_field f
    JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id
    LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id
    LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id
    JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id
-   JOIN ad_reference r ON c.ad_reference_id = r.ad_reference_id
    LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id)
   WHERE f.isactive = 'Y'::bpchar AND c.isactive = 'Y'::bpchar;
diff --git a/db/ddlutils/postgresql/views/AD_FIELD_VT.sql b/db/ddlutils/postgresql/views/AD_FIELD_VT.sql
index c206131551..30bc3a340c 100644
--- a/db/ddlutils/postgresql/views/AD_FIELD_VT.sql
+++ b/db/ddlutils/postgresql/views/AD_FIELD_VT.sql
@@ -4,13 +4,18 @@ CREATE OR REPLACE VIEW ad_field_vt AS
  f.isencrypted AS isencryptedfield, f.obscuretype, c.columnname, c.columnsql, c.fieldlength, c.vformat, COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue, 
  c.iskey, c.isparent, COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated, 
  COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, c.callout, COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id, 
- COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id, c.isalwaysupdateable, c.readonlylogic, c.mandatorylogic, c.isupdateable, 
+ COALESCE(f.ad_val_rule_id,c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id,  
+ COALESCE(f.Isalwaysupdateable,C.Isalwaysupdateable) As Isalwaysupdateable,
+ COALESCE(f.Readonlylogic,c.Readonlylogic) As Readonlylogic, 
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic, 
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable,  
  c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, fgt.name AS fieldgroup, vr.code AS validationcode, 
  f.included_tab_id, fg.fieldgrouptype, fg.iscollapsedbydefault, COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete,
  COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
 	f.isdisplayedgrid, 
 	f.seqnogrid,
-	c.seqnoselection, f.xposition, f.columnspan, f.numlines, c.isToolbarButton
+	c.seqnoselection, f.xposition, f.columnspan, f.numlines, 
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
    FROM ad_field f
    JOIN ad_field_trl trl ON f.ad_field_id = trl.ad_field_id
    JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id
@@ -18,6 +23,5 @@ CREATE OR REPLACE VIEW ad_field_vt AS
    LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language::text = fgt.ad_language::text
    LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id
    JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id
-   JOIN ad_reference r ON c.ad_reference_id = r.ad_reference_id
    LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id)
   WHERE f.isactive = 'Y'::bpchar AND c.isactive = 'Y'::bpchar;
diff --git a/db/ddlutils/postgresql/views/M_Storage.sql b/db/ddlutils/postgresql/views/M_Storage.sql
new file mode 100644
index 0000000000..bc414b8657
--- /dev/null
+++ b/db/ddlutils/postgresql/views/M_Storage.sql
@@ -0,0 +1,59 @@
+CREATE OR REPLACE VIEW m_storage
+AS
+  SELECT s.m_product_id,
+         s.m_locator_id,
+         s.ad_client_id,
+         s.ad_org_id,
+         s.isactive,
+         s.created,
+         s.createdby,
+         s.updated,
+         s.updatedby,
+         s.qtyonhand,
+         0 AS qtyreserved,
+         0 AS qtyordered,
+         s.datelastinventory,
+         s.m_attributesetinstance_id,
+         s.m_storageonhand_uu
+  FROM   m_storageonhand s
+  UNION
+  SELECT sr.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         sr.ad_client_id,
+         sr.ad_org_id,
+         sr.isactive,
+         sr.created,
+         sr.createdby,
+         sr.updated,
+         sr.updatedby,
+         0                     AS qtyonhand,
+         sr.qty                AS qtyreserved,
+         0                     AS qtyordered,
+         sr.datelastinventory,
+         sr.m_attributesetinstance_id,
+         sr.m_storagereservation_uu
+  FROM   m_storagereservation sr
+         JOIN m_warehouse w
+           ON sr.m_warehouse_id = w.m_warehouse_id
+  WHERE  sr.issotrx = 'Y'
+  UNION
+  SELECT so.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         so.ad_client_id,
+         so.ad_org_id,
+         so.isactive,
+         so.created,
+         so.createdby,
+         so.updated,
+         so.updatedby,
+         0                     AS qtyonhand,
+         0                     AS qtyreserved,
+         so.qty                AS qtyordered,
+         so.datelastinventory,
+         so.m_attributesetinstance_id,
+         so.m_storagereservation_uu
+  FROM   m_storagereservation so
+         JOIN m_warehouse w
+           ON so.m_warehouse_id = w.m_warehouse_id
+  WHERE  so.issotrx = 'N'
+;
diff --git a/db/ddlutils/postgresql/views/RV_STORAGE_PER_PRODUCT.sql b/db/ddlutils/postgresql/views/RV_STORAGE_PER_PRODUCT.sql
new file mode 100644
index 0000000000..cd331292f5
--- /dev/null
+++ b/db/ddlutils/postgresql/views/RV_STORAGE_PER_PRODUCT.sql
@@ -0,0 +1,14 @@
+CREATE OR REPLACE VIEW rv_storage_per_product AS 
+SELECT strg.AD_Client_ID, strg.AD_Org_ID
+ , p.M_Product_ID, p.Value, p.Name
+ , p.Description, p.UPC, p.SKU
+ , p.C_UOM_ID, p.M_Product_Category_ID, p.Classification, p.Weight, p.Volume, p.VersionNo
+ , p.GuaranteeDays, p.GuaranteeDaysMin
+ , strg.SumQtyOnHand
+FROM M_Product p
+  INNER JOIN ( SELECT M_Product_ID, M_Locator_ID, SUM (QtyOnHand) as SumQtyOnHand
+                      , AD_Client_ID, AD_Org_ID
+               FROM RV_Storage
+               GROUP BY M_Product_ID, M_Locator_ID, AD_Client_ID, AD_Org_ID) strg ON (p.M_Product_ID = strg.M_Product_ID)
+  INNER JOIN M_Locator l ON (strg.M_Locator_ID=l.M_Locator_ID)
+;
diff --git a/migration/i1.0a-release/oracle/201211141732_IDEMPIERE-385_m_storage.sql b/migration/i1.0a-release/oracle/201211141732_IDEMPIERE-385_m_storage.sql
new file mode 100644
index 0000000000..8f13b1c523
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211141732_IDEMPIERE-385_m_storage.sql
@@ -0,0 +1,379 @@
+-- Oct 16, 2012 11:14:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table (IsSecurityEnabled,AccessLevel,LoadSeq,AD_Table_ID,IsHighVolume,IsView,IsChangeLog,EntityType,IsCentrallyMaintained,IsDeleteable,ReplicationType,TableName,Name,AD_Client_ID,IsActive,AD_Org_ID,CreatedBy,Updated,UpdatedBy,Created) VALUES ('N','3',145,200026,'N','N','N','U','Y','N','L','M_StorageOnHand','M_StorageOnHand',0,'Y',0,100,TO_DATE('2012-10-16 11:14:30','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2012-10-16 11:14:30','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 16, 2012 11:14:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table_Trl (AD_Language,AD_Table_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Table_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Table t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Table_ID=200026 AND NOT EXISTS (SELECT * FROM AD_Table_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Table_ID=t.AD_Table_ID)
+;
+
+-- Oct 16, 2012 11:14:34 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Sequence (IncrementNo,StartNewYear,CurrentNextSys,IsTableID,CreatedBy,StartNo,CurrentNext,IsAudited,IsAutoSequence,AD_Sequence_ID,Description,Name,AD_Org_ID,AD_Client_ID,Updated,UpdatedBy,Created,IsActive) VALUES (1,'N',200000,'Y',100,1000000,1000000,'N','Y',200026,'Table M_StorageOnHand','M_StorageOnHand',0,0,TO_DATE('2012-10-16 11:14:31','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2012-10-16 11:14:31','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Oct 16, 2012 11:14:41 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Client_ID@',200026,200614,'U',1,'Y','N','N','A Client is a company or a legal entity. You cannot share data between Clients. Tenant is a synonym for Client.','N',22,'N',19,'N',129,'N',102,'N','Y','N','N','N','AD_Client_ID','Client/Tenant for this installation.','Client','N',100,TO_DATE('2012-10-16 11:14:40','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:40','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:41 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200614 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:42 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Org_ID@',200026,200615,'U',1,'Y','N','N','An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations.','N',22,'N',19,'N',130,'N',113,'N','Y','N','N','N','AD_Org_ID','Organizational entity within client','Organization','N',100,TO_DATE('2012-10-16 11:14:41','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:41','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:42 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200615 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:45 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200616,'U',1,'Y','N','N','The Created field indicates the date that this record was created.','N',7,'N',16,'N','N',245,'N','Y','N','N','N','Created','Date this record was created','Created','N',100,TO_DATE('2012-10-16 11:14:42','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:42','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:45 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200616 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:46 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200617,'U',1,110,'Y','N','N','The Created By field indicates the user who created this record.','N',22,'N',18,'N','N',246,'N','Y','N','N','N','CreatedBy','User who created this records','Created By','N',100,TO_DATE('2012-10-16 11:14:45','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:45','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:46 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200617 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:48 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200618,'U',1,'N','N','N','The Date Last Inventory Count indicates the last time an Inventory count was done.','N',7,'N',15,'N','N',1088,'N','Y','N','Y','N','DateLastInventory','Date of Last Inventory Count','Date last inventory count','Y',100,TO_DATE('2012-10-16 11:14:46','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:46','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:48 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200618 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:50 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200026,200619,'U',1,'Y','N','N','There are two methods of making records unavailable in the system: One is to delete the record, the other is to de-activate the record. A de-activated record is not available for selection, but available for reports.
+There are two reasons for de-activating and not deleting records:
+(1) The system requires the record for audit purposes.
+(2) The record is referenced by other records. E.g., you cannot delete a Business Partner, if there are invoices for this partner record existing. You de-activate the Business Partner and prevent that this record is used for future entries.','N',1,'N',20,'N','N',348,'N','Y','N','N','N','IsActive','The record is active in the system','Active','N',100,TO_DATE('2012-10-16 11:14:48','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:48','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:50 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200619 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:51 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200620,'U',1,'Y','N','N',0,'The values of the actual Product Attribute Instances.  The product level attributes are defined on Product level.','Y',22,'N',35,'N','N',2019,'N','Y','N','N','N','M_AttributeSetInstance_ID','Product Attribute Set Instance','Attribute Set Instance','Y',100,TO_DATE('2012-10-16 11:14:50','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:50','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:51 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200620 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200621,'U',1,'Y','N','N','The Locator indicates where in a Warehouse a product is located.','Y',22,'N',31,'N','N',448,'N','Y','N','N','N','M_Locator_ID','Warehouse Locator','Locator','Y',100,TO_DATE('2012-10-16 11:14:51','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:51','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200621 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200622,'U',1,'Y','N','N','Identifies an item which is either purchased or sold in this organization.','Y',22,'N',30,'N',231,'N',454,'N','Y','N','N','N','M_Product_ID','Product, Service, Item','Product','Y',100,TO_DATE('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200622 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:53 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200623,'U',1,'Y','N','N','The On Hand Quantity indicates the quantity of a product that is on hand in a warehouse.','N',22,'N',29,'N','N',530,'N','Y','N','N','N','QtyOnHand','On Hand Quantity','On Hand Quantity','Y',100,TO_DATE('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:53 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200623 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:55 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200624,'U',1,'Y','N','N','The Ordered Quantity indicates the quantity of a product that was ordered.','N',22,'N',29,'N','N',531,'N','Y','N','N','N','QtyOrdered','Ordered Quantity','Ordered Quantity','Y',100,TO_DATE('2012-10-16 11:14:53','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:53','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:55 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200624 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200625,'U',1,'Y','N','N','The Reserved Quantity indicates the quantity of a product that is currently reserved.','N',22,'N',29,'N','N',532,'N','Y','N','N','N','QtyReserved','Reserved Quantity','Reserved Quantity','Y',100,TO_DATE('2012-10-16 11:14:55','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:55','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200625 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200626,'U',1,'Y','N','N','The Updated field indicates the date that this record was updated.','N',7,'N',16,'N','N',607,'N','Y','N','N','N','Updated','Date this record was updated','Updated','N',100,TO_DATE('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200626 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:57 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200627,'U',1,110,'Y','N','N','The Updated By field indicates the user who updated this record.','N',22,'N',18,'N','N',608,'N','Y','N','N','N','UpdatedBy','User who updated this records','Updated By','N',100,TO_DATE('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:57 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200627 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE  FROM  AD_Column_Trl WHERE AD_Column_ID=200624
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column WHERE AD_Column_ID=200624
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE  FROM  AD_Column_Trl WHERE AD_Column_ID=200625
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column WHERE AD_Column_ID=200625
+;
+
+-- Oct 16, 2012 11:15:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+CREATE TABLE M_StorageOnHand (AD_Client_ID NUMBER(10) NOT NULL, AD_Org_ID NUMBER(10) NOT NULL, Created DATE NOT NULL, CreatedBy NUMBER(10) NOT NULL, DateLastInventory DATE DEFAULT NULL , IsActive CHAR(1) DEFAULT 'Y' CHECK (IsActive IN ('Y','N')) NOT NULL, M_AttributeSetInstance_ID NUMBER(10) NOT NULL, M_Locator_ID NUMBER(10) NOT NULL, M_Product_ID NUMBER(10) NOT NULL, QtyOnHand NUMBER NOT NULL, Updated DATE NOT NULL, UpdatedBy NUMBER(10) NOT NULL, CONSTRAINT M_StorageOnHand_Key PRIMARY KEY (M_AttributeSetInstance_ID, M_Locator_ID, M_Product_ID))
+;
+
+-- Oct 16, 2012 11:16:16 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table (IsSecurityEnabled,AccessLevel,LoadSeq,AD_Table_ID,IsHighVolume,IsView,IsChangeLog,EntityType,IsCentrallyMaintained,IsDeleteable,ReplicationType,TableName,Name,AD_Client_ID,IsActive,AD_Org_ID,CreatedBy,Updated,UpdatedBy,Created) VALUES ('N','3',145,200027,'N','N','N','U','Y','N','L','M_StorageReservation','M_StorageReservation',0,'Y',0,100,TO_DATE('2012-10-16 11:16:15','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2012-10-16 11:16:15','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 16, 2012 11:16:16 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table_Trl (AD_Language,AD_Table_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Table_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Table t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Table_ID=200027 AND NOT EXISTS (SELECT * FROM AD_Table_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Table_ID=t.AD_Table_ID)
+;
+
+-- Oct 16, 2012 11:16:17 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Sequence (IncrementNo,StartNewYear,CurrentNextSys,IsTableID,CreatedBy,StartNo,CurrentNext,IsAudited,IsAutoSequence,AD_Sequence_ID,Description,Name,AD_Org_ID,AD_Client_ID,Updated,UpdatedBy,Created,IsActive) VALUES (1,'N',200000,'Y',100,1000000,1000000,'N','Y',200027,'Table M_StorageReservation','M_StorageReservation',0,0,TO_DATE('2012-10-16 11:16:16','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2012-10-16 11:16:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Client_ID@',200027,200628,'U',1,'Y','N','N','A Client is a company or a legal entity. You cannot share data between Clients. Tenant is a synonym for Client.','N',22,'N',19,'N',129,'N',102,'N','Y','N','N','N','AD_Client_ID','Client/Tenant for this installation.','Client','N',100,TO_DATE('2012-10-16 11:16:23','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:23','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200628 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Org_ID@',200027,200629,'U',1,'Y','N','N','An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations.','N',22,'N',19,'N',130,'N',113,'N','Y','N','N','N','AD_Org_ID','Organizational entity within client','Organization','N',100,TO_DATE('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200629 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:25 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200630,'U',1,'Y','N','N','The Created field indicates the date that this record was created.','N',7,'N',16,'N','N',245,'N','Y','N','N','N','Created','Date this record was created','Created','N',100,TO_DATE('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:25 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200630 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:26 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200631,'U',1,110,'Y','N','N','The Created By field indicates the user who created this record.','N',22,'N',18,'N','N',246,'N','Y','N','N','N','CreatedBy','User who created this records','Created By','N',100,TO_DATE('2012-10-16 11:16:25','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:25','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:26 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200631 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200632,'U',1,'N','N','N','The Date Last Inventory Count indicates the last time an Inventory count was done.','N',7,'N',15,'N','N',1088,'N','Y','N','Y','N','DateLastInventory','Date of Last Inventory Count','Date last inventory count','Y',100,TO_DATE('2012-10-16 11:16:26','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:26','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200632 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200027,200633,'U',1,'Y','N','N','There are two methods of making records unavailable in the system: One is to delete the record, the other is to de-activate the record. A de-activated record is not available for selection, but available for reports.
+There are two reasons for de-activating and not deleting records:
+(1) The system requires the record for audit purposes.
+(2) The record is referenced by other records. E.g., you cannot delete a Business Partner, if there are invoices for this partner record existing. You de-activate the Business Partner and prevent that this record is used for future entries.','N',1,'N',20,'N','N',348,'N','Y','N','N','N','IsActive','The record is active in the system','Active','N',100,TO_DATE('2012-10-16 11:16:28','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:28','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200633 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200634,'U',1,'Y','N','N',0,'The values of the actual Product Attribute Instances.  The product level attributes are defined on Product level.','Y',22,'N',35,'N','N',2019,'N','Y','N','N','N','M_AttributeSetInstance_ID','Product Attribute Set Instance','Attribute Set Instance','Y',100,TO_DATE('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200634 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:30 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200635,'U',1,'Y','N','N','The Locator indicates where in a Warehouse a product is located.','Y',22,'N',31,'N','N',448,'N','Y','N','N','N','M_Locator_ID','Warehouse Locator','Locator','Y',100,TO_DATE('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:30 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200635 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200636,'U',1,'Y','N','N','Identifies an item which is either purchased or sold in this organization.','Y',22,'N',30,'N',231,'N',454,'N','Y','N','N','N','M_Product_ID','Product, Service, Item','Product','Y',100,TO_DATE('2012-10-16 11:16:30','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:30','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200636 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200637,'U',1,'Y','N','N','The On Hand Quantity indicates the quantity of a product that is on hand in a warehouse.','N',22,'N',29,'N','N',530,'N','Y','N','N','N','QtyOnHand','On Hand Quantity','On Hand Quantity','Y',100,TO_DATE('2012-10-16 11:16:31','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:31','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200637 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200638,'U',1,'Y','N','N','The Updated field indicates the date that this record was updated.','N',7,'N',16,'N','N',607,'N','Y','N','N','N','Updated','Date this record was updated','Updated','N',100,TO_DATE('2012-10-16 11:16:32','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:32','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200638 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200639,'U',1,110,'Y','N','N','The Updated By field indicates the user who updated this record.','N',22,'N',18,'N','N',608,'N','Y','N','N','N','UpdatedBy','User who updated this records','Updated By','N',100,TO_DATE('2012-10-16 11:16:33','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:16:33','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200639 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET Help='The Quantity indicates the number of a specific product or item for this document.', AD_Element_ID=526, ColumnName='Qty', Description='Quantity', Name='Quantity',Updated=TO_DATE('2012-10-16 11:17:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200637
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column_Trl SET IsTranslated='N' WHERE AD_Column_ID=200637
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Field SET Name='Quantity', Description='Quantity', Help='The Quantity indicates the number of a specific product or item for this document.' WHERE AD_Column_ID=200637 AND IsCentrallyMaintained='Y'
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET Help='The Warehouse identifies a unique Warehouse where products are stored or Services are provided.', AD_Element_ID=459, IsUpdateable='N', ColumnName='M_Warehouse_ID', Description='Storage Warehouse and Service Point', Name='Warehouse',Updated=TO_DATE('2012-10-16 11:17:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column_Trl SET IsTranslated='N' WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Field SET Name='Warehouse', Description='Storage Warehouse and Service Point', Help='The Warehouse identifies a unique Warehouse where products are stored or Services are provided.' WHERE AD_Column_ID=200635 AND IsCentrallyMaintained='Y'
+;
+
+-- Oct 16, 2012 11:17:20 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Reference_ID=19, IsUpdateable='N',Updated=TO_DATE('2012-10-16 11:17:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:35 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Val_Rule_ID=189, IsUpdateable='N',Updated=TO_DATE('2012-10-16 11:17:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:18:05 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200027,200640,'U',0,'N','N','N',0,'The Sales Transaction checkbox indicates if this item is a Sales Transaction.','N',1,'N',20,'N','N',1106,'N','Y','N','Y','N','IsSOTrx','This is a Sales Transaction','Sales Transaction','Y',100,TO_DATE('2012-10-16 11:18:04','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-16 11:18:04','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:18:05 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200640 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:18:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+CREATE TABLE M_StorageReservation (AD_Client_ID NUMBER(10) NOT NULL, AD_Org_ID NUMBER(10) NOT NULL, Created DATE NOT NULL, CreatedBy NUMBER(10) NOT NULL, DateLastInventory DATE DEFAULT NULL , IsActive CHAR(1) DEFAULT 'Y' CHECK (IsActive IN ('Y','N')) NOT NULL, IsSOTrx CHAR(1) DEFAULT 'Y' CHECK (IsSOTrx IN ('Y','N')), M_AttributeSetInstance_ID NUMBER(10) NOT NULL, M_Product_ID NUMBER(10) NOT NULL, M_Warehouse_ID NUMBER(10) NOT NULL, Qty NUMBER NOT NULL, Updated DATE NOT NULL, UpdatedBy NUMBER(10) NOT NULL, CONSTRAINT M_StorageReservation_Key PRIMARY KEY (M_AttributeSetInstance_ID, M_Product_ID, M_Warehouse_ID))
+;
+
+SELECT register_migration_script('201211141732_IDEMPIERE-385_m_storage.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/oracle/201211141733_IDEMPIERE-385_m_viewProduct.sql b/migration/i1.0a-release/oracle/201211141733_IDEMPIERE-385_m_viewProduct.sql
new file mode 100644
index 0000000000..047b7a4f2b
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211141733_IDEMPIERE-385_m_viewProduct.sql
@@ -0,0 +1,35 @@
+CREATE OR REPLACE VIEW m_product_stock_v AS 
+ SELECT ms.isactive, ms.created, ms.createdby, ms.updated, ms.updatedby, mp.value, mp.help, ms.qtyonhand - NVL(mr.qty,0) AS qtyavailable, ms.qtyonhand, NVL(mr.qty,0) as qtyreserved, mp.description, mw.name AS warehouse, mw.m_warehouse_id, mw.ad_client_id, mw.ad_org_id, mp.documentnote
+   FROM m_storageonhand ms
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  ORDER BY mw.name;
+
+CREATE OR REPLACE VIEW m_product_substituterelated_v AS 
+         SELECT s.ad_client_id, s.ad_org_id, s.isactive, s.created, s.createdby, s.updated, s.updatedby, s.m_product_id, s.substitute_id, 'S' AS rowtype, mp.name, sum(ms.qtyonhand - NVL(mr.qty,0)) AS qtyavailable, sum(ms.qtyonhand) AS qtyonhand, NVL(sum(mr.qty),0) AS qtyreserved, round(max(mpr.pricestd), 0) AS pricestd, mpr.m_pricelist_version_id, mw.m_warehouse_id, org.name AS orgname
+           FROM m_substitute s
+      JOIN m_storageonhand ms ON ms.m_product_id = s.substitute_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  GROUP BY s.ad_client_id, s.ad_org_id, s.isactive, s.created, s.createdby, s.updated, s.updatedby, s.m_product_id, s.substitute_id, mw.m_warehouse_id, mpr.m_pricelist_version_id, org.name, mp.name
+UNION 
+         SELECT r.ad_client_id, r.ad_org_id, r.isactive, r.created, r.createdby, r.updated, r.updatedby, r.m_product_id, r.relatedproduct_id AS substitute_id, 'R' AS rowtype, mp.name, sum(ms.qtyonhand - NVL(mr.qty,0)) AS qtyavailable, sum(ms.qtyonhand) AS qtyonhand, NVL(sum(mr.qty),0) AS qtyreserved, round(max(mpr.pricestd), 0) AS pricestd, mpr.m_pricelist_version_id, mw.m_warehouse_id, org.name AS orgname
+           FROM m_relatedproduct r
+      JOIN m_storageonhand ms ON ms.m_product_id = r.relatedproduct_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  GROUP BY r.ad_client_id, r.ad_org_id, r.isactive, r.created, r.createdby, r.updated, r.updatedby, r.m_product_id, r.relatedproduct_id, mw.m_warehouse_id, mpr.m_pricelist_version_id, org.name, mp.name;
+
+SELECT register_migration_script('201211141733_IDEMPIERE-385_m_viewProduct.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/oracle/201211141734_IDEMPIERE-385_reserveLocator.sql b/migration/i1.0a-release/oracle/201211141734_IDEMPIERE-385_reserveLocator.sql
new file mode 100644
index 0000000000..58a4044cfc
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211141734_IDEMPIERE-385_reserveLocator.sql
@@ -0,0 +1,48 @@
+-- Oct 19, 2012 2:07:52 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Element (AD_Element_ID,ColumnName,EntityType,Name,PrintName,AD_Client_ID,Created,Updated,IsActive,AD_Org_ID,CreatedBy,UpdatedBy) VALUES (200188,'M_ReserveLocator_ID','U','M_ReserveLocator_ID','Reserve Locator',0,TO_DATE('2012-10-19 14:07:51','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-10-19 14:07:51','YYYY-MM-DD HH24:MI:SS'),'Y',0,100,100)
+;
+
+-- Oct 19, 2012 2:07:52 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_PrintName,PO_Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_PrintName,t.PO_Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200188 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Oct 19, 2012 2:08:25 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (190,200704,'U',0,'N','N','N',0,'N',10,'N',31,'N','N',200188,'N','Y','N','Y','N','M_ReserveLocator_ID','M_ReserveLocator_ID','Y',100,TO_DATE('2012-10-19 14:08:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_DATE('2012-10-19 14:08:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 19, 2012 2:08:25 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200704 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 19, 2012 2:08:28 PM WIT
+-- Reserve Locator
+ALTER TABLE M_Warehouse ADD M_ReserveLocator_ID NUMBER(10) DEFAULT NULL 
+;
+
+-- Oct 19, 2012 2:08:49 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Field (IsEncrypted,DisplayLength,AD_Tab_ID,IsDisplayed,IsSameLine,IsHeading,AD_Column_ID,IsFieldOnly,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,UpdatedBy,AD_Org_ID,IsActive,Created,AD_Client_ID,CreatedBy,Updated) VALUES ('N',10,177,'Y','N','N',200704,'N','Y',200649,'N','U','M_ReserveLocator_ID',100,0,'Y',TO_DATE('2012-10-19 14:08:48','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-10-19 14:08:48','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 19, 2012 2:08:49 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200649 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Oct 19, 2012 2:09:08 PM WIT
+-- Reserve Locator
+UPDATE AD_Field SET Name='Reserve Locator',Updated=TO_DATE('2012-10-19 14:09:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200649
+;
+
+-- Oct 19, 2012 2:09:08 PM WIT
+-- Reserve Locator
+UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=200649
+;
+
+SELECT register_migration_script('201211141734_IDEMPIERE-385_reserveLocator.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/oracle/201211191100_IDEMPIERE-385_DB.sql b/migration/i1.0a-release/oracle/201211191100_IDEMPIERE-385_DB.sql
new file mode 100644
index 0000000000..42099a2a2d
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211191100_IDEMPIERE-385_DB.sql
@@ -0,0 +1,395 @@
+-- Nov 19, 2012 10:56:55 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('M_StorageOnHand_UU',200233,'U','M_StorageOnHand_UU','M_StorageOnHand_UU','d22731f0-0762-43bf-9f29-66383f3038f8',0,TO_DATE('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
+;
+
+-- Nov 19, 2012 10:56:55 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200233 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID) VALUES ('N',1.00,200026,200917,'U','N','N','N','N',36,'N',10,'N',200233,'66058949-db74-48a6-a940-79ee28d0f0ed','Y','N','M_StorageOnHand_UU','M_StorageOnHand_UU',TO_DATE('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200917 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+ALTER TABLE M_StorageOnHand ADD M_StorageOnHand_UU NVARCHAR2(36) DEFAULT NULL 
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+CREATE UNIQUE INDEX M_StorageOnHand_UU_idx ON m_storageonhand(M_StorageOnHand_UU)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('M_StorageReservation_UU',200234,'U','M_StorageReservation_UU','M_StorageReservation_UU','283bcf86-e8af-4ac7-aaff-efcfa104e700',0,TO_DATE('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),TO_DATE('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200234 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID) VALUES ('N',1.00,200027,200918,'U','N','N','N','N',36,'N',10,'N',200234,'fb178aac-4ffe-4244-907c-89a0a527acf8','Y','N','M_StorageReservation_UU','M_StorageReservation_UU',TO_DATE('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200918 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+ALTER TABLE M_StorageReservation ADD M_StorageReservation_UU NVARCHAR2(36) DEFAULT NULL 
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+CREATE UNIQUE INDEX M_StorageReservation_UU_idx ON m_storagereservation(M_StorageReservation_UU)
+;
+
+ALTER TABLE m_storageonhand DROP CONSTRAINT m_storageonhand_key
+;
+
+ALTER TABLE m_storageonhand ADD (CONSTRAINT m_storageonhand_pkey PRIMARY KEY (m_product_id, m_locator_id, m_attributesetinstance_id))
+;
+
+ALTER TABLE m_storagereservation DROP CONSTRAINT m_storagereservation_key
+;
+
+ALTER TABLE m_storagereservation ADD (CONSTRAINT m_storagereservation_pkey PRIMARY KEY (m_product_id, m_warehouse_id, issotrx, m_attributesetinstance_id))
+;
+
+insert into m_storageonhand (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+m_attributesetinstance_id,
+m_locator_id,
+m_product_id,
+qtyonhand,
+updated,
+updatedby,
+m_storageonhand_uu
+)
+select ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+m_attributesetinstance_id,
+m_locator_id,
+m_product_id,
+qtyonhand,
+updated,
+updatedby,
+generate_uuid()
+from m_storage
+;
+
+insert into m_storagereservation (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+issotrx,
+m_attributesetinstance_id,
+m_product_id,
+m_warehouse_id,
+qty,
+updated,
+updatedby,
+m_storagereservation_uu
+)
+select
+min(s.ad_client_id),
+min(s.ad_org_id),
+min(s.created),
+min(s.createdby),
+null,
+'Y',
+'Y',
+s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id,
+sum(s.qtyreserved),
+max(s.updated),
+max(s.updatedby),
+generate_uuid()
+from m_storage s
+join m_locator l on (s.m_locator_id=l.m_locator_id)
+where s.isactive='Y'
+and s.qtyreserved!=0
+group by s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id
+;
+
+insert into m_storagereservation (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+issotrx,
+m_attributesetinstance_id,
+m_product_id,
+m_warehouse_id,
+qty,
+updated,
+updatedby,
+m_storagereservation_uu
+)
+select
+min(s.ad_client_id),
+min(s.ad_org_id),
+min(s.created),
+min(s.createdby),
+null,
+'Y',
+'N',
+s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id,
+sum(s.qtyordered),
+max(s.updated),
+max(s.updatedby),
+generate_uuid()
+from m_storage s
+join m_locator l on (s.m_locator_id=l.m_locator_id)
+where s.isactive='Y'
+and s.qtyordered!=0
+group by s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id
+;
+
+ALTER TABLE m_storage RENAME TO m_storage_to_drop
+;
+
+CREATE OR REPLACE VIEW m_storage
+AS
+  SELECT s.m_product_id,
+         s.m_locator_id,
+         s.ad_client_id,
+         s.ad_org_id,
+         s.isactive,
+         s.created,
+         s.createdby,
+         s.updated,
+         s.updatedby,
+         s.qtyonhand,
+         0 AS qtyreserved,
+         0 AS qtyordered,
+         s.datelastinventory,
+         s.m_attributesetinstance_id,
+         s.m_storageonhand_uu
+  FROM   m_storageonhand s
+  UNION
+  SELECT sr.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         sr.ad_client_id,
+         sr.ad_org_id,
+         sr.isactive,
+         sr.created,
+         sr.createdby,
+         sr.updated,
+         sr.updatedby,
+         0                     AS qtyonhand,
+         sr.qty                AS qtyreserved,
+         0                     AS qtyordered,
+         sr.datelastinventory,
+         sr.m_attributesetinstance_id,
+         sr.m_storagereservation_uu
+  FROM   m_storagereservation sr
+         JOIN m_warehouse w
+           ON sr.m_warehouse_id = w.m_warehouse_id
+  WHERE  sr.issotrx = 'Y'
+  UNION
+  SELECT so.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         so.ad_client_id,
+         so.ad_org_id,
+         so.isactive,
+         so.created,
+         so.createdby,
+         so.updated,
+         so.updatedby,
+         0                     AS qtyonhand,
+         0                     AS qtyreserved,
+         so.qty                AS qtyordered,
+         so.datelastinventory,
+         so.m_attributesetinstance_id,
+         so.m_storagereservation_uu
+  FROM   m_storagereservation so
+         JOIN m_warehouse w
+           ON so.m_warehouse_id = w.m_warehouse_id
+  WHERE  so.issotrx = 'N'
+;
+
+-- Comment the next if you want to preserve a backup of the M_Storage table
+DROP TABLE m_storage_to_drop
+;
+
+-- Nov 19, 2012 12:19:33 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Table SET IsView='Y',Updated=TO_DATE('2012-11-19 12:19:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Table_ID=250
+;
+
+-- Nov 19, 2012 12:26:17 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Tab SET OrderByClause='M_Product_ID, M_AttributeSetInstance_ID, M_Locator_ID',Updated=TO_DATE('2012-11-19 12:26:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=179
+;
+
+-- Nov 19, 2012 12:26:42 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Tab SET OrderByClause='M_Product_ID, M_AttributeSetInstance_ID, M_Locator_ID',Updated=TO_DATE('2012-11-19 12:26:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53244
+;
+
+update m_warehouse set m_reservelocator_id = 
+(select min(m_locator_id)
+from m_locator 
+where m_warehouse_id =m_warehouse.m_warehouse_id and isactive='Y' and isdefault='Y')
+where m_reservelocator_id is null
+;
+
+-- Nov 19, 2012 1:15:02 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Reference_Value_ID=191, AD_Reference_ID=18, AD_Val_Rule_ID=127, IsToolbarButton='N',Updated=TO_DATE('2012-11-19 13:15:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200704
+;
+
+--create views
+CREATE OR REPLACE VIEW M_PRODUCT_STOCK_V
+AS
+SELECT 
+ms.IsActive, ms.Created, ms.CreatedBy, ms.Updated, ms.UpdatedBy,
+mp.VALUE, mp.help, (ms.qtyonhand - ms.qtyreserved) AS qtyavailable, ms.qtyonhand, 
+ms.qtyreserved, mp.description, mw.NAME AS warehouse, mw.m_warehouse_id, mw.ad_client_id, 
+mw.ad_org_id, mp.documentnote
+FROM M_STORAGE ms 
+JOIN M_PRODUCT mp ON ms.m_product_id = mp.m_product_id
+JOIN M_LOCATOR ml ON ms.m_locator_id = ml.m_locator_id
+JOIN M_WAREHOUSE mw ON ml.m_warehouse_id = mw.m_warehouse_id 
+ORDER BY mw.NAME
+;
+
+CREATE OR REPLACE VIEW M_PRODUCT_SUBSTITUTERELATED_V AS
+SELECT s.ad_client_id, 
+		s.ad_org_id, 
+		s.isactive, 
+		s.created, 
+		s.createdby, 
+		s.updated, 
+		s.updatedby,
+		s.m_product_id, 
+		s.substitute_id, 
+		'S' AS rowtype,
+		mp.name, 
+		sum(ms.qtyonhand - ms.qtyreserved) AS qtyavailable, 
+		sum(ms.qtyonhand) AS qtyonhand, 
+		sum(ms.qtyreserved) AS qtyreserved,
+		ROUND(MAX(mpr.pricestd),0) AS pricestd, 
+		mpr.m_pricelist_version_id, 
+		mw.m_warehouse_id, 
+		org.name AS orgname
+           FROM m_substitute s
+      JOIN m_storage ms ON ms.m_product_id = s.substitute_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   GROUP BY s.ad_client_id, 
+   			s.ad_org_id, 
+   			s.isactive, 
+   			s.created, 
+   			s.createdby, 
+   			s.updated, 
+   			s.updatedby, 
+   			s.m_product_id, 
+   			s.substitute_id, 
+   			mw.m_warehouse_id, 
+   			mpr.m_pricelist_version_id, 
+   			org.name,  
+   			mp.name
+	UNION 
+         SELECT r.ad_client_id, 
+         	r.ad_org_id, 
+         	r.isactive, 
+         	r.created, 
+         	r.createdby, 
+         	r.updated, 
+         	r.updatedby,
+			r.m_product_id, 
+			r.relatedproduct_id AS substitute_id, 
+			'R' AS rowtype,  
+			mp.name, 
+			sum(ms.qtyonhand - ms.qtyreserved) AS qtyavailable, 
+			sum(ms.qtyonhand) AS qtyonhand, 
+			sum(ms.qtyreserved) AS qtyreserved, 
+			ROUND(MAX(mpr.pricestd),0) AS pricestd, 
+			mpr.m_pricelist_version_id, 
+			mw.m_warehouse_id, 
+			org.name AS orgname
+           FROM m_relatedproduct r
+      JOIN m_storage ms ON ms.m_product_id = r.relatedproduct_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id 
+   GROUP BY r.ad_client_id, 
+   			r.ad_org_id, 
+   			r.isactive, 
+   			r.created, 
+   			r.createdby, 
+   			r.updated, 
+   			r.updatedby, 
+   			r.m_product_id, 
+   			r.relatedproduct_id, 
+   			mw.m_warehouse_id, 
+   			mpr.m_pricelist_version_id, 
+   			org.name,  
+   			mp.name
+;
+
+-- Nov 20, 2012 5:06:02 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET IsParent='Y', IsUpdateable='N', IsToolbarButton='N',Updated=TO_DATE('2012-11-20 17:06:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200640
+;
+
+-- Nov 20, 2012 5:28:27 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET IsMandatory='Y', IsUpdateable='N',Updated=TO_DATE('2012-11-20 17:28:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200640
+;
+
+-- Nov 20, 2012 5:28:36 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+ALTER TABLE M_StorageReservation MODIFY IsSOTrx CHAR(1) DEFAULT 'Y'
+;
+
+-- Nov 20, 2012 5:28:36 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE M_StorageReservation SET IsSOTrx='Y' WHERE IsSOTrx IS NULL
+;
+
+SELECT register_migration_script('201211191100_IDEMPIERE-385_DB.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/oracle/201211211000_IDEMPIERE-163.sql b/migration/i1.0a-release/oracle/201211211000_IDEMPIERE-163.sql
new file mode 100644
index 0000000000..dca3ad6ddf
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211211000_IDEMPIERE-163.sql
@@ -0,0 +1,1296 @@
+SET SQLBLANKLINES ON
+SET DEFINE OFF
+
+-- Nov 20, 2012 10:23:24 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200945,'D',319,'N','N','N',0,'N',1,'N',17,'N',422,'N','Y','322001b2-6cd1-48b1-95c9-3505a8d5b2cc','Y','N','IsUpdateable','Determines, if the field can be updated','Y','The Updatable checkbox indicates if a field can be updated by the user.','Updatable','Y',TO_DATE('2012-11-20 10:23:23','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:23:23','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:23:24 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200945 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:25:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200946,'D',319,'N','N','N',0,'N',1,'N',17,'N',2468,'N','Y','11acfc29-8d0c-41d0-9b55-d6bc9ed0efc5','Y','N','IsAlwaysUpdateable','The column is always updateable, even if the record is not active or processed','N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','Always Updateable','Y',TO_DATE('2012-11-20 10:25:36','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:25:36','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:25:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200946 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:27:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200947,'D','N','N','N',0,'N',2000,'N',14,'N',50074,'N','Y','05b02875-be4b-4b02-8e64-0a2e5f691b30','Y','N','MandatoryLogic','Mandatory Logic','Y',TO_DATE('2012-11-20 10:27:08','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:27:08','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:27:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200947 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:28:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200948,'D','N','N','N',0,'N',2000,'N',14,'N',1663,'N','Y','fa2aef1e-7608-469a-a5ad-b59da47a1bdc','Y','N','ReadOnlyLogic','Logic to determine if field is read only (applies only when field is read-write)','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+\@AD_Table_ID@=14 | @Language@!GERGER <br>
+\@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+\@Name@>J<br>
+Strings may be in single quotes (optional)','Read Only Logic','Y',TO_DATE('2012-11-20 10:28:39','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:28:39','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:28:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200948 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:29:59 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200949,'D',319,'N','N','N',0,'N',1,'N',17,'N',200187,'N','Y','380dff82-a310-4d2a-b338-37c7fbac5cd0','Y','N','IsToolbarButton','Add the column button to the toolbar','Y','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','Toolbar Button','Y',TO_DATE('2012-11-20 10:29:58','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:29:58','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:29:59 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200949 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:31:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD IsUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:31:25 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD IsAlwaysUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:31:42 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD MandatoryLogic NVARCHAR2(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 10:31:55 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD ReadOnlyLogic NVARCHAR2(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 10:32:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD IsToolbarButton CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:34:08 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200946,'Y',200834,'N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','D','The column is always updateable, even if the record is not active or processed','Always Updateable','cf3cb628-3c15-4ce8-ace9-0275dd0b2bf4','Y','N',100,0,TO_DATE('2012-11-20 10:34:07','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 10:34:07','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:08 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200834 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,2000,'N','N',200947,'Y',200835,'N','D','Mandatory Logic','d4b711de-c2d0-4de1-b304-9e340e3eac1b','Y','N',100,0,TO_DATE('2012-11-20 10:34:08','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 10:34:08','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200835 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,2000,'N','N',200948,'Y',200836,'N','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+\@AD_Table_ID@=14 | @Language@!GERGER <br>
+\@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+\@Name@>J<br>
+Strings may be in single quotes (optional)','D','Logic to determine if field is read only (applies only when field is read-write)','Read Only Logic','735d01aa-e36e-414f-a694-8aa158bc710d','Y','N',100,0,TO_DATE('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200836 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200949,'Y',200837,'N','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','D','Add the column button to the toolbar','Toolbar Button','1b7d74f1-710f-42c9-899c-8bd656345be7','Y','N',100,0,TO_DATE('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200837 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200945,'Y',200838,'N','The Updatable checkbox indicates if a field can be updated by the user.','D','Determines, if the field can be updated','Updatable','4e815d13-e435-449c-bd31-3fb1321e3273','Y','N',100,0,TO_DATE('2012-11-20 10:34:10','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 10:34:10','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200838 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=80,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=130
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=90,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5808
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=100,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=4259
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1551
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=132
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=130,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200276
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=140,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=924
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=150, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=270, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=280, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=290, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=300, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=310, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=320, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=330,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=53280
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=340,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200275
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=350,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=360,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=136
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=370,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=139
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=380,Updated=TO_DATE('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200350
+;
+
+-- Nov 20, 2012 10:41:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=390,Updated=TO_DATE('2012-11-20 10:41:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200348
+;
+
+-- Nov 20, 2012 10:41:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=400,Updated=TO_DATE('2012-11-20 10:41:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200349
+;
+
+-- Nov 20, 2012 10:52:45 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200950,'D',319,'N','N','N',0,'N',1,'N',17,'N',2468,'N','Y','c15fad16-44e0-45f3-bad6-59fe05a0fba2','Y','N','IsAlwaysUpdateable','The column is always updateable, even if the record is not active or processed','N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','Always Updateable','Y',TO_DATE('2012-11-20 10:52:44','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:52:44','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:52:45 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200950 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:53:35 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200951,'D','N','N','N',0,'N',2000,'N',14,'N',50074,'N','Y','cc4f018d-8a72-44ba-a331-8f060b451f49','Y','N','MandatoryLogic','Mandatory Logic','Y',TO_DATE('2012-11-20 10:53:34','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:53:34','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:53:35 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200951 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:54:21 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200952,'D','N','N','N',0,'N',2000,'N',14,'N',1663,'N','Y','31667b0e-a034-482b-88b5-c92b02a55eb4','Y','N','ReadOnlyLogic','Logic to determine if field is read only (applies only when field is read-write)','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+\@AD_Table_ID@=14 | @Language@!GERGER <br>
+\@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+\@Name@>J<br>
+Strings may be in single quotes (optional)','Read Only Logic','Y',TO_DATE('2012-11-20 10:54:20','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:54:20','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:54:21 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200952 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:56:34 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200953,'D',4,'N','N','N',0,'N',22,'N',18,115,'N',121,'N','Y','e23e4239-f209-4a8a-8aeb-bf3740f6c849','Y','N','AD_Reference_Value_ID','Required to specify, if data type is Table or List','The Reference Value indicates where the reference values are stored.  It must be specified if the data type is Table or List.  ','Reference Key','Y',TO_DATE('2012-11-20 10:56:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:56:33','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:56:34 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200953 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:57:29 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200954,'D',319,'N','N','N',0,'N',1,'N',17,'N',392,'N','Y','9d2512c0-51ac-410f-87a5-273c8f2a07d8','Y','N','IsMandatory','Data entry is required in this column','The field must have a value for the record to be saved to the database.','Mandatory','Y',TO_DATE('2012-11-20 10:57:28','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:57:28','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:57:29 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200954 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:58:31 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200955,'D','N','N','N',0,'N',10,'N',11,'N',1810,'N','Y','f0cfce31-5e3f-42cc-9c8b-d9f5476472af','Y','N','XPosition','Absolute X (horizontal) position in 1/72 of an inch','1','Absolute X (horizontal) position in 1/72 of an inch','X Position','Y',TO_DATE('2012-11-20 10:58:30','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:58:30','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:58:31 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200955 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:59:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200956,'D','N','N','N',0,'N',10,'N',11,'N',200099,'N','Y','6580f465-df1d-4d26-8140-4d3d898b1695','Y','N','NumLines','Number of lines for a field','1','Number of lines for a field','Number of Lines','Y',TO_DATE('2012-11-20 10:59:36','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 10:59:36','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:59:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200956 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:00:28 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200957,'D','N','N','N',0,'N',10,'N',11,'N',200098,'N','Y','22679939-1059-4656-9d76-12bc8adf2cc3','Y','N','ColumnSpan','Number of column for a box of field','1','Column Span','Y',TO_DATE('2012-11-20 11:00:27','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 11:00:27','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 11:00:28 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200957 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:01:47 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200958,'D',319,'N','N','N',0,'N',1,'N',17,'N',200187,'N','Y','7cb0302c-bfb7-4900-9a26-532115c47d6b','Y','N','IsToolbarButton','Add the column button to the toolbar','Y','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','Toolbar Button','Y',TO_DATE('2012-11-20 11:01:46','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-20 11:01:46','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 11:01:47 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200958 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:02:36 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD IsAlwaysUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:02:52 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD MandatoryLogic NVARCHAR2(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:06 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD ReadOnlyLogic NVARCHAR2(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:23 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD AD_Reference_Value_ID NUMBER(10) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD IsMandatory CHAR(1) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD XPosition NUMBER(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD NumLines NUMBER(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:25 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD ColumnSpan NUMBER(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:42 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD IsToolbarButton CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:07:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,36,'N','N',60530,'Y',200848,'N','D','AD_UserDef_Field_UU','acb689b0-0b6d-43cb-b792-3dc106740640','Y','N',100,0,TO_DATE('2012-11-20 11:07:12','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:12','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200848 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200950,'Y',200849,'N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','D','The column is always updateable, even if the record is not active or processed','Always Updateable','2f360b2b-148a-4682-8e3d-73c670f47597','Y','N',100,0,TO_DATE('2012-11-20 11:07:13','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:13','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200849 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200957,'Y',200850,'N','D','Number of column for a box of field','Column Span','76af747a-9278-4f90-b03b-b40d041c705b','Y','N',100,0,TO_DATE('2012-11-20 11:07:14','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:14','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200850 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200954,'Y',200851,'N','The field must have a value for the record to be saved to the database.','D','Data entry is required in this column','Mandatory','40f3d314-2bf3-41f6-b1bc-8eff6f01e909','Y','N',100,0,TO_DATE('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200851 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,2000,'N','N',200951,'Y',200852,'N','D','Mandatory Logic','1bd15b5f-d46d-42be-9904-d60fd01bc5f2','Y','N',100,0,TO_DATE('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200852 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200956,'Y',200853,'N','Number of lines for a field','D','Number of lines for a field','Number of Lines','28229856-2b06-4788-b1ec-0790477e744f','Y','N',100,0,TO_DATE('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200853 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,2000,'N','N',200952,'Y',200854,'N','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+\@AD_Table_ID@=14 | @Language@!GERGER <br>
+\@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+\@Name@>J<br>
+Strings may be in single quotes (optional)','D','Logic to determine if field is read only (applies only when field is read-write)','Read Only Logic','e744a943-39ab-49c1-8ed2-5fb8ea367a1d','Y','N',100,0,TO_DATE('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200854 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,22,'N','N',200953,'Y',200855,'N','The Reference Value indicates where the reference values are stored.  It must be specified if the data type is Table or List.  ','D','Required to specify, if data type is Table or List','Reference Key','3ba09cfb-d887-46d1-89be-53bc78496bca','Y','N',100,0,TO_DATE('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200855 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200958,'Y',200856,'N','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','D','Add the column button to the toolbar','Toolbar Button','b0e1932a-90e6-4b3c-a9e1-ff78bfbafb31','Y','N',100,0,TO_DATE('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200856 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200955,'Y',200857,'N','Absolute X (horizontal) position in 1/72 of an inch','D','Absolute X (horizontal) position in 1/72 of an inch','X Position','fb9b7e57-2d10-4f71-86c4-aa81635e2bcf','Y','N',100,0,TO_DATE('2012-11-20 11:07:18','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-20 11:07:18','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200857 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET NumLines=3, SeqNo=100,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5052
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=2,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=5,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=130, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200854
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=150, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200849
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=170, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200851
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=180, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=190, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200856
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=200, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET NumLines=3, SeqNo=210, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220, AD_FieldGroup_ID=200000, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230, AD_FieldGroup_ID=200000, IsDisplayed='Y', XPosition=5,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=240, AD_FieldGroup_ID=200001, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=250, AD_FieldGroup_ID=200001, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=260, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=0, IsDisplayed='N', XPosition=1,Updated=TO_DATE('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200848
+;
+
+-- Nov 20, 2012 11:28:00 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+CREATE OR REPLACE VIEW AD_FIELD_V AS
+  SELECT t.AD_Window_ID, f.AD_Tab_ID, f.AD_Field_ID, tbl.AD_Table_ID, f.AD_Column_ID,
+ f.NAME, f.Description, f.Help, f.IsDisplayed, f.DisplayLogic, f.DisplayLength,
+ f.SeqNo, f.SortNo, f.IsSameLine, f.IsHeading, f.IsFieldOnly, f.IsReadOnly,
+ f.IsEncrypted AS IsEncryptedField, f.ObscureType,
+ c.ColumnName, c.ColumnSQL, c.FieldLength, c.VFormat,
+ COALESCE(f.DefaultValue, c.DefaultValue) AS DefaultValue,
+ c.IsKey, c.IsParent,
+ COALESCE(f.IsMandatory, c.IsMandatory) AS IsMandatory,
+    c.IsIdentifier, c.IsTranslated, COALESCE(f.AD_Reference_Value_ID, c.AD_Reference_Value_ID) AS AD_Reference_Value_ID,
+ c.Callout, COALESCE(f.AD_Reference_ID, c.AD_Reference_ID) AS AD_Reference_ID,
+    COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) AS AD_Val_Rule_ID, c.AD_Process_ID,
+ COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable,
+ COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic,
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic,
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, c.IsEncrypted AS IsEncryptedColumn,
+    c.IsSelectionColumn,
+ tbl.TableName, c.ValueMin, c.ValueMax,
+ fg.NAME AS FieldGroup, vr.Code AS ValidationCode,
+ f.Included_Tab_ID, fg.FieldGroupType, fg.IsCollapsedByDefault,
+ COALESCE(f.InfoFactoryClass, c.InfoFactoryClass) as InfoFactoryClass,
+ c.IsAutocomplete, COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
+        f.isdisplayedgrid,
+        f.seqnogrid,
+        c.seqnoselection, f.xposition, f.columnspan, f.numlines,
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
+FROM AD_FIELD f
+  INNER JOIN AD_TAB t ON (f.AD_Tab_ID = t.AD_Tab_ID)
+  LEFT OUTER JOIN AD_FIELDGROUP fg ON (f.AD_FieldGroup_ID = fg.AD_FieldGroup_ID)
+  LEFT OUTER JOIN AD_COLUMN c ON (f.AD_Column_ID = c.AD_Column_ID)
+ INNER JOIN AD_TABLE tbl ON (c.AD_Table_ID = tbl.AD_Table_ID)
+ LEFT OUTER JOIN AD_VAL_RULE vr ON (vr.AD_Val_Rule_ID = COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID))
+WHERE f.IsActive = 'Y'
+  AND c.IsActive = 'Y';
+
+-- Nov 20, 2012 11:28:00 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+CREATE OR REPLACE VIEW AD_FIELD_VT AS
+    SELECT trl.AD_LANGUAGE, t.AD_Window_ID, f.AD_Tab_ID, f.AD_Field_ID, tbl.AD_Table_ID, f.AD_Column_ID,
+   trl.NAME, trl.Description, trl.Help, f.IsDisplayed, f.DisplayLogic, f.DisplayLength,
+   f.SeqNo, f.SortNo, f.IsSameLine, f.IsHeading, f.IsFieldOnly, f.IsReadOnly,
+   f.IsEncrypted AS IsEncryptedField, f.ObscureType,
+   c.ColumnName, c.ColumnSQL, c.FieldLength, c.VFormat,
+   COALESCE(f.DefaultValue, c.DefaultValue) AS DefaultValue,
+   c.IsKey, c.IsParent,
+   COALESCE(f.IsMandatory, c.IsMandatory) AS IsMandatory,
+      c.IsIdentifier, c.IsTranslated, COALESCE(f.AD_Reference_Value_ID, c.AD_Reference_Value_ID) AS AD_Reference_Value_ID,
+   c.Callout, COALESCE(f.AD_Reference_ID, c.AD_Reference_ID) AS AD_Reference_ID,
+      COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID) as AD_Val_Rule_ID, c.AD_Process_ID,
+   COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable,
+   COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic,
+   COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic,
+   COALESCE(f.isupdateable, c.isupdateable) AS isupdateable, c.IsEncrypted AS IsEncryptedColumn, c.IsSelectionColumn,
+   tbl.TableName, c.ValueMin, c.ValueMax,
+   fgt.NAME AS FieldGroup, vr.Code AS ValidationCode,
+   f.Included_Tab_ID, fg.FieldGroupType, fg.IsCollapsedByDefault,
+   COALESCE(f.InfoFactoryClass, c.InfoFactoryClass) as InfoFactoryClass,
+   c.IsAutocomplete, COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
+        f.isdisplayedgrid,
+        f.seqnogrid,
+        c.seqnoselection, f.xposition, f.columnspan, f.numlines,
+  COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
+  FROM AD_FIELD f
+   INNER JOIN AD_FIELD_TRL trl ON (f.AD_Field_ID = trl.AD_Field_ID)
+    INNER JOIN AD_TAB t ON (f.AD_Tab_ID = t.AD_Tab_ID)
+    LEFT OUTER JOIN AD_FIELDGROUP fg ON (f.AD_FieldGroup_ID = fg.AD_FieldGroup_ID)
+    LEFT OUTER JOIN AD_FIELDGROUP_TRL fgt ON
+   (f.AD_FieldGroup_ID = fgt.AD_FieldGroup_ID AND trl.AD_LANGUAGE=fgt.AD_LANGUAGE)
+    LEFT OUTER JOIN AD_COLUMN c ON (f.AD_Column_ID = c.AD_Column_ID)
+   INNER JOIN AD_TABLE tbl ON (c.AD_Table_ID = tbl.AD_Table_ID)
+   LEFT OUTER JOIN AD_VAL_RULE vr ON (vr.AD_Val_Rule_ID=COALESCE(f.AD_Val_Rule_ID, c.AD_Val_Rule_ID))
+  WHERE f.IsActive = 'Y'
+  AND c.IsActive = 'Y';
+
+-- Nov 20, 2012 12:13:04 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_FieldGroup (FieldGroupType,EntityType,IsCollapsedByDefault,Name,AD_FieldGroup_UU,AD_FieldGroup_ID,AD_Client_ID,Created,CreatedBy,Updated,AD_Org_ID,UpdatedBy,IsActive) VALUES ('C','D','N','Overwritten From Column','a0d14c47-fa7e-4286-9818-e684e87171d7',200004,0,TO_DATE('2012-11-20 12:13:03','YYYY-MM-DD HH24:MI:SS'),100,TO_DATE('2012-11-20 12:13:03','YYYY-MM-DD HH24:MI:SS'),0,100,'Y')
+;
+
+-- Nov 20, 2012 12:13:04 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_FieldGroup_Trl (AD_Language,AD_FieldGroup_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_FieldGroup_Trl_UU ) SELECT l.AD_Language,t.AD_FieldGroup_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_FieldGroup t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_FieldGroup_ID=200004 AND NOT EXISTS (SELECT * FROM AD_FieldGroup_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_FieldGroup_ID=t.AD_FieldGroup_ID)
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=2,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=142
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=150,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=924
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=170,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=137
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=180,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200274
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=190,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=138
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=200,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=8343
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=140
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=141
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=53280
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200275
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=260, IsDisplayed='Y', XPosition=2,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=270, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=280, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=290, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=300, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=310, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=320, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=330, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=340, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=350, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 21, 2012 10:43:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=28',Updated=TO_DATE('2012-11-21 10:43:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 21, 2012 10:43:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=17 | @AD_Reference_ID@=18 | @AD_Reference_ID@=30 | @AD_Reference_ID@=28',Updated=TO_DATE('2012-11-21 11:50:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 21, 2012 11:58:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=28',Updated=TO_DATE('2012-11-21 11:58:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200856
+;
+
+-- Nov 21, 2012 2:18:12 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200959,'D',1,'N','N','N',0,'N',10,'N',18,'N',120,'N','Y','81b17412-3ebc-4191-b0b1-050dfbdcc3d4','Y','N','AD_Reference_ID','System Reference and Validation','The Reference could be a display type, list or table validation.','Reference','Y',TO_DATE('2012-11-21 14:18:11','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_DATE('2012-11-21 14:18:11','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 21, 2012 2:18:12 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200959 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 21, 2012 2:19:09 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD AD_Reference_ID NUMBER(10) DEFAULT NULL 
+;
+
+-- Nov 21, 2012 2:23:17 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200959,'Y',200858,'N','The Reference could be a display type, list or table validation.','D','System Reference and Validation','Reference','2e669f8a-65f1-46e4-a5c1-1a4edef9421f','Y','N',100,0,TO_DATE('2012-11-21 14:23:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_DATE('2012-11-21 14:23:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 21, 2012 2:23:17 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200858 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=180, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=200,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_DATE('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 21, 2012 2:28:56 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET IsCentrallyMaintained='N', Help='You can overwrite the Display Type, but only use this if you aware of the consequences.', AD_FieldGroup_ID=200004, Description='System Reference - optional Overwrite', Name='Reference Overwrite',Updated=TO_DATE('2012-11-21 14:28:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 2:28:56 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 3:46:11 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field MODIFY DisplayLogic NVARCHAR2(2000) DEFAULT NULL 
+;
+
+-- Nov 21, 2012 3:46:11 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+-- ALTER TABLE AD_UserDef_Field MODIFY DisplayLogic NULL
+-- ;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Element SET Name='Always Updatable', PrintName='Always Updatable',Updated=TO_DATE('2012-11-22 15:31:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Element_Trl SET IsTranslated='N' WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Process_Para SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.', AD_Element_ID=2468 WHERE UPPER(ColumnName)='ISALWAYSUPDATEABLE' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Process_Para SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Element_ID=2468 AND IsCentrallyMaintained='Y'
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=2468) AND IsCentrallyMaintained='Y'
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_PrintFormatItem pi SET PrintName='Always Updatable', Name='Always Updatable' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=pi.AD_Column_ID AND c.AD_Element_ID=2468)
+;
+
+-- Nov 22, 2012 3:38:25 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_DATE('2012-11-22 15:38:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6349
+;
+
+-- Nov 22, 2012 3:39:51 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_DATE('2012-11-22 15:39:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6352
+;
+
+-- Nov 22, 2012 3:40:28 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_DATE('2012-11-22 15:40:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6356
+;
+
+-- Nov 22, 2012 3:42:22 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, AD_Reference_ID=17,Updated=TO_DATE('2012-11-22 15:42:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6353
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=90, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5050
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=2,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=200, IsDisplayed='Y', XPosition=2,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=142
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=8343
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=140
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=230,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=141
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=280,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=290,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=300,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=310,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=320,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=330, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 23, 2012 12:37:33 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 12:37:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200350
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200348
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=280, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200349
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=290,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=300,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=310,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=320,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=330,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=340,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=350,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=360,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=370,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=380,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=390,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=136
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=400,Updated=TO_DATE('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=139
+;
+
+-- Nov 23, 2012 12:38:25 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_FieldGroup SET FieldGroupType='C', IsCollapsedByDefault='Y',Updated=TO_DATE('2012-11-23 12:38:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_FieldGroup_ID=200000
+;
+
+update ad_field set seqnogrid=seqno where ad_tab_id=107
+;
+
+-- hide org field on grid for system only windows (all org=0 in this case)
+update ad_field set isdisplayedgrid='N'
+where ad_column_id in (select ad_column_id from ad_column where ad_element_id=113) /* ad_org_id */
+and ad_field_id < 1000000
+and ad_column_id in (select c.ad_column_id from ad_column c join ad_table t on t.ad_table_id=c.ad_table_id where t.accesslevel='4')
+;
+
+-- Nov 23, 2012 12:46:44 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:46:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200946
+;
+
+-- Nov 23, 2012 12:48:19 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:48:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200949
+;
+
+-- Nov 23, 2012 12:48:38 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:48:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200945
+;
+
+-- Nov 23, 2012 12:50:37 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:50:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200950
+;
+
+-- Nov 23, 2012 12:51:12 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:51:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200955
+;
+
+-- Nov 23, 2012 12:52:07 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:52:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200956
+;
+
+-- Nov 23, 2012 12:52:50 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:52:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200957
+;
+
+-- Nov 23, 2012 12:53:54 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 12:53:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200958
+;
+
+-- Nov 23, 2012 1:04:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 13:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6349
+;
+
+-- Nov 23, 2012 1:04:40 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsDisplayed CHAR(1) DEFAULT NULL 
+;
+
+-- Nov 23, 2012 1:04:41 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsDisplayed NULL
+;
+
+-- Nov 23, 2012 1:05:41 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 13:05:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6352
+;
+
+-- Nov 23, 2012 1:05:44 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsReadOnly CHAR(1) DEFAULT NULL 
+;
+
+-- Nov 23, 2012 1:05:45 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsReadOnly NULL
+;
+
+-- Nov 23, 2012 1:06:07 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_DATE('2012-11-23 13:06:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6356
+;
+
+-- Nov 23, 2012 1:06:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsSameLine CHAR(1) DEFAULT NULL 
+;
+
+-- Nov 23, 2012 1:06:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+ALTER TABLE AD_UserDef_Field MODIFY IsSameLine NULL
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=70, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5049
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=80,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5044
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=100, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=110,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5052
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5056
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=130, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5055
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=150, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=160, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=170, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=210, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=220, IsDisplayed='Y', XPosition=4,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200849
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=230, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200851
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=240, IsDisplayed='Y', XPosition=1,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200854
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_DATE('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+SELECT register_migration_script('201211211000_IDEMPIERE-163.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/oracle/201211231024_IDEMPIERE-369_ReorgTabs.sql b/migration/i1.0a-release/oracle/201211231024_IDEMPIERE-369_ReorgTabs.sql
new file mode 100644
index 0000000000..50fdce3e77
--- /dev/null
+++ b/migration/i1.0a-release/oracle/201211231024_IDEMPIERE-369_ReorgTabs.sql
@@ -0,0 +1,428 @@
+-- Nov 16, 2012 2:47:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 14:47:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53210
+;
+
+-- Nov 16, 2012 2:47:13 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 14:47:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=331
+;
+
+-- Nov 16, 2012 2:49:20 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 14:49:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=549
+;
+
+-- Nov 16, 2012 2:49:27 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 14:49:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=136
+;
+
+-- Nov 16, 2012 2:49:33 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 14:49:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=215
+;
+
+-- Nov 16, 2012 2:50:55 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 14:50:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=557
+;
+
+-- Nov 16, 2012 2:51:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 14:51:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=127
+;
+
+-- Nov 16, 2012 2:56:23 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 14:56:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=303
+;
+
+-- Nov 16, 2012 2:56:28 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 14:56:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=309
+;
+
+-- Nov 16, 2012 2:59:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 14:59:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=233
+;
+
+-- Nov 16, 2012 2:59:10 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 14:59:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=503
+;
+
+-- Nov 16, 2012 3:01:47 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_DATE('2012-11-16 15:01:47','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=171
+;
+
+-- Nov 16, 2012 3:01:51 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:01:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=104
+;
+
+-- Nov 16, 2012 3:01:56 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:01:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=172
+;
+
+-- Nov 16, 2012 3:02:00 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:02:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=103
+;
+
+-- Nov 16, 2012 3:02:05 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_DATE('2012-11-16 15:02:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=773
+;
+
+-- Nov 16, 2012 3:08:20 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:08:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=246
+;
+
+-- Nov 16, 2012 3:08:29 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:08:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=247
+;
+
+-- Nov 16, 2012 3:08:36 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:08:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=248
+;
+
+-- Nov 16, 2012 3:08:40 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_DATE('2012-11-16 15:08:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=308
+;
+
+-- Nov 16, 2012 3:10:04 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:10:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=101
+;
+
+-- Nov 16, 2012 3:10:10 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:10:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=681
+;
+
+-- Nov 16, 2012 3:10:13 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:10:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53298
+;
+
+-- Nov 16, 2012 3:10:17 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_DATE('2012-11-16 15:10:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53069
+;
+
+-- Nov 16, 2012 3:10:21 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_DATE('2012-11-16 15:10:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=673
+;
+
+-- Nov 16, 2012 3:11:11 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:11:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=333
+;
+
+-- Nov 16, 2012 3:11:15 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:11:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=640
+;
+
+-- Nov 16, 2012 3:11:19 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:11:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=458
+;
+
+-- Nov 16, 2012 3:12:02 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:12:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=134
+;
+
+-- Nov 16, 2012 3:12:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:12:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=273
+;
+
+-- Nov 16, 2012 3:13:49 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:13:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=106
+;
+
+-- Nov 16, 2012 3:13:53 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:13:53','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=116
+;
+
+-- Nov 16, 2012 3:13:57 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:13:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=430
+;
+
+-- Nov 16, 2012 3:14:04 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_DATE('2012-11-16 15:14:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200009
+;
+
+-- Nov 16, 2012 3:14:08 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_DATE('2012-11-16 15:14:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=107
+;
+
+-- Nov 16, 2012 3:14:25 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_DATE('2012-11-16 15:14:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=115
+;
+
+-- Nov 16, 2012 3:14:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=80,Updated=TO_DATE('2012-11-16 15:14:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200028
+;
+
+-- Nov 16, 2012 3:14:34 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=90,Updated=TO_DATE('2012-11-16 15:14:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=117
+;
+
+-- Nov 16, 2012 3:14:39 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=100,Updated=TO_DATE('2012-11-16 15:14:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=311
+;
+
+-- Nov 16, 2012 3:17:02 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:17:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=107
+;
+
+-- Nov 16, 2012 3:17:24 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_DATE('2012-11-16 15:17:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=116
+;
+
+-- Nov 16, 2012 3:17:28 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_DATE('2012-11-16 15:17:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=115
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N' WHERE AD_Field_ID=275
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N' WHERE AD_Field_ID=6432
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=10,IsDisplayedGrid='Y' WHERE AD_Field_ID=1990
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=20,IsDisplayedGrid='Y' WHERE AD_Field_ID=126
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=30,IsDisplayedGrid='Y' WHERE AD_Field_ID=127
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=40,IsDisplayedGrid='Y' WHERE AD_Field_ID=128
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=50,IsDisplayedGrid='Y' WHERE AD_Field_ID=129
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=60,IsDisplayedGrid='Y' WHERE AD_Field_ID=274
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=70,IsDisplayedGrid='Y' WHERE AD_Field_ID=130
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=80,IsDisplayedGrid='Y' WHERE AD_Field_ID=5808
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=90,IsDisplayedGrid='Y' WHERE AD_Field_ID=4259
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=100,IsDisplayedGrid='Y' WHERE AD_Field_ID=1551
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=110,IsDisplayedGrid='Y' WHERE AD_Field_ID=132
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=120,IsDisplayedGrid='Y' WHERE AD_Field_ID=200276
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=130,IsDisplayedGrid='Y' WHERE AD_Field_ID=924
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=140,IsDisplayedGrid='Y' WHERE AD_Field_ID=133
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=150,IsDisplayedGrid='Y' WHERE AD_Field_ID=136
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=160,IsDisplayedGrid='Y' WHERE AD_Field_ID=142
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=170,IsDisplayedGrid='Y' WHERE AD_Field_ID=137
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=180,IsDisplayedGrid='Y' WHERE AD_Field_ID=200274
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=190,IsDisplayedGrid='Y' WHERE AD_Field_ID=139
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=200,IsDisplayedGrid='Y' WHERE AD_Field_ID=138
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=210,IsDisplayedGrid='Y' WHERE AD_Field_ID=8343
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=220,IsDisplayedGrid='Y' WHERE AD_Field_ID=140
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=230,IsDisplayedGrid='Y' WHERE AD_Field_ID=141
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=240,IsDisplayedGrid='Y' WHERE AD_Field_ID=13425
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=250,IsDisplayedGrid='Y' WHERE AD_Field_ID=54401
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=260,IsDisplayedGrid='Y' WHERE AD_Field_ID=54402
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=270,IsDisplayedGrid='Y' WHERE AD_Field_ID=13424
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=280,IsDisplayedGrid='Y' WHERE AD_Field_ID=62468
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=290,IsDisplayedGrid='Y' WHERE AD_Field_ID=200771
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=300,IsDisplayedGrid='Y' WHERE AD_Field_ID=53280
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=310,IsDisplayedGrid='Y' WHERE AD_Field_ID=200275
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=320,IsDisplayedGrid='Y' WHERE AD_Field_ID=200350
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=330,IsDisplayedGrid='Y' WHERE AD_Field_ID=200348
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=340,IsDisplayedGrid='Y' WHERE AD_Field_ID=200349
+;
+
+-- Nov 16, 2012 3:25:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_DATE('2012-11-16 15:25:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=149
+;
+
+-- Nov 16, 2012 3:25:34 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=80,Updated=TO_DATE('2012-11-16 15:25:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=312
+;
+
+-- Nov 16, 2012 3:25:38 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_DATE('2012-11-16 15:25:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=122
+;
+
+-- Nov 16, 2012 3:25:43 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_DATE('2012-11-16 15:25:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=577
+;
+
+-- Nov 16, 2012 3:25:46 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_DATE('2012-11-16 15:25:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=123
+;
+
+-- Nov 16, 2012 3:25:51 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_DATE('2012-11-16 15:25:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=124
+;
+
+-- Nov 16, 2012 3:25:55 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_DATE('2012-11-16 15:25:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=644
+;
+
+SELECT register_migration_script('201211231024_IDEMPIERE-369_ReorgTabs.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211141732_IDEMPIERE-385_m_storage.sql b/migration/i1.0a-release/postgresql/201211141732_IDEMPIERE-385_m_storage.sql
new file mode 100644
index 0000000000..b74f801e54
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211141732_IDEMPIERE-385_m_storage.sql
@@ -0,0 +1,379 @@
+-- Oct 16, 2012 11:14:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table (IsSecurityEnabled,AccessLevel,LoadSeq,AD_Table_ID,IsHighVolume,IsView,IsChangeLog,EntityType,IsCentrallyMaintained,IsDeleteable,ReplicationType,TableName,Name,AD_Client_ID,IsActive,AD_Org_ID,CreatedBy,Updated,UpdatedBy,Created) VALUES ('N','3',145,200026,'N','N','N','U','Y','N','L','M_StorageOnHand','M_StorageOnHand',0,'Y',0,100,TO_TIMESTAMP('2012-10-16 11:14:30','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2012-10-16 11:14:30','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 16, 2012 11:14:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table_Trl (AD_Language,AD_Table_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Table_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Table t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Table_ID=200026 AND NOT EXISTS (SELECT * FROM AD_Table_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Table_ID=t.AD_Table_ID)
+;
+
+-- Oct 16, 2012 11:14:34 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Sequence (IncrementNo,StartNewYear,CurrentNextSys,IsTableID,CreatedBy,StartNo,CurrentNext,IsAudited,IsAutoSequence,AD_Sequence_ID,Description,Name,AD_Org_ID,AD_Client_ID,Updated,UpdatedBy,Created,IsActive) VALUES (1,'N',200000,'Y',100,1000000,1000000,'N','Y',200026,'Table M_StorageOnHand','M_StorageOnHand',0,0,TO_TIMESTAMP('2012-10-16 11:14:31','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2012-10-16 11:14:31','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Oct 16, 2012 11:14:41 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Client_ID@',200026,200614,'U',1,'Y','N','N','A Client is a company or a legal entity. You cannot share data between Clients. Tenant is a synonym for Client.','N',22,'N',19,'N',129,'N',102,'N','Y','N','N','N','AD_Client_ID','Client/Tenant for this installation.','Client','N',100,TO_TIMESTAMP('2012-10-16 11:14:40','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:40','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:41 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200614 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:42 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Org_ID@',200026,200615,'U',1,'Y','N','N','An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations.','N',22,'N',19,'N',130,'N',113,'N','Y','N','N','N','AD_Org_ID','Organizational entity within client','Organization','N',100,TO_TIMESTAMP('2012-10-16 11:14:41','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:41','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:42 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200615 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:45 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200616,'U',1,'Y','N','N','The Created field indicates the date that this record was created.','N',7,'N',16,'N','N',245,'N','Y','N','N','N','Created','Date this record was created','Created','N',100,TO_TIMESTAMP('2012-10-16 11:14:42','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:42','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:45 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200616 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:46 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200617,'U',1,110,'Y','N','N','The Created By field indicates the user who created this record.','N',22,'N',18,'N','N',246,'N','Y','N','N','N','CreatedBy','User who created this records','Created By','N',100,TO_TIMESTAMP('2012-10-16 11:14:45','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:45','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:46 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200617 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:48 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200618,'U',1,'N','N','N','The Date Last Inventory Count indicates the last time an Inventory count was done.','N',7,'N',15,'N','N',1088,'N','Y','N','Y','N','DateLastInventory','Date of Last Inventory Count','Date last inventory count','Y',100,TO_TIMESTAMP('2012-10-16 11:14:46','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:46','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:48 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200618 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:50 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200026,200619,'U',1,'Y','N','N','There are two methods of making records unavailable in the system: One is to delete the record, the other is to de-activate the record. A de-activated record is not available for selection, but available for reports.
+There are two reasons for de-activating and not deleting records:
+(1) The system requires the record for audit purposes.
+(2) The record is referenced by other records. E.g., you cannot delete a Business Partner, if there are invoices for this partner record existing. You de-activate the Business Partner and prevent that this record is used for future entries.','N',1,'N',20,'N','N',348,'N','Y','N','N','N','IsActive','The record is active in the system','Active','N',100,TO_TIMESTAMP('2012-10-16 11:14:48','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:48','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:50 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200619 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:51 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200620,'U',1,'Y','N','N',0,'The values of the actual Product Attribute Instances.  The product level attributes are defined on Product level.','Y',22,'N',35,'N','N',2019,'N','Y','N','N','N','M_AttributeSetInstance_ID','Product Attribute Set Instance','Attribute Set Instance','Y',100,TO_TIMESTAMP('2012-10-16 11:14:50','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:50','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:51 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200620 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200621,'U',1,'Y','N','N','The Locator indicates where in a Warehouse a product is located.','Y',22,'N',31,'N','N',448,'N','Y','N','N','N','M_Locator_ID','Warehouse Locator','Locator','Y',100,TO_TIMESTAMP('2012-10-16 11:14:51','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:51','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200621 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200622,'U',1,'Y','N','N','Identifies an item which is either purchased or sold in this organization.','Y',22,'N',30,'N',231,'N',454,'N','Y','N','N','N','M_Product_ID','Product, Service, Item','Product','Y',100,TO_TIMESTAMP('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:52 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200622 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:53 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200623,'U',1,'Y','N','N','The On Hand Quantity indicates the quantity of a product that is on hand in a warehouse.','N',22,'N',29,'N','N',530,'N','Y','N','N','N','QtyOnHand','On Hand Quantity','On Hand Quantity','Y',100,TO_TIMESTAMP('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:52','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:53 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200623 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:55 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200624,'U',1,'Y','N','N','The Ordered Quantity indicates the quantity of a product that was ordered.','N',22,'N',29,'N','N',531,'N','Y','N','N','N','QtyOrdered','Ordered Quantity','Ordered Quantity','Y',100,TO_TIMESTAMP('2012-10-16 11:14:53','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:53','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:55 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200624 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200625,'U',1,'Y','N','N','The Reserved Quantity indicates the quantity of a product that is currently reserved.','N',22,'N',29,'N','N',532,'N','Y','N','N','N','QtyReserved','Reserved Quantity','Reserved Quantity','Y',100,TO_TIMESTAMP('2012-10-16 11:14:55','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:55','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200625 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200626,'U',1,'Y','N','N','The Updated field indicates the date that this record was updated.','N',7,'N',16,'N','N',607,'N','Y','N','N','N','Updated','Date this record was updated','Updated','N',100,TO_TIMESTAMP('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:56 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200626 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:14:57 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200026,200627,'U',1,110,'Y','N','N','The Updated By field indicates the user who updated this record.','N',22,'N',18,'N','N',608,'N','Y','N','N','N','UpdatedBy','User who updated this records','Updated By','N',100,TO_TIMESTAMP('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:14:56','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:14:57 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200627 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column_Trl WHERE AD_Column_ID=200624
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column WHERE AD_Column_ID=200624
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column_Trl WHERE AD_Column_ID=200625
+;
+
+-- Oct 16, 2012 11:15:19 AM WIT
+-- Resolve M_Storage locking and data consistency
+DELETE FROM AD_Column WHERE AD_Column_ID=200625
+;
+
+-- Oct 16, 2012 11:15:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+CREATE TABLE M_StorageOnHand (AD_Client_ID NUMERIC(10) NOT NULL, AD_Org_ID NUMERIC(10) NOT NULL, Created TIMESTAMP NOT NULL, CreatedBy NUMERIC(10) NOT NULL, DateLastInventory TIMESTAMP DEFAULT NULL , IsActive CHAR(1) DEFAULT 'Y' CHECK (IsActive IN ('Y','N')) NOT NULL, M_AttributeSetInstance_ID NUMERIC(10) NOT NULL, M_Locator_ID NUMERIC(10) NOT NULL, M_Product_ID NUMERIC(10) NOT NULL, QtyOnHand NUMERIC NOT NULL, Updated TIMESTAMP NOT NULL, UpdatedBy NUMERIC(10) NOT NULL, CONSTRAINT M_StorageOnHand_Key PRIMARY KEY (M_AttributeSetInstance_ID, M_Locator_ID, M_Product_ID))
+;
+
+-- Oct 16, 2012 11:16:16 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table (IsSecurityEnabled,AccessLevel,LoadSeq,AD_Table_ID,IsHighVolume,IsView,IsChangeLog,EntityType,IsCentrallyMaintained,IsDeleteable,ReplicationType,TableName,Name,AD_Client_ID,IsActive,AD_Org_ID,CreatedBy,Updated,UpdatedBy,Created) VALUES ('N','3',145,200027,'N','N','N','U','Y','N','L','M_StorageReservation','M_StorageReservation',0,'Y',0,100,TO_TIMESTAMP('2012-10-16 11:16:15','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2012-10-16 11:16:15','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 16, 2012 11:16:16 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Table_Trl (AD_Language,AD_Table_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Table_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Table t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Table_ID=200027 AND NOT EXISTS (SELECT * FROM AD_Table_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Table_ID=t.AD_Table_ID)
+;
+
+-- Oct 16, 2012 11:16:17 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Sequence (IncrementNo,StartNewYear,CurrentNextSys,IsTableID,CreatedBy,StartNo,CurrentNext,IsAudited,IsAutoSequence,AD_Sequence_ID,Description,Name,AD_Org_ID,AD_Client_ID,Updated,UpdatedBy,Created,IsActive) VALUES (1,'N',200000,'Y',100,1000000,1000000,'N','Y',200027,'Table M_StorageReservation','M_StorageReservation',0,0,TO_TIMESTAMP('2012-10-16 11:16:16','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2012-10-16 11:16:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Client_ID@',200027,200628,'U',1,'Y','N','N','A Client is a company or a legal entity. You cannot share data between Clients. Tenant is a synonym for Client.','N',22,'N',19,'N',129,'N',102,'N','Y','N','N','N','AD_Client_ID','Client/Tenant for this installation.','Client','N',100,TO_TIMESTAMP('2012-10-16 11:16:23','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:23','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200628 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('@AD_Org_ID@',200027,200629,'U',1,'Y','N','N','An organization is a unit of your client or legal entity - examples are store, department. You can share data between organizations.','N',22,'N',19,'N',130,'N',113,'N','Y','N','N','N','AD_Org_ID','Organizational entity within client','Organization','N',100,TO_TIMESTAMP('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:24 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200629 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:25 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200630,'U',1,'Y','N','N','The Created field indicates the date that this record was created.','N',7,'N',16,'N','N',245,'N','Y','N','N','N','Created','Date this record was created','Created','N',100,TO_TIMESTAMP('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:25 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200630 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:26 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200631,'U',1,110,'Y','N','N','The Created By field indicates the user who created this record.','N',22,'N',18,'N','N',246,'N','Y','N','N','N','CreatedBy','User who created this records','Created By','N',100,TO_TIMESTAMP('2012-10-16 11:16:25','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:25','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:26 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200631 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200632,'U',1,'N','N','N','The Date Last Inventory Count indicates the last time an Inventory count was done.','N',7,'N',15,'N','N',1088,'N','Y','N','Y','N','DateLastInventory','Date of Last Inventory Count','Date last inventory count','Y',100,TO_TIMESTAMP('2012-10-16 11:16:26','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:26','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200632 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200027,200633,'U',1,'Y','N','N','There are two methods of making records unavailable in the system: One is to delete the record, the other is to de-activate the record. A de-activated record is not available for selection, but available for reports.
+There are two reasons for de-activating and not deleting records:
+(1) The system requires the record for audit purposes.
+(2) The record is referenced by other records. E.g., you cannot delete a Business Partner, if there are invoices for this partner record existing. You de-activate the Business Partner and prevent that this record is used for future entries.','N',1,'N',20,'N','N',348,'N','Y','N','N','N','IsActive','The record is active in the system','Active','N',100,TO_TIMESTAMP('2012-10-16 11:16:28','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:28','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200633 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200634,'U',1,'Y','N','N',0,'The values of the actual Product Attribute Instances.  The product level attributes are defined on Product level.','Y',22,'N',35,'N','N',2019,'N','Y','N','N','N','M_AttributeSetInstance_ID','Product Attribute Set Instance','Attribute Set Instance','Y',100,TO_TIMESTAMP('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:29 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200634 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:30 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200635,'U',1,'Y','N','N','The Locator indicates where in a Warehouse a product is located.','Y',22,'N',31,'N','N',448,'N','Y','N','N','N','M_Locator_ID','Warehouse Locator','Locator','Y',100,TO_TIMESTAMP('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:29','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:30 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200635 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200636,'U',1,'Y','N','N','Identifies an item which is either purchased or sold in this organization.','Y',22,'N',30,'N',231,'N',454,'N','Y','N','N','N','M_Product_ID','Product, Service, Item','Product','Y',100,TO_TIMESTAMP('2012-10-16 11:16:30','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:30','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:31 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200636 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200637,'U',1,'Y','N','N','The On Hand Quantity indicates the quantity of a product that is on hand in a warehouse.','N',22,'N',29,'N','N',530,'N','Y','N','N','N','QtyOnHand','On Hand Quantity','On Hand Quantity','Y',100,TO_TIMESTAMP('2012-10-16 11:16:31','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:31','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:32 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200637 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200638,'U',1,'Y','N','N','The Updated field indicates the date that this record was updated.','N',7,'N',16,'N','N',607,'N','Y','N','N','N','Updated','Date this record was updated','Updated','N',100,TO_TIMESTAMP('2012-10-16 11:16:32','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:32','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200638 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (200027,200639,'U',1,110,'Y','N','N','The Updated By field indicates the user who updated this record.','N',22,'N',18,'N','N',608,'N','Y','N','N','N','UpdatedBy','User who updated this records','Updated By','N',100,TO_TIMESTAMP('2012-10-16 11:16:33','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:16:33','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:16:33 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200639 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET Help='The Quantity indicates the number of a specific product or item for this document.', AD_Element_ID=526, ColumnName='Qty', Description='Quantity', Name='Quantity',Updated=TO_TIMESTAMP('2012-10-16 11:17:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200637
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column_Trl SET IsTranslated='N' WHERE AD_Column_ID=200637
+;
+
+-- Oct 16, 2012 11:17:01 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Field SET Name='Quantity', Description='Quantity', Help='The Quantity indicates the number of a specific product or item for this document.' WHERE AD_Column_ID=200637 AND IsCentrallyMaintained='Y'
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET Help='The Warehouse identifies a unique Warehouse where products are stored or Services are provided.', AD_Element_ID=459, IsUpdateable='N', ColumnName='M_Warehouse_ID', Description='Storage Warehouse and Service Point', Name='Warehouse',Updated=TO_TIMESTAMP('2012-10-16 11:17:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column_Trl SET IsTranslated='N' WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:12 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Field SET Name='Warehouse', Description='Storage Warehouse and Service Point', Help='The Warehouse identifies a unique Warehouse where products are stored or Services are provided.' WHERE AD_Column_ID=200635 AND IsCentrallyMaintained='Y'
+;
+
+-- Oct 16, 2012 11:17:20 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Reference_ID=19, IsUpdateable='N',Updated=TO_TIMESTAMP('2012-10-16 11:17:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:17:35 AM WIT
+-- Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Val_Rule_ID=189, IsUpdateable='N',Updated=TO_TIMESTAMP('2012-10-16 11:17:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200635
+;
+
+-- Oct 16, 2012 11:18:05 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (DefaultValue,AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,Help,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES ('Y',200027,200640,'U',0,'N','N','N',0,'The Sales Transaction checkbox indicates if this item is a Sales Transaction.','N',1,'N',20,'N','N',1106,'N','Y','N','Y','N','IsSOTrx','This is a Sales Transaction','Sales Transaction','Y',100,TO_TIMESTAMP('2012-10-16 11:18:04','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-16 11:18:04','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 16, 2012 11:18:05 AM WIT
+-- Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200640 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 16, 2012 11:18:28 AM WIT
+-- Resolve M_Storage locking and data consistency
+CREATE TABLE M_StorageReservation (AD_Client_ID NUMERIC(10) NOT NULL, AD_Org_ID NUMERIC(10) NOT NULL, Created TIMESTAMP NOT NULL, CreatedBy NUMERIC(10) NOT NULL, DateLastInventory TIMESTAMP DEFAULT NULL , IsActive CHAR(1) DEFAULT 'Y' CHECK (IsActive IN ('Y','N')) NOT NULL, IsSOTrx CHAR(1) DEFAULT 'Y' CHECK (IsSOTrx IN ('Y','N')), M_AttributeSetInstance_ID NUMERIC(10) NOT NULL, M_Product_ID NUMERIC(10) NOT NULL, M_Warehouse_ID NUMERIC(10) NOT NULL, Qty NUMERIC NOT NULL, Updated TIMESTAMP NOT NULL, UpdatedBy NUMERIC(10) NOT NULL, CONSTRAINT M_StorageReservation_Key PRIMARY KEY (M_AttributeSetInstance_ID, M_Product_ID, M_Warehouse_ID))
+;
+
+SELECT register_migration_script('201211141732_IDEMPIERE-385_m_storage.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211141733_IDEMPIERE-385_m_viewProduct.sql b/migration/i1.0a-release/postgresql/201211141733_IDEMPIERE-385_m_viewProduct.sql
new file mode 100644
index 0000000000..8df924bef8
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211141733_IDEMPIERE-385_m_viewProduct.sql
@@ -0,0 +1,35 @@
+CREATE OR REPLACE VIEW m_product_stock_v AS 
+ SELECT ms.isactive, ms.created, ms.createdby, ms.updated, ms.updatedby, mp.value, mp.help, ms.qtyonhand - coalesce(mr.qty,0) AS qtyavailable, ms.qtyonhand, coalesce(mr.qty,0) as qtyreserved, mp.description, mw.name AS warehouse, mw.m_warehouse_id, mw.ad_client_id, mw.ad_org_id, mp.documentnote
+   FROM m_storageonhand ms
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  ORDER BY mw.name;
+
+CREATE OR REPLACE VIEW m_product_substituterelated_v AS 
+         SELECT s.ad_client_id, s.ad_org_id, s.isactive, s.created, s.createdby, s.updated, s.updatedby, s.m_product_id, s.substitute_id, 'S'::text AS rowtype, mp.name, sum(ms.qtyonhand - coalesce(mr.qty,0)) AS qtyavailable, sum(ms.qtyonhand) AS qtyonhand, coalesce(sum(mr.qty),0) AS qtyreserved, round(max(mpr.pricestd), 0) AS pricestd, mpr.m_pricelist_version_id, mw.m_warehouse_id, org.name AS orgname
+           FROM m_substitute s
+      JOIN m_storageonhand ms ON ms.m_product_id = s.substitute_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  GROUP BY s.ad_client_id, s.ad_org_id, s.isactive, s.created, s.createdby, s.updated, s.updatedby, s.m_product_id, s.substitute_id, mw.m_warehouse_id, mpr.m_pricelist_version_id, org.name, mp.name
+UNION 
+         SELECT r.ad_client_id, r.ad_org_id, r.isactive, r.created, r.createdby, r.updated, r.updatedby, r.m_product_id, r.relatedproduct_id AS substitute_id, 'R'::text AS rowtype, mp.name, sum(ms.qtyonhand - coalesce(mr.qty,0)) AS qtyavailable, sum(ms.qtyonhand) AS qtyonhand, coalesce(sum(mr.qty),0) AS qtyreserved, round(max(mpr.pricestd), 0) AS pricestd, mpr.m_pricelist_version_id, mw.m_warehouse_id, org.name AS orgname
+           FROM m_relatedproduct r
+      JOIN m_storageonhand ms ON ms.m_product_id = r.relatedproduct_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   LEFT JOIN m_storagereservation mr ON ms.m_product_id = mr.m_product_id AND mw.m_warehouse_id = mr.m_warehouse_id AND mr.isSOTrx='Y'
+  GROUP BY r.ad_client_id, r.ad_org_id, r.isactive, r.created, r.createdby, r.updated, r.updatedby, r.m_product_id, r.relatedproduct_id, mw.m_warehouse_id, mpr.m_pricelist_version_id, org.name, mp.name;
+
+SELECT register_migration_script('201211141733_IDEMPIERE-385_m_viewProduct.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211141734_IDEMPIERE-385_reserveLocator.sql b/migration/i1.0a-release/postgresql/201211141734_IDEMPIERE-385_reserveLocator.sql
new file mode 100644
index 0000000000..d11d02e4fa
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211141734_IDEMPIERE-385_reserveLocator.sql
@@ -0,0 +1,48 @@
+-- Oct 19, 2012 2:07:52 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Element (AD_Element_ID,ColumnName,EntityType,Name,PrintName,AD_Client_ID,Created,Updated,IsActive,AD_Org_ID,CreatedBy,UpdatedBy) VALUES (200188,'M_ReserveLocator_ID','U','M_ReserveLocator_ID','Reserve Locator',0,TO_TIMESTAMP('2012-10-19 14:07:51','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-10-19 14:07:51','YYYY-MM-DD HH24:MI:SS'),'Y',0,100,100)
+;
+
+-- Oct 19, 2012 2:07:52 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_PrintName,PO_Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_PrintName,t.PO_Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200188 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Oct 19, 2012 2:08:25 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Column (AD_Table_ID,AD_Column_ID,EntityType,Version,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsSyncDatabase,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,IsEncrypted,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,CreatedBy,Updated,AD_Client_ID,AD_Org_ID,IsActive,Created,UpdatedBy) VALUES (190,200704,'U',0,'N','N','N',0,'N',10,'N',31,'N','N',200188,'N','Y','N','Y','N','M_ReserveLocator_ID','M_ReserveLocator_ID','Y',100,TO_TIMESTAMP('2012-10-19 14:08:24','YYYY-MM-DD HH24:MI:SS'),0,0,'Y',TO_TIMESTAMP('2012-10-19 14:08:24','YYYY-MM-DD HH24:MI:SS'),100)
+;
+
+-- Oct 19, 2012 2:08:25 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200704 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Oct 19, 2012 2:08:28 PM WIT
+-- Reserve Locator
+ALTER TABLE M_Warehouse ADD COLUMN M_ReserveLocator_ID NUMERIC(10) DEFAULT NULL 
+;
+
+-- Oct 19, 2012 2:08:49 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Field (IsEncrypted,DisplayLength,AD_Tab_ID,IsDisplayed,IsSameLine,IsHeading,AD_Column_ID,IsFieldOnly,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,UpdatedBy,AD_Org_ID,IsActive,Created,AD_Client_ID,CreatedBy,Updated) VALUES ('N',10,177,'Y','N','N',200704,'N','Y',200649,'N','U','M_ReserveLocator_ID',100,0,'Y',TO_TIMESTAMP('2012-10-19 14:08:48','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-10-19 14:08:48','YYYY-MM-DD HH24:MI:SS'))
+;
+
+-- Oct 19, 2012 2:08:49 PM WIT
+-- Reserve Locator
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200649 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Oct 19, 2012 2:09:08 PM WIT
+-- Reserve Locator
+UPDATE AD_Field SET Name='Reserve Locator',Updated=TO_TIMESTAMP('2012-10-19 14:09:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200649
+;
+
+-- Oct 19, 2012 2:09:08 PM WIT
+-- Reserve Locator
+UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=200649
+;
+
+SELECT register_migration_script('201211141734_IDEMPIERE-385_reserveLocator.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211191100_IDEMPIERE-385_DB.sql b/migration/i1.0a-release/postgresql/201211191100_IDEMPIERE-385_DB.sql
new file mode 100644
index 0000000000..371461d88b
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211191100_IDEMPIERE-385_DB.sql
@@ -0,0 +1,515 @@
+-- Nov 19, 2012 10:56:55 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('M_StorageOnHand_UU',200233,'U','M_StorageOnHand_UU','M_StorageOnHand_UU','d22731f0-0762-43bf-9f29-66383f3038f8',0,TO_TIMESTAMP('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
+;
+
+-- Nov 19, 2012 10:56:55 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200233 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID) VALUES ('N',1.00,200026,200917,'U','N','N','N','N',36,'N',10,'N',200233,'66058949-db74-48a6-a940-79ee28d0f0ed','Y','N','M_StorageOnHand_UU','M_StorageOnHand_UU',TO_TIMESTAMP('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-19 10:56:54','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200917 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+ALTER TABLE M_StorageOnHand ADD COLUMN M_StorageOnHand_UU VARCHAR(36) DEFAULT NULL 
+;
+
+-- Nov 19, 2012 10:56:56 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+CREATE UNIQUE INDEX M_StorageOnHand_UU_idx ON m_storageonhand(M_StorageOnHand_UU)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element (ColumnName,AD_Element_ID,EntityType,Name,PrintName,AD_Element_UU,AD_Client_ID,Created,Updated,AD_Org_ID,CreatedBy,UpdatedBy,IsActive) VALUES ('M_StorageReservation_UU',200234,'U','M_StorageReservation_UU','M_StorageReservation_UU','283bcf86-e8af-4ac7-aaff-efcfa104e700',0,TO_TIMESTAMP('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),TO_TIMESTAMP('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),0,100,100,'Y')
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Element_Trl (AD_Language,AD_Element_ID, Help,PO_Description,PO_Help,Name,Description,PrintName,PO_Name,PO_PrintName, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Element_Trl_UU ) SELECT l.AD_Language,t.AD_Element_ID, t.Help,t.PO_Description,t.PO_Help,t.Name,t.Description,t.PrintName,t.PO_Name,t.PO_PrintName, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Element t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Element_ID=200234 AND NOT EXISTS (SELECT * FROM AD_Element_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Element_ID=t.AD_Element_ID)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column (IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID) VALUES ('N',1.00,200027,200918,'U','N','N','N','N',36,'N',10,'N',200234,'fb178aac-4ffe-4244-907c-89a0a527acf8','Y','N','M_StorageReservation_UU','M_StorageReservation_UU',TO_TIMESTAMP('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-19 10:56:56','YYYY-MM-DD HH24:MI:SS'),100,0)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200918 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+ALTER TABLE M_StorageReservation ADD COLUMN M_StorageReservation_UU VARCHAR(36) DEFAULT NULL 
+;
+
+-- Nov 19, 2012 10:56:57 AM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+CREATE UNIQUE INDEX M_StorageReservation_UU_idx ON m_storagereservation(M_StorageReservation_UU)
+;
+
+ALTER TABLE m_storageonhand DROP CONSTRAINT m_storageonhand_key
+;
+
+ALTER TABLE m_storageonhand ADD CONSTRAINT m_storageonhand_pkey PRIMARY KEY (m_product_id, m_locator_id, m_attributesetinstance_id)
+;
+
+ALTER TABLE m_storagereservation DROP CONSTRAINT m_storagereservation_key
+;
+
+ALTER TABLE m_storagereservation ADD CONSTRAINT m_storagereservation_pkey PRIMARY KEY (m_product_id, m_warehouse_id, issotrx, m_attributesetinstance_id)
+;
+
+insert into m_storageonhand (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+m_attributesetinstance_id,
+m_locator_id,
+m_product_id,
+qtyonhand,
+updated,
+updatedby,
+m_storageonhand_uu
+)
+select ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+m_attributesetinstance_id,
+m_locator_id,
+m_product_id,
+qtyonhand,
+updated,
+updatedby,
+generate_uuid()
+from m_storage
+;
+
+insert into m_storagereservation (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+issotrx,
+m_attributesetinstance_id,
+m_product_id,
+m_warehouse_id,
+qty,
+updated,
+updatedby,
+m_storagereservation_uu
+)
+select
+min(s.ad_client_id),
+min(s.ad_org_id),
+min(s.created),
+min(s.createdby),
+null,
+'Y',
+'Y',
+s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id,
+sum(s.qtyreserved),
+max(s.updated),
+max(s.updatedby),
+generate_uuid()
+from m_storage s
+join m_locator l on (s.m_locator_id=l.m_locator_id)
+where s.isactive='Y'
+and s.qtyreserved!=0
+group by s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id
+;
+
+insert into m_storagereservation (
+ad_client_id,
+ad_org_id,
+created,
+createdby,
+datelastinventory,
+isactive,
+issotrx,
+m_attributesetinstance_id,
+m_product_id,
+m_warehouse_id,
+qty,
+updated,
+updatedby,
+m_storagereservation_uu
+)
+select
+min(s.ad_client_id),
+min(s.ad_org_id),
+min(s.created),
+min(s.createdby),
+null,
+'Y',
+'N',
+s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id,
+sum(s.qtyordered),
+max(s.updated),
+max(s.updatedby),
+generate_uuid()
+from m_storage s
+join m_locator l on (s.m_locator_id=l.m_locator_id)
+where s.isactive='Y'
+and s.qtyordered!=0
+group by s.m_attributesetinstance_id,
+s.m_product_id,
+l.m_warehouse_id
+;
+
+ALTER TABLE m_storage RENAME TO m_storage_to_drop
+;
+
+CREATE OR REPLACE VIEW m_storage
+AS
+  SELECT s.m_product_id,
+         s.m_locator_id,
+         s.ad_client_id,
+         s.ad_org_id,
+         s.isactive,
+         s.created,
+         s.createdby,
+         s.updated,
+         s.updatedby,
+         s.qtyonhand,
+         0 AS qtyreserved,
+         0 AS qtyordered,
+         s.datelastinventory,
+         s.m_attributesetinstance_id,
+         s.m_storageonhand_uu
+  FROM   m_storageonhand s
+  UNION
+  SELECT sr.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         sr.ad_client_id,
+         sr.ad_org_id,
+         sr.isactive,
+         sr.created,
+         sr.createdby,
+         sr.updated,
+         sr.updatedby,
+         0                     AS qtyonhand,
+         sr.qty                AS qtyreserved,
+         0                     AS qtyordered,
+         sr.datelastinventory,
+         sr.m_attributesetinstance_id,
+         sr.m_storagereservation_uu
+  FROM   m_storagereservation sr
+         JOIN m_warehouse w
+           ON sr.m_warehouse_id = w.m_warehouse_id
+  WHERE  sr.issotrx = 'Y'
+  UNION
+  SELECT so.m_product_id,
+         w.m_reservelocator_id AS m_locator_id,
+         so.ad_client_id,
+         so.ad_org_id,
+         so.isactive,
+         so.created,
+         so.createdby,
+         so.updated,
+         so.updatedby,
+         0                     AS qtyonhand,
+         0                     AS qtyreserved,
+         so.qty                AS qtyordered,
+         so.datelastinventory,
+         so.m_attributesetinstance_id,
+         so.m_storagereservation_uu
+  FROM   m_storagereservation so
+         JOIN m_warehouse w
+           ON so.m_warehouse_id = w.m_warehouse_id
+  WHERE  so.issotrx = 'N'
+;
+
+-- PostgreSQL requires to recreate all views before dropping a table
+CREATE OR REPLACE VIEW RV_STORAGE
+(AD_CLIENT_ID, AD_ORG_ID, M_PRODUCT_ID, VALUE, NAME, 
+ DESCRIPTION, UPC, SKU, C_UOM_ID, M_PRODUCT_CATEGORY_ID, 
+ CLASSIFICATION, WEIGHT, VOLUME, VERSIONNO, GUARANTEEDAYS, 
+ GUARANTEEDAYSMIN, M_LOCATOR_ID, M_WAREHOUSE_ID, X, Y, 
+ Z, QTYONHAND, QTYRESERVED, QTYAVAILABLE, QTYORDERED, 
+ DATELASTINVENTORY, M_ATTRIBUTESETINSTANCE_ID, M_ATTRIBUTESET_ID, SERNO, LOT, 
+ M_LOT_ID, GUARANTEEDATE, SHELFLIFEDAYS, GOODFORDAYS, SHELFLIFEREMAININGPCT)
+AS 
+SELECT s.AD_Client_ID, s.AD_Org_ID,
+    -- Product
+    s.M_Product_ID, p.Value,p.Name, p.Description, p.UPC, p.SKU,
+    p.C_UOM_ID, p.M_Product_Category_ID, p.Classification, p.Weight, p.Volume, p.VersionNo,
+    p.GuaranteeDays, p.GuaranteeDaysMin,
+    --  Locator
+    s.M_Locator_ID, l.M_Warehouse_ID, l.X, l.Y, l.Z,
+    -- Storage
+    s.QtyOnHand, s.QtyReserved, s.QtyOnHand-s.QtyReserved AS QtyAvailable, 
+    s.QtyOrdered, s.DateLastInventory,
+    -- Instance
+    s.M_AttributeSetInstance_ID, asi.M_AttributeSet_ID, asi.SerNo, asi.Lot, asi.M_Lot_ID,
+    asi.GuaranteeDate,  -- see PAttributeInstance.java
+    daysBetween(asi.GuaranteeDate,getdate()) AS ShelfLifeDays,
+    daysBetween(asi.GuaranteeDate,getdate())-p.GuaranteeDaysMin AS GoodForDays,
+    CASE WHEN COALESCE(p.GuaranteeDays,0)>0 
+      THEN ROUND((daysBetween(asi.GuaranteeDate,getdate())/p.GuaranteeDays)*100,0) 
+      ELSE NULL 
+    END AS ShelfLifeRemainingPct
+FROM M_Storage s
+  INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)
+  INNER JOIN M_Product p ON (s.M_Product_ID=p.M_Product_ID)
+  LEFT OUTER JOIN M_AttributeSetInstance asi ON (s.M_AttributeSetInstance_ID=asi.M_AttributeSetInstance_ID)
+;
+
+CREATE OR REPLACE VIEW rv_pp_order_receipt_issue AS 
+SELECT obl.pp_order_bomline_id,
+obl.iscritical,
+p.value,
+obl.m_product_id,
+mos.name AS productname,
+mos.m_attributesetinstance_id,
+asi.description AS instancename,
+mos.c_uom_id,
+u.name AS uomname,
+obl.qtyrequiered,
+obl.qtyreserved AS qtyreserved_order,
+mos.qtyonhand,
+mos.qtyreserved AS qtyreserved_storage,
+mos.qtyavailable,
+mos.m_locator_id,
+mos.m_warehouse_id,
+w.name AS warehousename,
+mos.qtybom,
+mos.isqtypercentage,
+mos.qtybatch,
+obl.componenttype,
+mos.qtyrequiered - obl.qtydelivered AS qtyopen,
+obl.pp_order_id
+FROM rv_pp_order_storage mos
+JOIN pp_order_bomline obl ON mos.pp_order_bomline_id = obl.pp_order_bomline_id
+JOIN m_attributesetinstance asi ON mos.m_attributesetinstance_id = asi.m_attributesetinstance_id
+JOIN c_uom u ON mos.c_uom_id = u.c_uom_id
+JOIN m_product p ON mos.m_product_id = p.m_product_id
+JOIN m_warehouse w ON mos.m_warehouse_id = w.m_warehouse_id
+;
+
+CREATE OR REPLACE VIEW rv_pp_order_storage AS 
+SELECT 
+obl.ad_client_id,
+obl.ad_org_id,
+obl.createdby,
+obl.updatedby,
+obl.updated,
+obl.created,
+obl.isactive,
+obl.pp_order_bom_id,
+obl.pp_order_bomline_id,
+obl.pp_order_id,
+obl.iscritical,
+obl.m_product_id,
+( SELECT p.name FROM m_product p WHERE p.m_product_id = o.m_product_id) AS name,
+obl.c_uom_id,
+s.qtyonhand,
+round(obl.qtyrequiered, 4) AS qtyrequiered, 
+CASE WHEN o.qtybatchs = 0 THEN 1 ELSE round(obl.qtyrequiered / o.qtybatchs, 4) END AS qtybatchsize,
+round(bomqtyreserved(obl.m_product_id,obl.m_warehouse_id, 0), 4) AS qtyreserved,
+round(bomqtyavailable(obl.m_product_id, obl.m_warehouse_id,0), 4) AS qtyavailable,
+obl.m_warehouse_id,
+obl.qtybom,
+obl.isqtypercentage,
+round(obl.qtybatch, 4) AS qtybatch,
+obl.m_attributesetinstance_id,
+l.m_locator_id,
+l.x,
+l.y,
+l.z
+FROM pp_order_bomline obl
+JOIN pp_order o ON o.pp_order_id = obl.pp_order_id
+LEFT JOIN m_storage s ON s.m_product_id = obl.m_product_id AND s.qtyonhand <> 0 AND obl.m_warehouse_id = (( SELECT ld.m_warehouse_id FROM m_locator ld WHERE s.m_locator_id = ld.m_locator_id))
+LEFT JOIN m_locator l ON l.m_locator_id = s.m_locator_id
+ORDER BY obl.m_product_id
+;
+
+CREATE OR REPLACE VIEW rv_storage_per_product AS 
+SELECT strg.AD_Client_ID, strg.AD_Org_ID
+ , p.M_Product_ID, p.Value, p.Name
+ , p.Description, p.UPC, p.SKU
+ , p.C_UOM_ID, p.M_Product_Category_ID, p.Classification, p.Weight, p.Volume, p.VersionNo
+ , p.GuaranteeDays, p.GuaranteeDaysMin
+ , strg.SumQtyOnHand
+FROM M_Product p
+  INNER JOIN ( SELECT M_Product_ID, M_Locator_ID, SUM (QtyOnHand) as SumQtyOnHand
+                      , AD_Client_ID, AD_Org_ID
+               FROM RV_Storage
+               GROUP BY M_Product_ID, M_Locator_ID, AD_Client_ID, AD_Org_ID) strg ON (p.M_Product_ID = strg.M_Product_ID)
+  INNER JOIN M_Locator l ON (strg.M_Locator_ID=l.M_Locator_ID)
+;
+
+-- Comment the next if you want to preserve a backup of the M_Storage table
+DROP TABLE m_storage_to_drop
+;
+
+-- Nov 19, 2012 12:19:33 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Table SET IsView='Y',Updated=TO_TIMESTAMP('2012-11-19 12:19:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Table_ID=250
+;
+
+-- Nov 19, 2012 12:26:17 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Tab SET OrderByClause='M_Product_ID, M_AttributeSetInstance_ID, M_Locator_ID',Updated=TO_TIMESTAMP('2012-11-19 12:26:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=179
+;
+
+-- Nov 19, 2012 12:26:42 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Tab SET OrderByClause='M_Product_ID, M_AttributeSetInstance_ID, M_Locator_ID',Updated=TO_TIMESTAMP('2012-11-19 12:26:42','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53244
+;
+
+update m_warehouse set m_reservelocator_id = 
+(select min(m_locator_id)
+from m_locator 
+where m_warehouse_id =m_warehouse.m_warehouse_id and isactive='Y' and isdefault='Y')
+where m_reservelocator_id is null
+;
+
+-- Nov 19, 2012 1:15:02 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET AD_Reference_Value_ID=191, AD_Reference_ID=18, AD_Val_Rule_ID=127, IsToolbarButton='N',Updated=TO_TIMESTAMP('2012-11-19 13:15:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200704
+;
+
+--create views
+CREATE OR REPLACE VIEW M_PRODUCT_STOCK_V
+AS
+SELECT 
+ms.IsActive, ms.Created, ms.CreatedBy, ms.Updated, ms.UpdatedBy,
+mp.VALUE, mp.help, (ms.qtyonhand - ms.qtyreserved) AS qtyavailable, ms.qtyonhand, 
+ms.qtyreserved, mp.description, mw.NAME AS warehouse, mw.m_warehouse_id, mw.ad_client_id, 
+mw.ad_org_id, mp.documentnote
+FROM M_STORAGE ms 
+JOIN M_PRODUCT mp ON ms.m_product_id = mp.m_product_id
+JOIN M_LOCATOR ml ON ms.m_locator_id = ml.m_locator_id
+JOIN M_WAREHOUSE mw ON ml.m_warehouse_id = mw.m_warehouse_id 
+ORDER BY mw.NAME
+;
+
+CREATE OR REPLACE VIEW M_PRODUCT_SUBSTITUTERELATED_V AS
+SELECT s.ad_client_id, 
+		s.ad_org_id, 
+		s.isactive, 
+		s.created, 
+		s.createdby, 
+		s.updated, 
+		s.updatedby,
+		s.m_product_id, 
+		s.substitute_id, 
+		'S' AS rowtype,
+		mp.name, 
+		sum(ms.qtyonhand - ms.qtyreserved) AS qtyavailable, 
+		sum(ms.qtyonhand) AS qtyonhand, 
+		sum(ms.qtyreserved) AS qtyreserved,
+		ROUND(MAX(mpr.pricestd),0) AS pricestd, 
+		mpr.m_pricelist_version_id, 
+		mw.m_warehouse_id, 
+		org.name AS orgname
+           FROM m_substitute s
+      JOIN m_storage ms ON ms.m_product_id = s.substitute_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id
+   GROUP BY s.ad_client_id, 
+   			s.ad_org_id, 
+   			s.isactive, 
+   			s.created, 
+   			s.createdby, 
+   			s.updated, 
+   			s.updatedby, 
+   			s.m_product_id, 
+   			s.substitute_id, 
+   			mw.m_warehouse_id, 
+   			mpr.m_pricelist_version_id, 
+   			org.name,  
+   			mp.name
+	UNION 
+         SELECT r.ad_client_id, 
+         	r.ad_org_id, 
+         	r.isactive, 
+         	r.created, 
+         	r.createdby, 
+         	r.updated, 
+         	r.updatedby,
+			r.m_product_id, 
+			r.relatedproduct_id AS substitute_id, 
+			'R' AS rowtype,  
+			mp.name, 
+			sum(ms.qtyonhand - ms.qtyreserved) AS qtyavailable, 
+			sum(ms.qtyonhand) AS qtyonhand, 
+			sum(ms.qtyreserved) AS qtyreserved, 
+			ROUND(MAX(mpr.pricestd),0) AS pricestd, 
+			mpr.m_pricelist_version_id, 
+			mw.m_warehouse_id, 
+			org.name AS orgname
+           FROM m_relatedproduct r
+      JOIN m_storage ms ON ms.m_product_id = r.relatedproduct_id
+   JOIN m_product mp ON ms.m_product_id = mp.m_product_id
+   JOIN m_locator ml ON ms.m_locator_id = ml.m_locator_id
+   JOIN m_warehouse mw ON ml.m_warehouse_id = mw.m_warehouse_id
+   JOIN m_productprice mpr ON ms.m_product_id = mpr.m_product_id
+   JOIN ad_org org ON org.ad_org_id = mw.ad_org_id 
+   GROUP BY r.ad_client_id, 
+   			r.ad_org_id, 
+   			r.isactive, 
+   			r.created, 
+   			r.createdby, 
+   			r.updated, 
+   			r.updatedby, 
+   			r.m_product_id, 
+   			r.relatedproduct_id, 
+   			mw.m_warehouse_id, 
+   			mpr.m_pricelist_version_id, 
+   			org.name,  
+   			mp.name
+;
+
+-- Nov 20, 2012 5:06:02 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET IsParent='Y', IsUpdateable='N', IsToolbarButton='N',Updated=TO_TIMESTAMP('2012-11-20 17:06:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200640
+;
+
+-- Nov 20, 2012 5:28:27 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE AD_Column SET IsMandatory='Y', IsUpdateable='N',Updated=TO_TIMESTAMP('2012-11-20 17:28:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200640
+;
+
+-- Nov 20, 2012 5:28:36 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+-- INSERT INTO t_alter_column values('m_storagereservation','IsSOTrx','CHAR(1)',null,'Y')
+-- not needed - avoid ERROR: failed to recreate dependent view
+;
+
+-- Nov 20, 2012 5:28:36 PM COT
+-- IDEMPIERE-385 Resolve M_Storage locking and data consistency
+UPDATE M_StorageReservation SET IsSOTrx='Y' WHERE IsSOTrx IS NULL
+;
+
+SELECT register_migration_script('201211191100_IDEMPIERE-385_DB.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211211000_IDEMPIERE-163.sql b/migration/i1.0a-release/postgresql/201211211000_IDEMPIERE-163.sql
new file mode 100644
index 0000000000..be2b30f819
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211211000_IDEMPIERE-163.sql
@@ -0,0 +1,1279 @@
+-- Nov 20, 2012 10:23:24 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200945,'D',319,'N','N','N',0,'N',1,'N',17,'N',422,'N','Y','322001b2-6cd1-48b1-95c9-3505a8d5b2cc','Y','N','IsUpdateable','Determines, if the field can be updated','Y','The Updatable checkbox indicates if a field can be updated by the user.','Updatable','Y',TO_TIMESTAMP('2012-11-20 10:23:23','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:23:23','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:23:24 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200945 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:25:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200946,'D',319,'N','N','N',0,'N',1,'N',17,'N',2468,'N','Y','11acfc29-8d0c-41d0-9b55-d6bc9ed0efc5','Y','N','IsAlwaysUpdateable','The column is always updateable, even if the record is not active or processed','N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','Always Updateable','Y',TO_TIMESTAMP('2012-11-20 10:25:36','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:25:36','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:25:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200946 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:27:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200947,'D','N','N','N',0,'N',2000,'N',14,'N',50074,'N','Y','05b02875-be4b-4b02-8e64-0a2e5f691b30','Y','N','MandatoryLogic','Mandatory Logic','Y',TO_TIMESTAMP('2012-11-20 10:27:08','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:27:08','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:27:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200947 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:28:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200948,'D','N','N','N',0,'N',2000,'N',14,'N',1663,'N','Y','fa2aef1e-7608-469a-a5ad-b59da47a1bdc','Y','N','ReadOnlyLogic','Logic to determine if field is read only (applies only when field is read-write)','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+@AD_Table_ID@=14 | @Language@!GERGER <br>
+@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+@Name@>J<br>
+Strings may be in single quotes (optional)','Read Only Logic','Y',TO_TIMESTAMP('2012-11-20 10:28:39','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:28:39','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:28:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200948 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:29:59 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,107,200949,'D',319,'N','N','N',0,'N',1,'N',17,'N',200187,'N','Y','380dff82-a310-4d2a-b338-37c7fbac5cd0','Y','N','IsToolbarButton','Add the column button to the toolbar','Y','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','Toolbar Button','Y',TO_TIMESTAMP('2012-11-20 10:29:58','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:29:58','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:29:59 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200949 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:31:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD COLUMN IsUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:31:25 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD COLUMN IsAlwaysUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:31:42 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD COLUMN MandatoryLogic VARCHAR(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 10:31:55 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD COLUMN ReadOnlyLogic VARCHAR(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 10:32:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_Field ADD COLUMN IsToolbarButton CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 10:34:08 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200946,'Y',200834,'N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','D','The column is always updateable, even if the record is not active or processed','Always Updateable','cf3cb628-3c15-4ce8-ace9-0275dd0b2bf4','Y','N',100,0,TO_TIMESTAMP('2012-11-20 10:34:07','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 10:34:07','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:08 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200834 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,2000,'N','N',200947,'Y',200835,'N','D','Mandatory Logic','d4b711de-c2d0-4de1-b304-9e340e3eac1b','Y','N',100,0,TO_TIMESTAMP('2012-11-20 10:34:08','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 10:34:08','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200835 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,2000,'N','N',200948,'Y',200836,'N','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+@AD_Table_ID@=14 | @Language@!GERGER <br>
+@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+@Name@>J<br>
+Strings may be in single quotes (optional)','D','Logic to determine if field is read only (applies only when field is read-write)','Read Only Logic','735d01aa-e36e-414f-a694-8aa158bc710d','Y','N',100,0,TO_TIMESTAMP('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:09 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200836 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200949,'Y',200837,'N','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','D','Add the column button to the toolbar','Toolbar Button','1b7d74f1-710f-42c9-899c-8bd656345be7','Y','N',100,0,TO_TIMESTAMP('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 10:34:09','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200837 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',107,1,'N','N',200945,'Y',200838,'N','The Updatable checkbox indicates if a field can be updated by the user.','D','Determines, if the field can be updated','Updatable','4e815d13-e435-449c-bd31-3fb1321e3273','Y','N',100,0,TO_TIMESTAMP('2012-11-20 10:34:10','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 10:34:10','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 10:34:10 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200838 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=130
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=90,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5808
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=100,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=4259
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=1551
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=132
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=130,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200276
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=140,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=924
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=150, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=270, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=280, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=290, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=300, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=310, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=320, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=330,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=53280
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=340,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200275
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=350,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=360,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=136
+;
+
+-- Nov 20, 2012 10:41:56 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=370,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=139
+;
+
+-- Nov 20, 2012 10:41:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=380,Updated=TO_TIMESTAMP('2012-11-20 10:41:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200350
+;
+
+-- Nov 20, 2012 10:41:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=390,Updated=TO_TIMESTAMP('2012-11-20 10:41:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200348
+;
+
+-- Nov 20, 2012 10:41:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=400,Updated=TO_TIMESTAMP('2012-11-20 10:41:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200349
+;
+
+-- Nov 20, 2012 10:52:45 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200950,'D',319,'N','N','N',0,'N',1,'N',17,'N',2468,'N','Y','c15fad16-44e0-45f3-bad6-59fe05a0fba2','Y','N','IsAlwaysUpdateable','The column is always updateable, even if the record is not active or processed','N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','Always Updateable','Y',TO_TIMESTAMP('2012-11-20 10:52:44','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:52:44','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:52:45 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200950 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:53:35 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200951,'D','N','N','N',0,'N',2000,'N',14,'N',50074,'N','Y','cc4f018d-8a72-44ba-a331-8f060b451f49','Y','N','MandatoryLogic','Mandatory Logic','Y',TO_TIMESTAMP('2012-11-20 10:53:34','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:53:34','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:53:35 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200951 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:54:21 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200952,'D','N','N','N',0,'N',2000,'N',14,'N',1663,'N','Y','31667b0e-a034-482b-88b5-c92b02a55eb4','Y','N','ReadOnlyLogic','Logic to determine if field is read only (applies only when field is read-write)','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+@AD_Table_ID@=14 | @Language@!GERGER <br>
+@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+@Name@>J<br>
+Strings may be in single quotes (optional)','Read Only Logic','Y',TO_TIMESTAMP('2012-11-20 10:54:20','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:54:20','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:54:21 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200952 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:56:34 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,AD_Val_Rule_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200953,'D',4,'N','N','N',0,'N',22,'N',18,115,'N',121,'N','Y','e23e4239-f209-4a8a-8aeb-bf3740f6c849','Y','N','AD_Reference_Value_ID','Required to specify, if data type is Table or List','The Reference Value indicates where the reference values are stored.  It must be specified if the data type is Table or List.  ','Reference Key','Y',TO_TIMESTAMP('2012-11-20 10:56:33','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:56:33','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:56:34 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200953 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:57:29 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200954,'D',319,'N','N','N',0,'N',1,'N',17,'N',392,'N','Y','9d2512c0-51ac-410f-87a5-273c8f2a07d8','Y','N','IsMandatory','Data entry is required in this column','The field must have a value for the record to be saved to the database.','Mandatory','Y',TO_TIMESTAMP('2012-11-20 10:57:28','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:57:28','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:57:29 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200954 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:58:31 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200955,'D','N','N','N',0,'N',10,'N',11,'N',1810,'N','Y','f0cfce31-5e3f-42cc-9c8b-d9f5476472af','Y','N','XPosition','Absolute X (horizontal) position in 1/72 of an inch','1','Absolute X (horizontal) position in 1/72 of an inch','X Position','Y',TO_TIMESTAMP('2012-11-20 10:58:30','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:58:30','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:58:31 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200955 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 10:59:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200956,'D','N','N','N',0,'N',10,'N',11,'N',200099,'N','Y','6580f465-df1d-4d26-8140-4d3d898b1695','Y','N','NumLines','Number of lines for a field','1','Number of lines for a field','Number of Lines','Y',TO_TIMESTAMP('2012-11-20 10:59:36','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 10:59:36','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 10:59:37 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200956 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:00:28 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200957,'D','N','N','N',0,'N',10,'N',11,'N',200098,'N','Y','22679939-1059-4656-9d76-12bc8adf2cc3','Y','N','ColumnSpan','Number of column for a box of field','1','Column Span','Y',TO_TIMESTAMP('2012-11-20 11:00:27','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 11:00:27','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 11:00:28 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200957 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:01:47 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,DefaultValue,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200958,'D',319,'N','N','N',0,'N',1,'N',17,'N',200187,'N','Y','7cb0302c-bfb7-4900-9a26-532115c47d6b','Y','N','IsToolbarButton','Add the column button to the toolbar','Y','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','Toolbar Button','Y',TO_TIMESTAMP('2012-11-20 11:01:46','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-20 11:01:46','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 20, 2012 11:01:47 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200958 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 20, 2012 11:02:36 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN IsAlwaysUpdateable CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:02:52 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN MandatoryLogic VARCHAR(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:06 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN ReadOnlyLogic VARCHAR(2000) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:23 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN AD_Reference_Value_ID NUMERIC(10) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:40 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN IsMandatory CHAR(1) DEFAULT NULL 
+;
+
+-- Nov 20, 2012 11:03:57 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN XPosition NUMERIC(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN NumLines NUMERIC(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:25 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN ColumnSpan NUMERIC(10) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:04:42 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN IsToolbarButton CHAR(1) DEFAULT NULL
+;
+
+-- Nov 20, 2012 11:07:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,36,'N','N',60530,'Y',200848,'N','D','AD_UserDef_Field_UU','acb689b0-0b6d-43cb-b792-3dc106740640','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:12','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:12','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:13 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200848 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200950,'Y',200849,'N','If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.','D','The column is always updateable, even if the record is not active or processed','Always Updateable','2f360b2b-148a-4682-8e3d-73c670f47597','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:13','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:13','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:14 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200849 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200957,'Y',200850,'N','D','Number of column for a box of field','Column Span','76af747a-9278-4f90-b03b-b40d041c705b','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:14','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:14','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200850 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200954,'Y',200851,'N','The field must have a value for the record to be saved to the database.','D','Data entry is required in this column','Mandatory','40f3d314-2bf3-41f6-b1bc-8eff6f01e909','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200851 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,EntityType,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,2000,'N','N',200951,'Y',200852,'N','D','Mandatory Logic','1bd15b5f-d46d-42be-9904-d60fd01bc5f2','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:15','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200852 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200956,'Y',200853,'N','Number of lines for a field','D','Number of lines for a field','Number of Lines','28229856-2b06-4788-b1ec-0790477e744f','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:16 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200853 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,2000,'N','N',200952,'Y',200854,'N','format := {expression} [{logic} {expression}]<br> 
+expression := @{context}@{operand}{value} or @{context}@{operand}{value}<br> 
+logic := {|}|{&}<br>
+context := any global or window context <br>
+value := strings or numbers<br>
+logic operators	:= AND or OR with the previous result from left to right <br>
+operand := eq{=}, gt{&gt;}, le{&lt;}, not{~^!} <br>
+Examples: <br>
+@AD_Table_ID@=14 | @Language@!GERGER <br>
+@PriceLimit@>10 | @PriceList@>@PriceActual@<br>
+@Name@>J<br>
+Strings may be in single quotes (optional)','D','Logic to determine if field is read only (applies only when field is read-write)','Read Only Logic','e744a943-39ab-49c1-8ed2-5fb8ea367a1d','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200854 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,22,'N','N',200953,'Y',200855,'N','The Reference Value indicates where the reference values are stored.  It must be specified if the data type is Table or List.  ','D','Required to specify, if data type is Table or List','Reference Key','3ba09cfb-d887-46d1-89be-53bc78496bca','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:17 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200855 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,1,'N','N',200958,'Y',200856,'N','There IsToolbarButton check box indicates if this column button is part of the toolbar''s process button popup list or render as field.','D','Add the column button to the toolbar','Toolbar Button','b0e1932a-90e6-4b3c-a9e1-ff78bfbafb31','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:17','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200856 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200955,'Y',200857,'N','Absolute X (horizontal) position in 1/72 of an inch','D','Absolute X (horizontal) position in 1/72 of an inch','X Position','fb9b7e57-2d10-4f71-86c4-aa81635e2bcf','Y','N',100,0,TO_TIMESTAMP('2012-11-20 11:07:18','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-20 11:07:18','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 20, 2012 11:07:18 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200857 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET NumLines=3, SeqNo=100,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5052
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=2,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=5,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=130, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200854
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=150, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200849
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=170, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200851
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=180, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=190, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200856
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=5, NumLines=3, SeqNo=200, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET NumLines=3, SeqNo=210, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220, AD_FieldGroup_ID=200000, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230, AD_FieldGroup_ID=200000, IsDisplayed='Y', XPosition=5,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=240, AD_FieldGroup_ID=200001, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=250, AD_FieldGroup_ID=200001, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=260, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 20, 2012 11:18:15 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=0, IsDisplayed='N', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 11:18:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200848
+;
+
+-- Nov 20, 2012 11:28:00 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+CREATE OR REPLACE VIEW ad_field_v AS
+ SELECT t.ad_window_id, f.ad_tab_id, f.ad_field_id, tbl.ad_table_id, f.ad_column_id,
+ f.name, f.description, f.help, f.isdisplayed, f.displaylogic, f.displaylength, f.seqno,
+ f.sortno, f.issameline, f.isheading, f.isfieldonly, f.isreadonly, f.isencrypted AS isencryptedfield,
+ f.obscuretype, c.columnname, c.columnsql, c.fieldlength, c.vformat,
+ COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue, c.iskey, c.isparent,
+ COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated,
+ COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, c.callout,
+ COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id,
+ COALESCE(f.ad_val_rule_id, c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id,
+ COALESCE(f.Isalwaysupdateable , C.Isalwaysupdateable) As Isalwaysupdateable,
+ COALESCE(f.Readonlylogic,  c.Readonlylogic ) As Readonlylogic,
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic,
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable,
+ c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax,
+ fg.name AS fieldgroup, vr.code AS validationcode, f.included_tab_id, fg.fieldgrouptype, fg.iscollapsedbydefault,
+ COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete,
+ COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
+        f.isdisplayedgrid,
+        f.seqnogrid,
+        c.seqnoselection, f.xposition, f.columnspan, f.numlines,
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
+   FROM ad_field f
+   JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id
+   LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id
+   LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id
+   JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id
+   LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id)
+  WHERE f.isactive = 'Y'::bpchar AND c.isactive = 'Y'::bpchar;
+
+-- Nov 20, 2012 11:28:00 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+CREATE OR REPLACE VIEW ad_field_vt AS
+ SELECT trl.ad_language, t.ad_window_id, f.ad_tab_id, f.ad_field_id, tbl.ad_table_id, f.ad_column_id, trl.name, trl.description,
+ trl.help, f.isdisplayed, f.displaylogic, f.displaylength, f.seqno, f.sortno, f.issameline, f.isheading, f.isfieldonly, f.isreadonly,
+ f.isencrypted AS isencryptedfield, f.obscuretype, c.columnname, c.columnsql, c.fieldlength, c.vformat, COALESCE(f.defaultvalue, c.defaultvalue) AS defaultvalue,
+ c.iskey, c.isparent, COALESCE(f.ismandatory, c.ismandatory) AS ismandatory, c.isidentifier, c.istranslated,
+ COALESCE(f.ad_reference_value_id, c.ad_reference_value_id) AS ad_reference_value_id, c.callout, COALESCE(f.ad_reference_id, c.ad_reference_id) AS ad_reference_id,
+ COALESCE(f.ad_val_rule_id,c.ad_val_rule_id) AS ad_val_rule_id, c.ad_process_id,
+ COALESCE(f.Isalwaysupdateable,C.Isalwaysupdateable) As Isalwaysupdateable,
+ COALESCE(f.Readonlylogic,c.Readonlylogic) As Readonlylogic,
+ COALESCE(f.Mandatorylogic , C.Mandatorylogic) As Mandatorylogic,
+ COALESCE(f.isupdateable, c.isupdateable) AS isupdateable,
+ c.isencrypted AS isencryptedcolumn, c.isselectioncolumn, tbl.tablename, c.valuemin, c.valuemax, fgt.name AS fieldgroup, vr.code AS validationcode,
+ f.included_tab_id, fg.fieldgrouptype, fg.iscollapsedbydefault, COALESCE(f.infofactoryclass, c.infofactoryclass) AS infofactoryclass, c.isautocomplete,
+ COALESCE(f.IsAllowCopy, c.IsAllowCopy) AS IsAllowCopy,
+        f.isdisplayedgrid,
+        f.seqnogrid,
+        c.seqnoselection, f.xposition, f.columnspan, f.numlines,
+ COALESCE(f.istoolbarbutton , c.istoolbarbutton ) As istoolbarbutton
+   FROM ad_field f
+   JOIN ad_field_trl trl ON f.ad_field_id = trl.ad_field_id
+   JOIN ad_tab t ON f.ad_tab_id = t.ad_tab_id
+   LEFT JOIN ad_fieldgroup fg ON f.ad_fieldgroup_id = fg.ad_fieldgroup_id
+   LEFT JOIN ad_fieldgroup_trl fgt ON f.ad_fieldgroup_id = fgt.ad_fieldgroup_id AND trl.ad_language::text = fgt.ad_language::text
+   LEFT JOIN ad_column c ON f.ad_column_id = c.ad_column_id
+   JOIN ad_table tbl ON c.ad_table_id = tbl.ad_table_id
+   LEFT JOIN ad_val_rule vr ON vr.ad_val_rule_id = COALESCE(f.ad_val_rule_id, c.ad_val_rule_id)
+  WHERE f.isactive = 'Y'::bpchar AND c.isactive = 'Y'::bpchar;
+
+-- Nov 20, 2012 12:13:04 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_FieldGroup (FieldGroupType,EntityType,IsCollapsedByDefault,Name,AD_FieldGroup_UU,AD_FieldGroup_ID,AD_Client_ID,Created,CreatedBy,Updated,AD_Org_ID,UpdatedBy,IsActive) VALUES ('C','D','N','Overwritten From Column','a0d14c47-fa7e-4286-9818-e684e87171d7',200004,0,TO_TIMESTAMP('2012-11-20 12:13:03','YYYY-MM-DD HH24:MI:SS'),100,TO_TIMESTAMP('2012-11-20 12:13:03','YYYY-MM-DD HH24:MI:SS'),0,100,'Y')
+;
+
+-- Nov 20, 2012 12:13:04 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_FieldGroup_Trl (AD_Language,AD_FieldGroup_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_FieldGroup_Trl_UU ) SELECT l.AD_Language,t.AD_FieldGroup_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_FieldGroup t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_FieldGroup_ID=200004 AND NOT EXISTS (SELECT * FROM AD_FieldGroup_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_FieldGroup_ID=t.AD_FieldGroup_ID)
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=2,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=142
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=150,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=924
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=170,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=137
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=180,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200274
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=190,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=138
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=200,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=8343
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=140
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=141
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=53280
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200275
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=260, IsDisplayed='Y', XPosition=2,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=270, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=280, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=290, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=300, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 20, 2012 12:24:35 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=310, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:35','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=320, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=330, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=340, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 20, 2012 12:24:36 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=350, AD_FieldGroup_ID=200004, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-20 12:24:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 21, 2012 10:43:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=28',Updated=TO_TIMESTAMP('2012-11-21 10:43:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 21, 2012 10:43:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=17 | @AD_Reference_ID@=18 | @AD_Reference_ID@=30 | @AD_Reference_ID@=28',Updated=TO_TIMESTAMP('2012-11-49 10:43:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 21, 2012 11:58:01 AM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET DisplayLogic='@AD_Reference_ID@=28',Updated=TO_TIMESTAMP('2012-11-21 11:58:01','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200856
+;
+
+-- Nov 21, 2012 2:18:12 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column (SeqNoSelection,IsSyncDatabase,IsEncrypted,Version,AD_Table_ID,AD_Column_ID,EntityType,AD_Reference_Value_ID,IsMandatory,IsTranslated,IsIdentifier,SeqNo,IsParent,FieldLength,IsSelectionColumn,AD_Reference_ID,IsKey,AD_Element_ID,IsAutocomplete,IsAllowLogging,AD_Column_UU,IsUpdateable,IsAlwaysUpdateable,ColumnName,Description,Help,Name,IsAllowCopy,Updated,CreatedBy,AD_Org_ID,IsActive,Created,UpdatedBy,AD_Client_ID,IsToolbarButton) VALUES (0,'N','N',0,464,200959,'D',1,'N','N','N',0,'N',10,'N',18,'N',120,'N','Y','81b17412-3ebc-4191-b0b1-050dfbdcc3d4','Y','N','AD_Reference_ID','System Reference and Validation','The Reference could be a display type, list or table validation.','Reference','Y',TO_TIMESTAMP('2012-11-21 14:18:11','YYYY-MM-DD HH24:MI:SS'),100,0,'Y',TO_TIMESTAMP('2012-11-21 14:18:11','YYYY-MM-DD HH24:MI:SS'),100,0,'N')
+;
+
+-- Nov 21, 2012 2:18:12 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Column_Trl (AD_Language,AD_Column_ID, Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Column_Trl_UU ) SELECT l.AD_Language,t.AD_Column_ID, t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Column t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Column_ID=200959 AND NOT EXISTS (SELECT * FROM AD_Column_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Column_ID=t.AD_Column_ID)
+;
+
+-- Nov 21, 2012 2:19:09 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+ALTER TABLE AD_UserDef_Field ADD COLUMN AD_Reference_ID NUMERIC(10) DEFAULT NULL 
+;
+
+-- Nov 21, 2012 2:23:17 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field (IsEncrypted,AD_Tab_ID,DisplayLength,IsSameLine,IsHeading,AD_Column_ID,IsCentrallyMaintained,AD_Field_ID,IsReadOnly,Help,EntityType,Description,Name,AD_Field_UU,IsDisplayed,IsFieldOnly,UpdatedBy,AD_Org_ID,Created,AD_Client_ID,CreatedBy,Updated,IsActive) VALUES ('N',395,10,'N','N',200959,'Y',200858,'N','The Reference could be a display type, list or table validation.','D','System Reference and Validation','Reference','2e669f8a-65f1-46e4-a5c1-1a4edef9421f','Y','N',100,0,TO_TIMESTAMP('2012-11-21 14:23:16','YYYY-MM-DD HH24:MI:SS'),0,100,TO_TIMESTAMP('2012-11-21 14:23:16','YYYY-MM-DD HH24:MI:SS'),'Y')
+;
+
+-- Nov 21, 2012 2:23:17 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO AD_Field_Trl (AD_Language,AD_Field_ID, Help,Description,Name, IsTranslated,AD_Client_ID,AD_Org_ID,Created,Createdby,Updated,UpdatedBy,AD_Field_Trl_UU ) SELECT l.AD_Language,t.AD_Field_ID, t.Help,t.Description,t.Name, 'N',t.AD_Client_ID,t.AD_Org_ID,t.Created,t.Createdby,t.Updated,t.UpdatedBy,Generate_UUID() FROM AD_Language l, AD_Field t WHERE l.IsActive='Y' AND l.IsSystemLanguage='Y' AND l.IsBaseLanguage='N' AND t.AD_Field_ID=200858 AND NOT EXISTS (SELECT * FROM AD_Field_Trl tt WHERE tt.AD_Language=l.AD_Language AND tt.AD_Field_ID=t.AD_Field_ID)
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET ColumnSpan=2, SeqNo=180, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=200,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200855
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=230,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 21, 2012 2:25:54 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_TIMESTAMP('2012-11-21 14:25:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 21, 2012 2:28:56 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET IsCentrallyMaintained='N', Help='You can overwrite the Display Type, but only use this if you aware of the consequences.', AD_FieldGroup_ID=200004, Description='System Reference - optional Overwrite', Name='Reference Overwrite',Updated=TO_TIMESTAMP('2012-11-21 14:28:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 2:28:56 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field_Trl SET IsTranslated='N' WHERE AD_Field_ID=200858
+;
+
+-- Nov 21, 2012 3:46:11 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO t_alter_column values('ad_userdef_field','DisplayLogic','VARCHAR(2000)',null,'NULL')
+;
+
+-- Nov 21, 2012 3:46:11 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+INSERT INTO t_alter_column values('ad_userdef_field','DisplayLogic',null,'NULL',null)
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Element SET Name='Always Updatable', PrintName='Always Updatable',Updated=TO_TIMESTAMP('2012-11-22 15:31:16','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Element_Trl SET IsTranslated='N' WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Element_ID=2468
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Process_Para SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.', AD_Element_ID=2468 WHERE UPPER(ColumnName)='ISALWAYSUPDATEABLE' AND IsCentrallyMaintained='Y' AND AD_Element_ID IS NULL
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Process_Para SET ColumnName='IsAlwaysUpdateable', Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Element_ID=2468 AND IsCentrallyMaintained='Y'
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET Name='Always Updatable', Description='The column is always updateable, even if the record is not active or processed', Help='If selected and if the window / tab is not read only, you can always update the column.  This might be useful for comments, etc.' WHERE AD_Column_ID IN (SELECT AD_Column_ID FROM AD_Column WHERE AD_Element_ID=2468) AND IsCentrallyMaintained='Y'
+;
+
+-- Nov 22, 2012 3:31:16 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_PrintFormatItem SET PrintName='Always Updatable', Name='Always Updatable' WHERE IsCentrallyMaintained='Y' AND EXISTS (SELECT * FROM AD_Column c WHERE c.AD_Column_ID=AD_PrintFormatItem.AD_Column_ID AND c.AD_Element_ID=2468)
+;
+
+-- Nov 22, 2012 3:38:25 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_TIMESTAMP('2012-11-22 15:38:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6349
+;
+
+-- Nov 22, 2012 3:39:51 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_TIMESTAMP('2012-11-22 15:39:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6352
+;
+
+-- Nov 22, 2012 3:40:28 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, IsMandatory='N', AD_Reference_ID=17,Updated=TO_TIMESTAMP('2012-11-22 15:40:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6356
+;
+
+-- Nov 22, 2012 3:42:22 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Column SET AD_Reference_Value_ID=319, AD_Reference_ID=17,Updated=TO_TIMESTAMP('2012-11-22 15:42:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6353
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=90, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5050
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=110, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 22, 2012 3:49:32 PM COT
+-- IDEMPIERE-163: Adding UI Fields to  AD_Field and Ad_Userdef_Field
+UPDATE AD_Field SET SeqNo=240, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-22 15:49:32','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=2,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200771
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=200, IsDisplayed='Y', XPosition=2,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=142
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=210,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=8343
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=220,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=140
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=230,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=141
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=280,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=290,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=300,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=310,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=320,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 23, 2012 12:13:22 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=330, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-23 12:13:22','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 23, 2012 12:37:33 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 12:37:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200350
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200348
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=280, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200349
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=290,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13425
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=300,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200837
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=310,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54402
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=320,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=54401
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=330,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200838
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=340,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200834
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=350,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=13424
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=360,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=62468
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=370,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200835
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=380,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200836
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=390,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=136
+;
+
+-- Nov 23, 2012 12:37:34 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=400,Updated=TO_TIMESTAMP('2012-11-23 12:37:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=139
+;
+
+-- Nov 23, 2012 12:38:25 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_FieldGroup SET FieldGroupType='C', IsCollapsedByDefault='Y',Updated=TO_TIMESTAMP('2012-11-23 12:38:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_FieldGroup_ID=200000
+;
+
+update ad_field set seqnogrid=seqno where ad_tab_id=107
+;
+
+-- hide org field on grid for system only windows (all org=0 in this case)
+update ad_field set isdisplayedgrid='N'
+where ad_column_id in (select ad_column_id from ad_column where ad_element_id=113) /* ad_org_id */
+and ad_field_id < 1000000
+and ad_column_id in (select c.ad_column_id from ad_column c join ad_table t on t.ad_table_id=c.ad_table_id where t.accesslevel='4')
+;
+
+-- Nov 23, 2012 12:46:44 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:46:44','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200946
+;
+
+-- Nov 23, 2012 12:48:19 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:48:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200949
+;
+
+-- Nov 23, 2012 12:48:38 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:48:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200945
+;
+
+-- Nov 23, 2012 12:50:37 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:50:37','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200950
+;
+
+-- Nov 23, 2012 12:51:12 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:51:12','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200955
+;
+
+-- Nov 23, 2012 12:52:07 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:52:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200956
+;
+
+-- Nov 23, 2012 12:52:50 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:52:50','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200957
+;
+
+-- Nov 23, 2012 12:53:54 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 12:53:54','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=200958
+;
+
+-- Nov 23, 2012 1:04:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 13:04:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6349
+;
+
+-- Nov 23, 2012 1:04:40 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsDisplayed','CHAR(1)',null,'NULL')
+;
+
+-- Nov 23, 2012 1:04:41 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsDisplayed',null,'NULL',null)
+;
+
+-- Nov 23, 2012 1:05:41 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 13:05:41','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6352
+;
+
+-- Nov 23, 2012 1:05:44 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsReadOnly','CHAR(1)',null,'NULL')
+;
+
+-- Nov 23, 2012 1:05:45 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsReadOnly',null,'NULL',null)
+;
+
+-- Nov 23, 2012 1:06:07 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Column SET DefaultValue=NULL,Updated=TO_TIMESTAMP('2012-11-23 13:06:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=6356
+;
+
+-- Nov 23, 2012 1:06:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsSameLine','CHAR(1)',null,'NULL')
+;
+
+-- Nov 23, 2012 1:06:11 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+INSERT INTO t_alter_column values('ad_userdef_field','IsSameLine',null,'NULL',null)
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=70, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5049
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=80,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5044
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=100, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5053
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=110,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5052
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=120, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5056
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=130, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5055
+;
+
+-- Nov 23, 2012 1:32:08 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=140, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=11252
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=150, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200857
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=160, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200850
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=170, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200853
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=210, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5054
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=220, IsDisplayed='Y', XPosition=4,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200849
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=230, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200851
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=240, IsDisplayed='Y', XPosition=1,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200852
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=250,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200854
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=260,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5051
+;
+
+-- Nov 23, 2012 1:32:09 PM COT
+-- IDEMPIERE-163 Implement isupdateable and isalwaysupdateable on ad_field
+UPDATE AD_Field SET SeqNo=270,Updated=TO_TIMESTAMP('2012-11-23 13:32:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=5057
+;
+
+SELECT register_migration_script('201211211000_IDEMPIERE-163.sql') FROM dual
+;
+
diff --git a/migration/i1.0a-release/postgresql/201211231024_IDEMPIERE-369_ReorgTabs.sql b/migration/i1.0a-release/postgresql/201211231024_IDEMPIERE-369_ReorgTabs.sql
new file mode 100644
index 0000000000..c58d668fbf
--- /dev/null
+++ b/migration/i1.0a-release/postgresql/201211231024_IDEMPIERE-369_ReorgTabs.sql
@@ -0,0 +1,428 @@
+-- Nov 16, 2012 2:47:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 14:47:07','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53210
+;
+
+-- Nov 16, 2012 2:47:13 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 14:47:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=331
+;
+
+-- Nov 16, 2012 2:49:20 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 14:49:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=549
+;
+
+-- Nov 16, 2012 2:49:27 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 14:49:27','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=136
+;
+
+-- Nov 16, 2012 2:49:33 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 14:49:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=215
+;
+
+-- Nov 16, 2012 2:50:55 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 14:50:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=557
+;
+
+-- Nov 16, 2012 2:51:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 14:51:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=127
+;
+
+-- Nov 16, 2012 2:56:23 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 14:56:23','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=303
+;
+
+-- Nov 16, 2012 2:56:28 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 14:56:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=309
+;
+
+-- Nov 16, 2012 2:59:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 14:59:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=233
+;
+
+-- Nov 16, 2012 2:59:10 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 14:59:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=503
+;
+
+-- Nov 16, 2012 3:01:47 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_TIMESTAMP('2012-11-16 15:01:47','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=171
+;
+
+-- Nov 16, 2012 3:01:51 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:01:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=104
+;
+
+-- Nov 16, 2012 3:01:56 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:01:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=172
+;
+
+-- Nov 16, 2012 3:02:00 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:02:00','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=103
+;
+
+-- Nov 16, 2012 3:02:05 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_TIMESTAMP('2012-11-16 15:02:05','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=773
+;
+
+-- Nov 16, 2012 3:08:20 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:08:20','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=246
+;
+
+-- Nov 16, 2012 3:08:29 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:08:29','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=247
+;
+
+-- Nov 16, 2012 3:08:36 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:08:36','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=248
+;
+
+-- Nov 16, 2012 3:08:40 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_TIMESTAMP('2012-11-16 15:08:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=308
+;
+
+-- Nov 16, 2012 3:10:04 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:10:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=101
+;
+
+-- Nov 16, 2012 3:10:10 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:10:10','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=681
+;
+
+-- Nov 16, 2012 3:10:13 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:10:13','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53298
+;
+
+-- Nov 16, 2012 3:10:17 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_TIMESTAMP('2012-11-16 15:10:17','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=53069
+;
+
+-- Nov 16, 2012 3:10:21 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_TIMESTAMP('2012-11-16 15:10:21','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=673
+;
+
+-- Nov 16, 2012 3:11:11 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:11:11','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=333
+;
+
+-- Nov 16, 2012 3:11:15 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:11:15','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=640
+;
+
+-- Nov 16, 2012 3:11:19 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:11:19','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=458
+;
+
+-- Nov 16, 2012 3:12:02 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:12:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=134
+;
+
+-- Nov 16, 2012 3:12:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:12:06','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=273
+;
+
+-- Nov 16, 2012 3:13:49 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:13:49','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=106
+;
+
+-- Nov 16, 2012 3:13:53 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:13:53','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=116
+;
+
+-- Nov 16, 2012 3:13:57 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:13:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=430
+;
+
+-- Nov 16, 2012 3:14:04 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_TIMESTAMP('2012-11-16 15:14:04','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200009
+;
+
+-- Nov 16, 2012 3:14:08 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_TIMESTAMP('2012-11-16 15:14:08','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=107
+;
+
+-- Nov 16, 2012 3:14:25 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_TIMESTAMP('2012-11-16 15:14:25','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=115
+;
+
+-- Nov 16, 2012 3:14:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=80,Updated=TO_TIMESTAMP('2012-11-16 15:14:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=200028
+;
+
+-- Nov 16, 2012 3:14:34 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=90,Updated=TO_TIMESTAMP('2012-11-16 15:14:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=117
+;
+
+-- Nov 16, 2012 3:14:39 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=100,Updated=TO_TIMESTAMP('2012-11-16 15:14:39','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=311
+;
+
+-- Nov 16, 2012 3:17:02 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:17:02','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=107
+;
+
+-- Nov 16, 2012 3:17:24 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_TIMESTAMP('2012-11-16 15:17:24','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=116
+;
+
+-- Nov 16, 2012 3:17:28 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_TIMESTAMP('2012-11-16 15:17:28','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=115
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N' WHERE AD_Field_ID=275
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=0,IsDisplayedGrid='N' WHERE AD_Field_ID=6432
+;
+
+-- Nov 16, 2012 3:22:06 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=10,IsDisplayedGrid='Y' WHERE AD_Field_ID=1990
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=20,IsDisplayedGrid='Y' WHERE AD_Field_ID=126
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=30,IsDisplayedGrid='Y' WHERE AD_Field_ID=127
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=40,IsDisplayedGrid='Y' WHERE AD_Field_ID=128
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=50,IsDisplayedGrid='Y' WHERE AD_Field_ID=129
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=60,IsDisplayedGrid='Y' WHERE AD_Field_ID=274
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=70,IsDisplayedGrid='Y' WHERE AD_Field_ID=130
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=80,IsDisplayedGrid='Y' WHERE AD_Field_ID=5808
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=90,IsDisplayedGrid='Y' WHERE AD_Field_ID=4259
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=100,IsDisplayedGrid='Y' WHERE AD_Field_ID=1551
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=110,IsDisplayedGrid='Y' WHERE AD_Field_ID=132
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=120,IsDisplayedGrid='Y' WHERE AD_Field_ID=200276
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=130,IsDisplayedGrid='Y' WHERE AD_Field_ID=924
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=140,IsDisplayedGrid='Y' WHERE AD_Field_ID=133
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=150,IsDisplayedGrid='Y' WHERE AD_Field_ID=136
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=160,IsDisplayedGrid='Y' WHERE AD_Field_ID=142
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=170,IsDisplayedGrid='Y' WHERE AD_Field_ID=137
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=180,IsDisplayedGrid='Y' WHERE AD_Field_ID=200274
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=190,IsDisplayedGrid='Y' WHERE AD_Field_ID=139
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=200,IsDisplayedGrid='Y' WHERE AD_Field_ID=138
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=210,IsDisplayedGrid='Y' WHERE AD_Field_ID=8343
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=220,IsDisplayedGrid='Y' WHERE AD_Field_ID=140
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=230,IsDisplayedGrid='Y' WHERE AD_Field_ID=141
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=240,IsDisplayedGrid='Y' WHERE AD_Field_ID=13425
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=250,IsDisplayedGrid='Y' WHERE AD_Field_ID=54401
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=260,IsDisplayedGrid='Y' WHERE AD_Field_ID=54402
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=270,IsDisplayedGrid='Y' WHERE AD_Field_ID=13424
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=280,IsDisplayedGrid='Y' WHERE AD_Field_ID=62468
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=290,IsDisplayedGrid='Y' WHERE AD_Field_ID=200771
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=300,IsDisplayedGrid='Y' WHERE AD_Field_ID=53280
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=310,IsDisplayedGrid='Y' WHERE AD_Field_ID=200275
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=320,IsDisplayedGrid='Y' WHERE AD_Field_ID=200350
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=330,IsDisplayedGrid='Y' WHERE AD_Field_ID=200348
+;
+
+-- Nov 16, 2012 3:22:07 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Field SET SeqNoGrid=340,IsDisplayedGrid='Y' WHERE AD_Field_ID=200349
+;
+
+-- Nov 16, 2012 3:25:30 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=70,Updated=TO_TIMESTAMP('2012-11-16 15:25:30','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=149
+;
+
+-- Nov 16, 2012 3:25:34 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=80,Updated=TO_TIMESTAMP('2012-11-16 15:25:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=312
+;
+
+-- Nov 16, 2012 3:25:38 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=20,Updated=TO_TIMESTAMP('2012-11-16 15:25:38','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=122
+;
+
+-- Nov 16, 2012 3:25:43 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=30,Updated=TO_TIMESTAMP('2012-11-16 15:25:43','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=577
+;
+
+-- Nov 16, 2012 3:25:46 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=40,Updated=TO_TIMESTAMP('2012-11-16 15:25:46','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=123
+;
+
+-- Nov 16, 2012 3:25:51 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=50,Updated=TO_TIMESTAMP('2012-11-16 15:25:51','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=124
+;
+
+-- Nov 16, 2012 3:25:55 PM COT
+-- IDEMPIERE-369 Master Detail layout improvements
+UPDATE AD_Tab SET SeqNo=60,Updated=TO_TIMESTAMP('2012-11-16 15:25:55','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Tab_ID=644
+;
+
+SELECT register_migration_script('201211231024_IDEMPIERE-369_ReorgTabs.sql') FROM dual
+;
+
diff --git a/org.adempiere.base-feature/model.generator.launch b/org.adempiere.base-feature/model.generator.launch
index 81e50a2ba2..23b16c1b54 100644
--- a/org.adempiere.base-feature/model.generator.launch
+++ b/org.adempiere.base-feature/model.generator.launch
@@ -12,7 +12,7 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/model.generator"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="com.trekglobal.ui.zk.theme,org.adempiere.base.callout,org.adempiere.base.process,org.adempiere.payment.processor,org.adempiere.pipo,org.adempiere.pipo.handlers,org.adempiere.plugin.utils,org.adempiere.replication,org.adempiere.replication.server,org.adempiere.report.jasper.swing,org.adempiere.report.jasper.webapp,org.adempiere.server,org.adempiere.tomcat.config,org.adempiere.ui,org.adempiere.ui.swing,org.adempiere.ui.zk,org.adempiere.ui.zk.example,org.adempiere.webstore,org.adempiere.webstore.resource,org.adempiere.webstore.servlet,org.idempiere.webservices,org.zkoss.zk.library"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.adempiere.base.callout,org.adempiere.base.process,org.adempiere.payment.processor,org.adempiere.pipo,org.adempiere.pipo.handlers,org.adempiere.replication,org.adempiere.replication.server,org.adempiere.report.jasper.swing,org.adempiere.report.jasper.webapp,org.adempiere.server,org.adempiere.tomcat.config,org.adempiere.ui.zk,org.adempiere.ui.zk.example,org.adempiere.webstore,org.adempiere.webstore.resource,org.adempiere.webstore.servlet,org.idempiere.webservices,org.zkoss.zk.library"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../runtime-model.generator"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
@@ -20,8 +20,8 @@
 <stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.adempiere.server.server_product"/>
-<stringAttribute key="selected_target_plugins" value="com.springsource.javax.ejb@default:default,com.springsource.javax.jms@default:default,com.springsource.javax.mail@default:default,com.springsource.javax.management.j2ee@default:default,com.springsource.javax.transaction@default:default,com.springsource.javax.xml.rpc@default:default,com.springsource.javax.xml.soap@default:default,com.springsource.net.sf.cglib@default:default,com.springsource.org.aopalliance@default:default,com.springsource.org.apache.activemq@default:default,com.springsource.org.apache.commons.logging@default:default,com.springsource.org.apache.kahadb@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.poi@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.junit@default:default,org.restlet@default:default,org.springframework.aop@default:default,org.springframework.beans@default:default,org.springframework.context@default:default,org.springframework.core@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.adempiere.base@default:default,org.adempiere.eclipse.equinox.http.servlet@default:default,org.adempiere.eclipse.equinox.http.servletbridge@default:default,org.adempiere.eclipse.equinox.servletbridge@default:default,org.adempiere.extend@default:false,org.adempiere.install@default:default,org.adempiere.report.jasper.library@default:default,org.adempiere.report.jasper@default:default,org.apache.ecs@default:default,org.compiere.db.oracle.provider@default:default,org.compiere.db.postgresql.provider@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.springsource.javax.ejb@default:default,com.springsource.javax.jms@default:default,com.springsource.javax.mail*1.4.0@default:default,com.springsource.javax.mail*1.4.5@default:default,com.springsource.javax.management.j2ee@default:default,com.springsource.javax.persistence@default:default,com.springsource.javax.transaction@default:default,com.springsource.javax.xml.rpc@default:default,com.springsource.javax.xml.soap@default:default,com.springsource.net.sf.cglib@default:default,com.springsource.org.aopalliance@default:default,com.springsource.org.apache.activemq@default:default,com.springsource.org.apache.commons.logging@default:default,com.springsource.org.apache.kahadb@default:default,javax.el@default:default,javax.servlet@default:default,javax.xml@default:default,org.apache.ant@default:default,org.apache.commons.codec@default:default,org.apache.commons.collections@default:default,org.apache.commons.logging@default:default,org.apache.commons.net@default:default,org.apache.poi@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.ds@1:true,org.eclipse.equinox.http.registry@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.equinox.util@default:default,org.eclipse.osgi.services@default:default,org.eclipse.osgi@-1:true,org.hamcrest.core@default:default,org.junit@default:default,org.restlet.ext.net@default:default,org.restlet@default:default,org.springframework.aop@default:default,org.springframework.beans@default:default,org.springframework.context@default:default,org.springframework.core@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="event.test@default:default,org.adempiere.base@default:default,org.adempiere.eclipse.equinox.http.servlet@default:default,org.adempiere.eclipse.equinox.http.servletbridge@default:default,org.adempiere.eclipse.equinox.servletbridge@default:default,org.adempiere.extend@default:false,org.adempiere.install@default:default,org.adempiere.pipo.legacy@default:default,org.adempiere.plugin.utils@default:default,org.adempiere.report.jasper.font.demo@default:false,org.adempiere.report.jasper.library@default:default,org.adempiere.report.jasper@default:default,org.adempiere.ui.swing.pluginlist@default:default,org.adempiere.ui.swing@default:default,org.adempiere.ui@default:default,org.apache.ecs@default:default,org.apache.poi@default:default,org.compiere.db.oracle.provider@default:default,org.compiere.db.postgresql.provider@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
 <booleanAttribute key="tracing" value="false"/>
diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutInventory.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutInventory.java
index 382b439e59..324518cf06 100644
--- a/org.adempiere.base.callout/src/org/compiere/model/CalloutInventory.java
+++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutInventory.java
@@ -147,12 +147,12 @@ public class CalloutInventory extends CalloutEngine
 	private BigDecimal setQtyBook (int M_AttributeSetInstance_ID, int M_Product_ID, int M_Locator_ID) throws Exception {
 		// Set QtyBook from first storage location
 		BigDecimal bd = null;
-		String sql = "SELECT QtyOnHand FROM M_Storage "
+		String sql = "SELECT QtyOnHand FROM M_StorageOnHand "
 			+ "WHERE M_Product_ID=?"	//	1
 			+ " AND M_Locator_ID=?"		//	2
 			+ " AND M_AttributeSetInstance_ID=?";
 		if (M_AttributeSetInstance_ID == 0)
-			sql = "SELECT SUM(QtyOnHand) FROM M_Storage "
+			sql = "SELECT SUM(QtyOnHand) FROM M_StorageOnHand "
 			+ "WHERE M_Product_ID=?"	//	1
 			+ " AND M_Locator_ID=?";	//	2
 		
diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutMovement.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutMovement.java
index 30885b06b7..b05a50e7d8 100644
--- a/org.adempiere.base.callout/src/org/compiere/model/CalloutMovement.java
+++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutMovement.java
@@ -20,6 +20,7 @@ package org.compiere.model;
 import java.math.BigDecimal;
 import java.util.Properties;
 
+import org.compiere.util.DB;
 import org.compiere.util.Env;
 
 /**
@@ -121,7 +122,10 @@ public class CalloutMovement extends CalloutEngine
 				if (M_Locator_ID <= 0)
 					return;
 				int M_AttributeSetInstance_ID = Env.getContextAsInt(ctx, WindowNo, "M_AttributeSetInstance_ID");
-				BigDecimal available = MStorage.getQtyAvailable(0, M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID, null);
+				BigDecimal available = Env.ZERO;
+				MStorageOnHand oh = MStorageOnHand.get(ctx, M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID, null);
+				if (oh != null)
+					available = oh.getQtyOnHand();
 				if (available == null)
 					available = Env.ZERO;
 				if (available.signum() == 0)
diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java
index 21b96bc58b..9bec930acb 100644
--- a/org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java
+++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutOrder.java
@@ -821,8 +821,8 @@ public class CalloutOrder extends CalloutEngine
 				BigDecimal QtyOrdered = (BigDecimal)mTab.getValue("QtyOrdered");
 				int M_Warehouse_ID = Env.getContextAsInt(ctx, WindowNo, "M_Warehouse_ID");
 				int M_AttributeSetInstance_ID = Env.getContextAsInt(ctx, WindowNo, "M_AttributeSetInstance_ID");
-				BigDecimal available = MStorage.getQtyAvailable
-					(M_Warehouse_ID, 0, M_Product_ID.intValue(), M_AttributeSetInstance_ID, null);
+				BigDecimal available = MStorageReservation.getQtyAvailable
+					(M_Warehouse_ID, M_Product_ID.intValue(), M_AttributeSetInstance_ID, null);
 				if (available == null)
 					available = Env.ZERO;
 				if (available.signum() == 0)
@@ -1296,8 +1296,8 @@ public class CalloutOrder extends CalloutEngine
 			{
 				int M_Warehouse_ID = Env.getContextAsInt(ctx, WindowNo, "M_Warehouse_ID");
 				int M_AttributeSetInstance_ID = Env.getContextAsInt(ctx, WindowNo, "M_AttributeSetInstance_ID");
-				BigDecimal available = MStorage.getQtyAvailable
-					(M_Warehouse_ID, 0, M_Product_ID, M_AttributeSetInstance_ID, null);
+				BigDecimal available = MStorageReservation.getQtyAvailable
+					(M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID, null);
 				if (available == null)
 					available = Env.ZERO;
 				if (available.signum() == 0)
diff --git a/org.adempiere.base.callout/src/org/compiere/model/CalloutWindowCustomization.java b/org.adempiere.base.callout/src/org/compiere/model/CalloutWindowCustomization.java
index 68c0eece09..0c999da4ef 100644
--- a/org.adempiere.base.callout/src/org/compiere/model/CalloutWindowCustomization.java
+++ b/org.adempiere.base.callout/src/org/compiere/model/CalloutWindowCustomization.java
@@ -27,12 +27,6 @@ import org.compiere.util.Env;
  */
 public class CalloutWindowCustomization extends CalloutEngine
 {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
 	/**
 	 *	Set fields to current values from DB for selected window.
 	 *	@param ctx context
@@ -57,15 +51,15 @@ public class CalloutWindowCustomization extends CalloutEngine
 		ud_win.setDescription(window.get_Translation("Description", lang));
 		ud_win.setHelp(window.get_Translation("Help", lang));
 		
-		// XXX what for?
+		//  what for?
 		ud_win.setIsDefault(window.isDefault()); 
 		
 		// default from menu, actual from role
-		// XXX Read Only
-		// XXX User updateable
+		//  Read Only
+		//  User updateable
 		
 		return NO_ERROR;
-	}	//	storeAttachmentOnFilesystem
+	}	//	window
 	
 	/**
 	 *	Set fields to current values from DB for selected Tab
@@ -93,9 +87,9 @@ public class CalloutWindowCustomization extends CalloutEngine
 		
 		ud_tab.setIsSingleRow(tab.isSingleRow()); 
 		ud_tab.setIsReadOnly(tab.isReadOnly()); 
-				
+
 		return NO_ERROR;
-	}	//	storeArchiveOnFileSystem
+	}	//	tab
 	
 	/**
 	 *	Set fields to current values from DB for selected Tab
@@ -113,25 +107,16 @@ public class CalloutWindowCustomization extends CalloutEngine
 			return "";
 
 		I_AD_UserDef_Field ud_field = GridTabWrapper.create(mTab, I_AD_UserDef_Field.class);
-		
-		MField field = new MField(Env.getCtx(),p_AD_Field_ID, null);
+
+		MField field = new MField(ctx, p_AD_Field_ID, null);
 		String lang = Env.getContext(ctx, WindowNo, "AD_Language");
 
 		ud_field.setName(field.get_Translation("Name", lang));
 		ud_field.setDescription(field.get_Translation("Description", lang));
 		ud_field.setHelp(field.get_Translation("Help", lang));
-		
-		ud_field.setIsDisplayed(field.isDisplayed());
-		ud_field.setDisplayLength(field.getDisplayLength());
-		ud_field.setDisplayLogic(field.getDisplayLogic());
-		ud_field.setIsReadOnly(field.isReadOnly());
-		// XXX from column? set to true for starters
-		ud_field.setIsUpdateable(true); 
-		ud_field.setSeqNo(field.getSeqNo()); 
-		ud_field.setIsSameLine(field.isSameLine()); 
-		ud_field.setSortNo(field.getSortNo().intValue()); 
-		
+		//IDEMPIERE-163 / do not inherit configuration from field - all configuration was made nullable, if null it inherit the field/column config
+
 		return NO_ERROR;
-	}	//	storeArchiveOnFileSystem
+	}	//	field
 
 }	//	CalloutClient
diff --git a/org.adempiere.base.process/src/org/compiere/process/InOutGenerate.java b/org.adempiere.base.process/src/org/compiere/process/InOutGenerate.java
index bb0c5fbb69..221cbbcb97 100644
--- a/org.adempiere.base.process/src/org/compiere/process/InOutGenerate.java
+++ b/org.adempiere.base.process/src/org/compiere/process/InOutGenerate.java
@@ -30,7 +30,7 @@ import org.compiere.model.MInOutLine;
 import org.compiere.model.MOrder;
 import org.compiere.model.MOrderLine;
 import org.compiere.model.MProduct;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.util.AdempiereUserError;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
@@ -78,11 +78,11 @@ public class InOutGenerate extends SvrProcess
 
 	
 	/** Storages temp space				*/
-	private HashMap<SParameter,MStorage[]> m_map = new HashMap<SParameter,MStorage[]>();
+	private HashMap<SParameter,MStorageOnHand[]> m_map = new HashMap<SParameter,MStorageOnHand[]>();
 	/** Last Parameter					*/
 	private SParameter		m_lastPP = null;
 	/** Last Storage					*/
-	private MStorage[]		m_lastStorages = null;
+	private MStorageOnHand[]		m_lastStorages = null;
 
 	
 	/**
@@ -299,13 +299,13 @@ public class InOutGenerate extends SvrProcess
 					//	Stored Product
 					String MMPolicy = product.getMMPolicy();
 
-					MStorage[] storages = getStorages(line.getM_Warehouse_ID(),
+					MStorageOnHand[] storages = getStorages(line.getM_Warehouse_ID(),
 							 line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
 							 minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy));
 					
 					for (int j = 0; j < storages.length; j++)
 					{
-						MStorage storage = storages[j];
+						MStorageOnHand storage = storages[j];
 						onHand = onHand.add(storage.getQtyOnHand());
 					}
 					boolean fullLine = onHand.compareTo(toDeliver) >= 0
@@ -377,7 +377,7 @@ public class InOutGenerate extends SvrProcess
 						MProduct product = line.getProduct();
 						BigDecimal toDeliver = line.getQtyOrdered().subtract(line.getQtyDelivered());
 						//
-						MStorage[] storages = null;
+						MStorageOnHand[] storages = null;
 						if (product != null && product.isStocked())
 						{
 							String MMPolicy = product.getMMPolicy();
@@ -425,7 +425,7 @@ public class InOutGenerate extends SvrProcess
 	 *	@param force force delivery
 	 */
 	private void createLine (MOrder order, MOrderLine orderLine, BigDecimal qty, 
-		MStorage[] storages, boolean force)
+		MStorageOnHand[] storages, boolean force)
 	{
 		//	Complete last Shipment - can have multiple shipments
 		if (m_lastC_BPartner_Location_ID != orderLine.getC_BPartner_Location_ID() )
@@ -466,7 +466,7 @@ public class InOutGenerate extends SvrProcess
 		BigDecimal toDeliver = qty;
 		for (int i = 0; i < storages.length; i++)
 		{
-			MStorage storage = storages[i];
+			MStorageOnHand storage = storages[i];
 			BigDecimal deliver = toDeliver;
 			//skip negative storage record
 			if (storage.getQtyOnHand().signum() < 0) 
@@ -550,7 +550,7 @@ public class InOutGenerate extends SvrProcess
 	 *	@param FiFo
 	 *	@return storages
 	 */
-	private MStorage[] getStorages(int M_Warehouse_ID, 
+	private MStorageOnHand[] getStorages(int M_Warehouse_ID, 
 			 int M_Product_ID, int M_AttributeSetInstance_ID,
 			  Timestamp minGuaranteeDate, boolean FiFo)
 	{
@@ -562,7 +562,7 @@ public class InOutGenerate extends SvrProcess
 		
 		if (m_lastStorages == null)
 		{
-			m_lastStorages = MStorage.getWarehouse(getCtx(), 
+			m_lastStorages = MStorageOnHand.getWarehouse(getCtx(), 
 				M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID,
 				minGuaranteeDate, FiFo,false, 0, get_TrxName());
 			m_map.put(m_lastPP, m_lastStorages);
@@ -590,7 +590,7 @@ public class InOutGenerate extends SvrProcess
 			m_created++;
 			
 			//reset storage cache as MInOut.completeIt will update m_storage
-			m_map = new HashMap<SParameter,MStorage[]>();
+			m_map = new HashMap<SParameter,MStorageOnHand[]>();
 			m_lastPP = null;
 			m_lastStorages = null;
 		}
diff --git a/org.adempiere.base.process/src/org/compiere/process/InventoryCountCreate.java b/org.adempiere.base.process/src/org/compiere/process/InventoryCountCreate.java
index 8a6e836b7a..e100a29071 100644
--- a/org.adempiere.base.process/src/org/compiere/process/InventoryCountCreate.java
+++ b/org.adempiere.base.process/src/org/compiere/process/InventoryCountCreate.java
@@ -135,13 +135,13 @@ public class InventoryCountCreate extends SvrProcess
 		//	Create Null Storage records
 		if (p_QtyRange != null && p_QtyRange.equals("="))
 		{
-			StringBuilder sql = new StringBuilder("INSERT INTO M_Storage ");
+			StringBuilder sql = new StringBuilder("INSERT INTO M_StorageOnHand ");
 								sql.append("(AD_Client_ID, AD_Org_ID, IsActive, Created, CreatedBy, Updated, UpdatedBy,");
 								sql.append(" M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID,");
-								sql.append(" QtyOnHand, QtyReserved, QtyOrdered, DateLastInventory) ");
+								sql.append(" QtyOnHand, DateLastInventory) ");
 								sql.append("SELECT l.AD_CLIENT_ID, l.AD_ORG_ID, 'Y', SysDate, 0,SysDate, 0,");
 								sql.append(" l.M_Locator_ID, p.M_Product_ID, 0,");
-								sql.append(" 0,0,0,null ");
+								sql.append(" 0,null ");
 								sql.append("FROM M_Locator l");
 								sql.append(" INNER JOIN M_Product p ON (l.AD_Client_ID=p.AD_Client_ID) ");
 								sql.append("WHERE l.M_Warehouse_ID=");
@@ -151,7 +151,7 @@ public class InventoryCountCreate extends SvrProcess
 				sql.append(" AND l.M_Locator_ID=").append(p_M_Locator_ID);
 			sql.append(" AND l.IsDefault='Y'")
 				.append(" AND p.IsActive='Y' AND p.IsStocked='Y' and p.ProductType='I'")
-				.append(" AND NOT EXISTS (SELECT * FROM M_Storage s")
+				.append(" AND NOT EXISTS (SELECT * FROM M_StorageOnHand s")
 					.append(" INNER JOIN M_Locator sl ON (s.M_Locator_ID=sl.M_Locator_ID) ")
 					.append("WHERE sl.M_Warehouse_ID=l.M_Warehouse_ID")
 						.append(" AND s.M_Product_ID=p.M_Product_ID)");
@@ -162,7 +162,7 @@ public class InventoryCountCreate extends SvrProcess
 		StringBuilder sql = new StringBuilder("SELECT s.M_Product_ID, s.M_Locator_ID, s.M_AttributeSetInstance_ID,");
 							   sql.append(" s.QtyOnHand, p.M_AttributeSet_ID ");
 							   sql.append("FROM M_Product p");
-							   sql.append(" INNER JOIN M_Storage s ON (s.M_Product_ID=p.M_Product_ID)");
+							   sql.append(" INNER JOIN M_StorageOnHand s ON (s.M_Product_ID=p.M_Product_ID)");
 							   sql.append(" INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID) ");
 							   sql.append("WHERE l.M_Warehouse_ID=?");
 							   sql.append(" AND p.IsActive='Y' AND p.IsStocked='Y' and p.ProductType='I'");
diff --git a/org.adempiere.base.process/src/org/compiere/process/InventoryCountUpdate.java b/org.adempiere.base.process/src/org/compiere/process/InventoryCountUpdate.java
index eb5a51f68a..e75cc51f0d 100644
--- a/org.adempiere.base.process/src/org/compiere/process/InventoryCountUpdate.java
+++ b/org.adempiere.base.process/src/org/compiere/process/InventoryCountUpdate.java
@@ -24,7 +24,7 @@ import java.util.logging.Level;
 import org.compiere.model.MInventory;
 import org.compiere.model.MInventoryLine;
 import org.compiere.model.MInventoryLineMA;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.util.AdempiereSystemError;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
@@ -92,14 +92,14 @@ public class InventoryCountUpdate extends SvrProcess
 		//	ASI
 		sql = new StringBuilder("UPDATE M_InventoryLine l ")
 			.append("SET (QtyBook,QtyCount) = ")
-				.append("(SELECT QtyOnHand,QtyOnHand FROM M_Storage s ")
+				.append("(SELECT QtyOnHand,QtyOnHand FROM M_StorageOnHand s ")
 				.append("WHERE s.M_Product_ID=l.M_Product_ID AND s.M_Locator_ID=l.M_Locator_ID")
 				.append(" AND s.M_AttributeSetInstance_ID=l.M_AttributeSetInstance_ID),")
 			.append(" Updated=SysDate,")
 			.append(" UpdatedBy=").append(getAD_User_ID())
 			//
 			.append(" WHERE M_Inventory_ID=").append(p_M_Inventory_ID)
-			.append(" AND EXISTS (SELECT * FROM M_Storage s ")
+			.append(" AND EXISTS (SELECT * FROM M_StorageOnHand s ")
 				.append("WHERE s.M_Product_ID=l.M_Product_ID AND s.M_Locator_ID=l.M_Locator_ID")
 				.append(" AND s.M_AttributeSetInstance_ID=l.M_AttributeSetInstance_ID)");
 		int no = DB.executeUpdate(sql.toString(), get_TrxName());
@@ -145,11 +145,11 @@ public class InventoryCountUpdate extends SvrProcess
 			{
 				MInventoryLine il = new MInventoryLine (getCtx(), rs, get_TrxName());
 				BigDecimal onHand = Env.ZERO;
-				MStorage[] storages = MStorage.getAll(getCtx(), il.getM_Product_ID(), il.getM_Locator_ID(), get_TrxName());
+				MStorageOnHand[] storages = MStorageOnHand.getAll(getCtx(), il.getM_Product_ID(), il.getM_Locator_ID(), get_TrxName());
 				MInventoryLineMA ma = null;
 				for (int i = 0; i < storages.length; i++)
 				{
-					MStorage storage = storages[i];
+					MStorageOnHand storage = storages[i];
 					if (storage.getQtyOnHand().signum() == 0)
 						continue;
 					onHand = onHand.add(storage.getQtyOnHand());
diff --git a/org.adempiere.base.process/src/org/compiere/process/InventoryValue.java b/org.adempiere.base.process/src/org/compiere/process/InventoryValue.java
index 5b3e5535b1..fddca19018 100644
--- a/org.adempiere.base.process/src/org/compiere/process/InventoryValue.java
+++ b/org.adempiere.base.process/src/org/compiere/process/InventoryValue.java
@@ -175,7 +175,7 @@ public class InventoryValue extends SvrProcess
 
 		//  Get current QtyOnHand with ASI
 		sql = new StringBuilder ("UPDATE T_InventoryValue iv SET QtyOnHand = ")
-				.append("(SELECT SUM(QtyOnHand) FROM M_Storage s")
+				.append("(SELECT SUM(QtyOnHand) FROM M_StorageOnHand s")
 				.append(" INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID) ")
 				.append("WHERE iv.M_Product_ID=s.M_Product_ID")
 				.append(" AND iv.M_Warehouse_ID=l.M_Warehouse_ID")
@@ -186,7 +186,7 @@ public class InventoryValue extends SvrProcess
 		log.fine("QtHand with ASI=" + no);
 		//  Get current QtyOnHand without ASI
 		sql = new StringBuilder ("UPDATE T_InventoryValue iv SET QtyOnHand = ")
-				.append("(SELECT SUM(QtyOnHand) FROM M_Storage s")
+				.append("(SELECT SUM(QtyOnHand) FROM M_StorageOnHand s")
 				.append(" INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID) ")
 				.append("WHERE iv.M_Product_ID=s.M_Product_ID")
 				.append(" AND iv.M_Warehouse_ID=l.M_Warehouse_ID) ")
diff --git a/org.adempiere.base.process/src/org/compiere/process/M_Production_Run.java b/org.adempiere.base.process/src/org/compiere/process/M_Production_Run.java
index 4448164d1d..e3c849730c 100644
--- a/org.adempiere.base.process/src/org/compiere/process/M_Production_Run.java
+++ b/org.adempiere.base.process/src/org/compiere/process/M_Production_Run.java
@@ -24,7 +24,8 @@ import java.util.logging.Level;
 import org.compiere.model.MClient;
 import org.compiere.model.MLocator;
 import org.compiere.model.MProduct;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
+import org.compiere.model.MStorageReservation;
 import org.compiere.model.MTransaction;
 import org.compiere.model.Query;
 import org.compiere.model.X_M_Production;
@@ -140,9 +141,8 @@ public class M_Production_Run extends SvrProcess {
 								continue ;
 							else if(MovementQty.signum() < 0)
 							{
-								BigDecimal QtyAvailable = MStorage.getQtyAvailable(
+								BigDecimal QtyAvailable = MStorageReservation.getQtyAvailable(
 										locator.getM_Warehouse_ID(), 
-										locator.getM_Locator_ID(), 
 										pline.getM_Product_ID(), 
 										pline.getM_AttributeSetInstance_ID(),
 										get_TrxName());
@@ -155,13 +155,11 @@ public class M_Production_Run extends SvrProcess {
 								MovementType = MTransaction.MOVEMENTTYPE_Production_;
 							}
 						
-							if (!MStorage.add(getCtx(), locator.getM_Warehouse_ID(),
+							if (!MStorageOnHand.add(getCtx(), locator.getM_Warehouse_ID(),
 								locator.getM_Locator_ID(),
 								pline.getM_Product_ID(), 
 								pline.getM_AttributeSetInstance_ID(), 0 , 
 								MovementQty,
-								Env.ZERO,
-								Env.ZERO,
 								get_TrxName()))
 							{
 								raiseError("Cannot correct Inventory", "");
diff --git a/org.adempiere.base.process/src/org/compiere/process/OrgOwnership.java b/org.adempiere.base.process/src/org/compiere/process/OrgOwnership.java
index b79160b080..6213572be1 100644
--- a/org.adempiere.base.process/src/org/compiere/process/OrgOwnership.java
+++ b/org.adempiere.base.process/src/org/compiere/process/OrgOwnership.java
@@ -140,7 +140,7 @@ public class OrgOwnership extends SvrProcess
 	
 		//	Set Storage
 		sql = new StringBuilder();
-		sql.append("UPDATE M_Storage s ")
+		sql.append("UPDATE M_StorageOnHand	 s ")
 			.append("SET AD_Org_ID=").append(p_AD_Org_ID)
 			.append(" WHERE EXISTS ")
 				.append("(SELECT * FROM M_Locator l WHERE l.M_Locator_ID=s.M_Locator_ID")
@@ -150,6 +150,16 @@ public class OrgOwnership extends SvrProcess
 		no = DB.executeUpdate(sql.toString(), get_TrxName());
 		addLog (0,null, new BigDecimal(no), Msg.translate(getCtx(), "Storage"));
 			
+		//	Set Storage Reservation
+		sql = new StringBuilder();
+		sql.append("UPDATE M_StorageReservation	 s ")
+			.append("SET AD_Org_ID=").append(p_AD_Org_ID)
+			.append(" WHERE M_Warehouse_ID=").append(p_M_Warehouse_ID)
+			.append(" AND AD_Client_ID=").append(getAD_Client_ID())
+			.append(" AND AD_Org_ID<>").append(p_AD_Org_ID);
+		no = DB.executeUpdate(sql.toString(), get_TrxName());
+		addLog (0,null, new BigDecimal(no), Msg.translate(getCtx(), "StorageReservation"));
+			
 		return "";
 	}	//	warehouseOwnership
 
diff --git a/org.adempiere.base.process/src/org/compiere/process/ProjectIssue.java b/org.adempiere.base.process/src/org/compiere/process/ProjectIssue.java
index ac97383ad2..d12f4e4ec8 100644
--- a/org.adempiere.base.process/src/org/compiere/process/ProjectIssue.java
+++ b/org.adempiere.base.process/src/org/compiere/process/ProjectIssue.java
@@ -25,7 +25,7 @@ import org.compiere.model.MInOutLine;
 import org.compiere.model.MProject;
 import org.compiere.model.MProjectIssue;
 import org.compiere.model.MProjectLine;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.model.MTimeExpense;
 import org.compiere.model.MTimeExpenseLine;
 import org.compiere.util.Env;
@@ -234,7 +234,7 @@ public class ProjectIssue extends SvrProcess
 			int M_Locator_ID = 0;
 		//	MProduct product = new MProduct (getCtx(), expenseLines[i].getM_Product_ID());
 		//	if (product.isStocked())
-				M_Locator_ID = MStorage.getM_Locator_ID(expense.getM_Warehouse_ID(), 
+				M_Locator_ID = MStorageOnHand.getM_Locator_ID(expense.getM_Warehouse_ID(), 
 					expenseLines[i].getM_Product_ID(), 0, 	//	no ASI
 					expenseLines[i].getQty(), null);
 			if (M_Locator_ID == 0)	//	Service/Expense - get default (and fallback)
diff --git a/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java b/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java
index e5f5c030c5..b3f1e7510b 100644
--- a/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java
+++ b/org.adempiere.base.process/src/org/compiere/process/ReplenishReport.java
@@ -35,7 +35,7 @@ import org.compiere.model.MOrg;
 import org.compiere.model.MProduct;
 import org.compiere.model.MRequisition;
 import org.compiere.model.MRequisitionLine;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.model.MWarehouse;
 import org.compiere.model.X_T_Replenish;
 import org.compiere.util.AdempiereSystemError;
@@ -249,12 +249,12 @@ public class ReplenishReport extends SvrProcess
 			log.fine("Insert (BP) #" + no);
 		}
 		sql = new StringBuilder("UPDATE T_Replenish t SET ");
-			sql.append("QtyOnHand = (SELECT COALESCE(SUM(QtyOnHand),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
+			sql.append("QtyOnHand = (SELECT COALESCE(SUM(QtyOnHand),0) FROM M_StorageOnHand s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
 			sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID),");
-			sql.append("QtyReserved = (SELECT COALESCE(SUM(QtyReserved),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
-			sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID),");
-			sql.append("QtyOrdered = (SELECT COALESCE(SUM(QtyOrdered),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
-			sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID)");
+			sql.append("QtyReserved = (SELECT COALESCE(SUM(Qty),0) FROM M_StorageReservation s WHERE t.M_Product_ID=s.M_Product_ID");
+			sql.append(" AND t.M_Warehouse_ID=s.M_Warehouse_ID),");
+			sql.append("QtyOrdered = (SELECT COALESCE(SUM(Qty),0) FROM M_StorageReservation s WHERE t.M_Product_ID=s.M_Product_ID");
+			sql.append(" AND t.M_Warehouse_ID=s.M_Warehouse_ID)");
 		if (p_C_DocType_ID != 0)
 			sql.append(", C_DocType_ID=").append(p_C_DocType_ID);
 		sql.append(" WHERE AD_PInstance_ID=").append(getAD_PInstance_ID());
@@ -534,15 +534,14 @@ public class ReplenishReport extends SvrProcess
 			//	From: Look-up Storage
 			MProduct product = MProduct.get(getCtx(), replenish.getM_Product_ID());
 			String MMPolicy = product.getMMPolicy();
-			MStorage[] storages = MStorage.getWarehouse(getCtx(), 
-				whSource.getM_Warehouse_ID(), replenish.getM_Product_ID(), 0, 0,
-				true, null, 
-				MClient.MMPOLICY_FiFo.equals(MMPolicy), get_TrxName());
+			MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(),
+				whSource.getM_Warehouse_ID(), replenish.getM_Product_ID(), 0, null, 
+				MClient.MMPOLICY_FiFo.equals(MMPolicy), false, 0, get_TrxName());
 			//
 			BigDecimal target = replenish.getQtyToOrder();
 			for (int j = 0; j < storages.length; j++)
 			{
-				MStorage storage = storages[j];
+				MStorageOnHand storage = storages[j];
 				if (storage.getQtyOnHand().signum() <= 0)
 					continue;
 				BigDecimal moveQty = target;
diff --git a/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java b/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java
index 525c9e76ec..50795a7efb 100644
--- a/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java
+++ b/org.adempiere.base.process/src/org/compiere/process/ReplenishReportProduction.java
@@ -38,7 +38,7 @@ import org.compiere.model.MProduction;
 import org.compiere.model.MReplenish;
 import org.compiere.model.MRequisition;
 import org.compiere.model.MRequisitionLine;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.model.MWarehouse;
 import org.compiere.model.X_T_Replenish;
 import org.compiere.util.AdempiereSystemError;
@@ -269,12 +269,12 @@ public class ReplenishReportProduction extends SvrProcess
 		}
 		
 		sql = new StringBuilder("UPDATE T_Replenish t SET ");
-			sql.append("QtyOnHand = (SELECT COALESCE(SUM(QtyOnHand),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
+			sql.append("QtyOnHand = (SELECT COALESCE(SUM(QtyOnHand),0) FROM M_StorageOnHand s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
 				sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID),");
-			sql.append("QtyReserved = (SELECT COALESCE(SUM(QtyReserved),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
-				sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID),");
-			sql.append("QtyOrdered = (SELECT COALESCE(SUM(QtyOrdered),0) FROM M_Storage s, M_Locator l WHERE t.M_Product_ID=s.M_Product_ID");
-				sql.append(" AND l.M_Locator_ID=s.M_Locator_ID AND l.M_Warehouse_ID=t.M_Warehouse_ID)");
+			sql.append("QtyReserved = (SELECT COALESCE(SUM(Qty),0) FROM M_StorageReservation s WHERE t.M_Product_ID=s.M_Product_ID");
+				sql.append(" AND t.M_Warehouse_ID=s.M_Warehouse_ID),");
+			sql.append("QtyOrdered = (SELECT COALESCE(SUM(Qty),0) FROM M_StorageReservation s WHERE t.M_Product_ID=s.M_Product_ID");
+				sql.append(" AND t.M_Warehouse_ID=s.M_Warehouse_ID)");
 		if (p_C_DocType_ID != 0)
 			sql.append(", C_DocType_ID=").append(p_C_DocType_ID);
 		sql.append(" WHERE AD_PInstance_ID=").append(getAD_PInstance_ID());
@@ -570,15 +570,14 @@ public class ReplenishReportProduction extends SvrProcess
 			//	From: Look-up Storage
 			MProduct product = MProduct.get(getCtx(), replenish.getM_Product_ID());
 			String MMPolicy = product.getMMPolicy();
-			MStorage[] storages = MStorage.getWarehouse(getCtx(), 
-				whSource.getM_Warehouse_ID(), replenish.getM_Product_ID(), 0, 0,
-				true, null, 
-				MClient.MMPOLICY_FiFo.equals(MMPolicy), get_TrxName());
+			MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(),
+					whSource.getM_Warehouse_ID(), replenish.getM_Product_ID(), 0, null, 
+					MClient.MMPOLICY_FiFo.equals(MMPolicy), false, 0, get_TrxName());
 			//
 			BigDecimal target = replenish.getQtyToOrder();
 			for (int j = 0; j < storages.length; j++)
 			{
-				MStorage storage = storages[j];
+				MStorageOnHand storage = storages[j];
 				if (storage.getQtyOnHand().signum() <= 0)
 					continue;
 				BigDecimal moveQty = target;
diff --git a/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java b/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java
index bfe2371617..373f486556 100644
--- a/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java
+++ b/org.adempiere.base.process/src/org/compiere/process/StorageCleanup.java
@@ -26,7 +26,7 @@ import org.compiere.model.MLocator;
 import org.compiere.model.MMovement;
 import org.compiere.model.MMovementLine;
 import org.compiere.model.MRefList;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
 
@@ -68,15 +68,22 @@ public class StorageCleanup extends SvrProcess
 	{
 		log.info("");
 		//	Clean up empty Storage
-		String sql = "DELETE FROM M_Storage "
-			+ "WHERE QtyOnHand = 0 AND QtyReserved = 0 AND QtyOrdered = 0"
+		String sql = "DELETE FROM M_StorageOnHand "
+			+ "WHERE QtyOnHand = 0"
 			+ " AND Created < SysDate-3";
 		int no = DB.executeUpdate(sql, get_TrxName());
 		log.info("Delete Empty #" + no);
-		
+
+		//	Clean up empty Reservation Storage
+		sql = "DELETE FROM M_StorageReservation "
+			+ "WHERE Qty = 0"
+			+ " AND Created < SysDate-3";
+		no = DB.executeUpdate(sql, get_TrxName());
+		log.info("Delete Empty #" + no);
+
 		//
 		sql = "SELECT * "
-			+ "FROM M_Storage s "
+			+ "FROM M_StorageOnHand s "
 			+ "WHERE AD_Client_ID = ?"
 			+ " AND QtyOnHand < 0"
 			//	Instance Attribute
@@ -89,7 +96,7 @@ public class StorageCleanup extends SvrProcess
 		//		+ " AND s.M_Product_ID=sl.M_Product_ID"
 		//		+ " AND s.M_Locator_ID=sl.M_Locator_ID)"
 			//	Stock in same Warehouse
-			+ " AND EXISTS (SELECT * FROM M_Storage sw"
+			+ " AND EXISTS (SELECT * FROM M_StorageOnHand sw"
 				+ " INNER JOIN M_Locator swl ON (sw.M_Locator_ID=swl.M_Locator_ID), M_Locator sl "
 				+ "WHERE sw.QtyOnHand > 0"
 				+ " AND s.M_Product_ID=sw.M_Product_ID"
@@ -105,7 +112,7 @@ public class StorageCleanup extends SvrProcess
 			rs = pstmt.executeQuery ();
 			while (rs.next ())
 			{
-				lines += move (new MStorage(getCtx(), rs, get_TrxName()));
+				lines += move (new MStorageOnHand(getCtx(), rs, get_TrxName()));
 			}
  		}
 		catch (Exception e)
@@ -126,7 +133,7 @@ public class StorageCleanup extends SvrProcess
 	 *	@param target target storage
 	 *	@return no of movements
 	 */
-	private int move (MStorage target)
+	private int move (MStorageOnHand target)
 	{
 		log.info(target.toString());
 		BigDecimal qty = target.getQtyOnHand().negate();
@@ -140,10 +147,10 @@ public class StorageCleanup extends SvrProcess
 			return 0;
 
 		int lines = 0;
-		MStorage[] sources = getSources(target.getM_Product_ID(), target.getM_Locator_ID());
+		MStorageOnHand[] sources = getSources(target.getM_Product_ID(), target.getM_Locator_ID());
 		for (int i = 0; i < sources.length; i++)
 		{
-			MStorage source = sources[i];
+			MStorageOnHand source = sources[i];
 			
 			//	Movement Line
 			MMovementLine ml = new MMovementLine(mh);
@@ -189,13 +196,14 @@ public class StorageCleanup extends SvrProcess
 	 * 	Eliminate Reserved/Ordered
 	 *	@param target target Storage
 	 */
-	private void eliminateReservation(MStorage target)
+	private void eliminateReservation(MStorageOnHand target)
 	{
+		/*
 		//	Negative Ordered / Reserved Qty
 		if (target.getQtyReserved().signum() != 0 || target.getQtyOrdered().signum() != 0)
 		{
 			int M_Locator_ID = target.getM_Locator_ID();
-			MStorage storage0 = MStorage.get(getCtx(), M_Locator_ID, 
+			MStorageOnHand storage0 = MStorageOnHand.get(getCtx(), M_Locator_ID, 
 				target.getM_Product_ID(), 0, get_TrxName());
 			if (storage0 == null)
 			{
@@ -203,7 +211,7 @@ public class StorageCleanup extends SvrProcess
 				if (M_Locator_ID != defaultLoc.getM_Locator_ID())
 				{
 					M_Locator_ID = defaultLoc.getM_Locator_ID();
-					storage0 = MStorage.get(getCtx(), M_Locator_ID, 
+					storage0 = MStorageOnHand.get(getCtx(), M_Locator_ID, 
 						target.getM_Product_ID(), 0, get_TrxName());
 				}
 			}
@@ -218,15 +226,15 @@ public class StorageCleanup extends SvrProcess
 				//	Eliminate Reservation
 				if (reserved.signum() != 0 || ordered.signum() != 0)
 				{
-					if (MStorage.add(getCtx(), target.getM_Warehouse_ID(), target.getM_Locator_ID(), 
+					if (MStorageOnHand.add(getCtx(), target.getM_Warehouse_ID(), target.getM_Locator_ID(), 
 						target.getM_Product_ID(), 
 						target.getM_AttributeSetInstance_ID(), target.getM_AttributeSetInstance_ID(),
-						Env.ZERO, reserved.negate(), ordered.negate(), get_TrxName()))
+						Env.ZERO,  get_TrxName()))
 					{
-						if (MStorage.add(getCtx(), storage0.getM_Warehouse_ID(), storage0.getM_Locator_ID(), 
+						if (MStorageOnHand.add(getCtx(), storage0.getM_Warehouse_ID(), storage0.getM_Locator_ID(), 
 							storage0.getM_Product_ID(), 
 							storage0.getM_AttributeSetInstance_ID(), storage0.getM_AttributeSetInstance_ID(),
-							Env.ZERO, reserved, ordered, get_TrxName()))
+							Env.ZERO, get_TrxName()))
 							log.info("Reserved=" + reserved + ",Ordered=" + ordered);
 						else
 							log.warning("Failed Storage0 Update");
@@ -236,6 +244,7 @@ public class StorageCleanup extends SvrProcess
 				}
 			}
 		}
+		*/
 	}	//	eliminateReservation
 	
 	/**
@@ -244,11 +253,11 @@ public class StorageCleanup extends SvrProcess
 	 *	@param M_Locator_ID locator
 	 *	@return sources
 	 */
-	private MStorage[] getSources (int M_Product_ID, int M_Locator_ID)
+	private MStorageOnHand[] getSources (int M_Product_ID, int M_Locator_ID)
 	{
-		ArrayList<MStorage> list = new ArrayList<MStorage>();
+		ArrayList<MStorageOnHand> list = new ArrayList<MStorageOnHand>();
 		String sql = "SELECT * "
-			+ "FROM M_Storage s "
+			+ "FROM M_StorageOnHand s "
 			+ "WHERE QtyOnHand > 0"
 			+ " AND M_Product_ID=?"
 			//	Empty ASI
@@ -272,7 +281,7 @@ public class StorageCleanup extends SvrProcess
 			rs = pstmt.executeQuery ();
 			while (rs.next ())
 			{
-				list.add (new MStorage (getCtx(), rs, get_TrxName()));
+				list.add (new MStorageOnHand (getCtx(), rs, get_TrxName()));
 			}
  		}
 		catch (Exception e)
@@ -284,7 +293,7 @@ public class StorageCleanup extends SvrProcess
 			DB.close(rs, pstmt);
 			rs = null; pstmt = null;
 		}
-		MStorage[] retValue = new MStorage[list.size()];
+		MStorageOnHand[] retValue = new MStorageOnHand[list.size()];
 		list.toArray(retValue);
 		return retValue;
 	}	//	getSources
diff --git a/org.adempiere.base/src/org/compiere/model/AccessSqlParserTest.java b/org.adempiere.base/src/org/compiere/model/AccessSqlParserTest.java
index 81efc99a9d..dae566bbbc 100644
--- a/org.adempiere.base/src/org/compiere/model/AccessSqlParserTest.java
+++ b/org.adempiere.base/src/org/compiere/model/AccessSqlParserTest.java
@@ -188,9 +188,9 @@ public class AccessSqlParserTest extends TestCase
 	 */
 	public void testProductInstanceAttributeQuery()
 	{
-		String sql = "SELECT p.M_Product_ID, p.Discontinued, p.Value, p.Name, BOM_Qty_Available(p.M_Product_ID,?) AS QtyAvailable, bomQtyList(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceList, bomQtyStd(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceStd, BOM_Qty_OnHand(p.M_Product_ID,?) AS QtyOnHand, BOM_Qty_Reserved(p.M_Product_ID,?) AS QtyReserved, BOM_Qty_Ordered(p.M_Product_ID,?) AS QtyOrdered, bomQtyStd(p.M_Product_ID, pr.M_PriceList_Version_ID)-bomQtyLimit(p.M_Product_ID, pr.M_PriceList_Version_ID) AS Margin, bomQtyLimit(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceLimit, pa.IsInstanceAttribute FROM M_Product p INNER JOIN M_ProductPrice pr ON (p.M_Product_ID=pr.M_Product_ID) LEFT OUTER JOIN M_AttributeSet pa ON (p.M_AttributeSet_ID=pa.M_AttributeSet_ID) WHERE p.IsSummary='N' AND p.IsActive='Y' AND pr.IsActive='Y' AND pr.M_PriceList_Version_ID=? AND EXISTS (SELECT * FROM M_Storage s INNER JOIN M_AttributeSetInstance asi ON (s.M_AttributeSetInstance_ID=asi.M_AttributeSetInstance_ID) WHERE s.M_Product_ID=p.M_Product_ID AND asi.SerNo LIKE '33' AND asi.Lot LIKE '33' AND asi.M_Lot_ID=101 AND TRUNC(asi.GuaranteeDate)<TO_DATE('2003-10-16','YYYY-MM-DD') AND asi.M_AttributeSetInstance_ID IN (SELECT M_AttributeSetInstance_ID FROM M_AttributeInstance WHERE (M_Attribute_ID=103 AND Value LIKE '33') AND (M_Attribute_ID=102 AND M_AttributeValue_ID=106))) AND p.M_AttributeSetInstance_ID IN (SELECT M_AttributeSetInstance_ID FROM M_AttributeInstance WHERE (M_Attribute_ID=101 AND M_AttributeValue_ID=105) AND (M_Attribute_ID=100 AND M_AttributeValue_ID=102)) AND p.AD_Client_ID IN(0,11) AND p.AD_Org_ID IN(0,11,12) ORDER BY QtyAvailable DESC, Margin DESC";
+		String sql = "SELECT p.M_Product_ID, p.Discontinued, p.Value, p.Name, BOM_Qty_Available(p.M_Product_ID,?) AS QtyAvailable, bomQtyList(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceList, bomQtyStd(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceStd, BOM_Qty_OnHand(p.M_Product_ID,?) AS QtyOnHand, BOM_Qty_Reserved(p.M_Product_ID,?) AS QtyReserved, BOM_Qty_Ordered(p.M_Product_ID,?) AS QtyOrdered, bomQtyStd(p.M_Product_ID, pr.M_PriceList_Version_ID)-bomQtyLimit(p.M_Product_ID, pr.M_PriceList_Version_ID) AS Margin, bomQtyLimit(p.M_Product_ID, pr.M_PriceList_Version_ID) AS PriceLimit, pa.IsInstanceAttribute FROM M_Product p INNER JOIN M_ProductPrice pr ON (p.M_Product_ID=pr.M_Product_ID) LEFT OUTER JOIN M_AttributeSet pa ON (p.M_AttributeSet_ID=pa.M_AttributeSet_ID) WHERE p.IsSummary='N' AND p.IsActive='Y' AND pr.IsActive='Y' AND pr.M_PriceList_Version_ID=? AND EXISTS (SELECT * FROM M_StorageOnHand s INNER JOIN M_AttributeSetInstance asi ON (s.M_AttributeSetInstance_ID=asi.M_AttributeSetInstance_ID) WHERE s.M_Product_ID=p.M_Product_ID AND asi.SerNo LIKE '33' AND asi.Lot LIKE '33' AND asi.M_Lot_ID=101 AND TRUNC(asi.GuaranteeDate)<TO_DATE('2003-10-16','YYYY-MM-DD') AND asi.M_AttributeSetInstance_ID IN (SELECT M_AttributeSetInstance_ID FROM M_AttributeInstance WHERE (M_Attribute_ID=103 AND Value LIKE '33') AND (M_Attribute_ID=102 AND M_AttributeValue_ID=106))) AND p.M_AttributeSetInstance_ID IN (SELECT M_AttributeSetInstance_ID FROM M_AttributeInstance WHERE (M_Attribute_ID=101 AND M_AttributeValue_ID=105) AND (M_Attribute_ID=100 AND M_AttributeValue_ID=102)) AND p.AD_Client_ID IN(0,11) AND p.AD_Org_ID IN(0,11,12) ORDER BY QtyAvailable DESC, Margin DESC";
 		AccessSqlParser fixture = new AccessSqlParser(sql);
-		assertEquals("AccessSqlParser[M_AttributeInstance|M_Storage=s,M_AttributeSetInstance=asi|M_AttributeInstance|M_Product=p,M_ProductPrice=pr,M_AttributeSet=pa|3]", fixture.toString());
+		assertEquals("AccessSqlParser[M_AttributeInstance|M_StorageOnHand=s,M_AttributeSetInstance=asi|M_AttributeInstance|M_Product=p,M_ProductPrice=pr,M_AttributeSet=pa|3]", fixture.toString());
 	}
 	
 	/**
diff --git a/org.adempiere.base/src/org/compiere/model/GridFieldVO.java b/org.adempiere.base/src/org/compiere/model/GridFieldVO.java
index a4fedd133f..a813dbbe43 100644
--- a/org.adempiere.base/src/org/compiere/model/GridFieldVO.java
+++ b/org.adempiere.base/src/org/compiere/model/GridFieldVO.java
@@ -42,12 +42,10 @@ import static org.compiere.model.SystemIDs.*;
  */
 public class GridFieldVO implements Serializable
 {
-
-
 	/**
 	 * 
 	 */
-	private static final long serialVersionUID = -6196878184196075974L;
+	private static final long serialVersionUID = 542767511640866058L;
 
 	/**
 	 *  Return the SQL statement used for the MFieldVO.create
@@ -232,16 +230,12 @@ public class GridFieldVO implements Serializable
 			userDef = MUserDefField.get(vo.ctx,AD_Field_ID, AD_Tab_ID, AD_Window_ID);
 			if (userDef != null)
 			{
-				vo.IsDisplayed = userDef.isDisplayed();
 				if (userDef.getName() != null)
 					vo.Header = userDef.getName();
 				if (userDef.getDescription() != null)
 					vo.Description = userDef.getDescription();
 				if (userDef.getHelp() != null)
 					vo.Help = userDef.getHelp();
-				vo.IsReadOnly = userDef.isReadOnly();
-				vo.IsSameLine = userDef.isSameLine();
-				vo.IsUpdateable = userDef.isUpdateable();
 				if (userDef.getDisplayLength() > 0)
 					vo.DisplayLength = userDef.getDisplayLength();
 				if (userDef.getDisplayLogic() != null)
@@ -250,9 +244,35 @@ public class GridFieldVO implements Serializable
 					vo.DefaultValue = userDef.getDefaultValue();
 				if (userDef.getSortNo() > 0)
 					vo.SortNo = userDef.getSortNo();
-				// ToDo SeqNo
-				//if (userDef.getSeqNo() > 0)
-				//	vo.SeqNo = userDef.getSeqNo();
+				//IDEMPIERE-163
+				if (userDef.getIsDisplayed()!= null)
+				    vo.IsDisplayed = "Y".equals(userDef.getIsDisplayed());
+				if (userDef.getIsReadOnly()!= null)
+				    vo.IsReadOnly = "Y".equals(userDef.getIsReadOnly());
+				if (userDef.getIsSameLine()!= null)
+				    vo.IsSameLine = "Y".equals(userDef.getIsSameLine());
+				if (userDef.getIsUpdateable()!= null)
+				    vo.IsUpdateable = "Y".equals(userDef.getIsUpdateable());
+				if (userDef.getIsAlwaysUpdateable()!= null)	
+				   vo.IsAlwaysUpdateable = "Y".equals(userDef.getIsAlwaysUpdateable());
+				if (userDef.getReadOnlyLogic()!= null)
+					vo.ReadOnlyLogic = userDef.getReadOnlyLogic();
+				if (userDef.getMandatoryLogic()!= null )
+					vo.MandatoryLogic = userDef.getMandatoryLogic();	
+				if (userDef.getAD_Reference_ID()>0)
+					vo.displayType = userDef.getAD_Reference_ID();
+				if (userDef.getAD_Reference_Value_ID()>0)
+					vo.AD_Reference_Value_ID = userDef.getAD_Reference_Value_ID();
+				if (userDef.getIsMandatory()!= null)
+					vo.IsMandatory = "Y".equals(userDef.getIsMandatory());
+				if (userDef.getXPosition() > 0)
+					vo.XPosition = userDef.getXPosition();
+				if (userDef.getColumnSpan() > 0)
+					vo.ColumnSpan=userDef.getColumnSpan();
+				if (userDef.getNumLines() > 0)
+					vo.NumLines=userDef.getNumLines();
+				if (userDef.getIsToolbarButton() != null)
+					vo.IsToolbarButton  = "Y".equals(userDef.getIsToolbarButton());		
 			}
 		}
 		//
diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_Field.java b/org.adempiere.base/src/org/compiere/model/I_AD_Field.java
index 9561291acf..dcb37e355c 100644
--- a/org.adempiere.base/src/org/compiere/model/I_AD_Field.java
+++ b/org.adempiere.base/src/org/compiere/model/I_AD_Field.java
@@ -339,6 +339,19 @@ public interface I_AD_Field
 	  */
 	public String getIsAllowCopy();
 
+    /** Column name IsAlwaysUpdateable */
+    public static final String COLUMNNAME_IsAlwaysUpdateable = "IsAlwaysUpdateable";
+
+	/** Set Always Updateable.
+	  * The column is always updateable, even if the record is not active or processed
+	  */
+	public void setIsAlwaysUpdateable (String IsAlwaysUpdateable);
+
+	/** Get Always Updateable.
+	  * The column is always updateable, even if the record is not active or processed
+	  */
+	public String getIsAlwaysUpdateable();
+
     /** Column name IsCentrallyMaintained */
     public static final String COLUMNNAME_IsCentrallyMaintained = "IsCentrallyMaintained";
 
@@ -461,6 +474,41 @@ public interface I_AD_Field
 	  */
 	public boolean isSameLine();
 
+    /** Column name IsToolbarButton */
+    public static final String COLUMNNAME_IsToolbarButton = "IsToolbarButton";
+
+	/** Set Toolbar Button.
+	  * Add the column button to the toolbar
+	  */
+	public void setIsToolbarButton (String IsToolbarButton);
+
+	/** Get Toolbar Button.
+	  * Add the column button to the toolbar
+	  */
+	public String getIsToolbarButton();
+
+    /** Column name IsUpdateable */
+    public static final String COLUMNNAME_IsUpdateable = "IsUpdateable";
+
+	/** Set Updatable.
+	  * Determines, if the field can be updated
+	  */
+	public void setIsUpdateable (String IsUpdateable);
+
+	/** Get Updatable.
+	  * Determines, if the field can be updated
+	  */
+	public String getIsUpdateable();
+
+    /** Column name MandatoryLogic */
+    public static final String COLUMNNAME_MandatoryLogic = "MandatoryLogic";
+
+	/** Set Mandatory Logic	  */
+	public void setMandatoryLogic (String MandatoryLogic);
+
+	/** Get Mandatory Logic	  */
+	public String getMandatoryLogic();
+
     /** Column name Name */
     public static final String COLUMNNAME_Name = "Name";
 
@@ -500,6 +548,19 @@ public interface I_AD_Field
 	  */
 	public String getObscureType();
 
+    /** Column name ReadOnlyLogic */
+    public static final String COLUMNNAME_ReadOnlyLogic = "ReadOnlyLogic";
+
+	/** Set Read Only Logic.
+	  * Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public void setReadOnlyLogic (String ReadOnlyLogic);
+
+	/** Get Read Only Logic.
+	  * Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public String getReadOnlyLogic();
+
     /** Column name SeqNo */
     public static final String COLUMNNAME_SeqNo = "SeqNo";
 
diff --git a/org.adempiere.base/src/org/compiere/model/I_AD_UserDef_Field.java b/org.adempiere.base/src/org/compiere/model/I_AD_UserDef_Field.java
index 57cf8a7fd6..5d8db7cb5d 100644
--- a/org.adempiere.base/src/org/compiere/model/I_AD_UserDef_Field.java
+++ b/org.adempiere.base/src/org/compiere/model/I_AD_UserDef_Field.java
@@ -77,6 +77,36 @@ public interface I_AD_UserDef_Field
 	  */
 	public int getAD_Org_ID();
 
+    /** Column name AD_Reference_ID */
+    public static final String COLUMNNAME_AD_Reference_ID = "AD_Reference_ID";
+
+	/** Set Reference.
+	  * System Reference and Validation
+	  */
+	public void setAD_Reference_ID (int AD_Reference_ID);
+
+	/** Get Reference.
+	  * System Reference and Validation
+	  */
+	public int getAD_Reference_ID();
+
+	public org.compiere.model.I_AD_Reference getAD_Reference() throws RuntimeException;
+
+    /** Column name AD_Reference_Value_ID */
+    public static final String COLUMNNAME_AD_Reference_Value_ID = "AD_Reference_Value_ID";
+
+	/** Set Reference Key.
+	  * Required to specify, if data type is Table or List
+	  */
+	public void setAD_Reference_Value_ID (int AD_Reference_Value_ID);
+
+	/** Get Reference Key.
+	  * Required to specify, if data type is Table or List
+	  */
+	public int getAD_Reference_Value_ID();
+
+	public org.compiere.model.I_AD_Reference getAD_Reference_Value() throws RuntimeException;
+
     /** Column name AD_UserDef_Field_ID */
     public static final String COLUMNNAME_AD_UserDef_Field_ID = "AD_UserDef_Field_ID";
 
@@ -106,6 +136,19 @@ public interface I_AD_UserDef_Field
 
 	public org.compiere.model.I_AD_UserDef_Tab getAD_UserDef_Tab() throws RuntimeException;
 
+    /** Column name ColumnSpan */
+    public static final String COLUMNNAME_ColumnSpan = "ColumnSpan";
+
+	/** Set Column Span.
+	  * Number of column for a box of field
+	  */
+	public void setColumnSpan (int ColumnSpan);
+
+	/** Get Column Span.
+	  * Number of column for a box of field
+	  */
+	public int getColumnSpan();
+
     /** Column name Created */
     public static final String COLUMNNAME_Created = "Created";
 
@@ -202,18 +245,44 @@ public interface I_AD_UserDef_Field
 	  */
 	public boolean isActive();
 
+    /** Column name IsAlwaysUpdateable */
+    public static final String COLUMNNAME_IsAlwaysUpdateable = "IsAlwaysUpdateable";
+
+	/** Set Always Updatable.
+	  * The column is always updateable, even if the record is not active or processed
+	  */
+	public void setIsAlwaysUpdateable (String IsAlwaysUpdateable);
+
+	/** Get Always Updatable.
+	  * The column is always updateable, even if the record is not active or processed
+	  */
+	public String getIsAlwaysUpdateable();
+
     /** Column name IsDisplayed */
     public static final String COLUMNNAME_IsDisplayed = "IsDisplayed";
 
 	/** Set Displayed.
 	  * Determines, if this field is displayed
 	  */
-	public void setIsDisplayed (boolean IsDisplayed);
+	public void setIsDisplayed (String IsDisplayed);
 
 	/** Get Displayed.
 	  * Determines, if this field is displayed
 	  */
-	public boolean isDisplayed();
+	public String getIsDisplayed();
+
+    /** Column name IsMandatory */
+    public static final String COLUMNNAME_IsMandatory = "IsMandatory";
+
+	/** Set Mandatory.
+	  * Data entry is required in this column
+	  */
+	public void setIsMandatory (String IsMandatory);
+
+	/** Get Mandatory.
+	  * Data entry is required in this column
+	  */
+	public String getIsMandatory();
 
     /** Column name IsReadOnly */
     public static final String COLUMNNAME_IsReadOnly = "IsReadOnly";
@@ -221,12 +290,12 @@ public interface I_AD_UserDef_Field
 	/** Set Read Only.
 	  * Field is read only
 	  */
-	public void setIsReadOnly (boolean IsReadOnly);
+	public void setIsReadOnly (String IsReadOnly);
 
 	/** Get Read Only.
 	  * Field is read only
 	  */
-	public boolean isReadOnly();
+	public String getIsReadOnly();
 
     /** Column name IsSameLine */
     public static final String COLUMNNAME_IsSameLine = "IsSameLine";
@@ -234,12 +303,25 @@ public interface I_AD_UserDef_Field
 	/** Set Same Line.
 	  * Displayed on same line as previous field
 	  */
-	public void setIsSameLine (boolean IsSameLine);
+	public void setIsSameLine (String IsSameLine);
 
 	/** Get Same Line.
 	  * Displayed on same line as previous field
 	  */
-	public boolean isSameLine();
+	public String getIsSameLine();
+
+    /** Column name IsToolbarButton */
+    public static final String COLUMNNAME_IsToolbarButton = "IsToolbarButton";
+
+	/** Set Toolbar Button.
+	  * Add the column button to the toolbar
+	  */
+	public void setIsToolbarButton (String IsToolbarButton);
+
+	/** Get Toolbar Button.
+	  * Add the column button to the toolbar
+	  */
+	public String getIsToolbarButton();
 
     /** Column name IsUpdateable */
     public static final String COLUMNNAME_IsUpdateable = "IsUpdateable";
@@ -247,12 +329,21 @@ public interface I_AD_UserDef_Field
 	/** Set Updatable.
 	  * Determines, if the field can be updated
 	  */
-	public void setIsUpdateable (boolean IsUpdateable);
+	public void setIsUpdateable (String IsUpdateable);
 
 	/** Get Updatable.
 	  * Determines, if the field can be updated
 	  */
-	public boolean isUpdateable();
+	public String getIsUpdateable();
+
+    /** Column name MandatoryLogic */
+    public static final String COLUMNNAME_MandatoryLogic = "MandatoryLogic";
+
+	/** Set Mandatory Logic	  */
+	public void setMandatoryLogic (String MandatoryLogic);
+
+	/** Get Mandatory Logic	  */
+	public String getMandatoryLogic();
 
     /** Column name Name */
     public static final String COLUMNNAME_Name = "Name";
@@ -267,6 +358,32 @@ public interface I_AD_UserDef_Field
 	  */
 	public String getName();
 
+    /** Column name NumLines */
+    public static final String COLUMNNAME_NumLines = "NumLines";
+
+	/** Set Number of Lines.
+	  * Number of lines for a field
+	  */
+	public void setNumLines (int NumLines);
+
+	/** Get Number of Lines.
+	  * Number of lines for a field
+	  */
+	public int getNumLines();
+
+    /** Column name ReadOnlyLogic */
+    public static final String COLUMNNAME_ReadOnlyLogic = "ReadOnlyLogic";
+
+	/** Set Read Only Logic.
+	  * Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public void setReadOnlyLogic (String ReadOnlyLogic);
+
+	/** Get Read Only Logic.
+	  * Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public String getReadOnlyLogic();
+
     /** Column name SeqNo */
     public static final String COLUMNNAME_SeqNo = "SeqNo";
 
@@ -310,4 +427,17 @@ public interface I_AD_UserDef_Field
 	  * User who updated this records
 	  */
 	public int getUpdatedBy();
+
+    /** Column name XPosition */
+    public static final String COLUMNNAME_XPosition = "XPosition";
+
+	/** Set X Position.
+	  * Absolute X (horizontal) position in 1/72 of an inch
+	  */
+	public void setXPosition (int XPosition);
+
+	/** Get X Position.
+	  * Absolute X (horizontal) position in 1/72 of an inch
+	  */
+	public int getXPosition();
 }
diff --git a/org.adempiere.base/src/org/compiere/model/I_M_Storage.java b/org.adempiere.base/src/org/compiere/model/I_M_StorageOnHand.java
similarity index 82%
rename from org.adempiere.base/src/org/compiere/model/I_M_Storage.java
rename to org.adempiere.base/src/org/compiere/model/I_M_StorageOnHand.java
index 157518fd01..8c7ed7afd0 100644
--- a/org.adempiere.base/src/org/compiere/model/I_M_Storage.java
+++ b/org.adempiere.base/src/org/compiere/model/I_M_StorageOnHand.java
@@ -20,18 +20,18 @@ import java.math.BigDecimal;
 import java.sql.Timestamp;
 import org.compiere.util.KeyNamePair;
 
-/** Generated Interface for M_Storage
+/** Generated Interface for M_StorageOnHand
  *  @author iDempiere (generated) 
  *  @version Release 1.0a
  */
-public interface I_M_Storage 
+public interface I_M_StorageOnHand 
 {
 
-    /** TableName=M_Storage */
-    public static final String Table_Name = "M_Storage";
+    /** TableName=M_StorageOnHand */
+    public static final String Table_Name = "M_StorageOnHand";
 
-    /** AD_Table_ID=250 */
-    public static final int Table_ID = 250;
+    /** AD_Table_ID=200026 */
+    public static final int Table_ID = 200026;
 
     KeyNamePair Model = new KeyNamePair(Table_ID, Table_Name);
 
@@ -149,14 +149,14 @@ public interface I_M_Storage
 
 	public org.compiere.model.I_M_Product getM_Product() throws RuntimeException;
 
-    /** Column name M_Storage_UU */
-    public static final String COLUMNNAME_M_Storage_UU = "M_Storage_UU";
+    /** Column name M_StorageOnHand_UU */
+    public static final String COLUMNNAME_M_StorageOnHand_UU = "M_StorageOnHand_UU";
 
-	/** Set M_Storage_UU	  */
-	public void setM_Storage_UU (String M_Storage_UU);
+	/** Set M_StorageOnHand_UU	  */
+	public void setM_StorageOnHand_UU (String M_StorageOnHand_UU);
 
-	/** Get M_Storage_UU	  */
-	public String getM_Storage_UU();
+	/** Get M_StorageOnHand_UU	  */
+	public String getM_StorageOnHand_UU();
 
     /** Column name QtyOnHand */
     public static final String COLUMNNAME_QtyOnHand = "QtyOnHand";
@@ -171,32 +171,6 @@ public interface I_M_Storage
 	  */
 	public BigDecimal getQtyOnHand();
 
-    /** Column name QtyOrdered */
-    public static final String COLUMNNAME_QtyOrdered = "QtyOrdered";
-
-	/** Set Ordered Quantity.
-	  * Ordered Quantity
-	  */
-	public void setQtyOrdered (BigDecimal QtyOrdered);
-
-	/** Get Ordered Quantity.
-	  * Ordered Quantity
-	  */
-	public BigDecimal getQtyOrdered();
-
-    /** Column name QtyReserved */
-    public static final String COLUMNNAME_QtyReserved = "QtyReserved";
-
-	/** Set Reserved Quantity.
-	  * Reserved Quantity
-	  */
-	public void setQtyReserved (BigDecimal QtyReserved);
-
-	/** Get Reserved Quantity.
-	  * Reserved Quantity
-	  */
-	public BigDecimal getQtyReserved();
-
     /** Column name Updated */
     public static final String COLUMNNAME_Updated = "Updated";
 
diff --git a/org.adempiere.base/src/org/compiere/model/I_M_StorageReservation.java b/org.adempiere.base/src/org/compiere/model/I_M_StorageReservation.java
new file mode 100644
index 0000000000..c8ce23f348
--- /dev/null
+++ b/org.adempiere.base/src/org/compiere/model/I_M_StorageReservation.java
@@ -0,0 +1,202 @@
+/******************************************************************************
+ * Product: iDempiere ERP & CRM Smart Business Solution                       *
+ * Copyright (C) 1999-2012 ComPiere, Inc. All Rights Reserved.                *
+ * This program is free software, you can redistribute it and/or modify it    *
+ * under the terms version 2 of the GNU General Public License as published   *
+ * by the Free Software Foundation. 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.,    *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
+ * For the text or an alternative of this public license, you may reach us    *
+ * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA        *
+ * or via info@compiere.org or http://www.compiere.org/license.html           *
+ *****************************************************************************/
+package org.compiere.model;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import org.compiere.util.KeyNamePair;
+
+/** Generated Interface for M_StorageReservation
+ *  @author iDempiere (generated) 
+ *  @version Release 1.0a
+ */
+public interface I_M_StorageReservation 
+{
+
+    /** TableName=M_StorageReservation */
+    public static final String Table_Name = "M_StorageReservation";
+
+    /** AD_Table_ID=200027 */
+    public static final int Table_ID = 200027;
+
+    KeyNamePair Model = new KeyNamePair(Table_ID, Table_Name);
+
+    /** AccessLevel = 3 - Client - Org 
+     */
+    BigDecimal accessLevel = BigDecimal.valueOf(3);
+
+    /** Load Meta Data */
+
+    /** Column name AD_Client_ID */
+    public static final String COLUMNNAME_AD_Client_ID = "AD_Client_ID";
+
+	/** Get Client.
+	  * Client/Tenant for this installation.
+	  */
+	public int getAD_Client_ID();
+
+    /** Column name AD_Org_ID */
+    public static final String COLUMNNAME_AD_Org_ID = "AD_Org_ID";
+
+	/** Set Organization.
+	  * Organizational entity within client
+	  */
+	public void setAD_Org_ID (int AD_Org_ID);
+
+	/** Get Organization.
+	  * Organizational entity within client
+	  */
+	public int getAD_Org_ID();
+
+    /** Column name Created */
+    public static final String COLUMNNAME_Created = "Created";
+
+	/** Get Created.
+	  * Date this record was created
+	  */
+	public Timestamp getCreated();
+
+    /** Column name CreatedBy */
+    public static final String COLUMNNAME_CreatedBy = "CreatedBy";
+
+	/** Get Created By.
+	  * User who created this records
+	  */
+	public int getCreatedBy();
+
+    /** Column name DateLastInventory */
+    public static final String COLUMNNAME_DateLastInventory = "DateLastInventory";
+
+	/** Set Date last inventory count.
+	  * Date of Last Inventory Count
+	  */
+	public void setDateLastInventory (Timestamp DateLastInventory);
+
+	/** Get Date last inventory count.
+	  * Date of Last Inventory Count
+	  */
+	public Timestamp getDateLastInventory();
+
+    /** Column name IsActive */
+    public static final String COLUMNNAME_IsActive = "IsActive";
+
+	/** Set Active.
+	  * The record is active in the system
+	  */
+	public void setIsActive (boolean IsActive);
+
+	/** Get Active.
+	  * The record is active in the system
+	  */
+	public boolean isActive();
+
+    /** Column name IsSOTrx */
+    public static final String COLUMNNAME_IsSOTrx = "IsSOTrx";
+
+	/** Set Sales Transaction.
+	  * This is a Sales Transaction
+	  */
+	public void setIsSOTrx (boolean IsSOTrx);
+
+	/** Get Sales Transaction.
+	  * This is a Sales Transaction
+	  */
+	public boolean isSOTrx();
+
+    /** Column name M_AttributeSetInstance_ID */
+    public static final String COLUMNNAME_M_AttributeSetInstance_ID = "M_AttributeSetInstance_ID";
+
+	/** Set Attribute Set Instance.
+	  * Product Attribute Set Instance
+	  */
+	public void setM_AttributeSetInstance_ID (int M_AttributeSetInstance_ID);
+
+	/** Get Attribute Set Instance.
+	  * Product Attribute Set Instance
+	  */
+	public int getM_AttributeSetInstance_ID();
+
+	public I_M_AttributeSetInstance getM_AttributeSetInstance() throws RuntimeException;
+
+    /** Column name M_Product_ID */
+    public static final String COLUMNNAME_M_Product_ID = "M_Product_ID";
+
+	/** Set Product.
+	  * Product, Service, Item
+	  */
+	public void setM_Product_ID (int M_Product_ID);
+
+	/** Get Product.
+	  * Product, Service, Item
+	  */
+	public int getM_Product_ID();
+
+	public org.compiere.model.I_M_Product getM_Product() throws RuntimeException;
+
+    /** Column name M_StorageReservation_UU */
+    public static final String COLUMNNAME_M_StorageReservation_UU = "M_StorageReservation_UU";
+
+	/** Set M_StorageReservation_UU	  */
+	public void setM_StorageReservation_UU (String M_StorageReservation_UU);
+
+	/** Get M_StorageReservation_UU	  */
+	public String getM_StorageReservation_UU();
+
+    /** Column name M_Warehouse_ID */
+    public static final String COLUMNNAME_M_Warehouse_ID = "M_Warehouse_ID";
+
+	/** Set Warehouse.
+	  * Storage Warehouse and Service Point
+	  */
+	public void setM_Warehouse_ID (int M_Warehouse_ID);
+
+	/** Get Warehouse.
+	  * Storage Warehouse and Service Point
+	  */
+	public int getM_Warehouse_ID();
+
+	public org.compiere.model.I_M_Warehouse getM_Warehouse() throws RuntimeException;
+
+    /** Column name Qty */
+    public static final String COLUMNNAME_Qty = "Qty";
+
+	/** Set Quantity.
+	  * Quantity
+	  */
+	public void setQty (BigDecimal Qty);
+
+	/** Get Quantity.
+	  * Quantity
+	  */
+	public BigDecimal getQty();
+
+    /** Column name Updated */
+    public static final String COLUMNNAME_Updated = "Updated";
+
+	/** Get Updated.
+	  * Date this record was updated
+	  */
+	public Timestamp getUpdated();
+
+    /** Column name UpdatedBy */
+    public static final String COLUMNNAME_UpdatedBy = "UpdatedBy";
+
+	/** Get Updated By.
+	  * User who updated this records
+	  */
+	public int getUpdatedBy();
+}
diff --git a/org.adempiere.base/src/org/compiere/model/MCostDetail.java b/org.adempiere.base/src/org/compiere/model/MCostDetail.java
index 6141fc9a9c..430b9fedce 100644
--- a/org.adempiere.base/src/org/compiere/model/MCostDetail.java
+++ b/org.adempiere.base/src/org/compiere/model/MCostDetail.java
@@ -1002,7 +1002,7 @@ public class MCostDetail extends X_M_CostDetail
 					 *  Solution:
 					 *  Make sure the current qty is reflecting the actual qty in storage
 					 */
-					StringBuilder sql = new StringBuilder("SELECT COALESCE(SUM(QtyOnHand),0) FROM M_Storage")					
+					StringBuilder sql = new StringBuilder("SELECT COALESCE(SUM(QtyOnHand),0) FROM M_StorageOnHand")					
 						.append(" WHERE AD_Client_ID=").append(cost.getAD_Client_ID())
 						.append(" AND M_Product_ID=").append(cost.getM_Product_ID());
 					//Costing Level
@@ -1159,7 +1159,7 @@ public class MCostDetail extends X_M_CostDetail
 				MCostElement[] lce = MCostElement.getNonCostingMethods(this);
 				if (lce.length > 0)
 				{					
-					StringBuilder sql = new StringBuilder("SELECT COALESCE(SUM(QtyOnHand),0) FROM M_Storage")					
+					StringBuilder sql = new StringBuilder("SELECT COALESCE(SUM(QtyOnHand),0) FROM M_StorageOnHand")					
 						.append(" WHERE AD_Client_ID=").append(cost.getAD_Client_ID())
 						.append(" AND M_Product_ID=").append(cost.getM_Product_ID());
 					//Costing Level
diff --git a/org.adempiere.base/src/org/compiere/model/MInOut.java b/org.adempiere.base/src/org/compiere/model/MInOut.java
index c67dbd9da9..ffeab33026 100644
--- a/org.adempiere.base/src/org/compiere/model/MInOut.java
+++ b/org.adempiere.base/src/org/compiere/model/MInOut.java
@@ -101,12 +101,12 @@ public class MInOut extends X_M_InOut implements DocAction
 			if (qty.signum() == 0)
 				continue;
 			//	Stock Info
-			MStorage[] storages = null;
+			MStorageOnHand[] storages = null;
 			MProduct product = oLines[i].getProduct();
 			if (product != null && product.get_ID() != 0 && product.isStocked())
 			{
 				String MMPolicy = product.getMMPolicy();
-				storages = MStorage.getWarehouse (order.getCtx(), order.getM_Warehouse_ID(),
+				storages = MStorageOnHand.getWarehouse (order.getCtx(), order.getM_Warehouse_ID(),
 					oLines[i].getM_Product_ID(), oLines[i].getM_AttributeSetInstance_ID(),
 					minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, 0, trxName);
 			} else {
@@ -1353,31 +1353,67 @@ public class MInOut extends X_M_InOut implements DocAction
 
 
 						//	Update Storage - see also VMatch.createMatchRecord
-						if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
+						if (!MStorageOnHand.add(getCtx(), getM_Warehouse_ID(),
 							sLine.getM_Locator_ID(),
 							sLine.getM_Product_ID(),
 							ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
 							QtyMA,
-							sameWarehouse ? reservedDiff : Env.ZERO,
-							sameWarehouse ? orderedDiff : Env.ZERO,
 							get_TrxName()))
 						{
 							String lastError = CLogger.retrieveErrorString("");
-							m_processMsg = "Cannot correct Inventory (MA) - " + lastError;
+							m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 							return DocAction.STATUS_Invalid;
 						}
+						if (sameWarehouse && reservedDiff.signum() != 0) {
+							if (!MStorageReservation.add(getCtx(), getM_Warehouse_ID(),
+									sLine.getM_Product_ID(),
+									ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+									reservedDiff,
+									true,
+									get_TrxName()))
+							{
+								String lastError = CLogger.retrieveErrorString("");
+								m_processMsg = "Cannot correct Inventory Reserved (MA) - " + lastError;
+								return DocAction.STATUS_Invalid;
+							}
+						}
+						if (sameWarehouse && orderedDiff.signum() != 0) {
+							if (!MStorageReservation.add(getCtx(), getM_Warehouse_ID(),
+									sLine.getM_Product_ID(),
+									ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+									orderedDiff,
+									false,
+									get_TrxName()))
+							{
+								String lastError = CLogger.retrieveErrorString("");
+								m_processMsg = "Cannot correct Inventory Ordered (MA) - " + lastError;
+								return DocAction.STATUS_Invalid;
+							}
+						}
 						if (!sameWarehouse) {
 							//correct qtyOrdered in warehouse of order
 							MWarehouse wh = MWarehouse.get(getCtx(), oLine.getM_Warehouse_ID());
-							if (!MStorage.add(getCtx(), oLine.getM_Warehouse_ID(),
-									wh.getDefaultLocator().getM_Locator_ID(),
-									sLine.getM_Product_ID(),
-									ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
-									Env.ZERO, reservedDiff, orderedDiff, get_TrxName()))
+							if (reservedDiff.signum() != 0) {
+								if (!MStorageReservation.add(getCtx(), oLine.getM_Warehouse_ID(),
+										sLine.getM_Product_ID(),
+										ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+										reservedDiff, true, get_TrxName()))
 								{
-									m_processMsg = "Cannot correct Inventory (MA) in order warehouse";
+									m_processMsg = "Cannot correct Inventory Reserved (MA) in order warehouse";
 									return DocAction.STATUS_Invalid;
 								}
+							}
+							if (orderedDiff.signum() != 0) {
+								if (!MStorageReservation.add(getCtx(), oLine.getM_Warehouse_ID(),
+										sLine.getM_Product_ID(),
+										ma.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+										orderedDiff, false, get_TrxName()))
+								{
+									m_processMsg = "Cannot correct Inventory Ordered (MA) in order warehouse";
+									return DocAction.STATUS_Invalid;
+								}
+
+							}
 						}
 						//	Create Transaction
 						mtrx = new MTransaction (getCtx(), sLine.getAD_Org_ID(),
@@ -1399,27 +1435,59 @@ public class MInOut extends X_M_InOut implements DocAction
 					BigDecimal orderedDiff = sameWarehouse ? QtyPO.negate(): Env.ZERO;
 
 					//	Fallback: Update Storage - see also VMatch.createMatchRecord
-					if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
+					if (!MStorageOnHand.add(getCtx(), getM_Warehouse_ID(),
 						sLine.getM_Locator_ID(),
 						sLine.getM_Product_ID(),
 						sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
-						Qty, reservedDiff, orderedDiff, get_TrxName()))
+						Qty, get_TrxName()))
 					{
-						m_processMsg = "Cannot correct Inventory";
+						String lastError = CLogger.retrieveErrorString("");
+						m_processMsg = "Cannot correct Inventory OnHand - " + lastError;
 						return DocAction.STATUS_Invalid;
 					}
+					if (reservedDiff.signum() != 0) {
+						if (!MStorageReservation.add(getCtx(), getM_Warehouse_ID(),
+								sLine.getM_Product_ID(),
+								sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+								reservedDiff, true, get_TrxName()))
+						{
+							m_processMsg = "Cannot correct Inventory Reserved";
+							return DocAction.STATUS_Invalid;
+						}
+					}
+					if (orderedDiff.signum() != 0) {
+						if (!MStorageReservation.add(getCtx(), getM_Warehouse_ID(),
+								sLine.getM_Product_ID(),
+								sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+								orderedDiff, false, get_TrxName()))
+						{
+							m_processMsg = "Cannot correct Inventory Ordered";
+							return DocAction.STATUS_Invalid;
+						}
+					}
 					if (!sameWarehouse) {
 						//correct qtyOrdered in warehouse of order
 						MWarehouse wh = MWarehouse.get(getCtx(), oLine.getM_Warehouse_ID());
-						if (!MStorage.add(getCtx(), oLine.getM_Warehouse_ID(),
-								wh.getDefaultLocator().getM_Locator_ID(),
-								sLine.getM_Product_ID(),
-								sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
-								Env.ZERO, QtySO.negate(), QtyPO.negate(), get_TrxName()))
+						if (QtySO.signum() != 0) {
+							if (!MStorageReservation.add(getCtx(), oLine.getM_Warehouse_ID(),
+									sLine.getM_Product_ID(),
+									sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+									QtySO.negate(), true, get_TrxName()))
 							{
-								m_processMsg = "Cannot correct Inventory";
+								m_processMsg = "Cannot correct Inventory Reserved";
 								return DocAction.STATUS_Invalid;
 							}
+						}
+						if (QtyPO.signum() != 0) {
+							if (!MStorageReservation.add(getCtx(), oLine.getM_Warehouse_ID(),
+									sLine.getM_Product_ID(),
+									sLine.getM_AttributeSetInstance_ID(), reservationAttributeSetInstance_ID,
+									QtyPO.negate(), false, get_TrxName()))
+							{
+								m_processMsg = "Cannot correct Inventory Ordered";
+								return DocAction.STATUS_Invalid;
+							}
+						}
 					}
 					//	FallBack: Create Transaction
 					mtrx = new MTransaction (getCtx(), sLine.getAD_Org_ID(),
@@ -1775,9 +1843,9 @@ public class MInOut extends X_M_InOut implements DocAction
 			{
 				MAttributeSetInstance asi = null;
 				//auto balance negative on hand
-				MStorage[] storages = MStorage.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
+				MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
 						null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), false, line.getM_Locator_ID(), get_TrxName());
-				for (MStorage storage : storages)
+				for (MStorageOnHand storage : storages)
 				{
 					if (storage.getQtyOnHand().signum() < 0)
 					{
@@ -1799,10 +1867,10 @@ public class MInOut extends X_M_InOut implements DocAction
 			{
 				String MMPolicy = product.getMMPolicy();
 				Timestamp minGuaranteeDate = getMovementDate();
-				MStorage[] storages = MStorage.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
+				MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(),
 						minGuaranteeDate, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName());
 				BigDecimal qtyToDeliver = line.getMovementQty();
-				for (MStorage storage: storages)
+				for (MStorageOnHand storage: storages)
 				{
 					if (storage.getQtyOnHand().compareTo(qtyToDeliver) >= 0)
 					{
diff --git a/org.adempiere.base/src/org/compiere/model/MInOutLine.java b/org.adempiere.base/src/org/compiere/model/MInOutLine.java
index da12869f2d..2489de1d82 100644
--- a/org.adempiere.base/src/org/compiere/model/MInOutLine.java
+++ b/org.adempiere.base/src/org/compiere/model/MInOutLine.java
@@ -304,7 +304,7 @@ public class MInOutLine extends X_M_InOutLine
 		}
 
 		//	Get existing Location
-		int M_Locator_ID = MStorage.getM_Locator_ID (getM_Warehouse_ID(),
+		int M_Locator_ID = MStorageOnHand.getM_Locator_ID (getM_Warehouse_ID(),
 				getM_Product_ID(), getM_AttributeSetInstance_ID(),
 				Qty, get_TrxName());
 		//	Get default Location
diff --git a/org.adempiere.base/src/org/compiere/model/MInventory.java b/org.adempiere.base/src/org/compiere/model/MInventory.java
index de4fa295b5..049a1802c2 100644
--- a/org.adempiere.base/src/org/compiere/model/MInventory.java
+++ b/org.adempiere.base/src/org/compiere/model/MInventory.java
@@ -437,11 +437,11 @@ public class MInventory extends X_M_Inventory implements DocAction
 						log.fine("Diff=" + qtyDiff 
 								+ " - Instance OnHand=" + QtyMA + "->" + QtyNew);
 
-						if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
+						if (!MStorageOnHand.add(getCtx(), getM_Warehouse_ID(),
 								line.getM_Locator_ID(),
 								line.getM_Product_ID(), 
 								ma.getM_AttributeSetInstance_ID(), 0, 
-								QtyMA.negate(), Env.ZERO, Env.ZERO, get_TrxName()))
+								QtyMA.negate(), get_TrxName()))
 						{
 							String lastError = CLogger.retrieveErrorString("");
 							m_processMsg = "Cannot correct Inventory (MA) - " + lastError;
@@ -451,7 +451,7 @@ public class MInventory extends X_M_Inventory implements DocAction
 						// Only Update Date Last Inventory if is a Physical Inventory
 						if(line.getQtyInternalUse().compareTo(Env.ZERO) == 0)
 						{	
-							MStorage storage = MStorage.get(getCtx(), line.getM_Locator_ID(), 
+							MStorageOnHand storage = MStorageOnHand.get(getCtx(), line.getM_Locator_ID(), 
 									line.getM_Product_ID(), ma.getM_AttributeSetInstance_ID(), get_TrxName());						
 							storage.setDateLastInventory(getMovementDate());
 							if (!storage.save(get_TrxName()))
@@ -488,20 +488,21 @@ public class MInventory extends X_M_Inventory implements DocAction
 				if (mtrx == null)
 				{
 					//Fallback: Update Storage - see also VMatch.createMatchRecord
-					if (!MStorage.add(getCtx(), getM_Warehouse_ID(),
+					if (!MStorageOnHand.add(getCtx(), getM_Warehouse_ID(),
 							line.getM_Locator_ID(),
 							line.getM_Product_ID(), 
 							line.getM_AttributeSetInstance_ID(), 0, 
-							qtyDiff, Env.ZERO, Env.ZERO, get_TrxName()))
+							qtyDiff,get_TrxName()))
 					{
-						m_processMsg = "Cannot correct Inventory (MA)";
+						String lastError = CLogger.retrieveErrorString("");
+						m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 						return DocAction.STATUS_Invalid;
 					}
 
 					// Only Update Date Last Inventory if is a Physical Inventory
 					if(line.getQtyInternalUse().compareTo(Env.ZERO) == 0)
 					{	
-						MStorage storage = MStorage.get(getCtx(), line.getM_Locator_ID(), 
+						MStorageOnHand storage = MStorageOnHand.get(getCtx(), line.getM_Locator_ID(), 
 								line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(), get_TrxName());						
 
 						storage.setDateLastInventory(getMovementDate());
@@ -583,9 +584,9 @@ public class MInventory extends X_M_Inventory implements DocAction
 			{
 				MAttributeSetInstance asi = null;
 				//auto balance negative on hand
-				MStorage[] storages = MStorage.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
+				MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
 						null, MClient.MMPOLICY_FiFo.equals(product.getMMPolicy()), false, line.getM_Locator_ID(), get_TrxName());
-				for (MStorage storage : storages)
+				for (MStorageOnHand storage : storages)
 				{
 					if (storage.getQtyOnHand().signum() < 0)
 					{
@@ -603,12 +604,12 @@ public class MInventory extends X_M_Inventory implements DocAction
 			else	//	Outgoing Trx
 			{
 				String MMPolicy = product.getMMPolicy();
-				MStorage[] storages = MStorage.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
+				MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), getM_Warehouse_ID(), line.getM_Product_ID(), 0,
 						null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName());
 
 				BigDecimal qtyToDeliver = qtyDiff.negate();
 
-				for (MStorage storage: storages)
+				for (MStorageOnHand storage: storages)
 				{					
 					if (storage.getQtyOnHand().compareTo(qtyToDeliver) >= 0)
 					{
diff --git a/org.adempiere.base/src/org/compiere/model/MInventoryLine.java b/org.adempiere.base/src/org/compiere/model/MInventoryLine.java
index 6e6b7f1970..fae17deae1 100644
--- a/org.adempiere.base/src/org/compiere/model/MInventoryLine.java
+++ b/org.adempiere.base/src/org/compiere/model/MInventoryLine.java
@@ -350,7 +350,7 @@ public class MInventoryLine extends X_M_InventoryLine
 	 */
 	private void createMA()
 	{
-		MStorage[] storages = MStorage.getAll(getCtx(), getM_Product_ID(), 
+		MStorageOnHand[] storages = MStorageOnHand.getAll(getCtx(), getM_Product_ID(), 
 			getM_Locator_ID(), get_TrxName());
 		boolean allZeroASI = true;
 		for (int i = 0; i < storages.length; i++)
@@ -368,7 +368,7 @@ public class MInventoryLine extends X_M_InventoryLine
 		BigDecimal sum = Env.ZERO;
 		for (int i = 0; i < storages.length; i++)
 		{
-			MStorage storage = storages[i];
+			MStorageOnHand storage = storages[i];
 			if (storage.getQtyOnHand().signum() == 0)
 				continue;
 			if (ma != null 
diff --git a/org.adempiere.base/src/org/compiere/model/MMovement.java b/org.adempiere.base/src/org/compiere/model/MMovement.java
index 89ca0c46e8..4a8fb7494d 100644
--- a/org.adempiere.base/src/org/compiere/model/MMovement.java
+++ b/org.adempiere.base/src/org/compiere/model/MMovement.java
@@ -25,6 +25,7 @@ import java.util.Properties;
 
 import org.compiere.process.DocAction;
 import org.compiere.process.DocumentEngine;
+import org.compiere.util.CLogger;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
 import org.compiere.util.Msg;
@@ -399,13 +400,14 @@ public class MMovement extends X_M_Movement implements DocAction
 						//
 						MLocator locator = new MLocator (getCtx(), line.getM_Locator_ID(), get_TrxName());
 						//Update Storage 
-						if (!MStorage.add(getCtx(),locator.getM_Warehouse_ID(),
+						if (!MStorageOnHand.add(getCtx(),locator.getM_Warehouse_ID(),
 								line.getM_Locator_ID(),
 								line.getM_Product_ID(), 
 								ma.getM_AttributeSetInstance_ID(), 0, 
-								ma.getMovementQty().negate(), Env.ZERO ,  Env.ZERO , get_TrxName()))
+								ma.getMovementQty().negate(), get_TrxName()))
 						{
-							m_processMsg = "Cannot correct Inventory (MA)";
+							String lastError = CLogger.retrieveErrorString("");
+							m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 							return DocAction.STATUS_Invalid;
 						}
 
@@ -416,13 +418,14 @@ public class MMovement extends X_M_Movement implements DocAction
 							M_AttributeSetInstanceTo_ID = ma.getM_AttributeSetInstance_ID();
 						}
 						//Update Storage 
-						if (!MStorage.add(getCtx(),locator.getM_Warehouse_ID(),
+						if (!MStorageOnHand.add(getCtx(),locator.getM_Warehouse_ID(),
 								line.getM_LocatorTo_ID(),
 								line.getM_Product_ID(), 
 								M_AttributeSetInstanceTo_ID, 0, 
-								ma.getMovementQty(), Env.ZERO ,  Env.ZERO , get_TrxName()))
+								ma.getMovementQty(), get_TrxName()))
 						{
-							m_processMsg = "Cannot correct Inventory (MA)";
+							String lastError = CLogger.retrieveErrorString("");
+							m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 							return DocAction.STATUS_Invalid;
 						}
 
@@ -455,24 +458,26 @@ public class MMovement extends X_M_Movement implements DocAction
 				{
 					MLocator locator = new MLocator (getCtx(), line.getM_Locator_ID(), get_TrxName());
 					//Update Storage 
-					if (!MStorage.add(getCtx(),locator.getM_Warehouse_ID(),
+					if (!MStorageOnHand.add(getCtx(),locator.getM_Warehouse_ID(),
 							line.getM_Locator_ID(),
 							line.getM_Product_ID(), 
 							line.getM_AttributeSetInstance_ID(), 0, 
-							line.getMovementQty().negate(), Env.ZERO ,  Env.ZERO , get_TrxName()))
+							line.getMovementQty().negate(), get_TrxName()))
 					{
-						m_processMsg = "Cannot correct Inventory (MA)";
+						String lastError = CLogger.retrieveErrorString("");
+						m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 						return DocAction.STATUS_Invalid;
 					}
 
 					//Update Storage 
-					if (!MStorage.add(getCtx(),locator.getM_Warehouse_ID(),
+					if (!MStorageOnHand.add(getCtx(),locator.getM_Warehouse_ID(),
 							line.getM_LocatorTo_ID(),
 							line.getM_Product_ID(), 
 							line.getM_AttributeSetInstanceTo_ID(), 0, 
-							line.getMovementQty(), Env.ZERO ,  Env.ZERO , get_TrxName()))
+							line.getMovementQty(), get_TrxName()))
 					{
-						m_processMsg = "Cannot correct Inventory (MA)";
+						String lastError = CLogger.retrieveErrorString("");
+						m_processMsg = "Cannot correct Inventory OnHand (MA) - " + lastError;
 						return DocAction.STATUS_Invalid;
 					}
 
@@ -550,12 +555,12 @@ public class MMovement extends X_M_Movement implements DocAction
 		{
 			MProduct product = MProduct.get(getCtx(), line.getM_Product_ID());
 			String MMPolicy = product.getMMPolicy();
-			MStorage[] storages = MStorage.getWarehouse(getCtx(), 0, line.getM_Product_ID(), 0, 
+			MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), 0, line.getM_Product_ID(), 0, 
 					null, MClient.MMPOLICY_FiFo.equals(MMPolicy), true, line.getM_Locator_ID(), get_TrxName());
 
 			BigDecimal qtyToDeliver = line.getMovementQty();
 
-			for (MStorage storage: storages)
+			for (MStorageOnHand storage: storages)
 			{
 				if (storage.getQtyOnHand().compareTo(qtyToDeliver) >= 0)
 				{
diff --git a/org.adempiere.base/src/org/compiere/model/MOrder.java b/org.adempiere.base/src/org/compiere/model/MOrder.java
index d9f2630200..8a801b4ed2 100644
--- a/org.adempiere.base/src/org/compiere/model/MOrder.java
+++ b/org.adempiere.base/src/org/compiere/model/MOrder.java
@@ -137,9 +137,9 @@ public class MOrder extends X_C_Order implements DocAction
 		if (to.copyLinesFrom(from, counter, copyASI) == 0)
 			throw new IllegalStateException("Could not create Order Lines");
 		
-		// don't copy linked PO/SO
-		to.setLink_Order_ID(0);
-		
+		// don't copy linked PO/SO
+		to.setLink_Order_ID(0);
+		
 		return to;
 	}	//	copyFrom
 	
@@ -543,8 +543,8 @@ public class MOrder extends X_C_Order implements DocAction
 			else
 				line.setRef_OrderLine_ID(0);
 
-			// don't copy linked lines
-			line.setLink_OrderLine_ID(0);
+			// don't copy linked lines
+			line.setLink_OrderLine_ID(0);
 			//	Tax
 			if (getC_BPartner_ID() != otherOrder.getC_BPartner_ID())
 				line.setTax();		//	recalculate
@@ -1514,7 +1514,7 @@ public class MOrder extends X_C_Order implements DocAction
 			//	Closing Binding Quotation
 			|| (MDocType.DOCSUBTYPESO_Quotation.equals(dt.getDocSubTypeSO()) 
 				&& DOCACTION_Close.equals(getDocAction())) 
-			) // || isDropShip() )
+			) // || isDropShip() )
 			binding = false;
 		boolean isSOTrx = isSOTrx();
 		log.fine("Binding=" + binding + " - IsSOTrx=" + isSOTrx);
@@ -1566,38 +1566,13 @@ public class MOrder extends X_C_Order implements DocAction
 			{
 				if (product.isStocked())
 				{
-					BigDecimal ordered = isSOTrx ? Env.ZERO : difference;
-					BigDecimal reserved = isSOTrx ? difference : Env.ZERO;
-					int M_Locator_ID = 0; 
-					//	Get Locator to reserve
-					if (line.getM_AttributeSetInstance_ID() != 0)	//	Get existing Location
-						M_Locator_ID = MStorage.getM_Locator_ID (line.getM_Warehouse_ID(), 
-							line.getM_Product_ID(), line.getM_AttributeSetInstance_ID(), 
-							ordered, get_TrxName());
-					//	Get default Location
-					if (M_Locator_ID == 0)
-					{
-						// try to take default locator for product first
-						// if it is from the selected warehouse
-						MWarehouse wh = MWarehouse.get(getCtx(), line.getM_Warehouse_ID());
-						M_Locator_ID = product.getM_Locator_ID();
-						if (M_Locator_ID!=0) {
-							MLocator locator = new MLocator(getCtx(), product.getM_Locator_ID(), get_TrxName());
-							//product has default locator defined but is not from the order warehouse
-							if(locator.getM_Warehouse_ID()!=wh.get_ID()) {
-								M_Locator_ID = wh.getDefaultLocator().getM_Locator_ID();
-							}
-						} else {
-							M_Locator_ID = wh.getDefaultLocator().getM_Locator_ID();
-						}
-					}
-					//	Update Storage
-					if (!MStorage.add(getCtx(), line.getM_Warehouse_ID(), M_Locator_ID, 
+					//	Update Reservation Storage
+					if (!MStorageReservation.add(getCtx(), line.getM_Warehouse_ID(), 
 						line.getM_Product_ID(), 
 						line.getM_AttributeSetInstance_ID(), line.getM_AttributeSetInstance_ID(),
-						Env.ZERO, reserved, ordered, get_TrxName()))
+						difference, isSOTrx, get_TrxName()))
 						return false;
-				}	//	stockec
+				}	//	stocked
 				//	update line
 				line.setQtyReserved(line.getQtyReserved().add(difference));
 				if (!line.save(get_TrxName()))
@@ -2036,7 +2011,7 @@ public class MOrder extends X_C_Order implements DocAction
 			//	Qty = Ordered - Delivered
 			BigDecimal MovementQty = oLine.getQtyOrdered().subtract(oLine.getQtyDelivered()); 
 			//	Location
-			int M_Locator_ID = MStorage.getM_Locator_ID (oLine.getM_Warehouse_ID(), 
+			int M_Locator_ID = MStorageOnHand.getM_Locator_ID (oLine.getM_Warehouse_ID(), 
 					oLine.getM_Product_ID(), oLine.getM_AttributeSetInstance_ID(), 
 					MovementQty, get_TrxName());
 			if (M_Locator_ID == 0)		//	Get default Location
diff --git a/org.adempiere.base/src/org/compiere/model/MOrderLine.java b/org.adempiere.base/src/org/compiere/model/MOrderLine.java
index 0d88356e0a..ed492b9eba 100644
--- a/org.adempiere.base/src/org/compiere/model/MOrderLine.java
+++ b/org.adempiere.base/src/org/compiere/model/MOrderLine.java
@@ -19,6 +19,7 @@ package org.compiere.model;
 import java.math.BigDecimal;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
+import java.sql.Timestamp;
 import java.util.Properties;
 import java.util.logging.Level;
 
@@ -200,9 +201,9 @@ public class MOrderLine extends X_C_OrderLine
 	private boolean			m_IsSOTrx = true;
 	//	Product Pricing
 	private MProductPricing	m_productPrice = null;
-
-	/** Tax							*/
-	private MTax 		m_tax = null;
+
+	/** Tax							*/
+	private MTax 		m_tax = null;
 	
 	/** Cached Currency Precision	*/
 	private Integer			m_precision = null;
@@ -418,17 +419,17 @@ public class MOrderLine extends X_C_OrderLine
 		if (m_charge == null && getC_Charge_ID() != 0)
 			m_charge =  MCharge.get (getCtx(), getC_Charge_ID());
 		return m_charge;
-	}
-	/**
-	 * 	Get Tax
-	 *	@return tax
-	 */
-	protected MTax getTax()
-	{
-		if (m_tax == null)
-			m_tax = MTax.get(getCtx(), getC_Tax_ID());
-		return m_tax;
-	}	//	getTax
+	}
+	/**
+	 * 	Get Tax
+	 *	@return tax
+	 */
+	protected MTax getTax()
+	{
+		if (m_tax == null)
+			m_tax = MTax.get(getCtx(), getC_Tax_ID());
+		return m_tax;
+	}	//	getTax
 
 	/**
 	 * 	Get Currency Precision from Currency
@@ -873,9 +874,9 @@ public class MOrderLine extends X_C_OrderLine
 				//	Max
 				if (isInstance)
 				{
-					MStorage[] storages = MStorage.getWarehouse(getCtx(), 
+					MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(), 
 						getM_Warehouse_ID(), getM_Product_ID(), getM_AttributeSetInstance_ID(), 
-						M_AttributeSet_ID, false, null, true, get_TrxName());
+						null, true, false, 0, get_TrxName());
 					BigDecimal qty = Env.ZERO;
 					for (int i = 0; i < storages.length; i++)
 					{
diff --git a/org.adempiere.base/src/org/compiere/model/MProduct.java b/org.adempiere.base/src/org/compiere/model/MProduct.java
index cc96ddb424..c6f3a768a0 100644
--- a/org.adempiere.base/src/org/compiere/model/MProduct.java
+++ b/org.adempiere.base/src/org/compiere/model/MProduct.java
@@ -26,6 +26,7 @@ import org.compiere.util.CCache;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
 import org.compiere.util.Msg;
+import org.compiere.util.Util;
 
 /**
  * 	Product Model
@@ -571,24 +572,8 @@ public class MProduct extends X_M_Product
 			|| (is_ValueChanged("ProductType") 					//	from Item
 				&& PRODUCTTYPE_Item.equals(get_ValueOld("ProductType")))))
 		{
-			MStorage[] storages = MStorage.getOfProduct(getCtx(), get_ID(), get_TrxName());
-			BigDecimal OnHand = Env.ZERO;
-			BigDecimal Ordered = Env.ZERO;
-			BigDecimal Reserved = Env.ZERO;
-			for (int i = 0; i < storages.length; i++)
-			{
-				OnHand = OnHand.add(storages[i].getQtyOnHand());
-				Ordered = Ordered.add(storages[i].getQtyOrdered());
-				Reserved = Reserved.add(storages[i].getQtyReserved());
-			}
-			String errMsg = "";
-			if (OnHand.signum() != 0)
-				errMsg = "@QtyOnHand@ = " + OnHand;
-			if (Ordered.signum() != 0)
-				errMsg += " - @QtyOrdered@ = " + Ordered;
-			if (Reserved.signum() != 0)
-				errMsg += " - @QtyReserved@" + Reserved;
-			if (errMsg.length() > 0)
+			String errMsg = verifyStorage();
+			if (! Util.isEmpty(errMsg))
 			{
 				log.saveError("Error", Msg.parseTranslation(getCtx(), errMsg)); 
 				return false;
@@ -629,6 +614,32 @@ public class MProduct extends X_M_Product
 		return true;
 	}	//	beforeSave
 
+	private String verifyStorage() {
+		BigDecimal qtyOnHand = Env.ZERO;
+		BigDecimal qtyOrdered = Env.ZERO;
+		BigDecimal qtyReserved = Env.ZERO;
+		for (MStorageOnHand ohs: MStorageOnHand.getOfProduct(getCtx(), get_ID(), get_TrxName()))
+		{
+			qtyOnHand = qtyOnHand.add(ohs.getQtyOnHand());
+		}
+		for (MStorageReservation rs : MStorageReservation.getOfProduct(getCtx(), get_ID(), get_TrxName()))
+		{
+			if (rs.isSOTrx())
+				qtyReserved = qtyReserved.add(rs.getQty());
+			else
+				qtyOrdered = qtyOrdered.add(rs.getQty());
+		}
+
+		StringBuilder errMsg = new StringBuilder();
+		if (qtyOnHand.signum() != 0)
+			errMsg.append("@QtyOnHand@ = ").append(qtyOnHand);
+		if (qtyOrdered.signum() != 0)
+			errMsg.append(" - @QtyOrdered@ = ").append(qtyOrdered);
+		if (qtyReserved.signum() != 0)
+			errMsg.append(" - @QtyReserved@").append(qtyReserved);
+		return errMsg.toString();
+	}
+
 	/**
 	 * 	HasInventoryOrCost 
 	 *	@return true if it has Inventory or Cost
@@ -710,24 +721,8 @@ public class MProduct extends X_M_Product
 		//	Check Storage
 		if (isStocked() || PRODUCTTYPE_Item.equals(getProductType()))
 		{
-			MStorage[] storages = MStorage.getOfProduct(getCtx(), get_ID(), get_TrxName());
-			BigDecimal OnHand = Env.ZERO;
-			BigDecimal Ordered = Env.ZERO;
-			BigDecimal Reserved = Env.ZERO;
-			for (int i = 0; i < storages.length; i++)
-			{
-				OnHand = OnHand.add(storages[i].getQtyOnHand());
-				Ordered = OnHand.add(storages[i].getQtyOrdered());
-				Reserved = OnHand.add(storages[i].getQtyReserved());
-			}
-			String errMsg = "";
-			if (OnHand.signum() != 0)
-				errMsg = "@QtyOnHand@ = " + OnHand;
-			if (Ordered.signum() != 0)
-				errMsg += " - @QtyOrdered@ = " + Ordered;
-			if (Reserved.signum() != 0)
-				errMsg += " - @QtyReserved@" + Reserved;
-			if (errMsg.length() > 0)
+			String errMsg = verifyStorage();
+			if (! Util.isEmpty(errMsg))
 			{
 				log.saveError("Error", Msg.parseTranslation(getCtx(), errMsg)); 
 				return false;
diff --git a/org.adempiere.base/src/org/compiere/model/MProduction.java b/org.adempiere.base/src/org/compiere/model/MProduction.java
index 70b36445f6..88812a05fe 100644
--- a/org.adempiere.base/src/org/compiere/model/MProduction.java
+++ b/org.adempiere.base/src/org/compiere/model/MProduction.java
@@ -186,7 +186,7 @@ public class MProduction extends X_M_Production {
 					{
 
 						// BOM stock info
-						MStorage[] storages = null;
+						MStorageOnHand[] storages = null;
 						MProduct usedProduct = MProduct.get(getCtx(), BOMProduct_ID);
 						defaultLocator = usedProduct.getM_Locator_ID();
 						if ( defaultLocator == 0 )
@@ -203,7 +203,7 @@ public class MProduction extends X_M_Production {
 							MMPolicy = client.getMMPolicy();
 						}
 
-						storages = MStorage.getWarehouse(getCtx(), M_Warehouse_ID, BOMProduct_ID, 0, null,
+						storages = MStorageOnHand.getWarehouse(getCtx(), M_Warehouse_ID, BOMProduct_ID, 0, null,
 								MProductCategory.MMPOLICY_FiFo.equals(MMPolicy), true, 0, get_TrxName());
 
 						MProductionLine BOMLine = null;
diff --git a/org.adempiere.base/src/org/compiere/model/MProductionLine.java b/org.adempiere.base/src/org/compiere/model/MProductionLine.java
index 096243f0c1..ee0ddebe1e 100644
--- a/org.adempiere.base/src/org/compiere/model/MProductionLine.java
+++ b/org.adempiere.base/src/org/compiere/model/MProductionLine.java
@@ -104,7 +104,7 @@ public class MProductionLine extends X_M_ProductionLine {
 				log.log(Level.SEVERE, "Could not save transaction for " + toString());
 				errorString.append("Could not save transaction for " + toString() + "\n");
 			}
-			MStorage storage = MStorage.getCreate(getCtx(), getM_Locator_ID(),
+			MStorageOnHand storage = MStorageOnHand.getCreate(getCtx(), getM_Locator_ID(),
 					getM_Product_ID(), asi.get_ID(), get_TrxName());
 			storage.changeQtyOnHand(getMovementQty(), true);
 			if ( !storage.save(get_TrxName()) )  {
@@ -117,7 +117,7 @@ public class MProductionLine extends X_M_ProductionLine {
 		}
 		
 		// create transactions and update stock used in production
-		MStorage[] storages = MStorage.getAll( getCtx(), getM_Product_ID(),
+		MStorageOnHand[] storages = MStorageOnHand.getAll( getCtx(), getM_Product_ID(),
 				getM_Locator_ID(), get_TrxName());
 		
 		MProductionLineMA lineMA = null;
@@ -192,10 +192,10 @@ public class MProductionLine extends X_M_ProductionLine {
 			}
 			else
 			{
-				MStorage storage = MStorage.get(Env.getCtx(), getM_Locator_ID(), getM_Product_ID(), 0, get_TrxName());
+				MStorageOnHand storage = MStorageOnHand.get(Env.getCtx(), getM_Locator_ID(), getM_Product_ID(), 0, get_TrxName());
 				if (storage == null)
 				{
-					storage = new MStorage(Env.getCtx(), 0, get_TrxName());
+					storage = new MStorageOnHand(Env.getCtx(), 0, get_TrxName());
 					storage.setM_Locator_ID(getM_Locator_ID());
 					storage.setM_Product_ID(getM_Product_ID());
 					storage.setM_AttributeSetInstance_ID(0);
diff --git a/org.adempiere.base/src/org/compiere/model/MProjectIssue.java b/org.adempiere.base/src/org/compiere/model/MProjectIssue.java
index 034f7a4189..74fd116e85 100644
--- a/org.adempiere.base/src/org/compiere/model/MProjectIssue.java
+++ b/org.adempiere.base/src/org/compiere/model/MProjectIssue.java
@@ -163,9 +163,9 @@ public class MProjectIssue extends X_C_ProjectIssue
 		mTrx.setC_ProjectIssue_ID(getC_ProjectIssue_ID());
 		//
 		MLocator loc = MLocator.get(getCtx(), getM_Locator_ID());
-		if (MStorage.add(getCtx(), loc.getM_Warehouse_ID(), getM_Locator_ID(), 
+		if (MStorageOnHand.add(getCtx(), loc.getM_Warehouse_ID(), getM_Locator_ID(), 
 				getM_Product_ID(), getM_AttributeSetInstance_ID(), getM_AttributeSetInstance_ID(),
-				getMovementQty().negate(), null, null, get_TrxName()))
+				getMovementQty().negate(), get_TrxName()))
 		{
 			if (mTrx.save(get_TrxName()))
 			{
diff --git a/org.adempiere.base/src/org/compiere/model/MStorage.java b/org.adempiere.base/src/org/compiere/model/MStorageOnHand.java
similarity index 70%
rename from org.adempiere.base/src/org/compiere/model/MStorage.java
rename to org.adempiere.base/src/org/compiere/model/MStorageOnHand.java
index cca8d57abd..4c85594f02 100644
--- a/org.adempiere.base/src/org/compiere/model/MStorage.java
+++ b/org.adempiere.base/src/org/compiere/model/MStorageOnHand.java
@@ -1,750 +1,673 @@
-/******************************************************************************
- * Product: Adempiere ERP & CRM Smart Business Solution                       *
- * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.                *
- * This program is free software; you can redistribute it and/or modify it    *
- * under the terms version 2 of the GNU General Public License as published   *
- * by the Free Software Foundation. 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.,    *
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
- * For the text or an alternative of this public license, you may reach us    *
- * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA        *
- * or via info@compiere.org or http://www.compiere.org/license.html           *
- *****************************************************************************/
-package org.compiere.model;
-
-import java.math.BigDecimal;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Properties;
-import java.util.logging.Level;
-
-import org.compiere.util.CLogMgt;
-import org.compiere.util.CLogger;
-import org.compiere.util.DB;
-import org.compiere.util.Env;
-import org.compiere.util.Msg;
-
-/**
- * 	Inventory Storage Model
- *
- *	@author Jorg Janke
- *	@version $Id: MStorage.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
- */
-public class MStorage extends X_M_Storage
-{
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 3911132565445025309L;
-
-	/**
-	 * 	Get Storage Info
-	 *	@param ctx context
-	 *	@param M_Locator_ID locator
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID instance
-	 *	@param trxName transaction
-	 *	@return existing or null
-	 */
-	public static MStorage get (Properties ctx, int M_Locator_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
-	{
-		MStorage retValue = null;
-		String sql = "SELECT * FROM M_Storage "
-			+ "WHERE M_Locator_ID=? AND M_Product_ID=? AND ";
-		if (M_AttributeSetInstance_ID == 0)
-			sql += "(M_AttributeSetInstance_ID=? OR M_AttributeSetInstance_ID IS NULL)";
-		else
-			sql += "M_AttributeSetInstance_ID=?";
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement (sql, trxName);
-			pstmt.setInt (1, M_Locator_ID);
-			pstmt.setInt (2, M_Product_ID);
-			pstmt.setInt (3, M_AttributeSetInstance_ID);
-			rs = pstmt.executeQuery ();
-			if (rs.next ())
-				retValue = new MStorage (ctx, rs, trxName);
-		}
-		catch (SQLException ex)
-		{
-			s_log.log(Level.SEVERE, sql, ex);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		if (retValue == null)
-			s_log.fine("Not Found - M_Locator_ID=" + M_Locator_ID 
-				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID);
-		else
-			s_log.fine("M_Locator_ID=" + M_Locator_ID 
-				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID);
-		return retValue;
-	}	//	get
-
-	/**
-	 * 	Get all Storages for Product with ASI and QtyOnHand <> 0
-	 *	@param ctx context
-	 *	@param M_Product_ID product
-	 *	@param M_Locator_ID locator
-	 *	@param FiFo first in-first-out
-	 *	@param trxName transaction
-	 *	@return existing or null
-	 */
-	public static MStorage[] getAllWithASI (Properties ctx, int M_Product_ID, int M_Locator_ID, 
-		boolean FiFo, String trxName)
-	{
-		ArrayList<MStorage> list = new ArrayList<MStorage>();
-		String sql = "SELECT * FROM M_Storage "
-			+ "WHERE M_Product_ID=? AND M_Locator_ID=?"
-			+ " AND M_AttributeSetInstance_ID > 0 "
-			+ " AND QtyOnHand <> 0 "			
-			+ "ORDER BY M_AttributeSetInstance_ID";
-		if (!FiFo)
-			sql += " DESC";
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement (sql, trxName);
-			pstmt.setInt (1, M_Product_ID);
-			pstmt.setInt (2, M_Locator_ID);
-			rs = pstmt.executeQuery ();
-			while (rs.next ())
-				list.add(new MStorage (ctx, rs, trxName));
-		}
-		catch (SQLException ex)
-		{
-			s_log.log(Level.SEVERE, sql, ex);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		MStorage[] retValue = new MStorage[list.size()];
-		list.toArray(retValue);
-		return retValue;
-	}	//	getAllWithASI
-
-	/**
-	 * 	Get all Storages for Product where QtyOnHand <> 0
-	 *	@param ctx context
-	 *	@param M_Product_ID product
-	 *	@param M_Locator_ID locator
-	 *	@param trxName transaction
-	 *	@return existing or null
-	 */
-	public static MStorage[] getAll (Properties ctx, 
-		int M_Product_ID, int M_Locator_ID, String trxName)
-	{
-		ArrayList<MStorage> list = new ArrayList<MStorage>();
-		String sql = "SELECT * FROM M_Storage "
-			+ "WHERE M_Product_ID=? AND M_Locator_ID=?"
-			+ " AND QtyOnHand <> 0 "
-			+ "ORDER BY M_AttributeSetInstance_ID";
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement (sql, trxName);
-			pstmt.setInt (1, M_Product_ID);
-			pstmt.setInt (2, M_Locator_ID);
-			rs = pstmt.executeQuery ();
-			while (rs.next ())
-				list.add(new MStorage (ctx, rs, trxName));
-		}
-		catch (SQLException ex)
-		{
-			s_log.log(Level.SEVERE, sql, ex);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		MStorage[] retValue = new MStorage[list.size()];
-		list.toArray(retValue);
-		return retValue;
-	}	//	getAll
-
-	
-	/**
-	 * 	Get Storage Info for Product across warehouses
-	 *	@param ctx context
-	 *	@param M_Product_ID product
-	 *	@param trxName transaction
-	 *	@return existing or null
-	 */
-	public static MStorage[] getOfProduct (Properties ctx, int M_Product_ID, String trxName)
-	{
-		ArrayList<MStorage> list = new ArrayList<MStorage>();
-		String sql = "SELECT * FROM M_Storage "
-			+ "WHERE M_Product_ID=?";
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement (sql, trxName);
-			pstmt.setInt (1, M_Product_ID);
-			rs = pstmt.executeQuery ();
-			while (rs.next ())
-				list.add(new MStorage (ctx, rs, trxName));
-		}
-		catch (SQLException ex)
-		{
-			s_log.log(Level.SEVERE, sql, ex);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		MStorage[] retValue = new MStorage[list.size()];
-		list.toArray(retValue);
-		return retValue;
-	}	//	getOfProduct
-	
-	/**
-	 * 	Get Storage Info for Warehouse
-	 *	@param ctx context
-	 *	@param M_Warehouse_ID 
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID instance
-	 *	@param M_AttributeSet_ID attribute set
-	 *	@param allAttributeInstances if true, all attribute set instances
-	 *	@param minGuaranteeDate optional minimum guarantee date if all attribute instances
-	 *	@param FiFo first in-first-out
-	 *	@param trxName transaction
-	 *	@return existing - ordered by location priority (desc) and/or guarantee date
-	 *
-	 *  @deprecated
-	 */
-	public static MStorage[] getWarehouse (Properties ctx, int M_Warehouse_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, int M_AttributeSet_ID,
-		boolean allAttributeInstances, Timestamp minGuaranteeDate,
-		boolean FiFo, String trxName)
-	{
-		return getWarehouse(ctx, M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID, 
-				minGuaranteeDate, FiFo, false, 0, trxName);
-	}
-	
-	/**
-	 * 	Get Storage Info for Warehouse or locator
-	 *	@param ctx context
-	 *	@param M_Warehouse_ID ignore if M_Locator_ID > 0
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID instance id, 0 to retrieve all instance
-	 *	@param minGuaranteeDate optional minimum guarantee date if all attribute instances
-	 *	@param FiFo first in-first-out
-	 *  @param positiveOnly if true, only return storage records with qtyOnHand > 0
-	 *  @param M_Locator_ID optional locator id
-	 *	@param trxName transaction
-	 *	@return existing - ordered by location priority (desc) and/or guarantee date
-	 */
-	public static MStorage[] getWarehouse (Properties ctx, int M_Warehouse_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, Timestamp minGuaranteeDate,
-		boolean FiFo, boolean positiveOnly, int M_Locator_ID, String trxName)
-	{
-		if ((M_Warehouse_ID == 0 && M_Locator_ID == 0) || M_Product_ID == 0)
-			return new MStorage[0];
-		
-		boolean allAttributeInstances = false;
-		if (M_AttributeSetInstance_ID == 0)
-			allAttributeInstances = true;		
-		
-		ArrayList<MStorage> list = new ArrayList<MStorage>();
-		//	Specific Attribute Set Instance
-		String sql = "SELECT s.M_Product_ID,s.M_Locator_ID,s.M_AttributeSetInstance_ID,"
-			+ "s.AD_Client_ID,s.AD_Org_ID,s.IsActive,s.Created,s.CreatedBy,s.Updated,s.UpdatedBy,"
-			+ "s.QtyOnHand,s.QtyReserved,s.QtyOrdered,s.DateLastInventory "
-			+ "FROM M_Storage s"
-			+ " INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID) ";
-		if (M_Locator_ID > 0)
-			sql += "WHERE l.M_Locator_ID = ?";
-		else
-			sql += "WHERE l.M_Warehouse_ID=?";
-		sql += " AND s.M_Product_ID=?"
-			 + " AND COALESCE(s.M_AttributeSetInstance_ID,0)=? ";
-		if (positiveOnly)
-		{
-			sql += " AND s.QtyOnHand > 0 ";
-		}
-		else
-		{
-			sql += " AND s.QtyOnHand <> 0 ";
-		}
-		sql += "ORDER BY l.PriorityNo DESC, M_AttributeSetInstance_ID";
-		if (!FiFo)
-			sql += " DESC";
-		//	All Attribute Set Instances
-		if (allAttributeInstances)
-		{
-			sql = "SELECT s.M_Product_ID,s.M_Locator_ID,s.M_AttributeSetInstance_ID,"
-				+ "s.AD_Client_ID,s.AD_Org_ID,s.IsActive,s.Created,s.CreatedBy,s.Updated,s.UpdatedBy,"
-				+ "s.QtyOnHand,s.QtyReserved,s.QtyOrdered,s.DateLastInventory,s.M_Storage_UU "
-				+ "FROM M_Storage s"
-				+ " INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID)"
-				+ " LEFT OUTER JOIN M_AttributeSetInstance asi ON (s.M_AttributeSetInstance_ID=asi.M_AttributeSetInstance_ID) ";
-			if (M_Locator_ID > 0)
-				sql += "WHERE l.M_Locator_ID = ?";
-			else
-				sql += "WHERE l.M_Warehouse_ID=?";
-			sql += " AND s.M_Product_ID=? ";
-			if (positiveOnly)
-			{
-				sql += " AND s.QtyOnHand > 0 ";
-			}
-			else
-			{
-				sql += " AND s.QtyOnHand <> 0 ";
-			}
-			if (minGuaranteeDate != null)
-			{
-				sql += "AND (asi.GuaranteeDate IS NULL OR asi.GuaranteeDate>?) ";
-				sql += "ORDER BY l.PriorityNo DESC, " +
-					   "asi.GuaranteeDate, M_AttributeSetInstance_ID";
-				if (!FiFo)
-					sql += " DESC";
-				sql += ", s.QtyOnHand DESC";
-			}
-			else
-			{
-				sql += "ORDER BY l.PriorityNo DESC, l.M_Locator_ID, s.M_AttributeSetInstance_ID";
-				if (!FiFo)
-					sql += " DESC";
-				sql += ", s.QtyOnHand DESC";
-			}
-		} 
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement(sql, trxName);
-			pstmt.setInt(1, M_Locator_ID > 0 ? M_Locator_ID : M_Warehouse_ID);
-			pstmt.setInt(2, M_Product_ID);
-			if (!allAttributeInstances)
-			{
-				pstmt.setInt(3, M_AttributeSetInstance_ID);
-			}
-			else if (minGuaranteeDate != null)
-			{
-				pstmt.setTimestamp(3, minGuaranteeDate);
-			}
-			rs = pstmt.executeQuery();
-			while (rs.next())
-			{	
-				if(rs.getBigDecimal(11).signum() != 0)
-				list.add (new MStorage (ctx, rs, trxName));
-			}	
-		}
-		catch (Exception e)
-		{
-			s_log.log(Level.SEVERE, sql, e);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		MStorage[] retValue = new MStorage[list.size()];
-		list.toArray(retValue);
-		return retValue;
-	}	//	getWarehouse
-
-	
-	/**
-	 * 	Create or Get Storage Info
-	 *	@param ctx context
-	 *	@param M_Locator_ID locator
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID instance
-	 *	@param trxName transaction
-	 *	@return existing/new or null
-	 */
-	public static MStorage getCreate (Properties ctx, int M_Locator_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
-	{
-		if (M_Locator_ID == 0)
-			throw new IllegalArgumentException("M_Locator_ID=0");
-		if (M_Product_ID == 0)
-			throw new IllegalArgumentException("M_Product_ID=0");
-		MStorage retValue = get(ctx, M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID, trxName);
-		if (retValue != null)
-			return retValue;
-		
-		//	Insert row based on locator
-		MLocator locator = new MLocator (ctx, M_Locator_ID, trxName);
-		if (locator.get_ID() != M_Locator_ID)
-			throw new IllegalArgumentException("Not found M_Locator_ID=" + M_Locator_ID);
-		//
-		retValue = new MStorage (locator, M_Product_ID, M_AttributeSetInstance_ID);
-		retValue.save(trxName);
-		s_log.fine("New " + retValue);
-		return retValue;
-	}	//	getCreate
-
-	
-	/**
-	 * 	Update Storage Info add.
-	 * 	Called from MProjectIssue
-	 *	@param ctx context
-	 *	@param M_Warehouse_ID warehouse
-	 *	@param M_Locator_ID locator
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID AS Instance
-	 *	@param reservationAttributeSetInstance_ID reservation AS Instance
-	 *	@param diffQtyOnHand add on hand
-	 *	@param diffQtyReserved add reserved
-	 *	@param diffQtyOrdered add order
-	 *	@param trxName transaction
-	 *	@return true if updated
-	 */
-	public static boolean add (Properties ctx, int M_Warehouse_ID, int M_Locator_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, int reservationAttributeSetInstance_ID,
-		BigDecimal diffQtyOnHand, 
-		BigDecimal diffQtyReserved, BigDecimal diffQtyOrdered, String trxName)
-	{
-		MStorage storage = null;
-		StringBuffer diffText = new StringBuffer("(");
-
-		//	Get Storage
-		if (storage == null)
-			storage = getCreate (ctx, M_Locator_ID, 
-				M_Product_ID, M_AttributeSetInstance_ID, trxName);
-		//	Verify
-		if (storage.getM_Locator_ID() != M_Locator_ID 
-			&& storage.getM_Product_ID() != M_Product_ID
-			&& storage.getM_AttributeSetInstance_ID() != M_AttributeSetInstance_ID)
-		{
-			s_log.severe ("No Storage found - M_Locator_ID=" + M_Locator_ID 
-				+ ",M_Product_ID=" + M_Product_ID + ",ASI=" + M_AttributeSetInstance_ID);
-			return false;
-		}
-		
-		// CarlosRuiz - globalqss - Fix [ 1725383 ] QtyOrdered wrongly updated
-		MProduct prd = new MProduct(ctx, M_Product_ID, trxName);
-		if (prd.getM_AttributeSet_ID() == 0) {
-			// Product doesn't manage attribute set, always reserved with 0
-			reservationAttributeSetInstance_ID = 0;
-		}
-		//		
-		
-		MStorage storage0 = null;
-		if (M_AttributeSetInstance_ID != reservationAttributeSetInstance_ID)
-		{
-			storage0 = get(ctx, M_Locator_ID, 
-				M_Product_ID, reservationAttributeSetInstance_ID, trxName);
-			if (storage0 == null)	//	create if not existing - should not happen
-			{
-				MWarehouse wh = MWarehouse.get(ctx, M_Warehouse_ID);
-				int xM_Locator_ID = wh.getDefaultLocator().getM_Locator_ID();
-				storage0 = getCreate (ctx, xM_Locator_ID, 
-					M_Product_ID, reservationAttributeSetInstance_ID, trxName);
-			}
-		}		
-		boolean changed = false;
-		if (diffQtyOnHand != null && diffQtyOnHand.signum() != 0)
-		{
-			storage.setQtyOnHand (storage.getQtyOnHand().add (diffQtyOnHand));
-			diffText.append("OnHand=").append(diffQtyOnHand);
-			changed = true;
-		}
-		if (diffQtyReserved != null && diffQtyReserved.signum() != 0)
-		{
-			if (storage0 == null)
-				storage.setQtyReserved (storage.getQtyReserved().add (diffQtyReserved));
-			else
-				storage0.setQtyReserved (storage0.getQtyReserved().add (diffQtyReserved));
-			diffText.append(" Reserved=").append(diffQtyReserved);
-			changed = true;
-		}
-		if (diffQtyOrdered != null && diffQtyOrdered.signum() != 0)
-		{
-			if (storage0 == null)
-				storage.setQtyOrdered (storage.getQtyOrdered().add (diffQtyOrdered));
-			else
-				storage0.setQtyOrdered (storage0.getQtyOrdered().add (diffQtyOrdered));
-			diffText.append(" Ordered=").append(diffQtyOrdered);
-			changed = true;
-		}
-		if (changed)
-		{
-			diffText.append(") -> ").append(storage.toString());
-			s_log.fine(diffText.toString());
-			if (storage0 != null)
-				storage0.save(trxName);		//	No AttributeSetInstance (reserved/ordered)
-			return storage.save (trxName);
-		}
-		
-		return true;
-	}	//	add
-
-	
-	/**************************************************************************
-	 * 	Get Location with highest Locator Priority and a sufficient OnHand Qty
-	 * 	@param M_Warehouse_ID warehouse
-	 * 	@param M_Product_ID product
-	 * 	@param M_AttributeSetInstance_ID asi
-	 * 	@param Qty qty
-	 *	@param trxName transaction
-	 * 	@return id
-	 */
-	public static int getM_Locator_ID (int M_Warehouse_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, BigDecimal Qty,
-		String trxName)
-	{
-		int M_Locator_ID = 0;
-		int firstM_Locator_ID = 0;
-		String sql = "SELECT s.M_Locator_ID, s.QtyOnHand "
-			+ "FROM M_Storage s"
-			+ " INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)"
-			+ " INNER JOIN M_Product p ON (s.M_Product_ID=p.M_Product_ID)"
-			+ " LEFT OUTER JOIN M_AttributeSet mas ON (p.M_AttributeSet_ID=mas.M_AttributeSet_ID) "
-			+ "WHERE l.M_Warehouse_ID=?"
-			+ " AND s.M_Product_ID=?"
-			+ " AND (mas.IsInstanceAttribute IS NULL OR mas.IsInstanceAttribute='N' OR s.M_AttributeSetInstance_ID=?)"
-			+ " AND l.IsActive='Y' "
-			+ "ORDER BY l.PriorityNo DESC, s.QtyOnHand DESC";
-		
-		PreparedStatement pstmt = null;
-		ResultSet rs = null;
-		try
-		{
-			pstmt = DB.prepareStatement(sql, trxName);
-			pstmt.setInt(1, M_Warehouse_ID);
-			pstmt.setInt(2, M_Product_ID);
-			pstmt.setInt(3, M_AttributeSetInstance_ID);
-			rs = pstmt.executeQuery();
-			while (rs.next())
-			{
-				BigDecimal QtyOnHand = rs.getBigDecimal(2);
-				if (QtyOnHand != null && Qty.compareTo(QtyOnHand) <= 0)
-				{
-					M_Locator_ID = rs.getInt(1);
-					break;
-				}
-				if (firstM_Locator_ID == 0)
-					firstM_Locator_ID = rs.getInt(1);
-			}
-		}
-		catch (SQLException ex)
-		{
-			s_log.log(Level.SEVERE, sql, ex);
-		}
-		finally
-		{
-			DB.close(rs, pstmt);
-			rs = null; pstmt = null;
-		}
-		if (M_Locator_ID != 0)
-			return M_Locator_ID;
-		return firstM_Locator_ID;
-	}	//	getM_Locator_ID
-
-	/**
-	 * 	Get Available Qty.
-	 * 	The call is accurate only if there is a storage record 
-	 * 	and assumes that the product is stocked 
-	 *	@param M_Warehouse_ID wh
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID masi
-	 *	@param trxName transaction
-	 *	@return qty available (QtyOnHand-QtyReserved) or null
-	 * @deprecated Since 331b. Please use {@link #getQtyAvailable(int, int, int, int, String)}.
-	 */
-	public static BigDecimal getQtyAvailable (int M_Warehouse_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
-	{
-		return getQtyAvailable(M_Warehouse_ID, 0, M_Product_ID, M_AttributeSetInstance_ID, trxName);
-	}
-	
-	/**
-	 * Get Warehouse/Locator Available Qty.
-	 * The call is accurate only if there is a storage record 
-	 * and assumes that the product is stocked 
-	 * @param M_Warehouse_ID wh (if the M_Locator_ID!=0 then M_Warehouse_ID is ignored)
-	 * @param M_Locator_ID locator (if 0, the whole warehouse will be evaluated)
-	 * @param M_Product_ID product
-	 * @param M_AttributeSetInstance_ID masi
-	 * @param trxName transaction
-	 * @return qty available (QtyOnHand-QtyReserved) or null if error
-	 */
-	public static BigDecimal getQtyAvailable (int M_Warehouse_ID, int M_Locator_ID, 
-		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
-	{
-		ArrayList<Object> params = new ArrayList<Object>();
-		StringBuffer sql = new StringBuffer("SELECT COALESCE(SUM(s.QtyOnHand-s.QtyReserved),0)")
-								.append(" FROM M_Storage s")
-								.append(" WHERE s.M_Product_ID=?");
-		params.add(M_Product_ID);
-		// Warehouse level
-		if (M_Locator_ID == 0) {
-			sql.append(" AND EXISTS (SELECT 1 FROM M_Locator l WHERE s.M_Locator_ID=l.M_Locator_ID AND l.M_Warehouse_ID=?)");
-			params.add(M_Warehouse_ID);
-		}
-		// Locator level
-		else {
-			sql.append(" AND s.M_Locator_ID=?");
-			params.add(M_Locator_ID);
-		}
-		// With ASI
-		if (M_AttributeSetInstance_ID != 0) {
-			sql.append(" AND s.M_AttributeSetInstance_ID=?");
-			params.add(M_AttributeSetInstance_ID);
-		}
-		//
-		BigDecimal retValue = DB.getSQLValueBD(trxName, sql.toString(), params);
-		if (CLogMgt.isLevelFine())
-			s_log.fine("M_Warehouse_ID=" + M_Warehouse_ID + ", M_Locator_ID=" + M_Locator_ID 
-				+ ",M_Product_ID=" + M_Product_ID + " = " + retValue);
-		return retValue;
-	}	//	getQtyAvailable
-	
-	/**************************************************************************
-	 * 	Persistency Constructor
-	 *	@param ctx context
-	 *	@param ignored ignored
-	 *	@param trxName transaction
-	 */
-	public MStorage (Properties ctx, int ignored, String trxName)
-	{
-		super(ctx, 0, trxName);
-		if (ignored != 0)
-			throw new IllegalArgumentException("Multi-Key");
-		//
-		setQtyOnHand (Env.ZERO);
-		setQtyOrdered (Env.ZERO);
-		setQtyReserved (Env.ZERO);
-	}	//	MStorage
-
-	/**
-	 * 	Load Constructor
-	 *	@param ctx context
-	 *	@param rs result set
-	 *	@param trxName transaction
-	 */
-	public MStorage (Properties ctx, ResultSet rs, String trxName)
-	{
-		super(ctx, rs, trxName);
-	}	//	MStorage
-
-	/**
-	 * 	Full NEW Constructor
-	 *	@param locator (parent) locator
-	 *	@param M_Product_ID product
-	 *	@param M_AttributeSetInstance_ID attribute
-	 */
-	private MStorage (MLocator locator, int M_Product_ID, int M_AttributeSetInstance_ID)
-	{
-		this (locator.getCtx(), 0, locator.get_TrxName());
-		setClientOrg(locator);
-		setM_Locator_ID (locator.getM_Locator_ID());
-		setM_Product_ID (M_Product_ID);
-		setM_AttributeSetInstance_ID (M_AttributeSetInstance_ID);
-	}	//	MStorage
-
-	/** Log								*/
-	private static CLogger		s_log = CLogger.getCLogger (MStorage.class);
-	/** Warehouse						*/
-	private int		m_M_Warehouse_ID = 0;
-	
-	/**
-	 * 	Change Qty OnHand
-	 *	@param qty quantity
-	 *	@param add add if true 
-	 */
-	public void changeQtyOnHand (BigDecimal qty, boolean add)
-	{
-		if (qty == null || qty.signum() == 0)
-			return;
-		if (add)
-			setQtyOnHand(getQtyOnHand().add(qty));
-		else
-			setQtyOnHand(getQtyOnHand().subtract(qty));
-	}	//	changeQtyOnHand
-
-	/**
-	 * 	Get M_Warehouse_ID of Locator
-	 *	@return warehouse
-	 */
-	public int getM_Warehouse_ID()
-	{
-		if (m_M_Warehouse_ID == 0)
-		{
-			MLocator loc = MLocator.get(getCtx(), getM_Locator_ID());
-			m_M_Warehouse_ID = loc.getM_Warehouse_ID();
-		}
-		return m_M_Warehouse_ID;
-	}	//	getM_Warehouse_ID
-	
-	/**
-	 * Before Save
-	 * @param newRecord new
-	 * @param success success
-	 * @return success
-	 */
-	@Override
-	protected boolean beforeSave(boolean newRecord) 
-	{
-		//	Negative Inventory check
-		if (newRecord || is_ValueChanged("QtyOnHand"))
-		{
-			MWarehouse wh = new MWarehouse(getCtx(), getM_Warehouse_ID(), get_TrxName());
-			if (wh.isDisallowNegativeInv())
-			{
-				String sql = "SELECT SUM(QtyOnHand) "
-					+ "FROM M_Storage s"
-					+ " INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID) "
-					+ "WHERE s.M_Product_ID=?"		//	#1
-					+ " AND l.M_Warehouse_ID=?"
-					+ " AND l.M_Locator_ID=?"
-					+ " AND s.M_AttributeSetInstance_ID<>?";
-				BigDecimal QtyOnHand = DB.getSQLValueBDEx(get_TrxName(), sql, new Object[] {getM_Product_ID(), getM_Warehouse_ID(), getM_Locator_ID(), getM_AttributeSetInstance_ID()});
-				if (QtyOnHand == null)
-					QtyOnHand = Env.ZERO;
-				
-				// Add qty onhand for current record
-				QtyOnHand = QtyOnHand.add(getQtyOnHand());
-				
-				if (getQtyOnHand().compareTo(BigDecimal.ZERO) < 0 ||
-						QtyOnHand.compareTo(Env.ZERO) < 0)
-				{
-					log.saveError("Error", Msg.getMsg(getCtx(), "NegativeInventoryDisallowed"));
-					return false;
-				}
-			}
-		}
-
-		return true;
-	}
-
-	/**
-	 *	String Representation
-	 * 	@return info
-	 */
-	public String toString()
-	{
-		StringBuffer sb = new StringBuffer("MStorage[")
-			.append("M_Locator_ID=").append(getM_Locator_ID())
-				.append(",M_Product_ID=").append(getM_Product_ID())
-				.append(",M_AttributeSetInstance_ID=").append(getM_AttributeSetInstance_ID())
-			.append(": OnHand=").append(getQtyOnHand())
-			.append(",Reserved=").append(getQtyReserved())
-			.append(",Ordered=").append(getQtyOrdered())
-			.append("]");
-		return sb.toString();
-	}	//	toString
-
-}	//	MStorage
+/******************************************************************************
+ * Product: Adempiere ERP & CRM Smart Business Solution                       *
+ * Copyright (C) 1999-2006 ComPiere, Inc. All Rights Reserved.                *
+ * This program is free software; you can redistribute it and/or modify it    *
+ * under the terms version 2 of the GNU General Public License as published   *
+ * by the Free Software Foundation. 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.,    *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
+ * For the text or an alternative of this public license, you may reach us    *
+ * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA        *
+ * or via info@compiere.org or http://www.compiere.org/license.html           *
+ *****************************************************************************/
+package org.compiere.model;
+
+import java.math.BigDecimal;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import org.compiere.util.CLogger;
+import org.compiere.util.DB;
+import org.compiere.util.Env;
+import org.compiere.util.Msg;
+
+/**
+ * 	Inventory Storage Model
+ *
+ *	@author Jorg Janke
+ *	@version $Id: MStorageOnHand.java,v 1.3 2006/07/30 00:51:05 jjanke Exp $
+ */
+public class MStorageOnHand extends X_M_StorageOnHand
+{
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 3649163126231150631L;
+
+	/**
+	 * 	Get Storage Info
+	 *	@param ctx context
+	 *	@param M_Locator_ID locator
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageOnHand get (Properties ctx, int M_Locator_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
+	{
+		String sqlWhere = "M_Locator_ID=? AND M_Product_ID=? AND ";
+			if (M_AttributeSetInstance_ID == 0)
+				sqlWhere += "(M_AttributeSetInstance_ID=? OR M_AttributeSetInstance_ID IS NULL)";
+			else
+				sqlWhere += "M_AttributeSetInstance_ID=?";
+		
+		MStorageOnHand retValue = new Query(ctx, MStorageOnHand.Table_Name, sqlWhere, trxName)
+									.setParameters(M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID)
+									.first(); 
+		
+		if (retValue == null)
+			s_log.fine("Not Found - M_Locator_ID=" + M_Locator_ID 
+				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID);
+		else
+			s_log.fine("M_Locator_ID=" + M_Locator_ID 
+				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID);
+		return retValue;
+	}	//	get
+
+	/**
+	 * 	Get all Storages for Product with ASI and QtyOnHand <> 0
+	 *	@param ctx context
+	 *	@param M_Product_ID product
+	 *	@param M_Locator_ID locator
+	 *	@param FiFo first in-first-out
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageOnHand[] getAllWithASI (Properties ctx, int M_Product_ID, int M_Locator_ID, 
+		boolean FiFo, String trxName)
+	{
+		ArrayList<MStorageOnHand> list = new ArrayList<MStorageOnHand>();
+		String sql = "SELECT * FROM M_StorageOnHand "
+			+ "WHERE M_Product_ID=? AND M_Locator_ID=?"
+			+ " AND M_AttributeSetInstance_ID > 0 "
+			+ " AND QtyOnHand <> 0 "			
+			+ "ORDER BY M_AttributeSetInstance_ID";
+		if (!FiFo)
+			sql += " DESC";
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+		try
+		{
+			pstmt = DB.prepareStatement (sql, trxName);
+			pstmt.setInt (1, M_Product_ID);
+			pstmt.setInt (2, M_Locator_ID);
+			rs = pstmt.executeQuery ();
+			while (rs.next ())
+				list.add(new MStorageOnHand (ctx, rs, trxName));
+		}
+		catch (SQLException ex)
+		{
+			s_log.log(Level.SEVERE, sql, ex);
+		}
+		finally
+		{
+			DB.close(rs, pstmt);
+			rs = null; pstmt = null;
+		}
+		MStorageOnHand[] retValue = new MStorageOnHand[list.size()];
+		list.toArray(retValue);
+		return retValue;
+	}	//	getAllWithASI
+
+	/**
+	 * 	Get all Storages for Product where QtyOnHand <> 0
+	 *	@param ctx context
+	 *	@param M_Product_ID product
+	 *	@param M_Locator_ID locator
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageOnHand[] getAll (Properties ctx, 
+		int M_Product_ID, int M_Locator_ID, String trxName)
+	{
+		String sqlWhere = "M_Product_ID=? AND M_Locator_ID=? AND QtyOnHand <> 0";
+		List<MStorageOnHand> list = new Query(ctx, MStorageOnHand.Table_Name, sqlWhere, trxName)
+								.setParameters(M_Product_ID, M_Locator_ID)
+								.setOrderBy(MStorageOnHand.COLUMNNAME_M_AttributeSetInstance_ID)
+								.list(); 
+		
+		MStorageOnHand[] retValue = new MStorageOnHand[list.size()];
+		list.toArray(retValue);
+		return retValue;
+	}	//	getAll
+
+	
+	/**
+	 * 	Get Storage Info for Product across warehouses
+	 *	@param ctx context
+	 *	@param M_Product_ID product
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageOnHand[] getOfProduct (Properties ctx, int M_Product_ID, String trxName)
+	{
+		String sqlWhere = "M_Product_ID=?";
+		
+		List<MStorageOnHand> list = new Query(ctx, MStorageOnHand.Table_Name, sqlWhere, trxName)
+								.setParameters(M_Product_ID)
+								.list(); 
+		
+		MStorageOnHand[] retValue = new MStorageOnHand[list.size()];
+		list.toArray(retValue);
+		return retValue;
+		
+	}	//	getOfProduct
+	
+	/**
+	 * 	Get Storage Info for Warehouse
+	 *	@param ctx context
+	 *	@param M_Warehouse_ID 
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance
+	 *	@param M_AttributeSet_ID attribute set (NOT USED)
+	 *	@param allAttributeInstances if true, all attribute set instances (NOT USED)
+	 *	@param minGuaranteeDate optional minimum guarantee date if all attribute instances
+	 *	@param FiFo first in-first-out
+	 *	@param trxName transaction
+	 *	@return existing - ordered by location priority (desc) and/or guarantee date
+	 *
+	 *  @deprecated
+	 */
+	public static MStorageOnHand[] getWarehouse (Properties ctx, int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, int M_AttributeSet_ID,
+		boolean allAttributeInstances, Timestamp minGuaranteeDate,
+		boolean FiFo, String trxName)
+	{
+		return getWarehouse(ctx, M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID, 
+				minGuaranteeDate, FiFo, false, 0, trxName);
+	}
+	
+	/**
+	 * 	Get Storage Info for Warehouse or locator
+	 *	@param ctx context
+	 *	@param M_Warehouse_ID ignore if M_Locator_ID > 0
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance id, 0 to retrieve all instance
+	 *	@param minGuaranteeDate optional minimum guarantee date if all attribute instances
+	 *	@param FiFo first in-first-out
+	 *  @param positiveOnly if true, only return storage records with qtyOnHand > 0
+	 *  @param M_Locator_ID optional locator id
+	 *	@param trxName transaction
+	 *	@return existing - ordered by location priority (desc) and/or guarantee date
+	 */
+	public static MStorageOnHand[] getWarehouse (Properties ctx, int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, Timestamp minGuaranteeDate,
+		boolean FiFo, boolean positiveOnly, int M_Locator_ID, String trxName)
+	{
+		if ((M_Warehouse_ID == 0 && M_Locator_ID == 0) || M_Product_ID == 0)
+			return new MStorageOnHand[0];
+		
+		boolean allAttributeInstances = false;
+		if (M_AttributeSetInstance_ID == 0)
+			allAttributeInstances = true;		
+		
+		ArrayList<MStorageOnHand> list = new ArrayList<MStorageOnHand>();
+		//	Specific Attribute Set Instance
+		String sql = "SELECT s.M_Product_ID,s.M_Locator_ID,s.M_AttributeSetInstance_ID,"
+			+ "s.AD_Client_ID,s.AD_Org_ID,s.IsActive,s.Created,s.CreatedBy,s.Updated,s.UpdatedBy,"
+			+ "s.QtyOnHand,s.DateLastInventory "
+			+ "FROM M_StorageOnHand s"
+			+ " INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID) ";
+		if (M_Locator_ID > 0)
+			sql += "WHERE l.M_Locator_ID = ?";
+		else
+			sql += "WHERE l.M_Warehouse_ID=?";
+		sql += " AND s.M_Product_ID=?"
+			 + " AND COALESCE(s.M_AttributeSetInstance_ID,0)=? ";
+		if (positiveOnly)
+		{
+			sql += " AND s.QtyOnHand > 0 ";
+		}
+		else
+		{
+			sql += " AND s.QtyOnHand <> 0 ";
+		}
+		sql += "ORDER BY l.PriorityNo DESC, M_AttributeSetInstance_ID";
+		if (!FiFo)
+			sql += " DESC";
+		//	All Attribute Set Instances
+		if (allAttributeInstances)
+		{
+			sql = "SELECT s.M_Product_ID,s.M_Locator_ID,s.M_AttributeSetInstance_ID,"
+				+ "s.AD_Client_ID,s.AD_Org_ID,s.IsActive,s.Created,s.CreatedBy,s.Updated,s.UpdatedBy,"
+				+ "s.QtyOnHand,s.DateLastInventory,s.M_StorageOnHand_UU "
+				+ "FROM M_StorageOnHand s"
+				+ " INNER JOIN M_Locator l ON (l.M_Locator_ID=s.M_Locator_ID)"
+				+ " LEFT OUTER JOIN M_AttributeSetInstance asi ON (s.M_AttributeSetInstance_ID=asi.M_AttributeSetInstance_ID) ";
+			if (M_Locator_ID > 0)
+				sql += "WHERE l.M_Locator_ID = ?";
+			else
+				sql += "WHERE l.M_Warehouse_ID=?";
+			sql += " AND s.M_Product_ID=? ";
+			if (positiveOnly)
+			{
+				sql += " AND s.QtyOnHand > 0 ";
+			}
+			else
+			{
+				sql += " AND s.QtyOnHand <> 0 ";
+			}
+			if (minGuaranteeDate != null)
+			{
+				sql += "AND (asi.GuaranteeDate IS NULL OR asi.GuaranteeDate>?) ";
+				sql += "ORDER BY l.PriorityNo DESC, " +
+					   "asi.GuaranteeDate, M_AttributeSetInstance_ID";
+				if (!FiFo)
+					sql += " DESC";
+				sql += ", s.QtyOnHand DESC";
+			}
+			else
+			{
+				sql += "ORDER BY l.PriorityNo DESC, l.M_Locator_ID, s.M_AttributeSetInstance_ID";
+				if (!FiFo)
+					sql += " DESC";
+				sql += ", s.QtyOnHand DESC";
+			}
+		} 
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+		try
+		{
+			pstmt = DB.prepareStatement(sql, trxName);
+			pstmt.setInt(1, M_Locator_ID > 0 ? M_Locator_ID : M_Warehouse_ID);
+			pstmt.setInt(2, M_Product_ID);
+			if (!allAttributeInstances)
+			{
+				pstmt.setInt(3, M_AttributeSetInstance_ID);
+			}
+			else if (minGuaranteeDate != null)
+			{
+				pstmt.setTimestamp(3, minGuaranteeDate);
+			}
+			rs = pstmt.executeQuery();
+			while (rs.next())
+			{	
+				if(rs.getBigDecimal(11).signum() != 0)
+				list.add (new MStorageOnHand (ctx, rs, trxName));
+			}	
+		}
+		catch (Exception e)
+		{
+			s_log.log(Level.SEVERE, sql, e);
+		}
+		finally
+		{
+			DB.close(rs, pstmt);
+			rs = null; pstmt = null;
+		}
+		MStorageOnHand[] retValue = new MStorageOnHand[list.size()];
+		list.toArray(retValue);
+		return retValue;
+	}	//	getWarehouse
+
+	
+	/**
+	 * 	Create or Get Storage Info
+	 *	@param ctx context
+	 *	@param M_Locator_ID locator
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance
+	 *	@param trxName transaction
+	 *	@return existing/new or null
+	 */
+	public static MStorageOnHand getCreate (Properties ctx, int M_Locator_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
+	{
+		if (M_Locator_ID == 0)
+			throw new IllegalArgumentException("M_Locator_ID=0");
+		if (M_Product_ID == 0)
+			throw new IllegalArgumentException("M_Product_ID=0");
+		MStorageOnHand retValue = get(ctx, M_Locator_ID, M_Product_ID, M_AttributeSetInstance_ID, trxName);
+		if (retValue != null)
+			return retValue;
+		
+		//	Insert row based on locator
+		MLocator locator = new MLocator (ctx, M_Locator_ID, trxName);
+		if (locator.get_ID() != M_Locator_ID)
+			throw new IllegalArgumentException("Not found M_Locator_ID=" + M_Locator_ID);
+		//
+		retValue = new MStorageOnHand (locator, M_Product_ID, M_AttributeSetInstance_ID);
+		retValue.saveEx(trxName);
+		s_log.fine("New " + retValue);
+		return retValue;
+	}	//	getCreate
+
+	
+	/**
+	 * 	Update Storage Info add.
+	 * 	Called from MProjectIssue
+	 *	@param ctx context
+	 *	@param M_Warehouse_ID warehouse
+	 *	@param M_Locator_ID locator
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID AS Instance
+	 *	@param reservationAttributeSetInstance_ID reservation AS Instance
+	 *	@param diffQtyOnHand add on hand
+	 *	@param trxName transaction
+	 *	@return true if updated
+	 */
+	public static boolean add (Properties ctx, int M_Warehouse_ID, int M_Locator_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, int reservationAttributeSetInstance_ID,
+		BigDecimal diffQtyOnHand, String trxName)
+	{
+		MStorageOnHand storage = null;
+		StringBuffer diffText = new StringBuffer("(");
+
+		//	Get Storage
+		if (storage == null)
+			storage = getCreate (ctx, M_Locator_ID, 
+				M_Product_ID, M_AttributeSetInstance_ID, trxName);
+		//	Verify
+		if (storage.getM_Locator_ID() != M_Locator_ID 
+			&& storage.getM_Product_ID() != M_Product_ID
+			&& storage.getM_AttributeSetInstance_ID() != M_AttributeSetInstance_ID)
+		{
+			s_log.severe ("No Storage found - M_Locator_ID=" + M_Locator_ID 
+				+ ",M_Product_ID=" + M_Product_ID + ",ASI=" + M_AttributeSetInstance_ID);
+			return false;
+		}
+		
+		// CarlosRuiz - globalqss - Fix [ 1725383 ] QtyOrdered wrongly updated
+		MProduct prd = new MProduct(ctx, M_Product_ID, trxName);
+		if (prd.getM_AttributeSet_ID() == 0) {
+			// Product doesn't manage attribute set, always reserved with 0
+			reservationAttributeSetInstance_ID = 0;
+		}
+		//		
+		
+		MStorageOnHand storage0 = null;
+		if (M_AttributeSetInstance_ID != reservationAttributeSetInstance_ID)
+		{
+			storage0 = get(ctx, M_Locator_ID, 
+				M_Product_ID, reservationAttributeSetInstance_ID, trxName);
+			if (storage0 == null)	//	create if not existing - should not happen
+			{
+				MWarehouse wh = MWarehouse.get(ctx, M_Warehouse_ID);
+				int xM_Locator_ID = wh.getDefaultLocator().getM_Locator_ID();
+				storage0 = getCreate (ctx, xM_Locator_ID, 
+					M_Product_ID, reservationAttributeSetInstance_ID, trxName);
+			}
+		}		
+		boolean changed = false;
+		if (diffQtyOnHand != null && diffQtyOnHand.signum() != 0)
+		{
+			storage.setQtyOnHand (storage.getQtyOnHand().add (diffQtyOnHand));
+			diffText.append("OnHand=").append(diffQtyOnHand);
+			changed = true;
+		}
+		/*//@win commented out
+		if (diffQtyReserved != null && diffQtyReserved.signum() != 0)
+		{
+			if (storage0 == null)
+				storage.setQtyReserved (storage.getQtyReserved().add (diffQtyReserved));
+			else
+				storage0.setQtyReserved (storage0.getQtyReserved().add (diffQtyReserved));
+			diffText.append(" Reserved=").append(diffQtyReserved);
+			changed = true;
+		}
+		if (diffQtyOrdered != null && diffQtyOrdered.signum() != 0)
+		{
+			if (storage0 == null)
+				storage.setQtyOrdered (storage.getQtyOrdered().add (diffQtyOrdered));
+			else
+				storage0.setQtyOrdered (storage0.getQtyOrdered().add (diffQtyOrdered));
+			diffText.append(" Ordered=").append(diffQtyOrdered);
+			changed = true;
+		}
+		*/
+		if (changed)
+		{
+			diffText.append(") -> ").append(storage.toString());
+			s_log.fine(diffText.toString());
+			if (storage0 != null)
+				storage0.saveEx(trxName);		//	No AttributeSetInstance (reserved/ordered)
+			return storage.save (trxName);
+		}
+		
+		return true;
+	}	//	add
+
+	
+	/**************************************************************************
+	 * 	Get Location with highest Locator Priority and a sufficient OnHand Qty
+	 * 	@param M_Warehouse_ID warehouse
+	 * 	@param M_Product_ID product
+	 * 	@param M_AttributeSetInstance_ID asi
+	 * 	@param Qty qty
+	 *	@param trxName transaction
+	 * 	@return id
+	 */
+	public static int getM_Locator_ID (int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, BigDecimal Qty,
+		String trxName)
+	{
+		int M_Locator_ID = 0;
+		int firstM_Locator_ID = 0;
+		String sql = "SELECT s.M_Locator_ID, s.QtyOnHand "
+			+ "FROM M_StorageOnHand s"
+			+ " INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID)"
+			+ " INNER JOIN M_Product p ON (s.M_Product_ID=p.M_Product_ID)"
+			+ " LEFT OUTER JOIN M_AttributeSet mas ON (p.M_AttributeSet_ID=mas.M_AttributeSet_ID) "
+			+ "WHERE l.M_Warehouse_ID=?"
+			+ " AND s.M_Product_ID=?"
+			+ " AND (mas.IsInstanceAttribute IS NULL OR mas.IsInstanceAttribute='N' OR s.M_AttributeSetInstance_ID=?)"
+			+ " AND l.IsActive='Y' "
+			+ "ORDER BY l.PriorityNo DESC, s.QtyOnHand DESC";
+		
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+		try
+		{
+			pstmt = DB.prepareStatement(sql, trxName);
+			pstmt.setInt(1, M_Warehouse_ID);
+			pstmt.setInt(2, M_Product_ID);
+			pstmt.setInt(3, M_AttributeSetInstance_ID);
+			rs = pstmt.executeQuery();
+			while (rs.next())
+			{
+				BigDecimal QtyOnHand = rs.getBigDecimal(2);
+				if (QtyOnHand != null && Qty.compareTo(QtyOnHand) <= 0)
+				{
+					M_Locator_ID = rs.getInt(1);
+					break;
+				}
+				if (firstM_Locator_ID == 0)
+					firstM_Locator_ID = rs.getInt(1);
+			}
+		}
+		catch (SQLException ex)
+		{
+			s_log.log(Level.SEVERE, sql, ex);
+		}
+		finally
+		{
+			DB.close(rs, pstmt);
+			rs = null; pstmt = null;
+		}
+		if (M_Locator_ID != 0)
+			return M_Locator_ID;
+		return firstM_Locator_ID;
+	}	//	getM_Locator_ID
+	
+	/**************************************************************************
+	 * 	Persistency Constructor
+	 *	@param ctx context
+	 *	@param ignored ignored
+	 *	@param trxName transaction
+	 */
+	public MStorageOnHand (Properties ctx, int ignored, String trxName)
+	{
+		super(ctx, 0, trxName);
+		if (ignored != 0)
+			throw new IllegalArgumentException("Multi-Key");
+		//
+		setQtyOnHand (Env.ZERO);
+		
+	}	//	MStorageOnHand
+
+	/**
+	 * 	Load Constructor
+	 *	@param ctx context
+	 *	@param rs result set
+	 *	@param trxName transaction
+	 */
+	public MStorageOnHand (Properties ctx, ResultSet rs, String trxName)
+	{
+		super(ctx, rs, trxName);
+	}	//	MStorageOnHand
+
+	/**
+	 * 	Full NEW Constructor
+	 *	@param locator (parent) locator
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID attribute
+	 */
+	private MStorageOnHand (MLocator locator, int M_Product_ID, int M_AttributeSetInstance_ID)
+	{
+		this (locator.getCtx(), 0, locator.get_TrxName());
+		setClientOrg(locator);
+		setM_Locator_ID (locator.getM_Locator_ID());
+		setM_Product_ID (M_Product_ID);
+		setM_AttributeSetInstance_ID (M_AttributeSetInstance_ID);
+	}	//	MStorageOnHand
+
+	/** Log								*/
+	private static CLogger		s_log = CLogger.getCLogger (MStorageOnHand.class);
+	/** Warehouse						*/
+	private int		m_M_Warehouse_ID = 0;
+	
+	/**
+	 * 	Change Qty OnHand
+	 *	@param qty quantity
+	 *	@param add add if true 
+	 */
+	public void changeQtyOnHand (BigDecimal qty, boolean add)
+	{
+		if (qty == null || qty.signum() == 0)
+			return;
+		if (add)
+			setQtyOnHand(getQtyOnHand().add(qty));
+		else
+			setQtyOnHand(getQtyOnHand().subtract(qty));
+	}	//	changeQtyOnHand
+
+	/**
+	 * 	Get M_Warehouse_ID of Locator
+	 *	@return warehouse
+	 */
+	public int getM_Warehouse_ID()
+	{
+		if (m_M_Warehouse_ID == 0)
+		{
+			MLocator loc = MLocator.get(getCtx(), getM_Locator_ID());
+			m_M_Warehouse_ID = loc.getM_Warehouse_ID();
+		}
+		return m_M_Warehouse_ID;
+	}	//	getM_Warehouse_ID
+	
+
+	/**
+	 * 
+	 * 
+	 * Before Save
+	 * @param newRecord new
+	 * @param success success
+	 * @return success
+	 */
+	@Override
+	protected boolean beforeSave(boolean newRecord) 
+	{
+		//	Negative Inventory check
+		if (newRecord || is_ValueChanged("QtyOnHand"))
+		{
+			MWarehouse wh = new MWarehouse(getCtx(), getM_Warehouse_ID(), get_TrxName());
+			if (wh.isDisallowNegativeInv())
+			{
+				String sql = "SELECT SUM(QtyOnHand) "
+					+ "FROM M_StorageOnHand s"
+					+ " INNER JOIN M_Locator l ON (s.M_Locator_ID=l.M_Locator_ID) "
+					+ "WHERE s.M_Product_ID=?"		//	#1
+					+ " AND l.M_Warehouse_ID=?"
+					+ " AND l.M_Locator_ID=?"
+					+ " AND s.M_AttributeSetInstance_ID<>?";
+				BigDecimal QtyOnHand = DB.getSQLValueBDEx(get_TrxName(), sql, new Object[] {getM_Product_ID(), getM_Warehouse_ID(), getM_Locator_ID(), getM_AttributeSetInstance_ID()});
+				if (QtyOnHand == null)
+					QtyOnHand = Env.ZERO;
+				
+				// Add qty onhand for current record
+				QtyOnHand = QtyOnHand.add(getQtyOnHand());
+				
+				if (getQtyOnHand().compareTo(BigDecimal.ZERO) < 0 ||
+						QtyOnHand.compareTo(Env.ZERO) < 0)
+				{
+					log.saveError("Error", Msg.getMsg(getCtx(), "NegativeInventoryDisallowed"));
+					return false;
+				}
+			}
+		}
+
+		return true;
+	}
+	
+	/**
+	 * Get Quantity On Hand of Warehouse
+	 * @param M_Product_ID
+	 * @param M_Warehouse_ID
+	 * @param M_AttributeSetInstance_ID
+	 * @param trxName
+	 * @return
+	 */
+	public static BigDecimal getQtyOnHand(int M_Product_ID, int M_Warehouse_ID, int M_AttributeSetInstance_ID, String trxName) {
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT SUM(QtyOnHand) FROM M_StorageOnHand oh JOIN M_Locator loc ON (oh.M_Locator_ID=loc.M_Locator_ID)")
+			.append(" WHERE oh.M_Product_ID=?")
+			.append(" AND loc.M_Warehouse_ID=?");
+
+		ArrayList<Object> params = new ArrayList<Object>();
+		params.add(M_Product_ID);
+		params.add(M_Warehouse_ID);
+
+		// With ASI
+		if (M_AttributeSetInstance_ID != 0) {
+			sql.append(" AND oh.M_AttributeSetInstance_ID=?");
+			params.add(M_AttributeSetInstance_ID);
+		}
+
+		BigDecimal qty = DB.getSQLValueBD(trxName, sql.toString(), params);
+		if (qty == null)
+			qty = Env.ZERO;
+
+		return qty;
+	}
+
+	/**
+	 *	String Representation
+	 * 	@return info
+	 */
+	public String toString()
+	{
+		StringBuffer sb = new StringBuffer("MStorageOnHand[")
+			.append("M_Locator_ID=").append(getM_Locator_ID())
+				.append(",M_Product_ID=").append(getM_Product_ID())
+				.append(",M_AttributeSetInstance_ID=").append(getM_AttributeSetInstance_ID())
+			.append(": OnHand=").append(getQtyOnHand())
+			/* @win commented out
+			.append(",Reserved=").append(getQtyReserved())
+			.append(",Ordered=").append(getQtyOrdered())
+			*/
+			.append("]");
+		return sb.toString();
+	}	//	toString
+
+}	//	MStorageOnHand
diff --git a/org.adempiere.base/src/org/compiere/model/MStorageReservation.java b/org.adempiere.base/src/org/compiere/model/MStorageReservation.java
new file mode 100644
index 0000000000..ed5707dfce
--- /dev/null
+++ b/org.adempiere.base/src/org/compiere/model/MStorageReservation.java
@@ -0,0 +1,318 @@
+/******************************************************************************
+ * Product: iDempiere ERP & CRM Smart Business Solution                       *
+ * Copyright (C) 1999-2012 iDempiere All Rights Reserved.                     *
+ * This program is free software; you can redistribute it and/or modify it    *
+ * under the terms version 2 of the GNU General Public License as published   *
+ * by the Free Software Foundation. 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.,    *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
+ *****************************************************************************/
+package org.compiere.model;
+
+import java.math.BigDecimal;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.logging.Level;
+
+import org.compiere.util.CLogger;
+import org.compiere.util.DB;
+import org.compiere.util.Env;
+
+public class MStorageReservation extends X_M_StorageReservation {
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = -8646802850122507899L;
+
+	/**
+	 * 	Get Storage Info
+	 *	@param ctx context
+	 *	@param M_Warehouse_ID warehouse
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance
+	 *  @param isSOTrx
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageReservation get (Properties ctx, int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, boolean isSOTrx, String trxName)
+	{
+		MStorageReservation retValue = null;
+		String sql = "SELECT * FROM M_StorageReservation "
+			+ "WHERE M_Warehouse_ID=? AND M_Product_ID=? AND IsSOTrx=? AND ";
+		if (M_AttributeSetInstance_ID == 0)
+			sql += "(M_AttributeSetInstance_ID=? OR M_AttributeSetInstance_ID IS NULL)";
+		else
+			sql += "M_AttributeSetInstance_ID=?";
+		PreparedStatement pstmt = null;
+		ResultSet rs = null;
+		try
+		{
+			pstmt = DB.prepareStatement (sql, trxName);
+			pstmt.setInt (1, M_Warehouse_ID);
+			pstmt.setInt (2, M_Product_ID);
+			pstmt.setString (3, isSOTrx ? "Y" : "N");
+			pstmt.setInt (4, M_AttributeSetInstance_ID);
+			rs = pstmt.executeQuery ();
+			if (rs.next ())
+				retValue = new MStorageReservation (ctx, rs, trxName);
+		}
+		catch (SQLException ex)
+		{
+			s_log.log(Level.SEVERE, sql, ex);
+		}
+		finally
+		{
+			DB.close(rs, pstmt);
+			rs = null; pstmt = null;
+		}
+		if (retValue == null)
+			s_log.fine("Not Found - M_Warehouse_ID=" + M_Warehouse_ID 
+				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID + ", IsSOTrx=" + isSOTrx);
+		else
+			s_log.fine("M_Warehouse_ID=" + M_Warehouse_ID 
+				+ ", M_Product_ID=" + M_Product_ID + ", M_AttributeSetInstance_ID=" + M_AttributeSetInstance_ID + ", IsSOTrx=" + isSOTrx);
+		return retValue;
+	}	//	get
+
+	private static CLogger s_log = CLogger.getCLogger(MStorageReservation.class);
+
+	public MStorageReservation(Properties ctx, int M_StorageReservation_ID,
+			String trxName) {
+		super(ctx, M_StorageReservation_ID, trxName);
+	}
+	
+	public MStorageReservation(Properties ctx, ResultSet rs,
+			String trxName) {
+		super(ctx, rs, trxName);
+	}
+	
+	/**
+	 * 	Full NEW Constructor
+	 *	@param warehouse (parent) warehouse
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID attribute
+	 *  @param isSOTrx
+	 */
+	private MStorageReservation (MWarehouse warehouse, int M_Product_ID, int M_AttributeSetInstance_ID, boolean isSOTrx)
+	{
+		this (warehouse.getCtx(), 0, warehouse.get_TrxName());
+		setClientOrg(warehouse);
+		setM_Warehouse_ID(warehouse.getM_Warehouse_ID());
+		setM_Product_ID (M_Product_ID);
+		setM_AttributeSetInstance_ID (M_AttributeSetInstance_ID);
+		setIsSOTrx(isSOTrx);
+		setQty(Env.ZERO);
+	}	//	MStorageReservation
+
+	/**
+	 * Get Storage Info for Product on specified Warehouse
+	 * @param ctx
+	 * @param m_Warehouse_ID
+	 * @param m_Product_ID
+	 * @param i
+	 * @param get_TrxName
+	 * @return
+	 */
+	public static MStorageReservation[] get(Properties ctx, int m_Warehouse_ID,
+			int m_Product_ID, int i, String trxName) {
+		String sqlWhere = "M_Product_ID=? AND M_Warehouse_ID=?";
+		
+		List<MStorageReservation> list = new Query(ctx, MStorageReservation.Table_Name, sqlWhere, trxName)
+								.setParameters(m_Product_ID, m_Warehouse_ID)
+								.list();
+		
+		MStorageReservation[] retValue = new MStorageReservation[list.size()];
+		list.toArray(retValue);
+		return retValue;
+	}
+	
+	/**
+	 * 	Get Storage Info for Product across warehouses
+	 *	@param ctx context
+	 *	@param M_Product_ID product
+	 *	@param trxName transaction
+	 *	@return existing or null
+	 */
+	public static MStorageReservation[] getOfProduct (Properties ctx, int M_Product_ID, String trxName)
+	{
+		String sqlWhere = "M_Product_ID=?";
+		
+		List<MStorageReservation> list = new Query(ctx, MStorageReservation.Table_Name, sqlWhere, trxName)
+								.setParameters(M_Product_ID)
+								.list(); 
+		
+		MStorageReservation[] retValue = new MStorageReservation[list.size()];
+		list.toArray(retValue);
+		return retValue;
+		
+	}	//	getOfProduct
+
+	/**
+	 * Get Quantity Reserved of Warehouse
+	 * @param M_Product_ID
+	 * @param M_Warehouse_ID
+	 * @param M_AttributeSetInstance_ID
+	 * @param isSOTrx - true to get reserved, false to get ordered
+	 * @param trxName
+	 * @return
+	 */
+	private static BigDecimal getQty(int M_Product_ID, int M_Warehouse_ID, int M_AttributeSetInstance_ID, boolean isSOTrx, String trxName) {
+		ArrayList<Object> params = new ArrayList<Object>();
+		StringBuffer sql = new StringBuffer();
+		sql.append(" SELECT SUM(Qty) FROM M_StorageReservation sr")
+			.append(" WHERE sr.M_Product_ID=? AND sr.M_Warehouse_ID=?")
+			.append(" AND sr.IsSOTrx=?");
+
+		params.add(M_Product_ID);
+		params.add(M_Warehouse_ID);
+		params.add(isSOTrx ? "Y" : "N");
+
+		// With ASI
+		if (M_AttributeSetInstance_ID != 0) {
+			sql.append(" AND M_AttributeSetInstance_ID=?");
+			params.add(M_AttributeSetInstance_ID);
+		}
+
+		BigDecimal qty = DB.getSQLValueBD(trxName, sql.toString(), params);
+		if (qty==null)
+			qty = Env.ZERO;
+
+		return qty;
+	}
+
+	/**
+	 * 	Get Available Qty.
+	 * 	The call is accurate only if there is a storage record 
+	 * 	and assumes that the product is stocked 
+	 *	@param M_Warehouse_ID wh
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID masi
+	 *	@param trxName transaction
+	 *	@return qty available (QtyOnHand-QtyReserved) or null
+	 */
+	public static BigDecimal getQtyAvailable (int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, String trxName)
+	{
+		BigDecimal qtyOnHand = MStorageOnHand.getQtyOnHand(M_Product_ID, M_Warehouse_ID, M_AttributeSetInstance_ID, trxName);
+		BigDecimal qtyReserved = MStorageReservation.getQty(M_Product_ID, M_Warehouse_ID, M_AttributeSetInstance_ID, true, trxName);
+		BigDecimal retValue = qtyOnHand.subtract(qtyReserved);
+		return retValue;
+	}
+
+	/**
+	 * 	Update Storage Info add.
+	 * 	Called from MProjectIssue
+	 *	@param ctx context
+	 *	@param M_Warehouse_ID warehouse
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID AS Instance
+	 *	@param reservationAttributeSetInstance_ID reservation AS Instance
+	 *	@param diffQty add
+	 *	@param isSOTrx
+	 *	@param trxName transaction
+	 *	@return true if updated
+	 */
+	public static boolean add (Properties ctx, int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, int reservationAttributeSetInstance_ID,
+		BigDecimal diffQty, boolean isSOTrx, String trxName)
+	{
+		/* Do NOT use FIFO ASI for reservation */
+		MProduct prd = new MProduct(ctx, M_Product_ID, trxName);
+		if (prd.getM_AttributeSet_ID() == 0 || ! prd.getM_AttributeSet().isInstanceAttribute()) {
+			// Product doesn't manage attribute set, always reserved with 0
+			reservationAttributeSetInstance_ID = 0;
+			M_AttributeSetInstance_ID = 0;
+		}
+		//		
+
+		MStorageReservation storage = null;
+		StringBuffer diffText = new StringBuffer("(");
+
+		//	Get Storage
+		if (storage == null)
+			storage = getCreate (ctx, M_Warehouse_ID, 
+				M_Product_ID, M_AttributeSetInstance_ID, isSOTrx, trxName);
+		//	Verify
+		if (storage.getM_Warehouse_ID() != M_Warehouse_ID 
+			&& storage.getM_Product_ID() != M_Product_ID
+			&& storage.getM_AttributeSetInstance_ID() != M_AttributeSetInstance_ID)
+		{
+			s_log.severe ("No Storage found - M_Warehouse_ID=" + M_Warehouse_ID 
+				+ ",M_Product_ID=" + M_Product_ID + ",ASI=" + M_AttributeSetInstance_ID);
+			return false;
+		}
+
+		MStorageReservation storage0 = null;
+		if (M_AttributeSetInstance_ID != reservationAttributeSetInstance_ID)
+		{
+			storage0 = get(ctx, M_Warehouse_ID, 
+				M_Product_ID, reservationAttributeSetInstance_ID, isSOTrx, trxName);
+			if (storage0 == null)	//	create if not existing - should not happen
+			{
+				storage0 = getCreate (ctx, M_Warehouse_ID, 
+					M_Product_ID, reservationAttributeSetInstance_ID, isSOTrx, trxName);
+			}
+		}
+		boolean changed = false;
+		if (diffQty != null && diffQty.signum() != 0)
+		{
+			if (storage0 == null)
+				storage.setQty (storage.getQty().add(diffQty));
+			else
+				storage0.setQty (storage0.getQty().add (diffQty));
+			diffText.append(" Qty=").append(diffQty);
+			changed = true;
+		}
+		if (changed)
+		{
+			diffText.append(") -> ").append(storage.toString());
+			s_log.fine(diffText.toString());
+			if (storage0 != null)
+				storage0.saveEx(trxName);		//	No AttributeSetInstance
+			return storage.save (trxName);
+		}
+		
+		return true;
+	}	//	add
+
+	/**
+	 * 	Create or Get Storage Info
+	 *	@param ctx context
+	 *	@param M_Locator_ID locator
+	 *	@param M_Product_ID product
+	 *	@param M_AttributeSetInstance_ID instance
+	 *	@param trxName transaction
+	 *	@return existing/new or null
+	 */
+	public static MStorageReservation getCreate (Properties ctx, int M_Warehouse_ID, 
+		int M_Product_ID, int M_AttributeSetInstance_ID, boolean isSOTrx, String trxName)
+	{
+		if (M_Warehouse_ID == 0)
+			throw new IllegalArgumentException("M_Warehouse_ID=0");
+		if (M_Product_ID == 0)
+			throw new IllegalArgumentException("M_Product_ID=0");
+		MStorageReservation retValue = get(ctx, M_Warehouse_ID, M_Product_ID, M_AttributeSetInstance_ID, isSOTrx, trxName);
+		if (retValue != null)
+			return retValue;
+		
+		//	Insert row based on warehouse
+		MWarehouse warehouse = new MWarehouse (ctx, M_Warehouse_ID, trxName);
+		if (warehouse.get_ID() != M_Warehouse_ID)
+			throw new IllegalArgumentException("Not found M_Warehouse_ID=" + M_Warehouse_ID);
+		//
+		retValue = new MStorageReservation (warehouse, M_Product_ID, M_AttributeSetInstance_ID, isSOTrx);
+		retValue.saveEx(trxName);
+		s_log.fine("New " + retValue);
+		return retValue;
+	}	//	getCreate
+
+}
diff --git a/org.adempiere.base/src/org/compiere/model/MWarehouse.java b/org.adempiere.base/src/org/compiere/model/MWarehouse.java
index 0af2f1819d..dd51fa1b02 100644
--- a/org.adempiere.base/src/org/compiere/model/MWarehouse.java
+++ b/org.adempiere.base/src/org/compiere/model/MWarehouse.java
@@ -213,7 +213,7 @@ public class MWarehouse extends X_M_Warehouse
 		with negative onhand. */
 		if (is_ValueChanged("IsDisallowNegativeInv") && isDisallowNegativeInv())
 		{
-			String sql = "SELECT M_Product_ID FROM M_Storage s "+
+			String sql = "SELECT M_Product_ID FROM M_StorageOnHand s "+
 						 "WHERE s.M_Locator_ID IN (SELECT M_Locator_ID FROM M_Locator l " +
 						 				"WHERE M_Warehouse_ID=? )" +
 						 " GROUP BY M_Product_ID, M_Locator_ID, M_AttributeSetInstance_ID " +
diff --git a/org.adempiere.base/src/org/compiere/model/PO.java b/org.adempiere.base/src/org/compiere/model/PO.java
index ba5ba00633..3abe129f1e 100644
--- a/org.adempiere.base/src/org/compiere/model/PO.java
+++ b/org.adempiere.base/src/org/compiere/model/PO.java
@@ -1321,6 +1321,8 @@ public abstract class PO
 				Object oo = m_IDs[i];
 				if (oo instanceof Integer)
 					pstmt.setInt(i+1, ((Integer)m_IDs[i]).intValue());
+				else if (oo instanceof Boolean)
+					pstmt.setString(i+1, ((Boolean) m_IDs[i] ? "Y" : "N"));
 				else
 					pstmt.setString(i+1, m_IDs[i].toString());
 			}
@@ -2955,8 +2957,19 @@ public abstract class PO
 			{
 				if (m_KeyColumns[i].endsWith("_ID"))
 					sb.append(m_IDs[i]);
-				else
-					sb.append("'").append(m_IDs[i]).append("'");
+				else {
+					sb.append("'");
+					if (m_IDs[i] instanceof Boolean) {
+						if ((Boolean) m_IDs[i]) {
+							sb.append("Y");
+						} else {
+							sb.append("N");
+						}
+					} else {
+						sb.append(m_IDs[i]);
+					}
+					sb.append("'");
+				}
 			}
 			else
 				sb.append("?");
diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_Field.java b/org.adempiere.base/src/org/compiere/model/X_AD_Field.java
index 7e05d5ea15..7f889f3b1b 100644
--- a/org.adempiere.base/src/org/compiere/model/X_AD_Field.java
+++ b/org.adempiere.base/src/org/compiere/model/X_AD_Field.java
@@ -32,7 +32,7 @@ public class X_AD_Field extends PO implements I_AD_Field, I_Persistent
 	/**
 	 *
 	 */
-	private static final long serialVersionUID = 20121101L;
+	private static final long serialVersionUID = 20121120L;
 
     /** Standard Constructor */
     public X_AD_Field (Properties ctx, int AD_Field_ID, String trxName)
@@ -490,6 +490,30 @@ public class X_AD_Field extends PO implements I_AD_Field, I_Persistent
 		return (String)get_Value(COLUMNNAME_IsAllowCopy);
 	}
 
+	/** IsAlwaysUpdateable AD_Reference_ID=319 */
+	public static final int ISALWAYSUPDATEABLE_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISALWAYSUPDATEABLE_Yes = "Y";
+	/** No = N */
+	public static final String ISALWAYSUPDATEABLE_No = "N";
+	/** Set Always Updateable.
+		@param IsAlwaysUpdateable 
+		The column is always updateable, even if the record is not active or processed
+	  */
+	public void setIsAlwaysUpdateable (String IsAlwaysUpdateable)
+	{
+
+		set_Value (COLUMNNAME_IsAlwaysUpdateable, IsAlwaysUpdateable);
+	}
+
+	/** Get Always Updateable.
+		@return The column is always updateable, even if the record is not active or processed
+	  */
+	public String getIsAlwaysUpdateable () 
+	{
+		return (String)get_Value(COLUMNNAME_IsAlwaysUpdateable);
+	}
+
 	/** Set Centrally maintained.
 		@param IsCentrallyMaintained 
 		Information maintained in System Element table
@@ -724,6 +748,68 @@ public class X_AD_Field extends PO implements I_AD_Field, I_Persistent
 		return false;
 	}
 
+	/** IsToolbarButton AD_Reference_ID=319 */
+	public static final int ISTOOLBARBUTTON_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISTOOLBARBUTTON_Yes = "Y";
+	/** No = N */
+	public static final String ISTOOLBARBUTTON_No = "N";
+	/** Set Toolbar Button.
+		@param IsToolbarButton 
+		Add the column button to the toolbar
+	  */
+	public void setIsToolbarButton (String IsToolbarButton)
+	{
+
+		set_Value (COLUMNNAME_IsToolbarButton, IsToolbarButton);
+	}
+
+	/** Get Toolbar Button.
+		@return Add the column button to the toolbar
+	  */
+	public String getIsToolbarButton () 
+	{
+		return (String)get_Value(COLUMNNAME_IsToolbarButton);
+	}
+
+	/** IsUpdateable AD_Reference_ID=319 */
+	public static final int ISUPDATEABLE_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISUPDATEABLE_Yes = "Y";
+	/** No = N */
+	public static final String ISUPDATEABLE_No = "N";
+	/** Set Updatable.
+		@param IsUpdateable 
+		Determines, if the field can be updated
+	  */
+	public void setIsUpdateable (String IsUpdateable)
+	{
+
+		set_Value (COLUMNNAME_IsUpdateable, IsUpdateable);
+	}
+
+	/** Get Updatable.
+		@return Determines, if the field can be updated
+	  */
+	public String getIsUpdateable () 
+	{
+		return (String)get_Value(COLUMNNAME_IsUpdateable);
+	}
+
+	/** Set Mandatory Logic.
+		@param MandatoryLogic Mandatory Logic	  */
+	public void setMandatoryLogic (String MandatoryLogic)
+	{
+		set_Value (COLUMNNAME_MandatoryLogic, MandatoryLogic);
+	}
+
+	/** Get Mandatory Logic.
+		@return Mandatory Logic	  */
+	public String getMandatoryLogic () 
+	{
+		return (String)get_Value(COLUMNNAME_MandatoryLogic);
+	}
+
 	/** Set Name.
 		@param Name 
 		Alphanumeric identifier of the entity
@@ -797,6 +883,23 @@ public class X_AD_Field extends PO implements I_AD_Field, I_Persistent
 		return (String)get_Value(COLUMNNAME_ObscureType);
 	}
 
+	/** Set Read Only Logic.
+		@param ReadOnlyLogic 
+		Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public void setReadOnlyLogic (String ReadOnlyLogic)
+	{
+		set_Value (COLUMNNAME_ReadOnlyLogic, ReadOnlyLogic);
+	}
+
+	/** Get Read Only Logic.
+		@return Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public String getReadOnlyLogic () 
+	{
+		return (String)get_Value(COLUMNNAME_ReadOnlyLogic);
+	}
+
 	/** Set Sequence.
 		@param SeqNo 
 		Method of ordering records; lowest number comes first
diff --git a/org.adempiere.base/src/org/compiere/model/X_AD_UserDef_Field.java b/org.adempiere.base/src/org/compiere/model/X_AD_UserDef_Field.java
index be5f737ee1..867effb4d3 100644
--- a/org.adempiere.base/src/org/compiere/model/X_AD_UserDef_Field.java
+++ b/org.adempiere.base/src/org/compiere/model/X_AD_UserDef_Field.java
@@ -30,7 +30,7 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 	/**
 	 *
 	 */
-	private static final long serialVersionUID = 20121031L;
+	private static final long serialVersionUID = 20121122L;
 
     /** Standard Constructor */
     public X_AD_UserDef_Field (Properties ctx, int AD_UserDef_Field_ID, String trxName)
@@ -41,12 +41,6 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 			setAD_Field_ID (0);
 			setAD_UserDef_Field_ID (0);
 			setAD_UserDef_Tab_ID (0);
-			setIsDisplayed (true);
-// 'Y'
-			setIsReadOnly (false);
-// 'N'
-			setIsSameLine (false);
-// 'N'
 			setSeqNo (0);
 // 0
         } */
@@ -116,6 +110,62 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
         return new KeyNamePair(get_ID(), String.valueOf(getAD_Field_ID()));
     }
 
+	public org.compiere.model.I_AD_Reference getAD_Reference() throws RuntimeException
+    {
+		return (org.compiere.model.I_AD_Reference)MTable.get(getCtx(), org.compiere.model.I_AD_Reference.Table_Name)
+			.getPO(getAD_Reference_ID(), get_TrxName());	}
+
+	/** Set Reference.
+		@param AD_Reference_ID 
+		System Reference and Validation
+	  */
+	public void setAD_Reference_ID (int AD_Reference_ID)
+	{
+		if (AD_Reference_ID < 1) 
+			set_Value (COLUMNNAME_AD_Reference_ID, null);
+		else 
+			set_Value (COLUMNNAME_AD_Reference_ID, Integer.valueOf(AD_Reference_ID));
+	}
+
+	/** Get Reference.
+		@return System Reference and Validation
+	  */
+	public int getAD_Reference_ID () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_AD_Reference_ID);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
+	public org.compiere.model.I_AD_Reference getAD_Reference_Value() throws RuntimeException
+    {
+		return (org.compiere.model.I_AD_Reference)MTable.get(getCtx(), org.compiere.model.I_AD_Reference.Table_Name)
+			.getPO(getAD_Reference_Value_ID(), get_TrxName());	}
+
+	/** Set Reference Key.
+		@param AD_Reference_Value_ID 
+		Required to specify, if data type is Table or List
+	  */
+	public void setAD_Reference_Value_ID (int AD_Reference_Value_ID)
+	{
+		if (AD_Reference_Value_ID < 1) 
+			set_Value (COLUMNNAME_AD_Reference_Value_ID, null);
+		else 
+			set_Value (COLUMNNAME_AD_Reference_Value_ID, Integer.valueOf(AD_Reference_Value_ID));
+	}
+
+	/** Get Reference Key.
+		@return Required to specify, if data type is Table or List
+	  */
+	public int getAD_Reference_Value_ID () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_AD_Reference_Value_ID);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
 	/** Set User defined Field.
 		@param AD_UserDef_Field_ID User defined Field	  */
 	public void setAD_UserDef_Field_ID (int AD_UserDef_Field_ID)
@@ -175,6 +225,26 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 		return ii.intValue();
 	}
 
+	/** Set Column Span.
+		@param ColumnSpan 
+		Number of column for a box of field
+	  */
+	public void setColumnSpan (int ColumnSpan)
+	{
+		set_Value (COLUMNNAME_ColumnSpan, Integer.valueOf(ColumnSpan));
+	}
+
+	/** Get Column Span.
+		@return Number of column for a box of field
+	  */
+	public int getColumnSpan () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_ColumnSpan);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
 	/** Set Default Logic.
 		@param DefaultValue 
 		Default value hierarchy, separated by ;
@@ -263,100 +333,186 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 		return (String)get_Value(COLUMNNAME_Help);
 	}
 
+	/** IsAlwaysUpdateable AD_Reference_ID=319 */
+	public static final int ISALWAYSUPDATEABLE_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISALWAYSUPDATEABLE_Yes = "Y";
+	/** No = N */
+	public static final String ISALWAYSUPDATEABLE_No = "N";
+	/** Set Always Updatable.
+		@param IsAlwaysUpdateable 
+		The column is always updateable, even if the record is not active or processed
+	  */
+	public void setIsAlwaysUpdateable (String IsAlwaysUpdateable)
+	{
+
+		set_Value (COLUMNNAME_IsAlwaysUpdateable, IsAlwaysUpdateable);
+	}
+
+	/** Get Always Updatable.
+		@return The column is always updateable, even if the record is not active or processed
+	  */
+	public String getIsAlwaysUpdateable () 
+	{
+		return (String)get_Value(COLUMNNAME_IsAlwaysUpdateable);
+	}
+
+	/** IsDisplayed AD_Reference_ID=319 */
+	public static final int ISDISPLAYED_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISDISPLAYED_Yes = "Y";
+	/** No = N */
+	public static final String ISDISPLAYED_No = "N";
 	/** Set Displayed.
 		@param IsDisplayed 
 		Determines, if this field is displayed
 	  */
-	public void setIsDisplayed (boolean IsDisplayed)
+	public void setIsDisplayed (String IsDisplayed)
 	{
-		set_Value (COLUMNNAME_IsDisplayed, Boolean.valueOf(IsDisplayed));
+
+		set_Value (COLUMNNAME_IsDisplayed, IsDisplayed);
 	}
 
 	/** Get Displayed.
 		@return Determines, if this field is displayed
 	  */
-	public boolean isDisplayed () 
+	public String getIsDisplayed () 
 	{
-		Object oo = get_Value(COLUMNNAME_IsDisplayed);
-		if (oo != null) 
-		{
-			 if (oo instanceof Boolean) 
-				 return ((Boolean)oo).booleanValue(); 
-			return "Y".equals(oo);
-		}
-		return false;
+		return (String)get_Value(COLUMNNAME_IsDisplayed);
 	}
 
+	/** IsMandatory AD_Reference_ID=319 */
+	public static final int ISMANDATORY_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISMANDATORY_Yes = "Y";
+	/** No = N */
+	public static final String ISMANDATORY_No = "N";
+	/** Set Mandatory.
+		@param IsMandatory 
+		Data entry is required in this column
+	  */
+	public void setIsMandatory (String IsMandatory)
+	{
+
+		set_Value (COLUMNNAME_IsMandatory, IsMandatory);
+	}
+
+	/** Get Mandatory.
+		@return Data entry is required in this column
+	  */
+	public String getIsMandatory () 
+	{
+		return (String)get_Value(COLUMNNAME_IsMandatory);
+	}
+
+	/** IsReadOnly AD_Reference_ID=319 */
+	public static final int ISREADONLY_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISREADONLY_Yes = "Y";
+	/** No = N */
+	public static final String ISREADONLY_No = "N";
 	/** Set Read Only.
 		@param IsReadOnly 
 		Field is read only
 	  */
-	public void setIsReadOnly (boolean IsReadOnly)
+	public void setIsReadOnly (String IsReadOnly)
 	{
-		set_Value (COLUMNNAME_IsReadOnly, Boolean.valueOf(IsReadOnly));
+
+		set_Value (COLUMNNAME_IsReadOnly, IsReadOnly);
 	}
 
 	/** Get Read Only.
 		@return Field is read only
 	  */
-	public boolean isReadOnly () 
+	public String getIsReadOnly () 
 	{
-		Object oo = get_Value(COLUMNNAME_IsReadOnly);
-		if (oo != null) 
-		{
-			 if (oo instanceof Boolean) 
-				 return ((Boolean)oo).booleanValue(); 
-			return "Y".equals(oo);
-		}
-		return false;
+		return (String)get_Value(COLUMNNAME_IsReadOnly);
 	}
 
+	/** IsSameLine AD_Reference_ID=319 */
+	public static final int ISSAMELINE_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISSAMELINE_Yes = "Y";
+	/** No = N */
+	public static final String ISSAMELINE_No = "N";
 	/** Set Same Line.
 		@param IsSameLine 
 		Displayed on same line as previous field
 	  */
-	public void setIsSameLine (boolean IsSameLine)
+	public void setIsSameLine (String IsSameLine)
 	{
-		set_Value (COLUMNNAME_IsSameLine, Boolean.valueOf(IsSameLine));
+
+		set_Value (COLUMNNAME_IsSameLine, IsSameLine);
 	}
 
 	/** Get Same Line.
 		@return Displayed on same line as previous field
 	  */
-	public boolean isSameLine () 
+	public String getIsSameLine () 
 	{
-		Object oo = get_Value(COLUMNNAME_IsSameLine);
-		if (oo != null) 
-		{
-			 if (oo instanceof Boolean) 
-				 return ((Boolean)oo).booleanValue(); 
-			return "Y".equals(oo);
-		}
-		return false;
+		return (String)get_Value(COLUMNNAME_IsSameLine);
 	}
 
+	/** IsToolbarButton AD_Reference_ID=319 */
+	public static final int ISTOOLBARBUTTON_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISTOOLBARBUTTON_Yes = "Y";
+	/** No = N */
+	public static final String ISTOOLBARBUTTON_No = "N";
+	/** Set Toolbar Button.
+		@param IsToolbarButton 
+		Add the column button to the toolbar
+	  */
+	public void setIsToolbarButton (String IsToolbarButton)
+	{
+
+		set_Value (COLUMNNAME_IsToolbarButton, IsToolbarButton);
+	}
+
+	/** Get Toolbar Button.
+		@return Add the column button to the toolbar
+	  */
+	public String getIsToolbarButton () 
+	{
+		return (String)get_Value(COLUMNNAME_IsToolbarButton);
+	}
+
+	/** IsUpdateable AD_Reference_ID=319 */
+	public static final int ISUPDATEABLE_AD_Reference_ID=319;
+	/** Yes = Y */
+	public static final String ISUPDATEABLE_Yes = "Y";
+	/** No = N */
+	public static final String ISUPDATEABLE_No = "N";
 	/** Set Updatable.
 		@param IsUpdateable 
 		Determines, if the field can be updated
 	  */
-	public void setIsUpdateable (boolean IsUpdateable)
+	public void setIsUpdateable (String IsUpdateable)
 	{
-		set_Value (COLUMNNAME_IsUpdateable, Boolean.valueOf(IsUpdateable));
+
+		set_Value (COLUMNNAME_IsUpdateable, IsUpdateable);
 	}
 
 	/** Get Updatable.
 		@return Determines, if the field can be updated
 	  */
-	public boolean isUpdateable () 
+	public String getIsUpdateable () 
 	{
-		Object oo = get_Value(COLUMNNAME_IsUpdateable);
-		if (oo != null) 
-		{
-			 if (oo instanceof Boolean) 
-				 return ((Boolean)oo).booleanValue(); 
-			return "Y".equals(oo);
-		}
-		return false;
+		return (String)get_Value(COLUMNNAME_IsUpdateable);
+	}
+
+	/** Set Mandatory Logic.
+		@param MandatoryLogic Mandatory Logic	  */
+	public void setMandatoryLogic (String MandatoryLogic)
+	{
+		set_Value (COLUMNNAME_MandatoryLogic, MandatoryLogic);
+	}
+
+	/** Get Mandatory Logic.
+		@return Mandatory Logic	  */
+	public String getMandatoryLogic () 
+	{
+		return (String)get_Value(COLUMNNAME_MandatoryLogic);
 	}
 
 	/** Set Name.
@@ -376,6 +532,43 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 		return (String)get_Value(COLUMNNAME_Name);
 	}
 
+	/** Set Number of Lines.
+		@param NumLines 
+		Number of lines for a field
+	  */
+	public void setNumLines (int NumLines)
+	{
+		set_Value (COLUMNNAME_NumLines, Integer.valueOf(NumLines));
+	}
+
+	/** Get Number of Lines.
+		@return Number of lines for a field
+	  */
+	public int getNumLines () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_NumLines);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
+	/** Set Read Only Logic.
+		@param ReadOnlyLogic 
+		Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public void setReadOnlyLogic (String ReadOnlyLogic)
+	{
+		set_Value (COLUMNNAME_ReadOnlyLogic, ReadOnlyLogic);
+	}
+
+	/** Get Read Only Logic.
+		@return Logic to determine if field is read only (applies only when field is read-write)
+	  */
+	public String getReadOnlyLogic () 
+	{
+		return (String)get_Value(COLUMNNAME_ReadOnlyLogic);
+	}
+
 	/** Set Sequence.
 		@param SeqNo 
 		Method of ordering records; lowest number comes first
@@ -415,4 +608,24 @@ public class X_AD_UserDef_Field extends PO implements I_AD_UserDef_Field, I_Pers
 			 return 0;
 		return ii.intValue();
 	}
+
+	/** Set X Position.
+		@param XPosition 
+		Absolute X (horizontal) position in 1/72 of an inch
+	  */
+	public void setXPosition (int XPosition)
+	{
+		set_Value (COLUMNNAME_XPosition, Integer.valueOf(XPosition));
+	}
+
+	/** Get X Position.
+		@return Absolute X (horizontal) position in 1/72 of an inch
+	  */
+	public int getXPosition () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_XPosition);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
 }
\ No newline at end of file
diff --git a/org.adempiere.base/src/org/compiere/model/X_M_Storage.java b/org.adempiere.base/src/org/compiere/model/X_M_StorageOnHand.java
similarity index 76%
rename from org.adempiere.base/src/org/compiere/model/X_M_Storage.java
rename to org.adempiere.base/src/org/compiere/model/X_M_StorageOnHand.java
index 66dfd5b2fc..9d208c7ec8 100644
--- a/org.adempiere.base/src/org/compiere/model/X_M_Storage.java
+++ b/org.adempiere.base/src/org/compiere/model/X_M_StorageOnHand.java
@@ -23,34 +23,32 @@ import java.sql.Timestamp;
 import java.util.Properties;
 import org.compiere.util.Env;
 
-/** Generated Model for M_Storage
+/** Generated Model for M_StorageOnHand
  *  @author iDempiere (generated) 
  *  @version Release 1.0a - $Id$ */
-public class X_M_Storage extends PO implements I_M_Storage, I_Persistent 
+public class X_M_StorageOnHand extends PO implements I_M_StorageOnHand, I_Persistent 
 {
 
 	/**
 	 *
 	 */
-	private static final long serialVersionUID = 20121031L;
+	private static final long serialVersionUID = 20121119L;
 
     /** Standard Constructor */
-    public X_M_Storage (Properties ctx, int M_Storage_ID, String trxName)
+    public X_M_StorageOnHand (Properties ctx, int M_StorageOnHand_ID, String trxName)
     {
-      super (ctx, M_Storage_ID, trxName);
-      /** if (M_Storage_ID == 0)
+      super (ctx, M_StorageOnHand_ID, trxName);
+      /** if (M_StorageOnHand_ID == 0)
         {
 			setM_AttributeSetInstance_ID (0);
 			setM_Locator_ID (0);
 			setM_Product_ID (0);
 			setQtyOnHand (Env.ZERO);
-			setQtyOrdered (Env.ZERO);
-			setQtyReserved (Env.ZERO);
         } */
     }
 
     /** Load Constructor */
-    public X_M_Storage (Properties ctx, ResultSet rs, String trxName)
+    public X_M_StorageOnHand (Properties ctx, ResultSet rs, String trxName)
     {
       super (ctx, rs, trxName);
     }
@@ -72,7 +70,7 @@ public class X_M_Storage extends PO implements I_M_Storage, I_Persistent
 
     public String toString()
     {
-      StringBuffer sb = new StringBuffer ("X_M_Storage[")
+      StringBuffer sb = new StringBuffer ("X_M_StorageOnHand[")
         .append(get_ID()).append("]");
       return sb.toString();
     }
@@ -178,18 +176,18 @@ public class X_M_Storage extends PO implements I_M_Storage, I_Persistent
 		return ii.intValue();
 	}
 
-	/** Set M_Storage_UU.
-		@param M_Storage_UU M_Storage_UU	  */
-	public void setM_Storage_UU (String M_Storage_UU)
+	/** Set M_StorageOnHand_UU.
+		@param M_StorageOnHand_UU M_StorageOnHand_UU	  */
+	public void setM_StorageOnHand_UU (String M_StorageOnHand_UU)
 	{
-		set_Value (COLUMNNAME_M_Storage_UU, M_Storage_UU);
+		set_Value (COLUMNNAME_M_StorageOnHand_UU, M_StorageOnHand_UU);
 	}
 
-	/** Get M_Storage_UU.
-		@return M_Storage_UU	  */
-	public String getM_Storage_UU () 
+	/** Get M_StorageOnHand_UU.
+		@return M_StorageOnHand_UU	  */
+	public String getM_StorageOnHand_UU () 
 	{
-		return (String)get_Value(COLUMNNAME_M_Storage_UU);
+		return (String)get_Value(COLUMNNAME_M_StorageOnHand_UU);
 	}
 
 	/** Set On Hand Quantity.
@@ -211,44 +209,4 @@ public class X_M_Storage extends PO implements I_M_Storage, I_Persistent
 			 return Env.ZERO;
 		return bd;
 	}
-
-	/** Set Ordered Quantity.
-		@param QtyOrdered 
-		Ordered Quantity
-	  */
-	public void setQtyOrdered (BigDecimal QtyOrdered)
-	{
-		set_ValueNoCheck (COLUMNNAME_QtyOrdered, QtyOrdered);
-	}
-
-	/** Get Ordered Quantity.
-		@return Ordered Quantity
-	  */
-	public BigDecimal getQtyOrdered () 
-	{
-		BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_QtyOrdered);
-		if (bd == null)
-			 return Env.ZERO;
-		return bd;
-	}
-
-	/** Set Reserved Quantity.
-		@param QtyReserved 
-		Reserved Quantity
-	  */
-	public void setQtyReserved (BigDecimal QtyReserved)
-	{
-		set_ValueNoCheck (COLUMNNAME_QtyReserved, QtyReserved);
-	}
-
-	/** Get Reserved Quantity.
-		@return Reserved Quantity
-	  */
-	public BigDecimal getQtyReserved () 
-	{
-		BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_QtyReserved);
-		if (bd == null)
-			 return Env.ZERO;
-		return bd;
-	}
 }
\ No newline at end of file
diff --git a/org.adempiere.base/src/org/compiere/model/X_M_StorageReservation.java b/org.adempiere.base/src/org/compiere/model/X_M_StorageReservation.java
new file mode 100644
index 0000000000..814c8d141f
--- /dev/null
+++ b/org.adempiere.base/src/org/compiere/model/X_M_StorageReservation.java
@@ -0,0 +1,236 @@
+/******************************************************************************
+ * Product: iDempiere ERP & CRM Smart Business Solution                       *
+ * Copyright (C) 1999-2012 ComPiere, Inc. All Rights Reserved.                *
+ * This program is free software, you can redistribute it and/or modify it    *
+ * under the terms version 2 of the GNU General Public License as published   *
+ * by the Free Software Foundation. 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.,    *
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.                     *
+ * For the text or an alternative of this public license, you may reach us    *
+ * ComPiere, Inc., 2620 Augustine Dr. #245, Santa Clara, CA 95054, USA        *
+ * or via info@compiere.org or http://www.compiere.org/license.html           *
+ *****************************************************************************/
+/** Generated Model - DO NOT CHANGE */
+package org.compiere.model;
+
+import java.math.BigDecimal;
+import java.sql.ResultSet;
+import java.sql.Timestamp;
+import java.util.Properties;
+import org.compiere.util.Env;
+
+/** Generated Model for M_StorageReservation
+ *  @author iDempiere (generated) 
+ *  @version Release 1.0a - $Id$ */
+public class X_M_StorageReservation extends PO implements I_M_StorageReservation, I_Persistent 
+{
+
+	/**
+	 *
+	 */
+	private static final long serialVersionUID = 20121119L;
+
+    /** Standard Constructor */
+    public X_M_StorageReservation (Properties ctx, int M_StorageReservation_ID, String trxName)
+    {
+      super (ctx, M_StorageReservation_ID, trxName);
+      /** if (M_StorageReservation_ID == 0)
+        {
+			setM_AttributeSetInstance_ID (0);
+			setM_Product_ID (0);
+			setM_Warehouse_ID (0);
+			setQty (Env.ZERO);
+        } */
+    }
+
+    /** Load Constructor */
+    public X_M_StorageReservation (Properties ctx, ResultSet rs, String trxName)
+    {
+      super (ctx, rs, trxName);
+    }
+
+    /** AccessLevel
+      * @return 3 - Client - Org 
+      */
+    protected int get_AccessLevel()
+    {
+      return accessLevel.intValue();
+    }
+
+    /** Load Meta Data */
+    protected POInfo initPO (Properties ctx)
+    {
+      POInfo poi = POInfo.getPOInfo (ctx, Table_ID, get_TrxName());
+      return poi;
+    }
+
+    public String toString()
+    {
+      StringBuffer sb = new StringBuffer ("X_M_StorageReservation[")
+        .append(get_ID()).append("]");
+      return sb.toString();
+    }
+
+	/** Set Date last inventory count.
+		@param DateLastInventory 
+		Date of Last Inventory Count
+	  */
+	public void setDateLastInventory (Timestamp DateLastInventory)
+	{
+		set_Value (COLUMNNAME_DateLastInventory, DateLastInventory);
+	}
+
+	/** Get Date last inventory count.
+		@return Date of Last Inventory Count
+	  */
+	public Timestamp getDateLastInventory () 
+	{
+		return (Timestamp)get_Value(COLUMNNAME_DateLastInventory);
+	}
+
+	/** Set Sales Transaction.
+		@param IsSOTrx 
+		This is a Sales Transaction
+	  */
+	public void setIsSOTrx (boolean IsSOTrx)
+	{
+		set_Value (COLUMNNAME_IsSOTrx, Boolean.valueOf(IsSOTrx));
+	}
+
+	/** Get Sales Transaction.
+		@return This is a Sales Transaction
+	  */
+	public boolean isSOTrx () 
+	{
+		Object oo = get_Value(COLUMNNAME_IsSOTrx);
+		if (oo != null) 
+		{
+			 if (oo instanceof Boolean) 
+				 return ((Boolean)oo).booleanValue(); 
+			return "Y".equals(oo);
+		}
+		return false;
+	}
+
+	public I_M_AttributeSetInstance getM_AttributeSetInstance() throws RuntimeException
+    {
+		return (I_M_AttributeSetInstance)MTable.get(getCtx(), I_M_AttributeSetInstance.Table_Name)
+			.getPO(getM_AttributeSetInstance_ID(), get_TrxName());	}
+
+	/** Set Attribute Set Instance.
+		@param M_AttributeSetInstance_ID 
+		Product Attribute Set Instance
+	  */
+	public void setM_AttributeSetInstance_ID (int M_AttributeSetInstance_ID)
+	{
+		if (M_AttributeSetInstance_ID < 0) 
+			set_ValueNoCheck (COLUMNNAME_M_AttributeSetInstance_ID, null);
+		else 
+			set_ValueNoCheck (COLUMNNAME_M_AttributeSetInstance_ID, Integer.valueOf(M_AttributeSetInstance_ID));
+	}
+
+	/** Get Attribute Set Instance.
+		@return Product Attribute Set Instance
+	  */
+	public int getM_AttributeSetInstance_ID () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_M_AttributeSetInstance_ID);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
+	public org.compiere.model.I_M_Product getM_Product() throws RuntimeException
+    {
+		return (org.compiere.model.I_M_Product)MTable.get(getCtx(), org.compiere.model.I_M_Product.Table_Name)
+			.getPO(getM_Product_ID(), get_TrxName());	}
+
+	/** Set Product.
+		@param M_Product_ID 
+		Product, Service, Item
+	  */
+	public void setM_Product_ID (int M_Product_ID)
+	{
+		if (M_Product_ID < 1) 
+			set_ValueNoCheck (COLUMNNAME_M_Product_ID, null);
+		else 
+			set_ValueNoCheck (COLUMNNAME_M_Product_ID, Integer.valueOf(M_Product_ID));
+	}
+
+	/** Get Product.
+		@return Product, Service, Item
+	  */
+	public int getM_Product_ID () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_M_Product_ID);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
+	/** Set M_StorageReservation_UU.
+		@param M_StorageReservation_UU M_StorageReservation_UU	  */
+	public void setM_StorageReservation_UU (String M_StorageReservation_UU)
+	{
+		set_Value (COLUMNNAME_M_StorageReservation_UU, M_StorageReservation_UU);
+	}
+
+	/** Get M_StorageReservation_UU.
+		@return M_StorageReservation_UU	  */
+	public String getM_StorageReservation_UU () 
+	{
+		return (String)get_Value(COLUMNNAME_M_StorageReservation_UU);
+	}
+
+	public org.compiere.model.I_M_Warehouse getM_Warehouse() throws RuntimeException
+    {
+		return (org.compiere.model.I_M_Warehouse)MTable.get(getCtx(), org.compiere.model.I_M_Warehouse.Table_Name)
+			.getPO(getM_Warehouse_ID(), get_TrxName());	}
+
+	/** Set Warehouse.
+		@param M_Warehouse_ID 
+		Storage Warehouse and Service Point
+	  */
+	public void setM_Warehouse_ID (int M_Warehouse_ID)
+	{
+		if (M_Warehouse_ID < 1) 
+			set_ValueNoCheck (COLUMNNAME_M_Warehouse_ID, null);
+		else 
+			set_ValueNoCheck (COLUMNNAME_M_Warehouse_ID, Integer.valueOf(M_Warehouse_ID));
+	}
+
+	/** Get Warehouse.
+		@return Storage Warehouse and Service Point
+	  */
+	public int getM_Warehouse_ID () 
+	{
+		Integer ii = (Integer)get_Value(COLUMNNAME_M_Warehouse_ID);
+		if (ii == null)
+			 return 0;
+		return ii.intValue();
+	}
+
+	/** Set Quantity.
+		@param Qty 
+		Quantity
+	  */
+	public void setQty (BigDecimal Qty)
+	{
+		set_ValueNoCheck (COLUMNNAME_Qty, Qty);
+	}
+
+	/** Get Quantity.
+		@return Quantity
+	  */
+	public BigDecimal getQty () 
+	{
+		BigDecimal bd = (BigDecimal)get_Value(COLUMNNAME_Qty);
+		if (bd == null)
+			 return Env.ZERO;
+		return bd;
+	}
+}
\ No newline at end of file
diff --git a/org.adempiere.base/src/org/eevolution/model/MDDOrder.java b/org.adempiere.base/src/org/eevolution/model/MDDOrder.java
index 349b8809aa..5b57d16600 100644
--- a/org.adempiere.base/src/org/eevolution/model/MDDOrder.java
+++ b/org.adempiere.base/src/org/eevolution/model/MDDOrder.java
@@ -36,7 +36,7 @@ import org.compiere.model.MPeriod;
 import org.compiere.model.MProduct;
 import org.compiere.model.MProject;
 import org.compiere.model.MRefList;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.model.MUser;
 import org.compiere.model.ModelValidationEngine;
 import org.compiere.model.ModelValidator;
@@ -883,18 +883,18 @@ public class MDDOrder extends X_DD_Order implements DocAction
 				if (product.isStocked())
 				{
 					//	Update Storage
-					if (!MStorage.add(getCtx(), locator_to.getM_Warehouse_ID(), locator_to.getM_Locator_ID(), 
+					if (!MStorageOnHand.add(getCtx(), locator_to.getM_Warehouse_ID(), locator_to.getM_Locator_ID(), 
 						line.getM_Product_ID(), 
 						line.getM_AttributeSetInstance_ID(), line.getM_AttributeSetInstance_ID(),
-						Env.ZERO, Env.ZERO , reserved_ordered , get_TrxName()))
+						Env.ZERO, get_TrxName()))
 					{
 						throw new AdempiereException();
 					}
 					
-					if (!MStorage.add(getCtx(), locator_from.getM_Warehouse_ID(), locator_from.getM_Locator_ID(), 
+					if (!MStorageOnHand.add(getCtx(), locator_from.getM_Warehouse_ID(), locator_from.getM_Locator_ID(), 
 						line.getM_Product_ID(), 
 						line.getM_AttributeSetInstanceTo_ID(), line.getM_AttributeSetInstance_ID(),
-						Env.ZERO, reserved_ordered, Env.ZERO , get_TrxName()))
+						Env.ZERO, get_TrxName()))
 					{
 						throw new AdempiereException();
 					}
diff --git a/org.adempiere.base/src/org/eevolution/model/MDDOrderLine.java b/org.adempiere.base/src/org/eevolution/model/MDDOrderLine.java
index 2a354d0f41..852cbb453f 100644
--- a/org.adempiere.base/src/org/eevolution/model/MDDOrderLine.java
+++ b/org.adempiere.base/src/org/eevolution/model/MDDOrderLine.java
@@ -23,9 +23,10 @@ import java.util.Properties;
 
 import org.compiere.model.MAttributeSet;
 import org.compiere.model.MCharge;
+import org.compiere.model.MClient;
 import org.compiere.model.MLocator;
 import org.compiere.model.MProduct;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.model.MUOM;
 import org.compiere.util.CLogger;
 import org.compiere.util.DB;
@@ -577,9 +578,9 @@ public class MDDOrderLine extends X_DD_OrderLine
 				if (isInstance)
 				{
 					MLocator locator_from = MLocator.get(getCtx(), getM_Locator_ID());
-					MStorage[] storages = MStorage.getWarehouse(getCtx(), 
-							locator_from.getM_Warehouse_ID(), getM_Product_ID(), getM_AttributeSetInstance_ID(), 
-						M_AttributeSet_ID, false, null, true, get_TrxName());
+					MStorageOnHand[] storages = MStorageOnHand.getWarehouse(getCtx(),
+							locator_from.getM_Warehouse_ID(), getM_Product_ID(), getM_AttributeSetInstance_ID(),
+							null, true, false, 0, get_TrxName());
 					BigDecimal qty = Env.ZERO;
 					for (int i = 0; i < storages.length; i++)
 					{
diff --git a/org.adempiere.extend/src/test/functional/MStorageTest.java b/org.adempiere.extend/src/test/functional/MStorageTest.java
index e9666ab467..992b21001a 100644
--- a/org.adempiere.extend/src/test/functional/MStorageTest.java
+++ b/org.adempiere.extend/src/test/functional/MStorageTest.java
@@ -16,7 +16,8 @@ package test.functional;
 import java.math.BigDecimal;
 
 import org.compiere.model.MLocator;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
+import org.compiere.model.MStorageReservation;
 import org.compiere.model.MWarehouse;
 import org.compiere.util.Env;
 
@@ -44,18 +45,18 @@ public class MStorageTest extends AdempiereTestCase
 		loc.saveEx();
 		//
 		BigDecimal targetQty = BigDecimal.valueOf(qtyOnHand).setScale(12, BigDecimal.ROUND_HALF_UP);
-		MStorage s1 = MStorage.getCreate(getCtx(), loc.get_ID(), product_id, 0, getTrxName());
+		MStorageOnHand s1 = MStorageOnHand.getCreate(getCtx(), loc.get_ID(), product_id, 0, getTrxName());
 		s1.setQtyOnHand(targetQty);
 		s1.saveEx();
 		//
-		BigDecimal qty = MStorage.getQtyAvailable(wh.get_ID(), loc.get_ID(), product_id, 0, getTrxName()).setScale(12, BigDecimal.ROUND_HALF_UP);
+		BigDecimal qty = MStorageReservation.getQtyAvailable(wh.get_ID(), product_id, 0, getTrxName()).setScale(12, BigDecimal.ROUND_HALF_UP);
 		assertEquals("Error on locator "+locatorValue, targetQty, qty);
 		//
 		return loc;
 	}
 	private void assertWarehouseQty(MWarehouse wh, BigDecimal targetQty)
 	{
-		BigDecimal qty = MStorage.getQtyAvailable(wh.get_ID(), 0, product_id, 0, getTrxName());
+		BigDecimal qty = MStorageReservation.getQtyAvailable(wh.get_ID(), product_id, 0, getTrxName());
 		qty = qty.setScale(12, BigDecimal.ROUND_HALF_UP);
 		targetQty = targetQty.setScale(12, BigDecimal.ROUND_HALF_UP);
 		assertEquals(targetQty, qty);
diff --git a/org.adempiere.extend/src/test/functional/inventory/InventoryTest.java b/org.adempiere.extend/src/test/functional/inventory/InventoryTest.java
index b42ea0ea0b..c859a04c3e 100644
--- a/org.adempiere.extend/src/test/functional/inventory/InventoryTest.java
+++ b/org.adempiere.extend/src/test/functional/inventory/InventoryTest.java
@@ -28,7 +28,7 @@ import org.adempiere.exceptions.DBException;
 import org.compiere.model.MDocType;
 import org.compiere.model.MLocator;
 import org.compiere.model.MProduct;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
 import org.compiere.process.DocAction;
 import org.compiere.util.DB;
 import org.compiere.util.Env;
@@ -185,22 +185,18 @@ public class InventoryTest extends AdempiereTestCase
 		ArrayList<Object> params = new ArrayList<Object>();
 		String sql = "SELECT"
 			+" COALESCE(SUM(QtyOnHand),0)"
-			+",COALESCE(SUM(QtyReserved),0)"
-			+",COALESCE(SUM(QtyOrdered),0)"
-			+" FROM M_Storage"
+			+" FROM M_StorageOnHand"
 			+" WHERE M_Locator_ID=? AND M_Product_ID=?";
 		params.add(locator.get_ID());
 		params.add(product.get_ID());
 		if (M_ASI_ID >= 0)
 		{
-			sql += " AND "+MStorage.COLUMNNAME_M_AttributeSetInstance_ID+"=?";
+			sql += " AND "+MStorageOnHand.COLUMNNAME_M_AttributeSetInstance_ID+"=?";
 			params.add(M_ASI_ID);
 		}
 		PreparedStatement pstmt = null;
 		ResultSet rs = null;
 		BigDecimal qtyOnHand = Env.ZERO;
-		BigDecimal qtyOrdered = Env.ZERO;
-		BigDecimal qtyReserved = Env.ZERO;
 		try
 		{
 			pstmt = DB.prepareStatement(sql, trxName);
@@ -209,8 +205,6 @@ public class InventoryTest extends AdempiereTestCase
 			if (rs.next())
 			{
 				qtyOnHand = rs.getBigDecimal(1);
-				qtyReserved = rs.getBigDecimal(2);
-				qtyOrdered = rs.getBigDecimal(3);
 			}
 		}
 		catch (SQLException e)
@@ -225,18 +219,17 @@ public class InventoryTest extends AdempiereTestCase
 		//
 		//
 		assertEquals("QtyOnHand not match "+doc, doc.Qty, qtyOnHand);
-		assertEquals("QtyReserved not match "+doc, doc.QtyReserved, qtyReserved);
-		assertEquals("QtyOrdered not match "+doc, doc.QtyOrdered, qtyOrdered);
+
 	}
 	
 	private void dumpStatus(MMDocument doc, String trxName)
 	{
 		MProduct product = InventoryUtil.getCreateProduct(doc.ProductValue, null); 
-		MStorage[] storage = MStorage.getOfProduct(getCtx(), product.get_ID(), trxName);
+		MStorageOnHand[] storage = MStorageOnHand.getOfProduct(getCtx(), product.get_ID(), trxName);
 		
 		System.err.println("STORAGE____________________________________________________");
 		System.err.println("   "+doc);
-		for (MStorage s : storage)
+		for (MStorageOnHand s : storage)
 		{
 			System.err.println(""+s);
 		}
diff --git a/org.adempiere.ui.swing/src/org/compiere/apps/form/VAttributeGrid.java b/org.adempiere.ui.swing/src/org/compiere/apps/form/VAttributeGrid.java
index 3a678be677..e097b3af35 100644
--- a/org.adempiere.ui.swing/src/org/compiere/apps/form/VAttributeGrid.java
+++ b/org.adempiere.ui.swing/src/org/compiere/apps/form/VAttributeGrid.java
@@ -50,7 +50,8 @@ import org.compiere.model.MAttributeValue;
 import org.compiere.model.MProduct;
 import org.compiere.model.MProductPrice;
 import org.compiere.model.MRole;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
+import org.compiere.model.MStorageReservation;
 import org.compiere.swing.CComboBox;
 import org.compiere.swing.CLabel;
 import org.compiere.swing.CPanel;
@@ -518,7 +519,7 @@ public class VAttributeGrid extends CPanel
 		formatted = "";
 		if (m_M_Warehouse_ID != 0)
 		{
-			BigDecimal qty = MStorage.getQtyAvailable(m_M_Warehouse_ID, M_Product_ID, 0, null);
+			BigDecimal qty = MStorageReservation.getQtyAvailable(m_M_Warehouse_ID, M_Product_ID, 0, null);
 			if (qty == null)
 				formatted = "-";
 			else
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAttributeGrid.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAttributeGrid.java
index 54a95b5c4d..fa64d58b14 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAttributeGrid.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/apps/form/WAttributeGrid.java
@@ -43,7 +43,8 @@ import org.compiere.model.MAttributeValue;
 import org.compiere.model.MProduct;
 import org.compiere.model.MProductPrice;
 import org.compiere.model.MRole;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
+import org.compiere.model.MStorageReservation;
 import org.compiere.util.CLogger;
 import org.compiere.util.DB;
 import org.compiere.util.DisplayType;
@@ -607,7 +608,7 @@ public class WAttributeGrid extends ADForm implements EventListener
 		formatted = "";
 		if (m_M_Warehouse_ID != 0)
 		{
-			BigDecimal qty = MStorage.getQtyAvailable(m_M_Warehouse_ID, M_Product_ID, 0, null);
+			BigDecimal qty = MStorageReservation.getQtyAvailable(m_M_Warehouse_ID, M_Product_ID, 0, null);
 			if (qty == null)
 				formatted = "-";
 			else
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListbox.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListbox.java
index da818dd748..e8808023ca 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListbox.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/component/WListbox.java
@@ -64,6 +64,9 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
 	/**	Logger. */
 	private static CLogger logger = CLogger.getCLogger(WListbox.class);
 
+	/** Is Total Show */
+	private boolean showTotals = false;
+
 	/** Model Index of Key Column.   */
 	protected int m_keyColumnIndex = -1;
 
@@ -623,6 +626,8 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
 		{
 			logger.log(Level.SEVERE, "", exception);
 		}
+		if (getShowTotals())
+			addTotals(m_layout);
 		// TODO implement this
 		//autoSize();
 
@@ -700,6 +705,8 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
 				getModel().setDataAt(data, row, col);
 			}
 		}
+		if (getShowTotals())
+			addTotals(m_layout);
 		// TODO implement this
 		//autoSize();
 
@@ -850,6 +857,23 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
 		return this.isMultiple();
 	}   //  isMultiSelection
 
+	/**
+	 *  Set if Totals is Show
+	 *  @param boolean Show
+	 */
+	public void setShowTotals(boolean show)
+	{
+		showTotals= show;
+	}
+	/**
+	 *  get if Totals is Show
+	 *  @param boolean Show
+	 */
+	public boolean getShowTotals()
+	{
+		return showTotals;
+	}
+
 	/**
 	 *  Set ColorColumn comparison criteria.
 	 *
@@ -1061,4 +1085,79 @@ public class WListbox extends Listbox implements IMiniTable, TableValueChangeLis
 		return m_keyColumnIndex;
 	}
 
+	/**
+	 *  Adding a new row with the totals
+	 */
+	public void addTotals(ColumnInfo[] layout)
+	{
+		if (getRowCount() == 0 || layout.length == 0)
+			return;
+		
+		Object[] total = new Object[layout.length];
+		
+		for (int row = 0 ; row < getRowCount(); row ++)
+		{
+
+				for (int col = 0; col < layout.length; col++)
+				{
+					Object data = getModel().getValueAt(row, col);
+					Class<?> c = layout[col].getColClass();
+					if (c == BigDecimal.class)
+					{	
+						BigDecimal subtotal = Env.ZERO;
+						if(total[col]!= null)
+							subtotal = (BigDecimal)(total[col]);
+							
+						BigDecimal amt =  (BigDecimal) data;
+						if(subtotal == null)
+							subtotal = Env.ZERO;
+						if(amt == null )
+							amt = Env.ZERO;
+						total[col] = subtotal.add(amt);
+					}
+					else if (c == Double.class)
+					{
+						Double subtotal = new Double(0);
+						if(total[col] != null)
+							subtotal = (Double)(total[col]);
+						
+						Double amt =  (Double) data;
+						if(subtotal == null)
+							subtotal = new Double(0);
+						if(amt == null )
+							subtotal = new Double(0);
+						total[col] = subtotal + amt;
+						
+					}		
+				}	
+		}
+		
+		//adding total row
+
+		int row = getRowCount() + 1;
+		setRowCount(row);
+		for (int col = 0; col < layout.length; col++)
+		{
+			Class<?> c = layout[col].getColClass();
+			if (c == BigDecimal.class)
+			{	
+				setValueAt(total[col] , row - 1, col);
+			}
+			else if (c == Double.class)
+			{
+				setValueAt(total[col] , row -1 , col);
+			}
+			else
+			{	
+				if(col == 0 )
+				{	
+					setValueAt(" Σ  " , row -1 , col);
+				}	
+				else
+					setValueAt(null , row - 1, col );	
+			}	
+			
+		}
+	}
+
 }
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
index eab74678a7..59a464f94e 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/dashboard/DashboardRunnable.java
@@ -88,7 +88,11 @@ public class DashboardRunnable implements Runnable, Serializable
 		boolean isEventThread = Events.inEventListener();
 		if (!isEventThread)
 		{
-			ctx = (Properties)template.getDesktop().getSession().getAttribute(SessionContextListener.SESSION_CTX);
+			try {
+				ctx = (Properties)template.getDesktop().getSession().getAttribute(SessionContextListener.SESSION_CTX);
+			} catch (Exception e) {
+				ctx = null;
+			}
 			if (ctx == null)
 				return;
 		}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java
index 31f72186eb..f19624bc23 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/editor/WLocatorEditor.java
@@ -349,7 +349,7 @@ public class WLocatorEditor extends WEditor implements EventListener<Event>, Pro
 			sql.append(" AND (IsDefault='Y' ")						//	Default Locator
 				.append("OR EXISTS (SELECT * FROM M_Product p ")	//	Product Locator
 				.append("WHERE p.M_Locator_ID=M_Locator.M_Locator_ID AND p.M_Product_ID=?)")
-				.append("OR EXISTS (SELECT * FROM M_Storage s ")	//	Storage Locator
+				.append("OR EXISTS (SELECT * FROM M_StorageOnHand s ")	//	Storage Locator
 				.append("WHERE s.M_Locator_ID=M_Locator.M_Locator_ID AND s.M_Product_ID=?))");
 		
 		String finalSql = MRole.getDefault(Env.getCtx(), false).addAccessSQL(
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java
index e88b7150a2..5de01d55a7 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/panel/InfoProductPanel.java
@@ -376,7 +376,8 @@ public class InfoProductPanel extends InfoPanel implements EventListener
         m_sqlWarehouse = warehouseTbl.prepareTable(s_layoutWarehouse, s_sqlFrom, s_sqlWhere, false, "M_PRODUCT_STOCK_V");
 		m_sqlWarehouse += " Group By Warehouse, documentnote ";
 		warehouseTbl.setMultiSelection(false);
-        warehouseTbl.autoSize();
+		warehouseTbl.setShowTotals(true);
+		warehouseTbl.autoSize();
         warehouseTbl.getModel().addTableModelListener(this);
 
         ColumnInfo[] s_layoutSubstitute = new ColumnInfo[]{
diff --git a/org.adempiere.ui/src/org/compiere/apps/form/Match.java b/org.adempiere.ui/src/org/compiere/apps/form/Match.java
index d90baa87fb..4872ab035f 100644
--- a/org.adempiere.ui/src/org/compiere/apps/form/Match.java
+++ b/org.adempiere.ui/src/org/compiere/apps/form/Match.java
@@ -31,7 +31,8 @@ import org.compiere.model.MMatchInv;
 import org.compiere.model.MMatchPO;
 import org.compiere.model.MOrderLine;
 import org.compiere.model.MRole;
-import org.compiere.model.MStorage;
+import org.compiere.model.MStorageOnHand;
+import org.compiere.model.MStorageReservation;
 import org.compiere.process.DocumentEngine;
 import org.compiere.util.CLogger;
 import org.compiere.util.DB;
@@ -491,11 +492,10 @@ public class Match
 					success = true;
 					//	Correct Ordered Qty for Stocked Products (see MOrder.reserveStock / MInOut.processIt)
 					if (sLine.getProduct() != null && sLine.getProduct().isStocked())
-						success = MStorage.add (Env.getCtx(), sLine.getM_Warehouse_ID(), 
-							sLine.getM_Locator_ID(), 
-							sLine.getM_Product_ID(), 
-							sLine.getM_AttributeSetInstance_ID(), oLine.getM_AttributeSetInstance_ID(), 
-							null, null, qty.negate(), trxName);
+						success = MStorageReservation.add (Env.getCtx(), sLine.getM_Warehouse_ID(),
+							sLine.getM_Product_ID(),
+							sLine.getM_AttributeSetInstance_ID(), oLine.getM_AttributeSetInstance_ID(),
+							qty.negate(), false, trxName);
 				}
 			}
 			else
diff --git a/org.adempiere.ui/src/org/compiere/minigrid/IMiniTable.java b/org.adempiere.ui/src/org/compiere/minigrid/IMiniTable.java
index 8c07e1c138..9322212b76 100644
--- a/org.adempiere.ui/src/org/compiere/minigrid/IMiniTable.java
+++ b/org.adempiere.ui/src/org/compiere/minigrid/IMiniTable.java
@@ -51,4 +51,7 @@ public interface IMiniTable
 	public void repaint();
 	
 	public void autoSize();
+	
+	public void setShowTotals(boolean show);
+
 }