# Conflicts:
#	sf_dlm/data/product_data.xml
#	sf_dlm/models/product_template.py
#	sf_manufacturing/models/mrp_workorder.py
#	sf_mrs_connect/controllers/controllers.py
This commit is contained in:
gqh
2022-12-12 14:52:48 +08:00
15 changed files with 273 additions and 73 deletions

View File

@@ -196,8 +196,7 @@ class MachineTool(models.Model):
kw = json.dumps(machine_tool_list, ensure_ascii=False) kw = json.dumps(machine_tool_list, ensure_ascii=False)
r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers) r = requests.post(strurl, json={}, data={'kw': kw, 'token': token}, headers=headers)
ret = r.json() ret = r.json()
self.code = ret['code'] self.code = ret['message']
print(r)
if r == 200: if r == 200:
return "机床注册成功" return "机床注册成功"
else: else:

View File

@@ -31,6 +31,10 @@ class MrsMaterialModel(models.Model):
density = fields.Float("密度(kg/m³)") density = fields.Float("密度(kg/m³)")
materials_id = fields.Many2one('sf.production.materials', "材料名") materials_id = fields.Many2one('sf.production.materials', "材料名")
remark = fields.Text("备注") remark = fields.Text("备注")
gain_way = fields.Selection(
[("自加工", "自加工"), ("外协", "外协"), ("采购", "采购")],
default="", string="获取方式")
supplier_ids = fields.One2many('sf.supplier.sort', 'materials_model_id', string='供应商')
active = fields.Boolean('有效', default=True) active = fields.Boolean('有效', default=True)
@@ -63,7 +67,6 @@ class MrsProcessingOrder(models.Model):
_name = 'sf.processing.order' _name = 'sf.processing.order'
_description = '工序' _description = '工序'
sequence = fields.Integer('Sequence') sequence = fields.Integer('Sequence')
processing_technology_ids = fields.Many2many('sf.processing.technology', 'sf_associated_processes', processing_technology_ids = fields.Many2many('sf.processing.technology', 'sf_associated_processes',
index=True, string='加工工艺') index=True, string='加工工艺')
production_process_id = fields.Many2one('sf.production.process', string="表面工艺") production_process_id = fields.Many2one('sf.production.process', string="表面工艺")
@@ -79,3 +82,17 @@ class Tray(models.Model):
[("空闲", "空闲"), ("占用", "占用"), ("报损", "报损")], [("空闲", "空闲"), ("占用", "占用"), ("报损", "报损")],
default="空闲", string="状态") default="空闲", string="状态")
active = fields.Boolean('有效', default=True) active = fields.Boolean('有效', default=True)
class SupplierSort(models.Model):
_name = 'sf.supplier.sort'
_description = '供应商排序'
sequence = fields.Integer('Sequence')
partner_id = fields.Many2one('res.partner', domain="[('is_company', '=', True),('supplier_rank', '!=', 0)]")
materials_model_id = fields.Many2one('sf.materials.model')
_sql_constraints = [
('supplier_sort_uniq', 'unique (partner_id,materials_model_id)', '排序不能重复!')
]

View File

@@ -12,6 +12,7 @@ access_sf_production_materials,sf_production_materials,model_sf_production_mater
access_sf_materials_model,sf_materials_model,model_sf_materials_model,base.group_user,1,1,1,1 access_sf_materials_model,sf_materials_model,model_sf_materials_model,base.group_user,1,1,1,1
access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,base.group_user,1,1,1,1 access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,base.group_user,1,1,1,1
access_sf_tray,sf_tray,model_sf_tray,base.group_user,1,1,1,1 access_sf_tray,sf_tray,model_sf_tray,base.group_user,1,1,1,1
access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
12 access_sf_materials_model sf_materials_model model_sf_materials_model base.group_user 1 1 1 1
13 access_sf_processing_technology sf_processing_technology model_sf_processing_technology base.group_user 1 1 1 1
14 access_sf_tray sf_tray model_sf_tray base.group_user 1 1 1 1
15 access_sf_supplier_sort sf_supplier_sort model_sf_supplier_sort base.group_user 1 1 1 1
16
17
18

