Sélectionner une révision Git
account_invoice_employee_assign.py
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()