diff --git a/base/src/org/compiere/acct/Doc.java b/base/src/org/compiere/acct/Doc.java
index 6324d23b78..6adf26a0af 100644
--- a/base/src/org/compiere/acct/Doc.java
+++ b/base/src/org/compiere/acct/Doc.java
@@ -1097,7 +1097,7 @@ public abstract class Doc
m_period = MPeriod.get(getCtx(), getDateAcct());
// Is Period Open?
if (m_period != null
- && m_period.isOpen(getDocumentType()))
+ && m_period.isOpen(getDocumentType(), getDateAcct()))
m_C_Period_ID = m_period.getC_Period_ID();
else
m_C_Period_ID = -1;
diff --git a/base/src/org/compiere/acct/Doc_Bank.java b/base/src/org/compiere/acct/Doc_Bank.java
index f7fd1229f2..337818423a 100644
--- a/base/src/org/compiere/acct/Doc_Bank.java
+++ b/base/src/org/compiere/acct/Doc_Bank.java
@@ -98,7 +98,7 @@ public class Doc_Bank extends Doc
if (i == 0)
setDateAcct(line.getDateAcct());
MPeriod period = MPeriod.get(getCtx(), line.getDateAcct());
- if (period != null && period.isOpen(DOCTYPE_BankStatement))
+ if (period != null && period.isOpen(DOCTYPE_BankStatement, line.getDateAcct()))
docLine.setC_Period_ID(period.getC_Period_ID());
//
list.add(docLine);
diff --git a/base/src/org/compiere/model/MJournal.java b/base/src/org/compiere/model/MJournal.java
index 751c0614e7..429d9c9774 100644
--- a/base/src/org/compiere/model/MJournal.java
+++ b/base/src/org/compiere/model/MJournal.java
@@ -428,7 +428,7 @@ public class MJournal extends X_GL_Journal implements DocAction
m_processMsg = "@PeriodNotValid@";
return DocAction.STATUS_Invalid;
}
- boolean open = period.isOpen(dt.getDocBaseType());
+ boolean open = period.isOpen(dt.getDocBaseType(), getDateAcct());
if (!open)
{
log.warning(period.getName()
diff --git a/base/src/org/compiere/model/MPeriod.java b/base/src/org/compiere/model/MPeriod.java
index ed60a634d1..47e4634a46 100644
--- a/base/src/org/compiere/model/MPeriod.java
+++ b/base/src/org/compiere/model/MPeriod.java
@@ -29,6 +29,7 @@ import org.compiere.util.*;
*
* @author Teo Sarca, SC ARHIPAC SERVICE SRL
*
BF [ 1779438 ] Minor auto period control bug
+ * BF [ 1893486 ] Auto Period Control return that period is always open
*/
public class MPeriod extends X_C_Period
{
@@ -148,7 +149,7 @@ public class MPeriod extends X_C_Period
s_log.warning("No Period for " + DateAcct + " (" + DocBaseType + ")");
return false;
}
- boolean open = period.isOpen(DocBaseType);
+ boolean open = period.isOpen(DocBaseType, DateAcct);
if (!open)
s_log.warning(period.getName()
+ ": Not open for " + DocBaseType + " (" + DateAcct + ")");
@@ -340,11 +341,27 @@ public class MPeriod extends X_C_Period
} // isInPeriod
/**
- * Is Period Open for Doc Base Type
- * @param DocBaseType document base type
- * @return true if open
+ * Is Period Open for Doc Base Type
+ * @param DocBaseType document base type
+ * @return true if open
+ * @deprecated since 3.3.1b; use {@link #isOpen(String, Timestamp)} instead
*/
public boolean isOpen (String DocBaseType)
+ {
+ return isOpen(DocBaseType, null);
+ }
+
+ /**
+ * Is Period Open for Doc Base Type
+ * @param DocBaseType document base type
+ * @param dateAcct date;
+ * Applies only for "Auto Period Control":
+ * if not null, date should be in auto period range (today - OpenHistory, today+OpenHistory)
+ * if null, this period should be in auto period range
+ * @return true if open
+ * @since 3.3.1b
+ */
+ public boolean isOpen (String DocBaseType, Timestamp dateAcct)
{
if (!isActive())
{
@@ -355,19 +372,27 @@ public class MPeriod extends X_C_Period
MAcctSchema as = MClient.get(getCtx(), getAD_Client_ID()).getAcctSchema();
if (as != null && as.isAutoPeriodControl())
{
- // if (as.getC_Period_ID() == getC_Period_ID())
- // return true;
Timestamp today = TimeUtil.trunc(new Timestamp (System.currentTimeMillis()), TimeUtil.TRUNC_DAY);
Timestamp first = TimeUtil.addDays(today, - as.getPeriod_OpenHistory());
Timestamp last = TimeUtil.addDays(today, as.getPeriod_OpenFuture());
- if (today.before(first))
+ Timestamp date1, date2;
+ if (dateAcct != null) {
+ date1 = TimeUtil.trunc(dateAcct, TimeUtil.TRUNC_DAY);
+ date2 = date1;
+ }
+ else {
+ date1 = getStartDate();
+ date2 = getEndDate();
+ }
+ //
+ if (date1.before(first))
{
- log.warning ("Today before first day - " + first);
+ log.warning ("" + date1 + " before first day - " + first);
return false;
}
- if (today.after(last))
+ if (date2.after(last))
{
- log.warning ("Today after last day - " + first);
+ log.warning ("" + date2 + " after last day - " + first);
return false;
}
// We are OK