删除制造订单处排程相关的部分,排程模块架构改造完成

This commit is contained in:
mgw
2023-08-25 10:43:22 +08:00
parent eda57036bd
commit 7e071151a8
5 changed files with 236 additions and 251 deletions

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api, _
from datetime import datetime, timedelta
from odoo.exceptions import UserError, ValidationError
# sf排程
@@ -16,10 +17,39 @@ class sf_production_plan(models.Model):
current_operation_name = fields.Char(string='当前工序名称', size=64, default='生产计划')
production_line_id = fields.Many2one('sf.production.line', string='生产线')
# state = fields.Selection([
# ('未排程', '未排程'), ('已排程', '已排程')], string='State', copy=False, index=True, readonly=True,
# store=True, tracking=True)
# 当不设置计划结束时间时,增加计算计划结束时间的方法,根据采购周期加缓冲期两个值来算就可以了
def action_view_production_schedule(self):
self.ensure_one()
if self.date_planned_start and self.date_planned_finished:
return None
elif self.date_planned_start and not self.date_planned_finished:
# 如果没有给出计划结束时间,则计划结束时间为计划开始时间+采购周期+缓冲期
# 采购周期
purchase_cycle = 3
# 缓冲期
buffer_period = 1
# 计划结束时间 = 计划开始时间 + 采购周期 + 缓冲期
self.date_planned_finished = self.date_planned_start + timedelta(days=purchase_cycle) + timedelta(
days=buffer_period)
self.state = '已排程'
return self.date_planned_finished
else:
return None
def cancel_plan(self):
self.ensure_one()
self.date_planned_finished = None
self.state = 'confirmed'
@api.model
def create(self, vals):
if 'sequence' not in vals:
vals['sequence'] = self.env['sf.pl.plan'].search_count([]) + 1
vals['sequence'] = self.env['sf.production.plan'].search_count([]) + 1
return super().create(vals)
def unlink(self):
@@ -32,7 +62,7 @@ class sf_production_plan(models.Model):
# 生成编码
def _get_pl_no(self):
sf_pl_no = self.env['sf.pl.plan'].sudo().search(
sf_pl_no = self.env['sf.production.plan'].sudo().search(
[('pl_no', '!=', '')],
limit=1,
order="id desc")
@@ -56,57 +86,67 @@ class sf_production_plan(models.Model):
return num
pl_no = fields.Char(string='坯料编号', required=True, default=_get_pl_no, readonly=True)
pl_name = fields.Char(string='坯料名称', size=64, required=True)
material = fields.Many2one('sf.production.materials', string='材质', required=True)
# pl_no = fields.Char(string='坯料编号', required=True, default=_get_pl_no, readonly=True)
# pl_name = fields.Char(string='坯料名称', size=64, required=True)
# material = fields.Many2one('sf.production.materials', string='材质', required=True)
quantity = fields.Float(string='数量', required=True)
length = fields.Float(string='长度', required=True)
width = fields.Float(string='宽度', required=True)
thickness = fields.Float(string='厚度', required=True)
diameter = fields.Float(string='直径', required=True)
# length = fields.Float(string='长度', required=True)
# width = fields.Float(string='宽度', required=True)
# thickness = fields.Float(string='厚度', required=True)
# diameter = fields.Float(string='直径', required=True)
plan_start_time = fields.Datetime(string='计划开始时间')
plan_end_time = fields.Datetime(string='计划结束时间')
state = fields.Selection([
('draft', '产出'),
('produce', '产出'),
('draft', '排程'),
('produce', '排程'),
('done', '已产出'),
], string='状态', copy=False, index=True, default='draft')
customer_name = fields.Char(string='客户名称', size=64)
order_no = fields.Char(string='订单号', size=64)
line_no = fields.Char(string='行号', size=64)
delivery_length = fields.Float(string='交货长度')
delivery_width = fields.Float(string='交货宽度')
delivery_thickness = fields.Float(string='交货厚度')
delivery_diameter = fields.Float(string='交货直径')
delivery_quantity = fields.Float(string='交货数量')
delivery_date = fields.Datetime(string='交货日期', related='plan_end_time', readonly=False, store=True)
# customer_name = fields.Char(string='客户名称', size=64)
# order_no = fields.Char(string='订单号', size=64)
# line_no = fields.Char(string='行号', size=64)
# delivery_length = fields.Float(string='交货长度')
# delivery_width = fields.Float(string='交货宽度')
# delivery_thickness = fields.Float(string='交货厚度')
# delivery_diameter = fields.Float(string='交货直径')
# delivery_quantity = fields.Float(string='交货数量')
# delivery_date = fields.Datetime(string='交货日期', related='plan_end_time', readonly=False, store=True)
# 当不设置计划结束时间时,增加计算计划结束时间的方法,根据采购周期加缓冲期两个值来算就可以了
def get_plan_end_time(self):
if self.plan_start_time and self.plan_end_time:
return None
elif self.plan_start_time and not self.plan_end_time:
# 如果没有给出计划结束时间,则计划结束时间为计划开始时间+采购周期+缓冲期
# 采购周
purchase_cycle = 3
# 缓冲期
buffer_period = 1
# 计划结束时间 = 计划开始时间 + 采购周期 + 缓冲期
self.plan_end_time = self.plan_start_time + timedelta(days=purchase_cycle) + timedelta(days=buffer_period)
return self.plan_end_time
def do_production_schedule(self):
if self.production_line_id:
if self.plan_start_time and self.plan_end_time:
return None
elif self.plan_start_time and not self.plan_end_time:
# 如果没有给出计划结束时间,则计划结束时间为计划开始时间+采购周期+缓冲
# 采购周期
purchase_cycle = 3
# 缓冲期
buffer_period = 1
# 计划结束时间 = 计划开始时间 + 采购周期 + 缓冲期
self.plan_end_time = self.plan_start_time + timedelta(days=purchase_cycle) + timedelta(days=buffer_period)
self.state = 'produce'
return self.plan_end_time
else:
return None
# 后面要补充计划开始时间的计算方法
# # 坯料预制时间
# # pl_time = 0.5
# # 采购周期
# purchase_cycle = 3
# # 缓冲期
# buffer_period = 1
# # 计划结束时间 = 计划开始时间 + 坯料预制时间 + 采购周期 + 缓冲期
# # plan_end_time = plan_start_time + pl_time + purchase_cycle + buffer_period
# # 计划结束时间 = 计划开始时间(是一个datatime) + 采购周期(Float) + 缓冲期(Float)
# self.plan_end_time = self.plan_start_time + timedelta(days=purchase_cycle) + timedelta(days=buffer_period)
# return self.plan_end_time
else:
return None
# 后面要补充计划开始时间的计算方法
# # 坯料预制时间
# # pl_time = 0.5
# # 采购周期
# purchase_cycle = 3
# # 缓冲期
# buffer_period = 1
# # 计划结束时间 = 计划开始时间 + 坯料预制时间 + 采购周期 + 缓冲期
# # plan_end_time = plan_start_time + pl_time + purchase_cycle + buffer_period
# # 计划结束时间 = 计划开始时间(是一个datatime) + 采购周期(Float) + 缓冲期(Float)
# self.plan_end_time = self.plan_start_time + timedelta(days=purchase_cycle) + timedelta(days=buffer_period)
# return self.plan_end_time
raise ValidationError('生产线为空!')
def cancel_production_schedule(self):
self.plan_end_time = False
self.state = 'draft'
return self.plan_end_time
# # sf生产排程
# class sf_produce_plan(models.Model):