protected static void Copy(CABankStatement aDest, STMTRS aSrc) 
		{
			aDest.BankStatementFormat = "OFX";
			aDest.StartBalanceDate = aSrc.BANKTRANLIST.DTSTART;
			aDest.EndBalanceDate = aSrc.BANKTRANLIST.DTEND;
			aDest.CuryEndBalance = aSrc.LEDGERBAL.BALAMT;
		}
		protected void Export(CABankStatementEntry aGraph, STMTRS aAcctStatement, bool updateCurrent) 
		{
			if (!aAcctStatement.HasAccountInfo())
				throw new PXException(Messages.OFXImportErrorAccountInfoIsIncorrect);
			
			CashAccount acct = aGraph.cashAccountByExtRef.Select(aAcctStatement.IsBankAccount() ? aAcctStatement.BANKACCTFROM.ACCTID : aAcctStatement.CCACCTFROM.ACCTID);
			if (acct == null) throw new PXException(Messages.CashAccountWithExtRefNbrIsNotFoundInTheSystem, aAcctStatement.BANKACCTFROM.ACCTID);
			if (aGraph.casetup.Current.IgnoreCuryCheckOnImport != true && acct.CuryID != aAcctStatement.CURDEF)
                throw new PXException(Messages.CashAccountHasCurrencyDifferentFromOneInStatement, acct.CashAccountCD, acct.CuryID, aAcctStatement.CURDEF);

			foreach (OFXStatementReader.STMTTRN iTran in aAcctStatement.BANKTRANLIST.Trans)
			{
				string stmtRefNbr;
				if (aGraph.IsAlreadyImported(acct.CashAccountID, iTran.FITID, out stmtRefNbr))
				{
                    throw new PXException(Messages.TransactionWithFitIdHasAlreadyBeenImported, iTran.FITID, stmtRefNbr, acct.CashAccountCD, acct.Descr);
				}
			}

			CABankStatement statement = null;
			if (updateCurrent == false || aGraph.BankStatement.Current == null || aGraph.BankStatement.Current.CashAccountID == null)
			{
				aGraph.Clear();
				statement = new CABankStatement();
				statement.CashAccountID = acct.CashAccountID;
				statement = aGraph.BankStatement.Insert(statement);
				aGraph.BankStatement.Current = statement;
			}
			else
			{
				statement = aGraph.BankStatement.Current ;
				if (statement.CashAccountID.HasValue)
				{
					if (statement.CashAccountID != acct.CashAccountID)
					{
                        throw new PXException(Messages.ImportedStatementIsMadeForAnotherAccount, acct.CashAccountCD, acct.Descr);
					}
				}				
			}
			CABankStatement copy = (CABankStatement)aGraph.BankStatement.Cache.CreateCopy(statement);
			Copy(copy, aAcctStatement);
			statement = aGraph.BankStatement.Update(copy);
			foreach (OFXStatementReader.STMTTRN iTran in aAcctStatement.BANKTRANLIST.Trans)
			{
				CABankStatementDetail detail = new CABankStatementDetail();
				Copy(detail,iTran);				
				detail = aGraph.Details.Insert(detail);
				CABankStatementDetail detail1 = (CABankStatementDetail)aGraph.Details.Cache.CreateCopy(detail);
				//Must be done after to avoid overwriting of debit by credit
				CopyForUpdate(detail1, iTran);
				detail = aGraph.Details.Update(detail1);
			}
			aGraph.Save.Press();
		}