From 410aa99018c727e341a62d1f7f632f9e952af0f7 Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Thu, 5 Apr 2018 09:30:32 +0200 Subject: [PATCH] Add order status --- database.py | 3 ++- strings.py | 19 ++++++++++++------- utils.py | 4 +++- worker.py | 24 +++++++++++++++++++----- 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/database.py b/database.py index 14c3d8a..fc46fce 100644 --- a/database.py +++ b/database.py @@ -253,7 +253,8 @@ class Order(TableDeclarativeBase): date=self.creation_date.isoformat(), items=items, notes=self.notes if self.notes is not None else "", - value=str(Price(-joined_self.transaction.value))) + value=str(Price(-joined_self.transaction.value))) + \ + (strings.refund_reason.format(reason=self.refund_reason) if self.refund_date is not None else "") class OrderItem(TableDeclarativeBase): diff --git a/strings.py b/strings.py index 47c9032..46e85a4 100644 --- a/strings.py +++ b/strings.py @@ -31,7 +31,8 @@ conversation_after_start = "Ciao!\n" \ "Benvenuto su greed!" # Conversation: to send an inline keyboard you need to send a message with it -conversation_open_user_menu = "Cosa vorresti fare?" +conversation_open_user_menu = "Cosa vorresti fare?\n" \ + "Hai {credit} sul portafoglio." # Conversation: the same message as above but when the first has already been sent conversation_open_user_menu_multiple = "Hai bisogno di qualcos'altro?" @@ -192,7 +193,7 @@ payment_invoice_label = "Ricarica" payment_invoice_fee_label = "Supplemento carta" # Notification: order has been placed -notification_order_placed = "*️⃣ E' stato piazzato un nuovo ordine:\n" \ +notification_order_placed = "E' stato piazzato un nuovo ordine:\n" \ "{order}" # Notification: order has been completed @@ -201,10 +202,11 @@ notification_order_completed = "Un tuo ordine è stato completato!\n" \ # Notification: order has been refunded notification_order_refunded = "Un tuo ordine è stato rimborsato!\n" \ - "{order}\n" \ - "\n" \ - "Motivazione data dal negoziante:\n" \ - "{reason}" + "{order}" + +# Refund reason +refund_reason = "Motivazione del rimborso:\n" \ + "{reason}" # Info: informazioni sul bot bot_info = 'Questo bot utilizza greed,' \ @@ -250,4 +252,7 @@ error_duplicate_name = "️⚠️ Esiste già un prodotto con questo nome." error_not_enough_credit = "⚠️ Non hai credito sufficiente per effettuare l'ordine." # Error: order has already been cleared -error_order_already_cleared = "⚠️ Questo ordine è già stato processato." \ No newline at end of file +error_order_already_cleared = "⚠️ Questo ordine è già stato processato." + +# Error: no orders have been placed, so none can be shown +error_no_orders = "⚠️ Non hai ancora piazzato ordini, quindi non c'è niente da visualizzare!" \ No newline at end of file diff --git a/utils.py b/utils.py index 2805739..8f2b261 100644 --- a/utils.py +++ b/utils.py @@ -1,4 +1,5 @@ -import time +import telegram +import telegram.error from configloader import config from strings import currency_format_string, currency_symbol @@ -83,3 +84,4 @@ class Price: def __ifloordiv__(self, other): self.value //= other return self + diff --git a/worker.py b/worker.py index da3da2e..6b91560 100644 --- a/worker.py +++ b/worker.py @@ -64,6 +64,11 @@ class ChatWorker(threading.Thread): self.__user_menu() # If the user is an admin, send him to the admin menu else: + # Clear the live orders flag + self.admin.live_mode = False + # Commit the change + self.session.commit() + # Open the admin menu self.__admin_menu() def stop(self, reason: str=""): @@ -210,8 +215,10 @@ class ChatWorker(threading.Thread): [telegram.KeyboardButton(strings.menu_add_credit)], [telegram.KeyboardButton(strings.menu_bot_info)]] # Send the previously created keyboard to the user (ensuring it can be clicked only 1 time) - self.bot.send_message(self.chat.id, strings.conversation_open_user_menu, - reply_markup=telegram.ReplyKeyboardMarkup(keyboard, one_time_keyboard=True)) + self.bot.send_message(self.chat.id, + strings.conversation_open_user_menu.format(credit=Price(self.user.credit)), + reply_markup=telegram.ReplyKeyboardMarkup(keyboard, one_time_keyboard=True), + parse_mode="HTML") # Wait for a reply from the user selection = self.__wait_for_specific_message([strings.menu_order, strings.menu_order_status, strings.menu_add_credit, strings.menu_bot_info]) @@ -392,7 +399,15 @@ class ChatWorker(threading.Thread): def __order_status(self): """Display the status of the sent orders.""" - pass + # Find the latest orders + orders = self.session.query(db.Order).filter(db.Order.user == self.user).order_by(db.Order.creation_date.desc()).limit(5).all() + # Ensure there is at least one order to display + if len(orders) == 0: + self.bot.send_message(self.chat.id, strings.error_no_orders) + # Display the order status to the user + for order in orders: + self.bot.send_message(self.chat.id, order.get_text(self.session)) + # TODO: maybe add a page displayer instead of showing the latest 5 orders def __add_credit_menu(self): """Add more credit to the account.""" @@ -766,8 +781,7 @@ class ChatWorker(threading.Thread): # Update the order message self.bot.edit_message_text(order.get_text(session=self.session), chat_id=self.chat.id, message_id=update.message.message_id) # Notify the user of the refund - self.bot.send_message(order.user_id, strings.notification_order_refunded.format(order=order.get_text(self.session), reason=reply)) - + self.bot.send_message(order.user_id, strings.notification_order_refunded.format(order=order.get_text(self.session))) def __graceful_stop(self): """Handle the graceful stop of the thread."""