/// <summary>
        ///  Check to see if the appropriate periods are open for this document
        /// </summary>
        /// <param name="doc">Doc</param>
        /// <returns>null if all periods open; otherwise the error message</returns>
        public static String IsPeriodOpen(DocAction doc)
        {
            List <int> docOrgs  = new List <int>();
            String     errorMsg = null;

            if (errorMsg == null)
            {
                // check if lines exist
                // get all the orgs stamped on the document lines
                VAdvantage.Utility.Env.QueryParams qParams = doc.GetLineOrgsQueryInfo();
                if (qParams != null)
                {
                    //Object[][] result = QueryUtil.ExecuteQuery(doc.Get_Trx(), qParams.sql,
                    //                        qParams.parameters.ToList());
                    Object[][] result = VAdvantage.Utility.QueryUtil.ExecuteQuery(doc.Get_Trx(), qParams.sql,
                                                                                  qParams.parameters.ToList());

                    foreach (Object[] row in result)
                    {
                        docOrgs.Add(Utility.Util.GetValueOfInt(Utility.Util.GetValueOfDecimal(row[0])));
                    }
                    // check if lines are missing
                    if (result.Length == 0)
                    {
                        errorMsg = "@NoLines@";
                    }
                }
            }

            if (errorMsg == null)
            {
                DateTime?docDate     = doc.GetDocumentDate();
                String   docBaseType = doc.GetDocBaseType();

                if (docDate != null && docBaseType != null)
                {
                    // check if period is open

                    // add doc header org to the list of orgs
                    if (!docOrgs.Contains(doc.GetAD_Org_ID()))
                    {
                        docOrgs.Add(doc.GetAD_Org_ID());
                    }
                    // Std Period open?
                    errorMsg = MPeriod.IsOpen(doc.GetCtx(), doc.GetAD_Client_ID(), docOrgs,
                                              docDate, docBaseType);
                }
            }
            return(errorMsg);
        }
        ///Manfacturing
        /// <summary>
        /// Process document.  This replaces DocAction.processIt().
        /// </summary>
        /// <param name="doc">Doc Action</param>
        /// <param name="processAction">processAction</param>
        /// <returns>true if performed</returns>
        /// <date>07-march-2011</date>
        /// <writer>raghu</writer>
        public static Boolean ProcessIt(DocAction doc, String processAction)
        {
            DateTime time = DateTime.Now.Date;

            Boolean success = false;

            VAdvantage.Utility.Ctx ctx = doc.GetCtx();
            Boolean oldIsBatchMode     = ctx.IsBatchMode();

            ctx.SetBatchMode(true);
            DocumentEngine engine = new DocumentEngine(doc, doc.GetDocStatus());

            success = engine.ProcessIt(processAction, doc.GetDocAction());
            ctx.SetBatchMode(oldIsBatchMode);

            return(success);
        }
 /// <summary>
 /// Process actual document - do not call directly.
 /// Calls the individual actions which call the document action
 /// </summary>
 /// <param name="action">document action</param>
 /// <returns>true if performed</returns>
 public bool ProcessIt(String action)
 {
     _message = null;
     _action  = action;
     //
     if (ACTION_UNLOCK.Equals(_action))
     {
         return(UnlockIt());
     }
     if (ACTION_INVALIDATE.Equals(_action))
     {
         return(InvalidateIt());
     }
     if (ACTION_PREPARE.Equals(_action))
     {
         return(STATUS_INPROGRESS.Equals(PrepareIt()));
     }
     if (ACTION_APPROVE.Equals(_action))
     {
         return(ApproveIt());
     }
     if (ACTION_REJECT.Equals(_action))
     {
         return(RejectIt());
     }
     if (ACTION_COMPLETE.Equals(_action) || ACTION_WAITCOMPLETE.Equals(_action))
     {
         String status = null;
         if (IsDrafted() || IsInvalid())         //	prepare if not prepared yet
         {
             status = PrepareIt();
             if (!STATUS_INPROGRESS.Equals(status))
             {
                 return(false);
             }
         }
         status = CompleteIt();
         if (_document != null &&
             !Ini.IsClient())            //	Post Immediate if on Server
         {
             MClient client = MClient.Get(_document.GetCtx(), _document.GetAD_Client_ID());
             if (STATUS_COMPLETED.Equals(status) && client.IsPostImmediate())
             {
                 _document.Save();
                 PostIt();
             }
         }
         return(STATUS_COMPLETED.Equals(status) ||
                STATUS_INPROGRESS.Equals(status) ||
                STATUS_WAITINGPAYMENT.Equals(status) ||
                STATUS_WAITINGCONFIRMATION.Equals(status));
     }
     if (ACTION_REACTIVATE.Equals(_action))
     {
         return(ReActivateIt());
     }
     if (ACTION_REVERSE_ACCRUAL.Equals(_action))
     {
         return(ReverseAccrualIt());
     }
     if (ACTION_REVERSE_CORRECT.Equals(_action))
     {
         return(ReverseCorrectIt());
     }
     if (ACTION_CLOSE.Equals(_action))
     {
         return(CloseIt());
     }
     if (ACTION_VOID.Equals(_action))
     {
         return(VoidIt());
     }
     if (ACTION_POST.Equals(_action))
     {
         return(PostIt());
     }
     //
     return(false);
 }