input('sortBy','servicios_enc.id'); $order = $request->input('order','asc'); $sucursal = $request->input('sucursal'); $fecha_inicio = $request->input('fecha_inicio'); $fecha_final = $request->input('fecha_final'); $tipo_servicio = $request->input('tipo_servicio'); $estado_servicio = $request->input('estado_servicio'); $servicio = $request->input('servicio'); $origen = $request->input('origen'); $campos = [ 'servicios_enc.id as numero_solicitud', DB::raw("DATE(servicios_det.fecha_solicitud) as 'fecha_servicio'"), DB::raw("TIME(servicios_det.fecha_solicitud) as 'hora_servicio'"), 'cat_servicios.nombre as servicio', 'servicios_det.costo_servicio as costo', 'cat_tipos_servicios.nombre as tipo_servicio', 'cat_estatus_servicios.nombre as estatus_servicio', 'clientes.denominacion as nombre_cliente', 'clientes_domicilios.calle as calle_cliente', 'clientes_domicilios.entre_calles as entre_calles_cliente', 'clientes_domicilios.num_ext as num_ext_cliente', 'clientes_domicilios.num_int as num_int_cliente', 'clientes_domicilios.colonia as colonia_cliente', 'clientes_domicilios.ciudad as ciudad_cliente', 'clientes_domicilios.cp as cp_cliente', 'asesor.nombre as nombre_asesor', 'asesor.apellido_paterno as apellido_paterno_asesor', 'asesor.apellido_materno as apellido_materno_asesor', 'auxiliar.nombre as nombre_auxiliar', 'auxiliar.apellido_paterno as apellido_paterno_auxiliar', 'auxiliar.apellido_materno as apellido_materno_auxiliar', 'cat_vehiculos.num_economico as vehiculo', 'servicios_progreso.duracion as duracion_servicio', DB::raw("DATE(servicios_progreso.fecha_ini_servidor) as 'fecha_inicio_servicio'"), DB::raw("TIME(servicios_progreso.fecha_ini_servidor) as 'hora_inicio_servicio'"), DB::raw("TIME_FORMAT(TIMEDIFF(servicios_det.fecha_solicitud, servicios_progreso.fecha_ini_servidor),'%Hhr %im %ss') as diferencia"), 'cat_origenes.nombre as origen', 'servicios_progreso.litraje as litraje' ]; $queryBuilder = ServicioDet::select($campos) ->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id') ->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id') ->join('cat_tipos_servicios', 'servicios_det.tipo_servicio_id', '=', 'cat_tipos_servicios.id') ->join('cat_estatus_servicios','servicios_det.estatus_servicio_id','=','cat_estatus_servicios.id') ->join('clientes','servicios_enc.cliente_id','=','clientes.id') ->join('clientes_domicilios','servicios_enc.cliente_domicilio_id','=','clientes_domicilios.id') ->join('users as asesor', 'servicios_det.operador_id', '=', 'asesor.id') ->leftJoin('users as auxiliar', 'servicios_det.auxiliar_1', '=', 'auxiliar.id') ->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id') ->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id') ->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id') ->where('servicios_enc.sucursal_id', $sucursal) ->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio) ->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final) ->orderBy($orderBy,$order); if($tipo_servicio != 0){ $queryBuilder->where('servicios_det.tipo_servicio_id', $tipo_servicio); } if($estado_servicio != 0){ $queryBuilder->where('servicios_det.estatus_servicio_id', $estado_servicio); } if($servicio != 0){ $queryBuilder->where('servicios_det.servicio_id', $servicio); } if($origen != 0){ $queryBuilder->where('servicios_enc.origen_id', $origen); } if($query = $request->get('query',false)){ $queryBuilder->where(function($q) use ($query){ //$q->where('nombre','like','%' .$query.'%'); }); } $total_servicios = $queryBuilder->count(); $total_costo = $queryBuilder->sum('servicios_det.costo_servicio'); if($perPage = $request->input('perPage',false)){ $data = $queryBuilder->paginate($perPage)->toArray(); }else{ $data = ['data'=>$queryBuilder->get()]; } $data['total_servicios'] = $total_servicios; $data['total_costo'] = $total_costo; return response()->success($data); } public function generarExcel(ServiciosRequest $request){ $sucursal = $request->input('sucursal'); $fecha_inicio = $request->input('fecha_inicio'); $fecha_final = $request->input('fecha_final'); $tipo_servicio = $request->input('tipo_servicio'); $estado_servicio = $request->input('estado_servicio'); $servicio = $request->input('servicio'); $origen = $request->input('origen'); $campos = [ 'servicios_enc.id as numero_solicitud', 'servicios_enc.fecha_agenda', 'servicios_det.fecha_solicitud', 'servicios_det.fecha_solicitud as tiempo_atencion', 'cat_servicios.nombre as servicio', 'servicios_det.costo_servicio as costo', 'cat_tipos_servicios.nombre as tipo_servicio', 'cat_estatus_servicios.nombre as estatus_servicio', 'clientes.denominacion as nombre_cliente', 'clientes.email as email_cliente', DB::raw("CONCAT(clientes_domicilios.calle,' ',clientes_domicilios.num_ext,' ', clientes_domicilios.colonia,' ',clientes_domicilios.cp,' ',clientes_domicilios.ciudad) as domicilio"), 'clientes_domicilios.email as email_domicilio', DB::raw("CONCAT(asesor.nombre,' ',asesor.apellido_paterno,' ',asesor.apellido_materno) as asesor"), DB::raw("CONCAT(auxiliar.nombre,' ',auxiliar.apellido_paterno,' ',auxiliar.apellido_materno) as auxiliar"), 'cat_vehiculos.num_economico as vehiculo', 'servicios_progreso.duracion as duracion_servicio', DB::raw("TIME(servicios_progreso.fecha_ini_servidor) as 'hora_inicio_servicio'"), DB::raw("TIME_FORMAT(TIMEDIFF(servicios_det.fecha_solicitud, servicios_progreso.fecha_ini_servidor),'%Hhr %im %ss') as diferencia"), 'cat_origenes.nombre as origen', 'servicios_progreso.litraje as litraje', 'servicios_det.facturado as facturado', 'cat_formas_pagos.nombre as forma_pago', ]; $queryBuilder = ServicioDet::select($campos) ->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id') ->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id') ->join('cat_tipos_servicios', 'servicios_det.tipo_servicio_id', '=', 'cat_tipos_servicios.id') ->join('cat_estatus_servicios','servicios_det.estatus_servicio_id','=','cat_estatus_servicios.id') ->join('clientes','servicios_enc.cliente_id','=','clientes.id') ->join('clientes_domicilios','servicios_enc.cliente_domicilio_id','=','clientes_domicilios.id') ->join('users as asesor', 'servicios_det.operador_id', '=', 'asesor.id') ->join('cat_formas_pagos', 'cat_formas_pagos.id', '=', 'servicios_enc.forma_pago_id') ->leftJoin('users as auxiliar', 'servicios_det.auxiliar_1', '=', 'auxiliar.id') ->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id') ->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id') ->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id') ->where('servicios_enc.sucursal_id', $sucursal) ->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio) ->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final) ->orderBy('servicios_enc.id','asc'); if($tipo_servicio != 0){ $queryBuilder->where('servicios_det.tipo_servicio_id', $tipo_servicio); } if($estado_servicio != 0){ $queryBuilder->where('servicios_det.estatus_servicio_id', $estado_servicio); } if($servicio != 0){ $queryBuilder->where('servicios_det.servicio_id', $servicio); } if($origen != 0){ $queryBuilder->where('servicios_enc.origen_id', $origen); } $servicios = $queryBuilder->get(); $total = $queryBuilder->count(); $total_costo = $queryBuilder->sum('servicios_det.costo_servicio'); $total_litraje = $queryBuilder->sum('servicios_progreso.litraje'); $nombre_sucursal = Sucursal::where('id', $sucursal)->first(); $titulo = "Reporte de Servicios ".$nombre_sucursal->nombre; list($y_i, $m_i, $d_i) = explode("-", $fecha_inicio); list($y_f, $m_f, $d_f) = explode("-", $fecha_final); $f_i = $d_i."_".$m_i."_".$y_i; $f_f = $d_f."_".$m_f."_".$y_f; $nombre = "Reporte_Servicios_".$nombre_sucursal->nombre."_".$f_i."-".$f_f; foreach ($servicios as $s){ $s->costo = floatval($s->costo); $s->numero_solicitud = (int)$s->numero_solicitud; if($s->facturado > 0){ $s->facturado = "Facturado"; }else{ $s->facturado = "No facturado"; } $s->tiempo_atencion = $this->diferenciaFechas($s->fecha_agenda, $s->fecha_solicitud); $s->fecha_agenda = $this->formatearFechaHora($s->fecha_agenda); $s->fecha_solicitud = $this->formatearFechaHora($s->fecha_solicitud); } Excel::create($nombre, function($excel) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_costo, $total_litraje){ // Set the title $excel->setTitle('Reporte de Servicios'); // Chain the setters $excel->setCreator('DRENAX') ->setCompany('DRENAX'); // Call them separately $excel->setDescription('Reporte de Servicios'); $excel->sheet('Reporte_Servicios_Sucursal', function ($sheet) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_costo, $total_litraje) { $sheet->setColumnFormat(array( 'G' => '"$"#,##0.00_-', 'C' => 'd/m/y', 'N8' => '"$"#,##0.00_-', 'S' => '#,#', 'P8' => '#,#' )); //Mostrar logo $sheet->mergeCells('B2:D6'); $objDrawing = new \PHPExcel_Worksheet_Drawing; $objDrawing->setPath(resource_path('assets/images/logos').'/logo_drenax.png'); $objDrawing->setWidth(95); $objDrawing->setHeight(80); $objDrawing->setCoordinates('B2'); $objDrawing->setOffsetX(9); $objDrawing->setOffsetY(9); $objDrawing->setWorksheet($sheet); $sheet->mergeCells('I2:L6'); $sheet->cell('I2', function($cell) use($titulo) { $cell->setFontFamily('Aharoni'); $cell->setFontWeight('bold'); $cell->setAlignment('center'); $cell->setValignment('center'); $cell->setFontSize(20); $cell->setValue($titulo); }); $sheet->cell('K8', function($cell) use($fecha_inicio) { list($y, $m, $d) = explode("-", $fecha_inicio); $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue('Del: '.$d.'/'.$m.'/'.$y); }); $sheet->cell('L8', function($cell) use($fecha_final) { list($y, $m, $d) = explode("-", $fecha_final); $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue('Al: '.$d.'/'.$m.'/'.$y); }); $sheet->cell('N7', function($cell) { $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue('Costo:'); }); $sheet->cell('N8', function($cell) use ($total_costo) { $cell->setFontFamily('Calibri'); $cell->setAlignment('right'); $cell->setFontSize(12); $cell->setValue($total_costo); }); $sheet->cell('O7', function($cell) { $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue('Total:'); }); $sheet->cell('O8', function($cell) use($total) { $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue($total.' Servicios'); }); $sheet->cell('P7', function($cell) { $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue('Total litros:'); }); $sheet->cell('P8', function($cell) use($total_litraje) { $cell->setFontFamily('Calibri'); $cell->setAlignment('left'); $cell->setFontSize(12); $cell->setValue($total_litraje); }); //Mostar valores de consulta $sheet->fromArray($servicios, null, 'B9', true); //Formato en columnas de titulo $sheet->cells('B9:W9', function ($cells) { $cells->setBackground('#001870'); $cells->setFontColor('#ffffff'); $cells->setFontSize(13); $cells->setFontFamily('Calibri'); $cells->setAlignment('left'); $cells->setFontWeight('bold'); }); $sheet->getStyle('B9:R9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true); //Titulos personalizados $titulos_cell = [ ['cell' => 'B9', 'titulo' => 'Número de solicitud'], ['cell' => 'C9', 'titulo' => 'Fecha y hora de registro'], ['cell' => 'D9', 'titulo' => 'Fecha y hora programada'], ['cell' => 'E9', 'titulo' => 'Tiempo de atención'], ['cell' => 'F9', 'titulo' => 'Servicio'], ['cell' => 'G9', 'titulo' => 'Costo de servicio'], ['cell' => 'H9', 'titulo' => 'Tipo de servicio'], ['cell' => 'I9', 'titulo' => 'Estatus de servicio'], ['cell' => 'J9', 'titulo' => 'Nombre del cliente'], ['cell' => 'K9', 'titulo' => 'Email del cliente'], ['cell' => 'L9', 'titulo' => 'Domicilio de servicio'], ['cell' => 'M9', 'titulo' => 'Email de domicilio'], ['cell' => 'N9', 'titulo' => 'Asesor de operaciones'], ['cell' => 'O9', 'titulo' => 'Auxiliar de operaciones'], ['cell' => 'P9', 'titulo' => 'Vehículo asignado'], ['cell' => 'Q9', 'titulo' => 'Duración del servicio (cronómetro)'], ['cell' => 'R9', 'titulo' => 'Hora inicio'], ['cell' => 'S9', 'titulo' => 'Puntualidad'], ['cell' => 'T9', 'titulo' => 'Origen'], ['cell' => 'U9', 'titulo' => 'Litraje'], ['cell' => 'V9', 'titulo' => 'Facturado'], ['cell' => 'W9', 'titulo' => 'Forma de pago'], ]; foreach ($titulos_cell as $t){ $sheet->cell($t['cell'], function($cell) use($t) { $cell->setValue($t['titulo']); }); } //Size a columnas indicadas $columns_set = [ 'B9', 'C9', 'D9', 'N9', 'O9', 'U9', 'V9', 'W9' ]; foreach ($columns_set as $c){ $set_column = [ $c => [ 'width' => ($c == 'O9' || $c == 'Q9')? 23: ($c == 'B9') ? 14 : 20, 'height' => 40 ] ]; $sheet->setSize($set_column); } //AutoSize en columnas indicadas $columns_auto= [ 'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W' ]; foreach ($columns_auto as $c){ $sheet->getColumnDimension($c)->setAutoSize(true); } $sheet->setWidth(array( 'A' => 3, )); //Borde $columns_border= [ 'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W' ]; for ($i=0; $i<= $total; $i++){ $row = 9 + $i; foreach ($columns_border as $cb){ $border = "$cb$row:$cb$row"; $sheet->cells($border, function ($cells) { $cells->setBorder('thin', 'thin', 'thin', 'thin'); }); if($row != 9 && ($cb == 'C' || $cb == 'D' || $cb == 'G' || $cb == 'O' || $cb == 'P' || $cb == 'Q' || $cb == 'S' || $cb == 'T')){ $sheet->cells("$cb$row", function ($cells) { $cells->setAlignment('right'); }); } } } }); })->store('xls', storage_path('app') . '/public/reportes/servicios/'); return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]); } }