Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/新增工件装夹预调工单任务

# Conflicts:
#	sf_manufacturing/views/mrp_production_addional_change.xml
This commit is contained in:
jinling.yang
2024-01-24 14:39:47 +08:00
7 changed files with 147 additions and 11 deletions

View File

@@ -33,6 +33,7 @@ class Sf_Bf_Connect(http.Controller):
aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)]) aa = request.env['sale.order'].sudo().search([('name', '=', order_id.name)])
logging.info('get_bfm_process_or===================================:%s' % order_id.name) logging.info('get_bfm_process_or===================================:%s' % order_id.name)
aa.default_code = kw['order_number'] aa.default_code = kw['order_number']
aa.logistics_way = kw['logistics_way']
logging.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code) logging.info('get_bfm_process_order_listaaaaaaaaaaaaaaaaaaaaaaaaaaaa================:%s' % aa.default_code)
for item in bfm_process_order_list: for item in bfm_process_order_list:
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,

View File

@@ -42,6 +42,25 @@ class JdEclp(models.Model):
# bill_show = fields.Binary(string='物流面单展示', readonly=True, related='self.bill.datas') # bill_show = fields.Binary(string='物流面单展示', readonly=True, related='self.bill.datas')
bill_show = fields.Binary(string='物流面单展示', readonly=True) bill_show = fields.Binary(string='物流面单展示', readonly=True)
check_out = fields.Char(string='查询是否为出库单', compute='_check_is_out') check_out = fields.Char(string='查询是否为出库单', compute='_check_is_out')
# 是否下了快递单
is_bill = fields.Boolean(string='是否下了快递单', default=False)
# 物流状态
logistics_status = fields.Selection([('0', '未下单'), ('1', '已下单'), ('2', '已获取物流面单'), ('3', '已打印物流单')],
string='物流状态', default='0', readonly=True)
logistics_way = fields.Selection([('自提', '自提'), ('到付', '到付'), ('在线支付', '在线支付')], string='物流方式', readonly=True)
def button_validate(self):
"""
重写出库方法,获取物流面单
"""
res = super(JdEclp, self).button_validate()
if self.check_out == 'OUT':
if self.logistics_way != '自提':
if self.logistics_status != '3':
raise ValidationError('非自提订单,必须先下物流单,并获取物流面单后才可出库!')
return res
@api.depends('name') @api.depends('name')
def _check_is_out(self): def _check_is_out(self):
@@ -68,6 +87,7 @@ class JdEclp(models.Model):
# if self.receiverName and self.receiverMobile and self.receiverProvinceName and self.receiverCityName and # if self.receiverName and self.receiverMobile and self.receiverProvinceName and self.receiverCityName and
# self.receiverCountyName and self.receiverTownName: # self.receiverCountyName and self.receiverTownName:
sale_order_id = self.env['sale.order'].search([('name', '=', self.origin)]) sale_order_id = self.env['sale.order'].search([('name', '=', self.origin)])
self.logistics_way = sale_order_id.logistics_way
# stock_picking_type_id = self.enc['stock.picking.type'].search([('picking_type_id', '=', '')]) # stock_picking_type_id = self.enc['stock.picking.type'].search([('picking_type_id', '=', '')])
# if sale_order_id.address_of_delivery != False: # if sale_order_id.address_of_delivery != False:
# if not sale_order_id: # if not sale_order_id:
@@ -141,6 +161,8 @@ class JdEclp(models.Model):
response = requests.post(url2, json=json2, data=None) response = requests.post(url2, json=json2, data=None)
# _logger.info('调用成功2', response.json()['result']['wbNo']) # _logger.info('调用成功2', response.json()['result']['wbNo'])
self.carrier_tracking_ref = response.json()['result']['wbNo'] self.carrier_tracking_ref = response.json()['result']['wbNo']
self.is_bill = True
self.logistics_status = '1'
# else: # else:
# raise UserError("选择京东物流才能下单呦") # raise UserError("选择京东物流才能下单呦")
@@ -180,3 +202,4 @@ class JdEclp(models.Model):
# 'model_name': 'stock.picking', # 'model_name': 'stock.picking',
}) })
_logger.info(attachment) _logger.info(attachment)
self.logistics_status = '2'

View File

@@ -12,16 +12,30 @@
</field> </field>
</record> </record>
<!-- <record id="sf_bf_connect_vpicktree" model="ir.ui.view"> -->
<!-- <field name="name">sf.bf.connect.vpicktree</field> -->
<!-- <field name="model">stock.picking</field> -->
<!-- <field name="inherit_id" ref="stock.vpicktree"/> -->
<!-- <field name="arch" type="xml"> -->
<!-- <field name="state" position="after"> -->
<!-- <field name="logistics_status" string="物流状态"/> -->
<!-- </field> -->
<!-- </field> -->
<!-- </record> -->
<record id="custom_view_picking_form" model="ir.ui.view"> <record id="custom_view_picking_form" model="ir.ui.view">
<field name="name">物流</field> <field name="name">物流</field>
<field name="model">stock.picking</field> <field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/> <field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//form//header//button[@name='action_assign']" position="after"> <xpath expr="//form//header//button[@name='action_assign']" position="after">
<field name="is_bill" invisible="True"/>
<field name="logistics_status" invisible="True"/>
<field name="logistics_way" invisible="True"/>
<button string="京东物流下单" name="create_order" type="object" confirm="是否确认物流下单" class="btn-primary" <button string="京东物流下单" name="create_order" type="object" confirm="是否确认物流下单" class="btn-primary"
attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> attrs="{'invisible': ['|', '|', '|', ('check_out', '!=', 'OUT'), ('state', '!=', 'assigned'), ('is_bill', '=', True), ('logistics_way', '=', '自提')]}"/>
<button string="获取物流面单" name="get_bill" type="object" confirm="是否获取物流面单" class="btn-primary" <button string="获取物流面单" name="get_bill" type="object" confirm="是否获取物流面单" class="btn-primary"
attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> attrs="{'invisible': ['|', '|', '|', '|', ('check_out', '!=', 'OUT'), ('state', '!=', 'assigned'), ('logistics_status', '=', '2'), ('is_bill', '=', False), ('logistics_way', '=', '自提')]}"/>
</xpath> </xpath>
</field> </field>
</record> </record>
@@ -31,6 +45,12 @@
<field name="model">stock.picking</field> <field name="model">stock.picking</field>
<field name="inherit_id" ref="delivery.view_picking_withcarrier_out_form"/> <field name="inherit_id" ref="delivery.view_picking_withcarrier_out_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<field name="location_id" position="after">
<field name="logistics_status" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
<field name="logistics_way" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
</field>
<xpath expr="//group//field[@name='carrier_id']" position="after"> <xpath expr="//group//field[@name='carrier_id']" position="after">
<!-- <field name="senderNickName" domain="[('self.name', 'like', '%OUT%')]"/> --> <!-- <field name="senderNickName" domain="[('self.name', 'like', '%OUT%')]"/> -->
<field name="senderNickName" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> <field name="senderNickName" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
@@ -48,6 +68,7 @@
<field name="grossVolume" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> <field name="grossVolume" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
<field name="pickupBeginTime" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> <field name="pickupBeginTime" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
<field name="bill_show" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> <field name="bill_show" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>
<field name="logistics_status"/>
</xpath> </xpath>
<xpath expr="//group//field[@name='group_id']" position="after"> <xpath expr="//group//field[@name='group_id']" position="after">
<field name="bill_show" widget="pdf_viewer" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/> <field name="bill_show" widget="pdf_viewer" attrs="{'invisible': [('check_out', '!=', 'OUT')]}"/>

View File

@@ -15,7 +15,8 @@ access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equi
access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equipment_manager,1,1,1,0 access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equipment_manager,1,1,1,0
access_maintenance_request_group_plan_dispatch,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0 access_maintenance_system_user,equipment.request system user,maintenance.model_maintenance_request,base.group_user,1,0,0,0
access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0 access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0
access_sf_maintenance_logs_group_plan_dispatch,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0 access_sf_maintenance_logs_group_plan_dispatch,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0
access_maintenance_standard_image_group_plan_dispatch,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0 access_maintenance_standard_image_group_plan_dispatch,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
15 access_sf_robot_axis_num sf_robot_axis_num model_sf_robot_axis_num sf_group_equipment_manager 1 1 1 0
16 access_maintenance_request_group_plan_dispatch access_maintenance_system_user maintenance.request equipment.request system user maintenance.model_maintenance_request sf_base.group_plan_dispatch base.group_user 1 0 0 0
17 access_maintenance_equipment_group_plan_dispatch maintenance.equipment maintenance.model_maintenance_equipment sf_base.group_plan_dispatch 1 0 0 0
18 access_sf_maintenance_logs_group_plan_dispatch sf_maintenance_logs model_sf_maintenance_logs sf_base.group_plan_dispatch 1 0 0 0
19 access_maintenance_standard_image_group_plan_dispatch maintenance_standard_image model_maintenance_standard_image sf_base.group_plan_dispatch 1 0 0 0
20 access_maintenance_standard_image_group_plan_dispatch access_equipment_maintenance_standards_group_plan_dispatch maintenance_standard_image equipment_maintenance_standards model_maintenance_standard_image model_equipment_maintenance_standards sf_base.group_plan_dispatch 1 0 0 0
21 access_equipment_maintenance_standards_group_plan_dispatch access_maintenance_standards_group_plan_dispatch equipment_maintenance_standards maintenance_standards model_equipment_maintenance_standards model_maintenance_standards sf_base.group_plan_dispatch 1 0 0 0
22 access_maintenance_standards_group_plan_dispatch access_sf_robot_axis_num_group_plan_dispatch maintenance_standards sf.robot.axis.num model_maintenance_standards model_sf_robot_axis_num sf_base.group_plan_dispatch 1 0 0 0

View File

@@ -11,5 +11,18 @@
<field name="perm_create">False</field> <field name="perm_create">False</field>
<field name="perm_unlink">False</field> <field name="perm_unlink">False</field>
</record> </record>
<!-- 对维保计划做“最小权限”控制,计划调度岗只能看到所有的维保计划,不能修改,不能删除,不能创建 -->
<record id="maintenance_request_rule_plan_dispatch" model="ir.rule">
<field name="name">Maintenance Request Plan Dispatch Rule</field>
<field name="model_id" ref="maintenance.model_maintenance_request"/>
<field name="groups" eval="[(4, ref('sf_base.group_plan_dispatch'))]"/>
<!-- <field name="domain_force">['|',('user_id','=',user.id),('user_id','=',False)]</field> -->
<field name="perm_read">True</field>
<field name="perm_write">False</field>
<field name="perm_create">False</field>
<field name="perm_unlink">False</field>
</record>
</data> </data>
</odoo> </odoo>

View File

