mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-19 13:32:08 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
|
|
@ -0,0 +1,156 @@
|
|||
# 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
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
SUPPORTED_ATT = [
|
||||
"float",
|
||||
"integer",
|
||||
"integer_big",
|
||||
"related",
|
||||
"function",
|
||||
"date",
|
||||
"datetime",
|
||||
"char",
|
||||
"text",
|
||||
"selection",
|
||||
]
|
||||
|
||||
NUMBER_ATT = ["float", "integer", "integer_big"]
|
||||
|
||||
|
||||
class GeoVectorLayer(models.Model):
|
||||
_name = "geoengine.vector.layer"
|
||||
_description = "Vector Layer"
|
||||
_order = "sequence ASC, name"
|
||||
|
||||
geo_repr = fields.Selection(
|
||||
[
|
||||
("basic", "Basic"),
|
||||
# Actually we have to think if we should separate it for colored
|
||||
("proportion", "Proportional Symbol"),
|
||||
("colored", "Colored range/Chroma.js"),
|
||||
],
|
||||
string="Representation mode",
|
||||
required=True,
|
||||
)
|
||||
|
||||
classification = fields.Selection(
|
||||
[
|
||||
("unique", "Unique value"),
|
||||
("interval", "Interval"),
|
||||
("quantile", "Quantile"),
|
||||
("custom", "Custom"),
|
||||
],
|
||||
string="Classification mode",
|
||||
required=False,
|
||||
)
|
||||
name = fields.Char("Layer Name", translate=True, required=True)
|
||||
begin_color = fields.Char("Begin color class", required=False, help="hex value")
|
||||
end_color = fields.Char(
|
||||
"End color class", required=False, help="hex value", default="#FF680A"
|
||||
)
|
||||
nb_class = fields.Integer("Number of class", default=1)
|
||||
geo_field_id = fields.Many2one(
|
||||
"ir.model.fields",
|
||||
"Geo field",
|
||||
required=True,
|
||||
ondelete="cascade",
|
||||
domain=[("ttype", "ilike", "geo_")],
|
||||
)
|
||||
attribute_field_id = fields.Many2one(
|
||||
"ir.model.fields", "Attribute field", domain=[("ttype", "in", SUPPORTED_ATT)]
|
||||
)
|
||||
model_id = fields.Many2one(
|
||||
"ir.model",
|
||||
"Model to use",
|
||||
store=True,
|
||||
readonly=False,
|
||||
compute="_compute_model_id",
|
||||
)
|
||||
model_name = fields.Char(related="model_id.model", readonly=True)
|
||||
|
||||
view_id = fields.Many2one(
|
||||
"ir.ui.view", "Related View", domain=[("type", "=", "geoengine")], required=True
|
||||
)
|
||||
sequence = fields.Integer("Layer Priority", default=6)
|
||||
readonly = fields.Boolean("Layer is read only")
|
||||
display_polygon_labels = fields.Boolean("Display Labels on Polygon")
|
||||
active_on_startup = fields.Boolean(
|
||||
help="Layer will be shown on startup if checked."
|
||||
)
|
||||
layer_opacity = fields.Float(default=1.0)
|
||||
model_domain = fields.Char(default="[]")
|
||||
model_view_id = fields.Many2one(
|
||||
"ir.ui.view",
|
||||
"Model view",
|
||||
domain=[("type", "=", "geoengine")],
|
||||
compute="_compute_model_view_id",
|
||||
readonly=False,
|
||||
)
|
||||
|
||||
@api.constrains("geo_field_id", "model_id")
|
||||
def _check_geo_field_id(self):
|
||||
for rec in self:
|
||||
if rec.model_id:
|
||||
if not rec.geo_field_id.model_id == rec.model_id:
|
||||
raise ValidationError(
|
||||
_(
|
||||
"The geo_field_id must be a field in %s model",
|
||||
rec.model_id.display_name,
|
||||
)
|
||||
)
|
||||
|
||||
@api.constrains("geo_repr", "attribute_field_id")
|
||||
def _check_geo_repr(self):
|
||||
for rec in self:
|
||||
if (
|
||||
rec.attribute_field_id
|
||||
and rec.attribute_field_id.ttype not in NUMBER_ATT
|
||||
):
|
||||
if (
|
||||
rec.geo_repr == "colored"
|
||||
and rec.classification != "unique"
|
||||
or rec.geo_repr == "proportion"
|
||||
):
|
||||
raise ValidationError(
|
||||
_(
|
||||
"You need to select a numeric field",
|
||||
)
|
||||
)
|
||||
|
||||
@api.constrains("attribute_field_id", "geo_field_id")
|
||||
def _check_if_attribute_in_geo_field(self):
|
||||
for rec in self:
|
||||
if rec.attribute_field_id and rec.geo_field_id:
|
||||
if rec.attribute_field_id.model != rec.geo_field_id.model:
|
||||
raise ValidationError(
|
||||
_(
|
||||
"You need to provide an attribute that exists in %s model",
|
||||
rec.geo_field_id.model_id.display_name,
|
||||
)
|
||||
)
|
||||
|
||||
@api.depends("model_id")
|
||||
def _compute_model_view_id(self):
|
||||
for rec in self:
|
||||
if rec.model_id:
|
||||
for view in rec.model_id.view_ids:
|
||||
if view.type == "geoengine":
|
||||
rec.model_view_id = view
|
||||
else:
|
||||
rec.model_view_id = ""
|
||||
|
||||
@api.depends("geo_field_id", "view_id")
|
||||
def _compute_model_id(self):
|
||||
for rec in self:
|
||||
if rec.view_id and rec.geo_field_id:
|
||||
if rec.view_id.model != rec.geo_field_id.model:
|
||||
rec.model_id = rec.geo_field_id.model_id
|
||||
else:
|
||||
rec.model_id = ""
|
||||
else:
|
||||
rec.model_id = ""
|
||||
Loading…
Add table
Add a link
Reference in a new issue