X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=mysql.sql;h=b8d7e134ccbb4381aad1433b91f1e3f964a470c1;hb=HEAD;hp=0cd7326292297c36c4e074db5316a6df0ca909c7;hpb=c75f863a12ab28d8f828c0cc367b581b396ee951;p=timetracker.git diff --git a/mysql.sql b/mysql.sql index 0cd73262..b8d7e134 100644 --- a/mysql.sql +++ b/mysql.sql @@ -35,6 +35,7 @@ CREATE TABLE `tt_groups` ( `plugins` varchar(255) default NULL, # a list of enabled plugins for group `lock_spec` varchar(255) default NULL, # Cron specification for record locking, # for example: "0 10 * * 1" for "weekly on Mon at 10:00". + `holidays` text default NULL, # holidays specification `workday_minutes` smallint(4) default 480, # number of work minutes in a regular working day `custom_logo` tinyint(4) default 0, # whether to use a custom logo or not `config` text default NULL, # miscellaneous group configuration settings @@ -380,6 +381,7 @@ CREATE TABLE `tt_custom_fields` ( `id` int(11) NOT NULL auto_increment, # custom field id `group_id` int(11) NOT NULL, # group id `org_id` int(11) default NULL, # organization id + `entity_type` tinyint(4) default 1, # type of entity custom field is associated with (time, user, project, task, etc.) `type` tinyint(4) NOT NULL default 0, # custom field type (text or dropdown) `label` varchar(32) NOT NULL default '', # custom field label `required` tinyint(4) default 0, # whether this custom field is mandatory for time records @@ -421,6 +423,36 @@ CREATE TABLE `tt_custom_field_log` ( create index log_idx on tt_custom_field_log(log_id); +# +# Structure for table tt_entity_custom_fields. +# This table stores custom field values for entities such as users and projects +# except for "time" entity (and possibly "expense" in future). +# "time" custom fields are kept separately in tt_custom_field_log +# because tt_log (and tt_custom_field_log) can grow very large. +# +CREATE TABLE `tt_entity_custom_fields` ( + `id` int(10) unsigned NOT NULL auto_increment, # record id in this table + `group_id` int(10) unsigned NOT NULL, # group id + `org_id` int(10) unsigned NOT NULL, # organization id + `entity_type` tinyint(4) NOT NULL, # entity type + `entity_id` int(10) unsigned NOT NULL, # entity id this record corresponds to + `field_id` int(10) unsigned NOT NULL, # custom field id + `option_id` int(10) unsigned default NULL, # Option id. Used for dropdown custom fields. + `value` varchar(255) default NULL, # Text value. Used for text custom fields. + `created` datetime default NULL, # creation timestamp + `created_ip` varchar(45) default NULL, # creator ip + `created_by` int(10) unsigned default NULL, # creator user_id + `modified` datetime default NULL, # modification timestamp + `modified_ip` varchar(45) default NULL, # modifier ip + `modified_by` int(10) unsigned default NULL, # modifier user_id + `status` tinyint(4) default 1, # record status + PRIMARY KEY (`id`) +); + +# Create an index that guarantees unique custom fields per entity. +create unique index entity_idx on tt_entity_custom_fields(entity_type, entity_id, field_id); + + # # Structure for table tt_expense_items. # This table lists expense items. @@ -560,6 +592,42 @@ CREATE TABLE `tt_files` ( ); +# +# Structure for table tt_work_currencies. +# This table keeps currencies supported by remote work plugin. +# +CREATE TABLE `tt_work_currencies` ( + `id` int(10) unsigned NOT NULL, # currency id + `name` varchar(10) NOT NULL, # currency name (USD, CAD, etc.) + PRIMARY KEY (`id`) +); + +# Create an index that guarantees unique work currencies. +create unique index currency_idx on tt_work_currencies(`name`); + +INSERT INTO `tt_work_currencies` (`id`, `name`) VALUES ('1', 'USD'), ('2', 'CAD'), ('3', 'AUD'), ('4', 'EUR'), ('5', 'NZD'); + + +# +# Structure for table tt_work_categories. +# This table keeps work categories supported by remote work plugin. +# +CREATE TABLE `tt_work_categories` ( + `id` int(10) unsigned NOT NULL, # Category id. + `parents` text default NULL, # Comma-separated list of parent ids associated with this category. + `name` varchar(64) NOT NULL, # English category name. + `name_localized` text default NULL, # Comma-separated list of localized category names in other languages. + # Example: es:Codificación,ru:Кодирование. + PRIMARY KEY (`id`) +); + +# Insert some default categories. Table content to be updated at run time, though. +INSERT INTO `tt_work_categories` (`id`, `parents`, `name`, `name_localized`) VALUES ('1', NULL, 'Coding', 'es:Codificación,ru:Кодирование'); +INSERT INTO `tt_work_categories` (`id`, `parents`, `name`, `name_localized`) VALUES ('2', NULL, 'Other', 'es:Otra,ru:Другое'); +INSERT INTO `tt_work_categories` (`id`, `parents`, `name`, `name_localized`) VALUES ('3', '1', 'PHP', NULL); +INSERT INTO `tt_work_categories` (`id`, `parents`, `name`, `name_localized`) VALUES ('4', '1', 'C/C++', NULL); + + # # Structure for table tt_site_config. This table stores configuration data # for Time Tracker site as a whole. @@ -573,4 +641,4 @@ CREATE TABLE `tt_site_config` ( PRIMARY KEY (`param_name`) ); -INSERT INTO `tt_site_config` (`param_name`, `param_value`, `created`) VALUES ('version_db', '1.19.0', now()); # TODO: change when structure changes. +INSERT INTO `tt_site_config` (`param_name`, `param_value`, `created`) VALUES ('version_db', '1.19.7', now()); # TODO: change when structure changes.