def getBasketBaseDate(actualOrder, handler): requestDay=handler.request.get('day') if ((requestDay != None) and (requestDay != "")): parts=requestDay.rsplit("-") day=datetime.date(int(parts[0]), int(parts[1]), int(parts[2])) return day firstDay = None if actualOrder != None and len(actualOrder) > 0: orderedMenuItemKeys=[] for key in actualOrder.keys(): orderedMenuItemKeys.append(key) for key in orderedMenuItemKeys: actualDay = None if isMenuItem(key): menuItem = getMenuItem(key) if (menuItem != None): actualDay = menuItem['day'] else: composit = getComposit(key) if (composit != None): actualDay = composit['day'] if (firstDay == None): firstDay = actualDay elif firstDay > actualDay: firstDay = actualDay if firstDay == None: return getFirstOrderableDate(handler) else: return firstDay
def dayTotals (week): ret = [0,0,0,0,0,0,0] for menuItemString in week.orderedMenuItems: parts = menuItemString.split(" ") orderedQuantity = int(parts[0]) menuItemKey = parts[1] menuItem = getMenuItem(menuItemKey) if menuItem != None: total = orderedQuantity * menuItem['price'] ret[menuItem['day'].weekday()] = ret[menuItem['day'].weekday()] + total for compositString in week.orderedComposits: parts = compositString.split(" ") orderedQuantity = int(parts[0]) compositKey = parts[1] composit = getComposit(compositKey) if composit != None: total = orderedQuantity * composit['price'] ret[composit['day'].weekday()] = ret[composit['day'].weekday()] + total return ret
def getOrderTotal(weeks): orderTotal = 0 for week in weeks: for orderedComposit in week.orderedComposits: parts = orderedComposit.split(" ") orderedQuantity = int(parts[0]) orderedItemKey = parts[1] composit = getComposit(orderedItemKey) if composit != None: if composit['price'] != 0: orderTotal = orderTotal + composit['price'] * orderedQuantity for orderedMenuItem in week.orderedMenuItems: parts = orderedMenuItem.split(" ") orderedQuantity = int(parts[0]) orderedItemKey = parts[1] menuItem = getMenuItem(orderedItemKey) if menuItem != None: if menuItem['price'] != 0: orderTotal = orderTotal + menuItem['price'] * orderedQuantity return orderTotal
def getOrderedItemsFromWeekData (weeks, day): orderedMenuItemIndexes={} orderedCompositIndexes={} orderedMenuItems=[] orderedComposits=[] for week in weeks: for menuItemString in week.orderedMenuItems: parts = menuItemString.split(" ") orderedQuantity = int(parts[0]) menuItemKey = parts[1] menuItem = getMenuItem(menuItemKey) if menuItem != None and menuItem['day'] == day: if orderedMenuItemIndexes.has_key(menuItemKey): index = orderedMenuItemIndexes.get(menuItemKey) orderedMenuItems[index]['orderedQuantity'] = orderedQuantity + orderedMenuItems[index]['orderedQuantity'] else: menuItem['orderedQuantity'] = orderedQuantity menuItem['isMenuItem'] = True orderedMenuItemIndexes[menuItemKey] = len(orderedMenuItems) orderedMenuItems.append(menuItem) for compositString in week.orderedComposits: parts = compositString.split(" ") orderedQuantity = int(parts[0]) compositKey = parts[1] composit = getComposit(compositKey) if composit != None and composit['day'] == day: if orderedCompositIndexes.has_key(compositKey): index = orderedCompositIndexes.get(compositKey) orderedComposits[index]['orderedQuantity'] = orderedQuantity + orderedComposits[index]['orderedQuantity'] else: composit['orderedQuantity'] = orderedQuantity composit['isMenuItem'] = False orderedCompositIndexes[compositKey] = len(orderedComposits) orderedComposits.append(composit) orderedItems = [] orderedItems.extend(orderedComposits) orderedItems.extend(orderedMenuItems) return orderedItems
def post(self): if(not isUserLoggedIn(self)): self.redirect("/registration") return userKey = self.session.get(USER_KEY,None) user=None if (userKey != None): user = User.get(userKey) addresses = user.addresses.filter("active = ", True) if addresses.count()==0: template = jinja_environment.get_template('templates/no_address.html') self.printPage('Rendelesek', template.render(), True) return actualOrder = self.session.get(ACTUAL_ORDER,{}) firstOrderableDay = getFirstOrderableDate(self) orderTotal = 0 orderedItems = [] if (len(actualOrder) > 0): # Organize actual order into weeks ordersInWeeks = {} # A map holding ordered items with ordered quantiy for orderKey in actualOrder.keys(): orderItemCount = int(actualOrder[orderKey]) if (orderItemCount != 0): item = db.get(orderKey) day = item.day if day < firstOrderableDay: continue monday = getMonday(day) if ordersInWeeks.has_key(monday): weekHolder = ordersInWeeks.get(monday) else: weekHolder = [] orderItem = { 'key' : orderKey, 'quantity' : orderItemCount } weekHolder.append(orderItem) ordersInWeeks[monday] = weekHolder # Go through order week by week if len(ordersInWeeks) > 0: orderedItemsForMail = {} for monday in ordersInWeeks.keys(): weekHolder = ordersInWeeks.get(monday) alreadyOrdered = getUserOrdersForWeek(user, monday) # Merge orders for the week for item in weekHolder: orderedQuantity = item['quantity'] orderItemKey = item['key'] # Order should not remove more items than already ordered if alreadyOrdered.has_key(orderItemKey): alreadyOrderedQuantity = alreadyOrdered.get(orderItemKey) if alreadyOrderedQuantity + orderedQuantity < 0: orderedQuantity = 0 - alreadyOrderedQuantity if isMenuItem(orderItemKey): menuItem = getMenuItem(orderItemKey) day = menuItem['day'] menuItem['quantity'] = orderedQuantity menuItem['totalPrice'] = orderedQuantity * menuItem['price'] menuItem['isMenuItem'] = True orderTotal = orderTotal + orderedQuantity * menuItem['price'] orderedItems.append(str(day) + " " + str(orderItemKey) + " " + str(orderedQuantity) + " " + str(menuItem['price'])) if orderedItemsForMail.has_key(day): daysItems = orderedItemsForMail.get(day) daysItems.append(menuItem) else: daysItems = [] daysItems.append(menuItem) orderedItemsForMail[day] = daysItems else: composit = getComposit(orderItemKey) day = composit['day'] composit['quantity'] = orderedQuantity composit['totalPrice'] = orderedQuantity * composit['price'] composit['isMenuItem'] = False orderTotal = orderTotal + orderedQuantity * composit['price'] orderedItems.append(str(day) + " " + str(orderItemKey) + " " + str(orderedQuantity) + " " + str(composit['price'])) if orderedItemsForMail.has_key(day): daysItems = orderedItemsForMail.get(day) daysItems.append(composit) else: daysItems = [] daysItems.append(composit) orderedItemsForMail[day] = daysItems if alreadyOrdered.has_key(orderItemKey): orderedQuantity = orderedQuantity + alreadyOrdered.get(orderItemKey) if (orderedQuantity > 0): alreadyOrdered[orderItemKey] = orderedQuantity else: alreadyOrdered.pop(orderItemKey, 0) # Add stuff to the first week the user created daysForMail = orderedItemsForMail.keys() sortedDays = sorted(daysForMail) sortedItemsForMail = [] for day in sortedDays: sortedItemsForMail.append( {'day':day, 'orders':orderedItemsForMail.get(day)} ) weeks = user.weeks.filter("monday = ", monday) if (weeks.count() > 0): week = weeks.get() else: week = UserWeekOrder() week = UserWeekOrder() week.user = user week.monday = monday # Add address for every day defaultAddress = user.addresses.filter("active = ", True).get() week.mondayAddress = defaultAddress week.tuesdayAddress = defaultAddress week.wednesdayAddress = defaultAddress week.thursdayAddress = defaultAddress week.fridayAddress = defaultAddress week.saturdayAddress = defaultAddress week.sundayAddress = defaultAddress orderedMenuItems = [] orderedComposits = [] for itemKey in alreadyOrdered.keys(): newItem = str(alreadyOrdered.get(itemKey)) + " " + itemKey if isMenuItem(itemKey): orderedMenuItems.append(newItem) else: orderedComposits.append(newItem) week.orderedMenuItems = orderedMenuItems week.orderedComposits = orderedComposits week.put() user.lastOrder = datetime.datetime.now(timeZone).date() user.lastOrderFlag = True user.put() updateUser(user) template_values = { "user":user, 'userOrder':sortedItemsForMail, } logInfo(self, self.URL, "ORDER_POSTED") event = UserOrderEvent() event.orderDate = datetime.datetime.now(timeZone) event.user = user event.price = orderTotal event.orderedItems = orderedItems event.put() # Send email notification to the user messageTxtTemplate = jinja_environment.get_template('templates/orderNotificationMail.txt') messageHtmlTemplate = jinja_environment.get_template('templates/orderNotificationMail.html') message = mail.EmailMessage(sender="Diet Futar <*****@*****.**>") message.subject="Diet-futar, rendeles visszaigazolasa" message.to = user.email message.bcc = "*****@*****.**" message.body = messageTxtTemplate.render(template_values) message.html = messageHtmlTemplate.render(template_values) message.send() self.session[ACTUAL_ORDER]={} #self.response.out.write(messageTemplate.render(template_values)); self.redirect("/personalMenu") else: print "Error #100: Can't process orders." else: print "Error #100: Can't process orders."
def get(self): actualOrder=self.session.get(ACTUAL_ORDER,{}) day=getBasketBaseDate(actualOrder, self) monday = getMonday(day) if (len(actualOrder) > 0): orderedMenuItemKeys=[] for key in actualOrder.keys(): orderedMenuItemKeys.append(key) mayBeNullOrderedItems=db.get(orderedMenuItemKeys) orderedItems=[] composits=[] for item in mayBeNullOrderedItems: if item != None: if type(item) == MenuItem: orderedItems.append(item) else: composits.append(item) userOrders={} userKey = self.session.get(USER_KEY,None) if (userKey != None): user = User.get(userKey) #Organize into days menu=[] actualOrder=self.session.get(ACTUAL_ORDER,[]) dishCategories=getDishCategories() dayTotal = [0,0,0,0,0] menuItems=sorted(orderedItems, key=lambda item:item.dish.title) for category in dishCategories: actualCategoryObject={} actualCategoryObject['category']=category items=[] orderedPrice=[0,0,0,0,0,0,0] itemsInRows=0 for i in range(0,5): actualDay=monday+datetime.timedelta(days=i) actualDayObject={} actualDayObject["day"]=dayNames[i] actualDayObject["date"]=actualDay #Filter menu items actualMenuItems=[] actualComposits=[] for menuItem in menuItems: try: menuItem.dish.category except ReferencePropertyResolveError: continue if str(menuItem.dish.category.key())==category['key'] and menuItem.day==actualDay: try: if (actualOrder!=None) and (str(menuItem.key()) in actualOrder) and int(actualOrder[str(menuItem.key())]) != 0: # Create an object to append to the UI menuItemObject = getMenuItem(str(menuItem.key())) menuItemObject['inCurrentOrder']=actualOrder[menuItemObject['key']] try: menuItemObject['basketprice'] = int(menuItemObject['inCurrentOrder']) * menuItemObject['price'] except TypeError: menuItemObject['basketprice'] = 0 try: menuItemObject['orderedQuantity'] = userOrders[menuItemObject['key']] try: orderedPrice[i] = orderedPrice[i] + menuItem['price'] * int(userOrders[menuItemObject['key']]) except: pass except: menuItemObject['orderedQuantity'] = 0 dayTotal[i] = dayTotal[i] + menuItemObject['basketprice'] menuItemObject['orderable']=True actualMenuItems.append(menuItemObject) itemsInRows=itemsInRows+1 except ValueError: pass for composit in composits: if str(composit.category.key())==category['key'] and composit.day==actualDay: try: if (actualOrder!=None) and (str(composit.key()) in actualOrder) and int(actualOrder[str(composit.key())]) != 0: # Create an object to append to the UI compositObject = getComposit(str(composit.key())) compositObject['inCurrentOrder']=actualOrder[compositObject['key']] try: compositObject['basketprice'] = int(compositObject['inCurrentOrder']) * compositObject['price'] except TypeError: compositObject['basketprice'] = 0 dayTotal[i] = dayTotal[i] + compositObject['basketprice'] compositObject['orderable']=True try: compositObject['orderedQuantity'] = userOrders[compositObject['key']] try: orderedPrice[i] = orderedPrice[i] + menuItem['price'] * int(userOrders[compositObject['key']]) except: pass except: compositObject['orderedQuantity'] = 0 actualComposits.append(compositObject) itemsInRows=itemsInRows+1 except ValueError: pass actualDayObject["menuItems"]=actualMenuItems actualDayObject["composits"]=actualComposits items.append(actualDayObject) actualCategoryObject["days"]=items if (itemsInRows > 0): menu.append(actualCategoryObject) days=[] # Adds header information user = getUser(self) for i in range(0,5): actualDayObject={} actualDate=monday+datetime.timedelta(days=i) actualDayObject["day"] = dayNames[i] actualDayObject["date"] = actualDate actualDayObject["total"] = dayTotal[i] days.append(actualDayObject) # Add addresses # A single dish with editable ingredient list prevMonday=monday + datetime.timedelta(days=-7) nextMonday=monday + datetime.timedelta(days=7) today=datetime.date.today() actualMonday = getMonday(today) template_values = { 'days':days, 'user':user, 'menu':menu } if nextMonday <= actualMonday + datetime.timedelta(days=FURTHEST_DAY_DISPLAYED): template_values['next'] = nextMonday if prevMonday >= actualMonday: template_values['prev'] = prevMonday # A single dish with editable ingredient list template = jinja_environment.get_template('templates/reviewPendingOrder.html') self.printPage(str(day), template.render(template_values), True) else: template = jinja_environment.get_template('templates/noOrder.html') logInfo(self, self.URL, "DISPLAY_BASKET") self.printPage(None, template.render(), True)