[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Fmsystem-commits] [15782] logistic: copy activities from one project to
From: |
sigurdne |
Subject: |
[Fmsystem-commits] [15782] logistic: copy activities from one project to another |
Date: |
Mon, 3 Oct 2016 07:45:00 +0000 (UTC) |
Revision: 15782
http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=15782
Author: sigurdne
Date: 2016-10-03 07:45:00 +0000 (Mon, 03 Oct 2016)
Log Message:
-----------
logistic: copy activities from one project to another
Modified Paths:
--------------
trunk/logistic/inc/class.soproject.inc.php
trunk/logistic/inc/class.uiproject.inc.php
Modified: trunk/logistic/inc/class.soproject.inc.php
===================================================================
--- trunk/logistic/inc/class.soproject.inc.php 2016-10-02 17:40:34 UTC (rev
15781)
+++ trunk/logistic/inc/class.soproject.inc.php 2016-10-03 07:45:00 UTC (rev
15782)
@@ -231,9 +231,64 @@
return $project;
}
- public function copy_project_activities( $from, $to )
+ public function copy_project_activities( $from, $to,
$start_date )
{
- throw new Exception('Implement me');
+ //throw new Exception('Implement me');
+
+ $start_date = $start_date ? $start_date : time();
+ $from = (int) $from;
+ $to = (int) $to;
+
+ $this->db->transaction_begin();
+ $this->db->query("SELECT start_date FROM lg_project
WHERE id = " . (int)$from, __LINE__, __FILE__);
+ $this->db->next_record();
+ $orig_start_date = $this->db->f('start_date');
+
+ $this->db->query("SELECT start_date FROM lg_project
WHERE id = " . (int)$to, __LINE__, __FILE__);
+ $this->db->next_record();
+ $new_start_date = $this->db->f('start_date');
+
+ $date_diff = $new_start_date - $orig_start_date;
+
+ $this->db->query("SELECT * FROM lg_activity WHERE
project_id = {$from} ORDER BY id", __LINE__, __FILE__);
+
+ $id_map = array();
+ $values = array();
+ while ($this->db->next_record())
+ {
+ $values[] = $this->db->Record;
+ }
+
+ foreach ($values as &$entry)
+ {
+ $orig_id = $entry['id'];
+ unset($entry['id']);
+ $entry['project_id'] = $to;
+ $entry['start_date'] += $date_diff;
+ $entry['end_date'] += $date_diff;
+
+ $this->db->query("INSERT INTO lg_activity (" .
implode(',', array_keys($entry)) . ') VALUES ('
+ .
$this->db->validate_insert(array_values($entry)) . ')', __LINE__, __FILE__);
+
+ $new_id =
$this->db->get_last_insert_id('lg_activity', 'id');
+
+ $id_map[$orig_id] = $new_id;
+ }
+
+ foreach ($id_map as $orig_id => $new_id)
+ {
+ $this->db->query("SELECT parent_activity_id
FROM lg_activity WHERE parent_activity_id IS NOT NULL AND id = " .
(int)$new_id, __LINE__, __FILE__);
+ $this->db->next_record();
+ $parent_activity_id =
$this->db->f('parent_activity_id');
+ if($parent_activity_id)
+ {
+ $new_parent_id =
(int)$id_map[$parent_activity_id];
+ $this->db->query("UPDATE lg_activity
SET parent_activity_id = {$new_parent_id} WHERE id = " . (int)$new_id,
__LINE__, __FILE__);
+ }
+ }
+
+ $this->db->transaction_commit();
+
}
public function get_projects()
{
Modified: trunk/logistic/inc/class.uiproject.inc.php
===================================================================
--- trunk/logistic/inc/class.uiproject.inc.php 2016-10-02 17:40:34 UTC (rev
15781)
+++ trunk/logistic/inc/class.uiproject.inc.php 2016-10-03 07:45:00 UTC (rev
15782)
@@ -525,9 +525,9 @@
{
$project = new logistic_project();
}
- else if($project->get_project_id())
+ if($project->get_id())
{
- $activities =
createObject('logistic.soactivity')->get(0, 1, 'name', true, '', '',
array('project' => $project->get_project_id()), true);
+ $activities =
createObject('logistic.soactivity')->get(0, 1, 'name', true, '', '',
array('project' => $project->get_id()), true);
}
}
@@ -588,8 +588,11 @@
if ($project->validate())
{
$project_id = $this->so->store($project);
- $from_project_id =
phpgw::get_var('copy_project_activities', 'int');
-
$this->so->copy_project_activities($from_project_id,$project_id);
+ $copy_from_project_id =
phpgw::get_var('copy_project_activities', 'int');
+ if($copy_from_project_id)
+ {
+
$this->so->copy_project_activities($copy_from_project_id,$project_id,
$project->get_start_date());
+ }
$GLOBALS['phpgw']->redirect_link('/index.php',
array('menuaction' => 'logistic.uiproject.view',
'id' => $project_id));
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Fmsystem-commits] [15782] logistic: copy activities from one project to another,
sigurdne <=