diff --git a/services/auth_services.py b/services/auth_services.py
index b4e5e1d85c8c0a661a72e1aaf7af31b81944e1b1..9716ec11738cc6fe805e8cebbb7614f8c961ff28 100644
--- a/services/auth_services.py
+++ b/services/auth_services.py
@@ -2,11 +2,10 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 import logging
-import werkzeug
-
 from datetime import datetime, timedelta
 
 import jwt
+import werkzeug
 
 from odoo.addons.base_rest import restapi
 from odoo.addons.component.core import Component
@@ -95,7 +94,8 @@ class AuthService(Component):
             if user:
                 jwt_validator = self.env.ref("acc_rest_api.elo_validator").sudo()
                 exp = datetime.now() + timedelta(
-                    hours=(jwt_validator.token_expiration * 24))
+                    hours=(jwt_validator.token_expiration * 24)
+                )
                 payload = {
                     "aud": jwt_validator.audience,
                     "iss": jwt_validator.issuer,
@@ -111,14 +111,16 @@ class AuthService(Component):
                 )
                 datas = {
                     # "user": user_datas,
-                    "token": {"access_token": token,
-                              "expiration_date": payload.get("exp")},
+                    "token": {
+                        "access_token": token,
+                        "expiration_date": payload.get("exp"),
+                    },
                 }
                 # send email to users with their signup url
                 template = False
                 if not template:
-                    template = self.env.ref('acc_portal.acc_reset_password_email')
-                assert template._name == 'mail.template'
+                    template = self.env.ref("acc_portal.acc_reset_password_email")
+                assert template._name == "mail.template"
 
                 # template.sudo().write(template_values)
                 try:
@@ -126,26 +128,29 @@ class AuthService(Component):
                     lang = user.lang
 
                     query = dict(db=self.request.env.cr.dbname)
-                    query['login'] = user.login
-                    route = 'signup'
+                    query["login"] = user.login
+                    route = "signup"
                     signup_url = "/%s?%s" % (route, werkzeug.urls.url_encode(query))
-                    signup_url = werkzeug.urls.url_join(user.company_id.url_app, signup_url)
+                    signup_url = werkzeug.urls.url_join(
+                        user.company_id.url_app, signup_url
+                    )
 
                     user.partner_id.sudo().signup_prepare()
 
                     template.sudo().with_context(
-                        portal_url=signup_url,
-                        lang=lang
-                    ).send_mail(
-                        user.id,
-                        force_send=True,
-                        raise_exception=True)
+                        portal_url=signup_url, lang=lang
+                    ).send_mail(user.id, force_send=True, raise_exception=True)
                 except Exception as e:
-                    datas['error'] = str(e)
-                _logger.info("Password reset email sent for user <%s> to <%s>",
-                                 user.login, user.email)
+                    datas["error"] = str(e)
+                _logger.info(
+                    "Password reset email sent for user <%s> to <%s>",
+                    user.login,
+                    user.email,
+                )
             else:
-                datas['info'] = "Veuillez réinitialiser votre mot de passe: adresse email incorrecte"
+                datas[
+                    "info"
+                ] = "Veuillez réinitialiser votre mot de passe: adresse email incorrecte"
         return datas
 
     @restapi.method(
@@ -195,9 +200,11 @@ class AuthService(Component):
             user = User.search([("login", "=", login)])
             if user:
                 if password == confirm_password:
-                    user.write({'password': password})
+                    user.write({"password": password})
                 else:
-                    datas['error'] = "Les mots de passe ne correspondent pas, veuillez les saisir à nouveau."
+                    datas[
+                        "error"
+                    ] = "Les mots de passe ne correspondent pas, veuillez les saisir à nouveau."
         return datas
 
     @restapi.method(
@@ -229,7 +236,8 @@ class AuthService(Component):
                 if password == confirm_password:
                     jwt_validator = self.env.ref("acc_rest_api.elo_validator").sudo()
                     exp = datetime.now() + timedelta(
-                        hours=(jwt_validator.token_expiration * 24))
+                        hours=(jwt_validator.token_expiration * 24)
+                    )
                     payload = {
                         "aud": jwt_validator.audience,
                         "iss": jwt_validator.issuer,
@@ -245,12 +253,16 @@ class AuthService(Component):
                     )
                     datas = {
                         "user": user_datas,
-                        "token": {"access_token": token,
-                                  "expiration_date": payload.get("exp")},
+                        "token": {
+                            "access_token": token,
+                            "expiration_date": payload.get("exp"),
+                        },
                     }
-                    user.write({'password': password})
+                    user.write({"password": password})
                 else:
-                    datas["error"] = "Les mots de passe ne correspondent pas, veuillez les saisir à nouveau."
+                    datas[
+                        "error"
+                    ] = "Les mots de passe ne correspondent pas, veuillez les saisir à nouveau."
                     datas["user"] = user_datas
         return datas
 
@@ -427,6 +439,6 @@ class AuthService(Component):
                     "access_token": {"type": "string", "nullable": True},
                     "expiration_date": {"type": "datetime", "nullable": True},
                 },
-                "nullable": True
+                "nullable": True,
             },
         }
diff --git a/services/operation_services.py b/services/operation_services.py
index eb6a710ccd89a61c4be01f4a629e36aeee3f7c57..e24b668d89fe4659a53c09c3c5f13eda13798f06 100644
--- a/services/operation_services.py
+++ b/services/operation_services.py
@@ -175,8 +175,8 @@ class OperationsService(Component):
         }
         if type == "invoice":
             # Récupération de toutes les factures liées à l'opération spécifiée
-            acc_account_ids = (
-                self.env["acc.account"].search([("acc_operation_id", "=", _id)])
+            acc_account_ids = self.env["acc.account"].search(
+                [("acc_operation_id", "=", _id)]
             )
 
             datas["documents"] = []
@@ -192,9 +192,15 @@ class OperationsService(Component):
                 datas["documents"].append(val)
         else:
             # Récupération de toutes les factures liées à l'opération spécifiée
-            acc_contract_ids = (
-                self.env["acc.contract"].search([("acc_operation_id", "=", _id)])
-            )
+            domain = [("acc_operation_id", "=", _id)]
+            role = self._get_role(operation)
+            if role.get("isConsumer"):
+                domain += [("type", "=", "achat")]
+            if role.get("isProductor"):
+                domain += [("type", "=", "vente")]
+            if role.get("isPmo"):
+                domain += [("type", "!=", False)]
+            acc_contract_ids = self.env["acc.contract"].search(domain)
 
             datas["contracts"] = []
             for n in acc_contract_ids:
@@ -224,9 +230,9 @@ class OperationsService(Component):
             if invoice:
                 invoice_sudo = invoice.with_user(SUPERUSER_ID).exists()
 
-                report_sudo = request.env.ref("acc_account.acc_account_invoices").with_user(
-                    SUPERUSER_ID
-                )
+                report_sudo = request.env.ref(
+                    "acc_account.acc_account_invoices"
+                ).with_user(SUPERUSER_ID)
 
                 pdf = report_sudo._render_qweb_pdf(
                     [invoice_sudo.id], data={"report_type": "pdf"}
@@ -237,7 +243,9 @@ class OperationsService(Component):
                     ("Content-Length", len(pdf)),
                 ]
                 filename = "Facture.pdf"
-                reporthttpheaders.append(("Content-Disposition", content_disposition(filename)))
+                reporthttpheaders.append(
+                    ("Content-Disposition", content_disposition(filename))
+                )
                 return request.make_response(b64_pdf)
         else:
             contract_id = self.request.params.get("invoice_id", False)
@@ -250,7 +258,8 @@ class OperationsService(Component):
                 ]
                 filename = "Contrat.pdf"
                 reporthttpheaders.append(
-                    ("Content-Disposition", content_disposition(filename)))
+                    ("Content-Disposition", content_disposition(filename))
+                )
                 return request.make_response(contract_sudo.document)
 
     @restapi.method(