Skip to content

Instantly share code, notes, and snippets.

@drmcarvalho
Created July 16, 2017 03:15
Show Gist options
  • Save drmcarvalho/175f4206561a08f36fb057dc9faa5215 to your computer and use it in GitHub Desktop.
Save drmcarvalho/175f4206561a08f36fb057dc9faa5215 to your computer and use it in GitHub Desktop.
Programa que registra a troca do gas, e usa o reportlab para gerar relatorios em PDF
__author__ = 'Dener Carvalho'
import sqlite3
import datetime
import os
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
class Conexao(object):
def __init__(self, db_nome):
try:
self.con = sqlite3.connect(db_nome)
self.cursor = self.con.cursor()
print("Nome do banco: ", db_nome)
self.cursor.execute('SELECT SQLITE_VERSION() ')
self.versao = self.cursor.fetchall()
print("Versao: %s" % self.versao)
except sqlite3.Error:
print("Erro ao carregar banco de dados.")
return False
def commit_db(self):
if self.con:
self.con.commit()
def fecha_db(self):
if self.con:
self.con.close()
print("Conexao fechada.")
class GasRegistroDB(object):
def __init__(self):
self.db = Conexao('gas.db')
def fecha_conexao(self):
self.db.fecha_db()
def cria_tabela(self):
try:
sqlTabelaGasRegistro = """
create table gas_registro(
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
local_compra TEXT NOT NULL,
valor_compra REAL NOT NULL,
data_compra DATE NOT NULL
)
"""
self.db.cursor.executescript(sqlTabelaGasRegistro)
return True
except sqlite3.Error:
return False
def cadastrar(self):
#Solicitacao dos dados.
self.local_compra = raw_input("Informe o local da compra: ")
self.valor_compra = float(raw_input("Informe o valor da compra: "))
date = datetime.datetime.now().isoformat(" ")
self.data_compra = raw_input("Comprado em (%s): " % date) or date
try:
self.db.cursor.execute(""" INSERT INTO gas_registro(local_compra, valor_compra, data_compra) VALUES(?,?,?) """,(self.local_compra, self.valor_compra, self.data_compra))
self.db.commit_db()
print("Compra registrada com sucesso.")
except sqlite3.Error:
print("Erro ao cadastrar")
return False
def ler_registros(self):
sql = " SELECT * FROM gas_registro ORDER BY data_compra "
registro = self.db.cursor.execute(sql)
return registro.fetchall()
def listar(self):
lista = self.ler_registros()
for campos in lista:
print("\nCodigo: {codigo}\nLocal da Compra: {local}\nValor: {valor}\nData: {data}".format(codigo = campos[0], local = campos[1], valor = campos[2], data = campos[3][0:10]))
print("\n")
def localizar(self, id):
self.id = id
registro = self.db.cursor.execute(" SELECT * FROM gas_registro WHERE id = ? ",(self.id,))
return registro.fetchall()
def apagar(self, id):
self.id = id
try:
localizado = self.localizar(self.id)
if localizado:
self.db.cursor.execute(" DELETE FROM gas_registro WHERE id = ? ", (self.id,))
self.db.commit_db()
print("Registro apagado.")
else:
print("Codigo %i nao existe no banco." % self.id)
except sqlite3.Error:
return False
class Relatorio(object):
def __init__(self):
self.db = Conexao("gas.db")
def gerar_preco(self, preco):
self.preco = preco
if self.preco > 0:
#Relatorio
dados = self.db.cursor.execute('SELECT * FROM gas_registro WHERE valor_compra <= ? ', (self.preco,))
report = canvas.Canvas("Relatorio Preco.pdf", pagesize=letter)
linha = 750
report.drawString(100, linha, "-- RELATORIO POR PRECO --")
for campos in dados:
linha = linha - 15
report.drawString(100, linha, "| Codigo: {codigo} | Local da Compra: {local} | Valor: {valor} | Data: {data} |".format(codigo = campos[0], local = campos[1], valor = campos[2], data = campos[3][0:10]))
if linha <= 0:
linha = 750
report.save()
else:
print("Preco deve ser maior que 0.")
__author__ = 'Dener Carvalho'
from controleGas import GasRegistroDB, Relatorio
if __name__ == '__main__':
gas = GasRegistroDB()
relatorio = Relatorio()
if gas.cria_tabela():
print("Tabela criada com sucesso.")
while (1):
print("=== Digite 1 para cadastrar ===")
print("=== Digite 2 para listar ===")
print("=== Digite 3 para apagar ===")
print("=== Digite 4 para relatorios ===")
print("=== Digite 0 para sair ===")
op = input("Opcao: ")
if op == 1:
gas.cadastrar()
elif op == 2:
gas.listar()
elif op == 3:
codigo = input("Informe o codigo: ")
if codigo > 0:
gas.apagar(codigo)
elif op == 4:
preco = float(raw_input("Informe o preco: "))
relatorio.gerar_preco(preco)
elif op == 0:
break
print("\n")
gas.fecha_conexao()
print("Saiu")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment