def newPreorder(cls, customer_ID, date_to_fulfill, items_ordered, cart_number): preorder_failures = {} preorder_success = [] current_preorder_counts = cls.preorderCountsForItemsByDate( items_ordered, date_to_fulfill) for item_ID in items_ordered: item = Item.byID(item_ID) if current_preorder_counts[item_ID] < item.preorderCount: new_preorder = Preorder(customer_ID=customer_ID, date_placed=localdate.getToday('est'), date_to_fulfill=date_to_fulfill, cart_number=cart_number, item_ID=item_ID) preorder_success.append(new_preorder) current_preorder_counts[ item_ID] = current_preorder_counts[item_ID] + 1 else: if item.preorderCount == 0: preorder_failures[item_ID] = "Item cannot be preordered." else: preorder_failures[ item_ID] = "Not enough preorder slots available." if len(preorder_failures.keys()) == 0: for order in preorder_success: order.put() return True else: return preorder_failures
def testCreateItems(self): #Item(price, itemType, bestSeller, isDrink=False) new_items = [ [2.00, "Coffee", False, True], [3.00, "Chocolate Chip Cookie", False], [4.50, "German Chocolate Cake", True], [1.50, "Biscotti", False], ] for item in new_items: i = Item.newItem(*item) item_list = Item.getItems() for index in item_list: self.assertEqual( item_list[index].itemType, new_items[index - 1][1]) #item_list is 1-based, new_items is 0-based self.assertEqual(Item.byID(4).itemType, "Biscotti") self.assertEqual(Item.byType("Coffee").itemID, 1)
def post(self): #log.debug("PreOrderHandler") have_error = False params = {} try: params = json_util.decodeDict(json.loads(self.request.body)) except ValueError: self.error(400) self.renderJson( {'error': "The information provided was incomplete."}) if not 'card_number' in params.keys(): params['error_card_number'] = "No vip card number provided." have_error = True else: customer = Customer.byID(params["card_number"]) if not customer: params[ 'error_card_number'] = "The vip card number provided does not exist." have_error = True if not 'item_list' in params.keys() or len(params['item_list']) == 0: params['error_items'] = "No list of items preordered was provided." have_error = True else: error_items = "Invalid item ID provided:" have_item_error = False for itemID in params['item_list']: if not Item.byID(itemID): error_items = error_items + " " + str(itemID) + "," have_item_error = True if have_item_error: params['error_items'] = rstrip(error_items, ',') have_error = True if not 'cart_number' in params.keys(): params[ 'error_cart_num'] = "The cart number where the preorder was placed was not provided." have_error = True if not 'preorder_date' in params.keys(): params[ 'error_preorder_date'] = "The fulfillment date for the preorder was not provided." have_error = True else: self.pre_order_date = self.checkPreorderDate( params["preorder_date"]) if not self.pre_order_date: params[ 'error_preorder_date'] = "The fulfillment date provided for the preorder was not valid." have_error = True if have_error: params['error'] = "The information provided was incomplete." self.error(400) self.renderJson(params) else: result = Preorder.newPreorder(params['card_number'], self.pre_order_date, params['item_list'], params["cart_number"]) if isinstance(result, bool): result = {"complete": "Preorder successfully added."} self.renderJson(result) else: params[ 'error'] = "There was an error while completing the preorder." params['error_items'] = result self.error(400) self.renderJson(params)
def post(self): #log.debug("PurchaseHandler") have_error = False params = {} try: params = json_util.decodeDict(json.loads(self.request.body)) except ValueError: self.error(400) self.renderJson( {'error': "The information provided was incomplete."}) if not 'card_number' in params.keys(): params['error_card_number'] = "No vip card number provided." have_error = True else: self.customer = Customer.byID(params["card_number"]) if not self.customer: params[ 'error_card_number'] = "The vip card number provided does not exist." have_error = True self.order_list = [] if not 'item_list' in params.keys() or len(params['item_list']) == 0: params['error_items'] = "No list of items was provided." have_error = True else: error_items = "Invalid item ID provided:" have_item_error = False for itemID in params['item_list']: item = Item.byID(itemID) if not item: error_items = error_items + " " + str(itemID) + "," have_item_error = True else: self.order_list.append(item) if have_item_error: params['error_items'] = rstrip(error_items, ',') have_error = True if not 'cart_number' in params.keys(): params[ 'error_cart_num'] = "The cart number where this order was placed was not provided." have_error = True if have_error: params['error'] = "The information provided was incomplete." self.error(400) self.renderJson(params) else: purcahse = Purchase.newPurchase(self.customer, self.order_list, params["cart_number"]) if purcahse: result = { "complete": "Order successfully added.", "purchase": purcahse.asDict() } self.renderJson(result) else: params[ 'error'] = "There was an error while completing the order." self.error(400) self.renderJson(params)