X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=src%2Fserver%2Fdispense.c;h=af40c37c5909e23cc7b665c4cb5a9147030b09cb;hb=f75c35bdf5e2c6c1104c22c32bd0d55ca16b52c9;hp=884c541cf2ec342a2a747dc496aea0d9459fb138;hpb=05918a67e8509a2b2df6509039a801affd3444eb;p=tpg%2Fopendispense2.git diff --git a/src/server/dispense.c b/src/server/dispense.c index 884c541..af40c37 100644 --- a/src/server/dispense.c +++ b/src/server/dispense.c @@ -14,20 +14,22 @@ int DispenseItem(int User, tItem *Item) int ret; tHandler *handler; char *username; + char *reason; handler = Item->Handler; // Check if the dispense is possible if( handler->CanDispense ) { ret = handler->CanDispense( User, Item->ID ); - if(!ret) return 1; // 1: Unknown Error + 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 - if(ret != 0) return 2; // 2: No 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 username = GetUserName(User); @@ -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,39 @@ 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; +} + +/** + * \brief Add money to an account + */ +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; +}