Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
	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."
Ejemplo n.º 6
0
	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)