hg merge release-3.1 (merge release3.1 into development)
This commit is contained in:
commit
2f05d731c1
|
@ -0,0 +1,10 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- Jun 6, 2016 10:53:34 AM SGT
|
||||
-- IDEMPIERE-2668 Exclude Locators for Demand Operations
|
||||
UPDATE AD_Field SET IsMandatory='Y',Updated=TO_DATE('2016-06-06 10:53:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200649
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201606061100_IDEMPIERE-2668.sql') FROM dual
|
||||
;
|
|
@ -0,0 +1,10 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator
|
||||
-- Aug 15, 2016 10:12:48 AM BRT
|
||||
UPDATE AD_Column SET IsAllowCopy='N',Updated=TO_DATE('2016-08-15 10:12:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3075
|
||||
;
|
||||
|
||||
SELECT register_migration_script('20160815103455_IDEMPIERE-3158.sql') FROM dual
|
||||
;
|
|
@ -0,0 +1,27 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-3171 Can't add record on POS Terminal, IDEMPIERE-170
|
||||
-- Sep 3, 2016 2:31:03 PM GMT+01:00
|
||||
UPDATE AD_Field SET IsDisplayed='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsDisplayedGrid='N', IsToolbarButton=NULL,Updated=TO_DATE('2016-09-03 14:31:03','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10802
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:31:33 PM GMT+01:00
|
||||
UPDATE AD_Column SET IsMandatory='N',Updated=TO_DATE('2016-09-03 14:31:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=12750
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:31:40 PM GMT+01:00
|
||||
UPDATE AD_Field SET DefaultValue='-1', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_DATE('2016-09-03 14:31:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10802
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:39:09 PM GMT+01:00
|
||||
ALTER TABLE C_POS MODIFY C_CashBook_ID NUMBER(10) DEFAULT NULL
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:39:09 PM GMT+01:00
|
||||
ALTER TABLE C_POS MODIFY C_CashBook_ID NULL
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031532_IDEMPIERE-3171.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-3173 Columns that must not be copied
|
||||
-- Sep 3, 2016 2:45:57 PM GMT+01:00
|
||||
UPDATE AD_Column SET IsAllowCopy='N',Updated=TO_DATE('2016-09-03 14:45:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2925
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031546_IDEMPIERE-3173.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
SET SQLBLANKLINES ON
|
||||
SET DEFINE OFF
|
||||
|
||||
-- IDEMPIERE-2676 Incorrect context variables - onNavigate Callout
|
||||
-- Sep 3, 2016 3:07:56 PM GMT+01:00
|
||||
UPDATE AD_Column SET Callout='org.compiere.model.CalloutOrder.priceListReadOnly', IsUpdateable='N',Updated=TO_DATE('2016-09-03 15:07:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2161
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 3:08:09 PM GMT+01:00
|
||||
UPDATE AD_Column SET Callout='org.compiere.model.CalloutOrder.priceListReadOnly', IsUpdateable='N',Updated=TO_DATE('2016-09-03 15:08:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3484
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031608_IDEMPIERE-2676.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
-- Jun 6, 2016 10:53:34 AM SGT
|
||||
-- IDEMPIERE-2668 Exclude Locators for Demand Operations
|
||||
UPDATE AD_Field SET IsMandatory='Y',Updated=TO_TIMESTAMP('2016-06-06 10:53:34','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=200649
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201606061100_IDEMPIERE-2668.sql') FROM dual
|
||||
;
|
|
@ -0,0 +1,7 @@
|
|||
-- I forgot to set the DICTIONARY_ID_COMMENTS System Configurator
|
||||
-- Aug 15, 2016 10:12:48 AM BRT
|
||||
UPDATE AD_Column SET IsAllowCopy='N',Updated=TO_TIMESTAMP('2016-08-15 10:12:48','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3075
|
||||
;
|
||||
|
||||
SELECT register_migration_script('20160815103455_IDEMPIERE-3158.sql') FROM dual
|
||||
;
|
|
@ -0,0 +1,24 @@
|
|||
-- IDEMPIERE-3171 Can't add record on POS Terminal, IDEMPIERE-170
|
||||
-- Sep 3, 2016 2:31:03 PM GMT+01:00
|
||||
UPDATE AD_Field SET IsDisplayed='N', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsDisplayedGrid='N', IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2016-09-03 14:31:03','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10802
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:31:33 PM GMT+01:00
|
||||
UPDATE AD_Column SET IsMandatory='N',Updated=TO_TIMESTAMP('2016-09-03 14:31:33','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=12750
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:31:40 PM GMT+01:00
|
||||
UPDATE AD_Field SET DefaultValue='-1', AD_Reference_Value_ID=NULL, AD_Val_Rule_ID=NULL, IsToolbarButton=NULL,Updated=TO_TIMESTAMP('2016-09-03 14:31:40','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Field_ID=10802
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:39:09 PM GMT+01:00
|
||||
INSERT INTO t_alter_column values('c_pos','C_CashBook_ID','NUMERIC(10)',null,'NULL')
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 2:39:09 PM GMT+01:00
|
||||
INSERT INTO t_alter_column values('c_pos','C_CashBook_ID',null,'NULL',null)
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031532_IDEMPIERE-3171.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
-- IDEMPIERE-3173 Columns that must not be copied
|
||||
-- Sep 3, 2016 2:45:57 PM GMT+01:00
|
||||
UPDATE AD_Column SET IsAllowCopy='N',Updated=TO_TIMESTAMP('2016-09-03 14:45:57','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2925
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031546_IDEMPIERE-3173.sql') FROM dual
|
||||
;
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
-- IDEMPIERE-2676 Incorrect context variables - onNavigate Callout
|
||||
-- Sep 3, 2016 3:07:56 PM GMT+01:00
|
||||
UPDATE AD_Column SET Callout='org.compiere.model.CalloutOrder.priceListReadOnly', IsUpdateable='N',Updated=TO_TIMESTAMP('2016-09-03 15:07:56','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=2161
|
||||
;
|
||||
|
||||
-- Sep 3, 2016 3:08:09 PM GMT+01:00
|
||||
UPDATE AD_Column SET Callout='org.compiere.model.CalloutOrder.priceListReadOnly', IsUpdateable='N',Updated=TO_TIMESTAMP('2016-09-03 15:08:09','YYYY-MM-DD HH24:MI:SS'),UpdatedBy=100 WHERE AD_Column_ID=3484
|
||||
;
|
||||
|
||||
SELECT register_migration_script('201609031608_IDEMPIERE-2676.sql') FROM dual
|
||||
;
|
||||
|
|
@ -160,14 +160,10 @@ 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_StorageOnHand "
|
||||
String sql = "SELECT SUM(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_StorageOnHand "
|
||||
+ "WHERE M_Product_ID=?" // 1
|
||||
+ " AND M_Locator_ID=?"; // 2
|
||||
+ " AND M_AttributeSetInstance_ID=?"; //3
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
|
@ -175,7 +171,6 @@ public class CalloutInventory extends CalloutEngine
|
|||
pstmt = DB.prepareStatement(sql, null);
|
||||
pstmt.setInt(1, M_Product_ID);
|
||||
pstmt.setInt(2, M_Locator_ID);
|
||||
if (M_AttributeSetInstance_ID != 0)
|
||||
pstmt.setInt(3, M_AttributeSetInstance_ID);
|
||||
rs = pstmt.executeQuery();
|
||||
if (rs.next())
|
||||
|
|
|
@ -661,9 +661,10 @@ public class CalloutOrder extends CalloutEngine
|
|||
* @param mTab Grid Tab
|
||||
* @param mField Grid Field
|
||||
* @param value New Value
|
||||
* @param readonly Read Only - do not set tab fields, just context
|
||||
* @return null or error message
|
||||
*/
|
||||
public String priceList (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
|
||||
public String priceListFill (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value, boolean readonly)
|
||||
{
|
||||
Integer M_PriceList_ID = (Integer) mTab.getValue("M_PriceList_ID");
|
||||
if (M_PriceList_ID == null || M_PriceList_ID.intValue()== 0)
|
||||
|
@ -695,12 +696,16 @@ public class CalloutOrder extends CalloutEngine
|
|||
if (rs.next())
|
||||
{
|
||||
// Tax Included
|
||||
if (!readonly) {
|
||||
mTab.setValue("IsTaxIncluded", new Boolean("Y".equals(rs.getString(1))));
|
||||
}
|
||||
// Price Limit Enforce
|
||||
Env.setContext(ctx, WindowNo, "EnforcePriceLimit", rs.getString(2));
|
||||
// Currency
|
||||
if (!readonly) {
|
||||
Integer ii = new Integer(rs.getInt(3));
|
||||
mTab.setValue("C_Currency_ID", ii);
|
||||
}
|
||||
// PriceList Version
|
||||
Env.setContext(ctx, WindowNo, "M_PriceList_Version_ID", rs.getInt(5));
|
||||
}
|
||||
|
@ -718,8 +723,18 @@ public class CalloutOrder extends CalloutEngine
|
|||
if (steps) log.warning("fini");
|
||||
|
||||
return "";
|
||||
} // priceListFill
|
||||
|
||||
public String priceList (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
|
||||
{
|
||||
return priceListFill (ctx, WindowNo, mTab, mField, value, false);
|
||||
} // priceList
|
||||
|
||||
/* IDEMPIERE-2676 - this is same callout priceList but not setting any variable, just reading and setting context, called on navigate */
|
||||
public String priceListReadOnly (Properties ctx, int WindowNo, GridTab mTab, GridField mField, Object value)
|
||||
{
|
||||
return priceListFill (ctx, WindowNo, mTab, mField, value, true);
|
||||
} // priceListReadOnly
|
||||
|
||||
/**
|
||||
* Set Payment Term.
|
||||
|
|
|
@ -525,7 +525,7 @@ public class ImportInvoice extends SvrProcess
|
|||
imp.setName (imp.getBPartnerValue ());
|
||||
}
|
||||
// BPartner
|
||||
MBPartner bp = MBPartner.get (getCtx(), imp.getBPartnerValue());
|
||||
MBPartner bp = MBPartner.get (getCtx(), imp.getBPartnerValue(), get_TrxName());
|
||||
if (bp == null)
|
||||
{
|
||||
bp = new MBPartner (getCtx (), -1, get_TrxName());
|
||||
|
|
|
@ -525,7 +525,7 @@ public class ImportOrder extends SvrProcess
|
|||
imp.setName (imp.getBPartnerValue ());
|
||||
}
|
||||
// BPartner
|
||||
MBPartner bp = MBPartner.get (getCtx(), imp.getBPartnerValue());
|
||||
MBPartner bp = MBPartner.get (getCtx(), imp.getBPartnerValue(), get_TrxName());
|
||||
if (bp == null)
|
||||
{
|
||||
bp = new MBPartner (getCtx (), -1, get_TrxName());
|
||||
|
|
|
@ -16,18 +16,12 @@
|
|||
*****************************************************************************/
|
||||
package org.compiere.process;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import org.compiere.model.MInventory;
|
||||
import org.compiere.model.MInventoryLine;
|
||||
import org.compiere.model.MInventoryLineMA;
|
||||
import org.compiere.model.MStorageOnHand;
|
||||
import org.compiere.util.AdempiereSystemError;
|
||||
import org.compiere.util.DB;
|
||||
import org.compiere.util.Env;
|
||||
|
||||
/**
|
||||
* Update existing Inventory Count List with current Book value
|
||||
|
@ -92,7 +86,7 @@ public class InventoryCountUpdate extends SvrProcess
|
|||
// ASI
|
||||
sql = new StringBuilder("UPDATE M_InventoryLine l ")
|
||||
.append("SET (QtyBook,QtyCount) = ")
|
||||
.append("(SELECT QtyOnHand,QtyOnHand FROM M_StorageOnHand s ")
|
||||
.append("(SELECT SUM(QtyOnHand),SUM(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,")
|
||||
|
@ -105,9 +99,6 @@ public class InventoryCountUpdate extends SvrProcess
|
|||
int no = DB.executeUpdate(sql.toString(), get_TrxName());
|
||||
if (log.isLoggable(Level.INFO)) log.info("Update with ASI=" + no);
|
||||
|
||||
// No ASI
|
||||
int noMA = updateWithMA();
|
||||
|
||||
// Set Count to Zero
|
||||
if (p_InventoryCountSetZero)
|
||||
{
|
||||
|
@ -119,71 +110,11 @@ public class InventoryCountUpdate extends SvrProcess
|
|||
}
|
||||
|
||||
if (multiple > 0){
|
||||
StringBuilder msgreturn = new StringBuilder("@M_InventoryLine_ID@ - #").append((no + noMA)).append(" --> @InventoryProductMultiple@");
|
||||
StringBuilder msgreturn = new StringBuilder("@M_InventoryLine_ID@ - #").append(no).append(" --> @InventoryProductMultiple@");
|
||||
return msgreturn.toString();
|
||||
}
|
||||
StringBuilder msgreturn = new StringBuilder("@M_InventoryLine_ID@ - #").append(no);
|
||||
return msgreturn.toString();
|
||||
} // doIt
|
||||
|
||||
/**
|
||||
* Update Inventory Lines With Material Allocation
|
||||
* @return no updated
|
||||
*/
|
||||
private int updateWithMA()
|
||||
{
|
||||
int no = 0;
|
||||
//
|
||||
String sql = "SELECT * FROM M_InventoryLine WHERE M_Inventory_ID=? AND M_AttributeSetInstance_ID=0";
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{
|
||||
pstmt = DB.prepareStatement (sql, get_TrxName());
|
||||
pstmt.setInt (1, p_M_Inventory_ID);
|
||||
rs = pstmt.executeQuery ();
|
||||
while (rs.next ())
|
||||
{
|
||||
MInventoryLine il = new MInventoryLine (getCtx(), rs, get_TrxName());
|
||||
BigDecimal onHand = Env.ZERO;
|
||||
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++)
|
||||
{
|
||||
MStorageOnHand storage = storages[i];
|
||||
if (storage.getQtyOnHand().signum() == 0)
|
||||
continue;
|
||||
onHand = onHand.add(storage.getQtyOnHand());
|
||||
// No ASI
|
||||
if (storage.getM_AttributeSetInstance_ID() == 0
|
||||
&& storages.length == 1)
|
||||
continue;
|
||||
// Save ASI
|
||||
ma = new MInventoryLineMA (il,
|
||||
storage.getM_AttributeSetInstance_ID(), storage.getQtyOnHand(),storage.getDateMaterialPolicy(),true);
|
||||
if (!ma.save())
|
||||
;
|
||||
}
|
||||
il.setQtyBook(onHand);
|
||||
il.setQtyCount(onHand);
|
||||
if (il.save())
|
||||
no++;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
log.log (Level.SEVERE, sql, e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
DB.close(rs, pstmt);
|
||||
rs = null;
|
||||
pstmt = null;
|
||||
}
|
||||
//
|
||||
if (log.isLoggable(Level.INFO)) log.info("#" + no);
|
||||
return no;
|
||||
} // updateWithMA
|
||||
|
||||
|
||||
} // InventoryCountUpdate
|
||||
|
|
|
@ -1464,30 +1464,33 @@ public class GridTabCSVImporter implements IGridTabImporter
|
|||
systemAccess = true;
|
||||
}
|
||||
}
|
||||
int thisClientId = Env.getAD_Client_ID(Env.getCtx());
|
||||
|
||||
String trxName = (trx!=null?trx.getTrxName():null);
|
||||
|
||||
StringBuilder postSelect = new StringBuilder(" FROM ")
|
||||
.append(foreignTable).append(" WHERE ")
|
||||
.append(foreignColumn).append("=? AND IsActive='Y' AND AD_Client_ID");
|
||||
if (systemAccess) {
|
||||
postSelect.append(" IN (0,?)");
|
||||
} else {
|
||||
postSelect.append("=?");
|
||||
}
|
||||
.append(foreignColumn).append("=? AND IsActive='Y' AND AD_Client_ID=?");
|
||||
|
||||
StringBuilder selectCount = new StringBuilder("SELECT COUNT(*)").append(postSelect);
|
||||
int count = DB.getSQLValueEx(trxName, selectCount.toString(), value, Env.getAD_Client_ID(Env.getCtx()));
|
||||
if (count == 1) { // single value found, OK
|
||||
StringBuilder selectId = new StringBuilder("SELECT ").append(foreignTable).append("_ID").append(postSelect);
|
||||
id = DB.getSQLValueEx(trxName, selectId.toString(), value, Env.getAD_Client_ID(Env.getCtx()));
|
||||
int count = DB.getSQLValueEx(trxName, selectCount.toString(), value, thisClientId);
|
||||
if (count == 1) { // single value found, OK
|
||||
return DB.getSQLValueEx(trxName, selectId.toString(), value, thisClientId);
|
||||
} else if (count > 1) { // multiple values found, error ForeignMultipleResolved
|
||||
id = -2;
|
||||
return -2;
|
||||
} else if (count == 0) { // no values found, error ForeignNotResolved
|
||||
id = -3;
|
||||
if (systemAccess && thisClientId != 0) {
|
||||
// not found in client, try with System
|
||||
count = DB.getSQLValueEx(trxName, selectCount.toString(), value, 0 /* System */);
|
||||
if (count == 1) { // single value found, OK
|
||||
return DB.getSQLValueEx(trxName, selectId.toString(), value, 0 /* System */);
|
||||
} else if (count > 1) { // multiple values found, error ForeignMultipleResolved
|
||||
return -2;
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
}
|
||||
return -3; // no values found, error ForeignNotResolved
|
||||
}
|
||||
|
||||
//Copy from GridTable
|
||||
|
|
|
@ -3543,6 +3543,7 @@ public class GridTable extends AbstractTableModel
|
|||
|
||||
private void openResultSet() {
|
||||
//postgresql need trx to use cursor based resultset
|
||||
//https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor
|
||||
String trxName = m_virtual ? Trx.createTrxName("Loader") : null;
|
||||
trx = trxName != null ? Trx.get(trxName, true) : null;
|
||||
// open Statement (closed by Loader.close)
|
||||
|
|
|
@ -47,7 +47,7 @@ public class MBPartner extends X_C_BPartner
|
|||
/**
|
||||
*
|
||||
*/
|
||||
private static final long serialVersionUID = -5503105554864289337L;
|
||||
private static final long serialVersionUID = -803727877324075871L;
|
||||
|
||||
/**
|
||||
* Get Empty Template Business Partner
|
||||
|
@ -110,12 +110,23 @@ public class MBPartner extends X_C_BPartner
|
|||
* @param Value value
|
||||
* @return BPartner or null
|
||||
*/
|
||||
public static MBPartner get (Properties ctx, String Value)
|
||||
public static MBPartner get (Properties ctx, String Value) {
|
||||
return get(ctx,Value,null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get BPartner with Value in a transaction
|
||||
* @param ctx context
|
||||
* @param Value value
|
||||
* @param trxName transaction
|
||||
* @return BPartner or null
|
||||
*/
|
||||
public static MBPartner get (Properties ctx, String Value, String trxName)
|
||||
{
|
||||
if (Value == null || Value.length() == 0)
|
||||
return null;
|
||||
final String whereClause = "Value=? AND AD_Client_ID=?";
|
||||
MBPartner retValue = new Query(ctx, I_C_BPartner.Table_Name, whereClause, null)
|
||||
MBPartner retValue = new Query(ctx, I_C_BPartner.Table_Name, whereClause, trxName)
|
||||
.setParameters(Value,Env.getAD_Client_ID(ctx))
|
||||
.firstOnly();
|
||||
return retValue;
|
||||
|
@ -128,9 +139,22 @@ public class MBPartner extends X_C_BPartner
|
|||
* @return BPartner or null
|
||||
*/
|
||||
public static MBPartner get (Properties ctx, int C_BPartner_ID)
|
||||
{
|
||||
return get(ctx,C_BPartner_ID,null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get BPartner with Value in a transaction
|
||||
* @param ctx context
|
||||
* @param Value value
|
||||
* @param trxName transaction
|
||||
* @return BPartner or null
|
||||
*/
|
||||
public static MBPartner get (Properties ctx, int C_BPartner_ID, String trxName)
|
||||
{
|
||||
final String whereClause = "C_BPartner_ID=? AND AD_Client_ID=?";
|
||||
MBPartner retValue = new Query(ctx,I_C_BPartner.Table_Name,whereClause,null)
|
||||
MBPartner retValue = new Query(ctx,I_C_BPartner.Table_Name,whereClause,trxName)
|
||||
.setParameters(C_BPartner_ID,Env.getAD_Client_ID(ctx))
|
||||
.firstOnly();
|
||||
return retValue;
|
||||
|
|
|
@ -144,6 +144,11 @@ public class MField extends X_AD_Field
|
|||
if (getAD_Column().getColumnName().equals("AD_Org_ID")) // AD_Org_ID can be copied
|
||||
setIsAllowCopy("Y");
|
||||
}
|
||||
if (getAD_Reference_ID() <= 0) {
|
||||
setAD_Reference_Value_ID(0);
|
||||
setAD_Val_Rule_ID(0);
|
||||
setIsToolbarButton(null);
|
||||
}
|
||||
|
||||
return true;
|
||||
} // beforeSave
|
||||
|
|
|
@ -120,15 +120,17 @@ public class MPOS extends X_C_POS
|
|||
protected boolean beforeSave (boolean newRecord)
|
||||
{
|
||||
// Org Consistency
|
||||
if (newRecord
|
||||
|| is_ValueChanged("C_CashBook_ID") || is_ValueChanged("M_Warehouse_ID"))
|
||||
if (newRecord || is_ValueChanged("C_BankAccount_ID"))
|
||||
{
|
||||
MCashBook cb = MCashBook.get(getCtx(), getC_CashBook_ID(), get_TrxName());
|
||||
MBankAccount cb = MBankAccount.get(getCtx(), getC_BankAccount_ID());
|
||||
if (cb.getAD_Org_ID() != getAD_Org_ID())
|
||||
{
|
||||
log.saveError("Error", Msg.parseTranslation(getCtx(), "@AD_Org_ID@: @C_CashBook_ID@"));
|
||||
log.saveError("Error", Msg.parseTranslation(getCtx(), "@AD_Org_ID@: @C_BankAccount_ID@"));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (newRecord || is_ValueChanged("M_Warehouse_ID"))
|
||||
{
|
||||
MWarehouse wh = MWarehouse.get(getCtx(), getM_Warehouse_ID(), get_TrxName());
|
||||
if (wh.getAD_Org_ID() != getAD_Org_ID())
|
||||
{
|
||||
|
|
|
@ -71,6 +71,7 @@ public class MPeriodControl extends X_C_PeriodControl
|
|||
{
|
||||
this (period.getCtx(), period.getAD_Client_ID(), period.getC_Period_ID(),
|
||||
DocBaseType, period.get_TrxName());
|
||||
setClientOrg(period);
|
||||
} // MPeriodControl
|
||||
|
||||
/**
|
||||
|
|
|
@ -456,7 +456,7 @@ public class MStorageOnHand extends X_M_StorageOnHand
|
|||
* @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 M_AttributeSetInstance_ID instance id, 0 to retrieve storages that don't have asi, -1 to retrieve all instance
|
||||
* @param minGuaranteeDate optional minimum guarantee date if all attribute instances
|
||||
* @param FiFo first in-first-out
|
||||
* @param M_Locator_ID optional locator id
|
||||
|
@ -476,7 +476,7 @@ public class MStorageOnHand extends X_M_StorageOnHand
|
|||
* @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 M_AttributeSetInstance_ID instance id, 0 to retrieve storages that don't have asi, -1 to retrieve all instance
|
||||
* @param minGuaranteeDate optional minimum guarantee date if all attribute instances
|
||||
* @param FiFo first in-first-out
|
||||
* @param M_Locator_ID optional locator id
|
||||
|
@ -492,31 +492,8 @@ public class MStorageOnHand extends X_M_StorageOnHand
|
|||
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,s.DateMaterialPolicy "
|
||||
+ "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)=? "
|
||||
+ " AND s.QtyOnHand < 0 ";
|
||||
sql += "ORDER BY l.PriorityNo DESC, DateMaterialPolicy ";
|
||||
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,s.DateMaterialPolicy "
|
||||
+ "FROM M_StorageOnHand s"
|
||||
|
@ -534,6 +511,15 @@ public class MStorageOnHand extends X_M_StorageOnHand
|
|||
sql += "AND (asi.GuaranteeDate IS NULL OR asi.GuaranteeDate>?) ";
|
||||
}
|
||||
|
||||
if (M_AttributeSetInstance_ID > 0)
|
||||
{
|
||||
sql += "AND s.M_AttributeSetInstance_ID=? ";
|
||||
}
|
||||
else if (M_AttributeSetInstance_ID == 0)
|
||||
{
|
||||
sql += "AND (s.M_AttributeSetInstance_ID=0 OR s.M_AttributeSetInstance_ID IS NULL) ";
|
||||
}
|
||||
|
||||
MProduct product = MProduct.get(Env.getCtx(), M_Product_ID);
|
||||
|
||||
if(product.isUseGuaranteeDateForMPolicy()){
|
||||
|
@ -550,21 +536,22 @@ public class MStorageOnHand extends X_M_StorageOnHand
|
|||
}
|
||||
|
||||
sql += ", s.QtyOnHand DESC";
|
||||
}
|
||||
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs = null;
|
||||
try
|
||||
{
|
||||
int index = 0;
|
||||
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(++index, M_Locator_ID > 0 ? M_Locator_ID : M_Warehouse_ID);
|
||||
pstmt.setInt(++index, M_Product_ID);
|
||||
if (minGuaranteeDate != null)
|
||||
{
|
||||
pstmt.setInt(3, M_AttributeSetInstance_ID);
|
||||
pstmt.setTimestamp(++index, minGuaranteeDate);
|
||||
}
|
||||
else if (minGuaranteeDate != null)
|
||||
if (M_AttributeSetInstance_ID > 0)
|
||||
{
|
||||
pstmt.setTimestamp(3, minGuaranteeDate);
|
||||
pstmt.setInt(++index, M_AttributeSetInstance_ID);
|
||||
}
|
||||
rs = pstmt.executeQuery();
|
||||
while (rs.next())
|
||||
|
|
|
@ -173,7 +173,7 @@ public class MUser extends X_AD_User
|
|||
{
|
||||
if (name == null || name.length() == 0 || password == null || password.length() == 0)
|
||||
{
|
||||
s_log.warning ("Invalid Name/Password = " + name + "/" + password);
|
||||
s_log.warning ("Invalid Name/Password = " + name);
|
||||
return null;
|
||||
}
|
||||
boolean hash_password = MSysConfig.getBooleanValue(MSysConfig.USER_PASSWORD_HASH, false);
|
||||
|
@ -198,7 +198,7 @@ public class MUser extends X_AD_User
|
|||
|
||||
List<MUser> users = new Query(ctx, MUser.Table_Name, where.toString(), null)
|
||||
.setParameters(name)
|
||||
.setOrderBy(MUser.COLUMNNAME_AD_User_ID)
|
||||
.setOrderBy("AD_Client_ID, AD_User_ID") // prefer first user on System
|
||||
.list();
|
||||
|
||||
if (users.size() == 0) {
|
||||
|
@ -223,6 +223,7 @@ public class MUser extends X_AD_User
|
|||
|
||||
if (valid){
|
||||
retValue=user;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -134,6 +134,11 @@ public class MUserDefField extends X_AD_UserDef_Field
|
|||
return false;
|
||||
}
|
||||
}
|
||||
if (getAD_Reference_ID() <= 0) {
|
||||
setAD_Reference_Value_ID(0);
|
||||
setAD_Val_Rule_ID(0);
|
||||
setIsToolbarButton(null);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -390,6 +390,15 @@ public final class Env
|
|||
ctx.setProperty(WindowNo+"|"+context, String.valueOf(value));
|
||||
} // setContext
|
||||
|
||||
public static void setContext (Properties ctx, int WindowNo, int TabNo, String context, int value)
|
||||
{
|
||||
if (ctx == null || context == null)
|
||||
return;
|
||||
if (log.isLoggable(Level.FINER)) log.finer("Context("+WindowNo+") " + context + "==" + value);
|
||||
//
|
||||
ctx.setProperty(WindowNo+"|"+TabNo+"|"+context, String.valueOf(value));
|
||||
} // setContext
|
||||
|
||||
/**
|
||||
* Set Context for Window to Y/N Value
|
||||
* @param ctx context
|
||||
|
|
|
@ -194,9 +194,9 @@ public class Evaluator
|
|||
secondEval = secondEval.replace('\'', ' ').replace('"', ' ').trim(); // strip ' and "
|
||||
|
||||
// Handling of ID compare (null => 0)
|
||||
if (first.indexOf("_ID") != -1 && firstEval.length() == 0)
|
||||
if (first.trim().endsWith("_ID") && firstEval.length() == 0)
|
||||
firstEval = "0";
|
||||
if (second.indexOf("_ID") != -1 && secondEval.length() == 0)
|
||||
if (second.trim().endsWith("_ID") && secondEval.length() == 0)
|
||||
secondEval = "0";
|
||||
|
||||
// Logical Comparison
|
||||
|
|
|
@ -489,7 +489,7 @@ public abstract class AbstractElementHandler implements ElementHandler {
|
|||
if (element.properties.containsKey(uuidColumn)) {
|
||||
uuid = element.properties.get(uuidColumn).contents.toString();
|
||||
}
|
||||
return (uuid != null && uuid.trim().length() == 36);
|
||||
return (uuid != null && uuid.trim().length() <= 36);
|
||||
}
|
||||
|
||||
protected String getUUIDKey(PIPOContext ctx, Element element) {
|
||||
|
@ -497,7 +497,7 @@ public abstract class AbstractElementHandler implements ElementHandler {
|
|||
String uuidColumn = PO.getUUIDColumnName(tableName);
|
||||
if (element.properties.containsKey(uuidColumn)) {
|
||||
String uuid = element.properties.get(uuidColumn).contents.toString();
|
||||
if (uuid != null && uuid.trim().length() == 36)
|
||||
if (uuid != null && uuid.trim().length() <= 36)
|
||||
return uuid.trim();
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -82,7 +82,7 @@ public class POFinder {
|
|||
String idColumn = tableName + "_ID";
|
||||
if (element.properties.containsKey(uuidColumn)) {
|
||||
String uuid = element.properties.get(uuidColumn).contents.toString();
|
||||
if (uuid != null && uuid.trim().length() == 36) {
|
||||
if (uuid != null && uuid.trim().length() <= 36) {
|
||||
uuid = uuid.trim();
|
||||
String targetUUID = Env.getAD_Client_ID(ctx.ctx) > 0 ? getTargetUUID(ctx.ctx, tableName, uuid, ctx.trx.getTrxName()) : uuid;
|
||||
Query query = new Query(ctx.ctx, tableName, uuidColumn+"=?", getTrxName(ctx));
|
||||
|
|
|
@ -164,7 +164,7 @@ public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFi
|
|||
}
|
||||
else
|
||||
{
|
||||
pageSize = MSysConfig.getIntValue(MSysConfig.ZK_PAGING_SIZE, DEFAULT_PAGE_SIZE);
|
||||
pageSize = MSysConfig.getIntValue(MSysConfig.ZK_PAGING_SIZE, DEFAULT_PAGE_SIZE, Env.getAD_Client_ID(Env.getCtx()));
|
||||
String limit = Library.getProperty(CustomGridDataLoader.GRID_DATA_LOADER_LIMIT);
|
||||
if (limit == null || !(limit.equals(Integer.toString(pageSize)))) {
|
||||
Library.setProperty(CustomGridDataLoader.GRID_DATA_LOADER_LIMIT, Integer.toString(pageSize));
|
||||
|
@ -197,7 +197,7 @@ public class GridView extends Vbox implements EventListener<Event>, IdSpace, IFi
|
|||
public void setDetailPaneMode(boolean detailPaneMode) {
|
||||
if (this.detailPaneMode != detailPaneMode) {
|
||||
this.detailPaneMode = detailPaneMode;
|
||||
pageSize = detailPaneMode ? DEFAULT_DETAIL_PAGE_SIZE : MSysConfig.getIntValue(MSysConfig.ZK_PAGING_SIZE, 20);
|
||||
pageSize = detailPaneMode ? DEFAULT_DETAIL_PAGE_SIZE : MSysConfig.getIntValue(MSysConfig.ZK_PAGING_SIZE, 20, Env.getAD_Client_ID(Env.getCtx()));
|
||||
updatePaging();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -319,7 +319,7 @@ public class BroadcastMessageWindow extends Window implements IBroadcastMsgPopup
|
|||
public MNote getMNote(MBroadcastMessage mbMessage) {
|
||||
MNote note =null;
|
||||
if(!mbMessage.getBroadcastType().equals(MBroadcastMessage.BROADCASTTYPE_Immediate)){
|
||||
String sql = "SELECT * FROM AD_Note WHERE AD_BroadcastMessage_ID = ? AND AD_User_ID = ? AND AD_Client_ID = ?";
|
||||
String sql = "SELECT * FROM AD_Note WHERE AD_BroadcastMessage_ID = ? AND AD_User_ID = ? AND AD_Client_ID in (?, 0)";
|
||||
PreparedStatement pstmt = null;
|
||||
ResultSet rs=null;
|
||||
try {
|
||||
|
|
|
@ -841,9 +841,13 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
isHasNextPage = false;
|
||||
if (log.isLoggable(Level.FINER))
|
||||
log.finer(dataSql);
|
||||
Trx trx = null;
|
||||
try
|
||||
{
|
||||
m_pstmt = DB.prepareStatement(dataSql, null);
|
||||
//https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor
|
||||
String trxName = Trx.createTrxName("InfoPanelLoad:");
|
||||
trx = Trx.get(trxName, true);
|
||||
m_pstmt = DB.prepareStatement(dataSql, trxName);
|
||||
setParameters (m_pstmt, false); // no count
|
||||
if (log.isLoggable(Level.FINE))
|
||||
log.fine("Start query - " + (System.currentTimeMillis()-startTime) + "ms");
|
||||
|
@ -890,6 +894,7 @@ public abstract class InfoPanel extends Window implements EventListener<Event>,
|
|||
finally
|
||||
{
|
||||
DB.close(m_rs, m_pstmt);
|
||||
trx.close();
|
||||
}
|
||||
|
||||
if (end > cacheEnd || end <= 0)
|
||||
|
|
|
@ -472,8 +472,16 @@ public final class WAccountDialog extends Window
|
|||
statusBar.setStatusDB("");
|
||||
|
||||
// Initial value
|
||||
if (m_mAccount.C_ValidCombination_ID != 0)
|
||||
if (m_mAccount.C_ValidCombination_ID != 0) {
|
||||
m_mTab.navigate(0);
|
||||
if (f_Account_ID.getValue() instanceof Integer) {
|
||||
Env.setContext(Env.getCtx(), m_WindowNo, "Account_ID", (Integer)f_Account_ID.getValue());
|
||||
Env.setContext(Env.getCtx(), m_WindowNo, 0, "Account_ID", (Integer)f_Account_ID.getValue());
|
||||
if (f_SubAcct_ID != null) {
|
||||
f_SubAcct_ID.dynamicDisplay();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.config("fini");
|
||||
return true;
|
||||
|
@ -1213,7 +1221,9 @@ public final class WAccountDialog extends Window
|
|||
Object newValue = evt.getNewValue();
|
||||
if (newValue instanceof Integer) {
|
||||
Env.setContext(Env.getCtx(), m_WindowNo, "Account_ID", ((Integer)newValue).intValue());
|
||||
Env.setContext(Env.getCtx(), m_WindowNo, 0, "Account_ID", ((Integer)newValue).intValue());
|
||||
if (f_SubAcct_ID != null) {
|
||||
f_SubAcct_ID.setValue(null);
|
||||
f_SubAcct_ID.dynamicDisplay();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -201,6 +201,7 @@ public class WImageDialog extends Window implements EventListener<Event>
|
|||
confirmPanel.addActionListener(Events.ON_CLICK, this);
|
||||
|
||||
addEventListener(Events.ON_UPLOAD, this);
|
||||
addEventListener("onSave", this);
|
||||
} // init
|
||||
|
||||
public void onEvent(Event e) throws Exception {
|
||||
|
@ -211,19 +212,8 @@ public class WImageDialog extends Window implements EventListener<Event>
|
|||
}
|
||||
else if (e.getTarget().getId().equals(ConfirmPanel.A_OK))
|
||||
{
|
||||
if (image.getContent() != null)
|
||||
{
|
||||
if (!Util.isEmpty(fileNameTextbox.getValue()))
|
||||
m_mImage.setName(fileNameTextbox.getValue());
|
||||
m_mImage.saveEx();
|
||||
}
|
||||
else if (m_mImage != null && m_mImage.getAD_Image_ID() > 0)
|
||||
{
|
||||
m_mImage.setBinaryData(null);
|
||||
m_mImage.setName("-");
|
||||
m_mImage.saveEx();
|
||||
}
|
||||
detach();
|
||||
Clients.showBusy(this, Msg.getMsg(Env.getCtx(), "Processing"));
|
||||
Events.echoEvent("onSave", this, null);
|
||||
}
|
||||
else if (e.getTarget().getId().equals(ConfirmPanel.A_CANCEL))
|
||||
{
|
||||
|
@ -240,10 +230,12 @@ public class WImageDialog extends Window implements EventListener<Event>
|
|||
{
|
||||
captureDiv.setVisible(true);
|
||||
cancelCaptureButton.setVisible(true);
|
||||
cancelCaptureButton.setEnabled(true);
|
||||
mainLayout.setVisible(false);
|
||||
String script = "var wgt = zk.Widget.$('#"+captureDiv.getUuid()+"');";
|
||||
script = script + "var cancelBtn=zk.Widget.$('#"+cancelCaptureButton.getUuid()+"');";
|
||||
script = script + "jq(wgt).photobooth(); ";
|
||||
script = script + "jq(wgt).bind( 'image', function( event, dataUrl ){ zAu.send(new zk.Event(wgt, 'onCaptureImage', dataUrl, {toServer:true})); });";
|
||||
script = script + "jq(wgt).bind( 'image', function( event, dataUrl ){ cancelBtn.setVisible(false);zAu.send(new zk.Event(wgt, 'onCaptureImage', dataUrl, {toServer:true})); });";
|
||||
Clients.evalJavaScript(script);
|
||||
}
|
||||
else if (e.getName().equals("onCaptureImage"))
|
||||
|
@ -279,6 +271,30 @@ public class WImageDialog extends Window implements EventListener<Event>
|
|||
script = script + "jq(wgt).data( 'photobooth').destroy(); ";
|
||||
Clients.evalJavaScript(script);
|
||||
}
|
||||
else if (e.getName().equals("onSave"))
|
||||
{
|
||||
try {
|
||||
onSave();
|
||||
} finally {
|
||||
Clients.clearBusy(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void onSave() {
|
||||
if (image.getContent() != null)
|
||||
{
|
||||
if (!Util.isEmpty(fileNameTextbox.getValue()))
|
||||
m_mImage.setName(fileNameTextbox.getValue());
|
||||
m_mImage.saveEx();
|
||||
}
|
||||
else if (m_mImage != null && m_mImage.getAD_Image_ID() > 0)
|
||||
{
|
||||
m_mImage.setBinaryData(null);
|
||||
m_mImage.setName("-");
|
||||
m_mImage.saveEx();
|
||||
}
|
||||
detach();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue