如何在门户视图odoo中添加客户签名

问题描述

我想在门户视图中添加客户签名但收到以下错误。我分享了我的代码

<div>
                    <a role="button" class="btn btn-primary btn-block mb8" data-toggle="modal" data-target="#modalaccept" href="#">
                        <i class="fa fa-check"/><t> Accept &amp; Sign</t>
                    </a>
               
          </div>
          <div role="dialog" class="modal fade" id="modalaccept">
              <div class="modal-dialog">
                <form id="accept" method="POST" t-att-data-picking-id="picking.id" t-att-data-token="picking.access_token" class="js_accept_json modal-content js_website_submit_form">
                  <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
                  <header class="modal-header">
                    <h4 class="modal-title">Validate Route</h4>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">&amp;times;</button>
                  </header>
                  <main class="modal-body" id="sign-dialog">
                    <p>
                      <span>By signing this proposal,I agree to the following terms:</span>
                      <ul>
                        <li><span>Accepted on the behalf of :</span><b t-field="picking.partner_id.commercial_partner_id"/>
                        </li>
                      </ul>
                    </p>
                    <t t-call="portal.signature_form">
                      <t t-set="call_url" t-value="picking.get_portal_url(suffix='/accept')"/>
                      <t t-set="default_name" t-value="picking.partner_id.name"/>

                    </t>
                  </main>
                </form>
              </div>
            </div>

我写的控制器是下面的代码

@http.route(['/my/delivery/<int:picking_id>'],type='http',auth='public',website=True)
    def route_page(self,picking_id,report_type=None,access_token=None,message=False,download=False,**kw):
        try:
            picking = self._document_check_access('stock.picking',access_token=access_token)
            logging.info(picking.access_token)
            logging.info("Picking+++++++++++++++++++++")
        except:
            return request.redirect('/my/delivery')

        attachments = []

        if picking.sale_id:
            for line in picking.sale_id.order_line:
                attachment = request.env['ir.attachment'].sudo().search([('res_model','=','product.template'),('res_id',line.product_id.product_tmpl_id.id)])
                for x in attachment:
                    attachments.append(x)
                    logging.info("file type ---------------------")
                    #logging.info(x.mimetype)
                

        values = self._prepare_portal_layout_values()

        values.update({
                'picking':picking.sudo(),'attachments':attachments,'page_name':'delivery_nested','token': access_token,})

        return request.render('portal_deliver_request.portal_deliver_template',values)
    @http.route(['/my/delivery/<int:picking_id>/accept'],type='json',auth="public",website=True)
    def portal_route_accept(self,name=None,signature=None,**post):

        access_token = access_token or request.httprequest.args.get('access_token')

        _logger.info("Sign work ___________________________________________________________________________")

        try:
            picking_sudo = self._document_check_access('stock.picking',access_token=access_token)

        except (AccessError,MissingError):
            return {'error':_('Invalid order.')}


        if not signature:
            return {'error' : _('Signature is missing.')}

        try:
            picking_sudo.write({
                'signed_by':name,'signed_on': fields.Datetime.Now(),'signature' : signature,})
        except (TypeError,binascii.Error) as e:
            return {'error': _('Invalid signature data.')}

        query_string = '&message=sign_ok'

        _url = route_sudo.get_portal_url(query_string=query_string)

        _logger.info("url -----------------------------------------------------------------")
        _logger.info(_url)

        return {
            'force_refresh': True,'redirect_url' : picking_sudo.get_portal_url(query_string=query_string),}

我收到以下错误 400 错误请求:,/my/delivery/36:函数声明为能够处理“http”类型的请求,但使用“json”类型的请求调用

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)