Carga inicial
This commit is contained in:
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()]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user