Some more work in progress on timesheet reporting.
authorNik Okuntseff <support@anuko.com>
Sat, 23 Feb 2019 18:45:44 +0000 (18:45 +0000)
committerNik Okuntseff <support@anuko.com>
Sat, 23 Feb 2019 18:45:44 +0000 (18:45 +0000)
33 files changed:
WEB-INF/lib/ttReportHelper.class.php
WEB-INF/resources/ca.lang.php
WEB-INF/resources/cs.lang.php
WEB-INF/resources/da.lang.php
WEB-INF/resources/de.lang.php
WEB-INF/resources/en.lang.php
WEB-INF/resources/es.lang.php
WEB-INF/resources/et.lang.php
WEB-INF/resources/fa.lang.php
WEB-INF/resources/fi.lang.php
WEB-INF/resources/fr.lang.php
WEB-INF/resources/gr.lang.php
WEB-INF/resources/he.lang.php
WEB-INF/resources/hu.lang.php
WEB-INF/resources/it.lang.php
WEB-INF/resources/ja.lang.php
WEB-INF/resources/ko.lang.php
WEB-INF/resources/nl.lang.php
WEB-INF/resources/no.lang.php
WEB-INF/resources/pl.lang.php
WEB-INF/resources/pt-br.lang.php
WEB-INF/resources/pt.lang.php
WEB-INF/resources/ro.lang.php
WEB-INF/resources/ru.lang.php
WEB-INF/resources/sk.lang.php
WEB-INF/resources/sl.lang.php
WEB-INF/resources/sr.lang.php
WEB-INF/resources/sv.lang.php
WEB-INF/resources/tr.lang.php
WEB-INF/resources/zh-cn.lang.php
WEB-INF/resources/zh-tw.lang.php
WEB-INF/templates/footer.tpl
reports.php

index c96f0f4..a14313b 100644 (file)
@@ -33,6 +33,14 @@ import('ttTimeHelper');
 
 require_once(dirname(__FILE__).'/../../plugins/CustomFields.class.php');
 
+// Definitions of types for timesheet dropdown.
+define('TIMESHEET_ALL', 0); // Include all records.
+define('TIMESHEET_NOT_ASSIGNED', 1); // Include records not assigned to timesheets.
+define('TIMESHEET_ASSIGNED', 2); // Include records assigned to timesheets.
+define('TIMESHEET_PENDING', 3); // Include records in submitted timesheets that are pending manager approval.
+define('TIMESHEET_APPROVED', 4); // Include records in approved timesheets.
+define('TIMESHEET_NOT_APPROVED', 5); // Include records in disapproved timesheets.
+
 // Class ttReportHelper is used for help with reports.
 class ttReportHelper {
 
@@ -62,8 +70,8 @@ class ttReportHelper {
     if ($options['billable']=='2') $dropdown_parts .= ' and l.billable = 0';
     if ($options['invoice']=='1') $dropdown_parts .= ' and l.invoice_id is not null';
     if ($options['invoice']=='2') $dropdown_parts .= ' and l.invoice_id is null';
-    if ($options['timesheet']=='1') $dropdown_parts .= ' and l.timesheet_id is not null';
-    if ($options['timesheet']=='2') $dropdown_parts .= ' and l.timesheet_id is null';
+    if ($options['timesheet']==TIMESHEET_NOT_ASSIGNED) $dropdown_parts .= ' and l.timesheet_id is null';
+    if ($options['timesheet']==TIMESHEET_ASSIGNED) $dropdown_parts .= ' and l.timesheet_id is not null';
     if ($options['paid_status']=='1') $dropdown_parts .= ' and l.paid = 1';
     if ($options['paid_status']=='2') $dropdown_parts .= ' and l.paid = 0';
 
@@ -112,8 +120,8 @@ class ttReportHelper {
     if ($options['project_id']) $dropdown_parts .= ' and ei.project_id = '.$options['project_id'];
     if ($options['invoice']=='1') $dropdown_parts .= ' and ei.invoice_id is not null';
     if ($options['invoice']=='2') $dropdown_parts .= ' and ei.invoice_id is null';
-    if ($options['timesheet']=='1') $dropdown_parts .= ' and ei.timesheet_id is not null';
-    if ($options['timesheet']=='2') $dropdown_parts .= ' and ei.timesheet_id is null';
+    if ($options['timesheet']==TIMESHEET_NOT_ASSIGNED) $dropdown_parts .= ' and ei.timesheet_id is null';
+    if ($options['timesheet']==TIMESHEET_ASSIGNED) $dropdown_parts .= ' and ei.timesheet_id is not null';
     if ($options['paid_status']=='1') $dropdown_parts .= ' and ei.paid = 1';
     if ($options['paid_status']=='2') $dropdown_parts .= ' and ei.paid = 0';
 
@@ -264,13 +272,25 @@ class ttReportHelper {
     }
     if ($includeCost && MODE_TIME != $trackingMode)
       $left_joins .= " left join tt_user_project_binds upb on (l.user_id = upb.user_id and l.project_id = upb.project_id)";
-    if ($options['show_timesheet'])
-      $left_joins .= " left join tt_timesheets ts on (l.timesheet_id = ts.id)";
+
+    // Prepare sql query part for inner joins.
+    $inner_joins = null;
+    if ($user->isPluginEnabled('ts')) {
+      $timesheet_option = $options['timesheet'];
+      if ($timesheet_option == TIMESHEET_PENDING)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.submit_status = 1 and ts.approval_status is null)";
+      else if ($timesheet_option == TIMESHEET_APPROVED)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.approval_status = 1)";
+      else if ($timesheet_option == TIMESHEET_NOT_APPROVED)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.approval_status = 0)";
+      else if ($options['show_timesheet'])
+        $inner_joins .= " left join tt_timesheets ts on (l.timesheet_id = ts.id)"; // Left join for timesheet nme.
+    }
 
     $where = ttReportHelper::getWhere($options);
 
     // Construct sql query for tt_log items.
-    $sql = "select ".join(', ', $fields)." from tt_log l $left_joins $where";
+    $sql = "select ".join(', ', $fields)." from tt_log l $left_joins $inner_joins $where";
     // If we don't have expense items (such as when the Expenses plugin is disabled), the above is all sql we need,
     // with an exception of sorting part, that is added in the end.
 
@@ -335,13 +355,25 @@ class ttReportHelper {
         $left_joins .= " left join tt_projects p on (p.id = ei.project_id)";
       if (($canViewReports || $isClient) && $options['show_invoice'])
         $left_joins .= " left join tt_invoices i on (i.id = ei.invoice_id and i.status = 1)";
-      if ($options['show_timesheet'])
-        $left_joins .= " left join tt_timesheets ts on (ei.timesheet_id = ts.id)";
+
+      // Prepare sql query part for inner joins.
+      $inner_joins = null;
+      if ($user->isPluginEnabled('ts')) {
+        $timesheet_option = $options['timesheet'];
+        if ($timesheet_option == TIMESHEET_PENDING)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.submit_status = 1 and ts.approval_status is null)";
+        else if ($timesheet_option == TIMESHEET_APPROVED)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.approval_status = 1)";
+        else if ($timesheet_option == TIMESHEET_NOT_APPROVED)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.approval_status = 0)";
+        else if ($options['show_timesheet'])
+          $inner_joins .= " left join tt_timesheets ts on (ei.timesheet_id = ts.id)"; // Left join for timesheet name.
+      }
 
       $where = ttReportHelper::getExpenseWhere($options);
 
       // Construct sql query for expense items.
-      $sql_for_expense_items = "select ".join(', ', $fields)." from tt_expense_items ei $left_joins $where";
+      $sql_for_expense_items = "select ".join(', ', $fields)." from tt_expense_items ei $left_joins $inner_joins $where";
 
       // Construct a union.
       $sql = "($sql) union all ($sql_for_expense_items)";
@@ -519,15 +551,37 @@ class ttReportHelper {
         $left_joins = "left join tt_user_project_binds upb on (l.user_id = upb.user_id and l.project_id = upb.project_id)";
       }
     }
+    // Prepare sql query part for inner joins.
+    $inner_joins = null;
+    if ($user->isPluginEnabled('ts') && $options['timesheet']) {
+      $timesheet_option = $options['timesheet'];
+      if ($timesheet_option == TIMESHEET_PENDING)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.submit_status = 1 and ts.approval_status is null)";
+      else if ($timesheet_option == TIMESHEET_APPROVED)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.approval_status = 1)";
+      else if ($timesheet_option == TIMESHEET_NOT_APPROVED)
+        $inner_joins .= " inner join tt_timesheets ts on (l.timesheet_id = ts.id and ts.approval_status = 0)";
+    }
     // Prepare a query for time items.
-    $sql = "select $time_part $units_part $cost_part from tt_log l $left_joins $where";
+    $sql = "select $time_part $units_part $cost_part from tt_log l $left_joins $inner_joins $where";
 
     // If we have expenses, query becomes a bit more complex.
     if ($options['show_cost'] && $user->isPluginEnabled('ex')) {
+      // Prepare sql query part for inner joins.
+      $inner_joins = null;
+      if ($user->isPluginEnabled('ts') && $options['timesheet']) {
+        $timesheet_option = $options['timesheet'];
+        if ($timesheet_option == TIMESHEET_PENDING)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.submit_status = 1 and ts.approval_status is null)";
+        else if ($timesheet_option == TIMESHEET_APPROVED)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.approval_status = 1)";
+        else if ($timesheet_option == TIMESHEET_NOT_APPROVED)
+          $inner_joins .= " inner join tt_timesheets ts on (ei.timesheet_id = ts.id and ts.approval_status = 0)";
+      }
       $where = ttReportHelper::getExpenseWhere($options);
       $sql_for_expenses = "select null as time";
       if ($options['show_work_units']) $sql_for_expenses .= ", null as units";
-      $sql_for_expenses .= ", sum(cost) as cost, sum(cost) as expenses from tt_expense_items ei $where";
+      $sql_for_expenses .= ", sum(cost) as cost, sum(cost) as expenses from tt_expense_items ei $inner_joins $where";
 
       // Create a combined query.
       $combined = "select sum(time) as time";
