hg merge release-2.1 (merge release2.1 into development)

This commit is contained in:
Carlos Ruiz 2015-05-20 21:04:05 -05:00
commit 376d6ea1ec
21 changed files with 326 additions and 26 deletions

View File

@ -27,8 +27,6 @@ AS
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y';
--
BEGIN

View File

@ -27,8 +27,6 @@ AS
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y';
--
BEGIN

View File

@ -27,8 +27,6 @@ AS
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y';
--
BEGIN

View File

@ -20,8 +20,6 @@ BEGIN
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);

View File

@ -20,8 +20,6 @@ BEGIN
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);

View File

@ -20,8 +20,6 @@ BEGIN
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND p.IsBOM='Y'
AND p.IsVerified='Y'
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);

View File

@ -0,0 +1,157 @@
CREATE OR REPLACE FUNCTION BOMPRICELIMIT
(
Product_ID IN NUMBER,
PriceList_Version_ID IN NUMBER
)
RETURN NUMBER
/*************************************************************************
* The contents of this file are subject to the Compiere License. You may
* obtain a copy of the License at http://www.compiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Compiere ERP+CRM
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: BOM_PriceLimit.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Return Limit Price of Product/BOM
* Description:
* if not found: 0
************************************************************************/
AS
v_Price NUMBER;
v_ProductPrice NUMBER;
-- Get BOM Product info
CURSOR CUR_BOM IS
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_PRODUCT_BOM b, M_PRODUCT p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y';
--
BEGIN
-- Try to get price from PriceList directly
SELECT COALESCE (SUM(PriceLimit), 0)
INTO v_Price
FROM M_PRODUCTPRICE
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN CUR_BOM LOOP
v_ProductPrice := Bompricelimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
END LOOP;
END IF;
--
RETURN v_Price;
END Bompricelimit;
/
CREATE OR REPLACE FUNCTION BOMPRICELIST
(
Product_ID IN NUMBER,
PriceList_Version_ID IN NUMBER
)
RETURN NUMBER
/*************************************************************************
* The contents of this file are subject to the Compiere License. You may
* obtain a copy of the License at http://www.compiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Compiere ERP+CRM
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: BOM_PriceList.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Return List Price of Product/BOM
* Description:
* if not found: 0
************************************************************************/
AS
v_Price NUMBER;
v_ProductPrice NUMBER;
-- Get BOM Product info
CURSOR CUR_BOM IS
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_PRODUCT_BOM b, M_PRODUCT p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y';
--
BEGIN
-- Try to get price from pricelist directly
SELECT COALESCE (SUM(PriceList), 0)
INTO v_Price
FROM M_PRODUCTPRICE
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- DBMS_OUTPUT.PUT_LINE('Price=' || Price);
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN CUR_BOM LOOP
v_ProductPrice := Bompricelist (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
-- DBMS_OUTPUT.PUT_LINE('Qry=' || bom.BOMQty || ' @ ' || v_ProductPrice || ', Price=' || v_Price);
END LOOP; -- BOM
END IF;
--
RETURN v_Price;
END Bompricelist;
/
CREATE OR REPLACE FUNCTION BOMPRICESTD
(
Product_ID IN NUMBER,
PriceList_Version_ID IN NUMBER
)
RETURN NUMBER
/*************************************************************************
* The contents of this file are subject to the Compiere License. You may
* obtain a copy of the License at http://www.compiere.org/license.html
* Software is on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the License for details. Code: Compiere ERP+CRM
* Copyright (C) 1999-2002 Jorg Janke, ComPiere, Inc. All Rights Reserved.
*************************************************************************
* $Id: BOM_PriceStd.sql,v 1.1 2006/04/21 17:51:58 jjanke Exp $
***
* Title: Return Standard Price of Product/BOM
* Description:
* if not found: 0
************************************************************************/
AS
v_Price NUMBER;
v_ProductPrice NUMBER;
-- Get BOM Product info
CURSOR CUR_BOM IS
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_PRODUCT_BOM b, M_PRODUCT p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y';
--
BEGIN
-- Try to get price from pricelist directly
SELECT COALESCE(SUM(PriceStd), 0)
INTO v_Price
FROM M_PRODUCTPRICE
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN CUR_BOM LOOP
v_ProductPrice := Bompricestd (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
-- DBMS_OUTPUT.PUT_LINE('Price=' || v_Price);
END LOOP; -- BOM
END IF;
--
RETURN v_Price;
END Bompricestd;
/
SELECT register_migration_script('201505201243_IDEMPIERE-2625.sql') FROM dual
;

View File

@ -0,0 +1,113 @@
CREATE OR REPLACE FUNCTION bompricelimit (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
$BODY$
DECLARE
v_Price NUMERIC;
v_ProductPrice NUMERIC;
bom RECORD;
BEGIN
-- Try to get price from PriceList directly
SELECT COALESCE (SUM(PriceLimit), 0)
INTO v_Price
FROM M_ProductPrice
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_Product_BOM b, M_Product p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceLimit (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
END LOOP;
END IF;
--
RETURN v_Price;
END;
$BODY$
LANGUAGE 'plpgsql' STABLE
;
CREATE OR REPLACE FUNCTION bompricelist (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
$BODY$
DECLARE
v_Price NUMERIC;
v_ProductPrice NUMERIC;
bom RECORD;
BEGIN
-- Try to get price from pricelist directly
SELECT COALESCE (SUM(PriceList), 0)
INTO v_Price
FROM M_ProductPrice
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_Product_BOM b, M_Product p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceList (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
END LOOP;
END IF;
--
RETURN v_Price;
END;
$BODY$
LANGUAGE 'plpgsql' STABLE
;
CREATE OR REPLACE FUNCTION bompricestd (in product_id numeric, in pricelist_version_id numeric) RETURNS numeric AS
$BODY$
DECLARE
v_Price NUMERIC;
v_ProductPrice NUMERIC;
bom RECORD;
BEGIN
-- Try to get price from PriceList directly
SELECT COALESCE(SUM(PriceStd), 0)
INTO v_Price
FROM M_ProductPrice
WHERE M_PriceList_Version_ID=PriceList_Version_ID AND M_Product_ID=Product_ID;
-- No Price - Check if BOM
IF (v_Price = 0) THEN
FOR bom IN
SELECT b.M_ProductBOM_ID, b.BOMQty, p.IsBOM
FROM M_Product_BOM b, M_Product p
WHERE b.M_ProductBOM_ID=p.M_Product_ID
AND b.M_Product_ID=Product_ID
AND b.M_ProductBOM_ID != Product_ID
AND b.IsActive='Y'
LOOP
v_ProductPrice := bomPriceStd (bom.M_ProductBOM_ID, PriceList_Version_ID);
v_Price := v_Price + (bom.BOMQty * v_ProductPrice);
END LOOP;
END IF;
--
RETURN v_Price;
END;
$BODY$
LANGUAGE 'plpgsql' STABLE
;
SELECT register_migration_script('201505201243_IDEMPIERE-2625.sql') FROM dual
;

View File

@ -76,6 +76,8 @@ public class CopyFromBankStmt extends SvrProcess
for (MBankStatementLine fromLine : from.getLines(false))
{
if (!fromLine.isActive())
continue;
if (fromLine.getC_Payment_ID() > 0)
{
// check if payment is used on another statement

View File

@ -101,10 +101,12 @@ public class Doc_BankStatement extends Doc
for (int i = 0; i < lines.length; i++)
{
MBankStatementLine line = lines[i];
if(line.isActive())
{
DocLine_Bank docLine = new DocLine_Bank(line, this);
list.add(docLine);
}
}
// Return Array
DocLine[] dls = new DocLine[list.size()];

View File

@ -317,6 +317,8 @@ public class MBankStatement extends X_C_BankStatement implements DocAction
for (int i = 0; i < lines.length; i++)
{
MBankStatementLine line = lines[i];
if (!line.isActive())
continue;
total = total.add(line.getStmtAmt());
if (line.getDateAcct().before(minDate))
minDate = line.getDateAcct();

View File

@ -170,8 +170,6 @@ public class Language implements Serializable
StringBuilder msglog = new StringBuilder("Adding Language=").append(language).append(", Country=").append(country).append(", Locale=").append(locale);
log.info (msglog.toString());
}
StringBuilder msglog = new StringBuilder("Adding Language=").append(language).append(", Country=").append(country).append(", Locale=").append(locale);
log.warning(msglog.toString());
if (idxReplace >= 0) {
s_languages.set(idxReplace, ll);
} else {

View File

@ -2053,6 +2053,9 @@ public abstract class AbstractADWindowContent extends AbstractUIPart implements
adTabbox.getSelectedGridTab().dataRefreshAll(true, true);
adTabbox.getSelectedGridTab().refreshParentTabs();
statusBar.setStatusLine(statusLine);
if( adTabbox.getSelectedDetailADTabpanel() != null &&
adTabbox.getSelectedDetailADTabpanel().getGridTab() != null )
adTabbox.getSelectedDetailADTabpanel().getGridTab().dataRefreshAll(true, true);
}
if (dirtyTabpanel != null) {
if (dirtyTabpanel == adTabbox.getSelectedDetailADTabpanel())

View File

@ -162,7 +162,11 @@ public final class AEnv
if (AD_Window_ID == 0)
return;
MTable table = MTable.get(Env.getCtx(), AD_Table_ID);
zoom(AD_Window_ID, MQuery.getEqualQuery(table.getKeyColumns()[0], Record_ID));
MQuery query = MQuery.getEqualQuery(table.getKeyColumns()[0], Record_ID);
query.setZoomTableName(table.getTableName());
query.setZoomColumnName(table.getKeyColumns()[0]);
query.setZoomValue(Record_ID);
zoom(AD_Window_ID, query);
} // zoom
/*************************************************************************

View File

@ -211,6 +211,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
infoWindow = MInfoWindow.get(p_keyColumn.replace("_ID", ""), null);
addEventListener(WindowContainer.ON_WINDOW_CONTAINER_SELECTION_CHANGED_EVENT, this);
addEventListener(ON_RUN_PROCESS, this);
addEventListener(Events.ON_CLOSE, this);
} // InfoPanel
@ -1441,7 +1442,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
// do nothing when parameter not change and at window mode, or at dialog mode but select non record
onOk();
}
}else if (event.getName().equals(Events.ON_CANCEL)){
}else if (event.getName().equals(Events.ON_CANCEL) || (event.getTarget().equals(this) && event.getName().equals(Events.ON_CLOSE))){
m_cancel = true;
dispose(false);
}

View File

@ -73,7 +73,7 @@ public abstract class CreateFromRMA extends CreateFrom {
sqlStmt.append("SELECT iol.M_InOutLine_ID, iol.Line, ");
sqlStmt.append("COALESCE(p.Name, c.Name) AS ProductName, ");
sqlStmt.append("iol.QtyEntered, ");
sqlStmt.append("iol.movementQty, ");
sqlStmt.append("iol.movementQty-(SELECT COALESCE((SELECT SUM(rmal.qty) FROM M_RMALine rmal JOIN M_RMA rma ON rma.M_RMA_ID=rmal.M_RMA_ID WHERE rmal.M_InOutLine_ID=iol.M_InOutLine_ID AND rma.DocStatus IN ('CO','CL')),0)) AS MovementQty, ");
sqlStmt.append("CASE WHEN iol.M_AttributeSetInstance_ID IS NOT NULL THEN (SELECT SerNo FROM M_AttributeSetInstance asi WHERE asi.M_AttributeSetInstance_ID=iol.M_AttributeSetInstance_ID) END as ASI ");
sqlStmt.append("FROM M_InOutLine iol ");
sqlStmt.append("LEFT JOIN M_Product p ON p.M_Product_ID = iol.M_Product_ID ");
@ -136,7 +136,7 @@ public abstract class CreateFromRMA extends CreateFrom {
miniTable.setColumnClass(2, String.class, true); // 2-Product
miniTable.setColumnClass(3, String.class, true); // 3-ASI
miniTable.setColumnClass(4, BigDecimal.class, true); // 4-Qty
miniTable.setColumnClass(5, BigDecimal.class, true); // 5-Delivered Qty
miniTable.setColumnClass(5, BigDecimal.class, false); // 5-Delivered Qty
// Table UI
miniTable.autoSize();

View File

@ -1362,6 +1362,8 @@ public class DB_Oracle implements AdempiereDatabase
}
rs = stmt.executeQuery();
if (rs.next()) {
// reload the record being locked - it could have changed in a different thread - IDEMPIERE-2629
po.load(po.get_TrxName());
return true;
} else {
return false;

View File

@ -1089,6 +1089,8 @@ public class DB_PostgreSQL implements AdempiereDatabase
rs = stmt.executeQuery();
if (rs.next()) {
// reload the record being locked - it could have changed in a different thread - IDEMPIERE-2629
po.load(po.get_TrxName());
return true;
} else {
return false;

View File

@ -11,9 +11,27 @@ the new webservice will have the following parameters:
Note, if you need to define new datatypes you need to define them in WEB-INF/xsd/idempiere-schema.xsd
and generate the idempiere-xmlbeans.jar again with this command:
scomp -out ./WEB-INF/lib/idempiere-xmlbeans.jar ./WEB-INF/xsd/idempiere-schema.xsd
scomp will generate the corresponding classes to manipulate the xml objects from the messages
To install xmlbeans Git Clone URL: git://git.apache.org/xmlbeans.git
cd xmlbeans/
./xbeanenv.sh
ant
Environment example:
export XMLBEANS_HOME=/opt/xmlbeans
export PATH=$PATH:$XMLBEANS_HOME/bin
export XMLBEANS_LIB=$XMLBEANS_HOME/build/lib
export JAVA_HOME=/usr/lib/jvm/java-1.7.0...(your path)
Apps:
ant
svn
git
The method will be called modelSetDocAction - the model in name indicates that the web service is going to be based on model classes, current web services are based in UI instead of model.

View File

@ -1478,6 +1478,9 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
POInfo poinfo = POInfo.getPOInfo(ctx, table.getAD_Table_ID());
int cnt = 0;
int rowCnt = 0;
int offset = modelCRUD.getOffset();
int limit = modelCRUD.getLimit();
PreparedStatement pstmtquery = null;
ResultSet rsquery = null;
@ -1539,6 +1542,9 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
DataSet ds = resp.addNewDataSet();
while (rsquery.next ()) {
cnt++;
if ((offset >= cnt) || (limit > 0 && offset+limit < cnt))
continue;
rowCnt++;
DataRow dr = ds.addNewDataRow();
for (int i = 0; i < poinfo.getColumnCount(); i++) {
String columnName = poinfo.getColumnName(i);
@ -1561,10 +1567,10 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic
}
resp.setSuccess(true);
resp.setRowCount(cnt);
resp.setNumRows(cnt);
resp.setRowCount(rowCnt);
resp.setNumRows(rowCnt);
resp.setTotalRows(cnt);
resp.setStartRow(1);
resp.setStartRow(offset);
return ret;
} finally {

View File

@ -263,6 +263,8 @@
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Offset" type="xsd:int" maxOccurs="1" minOccurs="0"/>
<xsd:element name="Limit" type="xsd:int" maxOccurs="1" minOccurs="0"/>
<xsd:element name="DataRow" type="tns:DataRow" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>