diff --git a/sf_hr/__manifest__.py b/sf_hr/__manifest__.py
index c0bd63ef..b3e21ab3 100644
--- a/sf_hr/__manifest__.py
+++ b/sf_hr/__manifest__.py
@@ -7,10 +7,11 @@
'sequence': 1,
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['hr'],
+ 'depends': ['base', 'hr'],
'data': [
'views/hr_employee.xml',
'views/res_config_settings_views.xml',
+ 'views/res_users_view.xml',
'data/cron_data.xml',
],
'demo': [
diff --git a/sf_hr/models/__init__.py b/sf_hr/models/__init__.py
index ffe76391..9744f0cc 100644
--- a/sf_hr/models/__init__.py
+++ b/sf_hr/models/__init__.py
@@ -2,3 +2,4 @@
from . import hr_employee
from . import res_config_setting
+from . import res_users
diff --git a/sf_hr/models/hr_employee.py b/sf_hr/models/hr_employee.py
index 8cf5595d..e9826f29 100644
--- a/sf_hr/models/hr_employee.py
+++ b/sf_hr/models/hr_employee.py
@@ -20,7 +20,9 @@ class JkmPracticeEmployee(models.Model):
if result['employee_list']:
for employee_info in result['employee_list']:
if employee_info['work_email']:
- self.sudo().search([('work_email', '=', employee_info['work_email'])]).write(
- {'we_id': employee_info['we_id']})
+ hr_employee = self.sudo().search([('work_email', '=', employee_info['work_email'])])
+ hr_employee.write({'we_id': employee_info['we_id']})
+ if hr_employee.user_id:
+ hr_employee.user_id.write({'we_employee_id': employee_info['we_id']})
else:
logging.info('_employee_info_sync error:%s' % result['message'])
diff --git a/sf_hr/models/res_users.py b/sf_hr/models/res_users.py
new file mode 100644
index 00000000..392c297a
--- /dev/null
+++ b/sf_hr/models/res_users.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api
+
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class ResUsers(models.Model):
+ _inherit = 'res.users'
+
+ we_employee_id = fields.Char(string=u'企业微信账号', default="")
diff --git a/sf_hr/views/res_users_view.xml b/sf_hr/views/res_users_view.xml
new file mode 100644
index 00000000..c65d8e46
--- /dev/null
+++ b/sf_hr/views/res_users_view.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ res.users.account.form
+ res.users
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index cdfef4bd..0f032a6d 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -11,7 +11,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify'],
+ 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify','stock'],
'data': [
'data/bussiness_node.xml'
],
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index eeb7cbe7..76f3fcb7 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -10,5 +10,21 @@
确认接单
sale.order
+
+ 调拨入库
+ stock.picking
+
+
+ 功能刀具组装
+ sf.functional.tool.assembly
+
+
+ 功能刀具寿命到期
+ sf.functional.tool.dismantle
+
+
+ 坯料采购提醒
+ purchase.order
+
\ No newline at end of file
diff --git a/sf_message/models/__init__.py b/sf_message/models/__init__.py
index b0c058fc..e84a0acd 100644
--- a/sf_message/models/__init__.py
+++ b/sf_message/models/__init__.py
@@ -6,3 +6,4 @@ from . import sf_message_cam_program
from . import sf_message_functional_tool_assembly
from . import sf_message_purchase
from . import sf_message_workorder
+from . import sf_message_functional_tool_dismantle
\ No newline at end of file
diff --git a/sf_message/models/sf_message_functional_tool_assembly.py b/sf_message/models/sf_message_functional_tool_assembly.py
index 251af2cc..d4e05fc0 100644
--- a/sf_message/models/sf_message_functional_tool_assembly.py
+++ b/sf_message/models/sf_message_functional_tool_assembly.py
@@ -3,4 +3,16 @@ from odoo import models, fields, api, _
class SFMessagefunctionalToolAssembly(models.Model):
_name = 'sf.functional.tool.assembly'
+ _description = "刀具组装单"
_inherit = ['sf.functional.tool.assembly', 'jikimo.message.dispatch']
+
+ @api.model_create_multi
+ def create(self, vals):
+ result = super(SFMessagefunctionalToolAssembly, self).create(vals)
+ is_cam = False
+ for obj in result:
+ if obj.loading_task_source == '0' and obj.assemble_status == '0':
+ is_cam = True
+ if is_cam:
+ self.add_queue('功能刀具组装')
+ return result
diff --git a/sf_message/models/sf_message_functional_tool_dismantle.py b/sf_message/models/sf_message_functional_tool_dismantle.py
new file mode 100644
index 00000000..dac3db28
--- /dev/null
+++ b/sf_message/models/sf_message_functional_tool_dismantle.py
@@ -0,0 +1,18 @@
+from odoo import models, api
+
+
+class SFMessagefunctionalToolDismantle(models.Model):
+ _name = 'sf.functional.tool.dismantle'
+ _description = "刀具拆解单"
+ _inherit = ['sf.functional.tool.dismantle', 'jikimo.message.dispatch']
+
+ @api.model
+ def create(self, vals):
+ result = super(SFMessagefunctionalToolDismantle, self).create(vals)
+ is_dismantle = False
+ for obj in result:
+ if obj.dismantle_cause in ['寿命到期报废', '崩刀报废']and obj.state=='待拆解':
+ is_dismantle = True
+ if is_dismantle:
+ self.add_queue('功能刀具寿命到期')
+ return result
diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py
index 073a7814..e9fe3956 100644
--- a/sf_message/models/sf_message_purchase.py
+++ b/sf_message/models/sf_message_purchase.py
@@ -1,6 +1,17 @@
+import logging
from odoo import models, fields, api, _
class SFMessagePurchase(models.Model):
_name = 'purchase.order'
_inherit = ['purchase.order', 'jikimo.message.dispatch']
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ res = super(SFMessagePurchase, self).create(vals_list)
+ if res:
+ try:
+ res.add_queue('坯料采购提醒')
+ except Exception as e:
+ logging.info('add_queue error:%s' % e)
+ return res
diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py
index b090549e..d66008f9 100644
--- a/sf_message/models/sf_message_stock_picking.py
+++ b/sf_message/models/sf_message_stock_picking.py
@@ -3,4 +3,11 @@ from odoo import models, fields, api, _
class SFMessageStockPicking(models.Model):
_name = 'stock.picking'
+ _description = "库存调拨"
_inherit = ['stock.picking', 'jikimo.message.dispatch']
+
+ def button_validate(self):
+ res = super(SFMessageStockPicking, self).button_validate()
+ if self.location_id.name == '进货' and self.location_dest_id.name == '刀具房':
+ self.add_queue('调拨入库')
+ return res
diff --git a/sf_message/models/sf_message_template.py b/sf_message/models/sf_message_template.py
index 7380fbe6..957b0f58 100644
--- a/sf_message/models/sf_message_template.py
+++ b/sf_message/models/sf_message_template.py
@@ -9,4 +9,8 @@ class SfMessageTemplate(models.Model):
def _get_message_model(self):
res = super(SfMessageTemplate, self)._get_message_model()
res.append("sale.order")
+ res.append("stock.picking")
+ res.append('sf.functional.tool.assembly')
+ res.append('sf.functional.tool.dismantle')
+ res.append('purchase.order')
return res
diff --git a/sf_plan/static/description/计划.png b/sf_plan/static/description/计划.png
new file mode 100644
index 00000000..e4efa9f9
Binary files /dev/null and b/sf_plan/static/description/计划.png differ
diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml
index 82382ef3..bfb584b8 100644
--- a/sf_plan/views/view.xml
+++ b/sf_plan/views/view.xml
@@ -278,6 +278,7 @@
sequence="150"
action="sf_production_plan_action"
groups="sf_base.group_plan_dispatch"
+ web_icon="sf_plan,static/description/计划.png"
/>
diff --git a/sf_stock/models/stock_picking.py b/sf_stock/models/stock_picking.py
index 3a64f78c..a429db36 100644
--- a/sf_stock/models/stock_picking.py
+++ b/sf_stock/models/stock_picking.py
@@ -74,6 +74,8 @@ class StockPicking(models.Model):
def send_to_bfm(self):
skip_backorder = self.env.context.get('skip_backorder')
+ cancel_backorder_ids = self.env.context.get('picking_ids_not_to_backorder')
+
# 下发发货到bfm
config = self.env['res.config.settings'].get_values()
move_ids, move_line_ids = self.deal_move_ids(self.move_ids, self.move_line_ids)
@@ -92,13 +94,13 @@ class StockPicking(models.Model):
'state': self.state,
'backorder_id': self.deal_send_backorder_id(self.backorder_id),
'backorder_ids': self.deal_send_backorder_id(self.backorder_ids),
- 'cancel_backorder_ids': skip_backorder,
+ 'cancel_backorder_ids': True if skip_backorder and cancel_backorder_ids else False, # 没有欠单判断
'move_type': self.move_type,
},
}
url1 = config['bfm_url_new'] + '/api/stock/deliver_goods'
json_str = json.dumps(data)
- print('json_str', json_str)
+ logging.info('json_str= %s', json_str)
r = requests.post(url1, json=data, data=None)
if r.status_code == 200:
result = json.loads(r.json()['result'])
diff --git a/sf_tool_management/models/jikimo_bom.py b/sf_tool_management/models/jikimo_bom.py
index 62138d77..b5caf495 100644
--- a/sf_tool_management/models/jikimo_bom.py
+++ b/sf_tool_management/models/jikimo_bom.py
@@ -89,7 +89,7 @@ class jikimo_bom(models.Model):
('cutting_tool_blade_diameter', '=', self.tool_inventory_id.diameter),
# r角
- ('cutting_tool_blade_tip_working_size', '=', self.tool_inventory_id.angle)]
+ ('cutting_tool_blade_tip_r_size', '=', self.tool_inventory_id.angle)]
if option.name == '刀杆':
domain = ['&'] + domain + [
("cutting_tool_cutter_arbor_diameter", "=", self.tool_inventory_id.diameter)]