Example #1
0
 function action_create_project()
 {
     global $current_user, $db, $mod_strings;
     $project_name = $_POST['p_name'];
     $template_id = $_POST['template_id'];
     $project_start = $_POST['start_date'];
     $copy_all = isset($_POST['copy_all_tasks']) ? 1 : 0;
     $copy_tasks = isset($_POST['tasks']) ? $_POST['tasks'] : array();
     //Get project start date
     if ($project_start != '') {
         $dateformat = $current_user->getPreference('datef');
         $startdate = DateTime::createFromFormat($dateformat, $project_start);
         $start = $startdate->format('Y-m-d');
     }
     $duration_unit = 'Days';
     //Get the project template
     $template = new AM_ProjectTemplates();
     $template->retrieve($template_id);
     //create project from template
     $project = new Project();
     $project->name = $project_name;
     $project->estimated_start_date = $start;
     $project->status = $template->status;
     $project->priority = strtolower($template->priority);
     $project->description = $template->description;
     $project->assigned_user_id = $template->assigned_user_id;
     $project->save();
     //copy all resources from template to project
     $template->load_relationship('am_projecttemplates_users_1');
     $template_users = $template->get_linked_beans('am_projecttemplates_users_1', 'User');
     $template->load_relationship('am_projecttemplates_contacts_1');
     $template_contacts = $template->get_linked_beans('am_projecttemplates_contacts_1', 'Contact');
     $project->load_relationship('project_users_1');
     foreach ($template_users as $user) {
         $project->project_users_1->add($user->id);
     }
     $project->load_relationship('project_contacts_1');
     foreach ($template_contacts as $contact) {
         $project->project_contacts_1->add($contact->id);
     }
     $template->load_relationship('am_projecttemplates_project_1');
     $template->am_projecttemplates_project_1->add($project->id);
     //Get related project template tasks. Using sql query so that the results can be ordered.
     $get_tasks = "SELECT * FROM am_tasktemplates\n                        WHERE id\n                        IN (\n                            SELECT am_tasktemplates_am_projecttemplatesam_tasktemplates_idb\n                            FROM am_tasktemplates_am_projecttemplates_c\n                            WHERE am_tasktemplates_am_projecttemplatesam_projecttemplates_ida = '" . $template_id . "'\n                            AND deleted =0\n                        )\n                        AND deleted =0\n                        ORDER BY am_tasktemplates.order_number ASC";
     $tasks = $db->query($get_tasks);
     //Create new project tasks from the template tasks
     $count = 1;
     while ($row = $db->fetchByAssoc($tasks)) {
         $project_task = new ProjectTask();
         $project_task->name = $row['name'];
         $project_task->status = $row['status'];
         $project_task->priority = strtolower($row['priority']);
         $project_task->percent_complete = $row['percent_complete'];
         $project_task->predecessors = $row['predecessors'];
         $project_task->milestone_flag = $row['milestone_flag'];
         $project_task->relationship_type = $row['relationship_type'];
         $project_task->task_number = $row['task_number'];
         $project_task->order_number = $row['order_number'];
         $project_task->estimated_effort = $row['estimated_effort'];
         $project_task->utilization = $row['utilization'];
         if ($copy_all == 0 && !in_array($row['id'], $copy_tasks)) {
             $project_task->assigned_user_id = NULL;
         } else {
             $project_task->assigned_user_id = $row['assigned_user_id'];
         }
         $project_task->description = $row['description'];
         $project_task->duration = $row['duration'];
         $project_task->duration_unit = $duration_unit;
         $project_task->project_task_id = $count;
         //Flag to prevent after save logichook running when project_tasks are created (see custom/modules/ProjectTask/updateProject.php)
         $project_task->set_project_end_date = 0;
         if ($count == '1') {
             $project_task->date_start = $start;
             $enddate = $startdate->modify('+' . $row['duration'] . ' ' . $duration_unit);
             $end = $enddate->format('Y-m-d');
             $project_task->date_finish = $end;
             $enddate_array[$count] = $end;
             $GLOBALS['log']->fatal("DATE:" . $end);
         } else {
             $start_date = $count - 1;
             $startdate = DateTime::createFromFormat('Y-m-d', $enddate_array[$start_date]);
             $GLOBALS['log']->fatal("DATE:" . $enddate_array[$start_date]);
             $start = $startdate->format('Y-m-d');
             $project_task->date_start = $start;
             $enddate = $startdate->modify('+' . $row['duration'] . ' ' . $duration_unit);
             $end = $enddate->format('Y-m-d');
             $project_task->date_finish = $end;
             $enddate = $end;
             $enddate_array[$count] = $end;
         }
         $project_task->save();
         //link tasks to the newly created project
         $project_task->load_relationship('projects');
         $project_task->projects->add($project->id);
         //Add assinged users from each task to the project resourses subpanel
         $project->load_relationship('project_users_1');
         $project->project_users_1->add($row['assigned_user_id']);
         $count++;
     }
     //set project end date to the same as end date of the last task
     $GLOBALS['log']->fatal("project end -- DATE:" . $end);
     $project->estimated_end_date = $end;
     $project->save();
     //redirct to new project
     SugarApplication::appendErrorMessage($mod_strings["LBL_NEW_PROJECT_CREATED"]);
     $params = array('module' => 'Project', 'action' => 'DetailView', 'record' => $project->id);
     SugarApplication::redirect('index.php?' . http_build_query($params));
 }