odoo14删除编号后还能自动补充删除的编号如何实现
时间: 2024-02-16 13:05:06 浏览: 66
要在Odoo 14中实现删除编号后自动补充删除的编号,可以按照以下步骤进行操作:
1. 在Odoo中找到对应的模型,例如销售订单模型。
2. 打开该模型的源代码文件,例如sale/models/sale_order.py。
3. 在该文件中找到对应的类,例如SaleOrder类。
4. 在该类中添加一个新的字段,例如deleted_order_number,用于存储被删除的订单编号。可以按照以下代码进行添加:
```python
class SaleOrder(models.Model):
_inherit = 'sale.order'
deleted_order_number = fields.Char(string='Deleted Order Number', copy=False)
```
5. 在该类中重写unlink方法,该方法会在删除记录时被调用。在该方法中,将要删除的记录的编号存储到deleted_order_number字段中,然后调用父类的unlink方法删除记录。可以按照以下代码进行重写:
```python
def unlink(self):
for order in self:
order.deleted_order_number = order.name
return super(SaleOrder, self).unlink()
```
6. 在该类中重写create方法,该方法会在新建记录时被调用。在该方法中,检查数据库中的最大订单编号,从中获取下一个可用的编号,并将其设置为新建记录的编号。可以按照以下代码进行重写:
```python
@api.model
def create(self, vals):
if 'name' not in vals or vals['name'] == _('New'):
vals['name'] = self.env['ir.sequence'].next_by_code('sale.order') or _('New')
else:
# Check if the order number is deleted
deleted_order_number = self.search([('deleted_order_number', '=', vals['name'])], limit=1)
if deleted_order_number:
vals['name'] = deleted_order_number.name
deleted_order_number.write({'deleted_order_number': False})
return super(SaleOrder, self).create(vals)
```
这样,在删除订单时,订单编号会被存储到deleted_order_number字段中;在新建订单时,系统会自动检查数据库中的最大订单编号,并跳过被删除的订单编号,从下一个订单编号开始递增生成新的订单编号,从而实现删除订单编号后的自动补充。
阅读全文