def realizar_pago_contra_factura(self, request, pk=None): try: importe = Decimal(request.data.get('pago_contra_factura')) if importe < 0: raise ValidationError( 'No se permiten valores negativos en el campo importe') estudio = Estudio.objects.get(pk=pk) if estudio.es_pago_contra_factura and importe == estudio.pago_contra_factura: raise ValidationError( 'El importe ingresado debe ser distinto al importe anterior' ) estudio.set_pago_contra_factura(importe) estudio.save() add_log_entry(estudio, self.request.user, CHANGE, 'PAGO CONTRA FACTURA') response = JsonResponse({}, status=status.HTTP_200_OK) except ValidationError as ex: response = JsonResponse({'error': str(ex)}, status=status.HTTP_400_BAD_REQUEST) except Exception as ex: response = JsonResponse({'error': str(ex)}, status=status.HTTP_400_BAD_REQUEST) return response
def confirmar(request, id_turno): if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) try: turno = Turno.objects.get(id=id_turno) if turno.estado.id == Estado.ANULADO: raise ValidationError('El turno esta anulado y no acepta modificaciones') turno.estado = Estado.objects.get(id=Estado.CONFIRMADO) turno.save() add_log_entry(turno, request.user, CHANGE, "CONFIRMA") response_dict = {'status': 1, 'message': "El turno se ha confirmado correctamente."} return JsonResponse(response_dict) except Turno.DoesNotExist: response_dict = {'status': 0, 'message': "Error, no existe turno"} return JsonResponse(response_dict) except ValidationError as e: response_dict = {'status': 0, 'message': e.message} return JsonResponse(response_dict) except Exception as err: return str(err)
def anular(request, id_turno): if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) observacion_turno = request.GET['observacion_turno'] try: turno = Turno.objects.get(id=id_turno) if turno.estado.id == Estado.ANULADO: raise ValidationError('El turno esta anulado y no acepta modificaciones') turno.estado = Estado.objects.get(id=Estado.ANULADO) if observacion_turno: turno.observacion = observacion_turno turno.save() turno_channel_msg(turno, 'ANULA') add_log_entry(turno, request.user, CHANGE, "ANULA") response_dict = {'status': 1, 'message': "El turno se ha anulado correctamente."} return JsonResponse(response_dict) except Turno.DoesNotExist: response_dict = {'status': 0, 'message': "Error, no existe turno"} return JsonResponse(response_dict) except ValidationError as e: response_dict = {'status': 0, 'message': e.message} return JsonResponse(response_dict) except Exception as err: return str(err)
def update(request, id_turno): # session check if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) id_obra_social = request.GET['id-obra-social'] observacion = request.GET['observacion'] try: turno = Turno.objects.get(id=id_turno) if turno.estado.id == Estado.ANULADO: raise ValidationError('El turno esta anulado y no acepta modificaciones') turno.obraSocial = ObraSocial.objects.get(id=id_obra_social) turno.observacion = observacion turno.save() add_log_entry(turno, request.user, CHANGE, "MODIFICA") response_dict = {'status': 1, 'message': "El turno se ha guardado correctamente."} return JsonResponse(response_dict) except Turno.DoesNotExist: response_dict = {'status': 0, 'message': "Error, no existe turno"} return JsonResponse(response_dict) except ValidationError as e: response_dict = {'status': 0, 'message': e.message} return JsonResponse(response_dict) except Exception as err: return str(err)
def create(self, validated_data): monto_acumulado = MovimientoCaja.objects.last().monto_acumulado user = validated_data['username'] estudio = validated_data['estudio_id'] movimientos = [] for movimiento in validated_data['movimientos']: tipo = movimiento['tipo_id'] medico = movimiento['medico_id'] concepto = movimiento['concepto'] monto = movimiento['monto'] monto_acumulado += monto movimiento = MovimientoCaja.objects.create( estudio=estudio, user=user, tipo=tipo, medico=medico, monto=monto, concepto=concepto, monto_acumulado=monto_acumulado) tipo_monto_acumulado = MontoAcumulado.objects.filter( tipo=tipo).first() or MontoAcumulado.objects.get( tipo__id=ID_GENERAL) tipo_monto_acumulado.monto_acumulado += monto tipo_monto_acumulado.save() add_log_entry(movimiento, user, ADDITION, 'CREA') movimientos += [movimiento] return movimientos
def anunciar(request, id_turno): if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) try: turno = Turno.objects.get(id=id_turno) if turno.estado.id == Estado.ANULADO: raise ValidationError('El turno esta anulado y no acepta modificaciones') practicas = turno.practicas.all() for practica in practicas: estudio = Estudio() estudio.paciente_id = turno.paciente.id estudio.practica_id = practica.id estudio.fecha = turno.fechaTurno estudio.medico_id = turno.medico.id estudio.obra_social_id = turno.obraSocial.id estudio.medico_solicitante_id = turno.medico.id estudio.nro_de_orden = "" estudio.anestesista_id = 1 estudio.turno = turno estudio.set_create_defaults() estudio.save() # log estudio add_log_entry(estudio, request.user, ADDITION, 'CREA (desde turnos)') turno_channel_msg(turno, 'ANUNCIA') turno.estado = Estado.objects.get(pk=Estado.EN_ESPERA) turno.save() add_log_entry(turno, request.user, CHANGE, "ANUNCIA") response_dict = {'status': True, 'message': "Success"} return JsonResponse(response_dict) except Turno.DoesNotExist: response_dict = {'status': False, 'message': "Error, no existe turno"} return JsonResponse(response_dict) except ValidationError as e: response_dict = {'status': 0, 'message': e.message} return JsonResponse(response_dict) except Exception as err: response_dict = {'status': False, 'message': str(err)} return JsonResponse(response_dict)
def anular_pago_contra_factura(self, request, pk=None): try: estudio = Estudio.objects.get(pk=pk) if not estudio.es_pago_contra_factura: raise ValidationError( 'No se puede anular un estudio que no fue dado de pago contra factura' ) estudio.anular_pago_contra_factura() estudio.save() add_log_entry(estudio, self.request.user, CHANGE, 'ANULA PAGO CONTRA FACTURA') response = JsonResponse({}, status=status.HTTP_200_OK) except ValidationError as e: response = JsonResponse({'error': e.message}, status=status.HTTP_400_BAD_REQUEST) except Exception as e: response = JsonResponse({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST) return response
def update_importes(self, request, pk=None): pension = request.data.get('pension') diferencia_paciente = request.data.get('diferencia_paciente') arancel_anestesia = request.data.get('arancel_anestesia') estudio = Estudio.objects.get(pk=pk) estudio.pension = Decimal(pension) estudio.diferencia_paciente = Decimal(diferencia_paciente) estudio.arancel_anestesia = Decimal(arancel_anestesia) if estudio.presentacion_id: return Response( { 'success': False, 'message': 'El estudio esta presentado/pcf y no se puede modificar' }, status=status.HTTP_400_BAD_REQUEST) estudio.save() add_log_entry(estudio, self.request.user, CHANGE, 'ACTUALIZA IMPORTES') return Response({'success': True})
def update_movimientos(self, request, pk=None): try: movimiento = MovimientoCaja.objects.get(pk=pk) movimientos_serializer = MovimientoCajaUpdateSerializer( movimiento, data=request.data) if not movimientos_serializer.is_valid(): raise ValidationError(movimientos_serializer.errors) movimientos_serializer.save() add_log_entry(movimiento, self.request.user, CHANGE, 'ACTUALIZACION MOVIMIENTO CAJA') response = JsonResponse({}, status=status.HTTP_200_OK) except ValidationError as ex: response = JsonResponse({'error': str(ex)}, status=status.HTTP_400_BAD_REQUEST) except Exception as ex: response = JsonResponse( {'error': str(ex)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return response
def reprogramar(request, id_turno): if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) observacion_turno = request.GET['observacion_turno'] try: turno = Turno.objects.get(id=id_turno) if turno.estado.id != Estado.ANULADO: turno.estado = Estado.objects.get(id=Estado.ANULADO) if observacion_turno: turno.observacion = observacion_turno turno.save() turno_channel_msg(turno, 'ANULA') add_log_entry(turno, request.user, CHANGE, "REPROGRAMA") practicas = turno.practicas.all() # generamos una estructura de datos similar a request.GET data = QueryDict('', mutable=True) data.update({ 'id-sala': turno.sala.id, 'id-paciente': turno.paciente.id, 'id-medico': turno.medico.id, 'id-obra-social': turno.obraSocial.id }) data.setlist('id-practicas[]', [str(practica.id) for practica in practicas]) return _get_turnos_disponibles(request.user, data) except Turno.DoesNotExist: return get_buscar_turnos(request) except Exception as err: return str(err)
def guardar(request): err_sup = 'Error, se ha detectado superposiciĆ³n de turnos. Por favor, haga click en Mostrar y vuelva a intentarlo.' # session check if not request.user.is_authenticated: response_dict = {'status': 0, 'message': err_ses} return JsonResponse(response_dict) hora_inicio = request.GET['hora_inicio'] hora_fin_estimada = request.GET['hora_fin_estimada'] fecha_turno = parse_date(request.GET['fecha_turno']) id_sala = request.GET['id-sala'] # gte...>= - lte...<= - gt....> - lt....< arr_turnos = Turno.objects.filter( Q(fechaTurno=fecha_turno, sala__id=id_sala, estado__id__lt=3), Q(horaInicio__lte=hora_inicio, horaFinEstimada__gt=hora_inicio) | Q(horaInicio__lt=hora_fin_estimada, horaFinEstimada__gte=hora_fin_estimada) ) if len(arr_turnos) > 0: response_dict = {'status': 0, 'message': err_sup} return JsonResponse(response_dict) id_paciente = request.GET['id-paciente'] id_practicas = request.GET.getlist('id-practicas[]') id_medico = request.GET['id-medico'] id_obra_social = request.GET['id-obra-social'] observacion_turno = request.GET['observacion_turno'] if (_is_feriado(fecha_turno) or _is_medico_con_licencia(fecha_turno, id_medico)): err_no_atiende = 'El medico no atiende en la fecha seleccionada' response_dict = {'status': 0, 'message': err_no_atiende} return JsonResponse(response_dict) try: paciente = Paciente.objects.get(id=id_paciente) practicas = Practica.objects.filter(id__in=id_practicas) turno = Turno() turno.horaInicio = hora_inicio turno.horaFinEstimada = hora_fin_estimada turno.horaFinReal = hora_fin_estimada turno.fecha_otorgamiento = datetime.now() turno.fechaTurno = fecha_turno turno.observacion = observacion_turno turno.paciente = paciente turno.medico_id = id_medico turno.obraSocial_id = id_obra_social turno.sala_id = id_sala turno.estado_id = 1 turno.save(force_insert=True) for practica in practicas: turno.practicas.add(practica) turno.save() turno_channel_msg(turno, 'CREA') add_log_entry(turno, request.user, ADDITION, 'CREA') response_dict = {'status': 1, 'message': "El turno se ha creado correctamente."} return JsonResponse(response_dict) except Paciente.DoesNotExist: response_dict = {'status': 0, 'message': "Error, no existe el paciente"} return JsonResponse(response_dict) except Exception as err: response_dict = {'status': 0, 'message': str(err)} return JsonResponse(response_dict)
def perform_update(self, serializer): estudio = serializer.save() add_log_entry(estudio, self.request.user, CHANGE, 'ACTUALIZA')
def perform_create(self, serializer): estudio = serializer.save() add_log_entry(estudio, self.request.user, ADDITION, 'CREA')