/**********************************************************
 * This file has been automatically created by "typemaker2"
 * from the file "imexporter_accountinfo.xml".
 * Please do not edit this file, all changes will be lost.
 * Better edit the mentioned source file instead.
 **********************************************************/

#ifndef AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_H
#define AB_IMEXPORTER_ACCOUNTINFO_IMEXPORTER_ACCOUNTINFO_H


#ifdef __cplusplus
extern "C" {
#endif

/** @page P_AB_IMEXPORTER_ACCOUNTINFO Structure AB_IMEXPORTER_ACCOUNTINFO
<p>This page describes the properties of AB_IMEXPORTER_ACCOUNTINFO.</p>



<h1>AB_IMEXPORTER_ACCOUNTINFO</h1>



@anchor AB_IMEXPORTER_ACCOUNTINFO_country
<h2>country</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetCountry(), get it with @ref AB_ImExporterAccountInfo_GetCountry().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_bankCode
<h2>bankCode</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetBankCode(), get it with @ref AB_ImExporterAccountInfo_GetBankCode().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_bankName
<h2>bankName</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetBankName(), get it with @ref AB_ImExporterAccountInfo_GetBankName().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_accountNumber
<h2>accountNumber</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetAccountNumber(), get it with @ref AB_ImExporterAccountInfo_GetAccountNumber().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_subAccountId
<h2>subAccountId</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetSubAccountId(), get it with @ref AB_ImExporterAccountInfo_GetSubAccountId().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_accountName
<h2>accountName</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetAccountName(), get it with @ref AB_ImExporterAccountInfo_GetAccountName().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_iban
<h2>iban</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetIban(), get it with @ref AB_ImExporterAccountInfo_GetIban().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_bic
<h2>bic</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetBic(), get it with @ref AB_ImExporterAccountInfo_GetBic().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_owner
<h2>owner</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetOwner(), get it with @ref AB_ImExporterAccountInfo_GetOwner().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_currency
<h2>currency</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetCurrency(), get it with @ref AB_ImExporterAccountInfo_GetCurrency().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_description
<h2>description</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetDescription(), get it with @ref AB_ImExporterAccountInfo_GetDescription().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_accountType
<h2>accountType</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetAccountType(), get it with @ref AB_ImExporterAccountInfo_GetAccountType().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_accountId
<h2>accountId</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetAccountId(), get it with @ref AB_ImExporterAccountInfo_GetAccountId().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_balanceList
<h2>balanceList</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetBalanceList(), get it with @ref AB_ImExporterAccountInfo_GetBalanceList().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_transactionList
<h2>transactionList</h2>

List of transactions. This list contains any kind of transactions all in one list. You can differentiate the type of the transaction (e.g. bank statement, debit note, transfer etc) by looking at the transaction type (see @ref AB_Transaction_GetType).
<p>Set this property with @ref AB_ImExporterAccountInfo_SetTransactionList(), get it with @ref AB_ImExporterAccountInfo_GetTransactionList().</p>


@anchor AB_IMEXPORTER_ACCOUNTINFO_eStatementList
<h2>eStatementList</h2>

<p>Set this property with @ref AB_ImExporterAccountInfo_SetEStatementList(), get it with @ref AB_ImExporterAccountInfo_GetEStatementList().</p>

*/

/* needed system headers */
#include <gwenhywfar/types.h>
#include <gwenhywfar/list1.h>
#include <gwenhywfar/list2.h>
#include <gwenhywfar/db.h>
#include <gwenhywfar/xml.h>

/* pre-headers */
#include <aqbanking/error.h>
#include <gwenhywfar/types.h>
#include <gwenhywfar/gwentime.h>

typedef struct AB_IMEXPORTER_ACCOUNTINFO AB_IMEXPORTER_ACCOUNTINFO;
GWEN_LIST_FUNCTION_LIB_DEFS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo, AQBANKING_API)
GWEN_LIST2_FUNCTION_LIB_DEFS(AB_IMEXPORTER_ACCOUNTINFO, AB_ImExporterAccountInfo, AQBANKING_API)



/* post-headers */
#include <aqbanking/types/transaction.h>
#include <aqbanking/types/document.h>
#include <aqbanking/account_type.h>
#include <aqbanking/types/balance.h>


/** Constructor. */
AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_new(void);

/** Destructor. */
AQBANKING_API void AB_ImExporterAccountInfo_free(AB_IMEXPORTER_ACCOUNTINFO *p_struct);

AQBANKING_API void AB_ImExporterAccountInfo_Attach(AB_IMEXPORTER_ACCOUNTINFO *p_struct);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_dup(const AB_IMEXPORTER_ACCOUNTINFO *p_src);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_copy(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const AB_IMEXPORTER_ACCOUNTINFO *p_src);

/** Getter.
 * Use this function to get the member "country" (see @ref AB_IMEXPORTER_ACCOUNTINFO_country)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetCountry(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "bankCode" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankCode)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetBankCode(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "bankName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankName)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetBankName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "accountNumber" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountNumber)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetAccountNumber(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "subAccountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_subAccountId)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetSubAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "accountName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountName)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetAccountName(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "iban" (see @ref AB_IMEXPORTER_ACCOUNTINFO_iban)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetIban(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "bic" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bic)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetBic(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "owner" (see @ref AB_IMEXPORTER_ACCOUNTINFO_owner)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetOwner(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "currency" (see @ref AB_IMEXPORTER_ACCOUNTINFO_currency)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetCurrency(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "description" (see @ref AB_IMEXPORTER_ACCOUNTINFO_description)
*/
AQBANKING_API const char *AB_ImExporterAccountInfo_GetDescription(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "accountType" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountType)
*/
AQBANKING_API int AB_ImExporterAccountInfo_GetAccountType(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "accountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountId)
*/
AQBANKING_API uint32_t AB_ImExporterAccountInfo_GetAccountId(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "balanceList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_balanceList)
*/
AQBANKING_API AB_BALANCE_LIST *AB_ImExporterAccountInfo_GetBalanceList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "transactionList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_transactionList)
*/
AQBANKING_API AB_TRANSACTION_LIST *AB_ImExporterAccountInfo_GetTransactionList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Getter.
 * Use this function to get the member "eStatementList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_eStatementList)
*/
AQBANKING_API AB_DOCUMENT_LIST *AB_ImExporterAccountInfo_GetEStatementList(const AB_IMEXPORTER_ACCOUNTINFO *p_struct);

/** Setter.
 * Use this function to set the member "country" (see @ref AB_IMEXPORTER_ACCOUNTINFO_country)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetCountry(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "bankCode" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankCode)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetBankCode(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "bankName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bankName)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetBankName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "accountNumber" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountNumber)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetAccountNumber(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "subAccountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_subAccountId)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetSubAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "accountName" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountName)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetAccountName(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "iban" (see @ref AB_IMEXPORTER_ACCOUNTINFO_iban)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetIban(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "bic" (see @ref AB_IMEXPORTER_ACCOUNTINFO_bic)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetBic(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "owner" (see @ref AB_IMEXPORTER_ACCOUNTINFO_owner)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetOwner(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "currency" (see @ref AB_IMEXPORTER_ACCOUNTINFO_currency)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetCurrency(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "description" (see @ref AB_IMEXPORTER_ACCOUNTINFO_description)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetDescription(AB_IMEXPORTER_ACCOUNTINFO *p_struct, const char *p_src);

/** Setter.
 * Use this function to set the member "accountType" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountType)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetAccountType(AB_IMEXPORTER_ACCOUNTINFO *p_struct, int p_src);

/** Setter.
 * Use this function to set the member "accountId" (see @ref AB_IMEXPORTER_ACCOUNTINFO_accountId)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetAccountId(AB_IMEXPORTER_ACCOUNTINFO *p_struct, uint32_t p_src);

/** Setter.
 * Use this function to set the member "balanceList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_balanceList)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetBalanceList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_BALANCE_LIST *p_src);

/** Setter.
 * Use this function to set the member "transactionList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_transactionList)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetTransactionList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_TRANSACTION_LIST *p_src);

/** Setter.
 * Use this function to set the member "eStatementList" (see @ref AB_IMEXPORTER_ACCOUNTINFO_eStatementList)
*/
AQBANKING_API void AB_ImExporterAccountInfo_SetEStatementList(AB_IMEXPORTER_ACCOUNTINFO *p_struct, AB_DOCUMENT_LIST *p_src);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO_LIST *AB_ImExporterAccountInfo_List_dup(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_src);

AQBANKING_API void AB_ImExporterAccountInfo_ReadDb(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db);

AQBANKING_API int AB_ImExporterAccountInfo_WriteDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromDb(GWEN_DB_NODE *p_db);

AQBANKING_API int AB_ImExporterAccountInfo_toDb(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_DB_NODE *p_db);

AQBANKING_API void AB_ImExporterAccountInfo_ReadXml(AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db);

AQBANKING_API void AB_ImExporterAccountInfo_WriteXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db);

AQBANKING_API void AB_ImExporterAccountInfo_toXml(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_XMLNODE *p_db);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_fromXml(GWEN_XMLNODE *p_db);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByIban(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list,  const char *p_cmp);

AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByAccountId(const AB_IMEXPORTER_ACCOUNTINFO_LIST *p_list, uint32_t p_cmp);

AQBANKING_API void AB_ImExporterAccountInfo_toHashString(const AB_IMEXPORTER_ACCOUNTINFO *p_struct, GWEN_BUFFER *p_buffer);

AQBANKING_API int AB_ImExporterAccountInfo_List2_freeAll(AB_IMEXPORTER_ACCOUNTINFO_LIST2 *tl);
AQBANKING_API AB_TRANSACTION *AB_ImExporterAccountInfo_GetFirstTransaction(const AB_IMEXPORTER_ACCOUNTINFO *t, int ty, int cmd);
AQBANKING_API void AB_ImExporterAccountInfo_AddTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, AB_TRANSACTION *t);
AQBANKING_API int AB_ImExporterAccountInfo_GetTransactionCount(const AB_IMEXPORTER_ACCOUNTINFO *t, int ty, int cmd);
AQBANKING_API AB_BALANCE *AB_ImExporterAccountInfo_GetFirstBalance(const AB_IMEXPORTER_ACCOUNTINFO *as);
AQBANKING_API void AB_ImExporterAccountInfo_AddBalance(AB_IMEXPORTER_ACCOUNTINFO *st, AB_BALANCE *bal);
AQBANKING_API AB_DOCUMENT *AB_ImExporterAccountInfo_GetFirstEStatement(const AB_IMEXPORTER_ACCOUNTINFO *st);
AQBANKING_API void AB_ImExporterAccountInfo_AddEStatement(AB_IMEXPORTER_ACCOUNTINFO *st, AB_DOCUMENT *d);
/** 
 * This function clears the account info (e.g. removes all transactions etc). 
 */ 
 AQBANKING_API void AB_ImExporterAccountInfo_Clear(AB_IMEXPORTER_ACCOUNTINFO *st);
