diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py
index da6919a4..e2fb731c 100644
--- a/sf_base/__manifest__.py
+++ b/sf_base/__manifest__.py
@@ -10,7 +10,7 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['account', 'base', 'mrp_workorder', 'sale', 'purchase', 'sales_team'],
+ 'depends': ['base', 'mrp_workorder', 'sale', 'purchase', 'sales_team'],
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py
index 6c65a7d5..ba6a99db 100644
--- a/sf_sale/__manifest__.py
+++ b/sf_sale/__manifest__.py
@@ -10,11 +10,12 @@
""",
'category': 'sf',
'website': 'https://www.sf.jikimo.com',
- 'depends': ['sale', 'sale_management', 'web_widget_model_viewer', 'sf_base'],
+ 'depends': ['sale', 'sale_management', 'web_widget_model_viewer', 'sf_base', 'account', 'purchase'],
'data': [
'security/group_security.xml',
'security/ir.model.access.csv',
'wizard/sale_order_wizard_views.xml',
+ 'wizard/purchase_order_wizard_views.xml',
'views/sale_team.xml',
'views/sale_order_view.xml',
'views/res_partner_view.xml',
diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py
index 8f3910b6..38684213 100644
--- a/sf_sale/models/sale_order.py
+++ b/sf_sale/models/sale_order.py
@@ -1,6 +1,6 @@
import datetime
import base64
-from odoo import models, fields, api
+from odoo import models, fields, api, _
from odoo.exceptions import UserError
@@ -91,12 +91,40 @@ class ResaleOrderLine(models.Model):
class RePurchaseOrder(models.Model):
_inherit = 'purchase.order'
- check_status = fields.Selection([('unchecked', '未审核'), ('checked', '已审核')], '审核状态', default='unchecked')
+ check_status = fields.Selection([('pending', '待审核'), ('approved', '已审核'), ('fail', '不通过')], '审核状态')
+ remark = fields.Text('备注')
+
+ def write(self, vals):
+ if self.env.user.has_group('sf_base.group_purchase_director'):
+ if vals.get('check_status'):
+ if vals['check_status'] in ('pending', False):
+ vals['check_status'] = 'approved'
+ return super().write(vals)
+
+ @api.model_create_multi
+ def create(self, vals_list):
+ # res = super().create(vals_list)
+ if self.env.user.has_group('sf_base.group_purchase'):
+ view = self.env.ref('sf_sale.action_purchase_order_submit_wizard')
+ return {
+ 'name': _('确认?'),
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'form',
+ 'res_model': 'purchase.order.wizard',
+ 'views': [(view.id, 'form')],
+ 'view_id': view.id,
+ 'target': 'new',
+ 'context': dict(self.env.context),
+ }
+ res = super().create(vals_list)
+ return res
class ResPartnerToSale(models.Model):
_inherit = 'res.partner'
+ purchase_user_id = fields.Many2one('res.users', '采购员')
+
@api.constrains('name')
def _check_name(self):
obj = self.sudo().search([('name', '=', self.name), ('id', '!=', self.id)])
@@ -131,7 +159,13 @@ class ResPartnerToSale(models.Model):
@api.onchange('user_id')
def _get_salesman(self):
- self.user_id = self.env.user.id
+ 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):
@@ -145,4 +179,14 @@ class ResUserToSale(models.Model):
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'):
+ 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'):
+ supplier = self.env['res.partner'].search(
+ [('supplier_rank', '>', 0), ('purchase_user_id', '=', self.env.user.id)])
+ if supplier:
+ ids = [t.id for t in supplier]
+ domain = [('id', 'in', ids)]
+ return self._search(domain, limit=limit, access_rights_uid=name_get_uid)
return super()._name_search(name, args, operator, limit, name_get_uid)
diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv
index 6645b629..f6164542 100644
--- a/sf_sale/security/ir.model.access.csv
+++ b/sf_sale/security/ir.model.access.csv
@@ -51,6 +51,14 @@ access_mrp_bom_byproduct_group_purchase_director,mrp_bom_byproduct_group_purchas
access_mrp_bom_byproduct_group_sale_salemanager,mrp_bom_byproduct_group_sale_salemanager,mrp.model_mrp_bom_byproduct,sf_base.group_sale_salemanager,1,0,0,0
access_mrp_bom_byproduct_group_sale_director,mrp_bom_byproduct_group_sale_director,mrp.model_mrp_bom_byproduct,sf_base.group_sale_director,1,1,1,0
+access_purchase_order_line_group_purchase,purchase_order_line_group_purchase,purchase_stock.model_purchase_order_line,sf_base.group_purchase,1,1,1,0
+access_purchase_order_line_group_purchase_director,purchase_order_line_group_purchase_director,purchase_stock.model_purchase_order_line,sf_base.group_purchase_director,1,1,1,0
+access_purchase_order_line_group_sale_salemanager,purchase_order_line_group_sale_salemanager,purchase_stock.model_purchase_order_line,sf_base.group_sale_salemanager,1,0,0,0
+access_purchase_order_line_group_sale_director,purchase_order_line_group_sale_director,purchase_stock.model_purchase_order_line,sf_base.group_sale_director,1,1,1,0
+
+access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase,model_purchase_order_wizard,sf_base.group_purchase,1,1,1,0
+access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0
+
diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml
index 4139dd19..9ae8242b 100644
--- a/sf_sale/views/purchase_order_view.xml
+++ b/sf_sale/views/purchase_order_view.xml
@@ -6,45 +6,51 @@
purchase.order
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
sf_base.group_purchase
-
-
-
-
-
-
+
+
+
+
+
+
sf_base.group_purchase
@@ -64,5 +70,19 @@
+
+
+ purchase.order.tree.inherit.sf
+ purchase.order
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sf_sale/views/res_partner_view.xml b/sf_sale/views/res_partner_view.xml
index 9902db34..2ab384eb 100644
--- a/sf_sale/views/res_partner_view.xml
+++ b/sf_sale/views/res_partner_view.xml
@@ -6,30 +6,82 @@
res.partner
-
-
+
+
+
+
+
+ 1
-
+
- {'required': [('phone', '=', False),('company_type','=', 'company')]}
+ {'required': [('phone', '=', False)]}
- {'required': [('mobile', '=', False),('company_type','=', 'company')]}
+ {'required': [('mobile', '=', False)]}
+
+
+
+ {'required': [('supplier_rank','>', 0)]}
+
+
+
+ {'required': [('supplier_rank','>', 0)]}
+
+
+
+ {'required': [('supplier_rank','>', 0)]}
+
+
+
+ {'required': [('supplier_rank','>', 0)]}
+ attrs="{'required' : [('customer_rank','>', 0)],'readonly': [('supplier_rank','>', 0)]}"/>
- {'required': [('company_type', '=', 'company')]}
+ 1
+
+
+ res.partner.property.form.inherit.sf
+ res.partner
+
+
+
+
+
+
+
+
+ res.partner.property.form.inherit.sf
+ res.partner
+
+
+
+
+
+
+
+ {'invisible': [('customer_rank','=', 0)]}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sf_sale/wizard/__init__.py b/sf_sale/wizard/__init__.py
index 60c63c76..7f1bd0c7 100644
--- a/sf_sale/wizard/__init__.py
+++ b/sf_sale/wizard/__init__.py
@@ -1 +1,2 @@
from . import sale_order_wizard
+from . import purchase_order_wizard
diff --git a/sf_sale/wizard/purchase_order_wizard.py b/sf_sale/wizard/purchase_order_wizard.py
new file mode 100644
index 00000000..313b60f5
--- /dev/null
+++ b/sf_sale/wizard/purchase_order_wizard.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+from odoo import models, api, fields
+from odoo.exceptions import UserError
+
+
+class PurchaseOrderWizard(models.TransientModel):
+ _name = 'purchase.order.wizard'
+ _description = '采购向导'
+
+ order_id = fields.Many2one('purchase.order')
+ # check_state = fields.Selection([('pass', '通过'), ('back', '退回')], '处理意见', default='pass')
+ check_audit = fields.Text('审核意见')
+
+ def submit(self):
+ self.order_id.check_status = 'approved'
+ self.order_id.remark = self.check_audit
+
+ def back(self):
+ if not self.check_audit:
+ raise UserError('请输入原因')
+ else:
+ self.order_id.write({'check_status': 'fail', 'remark': self.check_audit})
+
+ def confirm(self):
+ self.order_id.check_status = 'pending'
diff --git a/sf_sale/wizard/purchase_order_wizard_views.xml b/sf_sale/wizard/purchase_order_wizard_views.xml
new file mode 100644
index 00000000..998f02c1
--- /dev/null
+++ b/sf_sale/wizard/purchase_order_wizard_views.xml
@@ -0,0 +1,54 @@
+
+
+
+ purchase.order.check.wizard.form.view
+ purchase.order.wizard
+
+
+
+
+
+
+ 审核
+ purchase.order.wizard
+ form
+ new
+
+
+
+ purchase.order.submit.wizard.form.view
+ purchase.order.wizard
+
+
+
+
+
+
+ 提交
+ purchase.order.wizard
+ form
+ new
+
+
+
\ No newline at end of file