예제 #1
0
 public function process(Vtiger_Request $request)
 {
     $mode = $request->getMode();
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportModel->setModule('Reports');
     $reportModel->set('advancedFilter', $request->get('advanced_filter'));
     $page = $request->get('page');
     $pagingModel = new Vtiger_Paging_Model();
     $pagingModel->set('page', $page);
     $pagingModel->set('limit', Reports_Detail_View::REPORT_LIMIT);
     if ($mode === 'save') {
         $reportModel->saveAdvancedFilters();
         $reportData = $reportModel->getReportData($pagingModel);
         $data = $reportData['data'];
     } else {
         if ($mode === 'generate') {
             $reportData = $reportModel->generateData($pagingModel);
             $data = $reportData['data'];
         }
     }
     $calculation = $reportModel->generateCalculationData();
     $viewer->assign('PRIMARY_MODULE', $reportModel->getPrimaryModule());
     $viewer->assign('CALCULATION_FIELDS', $calculation);
     $viewer->assign('DATA', $data);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('PAGING_MODEL', $pagingModel);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('NEW_COUNT', $reportData['count']);
     $viewer->assign('REPORT_RUN_INSTANCE', ReportRun::getInstance($record));
     $viewer->view('ReportContents.tpl', $moduleName);
 }
예제 #2
0
 public function process(Vtiger_Request $request)
 {
     $mode = $request->getMode();
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportModel->setModule('Reports');
     $reportModel->set('advancedFilter', $request->get('advanced_filter'));
     $secondaryModules = $reportModel->getSecondaryModules();
     if (empty($secondaryModules)) {
         $viewer->assign('CLICK_THROUGH', true);
     }
     $dataFields = $request->get('datafields', 'count(*)');
     if (is_string($dataFields)) {
         $dataFields = array($dataFields);
     }
     $reportModel->set('reporttypedata', Zend_Json::encode(array('type' => $request->get('charttype', 'pieChart'), 'groupbyfield' => $request->get('groupbyfield'), 'datafields' => $dataFields)));
     $reportModel->set('reporttype', 'chart');
     $reportModel->save();
     $reportChartModel = Reports_Chart_Model::getInstanceById($reportModel);
     $data = $reportChartModel->getData();
     $viewer->assign('CHART_TYPE', $reportChartModel->getChartType());
     $viewer->assign('DATA', json_encode($data, JSON_HEX_APOS));
     $viewer->assign('MODULE', $moduleName);
     $viewer->view('ChartReportContents.tpl', $moduleName);
 }
예제 #3
0
 /**
  * Function to get related Records count from this relation
  * @param <Vtiger_Request> $request
  * @return <Number> Number of record from this relation
  */
 public function getRecordsCount(Vtiger_Request $request)
 {
     $record = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportModel->setModule('Reports');
     $reportModel->set('advancedFilter', $request->get('advanced_filter'));
     $advFilterSql = $reportModel->getAdvancedFilterSQL();
     $query = $reportModel->getReportSQL($advFilterSql, 'PDF');
     $countQuery = $reportModel->generateCountQuery($query);
     $count = $reportModel->getReportsCount($countQuery);
     $response = new Vtiger_Response();
     $response->setResult($count);
     $response->emit();
 }
예제 #4
0
 public function process(Vtiger_Request $request)
 {
     $moduleName = $request->getModule();
     $recordId = $request->get('record');
     $response = new Vtiger_Response();
     $recordModel = Reports_Record_Model::getInstanceById($recordId, $moduleName);
     if (!$recordModel->isDefault() && $recordModel->isEditable()) {
         $recordModel->delete();
         $response->setResult(array(vtranslate('LBL_REPORTS_DELETED_SUCCESSFULLY', $parentModule)));
     } else {
         $response->setError(vtranslate('LBL_REPORT_DELETE_DENIED', $moduleName));
     }
     $response->emit();
 }
예제 #5
0
 /**
  * Function displays the report in printable format
  * @param Vtiger_Request $request
  */
 function GetPrintReport(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $recordId = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($recordId);
     $printData = $reportModel->getReportPrint();
     $viewer->assign('REPORT_NAME', $reportModel->getName());
     $viewer->assign('PRINT_DATA', $printData['data'][0]);
     $viewer->assign('TOTAL', $printData['total']);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('ROW', $printData['data'][1]);
     $viewer->view('PrintReport.tpl', $moduleName);
 }
예제 #6
0
 public function process(Vtiger_Request $request)
 {
     $mode = $request->getMode();
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportModel->setModule('Reports');
     $reportModel->set('advancedFilter', $request->get('advanced_filter'));
     $page = $request->get('page');
     $pagingModel = new Vtiger_Paging_Model();
     $pagingModel->set('page', $page);
     $pagingModel->set('limit', Reports_Detail_View::REPORT_LIMIT);
     if ($mode === 'save') {
         $reportModel->saveAdvancedFilters();
         $reportData = $reportModel->getReportData($pagingModel);
         $data = $reportData['data'];
     } else {
         if ($mode === 'generate') {
             $reportData = $reportModel->generateData($pagingModel);
             $data = $reportData['data'];
         }
     }
     $calculation = $reportModel->generateCalculationData();
     /*убираем ненужные столбцы*/
     $columns = array('SUM' => false, 'AVG' => false, 'MIN' => false, 'MAX' => false);
     foreach ($calculation as $metriks) {
         foreach ($metriks as $index => $metrik) {
             $postfix = substr($index, -3, 3);
             if ($columns[$postfix]) {
                 continue;
             }
             if (!empty($metrik)) {
                 $columns[$postfix] = true;
             }
         }
     }
     $viewer->assign('COLUMNS', $columns);
     /*end*/
     $viewer->assign('PRIMARY_MODULE', $reportModel->getPrimaryModule());
     $viewer->assign('CALCULATION_FIELDS', $calculation);
     $viewer->assign('DATA', $data);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('PAGING_MODEL', $pagingModel);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('NEW_COUNT', $reportData['count']);
     $viewer->assign('REPORT_RUN_INSTANCE', ReportRun::getInstance($record));
     $viewer->view('ReportContents.tpl', $moduleName);
 }
예제 #7
0
 public function process(Vtiger_Request $request)
 {
     $parentModule = 'Reports';
     $reportIdsList = Reports_Record_Model::getRecordsListFromRequest($request);
     $folderId = $request->get('folderid');
     if (!empty($reportIdsList)) {
         foreach ($reportIdsList as $reportId) {
             $reportModel = Reports_Record_Model::getInstanceById($reportId);
             if (!$reportModel->isDefault() && $reportModel->isEditable()) {
                 $reportModel->move($folderId);
             } else {
                 $reportsMoveDenied[] = vtranslate($reportModel->getName(), $parentModule);
             }
         }
     }
     $response = new Vtiger_Response();
     if (empty($reportsMoveDenied)) {
         $response->setResult(array(vtranslate('LBL_REPORTS_MOVED_SUCCESSFULLY', $parentModule)));
     } else {
         $response->setError($reportsMoveDenied, vtranslate('LBL_DENIED_REPORTS', $parentModule));
     }
     $response->emit();
 }
예제 #8
0
 public function process(Vtiger_Request $request)
 {
     $parentModule = 'Reports';
     $recordIds = Reports_Record_Model::getRecordsListFromRequest($request);
     $reportsDeleteDenied = array();
     foreach ($recordIds as $recordId) {
         $recordModel = Reports_Record_Model::getInstanceById($recordId);
         if (!$recordModel->isDefault() && $recordModel->isEditable()) {
             $success = $recordModel->delete();
             if (!$success) {
                 $reportsDeleteDenied[] = vtranslate($recordModel->getName(), $parentModule);
             }
         } else {
             $reportsDeleteDenied[] = vtranslate($recordModel->getName(), $parentModule);
         }
     }
     $response = new Vtiger_Response();
     if (empty($reportsDeleteDenied)) {
         $response->setResult(array(vtranslate('LBL_REPORTS_DELETED_SUCCESSFULLY', $parentModule)));
     } else {
         $response->setError($reportsDeleteDenied, vtranslate('LBL_DENIED_REPORTS', $parentModule));
     }
     $response->emit();
 }
예제 #9
0
 public function sendEmail()
 {
     require_once 'vtlib/Vtiger/Mailer.php';
     $vtigerMailer = new Vtiger_Mailer();
     $recipientEmails = $this->getRecipientEmails();
     Vtiger_Utils::ModuleLog('ScheduleReprots', $recipientEmails);
     foreach ($recipientEmails as $name => $email) {
         $vtigerMailer->AddAddress($email, $name);
     }
     vimport('~modules/Report/models/Record.php');
     $reportRecordModel = Reports_Record_Model::getInstanceById($this->get('reportid'));
     $currentTime = date('Y-m-d.H.i.s');
     Vtiger_Utils::ModuleLog('ScheduleReprots Send Mail Start ::', $currentTime);
     $reportname = decode_html($reportRecordModel->getName());
     $subject = $reportname;
     Vtiger_Utils::ModuleLog('ScheduleReprot Name ::', $reportname);
     $vtigerMailer->Subject = $subject;
     $vtigerMailer->Body = $this->getEmailContent($reportRecordModel);
     $vtigerMailer->IsHTML();
     $baseFileName = $reportname . '__' . $currentTime;
     $oReportRun = ReportRun::getInstance($this->get('reportid'));
     $reportFormat = $this->scheduledFormat;
     $attachments = array();
     if ($reportFormat == 'CSV') {
         $fileName = $baseFileName . '.csv';
         $filePath = 'storage/' . $fileName;
         $attachments[$fileName] = $filePath;
         $oReportRun->writeReportToCSVFile($filePath);
     }
     foreach ($attachments as $attachmentName => $path) {
         $vtigerMailer->AddAttachment($path, decode_html($attachmentName));
     }
     //Added cc to account owner
     $accountOwnerId = Users::getActiveAdminId();
     $vtigerMailer->AddCC(getUserEmail($accountOwnerId), getUserFullName($accountOwnerId));
     $status = $vtigerMailer->Send(true);
     foreach ($attachments as $attachmentName => $path) {
         unlink($path);
     }
     return $status;
 }
예제 #10
0
 function getReport(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportChartModel = Reports_Chart_Model::getInstanceById($reportModel);
     $secondaryModules = $reportModel->getSecondaryModules();
     if (empty($secondaryModules)) {
         $viewer->assign('CLICK_THROUGH', true);
     }
     $viewer->assign('ADVANCED_FILTERS', $request->get('advanced_filter'));
     $viewer->assign('PRIMARY_MODULE_FIELDS', $reportModel->getPrimaryModuleFields());
     $viewer->assign('SECONDARY_MODULE_FIELDS', $reportModel->getSecondaryModuleFields());
     $viewer->assign('CALCULATION_FIELDS', $reportModel->getModuleCalculationFieldsForReport());
     $data = $reportChartModel->getData();
     $viewer->assign('CHART_TYPE', $reportChartModel->getChartType());
     $viewer->assign('DATA', json_encode($data, JSON_HEX_APOS));
     $viewer->assign('REPORT_MODEL', $reportModel);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('REPORT_MODEL', $reportModel);
     $viewer->assign('SECONDARY_MODULES', $secondaryModules);
     $viewer->assign('MODULE', $moduleName);
     $viewer->view('ChartReportContents.tpl', $moduleName);
 }
예제 #11
0
 function getReport(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $page = $request->get('page');
     $data = $this->reportData;
     $calculation = $this->calculationFields;
     if (empty($data)) {
         $reportModel = Reports_Record_Model::getInstanceById($record);
         $reportModel->setModule('Reports');
         $reportType = $reportModel->get('reporttype');
         $pagingModel = new Vtiger_Paging_Model();
         $pagingModel->set('page', $page);
         $pagingModel->set('limit', self::REPORT_LIMIT + 1);
         $reportData = $reportModel->getReportData($pagingModel);
         $data = $reportData['data'];
         $calculation = $reportModel->getReportCalulationData();
         $advFilterSql = $reportModel->getAdvancedFilterSQL();
         $query = $reportModel->getReportSQL($advFilterSql, 'PDF');
         $countQuery = $reportModel->generateCountQuery($query);
         $this->count = $reportModel->getReportsCount($countQuery);
     }
     $viewer->assign('CALCULATION_FIELDS', $calculation);
     $viewer->assign('DATA', $data);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('PAGING_MODEL', $pagingModel);
     $viewer->assign('COUNT', $this->count);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('REPORT_RUN_INSTANCE', ReportRun::getInstance($record));
     if (count($data) > self::REPORT_LIMIT) {
         $viewer->assign('LIMIT_EXCEEDED', true);
     }
     $viewer->view('ReportContents.tpl', $moduleName);
 }
예제 #12
0
 public function deleteRaports()
 {
     global $log, $adb;
     $log->debug("Entering VT620_to_YT::deleteRaports() method ...");
     $restrictedRaports = array('Contacts by Accounts', 'Contacts without Accounts', 'Contacts by Potentials', 'Lead by Source', 'Lead Status Report', 'Potential Pipeline', 'Closed Potentials', 'Last Month Activities', 'This Month Activities', 'Tickets by Products', 'Tickets by Priority', 'Open Tickets', 'Product Details', 'Products by Contacts', 'Open Quotes', 'Quotes Detailed Report', 'PurchaseOrder by Contacts', 'PurchaseOrder Detailed Report', 'Invoice Detailed Report', 'SalesOrder Detailed Report', 'Campaign Expectations and Actuals', 'Contacts Email Report', 'Accounts Email Report', 'Leads Email Report', 'Vendors Email Report');
     $sql = "SELECT * FROM `vtiger_report` WHERE reportname IN (" . generateQuestionMarks($restrictedRaports) . ")";
     $result = $adb->pquery($sql, $restrictedRaports);
     $num = $adb->num_rows($result);
     $moduleModel = Vtiger_Module_Model::getInstance('Reports');
     for ($i = 0; $i < $num; $i++) {
         $reportId = $adb->query_result($result, $i, "reportid");
         $recordModel = Reports_Record_Model::getInstanceById($reportId, 'Reports');
         $recordModel->delete();
     }
     $log->debug("Exiting VT620_to_YT::deleteRaports() method ...");
 }
예제 #13
0
 function getReport(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $page = $request->get('page');
     $data = $this->reportData;
     $calculation = $this->calculationFields;
     if (empty($data)) {
         $reportModel = Reports_Record_Model::getInstanceById($record);
         $reportModel->setModule('Reports');
         $pagingModel = new Vtiger_Paging_Model();
         $pagingModel->set('page', $page);
         $pagingModel->set('limit', self::REPORT_LIMIT + 1);
         $data = $reportModel->getReportData($pagingModel);
         $calculation = $reportModel->getReportCalulationData();
     }
     $viewer->assign('CALCULATION_FIELDS', $calculation);
     $viewer->assign('DATA', $data);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('PAGING_MODEL', $pagingModel);
     $viewer->assign('MODULE', $moduleName);
     if (count($data) > self::REPORT_LIMIT) {
         $viewer->assign('LIMIT_EXCEEDED', true);
     }
     $viewer->view('ReportContents.tpl', $moduleName);
 }
예제 #14
0
 function getReport(Vtiger_Request $request)
 {
     $viewer = $this->getViewer($request);
     $moduleName = $request->getModule();
     $record = $request->get('record');
     $page = $request->get('page');
     //$data = $this->reportData; //TODO
     $calculation = $this->calculationFields;
     //if(empty($data)){
     $reportModel = Reports_Record_Model::getInstanceById($record);
     $reportModel->setModule('Reports');
     $reportType = $reportModel->get('reporttype');
     $pagingModel = new Vtiger_Paging_Model();
     $pagingModel->set('page', $page);
     $pagingModel->set('limit', self::REPORT_LIMIT + 1);
     $reportData = $reportModel->getReportData($pagingModel);
     $data = $reportData['data'];
     $dataRaw = $reportData['data_raw'];
     $calculation = $reportModel->getReportCalulationData();
     $advFilterSql = $reportModel->getAdvancedFilterSQL();
     $query = $reportModel->getReportSQL($advFilterSql, 'PDF');
     $countQuery = $reportModel->generateCountQuery($query);
     $this->count = $reportModel->getReportsCount($countQuery);
     //}
     /*готовим данные в нужный нам формат для новой таблицы*/
     /*получим поле для группировки*/
     global $adb;
     $reportRun = ReportRun::getInstance($record);
     $fieldRawArr = $reportRun->getGroupingList();
     foreach ($fieldRawArr as $value) {
         $fieldRaw = explode('_', $value, 2);
         break;
     }
     $groupModule = str_replace('`', '', $fieldRaw[0]);
     $groupLabel = explode(' ', $fieldRaw[1], 2);
     $groupLabel = str_replace('`', '', $groupLabel[0]);
     //это системное имя, нужен перевод
     $fieldInfo = getFieldByReportLabel($groupModule, $groupLabel);
     $fieldType = null;
     if (!empty($fieldInfo)) {
         $field = WebserviceField::fromArray($adb, $fieldInfo);
         $fieldType = $field->getFieldDataType();
     }
     if (!empty($fieldInfo)) {
         $translatedLabel = getTranslatedString($field->getFieldLabelKey(), $groupModule);
     } else {
         $translatedLabel = getTranslatedString($groupLabel, $groupModule);
         $translatedLabel = str_replace("_", " ", $translatedLabel);
     }
     $groupLabel = $translatedLabel;
     /*STRING TRANSLATION starts  TODO*/
     /*$moduleLabel ='';
                 if(in_array($module,$modules_selected))
                     $moduleLabel = getTranslatedString($module,$module);
                 if(empty($translatedLabel)) {
                         $translatedLabel = getTranslatedString(str_replace('_', " ",
                             $fld->name), $module);
     
                 }*/
     /*if(!empty($this->secondarymodule)) {
           if($moduleLabel != '') {
               $headerLabel = $moduleLabel." ". $translatedLabel;
           }
       }*/
     /*формируем нужный массив*/
     $dataGrouped = array();
     foreach ($data as $index => $row) {
         $groupIndex = $row[$groupLabel];
         if (!isset($dataGrouped[$groupIndex])) {
             $dataGrouped[$groupIndex] = array('rows' => array(), 'summary' => array());
         }
         $dataGrouped[$groupIndex]['rows'][] = $row;
         foreach ($row as $reportField => $value) {
             $dataRawVal = explode('::', $dataRaw[$index][$reportField]);
             $dataRawType = empty($dataRawVal[1]) ? 'undefined' : $dataRawVal[1];
             $dataRawVal = $dataRawVal[0];
             if (!isset($dataGrouped[$groupIndex]['summary'][$reportField])) {
                 if ($dataRawType == 'currency') {
                     $dataRawVal = $dataRawVal + 0;
                 }
                 if (empty($dataRawType)) {
                     $dataRawVal = (string) $dataRawVal;
                 }
                 $dataGrouped[$groupIndex]['summary'][$reportField] = $dataRawVal;
             } elseif ($dataRawType == 'currency') {
                 /*можно позже добавить другие типы данных*/
                 $summed = $dataGrouped[$groupIndex]['summary'][$reportField] + $dataRawVal;
                 $dataGrouped[$groupIndex]['summary'][$reportField] = $summed;
                 /*todo переделать в пользовательский формат*/
             }
         }
     }
     /*end*/
     /*убираем ненужные столбцы*/
     $columns = array('SUM' => false, 'AVG' => false, 'MIN' => false, 'MAX' => false);
     foreach ($calculation as $metriks) {
         foreach ($metriks as $index => $metrik) {
             $postfix = substr($index, -3, 3);
             if ($columns[$postfix]) {
                 continue;
             }
             if (!empty($metrik)) {
                 $columns[$postfix] = true;
             }
         }
     }
     $viewer->assign('COLUMNS', $columns);
     /*end*/
     $viewer->assign('CALCULATION_FIELDS', $calculation);
     $viewer->assign('DATA', $data);
     $viewer->assign('DATAGROUPED', $dataGrouped);
     $viewer->assign('RECORD_ID', $record);
     $viewer->assign('PAGING_MODEL', $pagingModel);
     $viewer->assign('COUNT', $this->count);
     $viewer->assign('MODULE', $moduleName);
     $viewer->assign('REPORT_RUN_INSTANCE', ReportRun::getInstance($record));
     if (count($data) > self::REPORT_LIMIT) {
         $viewer->assign('LIMIT_EXCEEDED', true);
     }
     $viewer->view('ReportContents.tpl', $moduleName);
 }