Esempio n. 1
0
	/**
	 * Function returns the Advanced filter SQL
	 * @return <String>
	 */
	function getAdvancedFilterSQL() {
		$advancedFilter = $this->get('advancedFilter');

		$advancedFilterCriteria = array();
		$advancedFilterCriteriaGroup = array();
		if(is_array($advancedFilter)) {
			foreach($advancedFilter as $groupIndex => $groupInfo) {
				$groupColumns = $groupInfo['columns'];
				$groupCondition = $groupInfo['condition'];

				if (empty ($groupColumns)) {
					unset($advancedFilter[1]['condition']);
				} else {
					if(!empty($groupCondition)){
						$advancedFilterCriteriaGroup[$groupIndex] = array('groupcondition'=>$groupCondition);
					}
				}

				foreach($groupColumns as $groupColumn){
					$groupColumn['groupid'] = $groupIndex;
					$groupColumn['columncondition'] = $groupColumn['column_condition'];
					unset($groupColumn['column_condition']);
					$advancedFilterCriteria[] = $groupColumn;
				}
			}
		}

		$this->reportRun = ReportRun::getInstance($this->getId());

        // SalesPlatform.ru begin
        if(in_array($this->reportRun->reporttype, getCustomReportsList())) {
            $filterQuery = $this->reportRun->generateAdvFilterArray($advancedFilterCriteria);
        } else {
            $filterQuery = $this->reportRun->RunTimeAdvFilter($advancedFilterCriteria, $advancedFilterCriteriaGroup);
        }
        // SalesPlatform.ru end

		return $filterQuery;
	}
 /** function to get query for the given reportid,filterlist,type
  *  @ param $reportid : Type integer
  *  @ param $filtersql : Type Array
  *  @ param $module : Type String
  *  this returns join query for the report
  */
 function sGetSQLforReport($reportid, $filtersql, $type = '', $chartReport = false, $startLimit = false, $endLimit = false)
 {
     global $log;
     // SalesPlatform.ru begin
     if (in_array($this->reporttype, getCustomReportsList())) {
         $filterArray = $filtersql;
         return $this->sSPGetSQLforReport($filterArray);
     }
     // SalesPlatform.ru end
     $columnlist = $this->getQueryColumnsList($reportid, $type);
     $groupslist = $this->getGroupingList($reportid);
     $groupTimeList = $this->getGroupByTimeList($reportid);
     $stdfilterlist = $this->getStdFilterList($reportid);
     $columnstotallist = $this->getColumnsTotal($reportid);
     $advfiltersql = $this->getAdvFilterSql($reportid);
     $this->totallist = $columnstotallist;
     global $current_user;
     //Fix for ticket #4915.
     $selectlist = $columnlist;
     //columns list
     if (isset($selectlist)) {
         $selectedcolumns = implode(", ", $selectlist);
         if ($chartReport == true) {
             $selectedcolumns .= ", count(*) AS 'groupby_count'";
         }
     }
     //groups list
     if (isset($groupslist)) {
         $groupsquery = implode(", ", $groupslist);
     }
     if (isset($groupTimeList)) {
         $groupTimeQuery = implode(", ", $groupTimeList);
     }
     //standard list
     if (isset($stdfilterlist)) {
         $stdfiltersql = implode(", ", $stdfilterlist);
     }
     //columns to total list
     if (isset($columnstotallist)) {
         $columnstotalsql = implode(", ", $columnstotallist);
     }
     if ($stdfiltersql != "") {
         $wheresql = " and " . $stdfiltersql;
     }
     if (isset($filtersql) && $filtersql !== false && $filtersql != '') {
         $advfiltersql = $filtersql;
     }
     if ($advfiltersql != "") {
         $wheresql .= " and " . $advfiltersql;
     }
     $reportquery = $this->getReportsQuery($this->primarymodule, $type);
     // If we don't have access to any columns, let us select one column and limit result to shown we have not results
     // Fix for: http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/4758 - Prasad
     $allColumnsRestricted = false;
     if ($type == 'COLUMNSTOTOTAL') {
         if ($columnstotalsql != '') {
             $reportquery = "select " . $columnstotalsql . " " . $reportquery . " " . $wheresql;
         }
     } else {
         if ($selectedcolumns == '') {
             // Fix for: http://trac.vtiger.com/cgi-bin/trac.cgi/ticket/4758 - Prasad
             $selectedcolumns = "''";
             // "''" to get blank column name
             $allColumnsRestricted = true;
         }
         $reportquery = "select DISTINCT " . $selectedcolumns . " " . $reportquery . " " . $wheresql;
     }
     $reportquery = listQueryNonAdminChange($reportquery, $this->primarymodule);
     if (trim($groupsquery) != "" && $type !== 'COLUMNSTOTOTAL') {
         if ($chartReport == true) {
             $reportquery .= "group by " . $this->GetFirstSortByField($reportid);
         } else {
             $reportquery .= " order by " . $groupsquery;
         }
     }
     // Prasad: No columns selected so limit the number of rows directly.
     if ($allColumnsRestricted) {
         $reportquery .= " limit 0";
     } else {
         if ($startLimit !== false && $endLimit !== false) {
             $reportquery .= " LIMIT {$startLimit}, {$endLimit}";
         }
     }
     preg_match('/&amp;/', $reportquery, $matches);
     if (!empty($matches)) {
         $report = str_replace('&amp;', '&', $reportquery);
         $reportquery = $this->replaceSpecialChar($report);
     }
     $log->info("ReportRun :: Successfully returned sGetSQLforReport" . $reportid);
     $this->queryPlanner->initializeTempTables();
     return $reportquery;
 }
 function preProcess(Vtiger_Request $request)
 {
     parent::preProcess($request);
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $recordId = $request->get('record');
     $page = $request->get('page');
     $detailViewModel = Reports_DetailView_Model::getInstance($moduleName, $recordId);
     $reportModel = $detailViewModel->getRecord();
     $reportModel->setModule('Reports');
     $pagingModel = new Vtiger_Paging_Model();
     $pagingModel->set('page', $page);
     $pagingModel->set('limit', self::REPORT_LIMIT);
     $reportData = $reportModel->getReportData($pagingModel);
     $this->reportData = $reportData['data'];
     $this->calculationFields = $reportModel->getReportCalulationData();
     $count = $reportData['count'];
     if ($count < 1000) {
         $this->count = $count;
     } else {
         $query = $reportModel->getReportSQL(false, 'PDF');
         $countQuery = $reportModel->generateCountQuery($query);
         $this->count = $reportModel->getReportsCount($countQuery);
     }
     $primaryModule = $reportModel->getPrimaryModule();
     $secondaryModules = $reportModel->getSecondaryModules();
     $primaryModuleModel = Vtiger_Module_Model::getInstance($primaryModule);
     $currentUser = Users_Record_Model::getCurrentUserModel();
     $userPrivilegesModel = Users_Privileges_Model::getInstanceById($currentUser->getId());
     $permission = $userPrivilegesModel->hasModulePermission($primaryModuleModel->getId());
     if (!$permission) {
         $viewer->assign('MODULE', $primaryModule);
         $viewer->assign('MESSAGE', 'LBL_PERMISSION_DENIED');
         $viewer->view('OperationNotPermitted.tpl', $primaryModule);
         exit;
     }
     $detailViewLinks = $detailViewModel->getDetailViewLinks();
     // Advanced filter conditions
     $viewer->assign('SELECTED_ADVANCED_FILTER_FIELDS', $reportModel->transformToNewAdvancedFilter());
     $viewer->assign('PRIMARY_MODULE', $primaryModule);
     $recordStructureInstance = Vtiger_RecordStructure_Model::getInstanceFromRecordModel($reportModel);
     $primaryModuleRecordStructure = $recordStructureInstance->getPrimaryModuleRecordStructure();
     $secondaryModuleRecordStructures = $recordStructureInstance->getSecondaryModuleRecordStructure();
     //TODO : We need to remove "update_log" field from "HelpDesk" module in New Look
     // after removing old look we need to remove this field from crm
     if ($primaryModule == 'HelpDesk') {
         foreach ($primaryModuleRecordStructure as $blockLabel => $blockFields) {
             foreach ($blockFields as $field => $object) {
                 if ($field == 'update_log') {
                     unset($primaryModuleRecordStructure[$blockLabel][$field]);
                 }
             }
         }
     }
     if (!empty($secondaryModuleRecordStructures)) {
         foreach ($secondaryModuleRecordStructures as $module => $structure) {
             if ($module == 'HelpDesk') {
                 foreach ($structure as $blockLabel => $blockFields) {
                     foreach ($blockFields as $field => $object) {
                         if ($field == 'update_log') {
                             unset($secondaryModuleRecordStructures[$module][$blockLabel][$field]);
                         }
                     }
                 }
             }
         }
     }
     // End
     $viewer->assign('PRIMARY_MODULE_RECORD_STRUCTURE', $primaryModuleRecordStructure);
     $viewer->assign('SECONDARY_MODULE_RECORD_STRUCTURES', $secondaryModuleRecordStructures);
     $secondaryModuleIsCalendar = strpos($secondaryModules, 'Calendar');
     if ($primaryModule == 'Calendar' || $secondaryModuleIsCalendar !== FALSE) {
         $advanceFilterOpsByFieldType = Calendar_Field_Model::getAdvancedFilterOpsByFieldType();
     } else {
         $advanceFilterOpsByFieldType = Vtiger_Field_Model::getAdvancedFilterOpsByFieldType();
     }
     $viewer->assign('ADVANCED_FILTER_OPTIONS', Vtiger_Field_Model::getAdvancedFilterOptions());
     $viewer->assign('ADVANCED_FILTER_OPTIONS_BY_TYPE', $advanceFilterOpsByFieldType);
     $dateFilters = Vtiger_Field_Model::getDateFilterTypes();
     foreach ($dateFilters as $comparatorKey => $comparatorInfo) {
         $comparatorInfo['startdate'] = DateTimeField::convertToUserFormat($comparatorInfo['startdate']);
         $comparatorInfo['enddate'] = DateTimeField::convertToUserFormat($comparatorInfo['enddate']);
         $comparatorInfo['label'] = vtranslate($comparatorInfo['label'], $module);
         $dateFilters[$comparatorKey] = $comparatorInfo;
     }
     $viewer->assign('DATE_FILTERS', $dateFilters);
     $viewer->assign('LINEITEM_FIELD_IN_CALCULATION', $reportModel->showLineItemFieldsInFilter(false));
     $viewer->assign('DETAILVIEW_LINKS', $detailViewLinks);
     $viewer->assign('REPORT_MODEL', $reportModel);
     $viewer->assign('RECORD_ID', $recordId);
     $viewer->assign('COUNT', $this->count);
     $viewer->assign('MODULE', $moduleName);
     // SalesPlatform.ru begin
     // If it is a custom report
     if (in_array($reportModel->getReportType(), getCustomReportsList())) {
         // Only equals filter
         $customAdvanceFilterOpsByFieldType = array('V' => array('e'), 'N' => array('e'), 'T' => array('e'), 'I' => array('e'), 'C' => array('e'), 'D' => array('e'), 'DT' => array('e'), 'I' => array('e'), 'NN' => array('e'), 'E' => array('e'));
         $spPaymentsRecordStructure = $recordStructureInstance->getStructure('SPPayments');
         foreach ($spPaymentsRecordStructure as $blockLabel => $blockFields) {
             foreach ($blockFields as $field => $object) {
                 if ($field != 'pay_date' && $field != 'assigned_user_id' && $field != 'payer') {
                     unset($spPaymentsRecordStructure[$blockLabel][$field]);
                 }
             }
         }
         $customBlockName = 'CUSTOM_BLOCK';
         $customRecordStructure[$customBlockName] = $spPaymentsRecordStructure['LBL_PAYMENT_DETAILS'];
         // Check date filter for custom report
         if (!in_array($reportModel->getReportType(), getCustomReportsListWithDateFilter())) {
             unset($customRecordStructure[$customBlockName]['pay_date']);
         }
         // Check owner filter for custom report
         if (!in_array($reportModel->getReportType(), getCustomReportsListWithOwnerFilter())) {
             unset($customRecordStructure[$customBlockName]['assigned_user_id']);
         }
         // Check account filter for custom report
         if (!in_array($reportModel->getReportType(), getCustomReportsListWithAccountFilter())) {
             unset($customRecordStructure[$customBlockName]['payer']);
         }
         $viewer->assign('PRIMARY_MODULE_RECORD_STRUCTURE', $customRecordStructure);
         $viewer->assign('ADVANCED_FILTER_OPTIONS_BY_TYPE', $customAdvanceFilterOpsByFieldType);
         $viewer->view('SPReportHeader.tpl', $moduleName);
     } else {
         $viewer->view('ReportHeader.tpl', $moduleName);
     }
     // SalesPlatform.ru end
 }