public function guardarCita(Request $request)
 {
     $cliente = $request->input('user_id');
     $programa = $request->input('producto_id');
     $fecha = Carbon::createFromFormat('Y-m-d', $request->input('fecha'));
     $horaId = $request->input('hora');
     $hora = Horario::find($horaId);
     if (!is_null(Cita::where('dia_id', '=', $fecha->dayOfWeek)->where('hora_id', '=', $horaId)->first())) {
         return \Redirect::back()->with('error', 'Ya existe una cita para la fecha y hora seleccionada.');
     }
     $cita = new Cita();
     $cita->user_id = $cliente;
     $cita->producto_id = $programa;
     $cita->fecha = $request->input('fecha');
     $cita->hora = $hora->nombre;
     $cita->dia_id = $fecha->dayOfWeek;
     $cita->creadaporadmin = 1;
     $cita->hora_id = $horaId;
     $cita->save();
     return \Redirect::back()->with('message', 'La cita ha sido creada exitosamente.');
 }
 public function HorariosOcupados($dia_cita)
 {
     $dayOfWeek = Carbon::now()->dayOfWeek;
     if ($dayOfWeek >= $dia_cita) {
         $citaInicial = Carbon::now()->next($dia_cita);
     } else {
         $citaInicial = Carbon::now()->next($dia_cita)->addWeek();
     }
     $citas = Cita::distinct()->select('hora_id')->whereDia_id($dia_cita)->where('fecha', '>=', $citaInicial->toDateString())->groupBy('hora_id')->get();
     $horasIds = array();
     foreach ($citas as $cita) {
         $horasIds[] = $cita->hora_id;
     }
     return $horasIds;
 }
 public function buscarCitasProximas()
 {
     $date = Carbon::now()->addDays(3);
     $citas_1 = Cita::whereFecha($date->toDateString())->get();
     foreach ($citas_1 as $cita_1) {
         $user = User::find($cita_1->user_id);
         $producto = Producto::find($cita_1->producto_id);
         $this->sendFirstAppointmentReminder($user, $producto, $cita_1);
     }
     $tomorrow = Carbon::now()->tomorrow();
     $citas = Cita::whereFecha($tomorrow->toDateString())->get();
     foreach ($citas as $cita) {
         $user = User::find($cita->user_id);
         $producto = Producto::find($cita->producto_id);
         $this->sendAppointmentReminder($user, $producto, $cita);
     }
     Log::info('Se corrio cron para envio de recordatorios.');
 }
 protected function esFechaValida($fecha, $horaId, $userId = null, $productoId = null)
 {
     $cita = Cita::where('fecha', '=', $fecha)->where('hora_id', '=', $horaId)->first();
     if (is_null($cita)) {
         //no encontre cita
         return true;
     } else {
         //si encontre, ahora si llega userId y productoId, valido que la cita encontrada, no sea del mismo usuario y mismo producto
         if ($userId > 0 and $productoId > 0) {
             if ($cita->user_id == $userId and $cita->producto_id == $productoId) {
                 return true;
             } else {
                 return false;
             }
         } else {
             return false;
         }
     }
 }
 public function guardarCitaUnica(Request $request)
 {
     $producto = Producto::find($request->input('producto_id'));
     if (is_null($producto)) {
         App::abort(404);
     }
     $user = User::find(Auth::user()->id);
     $fechaCarbon = Carbon::createFromFormat("Y-m-d", $request->input('fecha'));
     $dia_cita = $fechaCarbon->dayOfWeek;
     $horaFormatHM = substr($request->input('hora'), 0, 5);
     $horario = Horario::whereNombre($horaFormatHM)->first();
     if (is_null($horario)) {
         return \Redirect::back()->with('error', 'Ocurrió un error con la fecha.');
     }
     $hora_cita = $horario->id;
     $cita = new Cita();
     $cita->user_id = Auth::user()->id;
     $cita->producto_id = $request->input('producto_id');
     $cita->fecha = $request->input('fecha');
     $cita->hora = $request->input('hora');
     $cita->dia_id = $dia_cita;
     $cita->hora_id = $hora_cita;
     $cita->save();
     //ponemos el producto configurado.
     $productoUser = Producto::find($request->input('producto_id'))->Usuarios()->updateExistingPivot(Auth::user()->id, array('configurado' => 2));
     $this->enviarCalendarioPorMail($producto, $user);
     return \Redirect("misproductos/ver/" . $request->input('producto_id'));
 }