Pular para o conteúdo
Menu
Esta pergunta foi sinalizada
1 Responder
1037 Visualizações

¿Is there any way to prevent the applications and settings I configure for one of my companies in a multi-company environment from being replicated in the others? For example, I have electronic invoicing for two companies in different countries, which are unrelated, yet the configurations of one are being replicated in the other.

Avatar
Cancelar
Melhor resposta

In a multi-company environment in Odoo, managing configurations and applications independently for each company can sometimes be challenging because certain settings and applications are shared across all companies by default. However, Odoo provides mechanisms to isolate configurations and prevent cross-replication of settings.

Here’s how you can achieve this:

1. Understanding Multi-Company Configuration

  • Shared Data:
    • Some models and settings, such as users, apps, and certain configurations, are shared globally across companies.
  • Company-Specific Settings:
    • Other settings, like fiscal positions, taxes, and journals, can be configured per company.

2. Steps to Prevent Cross-Replication of Settings

A. Isolate Applications Per Company

  1. Activate Multi-Company Feature:
    • Go to Settings > Users & Companies > Companies.
    • Ensure each company is listed with the appropriate settings.
  2. Assign Users to Specific Companies:
    • Navigate to Settings > Users & Companies > Users.
    • Assign each user to their respective company under the Allowed Companies field.
    • Use the Default Company field to set the primary company for the user.
  3. Restrict User Access:
    • Ensure users are restricted to their assigned companies by enabling the multi-company rules:
      • Go to Settings > Technical > Security > Record Rules.
      • Check rules such as res.company to enforce isolation of company data.

B. Configure Applications Separately

Many applications, like Invoicing, Accounting, and Electronic Invoicing, need company-specific configurations. Here's how to isolate their settings:

  1. Electronic Invoicing:
    • Ensure separate journals, tax configurations, and fiscal positions for each company:
      • Go to Accounting > Configuration > Journals and create company-specific journals.
      • Set the Company field in each journal to the respective company.
    • Configure electronic invoicing independently for each company:
      • Go to Accounting > Configuration > Settings.
      • Switch the company context (via the dropdown in the top-right corner) and configure the settings separately.
  2. Company-Specific App Settings:
    • For apps like Sales, Purchases, and Inventory, switch the company context and configure independently:
      • For example, in Sales, create separate price lists, payment terms, and delivery methods for each company.
  3. Restrict Shared Modules:
    • Certain modules like HR or CRM might share configurations across companies. Use record rules to enforce isolation:
      • Navigate to Settings > Technical > Security > Record Rules.
      • Add a rule for the specific model (e.g., hr.employee for HR) to filter data by company:
        ['|', ('company_id', '=', False), ('company_id', '=', user.company_id.id)]
        

C. Prevent Shared Configurations in Global Settings

Some global configurations are shared by default (e.g., SMTP email servers, payment acquirers). You can isolate these by:

  1. Using Company-Specific Email Servers:
    • Go to Settings > Technical > Email > Outgoing Mail Servers.
    • Create a separate mail server for each company.
    • Assign the respective company in the Company field.
  2. Company-Specific Payment Acquirers:
    • Navigate to Settings > Payments > Payment Acquirers.
    • Configure a separate payment acquirer (e.g., PayPal, Stripe) for each company and assign it to the correct company.

3. Advanced Techniques

A. Use Record Rules for Data Isolation

Create custom record rules for critical models to prevent cross-replication of settings and records:

  1. Go to Settings > Technical > Security > Record Rules.
  2. Add a new rule for the model you want to isolate (e.g., account.journal).
  3. Use a domain like this:
    [('company_id', '=', user.company_id.id)]
    
  4. Assign the rule to the appropriate groups or users.

B. Custom Code for Deeper Isolation

For more complex scenarios, you can extend Odoo models or views to enforce company-specific logic programmatically.

Example: Restrict certain settings for a company

from odoo import models, api

class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    @api.model
    def default_get(self, fields):
        res = super(ResConfigSettings, self).default_get(fields)
        if self.env.user.company_id.name == 'Company A':
            res['field_x'] = 'Company A Default Value'
        return res

4. Switching Companies for Configuration

Ensure you always switch to the relevant company context when configuring applications:

  • Use the company selector in the top-right corner of the Odoo interface to change the active company.
  • Configure settings, fiscal rules, or workflows for the selected company.

5. Best Practices

  • Test in a Sandbox: Always test multi-company configurations in a sandbox environment before rolling them out.
  • Document Configurations: Maintain clear documentation of what settings are applied to each company.
  • Train Users: Ensure users understand how to use the multi-company dropdown and their company restrictions.

By implementing these measures, you can effectively prevent the cross-replication of settings and applications in a multi-company Odoo environment. Let me know if you need further guidance or help implementing specific configurations!

Avatar
Cancelar
Publicações relacionadas Respostas Visualizações Atividade
0
abr. 25
3
1
mai. 25
976