コード例 #1
0
 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));
 }