diff --git a/sf_manufacturing/models/mrp_workcenter.py b/sf_manufacturing/models/mrp_workcenter.py
index 81a252fb..34185d4e 100644
--- a/sf_manufacturing/models/mrp_workcenter.py
+++ b/sf_manufacturing/models/mrp_workcenter.py
@@ -1,4 +1,5 @@
import datetime
+import logging
from datetime import timedelta, time
from collections import defaultdict
from odoo import fields, models, api
@@ -6,6 +7,8 @@ from odoo.addons.resource.models.resource import Intervals
from odoo.exceptions import UserError, ValidationError
import math
+_logger = logging.getLogger(__name__)
+
class ResWorkcenter(models.Model):
_name = "mrp.workcenter"
@@ -225,7 +228,11 @@ class ResWorkcenter(models.Model):
if plan_ids:
sum_qty = sum([p.product_qty for p in plan_ids])
date_planned_working_hours = self._compute_effective_working_hours_day1(date_planned)
- if sum_qty >= date_planned_working_hours:
+ default_capacity = round(
+ self.production_line_hour_capacity * date_planned_working_hours, 2)
+ _logger.info('排程日期:%s,计划数量:%s,日产能:%s,日工时:%s' % (
+ date_planned, sum_qty, default_capacity, date_planned_working_hours))
+ if sum_qty >= default_capacity:
return False
return True
diff --git a/sf_message/__manifest__.py b/sf_message/__manifest__.py
index c214f2e9..e767ec2d 100644
--- a/sf_message/__manifest__.py
+++ b/sf_message/__manifest__.py
@@ -11,10 +11,12 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock', 'sf_tool_management', 'sf_manufacturing', 'sf_hr'],
+ 'depends': ['sale', 'purchase', 'sf_plan', 'jikimo_message_notify', 'stock'],
'data': [
'data/bussiness_node.xml',
+ # 'data/cron_data.xml',
'data/template_data.xml',
+
],
'test': [
],
diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml
index 7d66e8d2..f4a6ddf4 100644
--- a/sf_message/data/bussiness_node.xml
+++ b/sf_message/data/bussiness_node.xml
@@ -1,6 +1,7 @@
+
待接单
sale.order
@@ -10,6 +11,17 @@
确认接单
sale.order
+
+
+
+
+
+
+
+
+
+
+
调拨入库
stock.picking
@@ -30,9 +42,48 @@
坯料发料提醒
stock.picking
+
+
工单已下发通知
mrp.workorder
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sf_message/data/cron_data.xml b/sf_message/data/cron_data.xml
new file mode 100644
index 00000000..f69dce7b
--- /dev/null
+++ b/sf_message/data/cron_data.xml
@@ -0,0 +1,160 @@
+
+
+
+ 销售订单逾期预警
+
+ code
+ model._overdue_warning_func()
+ 1
+ minutes
+ -1
+
+
+
+
+
+
+ 销售订单已逾期
+
+ code
+ model._overdue_func()
+ 1
+ minutes
+ -1
+
+
+
+
+
+
+ 装夹预调工单逾期预警
+
+ code
+ model._overdue_warning_func()
+ 1
+ minutes
+ -1
+
+
+
+
+
+
+ 工单已逾期
+
+ code
+ model._overdue_func()
+ 1
+ minutes
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml
index 868b3f52..3033e687 100644
--- a/sf_message/data/template_data.xml
+++ b/sf_message/data/template_data.xml
@@ -1,6 +1,32 @@
+
+
+ 待接单
+
+ sale.order
+
+ markdown
+ normal
+ ### 待接单提醒:
+单号:销售订单[{{name}}]({{url}})
+事项:请确认是否接单。
+
+
+
+
+ 确认接单
+
+ sale.order
+
+ markdown
+ normal
+ ### 待排程提醒:
+单号:产品[{{product_id}}]({{url}})
+事项:{{mrp_production_count}}个制造订单待计划排程
+
+
坯料采购提醒
diff --git a/sf_message/models/sf_message_purchase.py b/sf_message/models/sf_message_purchase.py
index 96d0f8dc..e3fe269f 100644
--- a/sf_message/models/sf_message_purchase.py
+++ b/sf_message/models/sf_message_purchase.py
@@ -19,9 +19,7 @@ class SFMessagePurchase(models.Model):
return contents
def request_url(self, id):
- we_config_info = self.env['we.config'].sudo().search([], limit=1)
- redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain
- full_url = 'https://%s/' % redirect_domain
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
action_id = self.env.ref('purchase.purchase_form_action').id
menu_id = self.env['ir.model.data'].search([('name', '=', 'module_website_payment')]).id
# 查询参数
@@ -31,5 +29,5 @@ class SFMessagePurchase(models.Model):
# 拼接查询参数
query_string = urlencode(params)
# 拼接URL
- full_url = full_url + "web#" + query_string
+ full_url = url + "/web#" + query_string
return full_url
diff --git a/sf_message/models/sf_message_sale.py b/sf_message/models/sf_message_sale.py
index b838134f..8a434541 100644
--- a/sf_message/models/sf_message_sale.py
+++ b/sf_message/models/sf_message_sale.py
@@ -40,21 +40,34 @@ class SFMessageSale(models.Model):
# 继承并重写jikimo.message.dispatch的_get_message()
def _get_message(self, message_queue_ids):
- res = super(SFMessageSale, self)._get_message(message_queue_ids)
- new_res = []
- processed_messages = set() # 用于跟踪已经处理过的消息
+ contents = []
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
for item in message_queue_ids:
- if item.message_template_id.bussiness_node_id.name == '确认接单':
+ # 待接单的处理
+ if item.message_template_id.bussiness_node_id.name == '待接单':
+ content = super(SFMessageSale, self)._get_message(item)
+ action_id = self.env.ref('sale.action_quotations_with_onboarding').id
+ url = f"{url}/web#id={item.res_id}&view_type=form&action={action_id}"
+ content = content[0].replace('{{url}}', url)
+ contents.append(content)
+ # 确认接单的处理
+ elif item.message_template_id.bussiness_node_id.name == '确认接单':
+ content = super(SFMessageSale, self)._get_message(item)
sale_order_line = self.env['sale.order.line'].search([('order_id', '=', int(item.res_id))])
- if len(sale_order_line) == 1:
- product = sale_order_line[0].product_id.name
- elif len(sale_order_line) > 1:
- product = '%s...' % sale_order_line[0].product_id.name
- for message in res:
- message_text = message.replace('{{product_id}}', product)
- if message_text not in processed_messages:
- new_res.append(message_text)
- processed_messages.add(message_text)
- if new_res:
- res = new_res
- return res
+ product = sale_order_line[0].product_id.name if len(sale_order_line) == 1 else '%s...' % \
+ sale_order_line[
+ 0].product_id.name
+ action_id = self.env.ref('sf_plan.sf_production_plan_action1').id
+ url = f"{url}/web#view_type=list&action={action_id}"
+ content = content[0].replace('{{product_id}}', product).replace('{{url}}', url)
+ contents.append(content)
+ return contents
+
+ # # 销售订单逾期预警
+ # def _overdue_warning_func(self):
+ # sale_order_
+ # return 1
+ #
+ # # 销售订单已逾期
+ # def _overdue_func(self):
+ # return 1
diff --git a/sf_message/models/sf_message_stock_picking.py b/sf_message/models/sf_message_stock_picking.py
index fdb9d4cf..0ff32f77 100644
--- a/sf_message/models/sf_message_stock_picking.py
+++ b/sf_message/models/sf_message_stock_picking.py
@@ -52,9 +52,7 @@ class SFMessageStockPicking(models.Model):
return res
def request_url(self):
- we_config_info = self.env['we.config'].sudo().search([], limit=1)
- redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain
- full_url = 'https://%s/' % redirect_domain
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
action_id = self.env.ref('stock.stock_picking_type_action').id
menu_id = self.env['ir.model.data'].search([('name', '=', 'module_theme_treehouse')]).id
# 查询参数
@@ -63,5 +61,5 @@ class SFMessageStockPicking(models.Model):
# 拼接查询参数
query_string = urlencode(params)
# 拼接URL
- full_url = full_url + "web#" + query_string
+ full_url = url + "/web#" + query_string
return full_url
diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py
index 6659ab52..59e3a0fc 100644
--- a/sf_message/models/sf_message_workorder.py
+++ b/sf_message/models/sf_message_workorder.py
@@ -40,9 +40,7 @@ class SFMessageWork(models.Model):
return contents
def request_url(self):
- we_config_info = self.env['we.config'].sudo().search([], limit=1)
- redirect_domain = self.env['we.app'].sudo().search([('id', '=', we_config_info.odoo_app_id.id)]).redirect_domain
- full_url = 'https://%s/' % redirect_domain
+ url = self.env['ir.config_parameter'].get_param('web.base.url')
action_id = self.env.ref('sf_manufacturing.mrp_workorder_action_tablet').id
menu_id = self.env['ir.model.data'].search([('name', '=', 'module_stock_dropshipping')]).id
# 查询参数
@@ -51,5 +49,6 @@ class SFMessageWork(models.Model):
# 拼接查询参数
query_string = urlencode(params)
# 拼接URL
- full_url = full_url + "web#" + query_string
+ full_url = url + "/web#" + query_string
return full_url
+
diff --git a/sf_mrs_connect/models/order_price.py b/sf_mrs_connect/models/order_price.py
index 1e373f4d..ec3ff2d5 100644
--- a/sf_mrs_connect/models/order_price.py
+++ b/sf_mrs_connect/models/order_price.py
@@ -18,6 +18,7 @@ class OrderPrice(models.Model):
return True
except ValueError:
return False
+ @api.depends('sale_order_id.order_line.remark')
def _compute_bfm_amount_total(self):
for record in self:
amount_total = 0