View File

@@ -6,23 +6,17 @@
<field name="model">sf.processing.technology</field> <field name="model">sf.processing.technology</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form string="加工工艺"> <form string="加工工艺">
<group> <group>
<group> <group>
<field name="process_encode" readonly="1"/> <field name="process_encode" readonly="1"/>
</group> </group>
<group> <group>
<field name="name" required="1"/> <field name="name" required="1"/>
</group> </group>
</group> </group>
<group> <group>
<field name="remark"/> <field name="remark"/>
</group> </group>
</form> </form>
</field> </field>
</record> </record>
@@ -30,10 +24,8 @@
<field name="model">sf.processing.technology</field> <field name="model">sf.processing.technology</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="加工工艺"> <tree string="加工工艺">
<field name="process_encode"/> <field name="process_encode"/>
<field name="name"/> <field name="name"/>
</tree> </tree>
</field> </field>
</record> </record>
@@ -52,13 +44,13 @@
<field name="model">sf.production.process</field> <field name="model">sf.production.process</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<tree string="表面工艺"> <tree string="表面工艺">
<field name="process_encode" readonly="1"/> <field name="process_encode" readonly="1"/>
<field name="name" readonly="1"/> <field name="name" readonly="1"/>
<field name="remark"/> <field name="remark"/>
</tree> </tree>
</field> </field>
</record> </record>
<record model="ir.ui.view" id="sf_production_process_form"> <record model="ir.ui.view" id="sf_production_process_form">
<field name="model">sf.production.process</field> <field name="model">sf.production.process</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
@@ -77,9 +69,7 @@
</field> </field>
</tree> </tree>
<form> <form>
<field name="processing_technology_ids" widget="many2many"> <field name="processing_technology_ids" widget="many2many">
</field> </field>
</form> </form>
</field> </field>
@@ -110,24 +100,28 @@
<group> <group>
<field name="materials_no" readonly="1"/> <field name="materials_no" readonly="1"/>
<field name="name" required="1"/> <field name="name" required="1"/>
<field name="gain_way" required="1"/>
</group> </group>
<group> <group>
<field name="density" required="1"/>
<field name="need_h" default="false"/> <field name="need_h" default="false"/>
<field name="mf_materia_post" attrs="{'invisible':[('need_h','=',False)]} "/> <field name="mf_materia_post" attrs="{'invisible':[('need_h','=',False)]} "/>
</group> </group>
<group> <group>
<field name='materials_id' default="default" invisible="1"/> <field name='materials_id' default="default" invisible="1"/>
<field name="density" required="1"/>
</group> </group>
</group>
<group>
<field name='supplier_ids'>
<tree editable='bottom'>
<field name="sequence" widget="handle" string="序号"/>
<field name="partner_id" string="名称"/>
</tree>
</field>
</group> </group>
<group> <group>
<field name="remark"/> <field name="remark"/>
</group> </group>
</form> </form>
</field> </field>
</record> </record>

View File

@@ -12,7 +12,7 @@
'website': 'https://www.sf.cs.jikimo.com', 'website': 'https://www.sf.cs.jikimo.com',
'depends': ['sf_base', 'sf_sale', 'sf_dlm'], 'depends': ['sf_base', 'sf_sale', 'sf_dlm'],
'data': [ 'data': [
'views/res_partner_view.xml'
], ],
'demo': [ 'demo': [
], ],

View File

