Merge bug fixes from release to trunk
merge 11707, 11708, 11816, 11817 11707 -> Fix [2971934] DigestOfFile incosistent Base64 conversion - thanks to Silvano (freepath) Adding raise of exceptions when the file cannot be written Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2971934 11708 -> Fix [2127565] - LOT Control Error Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2127565 11816 -> Fixing some errors found when building testadempiere Link to /release commit: http://adempiere.svn.sourceforge.net/adempiere/?rev=11816&view=rev 11817 -> [2846601] - DB.isDatabaseOK() is not called / moving the validation some lines down - it breaks completely the usage of Adempiere Link to SF Tracker: http://sourceforge.net/support/tracker.php?aid=2846601 Regards, Tony
This commit is contained in:
parent
21212ed383
commit
704877109d
|
|
@ -67,6 +67,7 @@ import net.sf.jasperreports.engine.export.JRPrintServiceExporter;
|
||||||
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
|
import net.sf.jasperreports.engine.export.JRPrintServiceExporterParameter;
|
||||||
import net.sf.jasperreports.engine.util.JRLoader;
|
import net.sf.jasperreports.engine.util.JRLoader;
|
||||||
|
|
||||||
|
import org.adempiere.exceptions.AdempiereException;
|
||||||
import org.adempiere.exceptions.DBException;
|
import org.adempiere.exceptions.DBException;
|
||||||
import org.compiere.db.CConnection;
|
import org.compiere.db.CConnection;
|
||||||
import org.compiere.interfaces.MD5;
|
import org.compiere.interfaces.MD5;
|
||||||
|
|
@ -873,8 +874,12 @@ public class ReportStarter implements ProcessCall, ClientProcess
|
||||||
log.info(" report on server is different that local one, download and replace");
|
log.info(" report on server is different that local one, download and replace");
|
||||||
File downloadedFile = new File(downloadedLocalFile);
|
File downloadedFile = new File(downloadedLocalFile);
|
||||||
entry.getFile(downloadedFile);
|
entry.getFile(downloadedFile);
|
||||||
reportFile.delete();
|
if (! reportFile.delete()) {
|
||||||
downloadedFile.renameTo(reportFile);
|
throw new AdempiereException("Cannot delete temporary file " + reportFile.toString());
|
||||||
|
}
|
||||||
|
if (! downloadedFile.renameTo(reportFile)) {
|
||||||
|
throw new AdempiereException("Cannot rename temporary file " + downloadedFile.toString() + " to " + reportFile.toString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
entry.getFile(reportFile);
|
entry.getFile(reportFile);
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ public class DigestOfFile
|
||||||
{
|
{
|
||||||
byte[] digest = digestAsByteArray(file);
|
byte[] digest = digestAsByteArray(file);
|
||||||
Base64 encoder = new Base64();
|
Base64 encoder = new Base64();
|
||||||
String digestAsBase64 = encoder.encode(digest).toString();
|
String digestAsBase64 = new String(encoder.encode(digest),"ASCII");
|
||||||
return digestAsBase64;
|
return digestAsBase64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ public class DigestOfFile
|
||||||
{
|
{
|
||||||
byte[] digest = digestAsByteArray(input);
|
byte[] digest = digestAsByteArray(input);
|
||||||
Base64 encoder = new Base64();
|
Base64 encoder = new Base64();
|
||||||
String digestAsBase64 = encoder.encode(digest).toString();
|
String digestAsBase64 = new String(encoder.encode(digest),"ASCII");
|
||||||
return digestAsBase64;
|
return digestAsBase64;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,7 @@ public class CalloutInventory extends CalloutEngine
|
||||||
if (M_AttributeSetInstance_ID != 0)
|
if (M_AttributeSetInstance_ID != 0)
|
||||||
pstmt.setInt(3, M_AttributeSetInstance_ID);
|
pstmt.setInt(3, M_AttributeSetInstance_ID);
|
||||||
rs = pstmt.executeQuery();
|
rs = pstmt.executeQuery();
|
||||||
|
mTab.setValue("QtyBook", Env.ZERO);
|
||||||
if (rs.next())
|
if (rs.next())
|
||||||
{
|
{
|
||||||
bd = rs.getBigDecimal(1);
|
bd = rs.getBigDecimal(1);
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,7 @@ public class MAttachmentEntry
|
||||||
catch (IOException ioe)
|
catch (IOException ioe)
|
||||||
{
|
{
|
||||||
log.log(Level.SEVERE, "getFile", ioe);
|
log.log(Level.SEVERE, "getFile", ioe);
|
||||||
|
throw new RuntimeException(ioe);
|
||||||
}
|
}
|
||||||
return file;
|
return file;
|
||||||
} // getFile
|
} // getFile
|
||||||
|
|
|
||||||
|
|
@ -173,9 +173,9 @@ public class PAttributeInstance extends CDialog
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
||||||
// See RV_Storage
|
// See RV_Storage
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(daysbetween(asi.GuaranteeDate, SYSDATE))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "daysbetween(asi.GuaranteeDate, SYSDATE)", Integer.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
||||||
};
|
};
|
||||||
/** From Clause */
|
/** From Clause */
|
||||||
private static String s_sqlFrom = "M_Storage s"
|
private static String s_sqlFrom = "M_Storage s"
|
||||||
|
|
@ -232,12 +232,12 @@ public class PAttributeInstance extends CDialog
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinPct > 0)
|
if (ShelfLifeMinPct > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife = " AND COALESCE(TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
m_sqlMinLife = " AND COALESCE(TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinDays > 0)
|
if (ShelfLifeMinDays > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife += " AND COALESCE((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)),0)>=" + ShelfLifeMinDays;
|
m_sqlMinLife += " AND COALESCE((daysbetween(asi.GuaranteeDate, SYSDATE)),0)>=" + ShelfLifeMinDays;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
||||||
}
|
}
|
||||||
} // BPartner != 0
|
} // BPartner != 0
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
DECLARE
|
||||||
|
ins VARCHAR2 (2000);
|
||||||
|
sel VARCHAR2 (2000);
|
||||||
|
inssel VARCHAR2 (4001);
|
||||||
|
table_id NUMBER;
|
||||||
|
BEGIN
|
||||||
|
ins := RPAD (' ', 2000, ' ');
|
||||||
|
sel := RPAD (' ', 2000, ' ');
|
||||||
|
inssel := RPAD (' ', 4001, ' ');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Start');
|
||||||
|
|
||||||
|
FOR t IN (SELECT ad_table_id,
|
||||||
|
SUBSTR (tablename, 1, LENGTH (tablename) - 4) tablename
|
||||||
|
FROM AD_TABLE
|
||||||
|
WHERE tablename LIKE '%_Trl' AND isactive = 'Y'
|
||||||
|
AND isview = 'N')
|
||||||
|
LOOP
|
||||||
|
ins :=
|
||||||
|
'INSERT INTO '
|
||||||
|
|| t.tablename
|
||||||
|
|| '_TRL ('
|
||||||
|
|| 'ad_language,ad_client_id,ad_org_id,created,createdby,updated,updatedby,isactive,istranslated,'
|
||||||
|
|| t.tablename
|
||||||
|
|| '_id';
|
||||||
|
sel :=
|
||||||
|
'SELECT l.ad_language,t.ad_client_id,t.ad_org_id,t.created,t.createdby,t.updated,t.updatedby,t.isactive,''N'' as istranslated,'
|
||||||
|
|| t.tablename
|
||||||
|
|| '_id';
|
||||||
|
|
||||||
|
SELECT ad_table_id
|
||||||
|
INTO table_id
|
||||||
|
FROM AD_TABLE
|
||||||
|
WHERE tablename = t.tablename;
|
||||||
|
|
||||||
|
FOR c IN (SELECT col.columnname
|
||||||
|
FROM AD_COLUMN col INNER JOIN AD_TABLE tab
|
||||||
|
ON (col.ad_table_id = tab.ad_table_id)
|
||||||
|
WHERE col.ad_table_id = table_id
|
||||||
|
AND col.istranslated = 'Y'
|
||||||
|
AND col.isactive = 'Y'
|
||||||
|
ORDER BY 1)
|
||||||
|
LOOP
|
||||||
|
ins := TRIM (ins) || ',' || TRIM (c.columnname);
|
||||||
|
sel := TRIM (sel) || ',t.' || TRIM (c.columnname);
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
ins := TRIM (ins) || ')';
|
||||||
|
sel :=
|
||||||
|
TRIM (sel)
|
||||||
|
|| ' from '
|
||||||
|
|| t.tablename
|
||||||
|
|| ' t, ad_language l WHERE l.issystemlanguage=''Y'' AND NOT EXISTS (SELECT 1 FROM '
|
||||||
|
|| t.tablename
|
||||||
|
|| '_TRL b WHERE b.'
|
||||||
|
|| t.tablename
|
||||||
|
|| '_id=t.'
|
||||||
|
|| t.tablename
|
||||||
|
|| '_id AND b.AD_LANGUAGE=l.AD_LANGUAGE)';
|
||||||
|
inssel := TRIM (ins) || ' ' || TRIM (sel);
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE (inssel);
|
||||||
|
EXECUTE IMMEDIATE inssel;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('End');
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
|
@ -24,6 +24,6 @@ export PGPASSWORD
|
||||||
echo -------------------------------------
|
echo -------------------------------------
|
||||||
echo Add missing translations
|
echo Add missing translations
|
||||||
echo -------------------------------------
|
echo -------------------------------------
|
||||||
psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -d $ADEMPIERE_DB_NAME -U $2 -f 01_add_missing_translations.sql
|
psql -h $ADEMPIERE_DB_SERVER -p $ADEMPIERE_DB_PORT -d $ADEMPIERE_DB_NAME -U $2 -f $ADEMPIERE_HOME/utils/$ADEMPIERE_DB_PATH/01_add_missing_translations.sql
|
||||||
PGPASSWORD=
|
PGPASSWORD=
|
||||||
export PGPASSWORD
|
export PGPASSWORD
|
||||||
|
|
|
||||||
|
|
@ -161,9 +161,9 @@ public class InfoPAttributeInstancePanel extends Window implements EventListener
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
||||||
// See RV_Storage
|
// See RV_Storage
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(daysbetween(asi.GuaranteeDate, SYSDATE))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "daysbetween(asi.GuaranteeDate, SYSDATE)", Integer.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
||||||
};
|
};
|
||||||
/** From Clause */
|
/** From Clause */
|
||||||
private static String s_sqlFrom = "M_Storage s"
|
private static String s_sqlFrom = "M_Storage s"
|
||||||
|
|
@ -220,12 +220,12 @@ public class InfoPAttributeInstancePanel extends Window implements EventListener
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinPct > 0)
|
if (ShelfLifeMinPct > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife = " AND COALESCE(TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
m_sqlMinLife = " AND COALESCE(TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinDays > 0)
|
if (ShelfLifeMinDays > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife += " AND COALESCE((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)),0)>=" + ShelfLifeMinDays;
|
m_sqlMinLife += " AND COALESCE((daysbetween(asi.GuaranteeDate, SYSDATE)),0)>=" + ShelfLifeMinDays;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
||||||
}
|
}
|
||||||
} // BPartner != 0
|
} // BPartner != 0
|
||||||
|
|
|
||||||
|
|
@ -424,6 +424,16 @@ public class LoginPanel extends Window implements EventListener
|
||||||
Clients.response("zkLocaleJavaScript", new AuScript(null, ZkFns.outLocaleJavaScript()));
|
Clients.response("zkLocaleJavaScript", new AuScript(null, ZkFns.outLocaleJavaScript()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This temporary validation code is added to check the reported bug
|
||||||
|
// [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||||
|
// https://sourceforge.net/tracker/?func=detail&atid=955896&aid=2832968&group_id=176962
|
||||||
|
// it's harmless, if there is no bug then this must never fail
|
||||||
|
Session currSess = Executions.getCurrent().getDesktop().getSession();
|
||||||
|
currSess.setAttribute("Check_AD_User_ID", Env.getAD_User_ID(ctx));
|
||||||
|
// End of temporary code for [ adempiere-ZK Web Client-2832968 ] User context lost?
|
||||||
|
|
||||||
|
Env.setContext(ctx, BrowserToken.REMEMBER_ME, chkRememberMe.isChecked());
|
||||||
|
|
||||||
/* Check DB version */
|
/* Check DB version */
|
||||||
String version = DB.getSQLValueString(null, "SELECT Version FROM AD_System");
|
String version = DB.getSQLValueString(null, "SELECT Version FROM AD_System");
|
||||||
// Identical DB version
|
// Identical DB version
|
||||||
|
|
@ -435,15 +445,6 @@ public class LoginPanel extends Window implements EventListener
|
||||||
throw new ApplicationException(msg);
|
throw new ApplicationException(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This temporary validation code is added to check the reported bug
|
|
||||||
// [ adempiere-ZK Web Client-2832968 ] User context lost?
|
|
||||||
// https://sourceforge.net/tracker/?func=detail&atid=955896&aid=2832968&group_id=176962
|
|
||||||
// it's harmless, if there is no bug then this must never fail
|
|
||||||
Session currSess = Executions.getCurrent().getDesktop().getSession();
|
|
||||||
currSess.setAttribute("Check_AD_User_ID", Env.getAD_User_ID(ctx));
|
|
||||||
// End of temporary code for [ adempiere-ZK Web Client-2832968 ] User context lost?
|
|
||||||
|
|
||||||
Env.setContext(ctx, BrowserToken.REMEMBER_ME, chkRememberMe.isChecked());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -169,9 +169,9 @@ public class WPAttributeInstance extends Window implements EventListener
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyReserved"), "s.QtyReserved", Double.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "QtyOrdered"), "s.QtyOrdered", Double.class),
|
||||||
// See RV_Storage
|
// See RV_Storage
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "GoodForDays"), "(daysbetween(asi.GuaranteeDate, SYSDATE))-p.GuaranteeDaysMin", Integer.class, true, true, null),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeDays"), "daysbetween(asi.GuaranteeDate, SYSDATE)", Integer.class),
|
||||||
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
new ColumnInfo(Msg.translate(Env.getCtx(), "ShelfLifeRemainingPct"), "CASE WHEN p.GuaranteeDays > 0 THEN TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100) ELSE 0 END", Integer.class),
|
||||||
};
|
};
|
||||||
/** From Clause */
|
/** From Clause */
|
||||||
private static String s_sqlFrom = "M_Storage s"
|
private static String s_sqlFrom = "M_Storage s"
|
||||||
|
|
@ -228,12 +228,12 @@ public class WPAttributeInstance extends Window implements EventListener
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinPct > 0)
|
if (ShelfLifeMinPct > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife = " AND COALESCE(TRUNC(((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
m_sqlMinLife = " AND COALESCE(TRUNC(((daysbetween(asi.GuaranteeDate, SYSDATE))/p.GuaranteeDays)*100),0)>=" + ShelfLifeMinPct;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinPct=" + ShelfLifeMinPct);
|
||||||
}
|
}
|
||||||
if (ShelfLifeMinDays > 0)
|
if (ShelfLifeMinDays > 0)
|
||||||
{
|
{
|
||||||
m_sqlMinLife += " AND COALESCE((TRUNC(asi.GuaranteeDate)-TRUNC(SysDate)),0)>=" + ShelfLifeMinDays;
|
m_sqlMinLife += " AND COALESCE((daysbetween(asi.GuaranteeDate, SYSDATE)),0)>=" + ShelfLifeMinDays;
|
||||||
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
log.config( "PAttributeInstance.dynInit - ShelfLifeMinDays=" + ShelfLifeMinDays);
|
||||||
}
|
}
|
||||||
} // BPartner != 0
|
} // BPartner != 0
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue