Пример #1
0
 def create_order_form_view(self, **kw):
     try:
         packaging_list = request.env['famotain.product'].sudo().search(
             [('product_type', '=', 'package'), ('active', '=', True),
              ('show_on_web', '=', True)],
             order="price")
         label = request.env['famotain.product'].sudo().search(
             [('product_type', '=', 'label'), ('active', '=', True)],
             limit=1)
         data = {
             'label': label,
             'packaging_list': packaging_list,
             'action': "/order/action/create"
         }
         return request.render('web_famotain.order_form_layout', data)
     except Exception as e:
         se = _serialize_exception(e)
         error = {
             'code': 200,
             'name': "Server Error",
             'data': se,
             'message': 'Contact admin for more info.'
         }
         _logger.error(json.dumps(error))
         return request.render('web_famotain.error_layout', error)
Пример #2
0
 def order_form_info_view(self, code=None, info=''):
     try:
         order = decrypt(code)
         sales_order = request.env['sales__order.sales__order'].sudo(
         ).search([('name', '=', order)], limit=1)
         if not sales_order:
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
             _logger.error(json.dumps(error))
             return request.render('web_famotain.error_layout', error)
         data = {'sales_order': sales_order, 'info': info}
         return request.render('web_famotain.order_info_layout', data)
     except Exception as e:
         se = _serialize_exception(e)
         if se['name'] == "cryptography.fernet.InvalidToken":
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
         else:
             error = {
                 'code': 200,
                 'name': "Server Error",
                 'data': se,
                 'message': 'Contact admin for more info.'
             }
         _logger.error(json.dumps(error))
         return request.render('web_famotain.error_layout', error)
Пример #3
0
 def wrap(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     except Exception, e:
         se = _serialize_exception(e)
         error = {'code': 200, 'message': "Odoo Server Error", 'data': se}
         return werkzeug.exceptions.InternalServerError(json.dumps(error))
Пример #4
0
    def report_print(self, data, context=None):
        print_data = self._check_direct_print(data)
        if not print_data['can_print']:
            return json.dumps({
                'title':
                _('Printing not allowed!'),
                'message':
                _('Please check your DirectPrint settings or close and open app again'
                  ),
                'success':
                False,
                'notify':
                True,
            })

        rp = print_data['report_policy']
        printer_bin = print_data['printer_bin']
        printer_id = print_data['printer_id']

        # Finally if we reached this place - we can send report to printer.
        standard_response = self.report_download(data, 'fake-token', context)

        # If we do not have Content-Disposition headed, than no file-name
        # was generated (maybe error)
        content_disposition = standard_response.headers.get(
            'Content-Disposition')
        if not content_disposition:
            return standard_response

        report_name = content_disposition.split(
            "attachment; filename*=UTF-8''")[1]
        report_name = url_unquote(report_name)
        ascii_data = base64.b64encode(standard_response.data).decode('ascii')

        try:
            params = {
                'title': report_name,
                'type': print_data['report_type'],
                'size': rp and rp.report_paper_id,
                'options': {
                    'bin': printer_bin.name
                } if printer_bin else {},
            }
            printer_id.printnode_print_b64(ascii_data, params)
        except Exception as e:
            _logger.exception(e)
            se = _serialize_exception(e)
            error = {'code': 200, 'message': "Odoo Server Error", 'data': se}
            return request.make_response(html_escape(json.dumps(error)))

        title = _('Report was sent to printer')
        message = _('Document "%s" was sent to printer %s') % (report_name,
                                                               printer_id.name)
        return json.dumps({
            'title': title,
            'message': message,
            'success': True,
            'notify': request.env.company.im_a_teapot
        })
Пример #5
0
    def api_download_report(self, data, code_order, token):
        try:
            order = request.env['sgu.order'].sudo().search([
                ('name', '=', code_order),
                ('token', '=', token)
            ])
            if len(order) == 1:
                requestcontent = json.loads(data)
                url, type = requestcontent[0], requestcontent[1]
                try:
                    if type in ['qweb-pdf', 'qweb-text']:
                        converter = 'pdf' if type == 'qweb-pdf' else 'text'
                        extension = 'pdf' if type == 'qweb-pdf' else 'txt'

                        pattern = '/report/pdf/' if type == 'qweb-pdf' else '/report/text/'
                        reportname = url.split(pattern)[1].split('?')[0]

                        docids = None
                        if '/' in reportname:
                            reportname, docids = reportname.split('/')

                        if docids:
                            # Generic report:
                            response = self.report_routes(reportname, docids=docids, converter=converter)
                        else:
                            # Particular report:
                            data = url_decode(url.split('?')[1]).items()  # decoding the args represented in JSON
                            response = self.report_routes(reportname, converter=converter, **dict(data))

                        report = request.env['ir.actions.report'].sudo()._get_report_from_name(reportname)
                        filename = "%s.%s" % (report.name, extension)

                        if docids:
                            ids = [int(x) for x in docids.split(",")]
                            obj = request.env[report.model].sudo().browse(ids)
                            if report.print_report_name and not len(obj) > 1:
                                report_name = safe_eval(report.print_report_name, {'object': obj})
                                filename = "%s.%s" % (report_name, extension)
                        response.headers.add('Content-Disposition', content_disposition(filename))
                        return response
                    else:
                        return
                except Exception as e:
                    se = _serialize_exception(e)
                    error = {
                        'code': 200,
                        'message': "Odoo Server Error",
                        'data': se
                    }
                    return request.make_response(html_escape(json.dumps(error)))
        except Exception as ex:
            return http.Response(
                json.dumps({
                    "status": 'error',
                    "message": ex
                }),
                status=400,
                mimetype='application/json'
            )
Пример #6
0
 def wrap(*args, **kwargs):
     try:
         return f(*args, **kwargs)
     except Exception, e:
         _logger.exception("An exception occured during an http request")
         se = _serialize_exception(e)
         error = {'code': 200, 'message': "Odoo Server Error", 'data': se}
         return werkzeug.exceptions.InternalServerError(json.dumps(error))
Пример #7
0
    def report_download(self, data, token, context=None):
        requestcontent = json.loads(data)
        url, type = requestcontent[0], requestcontent[1]
        try:
            if type == 'qweb-docx_to_x':
                converter = 'docx_to_x'
                default_output_file = 'docx'

                pattern = '/report/docx_to_x/'
                reportname = url.split(pattern)[1].split('?')[0]

                docids = None
                if '/' in reportname:
                    reportname, docids = reportname.split('/')

                if docids:
                    # Generic report:
                    response = self.report_routes(reportname,
                                                  docids=docids,
                                                  converter=converter,
                                                  context=context)
                else:
                    # Particular report:
                    data = url_decode(
                        url.split('?')
                        [1]).items()  # decoding the args represented in JSON
                    response = self.report_routes(reportname,
                                                  converter=converter,
                                                  context=context,
                                                  **dict(data))

                report = request.env[
                    'ir.actions.report']._get_report_from_name(reportname)
                extension = report.output_file or default_output_file
                filename = "%s.%s" % (report.name, extension)

                if docids:
                    ids = [int(x) for x in docids.split(",")]
                    obj = request.env[report.model].browse(ids)
                    if report.print_report_name and not len(obj) > 1:
                        report_name = safe_eval(report.print_report_name, {
                            'object': obj,
                            'time': time
                        })
                        filename = "%s.%s" % (report_name, extension)
                response.headers.add('Content-Disposition',
                                     content_disposition(filename))
                response.set_cookie('fileToken', token)
                return response
        except Exception as e:
            se = _serialize_exception(e)
            error = {'code': 200, 'message': "Odoo Server Error", 'data': se}
            return request.make_response(html_escape(json.dumps(error)))
        return super(ReportControllerExtend,
                     self).report_download(data, token, context)
Пример #8
0
 def edit_order_form_view(self, code=None):
     try:
         order = decrypt(code)
         sales_order = request.env['sales__order.sales__order'].sudo(
         ).search([('name', '=', order)], limit=1)
         if not sales_order:
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
             _logger.error(json.dumps(error))
             return request.render('web_famotain.error_layout', error)
         if sales_order.state != 'draft' and sales_order.state != 'confirm':
             error = {
                 'name': "Your order can't be edited",
                 'message': 'Contact our admin to edit this order.'
             }
             _logger.error(json.dumps(error))
             return request.render('web_famotain.error_layout', error)
         packaging_list = request.env['famotain.product'].sudo().search([
             ('product_type', '=', 'package'), ('active', '=', True)
         ])
         label = request.env['famotain.product'].sudo().search(
             [('product_type', '=', 'label'), ('active', '=', True)],
             limit=1)
         data = {
             'edit': True,
             'label': label,
             'sales_order': sales_order,
             'packaging_list': packaging_list,
             'action': '/order/action/edit/%s' % code
         }
         return request.render('web_famotain.order_form_layout', data)
     except Exception as e:
         se = _serialize_exception(e)
         if se['name'] == "cryptography.fernet.InvalidToken":
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
         else:
             error = {
                 'code': 200,
                 'name': "Server Error",
                 'data': se,
                 'message': 'Contact admin for more info.'
             }
         _logger.error(json.dumps(error))
         return request.render('web_famotain.error_layout', error)
Пример #9
0
 def view_order_form(self, code=None):
     try:
         order = decrypt(code)
         sales_order = request.env['sales__order.sales__order'].sudo(
         ).search([('name', '=', order)], limit=1)
         if not sales_order:
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
             _logger.error(json.dumps(error))
             return request.render('web_famotain.error_layout', error)
         design = False
         design_2 = False
         design_3 = False
         for product_order in sales_order.product_order_ids:
             if product_order.design_image:
                 design = True
             if product_order.design_image_2:
                 design_2 = True
             if product_order.design_image_3:
                 design_3 = True
             if design and design_2 and design_3:
                 break
         data = {
             'sales_order': sales_order,
             'design': design,
             'design_2': design_2,
             'design_3': design_3,
         }
         return request.render('web_famotain.order_layout', data)
     except Exception as e:
         se = _serialize_exception(e)
         if se['name'] == "cryptography.fernet.InvalidToken":
             error = {
                 'name':
                 "Your order can't be found",
                 'message':
                 'Please check the requested url or contact our admin for more info.'
             }
         else:
             error = {
                 'code': 200,
                 'name': "Server Error",
                 'data': se,
                 'message': 'Contact admin for more info.'
             }
         _logger.error(json.dumps(error))
         return request.render('web_famotain.error_layout', error)
Пример #10
0
 def report_download(self, data, token):
     requestcontent = json.loads(data)
     url, type = requestcontent[0], requestcontent[1]
     if type not in ['aeroo', 'qweb-aeroo']:
         return super(ReportController, self).report_download(data, token)
     try:
         reportname = url.split('/report/aeroo/')[1].split('?')[0]
         reportname, docids = reportname.split('/')
         return self.report_routes(reportname=reportname,
                                   docids=docids,
                                   converter=type)
     except Exception as e:
         se = _serialize_exception(e)
         error = {'code': 200, 'message': 'Odoo Server Error', 'data': se}
         return request.make_response(html_escape(json.dumps(error)))
Пример #11
0
    def report_download(self, data, token):
        """This function is used by 'qwebactionmanager.js' in order to trigger the download of
        a pdf/controller report.

        :param data: a javascript array JSON.stringified containg report internal url ([0]) and
        type [1]
        :returns: Response with a filetoken cookie and an attachment header
        """
        requestcontent = json.loads(data)
        url, type = requestcontent[0], requestcontent[1]
        try:
            if type == 'qweb-pdf':
                reportname = url.split('/report/pdf/')[1].split('?')[0]

                docids = None
                if '/' in reportname:
                    reportname, docids = reportname.split('/')

                if docids:
                    # Generic report:
                    response = self.report_routes(reportname, docids=docids, converter='pdf')
                else:
                    # Particular report:
                    data = url_decode(url.split('?')[1]).items()  # decoding the args represented in JSON
                    response = self.report_routes(reportname, converter='pdf', **dict(data))

                report = request.env['report']._get_report_from_name(reportname)
                filename = "%s.%s" % (report.name, "pdf")
                if docids:
                    ids = [int(x) for x in docids.split(",")]
                    obj = request.env[report.model].browse(ids)
                    if report.print_report_name and not len(obj) > 1:
                        report_name = safe_eval(report.print_report_name, {'object': obj, 'time': time})
                        filename = "%s.%s" % (report_name, "pdf")
                response.headers.add('Content-Disposition', content_disposition(filename))
                response.set_cookie('fileToken', token)
                return response
            else:
                return
        except Exception as e:
            se = _serialize_exception(e)
            error = {
                'code': 200,
                'message': "Odoo Server Error",
                'data': se
            }
            return request.make_response(html_escape(json.dumps(error)))
Пример #12
0
 def links_view(self, **kw):
     try:
         catalog_link = request.env['famotain.settings'].sudo().search(
             [('key_name', '=', 'catalog_link'), ('active', '=', True)],
             limit=1)
         data = {
             'catalog_link': catalog_link,
         }
         return request.render('web_famotain.links_layout', data)
     except Exception as e:
         se = _serialize_exception(e)
         error = {
             'code': 200,
             'name': "Server Error",
             'data': se,
             'message': 'Contact admin for more info.'
         }
         _logger.error(json.dumps(error))
         return request.render('web_famotain.error_layout', error)
Пример #13
0
 def get_report_xlsx(self, model, options, output_format, token,
                     report_name, **kw):
     uid = request.session.uid
     report_obj = request.env[model].sudo(uid)
     options = json.loads(options)
     try:
         if output_format == 'xlsx':
             response = request.make_response(
                 None,
                 headers=[('Content-Type', 'application/vnd.ms-excel'),
                          ('Content-Disposition',
                           content_disposition(report_name + '.xlsx'))])
             report_obj.get_xlsx_report(options, response)
         response.set_cookie('fileToken', token)
         return response
     except Exception as e:
         se = _serialize_exception(e)
         error = {'code': 200, 'message': 'Odoo Server Error', 'data': se}
         return request.make_response(html_escape(json.dumps(error)))
Пример #14
0
    def print_invoice(self, code=None):
        try:
            invoice = request.env['sales__order.invoice'].sudo().search(
                [('name', '=', decrypt(code))], limit=1)
            if not invoice:
                error = {
                    'name':
                    "Your order can't be found",
                    'message':
                    'Please check the requested url or contact our admin for more info.'
                }
                _logger.error(json.dumps(error))
                return request.render('web_famotain.error_layout', error)

            report = request.env['ir.actions.report'].sudo(
            )._get_report_from_name('sales__order.report_sales__order_invoice')
            pdf = report.render_qweb_pdf([invoice.id])[0]
            filename = """{} - {}.pdf""".format(invoice.source_document,
                                                invoice.name)
            pdfhttpheaders = [('Content-Type', 'application/pdf'),
                              ('Content-Length', len(pdf)),
                              ('Content-Disposition',
                               content_disposition(filename))]
            return request.make_response(pdf, headers=pdfhttpheaders)
        except Exception as e:
            se = _serialize_exception(e)
            if se['name'] == "cryptography.fernet.InvalidToken":
                error = {
                    'name':
                    "Your order can't be found",
                    'message':
                    'Please check the requested url or contact our admin for more info.'
                }
            else:
                error = {
                    'code': 200,
                    'name': "Server Error",
                    'data': se,
                    'message': 'Contact admin for more info.'
                }
            _logger.error(json.dumps(error))
            return request.render('web_famotain.error_layout', error)
Пример #15
0
 def report_excel(self,
                  id=None,
                  model='ir.attachment',
                  output_format='xlsx',
                  report_name=None,
                  token=None,
                  report_id=None,
                  filename=None,
                  download=None,
                  **kw):
     uid = request.session.uid
     domain = [('id', '=', id), ('create_uid', '=', uid)]
     context_id = request.env[model].sudo().search(domain, limit=1)
     attach_fpath = ''
     attach_fname = ''
     if context_id:
         attach_fname = context_id['datas_fname']
         store_fname = context_id['store_fname']
         attach_fpath = context_id._full_path(store_fname)
     filename = attach_fname if not filename else filename
     filename_attachment = 'attachment; filename=' + filename + ';'
     filename_attachment = filename_attachment.encode('utf-8')
     try:
         with open(attach_fpath, "rb") as f:
             content = f.read()
             f.close()
         if ".".join(filename.split('.')[1:]) in SUPPORTED_FORMATS:
             response = request.make_response(
                 content,
                 headers=[('Content-Type', 'application/vnd.ms-excel'),
                          ('Content-Disposition', filename_attachment),
                          ('Content-Length', len(content))])
             return response
     except Exception as e:
         se = _serialize_exception(e)
         error = {'code': 200, 'message': 'Odoo Server Error', 'data': se}
         return request.make_response(html_escape(json.dumps(error)))
     else:
         return request.not_found()
Пример #16
0
    def report_download(self, data, token, context=None):
        """ print reports on report_download
        """
        user = request.env.user
        if not user.has_group(SECURITY_GROUP) \
                or not user.company_id.printnode_enabled or not user.printnode_enabled:
            return super(ReportControllerProxy, self).report_download(data, token, context)

        requestcontent = json.loads(data)

        if requestcontent[1] not in PDF + RAW:
            return super(ReportControllerProxy, self).report_download(data, token, context)

        ext = requestcontent[1].split('-')[1]
        report_name, object_ids = requestcontent[0].\
            split('/report/{}/'.format(ext))[1].split('?')[0].split('/')

        report_id = request.env['ir.actions.report']._get_report_from_name(report_name)
        printer_id = user._get_report_printer(report_id.id)

        if not printer_id:
            return super(ReportControllerProxy, self).report_download(data, token, context)

        try:
            ids = [int(x) for x in object_ids.split(',')]
            obj = request.env[report_id.model].browse(ids)

            super(ReportControllerProxy, self).printnode_print(printer_id, report_id, obj)

        except Exception as e:
            return request.make_response(html_escape(json.dumps({
                'code': 200,
                'message': 'Odoo Server Error',
                'data': _serialize_exception(e),
            })))

        index = user.company_id.im_a_teapot
        raise PrintNodeSuccess(['', _('Sent to PrintNode')][index])
Пример #17
0
    def confirm_order_form(self, code=None, **kw):
        try:
            order = decrypt(code)
            sales_order = request.env['sales__order.sales__order'].sudo(
            ).search([('name', '=', order)], limit=1)
            if not sales_order:
                error = {
                    'name':
                    "Your order can't be found",
                    'message':
                    'Please check the requested url or contact our admin for more info.'
                }
                _logger.error(json.dumps(error))
                return request.render('web_famotain.error_layout', error)

            # check if sales order editable (draft)
            if sales_order.state != 'confirm':
                error = {
                    'name': "Your order can't be confirmed",
                    'message': 'Contact our admin to confirm this order.'
                }
                _logger.error(json.dumps(error))
                return request.render('web_famotain.error_layout', error)
            sales_order.action_approve()
            return werkzeug.utils.redirect('/order/form/confirmed/%s' %
                                           sales_order.encryption)
        except Exception as e:
            se = _serialize_exception(e)
            error = {
                'code': 200,
                'name': "Server Error",
                'data': se,
                'message': 'Contact admin for more info.'
            }
            _logger.error(json.dumps(error))
            return request.render('web_famotain.error_layout', error)
Пример #18
0
    def edit_order_form(self, code=None, **kw):
        try:
            order = decrypt(code)
            sales_order = request.env['sales__order.sales__order'].sudo(
            ).search([('name', '=', order)], limit=1)
            if not sales_order:
                error = {
                    'name':
                    "Your order can't be found",
                    'message':
                    'Please check the requested url or contact our admin for more info.'
                }
                _logger.error(json.dumps(error))
                return request.render('web_famotain.error_layout', error)

            # check if sales order editable (draft)
            if sales_order.state != 'draft' and sales_order.state != 'confirm':
                error = {
                    'name': "Your order can't be edited",
                    'message': 'Contact our admin to edit this order.'
                }
                _logger.error(json.dumps(error))
                return request.render('web_famotain.error_layout', error)
            # edit customer
            data_customer = request.env['sales__order.customer'].sudo(
            ).prepare_vals(name=kw.get('input-name'),
                           phone=kw.get('input-hp'),
                           email=kw.get('input-email'),
                           address=kw.get('input-address'),
                           city=kw.get('input-city'),
                           zip_code=kw.get('input-zipcode'),
                           contact_by=kw.get('input-orderby'))
            customer = request.env['sales__order.customer'].sudo().browse(
                sales_order.customer_id.id)
            customer.sudo().write(data_customer)

            if kw.get('input-packaging') in "-":
                kw['input-packing'] = "-"
                kw['input-packaging'] = ""

            packaging_id = None
            if kw['input-packaging']:
                packaging = request.env['famotain.product'].sudo().search(
                    [('code', '=', kw['input-packaging']),
                     ('product_type', '=', 'package')],
                    limit=1)
                packaging_id = packaging.id

            # edit sales order
            data_order = request.env['sales__order.sales__order'].sudo(
            ).prepare_vals_list(
                customer_id=customer.id,
                qty_total=kw.get('input-qty'),
                deadline=kw.get('input-deadline'),
                event_date=kw.get('input-eventdate'),
                product=kw.get('input-product'),
                theme=kw.get('input-theme'),
                packaging_id=packaging_id,
                packing=kw.get('input-packing'),
                label=kw.get('input-label'),
                custom_name=kw.get('input-customname'),
                additional_text=kw.get('input-additionalwriting'),
                thanks_card_writing=kw.get('input-thankcardwriting'),
                custom_request=kw.get('input-customrequest'),
                notes=kw.get('input-note'),
                add_ons=kw.get('input-addons'))
            sales_order.write_from_web(data_order)
            return werkzeug.utils.redirect('/order/form/edited/%s' %
                                           sales_order.encryption)
        except Exception as e:
            se = _serialize_exception(e)
            error = {
                'code': 200,
                'name': "Server Error",
                'data': se,
                'message': 'Contact admin for more info.'
            }
            _logger.error(json.dumps(error))
            return request.render('web_famotain.error_layout', error)
Пример #19
0
    def create_order_form(self, **kw):
        try:
            if kw.get('input-packaging') in "-":
                kw['input-packing'] = "-"
                kw['input-packaging'] = ""

            packaging_id = None
            if kw['input-packaging']:
                packaging = request.env['famotain.product'].sudo().search(
                    [('code', '=', kw['input-packaging']),
                     ('product_type', '=', 'package')],
                    limit=1)
                packaging_id = packaging.id

            # search if order exist
            # sales_order = request.env['sales__order.sales__order'].sudo().search(
            #     [('phone', '=', kw.get('input-hp')), ('address', '=', kw.get('input-address')),
            #      ('city', '=', kw.get('input-city')), ('qty_total', '=', kw.get('input-qty')),
            #      ('deadline', '=', kw.get('input-deadline')), ('event_date', '=', kw.get('input-eventdate')),
            #      ('product', '=', kw.get('input-product')), ('theme', '=', kw.get('input-theme')),
            #      ('packaging_id', '=', packaging_id), ('packing', '=', kw.get('input-packing')),
            #      ('label', '=', kw.get('input-label')), ('custom_name', '=', kw.get('input-customname')),
            #      ('additional_text', '=', kw.get('input-additionalwriting')),
            #      ('thanks_card_writing', '=', kw.get('input-thankcardwriting')),
            #      ('custom_request', '=', kw.get('input-customrequest')), ('customer_notes', '=', kw.get('input-note')),
            #      ('add_ons', '=', kw.get('input-addons'))], limit=1)
            # if sales_order:
            #     return werkzeug.utils.redirect('/order/form/created/%s' % sales_order.encryption)

            # create customer
            data_customer = request.env['sales__order.customer'].sudo(
            ).prepare_vals(name=kw.get('input-name'),
                           phone=kw.get('input-hp'),
                           email=kw.get('input-email'),
                           address=kw.get('input-address'),
                           city=kw.get('input-city'),
                           zip_code=kw.get('input-zipcode'),
                           contact_by=kw.get('input-orderby'))
            # search if customer is exist
            customer = request.env['sales__order.customer'].sudo().search(
                [
                    ('phone', '=ilike', data_customer.get('phone')),
                ], limit=1)
            if customer:
                customer.sudo().write(data_customer)
            else:
                customer = request.env['sales__order.customer'].sudo().create(
                    data_customer)

            # create sales order
            data_order = request.env['sales__order.sales__order'].sudo(
            ).prepare_vals_list(
                customer_id=customer.id,
                qty_total=kw.get('input-qty'),
                deadline=kw.get('input-deadline'),
                event_date=kw.get('input-eventdate'),
                product=kw.get('input-product'),
                theme=kw.get('input-theme'),
                packaging_id=packaging_id,
                packing=kw.get('input-packing'),
                label=kw.get('input-label'),
                custom_name=kw.get('input-customname'),
                additional_text=kw.get('input-additionalwriting'),
                thanks_card_writing=kw.get('input-thankcardwriting'),
                custom_request=kw.get('input-customrequest'),
                notes=kw.get('input-note'),
                add_ons=kw.get('input-addons'))
            sales_order = request.env['sales__order.sales__order'].sudo(
            ).create(data_order)
            return werkzeug.utils.redirect('/order/form/created/%s' %
                                           sales_order.encryption)
        except Exception as e:
            se = _serialize_exception(e)
            error = {
                'code': 200,
                'name': "Server Error",
                'data': se,
                'message': 'Contact admin for more info.'
            }
            _logger.error(json.dumps(error))
            return request.render('web_famotain.error_layout', error)
Пример #20
0
    def report_download(self, data, token):
        """This function is used by 'qwebactionmanager.js' in order to trigger the download of
        a pdf/controller report.

        :param data: a javascript array JSON.stringified containg report internal url ([0]) and
        type [1]
        :returns: Response with a filetoken cookie and an attachment header
        """
        requestcontent = json.loads(data)
        url, type = requestcontent[0], requestcontent[1]
        try:
            if type == "qweb-pdf":
                reportname = url.split("/report/pdf/")[1].split("?")[0]

                docids = None
                active_model = ""
                NewReportName = ""
                if "/" in reportname:
                    reportname, docids = reportname.split("/")

                if docids:
                    # Generic report:
                    response = self.report_routes(reportname,
                                                  docids=docids,
                                                  converter="pdf")
                else:
                    # Particular report:
                    data = url_decode(
                        url.split("?")
                        [1]).items()  # decoding the args represented in JSON

                    dictData = dict(data)
                    active_model = json.loads(
                        dictData.get("context")).get("active_model")
                    NewReportName = (json.loads(
                        dictData.get("options")).get("form").get("name"))
                    response = self.report_routes(reportname,
                                                  converter="pdf",
                                                  **dictData)

                report = request.env[
                    "ir.actions.report"]._get_report_from_name(reportname)
                filename = "%s.%s" % (report.name, "pdf")

                if active_model == "payroll.register":
                    filename = "%s.%s" % (NewReportName, "pdf")

                if docids:
                    ids = [int(x) for x in docids.split(",")]
                    obj = request.env[report.model].browse(ids)
                    if report.print_report_name and not len(obj) > 1:
                        report_name = safe_eval(
                            report.print_report_name,
                            {
                                "object": obj,
                                "time": time
                            },
                        )
                        filename = "%s.%s" % (report_name, "pdf")
                    if report.model == "payroll.register":
                        filename = "%s.%s" % (obj.name, "pdf")
                response.headers.add("Content-Disposition",
                                     content_disposition(filename))
                response.set_cookie("fileToken", token)
                return response
            else:
                return
        except Exception as e:
            se = _serialize_exception(e)
            error = {"code": 200, "message": "Odoo Server Error", "data": se}
            return request.make_response(html_escape(json.dumps(error)))
Пример #21
0
def http_serialize_exception(e):
    tmp = _serialize_exception(e)
    tmp['debug'] = tmp['name']
    return tmp