From 83735fec9849ee2e9fddd6157e387c4ea5ed58c9 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Mon, 24 Sep 2012 04:40:56 +0200 Subject: [PATCH] brmbar v3 Withdraw: New view for user withdrawal of previously added money --- brmbar3/TODO | 8 +- brmbar3/brmbar-gui-qt4.py | 6 ++ brmbar3/brmbar-gui-qt4/UserMgmt.qml | 6 +- brmbar3/brmbar-gui-qt4/Withdraw.qml | 113 ++++++++++++++++++++++++++++ 4 files changed, 128 insertions(+), 5 deletions(-) create mode 100644 brmbar3/brmbar-gui-qt4/Withdraw.qml diff --git a/brmbar3/TODO b/brmbar3/TODO index d0be53d..92cc486 100644 --- a/brmbar3/TODO +++ b/brmbar3/TODO @@ -2,17 +2,17 @@ + Stock management link + User management link + Bilance overview (Cash, Profit, Credit total) -/ Item picker from list (only items with non-zero quantities) -/ User management ++ Item picker from list ++ User management + List of users - - Withdrawal of user credit + + Withdrawal of user credit - Numerical manual entry support - Use for credit charge - Use for withdrawal - Alphanumeric manual entry support - Use in item editor - Restocking view (Stock management) - - Item picker with edit button + - Item picker with edit button (only items with non-zero quantities) - Item editor (name, barcode, buy price, sale price, quantity) - Group quantity changes in a single transaction - Withdrawal for brmbar receipts diff --git a/brmbar3/brmbar-gui-qt4.py b/brmbar3/brmbar-gui-qt4.py index 9ca8943..edfef1e 100755 --- a/brmbar3/brmbar-gui-qt4.py +++ b/brmbar3/brmbar-gui-qt4.py @@ -67,6 +67,12 @@ class ShopAdapter(QtCore.QObject): shop.add_credit(credit = credit, user = user) return user.negbalance_str() + @QtCore.Slot('QVariant', 'QVariant', result='QVariant') + def withdrawCredit(self, credit, userid): + user = brmbar.Account.load(db, id = userid) + shop.withdraw_credit(credit = credit, user = user) + return user.negbalance_str() + @QtCore.Slot(result='QVariant') def balance_cash(self): return shop.cash.balance_str() diff --git a/brmbar3/brmbar-gui-qt4/UserMgmt.qml b/brmbar3/brmbar-gui-qt4/UserMgmt.qml index 356f933..306fa80 100644 --- a/brmbar3/brmbar-gui-qt4/UserMgmt.qml +++ b/brmbar3/brmbar-gui-qt4/UserMgmt.qml @@ -24,7 +24,8 @@ Item { loadPageByAcct(acct) return } - loadPage("UserEdit", { name: acct["name"], dbid: acct["id"], negbalance: acct["negbalance"] }) + /* TODO: This should be UserEdit when implemented. */ + loadPage("Withdraw", { name: acct["name"], dbid: acct["id"], negbalance: acct["negbalance"] }) } } @@ -67,6 +68,9 @@ Item { height: 68 text: "Withdraw" fontSize: 34 + onButtonClick: { + loadPage("Withdraw", { username: modelData.name, userdbid: modelData.id }) + } } } model: user_list_model diff --git a/brmbar3/brmbar-gui-qt4/Withdraw.qml b/brmbar3/brmbar-gui-qt4/Withdraw.qml new file mode 100644 index 0000000..cba13d5 --- /dev/null +++ b/brmbar3/brmbar-gui-qt4/Withdraw.qml @@ -0,0 +1,113 @@ +// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5 +import QtQuick 1.1 +import QtQuick 1.0 + +Item { + id: page + anchors.fill: parent + + property variant username: "" + property variant userdbid: "" + property variant amount: "" + + Text { + id: item_name + x: 65 + y: 156 + width: 537 + height: 160 + color: "#ffffff" + text: parent.username ? parent.username : "Credit withdrawal" + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + font.pointSize: 44 + } + + Text { + id: text3 + x: 611 + y: 156 + height: 160 + width: 348 + color: "#ffff7c" + text: parent.amount ? "-" + parent.amount : "" + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + font.pointSize: 90 + } + + BarTextHint { + x: 65 + y: 430 + hint_goal: parent.amount ? (parent.username ? "Withdraw amount?" : "Withdraw:") : "Withdraw:" + hint_action: !(parent.amount && parent.userdbid) ? "Scan barcode now" : "" + } + + BarcodeInput { + color: "#00ff00" /* just for debugging */ + onAccepted: { + var acct = shop.barcodeInput(text) + text = "" + if (typeof(acct) == "undefined" || (parent.username && acct.acctype != "recharge") || (parent.amount && acct.acctype != "debt")) { + status_text.setStatus("Unknown barcode", "#ff4444") + return + } + if (acct.acctype == "debt") { + username = acct.name + userdbid = acct.id + } else { + amount = acct.amount + } + /* if (username && amount) { + parent.withdrawCredit() + } */ /* Always ask for confirmation. */ + } + } + + BarButton { + id: withdraw_button + x: 65 + y: 582 + width: 360 + text: "Withdraw" + fontSize: 44 + visible: parent.amount && parent.userdbid + onButtonClick: { + parent.withdrawCredit() + } + } + + BarButton { + id: cancel + x: 599 + y: 582 + width: 360 + text: "Cancel" + onButtonClick: { + status_text.setStatus("Withdrawal cancelled", "#ff4444") + loadPage("UserMgmt") /* TODO better "back" navigation? */ + } + } + + Text { + id: text1 + x: 112 + y: 333 + width: 800 + height: 80 + color: "#ffffff" + text: "Take "+amount+" Kč from the money box now." + visible: amount ? true : false + anchors.horizontalCenterOffset: 0 + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + font.pointSize: 36 + anchors.horizontalCenter: parent.horizontalCenter + } + + function withdrawCredit() { + var balance = shop.withdrawCredit(amount, userdbid) + status_text.setStatus("Withdrawn! "+username+"'s credit is "+balance+".", "#ffff7c") + loadPage("MainPage") + } +}