یکی از ویژگی های اصلی Odoo توانایی آن در نگهداری چندین شرکت است که به کاربران این امکان را می دهد تا به راحتی اطلاعات چندین شرکت را حفظ کنند. همچنین به ما امکان مدیریت عملیات را می دهد.
از هر شرکت به طور مستقل و به اشتراک گذاری برخی از داده ها مانند محصولات، مشتریان و غیره.
اگر ما آنها را به درستی مدیریت نکنیم، بسیاری از مسائل مربوط به چند شرکت به وجود خواهد آمد. بنابراین، Odoo ویژگی های بسیاری را ارائه می دهد که به ما در مدیریت صحیح آنها کمک می کند.
در این مطلب به بررسی هر یک از این ویژگی ها می پردازیم.
در زیر ویژگی های ارائه شده توسط Odoo برای مدیریت چند شرکت ذکر شده است.
1. زمینه های وابسته به شرکت.
شرایطی وجود دارد که ممکن است از چندین شرکت به یک سابقه دسترسی داشته باشیم. در چنین مواردی، ممکن است نیاز داشته باشیم که مقادیر مختلفی را برای یک فیلد در زمانی که به هر شرکت بستگی دارد، ذخیره کنیم.
ممکن است قیمت های متفاوتی را برای یک محصول برای شرکت های مختلف تعیین کند.
برای این کار باید فیلد خود را با ویژگی company_dependent تعریف کنیم که باعث می شود فیلد یک ذخیره رکورد مقادیر متفاوتی داشته باشد.
company_details = fields.Text(string="Company Details", company_dependent=True)
ویژگی company_dependent دو مقدار می گیرد. درست یا غلط. اگر درست باشد، فیلد مربوطه بسته به شرکت مقادیر متفاوتی خواهد داشت.
2) with_company
اگر مقادیر یک فیلد وابسته به شرکت را که به جای شرکت فعال فعلی از یک شرکت دیگر تنظیم شده است، باید مطمئن شویم که مقدار مربوط به آن را بازیابی می کنیم.
زمینه از شرکت صحیح برای این منظور Odoo ORM ویژگی with_company را ارائه می کند.
@api.onchange('company_details')
def _onchange_company_details(self):
self = self.with_company(self.company_id)
3) check_company
اگر از رکوردها در چند شرکت استفاده کنیم، شانس اتصال یک رکورد شرکت به دیگری وجود خواهد داشت. به عنوان مثال، اگر یک فیلد company_id در مدل خود داشته باشیم، فیلد رابطه ای تعریف شده در آن مدل باید مقادیری را از همان شرکت بگیرد. در غیر این صورت، خطاهای مربوط به چند شرکت را ایجاد می کند.
برای اطمینان از این موضوع، Odoo دو ویژگی به نامهای _check_company_auto و check_company ارائه میکند.
from odoo import fields, modelsclass CompanyDetail(models.Model): _name = 'company.detail' _check_company_auto = True
_check_company_auto یک ویژگی کلاس است که باید در تعریف کلاس زیر تعریف شود.
ویژگی _check_company_auto باید روی True تنظیم شود. بنابراین، هنگام ایجاد یا ویرایش رکوردها از این مدل، یک تابع خودکار برای بررسی اینکه آیا مقدار صحیح داده شده است یا نه فعال می شود.
check_company یک ویژگی فیلد است که می تواند در تعریف فیلد مانند زیر ارائه شود.
user_id = fields.Many2one('res.users', string='Technician', check_company=True)
پس از افزودن check_company به یک فیلد، دامنه پیشفرض ['|', '('company_id', '=', False), ('company_id', '=', company_id)] به فیلد اضافه میشود. بنابراین نیازی نیست که ما این را به چنین زمینه هایی اضافه کنیم.
4) شرکت پیش فرض
Odoo ORM همچنین ویژگی دیگری را برای تنظیم شرکت پیش فرض در زمینه سوابق شرکت ارائه می دهد. اگر فیلد company_id یک فیلد الزامی باشد یا اگر برای آن نامرئی باشد، مفیدتر خواهد بود.
کاربرانی که به گروه base.group_multi_company دسترسی ندارند.
company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company)
5) دیدگاه ها
مواردی وجود خواهد داشت که کاربران به چند شرکت دسترسی ندارند. چنین کاربرانی نباید فیلد company_id را در سوابق مشاهده کنند. برای پنهان کردن فیلد شرکت از چنین کاربرانی، می توانیم یک کاربر اضافه کنیم.
گروهی به نام base.group_multi_company در نمای زیر.
<record model="ir.ui.view" id="company_detail_form_view">
<field name="name">company.detail.form</field>
<field name="model">company.detail</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<group>
<field name="company_id" groups="base.group_multi_company"/>
<field name="user_id"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
6) قوانین امنیتی
هنگام کار با چند شرکت، مهم است که اطمینان حاصل شود که کاربران سایر شرکت ها به سوابق دیگری غیر از شرکت های خود دسترسی ندارند.
در اینجا از قوانین امنیتی مبتنی بر company_ids استفاده می شود که اطمینان حاصل می کند که دسترسی به سوابق هر شرکت ایمن است.
اگر رکورد توسط همه شرکتها قابل اشتراکگذاری باشد، قانون را میتوان به این صورت تعریف کرد.
<record id="product_category_comp_rule" model="ir.rule">
<field name="name">Product Category multi-company</field>
<field name="model_id" ref="product.model_product_category"/>
<field name="domain_force">['|', ('company_id', 'in', company_ids), ('company_id', '=', False)]
</field>
</record>
اگر رکورد فقط به یک شرکت محدود شود، قانون را می توان به صورت زیر تعریف کرد.
<record id="product_category_comp_rule" model="ir.rule"> <field name="name">Product Category multi-company</field> <field name="model_id" ref="product.model_product_category"/> <field name="domain_force">[('company_id', 'in', company_ids)]</field></record>
اینها ویژگی هایی است که توسط Odoo برای مدیریت چند شرکت ارائه شده است.
دستورالعمل های چند شرکتی در Odoo