Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/修改机床参数bug
This commit is contained in:
@@ -121,20 +121,12 @@ td.o_required_modifier {
|
||||
//font-weight: bold;
|
||||
}
|
||||
|
||||
.o_list_table th > div > i {
|
||||
display: none !important;
|
||||
.text-truncate {
|
||||
overflow: unset !important;
|
||||
text-overflow: unset !important;
|
||||
white-space: unset !important;
|
||||
}
|
||||
|
||||
body .o_list_table th:nth-child(4) {
|
||||
width: 100px !important;
|
||||
}
|
||||
|
||||
//body .o_list_table th:nth-child(5) {
|
||||
// width: 500px !important;
|
||||
//}
|
||||
|
||||
.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove).o_list_text {
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) {
|
||||
white-space: nowrap !important;
|
||||
}
|
||||
@@ -159,11 +159,11 @@
|
||||
<field name="feed_speed" required="1"/>
|
||||
<label for="precision_min" string="X轴定位精度(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="precision_min" string="最小(min)"/>
|
||||
<label for="precision_min" string="最小"/>
|
||||
<field name="precision_min" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="precision_max" string="最大(max)"/>
|
||||
<label for="precision_max" string="最大"/>
|
||||
<field name="precision_max" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
@@ -210,27 +210,28 @@
|
||||
<field name="motor_power" required="1"/>
|
||||
<label for="distance_min" string="主轴端面-工作台距离(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="distance_min" string="最小(min)"/>
|
||||
<label for="distance_min" string="最小"/>
|
||||
<field name="distance_min" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
<span>&nbsp;</span>
|
||||
<label for="distance_max" string="最大(max)"/>
|
||||
<label for="distance_max" string="最大"/>
|
||||
<field name="distance_max" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>
|
||||
</div>
|
||||
<field name="guide_rail" required="1"/>
|
||||
</group>
|
||||
<group></group>
|
||||
<group string="刀具">
|
||||
<field name="knife_type" required="1"/>
|
||||
<field name="tool_speed" required="1"/>
|
||||
<field name="tool_long_max" required="1"/>
|
||||
<label for="tool_diameter_min" string="刀具刀径(mm)"/>
|
||||
<div class="test_model">
|
||||
<label for="tool_diameter_min" string="最小(min)"/>
|
||||
<label for="tool_diameter_min" string="最小"/>
|
||||
<field name="tool_diameter_min" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>Φ
|
||||
<span>&nbsp;</span>
|
||||
<label for="tool_diameter_max" string="最大(max)"/>
|
||||
<label for="tool_diameter_max" string="最大"/>
|
||||
<field name="tool_diameter_max" class="o_address_zip" required="1"
|
||||
options="{'format': false}"/>Φ
|
||||
</div>
|
||||
|
||||
@@ -350,7 +350,7 @@
|
||||
<field name="name">加工工艺</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.processing.technology</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_production_process_category" model="ir.actions.act_window">
|
||||
|
||||
@@ -135,7 +135,6 @@ class ResMrpWorkOrder(models.Model):
|
||||
self.functional_fixture_code = self.functional_fixture_id.code
|
||||
self.functional_fixture_type_id = self.functional_fixture_id.type_id.id
|
||||
|
||||
|
||||
def get_no_data(self, production_id):
|
||||
process_parameter_workorder = self.search(
|
||||
[('surface_technics_parameters_id', '!=', False), ('production_id', '=', production_id)])
|
||||
@@ -338,19 +337,19 @@ class ResMrpWorkOrder(models.Model):
|
||||
# tray.unclamp()
|
||||
# self.tray_id = False
|
||||
|
||||
# return {
|
||||
# 'name': _('New Maintenance Request'),
|
||||
# 'view_mode': 'form',
|
||||
# 'res_model': 'maintenance.request',
|
||||
# 'res_id':self.id,
|
||||
# 'type': 'ir.actions.act_window',
|
||||
# 'context': {
|
||||
# 'default_company_id': self.company_id.id,
|
||||
# 'default_production_id': self.id,
|
||||
# },
|
||||
# 'domain': [('production_id', '=', self.id)],
|
||||
# 'target':'new'
|
||||
# }
|
||||
# return {
|
||||
# 'name': _('New Maintenance Request'),
|
||||
# 'view_mode': 'form',
|
||||
# 'res_model': 'maintenance.request',
|
||||
# 'res_id':self.id,
|
||||
# 'type': 'ir.actions.act_window',
|
||||
# 'context': {
|
||||
# 'default_company_id': self.company_id.id,
|
||||
# 'default_production_id': self.id,
|
||||
# },
|
||||
# 'domain': [('production_id', '=', self.id)],
|
||||
# 'target':'new'
|
||||
# }
|
||||
|
||||
def recreateManufacturingOrWorkerOrder(self):
|
||||
"""
|
||||
@@ -400,20 +399,6 @@ class ResMrpWorkOrder(models.Model):
|
||||
try:
|
||||
cnc = self.env['mrp.workorder'].search(
|
||||
[('routing_type', '=', 'CNC加工'), ('production_id', '=', self.production_id.id)], limit=1)
|
||||
logging.info('fetchCNC-cnc:%s' % cnc)
|
||||
# if cnc.product_id.upload_model_file:
|
||||
# logging.info('fetchCNC-upload_model_file:%s' % cnc.product_id.upload_model_file)
|
||||
# attachments = cnc.product_id.upload_model_file[0]
|
||||
# logging.info('fetchCNC-attachment1:%s' % attachments)
|
||||
# logging.info('fetchCNC-attachment1:%s' % cnc.product_id.upload_model_file[0])
|
||||
# logging.info('fetchCNC-attachment2:%s' % cnc.product_id.upload_model_file[0].datas)
|
||||
# logging.info('fetchCNC-attachment:%s' % attachments.datas)
|
||||
# base64_data = base64.b64encode(attachments.datas)
|
||||
# logging.info('fetchCNC-attachment1:%s' % attachments)
|
||||
# base64_datas = base64_data.decode('utf-8')
|
||||
# model_code = hashlib.sha1(base64_datas.encode('utf-8')).hexdigest()
|
||||
# logging.info('fetchCNC-model_code:%s' % model_code)
|
||||
logging.info('fetchCNC-model_code1:%s' % cnc.product_id.model_code)
|
||||
res = {'model_code': '' if not cnc.product_id.model_code else cnc.product_id.model_code,
|
||||
'production_no': self.production_id.name,
|
||||
'machine_tool_code': cnc.workcenter_id.machine_tool_id.code,
|
||||
@@ -427,6 +412,7 @@ class ResMrpWorkOrder(models.Model):
|
||||
'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height,
|
||||
'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width,
|
||||
'order_no': cnc.production_id.origin,
|
||||
'model_order_no': cnc.product_id.default_code.rsplit('-', 1)[0],
|
||||
'user': self.env.user.name,
|
||||
'model_file': '' if not cnc.product_id.model_file else base64.b64encode(
|
||||
cnc.product_id.model_file).decode('utf-8')
|
||||
|
||||
@@ -472,3 +472,22 @@ class ReStockMove(models.Model):
|
||||
item.product_id.write({'register_state': '注册失败'})
|
||||
except Exception as e:
|
||||
raise UserError("注册刀具到云端失败,请联系管理员!")
|
||||
|
||||
|
||||
class ReStockQuant(models.Model):
|
||||
_inherit = 'stock.quant'
|
||||
|
||||
def action_apply_inventory(self):
|
||||
inventory_diff_quantity = self.inventory_diff_quantity
|
||||
super(ReStockQuant, self).action_apply_inventory()
|
||||
if inventory_diff_quantity >= 1:
|
||||
stock = self.env['stock.move'].search([('product_id', '=', self.product_id.id), ('is_inventory', '=', True),
|
||||
('reference', '=', '更新的产品数量'), ('state', '=', 'done')],
|
||||
limit=1, order='id desc')
|
||||
if self.product_id.categ_type == '夹具':
|
||||
stock._register_fixture()
|
||||
elif self.product_id.categ_type == '刀具':
|
||||
stock._register_cutting_tool()
|
||||
return True
|
||||
|
||||
|
||||
|
||||
@@ -37,11 +37,11 @@ class QuickEasyOrder(models.Model):
|
||||
quantity = fields.Integer('数量', default=1)
|
||||
unit_price = fields.Float('单价')
|
||||
price = fields.Float('总价')
|
||||
model_file = fields.Binary('模型文件')
|
||||
upload_model_file = fields.Many2many('ir.attachment', 'upload_qf_model_file_attachment_ref', string='模型文件')
|
||||
model_file = fields.Binary('glb模型文件')
|
||||
upload_model_file = fields.Many2many('ir.attachment', 'upload_qf_model_file_attachment_ref', string='上传模型文件')
|
||||
delivery_time = fields.Date('交货日期')
|
||||
customer_id = fields.Many2one('res.partner', string='客户', default=lambda self: self.env.user.partner_id.id)
|
||||
state = fields.Selection([('草稿', '草稿'), ('待付款', '待付款'), ('待派单', '待派单'),
|
||||
state = fields.Selection([('草稿', '草稿'), ('待派单', '待派单'),
|
||||
('待接单', '待接单'), ('加工中', '加工中'),
|
||||
('物流中', '物流中'), ('已交付', '已交付')], string='订单状态', default='草稿',
|
||||
readonly=True)
|
||||
@@ -82,6 +82,7 @@ class QuickEasyOrder(models.Model):
|
||||
obj = super(QuickEasyOrder, self).create(vals)
|
||||
self.model_coloring(obj)
|
||||
self.distribute_to_factory(obj)
|
||||
obj.state = '待接单'
|
||||
return obj
|
||||
|
||||
# 将attach的datas内容转为glb文件
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<field name="code">quick.easy.order</field>
|
||||
<field name="prefix">FP-%(year)s-%(month)s%(day)s-</field>
|
||||
<field name="padding">4</field>
|
||||
<field name="company_id" eval="False"/>
|
||||
</record>
|
||||
|
||||
# ---------- 快速订单 ------------
|
||||
@@ -15,13 +16,16 @@
|
||||
<field name="model">quick.easy.order</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="快速订单">
|
||||
<field optional="show" name="name" string="订单号"/>
|
||||
<field optional="show" name="customer_id" string="客户"/>
|
||||
<field optional="show" name="material_id"/>
|
||||
<field optional="show" name="material_model_id"/>
|
||||
<field optional="show" name="parameter_ids"/>
|
||||
<field optional="show" name="quantity"/>
|
||||
<field optional="show" name="price"/>
|
||||
<field name="state" widget="label_selection"
|
||||
options="{'classes': {'待接单': 'default', '加工中':'primary','物流中':'warning','已交付': 'success'}}"/>
|
||||
<field name="name" string="订单号"/>
|
||||
<field name="customer_id" string="客户"/>
|
||||
<field name="material_id"/>
|
||||
<field name="material_model_id"/>
|
||||
<field name="parameter_ids" string="表面工艺参数" widget="many2many_tags"/>
|
||||
<field name="quantity"/>
|
||||
<field name="unit_price"/>
|
||||
<field name="price"/>
|
||||
<field optional="hide" name="delivery_time"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -32,6 +36,9 @@
|
||||
<field name="model">quick.easy.order</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="快速订单">
|
||||
<header>
|
||||
<field name="state" widget="statusbar"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<h1>
|
||||
<field name="name" readonly="True"/>
|
||||
@@ -41,7 +48,7 @@
|
||||
<field name="customer_id" readonly="1" force_save="1"/>
|
||||
<field name="material_id"/>
|
||||
<field name="material_model_id"/>
|
||||
<!-- <field name="process_id"/>-->
|
||||
<!-- <field name="process_id"/>-->
|
||||
<field name="parameter_ids" widget="many2many_tags" string="表面工艺参数"/>
|
||||
<field name="machining_precision"/>
|
||||
<field name="quantity"/>
|
||||
@@ -80,7 +87,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<search string="快速订单">
|
||||
<field name="name" string="模糊搜索"
|
||||
filter_domain="['|', ('name', 'ilike', self), '|', ('receive_name', 'ilike', self),'|', ('receive_phone', 'ilike', self),('customer_id', 'ilike', self)]"/>
|
||||
filter_domain="['|', ('name', 'ilike', self), '|',('customer_id', 'ilike', self)]"/>
|
||||
<separator/>
|
||||
<field name="customer_id"/>
|
||||
</search>
|
||||
|
||||
@@ -10,7 +10,7 @@ class SfLocation(models.Model):
|
||||
|
||||
# 重写字段定义
|
||||
name = fields.Char('Location Name', required=True, size=20)
|
||||
barcode = fields.Char('Barcode', copy=False, required=True, size=15)
|
||||
barcode = fields.Char('Barcode', copy=False, size=15)
|
||||
|
||||
# 仓库类别(selection:库区、库位、货位)
|
||||
location_type = fields.Selection([
|
||||
@@ -34,14 +34,14 @@ class SfLocation(models.Model):
|
||||
# 产品类别 (关联:product.category)
|
||||
product_type = fields.Many2many('product.category', string='产品类别')
|
||||
# 货架独有字段:通道、方向、货架高度(m)、货架层数、层数容量
|
||||
channel = fields.Char(string='通道', required=True)
|
||||
channel = fields.Char(string='通道')
|
||||
direction = fields.Selection([
|
||||
('R', 'R'),
|
||||
('L', 'L')
|
||||
], string='方向', required=True)
|
||||
], string='方向')
|
||||
shelf_height = fields.Float(string='货架高度(m)')
|
||||
shelf_layer = fields.Integer(string='货架层数', required=True)
|
||||
layer_capacity = fields.Integer(string='层数容量', required=True)
|
||||
shelf_layer = fields.Integer(string='货架层数')
|
||||
layer_capacity = fields.Integer(string='层数容量')
|
||||
|
||||
# 货位独有字段:货位状态、产品(关联产品对象)、产品序列号(关联产品序列号对象)
|
||||
location_status = fields.Selection([
|
||||
@@ -54,9 +54,9 @@ class SfLocation(models.Model):
|
||||
product_sn_id = fields.Many2one('stock.lot', string='产品序列号')
|
||||
# time_test = fields.Char(string='time')
|
||||
# 添加SQL约束
|
||||
_sql_constraints = [
|
||||
('name_uniq', 'unique(name)', '位置名称必须唯一!'),
|
||||
]
|
||||
# _sql_constraints = [
|
||||
# ('name_uniq', 'unique(name)', '位置名称必须唯一!'),
|
||||
# ]
|
||||
|
||||
hide_location_type = fields.Boolean(compute='_compute_hide_what', string='隐藏仓库')
|
||||
hide_area = fields.Boolean(compute='_compute_hide_what', string='隐藏库区')
|
||||
|
||||
Reference in New Issue
Block a user