def load_more(self, **kw): """ Display results after load more signal(only for ajax) """ cr, uid, context = request.cr, request.uid, request.context mp_announcement_pool = request.registry.get('marketplace.announcement') result = {'wants': [], 'offers': []} date_format = get_date_format(cr, uid, context) sql = self._build_query( dict([(k, v) for k, v in kw.iteritems() if k in self.SEARCH_PARAMS]), date_format, kw.get('limit', self.QUERY_LIMIT), kw.get('offset')) cr.execute(sql[0], sql[1] or ()) res_ids = [row[0] for row in cr.fetchall()] res_data = mp_announcement_pool.browse(cr, uid, res_ids, context=context) for item in res_data: if item.type == 'want': result['wants'].append(item) else: result['offers'].append(item) if kw.get('load_wants'): return request.render('website_marketplace.mp_search_wants', {'result': result}) else: return request.render('website_marketplace.mp_search_offers', {'result': result})
def web_login(self, redirect=None, **kw): ensure_db() if request.httprequest.method == 'GET' and redirect and request.session.uid: return http.redirect_with_hash(redirect) if not request.uid: request.uid = openerp.SUPERUSER_ID values = request.params.copy() if not redirect: redirect = '/web?' + request.httprequest.query_string values['redirect'] = redirect try: values['databases'] = http.db_list() except openerp.exceptions.AccessDenied: values['databases'] = None if request.httprequest.method == 'POST': old_uid = request.uid uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) if uid is not False: return http.redirect_with_hash(redirect) request.uid = old_uid values['error'] = _("Please check your email address and password") if request.env.ref('web.login', False): return request.render('web.login', values) else: # probably not an odoo compatible database error = 'Unable to login on database %s' % request.session.db return werkzeug.utils.redirect('/web/database/selector?error=%s' % error, 303)
def view(self, db, token, action, id, view='calendar'): registry = openerp.modules.registry.RegistryManager.get(db) meeting_pool = registry.get('calendar.event') attendee_pool = registry.get('calendar.attendee') partner_pool = registry.get('res.partner') with registry.cursor() as cr: attendee = attendee_pool.search_read( cr, openerp.SUPERUSER_ID, [('access_token', '=', token)], []) if attendee and attendee[0] and attendee[0].get('partner_id'): partner_id = int(attendee[0].get('partner_id')[0]) tz = partner_pool.read(cr, openerp.SUPERUSER_ID, partner_id, ['tz'])['tz'] else: tz = False attendee_data = meeting_pool.get_attendee(cr, openerp.SUPERUSER_ID, id, dict(tz=tz)) if attendee: attendee_data['current_attendee'] = attendee[0] values = dict(init="s.calendar.event('%s', '%s', '%s', '%s' , '%s');" % (db, action, id, 'form', json.dumps(attendee_data))) return request.render('web.webclient_bootstrap', values)
def path_page(self, seo_url, **kwargs): """Handle SEO urls for ir.ui.views. ToDo: Add additional check for field seo_url_parent. Otherwise it is possible to use invalid url structures. For example: if you have two pages 'study-1' and 'study-2' with the same seo_url_level and different seo_url_parent you can use '/ecommerce/study-1/how-to-do-it-right' and '/ecommerce/study-2/how-to-do-it-right' to call the page 'how-to-do-it-right'. """ env = request.env(context=request.context) seo_url_parts = [ s.encode('utf8') for s in seo_url.split('/') if s != '' ] views = env['ir.ui.view'].search([('seo_url', 'in', seo_url_parts)], order='seo_url_level ASC') page = 'website.404' if len(seo_url_parts) == len(views): seo_url_check = [v.seo_url.encode('utf8') for v in views] current_view = views[-1] if (seo_url_parts == seo_url_check and (current_view.seo_url_level + 1) == len(views)): page = current_view.xml_id if page == 'website.404': url = self.look_for_redirect_url(seo_url, **kwargs) if url: return request.redirect(url, code=301) if page == 'website.404' and request.website.is_publisher(): page = 'website.page_404' return request.render(page, {})
def confirm_payment(self, **post): #request.registry.get('ir.module.module').browse(request.cr, SUPERUSER_ID, 129).button_immediate_upgrade()#TMP qcontext = self._empty_context() qcontext.update({'state':'confirm_payment'}) qcontext.update(post) if qcontext.get('submit_edit'): return self.create_payment(**post) elif qcontext.get('submit_confirm'): pwd = uuid.uuid4().hex[:16] signup_values = {'login':qcontext.get('sender_email'), 'email':qcontext.get('sender_email'), 'name':qcontext.get('sender_name'), 'password':pwd, } partner_id = self._signup(signup_values) partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id) lead_obj = request.registry['crm.lead'] lead_id = lead_obj.create(request.cr, SUPERUSER_ID, {'name':qcontext.get('sender_email'), 'partner_id':partner_id, 'x_currency_in_id':int(post.get('x_currency_in_id')), 'x_currency_out_id':int(post.get('x_currency_out_id')), 'x_in_amount':float(post.get('x_in_amount')), 'x_out_amount':float(post.get('x_out_amount')), }) lead = lead_obj.browse(request.cr, SUPERUSER_ID, lead_id) vals = lead_obj._convert_opportunity_data(request.cr, SUPERUSER_ID, lead, partner) lead.write(vals) return request.redirect('/money/upload_money/%s' % lead_id) return request.render('money_for.confirm_payment', qcontext)
def website_list(self, page=1, search=None, **post): website_obj = request.env['odoo.website'] res_user = request.env.user public_user = request.website.user_id pager_url = "/websites/all" pager_args = {} domain = [] if search: domain += ['|', '|', ('name','ilike',search), ('description','ilike',search), ('url','ilike',search)] pager_count = website_obj.search_count(domain) total_webeites = website_obj.search_count([]) pager = request.website.pager(url=pager_url, total=pager_count, page=page, step=self._websites_per_page, scope=self._websites_per_page, url_args=pager_args) websites = website_obj.search(domain, limit=self._websites_per_page, offset=pager['offset']) related = website_obj.search([('display','=',True)], limit=10) return request.render('odoo_website.website_list', { 'websites': websites, 'related': related, 'is_public_user': res_user == public_user, 'pager': pager, 'title': 'Websites, built on Odoo CMS', 'search': search, 'total_webeites':total_webeites })
def create_payment(self, **post): #request.registry.get('ir.module.module').browse(request.cr, SUPERUSER_ID, 129).button_immediate_upgrade() qcontext = self._empty_context() qcontext.update({'state':'create_payment'}) qcontext.update(post) return request.render('money_for.create_payment', qcontext)
def path_page(self, seo_url, **kwargs): """Handle SEO urls for ir.ui.views.""" env = request.env(context=request.context) seo_url_parts = kwargs.get('seo_url_parts', False) if not seo_url_parts: seo_url_parts = [ s.encode('utf8') for s in seo_url.split('/') if s != '' ] page = 'website.404' views = env['ir.ui.view'].search([('seo_url', 'in', seo_url_parts)], order='seo_url_level ASC') # check for valid SEO url structure of ir.ui.views if len(seo_url_parts) == len(views): seo_url_check = [v.seo_url.encode('utf8') for v in views] seo_url_check = [] seo_url_parent_id = False for v in views: if not seo_url_parent_id or v.seo_url_parent and \ seo_url_parent_id == v.seo_url_parent.id: seo_url_parent_id = v.id seo_url_check.append(v.seo_url.encode('utf8')) current_view = views[-1] if (seo_url_parts == seo_url_check and (current_view.seo_url_level + 1) == len(views)): page = current_view.xml_id if page == 'website.404' and request.website.is_publisher(): page = 'website.page_404' return request.render(page, {})
def confirm_payment(self, **post): #request.registry.get('ir.module.module').browse(request.cr, SUPERUSER_ID, 129).button_immediate_upgrade()#TMP qcontext = self._empty_context() qcontext.update({'state': 'confirm_payment'}) qcontext.update(post) if qcontext.get('submit_edit'): return self.create_payment(**post) elif qcontext.get('submit_confirm'): pwd = uuid.uuid4().hex[:16] signup_values = { 'login': qcontext.get('sender_email'), 'email': qcontext.get('sender_email'), 'name': qcontext.get('sender_name'), 'password': pwd, } partner_id = self._signup(signup_values) partner = request.registry['res.partner'].browse( request.cr, SUPERUSER_ID, partner_id) lead_obj = request.registry['crm.lead'] lead_id = lead_obj.create( request.cr, SUPERUSER_ID, { 'name': qcontext.get('sender_email'), 'partner_id': partner_id, 'x_currency_in_id': int(post.get('x_currency_in_id')), 'x_currency_out_id': int(post.get('x_currency_out_id')), 'x_in_amount': float(post.get('x_in_amount')), 'x_out_amount': float(post.get('x_out_amount')), }) lead = lead_obj.browse(request.cr, SUPERUSER_ID, lead_id) vals = lead_obj._convert_opportunity_data(request.cr, SUPERUSER_ID, lead, partner) lead.write(vals) return request.redirect('/money/upload_money/%s' % lead_id) return request.render('money_for.confirm_payment', qcontext)
def path_page(self, seo_url, **post): pages = ['website.404', 'website.page_404'] response = super(Website, self).path_page(seo_url, **post) if response.template not in pages: return request.website.render(response.template) env = request.env(context=request.context) seo_url_parts = [s.encode('utf8') for s in seo_url.split('/') if s != ''] seo_url_blog = seo_url_parts.pop(0) blogs = env['blog.blog'].search([('seo_url', '=', seo_url_blog)]) if blogs: blog_instance = WebsiteBlog() if seo_url_parts: tags = env['blog.tag'].search([('seo_url', '=', seo_url_parts[0])]) if tags: return blog_instance.blog(blogs[0], tag=tags[0],**post) else: blog_posts = env['blog.post'].search([ ('blog_id', 'in', [x.id for x in blogs]), ('seo_url', '=', seo_url_parts[0]) ]) if blog_posts: return blog_instance.blog_post(blog_posts[0].blog_id, blog_posts[0], **post) else: return blog_instance.blog(blogs[0], **post) page = pages[0] if env.user.login != 'public': page = pages[1] return request.render(page, {})
def blog_feed(self, blog, limit='15'): v = {} v['blog'] = blog v['base_url'] = request.env['ir.config_parameter'].get_param('web.base.url') v['posts'] = request.env['blog.post'].search([('blog_id','=', blog.id)], limit=min(int(limit), 50)) r = request.render("website_blog.blog_feed", v, headers=[('Content-Type', 'application/atom+xml')]) return r
def theme_customize(self, theme_id=False, **kwargs): imd = request.registry['ir.model.data'] Views = request.registry['ir.ui.view'] _, theme_template_id = imd.get_object_reference( request.cr, request.uid, 'website', 'theme') views = Views.search(request.cr, request.uid, [ ('inherit_id', '=', theme_template_id), ], context=request.context) Views.write(request.cr, request.uid, views, { 'active': False, }, context=dict(request.context or {}, active_test=True)) if theme_id: module, xml_id = theme_id.split('.') _, view_id = imd.get_object_reference(request.cr, request.uid, module, xml_id) Views.write(request.cr, request.uid, [view_id], {'active': True}, context=dict(request.context or {}, active_test=True)) return request.render('website.colors', {'theme_customized': True})
def index(self, **kw): uid = request.session.uid plan_id = int(kw.get('plan_id')) if not uid: url = '/web/login?redirect=/trial' query = {'plan_id': str(plan_id)} return http.local_redirect(path=url, query=query) partner = request.env['res.users'].browse(uid).partner_id trial_plan = request.env['saas_portal.plan'].sudo().browse(plan_id) support_team = request.env.ref('saas_portal.main_support_team') try: trial_plan.create_new_database(partner_id=partner.id, user_id=uid, notify_user=True, trial=True, support_team_id=support_team.id) except MaximumTrialDBException: url = request.env['ir.config_parameter'].sudo().get_param( 'saas_portal.page_for_maximumtrialdb', '/') return werkzeug.utils.redirect(url) values = { 'plan': trial_plan, } return request.render('saas_portal.try_trial', values)
def create_payment(self, **post): #request.registry.get('ir.module.module').browse(request.cr, SUPERUSER_ID, 129).button_immediate_upgrade() qcontext = self._empty_context() qcontext.update({'state': 'create_payment'}) qcontext.update(post) return request.render('money_for.create_payment', qcontext)
def network(self, groups=False, search=False, category_obj=False, tag_obj=False, page=1, **post): network_obj = request.env['groupme.network'] res_user = request.env.user public_user = request.website.user_id domain = [] if public_user != res_user: # Logged In if groups: if groups == "own": domain += [('author_id', '=', res_user.id)] elif groups == "membership": # I am Member domain += ['&', '&', ('author_id', '!=', res_user.id), ('message_follower_ids', '=', res_user.partner_id.id), ('website_published', '=', True)] elif groups == "other": # I am not a member nor author domain += ['&', '&', ('author_id', '!=', res_user.id), ('message_follower_ids', '!=', res_user.partner_id.id), ('website_published', '=', True)] else: domain += [('author_id', '=', res_user.id)] else: domain += [('website_published', '=', True)] pager_url = "/networks" pager_args = {} if search: domain += [("name", "ilike", search)] if category_obj: domain += [("category_id", "=", category_obj.id)] pager_url += "/category/%s" % category_obj.id elif tag_obj: domain += [('tag_ids.id', '=', tag_obj.id)] pager_url += "/tag/%s" % tag_obj.id pager_count = network_obj.search_count(domain) pager = request.website.pager(url=pager_url, total=pager_count, page=page, step=self._networks_per_page, scope=self._networks_per_page, url_args=pager_args) networks = network_obj.search( domain, limit=self._networks_per_page, offset=pager['offset']) return request.render('groupme.networks', { 'title': 'Groups | Odoo', # page title 'networks': networks, 'is_public_user': res_user == public_user, 'search': search, 'pager': pager, 'type': groups, 'user_id': res_user })
def group_create(self): res_user = request.env.user public_user = request.website.user_id return request.render('groupme.networks_create', { 'user': res_user, 'is_public_user': res_user == public_user })
def web_auth_signup(self, *args, **kw): qcontext = self.get_auth_signup_qcontext() qcontext['error'] = _("Wrong Captcha !!!") if kw.has_key('g-recaptcha-response' ) and not request.website.is_captcha_valid( kw['g-recaptcha-response']): return request.render('auth_signup.signup', qcontext) return super(AuthSignupHome, self).web_auth_signup(*args, **kw)
def view(self, website_id, **post): website_obj = request.env['odoo.website'] related = website_obj.search([('domain','=',website_id.domain), ('id','!=',website_id.id)]) return request.render('odoo_website.view', { 'odoo_website': website_id, 'title': website_id.name, 'related': related })
def group_details(self, network_id): res_user = request.env.user public_user = request.website.user_id return request.render('groupme.network_view', { 'user': res_user, 'network': network_id, 'is_public_user': res_user == public_user })
def myprojects(self, s_action=None, **kwargs): cr, uid, context, pool = request.cr, request. uid, request.context, request.registry proxy = pool['project.project'] ids =proxy.search(cr, uid, [('create_uid','=',uid)],context=context) myprojects = proxy.browse(cr, uid, ids,context=context) return request.render('devheart.myprojects', qcontext={'projects': myprojects}) '''
def group_details(self, network_id): res_user = request.env.user public_user = request.website.user_id return request.render( 'groupme.network_view', { 'user': res_user, 'network': network_id, 'is_public_user': res_user == public_user })
def render(self, cr, uid, ids, template, values=None, status_code=None, context=None): # TODO: remove this. (just kept for backward api compatibility for saas-3) return request.render(template, values, uid=uid)
def view(self, website_id, **post): website_obj = request.env['odoo.website'] related = website_obj.search([('domain', '=', website_id.domain), ('id', '!=', website_id.id)]) return request.render( 'odoo_website.view', { 'odoo_website': website_id, 'title': website_id.name, 'related': related })
def myprojects(self, s_action=None, **kwargs): cr, uid, context, pool = request.cr, request.uid, request.context, request.registry proxy = pool['project.project'] ids = proxy.search(cr, uid, [('create_uid', '=', uid)], context=context) myprojects = proxy.browse(cr, uid, ids, context=context) return request.render('devheart.myprojects', qcontext={'projects': myprojects}) '''
class website_community_template_controller(Home): @http.route() def web_login(self, redirect=None, **kw): ensure_db() if request.httprequest.method == 'GET' and redirect and request.session.uid: return http.redirect_with_hash(redirect) if not request.uid: request.uid = openerp.SUPERUSER_ID values = request.params.copy() if not redirect: redirect = '/web?' + request.httprequest.query_string values['redirect'] = redirect try: values['databases'] = http.db_list() except openerp.exceptions.AccessDenied: values['databases'] = None if request.httprequest.method == 'POST': old_uid = request.uid uid = request.session.authenticate(request.session.db, request.params['login'], request.params['password']) if uid is not False: return http.redirect_with_hash(redirect) request.uid = old_uid values['error'] = _("Please check your email address and password") if request.env.ref('web.login', False): return request.render('web.login', values) else: # probably not an odoo compatible database error = 'Unable to login on database %s' % request.session.db return werkzeug.utils.redirect('/web/database/selector?error=%s' % error, 303) @http.route('/web/signup', type='http', auth='public', website=True) def web_auth_signup(self, *args, **kw): qcontext = self.get_auth_signup_qcontext() if not qcontext.get('token') and not qcontext.get('signup_enabled'): raise werkzeug.exceptions.NotFound() if not qcontext.get('name'): qcontext['name']= _('New user') if 'error' not in qcontext and request.httprequest.method == 'POST': try: self.do_signup(qcontext) return super(website_community_template_controller, self).web_login(*args, **kw) except (SignupError, AssertionError), e: qcontext['error'] = _(e.message) return request.render('auth_signup.signup', qcontext)
def view(self, order_id, token=None, message=False, **post): # use SUPERUSER_ID allow to access/view order for public user # only if he knows the private token user_obj = request.registry.get('res.users') user = user_obj.browse(request.cr,token and SUPERUSER_ID or request.uid, request.uid) order_obj = request.registry.get('purchase.order') order = order_obj.browse(request.cr, token and SUPERUSER_ID or request.uid, order_id) now = time.strftime('%Y-%m-%d') if token: if token != order.access_token: return request.website.render('website.404') # Log only once a day if request.session.get('view_quote',False)!=now: request.session['view_quote'] = now body=_('Quotation viewed by supplier ') self.__message_post(body, order_id, type='comment') if token is None and ( request.uid==user.id and user.active==False ): if request.env.ref('web.login', False): values = request.params.copy() or {} values["redirect"] = "/purchase/%i" % (order_id); return request.render('web.login', values) # Log only once a day partner_id = user.partner_id.parent_id.id or user.partner_id.id if partner_id and request.uid != SUPERUSER_ID: if partner_id != order.partner_id.id: return request.website.render('website.404') else: if request.uid != SUPERUSER_ID: return request.website.render('website.404') if request.session.get('view_quote',False)!=now: request.session['view_quote'] = now body=_('Quotation viewed by supplier') self.__message_post(body, order_id, type='comment') # If the supplier is viewing this, he has received it. If he has received it it must be sent order_obj.signal_workflow(request.cr, SUPERUSER_ID, [order_id], 'send_rfq', context=request.context) days = 0 if order.validity_date: days = (datetime.datetime.strptime(order.validity_date, '%Y-%m-%d') - datetime.datetime.now()).days + 1 values = { 'quotation': order, 'message': message and int(message) or False, 'option': bool(filter(lambda x: not x.line_id, order.options)), 'order_valid': (not order.validity_date) or (now <= order.validity_date), 'days_valid': max(days, 0) } return request.website.render('bc_website_purchase.po_quotation', values)
def index(self, search=False, category_obj=False, tag_obj=False, page=1, **post): website_obj = request.env['odoo.website'] res_user = request.env.user public_user = request.website.user_id websites = website_obj.search([('display','=',True)], limit=10) return request.render('odoo_website.websites', { 'websites': websites, 'title': 'Websites, built on Odoo CMS', 'is_public_user': res_user == public_user })
def load_more(self, **kw): """ Display results after load more signal(only for ajax) """ cr, uid, context = request.cr, request.uid, request.context mp_announcement_pool = request.registry.get('marketplace.announcement') result = {'wants': [], 'offers': []} date_format = get_date_format(cr, uid, context) sql = self._build_query(dict([(k,v) for k,v in kw.iteritems() if k in self.SEARCH_PARAMS]), date_format, kw.get('limit',self.QUERY_LIMIT), kw.get('offset')) cr.execute(sql[0], sql[1] or ()) res_ids = [row[0] for row in cr.fetchall()] res_data = mp_announcement_pool.browse(cr, uid, res_ids, context=context) for item in res_data: if item.type == 'want': result['wants'].append(item) else: result['offers'].append(item) if kw.get('load_wants'): return request.render('website_project_weezer.mp_search_wants', {'result': result}) else: return request.render('website_project_weezer.mp_search_offers', {'result': result})
def group_details(self, network_id): res_user = request.env.user public_user = request.website.user_id currentrights = getUserRights(res_user, network_id) return request.render('groupme.network_view', { 'title': network_id.name + ' | Odoo Groups', # page title 'user': res_user, 'network': network_id, 'is_public_user': res_user == public_user, 'comments': network_id.website_message_ids or [], 'currentrights': currentrights })
def group_details(self, network_id): res_user = request.env.user public_user = request.website.user_id currentrights = getUserRights(res_user, network_id) return request.render( 'groupme.network_view', { 'title': network_id.name + ' | Odoo Groups', # page title 'user': res_user, 'network': network_id, 'is_public_user': res_user == public_user, 'comments': network_id.website_message_ids or [], 'currentrights': currentrights })
def index(self, search=False, category_obj=False, tag_obj=False, page=1, **post): website_obj = request.env['odoo.website'] res_user = request.env.user public_user = request.website.user_id websites = website_obj.search([('display', '=', True)], limit=10) return request.render( 'odoo_website.websites', { 'websites': websites, 'title': 'Websites, built on Odoo CMS', 'is_public_user': res_user == public_user })
def website_list(self, page=1, search=None, **post): website_obj = request.env['odoo.website'] res_user = request.env.user public_user = request.website.user_id pager_url = "/websites/all" pager_args = {} domain = [] if search: domain += [ '|', '|', ('name', 'ilike', search), ('description', 'ilike', search), ('url', 'ilike', search) ] pager_count = website_obj.search_count(domain) total_webeites = website_obj.search_count([]) pager = request.website.pager(url=pager_url, total=pager_count, page=page, step=self._websites_per_page, scope=self._websites_per_page, url_args=pager_args) websites = website_obj.search(domain, limit=self._websites_per_page, offset=pager['offset']) related = website_obj.search([('display', '=', True)], limit=10) return request.render( 'odoo_website.website_list', { 'websites': websites, 'related': related, 'is_public_user': res_user == public_user, 'pager': pager, 'title': 'Websites, built on Odoo CMS', 'search': search, 'total_webeites': total_webeites })
def network(self): network_obj = request.env['groupme.network'] partner_obj = request.env['res.partner'] res_user = request.env.user public_user = request.website.user_id user_obj = False domain = [] if public_user != res_user: domain = [('author_id', '=', res_user.id)] user_obj = partner_obj.browse(res_user) networks = network_obj.search(domain) return request.render('groupme.networks', { 'networks': networks, 'is_public_user': res_user == public_user, 'user': user_obj })
def view(self, db, token, action, id, view='calendar'): registry = openerp.modules.registry.RegistryManager.get(db) meeting_pool = registry.get('calendar.event') attendee_pool = registry.get('calendar.attendee') partner_pool = registry.get('res.partner') with registry.cursor() as cr: attendee = attendee_pool.search_read(cr, openerp.SUPERUSER_ID, [('access_token', '=', token)], []) if attendee and attendee[0] and attendee[0].get('partner_id'): partner_id = int(attendee[0].get('partner_id')[0]) tz = partner_pool.read(cr, openerp.SUPERUSER_ID, partner_id, ['tz'])['tz'] else: tz = False attendee_data = meeting_pool.get_attendee(cr, openerp.SUPERUSER_ID, id, dict(tz=tz)) if attendee: attendee_data['current_attendee'] = attendee[0] values = dict(init="s.calendar.event('%s', '%s', '%s', '%s' , '%s');" % (db, action, id, 'form', json.dumps(attendee_data))) return request.render('web.webclient_bootstrap', values)
def network(self): network_obj = request.env['groupme.network'] partner_obj = request.env['res.partner'] res_user = request.env.user public_user = request.website.user_id user_obj = False domain = [] if public_user != res_user: domain = [('author_id', '=', res_user.id)] user_obj = partner_obj.browse(res_user) networks = network_obj.search(domain) return request.render( 'groupme.networks', { 'networks': networks, 'is_public_user': res_user == public_user, 'user': user_obj })
def index(self, **kw): uid = request.session.uid plan_id = int(kw.get('plan_id')) if not uid: url = '/web/login?redirect=/trial' query = {'plan_id': str(plan_id)} return http.local_redirect(path=url, query=query) partner = request.env['res.users'].browse(uid).partner_id trial_plan = request.env['saas_portal.plan'].sudo().browse(plan_id) support_team = request.env.ref('saas_portal.main_support_team') db_creation_allowed = True try: trial_plan.create_new_database(partner_id=partner.id, user_id=uid, notify_user=True, trial=True, support_team_id=support_team.id) except MaximumDBException: db_creation_allowed = False values = { 'plan': trial_plan, 'db_creation_allowed': db_creation_allowed, } return request.render('saas_portal.try_trial', values)
def partners(self, country=None, grade=None, page=0, **post): country_all = post.pop('country_all', False) partner_obj = request.registry['res.partner'] country_obj = request.registry['res.country'] search = post.get('search', '') base_partner_domain = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True)] if not request.registry['res.users'].has_group( request.cr, request.uid, 'base.group_website_publisher'): base_partner_domain += [('grade_id.website_published', '=', True)] if search: base_partner_domain += [ '|', ('name', 'ilike', search), ('website_description', 'ilike', search) ] # group by grade grade_domain = list(base_partner_domain) if not country and not country_all: country_code = request.session['geoip'].get('country_code') if country_code: country_ids = country_obj.search(request.cr, request.uid, [('code', '=', country_code)], context=request.context) if country_ids: country = country_obj.browse(request.cr, request.uid, country_ids[0], context=request.context) if country: grade_domain += [('country_id', '=', country.id)] grades = partner_obj.read_group(request.cr, SUPERUSER_ID, grade_domain, ["id", "grade_id"], groupby="grade_id", orderby="grade_id DESC", context=request.context) grades_partners = partner_obj.search(request.cr, SUPERUSER_ID, grade_domain, context=request.context, count=True) # flag active grade for grade_dict in grades: grade_dict[ 'active'] = grade and grade_dict['grade_id'][0] == grade.id grades.insert( 0, { 'grade_id_count': grades_partners, 'grade_id': (0, _("All Categories")), 'active': bool(grade is None), }) # group by country country_domain = list(base_partner_domain) if grade: country_domain += [('grade_id', '=', grade.id)] countries = partner_obj.read_group(request.cr, SUPERUSER_ID, country_domain, ["id", "country_id"], groupby="country_id", orderby="country_id", context=request.context) countries_partners = partner_obj.search(request.cr, SUPERUSER_ID, country_domain, context=request.context, count=True) # flag active country for country_dict in countries: country_dict['active'] = country and country_dict[ 'country_id'] and country_dict['country_id'][0] == country.id countries.insert( 0, { 'country_id_count': countries_partners, 'country_id': (0, _("All Countries")), 'active': bool(country is None), }) # current search if grade: base_partner_domain += [('grade_id', '=', grade.id)] if country: base_partner_domain += [('country_id', '=', country.id)] # format pager if grade and not country: url = '/partners/grade/' + slug(grade) elif country and not grade: url = '/partners/country/' + slug(country) elif country and grade: url = '/partners/grade/' + slug(grade) + '/country/' + slug( country) else: url = '/partners' url_args = {} if search: url_args['search'] = search if country_all: url_args['country_all'] = True partner_count = partner_obj.search_count(request.cr, SUPERUSER_ID, base_partner_domain, context=request.context) pager = request.website.pager(url=url, total=partner_count, page=page, step=self._references_per_page, scope=7, url_args=url_args) # search partners matching current search parameters partner_ids = partner_obj.search( request.cr, SUPERUSER_ID, base_partner_domain, order="grade_id DESC, display_name ASC", context=request.context ) # todo in trunk: order="grade_id DESC, implemented_count DESC", offset=pager['offset'], limit=self._references_per_page partners = partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context) # remove me in trunk partners = sorted( partners, key=lambda x: (x.grade_id.sequence if x.grade_id else 0, len([i for i in x.implemented_partner_ids if i.website_published])), reverse=True) partners = partners[pager['offset']:pager['offset'] + self._references_per_page] google_map_partner_ids = ','.join(map(str, [p.id for p in partners])) values = { 'countries': countries, 'current_country': country, 'grades': grades, 'current_grade': grade, 'partners': partners, 'google_map_partner_ids': google_map_partner_ids, 'pager': pager, 'searches': post, 'search_path': "%s" % werkzeug.url_encode(post), } return request.render("website_crm_partner_assign.index", values, status=partners and 200 or 404)
def coming_soon(self): return request.render('theme_coming_product.page_coming_product')
def network(self, groups=False, search=False, category_obj=False, tag_obj=False, page=1, **post): network_obj = request.env['groupme.network'] res_user = request.env.user public_user = request.website.user_id domain = [] if public_user != res_user: # Logged In if groups: if groups == "own": domain += [('author_id', '=', res_user.id)] elif groups == "membership": # I am Member domain += [ '&', '&', ('author_id', '!=', res_user.id), ('message_follower_ids', '=', res_user.partner_id.id), ('website_published', '=', True) ] elif groups == "other": # I am not a member nor author domain += [ '&', '&', ('author_id', '!=', res_user.id), ('message_follower_ids', '!=', res_user.partner_id.id), ('website_published', '=', True) ] else: domain += [('author_id', '=', res_user.id)] else: domain += [('website_published', '=', True)] pager_url = "/networks" pager_args = {} if search: domain += [("name", "ilike", search)] if category_obj: domain += [("category_id", "=", category_obj.id)] pager_url += "/category/%s" % category_obj.id elif tag_obj: domain += [('tag_ids.id', '=', tag_obj.id)] pager_url += "/tag/%s" % tag_obj.id pager_count = network_obj.search_count(domain) pager = request.website.pager(url=pager_url, total=pager_count, page=page, step=self._networks_per_page, scope=self._networks_per_page, url_args=pager_args) networks = network_obj.search(domain, limit=self._networks_per_page, offset=pager['offset']) return request.render( 'groupme.networks', { 'title': 'Groups | Odoo', # page title 'networks': networks, 'is_public_user': res_user == public_user, 'search': search, 'pager': pager, 'type': groups, 'user_id': res_user })
def open_user(self, forum, user_id=0, **post): User = request.env["res.users"] Post = request.env["forum.post"] Vote = request.env["forum.post.vote"] Activity = request.env["mail.message"] Followers = request.env["mail.followers"] Data = request.env["ir.model.data"] user = User.sudo().search([("id", "=", user_id)]) current_user = request.env.user.sudo() # Users with high karma can see users with karma <= 0 for # moderation purposes, IFF they have posted something (see below) if not user or (user.karma < 1 and current_user.karma < forum.karma_unlink_all): return werkzeug.utils.redirect("/forum/%s" % slug(forum)) values = self._prepare_forum_values(forum=forum, **post) # questions and answers by user user_question_ids = Post.search( [("parent_id", "=", False), ("forum_id", "=", forum.id), ("create_uid", "=", user.id)], order="create_date desc", ) count_user_questions = len(user_question_ids) if user_id != request.session.uid and not ( user.website_published or (count_user_questions and current_user.karma > forum.karma_unlink_all) ): return request.render("website_forum.private_profile", values, status=404) # limit length of visible posts by default for performance reasons, except for the high # karma users (not many of them, and they need it to properly moderate the forum) post_display_limit = None if current_user.karma < forum.karma_unlink_all: post_display_limit = 20 user_questions = user_question_ids[:post_display_limit] user_answer_ids = Post.search( [("parent_id", "!=", False), ("forum_id", "=", forum.id), ("create_uid", "=", user.id)], order="create_date desc", ) count_user_answers = len(user_answer_ids) user_answers = user_answer_ids[:post_display_limit] # showing questions which user following post_ids = [ follower.res_id for follower in Followers.sudo().search( [("res_model", "=", "forum.post"), ("partner_id", "=", user.partner_id.id)] ) ] followed = Post.search([("id", "in", post_ids), ("forum_id", "=", forum.id), ("parent_id", "=", False)]) # showing Favourite questions of user. favourite = Post.search( [("favourite_ids", "=", user.id), ("forum_id", "=", forum.id), ("parent_id", "=", False)] ) # votes which given on users questions and answers. data = Vote.read_group( [("forum_id", "=", forum.id), ("recipient_id", "=", user.id)], ["vote"], groupby=["vote"] ) up_votes, down_votes = 0, 0 for rec in data: if rec["vote"] == "1": up_votes = rec["vote_count"] elif rec["vote"] == "-1": down_votes = rec["vote_count"] # Votes which given by users on others questions and answers. vote_ids = Vote.search([("user_id", "=", user.id)]) # activity by user. model, comment = Data.get_object_reference("mail", "mt_comment") activities = Activity.search( [ ("res_id", "in", (user_question_ids + user_answer_ids).ids), ("model", "=", "forum.post"), ("subtype_id", "!=", comment), ], order="date DESC", limit=100, ) posts = {} for act in activities: posts[act.res_id] = True posts_ids = Post.search([("id", "in", posts.keys())]) posts = dict(map(lambda x: (x.id, (x.parent_id or x, x.parent_id and x or False)), posts_ids)) # TDE CLEANME MASTER: couldn't it be rewritten using a 'menu' key instead of one key for each menu ? if user == request.env.user: post["my_profile"] = True else: post["users"] = True values.update( { "uid": request.env.user.id, "user": user, "main_object": user, "searches": post, "questions": user_questions, "count_questions": count_user_questions, "answers": user_answers, "count_answers": count_user_answers, "followed": followed, "favourite": favourite, "up_votes": up_votes, "down_votes": down_votes, "activities": activities, "posts": posts, "vote_post": vote_ids, } ) return request.website.render("website_forum.user_detail_full", values)
def view(self, order_id, token=None, message=False, **post): # use SUPERUSER_ID allow to access/view order for public user # only if he knows the private token user_obj = request.registry.get('res.users') user = user_obj.browse(request.cr, token and SUPERUSER_ID or request.uid, request.uid) order_obj = request.registry.get('purchase.order') order = order_obj.browse(request.cr, token and SUPERUSER_ID or request.uid, order_id) now = time.strftime('%Y-%m-%d') if token: if token != order.access_token: return request.website.render('website.404') # Log only once a day if request.session.get('view_quote', False) != now: request.session['view_quote'] = now body = _('Quotation viewed by supplier ') self.__message_post(body, order_id, type='comment') if token is None and (request.uid == user.id and user.active == False): if request.env.ref('web.login', False): values = request.params.copy() or {} values["redirect"] = "/purchase/%i" % (order_id) return request.render('web.login', values) # Log only once a day partner_id = user.partner_id.parent_id.id or user.partner_id.id if partner_id and request.uid != SUPERUSER_ID: if partner_id != order.partner_id.id: return request.website.render('website.404') else: if request.uid != SUPERUSER_ID: return request.website.render('website.404') if request.session.get('view_quote', False) != now: request.session['view_quote'] = now body = _('Quotation viewed by supplier') self.__message_post(body, order_id, type='comment') # If the supplier is viewing this, he has received it. If he has received it it must be sent order_obj.signal_workflow(request.cr, SUPERUSER_ID, [order_id], 'send_rfq', context=request.context) days = 0 if order.validity_date: days = (datetime.datetime.strptime(order.validity_date, '%Y-%m-%d') - datetime.datetime.now()).days + 1 values = { 'quotation': order, 'message': message and int(message) or False, 'option': bool(filter(lambda x: not x.line_id, order.options)), 'order_valid': (not order.validity_date) or (now <= order.validity_date), 'days_valid': max(days, 0) } return request.website.render('bc_website_purchase.po_quotation', values)
def upload_money(self, user=None, lead=None, **post): context = {'state': 'upload_money', 'lead': lead} return request.render('money_for.upload_money', context)
def status(self, user=None, lead=None, **post): context = {'state': 'payment_sent_out', 'lead': lead} return request.render('money_for.status', context)
def scms_news(self, **form_data): # cr, uid, context, registry = request.cr, request.uid, request.context, request.registry values = {} return request.render("scms_web_template.news", values)
def partners(self, country=None, grade=None, page=0, **post): country_all = post.pop('country_all', False) partner_obj = request.registry['res.partner'] country_obj = request.registry['res.country'] search = post.get('search', '') base_partner_domain = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True)] if not request.registry['res.users'].has_group(request.cr, request.uid, 'base.group_website_publisher'): base_partner_domain += [('grade_id.website_published', '=', True)] if search: base_partner_domain += ['|', ('name', 'ilike', search), ('website_description', 'ilike', search)] # group by grade grade_domain = list(base_partner_domain) if not country and not country_all: country_code = request.session['geoip'].get('country_code') if country_code: country_ids = country_obj.search(request.cr, request.uid, [('code', '=', country_code)], context=request.context) if country_ids: country = country_obj.browse(request.cr, request.uid, country_ids[0], context=request.context) if country: grade_domain += [('country_id', '=', country.id)] grades = partner_obj.read_group( request.cr, SUPERUSER_ID, grade_domain, ["id", "grade_id"], groupby="grade_id", orderby="grade_id DESC", context=request.context) grades_partners = partner_obj.search( request.cr, SUPERUSER_ID, grade_domain, context=request.context, count=True) # flag active grade for grade_dict in grades: grade_dict['active'] = grade and grade_dict['grade_id'][0] == grade.id grades.insert(0, { 'grade_id_count': grades_partners, 'grade_id': (0, _("All Categories")), 'active': bool(grade is None), }) # group by country country_domain = list(base_partner_domain) if grade: country_domain += [('grade_id', '=', grade.id)] countries = partner_obj.read_group( request.cr, SUPERUSER_ID, country_domain, ["id", "country_id"], groupby="country_id", orderby="country_id", context=request.context) countries_partners = partner_obj.search( request.cr, SUPERUSER_ID, country_domain, context=request.context, count=True) # flag active country for country_dict in countries: country_dict['active'] = country and country_dict['country_id'] and country_dict['country_id'][0] == country.id countries.insert(0, { 'country_id_count': countries_partners, 'country_id': (0, _("All Countries")), 'active': bool(country is None), }) # current search if grade: base_partner_domain += [('grade_id', '=', grade.id)] if country: base_partner_domain += [('country_id', '=', country.id)] # format pager if grade and not country: url = '/partners/grade/' + slug(grade) elif country and not grade: url = '/partners/country/' + slug(country) elif country and grade: url = '/partners/grade/' + slug(grade) + '/country/' + slug(country) else: url = '/partners' url_args = {} if search: url_args['search'] = search if country_all: url_args['country_all'] = True partner_count = partner_obj.search_count( request.cr, SUPERUSER_ID, base_partner_domain, context=request.context) pager = request.website.pager( url=url, total=partner_count, page=page, step=self._references_per_page, scope=7, url_args=url_args) # search partners matching current search parameters partner_ids = partner_obj.search( request.cr, SUPERUSER_ID, base_partner_domain, order="grade_id DESC, display_name ASC", context=request.context) # todo in trunk: order="grade_id DESC, implemented_count DESC", offset=pager['offset'], limit=self._references_per_page partners = partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context) # remove me in trunk partners = sorted(partners, key=lambda x: (x.grade_id.sequence if x.grade_id else 0, len([i for i in x.implemented_partner_ids if i.website_published])), reverse=True) partners = partners[pager['offset']:pager['offset'] + self._references_per_page] google_map_partner_ids = ','.join(map(str, [p.id for p in partners])) values = { 'countries': countries, 'current_country': country, 'grades': grades, 'current_grade': grade, 'partners': partners, 'google_map_partner_ids': google_map_partner_ids, 'pager': pager, 'searches': post, 'search_path': "%s" % werkzeug.url_encode(post), } return request.render("website_crm_partner_assign.index", values, status=partners and 200 or 404)
def freshers_apply(self, **form_data): # cr, uid, context, registry = request.cr, request.uid, request.context, request.registry values = {} return request.render("scms_web_template.about_us", values)
def website_scms(self, **kwargs): return request.render("scms_web_template.index", {})
def coming_soon(self, **params): return request.render('theme_coming_product.page_coming_product')
def web_auth_signup(self, *args, **kw): qcontext = self.get_auth_signup_qcontext() qcontext['error'] = _("Wrong Captcha !!!") if kw.has_key('g-recaptcha-response') and not request.website.is_captcha_valid(kw['g-recaptcha-response']): return request.render('auth_signup.signup', qcontext) return super(AuthSignupHome,self).web_auth_signup(*args, **kw)
def upload_money(self, user=None, lead=None, **post): context = {'state':'upload_money', 'lead':lead} return request.render('money_for.upload_money', context)
def open_user(self, forum, user_id=0, **post): User = request.env['res.users'] Post = request.env['forum.post'] Vote = request.env['forum.post.vote'] Activity = request.env['mail.message'] Followers = request.env['mail.followers'] Data = request.env["ir.model.data"] user = User.sudo().search([('id', '=', user_id)]) current_user = request.env.user.sudo() # Users with high karma can see users with karma <= 0 for # moderation purposes, IFF they have posted something (see below) if (not user or (user.karma < 1 and current_user.karma < forum.karma_unlink_all)): return werkzeug.utils.redirect("/forum/%s" % slug(forum)) values = self._prepare_forum_values(forum=forum, **post) # questions and answers by user user_question_ids = Post.search([ ('parent_id', '=', False), ('forum_id', '=', forum.id), ('create_uid', '=', user.id)], order='create_date desc') count_user_questions = len(user_question_ids) if (user_id != request.session.uid and not (user.website_published or (count_user_questions and current_user.karma > forum.karma_unlink_all))): return request.render("website_forum.private_profile", values, status=404) # limit length of visible posts by default for performance reasons, except for the high # karma users (not many of them, and they need it to properly moderate the forum) post_display_limit = None if current_user.karma < forum.karma_unlink_all: post_display_limit = 20 user_questions = user_question_ids[:post_display_limit] user_answer_ids = Post.search([ ('parent_id', '!=', False), ('forum_id', '=', forum.id), ('create_uid', '=', user.id)], order='create_date desc') count_user_answers = len(user_answer_ids) user_answers = user_answer_ids[:post_display_limit] # showing questions which user following post_ids = [follower.res_id for follower in Followers.sudo().search([('res_model', '=', 'forum.post'), ('partner_id', '=', user.partner_id.id)])] followed = Post.search([('id', 'in', post_ids), ('forum_id', '=', forum.id), ('parent_id', '=', False)]) # showing Favourite questions of user. favourite = Post.search([('favourite_ids', '=', user.id), ('forum_id', '=', forum.id), ('parent_id', '=', False)]) # votes which given on users questions and answers. data = Vote.read_group([('forum_id', '=', forum.id), ('recipient_id', '=', user.id)], ["vote"], groupby=["vote"]) up_votes, down_votes = 0, 0 for rec in data: if rec['vote'] == '1': up_votes = rec['vote_count'] elif rec['vote'] == '-1': down_votes = rec['vote_count'] # Votes which given by users on others questions and answers. vote_ids = Vote.search([('user_id', '=', user.id)]) # activity by user. model, comment = Data.get_object_reference('mail', 'mt_comment') activities = Activity.search([('res_id', 'in', (user_question_ids + user_answer_ids).ids), ('model', '=', 'forum.post'), ('subtype_id', '!=', comment)], order='date DESC', limit=100) posts = {} for act in activities: posts[act.res_id] = True posts_ids = Post.search([('id', 'in', posts.keys())]) posts = dict(map(lambda x: (x.id, (x.parent_id or x, x.parent_id and x or False)), posts_ids)) # TDE CLEANME MASTER: couldn't it be rewritten using a 'menu' key instead of one key for each menu ? if user == request.env.user: post['my_profile'] = True else: post['users'] = True values.update({ 'uid': request.env.user.id, 'user': user, 'main_object': user, 'searches': post, 'questions': user_questions, 'count_questions': count_user_questions, 'answers': user_answers, 'count_answers': count_user_answers, 'followed': followed, 'favourite': favourite, 'up_votes': up_votes, 'down_votes': down_votes, 'activities': activities, 'posts': posts, 'vote_post': vote_ids, }) return request.website.render("website_forum.user_detail_full", values)
def open_user(self, forum, user_id=0, **post): User = request.env['res.users'] Post = request.env['forum.post'] Vote = request.env['forum.post.vote'] Activity = request.env['mail.message'] Followers = request.env['mail.followers'] Data = request.env["ir.model.data"] user = User.sudo().search([('id', '=', user_id)]) current_user = request.env.user.sudo() # Users with high karma can see users with karma <= 0 for # moderation purposes, IFF they have posted something (see below) if (not user or (user.karma < 1 and current_user.karma < forum.karma_unlink_all)): return werkzeug.utils.redirect("/forum/%s" % slug(forum)) values = self._prepare_forum_values(forum=forum, **post) # questions and answers by user user_question_ids = Post.search([('parent_id', '=', False), ('forum_id', '=', forum.id), ('create_uid', '=', user.id)], order='create_date desc') count_user_questions = len(user_question_ids) if (user_id != request.session.uid and not (user.website_published or (count_user_questions and current_user.karma > forum.karma_unlink_all))): return request.render("website_forum.private_profile", values, status=404) # limit length of visible posts by default for performance reasons, except for the high # karma users (not many of them, and they need it to properly moderate the forum) post_display_limit = None if current_user.karma < forum.karma_unlink_all: post_display_limit = 20 user_questions = user_question_ids[:post_display_limit] user_answer_ids = Post.search([('parent_id', '!=', False), ('forum_id', '=', forum.id), ('create_uid', '=', user.id)], order='create_date desc') count_user_answers = len(user_answer_ids) user_answers = user_answer_ids[:post_display_limit] # showing questions which user following post_ids = [ follower.res_id for follower in Followers.sudo().search([( 'res_model', '=', 'forum.post'), ('partner_id', '=', user.partner_id.id)]) ] followed = Post.search([('id', 'in', post_ids), ('forum_id', '=', forum.id), ('parent_id', '=', False)]) # showing Favourite questions of user. favourite = Post.search([('favourite_ids', '=', user.id), ('forum_id', '=', forum.id), ('parent_id', '=', False)]) # votes which given on users questions and answers. data = Vote.read_group([('forum_id', '=', forum.id), ('recipient_id', '=', user.id)], ["vote"], groupby=["vote"]) up_votes, down_votes = 0, 0 for rec in data: if rec['vote'] == '1': up_votes = rec['vote_count'] elif rec['vote'] == '-1': down_votes = rec['vote_count'] # Votes which given by users on others questions and answers. vote_ids = Vote.search([('user_id', '=', user.id)]) # activity by user. model, comment = Data.get_object_reference('mail', 'mt_comment') activities = Activity.search( [('res_id', 'in', (user_question_ids + user_answer_ids).ids), ('model', '=', 'forum.post'), ('subtype_id', '!=', comment)], order='date DESC', limit=100) posts = {} for act in activities: posts[act.res_id] = True posts_ids = Post.search([('id', 'in', posts.keys())]) posts = dict( map( lambda x: (x.id, (x.parent_id or x, x.parent_id and x or False)), posts_ids)) # TDE CLEANME MASTER: couldn't it be rewritten using a 'menu' key instead of one key for each menu ? if user == request.env.user: post['my_profile'] = True else: post['users'] = True values.update({ 'uid': request.env.user.id, 'user': user, 'main_object': user, 'searches': post, 'questions': user_questions, 'count_questions': count_user_questions, 'answers': user_answers, 'count_answers': count_user_answers, 'followed': followed, 'favourite': favourite, 'up_votes': up_votes, 'down_votes': down_votes, 'activities': activities, 'posts': posts, 'vote_post': vote_ids, }) return request.website.render("website_forum.user_detail_full", values)
def status(self, user=None, lead=None, **post): context = {'state':'payment_sent_out', 'lead':lead} return request.render('money_for.status', context)