#ifndef _COKEBANK_H_
#define _COKEBANK_H_
+#include <stdlib.h>
+
#define COKEBANK_SALES_ACCT ">sales" //!< Sales made into
#define COKEBANK_DEBT_ACCT ">liability" //!< Credit taken out of
+#define COKEBANK_FREE_ACCT ">freeitems" //!< ODay drink costs taken out of
/**
* \brief Account iterator opaque structure
*/
typedef struct sAcctIterator tAcctIterator;
+/**
+ * \brief Iterator for a collection of items
+ */
+typedef struct sItemIterator tItemIterator;
+
+/**
+ * \brief Flag values for the \a Flags parameter to Bank_Iterator
+ */
enum eBank_ItFlags
{
- BANK_ITFLAG_MINBALANCE = 0x01,
- BANK_ITFLAG_MAXBALANCE = 0x02,
- BANK_ITFLAG_SEENBEFORE = 0x04,
- BANK_ITFLAG_SEENAFTER = 0x08,
+ BANK_ITFLAG_MINBALANCE = 0x01, //!< Balance value is Minium Balance
+ BANK_ITFLAG_MAXBALANCE = 0x02, //!< Balance value is Maximum Balance (higher priority)
+ BANK_ITFLAG_SEENAFTER = 0x04, //!< Last seen value is lower bound
+ BANK_ITFLAG_SEENBEFORE = 0x08, //!< Last seen value is upper bound (higher priority)
- BANK_ITFLAG_SORT_NONE = 0x000,
- BANK_ITFLAG_SORT_NAME = 0x100,
- BANK_ITFLAG_SORT_BAL = 0x200,
- BANK_ITFLAG_SORT_UNIXID = 0x300,
- BANK_ITFLAG_SORT_LASTSEEN = 0x400,
- BANK_ITFLAG_SORTMASK = 0x700,
- BANK_ITFLAG_REVSORT = 0x800
+ BANK_ITFLAG_SORT_NONE = 0x000, //!< No sorting (up to the implementation)
+ BANK_ITFLAG_SORT_NAME = 0x100, //!< Sort alphabetically ascending by name
+ BANK_ITFLAG_SORT_BAL = 0x200, //!< Sort by balance, ascending
+ BANK_ITFLAG_SORT_UNIXID = 0x300, //!< Sort by UnixUID (TODO: Needed?)
+ BANK_ITFLAG_SORT_LASTSEEN = 0x400, //!< Sort by last seen time (ascending)
+ BANK_ITFLAG_SORTMASK = 0x700, //!< Sort type mask
+ BANK_ITFLAG_REVSORT = 0x800 //!< Sort descending instead
};
/**
*/
enum eCokebank_Flags {
USER_FLAG_COKE = 0x01, //!< User is a coke member (can do coke accounting)
- USER_FLAG_WHEEL = 0x02, //!< User is a wheel member (can create, delete and lock accounts)
+ USER_FLAG_ADMIN = 0x02, //!< User is a administrator (can create, delete and lock accounts)
USER_FLAG_DOORGROUP = 0x04, //!< User is in the door group (can open the clubroom door)
USER_FLAG_INTERNAL = 0x40, //!< Account is internal (cannot be authenticated, no lower balance limit)
USER_FLAG_DISABLED = 0x80 //!< Account is disabled (no transactions allowed)
/**
* \brief Transfer money from one account to another
- * \param SourceUser UID (from \a Bank_GetUserID) to take the money from
- * \param DestUser UID (from \a Bank_GetUserID) give money to
+ * \param SourceAcct UID (from \a Bank_GetUserID) to take the money from
+ * \param DestAcct UID (from \a Bank_GetUserID) give money to
* \param Ammount Amount of money (in cents) to transfer
* \param Reason Reason for the transfer
*/
extern char *Bank_GetAcctName(int AcctID);
/**
* \brief Get an account ID from a passed name
+ * \param Name Name to search for
+ * \return ID of the account, or -1 if not found
*/
extern int Bank_GetAcctByName(const char *Name);
/**
* \brief Create a new account
- * \param Username Name for the new account (if NULL, an anoymous account is created)
+ * \param Name Name for the new account (if NULL, an anoymous account is created)
* \return ID of the new account
*/
extern int Bank_CreateAcct(const char *Name);
extern int Bank_GetAcctByCard(const char *CardID);
/**
- * \brief Add a card to an git account
- * \param User User ID
+ * \brief Add a card to an account
+ * \param AcctID Account ID
* \param CardID MIFARE card ID
* \return Boolean failure
* \retval 0 Success
- * \retval 1 Bad user ID
+ * \retval 1 Bad account ID
* \retval 2 Card in use
*/
-extern int Bank_AddUserCard(int User, const char *CardID);
+extern int Bank_AddAcctCard(int AcctID, const char *CardID);
+
+// ---
+// Server provided helper functions
+// ---
+/**
+ * \brief Create a formatted string on the heap
+ * \param Format Format string
+ * \return Heap string
+ */
+extern char *mkstr(const char *Format, ...);
+
+/**
+ * \brief Dispense log access
+ * \note Try not to over-use, only stuff that matters should go in here
+ */
+extern void Log_Info(const char *Format, ...);
#endif