index e303805..8b3d5d6 100644 (file)
@@ -441,6 +441,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Seleccionar període de temps',
index e85a739..17ea3e2 100644 (file)
@@ -451,6 +451,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Výberte období',
index 3946cd5..2a786b1 100644 (file)
@@ -417,6 +417,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Vælg en periode',
index 3a10a70..5e72116 100644 (file)
@@ -396,6 +396,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Zeitraum auswählen',
index 4e6a8ef..1fdd611 100644 (file)
@@ -234,7 +234,7 @@ $i18n_key_words = array(
 'label.quota' => 'Quota',
 'label.timesheet' => 'Timesheet',
 'label.submitted' => 'Submitted',
-'label.form' => 'Approved',
+'label.approved' => 'Approved',
 
 // Form titles.
 'title.error' => 'Error',
@@ -392,6 +392,7 @@ $i18n_key_words = array(
 'form.reports.include_not_invoiced' => 'not invoiced',
 'form.reports.include_assigned' => 'assigned',
 'form.reports.include_not_assigned' => 'not assigned',
+'form.reports.include_pending' => 'pending',
 'form.reports.include_approved' => 'approved',
 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Select time period',
index 87aff87..559e328 100644 (file)
@@ -454,6 +454,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Seleccionar período de tiempo',
index cf2151a..71a1288 100644 (file)
@@ -421,6 +421,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'arveldamata', // TODO: fix as per the above comment, if needed.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 
index 1f4fd0e..b5bed52 100644 (file)
@@ -437,6 +437,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'انتخاب بازه زمانی',
index 442ce15..c10ca5e 100644 (file)
@@ -422,6 +422,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Valitse ajanjakso',
index 37d0a0f..b937b77 100644 (file)
@@ -414,6 +414,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Sélectionner la période de temps',
index ecaea1c..c5e8d5e 100644 (file)
@@ -405,6 +405,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Επιλογή χρονικής περιόδου',
index 4c24586..b2a7dfd 100644 (file)
@@ -443,6 +443,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'בחר תקופת זמן',
index 50ba1b3..f6bceae 100644 (file)
@@ -443,6 +443,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Jelölj meg egy időszakot',
index 3a47774..fc8a081 100644 (file)
@@ -418,6 +418,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Seleziona il periodo di tempo',
index 55b8ee0..7f83a76 100644 (file)
@@ -449,6 +449,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => '時間期間の選択',
index d50f817..aa40a09 100644 (file)
@@ -447,6 +447,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => '시간 기간을 선택',
index 8f49540..ee170ce 100644 (file)
@@ -392,6 +392,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Kies periode',
index 95bf5e2..e43dad9 100644 (file)
@@ -447,6 +447,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Velg tidsperiode',
index 2b63f06..9b243ee 100644 (file)
@@ -425,6 +425,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Wybierz okres',
index 964c55d..71fcef6 100644 (file)
@@ -420,6 +420,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Selecione o período de tempo',
index c51af29..0723acf 100644 (file)
@@ -427,6 +427,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Selecione o período de tempo',
index 2e1d2f2..b94bcd9 100644 (file)
@@ -450,6 +450,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Alege perioada',
index 77c9065..19bedf9 100644 (file)
@@ -384,6 +384,7 @@ $i18n_key_words = array(
 'form.reports.include_not_invoiced' => 'не внесённые в счёт',
 'form.reports.include_assigned' => 'присвоена',
 'form.reports.include_not_assigned' => 'не присвоена',
+'form.reports.include_pending' => 'в ожидании',
 'form.reports.include_approved' => 'одобрена',
 'form.reports.include_not_approved' => 'не одобрена',
 'form.reports.select_period' => 'Выберите интервал времени',
index bd62020..d3525c0 100644 (file)
@@ -433,6 +433,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Vyberte časový rozsah',
index 66992c4..fedc796 100644 (file)
@@ -424,6 +424,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 // 'form.reports.select_period' => 'Select time period',
index 73966ca..2291007 100644 (file)
@@ -423,6 +423,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Odaberi vremenski raspon',
index 410a64f..480650e 100644 (file)
@@ -421,6 +421,7 @@ $i18n_key_words = array(
 // TODO: translate the following.
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Välj intervall',
index e538728..87b44ca 100644 (file)
@@ -460,6 +460,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => 'Zaman aralığını seç',
index 4406831..9d03e7b 100644 (file)
@@ -432,6 +432,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => '选择时间段',
index 47d2cfb..e488dbd 100644 (file)
@@ -440,6 +440,7 @@ $i18n_key_words = array(
 // 'form.reports.include_not_invoiced' => 'not invoiced',
 // 'form.reports.include_assigned' => 'assigned',
 // 'form.reports.include_not_assigned' => 'not assigned',
+// 'form.reports.include_pending' => 'pending',
 // 'form.reports.include_approved' => 'approved',
 // 'form.reports.include_not_approved' => 'not approved',
 'form.reports.select_period' => '選擇時間段',
index 7bd1564..b8f5683 100644 (file)
@@ -12,7 +12,7 @@
       <br>
       <table cellspacing="0" cellpadding="4" width="100%" border="0">
         <tr>
-          <td align="center">&nbsp;Anuko Time Tracker 1.18.37.4760 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
+          <td align="center">&nbsp;Anuko Time Tracker 1.18.37.4761 | Copyright &copy; <a href="https://www.anuko.com/lp/tt_3.htm" target="_blank">Anuko</a> |
             <a href="https://www.anuko.com/lp/tt_4.htm" target="_blank">{$i18n.footer.credits}</a> |
             <a href="https://www.anuko.com/lp/tt_5.htm" target="_blank">{$i18n.footer.license}</a> |
             <a href="https://www.anuko.com/lp/tt_7.htm" target="_blank">{$i18n.footer.improve}</a>
index 264e564..f652027 100644 (file)
@@ -186,7 +186,11 @@ if ($showTimesheet) {
   $form->addInput(array('type'=>'combobox',
    'name'=>'timesheet',
    'style'=>'width: 250px;',
-   'data'=>array('1'=>$i18n->get('form.reports.include_assigned'),'2'=>$i18n->get('form.reports.include_not_assigned')),
+   'data'=>array(TIMESHEET_NOT_ASSIGNED=>$i18n->get('form.reports.include_not_assigned'),
+     TIMESHEET_ASSIGNED=>$i18n->get('form.reports.include_assigned'),
+     TIMESHEET_PENDING=>$i18n->get('form.reports.include_pending'),
+     TIMESHEET_APPROVED=>$i18n->get('form.reports.include_approved'),
+     TIMESHEET_NOT_APPROVED=>$i18n->get('form.reports.include_not_approved')),
    'empty'=>array(''=>$i18n->get('dropdown.all'))
   ));
 }