Commit fdc11ca6 by wangkangjie

提交

parents 36e6e00d 0364b661
from . import inherit_production from . import inherit_production
from . import roke_work_order from . import roke_work_order
from . import inherit_roke_work_station_material
\ No newline at end of file
import base64
import datetime
import json
import logging
import os
import urllib
import uuid
from jinja2 import FileSystemLoader, Environment
import pytz
from odoo import models, fields, api, http, SUPERUSER_ID, _
from odoo.addons.roke_workstation_api.controllers.data_analysis import reduce_pytz_conversion, pytz_conversion
from odoo.addons.roke_workstation_api.controllers.material import RokeWorkstationMaterial
_logger = logging.getLogger(__name__)
# 设置查找html文件的路径
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
templateloader = FileSystemLoader(searchpath=BASE_DIR + "/static")
env = Environment(loader=templateloader)
EXTENSIONS_2D = [
"dwg", "dxf"
]
EXTENSIONS_3D = [
"sldasm", "sldprt", "asm", "par", "pwd", "psm", "prt", "neu", "iam", "ipt",
"catpart", "catproduct", "catshape", "cgr", "3dxml", "stp", "step", "stpz",
"stepz", "stpx", "stpxz", "igs", "iges", "stl", "obj", "mtl", "x_t", "xmt_txt",
"x_b", "xmt_bin", "p_b", "xmp_bin", "xmp_txt", "sat", "sab", "jt", "3dm",
"fbx", "gltf", "glb", "prc", "u3d"
]
_logger = logging.getLogger(__name__)
class InheritRokeWorkstationWorkOrder(RokeWorkstationMaterial):
def _get_document_url(self, document_id, file_type=None, ip=""):
attachment_id = document_id.attachment_id
if not attachment_id.create_date:
create_date = ""
else:
user_tz = pytz.timezone(http.request.env.context.get('tz', "Asia/Shanghai"))
date_dt = pytz.utc.localize(attachment_id.create_date).astimezone(user_tz)
create_date = date_dt.strftime("%Y-%m-%d %H:%M:%S")
if not attachment_id.access_token:
attachment_id.generate_access_token()
if attachment_id.mimetype == "application/pdf":
code = str(uuid.uuid4())
url = f"/web/content/{attachment_id.id}/{code}_{attachment_id.name}?access_token={attachment_id.access_token}&unique={str(fields.Datetime.now().timestamp())}"
return {
"id": document_id.id,
"name": document_id.name,
"mimetype": attachment_id.mimetype,
"thumbnail": self.get_doc_thumbnail(attachment_id),
"type": "url",
# "data": ip + f"/web/static/lib/pdfjs/web/viewer.html?file={content_url}",
"data": ip + url,
"is_picture": False,
"ip_address": document_id.data_sync_ip or '',
"create_user": attachment_id.create_uid.name or "",
"create_date": create_date,
# "preview": "pdf-preview",
"preview": "kkfileview-preview"
}
elif attachment_id.mimetype.startswith('image/') or attachment_id.index_content == 'image':
url = f"/web/image/{attachment_id.id}?access_token={attachment_id.access_token}&unique={str(fields.Datetime.now().timestamp())}"
return {
"id": document_id.id,
"name": document_id.name,
"mimetype": attachment_id.mimetype,
"ip_address": document_id.data_sync_ip or '',
"thumbnail": self.get_doc_thumbnail(attachment_id),
"type": "url",
"data": ip + url,
"is_picture": True,
"create_user": attachment_id.create_uid.name or "",
"create_date": create_date,
"preview": "img-preview"
}
else:
split_list = document_id.name.split('.')
if len(split_list) > 1:
file_extension = split_list[-1]
if file_extension.lower() in EXTENSIONS_2D + EXTENSIONS_3D:
icp = document_id.env['ir.config_parameter'].sudo()
transform_service = icp.get_param('p.transform.service')
model_url = attachment_id.local_url + ".scs"
model_url_base64 = base64.b64encode(model_url.encode()).decode()
url = f"{transform_service}/transform2/z3d/?model={urllib.parse.quote(model_url_base64)}"
return {
"id": document_id.id,
"name": document_id.name,
"mimetype": attachment_id.mimetype,
"ip_address": document_id.data_sync_ip or '',
"thumbnail": self.get_doc_thumbnail(attachment_id),
"type": "url",
"data": url,
"is_picture": True,
"create_user": attachment_id.create_uid.name or "",
"create_date": create_date,
"preview": "cad-preview"
}
else:
code = str(uuid.uuid4())
url = f"/web/content/{attachment_id.id}/{code}_{attachment_id.name}?access_token={attachment_id.access_token}&unique={str(fields.Datetime.now().timestamp())}"
return {
"id": document_id.id,
"name": document_id.name,
"ip_address": document_id.data_sync_ip or '',
"mimetype": attachment_id.mimetype,
"thumbnail": self.get_doc_thumbnail(attachment_id),
"type": "url",
"data": ip + url,
"is_picture": False,
"create_user": attachment_id.create_uid.name or "",
"create_date": create_date,
"preview": "kkfileview-preview"
}
else:
code = str(uuid.uuid4())
url = f"/web/content/{attachment_id.id}/{code}_{attachment_id.name}?access_token={attachment_id.access_token}&unique={str(fields.Datetime.now().timestamp())}"
return {
"id": document_id.id,
"name": document_id.name,
"ip_address": document_id.data_sync_ip or '',
"mimetype": attachment_id.mimetype,
"thumbnail": self.get_doc_thumbnail(attachment_id),
"type": "url",
"data": ip + url,
"is_picture": False,
"create_user": attachment_id.create_uid.name or "",
"create_date": create_date,
"preview": "kkfileview-preview"
}
from . import models
from . import controller
from . import wizard
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
'name': '数转-日志生成',
'depends': ['roke_workstation_api', 'roke_mes_production'],
'author': 'www.rokedata.com',
'website': 'http://www.rokedata.com',
'description': """
""",
'data': [
'security/ir.model.access.csv',
'views/inherit_roke_mes_stock_picking_views.xml',
'views/inherit_roke_production_result_views.xml',
'views/inherit_roke_production_task_views.xml',
'views/inherit_roke_purchase_order_views.xml',
'views/inherit_roke_sale_order_views.xml',
'views/inherit_roke_work_order_views.xml',
'views/log_sync_handle_model_views.xml',
'wizard/roke_update_create_user_wizard_views.xml',
'wizard/multiple_assign_workers_wizard_views.xml',
'wizard/roke_update_stock_order_date_wizard_views.xml',
'wizard/roke_random_stock_order_date_wizard_views.xml',
],
'demo': [
],
'qweb':[
],
'application': True,
'installable': True,
}
# -*- coding: utf-8 -*-
from . import main
from odoo import http, tools
class FormlistSearchCustom(http.Controller):
@http.route('/roke/tool/form_list_search_custom', type='json', auth='public', methods=["post"], cors='*', csrf=False)
def form_list_search_custom(self):
_self = http.request
params = _self.jsonrequest.get("params")
model_name = params.get("model_name")
form_id = params.get("id")
form_field = params.get("form_field")
form_model = params.get("form_model")
domain = params.get("domain")
old_domain = params.get("old_domain")
_domain = []
field_ids = []
if form_field:
form_id = _self.env[form_model].sudo().search([("id", "=", form_id)])
field_ids = form_id[form_field].ids
if domain:
_domain.append("&")
_domain.append(("id", "=", field_ids))
for i, v in enumerate(domain):
if i != domain.__len__() - 1:
_domain.append("&")
_domain.append(tuple(v))
for v in old_domain:
if type(v) == str:
_domain.append(v)
continue
_domain.append(tuple(v))
field_data = _self.env[model_name].sudo().search(_domain).ids
data = {"code": 0, "message": 'success', "data": field_data}
if form_field:
data.update({"reload_data": field_ids})
return data
from . import inherit_production_task
from . import inherit_roke_mes_stock_picking
from . import inherit_roke_production_result
from . import inherit_roke_purchase_order
from . import inherit_roke_sale_order
from . import inherit_roke_work_order
from . import log_sync_handle_mode
\ No newline at end of file
import math
import json
from urllib import parse
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from datetime import datetime, timedelta, time
class RokeProductionTask(models.Model):
_inherit = "roke.production.task"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def update_create_date(self):
# 把 当前 model 的所有数据的 创建时间都更改 为 订单日期
orders = self.env[self._name].sudo().search([])
for order in orders:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {self._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.plan_start_date, time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
\ No newline at end of file
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from odoo.exceptions import UserError
import math
import json
from datetime import datetime, timedelta, time
class RokeMesStockPicking(models.Model):
_inherit = "roke.mes.stock.picking"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def update_create_date(self):
# 把 当前 model 的所有数据的 创建时间都更改 为 订单日期
orders = self.env[self._name].sudo().search([])
for order in orders:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {self._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.picking_date, time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
def update_order_date(self):
# 更改单据日期
stock_id_list = [rec.id for rec in self]
wizard_id = self.env["roke.update.stock.order.date.wizard"].create({
"stock_ids": [(6, 0, stock_id_list)]
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': wizard_id.id,
'res_model': 'roke.update.stock.order.date.wizard',
}
def random_order_date(self):
# 随机更改单据日期
stock_id_list = [rec.id for rec in self]
wizard_id = self.env["roke.random.stock.order.date.wizard"].create({
"stock_ids": [(6, 0, stock_id_list)]
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': wizard_id.id,
'res_model': 'roke.random.stock.order.date.wizard',
}
def update_stock_move_line_data(self):
# 修改 详细作业的 作业人员-> 单据 创建人/ 作业时间-> 单据创建时间/入库日期 -> 单据创建时间/move_date -> 单据创建时间
for rec in self:
for ml_id in rec.ml_ids:
self.env.cr.execute(f"""UPDATE {ml_id._name.replace(".", "_")}
SET create_uid={rec.create_uid.id},
create_date='{rec.create_date.strftime('%Y-%m-%d %H:%M:%S')}',
inbound_date='{rec.create_date.date().strftime('%Y-%m-%d')}',
move_date='{rec.create_date.date().strftime('%Y-%m-%d')}'
WHERE id = {ml_id.id}""")
from odoo import models, fields, api, _
from odoo.exceptions import UserError
import json
from datetime import datetime, timedelta, time
class RokeProductionResult(models.Model):
_inherit = "roke.production.result"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def update_create_date(self):
#
orders = self.env[self._name].sudo().search([])
for order in orders:
# 更新 create_date 字段
work_time = order.wr_id.work_time
self.env.cr.execute(f"""UPDATE {order._name.replace(".", "_")}
SET create_date = '{datetime.combine(work_time.date(), time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
for line in order.line_ids:
self.env.cr.execute(f"""UPDATE {line._name.replace(".", "_")}
SET create_date = '{datetime.combine(work_time.date(), time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {line.id}""")
from odoo import models, fields, api, SUPERUSER_ID
from odoo.exceptions import ValidationError, UserError
from odoo.tools import float_is_zero
from datetime import datetime, timedelta, time
import json
import requests
class RokePurchaseOrder(models.Model):
_inherit = "roke.purchase.order"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def update_create_date(self):
# 把 当前 model 的所有数据的 创建时间都更改 为 订单日期
orders = self.env[self._name].sudo().search([])
for order in orders:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {self._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.order_date, time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
\ No newline at end of file
import copy
import logging
import json
from collections import Counter
from odoo import models, fields, api
from odoo.exceptions import ValidationError, UserError
from odoo.tools import float_is_zero
from datetime import datetime, timedelta, time
class RokeSaleOrder(models.Model):
_inherit = "roke.sale.order"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def update_create_date(self):
# 把 当前 model 的所有数据的 创建时间都更改 为 订单日期
orders = self.env[self._name].sudo().search([])
for order in orders:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {self._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.order_date, time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
\ No newline at end of file
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
from odoo.exceptions import UserError
from urllib import parse
import json
from datetime import datetime, timedelta, time
class InheritRokeWorkOrder(models.Model):
_inherit = "roke.work.order"
def update_create_uid(self):
ids_list = []
for rec in self:
ids_list.append(rec.id)
res = self.env["roke.update.create.user.wizard"].create({
"res_ids_str": json.dumps(ids_list),
"model_name": self._name
})
return {
'name': '更改创建人',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': res.id,
'res_model': 'roke.update.create.user.wizard'
}
def multiple_assign_workers(self):
# 批量作业人员报工
work_order_id_list = [rec.id for rec in self]
wizard_id = self.env["roke.multiple.assign.workers.wizard"].create({
"word_order_ids": [(6, 0, work_order_id_list)]
})
return {
'name': '批量作业人员报工',
'type': 'ir.actions.act_window',
'view_mode': 'form',
'target': 'new',
'res_id': wizard_id.id,
'res_model': 'roke.multiple.assign.workers.wizard',
}
def update_create_date(self):
# 把 当前 model 的所有数据的 创建时间都更改 为 生产任务创建时间
for order in self:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {order._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.task_id.create_date.date(), time.min).strftime('%Y-%m-%d %H:%M:%S')}',
dispatch_time = '{datetime.combine(order.task_id.create_date.date(), time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {order.id}""")
for assigned_record_id in order.assigned_record_ids:
self.env.cr.execute(f"""UPDATE {assigned_record_id._name.replace(".", "_")}
SET create_date = '{datetime.combine(order.task_id.create_date.date(), time.min).strftime('%Y-%m-%d %H:%M:%S')}'
WHERE id = {assigned_record_id.id}""")
def multiple_update_planned_start_time(self):
"""
批量修改排产时间 为 计划开始时间
"""
for rec in self:
# 更新 create_date 字段
self.env.cr.execute(f"""UPDATE {rec._name.replace(".", "_")}
SET plan_start_time = '{rec.planned_start_time.date().strftime('%Y-%m-%d')}',
plan_stop_time = '{rec.plan_date.date().strftime('%Y-%m-%d')}'
WHERE id = {rec.id}""")
\ No newline at end of file
import random
import datetime
from odoo import api, models, fields
from odoo.exceptions import UserError, ValidationError
import logging
_logger = logging.getLogger(__name__)
class LogSyncHandleModel(models.Model):
_name = "log.sync.handle.model"
_description = "日志生成"
model_name = fields.Char(string="模块名称")
model_type = fields.Char(string="模块类型")
def add_log(self):
if self.model_name == "roke.mes.stock.picking" and self.model_type:
try:
values = self.env[self.model_name].sudo().search([("picking_logotype", "=", self.model_type)])
except:
raise ValidationError("输入模型名字或者类型错误,请重新输入!")
else:
try:
values = self.env[self.model_name].sudo().search([])
except:
raise ValidationError("输入模型错误,请重新输入!")
for value in values:
# if value.state == "确认":
# continue
# 将 状态变为 确认 只有 销售订单 和 采购订单 才需要处理
if self.model_name == "roke.sale.order":
if value.state != "确认":
value.status_confirm()
elif self.model_name == "roke.purchase.order":
if value.state != "确认":
value.make_confirm()
# 更改日志的创建时间 创建人修改 author_id 字段 时间修改 data
mail_messages = self.env["mail.message"].sudo().search(
[("res_id", "=", value.id), ("model", "=", self.model_name)])
for mail_message in mail_messages:
if mail_messages[-1] == mail_message:
mail_message.write({"date": value.create_date})
continue
mail_message.unlink()
# self.env["mail.message"].sudo().create({
# "model": self.model_name,
# "res_id": value.id,
# "author_id": value.create_uid.id,
# "date": value.create_date,
# "body": value._description + " 生成" if value._description else "创建成功",
# })
\ No newline at end of file
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_log_sync_handle_model,log.sync.handle.model.log,model_log_sync_handle_model,base.group_user,1,1,1,1
access_roke_update_create_user_wizard,roke_update_create_user_wizard,model_roke_update_create_user_wizard,base.group_system,1,1,1,1
access_roke_multiple_assign_workers_wizard,roke_multiple_assign_workers_wizard,model_roke_multiple_assign_workers_wizard,base.group_system,1,1,1,1
access_roke_update_stock_order_date_wizard,roke_update_stock_order_date_wizard,model_roke_update_stock_order_date_wizard,base.group_system,1,1,1,1
access_roke_random_stock_order_date_wizard,roke_random_stock_order_date_wizard,model_roke_random_stock_order_date_wizard,base.group_system,1,1,1,1
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_update_create_uid" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_mes_stock_picking"/>
<field name="binding_model_id" ref="model_roke_mes_stock_picking"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="action_update_create_date" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_mes_stock_picking"/>
<field name="binding_model_id" ref="model_roke_mes_stock_picking"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
<record id="action_random_order_date" model="ir.actions.server">
<field name="name">随机单据日期</field>
<field name="model_id" ref="model_roke_mes_stock_picking"/>
<field name="binding_model_id" ref="model_roke_mes_stock_picking"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.random_order_date()
</field>
</record>
<record id="action_update_order_date" model="ir.actions.server">
<field name="name">更改单据日期</field>
<field name="model_id" ref="model_roke_mes_stock_picking"/>
<field name="binding_model_id" ref="model_roke_mes_stock_picking"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_order_date()
</field>
</record>
<record id="action_update_stock_move_line_data" model="ir.actions.server">
<field name="name">更改详细作业数据</field>
<field name="model_id" ref="model_roke_mes_stock_picking"/>
<field name="binding_model_id" ref="model_roke_mes_stock_picking"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_stock_move_line_data()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="update_create_uid" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_production_result"/>
<field name="binding_model_id" ref="model_roke_production_result"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="update_create_date" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_production_result"/>
<field name="binding_model_id" ref="model_roke_production_result"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="update_create_uid_action" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_production_task"/>
<field name="binding_model_id" ref="model_roke_production_task"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="update_create_date_action" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_production_task"/>
<field name="binding_model_id" ref="model_roke_production_task"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
<record id="action_multiple_create_bom_stock_picking" model="ir.actions.server">
<field name="name">批量bom领料</field>
<field name="model_id" ref="model_roke_production_task"/>
<field name="binding_model_id" ref="model_roke_production_task"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.multiple_create_bom_stock_picking()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_update_create_uid_for_purchase" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_purchase_order"/>
<field name="binding_model_id" ref="model_roke_purchase_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="action_update_create_date_for_purchase" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_purchase_order"/>
<field name="binding_model_id" ref="model_roke_purchase_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_update_create_uid_for_sale" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_sale_order"/>
<field name="binding_model_id" ref="model_roke_sale_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="action_update_create_date_for_sale" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_sale_order"/>
<field name="binding_model_id" ref="model_roke_sale_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_update_create_date_for_work_order" model="ir.actions.server">
<field name="name">更新创建时间</field>
<field name="model_id" ref="model_roke_work_order"/>
<field name="binding_model_id" ref="model_roke_work_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_date()
</field>
</record>
<record id="action_update_create_uid_for_work_order" model="ir.actions.server">
<field name="name">批量更新创建用户</field>
<field name="model_id" ref="model_roke_work_order"/>
<field name="binding_model_id" ref="model_roke_work_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.update_create_uid()
</field>
</record>
<record id="action_multiple_assign_workers" model="ir.actions.server">
<field name="name">批量作业人员报工</field>
<field name="model_id" ref="model_roke_work_order"/>
<field name="binding_model_id" ref="model_roke_work_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.multiple_assign_workers()
</field>
</record>
<record id="action_multiple_update_planned_start_time" model="ir.actions.server">
<field name="name">批量修改排产时间</field>
<field name="model_id" ref="model_roke_work_order"/>
<field name="binding_model_id" ref="model_roke_work_order"/>
<field name="type">ir.actions.server</field>
<field name="state">code</field>
<field name="code">
action = records.multiple_update_planned_start_time()
</field>
</record>
</odoo>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_log_sync_handle_model_tree" model="ir.ui.view">
<field name="name">log.sync.handle.model.tree</field>
<field name="model">log.sync.handle.model</field>
<field name="arch" type="xml">
<tree string="日志生成">
<field name="model_name"/>
<field name="create_uid" string="创建人"/>
<field name="create_date" string="创建时间"/>
</tree>
</field>
</record>
<record id="view_log_sync_handle_model_form" model="ir.ui.view">
<field name="name">log.sync.handle.model.form</field>
<field name="model">log.sync.handle.model</field>
<field name="arch" type="xml">
<form string="日志生成">
<group>
<group>
<group>
<field name="model_name"/>
</group>
<group>
<field name="model_type" attrs="{'invisible': [('model_name', '!=', 'roke.mes.stock.picking')]}"/>
</group>
<group>
<button name="add_log" string="日志生成 " type="object" class="oe_highlight"/>
</group>
</group>
<group>
<group>
</group>
<group>
</group>
</group>
</group>
</form>
</field>
</record>
<record id="action_log_sync_handle_model" model="ir.actions.act_window">
<field name="name">日志生成</field>
<field name="res_model">log.sync.handle.model</field>
<field name="view_mode">tree,form</field>
</record>
<menuitem id="log_sync_handle_model_menu"
name="日志生成" sequence="42"
parent="roke_pub_platform.menu"
action="action_log_sync_handle_model"
groups="base.group_system"/>
</odoo>
\ No newline at end of file
from . import roke_update_create_user_wizard
from . import multiple_assign_workers_wizard
from . import roke_update_stock_order_date_wizard
\ No newline at end of file
from odoo import models, fields, api, _
import json
import random
from datetime import datetime, timedelta, time
from odoo.exceptions import ValidationError
class RokeMultipleAssignWorkersWizard(models.TransientModel):
_name = "roke.multiple.assign.workers.wizard"
_description = "批量作业人员报工"
word_order_ids = fields.Many2many("roke.work.order", string="生产工单")
employee_id = fields.Many2one("roke.employee", string="作业人员")
def action_confirm(self):
for word_order_id in self.word_order_ids:
allow_qty, default_qty = word_order_id._get_wo_allow_qty()
if allow_qty <= 0:
raise ValidationError(
f"当前工单{word_order_id.code}可报数量为0,请先完成前道工序。(或联系管理员设置系统【允许自由报工(生产设置)】并【允许超库存报工(物料设置)】")
res = self.env["roke.create.work.record.wizard"].create(
word_order_id._create_work_record_get_values(allow_qty, default_qty, False))
res.employee_id = self.employee_id
res.confirm()
# 修改报工时间
word_order_id.write({"finish_time": datetime.combine(word_order_id.plan_date, time.min)})
# 修改报工记录的数据
record_ids = word_order_id.record_ids
for record_id in record_ids:
# 更新 create_date 等字段 TODO 创建人 要看下怎么改
self.env.cr.execute(f"""UPDATE {record_id._name.replace(".", "_")}
SET create_date = '{datetime.combine(word_order_id.create_date.date(), time.min).strftime("%Y-%m-%d %H:%M:%S")}',
work_time='{datetime.combine(word_order_id.plan_date, time.min).strftime("%Y-%m-%d %H:%M:%S")}'
WHERE id = {record_id.id}""")
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="roke_multiple_assign_workers_wizard_form" model="ir.ui.view">
<field name="name">roke.multiple.assign.workers.wizard.form</field>
<field name="model">roke.multiple.assign.workers.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<field name="employee_id"/>
</group>
<footer>
<button name="action_confirm" string="确认" type="object" class="oe_highlight"/>
<button string="取消" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="roke_multiple_assign_workers_wizard_action" model="ir.actions.act_window">
<field name="name">批量指派作业人员且报工</field>
<field name="res_model">roke.multiple.assign.workers.wizard</field>
<field name="view_mode">form</field>
<field name="type">ir.actions.act_window</field>
<field name="target">new</field>
</record>
</odoo>
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="roke_random_stock_order_date_wizard_form" model="ir.ui.view">
<field name="name">roke.random.stock.order.date.wizard.form</field>
<field name="model">roke.random.stock.order.date.wizard</field>
<field name="arch" type="xml">
<form>
<group>
<group>
<field name="start_value"/>
</group>
<group>
<field name="end_value"/>
</group>
</group>
<footer>
<button name="action_confirm" string="确认" type="object" class="oe_highlight"/>
<button string="取消" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="view_roke_random_stock_order_date_wizard_action" model="ir.actions.act_window">
<field name="name">随机更新单据日期</field>
<field name="res_model">roke.random.stock.order.date.wizard</field>
<field name="view_mode">form</field>
<field name="type">ir.actions.act_window</field>
<field name="target">new</field>
</record>
</odoo>
from odoo import models, fields, api, _
import json
class RokeUpdateCreateUserWizard(models.TransientModel):
_name = "roke.update.create.user.wizard"
_description = "更新创建用户"
res_ids_str = fields.Char(string="来源ids")
model_name = fields.Char(string="模型名称")
user_id = fields.Many2one("res.users", string="用户")
def action_confirm(self):
res_ids_list = json.loads(self.res_ids_str)
res_ids = self.env[self.model_name].sudo().search([("id", "in", res_ids_list)])
for res_id in res_ids:
# # 更新 create_uid 字段
self.env.cr.execute(f"""
UPDATE {self.model_name.replace(".", "_")}
SET create_uid = {self.user_id.id}
WHERE id = {res_id.id}
""")
# 刷新缓存
# res_id.invalidate_cache()
# res_id.sudo().write({"create_uid": self.user_id.id})
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="roke_update_create_user_wizard_form" model="ir.ui.view">
<field name="name">roke.update.create.user.wizard.form</field>
<field name="model">roke.update.create.user.wizard</field>
<field name="arch" type="xml">
<form>
<group>
</group>
<group>
<field name="user_id"/>
</group>
<footer>
<button name="action_confirm" string="确认" type="object" class="oe_highlight"/>
<button string="取消" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="view_roke_update_create_user_wizard_action" model="ir.actions.act_window">
<field name="name">更新创建用户</field>
<field name="res_model">roke.update.create.user.wizard</field>
<field name="view_mode">form</field>
<field name="type">ir.actions.act_window</field>
<field name="target">new</field>
</record>
</odoo>
from odoo import models, fields, api, _
import json
import random
from datetime import datetime, timedelta, time
from odoo.exceptions import ValidationError
class RokeUpdateStockOrderDateWizard(models.TransientModel):
_name = "roke.update.stock.order.date.wizard"
_description = "更新单据日期"
stock_ids = fields.Many2many("roke.mes.stock.picking", string="调拨单")
def action_confirm(self):
pass
class RokeRandomStockOrderDateWizard(models.TransientModel):
_name = "roke.random.stock.order.date.wizard"
_description = "随机更新单据日期"
stock_ids = fields.Many2many("roke.mes.stock.picking", string="调拨单")
start_value = fields.Integer(string="开始天数", default=0, required=True)
end_value = fields.Integer(string="结束天数", default=0, required=True)
def action_confirm(self):
if self.start_value > self.end_value:
raise ValidationError("开始天数不能大于结束天数!")
random_value = random.randint(self.start_value, self.end_value)
# 只有 采购入库单 和 销售收货单 可以随机更新单据日期
for stock_id in self.stock_ids:
if stock_id.picking_type_id.picking_logotype == "XSCKD":
# 销售收货单
sale_order_date = stock_id.sale_id.order_date
stock_id.write({"picking_date": sale_order_date + timedelta(days=random_value)})
elif stock_id.picking_type_id.picking_logotype == "CGRKD":
# 采购入库单
purchase_order_date = stock_id.purchase_id.order_date
stock_id.write({"picking_date": purchase_order_date + timedelta(days=random_value)})
elif stock_id.picking_type_id.picking_logotype == "SCLLD":
# 生产领料单
task_code = stock_id.origin
task_id = self.env["roke.production.task"].sudo().search([("code", "=", task_code)])
if task_id:
task_id_create_date = task_id.create_date.date()
stock_id.write({"picking_date": task_id_create_date + timedelta(days=random_value)})
else:
raise ValidationError("来源单据异常!")
elif stock_id.picking_type_id.picking_logotype == "SCRKD":
# 生产入库单 去拿 产出明细的创建时间
move_line_ids = stock_id.move_line_ids
for move_line_id in move_line_ids:
result_move_id = move_line_id.result_move_id
if result_move_id and result_move_id.result_id:
# 产出物 明细 的创建时间
production_result_create_date = result_move_id.result_id.create_date.date()
stock_id.write({"picking_date": production_result_create_date + timedelta(days=random_value)})
else:
raise ValidationError("单据异常!")
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="roke_update_stock_order_date_wizard_form" model="ir.ui.view">
<field name="name">roke.update.stock.order.date.wizard.form</field>
<field name="model">roke.update.stock.order.date.wizard</field>
<field name="arch" type="xml">
<form>
<notebook>
<page string="单据数据">
<field name="stock_ids">
<tree editable="bottom" create="0" delete="0">
<field name="id" invisible="1"/>
<field name="code" readonly="1"/>
<field name="picking_date"/>
</tree>
</field>
</page>
</notebook>
<footer>
<button name="action_confirm" string="确认" type="object" class="oe_highlight"/>
<button string="取消" class="oe_link" special="cancel"/>
</footer>
</form>
</field>
</record>
<record id="view_roke_update_stock_order_date_wizard_action" model="ir.actions.act_window">
<field name="name">更新单据日期</field>
<field name="res_model">roke.update.stock.order.date.wizard</field>
<field name="view_mode">form</field>
<field name="type">ir.actions.act_window</field>
<field name="target">new</field>
</record>
</odoo>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment