Ver Fonte

Cli implemented for feature 'new order'

Jovian (Netbook) há 6 anos atrás
pai
commit
b0f23e1289
6 ficheiros alterados com 91 adições e 1 exclusões
  1. 19 0
      app_customer.py
  2. 17 0
      cli/confirm.py
  3. 1 1
      cli/customer_action_asker.py
  4. 21 0
      cli/house_asker.py
  5. 24 0
      cli/product_select.py
  6. 9 0
      consumer/connect.py

+ 19 - 0
app_customer.py

@@ -5,6 +5,10 @@ from cli.select import Selecter
 from cli.pass_asker import PassAsker
 from cli.customer_action_asker import CustomerActionAsker
 from cli.book_asker import BookAsker
+from cli.product_select import ProductSelecter
+from cli.house_asker import HouseAsker
+from cli.confirm import Confirmer
+from datetime import date, timedelta
 
 display = BasicDisplay()
 display.title('Customer application')
@@ -16,6 +20,9 @@ companyAsker = Selecter('Choose your company')
 passAsker = PassAsker()
 actionAsker = CustomerActionAsker()
 bookAsker = BookAsker()
+productAsker = ProductSelecter()
+houseAsker = HouseAsker()
+confirmAsker = Confirmer()
 
 # Login phase
 compList = consumer.getCompanyNames()
@@ -57,6 +64,18 @@ while running:
             display.error('No warehouse for', login, 'yet.')
         else:
             display.warehouseList(houseList)
+    elif action == 'new order':
+        houseList = consumer.getWarehousesOfCompany(login)
+        targetHouseId = houseAsker.select(houseList)
+        proList = consumer.getProductSet()
+        productIdList = productAsker.selectInto(proList)
+        productQuantityList = [100] * len(productIdList)
+        dueDate = date.today() + timedelta(15)
+        if (confirmAsker.confirm()):
+            consumer.addOrder(login, targetHouseId, productIdList, productQuantityList, dueDate)
+            consumer.commit()
+        else:
+            display.error('Order creation aborted')
     else:
         display.notImplemented(action)
 

+ 17 - 0
cli/confirm.py

@@ -0,0 +1,17 @@
+from PyInquirer import prompt
+
+# Ask for boolean confirmation
+
+class Confirmer:
+    def __init__(self):
+        self.widget = [
+            {
+		'type':'confirm',
+		'name':'ok',
+		'message':'Please confirm',
+		'default':True
+            }
+        ]
+
+    def confirm(self):
+        return prompt(self.widget)['ok']

+ 1 - 1
cli/customer_action_asker.py

@@ -9,7 +9,7 @@ class CustomerActionAsker:
                 'type':'list',
                 'name':'action',
                 'message':'What do you want to do about orders ?',
-                'choices':['list orders','list warehouses','new command','quit']
+                'choices':['list orders','list warehouses','new order','quit']
             }
         ]
 

+ 21 - 0
cli/house_asker.py

@@ -0,0 +1,21 @@
+from PyInquirer import prompt 
+
+# Select a warehouse from a list
+
+class HouseAsker:
+    def __init__(self):
+        self.widget = [
+            {
+                'type':'list',
+                'name':'ans',
+                'message':'Select a warehouse',
+                'choices':['No warehouse provided yet']
+            }
+        ]
+
+    def select(self, rawHouseList):
+        choices = []
+        for h in rawHouseList:
+            choices.append({'name':str(h[0]) + ':' + h[3], 'value': h[0]})
+        self.widget[0]['choices'] = choices
+        return prompt(self.widget)['ans']

+ 24 - 0
cli/product_select.py

@@ -0,0 +1,24 @@
+from PyInquirer import prompt 
+
+# Select multiple items from a list
+
+class ProductSelecter:
+    def __init__(self):
+        self.widget = [
+            {
+                'type':'checkbox',
+                'name':'ans',
+                'message':'Select products',
+                'choices':['No product']
+            }
+        ]
+
+    def select(self):
+        return prompt(self.widget)['ans']
+
+    def selectInto(self, rawProList):
+        choices = []
+        for p in rawProList:
+            choices.append({'key':p[0], 'name':p[1]})
+        self.widget[0]['choices'] = choices
+        return self.select()

+ 9 - 0
consumer/connect.py

@@ -72,6 +72,15 @@ class DataConsumer():
 
         return rows
 
+    def addOrder(self, company, houseId, proIdList, proQuantityList, dueDate):
+        print('add order not implemented yet')
+        print(company)
+        print(houseId)
+        print(proIdList)
+        print(proQuantityList)
+        print(dueDate)
+
+
     def commit(self):
         """Make the changes to the database persistent"""
         self.conn.commit()