diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 23c659f5..70cfa2a0 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -62,7 +62,6 @@ class ResProductMo(models.Model): tool_thickness = fields.Float('厚度(mm)') tool_weight = fields.Float('重量(kg)') tool_hardness = fields.Integer('硬度(hrc)') - coating_material = fields.Char('涂层材质') # 整体式刀具特有字段 cutting_tool_total_length = fields.Float('总长度(mm)', digits=(6, 1)) @@ -262,7 +261,7 @@ class ResProductMo(models.Model): self.cutting_tool_top_angle = self.specification_id.top_angle self.cutting_tool_screw = self.specification_id.screw self.cutting_tool_wrench = self.specification_id.wrench - self.cutting_tool_blade_id = self.specification_id.blade_id + self.cutting_tool_blade_id = self.specification_id.blade_id.id self.cutting_tool_is_cooling_hole = self.specification_id.is_cooling_hole self.cutting_tool_locating_slot_code = self.specification_id.locating_slot_code self.cutting_tool_install_blade_tip_num = self.specification_id.install_blade_tip_num diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index c32bde08..f49b4906 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -81,6 +81,25 @@ class ReSaleOrder(models.Model): } return self.env['sale.order.line'].create(vals) + @api.constrains('order_line') + def check_order_line(self): + for item in self: + if not item.order_line: + raise UserError('请选择【订单行】中的【产品】') + for line in item.order_line: + if not line.product_template_id: + raise UserError('请对【订单行】中的【产品】进行选择') + if not line.name: + raise UserError('请对【订单行】中的【说明】进行输入') + if line.product_qty == 0: + raise UserError('请对【订单行】中的【数量】进行输入') + if not line.product_uom: + raise UserError('请对【订单行】中的【计量单位】进行选择') + if line.price_unit == 0: + raise UserError('请对【订单行】中的【单价】进行输入') + if not line.taxes_id: + raise UserError('请对【订单行】中的【税】进行选择') + class ResaleOrderLine(models.Model): _inherit = 'sale.order.line' @@ -95,6 +114,28 @@ class RePurchaseOrder(models.Model): check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态') remark = fields.Text('备注') + def button_confirming(self): + self.write({'state': 'purchase', 'check_status': 'pending'}) + + @api.constrains('order_line') + def check_order_line(self): + for item in self: + if not item.order_line: + raise UserError('该询价单未添加【产品】,请进行添加') + for line in item.order_line: + if not line.product_id: + raise UserError('【产品】未添加,请进行添加') + if not line.name: + raise UserError('请对【产品】中的【说明】进行输入') + if line.product_qty == 0: + raise UserError('请对【产品】中的【数量】进行输入') + if not line.product_uom: + raise UserError('请对【产品】中的【计量单位】进行选择') + if line.price_unit == 0: + raise UserError('请对【产品】中的【单价】进行输入') + if not line.taxes_id: + raise UserError('请对【产品】中的【税】进行选择') + def write(self, vals): if self.env.user.has_group('sf_base.group_purchase_director'): if vals.get('check_status'): @@ -103,9 +144,19 @@ class RePurchaseOrder(models.Model): return super().write(vals) def button_confirm(self): - self.check_status = 'pending' - res = super().button_confirm() - return res + for order in self: + if order.state not in ['draft', 'sent', 'purchase']: + continue + order.order_line._validate_analytic_distribution() + order._add_supplier_to_product() + # Deal with double validation process + if order._approval_allowed(): + order.button_approve() + else: + order.write({'state': 'to approve'}) + if order.partner_id not in order.message_partner_ids: + order.message_subscribe([order.partner_id.id]) + return True class ResPartnerToSale(models.Model): diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 569c146f..3f9eee1f 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -49,6 +49,8 @@ access_uom_category_group_purchase,uom_category_group_purchase,uom.model_uom_cat access_uom_category_group_purchase_director,uom_category_group_purchase_director,uom.model_uom_category,sf_base.group_purchase_director,1,0,0,0 access_sale_order_check_wizard_group_sale_salemanager,sale_order_check_wizard_group_sale_salemanager,model_sale_order_check_wizard,sf_base.group_sale_salemanager,1,1,1,0 access_sale_order_check_wizard_group_sale_director,sale_order_check_wizard_group_sale_director,model_sale_order_check_wizard,sf_base.group_sale_director,1,1,1,0 +access_account_move_line_group_sale_salemanager,account_move_line_group_sale_salemanager,account.model_account_move_line,sf_base.group_sale_salemanager,1,1,1,0 +access_account_move_line_group_sale_director,account_move_line_group_sale_director,account.model_account_move_line,sf_base.group_sale_director,1,1,1,0 access_account_move_line_group_purchase,account_move_line_group_purchase,account.model_account_move_line,sf_base.group_purchase,1,1,1,0 access_account_move_line_group_purchase_director,account_move_line_group_purchase_director,account.model_account_move_line,sf_base.group_purchase_director,1,1,1,0 access_res_users_group_purchase,res_user_group_purchase,model_res_users,sf_base.group_purchase,1,1,1,0 @@ -71,9 +73,13 @@ access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team. access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0 access_sale_order,sale.order,sale.model_sale_order,sf_base.group_plan_dispatch,1,0,0,0 -access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,1,1,0 -access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,1,1,0 +access_res_partner_group_sale_salemanager,res_partner_group_sale_salemanager,base.model_res_partner,sf_base.group_sale_salemanager,1,0,1,0 +access_res_partner_group_sale_director,res_partner_group_sale_director,base.model_res_partner,sf_base.group_sale_director,1,0,1,0 +access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,0,1,0 +access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,0,1,0 access_sale_advance_payment_inv_group_sale_salemanager,sale_advance_payment_inv_group_sale_salemanager,sale.model_sale_advance_payment_inv,sf_base.group_sale_salemanager,1,1,1,0 access_sale_advance_payment_inv_group_sale_director,sale_advance_payment_inv_group_sale_director,sale.model_sale_advance_payment_inv,sf_base.group_sale_director,1,1,1,0 +access_sale_report_group_sale_salemanager,sale_report_group_sale_salemanager,sale.model_sale_report,sf_base.group_sale_salemanager,1,0,1,0 +access_sale_report_group_sale_director,sale_report_group_sale_director,sale.model_sale_report,sf_base.group_sale_director,1,0,1,0 diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml index 51dfaf63..ed94be61 100644 --- a/sf_sale/views/purchase_order_view.xml +++ b/sf_sale/views/purchase_order_view.xml @@ -18,13 +18,17 @@