Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

176
Vistas
Vincular el tiempo de trabajo de un formulario a otro

Tengo un modelo en el que podemos elegir el horario de apertura de la institución para cada día de la semana, de tal y tal a tal y tal, por ejemplo Monday 12:00 AM - 11:30 PM

 <?php namespace common\models; use yii\behaviors\TimestampBehavior; use yii\db\ActiveRecord; use yii\db\Expression; class WorkHours extends _source_WorkHours { public const WEEK_DAY_MON = 'Mon'; public const WEEK_DAY_TUE = 'Tue'; public const WEEK_DAY_WED = 'Wed'; public const WEEK_DAY_THU = 'Thu'; public const WEEK_DAY_FRI = 'Fri'; public const WEEK_DAY_SAT = 'Sat'; public const WEEK_DAY_SUN = 'Sun'; /** * {@inheritdoc} */ public function behaviors(): array { return [ 'timestamp' => [ 'class' => TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ], 'value' => new Expression('NOW()'), ], ]; } public static function weekDays(): array { return [ self::WEEK_DAY_MON => 'Monday', self::WEEK_DAY_TUE => 'Tuesday', self::WEEK_DAY_WED => 'Wednesday', self::WEEK_DAY_THU => 'Thursday', self::WEEK_DAY_FRI => 'Friday', self::WEEK_DAY_SAT => 'Saturday', self::WEEK_DAY_SUN => 'Sunday', ]; } public static function getWeekDay(string $val): string { $ar = self::weekDays(); return $ar[$val] ?? $val; } public static function hoursList(): array { $list = []; for ($i = 0; $i < 24; $i++) { $A = 'AM'; $n = $i; if ($i >= 12) { $A = 'PM'; $n = $i - 12; } $n = $n < 10 ? '0' . $n : $n; $_A = ($i === 12 ? 'AM' : $A); $list[$i . '.00'] = $n . '.00 ' . ($i === 0 ? 'PM' : $_A); $list[$i . '.30'] = $n . '.30 ' . $A; } return $list; } }

A continuación, utilizo este modelo al crear una institución y la posibilidad de elegir el horario de apertura allí.

 <div class="form-group"> <label class="control-label col-sm-3">Wokr Hours</label> <div class="col-sm-6"> <div class="form-group"> <?php foreach (WorkHours::weekDays() as $weekDay => $day) { ?> <div class="col-sm-2"><?= $weekDay ?></div> <div class="col-sm-5"> <?= $form->field( $restaurantWorkHoursForm, RestaurantWorkHoursForm::getAttributeName($weekDay, 'open'), ['template' => '<div class="col-sm-12">{input}</div>'] )->dropDownList(WorkHours::hoursList(), ['prompt' => ''])->label(false) ?> </div> <div class="col-sm-5"> <?= $form->field( $restaurantWorkHoursForm, RestaurantWorkHoursForm::getAttributeName($weekDay, 'close'), ['template' => '<div class="col-sm-12">{input}</div>'] )->dropDownList(WorkHours::hoursList(), ['prompt' => ''])->label(false) ?></div> <?php } ?> </div> </div> </div>

Yo también uso este modelo al reservar un lugar en una institución donde puedes elegir la hora, pero aquí puedes elegir cualquier hora del día.

 <a class="btn btn-fourth <?= $restaurantReservationForm->getErrors('time') ? 'btn-error' : '' ?>" id="reservation-time" role="button" data-bs-toggle="dropdown" aria-expanded="false"> <span class="icon br-clock"></span> <span class="js-value"> <?= $restaurantReservationForm->time ? WorkHours::hoursList()[$restaurantReservationForm->time] : '-- : --' ?> </span> </a> <ul class="dropdown-menu dropdown-menu-height-fixed" aria-labelledby="reservation-time"> <?php foreach (WorkHours::hoursList() as $k => $v) { ?> <li><a class="dropdown-item <?= $restaurantReservationForm->time === $k ? 'active' : '' ?>" href="#" data-value="<?= $k ?>"><?= $v ?></a></li> <?php } ?> </ul>

Ahora cual es la pregunta. tengo dos formas En uno se indicaba el tiempo, en el otro debía haber una elección de tiempo de la primera forma. ¿Cómo se puede vincular el horario de apertura del establecimiento que te indicamos con la elección del horario de reserva?

Digamos que tenemos un horario de trabajo de 12:00 AM - 11:30 PM , cualquier horario está disponible en la reserva, pero es necesario que haya una opción solo dentro del horario de apertura de la institución que especificamos anteriormente, es decir, de 12:00 AM a 11:30 PM , y así todos los días, si la hora no se selecciona en la institución para algún día, entonces la reserva también estará vacía

¿Hay alguna manera de hacer esto a través de json ?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Por supuesto, esto tiene solución, pero deberá manejarlo tanto en el lado del servidor como en el lado del cliente. La necesidad en el lado del servidor es que se asegure de que no haya travesuras realizadas por un usuario técnicamente avanzado y en el lado del cliente su necesidad es ayudar al usuario a saber de qué período puede elegir el valor.

En el lado del servidor, tiene varias opciones en términos de almacenamiento, pero un enfoque factible (asumiendo que el intervalo elegido también se reutilizará en el futuro) es almacenar este valor en la base de datos. Eso significaría que necesitará un CRUD para este valor en el lado del servidor y una función API que atienda las solicitudes del lado del cliente, diciéndole al usuario cuál fue su elección. En el lado del servidor, puede codificar cosas en JSON a través json_encode y enviar el resultado al cliente.

Necesitará un validador tanto en el lado del servidor como en el lado del cliente para determinar si una fecha dada está dentro del intervalo especificado.

En resumen, necesitas:

  • Soporte de esquema de base de datos para este intervalo
  • CRUD del lado del servidor de aplicaciones
  • API del lado del servidor
  • Funcionalidad del lado del cliente que maneja la solicitud de API
  • Validador tanto en el servidor como en el lado del cliente
  • Manejo de la lógica en la representación y manejo de la interfaz de usuario mediante el validador
  • Manejo de la lógica cuando se almacena la fecha o el intervalo de fechas elegido
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda