Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/new111
This commit is contained in:
@@ -536,3 +536,7 @@ div:has(.o_required_modifier) > label::before {
|
|||||||
position: unset;
|
position: unset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 修复搜索面板checkbox样式
|
||||||
|
.o_search_panel .form-check .form-check-label span {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
@@ -190,7 +190,7 @@ def _create(self, data_list):
|
|||||||
# 如果该用户组被限制创建或更新操作
|
# 如果该用户组被限制创建或更新操作
|
||||||
if rec['is_create_or_update']:
|
if rec['is_create_or_update']:
|
||||||
raise UserError(
|
raise UserError(
|
||||||
_("You are restricted from performing this operation. Please contact the administrator."))
|
_("您没有执行此操作的权限。请联系管理员"))
|
||||||
else:
|
else:
|
||||||
# 如果 'access.right' 模型不存在,可以在这里定义备选逻辑
|
# 如果 'access.right' 模型不存在,可以在这里定义备选逻辑
|
||||||
# 例如,记录日志、发送通知或者简单地跳过这部分逻辑
|
# 例如,记录日志、发送通知或者简单地跳过这部分逻辑
|
||||||
|
|||||||
@@ -6,12 +6,11 @@
|
|||||||
'author': 'fox',
|
'author': 'fox',
|
||||||
'website': '',
|
'website': '',
|
||||||
'category': '',
|
'category': '',
|
||||||
'depends': ['sf_dlm', 'sale_stock', 'sf_sale'],
|
'depends': ['sf_dlm', 'sale_stock', 'sf_sale', 'sale'],
|
||||||
"data": [
|
"data": [
|
||||||
'security/ir.model.access.csv',
|
'security/ir.model.access.csv',
|
||||||
'data/stock_routes.xml',
|
'data/stock_routes.xml',
|
||||||
'data/product_data.xml',
|
'data/product_data.xml',
|
||||||
'views/sale_order_views.xml',
|
|
||||||
# 'views/product_product_views.xml',
|
# 'views/product_product_views.xml',
|
||||||
],'assets': {
|
],'assets': {
|
||||||
# 'web.assets_backend': [
|
# 'web.assets_backend': [
|
||||||
|
|||||||
@@ -1,2 +1 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from . import main
|
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from . import product_template
|
from . import product_template
|
||||||
from . import sale_order
|
|
||||||
from . import mrp_bom
|
from . import mrp_bom
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
'views/agv_setting_views.xml',
|
'views/agv_setting_views.xml',
|
||||||
'views/sf_maintenance_equipment.xml',
|
'views/sf_maintenance_equipment.xml',
|
||||||
'views/res_config_settings_views.xml',
|
'views/res_config_settings_views.xml',
|
||||||
|
'views/sale_order_views.xml',
|
||||||
],
|
],
|
||||||
'assets': {
|
'assets': {
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
from . import controllers
|
from . import controllers
|
||||||
from . import workpiece
|
from . import workpiece
|
||||||
|
from . import main
|
||||||
|
|||||||
@@ -13,3 +13,5 @@ from . import agv_scheduling
|
|||||||
from . import res_config_setting
|
from . import res_config_setting
|
||||||
from . import sf_technology_design
|
from . import sf_technology_design
|
||||||
from . import sf_production_common
|
from . import sf_production_common
|
||||||
|
from . import sale_order
|
||||||
|
from . import quick_easy_order
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
Y10_axis = fields.Float(default=0)
|
Y10_axis = fields.Float(default=0)
|
||||||
Z10_axis = fields.Float(default=0)
|
Z10_axis = fields.Float(default=0)
|
||||||
X_deviation_angle = fields.Integer(string="X轴偏差度", default=0)
|
X_deviation_angle = fields.Integer(string="X轴偏差度", default=0)
|
||||||
test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格',
|
test_results = fields.Selection([("合格", "合格")], default='合格',
|
||||||
string="检测结果", tracking=True)
|
string="检测结果", tracking=True)
|
||||||
cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工程序")
|
cnc_ids = fields.One2many("sf.cnc.processing", 'workorder_id', string="CNC加工程序")
|
||||||
cmm_ids = fields.One2many("sf.cmm.program", 'workorder_id', string="CMM程序")
|
cmm_ids = fields.One2many("sf.cmm.program", 'workorder_id', string="CMM程序")
|
||||||
@@ -283,7 +283,8 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
# if technology_design.is_auto is False:
|
# if technology_design.is_auto is False:
|
||||||
# domain = [('origin', '=', order.production_id.name)]
|
# domain = [('origin', '=', order.production_id.name)]
|
||||||
# else:
|
# else:
|
||||||
domain = [('purchase_type', '=', 'consignment'), ('origin', '=', order.production_id.name)]
|
domain = [('purchase_type', '=', 'consignment'), ('origin', '=', order.production_id.name),
|
||||||
|
('state', '!=', 'cancel')]
|
||||||
purchase = self.env['purchase.order'].search(domain)
|
purchase = self.env['purchase.order'].search(domain)
|
||||||
purchase_num = 0
|
purchase_num = 0
|
||||||
if not purchase:
|
if not purchase:
|
||||||
@@ -313,7 +314,8 @@ class ResMrpWorkOrder(models.Model):
|
|||||||
# if technology_design.is_auto is False:
|
# if technology_design.is_auto is False:
|
||||||
# domain = [('origin', '=', self.production_id.name)]
|
# domain = [('origin', '=', self.production_id.name)]
|
||||||
# else:
|
# else:
|
||||||
domain = [('origin', '=', self.production_id.name), ('purchase_type', '=', 'consignment')]
|
domain = [('origin', '=', self.production_id.name), ('purchase_type', '=', 'consignment'),
|
||||||
|
('state', '!=', 'cancel')]
|
||||||
purchase_orders = self.env['purchase.order'].search(domain)
|
purchase_orders = self.env['purchase.order'].search(domain)
|
||||||
purchase_orders_id = None
|
purchase_orders_id = None
|
||||||
for po in purchase_orders:
|
for po in purchase_orders:
|
||||||
|
|||||||
@@ -649,10 +649,10 @@ class StockPicking(models.Model):
|
|||||||
for mi in move_in:
|
for mi in move_in:
|
||||||
pick = self.env['stock.picking'].search([('id', '=', mi.picking_id.id), ('name', 'ilike', 'OCIN'),
|
pick = self.env['stock.picking'].search([('id', '=', mi.picking_id.id), ('name', 'ilike', 'OCIN'),
|
||||||
('partner_id', '=', self.partner_id.id)])
|
('partner_id', '=', self.partner_id.id)])
|
||||||
if pick:
|
# if pick:
|
||||||
if mi.state != 'done':
|
# if mi.state != 'done':
|
||||||
mi.write({'state': 'assigned'})
|
# mi.write({'state': 'assigned'})
|
||||||
self.env['stock.move.line'].create(mi.get_move_line(production, None))
|
# self.env['stock.move.line'].create(mi.get_move_line(production, None))
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
@@ -671,6 +671,11 @@ class StockPicking(models.Model):
|
|||||||
if not sorted_workorders.picking_ids:
|
if not sorted_workorders.picking_ids:
|
||||||
# outcontract_stock_move = self.env['stock.move'].search([('production_id', '=', item.id)])
|
# outcontract_stock_move = self.env['stock.move'].search([('production_id', '=', item.id)])
|
||||||
# if not outcontract_stock_move:
|
# if not outcontract_stock_move:
|
||||||
|
# 创建一个新的补货组
|
||||||
|
procurement_group_id = self.env['procurement.group'].create({
|
||||||
|
'name': sorted_workorders.name,
|
||||||
|
'partner_id': self.partner_id.id,
|
||||||
|
})
|
||||||
new_picking = True
|
new_picking = True
|
||||||
location_id = self.env['stock.location'].search(
|
location_id = self.env['stock.location'].search(
|
||||||
[('barcode', 'ilike', 'VL-SPOC')]).id,
|
[('barcode', 'ilike', 'VL-SPOC')]).id,
|
||||||
@@ -680,24 +685,25 @@ class StockPicking(models.Model):
|
|||||||
'sf_manufacturing.outcontract_picking_in').id,
|
'sf_manufacturing.outcontract_picking_in').id,
|
||||||
outcontract_picking_type_out = self.env.ref(
|
outcontract_picking_type_out = self.env.ref(
|
||||||
'sf_manufacturing.outcontract_picking_out').id,
|
'sf_manufacturing.outcontract_picking_out').id,
|
||||||
moves_out = self.env['stock.move'].sudo().create(
|
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, location_dest_id, location_id,
|
|
||||||
outcontract_picking_type_out))
|
|
||||||
picking_out = self.create(
|
|
||||||
moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/'))
|
|
||||||
# pick_ids.append(picking_out.id)
|
|
||||||
moves_out.write(
|
|
||||||
{'picking_id': picking_out.id, 'state': 'waiting'})
|
|
||||||
moves_out._assign_picking_post_process(new=new_picking)
|
|
||||||
moves_in = self.env['stock.move'].sudo().create(
|
moves_in = self.env['stock.move'].sudo().create(
|
||||||
self.env['stock.move']._get_stock_move_values_Res(item, location_id, location_dest_id,
|
self.env['stock.move']._get_stock_move_values_Res(item, location_id, location_dest_id,
|
||||||
outcontract_picking_type_in))
|
outcontract_picking_type_in, procurement_group_id.id))
|
||||||
picking_in = self.create(
|
picking_in = self.create(
|
||||||
moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/'))
|
moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/'))
|
||||||
# pick_ids.append(picking_in.id)
|
# pick_ids.append(picking_in.id)
|
||||||
moves_in.write(
|
moves_in.write(
|
||||||
{'picking_id': picking_in.id, 'state': 'waiting'})
|
{'picking_id': picking_in.id, 'state': 'waiting'})
|
||||||
moves_in._assign_picking_post_process(new=new_picking)
|
moves_in._assign_picking_post_process(new=new_picking)
|
||||||
|
moves_out = self.env['stock.move'].sudo().create(
|
||||||
|
self.env['stock.move']._get_stock_move_values_Res(item, location_dest_id, location_id,
|
||||||
|
outcontract_picking_type_out, procurement_group_id.id, moves_in.id))
|
||||||
|
picking_out = self.create(
|
||||||
|
moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/'))
|
||||||
|
# pick_ids.append(picking_out.id)
|
||||||
|
moves_out.write(
|
||||||
|
{'picking_id': picking_out.id, 'state': 'waiting'})
|
||||||
|
moves_out._assign_picking_post_process(new=new_picking)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ReStockMove(models.Model):
|
class ReStockMove(models.Model):
|
||||||
@@ -707,7 +713,7 @@ class ReStockMove(models.Model):
|
|||||||
materiel_width = fields.Float(string='物料宽度', digits=(16, 4))
|
materiel_width = fields.Float(string='物料宽度', digits=(16, 4))
|
||||||
materiel_height = fields.Float(string='物料高度', digits=(16, 4))
|
materiel_height = fields.Float(string='物料高度', digits=(16, 4))
|
||||||
|
|
||||||
def _get_stock_move_values_Res(self, item, location_src_id, location_dest_id, picking_type_id):
|
def _get_stock_move_values_Res(self, item, location_src_id, location_dest_id, picking_type_id, group_id, move_dest_ids=False):
|
||||||
route = self.env['stock.route'].sudo().search([('name', '=', '表面工艺外协')])
|
route = self.env['stock.route'].sudo().search([('name', '=', '表面工艺外协')])
|
||||||
move_values = {
|
move_values = {
|
||||||
'name': '推',
|
'name': '推',
|
||||||
@@ -718,6 +724,8 @@ class ReStockMove(models.Model):
|
|||||||
'location_id': location_src_id,
|
'location_id': location_src_id,
|
||||||
'location_dest_id': location_dest_id,
|
'location_dest_id': location_dest_id,
|
||||||
'origin': item.name,
|
'origin': item.name,
|
||||||
|
'group_id': group_id,
|
||||||
|
'move_dest_ids': [(6, 0, [move_dest_ids])] if move_dest_ids else False,
|
||||||
# 'route_ids': False if not route else [(4, route.id)],
|
# 'route_ids': False if not route else [(4, route.id)],
|
||||||
'date_deadline': datetime.now(),
|
'date_deadline': datetime.now(),
|
||||||
'picking_type_id': picking_type_id,
|
'picking_type_id': picking_type_id,
|
||||||
|
|||||||
@@ -200,7 +200,7 @@
|
|||||||
<!-- attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('state','=','done')]}"/> -->
|
<!-- attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked'),('state','=','done')]}"/> -->
|
||||||
<!-- <button name="button_workpiece_delivery" type="object" string="工件配送" class="btn-primary"-->
|
<!-- <button name="button_workpiece_delivery" type="object" string="工件配送" class="btn-primary"-->
|
||||||
<!-- attrs="{'invisible': ['|','|','|','|',('routing_type','!=','装夹预调'),('is_delivery','=',True),('state','!=','done'),('is_rework','=',True),'&',('rfid_code','in',['',False]),('state','=','done')]}"/>-->
|
<!-- attrs="{'invisible': ['|','|','|','|',('routing_type','!=','装夹预调'),('is_delivery','=',True),('state','!=','done'),('is_rework','=',True),'&',('rfid_code','in',['',False]),('state','=','done')]}"/>-->
|
||||||
<button name="button_rework_pre" type="object" string="异常反馈"
|
<button name="button_rework_pre" type="object" string="异常反馈" invisible="1"
|
||||||
class="btn-primary"
|
class="btn-primary"
|
||||||
attrs="{'invisible': ['|','|',('routing_type','!=','装夹预调'),('state','!=','progress'),('is_rework','=',True)]}"/>
|
attrs="{'invisible': ['|','|',('routing_type','!=','装夹预调'),('state','!=','progress'),('is_rework','=',True)]}"/>
|
||||||
<button name="unbind_tray" type="object" string="解绑托盘"
|
<button name="unbind_tray" type="object" string="解绑托盘"
|
||||||
|
|||||||
@@ -1,17 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<record id="view_order_form_inherit_sf" model="ir.ui.view">
|
|
||||||
<field name="name">view.sale.order.form.inherit.sf</field>
|
|
||||||
<field name="inherit_id" ref="sale_stock.view_order_form_inherit_sale_stock_qty"/>
|
|
||||||
<field name="model">sale.order</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//page/field[@name='order_line']/form/group/group/div[@name='ordered_qty']/widget[@name='qty_at_date_widget']" position="replace">
|
|
||||||
</xpath>
|
|
||||||
<xpath expr="//page/field[@name='order_line']/tree/widget[@name='qty_at_date_widget']" position="replace">
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_order_form_inherit_supply_method" model="ir.ui.view">
|
<record id="view_order_form_inherit_supply_method" model="ir.ui.view">
|
||||||
<field name="name">view.sale.order.form.inherit.supply.method</field>
|
<field name="name">view.sale.order.form.inherit.supply.method</field>
|
||||||
<field name="inherit_id" ref="sf_sale.view_sale_order_form_inherit_sf"/>
|
<field name="inherit_id" ref="sf_sale.view_sale_order_form_inherit_sf"/>
|
||||||
@@ -102,7 +90,5 @@
|
|||||||
<record id="sale.res_partner_menu" model="ir.ui.menu">
|
<record id="sale.res_partner_menu" model="ir.ui.menu">
|
||||||
<field name="groups_id" eval="[(4, ref('sf_base.group_production_engineer'))]"/>
|
<field name="groups_id" eval="[(4, ref('sf_base.group_production_engineer'))]"/>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</odoo>
|
</odoo>
|
||||||
@@ -16133,7 +16133,7 @@ msgstr "库存概览"
|
|||||||
#. module: stock
|
#. module: stock
|
||||||
#: model:ir.actions.act_window,name:stock.stock_picking_type_action
|
#: model:ir.actions.act_window,name:stock.stock_picking_type_action
|
||||||
msgid "Internal Transfers"
|
msgid "Internal Transfers"
|
||||||
msgstr "厂内出入库"
|
msgstr "库存概览"
|
||||||
|
|
||||||
#. module: stock
|
#. module: stock
|
||||||
#: model:ir.model.fields,field_description:stock.field_stock_quant__inventory_quantity_set
|
#: model:ir.model.fields,field_description:stock.field_stock_quant__inventory_quantity_set
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class SfQualityCncTest(models.Model):
|
|||||||
('pass', '合格'),
|
('pass', '合格'),
|
||||||
('fail', '不合格')], string='判定结果')
|
('fail', '不合格')], string='判定结果')
|
||||||
number = fields.Integer('数量', default=1)
|
number = fields.Integer('数量', default=1)
|
||||||
test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果")
|
test_results = fields.Selection([("合格", "合格")], string="检测结果")
|
||||||
reason = fields.Selection(
|
reason = fields.Selection(
|
||||||
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"),
|
[("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), ("operate computer", "操机"),
|
||||||
("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")
|
("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因")
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
'data': [
|
'data': [
|
||||||
# 'security/ir.model.access.csv',
|
# 'security/ir.model.access.csv',
|
||||||
'views/stock_picking.xml',
|
'views/stock_picking.xml',
|
||||||
'views/stock_product_template.xml'
|
'views/stock_product_template.xml',
|
||||||
],
|
],
|
||||||
# only loaded in demonstration mode
|
# only loaded in demonstration mode
|
||||||
'demo': [
|
'demo': [
|
||||||
|
|||||||
Reference in New Issue
Block a user