migrate some modules

This commit is contained in:
Mostafa 2025-09-16 13:40:57 -07:00
parent 37f9786761
commit 2b4023d168
596 changed files with 41384 additions and 0 deletions

View File

@ -0,0 +1,28 @@
Odoo Proprietary License v1.0
This software and associated files (the "Software") may only be used (executed,
modified, executed after modifications) if you have purchased a valid license
from the authors, typically via Odoo Apps, or if you have received a written
agreement from the authors of the Software (see the COPYRIGHT file).
You may develop Odoo modules that use the Software as a library (typically
by depending on it, importing it and using its resources), but without copying
any source code or material from the Software. You may distribute those
modules under the license of your choice, provided that this license is
compatible with the terms of the Odoo Proprietary License (For example:
LGPL, MIT, or proprietary licenses similar to this one).
It is forbidden to publish, distribute, sublicense, or sell copies of the Software
or modified copies of the Software.
The above copyright notice and this permission notice must be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View File

@ -0,0 +1,44 @@
Version 14.0.0.1 : (23/10/20)
- Update _assign_picking() and _create_account_move_line() methods as per base.
14.0.0.3==> added abstract_web_client js according to v14.
=> 14.0.0.4 : Add language translate with index.
date 03/05/21
version 14.0.0.5
issue solve:-
- invoice and bill genenrated in sinlge click
=> 14.0.0.9 : Add French, Spanish , Arabic and Dutch translation in module also improved an index.
date 02/09/21
version 14.0.1.0
issue solve:-
- account payment register wizard not show branch field.
date 09/09/21
version 14.0.2.0
issue solve:-
- show branch field in sale , purchase ,invoice bill and payment tree view
date 13/09/21
version 14.0.3.0
issue solve:-
1. From demo user->In sale rights, I give User: Own Documents Only ->but it shows the sale order of all the users(when I give branch in sale order)
2. From demo user, ->change branch from header ->in pos, when I open shop it generates traceback
3. from demo user->in Invoice -> It shows all the invoices of all the branches.
date 27/09/21
version 14.0.4.0
issue solve:-
1.) . Sales -> Quotation / Orders -> On changing Branch from dropdown header it shows older branch records until refresh the page. Not refreshing records with changing branch.
14.0.4.1 (1-10-21) : Pass branch in account move correct, two view name same for different object changed it and fixed.

View File

@ -0,0 +1,9 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from . import models
from . import reports
from . import wizard
from . import controllers
from .hooks import post_init_hook
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,129 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
{
'name': 'Multiple Branch Unit Operation Setup for All Applications Odoo',
'version': '18.0.1.0.0',
'category': 'Sales',
'summary': 'Multiple Branch Management Multi Branch app Multiple Unit multiple Operating unit sales branch Sales Purchase branch Invoicing branch billing Voucher branch warehouse branch Payment branch Accounting Reports for single company Multi Branches multi company',
"description": """
Multiple Unit operation management for single company Multiple Branch management for single company
multiple operation for single company branching company in odoo multiple store multiple company in odoo
Branch for POS Branch for Sales Branch for Purchase Branch for all Branch for Accounting Branch for invoicing Branch for Payment order Branch for point of sales Branch for voucher
Branch for All Accounting reports Branch Accounting filter Branch for warehouse branch for sale stock branch for location
Unit for POS Unit for Sales Unit for Purchase Unit for all Unit for Accounting Unit for invoicing Unit for Payment order Unit for point of sales Unit for voucher Unit
unit All Accounting reports Unit Accounting filter branch unit for warehouse branch unit for sale stock branch unit for location
Unit Operation for POS Unit Operation for Sales Unit operation for Purchase Unit operation for all Unit operation for Accounting Unit Operation for invoicing Unit operation for Payment order Unit operation for point of sales Unit operation for voucher Unit operation for All Accounting reports Unit operation Accounting filter.
Branch Operation for POS Branch Operation for Sales Branch operation for Purchase Branch operation for all Branch operation for Accounting Branch Operation for invoicing Branch operation for Payment order Branch operation for point of sales Branch operation for voucher Branch operation for All Accounting reports Branch operation Accounting filter.
Odoo pos multi branch POS odoo point of sale multi branch point of sales
odoo point of sales multi branch on POS
Odoo pos multiple branch POS odoo point of sale multiple branch point of sales
odoo point of sales multiple branch on POS
Odoo pos multiple-branch POS odoo point of sale multiple-branch point of sales
odoo point of sales multiple-branch on POS
odoo Multiple Unit operation management for single company Multiple Branch management for single company
odoo multiple operation for single company. branching company in odoo multiple store multiple company in odoo
odoo Branch for POS Branch for Sales Branch for Purchase Branch for all Branch for Accounting Branch for invoicing Branch for Payment order Branch for point of sales Branch for voucher
odoo Branch for All Accounting reports Branch Accounting filter Branch for warehouse branch for sale stock branch for location
odoo Unit for POS Unit for Sales Unit for Purchase Unit for all Unit for Accounting Unit for invoicing Unit for Payment order
odoo Unit for point of sales Unit for voucher Unit for All Accounting reports Unit Accounting filter
odoo branch unit for warehouse branch unit for sale stock branch unit for location
odoo Unit Operation for POS Unit Operation for Sales Unit operation for Purchase Unit operation for all Unit operation for Accounting
odoo Unit Operation for invoicing Unit operation for Payment order Unit operation for point of sales Unit operation for voucher Unit operation for All Accounting reports
odoo Unit operation Accounting filter Branch Operation for POS Branch Operation for Sales
odoo Branch operation for Purchase Branch operation for all Branch operation for Accounting Branch Operation for invoicing
odoo Branch operation for Payment order Branch operation for point of sales Branch operation for voucher Branch operation for All Accounting reports Branch operation Accounting filter.
odoo branch helpdesk and support branch support and helpdesk
odoo helpdesk branch helpdesk unit helpdek multiple unit helpdesk operation unit
odoo branch crm odoo crm branch crm operating unit crm unit operation management crm multiple unit operating unit crm
odoo branch Subscription branch contract Subscription branch management
odoo contract branch management operating unit Subscription operating unit contract
odoo Subscription unit management contract unit management Subscription operating unit management
odoo contract operating unit management operating unit for company multi branch management
odoo multi branch application multi operation unit application multi branch odoo multi branch
odoo all in one multi branch application multi branch unit operation multi unit operation branch management
odoo multi branches management application multi operation management operating Unit for POS operating Unit for Sales
odoo operating Units for Purchase operating Unit for all operating Unit for Accounting operating Unit for invoicing
odoo operating Unit for Payment order operating Unit for point of sales operating Unit for voucher operating Unit for All Accounting reports operating Unit Accounting filter.
odoo Operating unit for picking operating unit for warehouse operating unit for sale stock operating unit for location
odoo operating-Unit Operation for POS operating-Unit Operation for Sales operating-Unit operation for Purchase operating-Unit operation for all
odoo operating-Unit operation for Accounting operating-Unit Operation for invoicing operating-Unit operation for Payment order operating-Unit operation for point of sales
odoo operating-Unit operation for voucher operating-Unit operation for All Accounting reports operating-Unit operation Accounting filter.
odoo multi branches management odoo branches management odoo multiple branches management on odoo branchs mananegement
odoo many branches for single company odoo
branch helpdesk and support
branch support and helpdesk
helpdesk branch
helpdesk unit
helpdek multiple unit
helpdesk operation unit
branch crm
MultiBranch
multi company
crm branch
crm operating unit
crm unit operation management
crm multiple unit
operating unit crm
branch Subscription
branch contract
Subscription branch management
contract branch management
operating unit Subscription
operating unit contract
Subscription unit management
contract unit management
Subscription operating unit management
contract operating unit management
operating unit for company.
multi branch management
multi branch application
multi operation unit application multi branch odoo multi branch
all in one multi branch application multi branch unit operation multi unit operation branch management
odoo multi branches management application multi operation management
operating Unit for POS,operating Unit for Sales,operating Unit for Purchase,operating Unit for all,operating Unit for Accounting,operating Unit for invoicing,operating Unit for Payment order,operating Unit for point of sales,operating Unit for voucher,operating Unit for All Accounting reports,operating Unit Accounting filter. Operating unit for picking, operating unit for warehouse, operating unit for sale stock, operating unit for location
operating-Unit Operation for POS,operating-Unit Operation for Sales,operating-Unit operation for Purchase,operating-Unit operation for all, operating-Unit operation for Accounting,operating-Unit Operation for invoicing,operating-Unit operation for Payment order,operating-Unit operation for point of sales,operating-Unit operation for voucher,operating-Unit operation for All Accounting reports,operating-Unit operation Accounting filter.
""",
'author': 'BrowseInfo',
'website': 'https://www.browseinfo.in',
"price": 149.00,
"currency": 'EUR',
'depends': ['base', 'sale_management', 'purchase', 'stock', 'account', 'purchase_stock','web'],
'data': [
'security/branch_security.xml',
'security/multi_branch.xml',
'security/ir.model.access.csv',
'views/res_branch_view.xml',
'views/inherited_res_users.xml',
'views/inherited_sale_order.xml',
'views/inherited_stock_picking.xml',
'views/inherited_stock_move.xml',
'views/inherited_account_invoice.xml',
'views/inherited_purchase_order.xml',
'views/inherited_stock_warehouse.xml',
'views/inherited_stock_location.xml',
'views/inherited_account_bank_statement.xml',
'wizard/inherited_account_payment.xml',
'views/inherited_stock_inventory.xml',
'views/inherited_product.xml',
'views/inherited_partner.xml',
'views/branch_template.xml',
],
'assets': {
'web.assets_backend': [
'branch/static/src/js/session.js',
'branch/static/src/js/abstract_web_client.js',
'branch/static/src/js/default_branch.js',
'branch/static/src/xml/branch.xml',
],
},
'installable': True,
'auto_install': False,
'live_test_url':'https://youtu.be/hi1b8kH5Z94',
"images":['static/description/Banner.png'],
'post_init_hook': 'post_init_hook',
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from . import main
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import http, _
from odoo.addons.portal.controllers.portal import CustomerPortal, pager as portal_pager
from odoo.http import request
class SetBranch(http.Controller):
@http.route('/set_brnach', type='json', auth="public", methods=['POST'], website=True)
def custom_hours(self, BranchID, **post):
user_id = request.env['res.users'].sudo().search([('id','=',request.env.user.id)])
user_id.branch_id = BranchID
return
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,15 @@
# -*- encoding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID
from odoo import api
def post_init_hook(cr, registry):
"""
website menu hide
"""
env = api.Environment(cr, SUPERUSER_ID, {})
cr.execute("""
update ir_model_data set noupdate=False where
model ='ir.rule' """)

View File

@ -0,0 +1,273 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * branch
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-08 13:27+0000\n"
"PO-Revision-Date: 2021-02-08 13:27+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__address
msgid "Address"
msgstr "عنوان"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "All the account entries lines must be processed in order to close the statement."
msgstr "يجب معالجة جميع سطور إدخالات الحساب لإغلاق البيان."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_users__branch_ids
msgid "Allowed Branch"
msgstr "الفرع المسموح به"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement
msgid "Bank Statement"
msgstr "كشف حساب بنكى"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "خط كشف الحساب المصرفي"
#. module: branch
#: model:ir.actions.act_window,name:branch.branch_action_res_branch
#: model:ir.model,name:branch.model_res_branch
#: model:ir.model.fields,field_description:branch.field_account_bank_statement__branch_id
#: model:ir.model.fields,field_description:branch.field_account_bank_statement_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_invoice_report__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_payment__branch_id
#: model:ir.model.fields,field_description:branch.field_product_product__branch_id
#: model:ir.model.fields,field_description:branch.field_product_template__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order_line__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_report__branch_id
#: model:ir.model.fields,field_description:branch.field_res_partner__branch_id
#: model:ir.model.fields,field_description:branch.field_res_users__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_order__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_report__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_inventory__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_location__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_move__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking_type__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_warehouse__branch_id
#: model:ir.module.category,name:branch.module_branch_management
#: model:ir.ui.menu,name:branch.branch_menu_res_branch
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_form
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_tree
#: model_terms:ir.ui.view,arch_db:branch.view_move_line_order_filter_inherit_branch11
#: model_terms:ir.ui.view,arch_db:branch.view_order_form_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_purchase_order_filter_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_sales_order_filter_inherit_branch
msgid "Branch"
msgstr "فرع شجرة"
#. module: branch
#: model_terms:ir.actions.act_window,help:branch.branch_action_res_branch
msgid "Click here to create a new branch."
msgstr "انقر هنا لإنشاء فرع جديد."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__company_id
msgid "Company"
msgstr "شركة"
#. module: branch
#: code:addons/branch/models/inherited_stock_location.py:0
#, python-format
msgid "Configuration error You must select same branch on a location as assigned on a warehouse configuration."
msgstr "خطأ في التكوين يجب تحديد نفس الفرع في الموقع كما تم تعيينه في تكوين المستودع."
#. module: branch
#: model:ir.model,name:branch.model_res_partner
msgid "Contact"
msgstr "اتصل"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_uid
msgid "Created by"
msgstr "انشأ من قبل"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_date
msgid "Created on"
msgstr "تم إنشاؤها على"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__display_name
msgid "Display Name"
msgstr "اسم العرض"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Dropdown menu"
msgstr "القائمة المنسدلة"
#. module: branch
#: model:ir.model,name:branch.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__id
msgid "ID"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_stock_inventory
msgid "Inventory"
msgstr "المخزون"
#. module: branch
#: model:ir.model,name:branch.model_stock_location
msgid "Inventory Locations"
msgstr "مواقع الجرد"
#. module: branch
#: model:ir.model,name:branch.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "إحصائيات الفواتير"
#. module: branch
#: model:ir.model,name:branch.model_account_move
msgid "Journal Entries"
msgstr "إدخالات دفتر اليومية"
#. module: branch
#: model:ir.model,name:branch.model_account_move_line
msgid "Journal Item"
msgstr "عنصر المجلة"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch____last_update
msgid "Last Modified on"
msgstr "تاريخ آخر تعديل"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_uid
msgid "Last Updated by"
msgstr "آخر تحديث بواسطة"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_date
msgid "Last Updated on"
msgstr "آخر تحديث في"
#. module: branch
#: model:res.groups,name:branch.group_branch_user_manager
msgid "Manager"
msgstr "مدير"
#. module: branch
#: model:res.groups,name:branch.group_multi_branch
msgid "Multi Branches"
msgstr "متعدد الفروع"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__name
msgid "Name"
msgstr "اسم"
#. module: branch
#: model:ir.model,name:branch.model_account_payment
msgid "Payments"
msgstr "المدفوعات"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking_type
msgid "Picking Type"
msgstr "نوع الانتقاء"
#. module: branch
#: model:ir.model,name:branch.model_product_template
msgid "Product Template"
msgstr "نموذج المنتج"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order
msgid "Purchase Order"
msgstr "أمر شراء"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "خط طلب الشراء"
#. module: branch
#: model:ir.model,name:branch.model_purchase_report
msgid "Purchase Report"
msgstr "تقرير الشراء"
#. module: branch
#: model:ir.model,name:branch.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "فاتورة دفع مقدم المبيعات"
#. module: branch
#: model:ir.model,name:branch.model_sale_report
msgid "Sales Analysis Report"
msgstr "تقرير تحليل المبيعات"
#. module: branch
#: model:ir.model,name:branch.model_sale_order
msgid "Sales Order"
msgstr "طلب المبيعات"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "Statement %s confirmed, journal items were created."
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_stock_move
msgid "Stock Move"
msgstr "نقل الأسهم"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Switch to this branch"
msgstr "قم بالتبديل إلى هذا الفرع"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__telephone
msgid "Telephone No"
msgstr "الهاتف لا"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking
msgid "Transfer"
msgstr "نقل"
#. module: branch
#: model:res.groups,name:branch.group_branch_user
msgid "User"
msgstr "المستعمل"
#. module: branch
#: model:ir.model,name:branch.model_res_users
msgid "Users"
msgstr "المستخدمين"
#. module: branch
#: model:ir.model,name:branch.model_stock_warehouse
msgid "Warehouse"
msgstr "مستودع"

View File

@ -0,0 +1,273 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * branch
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-09 05:28+0000\n"
"PO-Revision-Date: 2021-02-09 05:28+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__address
msgid "Address"
msgstr "Habla a"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "All the account entries lines must be processed in order to close the statement."
msgstr "Todas las líneas de asientos de cuenta deben procesarse para cerrar el estado de cuenta."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_users__branch_ids
msgid "Allowed Branch"
msgstr "Rama permitida"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement
msgid "Bank Statement"
msgstr "Extracto de cuenta"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Línea de extracto bancario"
#. module: branch
#: model:ir.actions.act_window,name:branch.branch_action_res_branch
#: model:ir.model,name:branch.model_res_branch
#: model:ir.model.fields,field_description:branch.field_account_bank_statement__branch_id
#: model:ir.model.fields,field_description:branch.field_account_bank_statement_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_invoice_report__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_payment__branch_id
#: model:ir.model.fields,field_description:branch.field_product_product__branch_id
#: model:ir.model.fields,field_description:branch.field_product_template__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order_line__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_report__branch_id
#: model:ir.model.fields,field_description:branch.field_res_partner__branch_id
#: model:ir.model.fields,field_description:branch.field_res_users__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_order__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_report__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_inventory__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_location__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_move__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking_type__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_warehouse__branch_id
#: model:ir.module.category,name:branch.module_branch_management
#: model:ir.ui.menu,name:branch.branch_menu_res_branch
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_form
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_tree
#: model_terms:ir.ui.view,arch_db:branch.view_move_line_order_filter_inherit_branch11
#: model_terms:ir.ui.view,arch_db:branch.view_order_form_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_purchase_order_filter_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_sales_order_filter_inherit_branch
msgid "Branch"
msgstr "Rama"
#. module: branch
#: model_terms:ir.actions.act_window,help:branch.branch_action_res_branch
msgid "Click here to create a new branch."
msgstr "Haga clic aquí para crear una nueva rama."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__company_id
msgid "Company"
msgstr "Empresa"
#. module: branch
#: code:addons/branch/models/inherited_stock_location.py:0
#, python-format
msgid "Configuration error You must select same branch on a location as assigned on a warehouse configuration."
msgstr "Error de configuración Debe seleccionar la misma sucursal en una ubicación asignada en una configuración de almacén."
#. module: branch
#: model:ir.model,name:branch.model_res_partner
msgid "Contact"
msgstr "Contacto"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_date
msgid "Created on"
msgstr "Creado en"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__display_name
msgid "Display Name"
msgstr "Nombre para mostrar"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Dropdown menu"
msgstr "Menú desplegable"
#. module: branch
#: model:ir.model,name:branch.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__id
msgid "ID"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_stock_inventory
msgid "Inventory"
msgstr "Inventario"
#. module: branch
#: model:ir.model,name:branch.model_stock_location
msgid "Inventory Locations"
msgstr "Ubicaciones de inventario"
#. module: branch
#: model:ir.model,name:branch.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Estadísticas de facturas"
#. module: branch
#: model:ir.model,name:branch.model_account_move
msgid "Journal Entries"
msgstr "Entradas de diario"
#. module: branch
#: model:ir.model,name:branch.model_account_move_line
msgid "Journal Item"
msgstr "Artículo de diario"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch____last_update
msgid "Last Modified on"
msgstr "Última modificación el"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_uid
msgid "Last Updated by"
msgstr "Actualizado por última vez por"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_date
msgid "Last Updated on"
msgstr "Ultima actualización en"
#. module: branch
#: model:res.groups,name:branch.group_branch_user_manager
msgid "Manager"
msgstr "Gerente"
#. module: branch
#: model:res.groups,name:branch.group_multi_branch
msgid "Multi Branches"
msgstr "Varias ramas"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__name
msgid "Name"
msgstr "Nombre"
#. module: branch
#: model:ir.model,name:branch.model_account_payment
msgid "Payments"
msgstr "Pagos"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking_type
msgid "Picking Type"
msgstr "Tipo de selección"
#. module: branch
#: model:ir.model,name:branch.model_product_template
msgid "Product Template"
msgstr "Plantilla de producto"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order
msgid "Purchase Order"
msgstr "Orden de compra"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Línea de orden de compra"
#. module: branch
#: model:ir.model,name:branch.model_purchase_report
msgid "Purchase Report"
msgstr "Informe de compra"
#. module: branch
#: model:ir.model,name:branch.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Factura de anticipo de ventas"
#. module: branch
#: model:ir.model,name:branch.model_sale_report
msgid "Sales Analysis Report"
msgstr "Informe de análisis de ventas"
#. module: branch
#: model:ir.model,name:branch.model_sale_order
msgid "Sales Order"
msgstr "Órdenes de venta"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "Statement confirmed, journal items were created."
msgstr "Declaración confirmada, se crearon elementos del diario."
#. module: branch
#: model:ir.model,name:branch.model_stock_move
msgid "Stock Move"
msgstr "Movimiento de stock"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Switch to this branch"
msgstr "Cambiar a esta rama"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__telephone
msgid "Telephone No"
msgstr "Teléfono no"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking
msgid "Transfer"
msgstr "Transferir"
#. module: branch
#: model:res.groups,name:branch.group_branch_user
msgid "User"
msgstr "Usuaria"
#. module: branch
#: model:ir.model,name:branch.model_res_users
msgid "Users"
msgstr "Usuarias"
#. module: branch
#: model:ir.model,name:branch.model_stock_warehouse
msgid "Warehouse"
msgstr "Almacén"

View File

@ -0,0 +1,273 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * branch
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-09 06:11+0000\n"
"PO-Revision-Date: 2021-02-09 06:11+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__address
msgid "Address"
msgstr "Adresse"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "All the account entries lines must be processed in order to close the statement."
msgstr "Toutes les lignes d'écritures de compte doivent être traitées afin de fermer le relevé."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_users__branch_ids
msgid "Allowed Branch"
msgstr "Succursale autorisée"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement
msgid "Bank Statement"
msgstr "Relevé bancaire"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Ligne de relevé bancaire"
#. module: branch
#: model:ir.actions.act_window,name:branch.branch_action_res_branch
#: model:ir.model,name:branch.model_res_branch
#: model:ir.model.fields,field_description:branch.field_account_bank_statement__branch_id
#: model:ir.model.fields,field_description:branch.field_account_bank_statement_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_invoice_report__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_payment__branch_id
#: model:ir.model.fields,field_description:branch.field_product_product__branch_id
#: model:ir.model.fields,field_description:branch.field_product_template__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order_line__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_report__branch_id
#: model:ir.model.fields,field_description:branch.field_res_partner__branch_id
#: model:ir.model.fields,field_description:branch.field_res_users__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_order__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_report__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_inventory__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_location__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_move__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking_type__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_warehouse__branch_id
#: model:ir.module.category,name:branch.module_branch_management
#: model:ir.ui.menu,name:branch.branch_menu_res_branch
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_form
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_tree
#: model_terms:ir.ui.view,arch_db:branch.view_move_line_order_filter_inherit_branch11
#: model_terms:ir.ui.view,arch_db:branch.view_order_form_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_purchase_order_filter_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_sales_order_filter_inherit_branch
msgid "Branch"
msgstr "Branche"
#. module: branch
#: model_terms:ir.actions.act_window,help:branch.branch_action_res_branch
msgid "Click here to create a new branch."
msgstr "Cliquez ici pour créer une nouvelle branche."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__company_id
msgid "Company"
msgstr "Entreprise"
#. module: branch
#: code:addons/branch/models/inherited_stock_location.py:0
#, python-format
msgid "Configuration error You must select same branch on a location as assigned on a warehouse configuration."
msgstr "Erreur de configuration Vous devez sélectionner la même succursale sur un emplacement comme affectée dans une configuration d'entrepôt."
#. module: branch
#: model:ir.model,name:branch.model_res_partner
msgid "Contact"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_date
msgid "Created on"
msgstr "Créé sur"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__display_name
msgid "Display Name"
msgstr "Afficher un nom"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Dropdown menu"
msgstr "Menu déroulant"
#. module: branch
#: model:ir.model,name:branch.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__id
msgid "ID"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_stock_inventory
msgid "Inventory"
msgstr "Inventaire"
#. module: branch
#: model:ir.model,name:branch.model_stock_location
msgid "Inventory Locations"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Statistiques des factures"
#. module: branch
#: model:ir.model,name:branch.model_account_move
msgid "Journal Entries"
msgstr "Entrées de journal"
#. module: branch
#: model:ir.model,name:branch.model_account_move_line
msgid "Journal Item"
msgstr "Article de journal"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: branch
#: model:res.groups,name:branch.group_branch_user_manager
msgid "Manager"
msgstr "Directrice"
#. module: branch
#: model:res.groups,name:branch.group_multi_branch
msgid "Multi Branches"
msgstr "Branches multiples"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__name
msgid "Name"
msgstr "Nom"
#. module: branch
#: model:ir.model,name:branch.model_account_payment
msgid "Payments"
msgstr "Paiements"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking_type
msgid "Picking Type"
msgstr "Type de prélèvement"
#. module: branch
#: model:ir.model,name:branch.model_product_template
msgid "Product Template"
msgstr "Modèle de produit"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order
msgid "Purchase Order"
msgstr "Bon de commande"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Ligne de commande d'achat"
#. module: branch
#: model:ir.model,name:branch.model_purchase_report
msgid "Purchase Report"
msgstr "Rapport d'achat"
#. module: branch
#: model:ir.model,name:branch.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Facture de paiement anticipé des ventes"
#. module: branch
#: model:ir.model,name:branch.model_sale_report
msgid "Sales Analysis Report"
msgstr "Rapport d'analyse des ventes"
#. module: branch
#: model:ir.model,name:branch.model_sale_order
msgid "Sales Order"
msgstr "Commande client"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "Statement confirmed, journal items were created."
msgstr "Relevé confirmé, des éléments de journal ont été créés."
#. module: branch
#: model:ir.model,name:branch.model_stock_move
msgid "Stock Move"
msgstr "Déplacement de stock"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Switch to this branch"
msgstr "Passer à cette branche"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__telephone
msgid "Telephone No"
msgstr "N ° de téléphone"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking
msgid "Transfer"
msgstr "Transfert"
#. module: branch
#: model:res.groups,name:branch.group_branch_user
msgid "User"
msgstr "Utilisateur"
#. module: branch
#: model:ir.model,name:branch.model_res_users
msgid "Users"
msgstr "Utilisateurs"
#. module: branch
#: model:ir.model,name:branch.model_stock_warehouse
msgid "Warehouse"
msgstr "Entrepôt"

View File

@ -0,0 +1,273 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * branch
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 13.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-09 06:37+0000\n"
"PO-Revision-Date: 2021-02-09 06:37+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__address
msgid "Address"
msgstr "Adres"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "All the account entries lines must be processed in order to close the statement."
msgstr "Alle regels voor rekeningboekingen moeten worden verwerkt om het overzicht af te sluiten."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_users__branch_ids
msgid "Allowed Branch"
msgstr "Toegestane tak"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement
msgid "Bank Statement"
msgstr "Bankafschrift"
#. module: branch
#: model:ir.model,name:branch.model_account_bank_statement_line
msgid "Bank Statement Line"
msgstr "Bankafschriftregel"
#. module: branch
#: model:ir.actions.act_window,name:branch.branch_action_res_branch
#: model:ir.model,name:branch.model_res_branch
#: model:ir.model.fields,field_description:branch.field_account_bank_statement__branch_id
#: model:ir.model.fields,field_description:branch.field_account_bank_statement_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_invoice_report__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move__branch_id
#: model:ir.model.fields,field_description:branch.field_account_move_line__branch_id
#: model:ir.model.fields,field_description:branch.field_account_payment__branch_id
#: model:ir.model.fields,field_description:branch.field_product_product__branch_id
#: model:ir.model.fields,field_description:branch.field_product_template__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_order_line__branch_id
#: model:ir.model.fields,field_description:branch.field_purchase_report__branch_id
#: model:ir.model.fields,field_description:branch.field_res_partner__branch_id
#: model:ir.model.fields,field_description:branch.field_res_users__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_order__branch_id
#: model:ir.model.fields,field_description:branch.field_sale_report__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_inventory__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_location__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_move__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_picking_type__branch_id
#: model:ir.model.fields,field_description:branch.field_stock_warehouse__branch_id
#: model:ir.module.category,name:branch.module_branch_management
#: model:ir.ui.menu,name:branch.branch_menu_res_branch
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_form
#: model_terms:ir.ui.view,arch_db:branch.branch_res_branch_view_tree
#: model_terms:ir.ui.view,arch_db:branch.view_move_line_order_filter_inherit_branch11
#: model_terms:ir.ui.view,arch_db:branch.view_order_form_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_purchase_order_filter_inherit_branch
#: model_terms:ir.ui.view,arch_db:branch.view_sales_order_filter_inherit_branch
msgid "Branch"
msgstr "Afdeling"
#. module: branch
#: model_terms:ir.actions.act_window,help:branch.branch_action_res_branch
msgid "Click here to create a new branch."
msgstr "Klik hier om een nieuwe branch aan te maken."
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__company_id
msgid "Company"
msgstr "Bedrijf"
#. module: branch
#: code:addons/branch/models/inherited_stock_location.py:0
#, python-format
msgid "Configuration error You must select same branch on a location as assigned on a warehouse configuration."
msgstr "Configuratiefout U moet hetzelfde filiaal op een locatie selecteren als toegewezen aan een magazijnconfiguratie."
#. module: branch
#: model:ir.model,name:branch.model_res_partner
msgid "Contact"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_uid
msgid "Created by"
msgstr "Gemaakt door"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__create_date
msgid "Created on"
msgstr "Gemaakt op"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Dropdown menu"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__id
msgid "ID"
msgstr ""
#. module: branch
#: model:ir.model,name:branch.model_stock_inventory
msgid "Inventory"
msgstr "Voorraad"
#. module: branch
#: model:ir.model,name:branch.model_stock_location
msgid "Inventory Locations"
msgstr "Voorraadlocaties"
#. module: branch
#: model:ir.model,name:branch.model_account_invoice_report
msgid "Invoices Statistics"
msgstr "Facturenstatistieken"
#. module: branch
#: model:ir.model,name:branch.model_account_move
msgid "Journal Entries"
msgstr "Journaalboekingen"
#. module: branch
#: model:ir.model,name:branch.model_account_move_line
msgid "Journal Item"
msgstr "Dagboekitem"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch____last_update
msgid "Last Modified on"
msgstr "Laatst gewijzigd op"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_uid
msgid "Last Updated by"
msgstr "Laatst bijgewerkt door"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__write_date
msgid "Last Updated on"
msgstr "Laatst geupdate op"
#. module: branch
#: model:res.groups,name:branch.group_branch_user_manager
msgid "Manager"
msgstr ""
#. module: branch
#: model:res.groups,name:branch.group_multi_branch
msgid "Multi Branches"
msgstr "Meerdere takken"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__name
msgid "Name"
msgstr "Naam"
#. module: branch
#: model:ir.model,name:branch.model_account_payment
msgid "Payments"
msgstr "Betalingen"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking_type
msgid "Picking Type"
msgstr "Type plukken"
#. module: branch
#: model:ir.model,name:branch.model_product_template
msgid "Product Template"
msgstr "Product sjabloon"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order
msgid "Purchase Order"
msgstr "Bestelling"
#. module: branch
#: model:ir.model,name:branch.model_purchase_order_line
msgid "Purchase Order Line"
msgstr "Inkooporderregel"
#. module: branch
#: model:ir.model,name:branch.model_purchase_report
msgid "Purchase Report"
msgstr "Aankooprapport"
#. module: branch
#: model:ir.model,name:branch.model_sale_advance_payment_inv
msgid "Sales Advance Payment Invoice"
msgstr "Verkoopvooruitbetalingsfactuur"
#. module: branch
#: model:ir.model,name:branch.model_sale_report
msgid "Sales Analysis Report"
msgstr "Verkoopanalyserapport"
#. module: branch
#: model:ir.model,name:branch.model_sale_order
msgid "Sales Order"
msgstr "Verkooporder"
#. module: branch
#: code:addons/branch/models/inherited_account_bank_statement.py:0
#, python-format
msgid "Statement confirmed, journal items were created."
msgstr "Afschrift bevestigd, journaalposten zijn gemaakt."
#. module: branch
#: model:ir.model,name:branch.model_stock_move
msgid "Stock Move"
msgstr "Voorraad verplaatsen"
#. module: branch
#. openerp-web
#: code:addons/branch/static/src/xml/branch.xml:0
#, python-format
msgid "Switch to this branch"
msgstr "Schakel over naar deze tak"
#. module: branch
#: model:ir.model.fields,field_description:branch.field_res_branch__telephone
msgid "Telephone No"
msgstr "Telefoon Nee"
#. module: branch
#: model:ir.model,name:branch.model_stock_picking
msgid "Transfer"
msgstr "Overdracht"
#. module: branch
#: model:res.groups,name:branch.group_branch_user
msgid "User"
msgstr "Gebruiker"
#. module: branch
#: model:ir.model,name:branch.model_res_users
msgid "Users"
msgstr "Gebruikers"
#. module: branch
#: model:ir.model,name:branch.model_stock_warehouse
msgid "Warehouse"
msgstr "Magazijn"

View File

@ -0,0 +1,20 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from . import branch
from . import inherited_res_users
from . import inherited_sale_order
from . import inherited_stock_move
from . import inherited_stock_picking
from . import inherited_account_move
from . import inherited_account_payment
from . import inherited_purchase_order
from . import inherited_stock_warehouse
from . import inherited_stock_location
from . import inherited_account_bank_statement
from . import inherited_account_bank_statement_line
from . import inherited_stock_inventory
from . import inherited_customer
from . import inherited_product
from . import ir_http
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,13 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
class ResBranch(models.Model):
_name = 'res.branch'
_description = 'Branch'
name = fields.Char(required=True)
company_id = fields.Many2one('res.company', required=True)
telephone = fields.Char(string='Telephone No')
address = fields.Text('Address')

View File

@ -0,0 +1,64 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
import time
class AccountBankStatement(models.Model):
_inherit = 'account.bank.statement'
branch_id = fields.Many2one('res.branch')
def _get_opening_balance(self, journal_id):
curr_user_id = self.env['res.users'].browse(self.env.context.get('uid', False))
last_bnk_stmt = self.search([('journal_id', '=', journal_id),('branch_id','=',curr_user_id.branch_id.id)], limit=1)
if last_bnk_stmt:
return last_bnk_stmt.balance_end
return 0
@api.model
def default_get(self,fields):
res = super(AccountBankStatement, self).default_get(fields)
branch_id = False
if self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
res.update({
'branch_id' : branch_id
})
return res
def button_confirm_bank(self):
self._balance_check()
statements = self.filtered(lambda r: r.state == 'open')
for statement in statements:
moves = self.env['account.move']
for st_line in statement.line_ids:
#upon bank statement confirmation, look if some lines have the account_id set. It would trigger a journal entry
#creation towards that account, with the wanted side-effect to skip that line in the bank reconciliation widget.
st_line.fast_counterpart_creation()
if not st_line.account_id and not st_line.journal_entry_ids.ids and not st_line.statement_id.currency_id.is_zero(st_line.amount):
raise UserError(_('All the account entries lines must be processed in order to close the statement.'))
for aml in st_line.journal_entry_ids:
aml.branch_id = st_line.branch_id.id
moves |= aml.move_id
if moves:
if self._context.get('session'):
session = self._context.get('session')
for move in moves:
move.branch_id =session.branch_id.id
for line in move.line_ids:
line.branch_id = session.branch_id.id
moves.filtered(lambda m: m.state != 'posted').post()
statement.write({'branch_id': statement.pos_session_id.branch_id.id})
else:
moves.filtered(lambda m: m.state != 'posted').post()
for move in moves:
for move_line in move.line_ids:
line_branch = move_line.branch_id.id
move.branch_id = line_branch
statement.message_post(body=_('Statement %s confirmed, journal items were created.') % (statement.name,))
statements.write({'state': 'confirm', 'date_done': time.strftime("%Y-%m-%d %H:%M:%S")})

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
class account_bank_statement_line(models.Model):
_inherit = 'account.bank.statement.line'
@api.model
def default_get(self, default_fields):
res = super(account_bank_statement_line, self).default_get(default_fields)
branch_id = False
if self._context.get('branch_id'):
branch_id = self._context.get('branch_id')
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
res.update({
'branch_id' : branch_id
})
return res
branch_id = fields.Many2one('res.branch', string='Branch')

View File

@ -0,0 +1,57 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from odoo.tools.float_utils import float_compare
class AccountMove(models.Model):
_inherit = 'account.move'
@api.model
def default_get(self, default_fields):
res = super(AccountMove, self).default_get(default_fields)
branch_id = False
if self._context.get('branch_id'):
branch_id = self._context.get('branch_id')
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
res.update({
'branch_id' : branch_id
})
return res
branch_id = fields.Many2one('res.branch', string="Branch")
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
@api.model
def default_get(self, default_fields):
res = super(AccountMoveLine, self).default_get(default_fields)
branch_id = False
if self._context.get('branch_id'):
branch_id = self._context.get('branch_id')
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
if self.move_id.branch_id :
branch_id = self.move_id.branch_id.id
res.update({'branch_id' : branch_id})
return res
branch_id = fields.Many2one('res.branch', string="Branch",related="move_id.branch_id",store=True)

View File

@ -0,0 +1,34 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
MAP_INVOICE_TYPE_PARTNER_TYPE = {
'out_invoice': 'customer',
'out_refund': 'customer',
'in_invoice': 'supplier',
'in_refund': 'supplier',
}
class AccountPayment(models.Model):
_inherit = 'account.payment'
@api.model
def default_get(self, fields):
rec = super(AccountPayment, self).default_get(fields)
invoice_defaults = self.reconciled_invoice_ids
if invoice_defaults and len(invoice_defaults) == 1:
invoice = invoice_defaults[0]
rec['branch_id'] = invoice.branch_id.id
return rec
branch_id = fields.Many2one('res.branch')
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,19 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
class ResPartnerIn(models.Model):
_inherit = 'res.partner'
@api.model
def default_get(self, default_fields):
res = super(ResPartnerIn, self).default_get(default_fields)
if self.env.user.branch_id:
res.update({
'branch_id' : self.env.user.branch_id.id or False
})
return res
branch_id = fields.Many2one('res.branch', string="Branch")

View File

@ -0,0 +1,19 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
class ProductTemplateIn(models.Model):
_inherit = 'product.template'
@api.model
def default_get(self, default_fields):
res = super(ProductTemplateIn, self).default_get(default_fields)
if self.env.user.branch_id:
res.update({
'branch_id' : self.env.user.branch_id.id or False
})
return res
branch_id = fields.Many2one('res.branch', string="Branch")

View File

@ -0,0 +1,137 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class purchase_order(models.Model):
_inherit = 'purchase.order.line'
def _prepare_account_move_line(self, move=False):
result = super(purchase_order, self)._prepare_account_move_line(move)
result.update({
'branch_id' : self.order_id.branch_id.id or False,
})
return result
@api.model
def default_get(self, default_fields):
res = super(purchase_order, self).default_get(default_fields)
branch_id = False
if self._context.get('branch_id'):
branch_id = self._context.get('branch_id')
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
res.update({'branch_id' : branch_id})
return res
branch_id = fields.Many2one('res.branch', string="Branch")
def _prepare_stock_moves(self, picking):
result = super(purchase_order, self)._prepare_stock_moves(picking)
branch_id = False
if self.branch_id:
branch_id = self.branch_id.id
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
for res in result:
res.update({'branch_id' : branch_id})
return result
class PurchaseOrder(models.Model):
_inherit = 'purchase.order'
@api.model
def default_get(self,fields):
res = super(PurchaseOrder, self).default_get(fields)
branch_id = picking_type_id = False
if self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
if branch_id:
branched_warehouse = self.env['stock.warehouse'].search([('branch_id','=',branch_id)])
if branched_warehouse:
picking_type_id = branched_warehouse[0].in_type_id.id
else:
picking = self._default_picking_type()
picking_type_id = picking.id
res.update({
'branch_id' : branch_id,
'picking_type_id' : picking_type_id
})
return res
branch_id = fields.Many2one('res.branch', string='Branch')
@api.model
def _prepare_picking(self):
res = super(PurchaseOrder, self)._prepare_picking()
branch_id = False
if self.branch_id:
branch_id = self.branch_id.id
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
res.update({
'branch_id' : branch_id
})
return res
def _prepare_invoice(self):
result = super(PurchaseOrder, self)._prepare_invoice()
branch_id = False
if self.branch_id:
branch_id = self.branch_id.id
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
result.update({
'branch_id' : branch_id
})
return result
def action_view_invoice(self, invoices=False):
'''
This function returns an action that display existing vendor bills of given purchase order ids.
When only one found, show the vendor bill immediately.
'''
result = super(PurchaseOrder, self).action_view_invoice(invoices)
branch_id = False
if self.branch_id:
branch_id = self.branch_id.id
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
result.update({
'branch_id' : branch_id
})
return result
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,18 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
class ResUsers(models.Model):
_inherit = 'res.users'
branch_ids = fields.Many2many('res.branch',string="Allowed Branch")
branch_id = fields.Many2one('res.branch', string= 'Branch')
def write(self, values):
if 'branch_id' in values or 'branch_ids' in values:
self.env['ir.model.access'].call_cache_clearing_methods()
self.env['ir.rule'].clear_caches()
# self.has_group.clear_cache(self)
user = super(ResUsers, self).write(values)
return user

View File

@ -0,0 +1,48 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class SaleOrder(models.Model):
_inherit = 'sale.order'
@api.model
def default_get(self,fields):
res = super(SaleOrder, self).default_get(fields)
branch_id = warehouse_id = False
if self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
if branch_id:
branched_warehouse = self.env['stock.warehouse'].search([('branch_id','=',branch_id)])
if branched_warehouse:
warehouse_id = branched_warehouse.ids[0]
else:
warehouse_id = self._default_warehouse_id()
warehouse_id = warehouse_id.id
res.update({
'branch_id' : branch_id,
'warehouse_id' : warehouse_id
})
return res
branch_id = fields.Many2one('res.branch', string="Branch")
def _prepare_invoice(self):
res = super(SaleOrder, self)._prepare_invoice()
res['branch_id'] = self.branch_id.id
return res
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,46 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class stock_inventory(models.Model):
_inherit = 'stock.inventory'
@api.model
def default_get(self,fields):
res = super(stock_inventory, self).default_get(fields)
if res.get('location_id'):
location_branch = self.env['stock.location'].browse(res.get('location_id')).branch_id.id
if location_branch:
res['branch_id'] = location_branch
else:
user_branch = self.env.user.branch_id
if user_branch:
res['branch_id'] = user_branch.id
return res
branch_id = fields.Many2one('res.branch')
def post_inventory(self):
# The inventory is posted as a single step which means quants cannot be moved from an internal location to another using an inventory
# as they will be moved to inventory loss, and other quants will be created to the encoded quant location. This is a normal behavior
# as quants cannot be reuse from inventory location (users can still manually move the products before/after the inventory if they want).
self.mapped('move_ids').filtered(lambda move: move.state != 'done')._action_done()
for move_id in self.move_ids:
account_move =self.env['account.move'].search([('stock_move_id','=',move_id.id)])
account_move.write({'branch_id':self.branch_id.id})
for line in account_move.line_ids:
line.write({'branch_id':self.branch_id.id})
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,30 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class StockLocation(models.Model):
_inherit = 'stock.location'
branch_id = fields.Many2one('res.branch')
@api.constrains('branch_id')
def _check_branch(self):
warehouse_obj = self.env['stock.warehouse']
warehouse_id = warehouse_obj.search(
['|', '|', ('wh_input_stock_loc_id', '=', self.id),
('lot_stock_id', '=', self.id),
('wh_output_stock_loc_id', '=', self.id)])
for warehouse in warehouse_id:
if self.branch_id != warehouse.branch_id:
raise UserError(_('Configuration error\nYou must select same branch on a location as assigned on a warehouse configuration.'))
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,82 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
from itertools import groupby
class StockMove(models.Model):
_inherit = 'stock.move'
branch_id = fields.Many2one('res.branch')
def _assign_picking(self):
""" Try to assign the moves to an existing picking that has not been
reserved yet and has the same procurement group, locations and picking
type (moves should already have them identical). Otherwise, create a new
picking to assign them to. """
Picking = self.env['stock.picking']
grouped_moves = groupby(sorted(self, key=lambda m: [f.id for f in m._key_assign_picking()]), key=lambda m: [m._key_assign_picking()])
for group, moves in grouped_moves:
moves = self.env['stock.move'].concat(*list(moves))
branch_id = self.group_id.sale_id.branch_id.id if self.group_id.sale_id and self.group_id.sale_id.branch_id else False
moves.write({'branch_id': branch_id})
new_picking = False
# Could pass the arguments contained in group but they are the same
# for each move that why moves[0] is acceptable
picking = moves[0]._search_picking_for_assignation()
if picking:
if any(picking.partner_id.id != m.partner_id.id or
picking.origin != m.origin for m in moves):
# If a picking is found, we'll append `move` to its move list and thus its
# `partner_id` and `ref` field will refer to multiple records. In this
# case, we chose to wipe them.
picking.write({
'partner_id': False,
'origin': False,
})
else:
new_picking = True
picking = Picking.create(moves._get_new_picking_values())
moves.write({'picking_id': picking.id})
moves._assign_picking_post_process(new=new_picking)
return True
def _get_new_picking_values(self):
vals = super(StockMove, self)._get_new_picking_values()
vals['branch_id'] = self.group_id.sale_id.branch_id.id
return vals
def _create_account_move_line(self, credit_account_id, debit_account_id, journal_id, qty, description, svl_id, cost):
self.ensure_one()
AccountMove = self.env['account.move'].with_context(default_journal_id=journal_id)
move_lines = self._prepare_account_move_line(qty, cost, credit_account_id, debit_account_id, description)
if move_lines:
date = self._context.get('force_period_date', fields.Date.context_today(self))
new_account_move = AccountMove.sudo().create({
'journal_id': journal_id,
'line_ids': move_lines,
'date': date,
'ref': description,
'stock_move_id': self.id,
'stock_valuation_layer_ids': [(6, None, [svl_id])],
'move_type': 'entry',
'branch_id': self.picking_id.branch_id.id or self.branch_id.id or False,
})
new_account_move._post()
def _generate_valuation_lines_data(self, partner_id, qty, debit_value, credit_value, debit_account_id, credit_account_id, description):
# This method returns a dictionary to provide an easy extension hook to modify the valuation lines (see purchase for an example)
result = super(StockMove, self)._generate_valuation_lines_data(partner_id, qty, debit_value, credit_value, debit_account_id, credit_account_id, description)
branch_id = False
if self.branch_id:
branch_id = self.branch_id.id
elif self.env.user.branch_id:
branch_id = self.env.user.branch_id.id
for res in result:
result[res].update({'branch_id' : branch_id})
return result

View File

@ -0,0 +1,28 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class StockPicking(models.Model):
_inherit = 'stock.picking'
@api.model
def default_get(self, default_fields):
res = super(StockPicking, self).default_get(default_fields)
if self.env.user.branch_id:
res.update({
'branch_id' : self.env.user.branch_id.id or False
})
return res
branch_id = fields.Many2one('res.branch', string="Branch")
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")

View File

@ -0,0 +1,25 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class StockWarehouse(models.Model):
_inherit = 'stock.warehouse'
branch_id = fields.Many2one('res.branch')
@api.onchange('branch_id')
def _onchange_branch_id(self):
selected_brach = self.branch_id
if selected_brach:
user_id = self.env.user
user_branch = user_id.sudo().branch_id
if user_branch and user_branch.id != selected_brach.id:
raise UserError("Please select active branch only. Other may create the Multi branch issue. \n\ne.g: If you wish to add other branch then Switch branch from the header and set that.")
class StockPickingTypeIn(models.Model):
_inherit = 'stock.picking.type'
branch_id = fields.Many2one('res.branch',related='warehouse_id.branch_id', store=True,)

View File

@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
import hashlib
import json
from odoo import api, models
from odoo.http import request
from odoo.tools import ustr
from odoo.addons.web.controllers.main import module_boot, HomeStaticTemplateHelpers
import odoo
class Http(models.AbstractModel):
_inherit = 'ir.http'
def session_info(self):
user = request.env.user
version_info = odoo.service.common.exp_version()
user_context = request.session.get_context() if request.session.uid else {}
session_info = {
"uid": request.session.uid,
"is_system": user._is_system() if request.session.uid else False,
"is_admin": user._is_admin() if request.session.uid else False,
"user_context": request.session.get_context() if request.session.uid else {},
"db": request.session.db,
"server_version": version_info.get('server_version'),
"server_version_info": version_info.get('server_version_info'),
"name": user.name,
"username": user.login,
"partner_display_name": user.partner_id.display_name,
"company_id": user.company_id.id if request.session.uid else None, # YTI TODO: Remove this from the user context
"branch_id": user.branch_id.id if request.session.uid else None,
"partner_id": user.partner_id.id if request.session.uid and user.partner_id else None,
"web.base.url": self.env['ir.config_parameter'].sudo().get_param('web.base.url', default=''),
}
if self.env.user.has_group('base.group_user'):
# the following is only useful in the context of a webclient bootstrapping
# but is still included in some other calls (e.g. '/web/session/authenticate')
# to avoid access errors and unnecessary information, it is only included for users
# with access to the backend ('internal'-type users)
mods = module_boot()
qweb_checksum = HomeStaticTemplateHelpers.get_qweb_templates_checksum(addons=mods, debug=request.session.debug)
lang = user_context.get("lang")
translation_hash = request.env['ir.translation'].get_web_translations_hash(mods, lang)
menu_json_utf8 = json.dumps(request.env['ir.ui.menu'].load_menus(request.session.debug), default=ustr, sort_keys=True).encode()
cache_hashes = {
"load_menus": hashlib.sha1(menu_json_utf8).hexdigest(),
"qweb": qweb_checksum,
"translations": translation_hash,
}
session_info.update({
# current_company should be default_company
"user_companies": {'current_company': (user.company_id.id, user.company_id.name), 'allowed_companies': [(comp.id, comp.name) for comp in user.company_ids]},
"user_branches": {'current_branch': (user.branch_id.id, user.branch_id.name), 'allowed_branch': [(comp.id, comp.name) for comp in user.branch_ids]},
"currencies": self.get_currencies(),
"show_effect": True,
"display_switch_company_menu": user.has_group('base.group_multi_company') and len(user.company_ids) > 1,
"display_switch_branch_menu": user.has_group('branch.group_multi_branch') and len(user.branch_ids) > 1,
"cache_hashes": cache_hashes,
"allowed_branch_ids" : user.branch_id.ids
})
return session_info
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,8 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from . import inherited_sale_report
from . import inherited_account_invoice_report
from . import inherited_purchase_report
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

View File

@ -0,0 +1,12 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class AccountInvoiceReport(models.Model):
_inherit = "account.invoice.report"
branch_id = fields.Many2one('res.branch')
def _select(self):
return super(AccountInvoiceReport, self)._select() + ", move.branch_id"

View File

@ -0,0 +1,15 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class PurchaseReport(models.Model):
_inherit = "purchase.report"
branch_id = fields.Many2one('res.branch')
def _select(self):
return super(PurchaseReport, self)._select() + ", po.branch_id as branch_id"
def _group_by(self):
return super(PurchaseReport, self)._group_by() + ", po.branch_id"

View File

@ -0,0 +1,14 @@
# Part of BrowseInfo. See LICENSE file for full copyright and licensing details.
from odoo import fields, models
class SaleReport(models.Model):
_inherit = "sale.report"
branch_id = fields.Many2one('res.branch')
def _query(self, with_clause='', fields={}, groupby='', from_clause=''):
fields['branch_id'] = ", s.branch_id as branch_id"
return super(SaleReport, self)._query(with_clause, fields, groupby, from_clause)

View File

@ -0,0 +1,263 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record model="ir.module.category" id="module_branch_management">
<field name="name">Branch</field>
<field name="sequence">11</field>
</record>
<record id="group_branch_user" model="res.groups">
<field name="name">User</field>
<field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
<field name="category_id" ref="module_branch_management"/>
</record>
<record id="group_branch_user_manager" model="res.groups">
<field name="name">Manager</field>
<field name="category_id" ref="module_branch_management"/>
<field name="implied_ids" eval="[(4, ref('group_branch_user'))]"/>
<field name="users" eval="[(4, ref('base.user_root'))]"/>
</record>
<record id="res_branch_manager_rule" model="ir.rule">
<field name="name">Res Branch Manager</field>
<field name="model_id" ref="model_res_branch"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="res_branch_user_rule" model="ir.rule">
<field name="name">Res Branch User</field>
<field name="model_id" ref="model_res_branch"/>
<field name="global" eval="True"/>
<field name="domain_force">[('id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="sale.sale_order_personal_rule" model="ir.rule">
<field name="name">Personal Orders</field>
<field ref="model_sale_order" name="model_id"/>
<field name="domain_force">['|',('branch_id','=',user.branch_id.id),('branch_id','=',False),('user_id','=',user.id)]</field>
<field name="groups" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
</record>
<record id="sale.sale_order_see_all" model="ir.rule">
<field name="name">All Branch Orders</field>
<field ref="model_sale_order" name="model_id"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('sales_team.group_sale_salesman_all_leads'))]"/>
</record>
<record id="sale_order_all_manager" model="ir.rule">
<field name="name">All Orders</field>
<field ref="model_sale_order" name="model_id"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4,ref('sales_team.group_sale_manager'))]"/>
</record>
<record id="purchase_branch_manager_rule" model="ir.rule">
<field name="name">Purchase Branch Manager</field>
<field name="model_id" ref="model_purchase_order"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<!-- <record id="sale_order_branch_manager_rule" model="ir.rule">
<field name="name">Sale Branch Manager</field>
<field name="model_id" ref="model_sale_order"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
-->
<record id="purchase_branch_rule" model="ir.rule">
<field name="name">Purchase Branch</field>
<field name="model_id" ref="model_purchase_order"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="picking_branch_manager_rule" model="ir.rule">
<field name="name">Picking Branch Manager</field>
<field name="model_id" ref="model_stock_picking"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="picking_branch_rule" model="ir.rule">
<field name="name">Picking Branch</field>
<field name="model_id" ref="model_stock_picking"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="warehouse_branch_manager_rule" model="ir.rule">
<field name="name">Warehouse Branch Manager</field>
<field name="model_id" ref="stock.model_stock_warehouse"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="warehouse_branch_rule" model="ir.rule">
<field name="name">Warehouse Branch</field>
<field name="model_id" ref="stock.model_stock_warehouse"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="location_branch_manager_rule" model="ir.rule">
<field name="name">Location Branch Manager</field>
<field name="model_id" ref="model_stock_location"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="location_branch_rule" model="ir.rule">
<field name="name">Location Branch</field>
<field name="model_id" ref="model_stock_location"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="picking_type_branch_manager_rule" model="ir.rule">
<field name="name">Picking Type Branch Manager</field>
<field name="model_id" ref="stock.model_stock_picking_type"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="picking_type_branch_rule" model="ir.rule">
<field name="name">Picking Type Branch</field>
<field name="model_id" ref="stock.model_stock_picking_type"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="stock_quant_branch_manager_rule" model="ir.rule">
<field name="name">Stock Quant Branch Manager</field>
<field name="model_id" ref="stock.model_stock_quant"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="stock_quant_branch_rule" model="ir.rule">
<field name="name">Stock Quant Branch</field>
<field name="model_id" ref="stock.model_stock_quant"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('location_id.branch_id','=',False),('location_id.branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="stock_move_line_branch_manager_rule" model="ir.rule">
<field name="name">Stock Move Line Branch Manager</field>
<field name="model_id" ref="stock.model_stock_move_line"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="stock_move_line_branch_rule" model="ir.rule">
<field name="name">Stock Move Line Branch</field>
<field name="model_id" ref="stock.model_stock_move_line"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('location_dest_id.branch_id','=',False),('location_dest_id.branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="warehouse_branch_manager_rule" model="ir.rule">
<field name="name">Warehouse Branch Manager</field>
<field name="model_id" ref="model_stock_warehouse"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="warehouse_branch_rule" model="ir.rule">
<field name="name">Warehouse Branch</field>
<field name="model_id" ref="model_stock_warehouse"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="product_template_branch_manager_rule" model="ir.rule">
<field name="name">Product Template Branch Manager</field>
<field name="model_id" ref="model_product_template"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="product_template_branch_rule" model="ir.rule">
<field name="name">Product Template Branch</field>
<field name="model_id" ref="model_product_template"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<record id="product_product_branch_manager_rule" model="ir.rule">
<field name="name">Product Product Branch Manager</field>
<field name="model_id" ref="product.model_product_product"/>
<field name="global" eval="True"/>
<field name="domain_force">[(1,'=',1)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="product_product_branch_rule" model="ir.rule">
<field name="name">Product Product Branch</field>
<field name="model_id" ref="product.model_product_product"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('product_tmpl_id.branch_id','=',False),('product_tmpl_id.branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
<!-- <record id="res_users_branch_user_rule" model="ir.rule">
<field name="name">Res Users Branch User</field>
<field name="model_id" ref="base.model_res_users"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record>
-->
<!-- <record id="res_partner_branch_manager_rule" model="ir.rule">
<field name="name">Res Partner Branch Manager</field>
<field name="model_id" ref="model_res_partner"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','in',[branch.id for branch in user.branch_ids])]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user_manager'))]"/>
</record>
<record id="res_partner_branch_rule" model="ir.rule">
<field name="name">Res Partner Branch</field>
<field name="model_id" ref="model_res_partner"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('branch_id','=',False),('branch_id','=',user.branch_id.id)]</field>
<field name="groups" eval="[(4, ref('branch.group_branch_user'))]"/>
</record> -->
</data>
</odoo>

View File

@ -0,0 +1,10 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_res_branch_user,res.branch.user,model_res_branch,branch.group_branch_user,1,1,0,0
access_res_branch_user_all,res.branch.user.all,model_res_branch,,1,1,0,0
access_res_branch_manager,res.branch.manager,model_res_branch,branch.group_branch_user_manager,1,1,1,1
action_res_branch_location_rule,res.branch.user.location,stock.model_stock_location,branch.group_branch_user,1,1,1,1
action_res_branch_location_rule_manager,res.branch.user.location,stock.model_stock_location,branch.group_branch_user_manager,1,1,1,1
access_stock_warehouse_branch_user,stock.warehouse.branch.user,stock.model_stock_warehouse,branch.group_branch_user,1,1,0,0
access_stock_warehouse_branch_manager,stock.warehouse.branch.manager,stock.model_stock_warehouse,branch.group_branch_user_manager,1,1,1,1
access_stock_picking_branc_user,stock.picking.branch.user,stock.model_stock_picking,branch.group_branch_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_res_branch_user res.branch.user model_res_branch branch.group_branch_user 1 1 0 0
3 access_res_branch_user_all res.branch.user.all model_res_branch 1 1 0 0
4 access_res_branch_manager res.branch.manager model_res_branch branch.group_branch_user_manager 1 1 1 1
5 action_res_branch_location_rule res.branch.user.location stock.model_stock_location branch.group_branch_user 1 1 1 1
6 action_res_branch_location_rule_manager res.branch.user.location stock.model_stock_location branch.group_branch_user_manager 1 1 1 1
7 access_stock_warehouse_branch_user stock.warehouse.branch.user stock.model_stock_warehouse branch.group_branch_user 1 1 0 0
8 access_stock_warehouse_branch_manager stock.warehouse.branch.manager stock.model_stock_warehouse branch.group_branch_user_manager 1 1 1 1
9 access_stock_picking_branc_user stock.picking.branch.user stock.model_stock_picking branch.group_branch_user 1 1 1 1

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="group_multi_branch" model="res.groups">
<field name="name">Multi Branches</field>
</record>
</data>
</odoo>

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,446 @@
<section class="oe_container lead mt64">
<div>
<div class="col-md-12 mt16" style="padding:0;">
<div class="col-md-12" style="padding:0;">
<div class="panel-group mb0 mt0" role="tablist" id="priceAccordeon" style="padding:0;">
<div class="panel-heading mb0 mt0 collapsed" role="tab" data-toggle="collapse" data-parent="#priceAccordeon" data-target="#priceAccordeon_area" aria-expanded="false" style="margin-left:0;padding:0 0 2px 0;text-align:right;">
<strong>
<div style="background-color:#875A7B;color:white;padding:5px;margin-bottom:3px;text-align:center;border-radius:5px;white-space:nowrap;display: inline-block;">
<strong style="color:white;">
Supported :
</strong>
</div>
<div style="background-color:#875A7B;color:white;padding:5px;margin-bottom:3px;text-align:center;border-radius:5px;white-space:nowrap;display: inline-block;">
<strong style="color:white;" title="The tool is compatible with the Odoo Enterprise version">
<i class="fa fa-check" style="margin-left:4px;"> </i>
Enterprise
</strong>
</div>
<div style="background-color:#875A7B;padding:5px;margin-top:3px;text-align:center;border-radius:5px;white-space:nowrap;display: inline-block;">
<strong style="color:white;" title="The tool is compatible with the Odoo Community version">
<i class="fa fa-check" style="margin-left:4px;"> </i>
Community
</strong>
</div>
<div style="background-color:#875A7B;color:white;padding:5px;margin-bottom:3px;text-align:center;border-radius:5px;white-space:nowrap;display: inline-block;">
<strong style="color:white;" title="The tool might be installed to Odoo.sh if you have a linked private git repository">
<i class="fa fa-check" style="margin-left:4px;"> </i>
Odoo.sh
</strong>
</div>
</strong>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container lead bi_title_box">
<div >
<div >
<h2 class="oe_slogan bi_title" style="color:#5082c4;">
<b>Multiple Branch/Unit(operation) Management Odoo Apps for Single Company</b>
</h2>
<h3 class="oe_slogan bi_title" style="color: ##201111;">
<b>Multi Branches management for All Application Odoo Apps</b>
</h3>
<h3 class="oe_slogan bi_title" style="color: ##201111;">
<b>Manage Different Branch Unit for single company in Odoo</b>
</h3>
<p class="oe_slogan">
Do you have multiple unit for single company? Do you want them to works as separate entity inside the company? Here you go, This multiple branch management Odoo apps helps users to make different branches for single company with multi branch concept which works same as multi-company environment.<br/>
Also Don't worry about the access rights too, We have added branch user/manager roles inside the Odoo module, Branch user can only access records of its specific branch and Branch manager can see records of all Branches.<br/>
Branch functionality added to Sale Order, Purchase Order, Invoice/Billing, Accounting, Warehouse and Products etc.
<br/>
</p>
<p class="oe_slogan">
You can also manage multiple branch with multi company environment. For each company you can add several branches also multi company rules is already applied on branch object, so if user don't have access of company then that user can't have access of branch of that specific company.
</p>
<p class="oe_slogan">
Multi branch Odoo apps works for both community and enterprise edition with all generic application like contact, product, sales, purchase, warehouse,billing, accounting etc. We have other separate apps available for Manufacturing,Projects, Subscription, Helpdesk etc, you can see that on Odoo store and If you can't see it contact us, we will help you on that.
<br/>
If you are using Odoo enterprise edition and don't want to use specific application i.e Purchase or Sales, then don't worry we will simply remove that dependency for you without any extra cost.
</p>
<p class="oe_slogan" style="color: #49a3fe;font-size: 25px;font-style: italic;font-weight:bolder;"> looking for Multiple Branch Accounting Enterprise Reports Apps, please check below module link
<br/>
<strong><a class="text-center" style="color: #21B799" href="https://apps.odoo.com/apps/modules/14.0/branch_accounting_report/" target="_blank">Financial Reports For Branch -Enterprise Edition Odoo Apps.</a></strong>
</p>
<p class="oe_slogan" style="color: #49a3fe;font-size: 25px;font-style: italic;font-weight:bolder;"> Looking for Multiple Branch Accounting Community Reports Apps, please check below module link
<br/>
<strong><a class="text-center" style="color: #21B799" href="https://apps.odoo.com/apps/modules/14.0/bi_branch_financial_pdf_reports/" target="_blank">Multiple Branch Accounting Community Reports Odoo Apps.</a></strong>
</p>
<p class="oe_slogan" style="color: #49a3fe;font-size: 25px;font-style: italic;font-weight:bolder;"> Here is Advance Multiple Branch Odoo Apps, please check below module link
<br/>
<strong><a class="text-center" style="color: #21B799" href="https://apps.odoo.com/apps/modules/14.0/bi_advance_branch/" target="_blank">Advance Multi Branch Management Odoo Apps.</a></strong>
</p>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;">Multi Language Translation Available</p>
<p class="oe_slogan" style="color: #49a3fe;font-size: 25px;font-style: italic;font-weight:bolder;"> We have added Translation using google translate for English (US), Arabic, French / Français, Spanish / Español and Dutch / Nederlands, if you want to change translation terms or add new translation provide us translation, we will add that without any cost.
</p>
</div>
</div>
<div class="row">
<div class="col-lg-12 col-md-12 col-sm-12 col-12">
<div class="Language" style="text-align:center">
<img title="English" alt="English" style="margin:10px 10px" src="languages/English.png">
<img title="Arabic" alt="Arabic" style="margin:10px 10px" src="languages/Arabic.png">
<img title="French" alt="French" style="margin:10px 10px" src="languages/French.png">
<img title="Spanish" alt="Spanish" style="margin:10px 10px" src="languages/Spanish.png">
<img title="Dutch" alt="Dutch" style="margin:10px 10px" src="languages/Dutch.png">
</div>
</div>
</div>
</section>
<section class="oe_container lead bi_features">
<div >
<div>
<h3 class="oe_slogan" style="opacity:1;background: linear-gradient(to right, #86bcf2 0%, #e2f2f8 100%);padding: 10px 0px;color: ##201111;letter-spacing: 0.2em;text-transform: uppercase;text-shadow: 0.1em .04em 0.1em #7d8c88;"><b>Features</b></h3>
</div>
<div class="row">
<div class="col" style="margin: 10px;">
<div class="row">
<div class="col-md-3 text-center">
<img class="img img-responsive" style="max-width:100%;" src="features/branch_metrics.png"/>
</div>
<div class="col-md-9">
<h4><b> Multi Branch Concept. </b></h4>
<span class="oe_slogan"> It allows you to create Multiple Branch/Unit, Working as multi branch concept same as Odoo's multi company environment. </span>
</div>
</div>
</div>
<div class="col" style="margin: 10px;">
<div class="row">
<div class="col-md-3 text-center">
<img class="img img-responsive" style="max-width:100%;" src="features/branch_access.png"/>
</div>
<div class="col-md-9">
<h4><b> Complete Workflow for Branch. </b></h4>
<span class="oe_slogan"> Branch functionality added to Sales, Purchase, Invoice, Warehouse, Access group created for branch manager and branch user with specific branch. </span>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="oe_container lead mt64">
<div >
<div class="oe_slogan oe_spaced text-center">
<a class="btn mt8 mr8" title="Demo Request" style="background-color: #2875aa;color: #FFFFFF !important;font-size: 20px;font-weight: bold;border-radius: 7px;" href="mailto:sales@browseinfo.in?Subject=Demo Request for Multiple Branch/Unit(operation) Management Odoo Apps for Single Company" target="_top"> Demo Request </a>
<a class="btn mt8 ml8" title="Video Tutorial" style="background-color: #2875aa;color: #FFFFFF !important;font-size: 20px;font-weight: bold;border-radius: 7px;" href="https://youtu.be/hi1b8kH5Z94" target="_blank"> Video Tutorial</a>
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;">Branch Access Rights</p>
<p class="oe_slogan">User have to give branch access like User or Manage, User have to "Multi Branches".</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="1_branch_Access.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Create Multiple Branch </p>
<p class="oe_slogan">Branch Manager can create multiple branch under Settings > Users & Companies > Branch menu, User also can set branch details like address, phone, company.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="2_branch_tree.png">
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="3_branch_form.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Assign Branch User </p>
<p class="oe_slogan"> Branch manager can assign a branch for which specific user is belongs.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="4_branch_user.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Multi Branch Feature</p>
<p class="oe_slogan">Users with "Multi Branches" access rights can see and change multiple branch from header.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="5_multi_branch.png">
<p class="oe_slogan">On clicking branch on header user can see allowed branches and can select one, on changing branch users branch will also changed under users settings.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="6_multi_branch_change.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;">Branch On Customer</p>
<p class="oe_slogan"> Branch manager can set customer for specific branch by selecting branch on customer. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="7_branch_customer.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Product Template </p>
<p class="oe_slogan"> User can set branch on product template, selected branch on product template will automatically added to product variant. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="8_branch_product.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Product Variant </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="9_branch_variant.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Sales Flow </p>
<p class="oe_slogan"> While creating sales order user who is currently login, branch of the user is set as branch to the sales order and warehouse shipment address is also set according to selected branch. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="10_sale_branch.png">
<p class="oe_slogan"> User can see created records of sale order group by branch as shown bellow image.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="11_branch_groupby.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch Sales Analysis Report </p>
<p class="oe_slogan"> You can see sales analysis report based on branch. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="12_brnach_analysis.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch on Delivery Order </p>
<p class="oe_slogan"> While Quotation get confirmed generated picking(delivery) will have same branch automatically set based on Sales Order. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="13_branch_picking.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch on Customer Invoices </p>
<p class="oe_slogan"> While quotation get confirmed generated picking(delivery) will have same branch automatically set based on Sales Order.</p>
<p class="oe_slogan"> When creating manual invoice then log in user's branch will be assigned to the invoice.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="14_branch_invoice.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Journal Items </p>
<p class="oe_slogan"> While invoice created the branch will automatically set on journal items from invoice.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="15_journal_items.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Customer Payment</p>
<p class="oe_slogan">Selected branch of the invoice will automatically set on account payment. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="16_branch_payment.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Bank Statement</p>
<p class="oe_slogan">User can also see branch on bank statement generated for payment.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="17_branch_branck_statement.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Purchase Order</p>
<p class="oe_slogan"> While creating purchase order user who is currently login, branch of the user is set as branch to the purchase order. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="18_branch_purchase.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan"> User can see created records of purchase order group by branch as shown bellow image.</p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="19_branch_groupby.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch Purchase Analysis Report </p>
<p class="oe_slogan"> You can see purchase analysis report based on branch. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="20_branch_analysis.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch on Picking </p>
<p class="oe_slogan"> While RFQ(purchase) get confirmed generated picking(shipment) will have same branch automatically set based on RFQ. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="21_branch_receipt.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Vendor Bill </p>
<p class="oe_slogan"> While bill created from the purchase order selected branch of the purchase order will automatically set on vendor bill. </p>
<p class="oe_slogan"> After Validate invoice, Selected branch of the invoice will automatically set on Journal Items. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="22_branch_bill.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Vendor Payment</p>
<p class="oe_slogan"> Selected branch of the invoice will automatically set on Account Payment. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="23_branch_payment.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Warehouse </p>
<p class="oe_slogan"> You can also define branch in the warehouse and all the technical fields are set according to the branch. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="24_branch_warehouse.png">
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Stock Locations </p>
<p class="oe_slogan"> In warehouse locations you can also set branch. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="25_branch_location.png">
</div>
</div>
</section>
<section class="oe_container lead">
<div>
<div>
<p class="oe_slogan" style="color: #49a3fe;font-size: 35px;font-style: italic;font-weight:bolder;"> Branch On Inventory Valuation </p>
<p class="oe_slogan"> User also can set branch on inventory valuations. </p>
<img class="img-border img-responsive thumbnail mb16" style="border: 3px solid black;" src="26_branch_inventory.png">
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div>
<div class="row">
<div class="col-sm-4" style="margin: auto;">
<p class="oe_slogan" style="font-size: 35px;color: #5082c4;font-style: italic;font-weight: bold;">Apps May You Like</p>
</div>
</div>
<div class="row col-sm-12" style="margin-left: 3px;padding: 5px;">
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_automated_sale_order/">
<img class="img img-responsive" src="related/bi_automated_sale_order.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_purchase_tripple_approval/">
<img class="img img-responsive" src="related/bi_purchase_tripple_approval.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_add_custom_field_project/">
<img class="img img-responsive" src="related/bi_add_custom_field_project.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_discount_from_customer/">
<img class="img img-responsive" src="related/bi_discount_from_customer.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_top_growing_product/">
<img class="img img-responsive" src="related/bi_top_growing_product.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/sale_purchase_invoice_discount/">
<img class="img img-responsive" src="related/sale_purchase_invoice_discount.png" style="width: 100%;"/>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div>
<div class="row">
<div class="col-sm-4" style="margin: auto;">
<p class="oe_slogan" style="font-size: 35px;color: #5082c4;font-style: italic;font-weight: bold;">Most Demanded Apps</p>
</div>
</div>
<div class="row col-sm-12" style="margin-left: 3px;padding: 5px;">
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/pos_orders_all/">
<img class="img img-responsive" src="demanded/all_in_one_pos.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_customer_overdue_statement/">
<img class="img img-responsive" src="demanded/customer_overdue.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/generic_excel_report/">
<img class="img img-responsive" src="demanded/generic_excel_report.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/sales_commission_generic/">
<img class="img img-responsive" src="demanded/sale_commision.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/bi_generic_import/">
<img class="img img-responsive" src="demanded/bi_generic_import.png" style="width: 100%;"/>
</a>
</div>
<div class="col-sm-4" style="padding: 5px;padding-right: 10px;">
<a href="https://apps.odoo.com/apps/modules/14.0/branch/">
<img class="img img-responsive" src="demanded/branch.png" style="width: 100%;"/>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div >
<div >
<h2 class="oe_slogan">Free Support</h2>
<h3 class="oe_slogan" style="font-size: 21px; color: #000000 !important;">You will get 90 Days free support incase any bugs or issue (Except data recovery).</h3>
<p class="oe_slogan" style="font-size: 18px; ">
At BrowseInfo we offer end to end solution for Odoo services. Which includes analysis &amp; consultation on the workflows and integration part. Please note that You're not allowed to distribute this module after purchase! Incase of any question regarding this module feel free to email us on <a href="mailto:ticket@browseinfo.in">ticket@browseinfo.in</a> or raise a ticket on support.
</p>
</div>
</div>
</section>
<section class="oe_container lead">
<div >
<div >
<div class="img img-responsive text-center">
<a href="http://www.browseinfo.in" target="new" style="display: grid;">
<img src="bi_logo.png" style="margin: auto;max-width: 350px;">
</a>
</div>
</div>
<div class="oe_slogan oe_spaced text-center">
<a class="btn mt8" title="Query and Demo" style="background-color: #3497db;color: #FFFFFF !important;font-size: 20px;font-weight: bold;" href="mailto:sales@browseinfo.in?Subject=Demo Request for Multiple Branch/Unit(operation) Management Odoo Apps for Single Company" target="_blank"> Query and Demo </a>
<a class="btn mt8" title="Email on Support" style="background-color: #3497db;color: #FFFFFF !important;font-size: 20px;font-weight: bold;" href="mailto:ticket@browseinfo.in?Subject=Support Request for Multiple Branch/Unit(operation) Management Odoo Apps for Single Company" target="_blank"> Support Request </a>
</div>
</div>
</section>

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

View File

@ -0,0 +1,76 @@
import { browser } from "@web/core/browser/browser";
import { cookie } from "@web/core/browser/cookie";
import { router } from "@web/core/browser/router";
import { registry } from "@web/core/registry";
import { session } from "@web/session";
/**
* Branch Context Service
* Handles branch initialization and context management for the web client
*/
function parseBranchIds(bids, separator = ",") {
if (typeof bids === "string") {
return bids.split(separator).map(Number);
} else if (typeof bids === "number") {
return [bids];
}
return [];
}
function getBranchIds() {
let bids;
const state = router.current;
if ("bids" in state) {
bids = parseBranchIds(state.bids);
} else {
bids = parseBranchIds(cookie.get("bids"));
}
return bids;
}
function computeActiveBranchIds(bids) {
const { user_branches } = session;
let activeBranchIds = bids || [];
const availableBranchesFromSession = user_branches?.allowed_branch || [];
const notAllowedBranches = activeBranchIds.filter(
(id) => !availableBranchesFromSession.some(branch => branch[0] === id)
);
if (!activeBranchIds.length || notAllowedBranches.length) {
activeBranchIds = [user_branches?.current_branch?.[0] || 1];
}
return activeBranchIds;
}
export const branchContextService = {
dependencies: ["router"],
start(env, { router }) {
// Initialize branch context on startup
const branchIds = getBranchIds();
const activeBranchIds = computeActiveBranchIds(branchIds);
// Update session context
if (session.user_context) {
session.user_context.allowed_branch_ids = activeBranchIds;
}
// Update router state if needed
const currentState = router.current;
if (!currentState.bids || activeBranchIds.join(",") !== currentState.bids) {
router.replaceState({ bids: activeBranchIds.join(",") });
}
// Update cookie
cookie.set("bids", activeBranchIds.join(","));
return {
getBranchIds,
computeActiveBranchIds,
activeBranchIds,
};
},
};
registry.category("services").add("branchContext", branchContextService);

View File

@ -0,0 +1,87 @@
import { Component, useState } from "@odoo/owl";
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { session } from "@web/session";
import { jsonrpc } from "@web/core/network/rpc_service";
import { _t } from "@web/core/l10n/translation";
import { device } from "@web/core/browser/feature_detection";
/**
* When Odoo is configured in multi-branch mode, users should be able
* to switch their interface from one branch to the other. This is the purpose
* of this component, by displaying a dropdown menu in the systray.
*/
class SwitchBranchMenu extends Component {
static template = "branch.SwitchBranchMenu";
static props = {};
setup() {
this.branchService = useService("branch");
this.isMobile = device.isMobile;
this.state = useState({
allowed_branch_ids: session.user_context.allowed_branch_ids || [],
user_branches: session.user_branches?.allowed_branch || [],
current_branch: null,
current_branch_name: "",
});
this._initializeBranchData();
}
_initializeBranchData() {
this.state.current_branch = this.state.allowed_branch_ids[0];
if (this.state.user_branches.length > 0) {
const currentBranch = this.state.user_branches.find(
branch => branch[0] === this.state.current_branch
);
this.state.current_branch_name = currentBranch
? currentBranch[1]
: this.state.user_branches[0][1];
}
}
/**
* @private
* @param {Event} ev
*/
async _onSwitchBranchClick(ev) {
ev.preventDefault();
ev.stopPropagation();
const branchID = parseInt(ev.currentTarget.dataset.branchId);
let allowed_branch_ids = [...this.state.allowed_branch_ids];
// Handle branch selection logic
if (ev.currentTarget.querySelector('.fa-square-o')) {
if (this.state.allowed_branch_ids.length === 1) {
// Single branch mode
allowed_branch_ids = [branchID];
} else {
// Multi branch mode
allowed_branch_ids.push(branchID);
}
}
// Update session
this.branchService.setBranch(branchID, allowed_branch_ids);
// Send RPC call
await jsonrpc('/set_brnach', {
BranchID: branchID,
});
}
get displaySwitchBranchMenu() {
return session.display_switch_branch_menu;
}
}
export const switchBranchMenu = {
Component: SwitchBranchMenu,
condition: () => session.display_switch_branch_menu,
};
registry.category("systray").add("SwitchBranchMenu", switchBranchMenu, { sequence: 50 });

View File

@ -0,0 +1,61 @@
import { browser } from "@web/core/browser/browser";
import { cookie } from "@web/core/browser/cookie";
import { router } from "@web/core/browser/router";
import { registry } from "@web/core/registry";
import { session } from "@web/session";
const BIDS_SEPARATOR = ",";
function parseBranchIds(bids, separator = BIDS_SEPARATOR) {
if (typeof bids === "string") {
return bids.split(separator).map(Number);
} else if (typeof bids === "number") {
return [bids];
}
return [];
}
function computeActiveBranchIds(bids) {
const { user_branches } = session;
let activeBranchIds = bids || [];
const availableBranchesFromSession = user_branches?.allowed_branch || {};
const notAllowedBranches = activeBranchIds.filter(
(id) => !(id in availableBranchesFromSession)
);
if (!activeBranchIds.length || notAllowedBranches.length) {
activeBranchIds = [user_branches?.current_branch || 1];
}
return activeBranchIds;
}
export const branchService = {
dependencies: ["router"],
start(env, { router }) {
const setBranch = (main_branch_id, branch_ids) => {
const sortedBids = branch_ids.sort((a, b) => {
if (a === main_branch_id) {
return -1;
} else if (b === main_branch_id) {
return 1;
} else {
return a - b;
}
});
const bidsString = sortedBids.join(BIDS_SEPARATOR);
cookie.set("bids", bidsString || String(main_branch_id));
router.pushState({ bids: bidsString });
browser.location.reload();
};
return {
setBranch,
parseBranchIds,
computeActiveBranchIds,
};
},
};
registry.category("services").add("branch", branchService);

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-name="branch.SwitchBranchMenu">
<li class="o_switch_branch_menu">
<a role="button" class="dropdown-toggle" data-toggle="dropdown" data-display="static" aria-expanded="false" href="#" title="Dropdown menu">
<span t-attf-class="#{isMobile ? 'fa fa-building-o' : 'oe_topbar_name'}">
<t t-if="!isMobile"><t t-esc="state.current_branch_name"/></t>
</span>
</a>
<div class="dropdown-menu dropdown-menu-right" role="menu">
<t t-foreach="state.user_branches" t-as="branch">
<div class="dropdown-item1 d-flex py-0 px-0" data-menu="branch" t-att-data-branch-id="branch[0]" t-on-click="_onSwitchBranchClick">
<t t-set="is_allowed" t-value="state.allowed_branch_ids.includes(branch[0])"/>
<t t-set="is_current" t-value="branch[0] === state.current_branch"/>
<div role="menuitemcheckbox" t-att-aria-checked="is_allowed" t-att-aria-label="branch[1]" tabindex="0" class="ml-auto pl-3 pr-3 border border-top-0 border-left-0 border-bottom-0 toggle_branch o_py">
<span style="height: 2rem;">
<t t-if="is_allowed">
<i class="fa fa-fw fa-check-square pt-2"></i>
</t>
<t t-if="!is_allowed">
<i class="fa fa-fw fa-square-o pt-2"></i>
</t>
</span>
</div>
<div role="button" t-att-aria-pressed="is_current" aria-label="Switch to this branch" tabindex="0" class="d-flex flex-grow-1 align-items-center py-0 log_into1 pl-3 o_py" t-att-style="is_current ? 'background-color: lightgrey;' : ''">
<t t-if="is_allowed">
<span class='mr-3 branch_label'>
<t t-esc="branch[1]"/>
</span>
</t>
<t t-if="!is_allowed">
<span class='mr-3 branch_label text-muted'>
<t t-esc="branch[1]"/>
</span>
</t>
</div>
</div>
</t>
</div>
</li>
</t>
</templates>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="assets_backend_bi_multi_branch" inherit_id="web.assets_backend" name="Custom CSS-JS">
<xpath expr="." position="inside">
<script src="/branch/static/src/js/default_branch.js" type="text/javascript"></script>
<script src="/branch/static/src/js/session.js" type="text/javascript"></script>
<script src="/branch/static/src/js/abstract_web_client.js" type="text/javascript"></script>
</xpath>
</template>
</odoo>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_bank_statement_form_inherit_branch" model="ir.ui.view">
<field name="name">view.bank.statement.form.inherit.branch</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_form"/>
<field name="arch" type="xml">
<field name="date" position="before">
<!-- Add your fields or attributes here -->
<field name="branch_id"/>
</field>
<xpath expr="//field[@name='line_ids']/tree/field[@name='partner_id']" position="after">
<field name='branch_id'/>
</xpath>
<xpath expr="//field[@name='line_ids']" position="attributes">
<attribute name="context">{'branch_id' : branch_id}</attribute>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="account_move_branch_view_tree" model="ir.ui.view" >
<field name="name">account.move.inherit.tree</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<record id="account_move_branch_view_tree1" model="ir.ui.view" >
<field name="name">account.move.inherit.tree1</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_invoice_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<record id="account_payment_branch_view_tree" model="ir.ui.view" >
<field name="name">account.payment.inherit.tree</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<record id="account_move_line_branch_view_form" model="ir.ui.view" >
<field name="name">account.move.line.inherit.form</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form" />
<field name="arch" type="xml">
<field name="partner_id" position="after">
<field name="branch_id"/>
</field>
</field>
</record>
<record id="account_move_line_branch_view_tree2" model="ir.ui.view" >
<field name="name">account.move.line.inherit.tree2</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<!-- journal entry Inherit Form View to Modify it -->
<record id="view_move_form_inherit_branch" model="ir.ui.view">
<field name="name">view.move.form.inherit.branch</field>
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='journal_div']" position="after">
<label for="branch_id"/>
<div name="branch_div" class="d-flex">
<field name="branch_id"/>
</div>
</xpath>
<!-- <xpath expr="//field[@name='line_ids']" position="attributes">
<attribute name="context">{'branch_id' : branch_id}</attribute>
</xpath>
<xpath expr="//field[@name='invoice_line_ids']" position="attributes">
<attribute name="context">{'branch_id' : branch_id}</attribute>
</xpath> -->
<xpath expr="//field[@name='line_ids']//tree//field[@name='partner_id']" position="after">
<field optional="hide" name="branch_id"/>
</xpath>
</field>
</record>
<record id="view_move_line_tree_inherit_branch" model="ir.ui.view">
<field name="name">view.move.line.tree.inherit.branch</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='partner_id']" position="after">
<field name="branch_id" readonly="parent_state == 'posted'"/>
</xpath>
</field>
</record>
<record id="view_move_line_order_filter_inherit_branch11" model="ir.ui.view">
<field name="name">move.line.filter.inherit.branch</field>
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_account_move_line_filter"/>
<field name="arch" type="xml">
<xpath expr="//group" position="inside">
<filter string="Branch" name="branch" domain="[]" context="{'group_by':'branch_id'}"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_partner_structured_form_branch" model="ir.ui.view">
<field name="name">view_partner_structured_form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<field name="vat" position="after">
<field name="branch_id"/>
</field>
</field>
</record>
</odoo>

View File

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<odoo>
<record id="product_template_form_view_branch" model="ir.ui.view">
<field name="name">product_extended.product.form.branch</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_only_form_view" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id"/>
</field>
</field>
</record>
<record id="product_product_view_form_branch" model="ir.ui.view">
<field name="name">product.product.view.form.branch</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_normal_form_view"/>
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id"/>
</field>
</field>
</record>
</odoo>

View File

@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="purchase_order_form_inherit_branch" model="ir.ui.view">
<field name="name">purchase.order.form.inherit.branch</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<field name="incoterm_id" position="after">
<field name="branch_id"/>
</field>
<xpath expr="//field[@name='order_line']" position="attributes">
<attribute name="context">{'branch_id' : branch_id}</attribute>
</xpath>
</field>
</record>
<record id="view_purchase_order_filter_inherit_branch" model="ir.ui.view">
<field name="name">view.purchase.order.filter.inherit.branch</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.view_purchase_order_filter"/>
<field name="arch" type="xml">
<xpath expr="//group" position="inside">
<filter string="Branch" name="branch" domain="[]" context="{'group_by':'branch_id'}"/>
</xpath>
</field>
</record>
<record id="purchase_order_branch_view_tree" model="ir.ui.view" >
<field name="name">purchase.order.inherit.tree</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_view_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<record id="purchase_order_branch_view_tree1" model="ir.ui.view" >
<field name="name">purchase.order.inherit.tree1</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_kpis_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Users Inherit Form View to Modify it -->
<record id="view_users_form_inherit_branch" model="ir.ui.view">
<field name="name">view.users.form.inherit.branch</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet/notebook/page[2]/group[1]" position="before">
<!-- Add your fields or attributes here -->
<group name="branch">
<field name="branch_ids" widget="many2many_tags"/>
</group>
<group>
<field name="branch_id"/>
</group>
</xpath>
</field>
</record>
<record id="view_user_preference_form_extended" model="ir.ui.view">
<field name="name">res.user.preference.form.extended</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='company_id']" position="after">
<field name="branch_id" options="{'no_create': True}" context="{'branch_id':branch_id}" groups="branch.group_branch_user_manager"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Sale order Inherit Form View to Modify it -->
<record id="view_order_form_inherit_branch" model="ir.ui.view">
<field name="name">view.order.form.inherit.branch</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='other_information']" position="inside">
<!-- Add your fields or attributes here -->
<group string="Branch" name="branch">
<group>
<field name="branch_id"/>
</group>
</group>
</xpath>
</field>
</record>
<!-- Sale order Inherit search View to Modify it -->
<record id="view_sales_order_filter_inherit_branch" model="ir.ui.view">
<field name="name">view.sales.order.filter.inherit.branch</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_sales_order_filter"/>
<field name="arch" type="xml">
<xpath expr="//group" position="inside">
<filter string="Branch" name="branch" domain="[]" context="{'group_by':'branch_id'}"/>
</xpath>
</field>
</record>
<record id="sale_order_branch_view_tree" model="ir.ui.view" >
<field name="name">sale.order.inherit.tree</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_tree" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
<record id="sale_order_branch_view_tree1" model="ir.ui.view" >
<field name="name">sale.order.inherit.tree1</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_quotation_tree_with_onboarding" />
<field name="arch" type="xml">
<field name="company_id" position="after">
<field name="branch_id" optional="hide"/>
</field>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_stock_inventory_adjustment_form_inherit_branch" model="ir.ui.view">
<field name="name">view.stock.inventory.adjustment.form.inherit.branch</field>
<field name="model">stock.inventory.adjustment.name</field>
<field name="inherit_id" ref="stock.stock_inventory_adjustment_name_form_view"/>
<field name="arch" type="xml">
<field name="inventory_adjustment_name" position="after">
<field name="branch_id"/>
</field>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_location_form_inherit_branch" model="ir.ui.view">
<field name="name">view.location.form.inherit.branch</field>
<field name="model">stock.location</field>
<field name="inherit_id" ref="stock.view_location_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='company_id']" position="before">
<field name="branch_id"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Stock move Inherit Form View to Modify it -->
<record id="view_move_form_inherit_branch_form_stock" model="ir.ui.view">
<field name="name">view.move.form.inherit.branch</field>
<field name="model">stock.move</field>
<field name="inherit_id" ref="stock.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='product_id']" position="after">
<field name="branch_id"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Stock Picking Inherit Form View to Modify it -->
<record id="view_picking_form_inherit_branch" model="ir.ui.view">
<field name="name">view.picking.form.inherit.branch</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='origin']"
position="after">
<!-- Add your fields or attributes here -->
<field name="branch_id"/>
</xpath>
</field>
</record>
</data>
</odoo>

Some files were not shown because too many files have changed in this diff Show More