def crear_sobreturno(request, pk): ''' Crea un nuevo turno después del último disponible. Grupo acceso disponible: grupo_administrativo ''' instance = get_object_or_404(Turno, id=pk) form = TurnoForm({}, instance=instance) save, result = form.sobreturno() if save: return JsonResponse({'success': save, 'turno': result.as_json()}) else: return JsonResponse({'success': save, 'errors': result})
def edit_turn(request, pk): ''' Edita el estado de un turno (Llamada mediante Ajax) Grupo acceso disponible: grupo_administrativo ''' instance = get_object_or_404(Turno, id=pk) form_data = json.loads(request.body) form = TurnoForm(form_data, instance=instance) save, result = form.change_state(form_data) if save: return JsonResponse({'success': save, 'turno': instance.as_json()}) else: return JsonResponse({'success': save, 'errors': result})
def cancelar_turno(request, pk): ''' Vista para cambiar el estado de un turno a 'Cancelado por el paciente' (Llamada mediante Ajax) Grupo acceso disponible: grupo_administrativo ''' instance = get_object_or_404(Turno, id=pk) form_data = {'state': Turno.CANCELADO_PACIENTE} form = TurnoForm(form_data, instance=instance) save, result = form.change_state(form_data) if save: return JsonResponse({'success': save, 'turno': instance.as_json()}) else: return JsonResponse({'success': save, 'errors': result})
def index(request): ''' Vista inicial con calendario que permite agregar turnos Grupo acceso disponible: grupo_administrativo ''' context = { 'modal_title': 'Agregar turno', 'modal_close': 'Cancelar', 'modal_body_include': 'calendario/add_appointment_form.html', 'modal_size': 'modal-lg', 'modal_buttons': ('<button type="button" class="btn btn-success" ' 'id="addAppointmentButton" ' 'onclick="customAppointmentFormSubmit();">Agregar</button>'), 'form': TurnoForm(user=request.user), 'turno_states': { 'DISPONIBLE': Turno.DISPONIBLE, 'ASIGNADO': Turno.ASIGNADO, 'ESPERANDO_EN_SALA': Turno.ESPERANDO_EN_SALA, 'ATENDIDO': Turno.ATENDIDO, 'CANCELADO_PACIENTE': Turno.CANCELADO_PACIENTE, 'CANCELADO_ESTABLECIMIENTO': Turno.CANCELADO_ESTABLECIMIENTO } } return render(request, 'calendario.html', context)
def confirm_turn(request, pk): ''' Confirma el turno de un paciente (Llamada mediante Ajax) Grupo acceso disponible: grupo_administrativo ''' instance = get_object_or_404(Turno, id=pk) form_data = json.loads(request.body) logger.info(f'Gestion de turno {pk}: {form_data}') form_data['solicitante'] = request.user form = TurnoForm(form_data, instance=instance) save, result = form.update(form_data) if save: return JsonResponse({'success': save, 'turno': instance.as_json()}) else: return JsonResponse({'success': save, 'errors': result})
def add_appointment(request): ''' Recibe los datos del formulario para crear los turnos disponibles Grupo acceso disponible: grupo_administrativo ''' form_data = json.loads(request.body) if form_data['bulk']: form = BulkTurnoForm(form_data) elif form_data['id']: instance = Turno.objects.get(pk=form_data['id']) if form_data['delete']: instance.delete() form = None else: form = TurnoForm(form_data, instance=instance) else: form = TurnoForm(form_data) if form is None: response_data = {'success': True, 'appointments': []} elif form.is_valid(): appointments = form.save() if not isinstance(appointments, list): appointments = [appointments] response_data = { 'success': True, 'appointments': [{ 'id': a.id, 'title': str(a), 'start': a.inicio.isoformat(), 'end': a.fin.isoformat(), } for a in appointments] } else: logger.error( f'Error al grabar turnos: {form.errors}, data: {form_data}') response_data = {'success': False, 'errors': form.errors} return JsonResponse(response_data)
def test_especialidades_permitidas_form_turno(self): ''' Usuario `administrativo1` solamente puede agregar turnos de Especialidades en Centros de Salud permitidos ''' self.client.login(username=self.user_admin_1, password=self.user_admin_1) # Instanciar el formulario de Turnos para nuestro usuario form = TurnoForm(user=self.user_admin_1) # Obtener la especialidad (Servicio de un centro de salud) # permitida para este usuario # El método get() devuelve un error si existe más de 1 objeto servicio = form.fields['servicio'].queryset.get() # El usuario administrativo1 solo puede agendar turnos # de especialidades del CS 1 que es el que tiene asignado self.assertEqual(servicio.centro.nombre, 'Centro de Salud 1') self.assertEqual(servicio.especialidad.nombre, 'Especialidad 1')