AQBANKING_API void AB_ImExporterAccountInfo_FillFromTransaction(AB_IMEXPORTER_ACCOUNTINFO *st, const AB_TRANSACTION *t);
AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetByBankCodeAndAccountNumber(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, const char *bankCode, const char *accountNumber, int accountType);
AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_Find(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType);
/** 
 * Check whether a given account info object matches the given criteria. 
 * @param a account info object to match 
 * @param uniqueId unique account id (use 0 as wildcard) 
 * @param country ISO code of the country (wildcards and jokers allowed) 
 * @param bankId bank code to search for (wildcards and jokers allowed) 
 * @param accountNumber account number to search for (wildcards and jokers allowed) 
 * @param subAccountId sub account number (wildcards and jokers allowed) 
 * @param iban IBAN to search for (wildcards and jokers allowed) 
 * @param currency currecny the account uses (wildcards and jokers allowed) 
 * @param ty account type (use AB_AccountType_Unknown as wildcard) 
 */ 
 AQBANKING_API int AB_ImExporterAccountInfo_Matches(const AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty);
/** 
 * Find the first matching account info object in a list of account info objects. 
 * @param al list of account info objects among to search 
 * @param uniqueId unique account id (use 0 as wildcard) 
 * @param country ISO code of the country (wildcards and jokers allowed) 
 * @param bankId bank code to search for (wildcards and jokers allowed) 
 * @param accountNumber account number to search for (wildcards and jokers allowed) 
 * @param subAccountId sub account number (wildcards and jokers allowed) 
 * @param iban IBAN to search for (wildcards and jokers allowed) 
 * @param currency currecny the account uses (wildcards and jokers allowed) 
 * @param ty account type (use AB_AccountType_Unknown as wildcard) 
 */ 
 AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindFirst(AB_IMEXPORTER_ACCOUNTINFO_LIST *al, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty);
/** 
 * Find the next matching account info object in a list of account info objects. 
 * @param a previous matching account info objects among to search 
 * @param uniqueId unique account id (use 0 as wildcard) 
 * @param country ISO code of the country (wildcards and jokers allowed) 
 * @param bankId bank code to search for (wildcards and jokers allowed) 
 * @param accountNumber account number to search for (wildcards and jokers allowed) 
 * @param subAccountId sub account number (wildcards and jokers allowed) 
 * @param iban IBAN to search for (wildcards and jokers allowed) 
 * @param currency currecny the account uses (wildcards and jokers allowed) 
 * @param ty account type (use AB_AccountType_Unknown as wildcard) 
 */ 
 AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_FindNext(AB_IMEXPORTER_ACCOUNTINFO *a, uint32_t uniqueId, const char *country, const char *bankId, const char *accountNumber, const char *subAccountId, const char *iban, const char *currency, int ty);
AQBANKING_API AB_IMEXPORTER_ACCOUNTINFO *AB_ImExporterAccountInfo_List_GetOrAdd(AB_IMEXPORTER_ACCOUNTINFO_LIST *l, uint32_t uniqueId, const char *iban, const char *bankCode, const char *accountNumber, int accountType);
/* end-headers */


#ifdef __cplusplus
}
#endif

#endif

