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)); }