} // rejectIt /// <summary> /// Complete Document /// </summary> /// <returns>new status (Complete, In Progress, Invalid, Waiting ..)</returns> public String CompleteIt() { log.Info("completeIt - " + ToString()); // Re-Check if (!m_justPrepared) { String status = PrepareIt(); if (!DocActionVariables.STATUS_INPROGRESS.Equals(status)) { return(status); } } // JID_1290: Set the document number from completed document sequence after completed (if needed) SetCompletedDocumentNo(); // Implicit Approval ApproveIt(); // Add up Amounts & complete them MJournal[] journals = GetJournals(true); Decimal? TotalDr = Env.ZERO; Decimal? TotalCr = Env.ZERO; for (int i = 0; i < journals.Length; i++) { MJournal journal = journals[i]; if (!journal.IsActive()) { journal.SetProcessed(true); journal.SetDocStatus(DOCSTATUS_Voided); journal.SetDocAction(DOCACTION_None); journal.Save(); continue; } // Complete if not closed if (DOCSTATUS_Closed.Equals(journal.GetDocStatus()) || DOCSTATUS_Voided.Equals(journal.GetDocStatus()) || DOCSTATUS_Reversed.Equals(journal.GetDocStatus()) || DOCSTATUS_Completed.Equals(journal.GetDocStatus())) { ; } else { String status = journal.CompleteIt(); if (!DocActionVariables.STATUS_COMPLETED.Equals(status)) { journal.SetDocStatus(status); journal.Save(); m_processMsg = journal.GetProcessMsg(); return(status); } journal.SetDocStatus(DOCSTATUS_Completed); journal.Save(); } // //TotalDr = TotalDr.add(journal.getTotalDr()); TotalDr = Decimal.Add(TotalDr.Value, journal.GetTotalDr()); TotalCr = Decimal.Add(TotalCr.Value, journal.GetTotalCr()); } SetTotalDr(TotalDr.Value); SetTotalCr(TotalCr.Value); // User Validation String valid = ModelValidationEngine.Get().FireDocValidate(this, ModalValidatorVariables.DOCTIMING_AFTER_COMPLETE); if (valid != null) { m_processMsg = valid; return(DocActionVariables.STATUS_INVALID); } // SetProcessed(true); SetDocAction(DOCACTION_Close); return(DocActionVariables.STATUS_COMPLETED); } // completeIt
} // invalidateIt /// <summary> /// Prepare Document /// </summary> /// <returns>new status (In Progress or Invalid) </returns> public String PrepareIt() { log.Info(ToString()); m_processMsg = ModelValidationEngine.Get().FireDocValidate(this, ModalValidatorVariables.DOCTIMING_BEFORE_PREPARE); if (m_processMsg != null) { return(DocActionVariables.STATUS_INVALID); } MDocType dt = MDocType.Get(GetCtx(), GetC_DocType_ID()); // Std Period open? if (!MPeriod.IsOpen(GetCtx(), GetDateAcct(), dt.GetDocBaseType())) { m_processMsg = "@PeriodClosed@"; return(DocActionVariables.STATUS_INVALID); } // is Non Business Day? // JID_1205: At the trx, need to check any non business day in that org. if not fund then check * org. if (MNonBusinessDay.IsNonBusinessDay(GetCtx(), GetDateAcct(), GetAD_Org_ID())) { m_processMsg = Common.Common.NONBUSINESSDAY; return(DocActionVariables.STATUS_INVALID); } // JID_0521 - Restrict if debit and credit amount is not equal.-Mohit-12-jun-2019. if (GetTotalCr() != GetTotalDr()) { m_processMsg = Msg.GetMsg(GetCtx(), "DBAndCRAmtNotEqual"); return(DocActionVariables.STATUS_INVALID); } // Add up Amounts & prepare them MJournal[] journals = GetJournals(false); if (journals.Length == 0) { m_processMsg = "@NoLines@"; return(DocActionVariables.STATUS_INVALID); } Decimal TotalDr = Env.ZERO; Decimal TotalCr = Env.ZERO; for (int i = 0; i < journals.Length; i++) { MJournal journal = journals[i]; if (!journal.IsActive()) { continue; } // Prepare if not closed if (DOCSTATUS_Closed.Equals(journal.GetDocStatus()) || DOCSTATUS_Voided.Equals(journal.GetDocStatus()) || DOCSTATUS_Reversed.Equals(journal.GetDocStatus()) || DOCSTATUS_Completed.Equals(journal.GetDocStatus())) { ; } else { String status = journal.PrepareIt(); if (!DocActionVariables.STATUS_INPROGRESS.Equals(status)) { journal.SetDocStatus(status); journal.Save(); m_processMsg = journal.GetProcessMsg(); return(status); } journal.SetDocStatus(DOCSTATUS_InProgress); journal.Save(); } // //TotalDr = TotalDr.add(journal.getTotalDr()); TotalDr = Decimal.Add(TotalDr, journal.GetTotalDr()); TotalCr = Decimal.Add(TotalCr, journal.GetTotalCr()); } SetTotalDr(TotalDr); SetTotalCr(TotalCr); // Control Amount if (Env.ZERO.CompareTo(GetControlAmt()) != 0 && GetControlAmt().CompareTo(GetTotalDr()) != 0) { m_processMsg = "@ControlAmtError@"; return(DocActionVariables.STATUS_INVALID); } // Add up Amounts m_justPrepared = true; return(DocActionVariables.STATUS_INPROGRESS); } // prepareIt