Ejemplo n.º 1
0
    def kreditor_fakturer_os1(self, doc):
        antal = 0
        Betalingsdato = self.attr_val(doc, 'Betalingsdato', 'DateProperty')

        lobnr = nextval('Tilpbsid')
        rootTilpbs = db.Key.from_path('rootTilpbs', 'root')
        t = Tilpbs.get_or_insert('%s' % (lobnr), parent=rootTilpbs)
        t.Id = lobnr
        t.Delsystem = "OS1"
        t.Leverancetype = None
        t.Udtrukket = datetime.now()
        t.put()

        TempBetalforslaglinie = doc.getElementsByTagName(
            "TempBetalforslaglinie")
        for TempBetalforslaglinie in TempBetalforslaglinies:
            Nr = self.attr_val(TempBetalforslaglinie, 'Nr', 'IntegerProperty')
            Navn = self.attr_val(TempBetalforslaglinie, 'Navn',
                                 'StringProperty')
            Advisbelob = self.attr_val(TempBetalforslaglinie, 'Advisbelob',
                                       'FloatProperty')
            Fakid = self.attr_val(TempBetalforslaglinie, 'Fakid',
                                  'IntegerProperty')
            Bankregnr = self.attr_val(TempBetalforslaglinie, 'Bankregnr',
                                      'StringProperty')
            Bankkontonr = self.attr_val(TempBetalforslaglinie, 'Bankkontonr',
                                        'StringProperty')
            Faknr = self.attr_val(TempBetalforslaglinie, 'Faknr',
                                  'IntegerProperty')
            wadvistekst = 'Puls3060-' + Faknr

            overforselid = nextval('Overforselid')
            keyPerson = db.Key.from_path('Persons', 'root', 'Person',
                                         '%s' % (Nr))
            keyTilpbs = db.Key.from_path('rootTilpbs', 'root', 'Tilpbs',
                                         '%s' % (lobnr))
            o = Overforsel.get_or_insert('%s' % (overforselid),
                                         parent=keyPerson)
            o.Id = overforselid
            o.TilPbsref = keyTilpbs
            o.Nr = Nr
            o.Advistekst = wadvistekst
            o.Advisbelob = Advisbelob
            o.SFakID = Fakid
            o.SFaknr = Faknr
            o.Bankregnr = Bankregnr
            o.Bankkontonr = Bankkontonr
            o.Betalingsdato = bankdageplus(Betalingsdato, 0)
            o.put()
            antal += 1
        return (lobnr, antal)
Ejemplo n.º 2
0
    def post(self):
        doc = minidom.parse(self.request.body_file)
        ModelName = doc.documentElement.tagName

        if ModelName == 'Medlog':
            try:
                Id = nextval('Medlogid')
            except:
                Id = None
            try:
                Nr = doc.getElementsByTagName("Nr")[0].childNodes[0].data
            except:
                Nr = None
            root = db.Key.from_path('Persons', 'root', 'Person', '%s' % (Nr))
            rec = Medlog.get_or_insert('%s' % (Id), parent=root)

            for attr_name, value in Medlog.__dict__.iteritems():
                if isinstance(value, db.Property):
                    attr_type = value.__class__.__name__
                    if not attr_type in ['_ReverseReferenceProperty']:
                        val = self.attr_val(doc, attr_name, attr_type)
                        logging.info('%s=%s' % (attr_name, val))
                        try:
                            setattr(rec, attr_name, val)
                        except:
                            setattr(rec, attr_name, None)

                        logging.info('==>%s<==>%s<==' % (attr_name, attr_type))
            rec.put()
            deleteMemcache('Medlog')

        self.response.out.write('Status: 404')
Ejemplo n.º 3
0
    def readgirokort042(self, sektion, transkode, rec):
        # --  pbssektionnr
        # --  pbstranskode

        belobmun = float(0)
        belob = int(0)

        #  Medlem Nr
        try:
            Nr = int(rec[33:40])
        except:
            Nr = 0

        indbetalingskortid = nextval('Indbetalingskortid')
        root_indbetalingskort = db.Key.from_path('Persons', 'root', 'Person',
                                                 '%s' % (Nr))
        self.m_rec_indbetalingskort = Indbetalingskort.get_or_insert(
            '%s' % (indbetalingskortid), parent=root_indbetalingskort)
        self.m_rec_indbetalingskort.Id = indbetalingskortid
        self.m_rec_indbetalingskort.Pbssektionnr = sektion
        self.m_rec_indbetalingskort.Pbstranskode = transkode
        self.m_rec_indbetalingskort.Nr = Nr

        #  debitorkonto
        self.m_rec_indbetalingskort.Debitorkonto = rec[25:40]

        #  debgrpnr
        self.m_rec_indbetalingskort.Debgrpnr = rec[20:25]

        #  Kortartkode
        self.m_rec_indbetalingskort.Kortartkode = rec[40:42]

        #  FI-kreditor
        self.m_rec_indbetalingskort.Fikreditornr = rec[42:50]

        #  Indbetalerident
        self.m_rec_indbetalingskort.Indbetalerident = rec[50:69]

        #  dato
        if rec[55:61] != '000000':
            self.m_rec_indbetalingskort.Dato = datetime.strptime(
                '20' + rec[73:75] + '-' + rec[71:73] + '-' + rec[69:71],
                "%Y-%m-%d").date()
        else:
            self.m_rec_indbetalingskort.Dato = None

        #  Beløb
        belob = int(rec[75:88])
        belobmun = float(float(belob) / 100)
        self.m_rec_indbetalingskort.Belob = belobmun

        #  Faknr
        self.m_rec_indbetalingskort.Faknr = int(rec[88:97])

        qry = Person.all().filter('Nr =', self.m_rec_indbetalingskort.Nr)
        if qry.count() == 1:
            # Add tblindbetalingskort
            self.m_rec_indbetalingskort.put()
        else:
            self.m_rec_indbetalingskort.delete()
Ejemplo n.º 4
0
    def readaftale042(self, sektion, transkode, rec):
        # --  pbssektionnr
        # --  pbstranskode
        # - transkode 0230, aktiv aftale
        # - transkode 0231, tilgang af ny betalingsaftale
        # - transkode 0232, aftale afmeldt af pengeinstitut
        # - transkode 0233, aftale afmeldt af kreditor
        # - transkode 0234, aftale afmeldt af betalingsservice

        #  Medlem Nr
        try:
            Nr = int(rec[33:40])
        except:
            Nr = 0

        aftalelinid = nextval('Aftalelinid')
        root_aftalelin = db.Key.from_path('Persons', 'root', 'Person',
                                          '%s' % (Nr))
        self.m_rec_aftalelin = Aftalelin.get_or_insert('%s' % (aftalelinid),
                                                       parent=root_aftalelin)
        self.m_rec_aftalelin.Id = aftalelinid
        self.m_rec_aftalelin.Pbssektionnr = sektion
        self.m_rec_aftalelin.Pbstranskode = transkode
        self.m_rec_aftalelin.Nr = Nr

        #  debitorkonto
        self.m_rec_aftalelin.Debitorkonto = rec[25:40]

        #  debgrpnr
        self.m_rec_aftalelin.Debgrpnr = rec[20:25]

        #  aftalenr
        self.m_rec_aftalelin.Aftalenr = int(rec[40:49])

        #  aftalestartdato
        if rec[49:55] != '000000':
            self.m_rec_aftalelin.Aftalestartdato = datetime.strptime(
                '20' + rec[53:55] + '-' + rec[51:53] + '-' + rec[49:51],
                "%Y-%m-%d").date()
        else:
            self.m_rec_aftalelin.Aftalestartdato = None

        #  aftaleslutdato
        if rec[55:61] != '000000':
            self.m_rec_aftalelin.Aftaleslutdato = datetime.strptime(
                '20' + rec[59:61] + '-' + rec[57:59] + '-' + rec[55:57],
                "%Y-%m-%d").date()
        else:
            self.m_rec_aftalelin.Aftaleslutdato = None

        qry = Person.all().filter('Nr =', self.m_rec_aftalelin.Nr)
        if qry.count() == 1:
            # Add tblaftalelin
            self.m_rec_aftalelin.put()
        else:
            self.m_rec_aftalelin.delete()
Ejemplo n.º 5
0
 def get(self):
     path = self.request.environ['PATH_INFO']
     logging.info('path: %s' % (path))
     mo = re.match("/sync/NrSerie/([0-9a-zA-Z]+)", path)
     if mo:
         if mo.groups()[0]:
             try:
                 nrserie = mo.groups()[0]
                 logging.info('nrserie: %s' % (nrserie))
                 nextnr = nextval('%s' % (nrserie))
                 logging.info('NrSerie=%s, nextnr=%s' % (nrserie, nextnr))
                 self.response.out.write('%s' % (nextnr))
             except:
                 self.response.out.write('Error')
Ejemplo n.º 6
0
    def post(self):
        jData = '{ '
        Nr = self.request.get('Nr')
        if Nr == '*':
            Nr = nextval('Personid')

        #Test for Valid dato
        bAkt_dato = False
        Akt_dato = self.request.get('Akt_dato')
        if Akt_dato:
            try:
                Testdato = datetime.strptime(Akt_dato, "%Y-%m-%d")
                bAkt_dato = True
            except:
                bAkt_dato = False

        if bAkt_dato:
            Id = nextval('tblMedlemlog')
            k = db.Key.from_path('Persons', 'root', 'Person', '%s' % (Nr))
            p = Medlog.get_or_insert('%s' % (Id), parent=k)
            p.Id = Id
            p.Source = 'Medlog'
            p.Source_id = Id
            p.Nr = int(Nr)
            p.Logdato = datetime.now()
            p.Akt_id = int(self.request.get('Akt_id'))
            Akt_dato = self.request.get('Akt_dato')
            logging.info('Akt_dato: %s' % (Akt_dato))
            p.Akt_dato = datetime.strptime(Akt_dato, "%Y-%m-%d").date()
            p.put()
            jData += '"bMedlemlog":"true"'
            jData += ',"MedlemlogTablePos":"%s"' % (
                self.request.get('MedlemlogTablePos'))
            jData += ',"MedlemlogData":["%s","%s","%s","%s","%s","%s","%s"]' % (
                p.Nr, p.Source, p.Source_id, p.Logdato, p.Akt_id, p.Akt_dato,
                p.Akt_id)
            deleteMemcache('Medlog')

            Akt_id = self.request.get('Akt_id')
            if Akt_id == '10':
                Kontingent_id = nextval('Kontingentid')
                t = db.Key.from_path('Persons', 'root', 'Person', '%s' % (Nr))
                q = Kontingent.get_or_insert('%s' % (Kontingent_id), parent=t)
                q.Id = int(Kontingent_id)
                q.Nr = int(Nr)
                dtFradato = datetime.strptime(Akt_dato, "%Y-%m-%d")
                q.Fradato = date(dtFradato.year, dtFradato.month,
                                 dtFradato.day)
                q.beregnKontingent()
                q.put()
                Navn = self.request.get('Navn')
                jData += ',"bKontingent":"true"'
                jData += ',"KontingentTablePos":"%s"' % (
                    self.request.get('KontingentTablePos'))
                jData += ',"KontingentData":["%s","%s","%s","%s","%s","%s"]' % (
                    q.Nr, Navn, q.Fradato, q.Advisbelob, q.Tildato, q.Id)
                deleteMemcache('Kontingent')
            else:
                jData += ',"bKontingent":"false"'
        else:
            jData += '"bMedlemlog":"false"'

        root = db.Key.from_path('Persons', 'root')
        m = Person.get_or_insert('%s' % (Nr), parent=root)
        try:
            m.Navn = self.request.get('Navn')
            m.Kaldenavn = self.request.get('Kaldenavn')
            m.Adresse = self.request.get('Adresse')
            m.Postnr = self.request.get('Postnr')
            m.Bynavn = self.request.get('Bynavn')
            m.Telefon = self.request.get('Telefon')
            m.Email = self.request.get('Email')
            m.Kon = self.request.get('Kon')
            dt = datetime.strptime(self.request.get('FodtDato'), "%Y-%m-%d")
            m.FodtDato = dt.date()
            logging.info('%s=%s' % ('FodtDato', getattr(m, 'FodtDato')))
            m.Bank = self.request.get('Bank')
            m.setNameTags()
            m.put()
            jData += ',"PersonTablePos":"%s"' % (
                self.request.get('PersonTablePos'))
            jData += ',"PersonTableData": ["%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s"]' % (
                m.Nr, m.Navn, m.Kaldenavn, m.Adresse, m.Postnr, m.Bynavn,
                m.Email, m.Telefon, m.Kon, m.FodtDato, m.Bank, m.MedlemtilDato,
                m.MedlemAabenBetalingsdato)
            jData += ' }'
            deleteMemcache('Person')
            logging.info(
                'UpdatemedlemHandler OK Navn: %s, Kaldenavn: %s' %
                (self.request.get('Navn'), self.request.get('Kaldenavn')))
            logging.info('%s' % (jData))
            self.response.headers["Content-Type"] = "application/json"
            self.response.out.write(jData)
        except:
            logging.info(
                'UpdatemedlemHandler ERROR Navn: %s, Kaldenavn: %s' %
                (self.request.get('Navn'), self.request.get('Kaldenavn')))
            self.response.out.write('ERROR from Server')
