battles Posted March 15, 2017 Share Posted March 15, 2017 I'd like to generate some simple reports based on customers associated with a server in our system. Can I generate a report based on all clients running on server ID=1234 for instance? At this point, I'm looking for Client name, email, running on Server ID=1234 TIA 0 Quote Link to comment Share on other sites More sharing options...
brian! Posted March 15, 2017 Share Posted March 15, 2017 the built-in Services report will almost do that (apart from the email address); if you wanted to tweak the services report to have email address as an additional option, you could use... <?php # Modified Services Report (with email address) # Written by brian! if (!defined("WHMCS")) die("This file cannot be accessed directly"); $reportdata["title"] = "Services"; $filterfields = array("id"=>"ID","userid"=>"User ID","clientname"=>"Client Name","orderid"=>"Order ID","packageid"=>"Product ID","server"=>"Server ID","domain"=>"Domain Name","dedicatedip"=>"Dedicated IP","assignedips"=>"Assigned IPs","firstpaymentamount"=>"First Payment Amount","amount"=>"Recurring Amount","billingcycle"=>"Billing Cycle","nextduedate"=>"Next Due Date","paymentmethod"=>"Payment Method","domainstatus"=>"Status","username"=>"Username","password"=>"Password","notes"=>"Notes","subscriptionid"=>"Subscription ID","suspendreason"=>"Suspend Reason","email"=>"Email"); $reportdata["description"] = $reportdata["headertext"] = ''; $incfields = $whmcs->get_req_var('incfields'); $filterfield = $whmcs->get_req_var('filterfield'); $filtertype = $whmcs->get_req_var('filtertype'); $filterq = $whmcs->get_req_var('filterq'); if (!is_array($incfields)) $incfields = array(); if (!is_array($filterfield)) $filterfield = array(); if (!is_array($filtertype)) $filtertype = array(); if (!is_array($filterq)) $filterq = array(); if (!$print) { $reportdata["description"] = "This report can be used to generate a custom export of services by applying up to 5 filters. CSV Export is available via the Tools menu to the right."; $reportdata["headertext"] = '<form method="post" action="reports.php?report='.$report.'"> <table class="form" width="100%" border="0" cellspacing="2" cellpadding="3"> <tr><td width="20%" class="fieldlabel">Fields to Include</td><td class="fieldarea"><table width="100%"><tr>'; $i=0; foreach ($filterfields AS $k=>$v) { $reportdata["headertext"] .= '<td width="20%"><input type="checkbox" name="incfields[]" value="'.$k.'" id="fd'.$k.'"'; if (in_array($k,$incfields)) $reportdata["headertext"] .= ' checked'; $reportdata["headertext"] .= ' /> <label for="fd'.$k.'">'.$v.'</label></td>'; $i++; if (($i%5)==0) $reportdata["headertext"] .= '</tr><tr>'; } $reportdata["headertext"] .= '</tr></table></td></tr>'; for ( $i = 1; $i <= 5; $i ++ ) { $reportdata["headertext"] .= '<tr><td width="20%" class="fieldlabel">Filter '.$i.'</td><td class="fieldarea"><select name="filterfield['.$i.']"><option value="">None</option>'; foreach ($filterfields AS $k=>$v) { $reportdata["headertext"] .= '<option value="'.$k.'"'; if (isset($filterfield[$i]) && $filterfield[$i]==$k) $reportdata["headertext"] .= ' selected'; $reportdata["headertext"] .= '>'.$v.'</option>'; } $reportdata["headertext"] .= '</select> <select name="filtertype['.$i.']"><option>Exact Match</option><option value="like"'; if (isset($filtertype[$i]) && $filtertype[$i]=="like") $reportdata["headertext"] .= ' selected'; $reportdata["headertext"] .= '>Containing</option></select> <input type="text" name="filterq['.$i.']" size="30" value="'.(isset($filterq[$i])?$filterq[$i]:'').'" /></td></tr>'; } $reportdata["headertext"] .= '</table> <p align="center"><input type="submit" value="Filter" /></p> </form>'; } if (count($incfields)) { $filters = array(); foreach ($filterfield as $i => $val) { if ($val && array_key_exists($val, $filterfields)) { if ($val == 'clientname') {$val = "(SELECT CONCAT(firstname,' ',lastname) FROM tblclients WHERE id=tblhosting.userid)";} if ($val == 'email') {$val = "(SELECT email FROM tblclients WHERE id=tblhosting.userid)";} $filters[] = ($filtertype[$i]=="like") ? $val . " LIKE '%" . db_escape_string($filterq[$i]) . "%'" : $val . "='" . db_escape_string($filterq[$i]) . "'"; } } $fieldlist = array(); foreach ($incfields AS $fieldname) { if (array_key_exists($fieldname,$filterfields)) { $reportdata["tableheadings"][] = $filterfields[$fieldname]; if ($fieldname=="clientname") $fieldname = "(SELECT CONCAT(firstname,' ',lastname) FROM tblclients WHERE id=tblhosting.userid)"; if ($fieldname=="email") $fieldname = "(SELECT email FROM tblclients WHERE id=tblhosting.userid)"; $fieldlist[] = $fieldname; } } $result = select_query("tblhosting", implode(',', $fieldlist), implode(' AND ', $filters)); while ($data = mysql_fetch_assoc($result)) { if (isset($data['paymentmethod'])) $data['paymentmethod'] = $gateways->getDisplayName($data['paymentmethod']); if (isset($data['password'])) $data['password']=decrypt($data['password']); $reportdata["tablevalues"][] = $data; } } 0 Quote Link to comment Share on other sites More sharing options...
battles Posted March 15, 2017 Author Share Posted March 15, 2017 brian!(!!!) Thanks! - - - Updated - - - If I had my druthers, could I see a version that included the fields: "Domain" and "Hyper Number"? "Hyper Number" is a custom field. That would be sweet. 0 Quote Link to comment Share on other sites More sharing options...
brian! Posted March 15, 2017 Share Posted March 15, 2017 If I had my druthers, could I see a version that included the fields: "Domain" and "Hyper Number"? "Hyper Number" is a custom field. That would be sweet. it already includes "Domain Name" doesn't it? ... and custom fields can be an absolute pain to add to reports as you need to query at least 2 additional database tables. 0 Quote Link to comment Share on other sites More sharing options...
battles Posted March 15, 2017 Author Share Posted March 15, 2017 Ah yes... I'm dense, just got a bit too excited. Muchas gracias! 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.