Commit cc0cbaf7 authored by LE GAC Renaud's avatar LE GAC Renaud
Browse files

Improved database scheme with a new table for graphs.

parent 299d622e
......@@ -12,7 +12,7 @@ import re
from datetime import date, timedelta
from gluon.dal import smart_query
from gluon.storage import Storage
from plugin_dbui import Store
from plugin_dbui import INLINE_ALERT, Store
from reporting_tools import (Report,
StoreForListView,
StoreForMetric1DView,
......@@ -24,28 +24,40 @@ def graph():
"""Plot 2D metric as a Ext.char.series.Area
"""
metric = db.metrics[request.vars.id_metrics]
graph = db.graphs[request.vars.id_graphs]
selector = virtdb.metric_selector_2D
selector = virtdb.graph_selector
report = Report(selector, exclude_fields=('category',
'metric',
'period_end',
'period_start',
'year'))
# homomorphism between metric2D and graph
graph.field_vertical = graph.field_horizontal
graph.field_horizontal = graph.field_stacked
graph.metric = graph.metric_vertical
# the metric might be superseded by the user
if report.metric:
graph.metric = report.metric
if not graph.metric:
return INLINE_ALERT % (T('Error'), T('Please select a metric!'))
# configure the Ext.data.Store
if metric.field_vertical == 'year':
store = StoreForYear2DView(metric, report)
if graph.field_vertical == 'year':
store = StoreForYear2DView(graph, report)
else:
store = StoreForMetric2DView(metric, report)
store = StoreForMetric2DView(graph, report)
# Extra the stack keys (value for metric.field_vertical)
stack_keys = store.values_h
# delegate the rendering of the graph to the view
response.view = 'report/graph.html'
return dict(cfg_store=store.as_json(), stack_keys=stack_keys, view=metric)
return dict(cfg_store=store.as_json(), stack_keys=stack_keys, view=graph)
def list():
......@@ -174,6 +186,13 @@ def metric2D():
'period_start',
'year'))
# the metric might be superseded by the user
if report.metric:
metric.metric = report.metric
if not metric.metric:
return INLINE_ALERT % (T('Error'), T('Please select a metric!'))
# configure the Ext.data.Store
if metric.field_vertical == 'year':
store = StoreForYear2DView(metric, report)
......
......@@ -85,14 +85,14 @@
'Dictionary associating the column name with the column label. The key is a column name encoded as tablename.columnname while the value is a string.': 'Dictionary associating the column name with the column label. The key is a column name encoded as tablename.columnname while the value is a string.',
'Dictionary associating the column name with the column label. The key is a column name encoded as tablename.fieldname. The value is a string.': 'Dictionary associating the column name with the column label. The key is a column name encoded as tablename.fieldname. The value is a string.',
'Documentation for developers': 'Documentation développeurs',
'Documentations': 'Documentations',
'documentations': 'documentations',
'Documentations': 'Documentations',
'Domain': 'Domaine',
'Domaine': 'Domaine',
'Duration': 'Durée',
'E-mail': 'E-mail',
'End': 'Fin',
'end': 'fin',
'End': 'Fin',
'End Date': 'Date de fin',
'enter a number between %(min)g and %(max)g': 'enter a number between %(min)g and %(max)g',
'Enter a number between %(min)g and %(max)g': 'Enter a number between %(min)g and %(max)g',
......@@ -100,6 +100,7 @@
'Enter an integer between %(min)g and %(max)g': 'Enter an integer between %(min)g and %(max)g',
'enter an integer between %(min)g and %(max)g': 'enter an integer between %(min)g and %(max)g',
'enter date as %(format)s': 'enter date as %(format)s',
'Error': 'Error',
'Event': 'Evènement',
'Event category': 'Event category',
'Events': 'Evènements',
......@@ -110,6 +111,7 @@
'Features': 'Features',
'Field': 'Champ',
'Field Horizontal': 'Champ horizontal',
'Field Stacked': 'Champ empilé',
'Field Vertical': 'Champ vertical',
'Filter agencies': 'Filtrer les agences',
'Filter budgets': 'Filtrer les budgets',
......@@ -135,8 +137,8 @@
'Fte Sum': 'Fte Sum',
'Function': 'Fonction',
'Funding': 'Financement',
'fundings': 'financements',
'Fundings': 'Financements',
'fundings': 'financements',
'General': 'Général',
'Grade': 'Grade',
'greater or equal to': 'plus grand ou égual à',
......@@ -177,8 +179,8 @@
'Is Over': 'Is Over',
'Javascript API': 'Javascript API',
'Labels': 'Etiquettes',
'Last name': 'Last name',
'Last Name': 'Nom de famille',
'Last name': 'Nom de famille',
'less or equal to': 'inférieur ou égal à',
'Level': 'Niveau',
'levels': 'niveaux',
......@@ -215,6 +217,7 @@
'Metric people per category': 'Nb. de personnes par catégorie',
'Metric people per quality': 'Nb. personnes par qualité',
'Metric people per team': 'Nb. de personnes par équipe',
'Metric Vertical': 'Metrique (axe vertical)',
'Metrics / category': 'Métriques / catégorie',
'Metrics / quality': 'Métriques / qualité',
'Model': 'Modèle',
......@@ -234,8 +237,8 @@
'Origin': 'Origin',
'Password': 'Password',
"Password fields don't match": "Password fields don't match",
'people': 'personnes',
'People': 'Personnes',
'people': 'personnes',
'People per category': 'Personnes par catégorie',
'People per quality': 'Personnes par qualité',
'People per team': 'Personnes par équipe',
......@@ -248,11 +251,12 @@
'Person': 'Persone',
'Persone': 'Persone',
'PHD': 'PHD',
'Phd': 'Phd',
'PhD': 'PhD',
'Phd': 'Phd',
'Phd Date': 'Phd Date',
'Phd defense date': 'Date de la soutenance de la thèse',
'please input your password again': 'please input your password again',
'Please select a metric!': 'Sélectionnez une metrique !',
'plugin not install': 'greffon pas installé',
'Profile': 'Profile',
'Project': 'Projet',
......@@ -324,8 +328,8 @@
'User %(id)s Logged-in': 'User %(id)s Logged-in',
'User %(id)s Registered': 'User %(id)s Registered',
'User data': 'User data',
'user guides': 'guides utilisateur',
'User guides': 'Guides utilisateur',
'user guides': 'guides utilisateur',
'User ID': 'User ID',
'Usual': 'Habituel',
'Value already in database or empty': 'Value already in database or empty',
......
......@@ -57,6 +57,7 @@ tables = ['auth_group',
'auth_user',
'events',
'fundings',
'graphs',
'history',
'lists',
'metrics',
......
# -*- coding: utf-8 -*-
""" graphs
"""
tp_conditions = \
T("Can be applied on any field of the history table using the SQL WHERE syntax. "
"Be aware that foreign key are not resolved "
"(more information in the smart_query in the web2py documentation). "
"In addition individual property of the user block are not available, "
"but operator like contains can be applied on the history.data field.")
tp_fields = \
T("Any field of the history table including foreign table. "
"The field is encoded as tablename.fieldname. "
"For properties in the the user data block, use history.data.myproperty.")
db.define_table("graphs",
Field("name", "string", length=255, notnull=True, unique=True),
Field("title", "string", length=255),
Field("conditions", "text", comment=tp_conditions),
Field("field_horizontal", "string", length=255, notnull=True, comment=tp_fields),
Field("field_stacked", "string", length=255, notnull=True, comment=tp_fields),
Field("metric_vertical", "string", notnull=True, default='sum_fte', length=255),
Field("definition", "text"),
migrate="graphs.table")
db.graphs.metric_vertical.requires = IS_IN_SET(('count', 'sum_fte'))
\ No newline at end of file
......@@ -31,7 +31,7 @@ def_features = \
"[{ftype:'grouping', groupHeaderTpl: '{name}', startCollapsed: false}]"
db.define_table("lists",
Field("list", "string", length=255, notnull=True, unique=True),
Field("name", "string", length=255, notnull=True, unique=True),
Field("title", "string", length=255),
Field("conditions", "text", comment=tp_conditions),
Field("group_field", "string", length=255, comment=tp_fields),
......
......@@ -15,10 +15,13 @@ T("Any field of the history table including foreign table. "
"For properties in the the user data block, use history.data.myproperty.")
db.define_table("metrics",
Field("metric", "string", length=255, notnull=True, unique=True),
Field("name", "string", length=255, notnull=True, unique=True),
Field("title", "string", length=255),
Field("conditions", "text", comment=tp_conditions),
Field("field_vertical", "string", length=255, notnull=True, comment=tp_fields),
Field("field_horizontal", "string", length=255, comment=tp_fields),
Field("metric", "string", length=255),
Field("definition", "text"),
migrate="metrics.table")
db.metrics.metric.requires = IS_IN_SET(('count', 'sum_fte'))
\ No newline at end of file
# -*- coding: utf-8 -*-
""" graphs
"""
#-------------------------------------------------------------------------------
#
# FIELDS CONFIGURATiON
#
#-------------------------------------------------------------------------------
fieldsModifier = dbui.FieldsModifier('graphs')
fieldsModifier.configure_field('conditions', height=110)
fieldsModifier.configure_field('definition', height=110)
#-------------------------------------------------------------------------------
#
# FORM CONFIGURATiON
#
#-------------------------------------------------------------------------------
formModifier = dbui.FormModifier('graphs')
formModifier.merge_fields('name',
'title',
'definition',
'conditions',
title=T('General'))
formModifier.merge_fields('field_horizontal',
'field_stacked',
'metric_vertical',
title=T('Count by'))
formModifier.set_mapper(dbui.map_tabpanel)
formModifier.configure(fieldDefaults={"labelWidth": 135},
width=450)
#-------------------------------------------------------------------------------
#
# GRID CONFIGURATiON
#
#-------------------------------------------------------------------------------
gridModifier = dbui.GridModifier('graphs')
gridModifier.configure_column('name', width=30)
gridModifier.hide_columns('conditions',
'field_horizontal',
'field_stacked',
'metric_vertical',
'title')
#-------------------------------------------------------------------------------
#
# STORE CONFIGURATiON
#
#-------------------------------------------------------------------------------
storeModifier = dbui.StoreModifier('graphs')
storeModifier.orderby(db.graphs.name)
\ No newline at end of file
......@@ -31,7 +31,7 @@ fieldsModifier.configure_field('sorters',
#-------------------------------------------------------------------------------
formModifier = dbui.FormModifier('lists')
formModifier.merge_fields('list',
formModifier.merge_fields('name',
'title',
'definition',
'conditions',
......@@ -48,7 +48,7 @@ formModifier.merge_fields('features',
title=T('Grid Features'))
formModifier.set_mapper(dbui.map_tabpanel)
formModifier.configure(width=500)
formModifier.configure(width=450)
#-------------------------------------------------------------------------------
#
......@@ -56,7 +56,7 @@ formModifier.configure(width=500)
#
#-------------------------------------------------------------------------------
gridModifier = dbui.GridModifier('lists')
gridModifier.configure_column('list', width=30)
gridModifier.configure_column('name', width=30)
gridModifier.hide_columns('title',
'columns',
'conditions',
......@@ -70,4 +70,4 @@ gridModifier.hide_columns('title',
#
#-------------------------------------------------------------------------------
storeModifier = dbui.StoreModifier('lists')
storeModifier.orderby(db.lists.list)
\ No newline at end of file
storeModifier.orderby(db.lists.name)
\ No newline at end of file
......@@ -9,8 +9,8 @@
#-------------------------------------------------------------------------------
fieldsModifier = dbui.FieldsModifier('metrics')
fieldsModifier.configure_field('conditions', height=120)
fieldsModifier.configure_field('definition', height=120)
fieldsModifier.configure_field('conditions', height=110)
fieldsModifier.configure_field('definition', height=110)
#-------------------------------------------------------------------------------
#
......@@ -19,29 +19,32 @@ fieldsModifier.configure_field('definition', height=120)
#-------------------------------------------------------------------------------
formModifier = dbui.FormModifier('metrics')
formModifier.merge_fields('metric',
formModifier.merge_fields('name',
'title',
'definition',
'conditions',
title=T('General'))
formModifier.merge_fields('field_vertical',
'field_horizontal',
'conditions',
'metric',
title=T('Count by'))
formModifier.set_mapper(dbui.map_tabpanel)
formModifier.configure(width=450)
#-------------------------------------------------------------------------------
#
# GRID CONFIGURATiON
#
#-------------------------------------------------------------------------------
gridModifier = dbui.GridModifier('metrics')
gridModifier.configure_column('metric', width=30)
gridModifier.hide_columns('title',
'conditions',
gridModifier.configure_column('name', width=30)
gridModifier.hide_columns('conditions',
'field_vertical',
'field_horizontal')
'field_horizontal',
'metric',
'title')
#-------------------------------------------------------------------------------
#
......@@ -49,4 +52,4 @@ gridModifier.hide_columns('title',
#
#-------------------------------------------------------------------------------
storeModifier = dbui.StoreModifier('metrics')
storeModifier.orderby(db.metrics.metric)
\ No newline at end of file
storeModifier.orderby(db.metrics.name)
\ No newline at end of file
......@@ -9,7 +9,7 @@ virtdb.define_table('graph_selector',
Field('category', 'string'),
Field('id_people_categories', 'reference people_categories', label= T("Quality")),
Field('id_projects', 'reference projects', label=T('Project')),
Field('metric', 'string', default='sum_fte'))
Field('metric', 'string'))
virtdb.graph_selector.category.requires = IS_IN_SET(PEOPLE_CATEGORIES)
virtdb.graph_selector.id_people_categories.requires = IS_IN_DB(db, 'people_categories.code')
......
......@@ -3,14 +3,14 @@
"""
virtdb.define_table('metric_selector_2D',
Field('year', 'integer', default=year),
Field('year', 'integer'),
Field('period_start', 'date'),
Field('period_end', 'date'),
Field('id_teams', 'reference teams', label=T('Team')),
Field('category', 'string'),
Field('id_people_categories', 'reference people_categories', label= T("Quality")),
Field('period_start', 'date'),
Field('period_end', 'date'),
Field('id_projects', 'reference projects', label=T('Project')),
Field('metric', 'string', default='sum_fte'))
Field('metric', 'string'))
virtdb.metric_selector_2D.category.requires = IS_IN_SET(PEOPLE_CATEGORIES)
virtdb.metric_selector_2D.id_people_categories.requires = IS_IN_DB(db, 'people_categories.code')
......
......@@ -70,6 +70,7 @@ helpNode.sort_children()
cfgNode = Node(T('Configure'))
cfgNode.add_child(T('The lists'), to_grid('lists'))
cfgNode.add_child(T('The metrics'), to_grid('metrics'))
cfgNode.add_child(T('The graphs'), to_grid('graphs'))
#-------------------------------------------------------------------------------
#
......@@ -100,13 +101,13 @@ eventNode.add_child(T('history'), to_grid('history'))
#-------------------------------------------------------------------------------
listNode = Node(T('The lists'))
for row in db(db.lists.id > 0).select(orderby=db.lists.list):
for row in db(db.lists.id > 0).select(orderby=db.lists.name):
leaf = PanelWithUrlSelector(virtdb.list_selector,
baseUrl=URL('report', 'list'),
baseParams={'id_lists': row.id})
listNode.add_child(row.list, leaf)
listNode.add_child(row.name, leaf)
#-------------------------------------------------------------------------------
#
......@@ -115,7 +116,7 @@ for row in db(db.lists.id > 0).select(orderby=db.lists.list):
#-------------------------------------------------------------------------------
metricNode = Node(T('The metrics'))
for row in db(db.metrics.id > 0).select(orderby=db.metrics.metric):
for row in db(db.metrics.id > 0).select(orderby=db.metrics.name):
# select the action and the selector
action, selector = 'metric1D', virtdb.metric_selector_1D
......@@ -126,7 +127,7 @@ for row in db(db.metrics.id > 0).select(orderby=db.metrics.metric):
baseUrl=URL('report', action),
baseParams={'id_metrics': row.id})
metricNode.add_child(row.metric, leaf)
metricNode.add_child(row.name, leaf)
#-------------------------------------------------------------------------------
#
......@@ -136,16 +137,13 @@ for row in db(db.metrics.id > 0).select(orderby=db.metrics.metric):
#-------------------------------------------------------------------------------
graphNode = Node(T('The graphs'))
for row in db(db.metrics.id > 0).select(orderby=db.metrics.metric):
for row in db(db.graphs.id > 0).select(orderby=db.graphs.name):
if not row.field_horizontal:
continue
leaf = PanelWithUrlSelector(virtdb.graph_selector,
baseUrl=URL('report', 'graph'),
baseParams={'id_metrics': row.id})
baseParams={'id_graphs': row.id})
graphNode.add_child(row.metric, leaf)
graphNode.add_child(row.name, leaf)
#-------------------------------------------------------------------------------
#
......
......@@ -703,7 +703,7 @@ class StoreForMetric2DView(StoreFactory):
tmp_di[value_v] = dict(group=value_v)
tmp_di[value_v].update(tpl_row_h)
tmp_di[value_v][value_h] = di[report.metric]
tmp_di[value_v][value_h] = di[metric.metric]
# from the intermediate dictionary
# build the tmp_di block of the store
......@@ -734,7 +734,7 @@ class StoreForYear2DView(StoreFactory):
self.values_h = [row[fieldname] for row in rows]
self._get_fields()
self._get_data(report, metric.field_horizontal, report.metric)
self._get_data(report, metric.field_horizontal, metric.metric)
def _get_fields(self):
......
static/docs/database.png

86.7 KB | W: | H:

static/docs/database.png

91 KB | W: | H:

static/docs/database.png
static/docs/database.png
static/docs/database.png
static/docs/database.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -22,4 +22,4 @@
<type label="Upload" length="0" sql="upload" quote="'"/>
<type label="Password" length="0" sql="password" quote="'"/>
</group>
</datatypes><table x="303" y="21" name="people"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="first_name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="last_name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="initials" null="0" autoincrement="0"><datatype>string</datatype></row><row name="birth_date" null="1" autoincrement="0"><datatype>date</datatype></row><row name="note" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="302" y="174" name="teams"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="team" null="0" autoincrement="0"><datatype>string</datatype></row><row name="domain" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="303" y="285" name="projects"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="project" null="0" autoincrement="0"><datatype>string</datatype></row><row name="agencies" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="618" y="19" name="people_categories"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="code" null="0" autoincrement="0"><datatype>string</datatype></row><row name="category" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="452" y="71" name="history"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="id_people" null="0" autoincrement="0"><datatype>integer</datatype><relation table="people" row="id" /></row><row name="id_teams" null="0" autoincrement="0"><datatype>integer</datatype><relation table="teams" row="id" /></row><row name="id_projects" null="0" autoincrement="0"><datatype>integer</datatype><relation table="projects" row="id" /></row><row name="id_people_categories" null="0" autoincrement="0"><datatype>integer</datatype><relation table="people_categories" row="id" /></row><row name="id_fundings" null="0" autoincrement="0"><datatype>integer</datatype><relation table="fundings" row="id" /></row><row name="id_events" null="0" autoincrement="0"><datatype>integer</datatype><relation table="events" row="id" /></row><row name="start_date" null="0" autoincrement="0"><datatype>date</datatype></row><row name="end_date" null="1" autoincrement="0"><datatype>date</datatype></row><row name="percentage" null="1" autoincrement="0"><datatype>integer</datatype></row><row name="note" null="0" autoincrement="0"><datatype>text</datatype></row><row name="data" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="633" y="149" name="fundings"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="agency" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="638" y="266" name="events"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="event" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definitiion" null="1" autoincrement="0"><datatype>text</datatype></row><row name="data" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="818" y="192" name="lists"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="list" null="0" autoincrement="0"><datatype>string</datatype></row><row name="title" null="1" autoincrement="0"><datatype>string</datatype></row><row name="conditions" null="1" autoincrement="0"><datatype>text</datatype></row><row name="group_field" null="1" autoincrement="0"><datatype>string</datatype></row><row name="sorters" null="1" autoincrement="0"><datatype>integer</datatype></row><row name="columns" null="0" autoincrement="0"><datatype>text</datatype></row><row name="features" null="1" autoincrement="0"><datatype>text</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="920" y="190" name="metrics"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="metric" null="0" autoincrement="0"><datatype>string</datatype></row><row name="title" null="1" autoincrement="0"><datatype>string</datatype></row><row name="conditions" null="1" autoincrement="0"><datatype>text</datatype></row><row name="field_vertical" null="0" autoincrement="0"><datatype>string</datatype></row><row name="field_horizontal" null="1" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table></sql>
\ No newline at end of file
</datatypes><table x="303" y="21" name="people"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="first_name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="last_name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="initials" null="0" autoincrement="0"><datatype>string</datatype></row><row name="birth_date" null="1" autoincrement="0"><datatype>date</datatype></row><row name="note" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="302" y="174" name="teams"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="team" null="0" autoincrement="0"><datatype>string</datatype></row><row name="domain" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="303" y="285" name="projects"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="project" null="0" autoincrement="0"><datatype>string</datatype></row><row name="agencies" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="618" y="19" name="people_categories"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="code" null="0" autoincrement="0"><datatype>string</datatype></row><row name="category" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="452" y="71" name="history"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="id_people" null="0" autoincrement="0"><datatype>integer</datatype><relation table="people" row="id" /></row><row name="id_teams" null="0" autoincrement="0"><datatype>integer</datatype><relation table="teams" row="id" /></row><row name="id_projects" null="0" autoincrement="0"><datatype>integer</datatype><relation table="projects" row="id" /></row><row name="id_people_categories" null="0" autoincrement="0"><datatype>integer</datatype><relation table="people_categories" row="id" /></row><row name="id_fundings" null="0" autoincrement="0"><datatype>integer</datatype><relation table="fundings" row="id" /></row><row name="id_events" null="0" autoincrement="0"><datatype>integer</datatype><relation table="events" row="id" /></row><row name="start_date" null="0" autoincrement="0"><datatype>date</datatype></row><row name="end_date" null="1" autoincrement="0"><datatype>date</datatype></row><row name="percentage" null="1" autoincrement="0"><datatype>integer</datatype></row><row name="note" null="0" autoincrement="0"><datatype>text</datatype></row><row name="data" null="1" autoincrement="0"><datatype>string</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="633" y="149" name="fundings"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="agency" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="638" y="266" name="events"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="event" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definitiion" null="1" autoincrement="0"><datatype>text</datatype></row><row name="data" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="807" y="23" name="lists"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="title" null="1" autoincrement="0"><datatype>string</datatype></row><row name="conditions" null="1" autoincrement="0"><datatype>text</datatype></row><row name="group_field" null="1" autoincrement="0"><datatype>string</datatype></row><row name="sorters" null="1" autoincrement="0"><datatype>integer</datatype></row><row name="columns" null="0" autoincrement="0"><datatype>text</datatype></row><row name="features" null="1" autoincrement="0"><datatype>text</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="903" y="22" name="metrics"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="title" null="1" autoincrement="0"><datatype>string</datatype></row><row name="conditions" null="1" autoincrement="0"><datatype>text</datatype></row><row name="field_vertical" null="1" autoincrement="0"><datatype>string</datatype></row><row name="field_horizontal" null="0" autoincrement="0"><datatype>string</datatype></row><row name="metric" null="0" autoincrement="0"><datatype>string</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table><table x="906" y="211" name="graphs"><row name="id" null="0" autoincrement="1"><datatype>integer</datatype></row><row name="name" null="0" autoincrement="0"><datatype>string</datatype></row><row name="title" null="1" autoincrement="0"><datatype>string</datatype></row><row name="conditions" null="1" autoincrement="0"><datatype>text</datatype></row><row name="field_horizontal" null="0" autoincrement="0"><datatype>string</datatype></row><row name="field_stacked" null="1" autoincrement="0"><datatype>string</datatype></row><row name="metric_vertical" null="0" autoincrement="0"><datatype>text</datatype></row><row name="definition" null="1" autoincrement="0"><datatype>text</datatype></row><key type="PRIMARY" name=""><part>id</part></key></table></sql>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment