Ejemplo n.º 1
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
Ejemplo n.º 2
0
    def subscription(self, account_id, uuid='', message='', message_class='', **kw):
        account_res = request.env['sale.subscription']
        if uuid:
            account = account_res.sudo().browse(account_id)
            if uuid != account.uuid:
                raise NotFound()
            if request.uid == account.partner_id.user_id.id:
                account = account_res.browse(account_id)
        else:
            account = account_res.browse(account_id)

        acquirers = request.env['payment.acquirer'].search([
            ('state', 'in', ['enabled', 'test']),
            ('registration_view_template_id', '!=', False),
            ('token_implemented', '=', True),
            ('company_id', '=', account.company_id.id)])
        acc_pm = account.payment_token_id
        part_pms = request.env['payment.token'].search([
            ('acquirer_id.company_id', '=', account.company_id.id),
            ('partner_id', 'child_of', account.partner_id.commercial_partner_id.id)])
        display_close = account.template_id.sudo().user_closable and account.stage_category == 'progress'
        is_follower = request.env.user.partner_id.id in [follower.partner_id.id for follower in account.message_follower_ids]
        active_plan = account.template_id.sudo()
        periods = {'daily': 'days', 'weekly': 'weeks', 'monthly': 'months', 'yearly': 'years'}
        if account.recurring_rule_type != 'weekly':
            rel_period = relativedelta(datetime.datetime.today(), account.recurring_next_date)
            missing_periods = getattr(rel_period, periods[account.recurring_rule_type]) + 1
        else:
            delta = datetime.date.today() - account.recurring_next_date
            missing_periods = delta.days / 7
        dummy, action = request.env['ir.model.data'].get_object_reference('sale_subscription', 'sale_subscription_action')
        values = {
            'account': account,
            'template': account.template_id.sudo(),
            'display_close': display_close,
            'is_follower': is_follower,
            'close_reasons': request.env['sale.subscription.close.reason'].search([]),
            'missing_periods': missing_periods,
            'payment_mode': active_plan.payment_mode,
            'user': request.env.user,
            'acquirers': list(acquirers),
            'acc_pm': acc_pm,
            'part_pms': part_pms,
            'is_salesman': request.env['res.users'].with_user(request.uid).has_group('sales_team.group_sale_salesman'),
            'action': action,
            'message': message,
            'message_class': message_class,
            'change_pm': kw.get('change_pm') != None,
            'pricelist': account.pricelist_id.sudo(),
            'submit_class':'btn btn-primary mb8 mt8 float-right',
            'submit_txt':'Pay Subscription',
            'bootstrap_formatting':True,
            'return_url':'/my/subscription/' + str(account_id) + '/' + str(uuid),
        }

        history = request.session.get('my_subscriptions_history', [])
        values.update(get_records_pager(history, account))
        values['acq_extra_fees'] = acquirers.get_acquirer_extra_fees(account.recurring_total_incl, account.currency_id, account.partner_id.country_id)

        return request.render("sale_subscription.subscription", values)
Ejemplo n.º 3
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
Ejemplo n.º 4
0
 def my_project(self, project=None, **kw):
     vals = {
         'project': project,
     }
     history = request.session.get('my_projects_history', [])
     vals.update(get_records_pager(history, project))
     return request.render("website_project.my_project", vals)
Ejemplo n.º 5
0
 def portal_my_subcontractor(self, task_id=None, **kw):
     task = request.env['project.task'].browse(task_id)
     vals = {'task': task, 'user': request.env.user}
     history = request.session.get('my_tasks_history', [])
     vals.update(get_records_pager(history, task))
     return request.render(
         "job_order_subcontracting.portal_my_subcontractor", vals)
Ejemplo n.º 6
0
    def orders_followup(self, order=None, access_token=None, **kw):
        order = request.env['sale.order'].browse([order])
        order_sudo = order.sudo()
        values = {}
        try:
            order.check_access_rights('read')
            order.check_access_rule('read')
        except AccessError:
            if not access_token or not consteq(order_sudo.access_token,
                                               access_token):
                return request.redirect('/my')
            values.update({'no_breadcrumbs': True})

        order_invoice_lines = {
            il.product_id.id: il.invoice_id
            for il in order_sudo.invoice_ids.mapped('invoice_line_ids')
        }
        history = request.session.get('my_orders_history', [])

        values.update({
            'order': order_sudo,
            'order_invoice_lines': order_invoice_lines,
        })
        values.update(get_records_pager(history, order_sudo))
        return request.render("sale.orders_followup", values)
