public function updateProjectInfoAction() { $project_id = $this->_getParam('id'); $project = Application_Model_Projects::GetProjectInfo($project_id); $data = Zend_Json::decode($this->_getParam('data')); $data = ProNav_Utils::stripTagsAndTrim($data); $data['done_for_corporation'] = is_numeric($data['done_for_corporation']) ? $data['done_for_corporation'] : -1; $data['done_for_workgroup'] = is_numeric($data['done_for_workgroup']) ? $data['done_for_workgroup'] : 0; $data['done_at_location'] = is_numeric($data['done_at_location']) ? $data['done_at_location'] : 0; $data['done_by_workgroup'] = is_numeric($data['done_by_workgroup']) ? $data['done_by_workgroup'] : -1; $data['stage_id'] = is_numeric($data['stage_id']) ? $data['stage_id'] : -1; $data['point_of_contact'] = is_numeric($data['point_of_contact']) ? $data['point_of_contact'] : new Zend_Db_Expr("NULL"); $data['requested_by'] = $data['requested_by'] ? $data['requested_by'] : new Zend_Db_Expr("NULL"); $data['ref_no'] = $data['ref_no'] ? trim($data['ref_no']) : new Zend_Db_Expr("NULL"); $data['schedule_not_before'] = ProNav_Utils::toMySQLDate($data['schedule_not_before']); $data['schedule_required_by'] = ProNav_Utils::toMySQLDate($data['schedule_required_by']); $errors = array(); //Required fields - arrays are 0=field to test, 1=value that is unacceptable, 2=User friendly description. $req_fields = array(array('stage_id', -1, 'Stage'), array('title', '', 'Title')); if (ProNav_Auth::hasPerm(ProNav_Auth::PERM_PROJECTS_OVERVIEW_EDIT)) { $req_fields = array_merge($req_fields, array(array('done_for_corporation', -1, 'Corporation'), array('done_for_workgroup', 0, 'Workgroup'), array('done_at_location', 0, 'Location'), array('done_by_workgroup', -1, 'Business Unit'))); } else { //These cant be set for change orders or for people who don't have permission. unset($data['done_for_corporation']); unset($data['done_for_workgroup']); unset($data['done_at_location']); unset($data['done_by_workgroup']); } foreach ($req_fields as $rule) { if ($data[$rule[0]] == $rule[1]) { $errors[] = sprintf("A %s is required.", $rule[2]); } } $closeChecks = Application_Model_Projects::getCloseDetails($project_id); if ($data['stage_id'] == ProNav_Utils::STAGE_CLOSED && $closeChecks->current_stage != ProNav_Utils::STAGE_CLOSED) { if ($closeChecks->current_status_percent != Application_Model_ProgressOption::STATUS_TASK_COMPLETE) { $errors[] = "The project's overall status must be set to 100% before it can be closed."; } } if ($data['stage_id'] == ProNav_Utils::STAGE_CLOSED || $data['stage_id'] == ProNav_Utils::STAGE_CANCELLED) { if ($closeChecks->invalid_cor_state) { $errors[] = "Project cannot be closed with outstanding Change Order Requests."; } } $toCancel = $data['stage_id'] == ProNav_Utils::STAGE_CANCELLED && $closeChecks->current_stage != ProNav_Utils::STAGE_CANCELLED; $toHold = $data['stage_id'] == ProNav_Utils::STAGE_HOLD && $closeChecks->current_stage != ProNav_Utils::STAGE_HOLD; if ($data['stage_comment'] == "" && ($toCancel || $toHold)) { $errors[] = "Comment required for this stage change."; } if (count($errors) == 0) { Application_Model_Projects::UpdateProjectInfo($project_id, $data); } echo Zend_Json::encode(array('errors' => $errors)); }