コード例 #1
0
ファイル: txtparsertest.py プロジェクト: alegomes/bbvisa2ofx
class Test(unittest.TestCase):
    file_path = "../testfiles/exemploFaturaCartao.txt";
    parser = ''

    def setUp(self):
        fTxt = open(self.file_path,'r')
        
        self.parser = TxtParser(fTxt);

    def testParse(self):
        self.parser.parse()
        print self.parser.items    

    def testParse_ConvertingDollarToReal(self):
        self.parser.parse()
        
        self.assertEquals(-978.26324599999998, self.parser.items[6]['value'])

    def testConvert(self):
        fTxt = open(self.file_path,'r')
        fOfx = open(self.file_path+".ofx",'w')
        
        convert(fTxt,fOfx)
    
    def testIsDolarLine(self):
        self.assertEquals(self.parser.parseExchangeRateLine('      0,00 -       0,00 +       0,00 =        0,00   X      0.0 =           0,00'),0.0)
        self.assertEquals(self.parser.parseExchangeRateLine('    871,64 -      21,78 +      69,52 =      823,90   X   1.7627 =       1.452,28'),1.7627)
        self.assertEquals(self.parser.parseExchangeRateLine('  1.172,33 -   1.172,33 +   1.039,98 =    1.039,98 -       0,00 =       1.039,98'),0.0)
        self.assertEquals(self.parser.parseExchangeRateLine('    214,17 -     214,79 +     162,00 =      161,38 -       0,00 =         161,3'),0.0)
        self.assertEquals(self.parser.parseExchangeRateLine('11/08/10 TARIFA SOBRE COMPRAS NO EXTERIOR                       0,00        0,44'),0.0)
        self.assertEquals(self.parser.parseExchangeRateLine(''),0.0)
コード例 #2
0
def convert ( fileTxt, fileOfx, closeOfxFile=True):
    """
        fileTxt: python file para o arquivo txt disponibilizado pelo banco do brasil
        fileOfx: python file com o caminho para o ofx que sera gerado
        closeOfxFile: se false nao fecha fileOfx (workaroud a classe para usar StringIO ao inves da classe file do python)

        Em um arquivo OFX temos um banco, que possui contas (neste caso apenas uma) que por sua vez possuem transacoes.
        Os itens retornados pelo parser do txt, representam transacoes de uma conta

        Para cada transacao o parametro FITID eh composto dos valores %(date)%(value)s%(desc) - este item eh preenchido para que o gnucash
        possa defirnir se o item jah foi importado ou nao
    """

    parser = TxtParser(fileTxt)
    parser.parse()
    items = parser.items
    cardTitle = parser.cardTitle
    cardNumber = parser.cardNumber

    today = datetime.now().strftime('%Y%m%d')


    # output
    out=fileOfx

    out.write (
        """OFXHEADER:100
DATA:OFXSGML
VERSION:102
SECURITY:NONE
ENCODING:USASCII
CHARSET:1252
COMPRESSION:NONE
OLDFILEUID:NONE
NEWFILEUID:NON

<OFX>
    <SIGNONMSGSRSV1>
        <SONRS>
            <STATUS>
                <CODE>0</CODE>
                <SEVERITY>INFO</SEVERITY>
            </STATUS>
            <DTSERVER>%(DTSERVER)s</DTSERVER>
            <LANGUAGE>POR</LANGUAGE>
            <FI>
                <ORG>Banco do Brasil</ORG>
                <FID>1</FID>
            </FI>
        </SONRS>
    </SIGNONMSGSRSV1>
    <BANKMSGSRSV1>
        <STMTTRNRS>
            <TRNUID>1</TRNUID>
            <STATUS>
                <CODE>0</CODE>
                <SEVERITY>INFO</SEVERITY>
            </STATUS>
            <STMTRS>
                <CURDEF>BRL</CURDEF>
                <BANKACCTFROM>
                   <BANKID>%(BANKID)s</BANKID>
                   <ACCTID>%(ACCTID)s</ACCTID>
                   <ACCTTYPE>CHECKING</ACCTTYPE>
                </BANKACCTFROM>
                <BANKTRANLIST>
                    <DTSTART>%(DTSERVER)s</DTSTART>
                    <DTEND>%(DTSERVER)s</DTEND>
        """ % {'DTSERVER':today,'BANKID':cardTitle.replace(' ',''),'ACCTID':cardNumber}
    )

    for item in items:
        out.write(
                """
                    <STMTTRN>
                        <TRNTYPE>OTHER</TRNTYPE>
                        <DTPOSTED>%(date)s</DTPOSTED>
                        <TRNAMT>%(value)s</TRNAMT>
                        <FITID>%(fitid)s</FITID>
                        <MEMO>%(desc)s</MEMO>
                    </STMTTRN>""" % item
                  )



    out.write(
        """
                </BANKTRANLIST>
                <LEDGERBAL>
                    <BALAMT>0</BALAMT>
                    <DTASOF>%s</DTASOF>
                </LEDGERBAL>
            </STMTRS>
        </STMTTRNRS>
    </BANKMSGSRSV1>
</OFX>
        """ % today


    )

    if(closeOfxFile):
        out.close()
    print "Convertido com sucesso!"
コード例 #3
0
ファイル: txtparsertest.py プロジェクト: alegomes/bbvisa2ofx
 def setUp(self):
     fTxt = open(self.file_path,'r')
     
     self.parser = TxtParser(fTxt);
コード例 #4
0
ファイル: bbvisa2ofx.py プロジェクト: alegomes/bbvisa2ofx
def convert ( fileTxt, fileOfx, closeOfxFile=True):
    """
        fileTxt: python loaded file of txt to be convertedCaminho para o arquivo txt disponibilizado pelo banco do brasil
        fileOfx: python loaded file with path to ofx that will be generated
        closeOfxFile: if false do not close fileOfx on the end of convertion (workaroud to use an StringIO class instead of default file class) 
        Em um arquivo OFX temos um banco, que possui contas (neste caso apenas uma) que por sua vez possuem transacoes.
        Os itens retornados pelo parser do txt, representam transacoes de uma conta 
        
        Para cada transacao o parametro FITID eh composto dos valores %(date)%(value)s%(desc) - este item eh preenchido para que o gnucash
        possa defirnir se o item jah foi importado ou nao
    """
    
    parser = TxtParser(fileTxt)
    parser.parse()
    items = parser.items
    cardTitle = parser.cardTitle
    cardNumber = parser.cardNumber
    
    today = datetime.now().strftime('%Y%m%d')
    
    
    # output
    out=fileOfx
    
    out.write (
        """
        <OFX>
            <SIGNONMSGSRSV1>
                <SONRS>
                    <STATUS>
                        <CODE>0</CODE>
                        <SEVERITY>INFO</SEVERITY>
                    </STATUS>
                    <DTSERVER>%(DTSERVER)s</DTSERVER>
                    <LANGUAGE>POR</LANGUAGE>
                    <FI>
                        <ORG>Banco do Brasil</ORG>
                        <FID>1</FID>
                    </FI>
                </SONRS>
            </SIGNONMSGSRSV1>
            <BANKMSGSRSV1>
                <STMTTRNRS>
                    <TRNUID>1</TRNUID>
                    <STATUS>
                        <CODE>0</CODE>
                        <SEVERITY>INFO</SEVERITY>
                    </STATUS>
                    <STMTRS>
                        <CURDEF>BRL</CURDEF>
                        <BANKACCTFROM>
                           <BANKID>%(BANKID)s</BANKID>
                           <ACCTID>%(ACCTID)s</ACCTID>
                           <ACCTTYPE>CHECKING</ACCTTYPE>
                        </BANKACCTFROM>
                        <BANKTRANLIST>
                            <DTSTART>%(DTSERVER)s</DTSTART>
                            <DTEND>%(DTSERVER)s</DTEND>
        """ % {'DTSERVER':today,'BANKID':cardTitle.replace(' ',''),'ACCTID':cardNumber}
    )
        
    for item in items:
        out.write(
            """
                            <STMTTRN>
                                <TRNTYPE>OTHER</TRNTYPE>
                                <DTPOSTED>%(date)s</DTPOSTED>
                                <TRNAMT>%(value)s</TRNAMT>
                                <FITID>%(fitid)s</FITID>
                                <MEMO>%(desc)s</MEMO>
                            </STMTTRN> 
            """ % item     
                  )
    
    
    
    out.write(
        """
                        </BANKTRANLIST>
                        <LEDGERBAL>
                            <BALAMT>0</BALAMT>
                            <DTASOF>%s</DTASOF>
                        </LEDGERBAL>
                    </STMTRS>
                </STMTTRNRS>
            </BANKMSGSRSV1>
        </OFX>
        """ % today
              
              
    )
    
    if(closeOfxFile):
        out.close()
    print "Success converted"