Ejemplo n.º 7
0
    def portal_my_purchase_order(self, order_id=None, **kw):

        _logger.debug(
            "*********** 9.- /web/purchase/<int:order_id> order_id: %r",
            order_id)
        _logger.debug("*********** 9.- /web/purchase/<int:order_id> kw: %r",
                      kw)
        order = request.env['purchase.order'].browse(order_id)
        poOrder = order.id
        _logger.debug("*********** 9.- /web/purchase/<int:order_id> order: %r",
                      order)
        _logger.debug(
            "*********** 9.- end /web/purchase/<int:order_id> order ************"
        )

        try:
            order.check_access_rights('read')
            order.check_access_rule('read')
        except AccessError:
            return request.redirect('/my')

        history = request.session.get('my_purchases_history', [])
        #customer = request.env.user.partner_id.id
        customer = order.user_id.partner_id.id

        values = {}
        _logger.debug("*********** 9.- /web/purchase/<int:order_id> kw: %r",
                      kw)
        _logger.debug(
            "*********** 9.- /web/purchase/<int:order_id> end kwargs ************"
        )
        _logger.debug(
            "*********** 9.- /web/purchase/<int:order_id> customer: %r",
            customer)
        for field in [
                'prq_1', 'prq_2', 'prq_3', 'prq_4', 'prq_5', 'prq_6', 'prq_7',
                'prq_8', 'prq_9', 'prq_10', 'desc_1', 'desc_2', 'desc_3',
                'desc_4', 'desc_5', 'desc_6', 'desc_7', 'desc_8', 'desc_9',
                'desc_10', 'rejx_1', 'rejx_2', 'rejx_3', 'rejx_4', 'rejx_5',
                'rejx_6', 'rejx_7', 'rejx_8', 'rejx_9', 'rejx_10'
        ]:
            if kw.get(field):
                values[field] = kw.pop(field)
        values.update(kwargs=kw.items())
        values.update(customer_id=customer, order=order.sudo())
        customer_data = request.env['res.partner'].sudo().browse(customer)
        values.update(partner_name=customer_data.name,
                      partner_mail=customer_data.email,
                      partner_id=customer)
        values.update(get_records_pager(history, order))

        _logger.debug(
            "*********** 9.- /web/purchase/<int:order_id> values: %r", values)
        _logger.debug(
            "*********** 9.- /web/purchase/<int:order_id> end values ************"
        )

        return request.render("dropship_portal.portal_my_purchase_order",
                              values)
Ejemplo 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_%s' % Order.id) != now and request.env.user.share:
            request.session['view_quote_%s' % Order.id] = 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 = order_sudo.get_portal_last_transaction()
        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,
            'payment_tx': transaction,
            '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'],
            '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']])])

        history = request.session.get('my_quotes_history', [])
        values.update(get_records_pager(history, order_sudo))
        return request.render('website_quote.so_quotation', values)
Ejemplo n.º 9
0
 def portal_my_activity(self, activity_id=None, **kw):
     if self.has_activity_access(activity_id):
         activity = request.env['mail.activity'].sudo().browse(activity_id)
         vals = {'activity': activity}
         history = request.session.get('my_activities_history', [])
         vals.update(get_records_pager(history, activity))
         return request.render("crm_attooh.portal_my_activity", vals)
     return request.redirect('/my')
 def portal_my_meeting(self, meeting_id=None, **kw):
     if self.has_meeting_access(meeting_id):
         meeting = request.env['calendar.event'].sudo().browse(meeting_id)
         vals = {'meeting': meeting}
         history = request.session.get('my_meeting_history', [])
         vals.update(get_records_pager(history, meeting))
         return request.render("crm_attooh.portal_my_meeting", vals)
     return request.redirect('/my')
 def portal_my_signature(self, signature_id=None, **kw):
     if self.has_signature_access(signature_id):
         signature = request.env['signature.request'].sudo().browse(
             signature_id)
         vals = {'signature': signature}
         history = request.session.get('my_signature_history', [])
         vals.update(get_records_pager(history, signature))
         return request.render("crm_attooh.portal_my_signature", vals)
     return request.redirect('/my')
 def portal_my_attachment(self, attachment_id=None, **kw):
     if self.has_attachment_access(attachment_id):
         attachment = request.env['ir.attachment'].sudo().browse(
             attachment_id)
         vals = {'attachment': attachment}
         history = request.session.get('my_attachment_history', [])
         vals.update(get_records_pager(history, attachment))
         return request.render("crm_attooh.portal_my_attachment", vals)
     return request.redirect('/my')
Ejemplo n.º 13
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)
Ejemplo n.º 14
0
 def portal_my_task(self, task_id=None, **kw):
     task = request.env['project.task'].browse(task_id)
     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)
Ejemplo n.º 15
0
    def portal_order_page(self, order_id, report_type=None, access_token=None, message=False, download=False, **kw):
        try:
            order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        if report_type in ('html', 'pdf', 'text'):
            return self._show_report(model=order_sudo, report_type=report_type,
                                     report_ref='sale.action_report_saleorder', download=download)

        # use sudo to allow accessing/viewing orders for public user
        # only if he knows the private token
        now = fields.Date.today()

        # Log only once a day
        if order_sudo and request.session.get(
                'view_quote_%s' % order_sudo.id) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % order_sudo.id] = now
            body = _('Quotation viewed by customer')
            _message_post_helper(res_model='sale.order', res_id=order_sudo.id, message=body,
                                 token=order_sudo.access_token, message_type='notification', subtype="mail.mt_note",
                                 partner_ids=order_sudo.user_id.sudo().partner_id.ids)

        values = {
            'sale_order': order_sudo,
            'message': message,
            'token': access_token,
            'return_url': '/shop/payment/validate',
            'bootstrap_formatting': True,
            'partner_id': order_sudo.partner_id.id,
            'report_type': 'html',
        }
        if order_sudo.company_id:
            values['res_company'] = order_sudo.company_id

        if order_sudo.has_to_be_paid():
            domain = expression.AND([
                ['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
                ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order_sudo.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_sudo.partner_id.id)])

        if order_sudo.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_sudo))

        return request.render('sale.sale_order_portal_template', values)
Ejemplo n.º 16
0
    def portal_order_page(self, order_id, pdf=None, access_token=None, message=False, **kw):
        try:
            order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        if pdf:
            pdf = request.env.ref('sale.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)

        # use sudo to allow accessing/viewing orders for public user
        # only if he knows the private token
        now = fields.Date.today()

        # Log only once a day
        if order_sudo and request.session.get('view_quote_%s' % order_sudo.id) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % order_sudo.id] = now
            body = _('Quotation viewed by customer')
            _message_post_helper(res_model='sale.order', res_id=order_sudo.id, message=body, token=order_sudo.access_token, message_type='notification', subtype="mail.mt_note", partner_ids=order_sudo.user_id.sudo().partner_id.ids)

        transaction = order_sudo.get_portal_last_transaction()

        # TODO SEB fix breadcrumbs -> should always be visible (or at least no home alone)
        values = {
            'sale_order': order_sudo,
            'message': int(message) if message else False,
            '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_state': transaction.state if transaction else False,
            'need_payment': order_sudo.invoice_status == 'to invoice' and transaction.state in ['draft', 'cancel'],
            'token': access_token,
            'return_url': '/shop/payment/validate',
            'bootstrap_formatting': True,
            'partner_id': order_sudo.partner_id.id,
        }

        if order_sudo.has_to_be_paid() or values['need_payment']:
            domain = expression.AND([
                ['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
                ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order_sudo.partner_id.country_id.id])]
            ])
            acquirers = request.env['payment.acquirer'].sudo().search(domain)

            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']])])

        history = request.session.get('my_quotes_history', [])
        values.update(get_records_pager(history, order_sudo))

        return request.render('sale.sale_order_portal_template', values)
Ejemplo n.º 17
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
     history = request.session.get('my_orders_history', [])
     values.update(get_records_pager(history, order))
     return values
Ejemplo n.º 18
0
 def portal_user_job_order(self, task_id=None, **kw):
     task = request.env['project.task'].sudo().browse(task_id)
     vals = {
         'task': task,
         'user': request.env.user,
         'page_name': 'job_order',
         'is_job_order':True,
     }
     history = request.session.get('my_tasks_history', [])
     vals.update(get_records_pager(history, task))
     print ("vals:::::::::::::::::::::::::::::::::::::",vals)
     return request.render("project.portal_my_task", vals)
Ejemplo n.º 19
0
    def portal_review_page(self, order_id, report_type=None, access_token=None, message=False, download=False, **kw):
        res = self.portal_order_page(order_id, report_type, access_token, message, download, **kw)

        res.qcontext.update({
            'pending_review': True,
            'page_name': 'review',
        })

        history = request.session.get('my_pending_reviews', [])
        res.qcontext.update(get_records_pager(history, res.qcontext['sale_order']))     

        return res
Ejemplo n.º 20
0
    def portal_order_page(self, order_id, report_type=None, access_token=None, message=False, download=False, **kw):
        try:
            order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        if report_type in ('html', 'pdf', 'text'):
            return self._show_report(model=order_sudo, report_type=report_type, report_ref='sale.report_web_quote', download=download)

        # use sudo to allow accessing/viewing orders for public user
        # only if he knows the private token
        now = fields.Date.today()

        # Log only once a day
        if order_sudo and request.session.get('view_quote_%s' % order_sudo.id) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % order_sudo.id] = now
            body = _('Quotation viewed by customer')
            _message_post_helper(res_model='sale.order', res_id=order_sudo.id, message=body, token=order_sudo.access_token, message_type='notification', subtype="mail.mt_note", partner_ids=order_sudo.user_id.sudo().partner_id.ids)

        transaction = order_sudo.get_portal_last_transaction()

        values = {
            'sale_order': order_sudo,
            'message': int(message) if message else False,
            'tx_state': transaction.state if transaction else False,
            'need_payment': order_sudo.invoice_status == 'to invoice' and transaction.state in ['draft', 'cancel'],
            'token': access_token,
            'return_url': '/shop/payment/validate',
            'bootstrap_formatting': True,
            'partner_id': order_sudo.partner_id.id,
            'report_type': 'html',
        }

        if order_sudo.has_to_be_paid() or values['need_payment']:
            domain = expression.AND([
                ['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
                ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order_sudo.partner_id.country_id.id])]
            ])
            acquirers = request.env['payment.acquirer'].sudo().search(domain)

            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']])])

        if order_sudo.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_sudo))

        return request.render('sale.sale_order_portal_template', values)
Ejemplo n.º 21
0
    def portal_order_page(self, order_id, report_type=None, access_token=None, message=False, download=False, **kw):
        try:
            order_sudo = self._document_check_access('sale.order', order_id, access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        if report_type in ('html', 'pdf', 'text'):
            return self._show_report(model=order_sudo, report_type=report_type, report_ref='sale.action_report_saleorder', download=download)

        # use sudo to allow accessing/viewing orders for public user
        # only if he knows the private token
        now = fields.Date.today()

        # Log only once a day
        if order_sudo and request.session.get('view_quote_%s' % order_sudo.id) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % order_sudo.id] = now
            body = _('Quotation viewed by customer %s') % order_sudo.partner_id.name
            _message_post_helper('sale.order', order_sudo.id, body, token=order_sudo.access_token, message_type='notification', subtype="mail.mt_note", partner_ids=order_sudo.user_id.sudo().partner_id.ids)

        values = {
            'sale_order': order_sudo,
            'message': message,
            'token': access_token,
            'return_url': '/shop/payment/validate',
            'bootstrap_formatting': True,
            'partner_id': order_sudo.partner_id.id,
            'report_type': 'html',
        }
        if order_sudo.company_id:
            values['res_company'] = order_sudo.company_id

        if order_sudo.has_to_be_paid():
            domain = expression.AND([
                ['&', ('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)],
                ['|', ('specific_countries', '=', False), ('country_ids', 'in', [order_sudo.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_sudo.partner_id.id),
                ('acquirer_id', 'in', acquirers.filtered(lambda acq: acq.payment_flow == 's2s').ids)])
            values['acq_extra_fees'] = acquirers.get_acquirer_extra_fees(order_sudo.amount_total, order_sudo.currency_id, order_sudo.partner_id.country_id.id)

        if order_sudo.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_sudo))

        return request.render('sale.sale_order_portal_template', values)
Ejemplo n.º 22
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)
Ejemplo n.º 23
0
    def portal_my_subcontractor(self, task_id, access_token=None, **kw):
        task = request.env['project.task'].browse(task_id)
        try:
            task_sudo = self._document_check_access('project.task', task_id,
                                                    access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        vals = {'task_contract': task, 'user': request.env.user}
        history = request.session.get('my_tasks_history', [])
        vals.update(get_records_pager(history, task))

        return request.render(
            "job_order_subcontracting.portal_my_subcontractor", vals)
Ejemplo n.º 24
0
    def portal_subscriptions_page(self,
                                  subscription_id,
                                  access_token=None,
                                  message=False,
                                  download=False,
                                  **kw):
        try:
            sbscr_sudo = self._document_check_access('subscription.service',
                                                     subscription_id,
                                                     access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        # use sudo to allow accessing/viewing orders for public user
        # only if he knows the private token
        now = datetime.date.today()

        # Log only once a day
        if sbscr_sudo and request.session.get(
                'view_quote_%s' % sbscr_sudo.id
        ) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % sbscr_sudo.id] = now
            body = _('Subscription viewed by customer')
            _message_post_helper(
                res_model='subscription.service',
                res_id=sbscr_sudo.id,
                message=body,
                token=sbscr_sudo.access_token,
                message_type='notification',
                subtype="mail.mt_note",
                partner_ids=sbscr_sudo.user_id.sudo().partner_id.ids)
        display_close = sbscr_sudo.state in ['open', 'pending']
        values = {
            'subscription_service': sbscr_sudo,
            'display_close': display_close,
            'message': message,
            'token': access_token,
            'return_url': '/shop/payment/validate',
            'bootstrap_formatting': True,
            'partner_id': sbscr_sudo.partner_id.id,
        }
        if sbscr_sudo.company_id:
            values['res_company'] = sbscr_sudo.company_id

        history = request.session.get('my_subscriptions_history', [])
        values.update(get_records_pager(history, sbscr_sudo))

        return request.render('mdlu_subscription_service.subscription', values)
Ejemplo n.º 25
0
    def portal_user_job_order(self, task_id=None, access_token=None, **kw):
        task = request.env['project.task'].sudo().browse(task_id)
        try:
            task_sudo = self._document_check_access('project.task', task_id,
                                                    access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        vals = {
            'task': task,
            'user': request.env.user,
            'page_name': 'job_order',
            'is_job_order': True,
        }
        history = request.session.get('my_tasks_history', [])
        vals.update(get_records_pager(history, task))
        return request.render("project.portal_my_task", vals)
Ejemplo n.º 26
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)
Ejemplo n.º 27
0
    def portal_my_purchase_request(self,
                                   purchase_request_id=None,
                                   access_token=None,
                                   message=False,
                                   download=False,
                                   **kw):
        try:
            pr_sudo = self._document_check_access('purchase.request',
                                                  purchase_request_id,
                                                  access_token=access_token)
        except (AccessError, MissingError):
            return request.redirect('/my')

        now = datetime.date.today()

        if pr_sudo and request.session.get(
                'view_pr_%s' %
                pr_sudo.id) != now and request.env.user.share and access_token:
            request.session['view_quote_%s' % pr_sudo.id] = now
            body = _('Purchase request viewed by customer')
            _message_post_helper(
                res_model='purchase.request',
                res_id=pr_sudo.id,
                message=body,
                token=pr_sudo.access_token,
                message_type='notification',
                subtype="mail.mt_note",
                partner_ids=pr_sudo.user_id.sudo().partner_id.ids)
        values = {
            'purchase_request': pr_sudo,
            'message': message,
            'token': access_token,
            'return_url': '/my/purchase_requests',
            'bootstrap_formatting': True,
            'partner_id': pr_sudo.user_id.partner_id.id,
        }
        if pr_sudo.company_id:
            values['res_company'] = pr_sudo.company_id

        history = request.session.get('my_purchases_request_history', [])
        values.update(get_records_pager(history, pr_sudo))

        return request.render(
            "mdlu_purchase_request.portal_my_purchase_request", values)
Ejemplo n.º 28
0
    def portal_my_brd(self, brd_id=None, **kw):
        brd = request.env['business.requirement.deliverable'].browse(brd_id)

        brd.check_access_rights('read')
        brd.check_access_rule('read')

        if not brd.portal_published:
            raise AccessError(
                "Can't access to this business requirement deliverable")

        vals = {
            'brd': brd,
            'user': request.env.user,
            'page_name': 'business_requirement_deliverable',
        }
        history = request.session.get('my_brd_history', [])
        vals.update(get_records_pager(history, brd))
        return request.render("business_requirement_deliverable.portal_my_brd",
                              vals)
Ejemplo n.º 29
0
    def _order_get_page_view_values(self, order, access_token, **kwargs):
        values = {
            'order': order,
        }
        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
Ejemplo n.º 30
0
    def _appointments_get_page_view_values(self, appointment, access_token,
                                           **kwargs):
        values = {
            'page_name': 'appoint_mgmt',
            'appointment': appointment,
        }
        if access_token:
            values['no_breadcrumbs'] = True
        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_appointments_history', [])
        values.update(get_records_pager(history, appointment))
        values.update(
            request.env['payment.acquirer']._get_available_payment_input(
                appointment.customer, appointment.customer.company_id))

        #for payment ---- ref-> account_payment module
        payment_inputs = request.env[
            'payment.acquirer']._get_available_payment_input(
                company=appointment.customer.company_id)
        # if not connected (using public user), the method _get_available_payment_input will return public user tokens
        is_public_user = request.env.user._is_public()
        if is_public_user:
            # we should not display payment tokens owned by the public user
            payment_inputs.pop('pms', None)
            token_count = request.env['payment.token'].sudo().search_count([
                ('acquirer_id.company_id', '=',
                 appointment.customer.company_id.id),
                ('partner_id', '=', appointment.customer.id),
            ])
            values['existing_token'] = token_count > 0
        values.update(payment_inputs)
        values[
            'partner_id'] = appointment.customer if is_public_user else request.env.user.partner_id,

        return values
Ejemplo n.º 31
0
    def orders_followup(self, order=None, access_token=None, **kw):
        order = request.env['sale.order'].browse([order])
        order_sudo = order.sudo()
        values = {}
        try:
            order.check_access_rights('read')
            order.check_access_rule('read')
        except AccessError:
            if not access_token or not consteq(order_sudo.access_token, access_token):
                return request.redirect('/my')
            values.update({'no_breadcrumbs': True})

        order_invoice_lines = {il.product_id.id: il.invoice_id for il in order_sudo.invoice_ids.mapped('invoice_line_ids')}
        history = request.session.get('my_orders_history', [])

        values.update({
            'order': order_sudo,
            'order_invoice_lines': order_invoice_lines,
        })
        values.update(get_records_pager(history, order_sudo))
        return request.render("sale.orders_followup", values)
Ejemplo n.º 32
0
    def _br_get_page_view_values(self, br, access_token, **kwargs):
        values = {
            'business_requirement': br,
            'page_name': 'business_requirement',
        }
        if access_token:
            values['no_breadcrumbs'] = True
            values['access_token'] = access_token
        values['portal_confirmation'] = br.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_br_history', [])
        values.update(get_records_pager(history, br))

        return values
Ejemplo n.º 33
0
    def _brd_get_page_view_values(self, brd, access_token, **kwargs):
        values = {
            'brd': brd,
            'page_name': 'business_requirement_deliverable',
            'user': request.env.user,
        }
        if access_token:
            values['no_breadcrumbs'] = True
            values['access_token'] = access_token

        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_br_history', [])
        values.update(get_records_pager(history, brd))

        return values
Ejemplo n.º 34
0
    def _br_get_page_view_values(self, br, access_token, **kwargs):
        values = {
            "business_requirement": br,
            "page_name": "business_requirement"
        }
        if access_token:
            values["no_breadcrumbs"] = True
            values["access_token"] = access_token
        values["portal_confirmation"] = br.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_br_history", [])
        values.update(get_records_pager(history, br))

        return values
Ejemplo n.º 35
0
    def _invoice_get_page_view_values(self, invoice, access_token, **kwargs):
        values = {
            'page_name': 'invoice',
            'invoice': invoice,
        }
        if access_token:
            # force breadcrumbs even if access_token to `invite` users to register if they click on it
            values['no_breadcrumbs'] = False
            values['access_token'] = access_token

        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_invoices_history', [])
        values.update(get_records_pager(history, invoice))

        return values
Ejemplo n.º 36
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
Ejemplo n.º 37
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, token_field="access_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,
        }

        if order_sudo.require_payment or values['need_payment']:
            values['acquirers'] = list(request.env['payment.acquirer'].sudo().search([('website_published', '=', True), ('company_id', '=', order_sudo.company_id.id)]))
            extra_context = {
                'submit_class': 'btn btn-primary',
                'submit_txt': _('Pay & Confirm')
            }
            values['buttons'] = {}
            for acquirer in values['acquirers']:
                values['buttons'][acquirer.id] = acquirer.with_context(**extra_context).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)
Ejemplo n.º 38
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)