input('deleted'); $orderBy = $request->input('sortBy', 'servicios_det.fecha_solicitud'); $order = $request->input('order', 'ASC'); $user = Auth::user(); $campos = [ 'servicios_progreso.id as progreso_solicitud_id', 'servicios_enc.id as solicitud_servicio_id', 'servicios_enc.forma_pago_id', 'cat_formas_pagos.nombre as forma_pago_nombre', 'cat_formas_pagos.zeros as forma_pago_zeros', 'fecha_agenda', 'usuario_agenda_id', 'users.nombre as usuario_agenda_nombre', 'users.apellido_paterno as usuario_agenda_apellido_paterno', 'users.apellido_materno as usuario_agenda_apellido_materno', 'servicios_enc.cliente_id', 'clientes.denominacion', 'servicios_enc.cliente_domicilio_id', 'clientes_domicilios.nombre_responsable_sucursal as clientes_nombre_responsable_sucursal', 'clientes_domicilios.celular_responsable as clientes_celular_responsable', 'clientes_domicilios.calle as clientes_calle', 'clientes_domicilios.num_ext as clientes_num_ext', 'clientes_domicilios.num_int as clientes_num_int', 'clientes_domicilios.colonia as clientes_colonia', 'clientes_domicilios.cp as clientes_cp', 'clientes_domicilios.telefono as clientes_telefono', 'clientes_domicilios.lat as clientes_lat', 'clientes_domicilios.lng as clientes_lng', 'servicios_enc.deleted_at', 'servicios_det.id', 'servicios_det.servicio_id', 'cat_servicios.nombre as servicio_nombre', 'servicios_det.estatus_servicio_id', 'cat_estatus_servicios.nombre as estatus_servicio_nombre', 'servicios_det.tipo_servicio_id', 'cat_tipos_servicios.nombre as tipo_servicio_nombre', 'cat_estatus_servicios.color_1 as estatus_servicio_color_1', 'cat_estatus_servicios.color_2 as estatus_servicio_color_2', 'fecha_solicitud', 'servicios_det.duracion', 'definido_cliente', 'servicios_det.operador_id', 'operador.nombre as operador_nombre', 'operador.apellido_paterno as operador_apellido_paterno', 'operador.apellido_materno as operador_apellido_materno', 'servicios_det.vehiculo_id', 'cat_vehiculos.num_economico as vehiculo_num_economico', 'servicios_det.fecha_solicitud', 'sucursales.nombre as vehiculo_sucursal', 'sucursales.id as vehiculo_sucursal_id', 'sucursal_operador.nombre as operador_sucursal', 'sucursal_operador.id as operador_sucursal_id', 'servicios_det.auxiliar_1 as auxiliar_1_id', 'servicios_det.auxiliar_2 as auxiliar_2_id', 'auxiliares_1.nombre as auxiliar_1', 'auxiliares_2.nombre as auxiliar_2', 'sucursal_auxiliares_1.nombre as sucursal_auxiliar_1', 'sucursal_auxiliares_2.nombre as sucursal_auxiliar_2', 'servicios_det.costo_servicio', 'servicios_det.aceptado', 'servicios_det.observacion_atencion_cliente', 'servicios_det.requiere_encuesta', 'servicios_progreso.litraje', 'servicios_det.facturado', 'cat_motivos_estatus.nombre as motivo_estatus', DB::raw("IF(encuesta_contestada = 1, 1, 0) 'encuesta_contestada'") ]; $queryBuilder = ServicioDet::select($campos) ->joinDetalleServicioDet() ->join('servicios_enc', 'servicios_enc.id', '=', 'servicios_det.servicio_enc_id') ->join('cat_formas_pagos', 'cat_formas_pagos.id', '=', 'servicios_enc.forma_pago_id') ->join('users', 'users.id', '=', 'servicios_enc.usuario_agenda_id') ->join('clientes', 'clientes.id', '=', 'servicios_enc.cliente_id') ->join('clientes_domicilios', 'clientes_domicilios.id', '=', 'servicios_enc.cliente_domicilio_id') ->leftJoin('servicios_progreso', 'servicios_progreso.servicio_det_id', '=', 'servicios_det.id') ->leftJoin('cat_motivos_estatus', 'cat_motivos_estatus.id', '=', 'servicios_det.cat_motivos_estatus_id') ->where('servicios_enc.sucursal_id', $user->sucursal_id) ->orderBy($orderBy, $order); if ($estatus_servicio = $request->get('estatus_servicio', false)) { $queryBuilder->where('servicios_det.estatus_servicio_id', $estatus_servicio); } if ($fecha = $request->get('fecha', false)) { $queryBuilder->whereDate('servicios_det.fecha_solicitud', $fecha); } if ($query = $request->get('query', false)) { $queryBuilder->where(function ($q) use ($query) { $q->where('servicios_enc.id', 'like', '%' . $query . '%') ->orWhere('operador.nombre', 'like', '%' . $query . '%') ->orWhere('operador.apellido_paterno', 'like', '%' . $query . '%') ->orWhere('operador.apellido_materno', 'like', '%' . $query . '%') ->orWhere('clientes.denominacion', 'like', '%' . $query . '%') ->orWhere('clientes_domicilios.colonia', 'like', '%' . $query . '%') ->orWhere('clientes_domicilios.telefono', 'like', '%' . $query . '%') ->orWhere('clientes_domicilios.celular_responsable', 'like', '%' . $query . '%') ->orWhere('cat_formas_pagos.nombre', 'like', '%' . $query . '%') ->orWhere('cat_estatus_servicios.nombre', 'like', '%' . $query . '%'); }); } if ($deleted) { $queryBuilder->onlyTrashed(); } if ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); foreach ($data->items() as $servicio) { $servicio->cantidad_servicios = ServicioDet::where('servicio_enc_id', $servicio->solicitud_servicio_id) ->count(); $iniciado = ServicioProgreso::where('servicio_enc_id', $servicio->solicitud_servicio_id) ->where('servicio_det_id', $servicio->id) ->first(); $servicio->iniciado = ($iniciado) ? 1 : 0; $servicio->tiempo_atencion = $this->diferenciaFechas($servicio->fecha_agenda, $servicio->fecha_solicitud); } $servicios = $data; } else { $data = $queryBuilder->get(); foreach ($data as $servicio) { $servicio->cantidad_servicios = ServicioDet::where('servicio_enc_id', $servicio->solicitud_servicio_id) ->count(); $iniciado = ServicioProgreso::where('servicio_enc_id', $servicio->solicitud_servicio_id) ->where('servicio_det_id', $servicio->id) ->first(); $servicio->iniciado = ($iniciado) ? 1 : 0; $servicio->tiempo_atencion = $this->diferenciaFechas($servicio->fecha_agenda, $servicio->fecha_solicitud); } $servicios = ['data' => $data]; } return response()->success($servicios); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(ServiciosRequest $request) { ini_set('default_socket_timeout', 10800); ini_set('memory_limit', '-1'); set_time_limit(0); $data = $request->all(); $data_servicios = $data['servicios']; $user = Auth::user(); DB::beginTransaction(); try { $data['fecha_agenda'] = Carbon::now()->toDateTimeString(); $data['usuario_agenda_id'] = $user->id; $data['sucursal_id'] = $user->sucursal_id; $servicio = ServicioEnc::create($data); $now = Carbon::now()->format('Y-m-d'); foreach ($data_servicios as $servicios) { $contain_aux_1 = array_key_exists('auxiliar_1', $servicios); $contain_aux_2 = array_key_exists('auxiliar_2', $servicios); $fecha_solicitada = Carbon::createFromTimeString($servicios['fecha_solicitud'])->format('Y-m-d'); if ($fecha_solicitada < $now) { DB::rollBack(); return response()->unprocessable('Error', ['La fecha de solicitud no puede ser anterior a la actual']); } if ($contain_aux_1 && $contain_aux_2) { if ($servicios['auxiliar_1'] == $servicios['auxiliar_2']) { $aux = User::where('id', $servicios['auxiliar_1'])->first(); $error_aux = ["El auxiliar: '" . $aux->nombre . " " . $aux->apellido_paterno . " " . $aux->apellido_materno . "' no está disponible."]; DB::rollBack(); return response()->unprocessable('Error', $error_aux); } } $servicios_data = $servicios; $servicios_data['servicio_det_id'] = ''; $validacion = $this->validarOperadorVehiculoLocal($servicios_data); if (count($validacion) > 0) { DB::rollBack(); return response()->unprocessable('Error', $validacion[0]); } //Comentado por rechazo del cliente /*if($fecha_solicitada != $now){ $servicios['aceptado'] = 1; }*/ $servicios['aceptado'] = 1; $servicio->servicios()->create($servicios); } $dservicios = ServicioDet::where('servicio_enc_id', $servicio->id)->get(); $correos = []; $correo_cliente = Cliente::select('email')->where('id', $servicio->cliente_id)->first(); $correo_cliente_domicilio = ClienteDomicilio::select('email')->where('id', $servicio->cliente_domicilio_id)->first(); if ($correo_cliente && $correo_cliente->email) { array_push($correos, $correo_cliente->email); } if ($correo_cliente_domicilio && $correo_cliente_domicilio->email) { array_push($correos, $correo_cliente_domicilio->email); } /* foreach ($dservicios as $servicios){ if((count($correos) > 0) && ($servicios->estatus_servicio_id == PENDIENTE || $servicios->estatus_servicio_id == REPROGRAMADO || $servicios->estatus_servicio_id == VISITA || $servicios['estatus_servicio_id'] == PAGADO)){ Mail::to($correos)->send(new SolicitudServicio($servicios->id)); } }*/ foreach ($dservicios as $servicios) { $fecha_solicitada = Carbon::createFromTimeString($servicios->fecha_solicitud)->format('Y-m-d'); //Envio de notificacion $usuario = User::where('id', $servicios->operador_id)->first(); if (Carbon::parse($usuario->last_login)->isToday() && ($usuario->token_firebase && $fecha_solicitada == $now) && ($servicios->estatus_servicio_id == PENDIENTE || $servicios->estatus_servicio_id == REPROGRAMADO || $servicios->estatus_servicio_id == VISITA || $servicios['estatus_servicio_id'] == PAGADO)) { if (!$this->enviarNotificacion($servicios, $usuario)) { DB::rollBack(); return response()->unprocessable('Error', ['Error al actualizar el Servicio.']); } } } DB::commit(); return response()->success(['result' => 'ok']); } catch (\Exception $e) { DB::rollBack(); Log::info($e); return response()->unprocessable('Error', ['Error al guardar el Servicio.']); } } private function validarOperadorVehiculoLocal($data) { $fecha_solicitada = $data['fecha_solicitud']; list($h, $m) = explode(":", $data['duracion']); $fecha_solicitada_duracion = Carbon::createFromTimeString($data['fecha_solicitud']) ->addHour($h) ->addMinutes($m) ->toDateTimeString(); $fecha_solicitud = Carbon::createFromTimeString($data['fecha_solicitud'])->format('Y-m-d'); /*if(is_numeric($data['servicio_det_id'])){ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN (fecha_solicitud>='$fecha_solicitada' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada') AND (fecha_solicitud>='$fecha_solicitada_duracion' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada_duracion') THEN 'DISPONIBLE' ELSE 'NO_DISPONIBLE' END AS validacion_1"), DB::raw("CASE WHEN (fecha_solicitud='$fecha_solicitada' AND ADDTIME(fecha_solicitud, duracion)='$fecha_solicitada_duracion') THEN 'NO_DISPONIBLE' ELSE null END AS validacion_2")) ->whereDate('fecha_solicitud', $fecha_solicitud) //->whereDate('fecha_solicitud', Carbon::now()->format('Y-m-d')) ->where('id', '<>', $data['servicio_det_id']) ->whereIn('estatus_servicio_id',[PENDIENTE,REPROGRAMADO,PAGADO,VISITA]) ->get(); }else{ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN (fecha_solicitud>='$fecha_solicitada' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada') AND (fecha_solicitud>='$fecha_solicitada_duracion' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada_duracion') THEN 'DISPONIBLE' ELSE 'NO_DISPONIBLE' END AS validacion_1"), DB::raw("CASE WHEN (fecha_solicitud='$fecha_solicitada' AND ADDTIME(fecha_solicitud, duracion)='$fecha_solicitada_duracion') THEN 'NO_DISPONIBLE' ELSE null END AS validacion_2")) ->whereDate('fecha_solicitud', $fecha_solicitud) //->whereDate('fecha_solicitud', Carbon::now()->format('Y-m-d')) ->whereIn('estatus_servicio_id',[PENDIENTE,REPROGRAMADO,PAGADO,VISITA]) ->get(); }*/ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN('$fecha_solicitada'<=fecha_solicitud AND '$fecha_solicitada'fecha_solicitud AND '$fecha_solicitada_duracion'=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE (CASE WHEN('$fecha_solicitada'>=fecha_solicitud AND '$fecha_solicitada_duracion'<=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE (CASE WHEN('$fecha_solicitada'>fecha_solicitud AND '$fecha_solicitada'=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE 'DISPONIBLE' END) END) END) END AS 'validacion_1'")) ->whereDate('fecha_solicitud', $fecha_solicitud) ->whereIn('estatus_servicio_id', [PENDIENTE, REPROGRAMADO, PAGADO, VISITA]); if (is_numeric($data['servicio_det_id'])) { $servicios->where('id', '<>', $data['servicio_det_id']); } $servicios = $servicios->get(); $ocupados = array(); foreach ($servicios as $s) { if (($s->validacion_1 == "NO_DISPONIBLE")) { $exists_operador = collect($ocupados)->contains('operador_id', $s->operador_id); $exists_vehiculo = collect($ocupados)->contains('vehiculo_id', $s->vehiculo_id); if (!$exists_operador && !$exists_vehiculo) { $operador = User::where('id', $s->operador_id)->first(); $operador_name = ($s->operador_id == $data['operador_id']) ? "El operador: '" . $operador->nombre . " " . $operador->apellido_paterno . " " . $operador->apellido_materno . "' no está disponible." : null; $vehiculo = Vehiculo::where('id', $s->vehiculo_id)->first(); $vehiculo_name = ($s->vehiculo_id == $data['vehiculo_id']) ? "El vehiculo: '" . $vehiculo->num_economico . "' no está disponible." : null; $auxiliar_1 = User::where('id', $s->auxiliar_1)->first(); $auxiliar_2 = User::where('id', $s->auxiliar_2)->first(); $contain_aux_1 = array_key_exists('auxiliar_1', $data); $contain_aux_2 = array_key_exists('auxiliar_2', $data); if ($auxiliar_1) { $auxiliar_1_name = ($contain_aux_1 && $s->auxiliar_1 == $data['auxiliar_1']) ? "El auxiliar: '" . $auxiliar_1->nombre . " " . $auxiliar_1->apellido_paterno . " " . $auxiliar_1->apellido_materno . "' no está disponible." : null; } if ($auxiliar_2) { $auxiliar_2_name = ($contain_aux_2 && $s->auxiliar_2 == $data['auxiliar_2']) ? "El auxiliar: '" . $auxiliar_2->nombre . " " . $auxiliar_2->apellido_paterno . " " . $auxiliar_2->apellido_materno . "' no está disponible." : null; } $auxiliar_3_name = null; $salida_array = compact('operador_name', 'vehiculo_name', 'auxiliar_1_name', 'auxiliar_2_name', 'auxiliar_3_name'); $salida = collect($salida_array)->filter()->values(); if (count($salida) > 0) { array_push($ocupados, $salida); } } } } return $ocupados; } public function validarOperadorVehiculo(Request $request) { $data = $request->all(); $fecha_solicitada = $data['fecha_solicitud']; $fecha_solicitada_duracion = Carbon::createFromTimeString($data['fecha_solicitud']) ->addHour($data['horas_duracion']) ->addMinutes($data['minutos_duracion']) ->toDateTimeString(); $fecha_solicitud = Carbon::createFromTimeString($data['fecha_solicitud'])->format('Y-m-d'); /*if(is_numeric($data['servicio_det_id'])){ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN (fecha_solicitud>='$fecha_solicitada' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada') AND (fecha_solicitud>='$fecha_solicitada_duracion' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada_duracion') THEN 'DISPONIBLE' ELSE 'NO_DISPONIBLE' END AS validacion_1"), DB::raw("CASE WHEN (fecha_solicitud='$fecha_solicitada' AND ADDTIME(fecha_solicitud, duracion)='$fecha_solicitada_duracion') THEN 'NO_DISPONIBLE' ELSE null END AS validacion_2")) ->whereDate('fecha_solicitud', $fecha_solicitud) //->whereDate('fecha_solicitud', Carbon::now()->format('Y-m-d')) //->where('id', '<>', $data['servicio_det_id']) ->whereIn('estatus_servicio_id',[PENDIENTE,REPROGRAMADO,PAGADO,VISITA]) ->get(); }else{ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN (fecha_solicitud>='$fecha_solicitada' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada') AND (fecha_solicitud>='$fecha_solicitada_duracion' OR ADDTIME(fecha_solicitud, duracion)<='$fecha_solicitada_duracion') THEN 'DISPONIBLE' ELSE 'NO_DISPONIBLE' END AS validacion_1"), DB::raw("CASE WHEN (fecha_solicitud='$fecha_solicitada' AND ADDTIME(fecha_solicitud, duracion)='$fecha_solicitada_duracion') THEN 'NO_DISPONIBLE' ELSE null END AS validacion_2")) ->whereDate('fecha_solicitud', $fecha_solicitud) //->whereDate('fecha_solicitud', Carbon::now()->format('Y-m-d')) ->whereIn('estatus_servicio_id',[PENDIENTE,REPROGRAMADO,PAGADO,VISITA]) ->get(); }*/ $servicios = ServicioDet::select("servicios_det.*", DB::raw("CASE WHEN('$fecha_solicitada'<=fecha_solicitud AND '$fecha_solicitada'fecha_solicitud AND '$fecha_solicitada_duracion'=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE (CASE WHEN('$fecha_solicitada'>=fecha_solicitud AND '$fecha_solicitada_duracion'<=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE (CASE WHEN('$fecha_solicitada'>fecha_solicitud AND '$fecha_solicitada'=ADDTIME(fecha_solicitud, duracion)) THEN 'NO_DISPONIBLE' ELSE 'DISPONIBLE' END) END) END) END AS 'validacion_1'")) ->whereDate('fecha_solicitud', $fecha_solicitud) ->whereIn('estatus_servicio_id', [PENDIENTE, REPROGRAMADO, PAGADO, VISITA]) ->get(); $ocupados = array(); foreach ($servicios as $s) { //if(($s->validacion_1 == "NO_DISPONIBLE") || ($s->validacion_1 == "DISPONIBLE" && $s->validacion_2 == "NO_DISPONIBLE")){ if (($s->validacion_1 == "NO_DISPONIBLE")) { $exists_operador = collect($ocupados)->contains('operador_id', $s->operador_id); $exists_vehiculo = collect($ocupados)->contains('vehiculo_id', $s->vehiculo_id); if (!$exists_operador && !$exists_vehiculo) { array_push($ocupados, ['operador_id' => $s->operador_id, 'vehiculo_id' => $s->vehiculo_id, 'solicitud_servicio_id' => $s->id, 'auxiliar_1' => $s->auxiliar_1, 'auxiliar_2' => $s->auxiliar_2, 'servicio_id' => $s->id]); } } } return response()->success($ocupados); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { $user = Auth::user(); $permiso_especial = Auth::user()->permiso_especial; $now = Carbon::now()->format('Y-m-d'); $campos_enc = [ 'servicios_enc.id', 'servicios_enc.forma_pago_id', 'cat_formas_pagos.nombre as forma_pago_nombre', 'cat_formas_pagos.zeros as forma_pago_zeros', 'fecha_agenda', 'usuario_agenda_id', 'users.nombre as usuario_agenda_nombre', 'users.apellido_paterno as usuario_agenda_apellido_paterno', 'users.apellido_materno as usuario_agenda_apellido_materno', 'servicios_enc.cliente_id', 'clientes.denominacion', 'servicios_enc.cliente_domicilio_id', 'clientes_domicilios.calle as clientes_calle', 'clientes_domicilios.num_ext as clientes_num_ext', 'clientes_domicilios.num_int as clientes_num_int', 'clientes_domicilios.colonia as clientes_colonia', 'clientes_domicilios.cp as clientes_cp', 'clientes_domicilios.telefono as clientes_telefono', 'clientes_domicilios.lat as clientes_lat', 'clientes_domicilios.lng as clientes_lng', 'servicios_enc.deleted_at', 'servicios_enc.origen_id', 'cat_origenes.nombre as origen_nombre', ]; $servicio_enc = ServicioEnc::select($campos_enc) ->joinDetalleServicioEnc() ->join('cat_origenes', 'servicios_enc.origen_id', '=', 'cat_origenes.id') ->where('servicios_enc.id', $id) ->where('servicios_enc.sucursal_id', $user->sucursal_id) ->first(); $campos_det = [ 'servicios_det.id', 'servicios_det.servicio_id', 'cat_servicios.nombre as servicio_nombre', 'servicios_det.estatus_servicio_id', 'cat_estatus_servicios.nombre as estatus_servicio_nombre', 'cat_estatus_servicios.color_1 as estatus_servicio_color_1', 'cat_estatus_servicios.color_2 as estatus_servicio_color_2', 'servicios_det.tipo_servicio_id', 'cat_tipos_servicios.nombre as tipo_servicio_nombre', 'duracion', 'definido_cliente', 'servicios_det.operador_id', 'operador.nombre as operador_nombre', 'operador.apellido_paterno as operador_apellido_paterno', 'operador.apellido_materno as operador_apellido_materno', 'servicios_det.vehiculo_id', 'cat_vehiculos.num_economico as vehiculo_num_economico', 'servicios_det.fecha_solicitud', 'sucursales.nombre as vehiculo_sucursal', 'sucursales.id as vehiculo_sucursal_id', 'sucursal_operador.nombre as operador_sucursal', 'sucursal_operador.id as operador_sucursal_id', 'servicios_det.auxiliar_1 as auxiliar_1_id', 'servicios_det.auxiliar_2 as auxiliar_2_id', 'auxiliares_1.nombre as auxiliar_1', 'auxiliares_2.nombre as auxiliar_2', 'sucursal_auxiliares_1.nombre as sucursal_auxiliar_1', 'sucursal_auxiliares_2.nombre as sucursal_auxiliar_2', 'servicios_det.costo_servicio', 'servicios_det.aceptado', 'servicios_det.observacion_atencion_cliente', 'servicios_det.requiere_encuesta', 'servicios_det.facturado' ]; $servicio_enc->servicios = ServicioDet::select($campos_det) ->joinDetalleServicioDet() ->where('servicio_enc_id', $id) ->get(); foreach ($servicio_enc->servicios as $servicio) { $iniciado = ServicioProgreso::where('servicio_enc_id', $id) ->where('servicio_det_id', $servicio->id) ->whereNull('fecha_fin_servidor') ->first(); $servicio->iniciado = ($iniciado) ? 1 : 0; list($fecha, $hora) = explode(" ", $servicio->fecha_solicitud); $estatus_servicio = $servicio->estatus_servicio_id; $servicio->puede_editar = $this->validarEditar($iniciado, $estatus_servicio, $fecha, $now, $permiso_especial); } //$servicio_enc->permiso_especial = $permiso_especial; return response()->success($servicio_enc); } public function validarEditar($iniciado, $estatus_servicio, $fecha, $now, $permiso_especial) { $user_rol = RolUser::where('user_id', Auth::user()->id)->first(); if ($permiso_especial) { //Tienen permiso especial $puede_editar = 1; } elseif ($fecha >= $now && $estatus_servicio == PENDIENTE && !$iniciado && $user_rol->role_id == 1) { $puede_editar = 2; } else { $puede_editar = 0; } return $puede_editar; } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(ServiciosRequest $request, $id) { $data = $request->all(); $data_servicios = $data['servicios']; $now = Carbon::now()->format('Y-m-d'); DB::beginTransaction(); try { $servicio = ServicioEnc::where('id', $id) ->withTrashed() ->firstOrFail(); $servicio->update($data); // $correos = []; $correo_cliente = Cliente::select('email')->where('id', $servicio->cliente_id)->first(); $correo_cliente_domicilio = ClienteDomicilio::select('email')->where('id', $servicio->cliente_domicilio_id)->first(); if ($correo_cliente && $correo_cliente->email) { array_push($correos, $correo_cliente->email); } if ($correo_cliente_domicilio && $correo_cliente_domicilio->email) { array_push($correos, $correo_cliente_domicilio->email); } // foreach ($data_servicios as $servicios) { $contain_aux_1 = array_key_exists('auxiliar_1', $servicios); $contain_aux_2 = array_key_exists('auxiliar_2', $servicios); if ($contain_aux_1 && $contain_aux_2) { if ($servicios['auxiliar_1'] == $servicios['auxiliar_2']) { $aux = User::where('id', $servicios['auxiliar_1'])->first(); $error_aux = ["El auxiliar: '" . $aux->nombre . " " . $aux->apellido_paterno . " " . $aux->apellido_materno . "' no está disponible."]; DB::rollBack(); return response()->unprocessable('Error', $error_aux); } } $servicios_data = $servicios; $servicios_data['servicio_det_id'] = $servicios['id']; $validacion = $this->validarOperadorVehiculoLocal($servicios_data); if (count($validacion) > 0) { DB::rollBack(); return response()->unprocessable('Error', $validacion[0]); } if ($servicios['estatus_servicio_id'] == NEGATIVO || $servicios['estatus_servicio_id'] == REALIZADO || $servicios['estatus_servicio_id'] == CANCELADO) { if (Auth::user()->permiso_especial) { $datos = [ 'estatus_servicio_id' => $servicios['estatus_servicio_id'], 'costo_servicio' => $servicios['costo_servicio'], 'operador_id' => $servicios['operador_id'], 'vehiculo_id' => $servicios['vehiculo_id'], 'tipo_servicio_id' => $servicios['tipo_servicio_id'], 'servicio_id' => $servicios['servicio_id'], 'facturado' => $servicios['facturado'], 'observacion_atencion_cliente' => $servicios['observacion_atencion_cliente'] ]; if ($contain_aux_1) { $datos['auxiliar_1'] = $servicios['auxiliar_1']; } if ($contain_aux_2) { $datos['auxiliar_2'] = $servicios['auxiliar_2']; } } else { if ($servicios['estatus_servicio_id'] == NEGATIVO) { $datos = [ 'estatus_servicio_id' => $servicios['estatus_servicio_id'], 'costo_servicio' => $servicios['costo_servicio'] ]; } else { $datos = [ 'estatus_servicio_id' => $servicios['estatus_servicio_id'] ]; } } $s = ServicioDet::where('id', $servicios['id']) ->first(); $s_enc = $s->servicio_enc_id; $s_det = $s->id; $s->update($datos); if($servicios['estatus_servicio_id'] == NEGATIVO || $servicios['estatus_servicio_id'] == REALIZADO){ $auxiliar_id = null; if($contain_aux_1){ $auxiliar_id = $datos['auxiliar_1']; }elseif($contain_aux_2){ $auxiliar_id = $datos['auxiliar_2']; } $this->changePDF($servicios['costo_servicio'], $servicios['operador_id'], $auxiliar_id,$servicios['vehiculo_id'], $s_enc, $s_det, $servicios['fecha_solicitud']); } } else { $servicio = ServicioDet::where('id', $servicios['id']) ->first(); $usuario = User::where('id', $servicios['operador_id'])->first(); $now = Carbon::now()->format('Y-m-d'); $fecha_solicitada = Carbon::createFromTimeString($servicios['fecha_solicitud'])->format('Y-m-d'); if (Carbon::parse($usuario->last_login)->isToday() && ($usuario->token_firebase && $fecha_solicitada == $now && $servicio->operador_id != $servicios['operador_id']) && ($servicios['estatus_servicio_id'] == PENDIENTE || $servicios['estatus_servicio_id'] == REPROGRAMADO || $servicios['estatus_servicio_id'] == VISITA || $servicios['estatus_servicio_id'] == PAGADO)) { if (!$this->enviarNotificacion($servicios, $usuario)) { DB::rollBack(); return response()->unprocessable('Error', ['Error al actualizar el Servicio.']); } } if (!$servicio->aceptado && !$servicio->operador_id && !$servicio->operador_id) { $servicios['aceptado'] = 0; $servicios['observacion'] = null; $servicio->update($servicios); //Envio de notificacion if (Carbon::parse($usuario->last_login)->isToday() && ($usuario->token_firebase && $fecha_solicitada == $now) && ($servicios['estatus_servicio_id'] == PENDIENTE || $servicios['estatus_servicio_id'] == REPROGRAMADO || $servicios['estatus_servicio_id'] == VISITA || $servicios['estatus_servicio_id'] == PAGADO)) { if (!$this->enviarNotificacion($servicios, $usuario)) { DB::rollBack(); return response()->unprocessable('Error', ['Error al actualizar el Servicio.']); } } } else { $servicio['facturado'] = $servicios['facturado']; $servicio->update($servicios); } // /*if (count($correos) > 0) { try { Mail::to($correos)->send(new SolicitudServicio($servicios['id'])); } catch (\Exception $e) { \Log::info("Error al enviar correo: " . json_encode($e->getMessage())); } }*/ // } } DB::commit(); return response()->success($servicio); } catch (\Exception $e) { DB::rollBack(); Log::info($e); return response()->unprocessable('Error', ['Error al actualizar el Servicio.']); } } public function changePDF($costo, $asesor_id, $auxiliar_id, $vehiculo_id, $servicio_enc_id, $servicio_det_id, $fecha_solicitud){ $ruta_pdf = "app/public/servicios/recibos_pdf/solicitud_" . $servicio_enc_id."_servicio_" . $servicio_det_id . ".pdf"; if(Storage::disk('public')->exists("servicios/recibos_pdf/solicitud_" . $servicio_enc_id."_servicio_" . $servicio_det_id . ".pdf")){ $this->updatePDF($costo, $asesor_id, $auxiliar_id, $vehiculo_id, $ruta_pdf, $fecha_solicitud); }else{ $this->generarPDF($servicio_enc_id, $servicio_det_id, true); } return true; } public function updatePDF($costo, $asesor_id, $auxiliar_id, $vehiculo_id, $ruta_pdf, $fecha_solicitud){ $date1 = new Carbon($fecha_solicitud); $date2 = new Carbon("2023-02-02"); $is_less = $date1->lt($date2); $pdf = new FPDI('P','mm','Letter'); $pdf->SetAutoPageBreak(false); $pdf->AddFont('Helvetica', 'N', 'helvetica.php'); $pdf->AddPage('P','Letter'); $pdf->setSourceFile(storage_path($ruta_pdf)); $tplId = $pdf->importPage(1); $pdf->useTemplate($tplId); $pdf->setMargins(0,0,0); $pdf->SetFont('helvetica','N',12); $pdf->SetFillColor(255,255,255); if($is_less){ $pdf->Rect(13.2, 234.5, 36.7, 4.8, 'F'); $pdf->SetXY(14.45,232.2); $pdf->Write(10, $costo); $pdf->Rect(13.2, 245.6, 92.5, 4.8, 'F'); $pdf->SetXY(15,243); $pdf->Write(10, $this->name($asesor_id)); }else{ $pdf->Rect(11.5, 233.7, 37, 4.8, 'F'); $pdf->SetXY(13.2,231.8); $pdf->Write(10, $costo); $pdf->Rect(11.5, 245.5, 92.5, 6.5, 'F'); $pdf->SetXY(13.4,243); $pdf->Write(10, $this->name($asesor_id)); } /*$pdf->Rect(11.5, 256.7, 92.5, 6.5, 'F'); $pdf->SetXY(15,252); $pdf->Write(10, $auxiliar_id ? $this->name($auxiliar_id) : ''); $pdf->Rect(107, 256.5, 48.5, 6.8, 'F'); $pdf->SetXY(110,252); $pdf->Write(10, $this->name($vehiculo_id, false));*/ $pdf->Output(storage_path($ruta_pdf),'F',true); return true; } public function name($id, $is_user = true){ if($is_user){ $user = User::where('id', $id) ->firstOrFail(); $name = $user->nombre . ' ' . $user->apellido_paterno . ' ' . $user->apellido_materno; }else{ $vehiculo = Vehiculo::where('id', $id) ->firstOrFail(); $name = $vehiculo->num_economico; } return $name; } private function enviarNotificacion($servicios, $usuario) { try { $authorization = config('firebase')['authorization']; $project_id = config('firebase')['project_id']; $endpoint = config('firebase')['endpoint']; $headers = [ 'Authorization' => 'key=' . $authorization, 'project_id' => $project_id, 'content-type' => 'application/json' ]; $cat_servicio = CatServicio::where('id', $servicios['servicio_id'])->first(); $datos = ['registration_ids' => array($usuario->token_firebase), 'data' => ['servicio_id' => $servicios['id'], 'title' => 'Nuevo servicio asignado', 'body' => $cat_servicio->nombre]]; $client = new Client(); $client->post($endpoint, [ 'headers' => $headers, 'json' => $datos, ]); return true; } catch (\Exception $e) { Log::info("Firebase error: " . json_encode($e->getMessage())); return false; } } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id, Request $request) { $deleted = $request->input('deleted'); if ($deleted) { $servicio = ServicioEnc::where('id', $id) ->onlyTrashed() ->first(); $servicio->restore(); } else { $servicio = ServicioEnc::findOrFail($id); $servicio->delete(); } return response()->success(['result' => 'ok']); } public function servicios(Request $request) { $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 ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function estatusServicios(Request $request) { $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 ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function formasPagos(Request $request) { $orderBy = $request->input('sortBy', 'nombre'); $order = $request->input('order', 'asc'); $queryBuilder = CatFormaPago::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 tiposServicios(Request $request) { $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 ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function clientes(Request $request) { $orderBy = $request->input('sortBy', 'denominacion'); $order = $request->input('order', 'asc'); $user = Auth::user(); $queryBuilder = Cliente::select('clientes.*') ->leftJoin('clientes_domicilios', function ($join) { $join->on('clientes.id', '=', 'clientes_domicilios.cliente_id'); $join->whereNull('clientes_domicilios.deleted_at'); }) ->where('sucursal_id', $user->sucursal_id) ->orderBy($orderBy, $order); if ($query = $request->get('query', false)) { $queryBuilder->where(function ($q) use ($query) { $q->where('clientes.denominacion', 'like', '%' . $query . '%') ->orWhere('clientes_domicilios.telefono', '=', $query) ->orWhere('clientes.id', '=', $query); }); } $queryBuilder->groupBy('clientes.id'); if ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function domicilioXCliente($cliente_id, Request $request) { $orderBy = $request->input('sortBy', 'calle'); $order = $request->input('order', 'asc'); $queryBuilder = ClienteDomicilio::where('cliente_id', $cliente_id)->orderBy($orderBy, $order); if ($query = $request->get('query', false)) { $queryBuilder->where(function ($q) use ($query) { $q->where('calle', 'like', '%' . $query . '%'); }); } if ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function operadores(Request $request) { $orderBy = $request->input('sortBy', 'users.nombre'); $order = $request->input('order', 'asc'); $user = Auth::user(); $queryBuilder = User::select('users.*', 'sucursales.nombre as sucursal') ->where('tipo_empleado_id', ASESOR_OPERACIONES) ->where('users.sucursal_id', $user->sucursal_id) ->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id') ->orderBy($orderBy, $order); if ($query = $request->get('query', false)) { $queryBuilder->where(function ($q) use ($query) { $q->where('users.nombre', 'like', '%' . $query . '%') ->orWhere('users.apellido_paterno', 'like', '%' . $query . '%') ->orWhere('users.apellido_materno', 'like', '%' . $query . '%'); }); } if ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } public function vehiculos(Request $request) { $orderBy = $request->input('sortBy', 'num_economico'); $order = $request->input('order', 'asc'); $user = Auth::user(); $queryBuilder = Vehiculo::select('cat_vehiculos.*') ->join('vehiculos_sucursales', 'vehiculos_sucursales.vehiculo_id', '=', 'cat_vehiculos.id') ->where('sucursal_id', $user->sucursal_id) ->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 $vehiculo) { $vehiculo->sucursales = VehiculoSucursal::select('sucursales.id as sucursal_id', 'sucursales.nombre as sucursal') ->join('sucursales', 'sucursales.id', '=', 'vehiculos_sucursales.sucursal_id') ->where('vehiculo_id', $vehiculo->id) ->get(); } $vehiculo = $data; } else { $data = $queryBuilder->get(); foreach ($data as $vehiculo) { $vehiculo->sucursales = VehiculoSucursal::select('sucursales.id as sucursal_id', 'sucursales.nombre as sucursal') ->join('sucursales', 'sucursales.id', '=', 'vehiculos_sucursales.sucursal_id') ->where('vehiculo_id', $vehiculo->id) ->get(); } $vehiculo = ['data' => $data]; } return response()->success($vehiculo); } public function auxiliares(Request $request) { $orderBy = $request->input('sortBy', 'users.nombre'); $order = $request->input('order', 'asc'); $user = Auth::user(); $queryBuilder = User::select('users.*', 'sucursales.nombre as sucursal') ->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id') ->whereIn('tipo_empleado_id', [AUXILIAR_TECNICO_1, AUXILIAR_TECNICO_2]) ->where('users.sucursal_id', $user->sucursal_id) ->orderBy($orderBy, $order); if ($query = $request->get('query', false)) { $queryBuilder->where(function ($q) use ($query) { $q->where('users.nombre', 'like', '%' . $query . '%') ->orWhere('users.apellido_paterno', 'like', '%' . $query . '%') ->orWhere('users.apellido_materno', 'like', '%' . $query . '%'); }); } if ($perPage = $request->input('perPage', false)) { $data = $queryBuilder->paginate($perPage); } else { $data = ['data' => $queryBuilder->get()]; } return response()->success($data); } 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 removeAuxiliar(Request $request, $servicio_id, $auxiliar_id) { $todos = $request->input('todos'); if ($todos) { ServicioDet::where('id', $servicio_id) ->first() ->update(['auxiliar_1' => null, 'auxiliar_2' => null]); } else { $servicio_det_1 = ServicioDet::where('id', $servicio_id) ->where('auxiliar_1', $auxiliar_id) ->first(); $servicio_det_2 = ServicioDet::where('id', $servicio_id) ->where('auxiliar_2', $auxiliar_id) ->first(); if ($servicio_det_1) { $servicio_det_1->update(['auxiliar_1' => null]); } elseif ($servicio_det_2) { $servicio_det_2->update(['auxiliar_2' => null]); } } return response()->success(['result' => 'ok']); } public function generarPDF($servicio_enc_id, $servicio_det_id, $local = false) { setlocale(LC_MONETARY, 'en_US'); $det = ServicioDet::where('id', $servicio_det_id)->first(); if ($det->estatus_servicio_id != REALIZADO && $det->estatus_servicio_id != NEGATIVO) { return response()->unprocessable('Error', ['El servicio no está terminado.']); } $servicio_progreso_id = ServicioProgreso::where('servicio_enc_id', $servicio_enc_id) ->where('servicio_det_id', $servicio_det_id) ->first(); if($servicio_progreso_id && Storage::disk('public')->exists("servicios/recibos_pdf/solicitud_" . $servicio_enc_id."_servicio_" . $servicio_det_id . ".pdf")) { return response()->file(storage_path('app/public/servicios/recibos_pdf/' . 'solicitud_' . $servicio_enc_id . '_servicio_' . $servicio_det_id . '.pdf')); } $campos = [ 'servicios_enc.id as folio', 'clientes.denominacion as nombre_cliente', DB::raw("DATE_FORMAT(`servicios_det`.`fecha_solicitud`, '%d/%m/%Y') as 'fecha_solicitud'"), 'clientes_domicilios.ciudad', 'clientes_domicilios.celular_responsable as telefono', 'clientes_domicilios.nombre_responsable_sucursal as contacto', 'cat_servicios.nombre as servicio', 'servicios_progreso.comentarios as observaciones', 'servicios_det.costo_servicio', DB::raw("TIME_FORMAT(`servicios_progreso`.`fecha_ini_celular`, '%H:%i:%s') as 'fecha_inicio'"), 'servicios_progreso.duracion', DB::raw("TIME_FORMAT(`servicios_progreso`.`fecha_fin_celular`, '%H:%i:%s') as 'fecha_final'"), DB::raw("CONCAT(asesor.nombre,' ',asesor.apellido_paterno,' ',asesor.apellido_materno) as asesor"), 'sucursales.nombre as sucursal', DB::raw("CONCAT(auxiliar.nombre,' ',auxiliar.apellido_paterno,' ',auxiliar.apellido_materno) as auxiliar"), 'cat_vehiculos.num_economico as vehiculo', 'servicios_progreso.firma', 'estatus_servicio_id', 'clientes_domicilios.calle', 'clientes_domicilios.num_ext', 'clientes_domicilios.num_int', 'clientes_domicilios.colonia', 'clientes_domicilios.cp', 'servicios_progreso.aplica_garantia', 'cat_motivos_estatus.nombre as motivo_estatus' ]; $servicios = ServicioDet::select($campos) ->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id') ->join('clientes', 'servicios_enc.cliente_id', '=', 'clientes.id') ->join('clientes_domicilios', 'servicios_enc.cliente_domicilio_id', '=', 'clientes_domicilios.id') ->join('cat_servicios', 'servicios_det.servicio_id', '=', 'cat_servicios.id') ->leftJoin('servicios_progreso', 'servicios_det.id', '=', 'servicios_progreso.servicio_det_id') ->join('users as asesor', 'servicios_det.operador_id', '=', 'asesor.id') ->leftJoin('users as auxiliar', 'servicios_det.auxiliar_1', '=', 'auxiliar.id') ->join('sucursales', 'servicios_enc.sucursal_id', '=', 'sucursales.id') ->join('cat_vehiculos', 'servicios_det.vehiculo_id', '=', 'cat_vehiculos.id') ->leftJoin('cat_motivos_estatus', 'cat_motivos_estatus.id', '=', 'servicios_det.cat_motivos_estatus_id') ->where('servicios_det.id', $servicio_det_id) ->where('servicios_det.servicio_enc_id', $servicio_enc_id) ->firstOrFail(); $num_int = ($servicios->num_int) ? ' INT. ' . $servicios->num_int : ''; $cp = ($servicios->cp) ? ' C.P. ' . $servicios->cp : ''; $servicios['domicilio'] = 'CALLE ' . $servicios->calle . ' ' . $servicios->num_ext . $num_int . ', COL. ' . $servicios->colonia . $cp; $servicios['folio'] = str_pad($servicios->folio, 5, "0", STR_PAD_LEFT); $servicios['telefono'] = $this->phone_number_format($servicios->telefono); if ($servicios->estatus_servicio_id == NEGATIVO) { $costo_negativo = $servicios->costo_servicio; $costo = 0.00; } else { $costo_negativo = 0.00; $costo = $servicios->costo_servicio; } $servicios['costo_servicio'] = money_format('%(#10n', $costo); $servicios['costo_negativo'] = money_format('%(#10n', $costo_negativo); if ($servicios->duracion) { list($h, $m, $s) = explode(":", $servicios->duracion); $servicios['duracion'] = (int)$h . 'hr ' . $m . 'm ' . $s . 's'; } else { $servicios['duracion'] = "00hr 00m 00s"; } /* if ($servicio_progreso_id) { $evidencias_inicio = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id) ->where('etapa', 'Inicio') ->get(); $evidencias_proceso = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id) ->where('etapa', 'Proceso') ->get(); $evidencias_terminado = ServicioEvidencia::where('servicio_progreso_id', $servicio_progreso_id->id) ->where('etapa', 'Final') ->get(); $inicio = 0; $proceso = 0; $terminado = 0; foreach ($evidencias_inicio as $e_i) { $inicio++; $servicios["evidencia_inicio_$inicio"] = $e_i->imagen; } foreach ($evidencias_proceso as $e_p) { $proceso++; $servicios["evidencia_proceso_$proceso"] = $e_p->imagen; } foreach ($evidencias_terminado as $e_t) { $terminado++; $servicios["evidencia_terminado_$terminado"] = $e_t->imagen; } } */ try { $pdf = App::make('dompdf.wrapper'); $pdf->loadHTML(view('recibos/servicios-lite', compact('servicios'))); $nombre_pdf = 'solicitud_' . $servicio_enc_id . '_servicio_' . $servicio_det_id . '.pdf'; Storage::disk('public')->put('servicios/recibos_pdf/' . $nombre_pdf, $pdf->output()); return $pdf->stream($nombre_pdf); } catch (\Exception $e) { Log::info($e); return response()->unprocessable('Error', ['Error al generar PDF.']); } } function phone_number_format($number) { // Allow only Digits, remove all other characters. $number = preg_replace("/[^\d]/", "", $number); // get number length. $length = strlen($number); // if number = 10 if ($length == 10) { $number = preg_replace("/^1?(\d{3})(\d{3})(\d{4})$/", "($1) $2 $3", $number); } return $number; } function actualizarLitraje(LitrajeRequest $request, $id) { $litraje = $request->input('litraje'); if (Auth::user()->permiso_especial) { $servicio_progreso = ServicioProgreso::findOrFail($id); /*if($servicio_progreso->litraje){ return response()->unprocessable('Error', ['Este servicio ya cuenta con un litraje asignado']); }*/ $servicio_progreso->update(['litraje' => $litraje]); return response()->success(['result' => 'ok']); } return response()->unauthorized('No es posible actualizar, pongase en contacto con un administrador'); } function filtrosServicios(Request $request){ $user = Auth::user(); $origenes = CatOrigen::select('id', 'nombre')->orderBy('nombre','ASC')->get(); $formas_pagos= CatFormaPago::select('id', 'nombre')->orderBy('nombre','ASC')->get(); $estatus_servicios = CatEstatuServicio::select('id', 'nombre')->orderBy('nombre','ASC')->get(); $servicios = CatServicio::select('id', 'nombre')->orderBy('nombre','ASC')->get(); $tipo_servicio = CatTipoServicio::select('id', 'nombre')->orderBy('nombre','ASC')->get(); $vehiculos = Vehiculo::select('id', 'num_economico', 'descripcion', 'tipo_vehiculo_id')->orderBy('descripcion','ASC')->get(); $operadores = User::select('users.*', 'sucursales.nombre as sucursal')->where('tipo_empleado_id', ASESOR_OPERACIONES)->where('users.sucursal_id', $user->sucursal_id)->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id')->orderBy('users.nombre','ASC')->get(); $auxiliares = User::select('users.*', 'sucursales.nombre as sucursal')->join('sucursales', 'sucursales.id', '=', 'users.sucursal_id')->whereIn('tipo_empleado_id', [AUXILIAR_TECNICO_1, AUXILIAR_TECNICO_2])->where('users.sucursal_id', $user->sucursal_id)->orderBy('users.nombre','ASC')->get(); return response()->success(compact('origenes', 'formas_pagos', 'estatus_servicios', 'servicios', 'tipo_servicio', 'vehiculos', 'operadores', 'auxiliares')); } public function agenda(Request $request){ $start_day = $request->input('start_day'); $end_day = $request->input('end_day'); $campos = [ DB::raw("CONCAT(`users`.`nombre`,' ',`users`.`apellido_paterno`) as nombre_operador"), DB::raw("DATE_FORMAT(`fecha_solicitud`, '%h:%i %p') as hora_servicio"), DB::raw("DATE_FORMAT(`duracion`, '%Hh %im') as duracion_servicio"), "clientes.denominacion as denominacion_cliente", "fecha_solicitud as start_day", DB::raw("ADDTIME(`fecha_solicitud`, `duracion`) as end_day"), "color_web as color_estatus", "cat_estatus_servicios.nombre as nombre_estatus" ]; $servicios = ServicioDet::select($campos) ->join('users', 'servicios_det.operador_id', '=', 'users.id') ->join('cat_estatus_servicios', 'servicios_det.estatus_servicio_id', '=', 'cat_estatus_servicios.id') ->join('servicios_enc', 'servicios_det.servicio_enc_id', '=', 'servicios_enc.id') ->join('clientes', 'servicios_enc.cliente_id', '=', 'clientes.id') ->where('servicios_enc.sucursal_id', Auth::user()->sucursal_id); if($start_day && $end_day){ $servicios->whereRaw("Date(`fecha_solicitud`) between '$start_day' and '$end_day'"); }else{ $servicios->whereRaw("Date(`fecha_solicitud`) = '$start_day'"); } $servicios = $servicios->orderBy('servicios_det.operador_id')->get(); return response()->success($servicios); } }