Skip to content
Extraits de code Groupes Projets
Valider d1406554 rédigé par jordan's avatar jordan
Parcourir les fichiers

[add] conf and function to generate invoice adhesion

parent dfbeeefd
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
"application": False, "application": False,
"installable": True, "installable": True,
"depends": [ "depends": [
"account",
"cgscop_partner", "cgscop_partner",
"cgscop_liste_ministere", "cgscop_liste_ministere",
], ],
...@@ -16,6 +17,7 @@ ...@@ -16,6 +17,7 @@
"datas/ir_sequence_data.xml", "datas/ir_sequence_data.xml",
"datas/res_partner_federation_data.xml", "datas/res_partner_federation_data.xml",
"views/assets.xml", "views/assets.xml",
"views/res_config_settings.xml",
"views/res_partner.xml", "views/res_partner.xml",
"views/res_partner_federation.xml", "views/res_partner_federation.xml",
"views/res_partner_naf.xml", "views/res_partner_naf.xml",
......
# © 2019 Le Filament (<http://www.le-filament.com>) # © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import res_company
from . import res_config_settings
from . import res_partner from . import res_partner
from . import res_partner_federation from . import res_partner_federation
from . import res_partner_naf from . import res_partner_naf
......
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ScopAdhesionCompany(models.Model):
_inherit = 'res.company'
is_adhesion = fields.Boolean('Adhésions', default=False)
product_adhesion_id = fields.Many2one(
comodel_name='product.product',
string='Article d\'adhésion',
domain="[('sale_ok', '=', True), ('company_id', '=', company_id)]"
)
journal_adhesion_id = fields.Many2one(
comodel_name='account.journal',
string='Journal des adhésions',
domain="[('type', '=', 'sale')]",
)
# © 2021 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class ScopAdhesionConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'
is_adhesion = fields.Boolean(
string='Adhésions',
related="company_id.is_adhesion",
readonly=False)
product_adhesion_id = fields.Many2one(
comodel_name='product.product',
related="company_id.product_adhesion_id",
readonly=False,
string='Article d\'adhésion')
journal_adhesion_id = fields.Many2one(
comodel_name='account.journal',
related="company_id.journal_adhesion_id",
readonly=False,
string='Journal des adhésions')
...@@ -317,6 +317,63 @@ class ScopPartner(models.Model): ...@@ -317,6 +317,63 @@ class ScopPartner(models.Model):
'number': number 'number': number
}) })
@api.multi
def create_invoice_adhesion(self, lm):
"""
Crée une facture d'adhésion avec l'article et le journal configurés
‐ Moins de 11 salariés (ou effectif inconnu) : 80€
‐ Entre 11 et 50 salariés : 160€
‐ Plus de 50 salariés : 235€
:param lm:
:return:
"""
self.ensure_one()
product_id = self.env.user.company_id.product_adhesion_id
journal_id = self.env.user.company_id.journal_adhesion_id
if not (product_id or journal_id):
raise ValidationError(
"Vous devez configurer un article et un journal d'adhésion !")
else:
# existing_invoice_adhesion = self.invoice_ids.filtered(
# lambda i: i.invoice_line_ids.filtered(
# lambda il: il.product_id == product_id
# )
# )
effectif = lm.eff_etp
if 11 <= effectif <= 50:
amount_adhesion = 160
elif effectif > 50:
amount_adhesion = 235
else:
amount_adhesion = 80
Invoice = self.env['account.invoice']
InvoiceLine = self.env['account.invoice.line']
date_invoice = fields.Date.today()
account_id = self.property_account_receivable_id
adhesion_invoice = Invoice.create({
'partner_id': self.id,
'type': 'out_invoice',
'journal_id': journal_id.id,
'state': 'open',
'account_id': account_id.id,
# 'payment_term_id': self.payment_term_id.id or None,
# 'payment_mode_id': self.customer_payment_mode_id.id or None,
'date_invoice': date_invoice,
})
InvoiceLine.create({
'invoice_id': adhesion_invoice.id,
'product_id': product_id.id,
'account_id': product_id.property_account_income_id.id,
'invoice_line_tax_ids': [(6, 0, product_id.taxes_id.ids)],
'name': product_id.name,
'price_unit': amount_adhesion
})
return True
class ResPartnerPrescriberCanal(models.Model): class ResPartnerPrescriberCanal(models.Model):
_name = "res.partner.prescriber.canal" _name = "res.partner.prescriber.canal"
......
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<data>
<record id="res_config_settings_view_form_cotisations" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.cotisations</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="25"/>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@id='setup']" position="after">
<h2>Adhésions</h2>
<div class="row mt16 o_settings_container" name="contribution">
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="is_adhesion" />
</div>
<div class="o_setting_right_pane">
<label for="is_adhesion"/>
<div class="text-muted">
Activer la gestion des adhésions pour cette société
</div>
</div>
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane" attrs="{'invisible': [('is_adhesion', '=', False)]}">
<label for="product_adhesion_id"/>
<div class="text-muted">
Article facturable pour les adhésions
</div>
<field name="product_adhesion_id" attrs="{'required': [('is_adhesion', '=', True)]}"/>
</div>
<div class="o_setting_right_pane" attrs="{'invisible': [('is_adhesion', '=', False)]}">
<label for="journal_adhesion_id"/>
<div class="text-muted">
Journal pour les adhésions
</div>
<field name="journal_adhesion_id" attrs="{'required': [('is_adhesion', '=', True)]}"/>
</div>
</div>
</div>
</xpath>
</field>
</record>
</data>
</odoo>
\ No newline at end of file
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