예제 #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
예제 #2
0
    def customerPointsLast30Days(cls, customer_ID):
        today = localdate.getToday('est')
        monthEnd = today + datetime.timedelta(-30)

        query = db.GqlQuery(
            "SELECT * FROM Purchase " +
            "WHERE customer_ID = :1 AND date >= :2", customer_ID, monthEnd)

        pointsIn30Days = 0
        yesterday = today + datetime.timedelta(-1)
        for purchase in query.run():
            pointsIn30Days = pointsIn30Days + purchase.points_earned
            # If purchase was today
            if purchase.date >= yesterday:
                pointsIn30Days = pointsIn30Days + purchase.points_earned

        return pointsIn30Days
예제 #3
0
    def newPurchase(cls, customer, items_ordered, cart_number):

        discount_type, discountMultiplier, pointsIn30Days = cls.findDiscountStatus(
            customer)
        order_discount = "None"
        #tally the points and cost
        points_earned = 0
        order_total = 0
        item_array = []
        for index in range(len(items_ordered)):
            item = items_ordered[index]
            if item.itemType in ItemsEligibleForDiscount:
                item.price = int(Decimal(item.price * discountMultiplier))
                order_discount = discount_type
            item.points = Item.getPoints(item.price)

            points_earned = points_earned + item.points
            order_total = order_total + item.price
            # create sub-array
            item_data = []
            item_data.append(item.itemID)
            item_data.append(item.itemType)
            item_data.append(item.price)
            item_data.append(item.points)
            # add to return array
            item_array.append(item_data)

        #Create purchase
        new_purcahse = Purchase(customer_ID=customer.card_number,
                                date=localdate.getToday('est'),
                                total=order_total,
                                points_earned=points_earned,
                                items_ordered=item_array,
                                discount_type=order_discount,
                                cart_number=cart_number)

        customer.updatePoints(points_earned)
        #store the purcahse
        cls.put(new_purcahse)
        return new_purcahse
예제 #4
0
    def checkDOB(self, inputDOB):
        split = inputDOB.split('-')
        today = localdate.getToday('est')

        if len(split) != 3:
            return None
        # Check Month
        if int(split[1]) > 12 or int(split[1]) < 1:
            return None
        # Check Day
        if int(split[2]) > 31 or int(split[2]) < 1:
            return None
        #Check Year
        if int(split[0]) < 1900:
            return None

        try:
            dob_date = datetime.datetime.strptime(inputDOB, "%Y-%m-%d").date()
            if (today >= dob_date):
                return inputDOB
        except ValueError:
            return None
예제 #5
0
    def checkPreorderDate(self, date):
        split = date.split('-')
        today = localdate.getToday('est')

        if len(split) != 3:
            return None
        # Check Month
        if int(split[1]) > 12 or int(split[1]) < 1:
            return None
        # Check Day
        if int(split[2]) > 31 or int(split[2]) < 1:
            return None
        #Check Year
        if int(split[0]) < 1900:
            return None

        try:
            order_date = datetime.datetime.strptime(date, "%Y-%m-%d").date()
            next_month = today + datetime.timedelta(31)
            if (today < order_date) and (order_date < next_month):
                return order_date
        except ValueError:
            return None
예제 #6
0
 def todaysPurchases(cls, cart_number=None):
     today = localdate.getToday('est')
     yesterday = today + datetime.timedelta(-1)
     return cls.getPurchaseHistoryForPeriod(today, yesterday, cart_number)
예제 #7
0
 def todaysPreorders(cls, cart_number=None):
     results = []
     today = localdate.getToday('est')
     for preorder in cls.getPreordersForDatePlaced(today, cart_number):
         results.append(preorder.asDict())
     return results