Example #1
0
    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)
Example #3
0
    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)
Example #4
0
    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)