Esempio n. 1
0
    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
Esempio n. 2
0
    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)
Esempio n. 3
0
 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)
Esempio n. 4
0
 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)
Esempio n. 5
0
 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)
Esempio n. 6
0
    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
Esempio n. 7
0
 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)
Esempio n. 8
0
    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)