Skip to content

Commit

Permalink
Ajustes de layout editar transporte
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigmars committed May 27, 2024
1 parent 543fab5 commit 91f2e3a
Show file tree
Hide file tree
Showing 8 changed files with 204 additions and 39 deletions.
19 changes: 19 additions & 0 deletions templates/static/css/list.css
Original file line number Diff line number Diff line change
Expand Up @@ -65,4 +65,23 @@ a.button-link {

.data-list-atlas .td-align-center {
text-align: center;
color: white;
}

.td-align-center.status-cancelado {
background-color: red;
}

.td-align-center.status-agendado {
background-color: #24ac54;
}

.td-align-center.status-finalizado {
background-color: #0234d2;
}

.td-align-center.disable_button {
color: silver;
opacity: 0.9;
pointer-events: none
}
34 changes: 34 additions & 0 deletions transportes/core.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from . import errors
from datetime import datetime, time


class TransporteCore:

def __init__(self) -> None:
pass

def validar_cancelamento(self, data_agendada: datetime) -> None:

print(">>>>> data_agendada:", data_agendada)

data_atual = datetime.now()

# data_atual = datetime(2024, 5, 25, 15, 30)

duration = data_atual - data_agendada

hora = data_atual.time().hour

if duration.days < 1:

raise errors.CancelarTransporteError(
"Ação não permitida, período limite excedito para o cancelamento",
"O LIMITE PARA CANCELAMENTO É PERMITIDO ATÉ COM 1 DIA DE ANTECEDÊNCIA",
)

elif duration.days == 1 and hora >= 18:

raise errors.CancelarTransporteError(
"Ação não permitida, limite de horário excedido",
"O CANCELAMENTO PARA ATÉ 1 DIA DE ANTECENDÊNCIA É PERMITIDO ATÉ ÀS 18HRS",
)
11 changes: 11 additions & 0 deletions transportes/errors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
class TransporteError(Exception):

def __init__(self, mensagem: str):
self.message = mensagem


class CancelarTransporteError(Exception):

def __init__(self, mensagem: str, descritiva: str):
self.message = mensagem
self.description = descritiva
26 changes: 11 additions & 15 deletions transportes/templates/lista_transportes.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,35 +19,31 @@ <h2>Relação de Transportes</h2>
<tr>
<th>Paciente</th>
<th>Data e Hora de Consulta</th>
<th style="text-align:center">Status</th>
<th class="td-align-center">Status</th>
<th colspan="5"></th>
</tr>
{% for transporte in transportes %}
<tr>
<td>{{ transporte.nome }}</td>
<td>{{ transporte.data|date:"d/m/Y" }} - {{ transporte.horario }} hrs</td>
<td style="text-align:center">{{ transporte.status }}</td>
<td class="td-align-center"">
{% if transporte.status not in 'Cancelado,Realizado' %}

<td class="td-align-center {{ transporte.status|set_status }}">{{ transporte.status }}</td>

{% if transporte.status not in 'Cancelado,Realizado' %}

<td class="td-align-center">
<a href=" {% url 'editar_transporte' transporte.id %}">Editar</a>
{% else %}
---
{% endif %}
</td>
<td class="td-align-center"">
{% if transporte.status not in 'Cancelado,Realizado' %}
<a href=" {% url 'cancelar_transporte' transporte.id %}">Cancelar</a>
{% else %}
---
{% endif %}
</td>
<td class="td-align-center"">
{% if transporte.status not in 'Cancelado,Realizado' %}
<a href=" {% url 'finalizar_transporte' transporte.id %}">Finalizar</a>
{% else %}
---
{% endif %}
</td>
{% else %}
<td colspan="3" class="td-align-center">&nbsp;</td>
{% endif %}

</tr>
{% endfor %}
</table>
Expand Down
10 changes: 10 additions & 0 deletions transportes/templatetags/poll_extras_transportes.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,13 @@ def set_column_input(field: BoundField) -> str:
}

return fields[field.name]


@register.filter(name="set_status")
def set_status(status: str) -> str:

return {
"CANCELADO": "status-cancelado",
"AGENDADO": "status-agendado",
"FINALIZADO": "status-finalizado",
}[status.upper()]
33 changes: 26 additions & 7 deletions transportes/views.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
from datetime import datetime
from django.shortcuts import render, redirect
from django.contrib import messages

from .forms import TransporteForm
from .models import Transporte
from .core import TransporteCore
from .errors import CancelarTransporteError
from .choices import STATUS_CHOICES

from pacientes.models import Paciente
from django.contrib import messages
from django.db.models import F
from django.db.models import QuerySet
from utils.choice_utils import filter_status_choices
from .choices import STATUS_CHOICES


def listar(request):
Expand Down Expand Up @@ -126,17 +131,31 @@ def editar(request, id: int):

def cancelar(request, id):

transporte = Transporte.objects.get(id=id)
try:

transporte = Transporte.objects.get(id=id)

if request.method == "GET":

return render(request, "cancelar_transporte.html", {"id": transporte.pk})

TransporteCore().validar_cancelamento(
datetime.combine(
transporte.data_de_transporte, transporte.horario_de_atendimento
)
)

transporte.status = 2

if request.method == "GET":
transporte.save()

return render(request, "cancelar_transporte.html", {"id": transporte.pk})
return redirect("listar_transportes")

transporte.status = 2
except CancelarTransporteError as exc:

transporte.save()
messages.error(request, f"{exc.message}\n{exc.description}")

return redirect("listar_transportes")
return redirect("listar_transportes")


def finalizar(request, id: int):
Expand Down
4 changes: 4 additions & 0 deletions utils/choice_utils.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
motivos = {1: "Consulta agendada", 2: "Consulta cancelada", 3: "Consulta realizada"}


def filter_status_choices(transporte, status_choice):

return {
Expand All @@ -8,4 +11,5 @@ def filter_status_choices(transporte, status_choice):
"status": next(
filter(lambda status: status[0] == transporte["status"], status_choice)
)[1],
"motivo": motivos[transporte["status"]],
}
106 changes: 89 additions & 17 deletions validar_hora.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,101 @@
from datetime import datetime, time
# from datetime import datetime, time

# start_time = time(8, 0, 0)
# end_time = time(17, 0, 0)
# # 1 validação
# # start_time = time(8, 0, 0)
# # end_time = time(17, 0, 0)

# hora_consulta = time(17, 1, 0)
# # hora_consulta = time(17, 1, 0)

# if hora_consulta < start_time or hora_consulta > end_time:
# # if hora_consulta < start_time or hora_consulta > end_time:

# print(
# "Erro: Hora informada deve respeitar janela de atendimento, das 08hrs às 17hrs"
# )
# # print(
# # "Erro: Hora informada deve respeitar janela de atendimento, das 08hrs às 17hrs"
# # )


STATUS_CHOICES = ((1, "Agendado"), (2, "Cancelado"), (3, "Realizado"))
# # 2 validação
# # STATUS_CHOICES = ((1, "Agendado"), (2, "Cancelado"), (3, "Realizado"))

users = [("user-kb001", 2), ("user-kb045", 1), ("user-kb025", 3)]
# # users = [("user-kb001", 2), ("user-kb045", 1), ("user-kb025", 3)]


def filter_status(data, status_choice):
return (
data[0],
next(filter(lambda status: status[0] == data[1], status_choice)),
)
# # def filter_status(data, status_choice):
# # return (
# # data[0],
# # next(filter(lambda status: status[0] == data[1], status_choice)),
# # )


result = list(map(lambda user: filter_status(user, STATUS_CHOICES), users))
# # result = list(map(lambda user: filter_status(user, STATUS_CHOICES), users))

print(result)
# # print(result)

# # 3 validção


# class TransporteError(Exception):

# def __init__(self, *args) -> None:
# self.message = self.message = args[0]

# # def __str__(self) -> str:
# # return f"NotifyError, {self.message}"


# def validar_cancelamento(data_agendada: datetime):

# notification: dict[str, str] = {}

# data_atual = datetime.now()

# # data_atual = datetime(2024, 5, 25, 15, 30)

# duration = data_atual - data_agendada

# hora = data_atual.time().hour

# if duration.days < 1:

# raise TransporteError(
# [
# "Ação não permitida por período limite excedito",
# "O LIMITE PARA CANCELAMENTO É PERMITIDO COM UM DIA DE ANTECEDÊNCIA",
# ],
# )

# elif duration.days == 1 and hora >= 18:

# raise TransporteError(
# [
# "Ação não permitida por limite de horário",
# "O CANCELAMENTO É PERMITIDO ATÉ ÀS 18HRS",
# ],
# )

# else:

# return notification


# try:

# data_agendada = datetime(2024, 5, 25, 18, 25)

# validar_cancelamento(data_agendada)

# except TransporteError as exc:

# print("exc>>>>>", exc.message)


def calculate_value(input_value):
# Perform calculations on the input value
result = input_value * 2
return result


# Example usage
value = 10
calculated_value = calculate_value(value)

print(calculated_value) # Output: 20

0 comments on commit 91f2e3a

Please sign in to comment.