Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 454321785c8068c2fceb0d22ff9bfb80e3201443
  • 14.0 par défaut protégée
  • 18.0
  • 17.0
  • 15.0
  • 12.0
  • 16.0
7 résultats

__manifest__.py

Blame
  • scop_bordereau_refund_wizard.py 5,70 Kio
    # Copyright 2021 Le Filament
    # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
    
    from odoo import fields, models, api
    from odoo.exceptions import ValidationError
    
    
    class ScopBordereauRefundWizard(models.TransientModel):
        _name = 'scop.bordereau.refund.wizard'
        _description = 'Avoir sur les bordereaux'
    
        bordereau_id = fields.Many2one(
            comodel_name='scop.bordereau',
            string='Bordereau',
            readonly=True,
        )
        date_refund = fields.Date(
            string="Date de régularisation",
            default=fields.Date.today(), required=1)
        amount_refund = fields.Float('Montant', required=1)
        comment = fields.Char('Motif de l\'avoir', required=1)
        type_cotiz = fields.Selection(
            string='Type de cotisation',
            selection=lambda self: self._selection_type_cotiz(),
            required=1)
    
        # ------------------------------------------------------
        # Constrains
        # ------------------------------------------------------
        @api.constrains('date_refund')
        def _check_date_refund(self):
            last_date = max(self.bordereau_id.invoice_ids.mapped('date_invoice'))
            if self.date_refund > fields.Date.today() or \
                    self.date_refund < last_date:
                raise ValidationError("La date de l'avoir doit être "
                                      "inférieure ou égale à la date du jour et "
                                      "supérieure à la dernière date de "
                                      "facturation liée au bordereau.")
    
        # ------------------------------------------------------
        # Override ORM
        # ------------------------------------------------------
        @api.model
        def default_get(self, fields):
            res = super(ScopBordereauRefundWizard, self).default_get(fields)
            bordereau_id = self.env['scop.bordereau'].browse(
                self.env.context.get('active_id')
            )
            res.update({
                'bordereau_id': bordereau_id.id,
            })
            return res
    
        @api.model
        def _selection_type_cotiz(self):
            bordereau_id = self.env['scop.bordereau'].browse(
                self.env.context.get('active_id')
            )
    
            contribs = bordereau_id.invoice_ids.read_group(
                [('id', 'in', bordereau_id.invoice_ids.ids)],
                ['type_contribution_id', 'amount_total_signed'],
                ['type_contribution_id'])
    
            ur_hdf = self.env.ref('cgscop_partner.riga_14232').id
            if bordereau_id.partner_id.ur_id.id == ur_hdf:
                product_ur = self.env.user.company_id.contribution_hdf_id
            else:  # ur = ur_med
                product_ur = self.env.user.company_id.contribution_med_id
    
            cotiz_type = {
                self.env.ref('cgscop_partner.riga_14397').id:
                    self.env.user.company_id.contribution_cg_id,
                self.env.ref('cgscop_partner.riga_14398').id:
                    self.env.user.company_id.contribution_fede_com_id,
                self.env.ref('cgscop_partner.cotiz_fede_cae').id:
                    self.env.user.company_id.contribution_fede_cae_id,
                self.env.ref('cgscop_partner.riga_14399').id:
                    product_ur,
            }
    
            type_cotiz_select_i = list()
            type_cotiz_select_list = list()
            for contrib in contribs:
                type_cotiz = contrib.get('type_contribution_id')[0]
                if type_cotiz not in type_cotiz_select_i:
                    type_cotiz_select_i.append(type_cotiz)
                    type_cotiz_select_list.append(
                        (type_cotiz, cotiz_type[type_cotiz].name))
            return type_cotiz_select_list
    
        # ------------------------------------------------------
        # Action
        # ------------------------------------------------------
        def create_refund(self):
            """
            Create refund
            """
            bordereau_id = self.bordereau_id
            ur_hdf = self.env.ref('cgscop_partner.riga_14232').id
    
            if bordereau_id.partner_id.ur_id.id == ur_hdf:
                product_ur = self.env.user.company_id.contribution_hdf_id
            else:  # ur = ur_med
                product_ur = self.env.user.company_id.contribution_med_id
    
            cotiz_type = {
                self.env.ref('cgscop_partner.riga_14397').id:
                    self.env.user.company_id.contribution_cg_id,
                self.env.ref('cgscop_partner.riga_14398').id:
                    self.env.user.company_id.contribution_fede_com_id,
                self.env.ref('cgscop_partner.cotiz_fede_cae').id:
                    self.env.user.company_id.contribution_fede_cae_id,
                self.env.ref('cgscop_partner.riga_14399').id:
                    product_ur,
            }
            product = cotiz_type.get(int(self.type_cotiz))
            refund = self.env['account.invoice'].create({
                'partner_id': bordereau_id.partner_id.id,
                'journal_id': self.env.user.company_id.contribution_journal_id.id,
                'account_id': bordereau_id.partner_id.property_account_receivable_id.id,
                'type': 'out_refund',
                'date_invoice': self.date_refund,
                'date': self.date_refund,
                'state': 'draft',
                'number': False,
                'origin': bordereau_id.name,
                'reference': False,
                'bordereau_id': bordereau_id.id,
                'is_contribution': True,
                'year': bordereau_id.year,
                'liasse_fiscale_id': bordereau_id.liasse_fiscale_id.id,
                'type_contribution_id': self.type_cotiz,
                'payment_mode_id': bordereau_id.payment_mode_id.id,
                'date_due': self.date_refund,
            })
            self.env['account.invoice.line'].create({
                'name': self.comment,
                'invoice_id': refund.id,
                'product_id': product.id,
                'account_id': product.property_account_income_id.id,
                'price_unit': self.amount_refund
            })