feeder: create measure for integer fields (#43546)
This commit is contained in:
parent
e4e8779661
commit
afb70fe986
|
@ -287,13 +287,6 @@
|
|||
"name": "stringCaseSensitive-é",
|
||||
"type": "string",
|
||||
"value": "\"field_stringCaseSensitive-é\""
|
||||
},
|
||||
{
|
||||
"filter": true,
|
||||
"label": "8th field integer",
|
||||
"name": "integer",
|
||||
"type": "string",
|
||||
"value": "\"field_integer\""
|
||||
}
|
||||
],
|
||||
"fact_table" : "\"formdata_demande\"",
|
||||
|
@ -416,6 +409,12 @@
|
|||
"label" : "localisation géographique",
|
||||
"name" : "geolocation",
|
||||
"type" : "point"
|
||||
},
|
||||
{
|
||||
"name": "sum_integer",
|
||||
"label": "total du champ « 8th field integer »",
|
||||
"type": "integer",
|
||||
"expression": "SUM({fact_table}.\"field_integer\")"
|
||||
}
|
||||
],
|
||||
"name" : "formdata_demande",
|
||||
|
|
|
@ -622,6 +622,10 @@ class WcsOlapFeeder(object):
|
|||
self.formdata_json_index.append(varname)
|
||||
|
||||
|
||||
def has_digits_validation(field):
|
||||
return field.validation and field.validation.get('type') == 'digits'
|
||||
|
||||
|
||||
class WcsFormdefFeeder(object):
|
||||
def __init__(self, olap_feeder, formdef, do_feed=True):
|
||||
self.olap_feeder = olap_feeder
|
||||
|
@ -675,7 +679,10 @@ class WcsFormdefFeeder(object):
|
|||
elif field.type == 'bool':
|
||||
field_def = 'boolean'
|
||||
elif field.type == 'string':
|
||||
field_def = 'varchar'
|
||||
if has_digits_validation(field):
|
||||
field_def = 'integer'
|
||||
else:
|
||||
field_def = 'varchar'
|
||||
else:
|
||||
continue
|
||||
columns[field.varname] = {
|
||||
|
@ -838,7 +845,13 @@ class WcsFormdefFeeder(object):
|
|||
v = self.get_item_id(field, raw)
|
||||
else:
|
||||
v = None
|
||||
elif field.type in ('string', 'bool'):
|
||||
elif field.type == 'string':
|
||||
if has_digits_validation(field):
|
||||
if raw is not None:
|
||||
v = int(raw)
|
||||
else:
|
||||
v = raw
|
||||
elif field.type == 'bool':
|
||||
v = raw
|
||||
|
||||
# unstructured storage of field values
|
||||
|
@ -1074,13 +1087,23 @@ class WcsFormdefFeeder(object):
|
|||
'filter': True,
|
||||
}
|
||||
elif field.type == 'string':
|
||||
dimension = {
|
||||
'name': dimension_name,
|
||||
'label': dimension_label,
|
||||
'type': 'string',
|
||||
'value': quote(field_name),
|
||||
'filter': True,
|
||||
}
|
||||
if has_digits_validation(field):
|
||||
# we will define a SUM measure instead
|
||||
cube['measures'].append({
|
||||
'name': 'sum_' + dimension_name,
|
||||
'label': 'total du champ « %s »' % dimension_label,
|
||||
'type': 'integer',
|
||||
'expression': 'SUM({fact_table}.%s)' % quote(field_name),
|
||||
})
|
||||
continue
|
||||
else:
|
||||
dimension = {
|
||||
'name': dimension_name,
|
||||
'label': dimension_label,
|
||||
'type': 'string',
|
||||
'value': quote(field_name),
|
||||
'filter': True,
|
||||
}
|
||||
else:
|
||||
continue
|
||||
if join:
|
||||
|
|
|
@ -202,6 +202,7 @@ class Field(BaseObject):
|
|||
varname = None
|
||||
in_filters = False
|
||||
anonymise = None
|
||||
validation = {}
|
||||
|
||||
|
||||
class Schema(BaseObject):
|
||||
|
|
Loading…
Reference in New Issue