Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 6dd7a95d025197744c6756e7290e90a9be846d47
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
  • 12.0-lm
5 résultats

api_alfresco.py

Blame
  • scop_cotisation.py 4,73 Kio
    # © 2021 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    from odoo import models, fields, api
    from odoo.exceptions import UserError
    
    from datetime import date
    
    
    class ScopCotisation(models.AbstractModel):
        _name = "scop.cotisation"
        _description = "Base des cotisations"
    
        year = fields.Selection(
            [(year, str(year)) for year in range(
                fields.Datetime.now().year - 1, fields.Datetime.now().year + 2)],
            string='Année de cotisation',
            required=True)
    
        company_id = fields.Many2one(
            comodel_name='res.company',
            string='Company', change_default=True,
            required=True, readonly=True,
            default=lambda self: self.env.user.company_id)
    
        company_currency_id = fields.Many2one(
            comodel_name='res.currency', related='company_id.currency_id',
            string="Company Currency", readonly=True)
        payment_term_id = fields.Many2one(
            comodel_name='account.payment.term',
            string="Conditions de paiement",
            required=True
        )
        date_cotisation = fields.Date("Date de cotisation", required=True)
    
        member_count = fields.Integer(
            "Adhérents renouvelés",
            compute='_compute_member_count')
        new_member_count = fields.Integer(
            "Nouveaux adhérents",
            compute='_compute_new_member_count')
        invoiced_member_count = fields.Integer(
            "Cotisations créées",
            compute='_compute_invoiced_member_count')
    
        # ------------------------------------------------------
        # Compute fields
        # ------------------------------------------------------
        @api.multi
        def _compute_member_count(self):
            for cotiz in self:
                cotiz.member_count = len(cotiz.get_members())
    
        @api.multi
        def _compute_new_member_count(self):
            for cotiz in self:
                cotiz.new_member_count = len(cotiz.get_new_members())
    
        @api.multi
        def _compute_invoiced_member_count(self):
            for cotiz in self:
                cotiz.invoiced_member_count = len(
                    cotiz.invoice_ids.mapped('partner_id'))
    
        # ------------------------------------------------------
        # Global functions
        # ------------------------------------------------------
        def create_contribution(self, product, partner, liasse=None, amount=0):
            Invoice = self.env['account.invoice']
            InvoiceLine = self.env['account.invoice.line']
            member_invoice = Invoice.create({
                'partner_id': partner.id,
                'liasse_fiscale_id': liasse.id,
                'type': 'out_invoice',
                'year': self.year,
                'is_contribution': True,
                'journal_id': self.company_id.contribution_journal_id.id,
                'state': 'draft',
                'account_id': partner.property_account_receivable_id.id,
                'payment_term_id': self.payment_term_id.id,
                'payment_mode_id': partner.customer_payment_mode_id.id,
                'date_invoice': self.date_cotisation,
            })
    
            # Création de la ligne CG Scop
            InvoiceLine.create({
                'invoice_id': member_invoice.id,
                'product_id': product.id,
                'account_id': product.property_account_income_id.id,
                'invoice_line_tax_ids': [(6, 0, product.taxes_id.ids)],
                'name': product.name,
                'price_unit': amount
            })
    
            return member_invoice
    
        @api.multi
        def get_members(self):
            self.ensure_one()
            members = self.env['scop.membership.period'].search([
                ('type_id', '=', self.env.ref(
                    'cgscop_partner.membership_type_1').id),
                ('start', '<', date(self.year, 1, 1)),
                '|',
                ('end', '=', None),
                ('end', '>', date(self.year, 1, 1))
            ]).mapped('partner_id')
            return members
    
        @api.multi
        def get_new_members(self):
            self.ensure_one()
            members = self.env['scop.membership.period'].search([
                ('type_id', '=', self.env.ref(
                    'cgscop_partner.membership_type_1').id),
                ('start', '>=', date(self.year, 1, 1)),
                ('start', '<=', date(self.year, 12, 31)),
                '|',
                ('end', '=', None),
                ('end', '>', date(self.year, 1, 1))
            ]).mapped('partner_id')
            return members
    
        def round_to_closest_multiple(self, float_to_round, multiple):
            """
            :param float_to_round:
            :param multiple:
            :return: closest_multiple
            """
            small_multiple = (float_to_round // multiple) * multiple
            large_multiple = small_multiple + multiple
    
            # Return the closest of two
            if abs(float_to_round - small_multiple) < large_multiple:
                return small_multiple
            else:
                return large_multiple