get_date_format(); $current_module_strings = return_module_language($current_language, 'Charts'); global $timedate; if (isset($_REQUEST['mypbss_refresh'])) { $refresh = $_REQUEST['mypbss_refresh']; } else { $refresh = false; } //get the dates to display $user_date_start = $current_user->getPreference('mypbss_date_start'); if (!empty($user_date_start) && !isset($_REQUEST['mypbss_date_start'])) { $date_start = $user_date_start; $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_start'] is:"); $GLOBALS['log']->debug($user_date_start); } elseif (isset($_REQUEST['mypbss_date_start']) && $_REQUEST['mypbss_date_start'] != '') { $date_start = $_REQUEST['mypbss_date_start']; $current_user->setPreference('mypbss_date_start', $_REQUEST['mypbss_date_start']); $GLOBALS['log']->debug("_REQUEST['mypbss_date_start'] is:"); $GLOBALS['log']->debug($_REQUEST['mypbss_date_start']); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_start'] is:"); $GLOBALS['log']->debug($current_user->getPreference('mypbss_date_start')); } else { $date_start = date($timedate->get_date_format(), time()); } $user_date_end = $current_user->getPreference('mypbss_date_end'); if (!empty($user_date_end) && !isset($_REQUEST['mypbss_date_end'])) { $date_end = $user_date_end; $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] is:"); $GLOBALS['log']->debug($user_date_end); } elseif (isset($_REQUEST['mypbss_date_end']) && $_REQUEST['mypbss_date_end'] != '') { $date_end = $_REQUEST['mypbss_date_end']; $current_user->setPreference('mypbss_date_end', $_REQUEST['mypbss_date_end']); $GLOBALS['log']->debug("_REQUEST['mypbss_date_end'] is:"); $GLOBALS['log']->debug($_REQUEST['mypbss_date_end']); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] is:"); $GLOBALS['log']->debug( $current_user->getPreference('mypbss_date_end')); } else { $date_end = date($timedate->get_date_format(), strtotime('2010-01-01')); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] not found. Using: ".$date_end); } // cn: format date_start|end to user's preferred $dateStartDisplay = strftime($timedate->get_user_date_format(), strtotime($date_start)); $dateEndDisplay = strftime($timedate->get_user_date_format(), strtotime($date_end)); $seps = array("-", "/"); $dates = array($date_start, $date_end); $dateFileNameSafe = str_replace($seps, "_", $dates); $dateXml[0] = $timedate->swap_formats($date_start, $user_dateFormat, $timedate->dbDayFormat); $dateXml[1] = $timedate->swap_formats($date_end, $user_dateFormat, $timedate->dbDayFormat); $tempx = array(); $datax = array(); $selected_datax = array(); //get list of sales stage keys to display $user_sales_stage = $current_user->getPreference('mypbss_sales_stages'); if (!empty($user_sales_stage) && count($user_sales_stage) > 0 && !isset($_REQUEST['mypbss_sales_stages'])) { $tempx = $user_sales_stage; $GLOBALS['log']->debug("USER PREFERENCES['mypbss_sales_stages'] is:"); $GLOBALS['log']->debug($user_sales_stage); } elseif (isset($_REQUEST['mypbss_sales_stages']) && count($_REQUEST['mypbss_sales_stages']) > 0) { $tempx = $_REQUEST['mypbss_sales_stages']; $current_user->setPreference('mypbss_sales_stages', $_REQUEST['mypbss_sales_stages']); $GLOBALS['log']->debug("_REQUEST['mypbss_sales_stages'] is:"); $GLOBALS['log']->debug($_REQUEST['mypbss_sales_stages']); $GLOBALS['log']->debug("USER PREFRENCES['mypbss_sales_stages'] is:"); $GLOBALS['log']->debug($current_user->getPreference('mypbss_sales_stages')); } //set $datax using selected sales stage keys if (count($tempx) > 0) { foreach ($tempx as $key) { $datax[$key] = $app_list_strings['sales_stage_dom'][$key]; array_push($selected_datax, $key); } } else { $datax = $app_list_strings['sales_stage_dom']; $selected_datax = array_keys($app_list_strings['sales_stage_dom']); } $GLOBALS['log']->debug("datax is:"); $GLOBALS['log']->debug($datax); $ids = array($current_user->id); //create unique prefix based on selected users for image files $id_hash = '1'; if (isset($ids)) { sort($ids); $id_hash = crc32(implode('',$ids)); if($id_hash < 0) { $id_hash = $id_hash * -1; } } $GLOBALS['log']->debug("ids is:"); $GLOBALS['log']->debug($ids); $id_md5 = substr(md5($current_user->id),0,9); $seps = array("-", "/"); $dates = array($dateStartDisplay, $dateEndDisplay); $dateFileNameSafe = str_replace($seps, "_", $dates); $cache_file_name = $current_user->getUserPrivGuid()."_".$theme."_my_pipeline_".$dateFileNameSafe[0]."_".$dateFileNameSafe[1].".xml"; $GLOBALS['log']->debug("cache file name is: $cache_file_name"); $tools='
'.SugarThemeRegistry::current()->getImage('refresh','alt="Refresh" border="0" align="absmiddle"').' '.$current_module_strings['LBL_REFRESH'].'  '.SugarThemeRegistry::current()->getImage('edit','alt="Edit" border="0" align="absmiddle"').' '. $current_module_strings['LBL_EDIT'].'
'; ?> get_cal_date_format(); ?>

".gen_xml_pipeline_by_sales_stage($datax, $dateXml[0], $dateXml[1], $ids, $sugar_config['tmp_dir'].$cache_file_name, $refresh,'hBarS',$current_module_strings)."

"; echo "

".$current_module_strings['LBL_PIPELINE_FORM_TITLE_DESC']."

"; if (file_exists($sugar_config['tmp_dir'].$cache_file_name)) { $file_date = date($timedate->get_date_format()." ".$timedate->get_time_format(), filemtime($sugar_config['tmp_dir'].$cache_file_name)); } else { $file_date = ''; } ?>

getPreference('num_grp_sep'); global $timedate; if (!file_exists($cache_file_name) || $refresh == true) { $GLOBALS['log']->debug("starting pipeline chart"); $GLOBALS['log']->debug("datax is:"); $GLOBALS['log']->debug($datax); $GLOBALS['log']->debug("user_id is: "); $GLOBALS['log']->debug($user_id); $GLOBALS['log']->debug("cache_file_name is: $cache_file_name"); $opp = new Opportunity; $where=""; //build the where clause for the query that matches $user $count = count($user_id); $id = array(); $user_list = get_user_array(false); foreach ($user_id as $key) { $new_ids[$key] = $user_list[$key]; } if ($count>0) { foreach ($new_ids as $the_id=>$the_name) { $id[] = "'".$the_id."'"; } $ids = join(",",$id); $where .= "opportunities.assigned_user_id IN ($ids) "; } //build the where clause for the query that matches $datax $count = count($datax); $dataxArr = array(); if ($count>0) { foreach ($datax as $key=>$value) { $dataxArr[] = "'".$key."'"; } $dataxArr = join(",",$dataxArr); $where .= "AND opportunities.sales_stage IN ($dataxArr) "; } //build the where clause for the query that matches $date_start and $date_end $where .= " AND opportunities.date_closed >= ". db_convert("'".$date_start."'",'date'). " AND opportunities.date_closed <= ".db_convert("'".$date_end."'",'date') ; $where .= " AND opportunities.assigned_user_id = users.id AND opportunities.deleted=0 "; //Now do the db queries //query for opportunity data that matches $datax and $user $query = " SELECT opportunities.sales_stage, users.user_name, opportunities.assigned_user_id, count( * ) AS opp_count, sum(amount_usdollar/1000) AS total FROM users,opportunities "; $query .= "WHERE " .$where; $query .= " GROUP BY opportunities.sales_stage,users.user_name,opportunities.assigned_user_id"; $result = $opp->db->query($query) or sugar_die("Error selecting sugarbean: ".mysql_error()); //build pipeline by sales stage data $total = 0; $div = 1; global $sugar_config; $symbol = $sugar_config['default_currency_symbol']; global $current_user; if($current_user->getPreference('currency') ){ $currency = new Currency(); $currency->retrieve($current_user->getPreference('currency')); $div = $currency->conversion_rate; $symbol = $currency->symbol; } // cn: adding user-pref date handling $dateStartDisplay = date($timedate->get_date_format(), strtotime($date_start)); $dateEndDisplay = date($timedate->get_date_format(), strtotime($date_end)); $fileContents = ' '."\n"; $stageArr = array(); $usernameArr = array(); $rowTotalArr = array(); $rowTotalArr[] = 0; while($row = $opp->db->fetchByAssoc($result, -1, false)) { if($row['total']*$div<=100){ $sum = round($row['total']*$div, 2); } else { $sum = round($row['total']*$div); } if(!isset($stageArr[$row['sales_stage']]['row_total'])) {$stageArr[$row['sales_stage']]['row_total']=0;} $stageArr[$row['sales_stage']][$row['assigned_user_id']]['opp_count'] = $row['opp_count']; $stageArr[$row['sales_stage']][$row['assigned_user_id']]['total'] = $sum; $stageArr[$row['sales_stage']]['people'][$row['assigned_user_id']] = $row['user_name']; $stageArr[$row['sales_stage']]['row_total'] += $sum; $usernameArr[$row['assigned_user_id']] = $row['user_name']; $total += $sum; } foreach ($datax as $key=>$translation) { if(isset($stageArr[$key]['row_total'])){$rowTotalArr[]=$stageArr[$key]['row_total'];} if(isset($stageArr[$key]['row_total']) && $stageArr[$key]['row_total']>100) { $stageArr[$key]['row_total'] = round($stageArr[$key]['row_total']); } $fileContents .= ' '."\n"; if(isset($stageArr[$key]['people'])){ asort($stageArr[$key]['people']); reset($stageArr[$key]['people']); foreach ($stageArr[$key]['people'] as $nameKey=>$nameValue) { $fileContents .= ' '."\n"; } } $fileContents .= ' '."\n"; } $fileContents .= ' '."\n"; $max = get_max($rowTotalArr); if($chart_size=='hBarF'){ $length = "10"; }else{ $length = "4"; } $fileContents .= ' '."\n"; $fileContents .= ' '."\n"; $i=0; asort($new_ids); foreach ($new_ids as $key=>$value) { $color = generate_graphcolor($key,$i); $fileContents .= ' '."\n"; $i++; } $fileContents .= ' '."\n"; $fileContents .= ' '."\n"; $fileContents .= ' '.$current_module_strings['LBL_OPP_SIZE'].' '.$symbol.'1'.$current_module_strings['LBL_OPP_THOUSANDS'].']]>'."\n"; $fileContents .= ' '."\n"; $fileContents .= ' $value) { $fileContents .= ' '.$key.'='.'"'.$value.'" '; } $fileContents .= ' />'."\n"; $fileContents .= ''."\n"; $total = $total; $title = ''."\n"; $fileContents = $title.$fileContents; save_xml_file($cache_file_name, $fileContents); } if($chart_size=='hBarF'){ $width = "800"; $height = "400"; } else { $width = "350"; $height = "400"; } $return = create_chart($chart_size,$cache_file_name,$width,$height); return $return; } function constructQuery(){ global $current_user; global $time_date; //get the dates to display $user_date_start = $current_user->getPreference('mypbss_date_start'); if (!empty($user_date_start) && !isset($_REQUEST['mypbss_date_start'])) { $date_start = $user_date_start; $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_start'] is:"); $GLOBALS['log']->debug($user_date_start); } elseif (isset($_REQUEST['mypbss_date_start']) && $_REQUEST['mypbss_date_start'] != '') { $date_start = $_REQUEST['mypbss_date_start']; $current_user->setPreference('mypbss_date_start', $_REQUEST['mypbss_date_start']); $GLOBALS['log']->debug("_REQUEST['mypbss_date_start'] is:"); $GLOBALS['log']->debug($_REQUEST['mypbss_date_start']); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_start'] is:"); $GLOBALS['log']->debug($current_user->getPreference('mypbss_date_start')); } else { $date_start = date($timedate->get_date_format(), time()); } $user_date_end = $current_user->getPreference('mypbss_date_end'); if (!empty($user_date_end) && !isset($_REQUEST['mypbss_date_end'])) { $date_end = $user_date_end; $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] is:"); $GLOBALS['log']->debug($user_date_end); } elseif (isset($_REQUEST['mypbss_date_end']) && $_REQUEST['mypbss_date_end'] != '') { $date_end = $_REQUEST['mypbss_date_end']; $current_user->setPreference('mypbss_date_end', $_REQUEST['mypbss_date_end']); $GLOBALS['log']->debug("_REQUEST['mypbss_date_end'] is:"); $GLOBALS['log']->debug($_REQUEST['mypbss_date_end']); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] is:"); $GLOBALS['log']->debug( $current_user->getPreference('mypbss_date_end')); } else { $date_end = date($timedate->get_date_format(), strtotime('2010-01-01')); $GLOBALS['log']->debug("USER PREFERENCES['mypbss_date_end'] not found. Using: ".$date_end); } $user_id = array($current_user->id); $opp = new Opportunity; $where=""; //build the where clause for the query that matches $user $count = count($user_id); $id = array(); $user_list = get_user_array(false); foreach ($user_id as $key) { $new_ids[$key] = $user_list[$key]; } if ($count>0) { foreach ($new_ids as $the_id=>$the_name) { $id[] = "'".$the_id."'"; } $ids = join(",",$id); $where .= "opportunities.assigned_user_id IN ($ids) "; } //build the where clause for the query that matches $datax $count = count($datax); $dataxArr = array(); if ($count>0) { foreach ($datax as $key=>$value) { $dataxArr[] = "'".$key."'"; } $dataxArr = join(",",$dataxArr); $where .= "AND opportunities.sales_stage IN ($dataxArr) "; } //build the where clause for the query that matches $date_start and $date_end $where .= " AND opportunities.date_closed >= ". db_convert("'".$date_start."'",'date'). " AND opportunities.date_closed <= ".db_convert("'".$date_end."'",'date') ; $where .= " AND opportunities.assigned_user_id = users.id AND opportunities.deleted=0 "; //Now do the db queries //query for opportunity data that matches $datax and $user $query = " SELECT opportunities.sales_stage, users.user_name, opportunities.assigned_user_id, count( * ) AS opp_count, sum(amount_usdollar/1000) AS total FROM users,opportunities "; $query .= "WHERE " .$where; $query .= " GROUP BY opportunities.sales_stage,users.user_name,opportunities.assigned_user_id"; return $query; } function constructGroupBy(){ return array('sales_stage'); } ?>