diff --git a/jikimo_purchase_tier_validation/__init__.py b/jikimo_purchase_tier_validation/__init__.py index 511a0ca3..40c32597 100644 --- a/jikimo_purchase_tier_validation/__init__.py +++ b/jikimo_purchase_tier_validation/__init__.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- from . import controllers -from . import models \ No newline at end of file +from . import models +from . import wizards diff --git a/jikimo_purchase_tier_validation/__manifest__.py b/jikimo_purchase_tier_validation/__manifest__.py index 99945b9e..2c59b177 100644 --- a/jikimo_purchase_tier_validation/__manifest__.py +++ b/jikimo_purchase_tier_validation/__manifest__.py @@ -20,13 +20,14 @@ 'version': '0.1', # any module necessary for this one to work correctly - 'depends': ['purchase', 'base_tier_validation'], + 'depends': ['purchase', 'base_tier_validation', 'documents'], # always loaded 'data': [ - # 'security/ir.model.access.csv', + 'security/ir.model.access.csv', + 'data/documents_data.xml', + 'wizards/upload_file_wizard_view.xml', 'views/views.xml', - 'views/templates.xml', ], # only loaded in demonstration mode 'demo': [ diff --git a/jikimo_purchase_tier_validation/data/documents_data.xml b/jikimo_purchase_tier_validation/data/documents_data.xml new file mode 100644 index 00000000..990a6418 --- /dev/null +++ b/jikimo_purchase_tier_validation/data/documents_data.xml @@ -0,0 +1,11 @@ + + + + + + 采购合同 + 存放采购合同相关文件 + 10 + + + \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/models/models.py b/jikimo_purchase_tier_validation/models/models.py index bb61cd5b..880faf09 100644 --- a/jikimo_purchase_tier_validation/models/models.py +++ b/jikimo_purchase_tier_validation/models/models.py @@ -1,10 +1,21 @@ from odoo import models, fields, api, _ from odoo.exceptions import ValidationError +import logging + +_logger = logging.getLogger(__name__) + class jikimo_purchase_tier_validation(models.Model): _name = 'purchase.order' _inherit = ['purchase.order', 'tier.validation'] + contract_document_id = fields.Many2one('documents.document', string='合同文件') + contract_file = fields.Binary(related='contract_document_id.datas', string='合同文件内容') + contract_file_name = fields.Char(related='contract_document_id.attachment_id.name', string='文件名') + + # 是否已上传合同文件 + is_upload_contract_file = fields.Boolean(string='是否已上传合同文件', default=False) + def request_validation(self): for record in self: missing_fields = [] @@ -12,8 +23,96 @@ class jikimo_purchase_tier_validation(models.Model): missing_fields.append('合同名称') if not record.contract_number: missing_fields.append('合同编号') - + if missing_fields: raise ValidationError(_('如下字段要求必须填写:%s') % '、'.join(missing_fields)) - + return super(jikimo_purchase_tier_validation, self).request_validation() + + # 上传合同文件 + def upload_contract_file(self): + print('upload_contract_file===========================') + # self.ensure_one() + # return { + # 'name': _('上传合同文件'), + # 'type': 'ir.actions.act_window', + # 'res_model': 'ir.attachment', + # 'view_mode': 'form', + # 'view_type': 'form', + # 'target': 'new', + # 'context': { + # 'default_res_model': self._name, + # 'default_res_id': self.id, + # 'default_type': 'binary', + # 'default_mimetype': 'application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/jpeg,image/png', + # } + # } + + self.ensure_one() + action = { + 'type': 'ir.actions.act_window', + 'name': _('上传合同文件'), + 'res_model': 'ir.attachment.wizard', # 我们需要创建一个新的向导模型 + 'view_mode': 'form', + 'target': 'new', + 'context': { + 'default_res_model': self._name, + 'default_res_id': self.id, + } + } + return action + + # 删除合同文件 + def delete_contract_file(self): + self.ensure_one() + if self.contract_document_id: + try: + document = self.contract_document_id + + # 清空关联 + self.write({ + 'contract_document_id': False, + 'contract_file': False, + 'contract_file_name': False + }) + + # 删除文档 + if document: + document.with_context(no_attachment=True).sudo().unlink() + + self.is_upload_contract_file = False + + # 返回视图动作来刷新当前表单 + return { + 'type': 'ir.actions.act_window', + 'res_model': 'purchase.order', + 'res_id': self.id, + 'view_mode': 'form', + 'view_type': 'form', + 'target': 'current', + 'flags': {'mode': 'readonly'}, + } + + except Exception as e: + _logger.error('删除合同文件时出错: %s', str(e)) + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _('错误'), + 'message': _('删除文件时出现错误'), + 'type': 'danger', + 'sticky': True, + } + } + + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _('提示'), + 'message': _('没有需要删除的合同文件'), + 'type': 'warning', + 'sticky': False, + } + } diff --git a/jikimo_purchase_tier_validation/security/ir.model.access.csv b/jikimo_purchase_tier_validation/security/ir.model.access.csv index ccd753fc..09ba96bc 100644 --- a/jikimo_purchase_tier_validation/security/ir.model.access.csv +++ b/jikimo_purchase_tier_validation/security/ir.model.access.csv @@ -1,2 +1,2 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_jikimo_purchase_tier_validation_jikimo_purchase_tier_validation,jikimo_purchase_tier_validation.jikimo_purchase_tier_validation,model_jikimo_purchase_tier_validation_jikimo_purchase_tier_validation,base.group_user,1,1,1,1 \ No newline at end of file +access_ir_attachment_wizard,ir.attachment.wizard,model_ir_attachment_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/jikimo_purchase_tier_validation/views/views.xml b/jikimo_purchase_tier_validation/views/views.xml index 5c87a811..e26a7372 100644 --- a/jikimo_purchase_tier_validation/views/views.xml +++ b/jikimo_purchase_tier_validation/views/views.xml @@ -1,19 +1,34 @@ + - - - + + + tier_validation_view_purchase_order_form_inherit + purchase.order + + + + + +