Faircot cron

This commit is contained in:
2026-07-19 19:30:28 +02:00
parent b2bd777ec8
commit facd627f5e
5 changed files with 41 additions and 3 deletions

View File

@@ -117,6 +117,7 @@
<name ns="">widget</name> <name ns="">widget</name>
<choice> <choice>
<value>binary</value> <value>binary</value>
<value>badge</value>
<value>boolean</value> <value>boolean</value>
<value>callto</value> <value>callto</value>
<value>char</value> <value>char</value>
@@ -145,6 +146,14 @@
</attribute> </attribute>
</optional> </optional>
</define> </define>
<define name="attlist.field" combine="interleave">
<optional>
<attribute>
<name ns="">badge_colors</name>
<text/>
</attribute>
</optional>
</define>
<define name="attlist.field" combine="interleave"> <define name="attlist.field" combine="interleave">
<optional> <optional>
<attribute a:defaultValue="0"> <attribute a:defaultValue="0">

View File

@@ -252,7 +252,10 @@ class AutomationCron(ModelSQL, ModelView):
logger.info( logger.info(
"Shipment %s existe deja sans lots, verification freight_booking_lots", "Shipment %s existe deja sans lots, verification freight_booking_lots",
si_number) si_number)
inv_date, inv_nb = shipment._create_lots_from_fintrade() with Transaction().set_context(
_purchase_trade_skip_physical_lot_tolerance_warning=True):
inv_date, inv_nb = (
shipment._create_lots_from_fintrade())
shipment = ShipmentIn(shipment.id) shipment = ShipmentIn(shipment.id)
if shipment.incoming_moves: if shipment.incoming_moves:
shipment.controller = shipment.get_controller() shipment.controller = shipment.get_controller()
@@ -342,7 +345,9 @@ class AutomationCron(ModelSQL, ModelView):
shipment.etad = shipment.bl_date + timedelta(days=20) shipment.etad = shipment.bl_date + timedelta(days=20)
ShipmentIn.save([shipment]) ShipmentIn.save([shipment])
inv_date, inv_nb = shipment._create_lots_from_fintrade() with Transaction().set_context(
_purchase_trade_skip_physical_lot_tolerance_warning=True):
inv_date, inv_nb = shipment._create_lots_from_fintrade()
shipment.controller = shipment.get_controller() shipment.controller = shipment.get_controller()
shipment.controller_target = controller shipment.controller_target = controller
shipment.create_fee(shipment.controller) shipment.create_fee(shipment.controller)

View File

@@ -1,6 +1,7 @@
<tree> <tree>
<field name="bl_number"/> <field name="bl_number"/>
<field name="status"/> <field name="status" widget="badge"
badge_colors="found:#16a34a,Found:#16a34a,error:#ef4444,Error:#ef4444"/>
<field name="shipment"/> <field name="shipment"/>
<field name="automation_document"/> <field name="automation_document"/>
</tree> </tree>

View File

@@ -1996,6 +1996,9 @@ class LotQt(
@classmethod @classmethod
def _warn_physical_lot_tolerance(cls, lqt, vlots): def _warn_physical_lot_tolerance(cls, lqt, vlots):
if Transaction().context.get(
'_purchase_trade_skip_physical_lot_tolerance_warning'):
return
Warning = Pool().get('res.user.warning') Warning = Pool().get('res.user.warning')
for line in cls._affected_lines_for_lqt(lqt): for line in cls._affected_lines_for_lqt(lqt):
theoretical = cls._line_theoretical_quantity(line) theoretical = cls._line_theoretical_quantity(line)

View File

@@ -9223,6 +9223,26 @@ description</t></is></c>
patch.object(lot_module.LotQt, 'search', return_value=[]): patch.object(lot_module.LotQt, 'search', return_value=[]):
lot_module.LotQt.match_lots([purchase_lot], []) lot_module.LotQt.match_lots([purchase_lot], [])
def test_physical_lot_tolerance_warning_can_be_skipped_by_context(self):
'physical lot tolerance warning can be skipped for automation cron'
line = Mock(
purchase=Mock(number='P-1'),
sale=None,
id=12,
quantity_theorical=Decimal('100'),
tol_max=Decimal('0'),
inherit_tol=False,
unit=None,
lots=[],
)
lqt = Mock(lot_p=Mock(line=line), lot_s=None)
physical_lot = Mock(lot_quantity=Decimal('120'), lot_unit_line=None)
with Transaction().set_context(
_purchase_trade_skip_physical_lot_tolerance_warning=True):
lot_module.LotQt._warn_physical_lot_tolerance(
lqt, [physical_lot])
def test_lot_matching_gauge_uses_entered_quantity_to_match(self): def test_lot_matching_gauge_uses_entered_quantity_to_match(self):
'go to matching gauge projects tolerance from qt to match' 'go to matching gauge projects tolerance from qt to match'
matching_lot = lot_module.LotMatchingLot() matching_lot = lot_module.LotMatchingLot()