/// <summary> /// Complete Document /// </summary> /// <returns>new status (Complete, In Progress, Invalid, Waiting ..)</returns> public String CompleteIt() { // Re-Check if (!m_justPrepared) { String status = PrepareIt(); if (!DocActionVariables.STATUS_INPROGRESS.Equals(status)) { return(status); } } // Implicit Approval if (!IsApproved()) { ApproveIt(); } log.Info("completeIt - " + ToString()); // Set Payment reconciled MBankStatementLine[] lines = GetLines(false); for (int i = 0; i < lines.Length; i++) { MBankStatementLine line = lines[i]; if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); payment.SetIsReconciled(true); payment.Save(Get_TrxName()); } } // Update Bank Account MBankAccount ba = MBankAccount.Get(GetCtx(), GetC_BankAccount_ID()); ba.SetCurrentBalance(GetEndingBalance()); ba.Save(Get_TrxName()); // 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); }
/// <summary> /// Get Bank Statement Lines /// </summary> /// <param name="requery">requery</param> /// <returns>line array</returns> public MBankStatementLine[] GetLines(bool requery) { if (m_lines != null && !requery) { return(m_lines); } List <MBankStatementLine> list = new List <MBankStatementLine>(); String sql = "SELECT * FROM C_BankStatementLine" + " WHERE C_BankStatement_ID=@C_BankStatement_ID" + " ORDER BY Line"; DataTable dt = null; IDataReader idr = null; try { SqlParameter[] param = new SqlParameter[1]; param[0] = new SqlParameter("@C_BankStatement_ID", GetC_BankStatement_ID()); idr = DataBase.DB.ExecuteReader(sql, param, Get_TrxName()); dt = new DataTable(); dt.Load(idr); idr.Close(); foreach (DataRow dr in dt.Rows)// while (dr.next()) { list.Add(new MBankStatementLine(GetCtx(), dr, Get_TrxName())); } } catch (Exception e) { if (idr != null) { idr.Close(); } log.Log(Level.SEVERE, sql, e); } finally { dt = null; if (idr != null) { idr.Close(); } } MBankStatementLine[] retValue = new MBankStatementLine[list.Count]; retValue = list.ToArray(); return(retValue); }
/// <summary> /// Void Document. /// </summary> /// <returns>false</returns> public bool VoidIt() { log.Info(ToString()); if (DOCSTATUS_Closed.Equals(GetDocStatus()) || DOCSTATUS_Reversed.Equals(GetDocStatus()) || DOCSTATUS_Voided.Equals(GetDocStatus())) { m_processMsg = "Document Closed: " + GetDocStatus(); SetDocAction(DOCACTION_None); return(false); } // Not Processed if (DOCSTATUS_Drafted.Equals(GetDocStatus()) || DOCSTATUS_Invalid.Equals(GetDocStatus()) || DOCSTATUS_InProgress.Equals(GetDocStatus()) || DOCSTATUS_Approved.Equals(GetDocStatus()) || DOCSTATUS_NotApproved.Equals(GetDocStatus())) { ; } // Std Period open? else { if (!MPeriod.IsOpen(GetCtx(), GetStatementDate(), MDocBaseType.DOCBASETYPE_BANKSTATEMENT, GetAD_Org_ID())) { m_processMsg = "@PeriodClosed@"; return(false); } // 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(), GetStatementDate(), GetAD_Org_ID())) { m_processMsg = Common.Common.NONBUSINESSDAY; return(false); } if (MFactAcct.Delete(Table_ID, GetC_BankStatement_ID(), Get_TrxName()) < 0) { return(false); // could not delete } } // Set lines to 0 Decimal transactionAmt = 0; //To update transaction amount in unMatched Balance in case of void MBankStatementLine[] lines = GetLines(true); for (int i = 0; i < lines.Length; i++) { MBankStatementLine line = lines[i]; transactionAmt += line.GetTrxAmt(); if (line.GetStmtAmt().CompareTo(Env.ZERO) != 0) { String description = Msg.Translate(GetCtx(), "Voided") + " (" + Msg.Translate(GetCtx(), "StmtAmt") + "=" + line.GetStmtAmt(); if (line.GetTrxAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "TrxAmt") + "=" + line.GetTrxAmt(); } if (line.GetChargeAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "ChargeAmt") + "=" + line.GetChargeAmt(); } if (line.GetInterestAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "InterestAmt") + "=" + line.GetInterestAmt(); } description += ")"; line.AddDescription(description); line.SetStmtAmt(Env.ZERO); line.SetTrxAmt(Env.ZERO); line.SetChargeAmt(Env.ZERO); line.SetInterestAmt(Env.ZERO); line.Save(Get_TrxName()); if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); payment.SetIsReconciled(false); payment.Save(Get_TrxName()); } } } AddDescription(Msg.Translate(GetCtx(), "Voided")); Decimal voidedDifference = GetStatementDifference(); SetStatementDifference(Env.ZERO); //VA009----------------------------------Anuj---------------------- //int _CountVA009 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA009_' AND IsActive = 'Y'")); if (Env.IsModuleInstalled("VA009_")) { MBankStatementLine[] STlines = GetLines(false); string status = "R"; // Received for (int i = 0; i < STlines.Length; i++) { MBankStatementLine line = STlines[i]; if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); string _paymentMethod = Util.GetValueOfString(DB.ExecuteScalar("Select va009_paymentbaseType from va009_paymentmethod where va009_paymentmethod_id=" + payment.GetVA009_PaymentMethod_ID() + " And IsActive = 'Y' AND AD_Client_ID = " + GetAD_Client_ID())); if (_paymentMethod == "S") // Check { status = "B"; // Bounced } else { status = "C"; // Rejected } payment.SetVA009_ExecutionStatus(status); payment.Save(Get_TrxName()); //MInvoicePaySchedule inp = new MInvoicePaySchedule(GetCtx(), payment.GetC_InvoicePaySchedule_ID(), Get_TrxName()); //inp.SetVA009_ExecutionStatus(status); //inp.Save(Get_TrxName()); // update execution status as set on Payment on Invoice Schedule - for those payment which are completed or closed if (payment.GetDocStatus() == DOCSTATUS_Closed || payment.GetDocStatus() == DOCSTATUS_Completed) { int no = Util.GetValueOfInt(DB.ExecuteQuery(@"UPDATE C_InvoicePaySchedule SET VA009_ExecutionStatus = '" + payment.GetVA009_ExecutionStatus() + @"' WHERE C_Payment_ID = " + line.GetC_Payment_ID(), null, Get_Trx())); } } } } //END----------------------------------Anuj---------------------- // Update Bank Account MBankAccount ba = MBankAccount.Get(GetCtx(), GetC_BankAccount_ID()); ba.SetCurrentBalance(Decimal.Subtract(ba.GetCurrentBalance(), voidedDifference)); ba.SetUnMatchedBalance(Decimal.Add(ba.GetUnMatchedBalance(), transactionAmt)); //Arpit ba.Save(Get_TrxName()); SetProcessed(true); SetDocAction(DOCACTION_None); return(true); }
/// <summary> /// Complete Document /// </summary> /// <returns>new status (Complete, In Progress, Invalid, Waiting ..)</returns> public String CompleteIt() { //added by shubham (JID_1472) To check payment is complete or close int docStatus = Util.GetValueOfInt(DB.ExecuteScalar("SELECT count(c_payment_id) FROM c_payment WHERE c_payment_id in ((SELECT c_payment_id from c_bankstatementline WHERE c_bankstatement_id =" + GetC_BankStatement_ID() + " AND c_payment_id > 0)) AND docstatus NOT IN ('CO' , 'CL')", null, Get_Trx())); if (docStatus != 0) { m_processMsg = Msg.GetMsg(GetCtx(), "paymentnotcompleted"); return(DocActionVariables.STATUS_INVALID); } //shubham // Re-Check if (!m_justPrepared) { String status = PrepareIt(); if (!DocActionVariables.STATUS_INPROGRESS.Equals(status)) { return(status); } } // Implicit Approval if (!IsApproved()) { ApproveIt(); } log.Info("completeIt - " + ToString()); int _CountVA034 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA034_' AND IsActive = 'Y'")); // Set Payment reconciled MBankStatementLine[] lines = GetLines(false); //Changes by SUkhwinder on 20 April, if all lines are not matched then dont allow complete. foreach (MBankStatementLine line in lines) { // if Transaction amount exist but no payment reference or Charge amount exist with no Charge then give message for Unmatched lines if ((line.GetTrxAmt() != Env.ZERO && line.GetC_Payment_ID() == 0) || (line.GetChargeAmt() != Env.ZERO && line.GetC_Charge_ID() == 0)) { m_processMsg = Msg.GetMsg(Env.GetCtx(), "LinesNotMatchedYet"); return(DocActionVariables.STATUS_INVALID); } } //Changes by SUkhwinder on 20 April, if all lines are not matched then dont allow complete. Decimal transactionAmt = 0; //Arpit to update only transaction amount in Bank Account UnMatched Balance asked by Ashish Gandhi for (int i = 0; i < lines.Length; i++) { MBankStatementLine line = lines[i]; transactionAmt += line.GetTrxAmt(); if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); payment.SetIsReconciled(true); if (_CountVA034 > 0) { payment.SetVA034_DepositSlipNo(line.GetVA012_VoucherNo()); } payment.Save(Get_TrxName()); } //Pratap 1-2-16 ///// Set Cash Line reconciled int _CountVA012 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA012_' AND IsActive = 'Y'")); if (_CountVA012 > 0) { if (line.GetC_CashLine_ID() != 0) { MCashLine cashLine = new MCashLine(GetCtx(), line.GetC_CashLine_ID(), Get_TrxName()); cashLine.SetVA012_IsReconciled(true); cashLine.Save(Get_TrxName()); } } //// } // Update Bank Account MBankAccount ba = MBankAccount.Get(GetCtx(), GetC_BankAccount_ID()); ba.SetCurrentBalance(GetEndingBalance()); ba.SetUnMatchedBalance(Decimal.Subtract(ba.GetUnMatchedBalance(), transactionAmt));//Arpit ba.Save(Get_TrxName()); //VA009----------------------------------Anuj---------------------- //int _CountVA009 = Util.GetValueOfInt(DB.ExecuteScalar("SELECT COUNT(AD_MODULEINFO_ID) FROM AD_MODULEINFO WHERE PREFIX='VA009_' AND IsActive = 'Y'")); if (Env.IsModuleInstalled("VA009_")) { MBankStatementLine[] STlines = GetLines(false); for (int i = 0; i < STlines.Length; i++) { MBankStatementLine line = STlines[i]; if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); payment.SetVA009_ExecutionStatus("R"); if (_CountVA034 > 0) { payment.SetVA034_DepositSlipNo(line.GetVA012_VoucherNo()); } payment.Save(Get_TrxName()); //MInvoicePaySchedule inp = new MInvoicePaySchedule(GetCtx(), payment.GetC_InvoicePaySchedule_ID(), Get_TrxName()); //inp.SetVA009_ExecutionStatus("R"); //inp.Save(Get_TrxName()); // update execution status as received on Invoice Schedule - for those payment which are completed or closed if (payment.GetDocStatus() == DOCSTATUS_Closed || payment.GetDocStatus() == DOCSTATUS_Completed) { int no = Util.GetValueOfInt(DB.ExecuteQuery(@"UPDATE C_InvoicePaySchedule SET VA009_ExecutionStatus = 'R' WHERE C_Payment_ID = " + line.GetC_Payment_ID(), null, Get_Trx())); } } } } //END----------------------------------Anuj---------------------- // 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); }
/// <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); } // Std Period open? if (!MPeriod.IsOpen(GetCtx(), GetStatementDate(), MDocBaseType.DOCBASETYPE_BANKSTATEMENT, GetAD_Org_ID())) { 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(), GetStatementDate(), GetAD_Org_ID())) { m_processMsg = Common.Common.NONBUSINESSDAY; return(DocActionVariables.STATUS_INVALID); } MBankStatementLine[] lines = GetLines(true); if (lines.Length == 0) { m_processMsg = "@NoLines@"; return(DocActionVariables.STATUS_INVALID); } // Lines Decimal total = Env.ZERO; DateTime?minDate = GetStatementDate(); DateTime?maxDate = minDate; for (int i = 0; i < lines.Length; i++) { MBankStatementLine line = lines[i]; total = Decimal.Add(total, line.GetStmtAmt()); if (line.GetDateAcct() < (minDate))//before { minDate = line.GetDateAcct(); } if (line.GetDateAcct() > maxDate)//after { maxDate = line.GetDateAcct(); } } SetStatementDifference(total); SetEndingBalance(Decimal.Add(GetBeginningBalance(), total)); if (!MPeriod.IsOpen(GetCtx(), minDate, MDocBaseType.DOCBASETYPE_BANKSTATEMENT, GetAD_Org_ID()) || !MPeriod.IsOpen(GetCtx(), maxDate, MDocBaseType.DOCBASETYPE_BANKSTATEMENT, GetAD_Org_ID())) { 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(), GetStatementDate(), GetAD_Org_ID())) { m_processMsg = Common.Common.NONBUSINESSDAY; return(DocActionVariables.STATUS_INVALID); } m_justPrepared = true; if (!DOCACTION_Complete.Equals(GetDocAction())) { SetDocAction(DOCACTION_Complete); } return(DocActionVariables.STATUS_INPROGRESS); }
/// <summary> /// Void Document. /// </summary> /// <returns>false</returns> public bool VoidIt() { log.Info(ToString()); if (DOCSTATUS_Closed.Equals(GetDocStatus()) || DOCSTATUS_Reversed.Equals(GetDocStatus()) || DOCSTATUS_Voided.Equals(GetDocStatus())) { m_processMsg = "Document Closed: " + GetDocStatus(); SetDocAction(DOCACTION_None); return(false); } // Not Processed if (DOCSTATUS_Drafted.Equals(GetDocStatus()) || DOCSTATUS_Invalid.Equals(GetDocStatus()) || DOCSTATUS_InProgress.Equals(GetDocStatus()) || DOCSTATUS_Approved.Equals(GetDocStatus()) || DOCSTATUS_NotApproved.Equals(GetDocStatus())) { ; } // Std Period open? else { if (!MPeriod.IsOpen(GetCtx(), GetStatementDate(), MDocBaseType.DOCBASETYPE_BANKSTATEMENT)) { m_processMsg = "@PeriodClosed@"; return(false); } // is Non Business Day? if (MNonBusinessDay.IsNonBusinessDay(GetCtx(), GetStatementDate())) { m_processMsg = Common.Common.NONBUSINESSDAY; return(false); } if (MFactAcct.Delete(Table_ID, GetC_BankStatement_ID(), Get_TrxName()) < 0) { return(false); // could not delete } } // Set lines to 0 MBankStatementLine[] lines = GetLines(true); for (int i = 0; i < lines.Length; i++) { MBankStatementLine line = lines[i]; if (line.GetStmtAmt().CompareTo(Env.ZERO) != 0) { String description = Msg.Translate(GetCtx(), "Voided") + " (" + Msg.Translate(GetCtx(), "StmtAmt") + "=" + line.GetStmtAmt(); if (line.GetTrxAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "TrxAmt") + "=" + line.GetTrxAmt(); } if (line.GetChargeAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "ChargeAmt") + "=" + line.GetChargeAmt(); } if (line.GetInterestAmt().CompareTo(Env.ZERO) != 0) { description += ", " + Msg.Translate(GetCtx(), "InterestAmt") + "=" + line.GetInterestAmt(); } description += ")"; line.AddDescription(description); line.SetStmtAmt(Env.ZERO); line.SetTrxAmt(Env.ZERO); line.SetChargeAmt(Env.ZERO); line.SetInterestAmt(Env.ZERO); line.Save(Get_TrxName()); if (line.GetC_Payment_ID() != 0) { MPayment payment = new MPayment(GetCtx(), line.GetC_Payment_ID(), Get_TrxName()); payment.SetIsReconciled(false); payment.Save(Get_TrxName()); } } } AddDescription(Msg.Translate(GetCtx(), "Voided")); Decimal voidedDifference = GetStatementDifference(); SetStatementDifference(Env.ZERO); // Update Bank Account MBankAccount ba = MBankAccount.Get(GetCtx(), GetC_BankAccount_ID()); ba.SetCurrentBalance(Decimal.Subtract(ba.GetCurrentBalance(), voidedDifference)); ba.Save(Get_TrxName()); SetProcessed(true); SetDocAction(DOCACTION_None); return(true); }