Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • e4507d91869e6bd251762267bf6b75791f6fa7b1
  • 12.0 par défaut protégée
2 résultats

account_invoice_employee_assign.py

Blame
  • account_invoice_employee_assign.py 3,17 Kio
    # Copyright 2022 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    from odoo import _, api, fields, models
    from odoo.exceptions import UserError
    
    
    class AccountInvoiceEmployeeAssign(models.Model):
        _name = "account.invoice.employee.assign"
        _description = "Ventilation des factures par employé"
    
        @api.model
        def _get_partner_domain(self):
            partner_ids = self.env.ref("base.main_partner")
            partner_ids += (
                self.env["hr.employee"].search([]).mapped("user_id").mapped("partner_id")
            )
            return [("id", "in", partner_ids.ids)]
    
        invoice_id = fields.Many2one(
            comodel_name="account.invoice", string="Facture", required=True
        )
        partner_id = fields.Many2one(
            comodel_name="res.partner",
            string="Employé",
            domain=_get_partner_domain,
            required=True,
        )
        percentage = fields.Float("Pourcentage", default=0.0, required=True)
    
        # ------------------------------------------------------
        # Constrains
        # ------------------------------------------------------
        @api.constrains("percentage")
        def _check_percentage(self):
            for record in self:
                if record.percentage < 0 or record.percentage > 100:
                    raise UserError(_("Le pourcentage doit être entre 0 et 100"))
    
        # ------------------------------------------------------
        # Override ORM
        # ------------------------------------------------------
        @api.model
        def create(self, vals):
            res = super(AccountInvoiceEmployeeAssign, self).create(vals)
            if vals:
                message = "Création ligne d'affectation : "
                for val in vals:
                    message += (
                        self.env["res.partner"].browse(val.get("partner_id")).name
                        + " - " + val.get("percent") + "%"
                    )
                res.invoice_id.message_post(message)
            return res
    
        @api.model
        def create(self, vals):
            res = super(AccountInvoiceEmployeeAssign, self).create(vals)
            if vals:
                print(vals)
                message = "<strong>Affectation</strong> | Création ligne d'affectation : "
                message += (
                    self.env["res.partner"].browse(vals.get("partner_id")).name
                    + " - " + str(vals.get("percentage")) + "%"
                )
                res.invoice_id.message_post(body=message)
            return res
    
        @api.multi
        def write(self, vals):
            for line in self:
                message = (
                    "<strong>Affectation</strong> | Modification de la ligne : "
                    + line.partner_id.name + " - " + str(line.percentage) + "%"
                )
                line.invoice_id.message_post(body=message)
            result = super(AccountInvoiceEmployeeAssign, self).write(vals)
            return result
    
        @api.multi
        def unlink(self):
            for line in self:
                message = (
                    "<strong>Affectation</strong> | Suppression de la ligne : "
                    + line.partner_id.name + " - " + str(line.percentage) + "%"
                )
                line.invoice_id.message_post(body=message)
            return super(AccountInvoiceEmployeeAssign, self).unlink()