Here’s what I’m trying to do:
I have a Job which has JobParts. The JobParts need certain Tasks to be performed. The Tasks are copies of Processes(where the name/description and other vital data comes from). Now some Processes have dependencies, meaning if Process-A is selected, a Task based on Process-B is automatically created as well.
However, I ran into an issue. Using $var->save() on any of the Tasks instances, creates a new Task for every instance. To be specific:
$tasks->save(); <-- saves $tasks
$dependency->save(); <-- saves $dependency AND $tasks
So if I have two dependencies, I will end up with two new Tasks for $tasks and one new Task for $dependency in my Tasks table.
public function actionStages($id) {
$model = $this->loadModel($id, 'Jobs');
if (isset($_POST['Tasks'])) {
foreach($_POST['Tasks'] as $i=>$task){
if($task['active']){
$tasks = new Tasks;
$tasks->setAttributes($_POST['Tasks'][$i]);
if($model->id)
$tasks->job_id = $model->id;
$tasks->active = 1;
$tasks->cost_estimated = ($tasks->cost_estimated) ? $tasks->cost_estimated : 0;
$tasks->time_estimated = ($tasks->time_estimated) ? $tasks->time_estimated : 0;
$tasks->user_id = 1;
$tasks->save();
// Check for dependant processes
if($tasks->process->processDepends){
foreach ($tasks->process->processDepends as $d=>$depend){
$process = $this->loadModel($depend, 'Processes');
$dependency = new Tasks;
$colors = explode('+', $tasks->jobPart->coloring);
$dependency->setAttributes($_POST['Tasks'][$i]);
$dependency->time_estimated = ($process->productivity > 0) ? $process->productivity*$model->end_run : '';
$dependency->cost_estimated = ceil($tasks->jobPart->print_sheets_volume*((int)$colors[0]+(int)$colors[1]))*$process->cost_each;
$dependency->active = 1;
$dependency->user_id = 1;
$dependency->process_id = $depend;
$dependency->job_id = $model->id;
$dependency->save();
}
}
// check if any extra data was input. If so, process it and store it in its table.
if(isset($_POST['Tasks'][$i]['TaskData'])){
foreach($_POST['Tasks'][$i]['TaskData'] as $t=>$data){
$taskdata = new TaskData;
$taskdata->setAttributes($_POST['Tasks'][$i]['TaskData'][$t]);
$taskdata->task_id = $tasks->id;
$taskdata->save();
}
}
}
}
$this->redirect(array('view', 'id' => $model->id));
}
$this->render('stages', array(
'model' => $model,
));
}