# along with this program. If not, see <http://www.gnu.org/licenses/>.
# -*- mode: python; encoding: utf-8; -*-
import xml.dom.minidom
+import dirs
class Contribuinte:
def __init__(self, cpf):
+ irpf_dir = dirs.get_default_irpf_dir()
self.cpf = self._minimize_cpf(cpf)
if not self._validate_cpf(self.cpf):
raise RuntimeError("Invalid CPF: " + self.cpf)
+ self.cpf_file = irpf_dir.get_userdata_file("%s/%s.xml" % (self.cpf, self.cpf))
+ self.iddecl_file = irpf_dir.get_userdata_file("iddeclaracoes.xml")
self.declaracao = self._find_id()
- self.dados = xml.dom.minidom.parse("aplicacao/dados/%s/%s.xml" % (self.cpf, self.cpf))
+ self.dados = xml.dom.minidom.parse(self.cpf_file)
self.contribuinte = self.dados.getElementsByTagName("contribuinte")[0]
+
def _find_id(self):
cpf = self._normalize_cpf(self.cpf)
- self.declaracoes = xml.dom.minidom.parse("aplicacao/dados/iddeclaracoes.xml")
+ self.declaracoes = xml.dom.minidom.parse(self.iddecl_file)
for i in self.declaracoes.childNodes[0].childNodes:
if "cpf" in i.attributes.keys():
if i.attributes["cpf"].nodeValue == cpf:
return i
return None
+
# CPF normalizado se parece com 000.000.000-00
def _normalize_cpf(self, cpf):
ncpf = ""
if len(ncpf) != 14:
raise RuntimeError("Invalid CPF")
return ncpf
+
# CPF minimizado se parece com 01234567890
def _minimize_cpf(self, cpf):
ncpf = bytearray(self._normalize_cpf(cpf))
del ncpf[7]
del ncpf[3]
return str(ncpf)
+
def _validate_cpf(self, cpf):
ncpf = self._minimize_cpf(cpf)
if len(ncpf) != 11:
if v != ord(ncpf[10]) - ord('0'):
return False
return True
+
def save(self):
- self.dados.writexml(open("aplicacao/dados/%s/%s.xml" % (self.cpf, self.cpf), "w"))
- self.declaracoes.writexml(open("aplicacao/dados/iddeclaracoes.xml", "w"))
+ self.dados.writexml(open(self.cpf_file, "w"))
+ self.declaracoes.writexml(open(self.iddecl_file, "w"))
def _get_attr(self, el, attr):
if attr in el.attributes.keys():
return el.attributes[attr].nodeValue
return None
+
def _set_attr(self, el, attr, val):
el.attributes[attr].nodeValue = val
+
def get_declaracao(self, attr):
return self._get_attr(self.declaracao, attr)
+
def set_declaracao(self, attr, val):
self._set_attr(self.declaracao, attr, val)
+
def get_nome(self):
return self.get_declaracao("nome")
+
def set_nome(self, nome):
self.set_declaracao("nome", nome)
- def get_contribuinte(self, attr):
+
+ def get_campo_contribuinte(self, attr):
if attr == "nome":
return self.get_nome()
return self._get_attr(self.contribuinte, attr)
+
def set_contribuinte(self, attr, val):
if attr == "nome":
self.set_nome(val)
- self._set_attr(self.contribuinte, attr, val)
+ else:
+ self._set_attr(self.contribuinte, attr, val)
contribuinte_attributes = [
"nome",
import sys
contribuinte = Contribuinte(sys.argv[1])
print "Carregando CPF " + contribuinte._normalize_cpf(sys.argv[1])
- if contribuinte._validate_cpf(sys.argv[1]):
- print "CPF valido"
- else:
- print "CPF invalido"
- sys.exit(1)
+
if len(sys.argv) == 4:
- print "Valor anterior: " + contribuinte.get_contribuinte(sys.argv[2])
+ print "Valor anterior: " + contribuinte.get_campo_contribuinte(sys.argv[2])
contribuinte.set_contribuinte(sys.argv[2], sys.argv[3])
- print "Valor atual: " + contribuinte.get_contribuinte(sys.argv[2])
+ print "Valor atual: " + contribuinte.get_campo_contribuinte(sys.argv[2])
print "Salvando..."
contribuinte.save()
+ elif len(sys.argv) == 3:
+ campo = sys.argv[2]
+ valor = contribuinte.get_campo_contribuinte(campo)
+ if valor:
+ print ("Valor de " + campo + ": " + valor)
+ else:
+ print ("Campo " + campo + " retornou vazio")
else:
print "\nCONTRIBUINTE:"
for i in contribuinte_attributes:
- val = contribuinte.get_contribuinte(i)
+ val = contribuinte.get_campo_contribuinte(i)
if val == None:
val = ""
print i + ": " + val