Added downloading report in excel format
Showing
2 changed files
with
129 additions
and
51 deletions
| ... | @@ -20,7 +20,7 @@ use App\Models\UserLog; | ... | @@ -20,7 +20,7 @@ use App\Models\UserLog; |
| 20 | use DB; | 20 | use DB; |
| 21 | use Log; | 21 | use Log; |
| 22 | use Session; | 22 | use Session; |
| 23 | use App\lib\phpexcel\PHPExcel; | 23 | use App\lib\PHP_XLSXWriter_master\XLSXWriter; |
| 24 | 24 | ||
| 25 | class ReportController extends Controller | 25 | class ReportController extends Controller |
| 26 | { | 26 | { |
| ... | @@ -183,14 +183,21 @@ class ReportController extends Controller | ... | @@ -183,14 +183,21 @@ class ReportController extends Controller |
| 183 | if($id=="campaignwise") | 183 | if($id=="campaignwise") |
| 184 | { | 184 | { |
| 185 | $filename = $id; | 185 | $filename = $id; |
| 186 | $dllogxls = Input::get('dllogxls'); | ||
| 186 | 187 | ||
| 187 | $reporthead = ["Campaign", "Dials", "Connects", "Contacts", "Callbacks", "Sales", "No Answer", "Busy", "Sit Tones", "Abandoned", "Connect %", "No Answer %", "Busy %", "Sit Tones %", "Abandoned %"]; | 188 | $reporthead = ["Campaign", "Dials", "Connects", "Contacts", "Callbacks", "Sales", "No Answer", "Busy", "Sit Tones", "Abandoned", "Connect %", "No Answer %", "Busy %", "Sit Tones %", "Abandoned %"]; |
| 188 | 189 | ||
| 189 | $reportArr = $this->getCampaignWisePredictiveDetails($data); | 190 | $reportArr = $this->getCampaignWisePredictiveDetails($data); |
| 190 | 191 | ||
| 191 | if(Input::has("dllogxls"))$this->downloadReportInExcel($filename, $reporthead, $reportArr); | 192 | $data["dllogxls"] = $dllogxls; |
| 193 | $data["filename"] = $filename; | ||
| 194 | $data["reporthead"] = $reporthead; | ||
| 192 | 195 | ||
| 193 | $data["reportArr"] = $reportArr["reportArr"]; | 196 | $newReportArr = array_map(function($val,$key){ |
| 197 | return ['campaign' => $key] + $val; | ||
| 198 | }, $reportArr['reportArr'],array_keys($reportArr['reportArr'])); | ||
| 199 | |||
| 200 | $data["reportArr"] = $newReportArr; | ||
| 194 | 201 | ||
| 195 | return view("layout.module.reports.campaignwise", $data); | 202 | return view("layout.module.reports.campaignwise", $data); |
| 196 | } | 203 | } |
| ... | @@ -213,20 +220,31 @@ class ReportController extends Controller | ... | @@ -213,20 +220,31 @@ class ReportController extends Controller |
| 213 | $reportArr[$crmcallObj->client]['dials']++; | 220 | $reportArr[$crmcallObj->client]['dials']++; |
| 214 | 221 | ||
| 215 | if($crmcallObj->user_id != 0) $reportArr[$crmcallObj->client]['connects']++; | 222 | if($crmcallObj->user_id != 0) $reportArr[$crmcallObj->client]['connects']++; |
| 216 | if(strstr($crmcallObj->status, "NOANSWER"))$reportArr[$crmcallObj->client]['noanswer']++; | 223 | |
| 224 | if(strstr($crmcallObj->status, "NOANSWER"))$reportArr[$crmcallObj->client]['no_answer']++; | ||
| 217 | if(stristr($crmcallObj->status, "busy"))$reportArr[$crmcallObj->client]['busy']++; | 225 | if(stristr($crmcallObj->status, "busy"))$reportArr[$crmcallObj->client]['busy']++; |
| 218 | if($crmcallObj->status == "ANSWER" && $crmcallObj->user_id == 0)$reportArr[$crmcallObj->client]['abandoned']++; | 226 | if($crmcallObj->status == "ANSWER" && $crmcallObj->user_id == 0)$reportArr[$crmcallObj->client]['abandoned']++; |
| 219 | if($crmcallObj->status != "ANSWER" && $crmcallObj->status != "NOANSWER" && stristr($crmcallObj->status, "busy") == "")$reportArr[$crmcallObj->client]['sittone']++; | 227 | if($crmcallObj->status != "ANSWER" && $crmcallObj->status != "NOANSWER" && stristr($crmcallObj->status, "busy") == "")$reportArr[$crmcallObj->client]['sit_tones']++; |
| 220 | } | 228 | } |
| 221 | 229 | ||
| 222 | foreach ($reportArr as $key => $report) { | 230 | foreach ($reportArr as $key => $report) { |
| 223 | $finalArr[$key] = $report; | 231 | $finalArr[$key] = $report; |
| 224 | 232 | ||
| 225 | $finalArr[$key]['connect_per'] = round(($report['connects'] / $report['dials']) * 100, 2); | 233 | if(!isset($finalArr[$key]['dials'])) $finalArr[$key]['dials']=0; |
| 226 | $finalArr[$key]['noanswer_per'] = round(($report['noanswer'] / $report['dials']) * 100, 2); | 234 | if(!isset($finalArr[$key]['connects'])) $finalArr[$key]['connects']=0; |
| 235 | if(!isset($finalArr[$key]['contacts'])) $finalArr[$key]['contacts']=0; | ||
| 236 | if(!isset($finalArr[$key]['callbacks'])) $finalArr[$key]['callbacks']=0; | ||
| 237 | if(!isset($finalArr[$key]['sales'])) $finalArr[$key]['sales']=0; | ||
| 238 | if(!isset($finalArr[$key]['no_answer'])) $finalArr[$key]['no_answer']=0; | ||
| 239 | if(!isset($finalArr[$key]['busy'])) $finalArr[$key]['busy']=0; | ||
| 240 | if(!isset($finalArr[$key]['sit_tones'])) $finalArr[$key]['sit_tones']=0; | ||
| 241 | if(!isset($finalArr[$key]['abandoned'])) $finalArr[$key]['abandoned']=0; | ||
| 242 | |||
| 243 | $finalArr[$key]['connects_per'] = round(($report['connects'] / $report['dials']) * 100, 2); | ||
| 244 | $finalArr[$key]['no_answer_per'] = round(($report['no_answer'] / $report['dials']) * 100, 2); | ||
| 227 | $finalArr[$key]['busy_per'] = round(($report['busy'] / $report['dials']) * 100, 2); | 245 | $finalArr[$key]['busy_per'] = round(($report['busy'] / $report['dials']) * 100, 2); |
| 228 | $finalArr[$key]['abandoned_per'] = round(($report['abandoned'] / $report['dials']) * 100, 2); | 246 | $finalArr[$key]['abandoned_per'] = round(($report['abandoned'] / $report['dials']) * 100, 2); |
| 229 | $finalArr[$key]['sittone_per'] = round(($report['sittone'] / $report['dials']) * 100, 2); | 247 | $finalArr[$key]['sit_tones_per'] = round(($report['sit_tones'] / $report['dials']) * 100, 2); |
| 230 | } | 248 | } |
| 231 | 249 | ||
| 232 | $data["reportArr"] = $finalArr; | 250 | $data["reportArr"] = $finalArr; |
| ... | @@ -234,36 +252,42 @@ class ReportController extends Controller | ... | @@ -234,36 +252,42 @@ class ReportController extends Controller |
| 234 | return $data; | 252 | return $data; |
| 235 | } | 253 | } |
| 236 | 254 | ||
| 237 | public function downloadReportInExcel($filename, $reporthead, $reportarray) | 255 | //TODO: Need To make common Download Function |
| 256 | public function downloadReportInExcel($data) | ||
| 238 | { | 257 | { |
| 239 | $inputFileType = "Excel5"; | 258 | $headerexcel = []; |
| 240 | $objReader = PHPExcel_IOFactory::createReader($inputFileType); | 259 | $filename = $data["filename"]; |
| 241 | $objPHPExcel = $objReader->load("assets/extras/blank.xls"); | 260 | $filename = $filename.".xlsx"; |
| 242 | $baseRow = 2; | ||
| 243 | 261 | ||
| 262 | $reporthead = $data["reporthead"]; | ||
| 263 | $reportArr = $data["reportArr"]; | ||
| 244 | 264 | ||
| 245 | $highestColumn = sizeof($reporthead); | 265 | foreach($reporthead as $cachekey) |
| 246 | for ($head = 0; $head < $highestColumn; $head++){ | ||
| 247 | $colstr=PHPExcel_Cell::stringFromColumnIndex($head); | ||
| 248 | $objPHPExcel->getActiveSheet()->setCellValue($colstr."1", $reporthead[$head]); | ||
| 249 | } | ||
| 250 | foreach($reportarray as $uid=>$uarr) | ||
| 251 | { | 266 | { |
| 252 | $row = $baseRow++; | 267 | if($cachekey!='') |
| 253 | $col = 0; | 268 | { |
| 254 | 269 | $headerexcel[$cachekey] = 'string'; | |
| 255 | for ($head = 0; $head < $highestColumn; $head++){ | ||
| 256 | $colstr=PHPExcel_Cell::stringFromColumnIndex($head); | ||
| 257 | $objPHPExcel->getActiveSheet()->setCellValue($colstr.$row, $uarr[$reporthead[$head]]); | ||
| 258 | } | 270 | } |
| 259 | $row++; | ||
| 260 | } | 271 | } |
| 261 | 272 | ||
| 262 | header('Content-Type: application/vnd.ms-excel'); | 273 | header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); |
| 263 | header("Content-Disposition: attachment;filename=\"$filename.xls\""); | 274 | header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); |
| 264 | header('Cache-Control: max-age=0'); | 275 | header('Content-Transfer-Encoding: binary'); |
| 276 | header('Cache-Control: must-revalidate'); | ||
| 277 | header('Pragma: public'); | ||
| 265 | 278 | ||
| 266 | $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, $inputFileType); | 279 | $writer = new XLSXWriter(); |
| 267 | $objWriter->save('php://output'); | 280 | $styles1 = array( 'font'=>'Arial','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom'); |
| 281 | $writer->writeSheetHeader('Sheet1', $headerexcel,$styles1,['freeze_rows'=>1, 'freeze_columns'=>1]); | ||
| 282 | |||
| 283 | if($reportArr){ | ||
| 284 | |||
| 285 | foreach($reportArr as $row) | ||
| 286 | { | ||
| 287 | $writer->writeSheetRow('Sheet1', $row, $row_options = ['height'=>15]); | ||
| 288 | } | ||
| 289 | } | ||
| 290 | //dd($writer); | ||
| 291 | $writer->writeToStdOut(); | ||
| 268 | } | 292 | } |
| 269 | } | 293 | } | ... | ... |
| 1 | <style>#logTableData.td{vertical-align:top;padding:20px;}#logTableData.tr{height:28px;overflow-y:hidden;} | 1 | @php |
| 2 | /*#logtable.table thead tr{ | 2 | |
| 3 | display:block; | 3 | if($dllogxls) |
| 4 | { | ||
| 5 | include_once(app_path().'/lib/PHP_XLSXWriter_master/xlsxwriter.class.php'); | ||
| 6 | |||
| 7 | $headerexcel = []; | ||
| 8 | $filename = $filename.".xlsx"; | ||
| 9 | |||
| 10 | foreach($reporthead as $cachekey) | ||
| 11 | { | ||
| 12 | if($cachekey!='') | ||
| 13 | { | ||
| 14 | $headerexcel[$cachekey] = 'string'; | ||
| 15 | } | ||
| 16 | } | ||
| 17 | |||
| 18 | header('Content-disposition: attachment; filename="'.XLSXWriter::sanitize_filename($filename).'"'); | ||
| 19 | header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); | ||
| 20 | header('Content-Transfer-Encoding: binary'); | ||
| 21 | header('Cache-Control: must-revalidate'); | ||
| 22 | header('Pragma: public'); | ||
| 23 | |||
| 24 | $writer = new XLSXWriter(); | ||
| 25 | $styles1 = array( 'font'=>'Arial','font-size'=>10,'font-style'=>'bold', 'fill'=>'#eee', 'halign'=>'center', 'border'=>'left,right,top,bottom'); | ||
| 26 | $writer->writeSheetHeader('Sheet1', $headerexcel,$styles1,['freeze_rows'=>1, 'freeze_columns'=>1]); | ||
| 27 | |||
| 28 | if($reportArr){ | ||
| 29 | |||
| 30 | foreach($reportArr as $row) | ||
| 31 | { | ||
| 32 | $newRow = []; | ||
| 33 | |||
| 34 | $newRow['campaign'] = $row['campaign']; | ||
| 35 | $newRow['dials'] = $row['dials']; | ||
| 36 | $newRow['connects'] = $row['connects']; | ||
| 37 | $newRow['contacts'] = $row['contacts']; | ||
| 38 | $newRow['callbacks'] = $row['callbacks']; | ||
| 39 | $newRow['sales'] = $row['sales']; | ||
| 40 | $newRow['no_answer'] = $row['no_answer']; | ||
| 41 | $newRow['busy'] = $row['busy']; | ||
| 42 | $newRow['sit_tones'] = $row['sit_tones']; | ||
| 43 | $newRow['abandoned'] = $row['abandoned']; | ||
| 44 | $newRow['connects_per'] = $row['connects_per']; | ||
| 45 | $newRow['no_answer_per'] = $row['no_answer_per']; | ||
| 46 | $newRow['busy_per'] = $row['busy_per']; | ||
| 47 | $newRow['sit_tones_per'] = $row['sit_tones_per']; | ||
| 48 | $newRow['abandoned_per'] = $row['abandoned_per']; | ||
| 49 | |||
| 50 | $writer->writeSheetRow('Sheet1', $newRow, $newRow_options = ['height'=>15]); | ||
| 51 | } | ||
| 52 | } | ||
| 53 | |||
| 54 | $writer->writeToStdOut(); | ||
| 55 | |||
| 56 | return; | ||
| 4 | } | 57 | } |
| 5 | 58 | ||
| 6 | #logtable.table tbody{ | 59 | @endphp |
| 7 | display:block; | 60 | |
| 8 | height:500px; | 61 | |
| 9 | overflow:auto;//set tbody to auto | 62 | <style> |
| 10 | }*/ | 63 | #logTableData.td{vertical-align:top;padding:20px;} |
| 64 | #logTableData.tr{height:28px;overflow-y:hidden;} | ||
| 11 | </style> | 65 | </style> |
| 12 | 66 | ||
| 13 | <div class=innerAll> | 67 | <div class=innerAll> |
| ... | @@ -65,23 +119,23 @@ | ... | @@ -65,23 +119,23 @@ |
| 65 | </thead> | 119 | </thead> |
| 66 | 120 | ||
| 67 | <tbody> | 121 | <tbody> |
| 68 | @foreach($reportArr as $client=>$value) | 122 | @foreach($reportArr as $value) |
| 69 | <tr> | 123 | <tr> |
| 70 | <td>{{$client}}</td> | 124 | <td>{{$value['campaign']}}</td> |
| 71 | <td>{{$value['dials']}}</td> | 125 | <td>{{$value['dials']}}</td> |
| 72 | <td>{{$value['connects']}}</td> | 126 | <td>{{$value['connects']}}</td> |
| 73 | <td></td> | 127 | <td>{{$value['contacts']}}</td> |
| 74 | <td></td> | 128 | <td>{{$value['callbacks']}}</td> |
| 75 | <td></td> | 129 | <td>{{$value['sales']}}</td> |
| 76 | <td>{{$value['noanswer']}}</td> | 130 | <td>{{$value['no_answer']}}</td> |
| 77 | <td>{{$value['busy']}}</td> | 131 | <td>{{$value['busy']}}</td> |
| 78 | <td>{{$value['sittone']}}</td> | 132 | <td>{{$value['sit_tones']}}</td> |
| 79 | <td>{{$value['abandoned']}}</td> | 133 | <td>{{$value['abandoned']}}</td> |
| 80 | <td>{{$value['connect_per']}}</td> | 134 | <td>{{$value['connects_per']}}<span>%</span></td> |
| 81 | <td>{{$value['noanswer_per']}}</td> | 135 | <td>{{$value['no_answer_per']}}<span>%</span></td> |
| 82 | <td>{{$value['busy_per']}}</td> | 136 | <td>{{$value['busy_per']}}<span>%</span></td> |
| 83 | <td>{{$value['sittone_per']}}</td> | 137 | <td>{{$value['sit_tones_per']}}<span>%</span></td> |
| 84 | <td>{{$value['abandoned_per']}}</td> | 138 | <td>{{$value['abandoned_per']}}<span>%</span></td> |
| 85 | </tr> | 139 | </tr> |
| 86 | @endforeach | 140 | @endforeach |
| 87 | </tbody> | 141 | </tbody> | ... | ... |
-
Please register or sign in to post a comment