|
|
import gradio as gr |
|
|
from datetime import datetime, timedelta |
|
|
|
|
|
START_DATE = datetime.strptime("2024-11-11", "%Y-%m-%d") |
|
|
|
|
|
def date_to_pt(date_input): |
|
|
try: |
|
|
d = datetime.strptime(date_input.strip(), "%d/%m/%Y") |
|
|
except ValueError: |
|
|
try: |
|
|
raw = date_input.strip().replace("/", "").replace("-", "") |
|
|
if len(raw) == 8 and raw.isdigit(): |
|
|
d = datetime.strptime(f"{raw[:2]}/{raw[2:4]}/{raw[4:]}", "%d/%m/%Y") |
|
|
else: |
|
|
return "Formato inválido (use DD/MM/AAAA ou 8 dígitos)" |
|
|
except ValueError: |
|
|
return "Data inválida" |
|
|
|
|
|
delta_weeks = (d - START_DATE).days // 7 |
|
|
return f"PT{delta_weeks} e PT{delta_weeks - 1}+" |
|
|
|
|
|
def pt_to_week(pt_input): |
|
|
try: |
|
|
raw_num = pt_input.replace("PT", "").replace("+", "").strip() |
|
|
num = int(raw_num) |
|
|
|
|
|
|
|
|
pt_start = START_DATE + timedelta(weeks=num) |
|
|
pt_end = pt_start + timedelta(days=6) |
|
|
|
|
|
|
|
|
pt_plus_start = START_DATE + timedelta(weeks=num+1) |
|
|
pt_plus_end = pt_plus_start + timedelta(days=6) |
|
|
|
|
|
return ( |
|
|
f"PT{num} → {pt_start.strftime('%d/%m')} a {pt_end.strftime('%d/%m')}\n" |
|
|
f"PT{num}+ → {pt_plus_start.strftime('%d/%m')} a {pt_plus_end.strftime('%d/%m')}" |
|
|
) |
|
|
except ValueError: |
|
|
return "Formato PT inválido (ex: PT30 ou 30)" |
|
|
|
|
|
with gr.Blocks(title="Conversor Data ↔ PT") as app: |
|
|
gr.Markdown("## 🔄 Conversor entre datas e ciclos PT") |
|
|
|
|
|
with gr.Tab("📆 PT → Semana", id="pt_to_week"): |
|
|
pt_input = gr.Textbox(label="PT (ex: PT30)", elem_id="pt_input") |
|
|
pt_output = gr.Textbox(label="Semana correspondente") |
|
|
pt_button = gr.Button("Converter PT → Semana", variant="primary") |
|
|
|
|
|
pt_input.submit(fn=pt_to_week, inputs=pt_input, outputs=pt_output) |
|
|
pt_button.click(fn=pt_to_week, inputs=pt_input, outputs=pt_output) |
|
|
|
|
|
with gr.Tab("📅 Data → PT", id="date_to_pt"): |
|
|
date_input = gr.Textbox(label="Data (DD/MM/AAAA ou 8 dígitos)", elem_id="date_input") |
|
|
date_output = gr.Textbox(label="PT correspondente") |
|
|
date_button = gr.Button("Converter Data → PT", variant="primary") |
|
|
|
|
|
date_input.submit(fn=date_to_pt, inputs=date_input, outputs=date_output) |
|
|
date_button.click(fn=date_to_pt, inputs=date_input, outputs=date_output) |
|
|
|
|
|
app.launch() |
|
|
|