72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
"""Bridge documents.document to accounting moves.
|
|
|
|
Adds a Many2one link to the created invoice/move, a computed
|
|
``is_invoice_candidate`` flag for PDFs/images that have not yet been
|
|
turned into a vendor bill, and the ``action_create_invoice`` entry
|
|
point used by both the form button and the server action.
|
|
"""
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import UserError
|
|
|
|
|
|
INVOICE_CANDIDATE_MIMETYPES = (
|
|
'application/pdf',
|
|
'image/png',
|
|
'image/jpeg',
|
|
'image/jpg',
|
|
)
|
|
|
|
|
|
class DocumentsDocument(models.Model):
|
|
_inherit = 'documents.document'
|
|
|
|
move_id = fields.Many2one(
|
|
'account.move',
|
|
string='Linked Invoice/Move',
|
|
copy=False,
|
|
ondelete='set null',
|
|
help="The accounting move this document was used to create.",
|
|
)
|
|
is_invoice_candidate = fields.Boolean(
|
|
string='Is Invoice Candidate',
|
|
compute='_compute_is_invoice_candidate',
|
|
store=True,
|
|
help="True when this document looks like a vendor bill "
|
|
"(PDF/image binary) and has not yet been linked to a move.",
|
|
)
|
|
|
|
@api.depends('mimetype', 'type', 'move_id')
|
|
def _compute_is_invoice_candidate(self):
|
|
for d in self:
|
|
d.is_invoice_candidate = (
|
|
d.type == 'binary'
|
|
and (d.mimetype or '') in INVOICE_CANDIDATE_MIMETYPES
|
|
and not d.move_id
|
|
)
|
|
|
|
def action_create_invoice(self):
|
|
"""Open the wizard to create a vendor invoice from this document."""
|
|
self.ensure_one()
|
|
if self.move_id:
|
|
raise UserError(_(
|
|
"This document is already linked to invoice %s.",
|
|
self.move_id.display_name,
|
|
))
|
|
if self.type == 'folder':
|
|
raise UserError(_(
|
|
"Folders cannot be turned into invoices."
|
|
))
|
|
if (self.mimetype or '') not in INVOICE_CANDIDATE_MIMETYPES:
|
|
raise UserError(_(
|
|
"Only PDF or image documents can be turned into invoices."
|
|
))
|
|
return {
|
|
'type': 'ir.actions.act_window',
|
|
'name': _('Create Invoice from Document'),
|
|
'res_model': 'fusion.create.invoice.from.document.wizard',
|
|
'view_mode': 'form',
|
|
'target': 'new',
|
|
'context': {'default_document_id': self.id},
|
|
}
|