diff --git a/module/program/control.php b/module/program/control.php index f544e641b7..5b5bb5c1af 100644 --- a/module/program/control.php +++ b/module/program/control.php @@ -958,6 +958,7 @@ class program extends control $this->app->loadLang('custom'); $this->app->loadLang('project'); $this->loadModel('productplan'); + $this->loadModel('action'); $project = $this->program->getPRJByID($projectID); $programID = $project->parent; @@ -988,7 +989,7 @@ class program extends control if($changes) { - $actionID = $this->loadModel('action')->create('project', $projectID, 'edited'); + $actionID = $this->action->create('project', $projectID, 'edited'); $this->action->logHistory($actionID, $changes); } @@ -1056,6 +1057,8 @@ class program extends control */ public function PRJBatchEdit($from = 'prjbrowse', $programID = 0) { + $this->loadModel('action'); + /* Navigation stay in program when enter from program list. */ if($from == 'pgmproject') { @@ -1078,7 +1081,7 @@ class program extends control { if(empty($changes)) continue; - $actionID = $this->loadModel('action')->create('project', $projectID, 'Edited'); + $actionID = $this->action->create('project', $projectID, 'Edited'); $this->action->logHistory($actionID, $changes); } } diff --git a/module/program/model.php b/module/program/model.php index 452c1f3fe1..4cab5cc3f7 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -1744,17 +1744,7 @@ class programModel extends model if(!dao::isError()) { - /* Product belonging program set processing. */ - $oldTopPGM = $this->getTopPGMByID($oldProject->parent); - $newTopPGM = $this->getTopPGMByID($project->parent); - if($oldTopPGM != $newTopPGM) - { - foreach($_POST['products'] as $productID => $product) - { - $this->dao->update(TABLE_PRODUCT)->set('program')->eq((int)$newTopPGM)->where('id')->eq((int)$productID)->exec(); - } - } - + $this->updateProductPGM($oldProject->parent, $project->parent, $_POST['products']); $this->loadModel('project')->updateProducts($projectID, $_POST['products']); $this->file->updateObjectID($this->post->uid, $projectID, 'project'); @@ -1814,17 +1804,9 @@ class programModel extends model if(dao::isError()) die(js::error('project#' . $projectID . dao::getError(true))); if(!dao::isError()) { - /* Product belonging program set processing. */ - $oldTopPGM = $this->getTopPGMByID($oldProject->parent); - $newTopPGM = $this->getTopPGMByID($project->parent); $linkedProducts = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($projectID)->fetchPairs(); - if($oldTopPGM != $newTopPGM) - { - foreach($linkedProducts as $productID => $product) - { - $this->dao->update(TABLE_PRODUCT)->set('program')->eq($newTopPGM)->where('id')->eq((int)$productID)->exec(); - } - } + $this->updateProductPGM($oldProject->parent, $project->parent, $linkedProducts); + if($oldProject->parent != $project->parent) $this->processNode($projectID, $project->parent, $oldProject->path, $oldProject->grade); } $allChanges[$projectID] = common::createChanges($oldProject, $project); @@ -1832,6 +1814,35 @@ class programModel extends model return $allChanges; } + /** + * Update the program set of the product. + * + * @param int $oldProgram + * @param int $newProgram + * @param array $products + * @access public + * @return void + */ + public function updateProductPGM($oldProgram, $newProgram, $products) + { + $this->loadModel('action'); + /* Product belonging program set processing. */ + $oldTopPGM = $this->getTopPGMByID($oldProgram); + $newTopPGM = $this->getTopPGMByID($newProgram); + if($oldTopPGM != $newTopPGM) + { + foreach($products as $productID => $product) + { + $oldProduct = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch(); + $this->dao->update(TABLE_PRODUCT)->set('program')->eq((int)$newTopPGM)->where('id')->eq((int)$productID)->exec(); + $newProduct = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch(); + $changes = common::createChanges($oldProduct, $newProduct); + $actionID = $this->action->create('product', $productID, 'edited'); + $this->action->logHistory($actionID, $changes); + } + } + } + /** * Print datatable cell. *