brmbar-cli undo: New feature

This commit is contained in:
brmbar 2015-12-13 16:36:50 +01:00
parent feec2c9ac4
commit 3ea61f01d7
2 changed files with 22 additions and 0 deletions

View file

@ -31,6 +31,9 @@ Usage: brmbar-cli.py COMMAND ARGS...
screen of the GUI. screen of the GUI.
adduser USER adduser USER
Add user (debt) account with given username. Add user (debt) account with given username.
undo TRANSID
Commit a transaction that reverses all splits of a transaction with
a given id (to find out that id: select * from transaction_cashsums;)
3. Inventorization 3. Inventorization
@ -152,6 +155,10 @@ elif sys.argv[1] == "adduser":
acct.add_barcode(sys.argv[2]) # will commit acct.add_barcode(sys.argv[2]) # will commit
print("{}: id {}".format(acct.name, acct.id)); print("{}: id {}".format(acct.name, acct.id));
elif sys.argv[1] == "undo":
newtid = shop.undo(int(sys.argv[2]))
print("Transaction %d undone by reverse transaction %d" % (int(sys.argv[2]), newtid))
elif sys.argv[1] == "inventory": elif sys.argv[1] == "inventory":
if (len(sys.argv) % 2 != 0 or len(sys.argv) < 4): if (len(sys.argv) % 2 != 0 or len(sys.argv) < 4):
print ("Invalid number of parameters, count your parameters.") print ("Invalid number of parameters, count your parameters.")

View file

@ -177,6 +177,7 @@ class Shop:
item.credit(transaction, 0, "Inventory fix - amount was correct") item.credit(transaction, 0, "Inventory fix - amount was correct")
self.db.commit() self.db.commit()
return False return False
def fix_cash(self, amount): def fix_cash(self, amount):
amount_in_reality = amount amount_in_reality = amount
amount_in_system = self.cash.balance() amount_in_system = self.cash.balance()
@ -196,6 +197,7 @@ class Shop:
return True return True
else: else:
return False return False
def consolidate(self): def consolidate(self):
transaction = self._transaction(description = "BrmBar inventory consolidation") transaction = self._transaction(description = "BrmBar inventory consolidation")
@ -210,3 +212,16 @@ class Shop:
self.deficit.credit(transaction, deficit_balance, "Deficit balance removed from profit.") self.deficit.credit(transaction, deficit_balance, "Deficit balance removed from profit.")
self.profits.credit(transaction, deficit_balance, "Deficit balance removed from profit.") self.profits.credit(transaction, deficit_balance, "Deficit balance removed from profit.")
self.db.commit() self.db.commit()
def undo(self, oldtid):
description = self.db.execute_and_fetch("SELECT description FROM transactions WHERE id = %s", [oldtid])[0]
description = 'undo %d (%s)' % (oldtid, description)
transaction = self._transaction(description=description)
for split in self.db.execute_and_fetchall("SELECT id, side, account, amount, memo FROM transaction_splits WHERE transaction = %s", [oldtid]):
splitid, side, account, amount, memo = split
memo = 'undo %d (%s)' % (splitid, memo)
amount = -amount
self.db.execute("INSERT INTO transaction_splits (transaction, side, account, amount, memo) VALUES (%s, %s, %s, %s, %s)", [transaction, side, account, amount, memo])
self.db.commit()
return transaction