/// <summary>
        /// Load Invoice Line.
        /// 4 amounts
        /// AMTTYPE_Payment
        /// AMTTYPE_Statement2
        /// AMTTYPE_Charge
        /// AMTTYPE_Interest
        /// </summary>
        /// <param name="bs">bank statement</param>
        /// <returns>DocLine Array</returns>
        private DocLine[] LoadLines(MBankStatement bs)
        {
            List <DocLine> list = new List <DocLine>();

            MBankStatementLine[] lines = bs.GetLines(false);
            for (int i = 0; i < lines.Length; i++)
            {
                MBankStatementLine line    = lines[i];
                DocLine_Bank       docLine = new DocLine_Bank(line, this);
                //	Set Date Acct
                if (i == 0)
                {
                    SetDateAcct(line.GetDateAcct());
                }
                MPeriod period = MPeriod.Get(GetCtx(), line.GetDateAcct());
                if (period != null && period.IsOpen(MDocBaseType.DOCBASETYPE_BANKSTATEMENT))
                {
                    docLine.SetC_Period_ID(period.GetC_Period_ID());
                }
                //
                list.Add(docLine);
            }

            //	Return Array
            DocLine[] dls = new DocLine[list.Count];
            dls = list.ToArray();
            return(dls);
        }
        /// <summary>
        ///     Create Payment for BankStatement
        /// </summary>
        /// <param name="bsl">bank statement Line</param>
        /// <returns>Message</returns>
        private String CreatePayment(MBankStatementLine bsl)
        {
            if (bsl == null || bsl.GetC_Payment_ID() != 0)
            {
                return("--");
            }
            log.Fine(bsl.ToString());
            if (bsl.GetC_Invoice_ID() == 0 && bsl.GetC_BPartner_ID() == 0)
            {
                throw new Exception("@NotFound@ @C_Invoice_ID@ / @C_BPartner_ID@");
            }
            //
            MBankStatement bs = new MBankStatement(GetCtx(), bsl.GetC_BankStatement_ID(), Get_Trx());
            //
            //Check the Column Exists or not then Pass the Colums as parameters for CreatePayment method
            int conversionType = bsl.Get_ColumnIndex("C_ConversionType_ID") > 0 ? bsl.Get_ValueAsInt("C_ConversionType_ID") : 0;
            int _order_Id      = bsl.Get_ColumnIndex("C_Order_ID") > 0 ? bsl.Get_ValueAsInt("C_Order_ID") : 0;

            MPayment payment = CreatePayment(bsl.GetC_Invoice_ID(), bsl.GetC_BPartner_ID(),
                                             bsl.GetC_Currency_ID(), bsl.GetStmtAmt(), bsl.GetTrxAmt(),
                                             bs.GetC_BankAccount_ID(), bsl.GetStatementLineDate(), bsl.GetDateAcct(),
                                             bsl.GetDescription(), bsl.GetAD_Org_ID(), conversionType, _order_Id);

            if (payment == null && !string.IsNullOrEmpty(_message))
            {
                return(_message);
            }
            //Update Bank StatementLine
            //Created new Object for Payment to get Updated Payment Record
            MPayment mPayment = new MPayment(GetCtx(), payment.GetC_Payment_ID(), payment.Get_Trx());

            _message = bsl.SetPayments(mPayment);
            if (string.IsNullOrEmpty(_message))
            {
                if (!bsl.Save(Get_Trx()))
                {
                    Get_Trx().Rollback();
                    ValueNamePair pp = VLogger.RetrieveError();
                    //to get Exact Error Message first get Value from GetName() else GetValue()
                    string error = pp != null?pp.GetName() : "";

                    if (string.IsNullOrEmpty(error))
                    {
                        error = pp != null?pp.GetValue() : "";

                        if (string.IsNullOrEmpty(error))
                        {
                            error = pp != null?pp.ToString() : "";
                        }
                    }
                    return(!string.IsNullOrEmpty(error) ? error : "DatanotSaved");
                }
                else
                {
                    String retString = "@C_Payment_ID@ = " + mPayment.GetDocumentNo();
                    if (Env.Signum(payment.GetOverUnderAmt()) != 0)
                    {
                        retString += " - @OverUnderAmt@=" + mPayment.GetOverUnderAmt();
                    }
                    Get_Trx().Commit();
                    return(retString);
                }
            }
            else
            {
                Get_Trx().Rollback();
                return(_message);
            }
        }
        /// <summary>
        ///     Create Payment for BankStatement
        /// </summary>
        /// <param name="bsl">bank statement Line</param>
        /// <returns>Message</returns>
        private String CreatePayment(MBankStatementLine bsl)
        {
            if (bsl == null || bsl.GetC_Payment_ID() != 0)
            {
                return("--");
            }
            log.Fine(bsl.ToString());
            if (bsl.GetC_Invoice_ID() == 0 && bsl.GetC_BPartner_ID() == 0)
            {
                throw new Exception("@NotFound@ @C_Invoice_ID@ / @C_BPartner_ID@");
            }
            //
            MBankStatement bs = new MBankStatement(GetCtx(), bsl.GetC_BankStatement_ID(), Get_Trx());
            //
            MPayment payment = CreatePayment(bsl.GetC_Invoice_ID(), bsl.GetC_BPartner_ID(),
                                             bsl.GetC_Currency_ID(), bsl.GetStmtAmt(), bsl.GetTrxAmt(),
                                             bs.GetC_BankAccount_ID(), bsl.GetStatementLineDate(), bsl.GetDateAcct(),
                                             bsl.GetDescription(), bsl.GetAD_Org_ID());

            if (payment == null)
            {
                throw new SystemException("Could not create Payment");
            }
            //	update statement
            bsl.SetPayment(payment);
            bsl.Save();
            //
            String retString = "@C_Payment_ID@ = " + payment.GetDocumentNo();

            if (Env.Signum(payment.GetOverUnderAmt()) != 0)
            {
                retString += " - @OverUnderAmt@=" + payment.GetOverUnderAmt();
            }
            return(retString);
        }