odoo/addons/product_expiry/models/production_lot.py

51 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
import datetime
from odoo import api, fields, models
class StockProductionLot(models.Model):
_inherit = 'stock.production.lot'
life_date = fields.Datetime(string='End of Life Date',
help='This is the date on which the goods with this Serial Number may become dangerous and must not be consumed.')
use_date = fields.Datetime(string='Best before Date',
help='This is the date on which the goods with this Serial Number start deteriorating, without being dangerous yet.')
removal_date = fields.Datetime(string='Removal Date',
help='This is the date on which the goods with this Serial Number should be removed from the stock.')
alert_date = fields.Datetime(string='Alert Date',
help="This is the date on which an alert should be notified about the goods with this Serial Number.")
def _get_dates(self, product_id=None):
"""Returns dates based on number of days configured in current lot's product."""
mapped_fields = {
'life_date': 'life_time',
'use_date': 'use_time',
'removal_date': 'removal_time',
'alert_date': 'alert_time'
}
res = dict.fromkeys(mapped_fields.keys(), False)
product = self.env['product.product'].browse(product_id) or self.product_id
if product:
for field in mapped_fields.keys():
duration = getattr(product, mapped_fields[field])
if duration:
date = datetime.datetime.now() + datetime.timedelta(days=duration)
res[field] = fields.Datetime.to_string(date)
return res
# Assign dates according to products data
@api.model
def create(self, vals):
dates = self._get_dates(vals.get('product_id'))
for d in dates.keys():
if not vals.get(d):
vals[d] = dates[d]
return super(StockProductionLot, self).create(vals)
@api.onchange('product_id')
def _onchange_product(self):
dates_dict = self._get_dates()
for field, value in dates_dict.items():
setattr(self, field, value)