完善采购合同上传功能
This commit is contained in:
@@ -1,11 +1,21 @@
|
|||||||
from odoo import models, fields, api, _
|
from odoo import models, fields, api, _
|
||||||
from odoo.exceptions import ValidationError
|
from odoo.exceptions import ValidationError
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class jikimo_purchase_tier_validation(models.Model):
|
class jikimo_purchase_tier_validation(models.Model):
|
||||||
_name = 'purchase.order'
|
_name = 'purchase.order'
|
||||||
_inherit = ['purchase.order', 'tier.validation']
|
_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):
|
def request_validation(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
missing_fields = []
|
missing_fields = []
|
||||||
@@ -54,5 +64,55 @@ class jikimo_purchase_tier_validation(models.Model):
|
|||||||
|
|
||||||
# 删除合同文件
|
# 删除合同文件
|
||||||
def delete_contract_file(self):
|
def delete_contract_file(self):
|
||||||
print('delete_contract_file============================')
|
self.ensure_one()
|
||||||
pass
|
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,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -7,8 +7,25 @@
|
|||||||
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
<field name="inherit_id" ref="purchase.purchase_order_form"/>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//header" position="inside">
|
<xpath expr="//header" position="inside">
|
||||||
<button name="upload_contract_file" string="上传合同" type="object" class="oe_highlight"/>
|
<field name="validation_status" invisible="1"/>
|
||||||
<button name="delete_contract_file" string="删除合同" type="object" class="oe_highlight"/>
|
<field name="is_upload_contract_file" invisible="1"/>
|
||||||
|
<button name="upload_contract_file" string="上传合同" type="object" class="oe_highlight" attrs="{'invisible': ['|', ('validation_status', '!=', 'no'), ('is_upload_contract_file', '=', True)]}"/>
|
||||||
|
<button name="delete_contract_file" string="删除合同" type="object" class="oe_highlight" attrs="{'invisible': ['|', ('validation_status', '!=', 'no'), ('is_upload_contract_file', '=', False)]}"/>
|
||||||
|
</xpath>
|
||||||
|
<xpath expr="//notebook/page[1]" position="before">
|
||||||
|
<page string="合同" name="contract_documents"
|
||||||
|
attrs="{'invisible': [('contract_document_id', '=', False)]}"
|
||||||
|
autofocus="autofocus">
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="contract_document_id" invisible="1"/>
|
||||||
|
<field name="contract_file_name" invisible="1"/>
|
||||||
|
<field name="contract_file"
|
||||||
|
widget="adaptive_viewer"
|
||||||
|
filename="contract_file_name"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ class IrAttachmentWizard(models.TransientModel):
|
|||||||
|
|
||||||
def action_upload_file(self):
|
def action_upload_file(self):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
# 获取当前用户的 partner_id
|
||||||
|
current_partner = self.env.user.partner_id
|
||||||
# 首先创建 ir.attachment
|
# 首先创建 ir.attachment
|
||||||
attachment = self.env['ir.attachment'].create({
|
attachment = self.env['ir.attachment'].create({
|
||||||
'name': self.filename,
|
'name': self.filename,
|
||||||
@@ -64,6 +66,14 @@ class IrAttachmentWizard(models.TransientModel):
|
|||||||
'folder_id': workspace.id,
|
'folder_id': workspace.id,
|
||||||
'res_model': self.res_model,
|
'res_model': self.res_model,
|
||||||
'res_id': self.res_id,
|
'res_id': self.res_id,
|
||||||
|
'partner_id': current_partner.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
# 更新采购订单的合同文档字段
|
||||||
|
purchase_order = self.env['purchase.order'].browse(self.res_id)
|
||||||
|
purchase_order.write({
|
||||||
|
'contract_document_id': document.id,
|
||||||
|
'is_upload_contract_file': True
|
||||||
})
|
})
|
||||||
|
|
||||||
# 显示成功消息并关闭向导
|
# 显示成功消息并关闭向导
|
||||||
@@ -80,6 +90,7 @@ class IrAttachmentWizard(models.TransientModel):
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return message
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<field name="res_id" invisible="1"/>
|
<field name="res_id" invisible="1"/>
|
||||||
</group>
|
</group>
|
||||||
<footer>
|
<footer>
|
||||||
<button name="action_upload_file" string="上传" type="object" class="btn-primary"/>
|
<button name="action_upload_file" string="确认上传" type="object" class="btn-primary"/>
|
||||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||||
</footer>
|
</footer>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user