lvd = new ListViewData(); $this->searchColumns = array(); } function shouldProcess($moduleDir) { if (!empty($GLOBALS['sugar_config']['save_query']) && $GLOBALS['sugar_config']['save_query'] == 'populate_only') { if (empty($GLOBALS['displayListView']) && (!empty($_REQUEST['clear_query']) || $_REQUEST['module'] == $moduleDir && ((empty($_REQUEST['query']) || $_REQUEST['query'] == 'MSI') && (empty($_SESSION['last_search_mod']) || $_SESSION['last_search_mod'] != $moduleDir)))) { $_SESSION['last_search_mod'] = $_REQUEST['module']; $this->should_process = false; return false; } } $this->should_process = true; return true; } /** * Setup the class * @param seed SugarBean Seed SugarBean to use * @param file File Template file to use * @param string $where * @param offset:0 int offset to start at * @param int:-1 $limit * @param string[]:array() $filter_fields * @param array:array() $params * Potential $params are * $params['distinct'] = use distinct key word * $params['include_custom_fields'] = (on by default) * $params['massupdate'] = true by default; * $params['handleMassupdate'] = true by default, have massupdate.php handle massupdates? * @param string:'id' $id_field */ function setup($seed, $file, $where, $params = array(), $offset = 0, $limit = -1, $filter_fields = array(), $id_field = 'id') { $this->should_process = true; if (isset ($seed->module_dir) && !$this->shouldProcess($seed->module_dir)) { return false; } if (isset ($params ['export'])) { $this->export = $params ['export']; } if (!empty ($params ['multiSelectPopup'])) { $this->multi_select_popup = $params ['multiSelectPopup']; } if (!empty ($params ['massupdate']) && $params ['massupdate'] != false) { $this->show_mass_update_form = true; $this->mass = new MassUpdate (); $this->mass->setSugarBean($seed); if (!empty ($params ['handleMassupdate']) || !isset ($params ['handleMassupdate'])) { $this->mass->handleMassUpdate(); } } $this->seed = $seed; // create filter fields based off of display columns if (empty ($filter_fields) || $this->mergeDisplayColumns) { foreach ($this->displayColumns as $columnName => $def) { $filter_fields [strtolower($columnName)] = true; if (isset ($this->seed->field_defs [strtolower($columnName)] ['type']) && strtolower($this->seed->field_defs [strtolower($columnName)] ['type']) == 'currency' && isset ($this->seed->field_defs ['currency_id'])) { $filter_fields ['currency_id'] = true; } if (!empty ($def ['related_fields'])) { foreach ($def ['related_fields'] as $field) { // id column is added by query construction function. This addition creates duplicates // and causes issues in oracle. #10165 if ($field != 'id') { $filter_fields [$field] = true; } } } if (!empty ($this->seed->field_defs [strtolower($columnName)] ['db_concat_fields'])) { foreach ($this->seed->field_defs [strtolower($columnName)] ['db_concat_fields'] as $index => $field) { if (!isset ($filter_fields [strtolower($field)]) || !$filter_fields [strtolower($field)]) { $filter_fields [strtolower($field)] = true; } } } } foreach ($this->searchColumns as $columnName => $def) { $filter_fields [strtolower($columnName)] = true; } } $filter_fields['canceled'] = true; $data = $this->lvd->getListViewData($seed, $where, $offset, $limit, $filter_fields, $params, $id_field); // add mz 2015-03-18 //var_dump($filter_fields); // add summary row to list view //echo '
';
        //var_dump($_REQUEST);
        //echo '
'; $sum = array(); $db = $GLOBALS ['db']; $showSumRow = false; $list_pdf_settings = array(); $list_pdf_settings['module'] = $_REQUEST['module']; $list_pdf_settings['table'] = $this->seed->table_name; $list_pdf_settings['where'] = base64_encode($where); $list_pdf_settings['order'] = $_SESSION['lvd']['last_ob']; $list_pdf_settings['direction'] = $_SESSION['lvd']['direction']; $list_pdf_settings['fields'] = array(); //filter fields if ($_REQUEST['searchFormTab'] == "basic_search") $formType = 'basic'; else $formType = 'advanced'; if ($_REQUEST['register_date_' . $formType . '_from'] != "") $list_pdf_settings['date_from'] = $_REQUEST['register_date_' . $formType . '_from']; if ($_REQUEST['register_date_' . $formType . '_to'] != "") $list_pdf_settings['date_to'] = $_REQUEST['register_date_' . $formType . '_to']; if ($_REQUEST['ecmproductstockindex_id_' . $formType]) $list_pdf_settings['ecmproductstockindex_id'] = $_REQUEST['ecmproductstockindex_id_' . $formType]; if (is_array($_REQUEST['stock_in_id_' . $formType])) { $list_pdf_settings['stocks_in'] = array(); foreach ($_REQUEST['stock_in_id_' . $formType] as $k => $v) $list_pdf_settings['stocks_in'][] = $v; } if (is_array($_REQUEST['stock_out_id_' . $formType])) { $list_pdf_settings['stocks_out'] = array(); foreach ($_REQUEST['stock_out_id_' . $formType] as $k => $v) $list_pdf_settings['stocks_out'][] = $v; } if (is_array($_REQUEST['stock_id_' . $formType])) { $list_pdf_settings['stocks'] = array(); foreach ($_REQUEST['stock_id_' . $formType] as $k => $v) $list_pdf_settings['stocks'][] = $v; } foreach ($this->displayColumns as $name => $val) { $tmp = array(); $tmp['name'] = strtolower($name); $tmp['label'] = $this->displayColumns[$name]['label']; if ($this->displayColumns [$name] ['sumType'] == 'sum') { $innerJoin = ""; $aditiona_where = ""; $wal_query = "select * from currency_nbp_archive order by date desc limit 3"; $ik = $db->query($wal_query); $wal = []; while ($walutki = $db->fetchByAssoc($ik)) { $wal[$walutki['currency_id']] = $walutki['value']; } if ($_REQUEST['module'] != 'EcmSales') { $sum_q = "SELECT SUM(" . strtolower($name) . ") as sum FROM " . $this->seed->table_name; $aditiona_where = " AND canceled ='0'"; } else { $sum_q = "SELECT SUM(IF(ecmsales.currency_id = '6336d9a0-ee5f-52e3-7d0c-4e6f1472b2bf', total_netto * " . $wal['6336d9a0-ee5f-52e3-7d0c-4e6f1472b2bf'] . ", IF(ecmsales.currency_id = '98b2b752-b0be-37c2-d2eb-511e29f81cab', total_netto * " . $wal['98b2b752-b0be-37c2-d2eb-511e29f81cab'] . ", IF(ecmsales.currency_id = '3c8d317e-513b-9a9b-d0e6-511e2abee625', total_netto * " . $wal['3c8d317e-513b-9a9b-d0e6-511e2abee625'] . ", total_netto)))) AS sum FROM ecmsales"; } if ($where && $where != " ") { $sum_q .= $innerJoin . " WHERE deleted='0' AND " . $where . ' ' . $aditiona_where; } else { $sum_q .= $innerJoin . " WHERE deleted='0' " . $aditiona_where; } $back = $db->fetchByAssoc($db->query($sum_q)); $sum [$name] = $back['sum']; $showSumRow = true; $tmp['summary'] = $back['sum']; $list_pdf_settings['showSum'] = '1'; } else if ($this->displayColumns [$name] ['sumType'] == 'avg') { $sum_q = "SELECT AVG(" . strtolower($name) . ") as avg FROM " . $this->seed->table_name; if ($where && $where != " ") $sum_q .= " WHERE canceled='0' AND " . $where; $back = $db->fetchByAssoc($db->query($sum_q)); $sum [$name] = $back['avg']; $showSumRow = true; $tmp['summary'] = $back['avg']; $list_pdf_settings['showSum'] = '1'; } else if ($this->displayColumns [$name] ['sumType'] == 'func') { $func = $this->displayColumns [$name] ['sumFunc']; if (method_exists($seed->object_name, $func) == false) echo 'ListView Summary Error: Method ' . $seed->object_name . ':' . $func . ' not exist.
'; else { $sum[$name] = call_user_func(array($seed->object_name, $func), $where); $tmp['summary'] = $sum[$name]; $list_pdf_settings['showSum'] = '1'; } } $list_pdf_settings['fields'][] = $tmp; unset($tmp); } $_SESSION['ee'] = base64_encode(json_encode($list_pdf_settings)); if ($showSumRow == true) { $sum['showSumRow'] = true; $data ['data'] [] = $sum; } foreach ($this->displayColumns as $columnName => $def) { $seedName = strtolower($columnName); if (!empty ($this->lvd->seed->field_defs [$seedName])) { $seedDef = $this->lvd->seed->field_defs [$seedName]; } if (empty ($this->displayColumns [$columnName] ['type'])) { if (!empty ($seedDef ['type'])) { $this->displayColumns [$columnName] ['type'] = (!empty ($seedDef ['custom_type'])) ? $seedDef ['custom_type'] : $seedDef ['type']; } else { $this->displayColumns [$columnName] ['type'] = ''; } } // fi empty(...) if (!empty ($seedDef ['options'])) { $this->displayColumns [$columnName] ['options'] = $seedDef ['options']; } // C.L. Fix for 11177 if ($this->displayColumns [$columnName] ['type'] == 'html') { $cField = $this->seed->custom_fields; if (isset ($cField) && isset ($cField->bean->$seedName)) { $seedName2 = strtoupper($columnName); $htmlDisplay = html_entity_decode($cField->bean->$seedName); $count = 0; while ($count < count($data ['data'])) { $data ['data'] [$count] [$seedName2] = &$htmlDisplay; $count++; } } } // fi == 'html' if (!empty ($seedDef ['sort_on'])) { $this->displayColumns [$columnName] ['orderBy'] = $seedDef ['sort_on']; } if (isset ($seedDef)) { // Merge the two arrays together, making sure the seedDef doesn't override anything explicitly set in the displayColumns array. $this->displayColumns [$columnName] = $this->displayColumns [$columnName] + $seedDef; } // C.L. Bug 38388 - ensure that ['id'] is set for related fields if (!isset ($this->displayColumns [$columnName] ['id']) && isset ($this->displayColumns [$columnName] ['id_name'])) { $this->displayColumns [$columnName] ['id'] = strtoupper($this->displayColumns [$columnName] ['id_name']); } } $this->process($file, $data, $seed->object_name); return true; } /** * Any additional processing * @param file File template file to use * @param data array row data * @param html_var string html string to be passed back and forth */ function process($file, $data, $htmlVar) { $this->rowCount = count($data['data']); $this->moduleString = $data['pageData']['bean']['moduleDir'] . '2_' . strtoupper($htmlVar) . '_offset'; } /** * Display the listview * @return string ListView contents */ function display() { if (!$this->should_process) return ''; $str = ''; if ($this->multiSelect == true && $this->show_mass_update_form) $str = $this->mass->getDisplayMassUpdateForm(true, $this->multi_select_popup) . $this->mass->getMassUpdateFormHeader($this->multi_select_popup); return $str; } /** * Display the select link * @param echo Bool set true if you want it echo'd, set false to have contents returned * @return string select link html */ function buildSelectLink($id = 'select_link', $total = 0, $pageTotal = 0) { global $app_strings; if ($pageTotal < 0) $pageTotal = $total; $script = ""; $script .= "" . ""; return $script; } /** * Display the actions link * * @param string $id link id attribute, defaults to 'actions_link' * @return string HTML source */ protected function buildActionsLink($id = 'actions_link') { global $app_strings; $closeText = ""; $moreDetailImage = SugarThemeRegistry::current()->getImageURL('MoreDetail.png'); $menuItems = ''; /* // delete if ( ACLController::checkAccess($this->seed->module_dir,'delete',true) && $this->delete ) $menuItems .= $this->buildDeleteLink(); // compose email if ( isset($_REQUEST['module']) && $_REQUEST['module'] != 'Users' && $_REQUEST['module'] != 'Employees' && ( SugarModule::get($_REQUEST['module'])->moduleImplements('Company') || SugarModule::get($_REQUEST['module'])->moduleImplements('Person') ) ) $menuItems .= $this->buildComposeEmailLink($this->data['pageData']['offsets']['total']); // mass update $mass = new MassUpdate(); $mass->setSugarBean($this->seed); if ( ACLController::checkAccess($this->seed->module_dir,'edit',true) && $this->showMassupdateFields && $mass->doMassUpdateFieldsExistForFocus() ) $menuItems .= $this->buildMassUpdateLink(); // merge if ( $this->mailMerge ) $menuItems .= $this->buildMergeLink(); if ( $this->mergeduplicates ) $menuItems .= $this->buildMergeDuplicatesLink(); // add to target list if ( isset($_REQUEST['module']) && in_array($_REQUEST['module'],array('Contacts','Prospects','Leads','Accounts'))) $menuItems .= $this->buildTargetList(); // favorites ( for reports ) if ( isset($_REQUEST['module']) && ($_REQUEST['module'] == 'Reports') && (isset($_REQUEST['favorite']) && $_REQUEST['favorite'] == 1) ) $menuItems .= $this->buildRemoveFavoritesLink(); elseif ( isset($_REQUEST['module']) && ($_REQUEST['module'] == 'Reports') ) $menuItems .= $this->buildFavoritesLink(); // export if ( ACLController::checkAccess($this->seed->module_dir,'export',true) && $this->export ) $menuItems .= $this->buildExportLink(); */ // mh if ($_REQUEST['module'] == 'EcmServices') { // Close $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_CLOSE'] . ''; // FK $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_INVOICE'] . ''; // RW $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_SERVICE_RW'] . ''; } global $current_user; //add mz 2012-04-02 //add component in InsideOrders if ($_REQUEST['module'] == 'EcmInsideOrders') $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_IMPORT_COMPONENTS'] . ''; if ($_REQUEST['module'] == 'Documents') { $this->actionsMenuExtraItems[] = 'Zmień status na: do zapłaty'; $this->actionsMenuExtraItems[] = 'Zmień status na: przekazano do autoryzacji'; $this->actionsMenuExtraItems[] = 'Zmień status na: zapłacono'; $this->actionsMenuExtraItems[] = 'Zmień status na: kompensata'; if ($current_user->id != '6826e9ec-9e04-4f3b-76fc-4ce320b4e459' || $current_user->id != 'd8d28f31-6f5c-cd1c-f196-4ce31f2cb55e') { $this->actionsMenuExtraItems[] = 'Zmień status na: Inne'; } } //create PZ from selected PurchaseOrders in action menu if ($_REQUEST['module'] == 'EcmPurchaseOrders') $this->actionsMenuExtraItems[] = 'Wystaw fakturę'; //create Invoice from selected WZ Documents in action menu if ($_REQUEST['module'] == 'EcmStockDocOuts') $this->actionsMenuExtraItems[] = '' . $GLOBALS['mod_strings']['LBL_LISTVIEW_CREATE_INVOICE'] . ''; if ($_REQUEST['module'] == 'Accounts') { $this->actionsMenuExtraItems[] = ' Pokaż na mapie '; $this->actionsMenuExtraItems[] = ' Wyślij email '; $this->actionsMenuExtraItems[] = ' Udostępnij '; } if ($_REQUEST['module'] == 'EcmProducts') { $this->actionsMenuExtraItems[] = ' Udostępnij '; } if ($_REQUEST['module'] == 'EcmSales') { $this->actionsMenuExtraItems[] = ' Wystaw dokument WZ '; $this->actionsMenuExtraItems[] = ' Lista komponentów '; // $this->actionsMenuExtraItems[] = 'Zmień status'; } if ($_REQUEST['module'] == 'EcmInvoiceOuts') { $this->actionsMenuExtraItems[] = ' Generuj zbiorczy PDF '; } if ($_REQUEST['module'] == 'EcmSales') { $this->actionsMenuExtraItems[] = ' Generuj zbiorczy PDF '; } if ($_REQUEST['module'] == 'EcmStockDocOuts') { $this->actionsMenuExtraItems[] = ' Wystaw fakturę zbiorczą '; } //end mz foreach ($this->actionsMenuExtraItems as $item) $menuItems .= $item; $menuItems = str_replace('"', '\"', $menuItems); if (empty($menuItems)) return ''; return << {$app_strings['LBL_LINK_ACTIONS']}  EOHTML; } /** * Builds the export link * * @return string HTML */ protected function buildExportLink() { global $app_strings; return "{$app_strings['LBL_EXPORT']}"; } /** * Builds the massupdate link * * @return string HTML */ protected function buildMassUpdateLink() { global $app_strings; return "{$app_strings['LBL_MASS_UPDATE']}"; } /** * Builds the compose email link * * @return string HTML */ protected function buildComposeEmailLink( $totalCount ) { global $app_strings, $dictionary; if (!is_array($this->seed->field_defs)) { return ''; } $foundEmailField = false; // Search for fields that look like an email address foreach ($this->seed->field_defs as $field) { if (isset($field['type']) && $field['type'] == 'link' && isset($field['relationship']) && isset($dictionary[$this->seed->object_name]['relationships'][$field['relationship']]) && $dictionary[$this->seed->object_name]['relationships'][$field['relationship']]['rhs_module'] == 'EmailAddresses') { $foundEmailField = true; break; } } if (!$foundEmailField) { return ''; } $userPref = $GLOBALS['current_user']->getPreference('email_link_type'); $defaultPref = $GLOBALS['sugar_config']['email_default_client']; if ($userPref != '') $client = $userPref; else $client = $defaultPref; if ($client == 'sugar') $script = "' . $app_strings['LBL_EMAIL_COMPOSE'] . ''; else $script = "' . $app_strings['LBL_EMAIL_COMPOSE'] . ''; return $script; } // fn /** * Builds the favorites link ( for reports ) * * @return string HTML */ protected function buildFavoritesLink() { global $app_strings; return "{$app_strings['LBL_MARK_AS_FAVORITES']}"; } /** * Builds the remote favorites link ( for reports ) * * @return string HTML */ protected function buildRemoveFavoritesLink() { global $app_strings; return "{$app_strings['LBL_REMOVE_FROM_FAVORITES']}"; } /** * Builds the delete link * * @return string HTML */ protected function buildDeleteLink() { global $app_strings; return "{$app_strings['LBL_DELETE_BUTTON_LABEL']}"; } /** * Display the selected object span object * * @return string select object span */ function buildSelectedObjectsSpan($echo = true, $total = 0) { global $app_strings; $selectedObjectSpan = "{$app_strings['LBL_LISTVIEW_SELECTED_OBJECTS']}"; return $selectedObjectSpan; } /** * Builds the mail merge link * The link can be disabled by setting module level duplicate_merge property to false * in the moudle's vardef file. * * @return string HTML */ protected function buildMergeDuplicatesLink() { global $app_strings, $dictionary; $return_string = ''; $return_string .= isset($_REQUEST['module']) ? "&return_module={$_REQUEST['module']}" : ""; $return_string .= isset($_REQUEST['action']) ? "&return_action={$_REQUEST['action']}" : ""; $return_string .= isset($_REQUEST['record']) ? "&return_id={$_REQUEST['record']}" : ""; //need delete and edit access. if (!(ACLController::checkAccess($_REQUEST['module'], 'edit', true)) or !(ACLController::checkAccess($_REQUEST['module'], 'delete', true))) { return ''; } if (isset($dictionary[$this->seed->object_name]['duplicate_merge']) && $dictionary[$this->seed->object_name]['duplicate_merge'] == true) { return "seed->module_dir}\",\"$return_string\");} else {alert(\"{$app_strings['LBL_LISTVIEW_TWO_REQUIRED']}\");return false;}'>" . $app_strings['LBL_MERGE_DUPLICATES'] . ''; } return ''; } /** * Builds the mail merge link * * @return string HTML */ protected function buildMergeLink() { require_once('modules/MailMerge/modules_array.php'); global $current_user, $app_strings; $admin = new Administration(); $admin->retrieveSettings('system'); $user_merge = $current_user->getPreference('mailmerge_on'); $module_dir = (!empty($this->seed->module_dir) ? $this->seed->module_dir : ''); $str = ''; if ($user_merge == 'on' && isset($admin->settings['system_mailmerge_on']) && $admin->settings['system_mailmerge_on'] && !empty($modules_array[$module_dir])) { $str = "' . $app_strings['LBL_MAILMERGE'] . ''; } return $str; } /** * Builds the add to target list link * * @return string HTML */ protected function buildTargetList() { global $app_strings; $js = <<{$app_strings['LBL_ADD_TO_PROSPECT_LIST_BUTTON_LABEL']}"; } /** * Display the bottom of the ListView (ie MassUpdate * @return string contents */ function displayEnd() { $str = ''; if ($this->show_mass_update_form) { $str .= $this->mass->getMassUpdateForm(true); $str .= $this->mass->endMassUpdateForm(); } return $str; } /** * Display the multi select data box etc. * @return string contents */ function getMultiSelectData() { $str = "\n"; $massUpdateRun = isset($_REQUEST['massupdate']) && $_REQUEST['massupdate'] == 'true'; $uids = empty($_REQUEST['uid']) || $massUpdateRun ? '' : $_REQUEST['uid']; $select_entire_list = isset($_REQUEST['select_entire_list']) && !$massUpdateRun ? $_REQUEST['select_entire_list'] : 0; $str .= "\n" . "\n" . "\n"; return $str; } }