Newer
Older
# Copyright 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from ast import literal_eval
from odoo import fields, models, api, _
class Project(models.Model):
_inherit = 'project.project'
@api.multi
def _compute_invoice_count(self):
for project in self:
# retrieve all projects
project.invoice_count = self.env['account.invoice'].sudo().search_count([('project_id', '=', self.id)])
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
invoice_ids = fields.One2many(
'account.invoice',
'project_id',
string='Factures')
invoice_count = fields.Integer(
compute='_compute_invoice_count',
string='Nombre de factures')
# ------------------------------------------------------
# SQL Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# Default methods
# ------------------------------------------------------
# ------------------------------------------------------
# Computed fields / Search Fields
# ------------------------------------------------------
# ------------------------------------------------------
# Onchange / Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
@api.multi
def action_view_project_invoices(self):
self.ensure_one()
action = self.env.ref('account.action_invoice_refund_out_tree').sudo().read()[0]
action['domain'] = [('type', 'in', ['out_invoice', 'out_refund']), ('project_id', '=', self.id)]
return action
@api.multi
def action_generate_invoices(self):
for project in self:
for benef in project.financement_ids:
if benef.partner_id.parent_id:
partner = benef.partner_id.parent_id
else:
partner = benef.partner_id
if partner.type_structure_id:
# search the product corresponding to the company associated
product_id = self.env['product.product'].search([('type_product', '=', 'collectivite')])
else:
# search the product corresponding to the company associated
product_id = self.env['product.product'].search([('type_product', '=', 'particular')])
account_invoice_id = self.create_invoice(
product_id, partner, benef.montant)
benef.write({'invoice_id': account_invoice_id.id})
def create_invoice(self, product, partner, amount):
result = dict()
Invoice = self.env['account.invoice']
InvoiceLine = self.env['account.invoice.line']
journal_id = self.env['account.journal'].search([('company_id', '=', self.env.user.company_id.id)], limit=1)
payment_term_id = self.env.ref('adefpat_account.account_payment_term_adefpat')
benef_invoice = Invoice.create({
'name': partner.name,
'project_id': self.id,
'partner_id': partner.id,
'type': 'out_invoice',
'journal_id': journal_id.id,
'state': 'draft',
'payment_term_id': payment_term_id.id,
'user_id': self.user_id.id
})
# Création de la ligne CG Scop
benef_invoice_line = InvoiceLine.create({
'invoice_id': benef_invoice.id,
'product_id': product.id,
'account_id': product.property_account_income_id.id,
'account_analytic_id': self.analytic_account_id.id,
'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)],
'name': product.name,
'price_unit': amount
})
result['invoice'] = benef_invoice
result['invoice_line'] = benef_invoice_line
# ------------------------------------------------------
# Business methods
# ------------------------------------------------------
class ProjectTask(models.Model):
_inherit = "project.task"
invoice_id = fields.Many2one(
"account.invoice",
string="Facture liée",
domain=[("type", "=", "in_invoice")],
ondelete="restrict",
)
payment_date_invoice = fields.Date("Date de paiement de la facture")
date_account = fields.Date("Date de la facture")
class AdefpatFinancement(models.Model):
_inherit = 'adefpat.project.financement'
invoice_id = fields.Many2one(
'account.invoice',
string='Facture liée')