/** * @param $criteriaAnalyze * @param $decision_id * @param bool $revert * @param array $response * @return sfView */ private function getUpdateActionResponse($criteriaAnalyze, $decision_id, $revert = false, $response = array()) { $logicalFilter = new LogicalFilterView(); $logicalFilter->setDecisionId($decision_id); $logicalFilter->load(); $roleFilter = new RoleFilterView(); $roleFilter->setDecisionId($decision_id); $roleFilter->load(); $statusFilter = new StatusFilterView(); $statusFilter->setDecisionId($decision_id); $statusFilter->load(); $tagFilter = new TagFilterView(); $tagFilter->setDecisionId($decision_id); $tagFilter->load(); // When user changes the weights of criteria all dependent values // should be recalculated automatically in the alternatives chart $stackedBarChart = new StackedBarChart(); $stackedBarChart->setDecisionId($decision_id); $stackedBarChart->setCriteriaValues($criteriaAnalyze->getCriteriaValues()); $stackedBarChart->setRoleFilterData($roleFilter->getData()); $stackedBarChart->setStatusFilterData($statusFilter->getData()); $stackedBarChart->setTagFilterData($tagFilter->getDataForSQL()); $stackedBarChart->setFilteredAlternativesIds($logicalFilter->getFilteredAlternativesIds()); $stackedBarChart->load(); $radarChart = new RadarChart(); $radarChart->setData($stackedBarChart->getData()); $radarChart->setAlternativeNames($stackedBarChart->getAlternativesNames()); $radarChart->setCriteriaNames($stackedBarChart->getCriteriaNames()); $radarChart->prepareData(); $pointChart = new PointChart(); $pointChart->setDecisionId($decision_id); $pointChart->setCriteriaValues($criteriaAnalyze->getCriteriaValues()); $pointChart->setRoleFilterData($roleFilter->getData()); $pointChart->setStatusFilterData($statusFilter->getData()); $pointChart->setTagFilterData($tagFilter->getDataForSQL()); $pointChart->setFilteredAlternativesIds($logicalFilter->getFilteredAlternativesIds()); $pointChart->load(); $pointChart->setTotalBenefit($stackedBarChart->getTotalBenefit()); $bubbleChart = new BubbleChart(); $bubbleChart->setDecisionId($decision_id); $bubbleChart->setCriteriaValues($criteriaAnalyze->getCriteriaValues()); $bubbleChart->setRoleFilterData($roleFilter->getData()); $bubbleChart->setStatusFilterData($statusFilter->getData()); $bubbleChart->setTagFilterData($tagFilter->getDataForSQL()); $bubbleChart->setFilteredAlternativesIds($logicalFilter->getFilteredAlternativesIds()); $bubbleChart->setTotalBenefit($stackedBarChart->getTotalBenefit()); $bubbleChart->load(); $costAnalyze = new CostAnalyze(); $costAnalyze->setDecisionId($decision_id); $costAnalyze->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $costAnalyze->setFilteredAlternativesIds($logicalFilter->getFilteredAlternativesIds()); $costAnalyze->setCumulativeData($stackedBarChart->getCumulativeData()); $costAnalyze->load(); $cumulativeChart = new CumulativeGainChart(); $cumulativeChart->setDecisionId($decision_id); $cumulativeChart->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $cumulativeChart->setMeasurement($stackedBarChart->getCumulativeData()); $cumulativeChart->setCostData($costAnalyze->getData()); $cumulativeChart->setAlternativeNames($costAnalyze->getAlternativeNames()); $cumulativeChart->setCriterionNames($costAnalyze->getCriteria()); $cumulativeChart->load(); $this->getResponse()->setHttpHeader('Content-Type', 'application/json; charset=utf-8'); $stacked_bar_chart[] = '"data":' . $stackedBarChart->getJsonData(); $stacked_bar_chart[] = '"alternatives":' . $stackedBarChart->getAlternativesJson(); $stacked_bar_chart[] = '"criteria":' . $stackedBarChart->getCriteriaJson(); if ($revert) { $response[] = '"criteriaData":' . $criteriaAnalyze->getJsonData(); } $point_chart[] = '"data":' . $pointChart->getJsonData(); $point_chart[] = '"criteria":' . json_encode($pointChart->getCriteriaNames()); $bubble_chart[] = '"data":' . $bubbleChart->getJsonData(); $bubble_chart[] = '"criteria":' . json_encode($pointChart->getCriteriaNames()); $response[] = '"stackedBarChart":{' . implode(',', $stacked_bar_chart) . '}'; $response[] = '"pointChart":{' . implode(',', $point_chart) . '}'; $response[] = '"bubbleChart":{' . implode(',', $bubble_chart) . '}'; $cumulative_chart[] = '"costData":' . $cumulativeChart->getJsonCostData(); $cumulative_chart[] = '"benefitData":' . $cumulativeChart->getJsonData(); $cumulative_chart[] = '"criteria":' . json_encode($costAnalyze->getCriteria()); $cumulative_chart[] = '"alternatives":' . $cumulativeChart->getAlternativesJson(); $response[] = '"cumulativeChart":{' . implode(',', $cumulative_chart) . '}'; $cost_analyze[] = '"alternatives":' . $costAnalyze->getAlternativesJson(); $cost_analyze[] = '"order":' . $costAnalyze->getAlternativeOrderJson(); $cost_analyze[] = '"data":' . $costAnalyze->getJsonData(); $cost_analyze[] = '"bScoreData":' . $costAnalyze->getCumulativeJsonData(); $response[] = '"radarChart":' . $radarChart->getJsonData(); $response[] = '"costOrder":{' . implode(',', $cost_analyze) . '}'; return $this->renderText('{' . implode(',', $response) . '}'); }
/** * @param sfWebRequest $request * @return sfView */ public function executeSave(sfWebRequest $request) { $this->forward404Unless($request->isXmlHttpRequest()); $measurement = $request->getParameter('measurement'); $decision_id = $request->getParameter('decision_id'); $user = $this->getUser()->getGuardUser(); $keys = array_keys($measurement); $alternative_id = array_shift($keys); $keys = array_keys($measurement[$alternative_id]); $criterion_id = array_shift($keys); $value = $measurement[$alternative_id][$criterion_id]; $alternativeMeasurement = AlternativeMeasurementTable::getInstance()->getOneForDashboard($user, $decision_id, $alternative_id, $criterion_id); if (is_object($alternativeMeasurement)) { $alternativeMeasurement->score = $value; $alternativeMeasurement->save(); } else { $response = ResponseTable::getInstance()->getOneForDashboard($user, $decision_id); if (is_object($response)) { $alternativeMeasurement = new AlternativeMeasurement(); $alternativeMeasurement->score = $value; $alternativeMeasurement->alternative_head_id = $alternative_id; $alternativeMeasurement->criterion_id = $criterion_id; $alternativeMeasurement->Response = $response; $alternativeMeasurement->save(); } } Doctrine_Query::create()->delete()->from('Graph')->where('decision_id = ?', $decision_id)->execute(); $criteriaAnalyze = new CriteriaAnalyze(); $criteriaAnalyze->setDecisionId($decision_id); $criteriaAnalyze->load(); $stackedBarChart = new StackedBarChart(); $stackedBarChart->setDecisionId($decision_id); $stackedBarChart->setCriteriaValues($criteriaAnalyze->getCriteriaValues()); $stackedBarChart->load(); $costAnalyze = new CostAnalyze(); $costAnalyze->setDecisionId($decision_id); $costAnalyze->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $costAnalyze->setCumulativeData($stackedBarChart->getCumulativeData()); $costAnalyze->load(); $cumulativeChart = new CumulativeGainChart(); $cumulativeChart->setDecisionId($decision_id); $cumulativeChart->setSortedAlternativeIds($stackedBarChart->getSortedAlternativeIds()); $cumulativeChart->setMeasurement($stackedBarChart->getCumulativeData()); $cumulativeChart->setCostData($costAnalyze->getData()); $cumulativeChart->setAlternativeNames($costAnalyze->getAlternativeNames()); $cumulativeChart->setCriterionNames($costAnalyze->getCriteria()); $cumulativeChart->load(); $stacked_bar_chart[] = '"data":' . $stackedBarChart->getJsonData(); $stacked_bar_chart[] = '"alternatives":' . $stackedBarChart->getAlternativesJson(); $stacked_bar_chart[] = '"criteria":' . $stackedBarChart->getCriteriaJson(); $cumulative_chart[] = '"costData":' . $cumulativeChart->getJsonCostData(); $cumulative_chart[] = '"benefitData":' . $cumulativeChart->getJsonData(); $cumulative_chart[] = '"criteria":' . json_encode($costAnalyze->getCriteria()); $cumulative_chart[] = '"alternatives":' . $cumulativeChart->getAlternativesJson(); $response = array(); $response[] = '"cumulativeChart":{' . implode(',', $cumulative_chart) . '}'; $response[] = '"stackedBarChart":{' . implode(',', $stacked_bar_chart) . '}'; $this->getResponse()->setHttpHeader('Content-Type', 'application/json; charset=utf-8'); return $this->renderText('{' . implode(',', $response) . '}'); }