From f5d6404ccb756a5c6d55ea4b5427999bda72a3c8 Mon Sep 17 00:00:00 2001
From: asas1asas200 <asas1asas200@gmail.com>
Date: Thu, 16 Nov 2023 23:21:24 +0800
Subject: [PATCH 1/4] fix(mrp_bom): ensure self.ids is not empty

---
 extra-addons/kci-mrp/models/mrp_bom.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/extra-addons/kci-mrp/models/mrp_bom.py b/extra-addons/kci-mrp/models/mrp_bom.py
index fc3ca6b5a6a..b62284d8075 100644
--- a/extra-addons/kci-mrp/models/mrp_bom.py
+++ b/extra-addons/kci-mrp/models/mrp_bom.py
@@ -50,7 +50,8 @@ class Bom(models.Model):
         print('----------------------')
         print(self.user_id.partner_id.email)
         mail_template = self.env.ref('kci-mrp.bom_email_template')
-        # mail_template.send_mail(self.ids[0], force_send=True, email_values=email_values)
+        #if len(self.ids):
+        #    mail_template.send_mail(self.ids[0], force_send=True, email_values=email_values)
 
     def write(self, vals):
         if self.status == 'internal':
-- 
GitLab


From 72712e2724988f2f07d121ecaa75fa6c2cef9d68 Mon Sep 17 00:00:00 2001
From: asas1asas200 <asas1asas200@gmail.com>
Date: Fri, 17 Nov 2023 10:31:24 +0800
Subject: [PATCH 2/4] feat(mrp): create requisition model prototype

---
 extra-addons/kci-mrp/__manifest__.py          |  3 ++-
 extra-addons/kci-mrp/models/__init__.py       |  1 +
 .../kci-mrp/models/mrp_requisition.py         | 11 +++++++++
 .../kci-mrp/security/ir.model.access.csv      |  3 ++-
 .../kci-mrp/views/mrp_requisition_views.xml   | 13 +++++++++++
 extra-addons/kci-mrp/views/mrp_views_menu.xml | 23 +++++++++++++++++++
 6 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 extra-addons/kci-mrp/models/mrp_requisition.py
 create mode 100644 extra-addons/kci-mrp/views/mrp_requisition_views.xml

diff --git a/extra-addons/kci-mrp/__manifest__.py b/extra-addons/kci-mrp/__manifest__.py
index cb03dcbc474..ba278fc2bb2 100644
--- a/extra-addons/kci-mrp/__manifest__.py
+++ b/extra-addons/kci-mrp/__manifest__.py
@@ -19,6 +19,7 @@ This module contains all the common features of Drawings.
         'views/mrp_bom_views.xml',
         'views/mrp_views_menu.xml',
         'views/mrp_groups.xml',
+        'views/mrp_requisition_views.xml',
         'report/bom_for_sales.xml',
         'data/bom_email.xml',
     ],
@@ -26,4 +27,4 @@ This module contains all the common features of Drawings.
     'installable': True,
     'auto_install': False,
     'license': 'LGPL-3',
-}
\ No newline at end of file
+}
diff --git a/extra-addons/kci-mrp/models/__init__.py b/extra-addons/kci-mrp/models/__init__.py
index 34293b0b4b9..fe3783d25fd 100644
--- a/extra-addons/kci-mrp/models/__init__.py
+++ b/extra-addons/kci-mrp/models/__init__.py
@@ -4,3 +4,4 @@
 from . import mrp_drawing
 from . import product
 from . import mrp_bom
+from . import mrp_requisition
diff --git a/extra-addons/kci-mrp/models/mrp_requisition.py b/extra-addons/kci-mrp/models/mrp_requisition.py
new file mode 100644
index 00000000000..38fcd472e8b
--- /dev/null
+++ b/extra-addons/kci-mrp/models/mrp_requisition.py
@@ -0,0 +1,11 @@
+from odoo import models, fields, api
+
+
+class MrpRequisition(models.Model):
+    _inherit = 'mrp.bom'
+    _name = 'mrp.requisition'
+
+
+class MrpRequisitionLine(models.Model):
+    _inherit = 'mrp.bom.line'
+    _name = 'mrp.requisition.line'
diff --git a/extra-addons/kci-mrp/security/ir.model.access.csv b/extra-addons/kci-mrp/security/ir.model.access.csv
index c9791fcc4a0..d66d6ba12a6 100644
--- a/extra-addons/kci-mrp/security/ir.model.access.csv
+++ b/extra-addons/kci-mrp/security/ir.model.access.csv
@@ -4,4 +4,5 @@ access_mrp_drawing_manager,MRP Drawing Manager Access,model_mrp_drawing,mrp_draw
 access_mrp_drawing_line_user,MRP Drawing Line User Access,model_mrp_drawing_line,mrp_drawing_group_user,1,0,0,0
 access_mrp_drawing_line_manager,MRP Drawing Line Manager Access,model_mrp_drawing_line,mrp_drawing_group_manager,1,1,1,1
 access_mrp_drawing_material_user,MRP Drawing Material User Access,model_mrp_drawing_material,mrp_drawing_group_user,1,0,0,0
-access_mrp_drawing_material_manager,MRP Drawing Material Manager Access,model_mrp_drawing_material,mrp_drawing_group_manager,1,1,1,1
\ No newline at end of file
+access_mrp_drawing_material_manager,MRP Drawing Material Manager Access,model_mrp_drawing_material,mrp_drawing_group_manager,1,1,1,1
+access_mrp_requisition_user, MRp Requisition User Access,model_mrp_requisition,base.group_user,1,0,0,0
\ No newline at end of file
diff --git a/extra-addons/kci-mrp/views/mrp_requisition_views.xml b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
new file mode 100644
index 00000000000..f970f92ddc4
--- /dev/null
+++ b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
@@ -0,0 +1,13 @@
+<odoo>
+    <data>
+        <record id="mrp_requisition_view_form" model="ir.ui.view">
+            <field name="name">mrp.requisition.view.form</field>
+            <field name="model">mrp.requisition</field>
+            <field name="arch" type="xml">
+                <form>
+                    <field name="code"/>
+                </form>
+            </field>
+        </record>
+    </data>
+</odoo>
\ No newline at end of file
diff --git a/extra-addons/kci-mrp/views/mrp_views_menu.xml b/extra-addons/kci-mrp/views/mrp_views_menu.xml
index 9944bac2973..a511a08f63a 100644
--- a/extra-addons/kci-mrp/views/mrp_views_menu.xml
+++ b/extra-addons/kci-mrp/views/mrp_views_menu.xml
@@ -69,6 +69,29 @@
               parent="mrp.menu_mrp_bom"
               sequence="2"/>
 
+    <record id="requisition_form_action" model="ir.actions.act_window">
+        <field name="name">隢贝頃�鱓</field>
+        <field name="res_model">mrp.requisition</field>
+        <field name="view_mode">list,tree,form</field>
+        <field name="view_id" ref="mrp_requisition_view_form"/>
+        <field name="help" type="html">
+          <p class="o_view_nocontent_smiling_face">
+            No product found. Let's create one!
+          </p><p>
+            Define the components and finished products you wish to use in
+            bill of materials and manufacturing orders.
+          </p>
+        </field>
+    </record>
+
+    <menuitem action="requisition_form_action"
+              id="root_menu_mrp_requisition_form_action"
+              name="隢贝頃�鱓"
+              parent="mrp.menu_mrp_bom"
+              sequence="3"
+
+    />
+
 
 <!--    <menuitem id="root_menu_mrp_bom_form_action"-->
 <!--              action="mrp.mrp_bom_form_action"-->
-- 
GitLab


From 10efc3ca0c495268a782792697b8f6ff43bfd90f Mon Sep 17 00:00:00 2001
From: asas1asas200 <asas1asas200@gmail.com>
Date: Mon, 20 Nov 2023 15:09:55 +0800
Subject: [PATCH 3/4] feat(mrp-requisition): add basic view and func

