X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=src%2Fserver%2Fdispense.c;h=77f07accd1b8ec5dc08ea5145c08cfca919595f2;hb=ca788d1ed62b100c213fa9de432f969d85b136e9;hp=09b2c4fdb60409d67e2055b0c691a377ee3577ad;hpb=1cb4c25d8821698d15bcfe223ee510ebb1b972c2;p=tpg%2Fopendispense2.git diff --git a/src/server/dispense.c b/src/server/dispense.c index 09b2c4f..77f07ac 100644 --- a/src/server/dispense.c +++ b/src/server/dispense.c @@ -14,6 +14,7 @@ int DispenseItem(int User, tItem *Item) int ret; tHandler *handler; char *username; + char *reason; handler = Item->Handler; @@ -22,11 +23,12 @@ int DispenseItem(int User, tItem *Item) ret = handler->CanDispense( User, Item->ID ); if(ret) return 1; // 1: Unable to dispense } - + // Subtract the balance - ret = Transfer( User, GetUserID(">sales"), Item->Price, "" ); - // What value should I use for this error? - // AlterBalance should return the final user balance + reason = mkstr("Dispense - %s:%i %s", handler->Name, Item->ID, Item->Name); + if( !reason ) reason = Item->Name; // TODO: Should I instead return an error? + ret = Transfer( User, GetUserID(COKEBANK_SALES_ACCT), Item->Price, reason); + free(reason); if(ret) return 2; // 2: No balance // Get username for debugging @@ -38,14 +40,14 @@ int DispenseItem(int User, tItem *Item) if(ret) { Log_Error("Dispense failed after deducting cost (%s dispensing %s - %ic)", username, Item->Name, Item->Price); - Transfer( GetUserID(">sales"), User, Item->Price, "rollback" ); + Transfer( GetUserID(COKEBANK_SALES_ACCT), User, Item->Price, "rollback" ); free( username ); return -1; // 1: Unkown Error again } } // And log that it happened - Log_Info("Dispensed %s (%i:%i) for %s [cost %i, balance %i cents]", + Log_Info("dispense %s (%s:%i) by %s [cost %i, balance %i cents]", Item->Name, handler->Name, Item->ID, username, Item->Price, GetBalance(User) ); @@ -53,3 +55,36 @@ int DispenseItem(int User, tItem *Item) free( username ); return 0; // 0: EOK } + +/** + * \brief Give money from one user to another + */ +int DispenseGive(int SrcUser, int DestUser, int Ammount, const char *ReasonGiven) +{ + int ret; + if( Ammount < 0 ) return 1; // Um... negative give? Not on my watch! + + ret = Transfer( SrcUser, DestUser, Ammount, ReasonGiven ); + if(ret) return 2; // No Balance + + Log_Info("give %i to %s from %s (%s)", + Ammount, GetUserName(DestUser), GetUserName(SrcUser), ReasonGiven + ); + + return 0; +} + +int DispenseAdd(int User, int ByUser, int Ammount, const char *ReasonGiven) +{ + int ret; + + ret = Transfer( GetUserID(COKEBANK_DEBT_ACCT), User, Ammount, ReasonGiven ); + + if(ret) return 2; + + Log_Info("add %i to %s by %s (%s)", + Ammount, GetUserName(User), GetUserName(ByUser), ReasonGiven + ); + + return 0; +}