@@ -23,6 +23,9 @@ class Sf_Bf_Connect(http.Controller):
ret = json.loads(datas) ret = json.loads(datas)
ret = json.loads(ret['result']) ret = json.loads(ret['result'])
product_id = request.env.ref('sf_dlm.product_template_sf').sudo() product_id = request.env.ref('sf_dlm.product_template_sf').sudo()
self_machining_id = request.env.ref('sf_dlm.product_embryo_sf_self_machining').sudo()
outsource_id = request.env.ref('sf_dlm.product_embryo_sf_outsource').sudo()
purchase_id = request.env.ref('sf_dlm.product_embryo_sf_purchase').sudo()
company_id = request.env.ref('base.main_company').sudo() company_id = request.env.ref('base.main_company').sudo()
order_id = request.env['sale.order'].with_user(request.env.ref("base.user_admin")).sale_order_create( order_id = request.env['sale.order'].with_user(request.env.ref("base.user_admin")).sale_order_create(
company_id, ret['delivery_name'], ret['delivery_telephone'], ret['delivery_address'], company_id, ret['delivery_name'], ret['delivery_telephone'], ret['delivery_address'],
@@ -32,8 +35,29 @@ class Sf_Bf_Connect(http.Controller):
product = request.env['product.template'].sudo().product_create(product_id, item, order_id, product = request.env['product.template'].sudo().product_create(product_id, item, order_id,
ret['order_number'], i) ret['order_number'], i)
order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item)
bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create(product) bom_data = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).get_bom(product)
if bom_data:
bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create(product,
'normal')
bom.with_user(request.env.ref("base.user_admin")).bom_create_Line(product) bom.with_user(request.env.ref("base.user_admin")).bom_create_Line(product)
else:
if product.materials_id.gain_way == '自加工':
self_machining = request.env['product.template'].sudo().no_bom_product_create(self_machining_id,
item,
order_i)
bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create(
self_machining, 'normal')
bom.with_user(request.env.ref("base.user_admin")).bom_create_Line(self_machining)
elif product.materials_id.gain_way == '外协':
outsource = request.env['product.template'].sudo().no_bom_product_create(outsource_id, item,
order_id)
bom = request.env['mrp.bom'].with_user(request.env.ref("base.user_admin")).bom_create(outsource)
bom.with_user(request.env.ref("base.user_admin")).bom_create_Line(outsource, 'subcontract')
elif product.materials_id.gain_way == '采购':
purchase = request.env['product.template'].sudo().no_bom_product_create(purchase_id, item,
order_id)
i += 1 i += 1
res['factory_order_no'] = order_id.name res['factory_order_no'] = order_id.name
return json.JSONEncoder().encode(res) return json.JSONEncoder().encode(res)

View File

@@ -26,3 +26,4 @@ class ResPartner(models.Model):
sf_token = fields.Char(u'Token', default=get_token) sf_token = fields.Char(u'Token', default=get_token)
sf_secret_key = fields.Char(u'密钥', default=get_secret) sf_secret_key = fields.Char(u'密钥', default=get_secret)

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="view_partner_form_sf" model="ir.ui.view">
<field name="name">view_partner_form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//page[last()]" position="before">
<page string="token和密钥">
<group>
<field name="sf_token"/>
<field name="sf_secret_key"/>
</group>
</page>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@@ -12,5 +12,48 @@
<field name="company_id" ref="base.main_company"/> <field name="company_id" ref="base.main_company"/>
<field name="active">false</field> <field name="active">false</field>
</record> </record>
<record id="product_category_embryo_sf" model="product.category">
<field name="name">胚料</field>
<field name="type">胚料</field>
</record>
<record id="product_embryo_sf_self_machining" model="product.product">
<field name="name">自加工</field>
<!-- <field name="categ_id" ref="product_category_embryo_sf"/>-->
<field name="invoice_policy">delivery</field>
<field name="detailed_type">product</field>
<field name="purchase_ok">false</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="company_id" ref="base.main_company"/>
<field name="active">false</field>
</record>
<record id="product_embryo_sf_outsource" model="product.product">
<field name="name">外协</field>
<!-- <field name="categ_id" ref="product_category_embryo_sf"/>-->
<field name="invoice_policy">delivery</field>
<field name="detailed_type">product</field>
<field name="purchase_ok">false</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="company_id" ref="base.main_company"/>
<field name="active">false</field>
</record>
<record id="product_embryo_sf_purchase" model="product.product">
<field name="name">采购</field>
<!-- <field name="categ_id" ref="product_category_embryo_sf"/>-->
<field name="invoice_policy">delivery</field>
<field name="detailed_type">product</field>
<field name="purchase_ok">false</field>
<field name="uom_id" ref="uom.product_uom_unit"/>
<field name="uom_po_id" ref="uom.product_uom_unit"/>
<field name="company_id" ref="base.main_company"/>
<field name="active">false</field>
</record>
</data> </data>
</odoo> </odoo>

View File

@@ -35,6 +35,23 @@ class ResProductTemplate(models.Model):
# def _compute_volume(self): # def _compute_volume(self):
# self.volume = self.long * self.width * self.height # self.volume = self.long * self.width * self.height
single_manufacturing = fields.Boolean(string="单个制造")
@api.model
def _get_route(self):
route_manufacture = self.env.ref('stock.warehouse0', raise_if_not_found=False).manufacture_pull_id.route_id.id
route_mto = self.env.ref('stock.warehouse0', raise_if_not_found=False).mto_pull_id.route_id.id
if route_manufacture and route_mto:
return [route_manufacture, route_mto]
return []
route_ids = fields.Many2many(default=lambda self: self._get_route())
# @api.depends('long', 'width', 'height')
# def _compute_volume(self):
# self.volume = self.long * self.width * self.height
# @api.depends('model_long', 'model_width', 'model_height') # @api.depends('model_long', 'model_width', 'model_height')
# def _compute_model_volume(self): # def _compute_model_volume(self):
# self.model_volume = self.model_long * self.model_width * self.model_height # self.model_volume = self.model_long * self.model_width * self.model_height
@@ -54,6 +71,12 @@ class ResProductTemplate(models.Model):
'height': item['height'], 'height': item['height'],
'volume': item['long'] * item['width'] * item['height'], 'volume': item['long'] * item['width'] * item['height'],
'model_price': item['price'], 'model_price': item['price'],
'length': item['model_long'],
'width': item['model_width'],
'height': item['model_height'],
'volume': item['model_long'] * item['model_width'] * item['model_height'],
'model_price': item['price'],
'tracking': 'serial',
'single_manufacturing': True, 'single_manufacturing': True,
'list_price': item['price'], 'list_price': item['price'],
'materials_id': self.env['sf.production.materials'].search( 'materials_id': self.env['sf.production.materials'].search(
@@ -65,8 +88,44 @@ class ResProductTemplate(models.Model):
# 'model_process_parameters_id': self.env['sf.processing.technology'].search( # 'model_process_parameters_id': self.env['sf.processing.technology'].search(
# [('process_encode', '=', item['process_parameters_code'])]).id, # [('process_encode', '=', item['process_parameters_code'])]).id,
'model_remark': item['remark'], 'model_remark': item['remark'],
'default_code': '%s-%s' % (order_number, i), # 'default_code': '%s-%s' % (order_number, i),
'barcode': item['barcode'], # 'barcode': item['barcode'],
'active': True
}
logging.info('product_create1:%s' % item)
copy_product_id.sudo().write(vals)
return copy_product_id
def no_bom_product_create(self, product_id, item, order_id):
copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy()
copy_product_id.product_tmpl_id.active = True
logging.info('no_bom_product_create:%s' % item)
materials_id = self.env['sf.production.materials'].search(
[('materials_no', '=', item['texture_code'])]).id
materials_type_id = self.env['sf.materials.model'].search(
[('materials_no', '=', item['texture_type_code'])]).id
vals = {
'name': '%s %s %s %s * %s * %s' % (
order_id.name, materials_id.name, materials_type_id.name, item['model_long'], item['model_width'],
item['model_height']),
'model_long': item['model_long'],
'model_width': item['model_width'],
'model_height': item['model_height'],
'model_volume': item['model_long'] * item['model_width'] * item['model_height'],
'length': item['model_long'],
'width': item['model_width'],
'height': item['model_height'],
'volume': item['model_long'] * item['model_width'] * item['model_height'],
'model_price': item['price'],
'tracking': 'serial',
'single_manufacturing': True,
'list_price': item['price'],
'materials_id': materials_id.id,
'materials_type_id': materials_type_id.id,
# 'model_surface_process_id': self.env['sf.production.process'].search(
# [('process_encode', '=', item['surface_process_code'])]).id,
# 'model_process_parameters_id': self.env['sf.processing.technology'].search(
# [('process_encode', '=', item['process_parameters_code'])]).id,
'active': True 'active': True
} }
logging.info('product_create1:%s' % item) logging.info('product_create1:%s' % item)
@@ -99,10 +158,10 @@ class ResMrpBom(models.Model):
_inherit = 'mrp.bom' _inherit = 'mrp.bom'
# 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品后再次进行创建bom # 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品后再次进行创建bom
def bom_create(self, product): def bom_create(self, product, bom_type):
bom_id = self.env['mrp.bom'].create({ bom_id = self.env['mrp.bom'].create({
'product_tmpl_id': product.product_tmpl_id.id, 'product_tmpl_id': product.product_tmpl_id.id,
'type': 'normal', 'type': bom_type,
'product_qty': 1, 'product_qty': 1,
'product_uom_id': 1 'product_uom_id': 1
}) })
@@ -117,6 +176,24 @@ class ResMrpBom(models.Model):
logging.info('bom_create_Line:%s' % product) logging.info('bom_create_Line:%s' % product)
embryo = self.env['product.product'].search( embryo = self.env['product.product'].search(
[('categ_id.is_embryo', '=', True), ('materials_type_id', '=', product.materials_type_id.id), [('categ_id.is_embryo', '=', True), ('materials_type_id', '=', product.materials_type_id.id),
# 创建新的胚料,根据胚料材料型号的获取方式(
# 自加工,外协,采购) 的配置, 选择不同的库存路线,一种材料型号配置一个路线相关的配置:
# 材料型号配置不同的获取方式: (自加工, 外协, 采购);
# 原材料重量KG公斤= 胚料的体积立方米m³ * 材料密度 * 1000
def bom_create_Line(self, embryo, materials):
bom_line = self.get_raw_bom(embryo, materials)
vals = {
'bom_id': self.id,
'product_id': bom_line.id,
'product_tmpl_id': bom_line.product_tmpl_id.id,
'product_qty': bom_line.volume * bom_line.materials_type_id.density * 1000,
'product_uom_id': bom_line.uom_id.id
}
return self.env['mrp.bom.line'].create(vals)
def get_bom(self, product):
embryo = self.env['product.product'].search(
[('categ_id.type', '=', '胚料'), ('materials_type_id', '=', product.materials_type_id.id),
('length', '>', product.length), ('width', '>', product.width), ('length', '>', product.length), ('width', '>', product.width),
('height', '>', product.height) ('height', '>', product.height)
], ],
@@ -125,9 +202,32 @@ class ResMrpBom(models.Model):
) )
logging.info('bom_create_Line1:%s' % product) logging.info('bom_create_Line1:%s' % product)
return self.env['mrp.bom.line'].create(vals) return self.env['mrp.bom.line'].create(vals)
if embryo:
rate_of_waste = ((embryo.volume - product.model_volume) % embryo.volume) * 100
if rate_of_waste <= 20:
return embryo
else:
return
# 查bom的原材料
def get_raw_bom(self, product):
raw_bom = self.env['product.product'].search(
[('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)])
return raw_bom
class ResProductCategory(models.Model): class ResProductCategory(models.Model):
_inherit = "product.category" _inherit = "product.category"
is_embryo = fields.Boolean('胚料') type = fields.Selection(
[("成品", "成品"), ("胚料", "胚料"), ("原材料", "原材料")],
default="", string="类型")
# @api.constrains('type')
# def _check_type(self):
# category = self.env['product.category'].search(
# [('type', '=', self.type)])
# if category:
# raise ValidationError("该类别已存在,请选择其他类别")

View File

@@ -48,16 +48,16 @@
</field> </field>
</record> </record>
<record id="view_product_category_form_inherit_sf" model="ir.ui.view"> <!-- <record id="view_product_category_form_inherit_sf" model="ir.ui.view">-->
<field name="name">product.category.form.inherit.sf</field> <!-- <field name="name">product.category.form.inherit.sf</field>-->
<field name="model">product.category</field> <!-- <field name="model">product.category</field>-->
<field name="inherit_id" ref="product.product_category_form_view"/> <!-- <field name="inherit_id" ref="product.product_category_form_view"/>-->
<field name="arch" type="xml"> <!-- <field name="arch" type="xml">-->
<field name="parent_id" position="before"> <!-- <field name="parent_id" position="before">-->
<field name="is_embryo"/> <!-- <field name="type"/>-->
</field> <!-- </field>-->
</field> <!-- </field>-->
</record> <!-- </record>-->
<record id="view_template_property_form" model="ir.ui.view"> <record id="view_template_property_form" model="ir.ui.view">
<field name="name">product.template.stock.property.form.inherit</field> <field name="name">product.template.stock.property.form.inherit</field>

View File

@@ -40,24 +40,24 @@ class ResMrpRoutingWorkcenter(models.Model):
return self.env.cr.dictfetchall()[0].get('workcenter_id') return self.env.cr.dictfetchall()[0].get('workcenter_id')
class ModelTypeRoutingSort(models.Model): # class ModelTypeRoutingSort(models.Model):
_name = 'sf.model.type.routing.sort' # _name = 'sf.model.type.routing.sort'
_description = '工序排序' # _description = '工序排序'
#
sequence = fields.Integer('Sequence') # sequence = fields.Integer('Sequence')
route_workcenter_id = fields.Many2one('mrp.routing.workcenter') # route_workcenter_id = fields.Many2one('mrp.routing.workcenter')
is_repeat = fields.Boolean('重复', related='route_workcenter_id.is_repeat') # is_repeat = fields.Boolean('重复', related='route_workcenter_id.is_repeat')
routing_type = fields.Selection([ # routing_type = fields.Selection([
('获取CNC加工程序', '获取CNC加工程序'), # ('获取CNC加工程序', '获取CNC加工程序'),
('装夹', '装夹'), # ('装夹', '装夹'),
('前置三元定位检测', '前置三元定位检测'), # ('前置三元定位检测', '前置三元定位检测'),
('CNC加工', 'CNC加工'), # ('CNC加工', 'CNC加工'),
('后置三元质量检测', '后置三元质量检测'), # ('后置三元质量检测', '后置三元质量检测'),
('解除装夹', '解除装夹'), # ('解除装夹', '解除装夹'),
], string="工序类型", related='route_workcenter_id.routing_type') # ], string="工序类型", related='route_workcenter_id.routing_type')
workcenter_ids = fields.Many2many('mrp.workcenter', required=False, related='route_workcenter_id.workcenter_ids') # workcenter_ids = fields.Many2many('mrp.workcenter', required=False, related='route_workcenter_id.workcenter_ids')
model_type_id = fields.Many2one('sf.model.type') # model_type_id = fields.Many2one('sf.model.type')
#
_sql_constraints = [ # _sql_constraints = [
('route_model_type_uniq', 'unique (route_workcenter_id,model_type_id)', '工序不能重复!') # ('route_model_type_uniq', 'unique (route_workcenter_id,model_type_id)', '工序不能重复!')
] # ]

View File

@@ -242,7 +242,7 @@ class ResMrpWorkOrder(models.Model):
'material_type_code': cnc.env['sf.materials.model'].search( 'material_type_code': cnc.env['sf.materials.model'].search(
[('id', '=', cnc.product_id.materials_type_id.id)]).materials_no, [('id', '=', cnc.product_id.materials_type_id.id)]).materials_no,
'machining_precision': cnc.product_id.model_machining_precision, 'machining_precision': cnc.product_id.model_machining_precision,
'embryo_long': cnc.product_id.bom_ids.bom_line_ids.product_id.long, 'embryo_long': cnc.product_id.bom_ids.bom_line_ids.product_id.length,
'embryo_height': cnc.product_id.bom_ids.bom_line_ids.product_id.height, '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 'embryo_width': cnc.product_id.bom_ids.bom_line_ids.product_id.width
# 'factory_code': self.env.user.company_id.partner_id. # 'factory_code': self.env.user.company_id.partner_id.

View File

@@ -29,9 +29,11 @@ class Sf_Mrs_Connect(http.Controller):
# # 从ftp拉取对应的文件 # # 从ftp拉取对应的文件
model_code = cnc.workorder_id.product_id.barcode model_code = cnc.workorder_id.product_id.barcode
processing_panel = cnc.workorder_id.processing_panel processing_panel = cnc.workorder_id.processing_panel
logging.info('model_code:%s' % model_code)
server_dir = cnc.with_user(request.env.ref("base.user_admin")).download_file_tmp(model_code, server_dir = cnc.with_user(request.env.ref("base.user_admin")).download_file_tmp(model_code,
processing_panel) processing_panel)
cnc_file_path = os.path.join(server_dir, cnc.program_name + '.NC') cnc_file_path = os.path.join(server_dir, cnc.program_name + '.NC')
logging.info('cnc_file_path:%s' % cnc_file_path)
cnc.with_user(request.env.ref("base.user_admin")).write_file(cnc_file_path, cnc) cnc.with_user(request.env.ref("base.user_admin")).write_file(cnc_file_path, cnc)
# logging.info('get_cnc_processing_create:%s' % '111111111111111') # logging.info('get_cnc_processing_create:%s' % '111111111111111')
# for root, dirs, files in os.walk(server_dir): # for root, dirs, files in os.walk(server_dir):

View File

@@ -19,25 +19,24 @@ class FtpController():
try: try:
self.ftp.connect(host, port) self.ftp.connect(host, port)
self.ftp.login(username, password) self.ftp.login(username, password)
logging.info("连接成功: ")
except: except:
logging.info("连接失败: ") logging.info("连接失败: ")
# 下载目录下的文件 # 下载目录下的文件
def download_file_tree(self, remotepath, serverdir): def download_file_tree(self, target_dir, serverdir):
self.ftp.cwd(target_dir) # 切换工作路径
if not os.path.exists(serverdir): if not os.path.exists(serverdir):
os.makedirs(serverdir) os.makedirs(serverdir)
self.ftp.cwd(remotepath)
remotenames = self.ftp.nlst() remotenames = self.ftp.nlst()
for file in remotenames: for file in remotenames:
server = os.path.join(serverdir, file) server = os.path.join(serverdir, file)
if file.find(".") != -1: if file.find(".") != -1:
self.download_file(server, file) self.download_file(server, file)
else: return
return False
# 下载指定目录下的指定文件 # 下载指定目录下的指定文件
def download_file(self, serverfile, remotefile): def download_file(self, serverfile, remotefile):
file_handler = open(serverfile, 'wb') file_handler = open(serverfile, 'wb')
self.ftp.retrbinary('RETR ' + remotefile, file_handler.write) self.ftp.retrbinary('RETR ' + remotefile, file_handler.write)
file_handler.close() file_handler.close()