X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/timetracker.git/blobdiff_plain/4da474b3fee7606ff8ce81b9e9c9d1fe82a82bdc..51bfb0ed88ef0656437b306486bfc56d4f88fa2b:/mysql.sql?ds=inline

diff --git a/mysql.sql b/mysql.sql
index 5237dfe3..113f5dfb 100644
--- a/mysql.sql
+++ b/mysql.sql
@@ -17,6 +17,7 @@ CREATE TABLE `tt_groups` (
   `parent_id` int(11) default NULL,                      # parent group id
   `org_id` int(11) default NULL,                         # organization id (id of top group)
   `name` varchar(80) default NULL,                       # group name
+  `description` varchar(255) default NULL,               # group description
   `currency` varchar(7) default NULL,                    # currency symbol
   `decimal_mark` char(1) NOT NULL default '.',           # separator in decimals
   `lang` varchar(10) NOT NULL default 'en',              # language
@@ -82,7 +83,7 @@ INSERT INTO `tt_roles` (`group_id`, `name`, `rank`, `rights`) VALUES (0, 'Top ma
 #
 CREATE TABLE `tt_users` (
   `id` int(11) NOT NULL auto_increment,            # user id
-  `login` varchar(50) COLLATE utf8_bin NOT NULL,   # user login
+  `login` varchar(50) COLLATE utf8mb4_bin NOT NULL,# user login
   `password` varchar(50) default NULL,             # password hash
   `name` varchar(100) default NULL,                # user name
   `group_id` int(11) NOT NULL,                     # group id
@@ -90,6 +91,7 @@ CREATE TABLE `tt_users` (
   `role_id` int(11) default NULL,                  # role id
   `client_id` int(11) default NULL,                # client id for "client" user role
   `rate` float(6,2) NOT NULL default '0.00',       # default hourly rate
+  `quota_percent` float(6,2) NOT NULL default '100.00', # percent of time quota
   `email` varchar(100) default NULL,               # user email
   `created` datetime default NULL,                 # creation timestamp
   `created_ip` varchar(45) default NULL,           # creator ip
@@ -115,13 +117,13 @@ INSERT INTO `tt_users` (`login`, `password`, `name`, `group_id`, `role_id`) VALU
 # Structure for table tt_projects.
 #
 CREATE TABLE `tt_projects` (
-  `id` int(11) NOT NULL auto_increment,         # project id
-  `group_id` int(11) NOT NULL,                  # group id
-  `org_id` int(11) default NULL,                # organization id
-  `name` varchar(80) COLLATE utf8_bin NOT NULL, # project name
-  `description` varchar(255) default NULL,      # project description
-  `tasks` text default NULL,                    # comma-separated list of task ids associated with this project
-  `status` tinyint(4) default 1,                # project status
+  `id` int(11) NOT NULL auto_increment,            # project id
+  `group_id` int(11) NOT NULL,                     # group id
+  `org_id` int(11) default NULL,                   # organization id
+  `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # project name
+  `description` varchar(255) default NULL,         # project description
+  `tasks` text default NULL,                       # comma-separated list of task ids associated with this project
+  `status` tinyint(4) default 1,                   # project status
   PRIMARY KEY (`id`)
 );
 
@@ -133,12 +135,12 @@ create unique index project_idx on tt_projects(group_id, name, status);
 # Structure for table tt_tasks.
 #
 CREATE TABLE `tt_tasks` (
-  `id` int(11) NOT NULL auto_increment,         # task id
-  `group_id` int(11) NOT NULL,                  # group id
-  `org_id` int(11) default NULL,                # organization id
-  `name` varchar(80) COLLATE utf8_bin NOT NULL, # task name
-  `description` varchar(255) default NULL,      # task description
-  `status` tinyint(4) default 1,                # task status
+  `id` int(11) NOT NULL auto_increment,            # task id
+  `group_id` int(11) NOT NULL,                     # group id
+  `org_id` int(11) default NULL,                   # organization id
+  `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # task name
+  `description` varchar(255) default NULL,         # task description
+  `status` tinyint(4) default 1,                   # task status
   PRIMARY KEY (`id`)
 );
 
@@ -169,14 +171,15 @@ create unique index bind_idx on tt_user_project_binds(user_id, project_id);
 #
 CREATE TABLE `tt_project_task_binds` (
   `project_id` int(11) NOT NULL,        # project id
-  `task_id` int(11) NOT NULL            # task id
+  `task_id` int(11) NOT NULL,           # task id
   `group_id` int(11) default NULL,      # group id
-  `org_id` int(11) default NULL,        # organization id
+  `org_id` int(11) default NULL         # organization id
 );
 
 # Indexes for tt_project_task_binds.
 create index project_idx on tt_project_task_binds(project_id);
 create index task_idx on tt_project_task_binds(task_id);
+create unique index project_task_idx on tt_project_task_binds(project_id, task_id);
 
 
 #
@@ -194,6 +197,7 @@ CREATE TABLE `tt_log` (
   `client_id` int(11) default NULL,                # client id
   `project_id` int(11) default NULL,               # project id
   `task_id` int(11) default NULL,                  # task id
+  `timesheet_id` int(11) default NULL,             # timesheet id
   `invoice_id` int(11) default NULL,               # invoice id
   `comment` text,                                  # user provided comment for time record
   `billable` tinyint(4) default 0,                 # whether the record is billable or not
@@ -216,19 +220,20 @@ create index client_idx on tt_log(client_id);
 create index invoice_idx on tt_log(invoice_id);
 create index project_idx on tt_log(project_id);
 create index task_idx on tt_log(task_id);
+create index timesheet_idx on tt_log(timesheet_id);
 
 
 #
 # Structure for table tt_invoices. Invoices are issued to clients for billable work.
 #
 CREATE TABLE `tt_invoices` (
-  `id` int(11) NOT NULL auto_increment,         # invoice id
-  `group_id` int(11) NOT NULL,                  # group id
-  `org_id` int(11) default NULL,                # organization id
-  `name` varchar(80) COLLATE utf8_bin NOT NULL, # invoice name
-  `date` date NOT NULL,                         # invoice date
-  `client_id` int(11) NOT NULL,                 # client id
-  `status` tinyint(4) default 1,                # invoice status
+  `id` int(11) NOT NULL auto_increment,            # invoice id
+  `group_id` int(11) NOT NULL,                     # group id
+  `org_id` int(11) default NULL,                   # organization id
+  `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # invoice name
+  `date` date NOT NULL,                            # invoice date
+  `client_id` int(11) NOT NULL,                    # client id
+  `status` tinyint(4) default 1,                   # invoice status
   PRIMARY KEY (`id`)
 );
 
@@ -253,6 +258,8 @@ CREATE TABLE `tt_fav_reports` (
   `id` int(11) NOT NULL auto_increment,                  # favorite report id
   `name` varchar(200) NOT NULL,                          # favorite report name
   `user_id` int(11) NOT NULL,                            # user id favorite report belongs to
+  `group_id` int(11) default NULL,                       # group id
+  `org_id` int(11) default NULL,                         # organization id
   `report_spec` text default NULL,                       # future replacement field for all report settings
   `client_id` int(11) default NULL,                      # client id (if selected)
   `cf_1_option_id` int(11) default NULL,                 # custom field 1 option id (if selected)
@@ -293,6 +300,7 @@ CREATE TABLE `tt_fav_reports` (
 CREATE TABLE `tt_cron` (
   `id` int(11) NOT NULL auto_increment,         # entry id
   `group_id` int(11) NOT NULL,                  # group id
+  `org_id` int(11) default NULL,                # organization id
   `cron_spec` varchar(255) NOT NULL,            # cron specification, "0 1 * * *" for "daily at 01:00"
   `last` int(11) default NULL,                  # UNIX timestamp of when job was last run
   `next` int(11) default NULL,                  # UNIX timestamp of when to run next job
@@ -310,14 +318,14 @@ CREATE TABLE `tt_cron` (
 # Structure for table tt_clients. A client is an entity for whom work is performed and who may be invoiced.
 #
 CREATE TABLE `tt_clients` (
-  `id` int(11) NOT NULL AUTO_INCREMENT,         # client id
-  `group_id` int(11) NOT NULL,                  # group id
-  `org_id` int(11) default NULL,                # organization id
-  `name` varchar(80) COLLATE utf8_bin NOT NULL, # client name
-  `address` varchar(255) default NULL,          # client address
-  `tax` float(6,2) default '0.00',              # applicable tax for this client
-  `projects` text default NULL,                 # comma-separated list of project ids assigned to this client
-  `status` tinyint(4) default 1,                # client status
+  `id` int(11) NOT NULL AUTO_INCREMENT,            # client id
+  `group_id` int(11) NOT NULL,                     # group id
+  `org_id` int(11) default NULL,                   # organization id
+  `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # client name
+  `address` varchar(255) default NULL,             # client address
+  `tax` float(6,2) default '0.00',                 # applicable tax for this client
+  `projects` text default NULL,                    # comma-separated list of project ids assigned to this client
+  `status` tinyint(4) default 1,                   # client status
   PRIMARY KEY (`id`)
 );
 
@@ -329,13 +337,16 @@ create unique index client_name_idx on tt_clients(group_id, name, status);
 # Structure for table tt_client_project_binds. This table maps clients to assigned projects.
 #
 CREATE TABLE `tt_client_project_binds` (
-  `client_id` int(11) NOT NULL, # client id
-  `project_id` int(11) NOT NULL # project id
+  `client_id` int(11) NOT NULL,                    # client id
+  `project_id` int(11) NOT NULL,                   # project id
+  `group_id` int(11) default NULL,                 # group id
+  `org_id` int(11) default NULL                    # organization id
 );
 
 # Indexes for tt_client_project_binds.
 create index client_idx on tt_client_project_binds(client_id);
 create index project_idx on tt_client_project_binds(project_id);
+create unique index client_project_idx on tt_client_project_binds(client_id, project_id);
 
 
 #
@@ -344,6 +355,8 @@ create index project_idx on tt_client_project_binds(project_id);
 #
 CREATE TABLE `tt_config` (
   `user_id` int(11) NOT NULL,            # user id
+  `group_id` int(11) default NULL,       # group id
+  `org_id` int(11) default NULL,         # organization id
   `param_name` varchar(32) NOT NULL,     # parameter name
   `param_value` varchar(80) default NULL # parameter value
 );
@@ -360,6 +373,7 @@ create unique index param_idx on tt_config(user_id, param_name);
 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
   `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
@@ -373,8 +387,11 @@ CREATE TABLE `tt_custom_fields` (
 #
 CREATE TABLE `tt_custom_field_options` (
   `id` int(11) NOT NULL auto_increment,    # option id
+  `group_id` int(11) default NULL,         # group id
+  `org_id` int(11) default NULL,           # organization id
   `field_id` int(11) NOT NULL,             # custom field id
   `value` varchar(32) NOT NULL default '', # option value
+  `status` tinyint(4) default 1,           # option status
   PRIMARY KEY  (`id`)
 );
 
@@ -384,7 +401,9 @@ CREATE TABLE `tt_custom_field_options` (
 # This table supplements tt_log and contains custom field values for records.
 #
 CREATE TABLE `tt_custom_field_log` (
-  `id` bigint NOT NULL auto_increment, # cutom field log id
+  `id` bigint NOT NULL auto_increment, # custom field log id
+  `group_id` int(11) default NULL,     # group id
+  `org_id` int(11) default NULL,       # organization id
   `log_id` bigint NOT NULL,            # id of a record in tt_log this record corresponds to
   `field_id` int(11) NOT NULL,         # custom field id
   `option_id` int(11) default NULL,    # Option id. Used for dropdown custom fields.
@@ -405,8 +424,10 @@ CREATE TABLE `tt_expense_items` (
   `date` date NOT NULL,                   # date the record is for
   `user_id` int(11) NOT NULL,             # user id the expense item is reported by
   `group_id` int(11) default NULL,        # group id
+  `org_id` int(11) default NULL,          # organization id
   `client_id` int(11) default NULL,       # client id
   `project_id` int(11) default NULL,      # project id
+  `timesheet_id` int(11) default NULL,    # timesheet id
   `name` text NOT NULL,                   # expense item name (what is an expense for)
   `cost` decimal(10,2) default '0.00',    # item cost (including taxes, etc.)
   `invoice_id` int(11) default NULL,      # invoice id
@@ -427,6 +448,7 @@ create index user_idx on tt_expense_items(user_id);
 create index group_idx on tt_expense_items(group_id);
 create index client_idx on tt_expense_items(client_id);
 create index project_idx on tt_expense_items(project_id);
+create index timesheet_idx on tt_expense_items(timesheet_id);
 create index invoice_idx on tt_expense_items(invoice_id);
 
 
@@ -437,6 +459,7 @@ create index invoice_idx on tt_expense_items(invoice_id);
 CREATE TABLE `tt_predefined_expenses` (
   `id` int(11) NOT NULL auto_increment, # predefined expense id
   `group_id` int(11) NOT NULL,          # group id
+  `org_id` int(11) default NULL,        # organization id
   `name` varchar(255) NOT NULL,         # predefined expense name, such as mileage
   `cost` decimal(10,2) default '0.00',  # cost for one unit
   PRIMARY KEY  (`id`)
@@ -449,6 +472,7 @@ CREATE TABLE `tt_predefined_expenses` (
 #
 CREATE TABLE `tt_monthly_quotas` (
   `group_id` int(11) NOT NULL,            # group id
+  `org_id` int(11) default NULL,          # organization id
   `year` smallint(5) UNSIGNED NOT NULL,   # quota year
   `month` tinyint(3) UNSIGNED NOT NULL,   # quota month
   `minutes` int(11) default NULL,         # quota in minutes in specified month and year
@@ -456,6 +480,31 @@ CREATE TABLE `tt_monthly_quotas` (
 );
 
 
+#
+# Structure for table tt_timesheets. This table keeps timesheet related information.
+#
+CREATE TABLE `tt_timesheets` (
+  `id` int(11) NOT NULL auto_increment,            # timesheet id
+  `user_id` int(11) NOT NULL,                      # user id
+  `group_id` int(11) default NULL,                 # group id
+  `org_id` int(11) default NULL,                   # organization id
+  `client_id` int(11) default NULL,                # client id
+  `name` varchar(80) COLLATE utf8mb4_bin NOT NULL, # timesheet name
+  `submit_status` tinyint(4) default NULL,         # submit status
+  `submitter_comment` text,                        # submitter comment
+  `approval_status` tinyint(4) default NULL,       # approval status
+  `manager_comment` text,                          # manager comment
+  `created` datetime default NULL,                 # creation timestamp
+  `created_ip` varchar(45) default NULL,           # creator ip
+  `created_by` int(11) default NULL,               # creator user_id
+  `modified` datetime default NULL,                # modification timestamp
+  `modified_ip` varchar(45) default NULL,          # modifier ip
+  `modified_by` int(11) default NULL,              # modifier user_id
+  `status` tinyint(4) default 1,                   # timesheet status
+  PRIMARY KEY (`id`)
+);
+
+
 #
 # Structure for table tt_site_config. This table stores configuration data
 # for Time Tracker site as a whole.
@@ -469,4 +518,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.12', now()); # TODO: change when structure changes.
+INSERT INTO `tt_site_config` (`param_name`, `param_value`, `created`) VALUES ('version_db', '1.18.37', now()); # TODO: change when structure changes.
