解决冲突
This commit is contained in:
@@ -8,19 +8,21 @@
|
||||
'category': 'purchase',
|
||||
'depends': ['sf_manufacturing', 'purchase_request'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
'views/sale_order_view.xml',
|
||||
'views/mrp_production.xml',
|
||||
'views/purchase_request_view.xml',
|
||||
'wizard/purchase_request_line_make_purchase_order_view.xml',
|
||||
'views/purchase_request_line_view.xml',
|
||||
'views/stock_picking_views.xml',
|
||||
'views/stock_picking_views.xml'
|
||||
'wizard/purchase_request_wizard_views.xml',
|
||||
'views/purchase_request_menu_views.xml',
|
||||
],
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'jikimo_purchase_request/static/src/**/*'
|
||||
],
|
||||
},
|
||||
'web.assets_backend': [
|
||||
'jikimo_purchase_request/static/src/**/*'
|
||||
],
|
||||
},
|
||||
'application': True,
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
|
||||
@@ -410,7 +410,7 @@ msgstr "显示名称"
|
||||
#: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_form
|
||||
#: model_terms:ir.ui.view,arch_db:purchase_request.view_purchase_request_search
|
||||
msgid "Done"
|
||||
msgstr "完成"
|
||||
msgstr "关闭"
|
||||
|
||||
#. module: purchase_request
|
||||
#: model:ir.model.fields,field_description:purchase_request.field_purchase_request_line__move_dest_ids
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import re
|
||||
import ast
|
||||
from odoo import models, fields, api
|
||||
from odoo import models, fields, api, _
|
||||
from itertools import groupby
|
||||
|
||||
|
||||
class PurchaseRequest(models.Model):
|
||||
@@ -29,6 +30,54 @@ class PurchaseRequest(models.Model):
|
||||
action['context'] = origin_context
|
||||
return action
|
||||
|
||||
def button_done(self):
|
||||
product_qty_map = {key: sum(line.product_qty for line in group) for key, group in
|
||||
groupby(self.line_ids, key=lambda x: x.product_id.id)}
|
||||
lines = self.mapped("line_ids.purchase_lines.order_id")
|
||||
# 采购单产品和数量
|
||||
product_summary = {}
|
||||
if lines:
|
||||
for line in lines:
|
||||
for line_item in line.order_line:
|
||||
product_id = line_item.product_id.id
|
||||
qty = line_item.product_qty
|
||||
if product_id in product_summary:
|
||||
product_summary[product_id] += qty
|
||||
else:
|
||||
product_summary[product_id] = qty
|
||||
|
||||
# 校验产品数量
|
||||
discrepancies = []
|
||||
for product_id, qty in product_qty_map.items():
|
||||
if product_id in product_summary:
|
||||
if product_summary[product_id] != qty:
|
||||
discrepancies.append((product_id, qty, product_summary[product_id]))
|
||||
else:
|
||||
discrepancies.append((product_id, qty, 0))
|
||||
|
||||
if discrepancies:
|
||||
# 弹出提示框
|
||||
message = "产品数量不一致:\n"
|
||||
for product_id, required_qty, order_qty in discrepancies:
|
||||
product_name = self.env['product.product'].browse(product_id).display_name # 获取产品名称
|
||||
message += f"产品 {product_name},需求数量 {required_qty},关联采购订单数量 {order_qty}(含询价状态)\n"
|
||||
# 添加确认框
|
||||
message += "确认关闭?"
|
||||
return {
|
||||
'name': _('采购申请'),
|
||||
'type': 'ir.actions.act_window',
|
||||
'views': [(self.env.ref(
|
||||
'jikimo_purchase_request.purchase_request_wizard_wizard_form_view').id,
|
||||
'form')],
|
||||
'res_model': 'purchase.request.wizard',
|
||||
'target': 'new',
|
||||
'context': {
|
||||
'default_purchase_request_id': self.id,
|
||||
'default_message': message,
|
||||
}}
|
||||
return super(PurchaseRequest, self).button_done()
|
||||
|
||||
|
||||
class PurchaseRequestLine(models.Model):
|
||||
_inherit = 'purchase.request.line'
|
||||
_description = '采购申请明细'
|
||||
|
||||
2
jikimo_purchase_request/security/ir.model.access.csv
Normal file
2
jikimo_purchase_request/security/ir.model.access.csv
Normal file
@@ -0,0 +1,2 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_purchase_request_wizard_group_user,purchase.request.wizard,model_purchase_request_wizard,base.group_user,1,1,1,1
|
||||
|
@@ -21,6 +21,12 @@
|
||||
<field name="part_number"/>
|
||||
<field name="part_name"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='button_done']" position="attributes">
|
||||
<attribute name="class"/>
|
||||
</xpath>
|
||||
<xpath expr="//button[@name='button_in_progress']/following-sibling::button[1]" position="attributes">
|
||||
<attribute name="class">oe_highlight</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl-3.0)
|
||||
|
||||
from . import purchase_request_line_make_purchase_order
|
||||
from . import purchase_request_wizard
|
||||
|
||||
12
jikimo_purchase_request/wizard/purchase_request_wizard.py
Normal file
12
jikimo_purchase_request/wizard/purchase_request_wizard.py
Normal file
@@ -0,0 +1,12 @@
|
||||
from odoo import models, fields, api
|
||||
|
||||
|
||||
class PurchaseRequestWizard(models.TransientModel):
|
||||
_name = 'purchase.request.wizard'
|
||||
_description = '采购申请向导'
|
||||
|
||||
purchase_request_id = fields.Many2one('purchase.request', string='采购申请')
|
||||
message = fields.Char(string='提示', readonly=True)
|
||||
|
||||
def confirm(self):
|
||||
return self.purchase_request_id.write({"state": "done"})
|
||||
@@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record model="ir.ui.view" id="purchase_request_wizard_wizard_form_view">
|
||||
<field name="name">purchase.request.wizard.form.view</field>
|
||||
<field name="model">purchase.request.wizard</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<sheet>
|
||||
<div>
|
||||
<div style="white-space: pre-wrap;">
|
||||
<field name="message"/>
|
||||
</div>
|
||||
</div>
|
||||
<footer>
|
||||
<button string="确认" name="confirm" type="object" class="oe_highlight"/>
|
||||
<button string="取消" class="btn btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user