Coding deve estar no inicio do arquivo para ser detectado
[cascardo/irpf-gui.git] / src / contribuinte.py
index 491830c..80c17c0 100644 (file)
@@ -1,3 +1,4 @@
+# coding=utf-8
 #
 #   Copyright 2013 Thadeu Lima de Souza Cascardo <cascardo@cascardo.info>
 #
 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 # -*- mode: python; encoding: utf-8; -*-
 import xml.dom.minidom
+import dirs
+import os
 
 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)
+
+        if not os.path.exists(irpf_dir.get_resource_dir()):
+            raise RuntimeError("O caminho para o resource não existe: " + \
+                    irpf_dir.get_resource_dir())
+
+        if not os.path.exists(irpf_dir.get_userdata_dir()):
+            raise RuntimeError("O caminho para os dados não existe: " + \
+                    irpf_dir.get_userdata_dir())
+
+        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:
@@ -75,8 +91,8 @@ class Contribuinte:
         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
@@ -97,15 +113,16 @@ class Contribuinte:
     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):
+    def set_campo_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",
@@ -157,14 +174,14 @@ if __name__ == '__main__':
     print "Carregando CPF " + contribuinte._normalize_cpf(sys.argv[1])
 
     if len(sys.argv) == 4:
-        print "Valor anterior: " + contribuinte.get_contribuinte(sys.argv[2])
-        contribuinte.set_contribuinte(sys.argv[2], sys.argv[3])
-        print "Valor atual: " + contribuinte.get_contribuinte(sys.argv[2])
+        print "Valor anterior: " + contribuinte.get_campo_contribuinte(sys.argv[2])
+        contribuinte.set_campo_contribuinte(sys.argv[2], sys.argv[3])
+        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_contribuinte(campo)
+        valor = contribuinte.get_campo_contribuinte(campo)
         if valor:
             print ("Valor de " + campo + ": " + valor)
         else:
@@ -172,7 +189,7 @@ if __name__ == '__main__':
     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