odoo14-addon-ddmrp 14.0.1.23.3.dev3__py3-none-any.whl → 14.0.1.24.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,7 +7,7 @@ DDMRP
7
7
  !! This file is generated by oca-gen-addon-readme !!
8
8
  !! changes will be overwritten. !!
9
9
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:6bd04daab86946530d9fea2520a9944d05069cd8d648457582aeb4416b410e16
10
+ !! source digest: sha256:81c9f86d5d94033c4e599e426d7a95628e63ebcb642deff966a8e49a5b951476
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -5,7 +5,7 @@
5
5
  {
6
6
  "name": "DDMRP",
7
7
  "summary": "Demand Driven Material Requirements Planning",
8
- "version": "14.0.1.23.2",
8
+ "version": "14.0.1.24.0",
9
9
  "license": "LGPL-3",
10
10
  "development_status": "Beta",
11
11
  "author": "ForgeFlow, " "Odoo Community Association (OCA)",
@@ -629,6 +629,11 @@ msgstr ""
629
629
  msgid "Get configuration warnings for stock buffers."
630
630
  msgstr ""
631
631
 
632
+ #. module: ddmrp
633
+ #: model_terms:ir.ui.view,arch_db:ddmrp.view_move_tree
634
+ msgid "Go to Source"
635
+ msgstr ""
636
+
632
637
  #. module: ddmrp
633
638
  #: model:ir.model.fields.selection,name:ddmrp.selection__mrp_production__execution_priority_level__3_green
634
639
  #: model:ir.model.fields.selection,name:ddmrp.selection__purchase_order_line__execution_priority_level__3_green
@@ -1071,7 +1076,7 @@ msgstr ""
1071
1076
 
1072
1077
  #. module: ddmrp
1073
1078
  #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree
1074
- msgid "No stock available on source location for distributed buffer"
1079
+ msgid "No stock available in source location for distributed buffer"
1075
1080
  msgstr ""
1076
1081
 
1077
1082
  #. module: ddmrp
@@ -1136,11 +1141,6 @@ msgstr ""
1136
1141
  msgid "On-Hand Alert: Yellow"
1137
1142
  msgstr ""
1138
1143
 
1139
- #. module: ddmrp
1140
- #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree
1141
- msgid "Open Non-completed Moves"
1142
- msgstr ""
1143
-
1144
1144
  #. module: ddmrp
1145
1145
  #: code:addons/ddmrp/hooks.py:0
1146
1146
  #, python-format
@@ -1421,11 +1421,6 @@ msgstr ""
1421
1421
  msgid "RFQ Qty (Outside DLT)"
1422
1422
  msgstr ""
1423
1423
 
1424
- #. module: ddmrp
1425
- #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree
1426
- msgid "RFQ Qty Outside DLT"
1427
- msgstr ""
1428
-
1429
1424
  #. module: ddmrp
1430
1425
  #: model:product.product,name:ddmrp.product_product_rm01
1431
1426
  #: model:product.template,name:ddmrp.product_product_rm01_product_template
@@ -1601,12 +1596,28 @@ msgid ""
1601
1596
  "Shows the current on-hand for stock buffers expressed as coverage days."
1602
1597
  msgstr ""
1603
1598
 
1599
+ #. module: ddmrp
1600
+ #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_tree
1601
+ msgid ""
1602
+ "Some RFQ quantities are outside of the DLT Horizon and may require "
1603
+ "rescheduling. Press this button to display the involved "
1604
+ "RFQs"
1605
+ msgstr ""
1606
+
1604
1607
  #. module: ddmrp
1605
1608
  #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form
1606
1609
  msgid ""
1607
- "Some incoming quantities are outside of the DLT Horizon and may require "
1608
- "rescheduling. Press this button "
1609
- "to display the involved supply orders"
1610
+ "Some incoming RFQs are outside of the DLT Horizon and may require "
1611
+ "rescheduling. Press this button"
1612
+ " to display the involved supply orders"
1613
+ msgstr ""
1614
+
1615
+ #. module: ddmrp
1616
+ #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form
1617
+ msgid ""
1618
+ "Some incoming qty is outside of the DLT Horizon and may require "
1619
+ "rescheduling. Press this button"
1620
+ " to display the involved supply orders"
1610
1621
  msgstr ""
1611
1622
 
1612
1623
  #. module: ddmrp
@@ -1696,6 +1707,12 @@ msgstr ""
1696
1707
  msgid "Stock Move Last Year Consumption"
1697
1708
  msgstr ""
1698
1709
 
1710
+ #. module: ddmrp
1711
+ #: code:addons/ddmrp/models/stock_move.py:0
1712
+ #, python-format
1713
+ msgid "Stock Move Source"
1714
+ msgstr ""
1715
+
1699
1716
  #. module: ddmrp
1700
1717
  #: model_terms:ir.ui.view,arch_db:ddmrp.view_move_consumption_pivot
1701
1718
  msgid "Stock Moves Yearly Consumption"
@@ -1920,7 +1937,7 @@ msgstr ""
1920
1937
 
1921
1938
  #. module: ddmrp
1922
1939
  #: model_terms:ir.ui.view,arch_db:ddmrp.stock_buffer_view_form
1923
- msgid "View Incoming (Within DLT)"
1940
+ msgid "View Incoming Moves (Within DLT)"
1924
1941
  msgstr ""
1925
1942
 
1926
1943
  #. module: ddmrp
@@ -927,6 +927,7 @@ class StockBuffer(models.Model):
927
927
  def _get_manufactured_bom(self, limit=1):
928
928
  return self.env["mrp.bom"].search(
929
929
  [
930
+ ("type", "=", "normal"),
930
931
  "|",
931
932
  ("product_id", "=", self.product_id.id),
932
933
  ("product_tmpl_id", "=", self.product_id.product_tmpl_id.id),
@@ -1361,17 +1362,6 @@ class StockBuffer(models.Model):
1361
1362
  "domain": str([("id", "in", lines.ids)]),
1362
1363
  }
1363
1364
 
1364
- def open_moves(self):
1365
- self.ensure_one()
1366
- # Utility method used to add an "Open Moves" button in the buffer
1367
- # planning view
1368
- domain = self._search_open_stock_moves_domain()
1369
- moves = self.env["stock.move"].search(domain)
1370
- moves = moves.filtered(
1371
- lambda move: move.location_dest_id.is_sublocation_of(self.location_id)
1372
- )
1373
- return self._stock_move_tree_view(moves)
1374
-
1375
1365
  def _get_horizon_adu_past_demand(self):
1376
1366
  return self.adu_calculation_method.horizon_past or 0
1377
1367
 
@@ -1761,6 +1751,7 @@ class StockBuffer(models.Model):
1761
1751
  def _procure_qty_to_order(self):
1762
1752
  qty_to_order = self.procure_recommended_qty
1763
1753
  rounding = self.procure_uom_id.rounding or self.product_uom.rounding
1754
+ qty_in_progress = self._quantity_in_progress()[self._origin.id]
1764
1755
  if (
1765
1756
  self.item_type == "distributed"
1766
1757
  and self.buffer_profile_id.replenish_distributed_limit_to_free_qty
@@ -1781,6 +1772,16 @@ class StockBuffer(models.Model):
1781
1772
  else:
1782
1773
  # move only what we have in stock
1783
1774
  return min(qty_to_order, self.distributed_source_location_qty)
1775
+ elif (
1776
+ float_compare(qty_in_progress, 0, precision_rounding=rounding) > 0
1777
+ and float_compare(
1778
+ qty_to_order, self.green_zone_qty, precision_rounding=rounding
1779
+ )
1780
+ < 0
1781
+ ):
1782
+ # When there is qty in progress (e.g. RfQ sent), do not keep
1783
+ # auto-procuring small quantities, wait for the qty to be at least GZ.
1784
+ return 0
1784
1785
  return qty_to_order
1785
1786
 
1786
1787
  def do_auto_procure(self):
@@ -1809,72 +1810,72 @@ class StockBuffer(models.Model):
1809
1810
  wizard.make_procurement()
1810
1811
  return True
1811
1812
 
1812
- def _search_purchase_order_lines_incoming(self, outside_dlt=False):
1813
+ def action_view_supply_moves(self):
1814
+ result = self.env["ir.actions.actions"]._for_xml_id("stock.stock_move_action")
1815
+ result["context"] = {}
1816
+ moves = self._search_stock_moves_incoming() + self._search_stock_moves_incoming(
1817
+ outside_dlt=True
1818
+ )
1819
+ result["domain"] = [("id", "in", moves.ids)]
1820
+ return result
1821
+
1822
+ def _get_rfq_dlt(self, outside_dlt=False):
1823
+ self.ensure_one()
1813
1824
  cut_date = self._get_incoming_supply_date_limit()
1814
1825
  if not outside_dlt:
1815
1826
  pols = self.purchase_line_ids.filtered(
1816
1827
  lambda l: l.date_planned <= fields.Datetime.to_datetime(cut_date)
1817
- and l.order_id.state in ("draft", "sent")
1828
+ and l.state in ("draft", "sent")
1818
1829
  )
1819
1830
  else:
1820
1831
  pols = self.purchase_line_ids.filtered(
1821
1832
  lambda l: l.date_planned > fields.Datetime.to_datetime(cut_date)
1822
- and l.order_id.state in ("draft", "sent")
1833
+ and l.state in ("draft", "sent")
1823
1834
  )
1824
1835
  return pols
1825
1836
 
1826
- def action_view_supply(self, outside_dlt=False):
1827
- if self.item_type == "purchased":
1828
- pols = self._search_purchase_order_lines_incoming(outside_dlt)
1829
- moves = self._search_stock_moves_incoming(outside_dlt)
1830
- while moves.mapped("move_orig_ids"):
1831
- moves = moves.mapped("move_orig_ids")
1832
- pos = pols.mapped("order_id") + moves.mapped("purchase_line_id.order_id")
1833
- result = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq")
1834
- # Remove the context since the action display RFQ and not PO.
1835
- result["context"] = {}
1836
- result["domain"] = [("id", "in", pos.ids)]
1837
- elif self.item_type == "manufactured":
1838
- moves = self._search_stock_moves_incoming(outside_dlt)
1839
- mos = moves.mapped("production_id")
1840
- result = self.env["ir.actions.actions"]._for_xml_id(
1841
- "mrp.mrp_production_action"
1842
- )
1843
- result["context"] = {}
1844
- result["domain"] = [("id", "in", mos.ids)]
1845
- else:
1846
- moves = self._search_stock_moves_incoming(outside_dlt)
1847
- picks = moves.mapped("picking_id")
1848
- result = self.env["ir.actions.actions"]._for_xml_id(
1849
- "stock.action_picking_tree_all"
1850
- )
1851
- result["context"] = {}
1852
- result["domain"] = [("id", "in", picks.ids)]
1837
+ def action_view_supply_moves_inside_dlt_window(self):
1838
+ result = self.env["ir.actions.actions"]._for_xml_id("stock.stock_move_action")
1839
+ moves = self._search_stock_moves_incoming()
1840
+ result["context"] = {}
1841
+ result["domain"] = [("id", "in", moves.ids)]
1842
+ return result
1843
+
1844
+ def action_view_supply_moves_outside_dlt_window(self):
1845
+ result = self.env["ir.actions.actions"]._for_xml_id("stock.stock_move_action")
1846
+ moves = self._search_stock_moves_incoming(outside_dlt=True)
1847
+ result["context"] = {}
1848
+ result["domain"] = [("id", "in", moves.ids)]
1853
1849
  return result
1854
1850
 
1855
- def action_view_supply_inside_dlt_window(self):
1856
- return self.action_view_supply()
1851
+ def action_view_supply_rfq_inside_dlt_window(self):
1852
+ result = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq")
1853
+ pols = self._get_rfq_dlt()
1854
+ pos = pols.mapped("order_id")
1855
+ result["context"] = {}
1856
+ result["domain"] = [("id", "in", pos.ids)]
1857
+ return result
1857
1858
 
1858
- def action_view_supply_outside_dlt_window(self):
1859
- return self.action_view_supply(outside_dlt=True)
1859
+ def action_view_supply_rfq_outside_dlt_window(self):
1860
+ result = self.env["ir.actions.actions"]._for_xml_id("purchase.purchase_rfq")
1861
+ pols = self._get_rfq_dlt(outside_dlt=True)
1862
+ pos = pols.mapped("order_id")
1863
+ result["context"] = {}
1864
+ result["domain"] = [("id", "in", pos.ids)]
1865
+ return result
1860
1866
 
1861
- def action_view_qualified_demand_pickings(self):
1862
- moves = self.qualified_demand_stock_move_ids
1863
- picks = moves.mapped("picking_id")
1864
- result = self.env["ir.actions.actions"]._for_xml_id(
1865
- "stock.action_picking_tree_all"
1866
- )
1867
+ def action_view_qualified_demand_moves(self):
1868
+ result = self.env["ir.actions.actions"]._for_xml_id("stock.stock_move_action")
1867
1869
  result["context"] = {}
1868
- result["domain"] = [("id", "in", picks.ids)]
1870
+ result["domain"] = [("id", "in", self.qualified_demand_stock_move_ids.ids)]
1869
1871
  return result
1870
1872
 
1871
1873
  def action_view_qualified_demand_mrp(self):
1872
- mrp_moves = self.qualified_demand_mrp_move_ids
1873
1874
  result = self.env["ir.actions.actions"]._for_xml_id(
1874
1875
  "mrp_multi_level.mrp_move_action"
1875
1876
  )
1876
1877
  result["context"] = {}
1877
- result["domain"] = [("id", "in", mrp_moves.ids)]
1878
+ result["domain"] = [("id", "in", self.qualified_demand_mrp_move_ids.ids)]
1878
1879
  return result
1879
1880
 
1880
1881
  def action_view_past_adu_direct_demand(self):
@@ -1,7 +1,7 @@
1
1
  # Copyright 2019-20 ForgeFlow S.L. (http://www.forgeflow.com)
2
2
  # License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
3
3
 
4
- from odoo import api, fields, models
4
+ from odoo import _, api, fields, models
5
5
 
6
6
 
7
7
  class StockMove(models.Model):
@@ -84,3 +84,69 @@ class StockMove(models.Model):
84
84
  buffer.cron_actions(only_nfp="out")
85
85
  for buffer in in_buffers.with_context(no_ddmrp_history=True):
86
86
  buffer.cron_actions(only_nfp="in")
87
+
88
+ def _get_all_linked_moves(self):
89
+ """Retrieve all linked moves both origin and destination recursively."""
90
+
91
+ def get_moves(move_set, attr):
92
+ new_moves = move_set.mapped(attr)
93
+ while new_moves:
94
+ move_set |= new_moves
95
+ new_moves = new_moves.mapped(attr)
96
+ return move_set
97
+
98
+ all_moves = (
99
+ self | get_moves(self, "move_orig_ids") | get_moves(self, "move_dest_ids")
100
+ )
101
+ return all_moves
102
+
103
+ def _get_source_field_candidates(self):
104
+ """Extend for more source field candidates."""
105
+ return [
106
+ "sale_line_id.order_id",
107
+ "purchase_line_id.order_id",
108
+ "production_id",
109
+ "raw_material_production_id",
110
+ "unbuild_id",
111
+ "repair_id",
112
+ "rma_line_id",
113
+ "picking_id",
114
+ ]
115
+
116
+ def _has_nested_field(self, field):
117
+ """Check if an object has a nested chain of fields."""
118
+ current_object = self
119
+ try:
120
+ for field in field.split("."):
121
+ current_object = getattr(current_object, field)
122
+ return True
123
+ except AttributeError:
124
+ return False
125
+
126
+ def _get_source_record(self):
127
+ """Find the first source record in the field candidates linked with the moves,
128
+ prioritizing the order of field candidates."""
129
+ moves = self._get_all_linked_moves()
130
+ field_candidates = self._get_source_field_candidates()
131
+ # Iterate over the prioritized list of candidate fields
132
+ for field in field_candidates:
133
+ if self._has_nested_field(field):
134
+ for move in moves:
135
+ record = move.mapped(field)
136
+ if record:
137
+ return record
138
+ return False
139
+
140
+ def action_open_stock_move_source(self):
141
+ """Open the source record of the stock move, if it exists."""
142
+ self.ensure_one()
143
+ record = self._get_source_record()
144
+ if record:
145
+ return {
146
+ "name": getattr(record, "name", _("Stock Move Source")),
147
+ "view_mode": "form",
148
+ "res_model": record._name,
149
+ "type": "ir.actions.act_window",
150
+ "res_id": record.id,
151
+ }
152
+ return False
@@ -366,7 +366,7 @@ ul.auto-toc {
366
366
  !! This file is generated by oca-gen-addon-readme !!
367
367
  !! changes will be overwritten. !!
368
368
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
369
- !! source digest: sha256:6bd04daab86946530d9fea2520a9944d05069cd8d648457582aeb4416b410e16
369
+ !! source digest: sha256:81c9f86d5d94033c4e599e426d7a95628e63ebcb642deff966a8e49a5b951476
370
370
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
371
371
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/ddmrp/tree/14.0/ddmrp"><img alt="OCA/ddmrp" src="https://img.shields.io/badge/github-OCA%2Fddmrp-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/ddmrp-14-0/ddmrp-14-0-ddmrp"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/ddmrp&amp;target_branch=14.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
372
372
  <p>Demand Driven Material Requirements Planning is a formal multi-echelon
@@ -38,24 +38,19 @@
38
38
  type="object"
39
39
  />
40
40
  <field name="incoming_dlt_qty" string="Incoming Within DLT" />
41
- <field
42
- name="incoming_total_qty"
43
- string="Total Incoming"
44
- optional="show"
45
- />
46
41
  <field
47
42
  name="incoming_outside_dlt_qty"
48
43
  string="Incoming Outside DLT"
49
44
  optional="hide"
50
45
  />
51
46
  <field
52
- name="rfq_outside_dlt_qty"
53
- string="RFQ Qty Outside DLT"
54
- optional="hide"
47
+ name="incoming_total_qty"
48
+ string="Total Incoming"
49
+ optional="show"
55
50
  />
56
51
  <button
57
- title="Open Non-completed Moves"
58
- name="open_moves"
52
+ title="Total Incoming"
53
+ name="action_view_supply_moves"
59
54
  icon="fa-exchange"
60
55
  type="object"
61
56
  />
@@ -71,13 +66,22 @@
71
66
  />
72
67
  <button
73
68
  title="Some incoming quantities are outside of the DLT Horizon and may require rescheduling. Press this button to display the involved supply orders"
74
- name="action_view_supply_outside_dlt_window"
69
+ name="action_view_supply_moves_outside_dlt_window"
75
70
  icon="fa-warning"
76
71
  type="object"
77
- attrs="{'invisible':[('incoming_outside_dlt_qty', '=', 0), ('rfq_outside_dlt_qty', '=', 0)]}"
72
+ attrs="{'invisible':[('incoming_outside_dlt_qty', '=', 0)]}"
78
73
  />
74
+ <field name="rfq_outside_dlt_qty" invisible="1" />
79
75
  <button
80
- title="No stock available on source location for distributed buffer"
76
+ title="Some RFQ quantities are outside of the DLT Horizon and may require rescheduling.
77
+ Press this button to display the involved RFQs"
78
+ name="action_view_supply_rfq_outside_dlt_window"
79
+ icon="fa-warning"
80
+ type="object"
81
+ attrs="{'invisible':[('rfq_outside_dlt_qty', '=', 0)]}"
82
+ />
83
+ <button
84
+ title="No stock available in source location for distributed buffer"
81
85
  name="action_dummy"
82
86
  icon="fa-warning"
83
87
  type="object"
@@ -397,8 +401,8 @@
397
401
  <div name="incoming_dlt_qty" class="o_row">
398
402
  <field name="incoming_dlt_qty" />
399
403
  <button
400
- title="View Incoming (Within DLT)"
401
- name="action_view_supply_inside_dlt_window"
404
+ title="View Incoming Moves (Within DLT)"
405
+ name="action_view_supply_moves_inside_dlt_window"
402
406
  icon="fa-search"
403
407
  type="object"
404
408
  attrs="{'invisible': [('incoming_dlt_qty', '=', 0)]}"
@@ -409,11 +413,24 @@
409
413
  attrs="{'invisible':[('incoming_outside_dlt_qty', '=', 0), ('rfq_outside_dlt_qty', '=', 0)]}"
410
414
  >
411
415
  <button
412
- title="Some incoming quantities are outside of the DLT Horizon and may require rescheduling.
413
- Press this button to display the involved supply orders"
414
- name="action_view_supply_outside_dlt_window"
416
+ title="Some incoming qty is outside of the DLT Horizon and may require rescheduling.
417
+ Press this button to display the involved supply orders"
418
+ name="action_view_supply_moves_outside_dlt_window"
419
+ icon="fa-warning"
420
+ type="object"
421
+ attrs="{'invisible':[('incoming_outside_dlt_qty', '=', 0)]}"
422
+ />
423
+ <field
424
+ name="rfq_outside_dlt_qty"
425
+ invisible="1"
426
+ />
427
+ <button
428
+ title="Some incoming RFQs are outside of the DLT Horizon and may require rescheduling.
429
+ Press this button to display the involved supply orders"
430
+ name="action_view_supply_rfq_outside_dlt_window"
415
431
  icon="fa-warning"
416
432
  type="object"
433
+ attrs="{'invisible':[('rfq_outside_dlt_qty', '=', 0)]}"
417
434
  />
418
435
  (Outside DLT:
419
436
  <field
@@ -436,7 +453,7 @@
436
453
  />
437
454
  <button
438
455
  title="View Qualified Demand from Pickings"
439
- name="action_view_qualified_demand_pickings"
456
+ name="action_view_qualified_demand_moves"
440
457
  icon="fa-search"
441
458
  type="object"
442
459
  attrs="{'invisible': ['|', ('qualified_demand', '=', 0), ('qualified_demand_stock_move_ids', '=', [])]}"
@@ -2,15 +2,18 @@
2
2
  <!-- Copyright 2018-20 ForgeFlow S.L. (http://www.forgeflow.com)
3
3
  License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl-3.0) -->
4
4
  <odoo>
5
- <!--Fixes to show date on stock move report-->
6
- <!--If someday Odoo corrects this, we could remove this views-->
7
5
  <record id="view_move_tree" model="ir.ui.view">
8
6
  <field name="name">stock.move.tree</field>
9
7
  <field name="model">stock.move</field>
10
8
  <field name="inherit_id" ref="stock.view_move_tree" />
11
9
  <field name="arch" type="xml">
12
- <field name="date" position="after">
13
- <field name="date" />
10
+ <field name="state" position="after">
11
+ <button
12
+ title="Go to Source"
13
+ name="action_open_stock_move_source"
14
+ icon="fa-arrow-right"
15
+ type="object"
16
+ />
14
17
  </field>
15
18
  </field>
16
19
  </record>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo14-addon-ddmrp
3
- Version: 14.0.1.23.3.dev3
3
+ Version: 14.0.1.24.0
4
4
  Summary: Demand Driven Material Requirements Planning
5
5
  Home-page: https://github.com/OCA/ddmrp
6
6
  Author: ForgeFlow, Odoo Community Association (OCA)
@@ -30,7 +30,7 @@ DDMRP
30
30
  !! This file is generated by oca-gen-addon-readme !!
31
31
  !! changes will be overwritten. !!
32
32
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
33
- !! source digest: sha256:6bd04daab86946530d9fea2520a9944d05069cd8d648457582aeb4416b410e16
33
+ !! source digest: sha256:81c9f86d5d94033c4e599e426d7a95628e63ebcb642deff966a8e49a5b951476
34
34
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
35
35
 
36
36
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,6 +1,6 @@
1
- odoo/addons/ddmrp/README.rst,sha256=ytJNiAuifcUrRpyqm_6tZTQe07baq6BMSFtjHYVmyko,12239
1
+ odoo/addons/ddmrp/README.rst,sha256=GCqN7b4B9CaTh6gw0j9Yn4SmfsdNd41CvqcupY5ce8M,12239
2
2
  odoo/addons/ddmrp/__init__.py,sha256=nksc4q8fpyy8n5h1T3-Wl9lh_CpdgZj9bBt5fQGvW5Y,98
3
- odoo/addons/ddmrp/__manifest__.py,sha256=mPeSqax0IV03yzY-tznyYnpmTjtuDXSDhBcA3LiewJk,2537
3
+ odoo/addons/ddmrp/__manifest__.py,sha256=-tBy7-mJFYQKRZHvmj6Fzn9A36YPsBMDw1mgLFLp7Ts,2537
4
4
  odoo/addons/ddmrp/hooks.py,sha256=81CupDt-4OpjEz7EXiAyqkUHzZ_cYLI5WiyEO6Y4DdQ,3269
5
5
  odoo/addons/ddmrp/data/decimal_precision_data.xml,sha256=mzYy_aam6bZLGPFl7HPhRv5XGTDCbHAKVZeAl0UYms4,528
6
6
  odoo/addons/ddmrp/data/ir_cron.xml,sha256=sW-Y2O0ZfpxQ6IcOOMGzgPX2k-vnSJbKxdcRD_6ybhY,1510
@@ -16,7 +16,7 @@ odoo/addons/ddmrp/demo/product_product_demo.xml,sha256=-jp5RGrexRsHIITmPhUGKClat
16
16
  odoo/addons/ddmrp/demo/product_supplierinfo_demo.xml,sha256=cfbqUhoZbhvEqNUwX4jIu3fckMa9yvDUPh6Sfg1jUM0,768
17
17
  odoo/addons/ddmrp/demo/res_partner_demo.xml,sha256=9MG3stWjWBzbLm_94f7IIZ-1K6a19vwmq3XwAA1Nrrs,766
18
18
  odoo/addons/ddmrp/demo/stock_buffer_demo.xml,sha256=R5fo0T_M05zLKCKm2KREjx2QlFo-7zCOKIU46QvwluY,1366
19
- odoo/addons/ddmrp/i18n/ddmrp.pot,sha256=sZVAy-OEKpbOe97Bz5zn9TbvlIsNSdp2k3tnmGMEwiA,70700
19
+ odoo/addons/ddmrp/i18n/ddmrp.pot,sha256=lJwFDt0BGl1ZIc9JQfQI0kXWyDNdfVVqMRe-6RxA7jI,71220
20
20
  odoo/addons/ddmrp/i18n/es.po,sha256=meizuFjF2h4jRKKPOuxAkLY2U82qvouqHmzEZL_KVjY,87057
21
21
  odoo/addons/ddmrp/i18n/es_AR.po,sha256=p6ZDjy2tdg9_XLxG4EQhu19Lostr5PBYGYKj-_GKScQ,85815
22
22
  odoo/addons/ddmrp/i18n/fr.po,sha256=wFTkGx3rVWuycqkh7INaIHT9SMFAp0-qYjMCGg9kzDw,72057
@@ -35,11 +35,11 @@ odoo/addons/ddmrp/models/product_product.py,sha256=oMzmvqX6waFk3TXTrK6AeOzlBpHEJ
35
35
  odoo/addons/ddmrp/models/product_template.py,sha256=sUUZ8kO3V5Cd7phAopCtd_wuMS_7JUR1giVamnPrI54,975
36
36
  odoo/addons/ddmrp/models/purchase_order.py,sha256=9kLCSlskdC-1uDBgAdM4zna-Lw18EB3mIlvci5fo54E,3732
37
37
  odoo/addons/ddmrp/models/res_company.py,sha256=7yGp6UwS0mtoTRY4a4khfufqadLs80pJDEVUnw8icOY,657
38
- odoo/addons/ddmrp/models/stock_buffer.py,sha256=AwzX8cXQG47SQny9W-2bBzFyXBAdO_6KQ08YbN9A2r8,78756
38
+ odoo/addons/ddmrp/models/stock_buffer.py,sha256=1p98SshO7TxvK0X-NLz_MwNzB29UBdwibDOTlGjb6Bo,78726
39
39
  odoo/addons/ddmrp/models/stock_buffer_profile.py,sha256=a4jPw9tmIPJxbIm89QKHLlpxY0coJmWu7sY88QfY_Lg,2855
40
40
  odoo/addons/ddmrp/models/stock_buffer_profile_lead_time.py,sha256=8ZQMuxU0a-mob6MIzDSnkTvC3-4KGn4NLtQ2D3Cuwi8,592
41
41
  odoo/addons/ddmrp/models/stock_buffer_profile_variability.py,sha256=vMz4mSk2h2GVqhFidlZgpC3BXGMlyu9zjHm0aO5B7is,601
42
- odoo/addons/ddmrp/models/stock_move.py,sha256=tVOykcNZ5ApOMjsvseCP-FQwdWzXlGc-00WdFdeP624,3596
42
+ odoo/addons/ddmrp/models/stock_move.py,sha256=Xofbwa8qSmxTh9vGQ4gRWA_GueNLWylYamKgbrXZz6c,5915
43
43
  odoo/addons/ddmrp/models/stock_move_line.py,sha256=dJleguJeIUkfzl4dqeFQvLYo60gO4mjYVBukrkJhYFY,339
44
44
  odoo/addons/ddmrp/models/stock_picking.py,sha256=nZg-VTJvlWPYi0U_9JyTaVLww-fCGyy_ONgaf5MpV48,710
45
45
  odoo/addons/ddmrp/models/stock_rule.py,sha256=GHeUZFKfO0IS26epDMLYhJ-bjRjhs-j9uf4DioLoCcQ,2811
@@ -60,7 +60,7 @@ odoo/addons/ddmrp/security/ddmrp_groups.xml,sha256=dW2V1aZD5w9ssvtfaxy73jRf53sNh
60
60
  odoo/addons/ddmrp/security/ddmrp_rules.xml,sha256=W1hYvw6WtAKMLytNHzpQgX0aCx9PTM3fWsmcxrqXL88,2079
61
61
  odoo/addons/ddmrp/security/ir.model.access.csv,sha256=r_v87wOkAnIUwxgJpyZB1nqxCMGIg-jivK4znBVZSKA,2623
62
62
  odoo/addons/ddmrp/static/description/icon.png,sha256=QThDd6zhQU48MY3Y7Ij5m6yWQACbl0BCyoaHLL9-hAQ,7006
63
- odoo/addons/ddmrp/static/description/index.html,sha256=Lk9jNRM_srUbqZMf_w80eXFZGzE3rvV1C1tHeszNP7w,26542
63
+ odoo/addons/ddmrp/static/description/index.html,sha256=egSzf2N9XOc2JdmCMvKrfngdsqttF3h__OBUT5rRfjc,26542
64
64
  odoo/addons/ddmrp/static/img/has_mto_rule.png,sha256=IVYC3_qpiYrSTPfruURd7kQkwpaOnBlQ1Id3WAJisRo,4604
65
65
  odoo/addons/ddmrp/static/img/is_buffered.png,sha256=uGFYPIo5YIE9TO96uu8-LfHAlAtKN97H9j1Ik74hcHQ,5000
66
66
  odoo/addons/ddmrp/static/img/res_partner_eficent-image.jpg,sha256=ja8mU9YHbRwEDOHbXE5ROiKhABWqq4YFQ7cZwHWAqPA,24419
@@ -83,8 +83,8 @@ odoo/addons/ddmrp/views/purchase_order_view.xml,sha256=mw0NRSKz_VilND3OG_sJHP_x1
83
83
  odoo/addons/ddmrp/views/stock_buffer_profile_lead_time_view.xml,sha256=uX0oEwJv3EUYYynV0WuWBuZMfpYGx9j-HuYXxzVaaFA,2919
84
84
  odoo/addons/ddmrp/views/stock_buffer_profile_variability_view.xml,sha256=BLMlWsQD2TwxkZ4U-LQLSGKwJzBUD9WtxLeOX2ajBF4,2987
85
85
  odoo/addons/ddmrp/views/stock_buffer_profile_view.xml,sha256=m14bFUZs6KVNtHX0YqaRsUIh5PNZr-Sp0iQs52BaJ3I,4129
86
- odoo/addons/ddmrp/views/stock_buffer_view.xml,sha256=bRyop_hyT-WdwBdHwtiTtSG_0f4G6M4g5OarxOMNPNs,35520
87
- odoo/addons/ddmrp/views/stock_move_views.xml,sha256=ZC0c_ACXQ7lzlFbBxiT0vgqSBTYnVDvG6NHprAUI2b8,2253
86
+ odoo/addons/ddmrp/views/stock_buffer_view.xml,sha256=Ecx6IodOkGvaKggcJXDq8CrrgaJ7eIIM21XTQtx-p80,36795
87
+ odoo/addons/ddmrp/views/stock_move_views.xml,sha256=p_BHBEX1msl2TBosW_VV6ynHYHjC_q0_608NL1RCKXk,2313
88
88
  odoo/addons/ddmrp/views/stock_picking.xml,sha256=CD82zoeS6Nnbxw_c53fE-L-0YgTSITW-78Y3c63JzuE,684
89
89
  odoo/addons/ddmrp/views/stock_warehouse_views.xml,sha256=wPLTji7AncZWhsWxbQSPJa7_pAhdybYblMxaeJIVQ5c,612
90
90
  odoo/addons/ddmrp/wizards/__init__.py,sha256=dYdY2HkhVuqQEUEx6wtSCOK9318VCiSFpG1JVddME0U,201
@@ -99,7 +99,7 @@ odoo/addons/ddmrp/wizards/mrp_bom_change_location.xml,sha256=a6YZ67nrCkO3MrKy9wN
99
99
  odoo/addons/ddmrp/wizards/multi_level_mrp.py,sha256=7PjXJ4Gx8_DqK81eFSeeGTyN1YETSxWFEs6xddwbS2c,753
100
100
  odoo/addons/ddmrp/wizards/res_config_settings.py,sha256=WquTRzrSDWAUyd4Fk6qRBBkXRKVZiTcWumQNCzmyGGQ,1530
101
101
  odoo/addons/ddmrp/wizards/res_config_settings_views.xml,sha256=X8yZQpuF2xDeSSJWn9dtKt7WbSGc-vWZQjIr7J0y-yk,10278
102
- odoo14_addon_ddmrp-14.0.1.23.3.dev3.dist-info/METADATA,sha256=C0QCLC6NARq5EpESPBXM9NlSq4d5tNebW95WItNkVHk,13122
103
- odoo14_addon_ddmrp-14.0.1.23.3.dev3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
104
- odoo14_addon_ddmrp-14.0.1.23.3.dev3.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
105
- odoo14_addon_ddmrp-14.0.1.23.3.dev3.dist-info/RECORD,,
102
+ odoo14_addon_ddmrp-14.0.1.24.0.dist-info/METADATA,sha256=F3k7_reeZgP3eiayISH-E8AFGQ_2csac_Lj0HvXPhZw,13117
103
+ odoo14_addon_ddmrp-14.0.1.24.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
104
+ odoo14_addon_ddmrp-14.0.1.24.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
105
+ odoo14_addon_ddmrp-14.0.1.24.0.dist-info/RECORD,,