Ejemplo n.º 7
0
    def aftaleoplysninger_fra_pbs():
        rec = None
        leverance = None
        leverancespecifikation = None
        leverancedannelsesdato = None
        sektion = None
        wpbsfilesid = None
        wleveranceid = None
        AntalFiler = 0

        qry = db.Query(Recievequeue).filter('Recieved_from_pbs =',
                                            False).filter('Onhold =', False)
        for self.m_rec_recievequeue in qry:
            data = self.m_rec_recievequeue.Pbsfileref.Data
            datalines = data.split(crlf)
            #Strip off PBCNET records
            if datalines[0][:6] == 'PBCNET':
                del datalines[0]
                if datalines[-1][:6] == 'PBCNET':
                    del datalines[-1]
            #Test for BS 0603 record
            if datalines[0][16:20] == '0603' and datalines[0][:2] == 'BS':
                try:
                    wpbsfilesid = self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.Id
                    AntalFiler += 1
                    leverancetype = ''
                    sektion = ''
                    leverancespecifikation = ''
                    Seqnr = 0
                    for rec in datalines:
                        Seqnr += 1
                        #  Bestem Leverance Type
                        if rstpbsfile.Seqnr == 1:
                            if rec[:5] == 'BS002':
                                #  Leverance Start
                                leverance = rec[16:20]
                                leverancespecifikation = rec[20:30]
                                leverancedannelsesdato = datetime.strptime(
                                    '20' + rec[53:55] + '-' + rec[51:53] +
                                    '-' + rec[49:51], "%Y-%m-%d")
                            else:
                                raise Pbs603Error(
                                    '241 - Foerste record er ikke en Leverance start record'
                                )

                            if leverance == '0603':
                                # -- Leverance 0603
                                qry = Frapbs.all().filter(
                                    'Leverancespecifikation =',
                                    leverancespecifikation)
                                antal = qry.count()
                                if antal > 0:
                                    raise Pbs603Error(
                                        '242 - Leverance med pbsfilesid: %s og leverancespecifikation: %s er indlaest tidligere'
                                        %
                                        (wpbsfilesid, leverancespecifikation))

                                wleveranceid = nextval('leveranceid')
                                pbsforsendelseid = nextval('Pbsforsendelseid')
                                root_pbsforsendelse = db.Key.from_path(
                                    'rootPbsforsendelse', 'root')
                                self.m_rec_pbsforsendelse = Pbsforsendelse.get_or_insert(
                                    '%s' % (pbsforsendelseid),
                                    parent=root_pbsforsendelse)
                                self.m_rec_pbsforsendelse.Id = pbsforsendelseid
                                self.m_rec_pbsforsendelse.Delsystem = 'BS1'
                                self.m_rec_pbsforsendelse.Leverancetype = '0603'
                                self.m_rec_pbsforsendelse.Oprettetaf = 'Bet'
                                self.m_rec_pbsforsendelse.Oprettet = datetime.now(
                                )
                                self.m_rec_pbsforsendelse.Leveranceid = wleveranceid
                                self.m_rec_pbsforsendelse.put()

                                self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.Pbsforsendelseref = self.m_rec_pbsforsendelse.key(
                                )
                                self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.put(
                                )

                                frapbsid = nextval('Frapbsid')
                                root_frapbs = db.Key.from_path(
                                    'rootFrapbs', 'root')
                                self.m_rec_frapbs = Frapbs.get_or_insert(
                                    '%s' % (frapbsid), parent=root_frapbs)
                                self.m_rec_frapbs.Id = frapbsid
                                self.m_rec_frapbs.Delsystem = 'BS1'
                                self.m_rec_frapbs.Leverancetype = '0603'
                                self.m_rec_frapbs.LBilagdato = None
                                self.m_rec_frapbs.Pbsforsendelseref = self.m_rec_pbsforsendelse.key(
                                )
                                self.m_rec_frapbs.Leverancespecifikation = leverancespecifikation
                                self.m_rec_frapbs.Leverancedannelsesdato = leverancedannelsesdato
                                self.m_rec_frapbs.Udtrukket = datetime.now()
                                self.m_rec_frapbs.put()

                        if leverance == '0603':
                            #  Leverance 0603

                            #  Bestem Sektions Type
                            if sektion == '':
                                if rec[:5] == 'BS012':
                                    #  Sektion Start
                                    sektion = rec[13:17]
                                else:
                                    if not (rec[:5] == 'BS992'
                                            or rec[:5] == 'BS002'):
                                        raise Pbs603Error(
                                            '243 - Foerste record er ikke en Sektions start record'
                                        )

                            if rec[:5] == 'BS002':
                                #  Leverance start
                                #  BEHANDL: Leverance start
                                pass
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0210':
                                #  Sektion 0210 Aktive aftaler
                                if rec[:5] == 'BS012' and rec[13:17] == '0210':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0230':
                                    #  Aktive aftaler
                                    #  BEHANDL: Aktive aftaler
                                    self.readaftale042(sektion, '0230', rec)
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0210':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '244 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0212':
                                #  Sektion 0212 Til- og afgang af betalingsaftaler
                                if rec[:5] == 'BS012' and rec[13:17] == '0212':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0231':
                                    #  Tilgang af nye betalingsaftaler
                                    #  BEHANDL: Tilgang af nye betalingsaftaler
                                    self.readaftale042(sektion, '0231', rec)
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0232':
                                    #  Aftale afmeldt af pengeinstitut
                                    #  BEHANDL: aftale afmeldt af pengeinstitut
                                    self.readaftale042(sektion, '0232', rec)
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0233':
                                    #  Aftaler afmeldt af kreditor
                                    #  BEHANDL: aftaler afmeldt af kreditor
                                    self.readaftale042(sektion, '0233', rec)
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0234':
                                    #  Aftaler afmeldt af betalingsservice
                                    #  BEHANDL: aftaler afmeldt af betalingsservice
                                    self.readaftale042(sektion, '0234', rec)
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0212':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '245 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0214':
                                #  Sektion 0214 Forfaldsoplysninger
                                if rec[:5] == 'BS012' and rec[13:17] == '0214':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0235':
                                    #  Forfald automatisk betaling
                                    #  BEHANDL: Forfald automatisk betaling
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0295':
                                    #  Forfald manuel betaling
                                    #  BEHANDL: Forfald manuel betaling
                                    pass
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0214':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '246 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0215':
                                #  Sektion 0215 Debitornavn/-adresse
                                if rec[:5] == 'BS012' and rec[13:17] == '0215':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS022' and rec[
                                        13:17] == '0240':
                                    #  Navn/adresse på debitor
                                    #  BEHANDL: Navn/adresse på debitor
                                    pass
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0215':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '247 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0217':
                                #  Sektion 0217 Oplysninger fra indbetalingskort
                                if rec[:5] == 'BS012' and rec[13:17] == '0217':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0295':
                                    #  Oplysninger fra indbetalingskort
                                    #  BEHANDL: Oplysninger fra indbetalingskort
                                    self.readgirokort042(sektion, '0295', rec)
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0217':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '248 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif sektion == '0219':
                                #  Sektion 0219 Aktive aftaler om Elektronisk Indbetalingskort
                                if rec[:5] == 'BS012' and rec[13:17] == '0219':
                                    #  Sektion Start
                                    #  BEHANDL: Sektion Start
                                    pass
                                elif rec[:5] == 'BS042' and rec[
                                        13:17] == '0230':
                                    #  Aktiv aftale om Elektronisk Indbetalingskort
                                    #  BEHANDL: Aktiv aftale om Elektronisk Indbetalingskort
                                    pass
                                elif rec[:5] == 'BS092' and rec[
                                        13:17] == '0219':
                                    #  Sektion S**t
                                    #  BEHANDL: Sektion S**t
                                    sektion = ''
                                else:
                                    raise Pbs603Error(
                                        '249 - Rec# %s ukendt: %s' %
                                        (Seqnr, rec))
                                # -******************************************************************************************************
                                # -******************************************************************************************************
                            elif rec[:5] == 'BS992':
                                #  Leverance s**t
                                #  BEHANDL: Leverance S**t
                                leverance = ''
                            else:
                                raise Pbs603Error('250 - Rec# %s ukendt: %s' %
                                                  (Seqnr, rec))

                        else:
                            raise Pbs603Error('251 - Rec# %s ukendt: %s' %
                                              (Seqnr, rec))

                except Pbs603Error, e:
                    msg = '%s' % e.value
                    if msg[:3] == '241':
                        #241 - Første record er ikke en Leverance start record
                        AntalFiler -= 1
                    elif msg[:3] == '242':
                        #242 - Leverancen er indlæst tidligere
                        AntalFiler -= 1
                    elif msg[:3] == '243':
                        #243 - Første record er ikke en Sektions start record
                        AntalFiler -= 1
                    elif msg[:3] == '244':
                        #244 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '245':
                        #245 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '246':
                        #246 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '247':
                        #247 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '248':
                        #248 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '249':
                        #249 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '250':
                        #250 - Record ukendt
                        AntalFiler -= 1
                    elif msg[:3] == '251':
                        #251 - Record ukendt
                        AntalFiler -= 1
                    else:
                        AntalFiler -= 1
                        raise Pbs602Error(msg)
Ejemplo n.º 8
0
  def betalinger_fra_pbs(self):
    rec = None
    leverancetype = None
    leverancespecifikation  = None
    leverancedannelsesdato = None
    sektion = None
    wpbsfilesid = None
    wleveranceid = None
    AntalFiler = 0
    crlf = '\n'
    #  wpbsfilesid = 3450  #'--test test
    #  leverancetype = '0602'
    #  sektion = '0211'
    #  rec = 'BS0420398564402360000000100000000001231312345678910120310000000012755000000125                         3112031112030000000012755'

    qry = db.Query(Recievequeue).filter('Recieved_from_pbs =',False).filter('Onhold =',False)
    for self.m_rec_recievequeue in qry:
      data = self.m_rec_recievequeue.Pbsfileref.Data
      datalines = data.split(crlf)
      #Strip off PBCNET records
      if datalines[0][:6] == 'PBCNET':
        del datalines[0]
        if datalines[-1][:6] == 'PBCNET':
          del datalines[-1]
      #Test for BS 0602 record
      if datalines[0][16:20] == '0602' and datalines[0][:2] == 'BS':
        try:
          wpbsfilesid = self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.Id
          AntalFiler += 1
          leverancetype = ''
          sektion = ''
          leverancespecifikation = ''
          Seqnr = 0
          for rec in datalines:
            Seqnr += 1
            # -- Bestem Leverance Type
            if Seqnr == 1:
              if rec[0:5] == 'BS002':
                # -- Leverance Start
                leverancetype = rec[16:20]
                leverancespecifikation = rec[20:30]
                leverancedannelsesdato = datetime.strptime('20' + rec[53:55] + '-' + rec[51:53] + '-' + rec[49:51], "%Y-%m-%d")
              else:
                raise Pbs602Error('241 - Foerste record er ikke en Leverance start record')

              if leverancetype == '0602':
                # -- Leverance 0602
                qry = Frapbs.all().filter('Leverancespecifikation =', leverancespecifikation)
                antal = qry.count()
                if antal > 0:
                  pass
                  raise Pbs602Error('242 - Leverance med pbsfilesid: %s og leverancespecifikation: %s er indlaest tidligere' % (wpbsfilesid, leverancespecifikation))

                wleveranceid = nextval('leveranceid')
                pbsforsendelseid  = nextval('Pbsforsendelseid')    
                root_pbsforsendelse = db.Key.from_path('rootPbsforsendelse','root')    
                self.m_rec_pbsforsendelse = Pbsforsendelse.get_or_insert('%s' % (pbsforsendelseid), parent=root_pbsforsendelse)
                self.m_rec_pbsforsendelse.Id = pbsforsendelseid
                self.m_rec_pbsforsendelse.Delsystem = 'BS1'
                self.m_rec_pbsforsendelse.Leverancetype = '0602'
                self.m_rec_pbsforsendelse.Oprettetaf = 'Bet'
                self.m_rec_pbsforsendelse.Oprettet = datetime.now()
                self.m_rec_pbsforsendelse.Leveranceid = wleveranceid
                self.m_rec_pbsforsendelse.put()

                self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.Pbsforsendelseref = self.m_rec_pbsforsendelse.key()
                self.m_rec_recievequeue.Pbsfileref.Pbsfilesref.put()
                
                frapbsid  = nextval('Frapbsid') 
                root_frapbs = db.Key.from_path('rootFrapbs','root')    
                self.m_rec_frapbs = Frapbs.get_or_insert('%s' % (frapbsid), parent=root_frapbs)
                self.m_rec_frapbs.Id = frapbsid
                self.m_rec_frapbs.Delsystem = 'BS1'
                self.m_rec_frapbs.Leverancetype = '0602'
                self.m_rec_frapbs.LBilagdato = None
                self.m_rec_frapbs.Pbsforsendelseref = self.m_rec_pbsforsendelse.key()
                self.m_rec_frapbs.Leverancespecifikation = leverancespecifikation
                self.m_rec_frapbs.Leverancedannelsesdato = leverancedannelsesdato
                self.m_rec_frapbs.Udtrukket = datetime.now()                
                self.m_rec_frapbs.put()

            if leverancetype == '0602':
              # -- Leverance 0602*********
              # -- Bestem Sektions Type
              if sektion == '':
                if rec[0:5] == 'BS012':
                  # -- Sektion Start
                  sektion = rec[13:17]
                elif not (rec[0:5] == 'BS992' or rec[0:5] == 'BS002'):
                  raise Pbs602Error('243 - Foerste record er ikke en Sektions start record')
              
              if rec[0:5] == 'BS002':
                # -- Leverance start
                # -- BEHANDL: Leverance start
                pass
              elif sektion == '0211':
                # -- Sektion 0211 Betalingsinformation
                if rec[0:5] == 'BS012' and rec[13:17] == '0211':
                  # -- Sektion Start
                  # -- BEHANDL: Sektion Start
                  pass
                elif rec[0:5] == 'BS042' and rec[13:17] == '0236':
                  # -- Gennemført automatisk betaling
                  # -- BEHANDL: Gennemført automatisk betaling
                  self.read042(sektion, '0236', rec)
                elif rec[0:5] == 'BS042' and rec[13:17] == '0237':
                  # -- Afvist betaling
                  # -- BEHANDL: Afvist betaling
                  self.read042(sektion, '0237', rec)
                elif rec[0:5] == 'BS042' and rec[13:17] == '0238':
                  # -- Afmeldt betaling
                  # -- BEHANDL: Afmeldt betaling
                  self.read042(sektion, '0238', rec)
                elif rec[0:5] == 'BS042' and rec[13:17] == '0239':
                  # -- Tilbagef?rt betaling
                  # -- BEHANDL: Tilbagef?rt betaling
                  self.read042(sektion, '0239', rec)
                elif rec[0:5] == 'BS092' and rec[13:17] == '0211':
                  # -- Sektion S**t
                  # -- BEHANDL: Sektion S**t
                  sektion = ''
                else:
                  raise Pbs602Error('244 - Rec# %s ukendt: %s' % (Seqnr, rec))

              elif sektion == '0215':
                # -- Sektion 0215 FI-Betalingsinformation
                if rec[0:5] == 'BS012' and rec[13:17] == '0215':
                  # -- Sektion Start
                  # -- BEHANDL: Sektion Start
                  pass
                elif rec[0:5] == 'BS042' and rec[13:17] == '0297':
                  # -- Gennemført FI-betaling
                  # -- BEHANDL: Gennemført FI-betaling
                  self.read042(sektion, '0297', rec)
                elif rec[0:5] == 'BS042' and rec[13:17] == '0299':
                  # -- Tilbageført FI-betaling
                  # -- BEHANDL: Tilbagef?rt FI-betaling
                  self.read042(sektion, '0299', rec)
                elif rec[0:5] == 'BS092' and rec[13:17] == '0215':
                  # -- Sektion S**t
                  # -- BEHANDL: Sektion S**t
                  sektion = ''
                else:
                  raise Pbs602Error('245 - Rec# %s ukendt: %s' % (Seqnr, rec))

              elif rec[0:5] == 'BS992':
                # -- Leverance s**t
                # -- BEHANDL: Leverance S**t
                leverancetype = ''
              else:
                raise Pbs602Error('246 - Rec# %s ukendt: %s' % (Seqnr, rec))

            else:
              raise Pbs602Error('247 - Rec# %s ukendt: %s' % (Seqnr, rec))
            
          # s**t rstpbsfile

          # -- Update indbetalingsbelob in Bet
          for rec_bet in self.m_rec_frapbs.listBet:
            SumIndbetalingsbelob = 0.0
            for rec_betlin in rec_bet.listBetlin:
              SumIndbetalingsbelob += rec_betlin.Indbetalingsbelob
            rec_bet.Indbetalingsbelob = SumIndbetalingsbelob
            rec_bet.put()

          
        except Pbs602Error, e:
          msg = '%s' % e.value
          if msg[:3] == '241':   
            #241 - Første record er ikke en Leverance start record
            AntalFiler -= 1
          elif msg[:3] == '242':   
            #242 - Leverancen er indlæst tidligere
            AntalFiler -= 1
          elif msg[:3] == '243':   
            #243 - Første record er ikke en Sektions start record
            AntalFiler -= 1
          elif msg[:3] == '244':   
            #244 - Record ukendt
            AntalFiler -= 1
          elif msg[:3] == '245':   
            #245 - Record ukendt
            AntalFiler -= 1
          elif msg[:3] == '246':   
            #246 - Record ukendt
            AntalFiler -= 1
          elif msg[:3] == '247':   
            #247 - Record ukendt
            AntalFiler -= 1
          else: 
            AntalFiler -= 1
            raise Pbs602Error(msg)
Ejemplo n.º 9
0
  def read042(self, sektion, transkode, rec):
    fortegn = None
    belobmun = None
    belob = None

    # --  pbssektionnr
    # --  pbstranskode
    # - transkode 0236, gennemført automatisk betaling
    # - transkode 0237, afvist automatisk betaling
    # - transkode 0238, afmeldt automatisk betaling
    # - transkode 0239, tilbageført betaling
    
    # --  debitorkonto
    if sektion == '0211':
      Nr = int(rec[33:40] )
      Debitorkonto = rec[25:40] 
    elif sektion == '0215':
      Nr = int(rec[37:44] )
      Debitorkonto = rec[29:44] 
    else:
      Nr = None
      Debitorkonto = None    
    
    betlinid  = nextval('Betlinid') 
    root_betlin = db.Key.from_path('Persons','root','Person','%s' % (Nr))    
    self.m_rec_betlin = Betlin.get_or_insert('%s' % (betlinid), parent=root_betlin)
    self.m_rec_betlin.Id = betlinid
    self.m_rec_betlin.Pbssektionnr = sektion
    self.m_rec_betlin.Pbstranskode = transkode   
    self.m_rec_betlin.Nr = Nr   
    self.m_rec_betlin.Debitorkonto = Debitorkonto   

    # --  aftalenr
    if sektion == '0211':
      self.m_rec_betlin.Aftalenr = int(rec[40:49] )
    else:
      self.m_rec_betlin.Aftalenr = None

    # --  pbskortart
    if sektion == '0215':
      self.m_rec_betlin.Pbskortart = rec[44:46] 
    else:
      self.m_rec_betlin.Pbskortart = None

    # --  pbsgebyrbelob
    if sektion == '0215':
      fortegn = int(rec[46:46+1] )
      belob = int(rec[47:47+5] )
      belobmun = float(belob / 100)
      if fortegn == 0:
        self.m_rec_betlin.Pbsgebyrbelob = float(0)
      elif fortegn == 1:
        self.m_rec_betlin.Pbsgebyrbelob = belobmun
      else:
        self.m_rec_betlin.Pbsgebyrbelob = float(0)
    else:
      self.m_rec_betlin.Pbsgebyrbelob = float(0)

    # --  betalingsdato
    if sektion == '0211':
      if rec[49:55]  != '000000':
        self.m_rec_betlin.Betalingsdato = datetime.strptime('20' + rec[53:55]  + '-' + rec[51:53]  + '-' + rec[49:51], "%Y-%m-%d").date()
      else:
        self.m_rec_betlin.Betalingsdato = None
    elif sektion == '0215':
      if rec[52:58]  != '000000':
        self.m_rec_betlin.Betalingsdato = datetime.strptime('20' + rec[56:58] + '-' + rec[54:56] + '-' + rec[52:54], "%Y-%m-%d").date()
      else:
        self.m_rec_betlin.Betalingsdato = None
    else:
      self.m_rec_betlin.Betalingsdato = None

    # --  belob
    if sektion == '0211':
      fortegn = int(rec[55:56] )
      belob = int(rec[56:69] )
      belobmun = float(belob / 100)
      if fortegn == 0:
        self.m_rec_betlin.Belob = float(0)
      elif fortegn == 1:
        self.m_rec_betlin.Belob = belobmun
      elif fortegn == 2:
        self.m_rec_betlin.Belob = (belobmun * -1)
      else:
        self.m_rec_betlin.Belob = None
    elif sektion == '0215':
      fortegn = int(rec[58:59] )
      belob = int(rec[59:72] )
      belobmun = float(belob / 100)
      if fortegn == 0:
        self.m_rec_betlin.Belob = float(0)
      elif fortegn == 1:
        self.m_rec_betlin.Belob = belobmun
      else:
        self.m_rec_betlin.Belob = None
    else:
      self.m_rec_betlin.Belob = None

    # --  faknr
    if sektion == '0211':
      self.m_rec_betlin.Faknr = int('0' + rec[69:78].strip())
    elif sektion == '0215':
      self.m_rec_betlin.Faknr = int('0' + rec[72:81].strip())
    else:
      self.m_rec_betlin.Faknr = None

    # --  pbsarkivnr
    if sektion == '0215':
      self.m_rec_betlin.Pbsarkivnr = rec[81:103] 
    else:
      self.m_rec_betlin.Pbsarkivnr = None

    # --  indbetalingsdato
    if rec[103:109]  != '000000':
      self.m_rec_betlin.Indbetalingsdato = datetime.strptime('20' + rec[107:109] + '-' + rec[105:107] + '-' + rec[103:105], "%Y-%m-%d").date()
    else:
      self.m_rec_betlin.Indbetalingsdato = None

    # --  bogforingsdato
    if rec[109:115]  != '000000':
      self.m_rec_betlin.Bogforingsdato = datetime.strptime('20' + rec[113:115] + '-' + rec[111:113]  + '-' + rec[109:111], "%Y-%m-%d").date()
    else:
      self.m_rec_betlin.Bogforingsdato = None

    # --  indbetalingsbelob
    if sektion == '0211':
      fortegn = int(rec[55:56] )
      belob = int(rec[115:128] )
      belobmun = float(belob / 100)
      if fortegn == 0:
        self.m_rec_betlin.Indbetalingsbelob = 0
      elif fortegn == 1:
        self.m_rec_betlin.Indbetalingsbelob = belobmun
      elif fortegn == 2:
        self.m_rec_betlin.Indbetalingsbelob = (belobmun * -1)
      else:
        self.m_rec_betlin.Indbetalingsbelob = None
    elif sektion == '0215':
      fortegn = int(rec[58:59] )
      belob = int(rec[115:128] )
      belobmun = float(belob / 100)
      if fortegn == 0:
        self.m_rec_betlin.Indbetalingsbelob = float(0)
      elif fortegn == 1:
        self.m_rec_betlin.Indbetalingsbelob = belobmun
      else:
        self.m_rec_betlin.Indbetalingsbelob = None
    else:
      self.m_rec_betlin.Indbetalingsbelob = None


    # Find or Create Bet record
    for wrec_bet in self.m_rec_frapbs.listBet:
      if wrec_bet.Pbssektionnr == sektion and wrec_bet.Transkode == transkode and wrec_bet.Bogforingsdato == self.m_rec_betlin.Bogforingsdato:
        self.m_rec_bet = wrec_bet
        break
    else:
      betid  = nextval('Betid') 
      root_bet = db.Key.from_path('rootBet','root')    
      self.m_rec_bet = Bet.get_or_insert('%s' % (betid), parent=root_bet)
      self.m_rec_bet.Id = betid
      self.m_rec_bet.Pbssektionnr = sektion
      self.m_rec_bet.Transkode = transkode
      self.m_rec_bet.Bogforingsdato = self.m_rec_betlin.Bogforingsdato
      
    self.m_rec_bet.Frapbsref = self.m_rec_frapbs.key()
    self.m_rec_bet.put()

    # Add Betlin
    self.m_rec_betlin.Betref = self.m_rec_bet.key()
    self.m_rec_betlin.put()
Ejemplo n.º 10
0
    def krdfaktura_overfoersel_action(self, lobnr):
        rec = ''
        seq = 0
        wleveranceid = None
        wdispositionsdato = None
        whour = None
        wbankdage = None

        # Betalingsoplysninger
        belobint = None

        # Tællere
        antalos5 = 0  # Antal OS5: Antal foranstående OS5 records
        belobos5 = 0  # Beløb: Nettobeløb i OS5 records

        antalsek = 0  # Antal sektioner i leverancen
        antalos5tot = 0  # Antal OS5: Antal foranstående OS5 records
        belobos5tot = 0  # Beløb: Nettobeløb i OS5 records

        nu = datetime.now(cet).replace(tzinfo=None)
        whour = nu.hour
        if whour > 17: wbankdage = 3
        else: wbankdage = 2
        wdispositionsdato = bankdageplus(nu, wbankdage)

        tilpbskey = db.Key.from_path('rootTilpbs', 'root', 'Tilpbs',
                                     '%s' % (lobnr))
        rsttil = Tilpbs.get(tilpbskey)
        if not rsttil:
            raise PbsOverforselError(
                '101 - Der er ingen PBS forsendelse for id: %s' % (lobnr))

        if rsttil.Pbsforsendelseref:
            raise PbsOverforselError(
                '102 - Pbsforsendelse for id: %s er allerede sendt' % (lobnr))

        qry = rsttil.listOverforsel
        if qry.count() == 0:
            raise PbsOverforselError(
                '103 - Der er ingen pbs transaktioner for tilpbsid: %s' %
                (lobnr))

        if not rsttil.Udtrukket:
            rsttil.Udtrukket = datetime.now()
        if not rsttil.Bilagdato:
            rsttil.Bilagdato = date.today()
        if not rsttil.Delsystem:
            rsttil.Delsystem = "OS1"
        if not rsttil.Leverancetype:
            rsttil.Leverancetype = ""

        wleveranceid = nextval("leveranceid")

        qry = Kreditor.all()
        qry.filter("Delsystem =", rsttil.Delsystem)
        krd = qry.fetch(1)[0]

        # -- Leverance Start - OS1
        # - rstkrd.Datalevnr - Dataleverandørnr.: Dataleverandørens SE-nummer
        # - wleveranceid     - Leveranceidentifikation: Løbenummer efter eget valg
        rec += self.writeOS1(krd.Datalevnr, wleveranceid)

        # Start loop over betalinger i tbloverforsel
        for rec_overfoersel in rsttil.listOverforsel:
            if rec_overfoersel.Betalingsdato == None:
                Betalingsdato = wdispositionsdato
            else:
                Betalingsdato = rec_overfoersel.Betalingsdato
            if Betalingsdato < wdispositionsdato:
                Betalingsdato = wdispositionsdato
            rec_overfoersel.Betalingsdato = Betalingsdato  #opdater aktuel betalingsdato

            # Sektion start – (OS2)
            antalos5 = 0
            belobos5 = 0

            # -- OS2
            # - Betalingsdato  - Dispositionsdato
            # - krd.regnr      - Reg.nr.: Overførselsregistreringsnummer
            # - krd.kontonr    - Kontonr.: Overførselskontonummer
            # - krd.datalevnr  - Dataleverandørnr.: Dataleverandørens SE-nummer
            rec += self.writeOS2(Betalingsdato, krd.Regnr, krd.Kontonr,
                                 krd.Datalevnr)

            antalsek += 1

            # -- Forfald betaling
            if rec_overfoersel.Advisbelob > 0:
                belobint = int(rec_overfoersel.Advisbelob * 100)
                belobos5 += belobint
                belobos5tot += belobint
            else:
                belobint = 0

            # -- OS5
            # - debinfo.bankregnr   - Betalingsmodtager registreringsnummer
            # - debinfo.bankkontonr - Betalingsmodtager kontonummer
            # - belobint            - Beløb: Beløb i øre uden fortegn
            # - Betalingsdato       - Dispositionsdato
            # - krd.regnr           - Reg.nr.: Overførselsregistreringsnummer
            # - krd.kontonr         - Kontonr.: Overførselskontonummer
            # - deb.advistekst      - Tekst på Betalingsmodtagers kontoudtog
            # - deb.SFakID          - Ref til betalingsmodtager til eget brug
            rec += self.writeOS5(rec_overfoersel.Bankregnr,
                                 rec_overfoersel.Bankkontonr, belobint,
                                 Betalingsdato, krd.Regnr, krd.Kontonr,
                                 rec_overfoersel.Advistekst,
                                 rec_overfoersel.SFakID)
            antalos5 += 1
            antalos5tot += 1

            # -- Sektion s**t – (OS8)
            # - OS8
            # - antalos5          - Antal 042: Antal foranstående 042 records
            # - belobos5          - Beløb: Nettobeløb i 042 records
            # - Betalingsdato     - Dispositionsdato
            # - krd.regnr         - Reg.nr.: Overførselsregistreringsnummer
            # - krd.kontonr       - Kontonr.: Overførselskontonummer
            # - krd.datalevnr     - Dataleverandørnr.: Dataleverandørens SE-nummer
            rec += self.writeOS8(antalos5, belobos5, Betalingsdato, krd.Regnr,
                                 krd.Kontonr, krd.Datalevnr)

        # -- Leverance s**t - (OS9)

        # --OS9
        # - antalos5tot    - Antal 042: Antal foranstående 042 records
        # - belobos5tot    - Beløb: Nettobeløb i 042 records
        # - krd.datalevnr  - Dataleverandørnr.: Dataleverandørens SE-nummer
        rec += self.writeOS9(antalos5tot, belobos5tot, krd.Datalevnr)

        pbsforsendelseid = nextval('Pbsforsendelseid')
        root_pbsforsendelse = db.Key.from_path('rootPbsforsendelse', 'root')
        rec_pbsforsendelse = Pbsforsendelse.get_or_insert(
            '%s' % (pbsforsendelseid), parent=root_pbsforsendelse)
        rec_pbsforsendelse.Id = pbsforsendelseid
        rec_pbsforsendelse.Delsystem = rsttil.Delsystem
        rec_pbsforsendelse.Leverancetype = rsttil.Leverancetype
        rec_pbsforsendelse.Oprettetaf = 'Udb'
        rec_pbsforsendelse.Oprettet = datetime.now()
        rec_pbsforsendelse.Leveranceid = wleveranceid
        rec_pbsforsendelse.put()

        rsttil.Udtrukket = datetime.now()
        rsttil.Leverancespecifikation = '%s' % (wleveranceid)
        rsttil.Pbsforsendelseref = rec_pbsforsendelse.key()
        rsttil.put()

        pbsfilesid = nextval('Pbsfilesid')
        idlev = nextval('idlev')
        root_pbsfiles = db.Key.from_path('rootPbsfiles', 'root')
        rec_pbsfiles = Pbsfiles.get_or_insert('%s' % (pbsfilesid),
                                              parent=root_pbsfiles)
        rec_pbsfiles.Id = pbsfilesid
        rec_pbsfiles.Idlev = idlev
        rec_pbsfiles.Pbsforsendelseref = rec_pbsforsendelse.key()
        rec_pbsfiles.put()

        root_pbsfile = db.Key.from_path('rootPbsfile', 'root')
        rec_pbsfile = Pbsfile.get_or_insert('%s' % (pbsfilesid),
                                            parent=root_pbsfile)
        rec_pbsfile.Id = pbsfilesid
        rec_pbsfile.Pbsfilesref = rec_pbsfiles.key()
        rec_pbsfile.Data = rec
        rec_pbsfile.put()

        sendqueueid = rec_pbsfile.add_to_sendqueue()
        return sendqueueid