示例#1
0
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"