Odoo生成报价单 - xiaohao0576/odoo-doc GitHub Wiki

record.ensure_one()
order = record      # 取出报价单
partner = order.partner_id  # 取出报价单上的客户
company = partner.parent_id


template = env['sign.template'].browse(3)   #通过id查找要使用的PDF模板


if not template:
    raise UserError("找不到PDF模板文件!")

role = template.sign_item_ids.responsible_id

sign_request = env['sign.request'].with_context(no_sign_mail=True).create({
    'template_id': template.id,
    'request_item_ids': [Command.create({'role_id': role.id, 'partner_id': env.user.partner_id.id})],
    'reference': f'报价单-{record.id}',  #这个是生成的文件名
    'state': 'sent',
})

request_item = sign_request.request_item_ids[0].sudo() # 需要用超级权限才能模拟签名


item_values = []  #填空列表

# 添加客户姓名
if company:
    # 添加公司名称
    item_values.append(Command.create({
        'sign_item_id': 13,
        'value': company.name
    }))
    
    # 添加联系人名称
    item_values.append(Command.create({
        'sign_item_id': 14,
        'value': partner.name
    }))

    # 添加公司地址
    item_values.append(Command.create({
        'sign_item_id': 15,
        'value': company.contact_address
    }))
else:
    # 添加联系人名称
    item_values.append(Command.create({
        'sign_item_id': 14,
        'value': partner.name
    }))

# 添加客户购买原因
item_values.append(Command.create({
        'sign_item_id': 16,
        'value': order.x_purpose
    }))

# 添加报价单号
item_values.append(Command.create({
        'sign_item_id': 17,
        'value': order.name
    }))

# 添加报价日期
item_values.append(Command.create({
        'sign_item_id': 18,
        'value': order.create_date.strftime("%Y-%m-%d")
    }))

#报价单明细行,第一行 ###########
try:

    item = order.order_line[0]
    # 添加产品描述
    item_values.append(Command.create({
        'sign_item_id': 20,
        'value': item.name
        }))

    # 添加数量
    item_values.append(Command.create({
        'sign_item_id': 21,
        'value': "1"
        }))

    # 添加单价
    item_values.append(Command.create({
        'sign_item_id': 22,
        'value': f'$ {item.price_unit}'
        }))

    # 添加小计
    item_values.append(Command.create({
        'sign_item_id': 23,
        'value': f'$ {item.price_subtotal}'
        }))
except:
    pass

#报价单明细行,第二行 ###########
try:

    item = order.order_line[1]
    # 添加产品描述
    item_values.append(Command.create({
        'sign_item_id': 24,
        'value': item.name
        }))

    # 添加数量
    item_values.append(Command.create({
        'sign_item_id': 25,
        'value': "1"
        }))

    # 添加单价
    item_values.append(Command.create({
        'sign_item_id': 26,
        'value': f'$ {item.price_unit}'
        }))

    # 添加小计
    item_values.append(Command.create({
        'sign_item_id': 27,
        'value': f'$ {item.price_subtotal}'
        }))
except:
    pass

#报价单明细行,第三行 ###########
try:

    item = order.order_line[2]
    # 添加产品描述
    item_values.append(Command.create({
        'sign_item_id': 28,
        'value': item.name
        }))

    # 添加数量
    item_values.append(Command.create({
        'sign_item_id': 29,
        'value': "1"
        }))

    # 添加单价
    item_values.append(Command.create({
        'sign_item_id': 30,
        'value': f'$ {item.price_unit}'
        }))

    # 添加小计
    item_values.append(Command.create({
        'sign_item_id': 31,
        'value': f'$ {item.price_subtotal}'
        }))
except:
    pass


# 添加税前总价
item_values.append(Command.create({
        'sign_item_id': 32,
        'value': order.amount_total
    }))

# 添加税后总价
item_values.append(Command.create({
        'sign_item_id': 33,
        'value': order.amount_total
    }))    

request_item['sign_item_value_ids'] = item_values
request_item['state'] = 'completed'
sign_request['state'] = 'signed'

env["ir.config_parameter"].sudo().set_param("sign.use_custom_font", "Sun-ExtA") # 设置新字体,可生成中文

action = sign_request.get_completed_document()