Improved new export-import by adding time log.
[timetracker.git] / WEB-INF / lib / ttImportHelper.class.php
index 7b68ba7..7fa1e28 100644 (file)
@@ -47,6 +47,7 @@ class ttImportHelper {
 
   var $canImport      = true;    // False if we cannot import data due to a login collision.
   var $groupData      = array(); // Array of group data such as group name, etc.
+  var $org_id         = null;    // New organization id we are importing. It is created during the import operation.
   var $group_id       = null;    // New group id we are importing. It is created during the import operation.
   var $roles          = array(); // Array of arrays of role properties.
   var $users          = array(); // Array of arrays of user properties.
@@ -66,7 +67,7 @@ class ttImportHelper {
   var $logMap        = array(); // Time log ids.
 
   // Constructor.
-  function ttImportHelper(&$errors) {
+  function __construct(&$errors) {
     $this->errors = &$errors;
   }
 
@@ -144,13 +145,16 @@ class ttImportHelper {
           'workday_minutes' => $this->groupData['WORKDAY_MINUTES'],
           'config' => $this->groupData['CONFIG']));
         if ($group_id) {
+          $this->org_id = $group_id;
           $this->group_id = $group_id;
 
           // Create roles.
           foreach ($this->roles as $key=>$role_item) {
             $role_id = ttRoleHelper::insert(array(
               'group_id' => $this->group_id,
+              'org_id' => $this->org_id,
               'name' => $role_item['NAME'],
+              'description' => $role_item['DESCRIPTION'],
               'rank' => $role_item['RANK'],
               'rights' => $role_item['RIGHTS'],
               'status' => $role_item['STATUS']));
@@ -161,6 +165,7 @@ class ttImportHelper {
             $role_id = $user_item['ROLE_ID'] === '0' ? $this->top_role_id :  $this->roleMap[$user_item['ROLE_ID']]; // 0 (not null) means top manager role.
             $user_id = ttUserHelper::insert(array(
               'group_id' => $this->group_id,
+              'org_id' => $this->org_id,
               'role_id' => $role_id,
               'client_id' => $user_item['CLIENT_ID'], // Note: NOT mapped value, replaced in CLIENT handler.
               'name' => $user_item['NAME'],
@@ -179,6 +184,7 @@ class ttImportHelper {
       $this->taskMap[$this->currentElement['ID']] =
         ttTaskHelper::insert(array(
           'group_id' => $this->group_id,
+          'org_id' => $this->org_id,
           'name' => $this->currentElement['NAME'],
           'description' => $this->currentElement['DESCRIPTION'],
           'status' => $this->currentElement['STATUS']));
@@ -193,17 +199,20 @@ class ttImportHelper {
       $this->projectMap[$this->currentElement['ID']] =
         ttProjectHelper::insert(array(
           'group_id' => $this->group_id,
+          'org_id' => $this->org_id,
           'name' => $this->currentElement['NAME'],
           'description' => $this->currentElement['DESCRIPTION'],
           'tasks' => $mapped_tasks,
           'status' => $this->currentElement['STATUS']));
     }
     if ($name == 'USER_PROJECT_BIND' && $this->canImport) {
-      ttUserHelper::insertBind(
-        $this->userMap[$this->currentElement['USER_ID']],
-        $this->projectMap[$this->currentElement['PROJECT_ID']],
-        $this->currentElement['RATE'],
-        $this->currentElement['STATUS']);
+      ttUserHelper::insertBind(array(
+        'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+        'project_id' => $this->projectMap[$this->currentElement['PROJECT_ID']],
+        'group_id' => $this->group_id,
+        'org_id' => $this->org_id,
+        'rate' => $this->currentElement['RATE'],
+        'status' => $this->currentElement['STATUS']));
     }
 
     if ($name == 'CLIENT' && $this->canImport) {
@@ -217,6 +226,7 @@ class ttImportHelper {
       $this->clientMap[$this->currentElement['ID']] =
         ttClientHelper::insert(array(
           'group_id' => $this->group_id,
+          'org_id' => $this->org_id,
           'name' => $this->currentElement['NAME'],
           'address' => $this->currentElement['ADDRESS'],
           'tax' => $this->currentElement['TAX'],
@@ -233,10 +243,10 @@ class ttImportHelper {
       $this->invoiceMap[$this->currentElement['ID']] =
         ttInvoiceHelper::insert(array(
           'group_id' => $this->group_id,
+          'org_id' => $this->org_id,
           'name' => $this->currentElement['NAME'],
           'date' => $this->currentElement['DATE'],
           'client_id' => $this->clientMap[$this->currentElement['CLIENT_ID']],
-          'discount' => $this->currentElement['DISCOUNT'],
           'status' => $this->currentElement['STATUS']));
     }
 
@@ -248,6 +258,8 @@ class ttImportHelper {
       $this->logMap[$this->currentElement['ID']] =
         ttTimeHelper::insert(array(
           'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+          'group_id' => $this->group_id,
+          'org_id' => $this->org_id,
           'date' => $this->currentElement['DATE'],
           'start' => $this->currentElement['START'],
           'finish' => $this->currentElement['FINISH'],
@@ -292,6 +304,7 @@ class ttImportHelper {
       ttExpenseHelper::insert(array(
         'date' => $this->currentElement['DATE'],
         'user_id' => $this->userMap[$this->currentElement['USER_ID']],
+        'group_id' => $this->group_id,
         'client_id' => $this->clientMap[$this->currentElement['CLIENT_ID']],
         'project_id' => $this->projectMap[$this->currentElement['PROJECT_ID']],
         'name' => $this->currentElement['NAME'],
@@ -333,7 +346,9 @@ class ttImportHelper {
         'chnote' => (int) $this->currentElement['SHOW_NOTE'],
         'chcf_1' => (int) $this->currentElement['SHOW_CUSTOM_FIELD_1'],
         'chunits' => (int) $this->currentElement['SHOW_WORK_UNITS'],
-        'group_by' => $this->currentElement['GROUP_BY'],
+        'group_by1' => $this->currentElement['GROUP_BY1'],
+        'group_by2' => $this->currentElement['GROUP_BY2'],
+        'group_by3' => $this->currentElement['GROUP_BY3'],
         'chtotalsonly' => (int) $this->currentElement['SHOW_TOTALS_ONLY']));
     }
     $this->currentTag = '';
@@ -470,11 +485,18 @@ class ttImportHelper {
 
     $sql = 'insert into tt_groups '.$columns.$values;
     $affected = $mdb2->exec($sql);
-    if (!is_a($affected, 'PEAR_Error')) {
-      $group_id = $mdb2->lastInsertID('tt_groups', 'id');
-      return $group_id;
-    }
-    return false;
+    if (is_a($affected, 'PEAR_Error')) return false;
+
+    $group_id = $mdb2->lastInsertID('tt_groups', 'id');
+
+    // Update org_id with group_id.
+    // NOTE: Both export and import need an additional effort to properly operate on subgroups.
+    // Currently we are importing one group only, which becomes a top level group.
+    $sql = "update tt_groups set org_id = $group_id where org_id is NULL and id = $group_id";
+    $affected = $mdb2->exec($sql);
+    if (is_a($affected, 'PEAR_Error')) return false;
+
+    return $group_id;
   }
 
   // insertMonthlyQuota - a helper function to insert a monthly quota.