微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在odoo中编写用于更新多条记录的服务器操作

如何解决如何在odoo中编写用于更新多条记录的服务器操作

我有一个服务器操作,它应该获取所选记录的数据以向 api 发出发布请求。 这是我的服务器操作

dat <- data.frame(
  stringsAsFactors = FALSE,Date = c("01-01-2020","02-01-2020","03-01-2020","04-01-2020"),ID1 = c("HL/PS/IITD/QF/227","HL/PS/IITD/QF/228","HL/PS/IITD/QF/229","HL/PS/IITD/QF/230"),Time1 = c(3.252661544,4.58741088,6.592053573,2.776812359),Conc1 = c(325.2661544,458.741088,659.2053573,277.6812359),ID2 = c("HL/PS/IITD/TF/500","HL/PS/IITD/TF/501","HL/PS/IITD/TF/502","HL/PS/IITD/TF/503"),Time2 = c(3.149086291,9.202242653,7.463162859,7.944689942),Conc2 = c(314.9086291,920.2242653,746.3162859,794.4689942)
)

library(tidyverse)

dat %>% separate(ID1,into = paste0('ID1_',1:5),sep = '\\/') %>%
  separate(ID2,into = paste0('ID2_',sep = '\\/')
#>         Date ID1_1 ID1_2 ID1_3 ID1_4 ID1_5    Time1    Conc1 ID2_1 ID2_2 ID2_3
#> 1 01-01-2020    HL    PS  IITD    QF   227 3.252662 325.2662    HL    PS  IITD
#> 2 02-01-2020    HL    PS  IITD    QF   228 4.587411 458.7411    HL    PS  IITD
#> 3 03-01-2020    HL    PS  IITD    QF   229 6.592054 659.2054    HL    PS  IITD
#> 4 04-01-2020    HL    PS  IITD    QF   230 2.776812 277.6812    HL    PS  IITD
#>   ID2_4 ID2_5    Time2    Conc2
#> 1    TF   500 3.149086 314.9086
#> 2    TF   501 9.202243 920.2243
#> 3    TF   502 7.463163 746.3163
#> 4    TF   503 7.944690 794.4690

这是被调用的 check_pay_execute 函数

<record model="ir.actions.server" id="action_hr_payroll_execute_payroll">
          <field name="name">Execute Payment</field>
          <field name="model_id" ref="hr_payroll.model_hr_payslip"/>
          <field name="binding_model_id" ref="hr_payroll.model_hr_payslip"/>
          <field name="binding_view_types">list</field>
          <field name="state">code</field>
          <field name="code">
             
                records.check_pay_execute()
          </field>
      </record>

这是被调用的execute_payment函数

def check_pay_execute(self):
       cheker = 0
       for rec in self:

           if rec.state != 'done':
               raise Warning(_('You cannot process a draft payslip '
                               'for payment'))
           if rec.pay_status != 'approved':
               raise Warning(_('You cannot execute payslip not approved '
                               'for payment'))

           else:
               continue

       return self.execute_payment()

当我执行“执行付款”操作时出现此错误

def execute_payment(self):
        self.ensure_one
        print("Execute Payment")
        pay_acquirer = self.env['payment.acquirer']. \
            search([('provider','=','rave')],limit=1)
        _logger.info('Flutter secret key: %s',pay_acquirer.rave_secret_key)
        print("Checking details")
        _logger.info("Getting name %s",self.employee_id.name)
        _logger.info("Getting account number %s",self.employee_id.bank_account_id.acc_number)
        _logger.info("Getting account code %s",self.employee_id.bank_account_id.bic)
        emp_name = self.employee_id.name
        acc_num = self.employee_id.bank_account_id.acc_number
        acc_bank = self.employee_id.bank_account_id.bank_id.bic

        _logger.info("Getting data %s",emp_name)

        data = {
            "account_bank": acc_bank,"account_number": acc_num,"amount": self.net_wage,"seckey": pay_acquirer.rave_secret_key,"narration": "New transfer","currency": self.currency_id.name,# "reference":,"beneficiary_name": emp_name 
        }

        ## Make transfer to Employee bank details

        api_url = "https://%s/v2/gpx/transfers/create" % \
            (pay_acquirer._get_rave_api_url())
        _logger.info('API URL: %s',api_url)
        headers = {
            'Content-Type': 'application/json',# 'Authorization': 'Bearer %s' % (pay_acquirer.rave_secret_key)
        }

        _logger.info('Posting to API: \n%s',data)
        r = requests.post(api_url,headers=headers,data=json.dumps(data))
        tree = json.loads(r.text)
        _logger.info("tree: \n%s",tree)
        self.write({'pay_status': 'submitted'})
        
        if tree['status'] == "error":
            raise UserError(_(tree['message']))
        print("Payment submitted")
        return self._rave_validate_tree(tree)

这表明错误在“检查详细信息”记录器之后开始,它似乎没有从 self.log 正确获取记录。我真的不知道该怎么做或如何正确地做到这一点。

解决方法

你的代码中有几个奇怪的地方。

  1. ensure_one 是一种方法。您必须在末尾添加 ()。 ->(可能是错误)
  2. 你的 action.server 在列表视图中(暗示你可以处理多个记录),在你的第一个函数中你循环 self(直到这里它是合乎逻辑的)但是当你调用下一个方法 execute_payment 你这样做使用 self,但您的方法 execute_payment 的第一行是 ensure_one,这是没有意义的。
  3. 从未使用过 cheker(我认为它是“checker”)。
  4. 你的else: continue毫无意义。你已经到了循环的末尾。

仅供参考

  • requests.post 有一个参数 json 会自动编码你的字典。

More complicated POST requests

  • 您可以简单地使用 r.json() 来获取响应数据。

JSON Response Content

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。