Skip to content
Extraits de code Groupes Projets
Valider d51d8ddf rédigé par jordan's avatar jordan
Parcourir les fichiers

[add] compute expiration_date for DLC thanks to conf

parent 009bb3be
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -11,6 +11,7 @@ Fumaison Occ - Vente ...@@ -11,6 +11,7 @@ Fumaison Occ - Vente
- Ajout de champs venant de *fumoc_partner* sur *sale_order* - Ajout de champs venant de *fumoc_partner* sur *sale_order*
- Ajout de la note de facturation et de la DLC des lots dans les factures pdf - Ajout de la note de facturation et de la DLC des lots dans les factures pdf
- Ajout de la DLC dans la vue détaillée des opérations sur le bon de livraison - Ajout de la DLC dans la vue détaillée des opérations sur le bon de livraison
- Calcul la DLC des lots en fonction du numéro de lot
Description Description
=========== ===========
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
# views # views
'views/fumoc_lot_prefix_dlc.xml', 'views/fumoc_lot_prefix_dlc.xml',
'views/product_views.xml', 'views/product_views.xml',
'views/res_config_settings.xml',
'views/sale_order.xml', 'views/sale_order.xml',
'views/stock_move_line.xml', 'views/stock_move_line.xml',
'views/stock_picking.xml', 'views/stock_picking.xml',
......
...@@ -4,5 +4,8 @@ ...@@ -4,5 +4,8 @@
from . import account_move from . import account_move
from . import fumoc_lot_prefix_dlc from . import fumoc_lot_prefix_dlc
from . import product from . import product
from . import res_company
from . import res_config_settings
from . import sale_order from . import sale_order
from . import stock_picking from . import stock_picking
from . import stock_production_lot
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models, api
from odoo.exceptions import ValidationError
class FumocCompany(models.Model):
_inherit = 'res.company'
year_reference_lot = fields.Integer(
string='Année de référence lot')
@api.constrains('year_reference_lot')
def _check_year_reference_lot(self):
for r in self:
if not 2050 < r.year_reference_lot < 2000:
raise ValidationError(
"L'année de référence renseignée (%s) ne semble pas "
"cohérente" % r.year_reference_lot)
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class FumocConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
year_reference_lot = fields.Integer(
string='Année de référence lot',
related='company_id.year_reference_lot',
readonly=False)
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import datetime
import re
from odoo import models, api
from odoo.exceptions import UserError
class FumocStockProductionLot(models.Model):
_inherit = 'stock.production.lot'
# ------------------------------------------------------
# Business method
# ------------------------------------------------------
def compute_expiration_date(self):
"""
Check if prefix is known in conf + if suffix is readable
-> compute expiration date and other dates if needed
"""
if not self.env.user.company_id.year_reference_lot:
raise UserError('L\'année de référence pour les lots n\'a pas été '
'configurée !')
prefix = re.findall('([a-zA-Z ]*)\d*.*', self.name)[0]
existing_prefix = self.env['fumoc.lot.prefix.dlc'].search([
('prefix', '=', prefix)
])
suffix = re.findall('([\d]+)\D*', self.name)[-1]
if len(suffix) >= 4:
readable_suffix = suffix[-4:]
else:
readable_suffix = False
if existing_prefix and readable_suffix:
dlc = existing_prefix.dlc
year_ref = self.env.user.company_id.year_reference_lot
year_index = int(readable_suffix[:1])
year = year_ref + year_index
quantieme = int(readable_suffix[1:])
production_date = datetime.datetime(year, 1, 1) + \
datetime.timedelta(days=quantieme-1)
expiration_date = production_date + datetime.timedelta(days=dlc)
time_delta = expiration_date - self.expiration_date
vals = self._get_date_values(time_delta)
vals['expiration_date'] = expiration_date
self.update(vals)
# ------------------------------------------------------
# Onchange
# ------------------------------------------------------
@api.onchange('name')
def _onchange_name(self):
if self.create_date:
self.compute_expiration_date()
# ------------------------------------------------------
# Override parent
# ------------------------------------------------------
@api.model_create_multi
def create(self, vals_list):
"""
Override create to call compute_expiration_date on created lot
"""
res = super(FumocStockProductionLot, self).create(vals_list)
res.compute_expiration_date()
return res
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="fumoc_sale_res_config_settings_view_form" model="ir.ui.view">
<field name="name">fumoc.sale.res.config.settings.view.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="stock.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='stock']" position="inside">
<h2>Numéros de lots</h2>
<div class="row mt16 o_settings_container" name="lot_name">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<label for="year_reference_lot"/>
<div class="text-muted">
Année 0. Exemple : le lot FE561103 correspond à l'année 2021 si l'année référence est 2020.
</div>
<div class="content-group">
<div class="mt16">
<field name="year_reference_lot" class="oe_inline"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter