class Manager: def __init__(self): self.db = Database() self.qc = QualityController() def checkAvailibility(self, item): itemInfo = self.db.getItemInfoFromInventory(item[0]) if len(itemInfo) > 1: # item available if itemInfo[1] > item[1]: # sufficient quantity available return ["available", item[1]] else: # need to order more of that item return ["available", itemInfo[1]] else: # item not available return ["notAvailable"] def itemList(self): self.db.itemList() return def displayInventory(self): inventory = self.db.displayInventory() for i in inventory: print i def close(self): self.qc.close() self.db.close() def takeOrder(self, client_id): # print ("Since I'm just a computer program, make it simple. privide only the item ids to me..") # print ("Format: \nid1 count1 \nid2 count2 \nid3 count3 \nif you're done, press enter twice") print ("Client number:" + str(client_id)) print ("tell me what you want:") self.items = [] while True: ip = str(raw_input()) if ip == "": break else: ip = (int(ip.split(" ")[0]), int(ip.split(" ")[1])) self.items.append(ip) print self.items print ("alright.. lets check their availability") self.notAvailable = [] for item in self.items: availInfo = self.checkAvailibility(item) if availInfo[0] == "available": if availInfo[1] == item[1]: print "checking product quality...\n" quality = self.qc.checkQuality(item[0]) if quality == "good": print "item ID " + str(item[0]) + " requested amount available" else: self.notAvailable.append(item) print "apologies.. the product available has expired.\n We will get back to you." self.qc.renewStock(item[0], item[1], client_id) else: # available, but not the requested quantity self.notAvailable.append(item) print "item ID " + str(item[0]) + " not available. Please wait. We will get back to you." self.qc.renewStock(item[0], item[1], client_id) else: # item isn't in the inventory self.notAvailable.append(item) print "item ID " + str(item[0]) + " not available. Please wait. We will get back to you." self.qc.renewStock(item[0], item[1], client_id) if len(self.notAvailable) == 0: # everything available return ["checkout", self.items] else: return ["don't checkout", self.notAvailable]
class QualityController: def deleteItemFromInventory(self, i): self.db.deleteItemFromInventory(i) def addItemToInventory(self, item_id, quantity): now = time.strftime("%Y-%m-%d") self.db.addItemToInventory(item_id, quantity, now) def checkExpiry(self): while True: time.sleep(60) for i in self.db.displayInventory(): quality = self.checkQuality(i[0]) if quality == "good": pass else: print "expiry found. Item removed from inventory." def renewStockThread(self, item_id, quantity, client_id): itemDetails = self.db.getItemDetails(item_id) self.supplier.request((itemDetails[0], itemDetails[1]), quantity) # assume that the request is fulfilled.. self.addItemToInventory(item_id, quantity) if client_id == -1: print "\nnew stock has arrived\n" else: print "\n\norder of client number : " + str(client_id) + " has arrived.\n\n" def renewStock(self, item_id, quantity, client_id): t = threading.Thread(target=self.renewStockThread, args=(item_id, quantity, client_id)) t.start() if client_id != -1: print "we have successfully placed the order for client number " + str(client_id) def close(self): self.db.close() def __init__(self): self.renewQuantity = 10 self.db = Database() self.supplier = Supplier() t = threading.Thread(target=self.checkExpiry, args="") t.start() def checkQuality(self, item_id): ttl = self.db.getItemDetails(item_id)[3] date_of_purchase = str(self.db.getItemInfoFromInventory(item_id)[2]) y = date_of_purchase.split("-")[0] m = date_of_purchase.split("-")[1] d = date_of_purchase.split("-")[2] date_of_purchase = "/".join([m,d,y]) date_of_purchase = datetime.datetime.strptime(date_of_purchase, "%m/%d/%Y") end_date = date_of_purchase + datetime.timedelta(days=ttl) now = datetime.datetime.now() if now < end_date: print "end_date not reached." print "good quality." return "good" else: print "end date reached." print "bad quality." self.deleteItemFromInventory(item_id) self.renewStock(item_id, self.renewQuantity, -1) return "not good"