X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=mysql.sql;h=b8d7e134ccbb4381aad1433b91f1e3f964a470c1;hb=HEAD;hp=8c38425c2c3409acd4358299f28335cd26bbea46;hpb=265754c2f6e9d016e7f58591f08fe4e97f96b05d;p=timetracker.git diff --git a/mysql.sql b/mysql.sql index 8c38425c..b8d7e134 100644 --- a/mysql.sql +++ b/mysql.sql @@ -16,6 +16,7 @@ CREATE TABLE `tt_groups` ( `id` int(11) NOT NULL auto_increment, # group id `parent_id` int(11) default NULL, # parent group id `org_id` int(11) default NULL, # organization id (id of top group) + `group_key` varchar(32) default NULL, # group key `name` varchar(80) default NULL, # group name `description` varchar(255) default NULL, # group description `currency` varchar(7) default NULL, # currency symbol @@ -34,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 @@ -75,7 +77,7 @@ create unique index role_idx on tt_roles(group_id, rank, status); # Insert site-wide roles - site administrator and top manager. INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Site administrator', 1024, 'administer_site'); -INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Top manager', 512, 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_projects,view_own_tasks,manage_own_settings,view_users,view_client_reports,view_client_invoices,track_time,track_expenses,view_reports,approve_reports,approve_timesheets,view_charts,view_own_clients,override_punch_mode,override_own_punch_mode,override_date_lock,override_own_date_lock,swap_roles,manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,manage_basic_settings,view_all_reports,manage_features,manage_advanced_settings,manage_roles,export_data,approve_all_reports,approve_own_timesheets,manage_subgroups,view_client_unapproved,delete_group'); +INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Top manager', 512, 'track_own_time,track_own_expenses,view_own_reports,view_own_charts,view_own_projects,view_own_tasks,manage_own_settings,view_users,view_client_reports,view_client_invoices,track_time,track_expenses,view_reports,approve_reports,approve_timesheets,view_charts,view_own_clients,override_punch_mode,override_own_punch_mode,override_date_lock,override_own_date_lock,swap_roles,update_work,manage_own_account,manage_users,manage_projects,manage_tasks,manage_custom_fields,manage_clients,manage_invoices,override_allow_ip,manage_basic_settings,view_all_reports,manage_work,bid_on_work,manage_features,manage_advanced_settings,manage_roles,export_data,approve_all_reports,approve_own_timesheets,manage_subgroups,view_client_unapproved,delete_group'); # @@ -379,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 @@ -420,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. @@ -521,6 +554,7 @@ CREATE TABLE `tt_templates` ( `group_id` int(11) default NULL, # group id `org_id` int(11) default NULL, # organization id `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # template name + `description` varchar(255) default NULL, # template description `content` text, # template content `created` datetime default NULL, # creation timestamp `created_ip` varchar(45) default NULL, # creator ip @@ -533,6 +567,67 @@ CREATE TABLE `tt_templates` ( ); +# +# Structure for table tt_files. +# This table keeps file attachment information. +# +CREATE TABLE `tt_files` ( + `id` int(10) unsigned NOT NULL auto_increment, # file id + `group_id` int(10) unsigned, # group id + `org_id` int(10) unsigned, # organization id + `remote_id` bigint(20) unsigned, # file id in storage facility + `file_key` varchar(32), # file key + `entity_type` varchar(32), # type of entity file is associated with (project, task, etc.) + `entity_id` int(10) unsigned, # entity id + `file_name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # file name + `description` varchar(255) default NULL, # file description + `created` datetime default NULL, # creation timestamp + `created_ip` varchar(45) default NULL, # creator ip + `created_by` int(10) unsigned, # creator user_id + `modified` datetime default NULL, # modification timestamp + `modified_ip` varchar(45) default NULL, # modifier ip + `modified_by` int(10) unsigned, # modifier user_id + `status` tinyint(1) default 1, # file status + PRIMARY KEY (`id`) +); + + +# +# 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. @@ -546,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.18.54', 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.