Advertisement
MizunoBrasil

Marca Consulta Rafael

Aug 31st, 2024
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.17 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import ttk, messagebox
  3. from tkcalendar import Calendar
  4. from threading import Thread
  5. import sqlite3
  6. import time
  7. from reportlab.lib.pagesizes import letter
  8. from reportlab.pdfgen import canvas
  9. import locale
  10. import calendar
  11.  
  12. class CalendarApp:
  13.     def __init__(self, root):
  14.         self.root = root
  15.         self.root.title("Atendimentos Rafael Fisioterapeuta")
  16.         self.center_window(400, 650)
  17.  
  18.         self.selected_dates = []
  19.         self.date_value = 100.00  # Valor para cada data
  20.         self.db_name = 'datas_marcadas.db'
  21.  
  22.         # Conectar ao banco de dados
  23.         self.conn = sqlite3.connect(self.db_name)
  24.         self.cursor = self.conn.cursor()
  25.         self.create_table()
  26.  
  27.         # Cria o calendário
  28.         self.cal = Calendar(root, selectmode="day", year=2024, month=8, day=31, date_pattern='dd/mm/yyyy')
  29.         self.cal.pack(pady=20)
  30.  
  31.         # Cria o botão para marcar a data
  32.         mark_button = ttk.Button(root, text="Marcar Data", command=self.mark_date)
  33.         mark_button.pack(pady=10)
  34.  
  35.         # Label para mostrar as datas marcadas
  36.         self.label = ttk.Label(root, text="Datas Marcadas:")
  37.         self.label.pack(pady=10)
  38.  
  39.         self.dates_text = tk.Text(root, height=10, width=40)
  40.         self.dates_text.pack(pady=10)
  41.         self.load_dates()
  42.  
  43.         # Botão para finalizar e calcular o valor total
  44.         finish_button = ttk.Button(root, text="Finalizar Marcação", command=self.finalize_dates)
  45.         finish_button.pack(pady=10)
  46.  
  47.         # Botão para gerar PDF
  48.         pdf_button = ttk.Button(root, text="Gerar PDF", command=self.generate_pdf)
  49.         pdf_button.pack(pady=10)
  50.  
  51.         # Botão para apagar banco de dados
  52.         clear_button = ttk.Button(root, text="Apagar Banco de Dados", command=self.clear_database)
  53.         clear_button.pack(pady=10)
  54.  
  55.     def create_table(self):
  56.         self.cursor.execute('''CREATE TABLE IF NOT EXISTS datas (
  57.                                id INTEGER PRIMARY KEY,
  58.                                data TEXT,
  59.                                valor REAL)''')
  60.         self.conn.commit()
  61.  
  62.     def mark_date(self):
  63.         selected = self.cal.get_date()
  64.  
  65.         if selected not in self.selected_dates:
  66.             self.selected_dates.append(selected)
  67.             self.cursor.execute("INSERT INTO datas (data, valor) VALUES (?, ?)", (selected, self.date_value))
  68.             self.conn.commit()
  69.             self.dates_text.insert(tk.END, f"{selected} - R${self.date_value:.2f}\n")
  70.  
  71.     def load_dates(self):
  72.         self.cursor.execute("SELECT data, valor FROM datas")
  73.         rows = self.cursor.fetchall()
  74.         for row in rows:
  75.             date, value = row
  76.             self.dates_text.insert(tk.END, f"{date} - R${value:.2f}\n")
  77.             self.selected_dates.append(date)
  78.  
  79.     def finalize_dates(self):
  80.         total_value = len(self.selected_dates) * self.date_value
  81.         selected_dates_str = "\n".join(self.selected_dates)
  82.         messagebox.showinfo("Finalização", f"Datas selecionadas:\n{selected_dates_str}\n\nValor total: R${total_value:.2f}")
  83.  
  84.     def generate_pdf(self):
  85.         pdf_filename = "datas_marcadas.pdf"
  86.         c = canvas.Canvas(pdf_filename, pagesize=letter)
  87.  
  88.         # Definir a localidade para Português do Brasil
  89.         locale.setlocale(locale.LC_TIME, 'pt_BR.utf8')
  90.  
  91.         # Obtendo o nome do mês em português
  92.         first_selected_date = self.selected_dates[0]
  93.         month_number = int(first_selected_date.split('/')[1])
  94.         month_name = calendar.month_name[month_number].capitalize()
  95.  
  96.         # Título
  97.         title = f"Atendimentos Rafael no mês de: {month_name}"
  98.         c.drawString(100, 780, title)
  99.  
  100.         # Subtítulo "Datas Marcadas"
  101.         c.drawString(100, 750, "Datas Marcadas:")
  102.  
  103.         y_position = 730
  104.         for date in self.selected_dates:
  105.             c.drawString(100, y_position, f"{date} - R${self.date_value:.2f}")
  106.             y_position -= 20
  107.  
  108.         total_value = len(self.selected_dates) * self.date_value
  109.         c.drawString(100, y_position - 20, f"Valor Total: R${total_value:.2f}")
  110.  
  111.         c.save()
  112.         messagebox.showinfo("PDF Gerado", f"PDF gerado com sucesso: {pdf_filename}")
  113.  
  114.     def clear_database(self):
  115.         # Confirmação antes de apagar o banco de dados
  116.         response = messagebox.askyesno("Confirmação", "Tem certeza que deseja apagar todas as datas?")
  117.         if response:  # Se o usuário confirmar
  118.             self.cursor.execute("DELETE FROM datas")
  119.             self.conn.commit()
  120.             self.selected_dates.clear()
  121.             self.dates_text.delete(1.0, tk.END)
  122.             messagebox.showinfo("Banco de Dados", "Todas as datas foram apagadas com sucesso.")
  123.  
  124.     def center_window(self, width, height):
  125.         screen_width = self.root.winfo_screenwidth()
  126.         screen_height = self.root.winfo_screenheight()
  127.  
  128.         x = int((screen_width / 2) - (width / 2))
  129.         y = int((screen_height / 2) - (height / 2))
  130.  
  131.         self.root.geometry(f'{width}x{height}+{x}+{y}')
  132.  
  133.     def __del__(self):
  134.         self.conn.close()
  135.  
  136. if __name__ == "__main__":
  137.     root = tk.Tk()
  138.     app = CalendarApp(root)
  139.     root.mainloop()
  140.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement