Skip to content
Extraits de code Groupes Projets
Valider def39e58 rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[update] scop.contribution creation

parent 7fedb124
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -46,6 +46,9 @@ class ScopAccountInvoice(models.Model):
related='partner_id.ur_id',
store=True
)
contribution_id = fields.Many2one(
comodel_name='scop.contribution',
string='Ligne de cotisation')
nb_quarter = fields.Selection(
string='Nombre de trimestres de cotisation',
selection=[(1, '1'),
......@@ -81,18 +84,6 @@ class ScopAccountInvoice(models.Model):
# ------------------------------------------------------
# Override Parent
# ------------------------------------------------------
def get_last_maturity_date(self, months, account_move_line_ids):
"""
Get the last maturity date from account_move_line
for a certain period (months = [])
:param months:
:param account_move_line_ids:
:return: last date_maturity
"""
line_ids = account_move_line_ids.filtered(
lambda l: l.date_maturity.month in months)
return line_ids[-1].date_maturity if line_ids else None
@api.multi
def action_invoice_open(self):
"""
......@@ -101,7 +92,7 @@ class ScopAccountInvoice(models.Model):
"""
results = super(ScopAccountInvoice, self).action_invoice_open()
for inv in self:
if inv.is_contribution and inv.type == 'out_invoice':
if inv.is_contribution:
inv.set_scop_contribution()
return results
......@@ -251,37 +242,39 @@ class ScopAccountInvoice(models.Model):
"""
Création d'une ligne dans scop.contribution
"""
for inv in self:
if inv.is_contribution:
year = inv.year
account_type_receivable_ids = inv.env[
'account.account'].search([
('user_type_id', '=', inv.env.ref(
'account.data_account_type_receivable').id)
]).mapped('id')
account_move_line_ids = inv.env['account.move.line'].search([
('invoice_id', '=', inv.id),
('account_id', 'in', account_type_receivable_ids)
]).filtered(lambda l: l.date_maturity.year == year)
self.ensure_one()
if self.is_contribution:
year = self.year
# Get existing contribution for this year
contrib_id = self.env['scop.contribution'].search([
('partner_id', '=', self.partner_id.id),
('year', '=', year),
('type_id', '=', self.type_contribution_id.id)
])
inv.env['scop.contribution'].create({
'partner_id': inv.partner_id.id,
'type_id': inv.type_contribution_id.id,
'year': inv.year,
# Create scop.contribution line if not exists
# for year, partner and type
if not contrib_id:
contrib_line = self.env['scop.contribution'].create({
'partner_id': self.partner_id.id,
'type_id': self.type_contribution_id.id,
'year': self.year,
'calculation_date': fields.Datetime.now(),
'amount_calculated': inv.amount_total,
'amount_called': inv.amount_total,
'spreading': inv.nb_quarter,
'spreading': len(
account_move_line_ids.mapped('date_maturity')),
'quarter_1': inv.get_last_maturity_date(
[1, 2, 3], account_move_line_ids),
'quarter_2': inv.get_last_maturity_date(
[4, 5, 6], account_move_line_ids),
'quarter_3': inv.get_last_maturity_date(
[7, 8, 9], account_move_line_ids),
'quarter_4': inv.get_last_maturity_date(
[10, 11, 12], account_move_line_ids),
'invoice_id': inv.id,
'amount_calculated': self.amount_total,
'amount_called': self.amount_total,
'spreading': self.nb_quarter,
'invoice_id': self.id,
})
return True
else:
contrib_line = self.set_scop_contribution_hook(contrib_id)
self.contribution_id = contrib_line.id
return contrib_line
return False
def set_scop_contribution_hook(self, contrib_id):
"""
Function that can be inherited if a contrib line already exists
:param contrib_id: scop.contribution line
:return: scop.contribution
"""
return contrib_id
......@@ -7,10 +7,15 @@ from odoo import models, fields, api
class ScopContributions(models.Model):
_inherit = "scop.contribution"
# TODO: remove after migration
invoice_id = fields.Many2one(
comodel_name='account.invoice',
string='Facture liée',
ondelete='cascade')
invoice_ids = fields.One2many(
comodel_name='account.invoice',
inverse_name='contribution_id',
string='Factures liées')
amount_paid = fields.Float(
compute='_compute_amount_paid', store=True)
amount_remaining = fields.Float(
......@@ -25,13 +30,14 @@ class ScopContributions(models.Model):
@api.multi
def _compute_amount_paid(self):
for r in self:
r.amount_paid = r.invoice_id.amount_total - r.amount_remaining
r.amount_paid = r.amount_called - r.amount_remaining
@api.depends('invoice_id.residual')
@api.depends('invoice_ids', 'invoice_ids.residual_signed')
@api.multi
def _compute_amount_remaining_previous(self):
for r in self:
r.amount_remaining = r.invoice_id.residual
r.amount_remaining = sum(
r.invoice_ids.mapped('residual_signed'))
@api.multi
def _compute_is_exempt(self):
......@@ -54,8 +60,6 @@ class ScopContributions(models.Model):
('refund_invoice_id', '=', self.invoice_id.id),
('state', 'in', ['open', 'paid'])
])
print(refund_ids)
print(tree_id)
return {
'type': 'ir.actions.act_window',
'name': 'Exonérations',
......
......@@ -81,9 +81,24 @@ class ScopCotisation(models.AbstractModel):
# ------------------------------------------------------
# Global functions
# ------------------------------------------------------
def create_contribution(self, product, partner, type_contribution,
liasse=None, amount=0, date=False,
journal_id=False, account_id=False):
def create_contribution(
self, product, partner, type_contribution, liasse=None, amount=0,
date=False, journal_id=False, account_id=False,
type_invoice='out_invoice', is_regul=False):
"""
Create invoice from Contribution Base
:param product: product_id
:param partner: partner_id
:param type_contribution: type_contribution (CG, UR, Fédé)
:param liasse: liasse_fiscale_id (reference)
:param amount: contribution amount (float)
:param date: date invoice
:param journal_id: journal
:param account_id: customer_account_id
:param type_invoice: invoice or refund
:param is_regul: used for CG Scop regul
:return: invoice
"""
Invoice = self.env['account.invoice']
InvoiceLine = self.env['account.invoice.line']
......@@ -92,7 +107,7 @@ class ScopCotisation(models.AbstractModel):
('year', '=', self.year),
('type_contribution_id', '=', type_contribution)
])
if not exisiting_invoice:
if not exisiting_invoice or is_regul:
date_invoice = date if date else self.date_cotisation
journal_id = self.company_id.contribution_journal_id \
if not journal_id else journal_id
......@@ -101,7 +116,7 @@ class ScopCotisation(models.AbstractModel):
member_invoice = Invoice.create({
'partner_id': partner.id,
'liasse_fiscale_id': liasse.id,
'type': 'out_invoice',
'type': type_invoice,
'year': self.year,
'is_contribution': True,
'type_contribution_id': type_contribution,
......@@ -120,7 +135,7 @@ class ScopCotisation(models.AbstractModel):
('invoice_id', '=', member_invoice.id),
('product_id', '=', product.id)
])
if not exisiting_invoice_line_ids:
if not exisiting_invoice_line_ids or is_regul:
InvoiceLine.create({
'invoice_id': member_invoice.id,
'product_id': product.id,
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter