Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk, messagebox
- from tkcalendar import Calendar
- from threading import Thread
- import sqlite3
- import time
- from reportlab.lib.pagesizes import letter
- from reportlab.pdfgen import canvas
- import locale
- import calendar
- class CalendarApp:
- def __init__(self, root):
- self.root = root
- self.root.title("Atendimentos Rafael Fisioterapeuta")
- self.center_window(400, 650)
- self.selected_dates = []
- self.date_value = 100.00 # Valor para cada data
- self.db_name = 'datas_marcadas.db'
- # Conectar ao banco de dados
- self.conn = sqlite3.connect(self.db_name)
- self.cursor = self.conn.cursor()
- self.create_table()
- # Cria o calendário
- self.cal = Calendar(root, selectmode="day", year=2024, month=8, day=31, date_pattern='dd/mm/yyyy')
- self.cal.pack(pady=20)
- # Cria o botão para marcar a data
- mark_button = ttk.Button(root, text="Marcar Data", command=self.mark_date)
- mark_button.pack(pady=10)
- # Label para mostrar as datas marcadas
- self.label = ttk.Label(root, text="Datas Marcadas:")
- self.label.pack(pady=10)
- self.dates_text = tk.Text(root, height=10, width=40)
- self.dates_text.pack(pady=10)
- self.load_dates()
- # Botão para finalizar e calcular o valor total
- finish_button = ttk.Button(root, text="Finalizar Marcação", command=self.finalize_dates)
- finish_button.pack(pady=10)
- # Botão para gerar PDF
- pdf_button = ttk.Button(root, text="Gerar PDF", command=self.generate_pdf)
- pdf_button.pack(pady=10)
- # Botão para apagar banco de dados
- clear_button = ttk.Button(root, text="Apagar Banco de Dados", command=self.clear_database)
- clear_button.pack(pady=10)
- def create_table(self):
- self.cursor.execute('''CREATE TABLE IF NOT EXISTS datas (
- id INTEGER PRIMARY KEY,
- data TEXT,
- valor REAL)''')
- self.conn.commit()
- def mark_date(self):
- selected = self.cal.get_date()
- if selected not in self.selected_dates:
- self.selected_dates.append(selected)
- self.cursor.execute("INSERT INTO datas (data, valor) VALUES (?, ?)", (selected, self.date_value))
- self.conn.commit()
- self.dates_text.insert(tk.END, f"{selected} - R${self.date_value:.2f}\n")
- def load_dates(self):
- self.cursor.execute("SELECT data, valor FROM datas")
- rows = self.cursor.fetchall()
- for row in rows:
- date, value = row
- self.dates_text.insert(tk.END, f"{date} - R${value:.2f}\n")
- self.selected_dates.append(date)
- def finalize_dates(self):
- total_value = len(self.selected_dates) * self.date_value
- selected_dates_str = "\n".join(self.selected_dates)
- messagebox.showinfo("Finalização", f"Datas selecionadas:\n{selected_dates_str}\n\nValor total: R${total_value:.2f}")
- def generate_pdf(self):
- pdf_filename = "datas_marcadas.pdf"
- c = canvas.Canvas(pdf_filename, pagesize=letter)
- # Definir a localidade para Português do Brasil
- locale.setlocale(locale.LC_TIME, 'pt_BR.utf8')
- # Obtendo o nome do mês em português
- first_selected_date = self.selected_dates[0]
- month_number = int(first_selected_date.split('/')[1])
- month_name = calendar.month_name[month_number].capitalize()
- # Título
- title = f"Atendimentos Rafael no mês de: {month_name}"
- c.drawString(100, 780, title)
- # Subtítulo "Datas Marcadas"
- c.drawString(100, 750, "Datas Marcadas:")
- y_position = 730
- for date in self.selected_dates:
- c.drawString(100, y_position, f"{date} - R${self.date_value:.2f}")
- y_position -= 20
- total_value = len(self.selected_dates) * self.date_value
- c.drawString(100, y_position - 20, f"Valor Total: R${total_value:.2f}")
- c.save()
- messagebox.showinfo("PDF Gerado", f"PDF gerado com sucesso: {pdf_filename}")
- def clear_database(self):
- # Confirmação antes de apagar o banco de dados
- response = messagebox.askyesno("Confirmação", "Tem certeza que deseja apagar todas as datas?")
- if response: # Se o usuário confirmar
- self.cursor.execute("DELETE FROM datas")
- self.conn.commit()
- self.selected_dates.clear()
- self.dates_text.delete(1.0, tk.END)
- messagebox.showinfo("Banco de Dados", "Todas as datas foram apagadas com sucesso.")
- def center_window(self, width, height):
- screen_width = self.root.winfo_screenwidth()
- screen_height = self.root.winfo_screenheight()
- x = int((screen_width / 2) - (width / 2))
- y = int((screen_height / 2) - (height / 2))
- self.root.geometry(f'{width}x{height}+{x}+{y}')
- def __del__(self):
- self.conn.close()
- if __name__ == "__main__":
- root = tk.Tk()
- app = CalendarApp(root)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement