├── agreement_responsibility_matrix ├── __init__.py ├── models │ ├── __init__.py │ ├── agreement_responsibility_line.py │ ├── agreement.py │ ├── agreement_wizard.py │ └── agreement_responsibility_category.py ├── security │ └── ir.model.access.csv ├── __manifest__.py ├── views │ ├── agreement_view.xml │ └── agreement_responsibility_category_view.xml ├── i18n │ └── sv.po └── demo │ └── agreement_demo.xml └── .gitignore /agreement_responsibility_matrix/__init__.py: -------------------------------------------------------------------------------- 1 | from . import models 2 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/models/__init__.py: -------------------------------------------------------------------------------- 1 | from . import agreement 2 | from . import agreement_responsibility_line 3 | from . import agreement_responsibility_category 4 | from . import agreement_wizard 5 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/security/ir.model.access.csv: -------------------------------------------------------------------------------- 1 | id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink 2 | agreement_responsibility_matrix.access_agreement_responsibility_line,access_agreement_responsibility_line,agreement_responsibility_matrix.model_agreement_responsibility_line,base.group_user,1,1,1,1 3 | agreement_responsibility_matrix.access_agreement_responsibility_category,access_agreement_responsibility_category,agreement_responsibility_matrix.model_agreement_responsibility_category,base.group_user,1,1,1,1 4 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/models/agreement_responsibility_line.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api, _ 2 | 3 | 4 | class AgreementResponsibilityLine(models.Model): 5 | _name = "agreement.responsibility.line" 6 | _description = "Agreement Responsibility Line" 7 | 8 | name = fields.Char(string="Name", index='trigram', required=True) 9 | owner = fields.Selection([('landlord', 'Landlord'), ('tenant', 'Tenant')], string="Owner", default="landlord") 10 | maintenance_responsibility = fields.Selection([ 11 | ('landlord', 'Landlord'), ('tenant', 'Tenant')], string="Maintenance Responsibility", default="landlord") 12 | remarks = fields.Text(string="Remarks") 13 | agreement_responsibility_category_id = fields.Many2one("agreement.responsibility.category", string="Category") 14 | agreement_id = fields.Many2one("agreement", string="Agreement") 15 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/__manifest__.py: -------------------------------------------------------------------------------- 1 | # © 2017 Akretion (Alexis de Lattre ) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | { 5 | "name": "Agreement Responsibility Matrix", 6 | "summary": "Adds an agreement responsibility matrix", 7 | "version": "1.0.0", 8 | "category": "Contract", 9 | "author": "Vertel AB", 10 | "website": "https://github.com/vertelab/odoo-agreement", 11 | "license": "AGPL-3", 12 | "depends": ["agreement","agreement_legal"], 13 | 14 | "data": [ 15 | "security/ir.model.access.csv", 16 | "views/agreement_view.xml", 17 | "views/agreement_responsibility_category_view.xml", 18 | 'demo/agreement_demo.xml', 19 | ], 20 | 'demo': [ 21 | #'demo/agreement_demo.xml', 22 | ], 23 | "installable": True, 24 | 'application': False, 25 | } 26 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/models/agreement.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api 2 | 3 | 4 | class Agreement(models.Model): 5 | _inherit = "agreement" 6 | 7 | agreement_responsibility_line_ids = fields.One2many( 8 | "agreement.responsibility.line", "agreement_id", "Agreement Responsibility Lines" 9 | ) 10 | category_id = fields.Many2one('agreement.category', string='Category') 11 | parent_id = fields.Many2one('agreement', string='Parent Agreement', ondelete='cascade') 12 | child_ids = fields.One2many('agreement', 'parent_id', string='Child Agreements') 13 | 14 | 15 | class AgreementCategory(models.Model): 16 | _name = 'agreement.category' 17 | _description = 'Agreement Category' 18 | _parent_name = 'parent_id' 19 | _parent_store = True 20 | 21 | name = fields.Char(required=True) 22 | parent_id = fields.Many2one('agreement.category', string='Parent Category', index=True, ondelete='cascade') 23 | child_ids = fields.One2many('agreement.category', 'parent_id', string='Children') 24 | 25 | parent_path = fields.Char(index=True) 26 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/models/agreement_wizard.py: -------------------------------------------------------------------------------- 1 | # Copyright 2021 Ecosoft Co., Ltd (http://ecosoft.co.th) 2 | # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). 3 | 4 | from odoo import fields, models 5 | import logging 6 | 7 | class CreateAgreementWizard(models.TransientModel): 8 | _inherit = "create.agreement.wizard" 9 | 10 | def copy_matrix_from_template(self, agreement): 11 | for matrix_line in agreement.template_id.agreement_responsibility_line_ids: 12 | self.env['agreement.responsibility.line'].create({ 13 | 'name':matrix_line.name, 14 | 'agreement_responsibility_category_id':matrix_line.agreement_responsibility_category_id.id, 15 | 'remarks':matrix_line.remarks, 16 | 'agreement_id':agreement.id, 17 | 'owner':matrix_line.owner, 18 | 'maintenance_responsibility':matrix_line.maintenance_responsibility, 19 | } 20 | ) 21 | 22 | def _create_agreement(self): 23 | agreement = super(CreateAgreementWizard, self)._create_agreement() 24 | self.copy_matrix_from_template(agreement) 25 | return agreement 26 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/views/agreement_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | agreement.form 7 | agreement 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/models/agreement_responsibility_category.py: -------------------------------------------------------------------------------- 1 | from odoo import models, fields, api, _ 2 | 3 | 4 | class AgreementResponsibilityCategory(models.Model): 5 | _name = "agreement.responsibility.category" 6 | _description = "Agreement Responsibility Category" 7 | _parent_name = "parent_id" 8 | _parent_store = True 9 | _rec_name = 'complete_name' 10 | _order = 'complete_name desc' 11 | 12 | name = fields.Char(string="Name", index='trigram', required=True) 13 | parent_id = fields.Many2one("agreement.responsibility.category", string="Parent", index=True, ondelete='cascade') 14 | parent_path = fields.Char(index=True) 15 | child_id = fields.One2many('agreement.responsibility.category', 'parent_id', 'Child Categories') 16 | complete_name = fields.Char( 17 | 'Complete Name', compute='_compute_complete_name', recursive=True, 18 | store=True) 19 | 20 | @api.depends('name', 'parent_id.complete_name') 21 | def _compute_complete_name(self): 22 | for category in self: 23 | if category.parent_id: 24 | category.complete_name = '%s / %s' % (category.parent_id.complete_name, category.name) 25 | else: 26 | category.complete_name = category.name 27 | 28 | agreement_responsibility_line_ids = fields.One2many( 29 | "agreement.responsibility.line", "agreement_responsibility_category_id", "Agreement Responsibility Lines" 30 | ) -------------------------------------------------------------------------------- /agreement_responsibility_matrix/views/agreement_responsibility_category_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | agreement.responsibility.category.form 6 | agreement.responsibility.category 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 |
26 |
27 | 28 | 29 | agreement.responsibility.category.list 30 | agreement.responsibility.category 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | Responsibility Category 43 | ir.actions.act_window 44 | agreement.responsibility.category 45 | list,form 46 | 47 | 48 | 49 | 50 | 51 |
52 |
-------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[codz] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | share/python-wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | MANIFEST 28 | 29 | # PyInstaller 30 | # Usually these files are written by a python script from a template 31 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 32 | *.manifest 33 | *.spec 34 | 35 | # Installer logs 36 | pip-log.txt 37 | pip-delete-this-directory.txt 38 | 39 | # Unit test / coverage reports 40 | htmlcov/ 41 | .tox/ 42 | .nox/ 43 | .coverage 44 | .coverage.* 45 | .cache 46 | nosetests.xml 47 | coverage.xml 48 | *.cover 49 | *.py.cover 50 | .hypothesis/ 51 | .pytest_cache/ 52 | cover/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | .pybuilder/ 76 | target/ 77 | 78 | # Jupyter Notebook 79 | .ipynb_checkpoints 80 | 81 | # IPython 82 | profile_default/ 83 | ipython_config.py 84 | 85 | # pyenv 86 | # For a library or package, you might want to ignore these files since the code is 87 | # intended to run in multiple environments; otherwise, check them in: 88 | # .python-version 89 | 90 | # pipenv 91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 94 | # install all needed dependencies. 95 | #Pipfile.lock 96 | 97 | # UV 98 | # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control. 99 | # This is especially recommended for binary packages to ensure reproducibility, and is more 100 | # commonly ignored for libraries. 101 | #uv.lock 102 | 103 | # poetry 104 | # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. 105 | # This is especially recommended for binary packages to ensure reproducibility, and is more 106 | # commonly ignored for libraries. 107 | # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control 108 | #poetry.lock 109 | #poetry.toml 110 | 111 | # pdm 112 | # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. 113 | # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python. 114 | # https://pdm-project.org/en/latest/usage/project/#working-with-version-control 115 | #pdm.lock 116 | #pdm.toml 117 | .pdm-python 118 | .pdm-build/ 119 | 120 | # pixi 121 | # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control. 122 | #pixi.lock 123 | # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one 124 | # in the .venv directory. It is recommended not to include this directory in version control. 125 | .pixi 126 | 127 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm 128 | __pypackages__/ 129 | 130 | # Celery stuff 131 | celerybeat-schedule 132 | celerybeat.pid 133 | 134 | # SageMath parsed files 135 | *.sage.py 136 | 137 | # Environments 138 | .env 139 | .envrc 140 | .venv 141 | env/ 142 | venv/ 143 | ENV/ 144 | env.bak/ 145 | venv.bak/ 146 | 147 | # Spyder project settings 148 | .spyderproject 149 | .spyproject 150 | 151 | # Rope project settings 152 | .ropeproject 153 | 154 | # mkdocs documentation 155 | /site 156 | 157 | # mypy 158 | .mypy_cache/ 159 | .dmypy.json 160 | dmypy.json 161 | 162 | # Pyre type checker 163 | .pyre/ 164 | 165 | # pytype static type analyzer 166 | .pytype/ 167 | 168 | # Cython debug symbols 169 | cython_debug/ 170 | 171 | # PyCharm 172 | # JetBrains specific template is maintained in a separate JetBrains.gitignore that can 173 | # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore 174 | # and can be added to the global gitignore or merged into this file. For a more nuclear 175 | # option (not recommended) you can uncomment the following to ignore the entire idea folder. 176 | #.idea/ 177 | 178 | # Abstra 179 | # Abstra is an AI-powered process automation framework. 180 | # Ignore directories containing user credentials, local state, and settings. 181 | # Learn more at https://abstra.io/docs 182 | .abstra/ 183 | 184 | # Visual Studio Code 185 | # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore 186 | # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore 187 | # and can be added to the global gitignore or merged into this file. However, if you prefer, 188 | # you could uncomment the following to ignore the entire vscode folder 189 | # .vscode/ 190 | 191 | # Ruff stuff: 192 | .ruff_cache/ 193 | 194 | # PyPI configuration file 195 | .pypirc 196 | 197 | # Cursor 198 | # Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to 199 | # exclude from AI features like autocomplete and code analysis. Recommended for sensitive data 200 | # refer to https://docs.cursor.com/context/ignore-files 201 | .cursorignore 202 | .cursorindexingignore 203 | 204 | # Marimo 205 | marimo/_static/ 206 | marimo/_lsp/ 207 | __marimo__/ 208 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/i18n/sv.po: -------------------------------------------------------------------------------- 1 | # Translation of Odoo Server. 2 | # This file contains the translation of the following modules: 3 | # * agreement_responsibility_matrix 4 | # 5 | msgid "" 6 | msgstr "" 7 | "Project-Id-Version: Odoo Server 18.0-20250911\n" 8 | "Report-Msgid-Bugs-To: \n" 9 | "POT-Creation-Date: 2025-09-18 13:01+0000\n" 10 | "PO-Revision-Date: 2025-09-18 13:01+0000\n" 11 | "Last-Translator: \n" 12 | "Language-Team: \n" 13 | "MIME-Version: 1.0\n" 14 | "Content-Type: text/plain; charset=UTF-8\n" 15 | "Content-Transfer-Encoding: \n" 16 | "Plural-Forms: \n" 17 | 18 | #. module: agreement_responsibility_matrix 19 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__agreement_id 20 | msgid "Agreement" 21 | msgstr "Avtal" 22 | 23 | #. module: agreement_responsibility_matrix 24 | #: model:ir.model,name:agreement_responsibility_matrix.model_agreement 25 | msgid "Agreement Extension" 26 | msgstr "Relaterad fastighet" 27 | 28 | #. module: agreement_responsibility_matrix 29 | #: model:ir.model,name:agreement_responsibility_matrix.model_agreement_responsibility_category 30 | msgid "Agreement Responsibility Category" 31 | msgstr "Avtal Ansvar Kategori" 32 | 33 | #. module: agreement_responsibility_matrix 34 | #: model:ir.model,name:agreement_responsibility_matrix.model_agreement_responsibility_line 35 | msgid "Agreement Responsibility Line" 36 | msgstr "Avtal Ansvarslinje" 37 | 38 | #. module: agreement_responsibility_matrix 39 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement__agreement_responsibility_line_ids 40 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__agreement_responsibility_line_ids 41 | msgid "Agreement Responsibility Lines" 42 | msgstr "Avtal Ansvarslinjer" 43 | 44 | #. module: agreement_responsibility_matrix 45 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__agreement_responsibility_category_id 46 | msgid "Category" 47 | msgstr "Kategori" 48 | 49 | #. module: agreement_responsibility_matrix 50 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__child_id 51 | msgid "Child Categories" 52 | msgstr "Underliggande kategori" 53 | 54 | #. module: agreement_responsibility_matrix 55 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__complete_name 56 | msgid "Complete Name" 57 | msgstr "Fullständigt namn" 58 | 59 | #. module: agreement_responsibility_matrix 60 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__create_uid 61 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__create_uid 62 | msgid "Created by" 63 | msgstr "Skapad av" 64 | 65 | #. module: agreement_responsibility_matrix 66 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__create_date 67 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__create_date 68 | msgid "Created on" 69 | msgstr "Skapad på" 70 | 71 | #. module: agreement_responsibility_matrix 72 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__display_name 73 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__display_name 74 | msgid "Display Name" 75 | msgstr "Visningsnamn" 76 | 77 | #. module: agreement_responsibility_matrix 78 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__id 79 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__id 80 | msgid "ID" 81 | msgstr "ID" 82 | 83 | #. module: agreement_responsibility_matrix 84 | #: model:ir.model.fields.selection,name:agreement_responsibility_matrix.selection__agreement_responsibility_line__maintenance_responsibility__landlord 85 | #: model:ir.model.fields.selection,name:agreement_responsibility_matrix.selection__agreement_responsibility_line__owner__landlord 86 | msgid "Landlord" 87 | msgstr "Hyresvärd" 88 | 89 | #. module: agreement_responsibility_matrix 90 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__write_uid 91 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__write_uid 92 | msgid "Last Updated by" 93 | msgstr "Senast uppdaterad av" 94 | 95 | #. module: agreement_responsibility_matrix 96 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__write_date 97 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__write_date 98 | msgid "Last Updated on" 99 | msgstr "Senast uppdaterad den" 100 | 101 | #. module: agreement_responsibility_matrix 102 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__maintenance_responsibility 103 | msgid "Maintenance Responsibility" 104 | msgstr "Ansvar för underhåll" 105 | 106 | #. module: agreement_responsibility_matrix 107 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__name 108 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__name 109 | msgid "Name" 110 | msgstr "Namn" 111 | 112 | #. module: agreement_responsibility_matrix 113 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__owner 114 | msgid "Owner" 115 | msgstr "Ägare" 116 | 117 | #. module: agreement_responsibility_matrix 118 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__parent_id 119 | msgid "Parent" 120 | msgstr "Överliggande" 121 | 122 | #. module: agreement_responsibility_matrix 123 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_category__parent_path 124 | msgid "Parent Path" 125 | msgstr "Överliggande sökväg" 126 | 127 | #. module: agreement_responsibility_matrix 128 | #: model:ir.model.fields,field_description:agreement_responsibility_matrix.field_agreement_responsibility_line__remarks 129 | msgid "Remarks" 130 | msgstr "Anmärkningar" 131 | 132 | #. module: agreement_responsibility_matrix 133 | #: model:ir.actions.act_window,name:agreement_responsibility_matrix.action_agreement_responsibility_category 134 | #: model:ir.ui.menu,name:agreement_responsibility_matrix.agreement_responsibility_category 135 | msgid "Responsibility Category" 136 | msgstr "Ansvarskategori" 137 | 138 | #. module: agreement_responsibility_matrix 139 | #: model_terms:ir.ui.view,arch_db:agreement_responsibility_matrix.partner_agreement_form_view 140 | msgid "Responsibility Matrix" 141 | msgstr "Ansvarsmatris" 142 | 143 | #. module: agreement_responsibility_matrix 144 | #: model:ir.model.fields.selection,name:agreement_responsibility_matrix.selection__agreement_responsibility_line__maintenance_responsibility__tenant 145 | #: model:ir.model.fields.selection,name:agreement_responsibility_matrix.selection__agreement_responsibility_line__owner__tenant 146 | msgid "Tenant" 147 | msgstr "Hyresgäst" 148 | -------------------------------------------------------------------------------- /agreement_responsibility_matrix/demo/agreement_demo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Hyresavtal 5 | True 6 | Hyresavtal 7 | 8 | 2025-09-02 9 | 2025-09-02 10 | 2035-09-02 11 | 12 | 13 | 14 | Fastigheten 15 | 16 | 17 | 18 | Installationer 19 | 20 | 21 | 22 | Restaurangens lokaler 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | Byggnaden 32 | 33 | 34 | 35 | Byggnaden 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Värme 45 | 46 | 47 | 48 | 49 | Vatten, avlopp 50 | 51 | 52 | 53 | 54 | El 55 | 56 | 57 | 58 | 59 | Kyla och ventilation 60 | 61 | 62 | 63 | 64 | Imkanaler och ventilation 65 | 66 | 67 | 68 | 69 | Lås, larm och övervakning 70 | 71 | 72 | 73 | 74 | Belysning 75 | 76 | 77 | 78 | 79 | Hissar 80 | 81 | 82 | 83 | 84 | Matsal 85 | 86 | 87 | 88 | 89 | Fast inredning 90 | 91 | 92 | 93 | 94 | Restaurankök 95 | 96 | 97 | 98 | 99 | Förråd, ekonomiutrymmen 100 | 101 | 102 | 103 | 104 | Personalutrymmen 105 | 106 | 107 | 108 | 109 | Våtrum 110 | 111 | 112 | 113 | 114 | 115 | Tak och fasader 116 | landlord 117 | landlord 118 | 119 | 120 | 121 | 122 | Entré och andra dörrar som leder från lokalen 123 | landlord 124 | landlord 125 | 126 | 127 | 128 | 129 | 130 | 131 | Entréytor 132 | landlord 133 | landlord 134 | 135 | 136 | 137 | 138 | Angoringsytor 139 | landlord 140 | landlord 141 | 142 | 143 | 144 | 145 | 146 | Luftvärme 147 | landlord 148 | landlord 149 | 150 | 151 | 152 | 153 | värmecentraler 154 | landlord 155 | landlord 156 | 157 | 158 | 159 | 160 | 161 | Brandpostledning 162 | landlord 163 | landlord 164 | 165 | 166 | 167 | 168 | 169 | Sprinkleranläggning 170 | landlord 171 | landlord 172 | 173 | 174 | 175 | 176 | 177 | Mätare 178 | landlord 179 | landlord 180 | 181 | 182 | 183 | 184 | 185 | Ledningar 186 | landlord 187 | landlord 188 | 189 | 190 | 191 | 192 | Rumskyla 193 | landlord 194 | landlord 195 | 196 | 197 | 198 | 199 | Frånluftsventilation 200 | landlord 201 | landlord 202 | 203 | 204 | 205 | 206 | 207 | 208 | Filter och spjäll 209 | landlord 210 | landlord 211 | 212 | 213 | 214 | 215 | Imkåpor 216 | landlord 217 | landlord 218 | 219 | 220 | 221 | 222 | 223 | Inbrottslarm 224 | landlord 225 | landlord 226 | 227 | 228 | 229 | 230 | Överfallslarm 231 | landlord 232 | landlord 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | Fasadbelysning 241 | landlord 242 | landlord 243 | 244 | 245 | 246 | 247 | Skyltbelysning 248 | landlord 249 | landlord 250 | 251 | 252 | 253 | 254 | 255 | 256 | Personhissar - korg, dörr maskineri 257 | landlord 258 | landlord 259 | 260 | 261 | 262 | 263 | Gods/varuhiss - korg, dörr, maskineri 264 | landlord 265 | landlord 266 | 267 | 268 | 269 | 270 | 271 | --------------------------------------------------------------------------------