def _order_get_page_view_values(self, order, access_token, **kwargs): order_invoice_lines = { il.product_id.id: il.invoice_id for il in order.invoice_ids.mapped('invoice_line_ids') } values = { 'order': order, 'order_invoice_lines': order_invoice_lines, } if access_token: values['no_breadcrumbs'] = True values['access_token'] = access_token values['portal_confirmation'] = order.get_portal_confirmation_action() if kwargs.get('error'): values['error'] = kwargs['error'] if kwargs.get('warning'): values['warning'] = kwargs['warning'] if kwargs.get('success'): values['success'] = kwargs['success'] history = request.session.get('my_orders_history', []) values.update(get_records_pager(history, order)) return values
def portal_my_task(self, task_id=None, **kw): task = request.env['project.task'].browse(task_id) task.check_access_rights('read') task.check_access_rule('read') vals = {'task': task, 'user': request.env.user} history = request.session.get('my_tasks_history', []) vals.update(get_records_pager(history, task)) return request.render("project.portal_my_task", vals)
def portal_my_purchase_order(self, order_id=None, **kw): order = request.env['purchase.order'].browse(order_id) try: order.check_access_rights('read') order.check_access_rule('read') except AccessError: return request.redirect('/my') history = request.session.get('my_purchases_history', []) values = { 'order': order.sudo(), } values.update(get_records_pager(history, order)) return request.render("purchase.portal_my_purchase_order", values)
def my_support_tickets_followup(self, support_ticket, access_token=None): ticket_obj = request.env['supportdesk.ticket'] if access_token: support_ticket = ticket_obj.sudo().search([ ('id', '=', support_ticket), ('access_token', '=', access_token) ]) elif support_ticket: support_ticket = ticket_obj.browse(support_ticket) else: return request.redirect('/my') ticket_history = request.session.get('my_tickets_history', []) values = {'support_ticket': support_ticket} values.update(get_records_pager(ticket_history, access_token)) return request.render("support_desk.support_tickets_followup", values)
def list_my_tickets(self, ticket_id=None, **kw): values = self._prepare_portal_layout_values() ticket = request.env['helpdesk.ticket'].sudo().search( [('id', '=', ticket_id)]) rating = request.env['rating.rating'].sudo().search( [('res_model', '=', 'helpdesk.ticket'), ('res_id', '=', ticket.id), ('write_uid', '=', request.session.uid)]) display_rating = False if ticket.stage_id and ticket.stage_id.stage_type == 'done': display_rating = True values.update({'ticket': ticket, 'rating': rating, 'priority': int(ticket.priority), 'display_rating': display_rating}) history = request.session.get('my_tickets_history', []) values.update(get_records_pager(history, ticket)) return request.render("website_helpdesk.portal_my_ticket", values)
def _order_get_page_view_values(self, order, access_token, **kwargs): values = { 'sale_order': order, 'token': access_token, 'return_url': '/shop/payment/validate', 'bootstrap_formatting': True, 'partner_id': order.partner_id.id, 'report_type': 'html', 'action': order._get_portal_return_action(), } if order.company_id: values['res_company'] = order.company_id if order.has_to_be_paid(): domain = expression.AND([[ '&', ('state', 'in', ['enabled', 'test']), ('company_id', '=', order.company_id.id) ], [ '|', ('country_ids', '=', False), ('country_ids', 'in', [order.partner_id.country_id.id]) ]]) acquirers = request.env['payment.acquirer'].sudo().search(domain) values['acquirers'] = acquirers.filtered(lambda acq: ( acq.payment_flow == 'form' and acq.view_template_id) or ( acq.payment_flow == 's2s' and acq. registration_view_template_id)) values['pms'] = request.env['payment.token'].search([ ('partner_id', '=', order.partner_id.id) ]) values['acq_extra_fees'] = acquirers.get_acquirer_extra_fees( order.amount_total, order.currency_id, order.partner_id.country_id.id) if order.state in ('draft', 'sent', 'cancel'): history = request.session.get('my_quotations_history', []) else: history = request.session.get('my_orders_history', []) values.update(get_records_pager(history, order)) return values
def portal_my_project(self, project_id=None, **kw): project = request.env['project.project'].browse(project_id) vals = {'project': project} history = request.session.get('my_projects_history', []) vals.update(get_records_pager(history, project)) return request.render("project.portal_my_project", vals)
def view(self, order_id, pdf=None, token=None, message=False, **post): # use sudo to allow accessing/viewing orders for public user # only if he knows the private token now = fields.Date.today() if token: Order = request.env['sale.order'].sudo().search([('id', '=', order_id), ('access_token', '=', token)]) else: Order = request.env['sale.order'].search([('id', '=', order_id)]) # Log only once a day if Order and request.session.get('view_quote') != now and request.env.user.share: request.session['view_quote'] = now body = _('Quotation viewed by customer') _message_post_helper(res_model='sale.order', res_id=Order.id, message=body, token=token, message_type='notification', subtype="mail.mt_note", partner_ids=Order.user_id.sudo().partner_id.ids) if not Order: return request.render('website.404') # Token or not, sudo the order, since portal user has not access on # taxes, required to compute the total_amout of SO. order_sudo = Order.sudo() days = 0 if order_sudo.validity_date: days = (fields.Date.from_string(order_sudo.validity_date) - fields.Date.from_string(fields.Date.today())).days + 1 if pdf: pdf = request.env.ref('website_quote.report_web_quote').sudo().with_context(set_viewport_size=True).render_qweb_pdf([order_sudo.id])[0] pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf))] return request.make_response(pdf, headers=pdfhttpheaders) transaction_id = request.session.get('quote_%s_transaction_id' % order_sudo.id) if not transaction_id: Transaction = request.env['payment.transaction'].sudo().search([('reference', '=', order_sudo.name)]) else: Transaction = request.env['payment.transaction'].sudo().browse(transaction_id) values = { 'quotation': order_sudo, 'message': message and int(message) or False, 'option': any(not x.line_id for x in order_sudo.options), 'order_valid': (not order_sudo.validity_date) or (now <= order_sudo.validity_date), 'days_valid': days, 'action': request.env.ref('sale.action_quotations').id, 'no_breadcrumbs': request.env.user.partner_id.commercial_partner_id not in order_sudo.message_partner_ids, 'tx_id': Transaction.id if Transaction else False, 'tx_state': Transaction.state if Transaction else False, 'tx_post_msg': Transaction.acquirer_id.post_msg if Transaction else False, 'need_payment': order_sudo.invoice_status == 'to invoice' and Transaction.state in ['draft', 'cancel', 'error'], 'token': token, 'return_url': '/shop/payment/validate', 'bootstrap_formatting': True, 'partner_id': order_sudo.partner_id.id, } if order_sudo.require_payment or values['need_payment']: acquirers = request.env['payment.acquirer'].sudo().search([('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)]) values['form_acquirers'] = [acq for acq in acquirers if acq.payment_flow == 'form' and acq.view_template_id] values['s2s_acquirers'] = [acq for acq in acquirers if acq.payment_flow == 's2s' and acq.registration_view_template_id] values['pms'] = request.env['payment.token'].search( [('partner_id', '=', order_sudo.partner_id.id), ('acquirer_id', 'in', [acq.id for acq in values['s2s_acquirers']])]) for acq in values['form_acquirers']: acq.form = acq.render('/', order_sudo.amount_total, order_sudo.pricelist_id.currency_id.id, values={ 'return_url': '/quote/%s/%s' % (order_id, token) if token else '/quote/%s' % order_id, 'type': 'form', 'alias_usage': _('If we store your payment information on our server, subscription payments will be made automatically.'), 'partner_id': order_sudo.partner_id.id, }) history = request.session.get('my_quotes_history', []) values.update(get_records_pager(history, order_sudo)) return request.render('website_quote.so_quotation', values)