2013-08-02 04:35:26 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
from openerp.addons.web import http
|
|
|
|
from openerp.addons.web.http import request
|
2013-08-02 10:11:22 +00:00
|
|
|
from openerp.tools.translate import _
|
|
|
|
|
|
|
|
from datetime import datetime
|
|
|
|
from dateutil.relativedelta import relativedelta
|
|
|
|
from openerp import tools
|
2013-08-05 10:21:10 +00:00
|
|
|
import urllib
|
2013-08-05 15:03:19 +00:00
|
|
|
import werkzeug
|
2013-08-05 10:21:10 +00:00
|
|
|
|
2013-08-02 04:35:26 +00:00
|
|
|
|
2013-08-05 16:16:00 +00:00
|
|
|
class website_event(http.Controller):
|
2013-08-02 04:35:26 +00:00
|
|
|
|
2013-08-05 10:21:10 +00:00
|
|
|
@http.route(['/event'], type='http', auth="public")
|
|
|
|
def events(self, **searches):
|
2013-08-05 16:16:00 +00:00
|
|
|
website = request.registry['website']
|
2013-08-05 12:44:28 +00:00
|
|
|
event_obj = request.registry['event.event']
|
|
|
|
|
2013-08-05 10:21:10 +00:00
|
|
|
searches.setdefault('date', 'all')
|
2013-08-05 12:44:28 +00:00
|
|
|
searches.setdefault('type', 'all')
|
2013-08-05 13:04:20 +00:00
|
|
|
searches.setdefault('country', 'all')
|
2013-08-05 15:03:19 +00:00
|
|
|
|
2013-08-05 12:44:28 +00:00
|
|
|
domain_search = {}
|
2013-08-02 10:45:04 +00:00
|
|
|
|
2013-08-02 10:11:22 +00:00
|
|
|
def sd(date):
|
2013-08-02 10:45:04 +00:00
|
|
|
return date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
|
2013-08-02 10:11:22 +00:00
|
|
|
today = datetime.today()
|
|
|
|
dates = [
|
2013-08-02 10:45:04 +00:00
|
|
|
['all', _('All Dates'), [(1, "=", 1)], 0],
|
2013-08-02 10:11:22 +00:00
|
|
|
['today', _('Today'), [
|
2013-08-02 10:45:04 +00:00
|
|
|
("date_begin", ">", sd(today)),
|
2013-08-02 10:11:22 +00:00
|
|
|
("date_begin", "<", sd(today + relativedelta(days=1)))],
|
|
|
|
0],
|
|
|
|
['tomorrow', _('Tomorrow'), [
|
2013-08-02 10:45:04 +00:00
|
|
|
("date_begin", ">", sd(today + relativedelta(days=1))),
|
2013-08-02 10:11:22 +00:00
|
|
|
("date_begin", "<", sd(today + relativedelta(days=2)))],
|
|
|
|
0],
|
|
|
|
['week', _('This Week'), [
|
|
|
|
("date_begin", ">=", sd(today + relativedelta(days=-today.weekday()))),
|
|
|
|
("date_begin", "<", sd(today + relativedelta(days=6-today.weekday())))],
|
|
|
|
0],
|
|
|
|
['nextweek', _('Next Week'), [
|
|
|
|
("date_begin", ">=", sd(today + relativedelta(days=7-today.weekday()))),
|
|
|
|
("date_begin", "<", sd(today + relativedelta(days=13-today.weekday())))],
|
|
|
|
0],
|
|
|
|
['month', _('This month'), [
|
|
|
|
("date_begin", ">=", sd(today.replace(day=1) + relativedelta(months=1))),
|
|
|
|
("date_begin", "<", sd(today.replace(day=1) + relativedelta(months=1)))],
|
|
|
|
0],
|
|
|
|
]
|
|
|
|
|
2013-08-02 10:45:04 +00:00
|
|
|
# search domains
|
|
|
|
for date in dates:
|
2013-08-05 10:21:10 +00:00
|
|
|
if searches.get("date") == date[0]:
|
|
|
|
domain_search["date"] = date[2]
|
2013-08-05 13:04:20 +00:00
|
|
|
if searches.get("type", "all") != 'all':
|
|
|
|
domain_search["type"] = [("type", "=", int(searches.get("type")))]
|
|
|
|
if searches.get("country", "all") != 'all':
|
|
|
|
domain_search["country"] = [("country_id", "=", int(searches.get("country")))]
|
|
|
|
|
|
|
|
def dom_without(without):
|
|
|
|
domain = [(1, "=", 1)]
|
|
|
|
for key, search in domain_search.items():
|
|
|
|
if key != without:
|
|
|
|
domain += search
|
|
|
|
print domain
|
|
|
|
return domain
|
2013-08-02 10:45:04 +00:00
|
|
|
|
|
|
|
# count by domains without self search
|
|
|
|
for date in dates:
|
2013-08-05 13:04:20 +00:00
|
|
|
date[3] = event_obj.search(request.cr, request.uid, dom_without('date') + date[2], count=True)
|
2013-08-02 10:45:04 +00:00
|
|
|
|
2013-08-05 13:04:20 +00:00
|
|
|
domain = dom_without('type')
|
|
|
|
types = event_obj.read_group(request.cr, request.uid, domain, ["id", "type"], groupby="type", orderby="type")
|
|
|
|
types.insert(0, {'type_count': event_obj.search(request.cr, request.uid, domain, count=True), 'type': ("all", _("All Categories"))})
|
2013-08-05 10:21:10 +00:00
|
|
|
|
2013-08-05 13:04:20 +00:00
|
|
|
domain = dom_without('country')
|
|
|
|
countries = event_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
|
|
|
|
countries.insert(0, {'country_id_count': event_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))})
|
2013-08-05 10:21:10 +00:00
|
|
|
|
2013-08-02 10:45:04 +00:00
|
|
|
|
2013-08-05 15:03:19 +00:00
|
|
|
obj_ids = event_obj.search(request.cr, request.uid, dom_without("none"), order="date_begin DESC")
|
2013-08-05 16:16:00 +00:00
|
|
|
values = website.get_rendering_context({
|
2013-08-05 12:44:28 +00:00
|
|
|
'event_ids': event_obj.browse(request.cr, request.uid, obj_ids),
|
2013-08-02 10:11:22 +00:00
|
|
|
'dates': dates,
|
2013-08-05 12:44:28 +00:00
|
|
|
'types': types,
|
2013-08-05 13:04:20 +00:00
|
|
|
'countries': countries,
|
2013-08-05 10:21:10 +00:00
|
|
|
'searches': searches,
|
|
|
|
'search_path': "?%s" % urllib.urlencode(searches),
|
2013-08-05 16:16:00 +00:00
|
|
|
})
|
2013-08-02 04:35:26 +00:00
|
|
|
|
2013-08-05 16:16:00 +00:00
|
|
|
return website.render("website_event.index", values)
|
2013-08-02 04:35:26 +00:00
|
|
|
|
2013-08-02 10:45:04 +00:00
|
|
|
@http.route(['/event/<int:event_id>'], type='http', auth="public")
|
|
|
|
def event(self, event_id=None, **post):
|
2013-08-05 16:16:00 +00:00
|
|
|
website = request.registry['website']
|
2013-08-05 15:03:19 +00:00
|
|
|
event = request.registry['event.event'].browse(request.cr, request.uid, event_id)
|
2013-08-05 16:16:00 +00:00
|
|
|
values = website.get_rendering_context({
|
2013-08-05 15:03:19 +00:00
|
|
|
'event_id': event,
|
|
|
|
'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=12&size=298x298" % urllib.quote_plus('%s, %s %s, %s' % (event.street, event.city, event.zip, event.country_id and event.country_id.name_get()[0][1] or ''))
|
2013-08-05 16:16:00 +00:00
|
|
|
})
|
|
|
|
return website.render("website_event.detail", values)
|
2013-08-05 15:03:19 +00:00
|
|
|
|
|
|
|
@http.route(['/event/<int:event_id>/add_cart'], type='http', auth="public")
|
|
|
|
def add_cart(self, event_id=None, **post):
|
|
|
|
if not post:
|
|
|
|
return werkzeug.utils.redirect("/event/%s/" % event_id)
|
|
|
|
|
2013-08-05 15:05:14 +00:00
|
|
|
return werkzeug.utils.redirect("/shop/checkout")
|
2013-08-02 10:45:04 +00:00
|
|
|
|
2013-08-02 04:49:15 +00:00
|
|
|
@http.route(['/event/publish'], type='http', auth="public")
|
2013-08-02 04:35:26 +00:00
|
|
|
def publish(self, **post):
|
|
|
|
obj_id = int(post['id'])
|
|
|
|
data_obj = request.registry['event.event']
|
|
|
|
|
|
|
|
obj = data_obj.browse(request.cr, request.uid, obj_id)
|
|
|
|
data_obj.write(request.cr, request.uid, [obj_id], {'website_published': not obj.website_published})
|
|
|
|
obj = data_obj.browse(request.cr, request.uid, obj_id)
|
|
|
|
|
|
|
|
return obj.website_published and "1" or "0"
|