- Nuevo modulo de historial de cambios (ServicioHistorial) - Observer para tracking automatico de cambios en servicios - Correccion de variables auxiliar en ServiciosController - Actualizacion de configuraciones y migraciones - Endpoint para consultar historial de cambios Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
262 lines
9.3 KiB
PHP
Executable File
262 lines
9.3 KiB
PHP
Executable File
<?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);
|
|
|
|
|
|
}
|
|
}
|