@@ -85,7 +85,7 @@
<xpath expr="(//header//button[@name='button_mark_done'])[2]" position="replace"> <xpath expr="(//header//button[@name='button_mark_done'])[2]" position="replace">
<button name="button_mark_done" <button name="button_mark_done"
attrs="{'invisible': ['|', '|', ('state', 'in', ('draft', 'cancel', 'done', 'to_close')), ('qty_producing', '=', 0), ('move_raw_ids', '=', [])]}" attrs="{'invisible': ['|', '|', ('state', 'in', ('draft', 'cancel', 'done', 'to_close')), ('qty_producing', '=', 0), ('move_raw_ids', '=', [])]}"
string="Validate" type="object" class="oe_highlight" data-hotkey="g" string="验证" type="object" class="oe_highlight" data-hotkey="g"
groups="sf_base.group_sf_mrp_user"/> groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
<xpath expr="(//header//button[@name='button_mark_done'])[3]" position="replace"> <xpath expr="(//header//button[@name='button_mark_done'])[3]" position="replace">
@@ -96,7 +96,7 @@
'|', '|',
('state', 'not in', ('confirmed', 'progress')), ('state', 'not in', ('confirmed', 'progress')),
('qty_producing', '!=', 0), ('qty_producing', '!=', 0),
('state', '!=', 'to_close')]}" string="Mark as Done" type="object" class="oe_highlight" ('state', '!=', 'to_close')]}" string="标记完成" type="object" class="oe_highlight"
data-hotkey="g" groups="sf_base.group_sf_mrp_user"/> data-hotkey="g" groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
<xpath expr="(//header//button[@name='button_mark_done'])[4]" position="replace"> <xpath expr="(//header//button[@name='button_mark_done'])[4]" position="replace">
@@ -107,7 +107,7 @@
'|', '|',
('state', 'not in', ('confirmed', 'progress')), ('state', 'not in', ('confirmed', 'progress')),
('qty_producing', '!=', 0), ('qty_producing', '!=', 0),
('state', '!=', 'to_close')]}" string="Mark as Done" type="object" class="oe_highlight" ('state', '!=', 'to_close')]}" string="标记完成" type="object" class="oe_highlight"
data-hotkey="g" data-hotkey="g"
confirm="There are no components to consume. Are you still sure you want to continue?" confirm="There are no components to consume. Are you still sure you want to continue?"
groups="sf_base.group_sf_mrp_user"/> groups="sf_base.group_sf_mrp_user"/>
@@ -125,7 +125,7 @@
<xpath expr="//header//button[@name='action_confirm']" position="replace"> <xpath expr="//header//button[@name='action_confirm']" position="replace">
<button name="action_confirm" attrs="{'invisible': [('state', '!=', 'draft')]}" string="Confirm" <button name="action_confirm" attrs="{'invisible': [('state', '!=', 'draft')]}" string="确认"
type="object" class="oe_highlight" data-hotkey="v" groups="sf_base.group_sf_mrp_user"/> type="object" class="oe_highlight" data-hotkey="v" groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
@@ -179,12 +179,59 @@
</xpath> </xpath>
<xpath expr="//header//button[@name='button_unbuild']" position="replace"> <xpath expr="//header//button[@name='button_unbuild']" position="replace">
<button name="button_unbuild" type="object" string="Unbuild" <button name="button_unbuild" type="object" string="拆单"
attrs="{'invisible': [('state', '!=', 'done')]}" data-hotkey="shift+v" attrs="{'invisible': [('state', '!=', 'done')]}" data-hotkey="shift+v"
groups="sf_base.group_sf_mrp_user"/> groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
<xpath expr="//header//button[@name='button_plan']" position="replace">
<!-- <button name="button_plan" attrs="{'invisible': ['|', '|', ('state', 'not in', ('confirmed', 'progress', 'to_close')), ('workorder_ids', '=', []), ('is_planned', '=', True)]}" type="object" string="Plan" class="oe_highlight" data-hotkey="x" groups="sf_base.group_sf_mrp_user"/> -->
</xpath>
<xpath expr="//header//button[@name='action_assign']" position="replace">
<button name="action_assign"
attrs="{'invisible': ['|', ('state', 'in', ('draft', 'done', 'cancel')), ('reserve_visible', '=', False)]}"
string="检查可用量" type="object" data-hotkey="q" groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//header//button[@name='do_unreserve']" position="replace">
<button name="do_unreserve" type="object" string="取消保留"
attrs="{'invisible': [('unreserve_visible', '=', False)]}" data-hotkey="w"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//header//button[@name='action_toggle_is_locked']" position="replace">
<button name="action_toggle_is_locked"
attrs="{'invisible': ['|', ('show_lock', '=', False), ('is_locked', '=', False)]}"
string="取消阻塞" groups="sf_base.group_sf_mrp_user" type="object"
help="Unlock the manufacturing order to adjust what has been consumed or produced."
data-hotkey="l"/>
</xpath>
<xpath expr="//header//button[@name='action_toggle_is_locked']" position="replace">
<button name="action_toggle_is_locked"
attrs="{'invisible': ['|', ('show_lock', '=', False), ('is_locked', '=', True)]}"
string="阻塞" groups="sf_base.group_sf_mrp_user" type="object"
help="Lock the manufacturing order to prevent changes to what has been consumed or produced."
data-hotkey="l"/>
</xpath>
<xpath expr="//header//button[@name='action_serial_mass_produce_wizard']" position="replace">
<button name="action_serial_mass_produce_wizard"
attrs="{'invisible': [('show_serial_mass_produce', '=', False)]}" string="批量生产"
type="object" groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//header//button[@name='action_cancel']" position="replace">
<button name="action_cancel" type="object" string="取消" data-hotkey="z"
attrs="{'invisible': ['|', '|', ('id', '=', False), ('state', 'in', ('done', 'cancel')), ('confirm_cancel', '=', False)]}"
confirm="Some product moves have already been confirmed, this manufacturing order can't be completely cancelled. Are you still sure you want to process ?"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//header//button[@name='button_unbuild']" position="replace">
<button name="button_unbuild" type="object" string="拆单"
attrs="{'invisible': [('state', '!=', 'done')]}" data-hotkey="shift+v"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
</field> </field>
</record> </record>
@@ -195,7 +242,7 @@
<field name="inherit_id" ref="mrp.mrp_production_workorder_tree_editable_view"/> <field name="inherit_id" ref="mrp.mrp_production_workorder_tree_editable_view"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//tree//button[@name='button_start']" position="replace"> <xpath expr="//tree//button[@name='button_start']" position="replace">
<button name="button_start" type="object" string="Start" class="btn-success" <button name="button_start" type="object" string="开始" class="btn-success"
attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')), ('is_user_working', '!=', False)]}" attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')), ('is_user_working', '!=', False)]}"
groups="sf_base.group_sf_mrp_user"/> groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
@@ -225,8 +272,38 @@
<button name="action_open_wizard" type="object" icon="fa-external-link" class="oe_edit_only" <button name="action_open_wizard" type="object" icon="fa-external-link" class="oe_edit_only"
title="Open Work Order" title="Open Work Order"
context="{'default_workcenter_id': workcenter_id}" groups="sf_base.group_sf_mrp_user"/> context="{'default_workcenter_id': workcenter_id}" groups="sf_base.group_sf_mrp_user"/>
=======
<button name="button_start" type="object" string="开始" class="btn-success"
attrs="{'invisible': ['|', '|', '|', ('production_state','in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('state', 'in', ('done', 'cancel')), ('is_user_working', '!=', False)]}"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//tree//button[@name='button_pending']" position="replace">
<button name="button_pending" type="object" string="暂停" class="btn-warning"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//tree//button[@name='button_finish']" position="replace">
<button name="button_finish" type="object" string="完成" class="btn-success"
attrs="{'invisible': ['|', '|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked'), ('is_user_working', '=', False)]}"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//tree//button[@name='%(mrp.act_mrp_block_workcenter_wo)d']" position="replace">
<button name="%(mrp.act_mrp_block_workcenter_wo)d" type="action" string="阻塞"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
attrs="{'invisible': ['|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '=', 'blocked')]}"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//tree//button[@name='button_unblock']" position="replace">
<button name="button_unblock" type="object" string="取消阻塞"
context="{'default_workcenter_id': workcenter_id}" class="btn-danger"
attrs="{'invisible': ['|', ('production_state', 'in', ('draft', 'done', 'cancel')), ('working_state', '!=', 'blocked')]}"
groups="sf_base.group_sf_mrp_user"/>
</xpath>
<xpath expr="//tree//button[@name='action_open_wizard']" position="replace">
<button name="action_open_wizard" type="object" icon="fa-external-link" class="oe_edit_only"
title="未完成工单"
context="{'default_workcenter_id': workcenter_id}" groups="sf_base.group_sf_mrp_user"/>
</xpath> </xpath>
</field> </field>
</record> </record>

View File

@@ -7,6 +7,7 @@ from odoo.exceptions import UserError
class ReSaleOrder(models.Model): class ReSaleOrder(models.Model):
_inherit = 'sale.order' _inherit = 'sale.order'
logistics_way = fields.Selection([('自提', '自提'), ('到付', '到付'), ('在线支付', '在线支付')], string='物流方式')
state = fields.Selection( state = fields.Selection(
selection=[ selection=[
('draft', "报价"), ('draft', "报价"),
@@ -19,7 +20,6 @@ class ReSaleOrder(models.Model):
readonly=True, copy=False, index=True, readonly=True, copy=False, index=True,
tracking=3, tracking=3,
default='draft') default='draft')
deadline_of_delivery = fields.Date('订单交期', tracking=True) deadline_of_delivery = fields.Date('订单交期', tracking=True)
person_of_delivery = fields.Char('交货人') person_of_delivery = fields.Char('交货人')
telephone_of_delivery = fields.Char('交货人电话号码') telephone_of_delivery = fields.Char('交货人电话号码')