---
 .../kci-mrp/models/mrp_requisition.py         | 52 ++++++++++++++++++-
 .../kci-mrp/security/ir.model.access.csv      |  3 +-
 .../kci-mrp/views/mrp_requisition_views.xml   | 46 ++++++++++++++--
 extra-addons/kci-mrp/views/mrp_views_menu.xml |  5 +-
 4 files changed, 98 insertions(+), 8 deletions(-)

diff --git a/extra-addons/kci-mrp/models/mrp_requisition.py b/extra-addons/kci-mrp/models/mrp_requisition.py
index 38fcd472e8b..2f0864fa0c0 100644
--- a/extra-addons/kci-mrp/models/mrp_requisition.py
+++ b/extra-addons/kci-mrp/models/mrp_requisition.py
@@ -2,10 +2,58 @@ from odoo import models, fields, api
 
 
 class MrpRequisition(models.Model):
-    _inherit = 'mrp.bom'
     _name = 'mrp.requisition'
+    _description = "Mrp requisition model"
+    _inherit = ['mail.thread']
+
+    name = fields.Char(string="璅䠷��", required=True)
+    state = fields.Selection([
+        ('draft', '��厩阮'),
+        ('pending', '撌脤�𡁶䰻�繧鞈�'),
+        ('done', '撌脣遣蝡𧢲繧鞈澆鱓'),
+        ('cancel', '��𡝗��'),
+    ], string='����', readonly=True, copy=False, index=True, tracking=True, default='draft')
+    create_date = fields.Date(
+        string="撱箇�𧢲𠯫���", default=fields.Datetime.now, tracking=True)
+    engineer = fields.Many2one(
+        'res.users', string='撌亦�见葦', store=True, default=lambda self: self.env.user, required=True)
+    requisition_line_ids = fields.One2many(
+        'mrp.requisition.line', 'requisition_id', 'Requisition Lines')
+    amount_total = fields.Float(
+        string='蝮質��', compute='_compute_amount_total', store=True)
+    ref_purchase_id = fields.Many2one(
+        'purchase.order', string='�繧鞈澆鱓', store=True)
+
+    @api.depends('requisition_line_ids.price_subtotal', 'requisition_line_ids')
+    def _compute_amount_total(self):
+        for requisition in self:
+            requisition.amount_total = sum(
+                line.price_subtotal for line in requisition.requisition_line_ids)
+
+    def notify_purchase(self):
+        pass
+
+    def confirm(self):
+        pass
+
+    def cancel(self):
+        pass
 
 
 class MrpRequisitionLine(models.Model):
-    _inherit = 'mrp.bom.line'
     _name = 'mrp.requisition.line'
+
+    requisition_id = fields.Many2one(
+        'mrp.requisition', index=True, ondelete='cascade',
+        required=True)
+    product_tmpl_id = fields.Many2one(
+        'product.template', string='����', store=True)
+    price_unit = fields.Float(string='�鱓��', store=True)
+    product_qty = fields.Float(string='�彍���', required=True)
+    price_subtotal = fields.Float(
+        string='�寥椙撠讛��', compute='_compute_price_subtotal', store=True)
+
+    @api.depends('product_qty', 'price_unit')
+    def _compute_price_subtotal(self):
+        for line in self:
+            line.price_subtotal = line.product_qty * line.price_unit
diff --git a/extra-addons/kci-mrp/security/ir.model.access.csv b/extra-addons/kci-mrp/security/ir.model.access.csv
index d66d6ba12a6..cfa7d4abba3 100644
--- a/extra-addons/kci-mrp/security/ir.model.access.csv
+++ b/extra-addons/kci-mrp/security/ir.model.access.csv
@@ -5,4 +5,5 @@ access_mrp_drawing_line_user,MRP Drawing Line User Access,model_mrp_drawing_line
 access_mrp_drawing_line_manager,MRP Drawing Line Manager Access,model_mrp_drawing_line,mrp_drawing_group_manager,1,1,1,1
 access_mrp_drawing_material_user,MRP Drawing Material User Access,model_mrp_drawing_material,mrp_drawing_group_user,1,0,0,0
 access_mrp_drawing_material_manager,MRP Drawing Material Manager Access,model_mrp_drawing_material,mrp_drawing_group_manager,1,1,1,1
-access_mrp_requisition_user, MRp Requisition User Access,model_mrp_requisition,base.group_user,1,0,0,0
\ No newline at end of file
+access_mrp_requisition_user, MRp Requisition User Access,model_mrp_requisition,base.group_user,1,1,1,1
+access_mrp_requisition_line_user, MRP Requisition Line User Access,model_mrp_requisition_line,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/extra-addons/kci-mrp/views/mrp_requisition_views.xml b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
index f970f92ddc4..6f1b2778851 100644
--- a/extra-addons/kci-mrp/views/mrp_requisition_views.xml
+++ b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
@@ -1,13 +1,53 @@
 <odoo>
     <data>
-        <record id="mrp_requisition_view_form" model="ir.ui.view">
-            <field name="name">mrp.requisition.view.form</field>
+        <record id="mrp_requisition_form_view" model="ir.ui.view">
+            <field name="name">mrp.requisition.form.view</field>
             <field name="model">mrp.requisition</field>
+            <field name="priority">100</field>
             <field name="arch" type="xml">
                 <form>
-                    <field name="code"/>
+                    <header>
+                        <button name="notify_purchase" class="oe_highlight" type="object" string="�𡁶䰻�繧鞈�" attrs="{'invisible': [('state', '!=', 'draft')]}"/>
+                        <button name="confirm" class="oe_highlight" type="object" string="撱箇�𧢲繧鞈潸��鱓" attrs="{'invisible': [('state', '!=', 'pending')]}"/>
+                        <button name="cancel" class="btn btn-secondary" type="object" string="��𡝗��" help="��𡝗��迨隢贝頃�鱓" attrs="{'invisible': [('state', '=', 'cancel')]}"/>
+
+                        <field name="state" widget="statusbar" statusbar_visible="draft,pending,done"/>
+                    </header>
+                    <sheet>
+                        <group>
+                            <group>
+                                <field name="name"/>
+                                <field name="engineer"/>
+                            </group>
+                            <group>
+                                <field name="create_date" readonly="1"/>
+                                <field name="amount_total"/>
+                                <field name="ref_purchase_id" readonly="1"/>
+                            </group>
+                        </group>
+                        <field name="requisition_line_ids" widget="one2many" context="{'default_requisition_id': id}">
+                            <tree string="Components" editable="bottom">
+                                <field name="product_tmpl_id"/>
+                                <field name="product_qty"/>
+                                <field name="price_unit"/>
+                                <field name="price_subtotal"/>
+                            </tree>
+                        </field>
+                    </sheet>
                 </form>
             </field>
         </record>
+
+        <record id="mrp_requisition_tree_view" model="ir.ui.view">
+            <field name="name">mrp.requisition.tree.view</field>
+            <field name="model">mrp.requisition</field>
+            <field name="priority">100</field>
+            <field name="arch" type="xml">
+                <tree>
+                    <field name="name"/>
+                    <field name="engineer"/>
+                </tree>
+            </field>
+        </record>
     </data>
 </odoo>
\ No newline at end of file
diff --git a/extra-addons/kci-mrp/views/mrp_views_menu.xml b/extra-addons/kci-mrp/views/mrp_views_menu.xml
index a511a08f63a..2a70561cae1 100644
--- a/extra-addons/kci-mrp/views/mrp_views_menu.xml
+++ b/extra-addons/kci-mrp/views/mrp_views_menu.xml
@@ -72,8 +72,9 @@
     <record id="requisition_form_action" model="ir.actions.act_window">
         <field name="name">隢贝頃�鱓</field>
         <field name="res_model">mrp.requisition</field>
-        <field name="view_mode">list,tree,form</field>
-        <field name="view_id" ref="mrp_requisition_view_form"/>
+        <field name="view_mode">tree,form</field>
+        <!-- <field name="view_id" ref="mrp_requisition_view_form"/>
+        <field name="search_view_id" ref="mrp_requisition_view_tree"/> -->
         <field name="help" type="html">
           <p class="o_view_nocontent_smiling_face">
             No product found. Let's create one!
-- 
GitLab


From ad6c2c7c134ba64300ccb612923574168eb98c5e Mon Sep 17 00:00:00 2001
From: asas1asas200 <asas1asas200@gmail.com>
Date: Wed, 22 Nov 2023 00:26:51 +0800
Subject: [PATCH 4/4] feat(mrp-requisition): impl all requisition flow

Main feats:
    + Create purchase order when confirm the requisition
    + Send mail when `notify_purchase` has been clicked
    + Only user in purchase group can convert requisition to purchase
      order
    + Every item in requisition line must be set a supplier before
      converting to purchase order
    + Read-only when requisition is `done` or `cancel`
    + I don't limit min qty from supplier info, if it is needed I will
      add it in future

Notice:
    + You should update `purchase` module due to `purchase.order` has
      been inherited in `requisition` module
    + Mail function has not been tested yet
---
 extra-addons/kci-mrp/__manifest__.py          |  1 +
 .../kci-mrp/data/requisition_email.xml        | 15 +++++
 .../kci-mrp/models/mrp_requisition.py         | 62 +++++++++++++++++--
 .../kci-mrp/views/mrp_requisition_views.xml   | 32 ++++++----
 extra-addons/kci-mrp/views/mrp_views_menu.xml |  4 +-
 5 files changed, 95 insertions(+), 19 deletions(-)
 create mode 100644 extra-addons/kci-mrp/data/requisition_email.xml

diff --git a/extra-addons/kci-mrp/__manifest__.py b/extra-addons/kci-mrp/__manifest__.py
index ba278fc2bb2..cfcbfb5781b 100644
--- a/extra-addons/kci-mrp/__manifest__.py
+++ b/extra-addons/kci-mrp/__manifest__.py
@@ -21,6 +21,7 @@ This module contains all the common features of Drawings.
         'views/mrp_groups.xml',
         'views/mrp_requisition_views.xml',
         'report/bom_for_sales.xml',
+        'data/requisition_email.xml',
         'data/bom_email.xml',
     ],
     'application': True,
diff --git a/extra-addons/kci-mrp/data/requisition_email.xml b/extra-addons/kci-mrp/data/requisition_email.xml
new file mode 100644
index 00000000000..9728dbb6ce7
--- /dev/null
+++ b/extra-addons/kci-mrp/data/requisition_email.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <data>
+        <record id="requisition_email_template" model="mail.template">
+            <field name="name">Requisition Email Template</field>
+            <field name="email_from">erp_system@kci-gloabl.com.tw</field>
+            <field name="subject">[KCI ERP System] Requisition �𡁶䰻</field>
+            <field name="model_id" ref="kci-mrp.model_mrp_requisition"/>
+            <field name="auto_delete" eval="False"/>
+            <field name="body_html" type="html">
+                <div>test</div>
+            </field>
+        </record>
+    </data>
+</odoo>
\ No newline at end of file
diff --git a/extra-addons/kci-mrp/models/mrp_requisition.py b/extra-addons/kci-mrp/models/mrp_requisition.py
index 2f0864fa0c0..855d52c3f75 100644
--- a/extra-addons/kci-mrp/models/mrp_requisition.py
+++ b/extra-addons/kci-mrp/models/mrp_requisition.py
@@ -1,4 +1,12 @@
 from odoo import models, fields, api
+from odoo.exceptions import ValidationError
+
+
+class PurchaseOrder(models.Model):
+    _inherit = 'purchase.order'
+
+    requisition_id = fields.Many2one(
+        'mrp.requisition', string='隢贝頃�鱓', default=False)
 
 
 class MrpRequisition(models.Model):
@@ -21,8 +29,8 @@ class MrpRequisition(models.Model):
         'mrp.requisition.line', 'requisition_id', 'Requisition Lines')
     amount_total = fields.Float(
         string='蝮質��', compute='_compute_amount_total', store=True)
-    ref_purchase_id = fields.Many2one(
-        'purchase.order', string='�繧鞈澆鱓', store=True)
+    ref_purchase_ids = fields.One2many(
+        'purchase.order', 'requisition_id', string='撱箇�讠��繧鞈潸��鱓', readonly=True, copy=False)
 
     @api.depends('requisition_line_ids.price_subtotal', 'requisition_line_ids')
     def _compute_amount_total(self):
@@ -31,13 +39,53 @@ class MrpRequisition(models.Model):
                 line.price_subtotal for line in requisition.requisition_line_ids)
 
     def notify_purchase(self):
-        pass
+        self.state = 'pending'
+        message = f'{self.engineer.name} 撱箇�衤�銝��𧢲鰵���繧鞈潮�瘙��鱓 {self.name}'
+        group = self.env['mail.channel'].search(
+            [('group_public_id', '=', self.env.ref('kci-purchase.kci_purchase_group').id)])
+        email_to = ''
+        for partner in group.channel_partner_ids:
+            email_to += f'{partner.email}, '
+        email_values = {
+            'email_to': email_to,
+            'email_cc': self.env.user.partner_id.email,
+            'email_from': "erp_system@kci-global.com.tw",
+            'body_html': message,
+        }
+        mail_template = self.env.ref('kci-mrp.requisition_email_template')
+        mail_template.send_mail(self.id, email_values=email_values)
 
     def confirm(self):
-        pass
+        supplier_mapping = {}
+
+        for line in self.requisition_line_ids:
+            if not line.product_tmpl_id.seller_ids:
+                raise ValidationError(
+                    f'���� {line.product_tmpl_id.name} 撠𡁏𧊋����帋�𥟇�匧�嚗諹𥅾�𧊋�枂�𣶹靘𥟇�匧��賊�嚗諹�见���箇𤩎���鰵憓硺�𥟇�匧�')
+            if line.supplier_id.name.id not in supplier_mapping:
+                supplier_mapping[line.supplier_id.name.id] = []
+            supplier_mapping[line.supplier_id.name.id].append(line)
+
+        for partner_id, lines in supplier_mapping.items():
+            purchase_order = self.env['purchase.order'].create({
+                'partner_id': partner_id,
+                'requisition_id': self.id,
+                'user_id': self.env.user.id,
+            })
+            for line in lines:
+                self.env['purchase.order.line'].create({
+                    'product_id': line.product_tmpl_id.product_variant_ids[0].id,
+                    'name': line.product_tmpl_id.name,
+                    'product_qty': line.product_qty,
+                    'price_unit': line.price_unit,
+                    'order_id': purchase_order.id,
+                })
+            self.ref_purchase_ids += purchase_order
+
+        self.state = 'done'
 
     def cancel(self):
-        pass
+        self.state = 'cancel'
 
 
 class MrpRequisitionLine(models.Model):
@@ -47,7 +95,9 @@ class MrpRequisitionLine(models.Model):
         'mrp.requisition', index=True, ondelete='cascade',
         required=True)
     product_tmpl_id = fields.Many2one(
-        'product.template', string='����', store=True)
+        'product.template', string='����', domain='[("purchase_ok", "=", True)]', store=True)
+    supplier_id = fields.Many2one(
+        'product.supplierinfo', string='靘𥟇�匧�', domain='[("product_tmpl_id", "=", product_tmpl_id)]', store=True)
     price_unit = fields.Float(string='�鱓��', store=True)
     product_qty = fields.Float(string='�彍���', required=True)
     price_subtotal = fields.Float(
diff --git a/extra-addons/kci-mrp/views/mrp_requisition_views.xml b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
index 6f1b2778851..633a9b74b90 100644
--- a/extra-addons/kci-mrp/views/mrp_requisition_views.xml
+++ b/extra-addons/kci-mrp/views/mrp_requisition_views.xml
@@ -8,8 +8,8 @@
                 <form>
                     <header>
                         <button name="notify_purchase" class="oe_highlight" type="object" string="�𡁶䰻�繧鞈�" attrs="{'invisible': [('state', '!=', 'draft')]}"/>
-                        <button name="confirm" class="oe_highlight" type="object" string="撱箇�𧢲繧鞈潸��鱓" attrs="{'invisible': [('state', '!=', 'pending')]}"/>
-                        <button name="cancel" class="btn btn-secondary" type="object" string="��𡝗��" help="��𡝗��迨隢贝頃�鱓" attrs="{'invisible': [('state', '=', 'cancel')]}"/>
+                        <button name="confirm" class="oe_highlight" type="object" string="撱箇�𧢲繧鞈潸��鱓" groups="kci-purchase.kci_purchase_group" attrs="{'invisible': [('state', '!=', 'pending')]}"/>
+                        <button name="cancel" class="btn btn-secondary" type="object" string="��𡝗��" help="��𡝗��迨隢贝頃�鱓" attrs="{'invisible': [('state', 'in', ('cancel', 'done'))]}"/>
 
                         <field name="state" widget="statusbar" statusbar_visible="draft,pending,done"/>
                     </header>
@@ -22,17 +22,26 @@
                             <group>
                                 <field name="create_date" readonly="1"/>
                                 <field name="amount_total"/>
-                                <field name="ref_purchase_id" readonly="1"/>
                             </group>
                         </group>
-                        <field name="requisition_line_ids" widget="one2many" context="{'default_requisition_id': id}">
-                            <tree string="Components" editable="bottom">
-                                <field name="product_tmpl_id"/>
-                                <field name="product_qty"/>
-                                <field name="price_unit"/>
-                                <field name="price_subtotal"/>
-                            </tree>
-                        </field>
+
+                        <notebook>
+                            <page string="鞈潸眺皜��鱓">
+                                <field name="requisition_line_ids" widget="one2many" context="{'default_requisition_id': id}" attrs="{'readonly': [('state', 'in', ('done', 'cancel'))]}">
+                                    <tree editable="bottom">
+                                        <field name="product_tmpl_id"/>
+                                        <field name="supplier_id" options="{'no_create': True}"/>
+                                        <field name="product_qty"/>
+                                        <field name="price_unit"/>
+                                        <field name="price_subtotal"/>
+                                    </tree>
+                                </field>
+                            </page>
+
+                            <page string="撱箇�讠��繧鞈潸��鱓" autofocus="autofocus" attrs="{'invisible': [('state', 'not in', ('cancel', 'done'))]}">
+                                <field name="ref_purchase_ids" />
+                            </page>
+                        </notebook>
                     </sheet>
                 </form>
             </field>
@@ -46,6 +55,7 @@
                 <tree>
                     <field name="name"/>
                     <field name="engineer"/>
+                    <field name="state"/>
                 </tree>
             </field>
         </record>
diff --git a/extra-addons/kci-mrp/views/mrp_views_menu.xml b/extra-addons/kci-mrp/views/mrp_views_menu.xml
index 2a70561cae1..b3f100a900b 100644
--- a/extra-addons/kci-mrp/views/mrp_views_menu.xml
+++ b/extra-addons/kci-mrp/views/mrp_views_menu.xml
@@ -88,8 +88,8 @@
     <menuitem action="requisition_form_action"
               id="root_menu_mrp_requisition_form_action"
               name="隢贝頃�鱓"
-              parent="mrp.menu_mrp_bom"
-              sequence="3"
+              parent="mrp.menu_mrp_root"
+              sequence="150"
 
     />
 
-- 
GitLab