Merge branch 'develop' of https://e.coding.net/jikimo-hn/jikimo_sfs/jikimo_sf into feature/产品的权限优化

# Conflicts:
#	sf_dlm_management/views/product_template_management_view.xml
#	sf_sale/models/quick_easy_order.py
#	sf_sale/models/sale_order.py
#	sf_sale/views/purchase_order_view.xml
This commit is contained in:
jinling.yang
2024-02-22 09:35:18 +08:00
194 changed files with 9912 additions and 3459 deletions

View File

@@ -7,6 +7,19 @@ from odoo.exceptions import UserError
class ReSaleOrder(models.Model):
_inherit = 'sale.order'
logistics_way = fields.Selection([('自提', '自提'), ('到付', '到付'), ('在线支付', '在线支付')], string='物流方式')
state = fields.Selection(
selection=[
('draft', "报价"),
('sent', "报价已发送"),
('sale', "销售订单"),
('done', "已锁定"),
('cancel', '已废弃'),
],
string="状态",
readonly=True, copy=False, index=True,
tracking=3,
default='draft')
deadline_of_delivery = fields.Date('订单交期', tracking=True)
person_of_delivery = fields.Char('交货人')
telephone_of_delivery = fields.Char('交货人电话号码')
@@ -37,7 +50,8 @@ class ReSaleOrder(models.Model):
'name': self.env['ir.sequence'].next_by_code('sale.order', sequence_date=now_time),
'partner_id': partner.id,
'check_status': 'approved',
'state': 'draft',
'state': 'sale',
'user_id': partner.user_id.id,
'person_of_delivery': delivery_name,
'telephone_of_delivery': delivery_telephone,
'address_of_delivery': delivery_address,
@@ -59,11 +73,12 @@ class ReSaleOrder(models.Model):
self.check_status = 'pending'
def get_customer(self):
customer = self.env['res.partner'].search([('name', '=', '业务平台')])
customer = self.env['res.partner'].search([('name', '=', '业务平台')], limit=1, order='id asc')
if customer:
return customer
else:
partner = self.env['res.partner'].create({'name': '业务平台'})
self.env['res.users'].create({'name': '业务平台', 'partner_id': partner.id})
return partner
# 业务平台分配工厂时在创建完产品后再创建销售明细信息
@@ -79,13 +94,33 @@ class ReSaleOrder(models.Model):
'product_uom_qty': item['number'],
'model_glb_file': base64.b64decode(item['model_file']),
}
return self.env['sale.order.line'].create(vals)
return self.env['sale.order.line'].with_context(skip_procurement=True).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.tax_id:
raise UserError('请对【订单行】中的【税】进行选择')
class ResaleOrderLine(models.Model):
_inherit = 'sale.order.line'
model_glb_file = fields.Binary('模型的glb文件')
check_status = fields.Selection(related='order_id.check_status')
class RePurchaseOrder(models.Model):
@@ -93,6 +128,42 @@ class RePurchaseOrder(models.Model):
check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态')
remark = fields.Text('备注')
user_id = fields.Many2one(
'res.users', string='买家', index=True, tracking=True,
compute='_compute_user_id',
store=True)
def button_confirming(self):
self.write({'state': 'purchase', 'check_status': 'pending'})
@api.depends('partner_id')
def _compute_user_id(self):
if not self.user_id:
if self.partner_id:
self.user_id = self.partner_id.purchase_user_id.id
self.check_status = 'pending'
self.state = 'purchase'
else:
self.user_id = self.env.user.id
@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'):
@@ -102,9 +173,25 @@ class RePurchaseOrder(models.Model):
return super().write(vals)
def button_confirm(self):
<<<<<<< HEAD
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
>>>>>>> 8695a66e3d9be860f778caba8db5500885f4548f
class ResPartnerToSale(models.Model):
@@ -114,20 +201,20 @@ class ResPartnerToSale(models.Model):
@api.constrains('name')
def _check_name(self):
obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id)])
obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id), ('active', '=', True)])
if obj:
raise UserError('该名称已存在,请重新输入')
@api.constrains('vat')
def _check_vat(self):
obj = self.sudo().search([('vat', '=', self.vat), ('id', '!=', self.id)])
obj = self.sudo().search([('vat', '=', self.vat), ('id', '!=', self.id), ('active', '=', True)])
if obj:
raise UserError('该税ID已存在,请重新输入')
@api.constrains('email')
def _check_email(self):
if self.customer_rank > 0:
obj = self.sudo().search([('email', '=', self.email), ('id', '!=', self.id)])
obj = self.sudo().search([('email', '=', self.email), ('id', '!=', self.id), ('active', '=', True)])
if obj:
raise UserError('该邮箱已存在,请重新输入')
@@ -145,31 +232,7 @@ class ResPartnerToSale(models.Model):
else:
domain = [('id', '=', False)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return super()._name_search(name, args, operator, limit, name_get_uid)
@api.onchange('user_id')
def _get_salesman(self):
if self.customer_rank > 0:
self.user_id = self.env.user.id
@api.onchange('purchase_user_id')
def _get_purchaseman(self):
if self.supplier_rank > 0:
self.purchase_user_id = self.env.user.id
class ResUserToSale(models.Model):
_inherit = 'res.users'
@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
if self._context.get('is_sale'):
if self.env.user.has_group('sf_base.group_sale_director'):
domain = []
elif self.env.user.has_group('sf_base.group_sale_salemanager'):
domain = [('id', '=', self.env.user.id)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
elif self._context.get('supplier_rank'):
elif self._context.get('is_supplier') or self.env.user.has_group('sf_base.group_purchase_director'):
if self.env.user.has_group('sf_base.group_purchase_director'):
domain = [('supplier_rank', '>', 0)]
elif self.env.user.has_group('sf_base.group_purchase'):
@@ -182,3 +245,41 @@ class ResUserToSale(models.Model):
domain = [('id', '=', False)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return super()._name_search(name, args, operator, limit, name_get_uid)
@api.onchange('user_id')
def _get_salesman(self):
if self.customer_rank > 0:
if self.env.user.has_group('sf_base.group_sale_salemanager'):
self.user_id = self.env.user.id
@api.onchange('purchase_user_id')
def _get_purchaseman(self):
if self.supplier_rank > 0:
if self.env.user.has_group('sf_base.group_purchase'):
self.purchase_user_id = self.env.user.id
class ResUserToSale(models.Model):
_inherit = 'res.users'
@api.model
def _name_search(self, name, args=None, operator='ilike', limit=100, name_get_uid=None):
if self._context.get('is_sale'):
if self.env.user.has_group('sf_base.group_sale_director'):
domain = []
elif self.env.user.has_group('sf_base.group_sale_salemanager'):
if self.id != self.env.user.id:
domain = [('id', '=', self.id)]
else:
domain = [('id', '=', self.env.user.id)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
elif self._context.get('supplier_rank'):
if self.env.user.has_group('sf_base.group_purchase_director'):
domain = []
elif self.env.user.has_group('sf_base.group_purchase'):
if self.id != self.env.user.id:
domain = [('id', '=', self.id)]
else:
domain = [('id', '=', self.env.user.id)]
return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return super()._name_search(name, args, operator, limit, name_get_uid)