# Copyright 2011-2012 Nicolas Bessi (Camptocamp SA) # Copyright 2016 Yannick Payot (Camptocamp SA) # Copyright 2023 ACSONE SA/NV # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models class GeoRasterLayerType(models.Model): _name = "geoengine.raster.layer.type" _description = "Raster Layer Type" name = fields.Char(translate=True, required=True) code = fields.Char(required=True) service = fields.Char(required=True) class GeoRasterLayer(models.Model): _name = "geoengine.raster.layer" _description = "Raster Layer" raster_type = fields.Selection( [ ("osm", "OpenStreetMap"), ("wmts", "WMTS"), ("d_wms", "Distant WMS"), ("odoo", "Odoo field"), ], string="Raster layer type", default="osm", required=True, ) name = fields.Char("Layer Name", translate=True, required=True) url = fields.Char("Service URL") # technical field to display or not wmts options is_wmts = fields.Boolean(compute="_compute_is_wmts") # technical field to display or not wms options is_wms = fields.Boolean(compute="_compute_is_wms") # wmts options matrix_set = fields.Char("Matrix set") format_suffix = fields.Char("Format", help="eg. png") request_encoding = fields.Char("Request encoding", help="eg. REST") projection = fields.Char(help="eg. EPSG:21781") units = fields.Char(help="eg. m") # Not used resolutions = fields.Char() max_extent = fields.Char("Max extent") dimensions = fields.Char(help="List of dimensions separated by ','") params = fields.Char(help="Dictiorary of values for dimensions as JSON") # wms options params_wms = fields.Char( "Params WMS", help="Need to provide at least a LAYERS param" ) server_type = fields.Char( help="The type of the remote WMS server: mapserver, geoserver, carmentaserver, or qgis", ) # technical field to display or not layer type -- Not used has_type = fields.Boolean(compute="_compute_has_type") type_id = fields.Many2one( "geoengine.raster.layer.type", "Layer", domain="[('service', '=', raster_type)]" ) type = fields.Char(related="type_id.code") sequence = fields.Integer("Layer priority", default=6) overlay = fields.Boolean("Is overlay layer?") field_id = fields.Many2one( "ir.model.fields", "Odoo layer field to use", domain=[("ttype", "ilike", "geo_"), ("model", "=", "view_id.model")], ) view_id = fields.Many2one( "ir.ui.view", "Related View", domain=[("type", "=", "geoengine")], required=True ) use_to_edit = fields.Boolean("Use to edit") @api.depends("raster_type", "is_wmts") def _compute_has_type(self): for rec in self: rec.has_type = rec.raster_type == "is_wmts" @api.depends("raster_type") def _compute_is_wmts(self): for rec in self: rec.is_wmts = rec.raster_type == "wmts" @api.depends("raster_type") def _compute_is_wms(self): for rec in self: rec.is_wms = rec.raster_type == "d_wms"