Carga inicial
This commit is contained in:
409
app/Http/Controllers/Reportes/CapacidadAprovechadaController.php
Normal file
409
app/Http/Controllers/Reportes/CapacidadAprovechadaController.php
Normal file
@@ -0,0 +1,409 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use App\Http\Requests\Reportes\CapacidadAprovechadaRequest;
|
||||
use App\Http\Requests\Reportes\ConsultarVehiculosRequest;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\Vehiculo;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Excel;
|
||||
|
||||
class CapacidadAprovechadaController extends Controller
|
||||
{
|
||||
public function consultarVehiculos(ConsultarVehiculosRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
|
||||
$orderBy = $request->input('sortBy','id');
|
||||
$order = $request->input('order','asc');
|
||||
|
||||
$queryBuilder = Vehiculo::select('id', 'num_economico')
|
||||
->join('vehiculos_sucursales', 'cat_vehiculos.id', '=', 'vehiculos_sucursales.vehiculo_id')
|
||||
->where('vehiculos_sucursales.sucursal_id', $sucursal)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('num_economico','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
foreach ($data->items() as $v){
|
||||
$v->servicios_cantidad = ServicioDet::where('servicios_det.vehiculo_id', $v->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
$vehiculos = $data;
|
||||
}else{
|
||||
|
||||
$data = $queryBuilder->get();
|
||||
foreach ($data as $v){
|
||||
$v->servicios_cantidad = ServicioDet::where('servicios_det.vehiculo_id', $v->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
$vehiculos = ['data'=>$data];
|
||||
}
|
||||
|
||||
return response()->success($vehiculos);
|
||||
}
|
||||
|
||||
public function reportes(CapacidadAprovechadaRequest $request){
|
||||
|
||||
$orderBy = $request->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');
|
||||
$vehiculo_id = $request->input('vehiculo_id');
|
||||
|
||||
$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',
|
||||
'servicios_progreso.duracion as duracion_servicio'
|
||||
];
|
||||
|
||||
$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')
|
||||
->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_det.vehiculo_id', $vehiculo_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
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');
|
||||
$total_duracion = $this->sumarTiempos($queryBuilder->pluck('duracion_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;
|
||||
list($h,$m,$s) = explode(':',$total_duracion);
|
||||
$data['total_duracion'] = $h."hr ".$m."m ".$s."s";
|
||||
|
||||
return response()->success($data);
|
||||
}
|
||||
|
||||
public function generarExcel(CapacidadAprovechadaRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
$vehiculo_id = $request->input('vehiculo_id');
|
||||
|
||||
$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',
|
||||
DB::raw("CONCAT(clientes_domicilios.calle,' ',clientes_domicilios.num_ext,' ', clientes_domicilios.colonia,' ',clientes_domicilios.cp,' ',clientes_domicilios.ciudad) as 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"),
|
||||
'servicios_progreso.duracion as duracion_servicio'
|
||||
];
|
||||
|
||||
$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')
|
||||
->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_det.vehiculo_id', $vehiculo_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy('servicios_enc.id','asc');
|
||||
|
||||
$servicios = $queryBuilder->get();
|
||||
$total = $queryBuilder->count();
|
||||
$total_costo = $queryBuilder->sum('servicios_det.costo_servicio');
|
||||
$duracion = $this->sumarTiempos($queryBuilder->pluck('duracion_servicio'));
|
||||
list($h,$m,$s) = explode(':',$duracion);
|
||||
$total_duracion = $h."hr ".$m."m ".$s."s";
|
||||
|
||||
$vehiculo = Vehiculo::select('num_economico', 'cat_tipos_vehiculos.nombre as tipo_vehiculo')
|
||||
->join('cat_tipos_vehiculos', 'cat_vehiculos.tipo_vehiculo_id', '=', 'cat_tipos_vehiculos.id')
|
||||
->where('cat_vehiculos.id', $vehiculo_id)
|
||||
->first();
|
||||
|
||||
$titulo = "Reporte Capacidad Aprovechada ".$vehiculo->num_economico."_".$vehiculo->tipo_vehiculo;
|
||||
|
||||
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_Capacidad_Aprovechada_".$vehiculo->num_economico."_".$vehiculo->tipo_vehiculo."_".$f_i."-".$f_f;
|
||||
|
||||
foreach ($servicios as $s){
|
||||
$s->costo = floatval($s->costo);
|
||||
list($y, $m, $d) = explode("-", $s->fecha_servicio);
|
||||
$s->fecha_servicio = "$d/$m/$y";
|
||||
$s->numero_solicitud = (int)$s->numero_solicitud;
|
||||
}
|
||||
|
||||
Excel::create($nombre, function($excel) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_costo, $total_duracion){
|
||||
|
||||
// Set the title
|
||||
$excel->setTitle('Reporte de Servicios de Cliente');
|
||||
|
||||
// Chain the setters
|
||||
$excel->setCreator('DRENAX')
|
||||
->setCompany('DRENAX');
|
||||
|
||||
// Call them separately
|
||||
$excel->setDescription('Reporte de Servicios de Cliente');
|
||||
|
||||
$excel->sheet('Reporte_Capacidad_Aprovechada', function ($sheet) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_costo, $total_duracion) {
|
||||
|
||||
$sheet->setColumnFormat(array(
|
||||
'F' => '"$"#,##0.00_-',
|
||||
'C' => 'd/m/y',
|
||||
'L8' => '"$"#,##0.00_-'
|
||||
));
|
||||
|
||||
//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('G2:J6');
|
||||
|
||||
$sheet->cell('G2', function($cell) use($titulo) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('H8', 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('I8', 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('K7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total en Horas de servicio:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('K8', function($cell) use($total_duracion) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total_duracion);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('L7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total en Costos del servicio:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('L8', function($cell) use($total_costo) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total_costo);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('M7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('M8', function($cell) use($total) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total.' Servicios');
|
||||
|
||||
});
|
||||
|
||||
//Mostar valores de consulta
|
||||
$sheet->fromArray($servicios, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:M9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
|
||||
$sheet->getStyle('B9:M9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de solicitud'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha del servicio'],
|
||||
['cell' => 'D9', 'titulo' => 'Hora del servicio'],
|
||||
['cell' => 'E9', 'titulo' => 'Servicio'],
|
||||
['cell' => 'F9', 'titulo' => 'Costo de servicio'],
|
||||
['cell' => 'G9', 'titulo' => 'Tipo de servicio'],
|
||||
['cell' => 'H9', 'titulo' => 'Estatus de servicio'],
|
||||
['cell' => 'I9', 'titulo' => 'Nombre del cliente'],
|
||||
['cell' => 'J9', 'titulo' => 'Domicilio de servicio'],
|
||||
['cell' => 'K9', 'titulo' => 'Asesor de operaciones'],
|
||||
['cell' => 'L9', 'titulo' => 'Auxiliar de operaciones'],
|
||||
['cell' => 'M9', 'titulo' => 'Duración del servicio (cronómetro)']
|
||||
];
|
||||
|
||||
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', 'M9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'M9')? 23: 14,
|
||||
'height' => 40
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
//AutoSize en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G','H','I','J','K', 'L'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
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 == 'F' || $cb == 'N')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
})->store('xls', storage_path('app') . '/public/reportes/servicios_capacidad/');
|
||||
|
||||
return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]);
|
||||
}
|
||||
}
|
||||
709
app/Http/Controllers/Reportes/EncuestasGeneralController.php
Normal file
709
app/Http/Controllers/Reportes/EncuestasGeneralController.php
Normal file
@@ -0,0 +1,709 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\DOMESTICO;
|
||||
use const App\Http\Controllers\EMPRESARIAL;
|
||||
use App\Http\Requests\Reportes\EncuestasGeneralRequest;
|
||||
use App\Models\PreguntaDomestico;
|
||||
use App\Models\PreguntaEmpresarial;
|
||||
use App\Models\RespuestaDomestico;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\ServicioEnc;
|
||||
use App\Models\ServicioEncuestaDomestico;
|
||||
use App\Models\ServicioEncuestaEmpresarial;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Illuminate\Support\Arr;
|
||||
use Log;
|
||||
use Maatwebsite\Excel\Facades\Excel;
|
||||
|
||||
class EncuestasGeneralController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
|
||||
public function resultado(EncuestasGeneralRequest $request) {
|
||||
|
||||
$year = $request->input('year');
|
||||
$month = $request->input('mes',Carbon::now()->format('m'));
|
||||
$operador_id = $request->input('operador_id', 0);
|
||||
$sucursal = $request->input('sucursal');
|
||||
|
||||
$empresarial = $this->empresarial($month, $year, $operador_id, $sucursal);
|
||||
$domestico = $this->domestico($month, $year, $operador_id, $sucursal);
|
||||
|
||||
return response()->success(compact('domestico', 'empresarial'));
|
||||
|
||||
}
|
||||
|
||||
public function domestico($month, $year, $operador_id, $sucursal) {
|
||||
|
||||
$servicios_det = ServicioDet::select('servicios_det.id')
|
||||
->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $month)
|
||||
->whereYear('servicios_det.fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('tipo_servicio_id', DOMESTICO);
|
||||
|
||||
if($operador_id){
|
||||
$servicios_det->where(function($q) use ($operador_id){
|
||||
$q->where('operador_id',$operador_id)
|
||||
->orWhere('auxiliar_1',$operador_id)
|
||||
->orWhere('auxiliar_2',$operador_id);
|
||||
});
|
||||
}
|
||||
|
||||
$id = $servicios_det->pluck('id');
|
||||
|
||||
$d = ServicioEncuestaDomestico::select('preguntas_domestico.nombre as pregunta', DB::raw('ROUND(AVG(coalesce(respuestas_domestico.puntuacion,0)), 2) as puntuacion'))
|
||||
->join('respuestas_domestico', 'servicios_encuestas_domestico.respuesta_id', '=', 'respuestas_domestico.id')
|
||||
->join('preguntas_domestico','servicios_encuestas_domestico.pregunta_id', '=','preguntas_domestico.id')
|
||||
->whereIn('servicio_det_id', $id)
|
||||
->whereNotNull('respuesta_id')
|
||||
->groupBy('servicios_encuestas_domestico.pregunta_id', 'preguntas_domestico.nombre')
|
||||
->get();
|
||||
|
||||
$salida = [];
|
||||
foreach ($d as $e){
|
||||
$salida[] = [$e->pregunta, (float)$e->puntuacion];
|
||||
}
|
||||
|
||||
return $salida;
|
||||
}
|
||||
|
||||
public function empresarial($month, $year, $operador_id, $sucursal){
|
||||
|
||||
$servicios_det = ServicioDet::select('servicios_det.id')
|
||||
->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $month)
|
||||
->whereYear('servicios_det.fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('tipo_servicio_id', EMPRESARIAL);
|
||||
|
||||
if($operador_id){
|
||||
$servicios_det->where(function($q) use ($operador_id){
|
||||
$q->where('operador_id',$operador_id)
|
||||
->orWhere('auxiliar_1',$operador_id)
|
||||
->orWhere('auxiliar_2',$operador_id);
|
||||
});
|
||||
}
|
||||
|
||||
$id = $servicios_det->pluck('id');
|
||||
|
||||
|
||||
$e = ServicioEncuestaEmpresarial::select('preguntas_empresarial.nombre as pregunta', DB::raw('ROUND(AVG(coalesce(respuestas_empresarial.puntuacion,0)), 2) as puntuacion'))
|
||||
->join('respuestas_empresarial', 'servicios_encuestas_empresarial.respuesta_id', '=', 'respuestas_empresarial.id')
|
||||
->join('preguntas_empresarial','servicios_encuestas_empresarial.pregunta_id', '=','preguntas_empresarial.id')
|
||||
->whereIn('servicio_det_id', $id)
|
||||
->whereNotNull('respuesta_id')
|
||||
->groupBy('servicios_encuestas_empresarial.pregunta_id', 'preguntas_empresarial.nombre')
|
||||
->get();
|
||||
|
||||
$salida = [];
|
||||
foreach ($e as $l){
|
||||
$salida[] = [$l->pregunta, (float)$l->puntuacion];
|
||||
}
|
||||
|
||||
return $salida;
|
||||
}
|
||||
|
||||
|
||||
public function generarExcel(EncuestasGeneralRequest $request) {
|
||||
|
||||
$year = $request->input('year');
|
||||
$month = $request->input('mes',Carbon::now()->format('m'));
|
||||
$operador_id = $request->input('operador_id', null);
|
||||
$sucursal = $request->input('sucursal', 1);
|
||||
|
||||
|
||||
/*$domestico = PreguntaDomestico::select('nombre')
|
||||
->where('mostrar_numero', 1)
|
||||
->get();
|
||||
|
||||
$preguntas_domestico = [];
|
||||
|
||||
foreach ($domestico as $l){
|
||||
$preguntas_domestico[] = [$l->nombre];
|
||||
}
|
||||
|
||||
$empresarial = PreguntaEmpresarial::select('nombre')
|
||||
->where('mostrar_numero', 1)
|
||||
->get();
|
||||
$preguntas_empresarial = [];
|
||||
|
||||
foreach ($empresarial as $z){
|
||||
$preguntas_empresarial[] = [$z->nombre];
|
||||
}*/
|
||||
|
||||
// Se va a calcular el promedio para domestico
|
||||
|
||||
(int)$suma = 0;
|
||||
(int)$contador= 0;
|
||||
(double)$promedio_domestico = 0;
|
||||
$domestico = $this->domesticoExcel($year, $month, $operador_id, $sucursal);
|
||||
|
||||
$dom = [];
|
||||
foreach ($domestico as $domestic) {
|
||||
$preg = [];
|
||||
foreach($domestic->preguntas as $detalle) {
|
||||
if($detalle->puntuacion){
|
||||
$preg[] = $detalle->puntuacion;
|
||||
$suma += $detalle->puntuacion;
|
||||
$contador = $contador + 1;
|
||||
}
|
||||
}
|
||||
|
||||
$det = [$domestic->servicio_id, $domestic->fecha_solicitud, $domestic->cliente, $domestic->operador, $domestic->fecha_nacimiento, $domestic->correo];
|
||||
$dom[] = array_merge($det, $preg);
|
||||
}
|
||||
if($contador){
|
||||
(double)$promedio_domestico = $suma / $contador;
|
||||
}
|
||||
|
||||
|
||||
//Cálculo del promedio de empresarial
|
||||
|
||||
$empresarial = $this->empresarialExcel($year, $month, $operador_id, $sucursal);
|
||||
|
||||
|
||||
(int)$suma_e = 0;
|
||||
(int)$contador_e= 0;
|
||||
(double)$promedio_empresarial = 0;
|
||||
$empa = [];
|
||||
|
||||
foreach ($empresarial as $empresa) {
|
||||
$preg = [];
|
||||
foreach($empresa->preguntas as $detalle) {
|
||||
if($detalle->puntuacion){
|
||||
$preg[] = $detalle->puntuacion;
|
||||
$suma_e += $detalle->puntuacion;
|
||||
$contador_e = $contador_e + 1;
|
||||
}
|
||||
}
|
||||
$det = [$empresa->servicio_id, $empresa->fecha_solicitud, $empresa->cliente, $empresa->operador, $empresa->fecha_nacimiento, $empresa->correo];
|
||||
$empa[] = array_merge($det, $preg);
|
||||
|
||||
}
|
||||
|
||||
if($contador_e){
|
||||
(double)$promedio_empresarial = $suma_e / $contador_e;
|
||||
}
|
||||
|
||||
|
||||
//Información que va necesitar el excel nombre y titulos
|
||||
$total = $domestico->count();
|
||||
|
||||
|
||||
|
||||
//Transformar el número del mes por la información
|
||||
$mes = '';
|
||||
$meses = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
|
||||
foreach ($meses as $key => $m){
|
||||
if($key+1 == $month) {
|
||||
$mes = $m;
|
||||
}
|
||||
}
|
||||
|
||||
if($operador_id){
|
||||
$query = User::select(DB::raw("CONCAT(users.nombre,' ', users.apellido_paterno, ' ', users.apellido_materno) as operador"))
|
||||
->where('id', $operador_id)
|
||||
->first();
|
||||
$operador_title = $query->operador;
|
||||
|
||||
}
|
||||
|
||||
$total_e = $empresarial->count();
|
||||
|
||||
$nombre = ($operador_id) ? "Reporte_encuestas_domestico_empresarial".'_'.$mes.'_'.$year.'_detalle'.'_'. str_replace(' ', '_', $operador_title) : "Reporte_encuestas_domestico_empresarial".'_'.$mes.'_'.$year.'_'.$operador_title;
|
||||
|
||||
$titulo_domestico = ($operador_id) ? "Reporte encuestas doméstico".' '.$operador_title : "Reporte encuestas doméstico general";
|
||||
$titulo_empresarial = ($operador_id) ? "Reporte encuestas empresarial".' '.$operador_title : "Reporte encuestas empresarial general";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Generación del excel
|
||||
Excel::create($nombre, function ($excel) use($dom, $total, $titulo_domestico, $promedio_domestico, $promedio_empresarial, $titulo_empresarial, $empa, $total_e, $sucursal, $mes, $year) {
|
||||
// Set del título del documento
|
||||
$excel->setTitle('Reporte de Encuestas');
|
||||
|
||||
// Seters de la campañía
|
||||
$excel->setCreator('DRENAX')
|
||||
->setCompany('DRENAX');
|
||||
|
||||
// Creación de la descripción
|
||||
$excel->setDescription('Reporte de Encuesta en servicios');
|
||||
|
||||
$excel->sheet('Reporte_encuestas_domestico', function ($sheet) use($dom, $titulo_domestico, $total, $promedio_domestico, $sucursal, $mes, $year){
|
||||
|
||||
$sheet->mergeCells('B2:D6');
|
||||
|
||||
//Mostrar el logo
|
||||
|
||||
$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);
|
||||
|
||||
//Mostrar el título de la hoja de excel
|
||||
$sheet->mergeCells('G2:J6');
|
||||
|
||||
$sheet->cell('G2', function($cell) use($titulo_domestico) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo_domestico);
|
||||
|
||||
});
|
||||
|
||||
//Información entre el encabezado y la información
|
||||
$sheet->cell('N7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Fecha');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('N8', function($cell) use($mes, $year) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($mes.' '.$year);
|
||||
});
|
||||
|
||||
$sheet->cell('O7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Promedio General:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('O8', function($cell) use($promedio_domestico) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($promedio_domestico.'%');
|
||||
});
|
||||
|
||||
// Mostar valores de consulta
|
||||
$sheet->fromArray($dom, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:O9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
// Asignar el listado
|
||||
$sheet->getStyle('B9:O9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de servicio'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha de solicitud'],
|
||||
['cell' => 'D9', 'titulo' => 'Cliente'],
|
||||
['cell' => 'E9', 'titulo' => 'Asesor asignado'],
|
||||
['cell' => 'F9', 'titulo' => 'Fecha de nacimiento'],
|
||||
['cell' => 'G9', 'titulo' => 'Correo'],
|
||||
['cell' => 'H9', 'titulo' => '¿El personal se presentó y mostró la orden de trabajo previo a la realización de su servicio?'],
|
||||
['cell' => 'I9', 'titulo' => '¿Cómo califica la puntualidad de nuestro personal?'],
|
||||
['cell' => 'J9', 'titulo' => '¿Cómo califica la imagen de nuestro personal?'],
|
||||
['cell' => 'K9', 'titulo' => '¿El asesor usó los instrumentos de seguridad e higiene para la correcta ejecución del servicio?'],
|
||||
['cell' => 'L9', 'titulo' => '¿Cómo califica la atención y asesoría brindada por los asesores?'],
|
||||
['cell' => 'M9', 'titulo' => '¿El servicio fue efectivo quedando conforme con lo que contrató?'],
|
||||
['cell' => 'N9', 'titulo' => '¿Cómo califica la atención y asesoría telefonica?'],
|
||||
['cell' => 'O9', 'titulo' => 'De acuerdo al servicio recibido, ¿usted nos recomendaría?']
|
||||
];
|
||||
|
||||
// Obtener los títulos de la tabla
|
||||
foreach ($titulos_cell as $t){
|
||||
$sheet->cell($t['cell'], function($cell) use($t) {
|
||||
$cell->setValue($t['titulo']);
|
||||
});
|
||||
}
|
||||
|
||||
//Darle un tamaño a las celdas
|
||||
$columns_set = [
|
||||
'B9', 'C9', 'D9', 'K9', 'L9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'D9' || $c == 'G9')? 25: 16,
|
||||
'height' => 40
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
$question_set = [
|
||||
'H9', 'I9', 'J9', 'K9', 'L9', 'M9', 'N9', 'O9'
|
||||
];
|
||||
|
||||
foreach ($question_set as $q){
|
||||
$question = [
|
||||
$q => [
|
||||
'width' => 35,
|
||||
'height' => 50
|
||||
]
|
||||
];
|
||||
$sheet->setSize($question);
|
||||
}
|
||||
|
||||
|
||||
//Tamaño automático en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
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 == 'F' || $cb == 'L')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
$excel->sheet('Reporte_encuestas_empresarial', function ($sheet) use($promedio_domestico, $sucursal, $mes, $year, $titulo_empresarial, $promedio_empresarial, $empa, $total_e){
|
||||
$sheet->mergeCells('B2:D6');
|
||||
|
||||
//Mostrar el logo
|
||||
|
||||
$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);
|
||||
|
||||
//Mostrar el título de la hoja de excel
|
||||
$sheet->mergeCells('G2:J6');
|
||||
|
||||
$sheet->cell('G2', function($cell) use($titulo_empresarial) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo_empresarial);
|
||||
|
||||
});
|
||||
|
||||
//Información entre el encabezado y la información
|
||||
$sheet->cell('P7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Fecha');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('P8', function($cell) use($mes, $year) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($mes.' '.$year);
|
||||
});
|
||||
|
||||
$sheet->cell('Q7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Promedio General:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('Q8', function($cell) use($promedio_empresarial) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($promedio_empresarial.'%');
|
||||
});
|
||||
|
||||
// Mostar valores de consulta
|
||||
$sheet->fromArray($empa, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:Q9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
|
||||
$sheet->getStyle('B9:Q9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de servicio'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha de solicitud'],
|
||||
['cell' => 'D9', 'titulo' => 'Cliente'],
|
||||
['cell' => 'E9', 'titulo' => 'Asesor asignado'],
|
||||
['cell' => 'F9', 'titulo' => 'Fecha de nacimiento'],
|
||||
['cell' => 'G9', 'titulo' => 'Correo'],
|
||||
['cell' => 'H9', 'titulo' => '¿Su servicio fue programado en tiempo y forma?'],
|
||||
['cell' => 'I9', 'titulo' => '¿El asesor de operaciones realiza recibo de servicio, y es llenado correctamente hora de inicio y hora final?'],
|
||||
['cell' => 'J9', 'titulo' => '¿Cómo califica la imagen del personal?'],
|
||||
['cell' => 'K9', 'titulo' => '¿El asesor usó los instrumentos de seguridad e higiene para la correcta ejecución del servicio?'],
|
||||
['cell' => 'L9', 'titulo' => '¿Cómo califica la atención y asesoría brindada por los asesores de operaciones?'],
|
||||
['cell' => 'M9', 'titulo' => '¿Cómo califica la calidad del servicio contratado?'],
|
||||
['cell' => 'N9', 'titulo' => '¿Cómo califica la atención y asesoría telefonica?'],
|
||||
['cell' => 'O9', 'titulo' => '¿Recibió su factura del mes en tiempo y forma?'],
|
||||
['cell' => 'P9', 'titulo' => '¿Cómo califica nuestra área de cobranza?'],
|
||||
['cell' => 'Q9', 'titulo' => '¿Cómo califica en general a la empresa DRENAX?']
|
||||
];
|
||||
|
||||
// Obtener los títulos de la tabla
|
||||
foreach ($titulos_cell as $t){
|
||||
$sheet->cell($t['cell'], function($cell) use($t) {
|
||||
$cell->setValue($t['titulo']);
|
||||
});
|
||||
}
|
||||
|
||||
//Darle un tamaño a las celdas
|
||||
$columns_set = [
|
||||
'B9', 'C9', 'D9', 'K9', 'L9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'D9' || $c == 'G9')? 25: 16,
|
||||
'height' => 40
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
$question_set = [
|
||||
'H9', 'I9', 'J9', 'K9', 'L9', 'M9', 'N9', 'O9', 'P9', 'Q9'
|
||||
];
|
||||
|
||||
foreach ($question_set as $q){
|
||||
$question = [
|
||||
$q => [
|
||||
'width' => 35,
|
||||
'height' => 50
|
||||
]
|
||||
];
|
||||
$sheet->setSize($question);
|
||||
}
|
||||
|
||||
|
||||
//Tamaño automático en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
for ($i=0; $i<= $total_e; $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 == 'F' || $cb == 'L')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Hoja de excel por defecto
|
||||
$excel->setActiveSheetIndex(0);
|
||||
|
||||
})->store('xls', storage_path('app') . '/public/reportes/servicios_encuestas/');
|
||||
|
||||
return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]);
|
||||
|
||||
}
|
||||
|
||||
public function domesticoExcel($year, $month, $operador_id, $sucursal){
|
||||
// Campos que se necesitan para mostrar en el reporte de excel
|
||||
$campos = [
|
||||
'servicios_det.id as servicio_id',
|
||||
DB::raw("DATE(servicios_det.fecha_solicitud) as 'fecha_solicitud'"),
|
||||
'clientes.denominacion as cliente',
|
||||
DB::raw("CONCAT(users.nombre,' ', users.apellido_paterno, ' ', users.apellido_materno) as operador")];
|
||||
//Consulta pra trae y filtrar la información para mostrar
|
||||
$servicios_det = ServicioDet::select($campos)
|
||||
->join('users', 'servicios_det.operador_id', '=', 'users.id')
|
||||
->join('servicios_enc', 'servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->join('clientes', 'servicios_enc.cliente_id', '=', 'clientes.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $month)
|
||||
->whereYear('servicios_det.fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)
|
||||
->where('tipo_servicio_id', DOMESTICO)
|
||||
->where('users.sucursal_id', $sucursal)
|
||||
->orderBy('users.tipo_empleado_id', 'asc')
|
||||
->orderBy('servicios_det.id', 'asc')
|
||||
->orderBy('operador', 'asc');
|
||||
|
||||
// Validamos si está filtrado por asesor o bien auxiliar de operación
|
||||
if($operador_id){
|
||||
$servicios_det->where(function($q) use ($operador_id){
|
||||
$q->where('operador_id',$operador_id)
|
||||
->orWhere('auxiliar_1',$operador_id)
|
||||
->orWhere('auxiliar_2',$operador_id);
|
||||
});
|
||||
}
|
||||
// Obtenemos los datos antes que se va a realizar la próxima consulta
|
||||
$servicios = $servicios_det->get();
|
||||
|
||||
foreach($servicios as $servicio){
|
||||
// Esta consulta es para traer la cantidad de preguntas que vamos a mostrar en el excel
|
||||
$servicio->preguntas = ServicioEncuestaDomestico::select('respuestas_domestico.puntuacion as puntuacion')
|
||||
->join('respuestas_domestico', 'respuesta_id','=','respuestas_domestico.id')
|
||||
->where('servicio_det_id', $servicio->servicio_id)
|
||||
->get();
|
||||
// obtenemos la fecha de nacimiento del cliente en caso de haberla mandado
|
||||
$fecha = ServicioEncuestaDomestico::select('respuesta')
|
||||
->where('servicio_det_id', $servicio->servicio_id)
|
||||
->where('pregunta_id', 11)
|
||||
->first();
|
||||
$servicio->fecha_nacimiento = ($fecha)? $fecha->respuesta : null;
|
||||
//Obtenemos el correo del cliente en caso dde haberla aceptado
|
||||
$correo = ServicioEncuestaDomestico::select('respuesta')
|
||||
->where('servicio_det_id', $servicio->servicio_id)
|
||||
->where('pregunta_id', 10)
|
||||
->first();
|
||||
$servicio->correo = ($correo)? $correo->respuesta : null;
|
||||
}
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
// Esta funcion es para traer los datos que necesitamos para la hoja de servicios empresariales
|
||||
|
||||
public function empresarialExcel($year, $month, $operador_id, $sucursal){
|
||||
$campos = [
|
||||
'servicios_det.id as servicio_id',
|
||||
DB::raw("DATE(servicios_det.fecha_solicitud) as 'fecha_solicitud'"),
|
||||
'clientes.denominacion as cliente',
|
||||
DB::raw("CONCAT(users.nombre,' ', users.apellido_paterno, ' ', users.apellido_materno) as operador")];
|
||||
|
||||
$servicios_det = ServicioDet::select($campos)
|
||||
->join('users', 'servicios_det.operador_id', '=', 'users.id')
|
||||
->join('servicios_enc', 'servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->join('clientes', 'servicios_enc.cliente_id', '=', 'clientes.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $month)
|
||||
->whereYear('servicios_det.fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)
|
||||
->where('tipo_servicio_id', EMPRESARIAL)
|
||||
->where('users.sucursal_id', $sucursal)
|
||||
->orderBy('users.tipo_empleado_id', 'asc')
|
||||
->orderBy('servicios_det.id', 'asc')
|
||||
->orderBy('operador', 'asc');
|
||||
|
||||
if($operador_id){
|
||||
$servicios_det->where(function($q) use ($operador_id){
|
||||
$q->where('operador_id',$operador_id)
|
||||
->orWhere('auxiliar_1',$operador_id)
|
||||
->orWhere('auxiliar_2',$operador_id);
|
||||
});
|
||||
}
|
||||
|
||||
$servicios_emp = $servicios_det->get();
|
||||
|
||||
|
||||
foreach($servicios_emp as $servicio_emp){
|
||||
|
||||
$servicio_emp->preguntas = ServicioEncuestaEmpresarial::select('respuestas_empresarial.puntuacion as puntuacion')
|
||||
->join('respuestas_empresarial', 'respuesta_id','=','respuestas_empresarial.id')
|
||||
->where('servicio_det_id', $servicio_emp->servicio_id)
|
||||
->get();
|
||||
|
||||
$fecha = ServicioEncuestaEmpresarial::select('respuesta')
|
||||
->where('servicio_det_id', $servicio_emp->servicio_id)
|
||||
->where('pregunta_id', 11)
|
||||
->first();
|
||||
|
||||
$servicio_emp->fecha_nacimiento = ($fecha)? $fecha->respuesta : null;
|
||||
|
||||
$correo = ServicioEncuestaEmpresarial::select('respuesta')
|
||||
->where('servicio_det_id', $servicio_emp->servicio_id)
|
||||
->where('pregunta_id', 10)
|
||||
->first();
|
||||
|
||||
$servicio_emp->correo = ($correo)? $correo->respuesta : null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $servicios_emp;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
261
app/Http/Controllers/Reportes/FiltrosController.php
Normal file
261
app/Http/Controllers/Reportes/FiltrosController.php
Normal file
@@ -0,0 +1,261 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\ASESOR_OPERACIONES;
|
||||
use const App\Http\Controllers\AUXILIAR_TECNICO_1;
|
||||
use const App\Http\Controllers\AUXILIAR_TECNICO_2;
|
||||
use App\Http\Requests\Reportes\FiltroAsesoresRequest;
|
||||
use App\Models\CatEstatuServicio;
|
||||
use App\Models\CatOrigen;
|
||||
use App\Models\CatServicio;
|
||||
use App\Models\CatTipoServicio;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\ServicioEncuestaDomestico;
|
||||
use App\Models\ServicioEncuestaEmpresarial;
|
||||
use App\Models\Sucursal;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Auth;
|
||||
use Log;
|
||||
|
||||
class FiltrosController extends Controller
|
||||
{
|
||||
public function sucursales(Request $request){
|
||||
|
||||
$deleted = $request->input('deleted');
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
$queryBuilder = Sucursal::orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($deleted) {
|
||||
$queryBuilder->onlyTrashed();
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$sucursal = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$sucursal = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($sucursal);
|
||||
}
|
||||
|
||||
public function servicios(Request $request)
|
||||
{
|
||||
$deleted = $request->input('deleted');
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
$queryBuilder = CatServicio::orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($deleted) {
|
||||
$queryBuilder->onlyTrashed();
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$servicios = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$servicios = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($servicios);
|
||||
}
|
||||
|
||||
public function tiposServicio(Request $request)
|
||||
{
|
||||
$deleted = $request->input('deleted');
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
$queryBuilder = CatTipoServicio::orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($deleted) {
|
||||
$queryBuilder->onlyTrashed();
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$tipos_servicios = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$tipos_servicios = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($tipos_servicios);
|
||||
}
|
||||
|
||||
public function estatusServicio(Request $request)
|
||||
{
|
||||
$deleted = $request->input('deleted');
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
$queryBuilder = CatEstatuServicio::orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($deleted) {
|
||||
$queryBuilder->onlyTrashed();
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$estatus = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$estatus = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($estatus);
|
||||
}
|
||||
|
||||
public function origenes(Request $request)
|
||||
{
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
|
||||
$queryBuilder = CatOrigen::orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$data = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($data);
|
||||
}
|
||||
|
||||
public function asesores(FiltroAsesoresRequest $request) {
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$orderBy = $request->input('sortBy','tipo_empleado_id');
|
||||
$order = $request->input('order','asc');
|
||||
$month = $request->input('mes');
|
||||
$year = $request->input('year');
|
||||
|
||||
$queryBuilder = User::select('id', 'nombre', 'apellido_paterno', 'apellido_materno', 'tipo_empleado_id')
|
||||
->where('sucursal_id', $sucursal)
|
||||
->whereIn('tipo_empleado_id', [ASESOR_OPERACIONES, AUXILIAR_TECNICO_1, AUXILIAR_TECNICO_2])
|
||||
->orderBy($orderBy, $order)
|
||||
->orderBy('nombre','asc');
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%')
|
||||
->orWhere('apellido_paterno','like','%' .$query.'%')
|
||||
->orWhere('apellido_materno','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
foreach ($data->items() as $u){
|
||||
|
||||
if($u->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$u->tipo_empleado = 'Asesor de Operaciones';
|
||||
|
||||
$servi = ServicioDet::select('id')
|
||||
->where('servicios_det.operador_id', $u->id)
|
||||
->whereMonth('fecha_solicitud', $month)
|
||||
->whereYear('fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)->pluck('id');
|
||||
|
||||
$encuesta_d = ServicioEncuestaDomestico::select('servicio_det_id')->whereIn('servicio_det_id',$servi)->groupBy('servicio_det_id')->get();
|
||||
$encuesta_e = ServicioEncuestaEmpresarial::select('servicio_det_id')->whereIn('servicio_det_id',$servi)->groupBy('servicio_det_id')->get();
|
||||
$total = count($encuesta_d) + count($encuesta_e);
|
||||
|
||||
$u->servicios_cantidad = $total.' Encuestas '.' de '.count($servi).' Servicios';
|
||||
|
||||
/*$u->servicios_cantidad = ServicioDet::where('servicios_det.operador_id', $u->id)
|
||||
->whereMonth('fecha_solicitud', $month)
|
||||
->whereYear('fecha_solicitud', $year)
|
||||
->where('requiere_encuesta', 1)->count();*/
|
||||
}
|
||||
|
||||
if($u->tipo_empleado_id == AUXILIAR_TECNICO_1 || $u->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$u->tipo_empleado = 'Auxiliar de Operaciones';
|
||||
|
||||
$servi = ServicioDet::select('id')
|
||||
->whereMonth('fecha_solicitud', $month)
|
||||
->whereYear('fecha_solicitud', $year)
|
||||
->where(function($q) use ($u){
|
||||
$q->where('servicios_det.auxiliar_1', $u->id)
|
||||
->orWhere('servicios_det.auxiliar_2', $u->id);
|
||||
})->pluck('id');
|
||||
|
||||
$encuesta_d = ServicioEncuestaDomestico::select('servicio_det_id')->whereIn('servicio_det_id',$servi)->groupBy('servicio_det_id')->get();
|
||||
$encuesta_e = ServicioEncuestaEmpresarial::select('servicio_det_id')->whereIn('servicio_det_id',$servi)->groupBy('servicio_det_id')->get();
|
||||
$total = count($encuesta_d) + count($encuesta_e);
|
||||
|
||||
$u->servicios_cantidad = $total.' Encuestas '. ' de '. count($servi).' Servicios';
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$users = $data;
|
||||
|
||||
} else{
|
||||
|
||||
$data = $queryBuilder->get();
|
||||
|
||||
foreach ($data as $u){
|
||||
|
||||
if($u->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$u->tipo_empleado = 'Asesor de Operaciones';
|
||||
$u->servicios_cantidad = ServicioDet::where('operador_id', $u->id)
|
||||
->where('requiere_encuesta', 1)
|
||||
->whereMonth('fecha_solicitud', $month)
|
||||
->whereYear('fecha_solicitud', $year)
|
||||
->count();
|
||||
}
|
||||
|
||||
if($u->tipo_empleado_id == AUXILIAR_TECNICO_1 || $u->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$u->tipo_empleado = 'Auxiliar de Operaciones';
|
||||
|
||||
$u->servicios_cantidad = ServicioDet::whereMonth('fecha_solicitud', $month)
|
||||
->whereYear('fecha_solicitud', $year)
|
||||
->where(function($q) use ($u){
|
||||
$q->where('servicios_det.auxiliar_1', $u->id)
|
||||
->orWhere('servicios_det.auxiliar_2', $u->id);
|
||||
})
|
||||
->count();
|
||||
}
|
||||
}
|
||||
|
||||
$users = ['data'=>collect($data)->where('servicios_cantidad','<>',0)->values()];
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return response()->success($users);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
285
app/Http/Controllers/Reportes/MensualController.php
Normal file
285
app/Http/Controllers/Reportes/MensualController.php
Normal file
@@ -0,0 +1,285 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\ASESOR_OPERACIONES;
|
||||
use const App\Http\Controllers\ATENCION_CLIENTES;
|
||||
use App\Models\TipoVehiculo;
|
||||
use App\Models\CatEstatuServicio;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\ServicioEnc;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Log;
|
||||
|
||||
class MensualController extends Controller{
|
||||
|
||||
function getWeek($date){
|
||||
$date = new \DateTime($date);
|
||||
$week = $date->format("W");
|
||||
return $week;
|
||||
}
|
||||
|
||||
public function reportes(){
|
||||
$mes_actual = Carbon::now()->format('m');
|
||||
|
||||
$currentWeek = $this->getWeek(date("Y-m-d"));
|
||||
$firstDateOfMonth = date("Y").'-'.date("m").'-01';
|
||||
$firstWeek = $this->getWeek($firstDateOfMonth);
|
||||
$lastDateOfMonth = date("Y-m-t", strtotime($firstDateOfMonth));
|
||||
$lastWeek = $this->getWeek($lastDateOfMonth);
|
||||
|
||||
$servicios_nombre_precios = $this->serviciosNombresPrecios($mes_actual);
|
||||
$tipos_servicios = $this->tiposServicios($mes_actual);
|
||||
$tipos_estados_servicio = $this->tipoEstadoServicio($mes_actual);
|
||||
$tipos_origen = $this->tiposOrigen($mes_actual);
|
||||
$atencion_cliente = $this->atencionCliente($mes_actual);
|
||||
$operadores = $this->operadores($mes_actual);
|
||||
$servicios_vehiculos_precios = $this->serviciosVehiculosPrecios($mes_actual);
|
||||
$capacidad_aprovechada = $this->capacidadAprovechada($mes_actual, $firstWeek, $lastWeek);
|
||||
|
||||
return response()->success(compact('servicios_nombre_precios','tipos_servicios', 'tipos_estados_servicio', 'tipos_origen', 'atencion_cliente', 'operadores', 'servicios_vehiculos_precios', 'capacidad_aprovechada'));
|
||||
}
|
||||
|
||||
public function serviciosNombresPrecios($mes_actual){
|
||||
|
||||
$servicios = ServicioDet::select('cat_servicios.nombre as name', DB::raw("SUM(servicios_det.costo_servicio) AS costo, count(servicios_det.servicio_id) as y"))
|
||||
->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->groupBy('cat_servicios.nombre')
|
||||
->get();
|
||||
|
||||
$total_costo = (string)number_format(collect($servicios)->sum('costo'),2);
|
||||
|
||||
return compact('servicios', 'total_costo');
|
||||
}
|
||||
|
||||
public function tiposServicios($mes_actual){
|
||||
|
||||
$sevicios = ServicioDet::select('cat_tipos_servicios.nombre as name', DB::raw("count(servicios_det.tipo_servicio_id) as y"))
|
||||
->join('cat_tipos_servicios', 'servicios_det.tipo_servicio_id', '=', 'cat_tipos_servicios.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->groupBy('cat_tipos_servicios.nombre')
|
||||
->get();
|
||||
|
||||
return $sevicios;
|
||||
}
|
||||
|
||||
public function tipoEstadoServicio($mes_actual){
|
||||
|
||||
$sevicios = ServicioDet::select('cat_estatus_servicios.nombre as name', DB::raw("count(servicios_det.estatus_servicio_id) as y"))
|
||||
->join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->groupBy('cat_estatus_servicios.nombre')
|
||||
->get();
|
||||
|
||||
return $sevicios;
|
||||
}
|
||||
|
||||
public function tiposOrigen($mes_actual){
|
||||
|
||||
$sevicios = ServicioEnc::select('cat_origenes.nombre as name', DB::raw("count(servicios_enc.origen_id) as y"))
|
||||
->join('servicios_det', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id')
|
||||
->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->groupBy('cat_origenes.nombre')
|
||||
->get();
|
||||
|
||||
return $sevicios;
|
||||
}
|
||||
|
||||
public function atencionCliente($mes_actual){
|
||||
|
||||
$usuarios_series = [];
|
||||
$estatus_series = [];
|
||||
|
||||
$estatus_servicio = CatEstatuServicio::get();
|
||||
|
||||
foreach ($estatus_servicio as $e){
|
||||
|
||||
$usuarios_series = [];
|
||||
$valores_estatus = [];
|
||||
|
||||
$atencion_cliente = User::select('id', DB::raw("CONCAT(nombre, ' ',apellido_paterno) as nombre_atencion"))
|
||||
->where('tipo_empleado_id', ATENCION_CLIENTES)
|
||||
->get();
|
||||
|
||||
foreach ($atencion_cliente as $aC){
|
||||
|
||||
$total = ServicioEnc::join('servicios_det', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id')
|
||||
->join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->where('servicios_enc.usuario_agenda_id',$aC->id)
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual);
|
||||
|
||||
|
||||
$total_general = ($total->count() == 1)? " (".$total->count()." servicio)" : " (".$total->count()." servicios)";
|
||||
$nombre = $aC->nombre_atencion.$total_general;
|
||||
|
||||
array_push($usuarios_series, $nombre);
|
||||
|
||||
$total_estatus = $total->where('servicios_det.estatus_servicio_id', $e->id)->count();
|
||||
array_push($valores_estatus, $total_estatus);
|
||||
}
|
||||
|
||||
$estatus_series[$e->nombre] = $valores_estatus;
|
||||
}
|
||||
|
||||
|
||||
$datos = [];
|
||||
foreach ($estatus_series as $key => $e){
|
||||
array_push($datos, ["name"=>$key, "data"=>$e]);
|
||||
}
|
||||
|
||||
$result = ["usuarios"=>$usuarios_series, "datos"=>$datos];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function operadores($mes_actual){
|
||||
|
||||
$usuarios_series = [];
|
||||
$estatus_series = [];
|
||||
|
||||
$estatus_servicio = CatEstatuServicio::get();
|
||||
|
||||
foreach ($estatus_servicio as $e){
|
||||
|
||||
$usuarios_series = [];
|
||||
$valores_estatus = [];
|
||||
|
||||
$operadores = User::select('id', DB::raw("CONCAT(nombre, ' ',apellido_paterno) as nombre_atencion"))
|
||||
->where('tipo_empleado_id', ASESOR_OPERACIONES)
|
||||
->get();
|
||||
|
||||
foreach ($operadores as $o){
|
||||
|
||||
|
||||
$total = ServicioDet::join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->where('servicios_det.operador_id',$o->id)
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual);
|
||||
|
||||
$total_general = ($total->count() == 1)? " (".$total->count()." servicio)" : " (".$total->count()." servicios)";
|
||||
$nombre = $o->nombre_atencion.$total_general;
|
||||
|
||||
array_push($usuarios_series, $nombre);
|
||||
|
||||
$total_estatus = $total->where('servicios_det.estatus_servicio_id', $e->id)->count();
|
||||
array_push($valores_estatus, $total_estatus);
|
||||
}
|
||||
|
||||
$estatus_series[$e->nombre] = $valores_estatus;
|
||||
}
|
||||
|
||||
|
||||
$datos = [];
|
||||
foreach ($estatus_series as $key => $e){
|
||||
array_push($datos, ["name"=>$key, "data"=>$e]);
|
||||
}
|
||||
$result = ["usuarios"=>$usuarios_series, "datos"=>$datos];
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function serviciosVehiculosPrecios($mes_actual){
|
||||
|
||||
$servicios = ServicioDet::select('cat_vehiculos.num_economico as name', DB::raw("SUM(servicios_det.costo_servicio) AS costo, count(servicios_det.servicio_id) as y"))
|
||||
->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id')
|
||||
->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->groupBy('cat_vehiculos.num_economico')
|
||||
->get();
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
public function capacidadAprovechada($mes_actual, $firstWeek, $lastWeek){
|
||||
|
||||
$respuesta = [];
|
||||
$index = 0;
|
||||
|
||||
$tipos_vehiculo = TipoVehiculo::select(['id', 'nombre'])->orderBy('nombre')->get();
|
||||
foreach ($tipos_vehiculo as $t){
|
||||
$tmpId = $t->id;
|
||||
$tmpNombre = $t->nombre;
|
||||
|
||||
$campos = [
|
||||
'cat_vehiculos.tipo_vehiculo_id',
|
||||
'cat_tipos_vehiculos.nombre AS tipo_vehiculo',
|
||||
'cat_tipos_vehiculos.objetivo_mensual',
|
||||
DB::raw("SEC_TO_TIME(SUM(TIME_TO_SEC(servicios_progreso.duracion))) AS 'total_duracion'"),
|
||||
DB::raw("TRUNCATE(SUM((TIME_TO_SEC(TIME(servicios_progreso.duracion))/60)/60), 3) AS 'total_duracion_fracc'")
|
||||
];
|
||||
|
||||
$objetivoSemanal = 0;
|
||||
$objetivoMensual = 0;
|
||||
$totalWeeks = 0;
|
||||
$sumatoriaPorcentajes = 0.0;
|
||||
|
||||
$informacion = [];
|
||||
|
||||
for($i=$firstWeek;$i<=$lastWeek;$i++){
|
||||
// execute this week
|
||||
$datos = 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('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id')
|
||||
->join('cat_tipos_vehiculos', 'cat_tipos_vehiculos.id', '=', 'cat_vehiculos.tipo_vehiculo_id')
|
||||
->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id')
|
||||
->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id')
|
||||
->where('cat_vehiculos.tipo_vehiculo_id', $tmpId)
|
||||
//->whereMonth('servicios_det.fecha_solicitud', $mes_actual)
|
||||
->whereRaw("WEEKOFYEAR(DATE(servicios_det.fecha_solicitud))=?", $i)
|
||||
->groupBy('cat_vehiculos.tipo_vehiculo_id', 'cat_tipos_vehiculos.nombre', 'cat_tipos_vehiculos.objetivo_mensual')
|
||||
->first();
|
||||
|
||||
if($datos){
|
||||
$sumatoriaPorcentajes = floatval($sumatoriaPorcentajes) + floatval($datos->total_duracion_fracc);
|
||||
$objetivoMensual = $datos->objetivo_mensual;
|
||||
array_push($informacion, [
|
||||
'week_num'=>$i,
|
||||
'total_duracion'=>$datos->total_duracion,
|
||||
'total_duracion_fracc'=>$datos->total_duracion_fracc,
|
||||
]);
|
||||
}else{
|
||||
array_push($informacion, [
|
||||
'week_num'=>$i,
|
||||
'total_duracion'=>null,
|
||||
'total_duracion_fracc'=>null
|
||||
]);
|
||||
}
|
||||
|
||||
$totalWeeks++;
|
||||
}
|
||||
|
||||
$respuesta[$index]['tipo_vehiculo_id'] = $tmpId;
|
||||
$respuesta[$index]['tipo_vehiculo'] = $tmpNombre;
|
||||
$respuesta[$index]['objetivo_mensual'] = $objetivoMensual;
|
||||
$respuesta[$index]['objetivo_semanal'] = ($totalWeeks == 0) ? 0 : $objetivoMensual/($totalWeeks);
|
||||
$respuesta[$index]['semanas'] = $totalWeeks;
|
||||
$respuesta[$index]['total_cumplimiento'] = $sumatoriaPorcentajes;
|
||||
$respuesta[$index]['datos'] = $informacion;
|
||||
$index++;
|
||||
}
|
||||
|
||||
return $respuesta;
|
||||
}
|
||||
|
||||
function obtener_semana($date) {
|
||||
|
||||
$date2 = strtotime($date);
|
||||
$inicio0 = strtotime('sunday this week -1 week', $date2);
|
||||
$inicio=date('Y-m-d', $inicio0);
|
||||
|
||||
$dias = array();
|
||||
for($i=1;$i<=7;$i++){
|
||||
$dia = date("Y-m-d", strtotime("$inicio +$i day"));
|
||||
array_push($dias,$dia);
|
||||
}
|
||||
|
||||
return $dias;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,408 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\ATENCION_CLIENTES;
|
||||
use const App\Http\Controllers\DEFINIO_ATENCION_CLIENTE;
|
||||
use const App\Http\Controllers\DEFINIO_CLIENTE;
|
||||
use App\Http\Requests\Reportes\ConsultarAtencionClientesRequest;
|
||||
use App\Http\Requests\Reportes\ProductividadAtencionClientesRequest;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\User;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Excel;
|
||||
|
||||
class ProductividadAtencionClientesController extends Controller
|
||||
{
|
||||
public function consultarAtencionClientes(ConsultarAtencionClientesRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
$definio = $request->input('definio');
|
||||
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
|
||||
$queryBuilder = User::select('id', 'nombre', 'apellido_paterno', 'apellido_materno')
|
||||
->where('tipo_empleado_id', ATENCION_CLIENTES)
|
||||
->where('sucursal_id', $sucursal)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%')
|
||||
->orWhere('apellido_paterno','like','%' .$query.'%')
|
||||
->orWhere('apellido_materno','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
foreach ($data->items() as $u){
|
||||
$count = ServicioDet::join('servicios_enc','servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->where('servicios_enc.usuario_agenda_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final);
|
||||
|
||||
if($definio == DEFINIO_CLIENTE){
|
||||
$count->where('servicios_det.definido_cliente', 1);
|
||||
}
|
||||
|
||||
if($definio == DEFINIO_ATENCION_CLIENTE){
|
||||
$count->where('servicios_det.definido_cliente', 0);
|
||||
}
|
||||
|
||||
$u->servicios_cantidad = $count->count();
|
||||
}
|
||||
|
||||
$users = $data;
|
||||
}else{
|
||||
|
||||
$data = $queryBuilder->get();
|
||||
foreach ($data as $u){
|
||||
$count = ServicioDet::join('servicios_enc','servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->where('servicios_enc.usuario_agenda_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final);
|
||||
|
||||
if($definio == DEFINIO_CLIENTE){
|
||||
$count->where('servicios_det.definido_cliente', 1);
|
||||
}
|
||||
|
||||
if($definio == DEFINIO_ATENCION_CLIENTE){
|
||||
$count->where('servicios_det.definido_cliente', 0);
|
||||
}
|
||||
|
||||
$u->servicios_cantidad = $count->count();
|
||||
}
|
||||
|
||||
$users = ['data'=>$data];
|
||||
}
|
||||
|
||||
return response()->success($users);
|
||||
}
|
||||
|
||||
public function reportes(ProductividadAtencionClientesRequest $request){
|
||||
|
||||
$orderBy = $request->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');
|
||||
$usuario_id = $request->input('usuario_id');
|
||||
$definio = $request->input('definio');
|
||||
|
||||
$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'
|
||||
];
|
||||
|
||||
$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')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_enc.usuario_agenda_id', $usuario_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($definio == DEFINIO_CLIENTE){
|
||||
$queryBuilder->where('servicios_det.definido_cliente', 1);
|
||||
}
|
||||
|
||||
if($definio == DEFINIO_ATENCION_CLIENTE){
|
||||
$queryBuilder->where('servicios_det.definido_cliente', 0);
|
||||
}
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
//$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$data = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($data);
|
||||
}
|
||||
|
||||
public function generarExcel(ProductividadAtencionClientesRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
$usuario_id = $request->input('usuario_id');
|
||||
$definio = $request->input('definio');
|
||||
|
||||
$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',
|
||||
DB::raw("CONCAT(clientes_domicilios.calle,' ',clientes_domicilios.num_ext,' ', clientes_domicilios.colonia,' ',clientes_domicilios.cp,' ',clientes_domicilios.ciudad) as 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'
|
||||
];
|
||||
|
||||
$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')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_enc.usuario_agenda_id', $usuario_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy('servicios_enc.id','asc');
|
||||
|
||||
if($definio == DEFINIO_CLIENTE){
|
||||
$queryBuilder->where('servicios_det.definido_cliente', 1);
|
||||
}
|
||||
|
||||
if($definio == DEFINIO_ATENCION_CLIENTE){
|
||||
$queryBuilder->where('servicios_det.definido_cliente', 0);
|
||||
}
|
||||
|
||||
$servicios = $queryBuilder->get();
|
||||
$total = $queryBuilder->count();
|
||||
|
||||
$nombre_usuario = User::where('id', $usuario_id)->first();
|
||||
$titulo = "Reporte de Servicios Atención a Cliente ".$nombre_usuario->nombre." ".$nombre_usuario->apellido_paterno;
|
||||
|
||||
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_Atención_Cliente_".$nombre_usuario->nombre."_".$nombre_usuario->apellido_paterno."_".$f_i."-".$f_f;
|
||||
|
||||
foreach ($servicios as $s){
|
||||
$s->costo = floatval($s->costo);
|
||||
list($y, $m, $d) = explode("-", $s->fecha_servicio);
|
||||
$s->fecha_servicio = "$d/$m/$y";
|
||||
$s->numero_solicitud = (int)$s->numero_solicitud;
|
||||
}
|
||||
|
||||
Excel::create($nombre, function($excel) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total){
|
||||
|
||||
// Set the title
|
||||
$excel->setTitle('Reporte de Servicios Atención a Cliente');
|
||||
|
||||
// Chain the setters
|
||||
$excel->setCreator('DRENAX')
|
||||
->setCompany('DRENAX');
|
||||
|
||||
// Call them separately
|
||||
$excel->setDescription('Reporte de Servicios Atención a Cliente');
|
||||
|
||||
$excel->sheet('Reporte_Servicios_AtnCliente', function ($sheet) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total) {
|
||||
|
||||
$sheet->setColumnFormat(array(
|
||||
'F' => '"$"#,##0.00_-',
|
||||
'C' => 'd/m/y'
|
||||
));
|
||||
|
||||
//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, $fecha_inicio, $fecha_final, $total) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('J8', 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('K8', 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('M8', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('N8', function($cell) use($total) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total.' Servicios');
|
||||
|
||||
});
|
||||
|
||||
//Mostar valores de consulta
|
||||
$sheet->fromArray($servicios, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:N9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
|
||||
$sheet->getStyle('B9:N9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de solicitud'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha del servicio'],
|
||||
['cell' => 'D9', 'titulo' => 'Hora del servicio'],
|
||||
['cell' => 'E9', 'titulo' => 'Servicio'],
|
||||
['cell' => 'F9', 'titulo' => 'Costo de servicio'],
|
||||
['cell' => 'G9', 'titulo' => 'Tipo de servicio'],
|
||||
['cell' => 'H9', 'titulo' => 'Estatus de servicio'],
|
||||
['cell' => 'I9', 'titulo' => 'Nombre del cliente'],
|
||||
['cell' => 'J9', 'titulo' => 'Domicilio de servicio'],
|
||||
['cell' => 'K9', 'titulo' => 'Asesor de operaciones'],
|
||||
['cell' => 'L9', 'titulo' => 'Auxiliar de operaciones'],
|
||||
['cell' => 'M9', 'titulo' => 'Vehiculo asignado'],
|
||||
['cell' => 'N9', 'titulo' => 'Duración del servicio (cronómetro)']
|
||||
];
|
||||
|
||||
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', 'M9', 'N9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'N9')? 23: 14,
|
||||
'height' => 40
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
//AutoSize en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G','H','I','J','K','L'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
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 == 'F' || $cb == 'N')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
})->store('xls', storage_path('app') . '/public/reportes/productividad_atencion_clientes/');
|
||||
|
||||
return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]);
|
||||
}
|
||||
}
|
||||
272
app/Http/Controllers/Reportes/SemanalController.php
Normal file
272
app/Http/Controllers/Reportes/SemanalController.php
Normal file
@@ -0,0 +1,272 @@
|
||||
<?php
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\ASESOR_OPERACIONES;
|
||||
use const App\Http\Controllers\ATENCION_CLIENTES;
|
||||
use App\Models\TipoVehiculo;
|
||||
use App\Models\CatEstatuServicio;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\ServicioEnc;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Log;
|
||||
|
||||
class SemanalController extends Controller
|
||||
{
|
||||
function getWeek($date){
|
||||
$date = new \DateTime($date);
|
||||
$week = $date->format("W");
|
||||
return $week;
|
||||
}
|
||||
|
||||
public function reportes(){
|
||||
|
||||
$fecha_actual = Carbon::now()->format('Y-m-d');
|
||||
$dias_semana = $this->obtener_semana($fecha_actual);
|
||||
|
||||
$currentWeek = $this->getWeek(date("Y-m-d"));
|
||||
$firstDateOfMonth = date("Y").'-'.date("m").'-01';
|
||||
$firstWeek = $this->getWeek($firstDateOfMonth);
|
||||
$lastDateOfMonth = date("Y-m-t", strtotime($firstDateOfMonth));
|
||||
$lastWeek = $this->getWeek($lastDateOfMonth);
|
||||
$weeks = 0;
|
||||
for($i=$firstWeek;$i<=$lastWeek;$i++) $weeks++;
|
||||
|
||||
$servicios_nombre_precios = $this->serviciosNombresPrecios($dias_semana);
|
||||
$tipos_servicios = $this->tiposServicios($dias_semana);
|
||||
$tipos_estados_servicio = $this->tipoEstadoServicio($dias_semana);
|
||||
$tipos_origen = $this->tiposOrigen($dias_semana);
|
||||
$atencion_cliente = $this->atencionCliente($dias_semana);
|
||||
$operadores = $this->operadores($dias_semana);
|
||||
$servicios_vehiculos_precios = $this->serviciosVehiculosPrecios($dias_semana);
|
||||
$capacidad_aprovechada = $this->capacidadAprovechada($currentWeek, $weeks);
|
||||
|
||||
return response()->success(compact('servicios_nombre_precios','tipos_servicios', 'tipos_estados_servicio', 'tipos_origen', 'atencion_cliente', 'operadores', 'servicios_vehiculos_precios', 'capacidad_aprovechada'));
|
||||
}
|
||||
|
||||
public function serviciosNombresPrecios($dias_semana){
|
||||
|
||||
$servicios = ServicioDet::select('cat_servicios.nombre as name', DB::raw("SUM(servicios_det.costo_servicio) AS costo, count(servicios_det.servicio_id) as y"))
|
||||
->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id')
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana)
|
||||
->groupBy('cat_servicios.nombre')
|
||||
->get();
|
||||
|
||||
$total_costo = (string)number_format(collect($servicios)->sum('costo'),2);
|
||||
|
||||
return compact('servicios', 'total_costo');
|
||||
}
|
||||
|
||||
public function tiposServicios($dias_semana){
|
||||
|
||||
$servicios = ServicioDet::select('cat_tipos_servicios.nombre as name', DB::raw("count(servicios_det.tipo_servicio_id) as y"))
|
||||
->join('cat_tipos_servicios', 'servicios_det.tipo_servicio_id', '=', 'cat_tipos_servicios.id')
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana)
|
||||
->groupBy('cat_tipos_servicios.nombre')
|
||||
->get();
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
public function tipoEstadoServicio($dias_semana){
|
||||
|
||||
$servicios = ServicioDet::select('cat_estatus_servicios.nombre as name', DB::raw("count(servicios_det.estatus_servicio_id) as y"))
|
||||
->join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana)
|
||||
->groupBy('cat_estatus_servicios.nombre')
|
||||
->get();
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
public function tiposOrigen($dias_semana){
|
||||
|
||||
$servicios = ServicioEnc::select('cat_origenes.nombre as name', DB::raw("count(servicios_enc.origen_id) as y"))
|
||||
->join('servicios_det', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id')
|
||||
->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id')
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana)
|
||||
->groupBy('cat_origenes.nombre')
|
||||
->get();
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
public function atencionCliente($dias_semana){
|
||||
|
||||
$usuarios_series = [];
|
||||
$estatus_series = [];
|
||||
|
||||
$estatus_servicio = CatEstatuServicio::get();
|
||||
|
||||
foreach ($estatus_servicio as $e){
|
||||
|
||||
$usuarios_series = [];
|
||||
$valores_estatus = [];
|
||||
|
||||
$atencion_cliente = User::select('id', DB::raw("CONCAT(nombre, ' ',apellido_paterno) as nombre_atencion"))
|
||||
->where('tipo_empleado_id', ATENCION_CLIENTES)
|
||||
->get();
|
||||
|
||||
foreach ($atencion_cliente as $aC){
|
||||
|
||||
$total = ServicioEnc::join('servicios_det', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id')
|
||||
->join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->where('servicios_enc.usuario_agenda_id',$aC->id)
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana);
|
||||
|
||||
|
||||
$total_general = ($total->count() == 1)? " (".$total->count()." servicio)" : " (".$total->count()." servicios)";
|
||||
$nombre = $aC->nombre_atencion.$total_general;
|
||||
|
||||
array_push($usuarios_series, $nombre);
|
||||
|
||||
$total_estatus = $total->where('servicios_det.estatus_servicio_id', $e->id)->count();
|
||||
array_push($valores_estatus, $total_estatus);
|
||||
}
|
||||
|
||||
$estatus_series[$e->nombre] = $valores_estatus;
|
||||
}
|
||||
|
||||
|
||||
$datos = [];
|
||||
foreach ($estatus_series as $key => $e){
|
||||
array_push($datos, ["name"=>$key, "data"=>$e]);
|
||||
}
|
||||
|
||||
$result = ["usuarios"=>$usuarios_series, "datos"=>$datos];
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function operadores($dias_semana){
|
||||
|
||||
$usuarios_series = [];
|
||||
$estatus_series = [];
|
||||
|
||||
$estatus_servicio = CatEstatuServicio::get();
|
||||
|
||||
foreach ($estatus_servicio as $e){
|
||||
|
||||
$usuarios_series = [];
|
||||
$valores_estatus = [];
|
||||
|
||||
$operadores = User::select('id', DB::raw("CONCAT(nombre, ' ',apellido_paterno) as nombre_atencion"))
|
||||
->where('tipo_empleado_id', ASESOR_OPERACIONES)
|
||||
->get();
|
||||
|
||||
foreach ($operadores as $o){
|
||||
|
||||
|
||||
$total = ServicioDet::join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id')
|
||||
->where('servicios_det.operador_id',$o->id)
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana);
|
||||
|
||||
$total_general = ($total->count() == 1)? " (".$total->count()." servicio)" : " (".$total->count()." servicios)";
|
||||
$nombre = $o->nombre_atencion.$total_general;
|
||||
|
||||
array_push($usuarios_series, $nombre);
|
||||
|
||||
$total_estatus = $total->where('servicios_det.estatus_servicio_id', $e->id)->count();
|
||||
array_push($valores_estatus, $total_estatus);
|
||||
}
|
||||
|
||||
$estatus_series[$e->nombre] = $valores_estatus;
|
||||
}
|
||||
|
||||
|
||||
$datos = [];
|
||||
foreach ($estatus_series as $key => $e){
|
||||
array_push($datos, ["name"=>$key, "data"=>$e]);
|
||||
}
|
||||
$result = ["usuarios"=>$usuarios_series, "datos"=>$datos];
|
||||
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
public function serviciosVehiculosPrecios($dias_semana){
|
||||
|
||||
$servicios = ServicioDet::select('cat_vehiculos.num_economico as name', DB::raw("SUM(servicios_det.costo_servicio) AS costo, count(servicios_det.servicio_id) as y"))
|
||||
->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id')
|
||||
->whereIn(DB::raw("DATE(servicios_det.fecha_solicitud)"),$dias_semana)
|
||||
->groupBy('cat_vehiculos.num_economico')
|
||||
->get();
|
||||
|
||||
return $servicios;
|
||||
}
|
||||
|
||||
public function capacidadAprovechada($semana_actual, $weeks=4){
|
||||
|
||||
$respuesta = [];
|
||||
|
||||
$tipos_vehiculo = TipoVehiculo::select(['id', 'nombre'])->orderBy('nombre')->get();
|
||||
foreach ($tipos_vehiculo as $t){
|
||||
$tmpId = $t->id;
|
||||
$tmpNombre = $t->nombre;
|
||||
|
||||
$campos = [
|
||||
'cat_vehiculos.tipo_vehiculo_id',
|
||||
'cat_tipos_vehiculos.nombre AS tipo_vehiculo',
|
||||
'cat_tipos_vehiculos.objetivo_mensual',
|
||||
DB::raw("SEC_TO_TIME(SUM(TIME_TO_SEC(servicios_progreso.duracion))) AS 'total_duracion'"),
|
||||
DB::raw("TRUNCATE(SUM((TIME_TO_SEC(TIME(servicios_progreso.duracion))/60)/60), 3) AS 'total_duracion_fracc'")
|
||||
];
|
||||
|
||||
$datos = 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('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id')
|
||||
->join('cat_tipos_vehiculos', 'cat_tipos_vehiculos.id', '=', 'cat_vehiculos.tipo_vehiculo_id')
|
||||
->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id')
|
||||
->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id')
|
||||
->where('cat_vehiculos.tipo_vehiculo_id', $tmpId)
|
||||
->whereRaw("WEEKOFYEAR(DATE(servicios_det.fecha_solicitud))=?", $semana_actual)
|
||||
->groupBy('cat_vehiculos.tipo_vehiculo_id', 'cat_tipos_vehiculos.nombre', 'cat_tipos_vehiculos.objetivo_mensual')
|
||||
->first();
|
||||
|
||||
if($datos){
|
||||
array_push($respuesta, [
|
||||
'tipo_vehiculo_id'=>$datos->tipo_vehiculo_id,
|
||||
'tipo_vehiculo'=>$datos->tipo_vehiculo,
|
||||
'objetivo_mensual'=>$datos->objetivo_mensual,
|
||||
'objetivo_semanal'=>($weeks == 0) ? 0 : $datos->objetivo_mensual/($weeks),
|
||||
'semanas'=>$weeks,
|
||||
'total_duracion'=>$datos->total_duracion,
|
||||
'total_duracion_fracc'=>$datos->total_duracion_fracc,
|
||||
]);
|
||||
}else{
|
||||
array_push($respuesta, [
|
||||
'tipo_vehiculo_id'=>$tmpId,
|
||||
'tipo_vehiculo'=>$tmpNombre,
|
||||
'objetivo_mensual'=>0,
|
||||
'objetivo_semanal'=>0,
|
||||
'semanas'=>$weeks,
|
||||
'total_duracion'=>null,
|
||||
'total_duracion_fracc'=>null
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
return $respuesta;
|
||||
}
|
||||
|
||||
function obtener_semana($date) {
|
||||
|
||||
$date2 = strtotime($date);
|
||||
$inicio0 = strtotime('sunday this week -1 week', $date2);
|
||||
$inicio=date('Y-m-d', $inicio0);
|
||||
|
||||
$dias = array();
|
||||
for($i=1;$i<=7;$i++){
|
||||
$dia = date("Y-m-d", strtotime("$inicio +$i day"));
|
||||
array_push($dias,$dia);
|
||||
}
|
||||
|
||||
return $dias;
|
||||
}
|
||||
|
||||
}
|
||||
444
app/Http/Controllers/Reportes/ServiciosAsesoresController.php
Normal file
444
app/Http/Controllers/Reportes/ServiciosAsesoresController.php
Normal file
@@ -0,0 +1,444 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use const App\Http\Controllers\ASESOR_OPERACIONES;
|
||||
use const App\Http\Controllers\AUXILIAR_TECNICO_1;
|
||||
use const App\Http\Controllers\AUXILIAR_TECNICO_2;
|
||||
use App\Http\Requests\Reportes\ConsultarAsesoresRequest;
|
||||
use App\Http\Requests\Reportes\ServiciosAsesoresRequest;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\User;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Excel;
|
||||
use Log;
|
||||
|
||||
class ServiciosAsesoresController extends Controller
|
||||
{
|
||||
public function consultarAsesores(ConsultarAsesoresRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
|
||||
$orderBy = $request->input('sortBy','nombre');
|
||||
$order = $request->input('order','asc');
|
||||
|
||||
$queryBuilder = User::select('id', 'nombre', 'apellido_paterno', 'apellido_materno', 'tipo_empleado_id')
|
||||
->where('sucursal_id', $sucursal)
|
||||
->whereIn('tipo_empleado_id', [ASESOR_OPERACIONES, AUXILIAR_TECNICO_1, AUXILIAR_TECNICO_2])
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('nombre','like','%' .$query.'%')
|
||||
->orWhere('apellido_paterno','like','%' .$query.'%')
|
||||
->orWhere('apellido_materno','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
foreach ($data->items() as $u){
|
||||
|
||||
if($u->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$u->tipo_empleado = 'Asesor de Operaciones';
|
||||
|
||||
$u->servicios_cantidad = ServicioDet::where('servicios_det.operador_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
if($u->tipo_empleado_id == AUXILIAR_TECNICO_1 || $u->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$u->tipo_empleado = 'Auxiliar de Operaciones';
|
||||
|
||||
$u->servicios_cantidad = ServicioDet::where(function($q) use ($u){
|
||||
$q->where('servicios_det.auxiliar_1', $u->id)
|
||||
->orWhere('servicios_det.auxiliar_2', $u->id);
|
||||
})
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$users = $data;
|
||||
}else{
|
||||
|
||||
$data = $queryBuilder->get();
|
||||
foreach ($data as $u){
|
||||
$u->servicios_cantidad = ServicioDet::where('servicios_det.operador_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
|
||||
if($u->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$u->tipo_empleado = 'Asesor de Operaciones';
|
||||
}
|
||||
|
||||
if($u->tipo_empleado_id == AUXILIAR_TECNICO_1 || $u->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$u->tipo_empleado = 'Auxiliar de Operaciones';
|
||||
}
|
||||
}
|
||||
|
||||
$users = ['data'=>$data];
|
||||
}
|
||||
|
||||
return response()->success($users);
|
||||
}
|
||||
|
||||
public function reportes(ServiciosAsesoresRequest $request){
|
||||
|
||||
$orderBy = $request->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');
|
||||
$usuario_id = $request->input('usuario_id');
|
||||
|
||||
$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',
|
||||
'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',
|
||||
'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')
|
||||
->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')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
$user = User::where('id', $usuario_id)->first();
|
||||
|
||||
if($user->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$queryBuilder->where('servicios_det.operador_id', $usuario_id);
|
||||
}
|
||||
|
||||
if($user->tipo_empleado_id == AUXILIAR_TECNICO_1 || $user->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$queryBuilder->where(function($q) use ($usuario_id){
|
||||
$q->where('servicios_det.auxiliar_1', $usuario_id)
|
||||
->orWhere('servicios_det.auxiliar_2', $usuario_id);
|
||||
});
|
||||
}
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
//$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$data = $queryBuilder->paginate($perPage)->toArray();
|
||||
}else{
|
||||
$data = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
$total_duracion = $this->sumarTiempos($queryBuilder->pluck('duracion_servicio'));
|
||||
list($h,$m,$s) = explode(':',$total_duracion);
|
||||
$data['total_duracion'] = $h."hr ".$m."m ".$s."s";
|
||||
|
||||
return response()->success($data);
|
||||
}
|
||||
|
||||
public function generarExcel(ServiciosAsesoresRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
$usuario_id = $request->input('usuario_id');
|
||||
|
||||
$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',
|
||||
DB::raw("CONCAT(clientes_domicilios.calle,' ',clientes_domicilios.num_ext,' ', clientes_domicilios.colonia,' ',clientes_domicilios.cp,' ',clientes_domicilios.ciudad) as domicilio"),
|
||||
//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',
|
||||
'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')
|
||||
->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')
|
||||
->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');
|
||||
|
||||
$user = User::where('id', $usuario_id)->first();
|
||||
|
||||
if($user->tipo_empleado_id == ASESOR_OPERACIONES){
|
||||
$queryBuilder->where('servicios_det.operador_id', $usuario_id);
|
||||
}
|
||||
|
||||
if($user->tipo_empleado_id == AUXILIAR_TECNICO_1 || $user->tipo_empleado_id == AUXILIAR_TECNICO_2){
|
||||
$queryBuilder->where(function($q) use ($usuario_id){
|
||||
$q->where('servicios_det.auxiliar_1', $usuario_id)
|
||||
->orWhere('servicios_det.auxiliar_2', $usuario_id);
|
||||
});
|
||||
}
|
||||
|
||||
$servicios = $queryBuilder->get();
|
||||
|
||||
$total = $queryBuilder->count();
|
||||
|
||||
$total_duracion = $this->sumarTiempos($queryBuilder->pluck('duracion_servicio'));
|
||||
list($h,$m,$s) = explode(':',$total_duracion);
|
||||
$total_duracion = $h."hr ".$m."m ".$s."s";
|
||||
|
||||
$nombre_usuario = User::where('id', $usuario_id)->first();
|
||||
$titulo = "Reporte de Servicios Otorgados ".$nombre_usuario->nombre." ".$nombre_usuario->apellido_paterno;
|
||||
|
||||
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_Otorgados_".$nombre_usuario->nombre."_".$nombre_usuario->apellido_paterno."_".$f_i."-".$f_f;
|
||||
|
||||
foreach ($servicios as $s){
|
||||
$s->costo = floatval($s->costo);
|
||||
list($y, $m, $d) = explode("-", $s->fecha_servicio);
|
||||
$s->fecha_servicio = "$d/$m/$y";
|
||||
$s->numero_solicitud = (int)$s->numero_solicitud;
|
||||
}
|
||||
|
||||
Excel::create($nombre, function($excel) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_duracion){
|
||||
|
||||
// Set the title
|
||||
$excel->setTitle('Reporte de Servicios Otorgados');
|
||||
|
||||
// Chain the setters
|
||||
$excel->setCreator('DRENAX')
|
||||
->setCompany('DRENAX');
|
||||
|
||||
// Call them separately
|
||||
$excel->setDescription('Reporte de Servicios Otorgados');
|
||||
|
||||
$excel->sheet('Reporte_Servicios_Asesor', function ($sheet) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total, $total_duracion) {
|
||||
|
||||
$sheet->setColumnFormat(array(
|
||||
'F' => '"$"#,##0.00_-',
|
||||
'C' => 'd/m/y',
|
||||
'M' => '#,#'
|
||||
));
|
||||
|
||||
//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('G2:J6');
|
||||
|
||||
$sheet->cell('G2', function($cell) use($titulo) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('H8', 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('I8', 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('K7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Duración:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('K8', function($cell) use($total_duracion) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total_duracion);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('L7', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('L8', function($cell) use($total) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total.' Servicios');
|
||||
|
||||
});
|
||||
|
||||
//Mostar valores de consulta
|
||||
$sheet->fromArray($servicios, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:M9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
|
||||
$sheet->getStyle('B9:M9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de solicitud'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha del servicio'],
|
||||
['cell' => 'D9', 'titulo' => 'Hora del servicio'],
|
||||
['cell' => 'E9', 'titulo' => 'Servicio'],
|
||||
['cell' => 'F9', 'titulo' => 'Costo de servicio'],
|
||||
['cell' => 'G9', 'titulo' => 'Tipo de servicio'],
|
||||
['cell' => 'H9', 'titulo' => 'Estatus de servicio'],
|
||||
['cell' => 'I9', 'titulo' => 'Nombre del cliente'],
|
||||
['cell' => 'J9', 'titulo' => 'Domicilio de servicio'],
|
||||
['cell' => 'K9', 'titulo' => 'Vehiculo asignado'],
|
||||
['cell' => 'L9', 'titulo' => 'Duración del servicio (cronómetro)'],
|
||||
['cell' => 'M9', 'titulo' => 'Litraje']
|
||||
];
|
||||
|
||||
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', 'K9', 'L9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'L9' || $c == 'K9')? 23: 14,
|
||||
'height' => 40
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
//AutoSize en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G','H','I','J'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
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 == 'F' || $cb == 'L')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
})->store('xls', storage_path('app') . '/public/reportes/servicios_asesores/');
|
||||
|
||||
return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]);
|
||||
}
|
||||
}
|
||||
368
app/Http/Controllers/Reportes/ServiciosClientesController.php
Normal file
368
app/Http/Controllers/Reportes/ServiciosClientesController.php
Normal file
@@ -0,0 +1,368 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use App\Http\Requests\Reportes\ConsultarClientesRequest;
|
||||
use App\Http\Requests\Reportes\ServiciosClientesRequest;
|
||||
use App\Models\Cliente;
|
||||
use App\Models\ServicioDet;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use DB;
|
||||
use Excel;
|
||||
|
||||
class ServiciosClientesController extends Controller
|
||||
{
|
||||
public function consultarClientes(ConsultarClientesRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
|
||||
$orderBy = $request->input('sortBy','denominacion');
|
||||
$order = $request->input('order','asc');
|
||||
|
||||
$queryBuilder = Cliente::select('clientes.id', 'clientes.denominacion')
|
||||
->join('servicios_enc', 'clientes.id', '=', 'servicios_enc.cliente_id')
|
||||
->join('servicios_det', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id')
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->where('clientes.sucursal_id', $sucursal)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
$q->where('denominacion','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
$queryBuilder = $queryBuilder->groupBy(['clientes.id', 'clientes.denominacion']);
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
foreach ($data->items() as $u){
|
||||
$u->servicios_cantidad = ServicioDet::join('servicios_enc','servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->where('servicios_enc.cliente_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
$users = $data;
|
||||
}else{
|
||||
|
||||
$data = $queryBuilder->get();
|
||||
foreach ($data as $u){
|
||||
$u->servicios_cantidad = ServicioDet::join('servicios_enc','servicios_det.servicio_enc_id', '=', 'servicios_enc.id')
|
||||
->where('servicios_enc.cliente_id', $u->id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->count();
|
||||
}
|
||||
|
||||
$users = ['data'=>$data];
|
||||
}
|
||||
|
||||
return response()->success($users);
|
||||
}
|
||||
|
||||
public function reportes(ServiciosClientesRequest $request){
|
||||
|
||||
$orderBy = $request->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');
|
||||
$cliente_id = $request->input('cliente_id');
|
||||
|
||||
$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_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',
|
||||
'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_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')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_enc.cliente_id', $cliente_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy($orderBy,$order);
|
||||
|
||||
if($query = $request->get('query',false)){
|
||||
$queryBuilder->where(function($q) use ($query){
|
||||
//$q->where('nombre','like','%' .$query.'%');
|
||||
});
|
||||
}
|
||||
|
||||
if($perPage = $request->input('perPage',false)){
|
||||
$data = $queryBuilder->paginate($perPage);
|
||||
}else{
|
||||
$data = ['data'=>$queryBuilder->get()];
|
||||
}
|
||||
|
||||
return response()->success($data);
|
||||
}
|
||||
|
||||
public function generarExcel(ServiciosClientesRequest $request){
|
||||
|
||||
$sucursal = $request->input('sucursal');
|
||||
$fecha_inicio = $request->input('fecha_inicio');
|
||||
$fecha_final = $request->input('fecha_final');
|
||||
$cliente_id = $request->input('cliente_id');
|
||||
|
||||
$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',
|
||||
DB::raw("CONCAT(clientes_domicilios.calle,' ',clientes_domicilios.num_ext,' ', clientes_domicilios.colonia,' ',clientes_domicilios.cp,' ',clientes_domicilios.ciudad) as 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',
|
||||
'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_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')
|
||||
->where('servicios_enc.sucursal_id', $sucursal)
|
||||
->where('servicios_enc.cliente_id', $cliente_id)
|
||||
->whereDate('servicios_det.fecha_solicitud','>=',$fecha_inicio)
|
||||
->whereDate('servicios_det.fecha_solicitud','<=',$fecha_final)
|
||||
->orderBy('servicios_enc.id','asc');
|
||||
|
||||
$servicios = $queryBuilder->get();
|
||||
$total = $queryBuilder->count();
|
||||
|
||||
$cliente = Cliente::where('id', $cliente_id)->first();
|
||||
$titulo = "Reporte de Servicios de Cliente ".$cliente->denominacion;
|
||||
|
||||
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_Cliente_".$cliente->denominacion."_".$f_i."-".$f_f;
|
||||
|
||||
foreach ($servicios as $s){
|
||||
$s->costo = floatval($s->costo);
|
||||
list($y, $m, $d) = explode("-", $s->fecha_servicio);
|
||||
$s->fecha_servicio = "$d/$m/$y";
|
||||
$s->numero_solicitud = (int)$s->numero_solicitud;
|
||||
}
|
||||
|
||||
Excel::create($nombre, function($excel) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total){
|
||||
|
||||
// Set the title
|
||||
$excel->setTitle('Reporte de Servicios de Cliente');
|
||||
|
||||
// Chain the setters
|
||||
$excel->setCreator('DRENAX')
|
||||
->setCompany('DRENAX');
|
||||
|
||||
// Call them separately
|
||||
$excel->setDescription('Reporte de Servicios de Cliente');
|
||||
|
||||
$excel->sheet('Reporte_Servicios_Cliente', function ($sheet) use($servicios, $titulo, $fecha_inicio, $fecha_final, $total) {
|
||||
|
||||
$sheet->setColumnFormat(array(
|
||||
'F' => '"$"#,##0.00_-',
|
||||
'C' => 'd/m/y',
|
||||
'N' => '#,#'
|
||||
));
|
||||
|
||||
//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('H2:K6');
|
||||
|
||||
$sheet->cell('H2', function($cell) use($titulo, $fecha_inicio, $fecha_final, $total) {
|
||||
|
||||
$cell->setFontFamily('Aharoni');
|
||||
$cell->setFontWeight('bold');
|
||||
$cell->setAlignment('center');
|
||||
$cell->setValignment('center');
|
||||
$cell->setFontSize(20);
|
||||
$cell->setValue($titulo);
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('I8', 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('J8', 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('L8', function($cell) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue('Total:');
|
||||
|
||||
});
|
||||
|
||||
$sheet->cell('M8', function($cell) use($total) {
|
||||
$cell->setFontFamily('Calibri');
|
||||
$cell->setAlignment('left');
|
||||
$cell->setFontSize(12);
|
||||
$cell->setValue($total.' Servicios');
|
||||
|
||||
});
|
||||
|
||||
//Mostar valores de consulta
|
||||
$sheet->fromArray($servicios, null, 'B9', true);
|
||||
|
||||
//Formato en columnas de titulo
|
||||
$sheet->cells('B9:N9', function ($cells) {
|
||||
$cells->setBackground('#001870');
|
||||
$cells->setFontColor('#ffffff');
|
||||
$cells->setFontSize(13);
|
||||
$cells->setFontFamily('Calibri');
|
||||
$cells->setAlignment('left');
|
||||
$cells->setFontWeight('bold');
|
||||
});
|
||||
|
||||
$sheet->getStyle('B9:N9' , $sheet->getHighestRow())->getAlignment()->setWrapText(true);
|
||||
|
||||
//Titulos personalizados
|
||||
$titulos_cell = [
|
||||
['cell' => 'B9', 'titulo' => 'Número de solicitud'],
|
||||
['cell' => 'C9', 'titulo' => 'Fecha del servicio'],
|
||||
['cell' => 'D9', 'titulo' => 'Hora del servicio'],
|
||||
['cell' => 'E9', 'titulo' => 'Servicio'],
|
||||
['cell' => 'F9', 'titulo' => 'Costo de servicio'],
|
||||
['cell' => 'G9', 'titulo' => 'Tipo de servicio'],
|
||||
['cell' => 'H9', 'titulo' => 'Estatus de servicio'],
|
||||
['cell' => 'I9', 'titulo' => 'Domicilio de servicio'],
|
||||
['cell' => 'J9', 'titulo' => 'Asesor de operaciones'],
|
||||
['cell' => 'K9', 'titulo' => 'Auxiliar de operaciones'],
|
||||
['cell' => 'L9', 'titulo' => 'Vehiculo asignado'],
|
||||
['cell' => 'M9', 'titulo' => 'Duración del servicio (cronómetro)'],
|
||||
['cell' => 'N9', 'titulo' => 'Litraje']
|
||||
];
|
||||
|
||||
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', 'L9', 'M9'
|
||||
];
|
||||
|
||||
foreach ($columns_set as $c){
|
||||
$set_column = [
|
||||
$c => [
|
||||
'width' => ($c == 'N9')? 23: 14,
|
||||
'height' => 50
|
||||
]
|
||||
];
|
||||
$sheet->setSize($set_column);
|
||||
}
|
||||
|
||||
//AutoSize en columnas indicadas
|
||||
$columns_auto= [
|
||||
'E','F','G','H','I','J','K'
|
||||
];
|
||||
|
||||
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'
|
||||
];
|
||||
|
||||
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 == 'F' || $cb == 'N')){
|
||||
$sheet->cells("$cb$row", function ($cells) {
|
||||
$cells->setAlignment('right');
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
})->store('xls', storage_path('app') . '/public/reportes/servicios_clientes/');
|
||||
|
||||
return response()->success(['nombre_archivo' => $nombre.'.xls?micro='.$this->getMicroSeconds()]);
|
||||
}
|
||||
}
|
||||
429
app/Http/Controllers/Reportes/ServiciosController.php
Normal file
429
app/Http/Controllers/Reportes/ServiciosController.php
Normal file
@@ -0,0 +1,429 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Reportes;
|
||||
|
||||
use App\Http\Requests\Reportes\ServiciosRequest;
|
||||
use App\Models\ServicioDet;
|
||||
use App\Models\Sucursal;
|
||||
use Carbon\Carbon;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Excel;
|
||||
use Log;
|
||||
|
||||
|
||||
class ServiciosController extends Controller
|
||||
{
|
||||
public function reportes(ServiciosRequest $request){
|
||||
|
||||
$orderBy = $request->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()]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user