[IMP] website_event
[odoo/odoo.git] / addons / website_event / controllers / main.py
1 # -*- coding: utf-8 -*-
2
3 from openerp import SUPERUSER_ID
4 from openerp.addons.web import http
5 from openerp.addons.web.http import request
6 from openerp.addons.website import website
7 from openerp.tools.translate import _
8
9 from datetime import datetime
10 from dateutil.relativedelta import relativedelta
11 from openerp import tools
12 import urllib
13 import werkzeug
14
15
16 class website_hr(http.Controller):
17
18     @http.route(['/event'], type='http', auth="public")
19     def events(self, **searches):
20         event_obj = request.registry['event.event']
21
22         searches.setdefault('date', 'all')
23         searches.setdefault('type', 'all')
24         searches.setdefault('country', 'all')
25
26         domain_search = {}
27
28         def sd(date):
29             return date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT)
30         today = datetime.today()
31         dates = [
32             ['all', _('All Dates'), [(1, "=", 1)], 0],
33             ['today', _('Today'), [
34                 ("date_begin", ">", sd(today)),
35                 ("date_begin", "<", sd(today + relativedelta(days=1)))],
36                 0],
37             ['tomorrow', _('Tomorrow'), [
38                 ("date_begin", ">", sd(today + relativedelta(days=1))),
39                 ("date_begin", "<", sd(today + relativedelta(days=2)))],
40                 0],
41             ['week', _('This Week'), [
42                 ("date_begin", ">=", sd(today + relativedelta(days=-today.weekday()))),
43                 ("date_begin", "<", sd(today  + relativedelta(days=6-today.weekday())))],
44                 0],
45             ['nextweek', _('Next Week'), [
46                 ("date_begin", ">=", sd(today + relativedelta(days=7-today.weekday()))),
47                 ("date_begin", "<", sd(today  + relativedelta(days=13-today.weekday())))],
48                 0],
49             ['month', _('This month'), [
50                 ("date_begin", ">=", sd(today.replace(day=1) + relativedelta(months=1))),
51                 ("date_begin", "<", sd(today.replace(day=1)  + relativedelta(months=1)))],
52                 0],
53         ]
54
55         # search domains
56         for date in dates:
57             if searches.get("date") == date[0]:
58                 domain_search["date"] = date[2]
59         if searches.get("type", "all") != 'all':
60             domain_search["type"] = [("type", "=", int(searches.get("type")))]
61         if searches.get("country", "all") != 'all':
62             domain_search["country"] = [("country_id", "=", int(searches.get("country")))]
63
64         def dom_without(without):
65             domain = [(1, "=", 1)]
66             for key, search in domain_search.items():
67                 if key != without:
68                     domain += search
69             print domain
70             return domain
71
72         # count by domains without self search
73         for date in dates:
74             date[3] = event_obj.search(request.cr, request.uid, dom_without('date') + date[2], count=True)
75
76         domain = dom_without('type')
77         types = event_obj.read_group(request.cr, request.uid, domain, ["id", "type"], groupby="type", orderby="type")
78         types.insert(0, {'type_count': event_obj.search(request.cr, request.uid, domain, count=True), 'type': ("all", _("All Categories"))})
79
80         domain = dom_without('country')
81         countries = event_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id")
82         countries.insert(0, {'country_id_count': event_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))})
83
84
85         obj_ids = event_obj.search(request.cr, request.uid, dom_without("none"), order="date_begin DESC")
86         values = {
87             'event_ids': event_obj.browse(request.cr, request.uid, obj_ids),
88             'dates': dates,
89             'types': types,
90             'countries': countries,
91             'searches': searches,
92             'search_path': "?%s" % urllib.urlencode(searches),
93         }
94
95         html = website.render("website_event.index", values)
96         return html
97
98     @http.route(['/event/<int:event_id>'], type='http', auth="public")
99     def event(self, event_id=None, **post):
100         event = request.registry['event.event'].browse(request.cr, request.uid, event_id)
101         values = {
102             'event_id': event,
103             '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 ''))
104         }
105         html = website.render("website_event.detail", values)
106         return html
107
108     @http.route(['/event/<int:event_id>/add_cart'], type='http', auth="public")
109     def add_cart(self, event_id=None, **post):
110         if not post:
111             return werkzeug.utils.redirect("/event/%s/" % event_id)
112
113         return werkzeug.utils.redirect("/shop/checkout" % event_id)
114
115     @http.route(['/event/publish'], type='http', auth="public")
116     def publish(self, **post):
117         obj_id = int(post['id'])
118         data_obj = request.registry['event.event']
119
120         obj = data_obj.browse(request.cr, request.uid, obj_id)
121         data_obj.write(request.cr, request.uid, [obj_id], {'website_published': not obj.website_published})
122         obj = data_obj.browse(request.cr, request.uid, obj_id)
123
124         return obj.website_published and "1" or "0"