Пример #1
0
class Programas:

   def __init__(self, db, cAppl=None):
       self.db          = db
       self.cAppl       = cAppl or 0
       self.applId      = Aplicacao(self.db, self.cAppl).getApplId()
       self.programas   = self.db.programas
       self.char        = string.digits + string.ascii_uppercase
       self.gravados    = 0
       self.regra       = Regras(self.db).getRegras(1)
       self.entidades   = Entidades(self.db, cAppl=self.cAppl)
       self.primaryKeys = PrimaryKeys(self.db)
       self.bookSaida   = {'I':0, 'A':'0', 'E':0, 'C':1, 'L':1}
       returnCode       = self.maxPrograma()
       if returnCode[0] and returnCode[1]:
           mp           = returnCode[1]
           self.c1      = self.char.index(mp[0])
           self.c2      = self.char.index(mp[1])
       else:
           self.c1      = 0
           self.c2      = -1
       self.checkList   = CheckList(self.db, cAppl=self.cAppl)

   def nomearProgramas(self):
       returnCode = self.entidades.selectEntidadesProgramasBycodigoAplicacao()
       if not returnCode[0]:
           return [0, "Não existem Entidades para esta Aplicação", returnCode[1]]
       for codigoEntidade, listaProgramas in returnCode[1]:
           if listaProgramas[0]:
               bookSaidaI = 0
               if not self.primaryKeys.primaryKeyInformada(codigoEntidade):
                   bookSaidaI = 1
               self.insertProgramas(codigoEntidade
                                   , 1
                                   , self.regra['I'][0]
                                   , self.novoNomePrograma()
                                   , bookSaidaI
                                   )
           if listaProgramas[1]:
               self.insertProgramas(codigoEntidade
                                   , 1
                                   , self.regra['A'][0]
                                   , self.novoNomePrograma()
                                   , self.bookSaida['A']
                                   )
           if listaProgramas[2]:
               self.insertProgramas(codigoEntidade
                                   , 1
                                   , self.regra['E'][0]
                                   , self.novoNomePrograma()
                                   , self.bookSaida['E']
                                   )
           if listaProgramas[3]:
               self.insertProgramas(codigoEntidade
                                   , 1
                                   , self.regra['C'][0]
                                   , self.novoNomePrograma()
                                   , self.bookSaida['C']
                                   )
           if listaProgramas[4]:
               self.insertProgramas(codigoEntidade
                                   , 1
                                   , self.regra['L'][0]
                                   , self.novoNomePrograma()
                                   , self.bookSaida['L']
                                   )

       ckListPGM =  self.checkList.updateCheckListProgramas()
       if not ckListPGM[0]:
           return ckListPGM

       self.db.commit()
       return [1,'Programas Nomeados >>>'                  \
              + '\n' + ' Gravados = ' + str(self.gravados) \
              + '\n']

   def nomearPrograma(self, entidadeId, codigoTipo, regra):
       returnCode     = self.insertProgramas( entidadeId
                                            , codigoTipo
                                            , self.regra[regra][0]
                                            , self.novoNomePrograma()
                                            , self.bookSaida[regra])
       if returnCode[0]:
           self.db.commit()
           return [1, str(self.gravados) + " Programa Nomeado"]
       else:
           return [0, returnCode[1], returnCode[2]]

   def insertProgramas(self, codigoEntidade, codigoTipo, codigoRegra, nomePrograma, bookSaida):
       try:
           self.programas.insert(codigoAplicacao = int(self.cAppl)
                                ,codigoEntidade  = codigoEntidade
                                ,codigoTipo      = codigoTipo
                                ,codigoRegra     = codigoRegra
                                ,nomePrograma    = nomePrograma
                                ,bookSaida       = bookSaida)
           self.gravados += 1
           return [1]
       except:
           return [0,"Ocorreu um erro no Insert da Tabela Programas.", sys.exc_info()[1]]

   def maxPrograma(self):
       try:
           query=self.db(self.programas.codigoAplicacao == int(self.cAppl)).select(self.programas.nomePrograma.max())
       except:
           return [0,"Ocorreu um erro no select da Tabela Programas.", sys.exc_info()[1]]
       if query:
           maxPrograma = query[0]._extra['MAX(programas.nomePrograma)']
       else:
           return [0, 0]
       return [1, maxPrograma]

   def novoNomePrograma(self):
       self.c2 += 1
       if self.c2 > 35:
           self.c1 += 1
           self.c2  = 0
       return self.char[self.c1] + self.char[self.c2]

   def selectProgramasByEntidadeRegra(self, codigoEntidade, regra):
       try:
           query=self.db((self.programas.codigoEntidade == int(codigoEntidade))
                       & (self.programas.codigoRegra    == self.regra[regra][0])).select()
       except:
           return [0,'Ocorreu um erro no Select da Tabela Programas.', sys.exc_info()[1]]
       if not query:
           return [0, 0]
       return [1, query]
Пример #2
0
class Gerserv(object):

    def __init__(self, db, sessionId=None, cAppl=None, userName=None, gerar=True):
        self.gerar = gerar
        self.db = db
        self.cAppl = cAppl or 0
        self.aplicacao = Aplicacao(self.db, self.cAppl)
        self.applId = self.aplicacao.getApplId().upper()
        self.applName = ra(self.aplicacao.getApplName()).upper()
        self.contratante = self.aplicacao.getContratante().upper()
        self.analista = self.aplicacao.getAnalista().upper()
        self.ownerDb2 = self.aplicacao.getOwnerDb2().upper()
        self.grupo = self.aplicacao.getGrupo()
        self.soag = self.aplicacao.getSoag()
        self.delecaoLogica = self.aplicacao.getDelecaoLogica()
        self.colDelLog = self.aplicacao.getColunaDelecaoLogica()
        self.empresa = Empresa(self.db, self.aplicacao.getEmpresaId()).getNome().upper()
        self.entidades = Entidades(self.db)
        self.colunas = Colunas(self.db, self.cAppl)
        if  self.delecaoLogica:
            self.colDelLogName = self.colunas.selectColunasByColumnId(self.colDelLog)[1][0].columnName
        self.colunasEntidades = ColunasEntidades(self.db)
        self.ColunasEntidadesReferenciadas = ColunasEntidadesReferenciadas(self.db)
        self.programas = Programas(self.db)
        self.mensagens = Mensagens(self.db, cAppl=self.cAppl)
        self.primaryKeys = PrimaryKeys(self.db)
        self.foreignKeys = ForeignKeys(self.db)
        self.OrigemColunasAplicacao = OrigemColunasAplicacao(self.db)
        self.regrasColunas = RegrasColunas(self.db)
        self.bookSaiB = False
        self.userName = userName.upper()
        self.sessionId = sessionId or '1'
        self.parametros = self.db.parametros
        self.parms = self.db(self.parametros).select()[0]
        self.log = os.path.join( '\\\\', '127.0.0.1', 'c$', self.parms.log, "gerpro_%s.log" % (self.sessionId))
        arq = open(self.log, 'w')
        arq.close()
        self.gerBook = GerBook(self.db)
        self.gerProg = GerProg(self.db)
        self.compact = Compact(self.db)
        self.validarPK = 0

        self.ret=[]

    def gerserv(self, entidadeId=None):
        entidadeId = entidadeId or 0
        gerados = 0
        retEntidade = self.entidades.selectEntidadesByEntidadeId(entidadeId)
        if  not retEntidade[0]:
            return [0,'Ocorreu um erro na chamada de selectEntidadesByEntidadeId.', entidade[1]]
        entidade = retEntidade[1][0]
        retColunasEntidades = self.colunasEntidades.selectColunasEntidadesResolvidasByCodigoEntidade(entidadeId)
        if  not retColunasEntidades[0]:
            if  retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]
        coo = []
        pgm = []
        coo.append(entidade.coordenadorInclusao)
        pgm.append(entidade.pgmInclusao)
        coo.append(entidade.coordenadorAlteracao)
        pgm.append(entidade.pgmAlteracao)
        coo.append(entidade.coordenadorExclusao)
        pgm.append(entidade.pgmExclusao)
        coo.append(entidade.coordenadorConsulta)
        pgm.append(entidade.pgmConsulta)
        coo.append(entidade.coordenadorLista)
        pgm.append(entidade.pgmLista)
        typePgm = 'IAECL'
        persistencia = 'IUDSS'
        servico = ('INCLUSAO', 'ALTERACAO', 'EXCLUSAO', 'CONSULTA', 'CONSULTALISTA')
        messageErro = [0, 0, 0, 1, 1]
        path = os.path.join( '\\\\', '127.0.0.1', 'c$', self.parms.raiz, self.empresa, self.applId)
        for i in xrange(5):
            if  not pgm[i]:
                continue
            retPrograma = self.programas.selectProgramasByEntidadeRegra(entidadeId, typePgm[i])
            if  not retPrograma[0]:
                return [0,'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.', retPrograma[1]]
            programa = retPrograma[1][0]
            self.bookSaiB = programa.bookSaida
            if  self.bookSaiB:
                bookSaida = 'S'
            else:
                bookSaida = ''
            properties = {}
            properties['ANALISTA']=self.analista
            properties['OWNERDB2']=self.ownerDb2
            properties['APPLID']=self.applId
            properties['APPLNAME']=self.applName
            properties['BOOKS']='E ' + bookSaida
            properties['CONTRATANTE']=self.contratante
            properties['COORDENADOR']= True if coo[i] else False
            properties['DCLGEN']=entidade.nomeExterno
            properties['EMPRESA']=self.empresa
            properties['ENTIDADE']=entidade.nomeAmigavel.upper()
            properties['GRUPO']=self.grupo
            properties['SERVICO']=servico[i]
            properties['SIGLAPGM']=programa.nomePrograma
            properties['TABLENAME']=entidade.nomeFisico
            properties['TYPEPGM']=typePgm[i]
            properties['PERSISTENCIA']=persistencia[i]
            properties['USERNAME']=self.userName
            properties['LOG']=self.log
            retMessage = self.montaMensagem(entidadeId, 'E', 'S', typePgm[i])
            if  not retMessage[0]:
                return retMessage
            properties['MSGSUCESSO']=retMessage[1]
            if  i == 0:
                self.validarPK = 0
                if  self.primaryKeys.primaryKeyInformada(entidadeId):
                    messageErro[0] = 1
                    self.validarPK = 1
            if  messageErro[i]:
                retMessage = self.montaMensagem(entidadeId, 'E', 'E', typePgm[i])
                if  not retMessage[0]:
                    return retMessage
                properties['MSGERRO']=retMessage[1]
                properties['LOG']=self.log
            else:
                properties['MSGERRO']=''

            gerados += 1

            retGerarColunas = self.gerarColunas(colunasEntidade
                                               ,entidadeId
                                               ,typePgm[i])
            if  not retGerarColunas[0]:
                return [0, 'Ocorreu algum erro >>> ' + retGerarColunas[1] + ' <<< na geracao das colunas']

            if  self.gerar:
                self.gerBook.gerBook(properties, retGerarColunas[1])
                self.gerProg.gerProg(properties, retGerarColunas[1])
            else:
                self.ret.append([properties , retGerarColunas[1]])

        if  self.gerar:
            cpy = os.path.join( path, 'GERADOS', 'CPY')
            pgm = os.path.join( path, 'GERADOS', 'PGM')
            self.compact.compact(entidade.nomeExterno, [cpy, pgm])
            print 'Servicos Gerados = ' + str(gerados)
            return [1, 'Servicos Gerados = ' + str(gerados)]
        else:
            return [1, self.ret]


    def gerarColunas(self, colunasEntidade, entidadeId, typePgm):
        retColunasEntidades = self.colunasEntidades.selectColunasEntidadesResolvidasByCodigoEntidade(entidadeId)
        if  not retColunasEntidades[0]:
            if  retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]

        dicPrimaryKeys = self.primaryKeys.selectPrimaryKeysByCodigoEntidade(entidadeId)
        dicForeignKeys = self.foreignKeys.selectForeignKeysByCodigoEntidade(entidadeId)

        lisBookE = []
        lisBookI = []
        lisBookS = []
        lisBookR = []
        lisCol = []
        dicCol = {}
        auxBookI = []
        dicRegras = {}
        pks = []
        dicModulos = {}

        if  typePgm == 'L':
            col = self.colunas.selectColunasResolvidasByColumnName('NREG_QTDE')[1][0]
            self.EntityColumns(col, lisCol, dicCol)
            self.bookSaida(col, lisBookS)

        for col in colunasEntidade:

#>>>>>>> Regras de Dominio
            retRegras = self.regrasColunas.selectRegrasColunasByColumnId(col.colunas.id)
            if  not retRegras[0] and retRegras[1]:
                return [0,'Ocorreu um erro na chamada de selectRegrasColunasByColumnId.', retRegras[2]]
            regras = retRegras[1]

            self.rowsPrimaryKeys(col, dicPrimaryKeys, pks)
            self.EntityColumns(col, lisCol, dicCol)

#>>>>>>>>> Inclusao
            if  typePgm == 'I':
           #>>>>>> Book de Entrada

                if  col.colunasEntidades.inclusaoEntrada:

                 # Verifica se a coluna tem Origem
                    retOrigemColuna = self.origemColuna(col, dicRegras, auxBookI, dicPrimaryKeys, typePgm)
                    if  not retOrigemColuna[0]:
                        return retOrigemColuna

                 # Coluna tem Origem do FrameWork
                    if  retOrigemColuna[1] == 2 :
                        retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                        if  not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                 # Coluna nao tem Origem ou eh Primary Key Informada
                    if  not retOrigemColuna[1]                                 \
                     or self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):

                        self.bookEntrada(col, lisBookE)
                        self.bookInterface(col, lisBookI)

                      #>> Regra Preenchimento
                        retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                        if  not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                      #>> Regra Data
                        self.regraData(col, dicRegras)

                      #>> Regra Time
                        self.regraTime(col, dicRegras)

                      #>> Regra Timestamp
                        self.regraTimestamp(col, dicRegras)

                      #>> Regras de Dominio
                        retRegrasDominio = self.regrasDominio(col, regras, dicRegras)
                        if  not retRegrasDominio[0]:
                            return retRegrasDominio

                      #>> Regra Nao Existencia na própria entidade
                        regraEx = 'NX'
                        retExisteEntidade = self.existeEntidade(entidadeId, col, dicPrimaryKeys, regraEx, typePgm, dicRegras)
                        if  not retExisteEntidade[0]:
                            return retExisteEntidade

                      #>> Regra Existencia nas Entidades Relacionadas
                        retEntidadeRelacionada = self.entidadeRelacionada(col, dicForeignKeys, dicRegras, typePgm)
                        if  not retEntidadeRelacionada[0]:
                            return retEntidadeRelacionada


           #>>>>>> Book de Saida
                if  col.colunasEntidades.inclusaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>> Alteracao
            elif  typePgm == 'A':
           #>>>>>> Book de Entrada
                if  col.colunasEntidades.alteracaoEntrada:

                 # Verifica se a coluna tem Origem
                    retOrigemColuna = self.origemColuna(col, dicRegras, auxBookI, dicPrimaryKeys, typePgm)
                    if  not retOrigemColuna[0]:
                        return retOrigemColuna

                 # Coluna tem Origem do FrameWork
                    if  retOrigemColuna[1] == 2:
                        retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                        if  not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                 # Coluna não tem Origem ou eh Primary Key Informada
                    if  not retOrigemColuna[1]                            \
                     or self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):

                        self.bookEntrada(col, lisBookE)
                        self.bookInterface(col, lisBookI)

                      #>> Regra Preenchimento
                        retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                        if  not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                      #>> Regra Data
                        self.regraData(col, dicRegras)

                      #>> Regra Time
                        self.regraTime(col, dicRegras)

                      #>> Regra Timestamp
                        self.regraTimestamp(col, dicRegras)

                      #>> Regras de Dominio
                        retRegrasDominio = self.regrasDominio(col, regras, dicRegras)
                        if  not retRegrasDominio[0]:
                            return retRegrasDominio

                      #>> Regra Existencia na própria entidade
                        regraEx = 'EX'
                        retExisteEntidade = self.existeEntidade(entidadeId, col, dicPrimaryKeys, regraEx
                                                               , typePgm, dicRegras)
                        if  not retExisteEntidade[0]:
                            return retExisteEntidade


                      #>> Regra Existencia nas Entidades Relacionadas
                        retEntidadeRelacionada = self.entidadeRelacionada(col, dicForeignKeys, dicRegras, typePgm)
                        if  not retEntidadeRelacionada[0]:
                            return retEntidadeRelacionada

           #>>>>>> Book de Saida
                if  col.colunasEntidades.alteracaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>>>>>>> Exclusao
            elif  typePgm == 'E':
           #>>>>>> Book de Entrada
                if  col.colunasEntidades.exclusaoEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

               #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                    if  not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

               #>> Regra Data
                    self.regraData(col, dicRegras)

               #>> Regra Time
                    self.regraTime(col, dicRegras)

               #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

               #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(col, regras, dicRegras)
                    if  not retRegrasDominio[0]:
                        return retRegrasDominio

               #>> Regra Existencia na própria entidade
                    regraEx = 'EX'
                    retExisteEntidade = self.existeEntidade(entidadeId, col, dicPrimaryKeys, regraEx, typePgm, dicRegras)
                    if  not retExisteEntidade[0]:
                        return retExisteEntidade


           #>>>>>> Book de Saida
                if  col.colunasEntidades.exclusaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>>>>>>> Consulta
            elif  typePgm == 'C':
           #>>>>>> Book de Entrada
                if  col.colunasEntidades.consultaEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

               #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                    if  not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

               #>> Regra Data
                    self.regraData(col, dicRegras)

               #>> Regra Time
                    self.regraTime(col, dicRegras)

               #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

               #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(col, regras, dicRegras)
                    if  not retRegrasDominio[0]:
                        return retRegrasDominio


           #>>>>>> Book de Saida
                if  col.colunasEntidades.consultaSaida:
                    self.bookSaida(col, lisBookS)

              #>> Regra Existencia nas Entidades Relacionadas
                retEntidadeRelacionada = self.entidadeRelacionada(col, dicForeignKeys, dicRegras, typePgm)
                if  not retEntidadeRelacionada[0]:
                    return retEntidadeRelacionada

#>>>>>>>>>>>>>> Lista
            else:
           #>>>>>> Book de Entrada
                if  col.colunasEntidades.listaEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

               #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(col, dicRegras)
                    if  not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

               #>> Regra Data
                    self.regraData(col, dicRegras)

               #>> Regra Time
                    self.regraTime(col, dicRegras)

               #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

               #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(col, regras, dicRegras)
                    if  not retRegrasDominio[0]:
                        return retRegrasDominio


           #>>>>>> Book de Saida
                if  col.colunasEntidades.listaSaida:
                    self.bookSaida(col, lisBookS)

              #>> Regra Existencia nas Entidades Relacionadas
                retEntidadeRelacionada = self.entidadeRelacionada(col, dicForeignKeys, dicRegras, typePgm)
                if  not retEntidadeRelacionada[0]:
                    return retEntidadeRelacionada

        retColunasEntidades = self.ColunasEntidadesReferenciadas.selectColunasEntidadesReferenciadasByCodigoEntidade(entidadeId)
        if  not retColunasEntidades[0]:
            if  retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]

        for col in colunasEntidade:
#>>>>>>>>>>>>>> Consulta
            if  typePgm == 'C':
           #>>>>>> Book de Saida
                if  col.colunasEntidadesReferenciadas.consultaSaida:
                    self.bookRefer(col, lisBookR)
                    self.EntityColumns(col, lisCol, dicCol)

                  #>> Regra Coluna Existente em Entidades relacionadas
                    retColunaEntidadeRelacionada = self.colunaEntidadeRelacionada(col, dicModulos)
                    if  not retColunaEntidadeRelacionada[0]:
                        return retColunaEntidadeRelacionada

#>>>>>>>>>>>>>> Lista
            elif  typePgm == 'L':
           #>>>>>> Book de Saida
                if  col.colunasEntidadesReferenciadas.listaSaida:
                    self.bookRefer(col, lisBookR)
                    self.EntityColumns(col, lisCol, dicCol)

                  #>> Regra Coluna Existente em Entidades relacionadas
                    retColunaEntidadeRelacionada = self.colunaEntidadeRelacionada(col, dicModulos)
                    if  not retColunaEntidadeRelacionada[0]:
                        return retColunaEntidadeRelacionada

        for column in auxBookI:
            lisBookI.append(column)
        return [1, [lisBookE, lisBookI, lisBookS, lisBookR, lisCol, dicCol, dicRegras, pks, dicModulos]]

    def EntityColumns(self, col, lisCol, dicCol):
        lisCol.append(col.colunas.columnName)
        dicCol[col.colunas.columnName]=col

    def bookEntrada(self, col, lisBookE):
        lisBookE.append(col.colunas.columnName)

    def bookInterface(self, col, lisBookI):
        lisBookI.append(col.colunas.columnName)

    def bookSaida(self, col, lisBookS):
        lisBookS.append(col.colunas.columnName)

    def bookRefer(self, col, lisBookR):
        lisBookR.append(col.colunas.columnName)

    def origemColuna(self, col, dicRegras, auxBookI, dicPrimaryKeys, typePgm):
        retOrigemColuna = self.OrigemColunasAplicacao.selectOrigemColunasAplicacaoByCodigoColuna(col.colunas.id)
        if  not retOrigemColuna[0]:
            return [0,'Ocorreu um erro na chamada de selectorigemColunasAplicacaoByCodigoColuna.' + str(retOrigemColuna[2])]
        if  not retOrigemColuna[1]:
            return [1, 0]
        if  self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):
            return [1, 0]
        origemColuna = retOrigemColuna[1][0]
        dic = {'origem':origemColuna.origemColunasApoio.origem,
               'fonte':origemColuna.origemColunasApoio.fonte}
        if  col.colunas.columnName in dicRegras:
            oldDic = dicRegras[col.colunas.columnName]
            oldDic['OR']=dic
            dicRegras[col.colunas.columnName]=oldDic
        else:
            dicRegras[col.colunas.columnName]={'OR':dic}

        if  origemColuna.origemColunasApoio.fonte == 'S':
            return [1, 1]
      # Origem do FrameWork
        auxBookI.append(col.colunas.columnName)
        return [1, 2]

    def regraPreenchimento(self, col, dicRegras):
        if  col.colunasEntidades.ehNotNull:
            retMessage = self.montaMensagem(col.colunas.id, 'C', 'E', 'PR', nova=1)
            if  not retMessage[0]:
                return retMessage
            dic = {'message':retMessage[1]}
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['PR']=dic
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={'PR':dic}
        return [1]

    def regraData(self, col, dicRegras):
        if  col.datatypes.descricao == 'DATE':
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['DT']=''
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={'DT':''}

    def regraTime(self, col, dicRegras):
        if  col.datatypes.descricao == 'TIME':
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['TM']=''
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={'TM':''}

    def regraTimestamp(self, col, dicRegras):
        if  col.datatypes.descricao == 'TIMESTAMP':
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['TS']=''
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={'TS':''}

    def regrasDominio(self, col, regras, dicRegras):
        for r in regras:
            retMessage = self.montaMensagem(col.colunas.id, 'C', 'E', r.regras.regra, nova=1)
            if  not retMessage[0]:
                return retMessage
            dic = {'regra':r
                  ,'message':retMessage[1]}
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic[r.regras.regra]=dic
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={r.regras.regra:dic}
        return [1]

    def ehPrimaryKeyInformada(self, col, dicPrimaryKeys, typePgm):
        if  col.colunas.id in dicPrimaryKeys:
            if  (typePgm == 'I' and dicPrimaryKeys[col.colunas.id] != 3) \
            or (typePgm != 'I'):
                return 1
        return 0

    def existeEntidade(self, entidadeId, col, dicPrimaryKeys, regraEx, typePgm, dicRegras):
        if  col.colunas.id in dicPrimaryKeys:
            if  ((typePgm == 'I' and self.validarPK)
             or (typePgm != 'I')):
                retPrograma = self.programas.selectProgramasByEntidadeRegra(entidadeId, 'C')
                if  not retPrograma[0]:
                    return [0,'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.' + str(retPrograma[2])]
                pgmConsulta = retPrograma[1][0]
                if  self.soag:
                    modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
                    interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
                    controle = self.applId + 'W00C'
                else:
                    modulo = pgmConsulta.nomePrograma
                    interface = pgmConsulta.bookInterface
                    controle = pgmConsulta.bookControle
                dic = {'modulo':modulo
                      ,'interface':interface
                      ,'controle':controle
                      ,'coluna':col.colunas.columnName}
                if  col.colunas.columnName in dicRegras:
                    oldDic = dicRegras[col.colunas.columnName]
                    oldDic[regraEx]=dic
                    dicRegras[col.colunas.columnName]=oldDic
                else:
                    dicRegras[col.colunas.columnName]={regraEx:dic}
        return [1]

    def rowsPrimaryKeys(self, col, dicPrimaryKeys, pks):
        if  col.colunas.id in dicPrimaryKeys:
            pks.append((col.colunas.columnName, str(dicPrimaryKeys[col.colunas.id])))

    def entidadeRelacionada(self, col, dicForeignKeys, dicRegras, typePgm):
        if  col.colunas.id in dicForeignKeys:
            entidadeIdRef = dicForeignKeys[col.colunas.id][0]
            retPrograma = self.programas.selectProgramasByEntidadeRegra(entidadeIdRef, 'C')
            if  not retPrograma[0]:
                if  retPrograma[1]:
                    return [0,'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.' + str(retPrograma[2])]
                else:
                    return [1]
            pgmConsulta = retPrograma[1][0]
            if  pgmConsulta.codigoAplicacao == self.cAppl:
                soag = self.soag
            else:
                soag = Aplicacao(self.db, pgmConsulta.codigoAplicacao).getSoag()
            if  soag:
                modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
                interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
                controle = self.applId + 'W00C'
            else:
                modulo = pgmConsulta.nomePrograma
                interface = pgmConsulta.bookInterface
                controle = pgmConsulta.bookControle
            if  dicForeignKeys[col.colunas.id][1] == col.colunas.id:
                coluna = col.colunas.columnName
            else:
                retColRef = self.colunas.selectColunasByColumnId(dicForeignKeys[col.colunas.id][1])
                if  not retColRef:
                    return [0,'Ocorreu um erro na chamada de selectColunasByColumnId.' + str(retColRef[2])]
                coluna = retColRef[1][0].columnName
            if  typePgm == 'C':
                if  col.colunasEntidades.consultaSaida:
                    esif = 'S'
                else:
                    esif = 'E'
            elif  typePgm == 'L':
                if  col.colunasEntidades.listaSaida:
                    esif = 'S'
                else:
                    esif = 'E'
            else:
                  esif = ''

            dic = {'modulo':modulo
                  ,'interface':interface
                  ,'controle':controle
                  ,'coluna':coluna}
#                  ,'esif':esif}
            if  col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['EX']=dic
                dicRegras[col.colunas.columnName]=oldDic
            else:
                dicRegras[col.colunas.columnName]={'EX':dic}

#>>>>>>> regra Registro Ativo
#            if  self.delecaoLogica:
#                retColunaDelecaoLogica = self.colunasEntidades.selectColunasEntidadesByCodigoEntidadeCodigoColuna \
#                                         (entidadeIdRef, self.colDelLog)
#                if  not retColunaDelecaoLogica[0]:
#                    return [0,'Ocorreu um erro na chamada de selectColunasEntidadesByCodigoEntidadeCodigoColuna.' \
#                             + str(retColunaDelecaoLogica[2])]
#                if  (retColunaDelecaoLogica[1]
#                and dicForeignKeys[col.colunas.id][2]):
#                    retMessage = self.montaMensagem(entidadeIdRef, 'E', 'E', 'AT', nova=1)
#                    if  not retMessage[0]:
#                        return retMessage
#                    dic = {'modulo':modulo
#                          ,'colDelLogName':self.colDelLogName
#                          ,'message':retMessage[1]}
#                    if  col.colunas.columnName in dicRegras:
#                        oldDic = dicRegras[col.colunas.columnName]
#                        oldDic['AT']=dic
#                        dicRegras[col.colunas.columnName]=oldDic
#                    else:
#                        dicRegras[col.colunas.columnName]={'AT':dic}
        return [1]

    def colunaEntidadeRelacionada(self, col, dicModulos):
        entidadeIdRef = col.colunasEntidadesReferenciadas.entidadeReferenciada
        retPrograma = self.programas.selectProgramasByEntidadeRegra(entidadeIdRef, 'C')
        if  not retPrograma[0]:
            if  retPrograma[1]:
                return [0,'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.' + str(retPrograma[2])]
            else:
                return [1]
        pgmConsulta = retPrograma[1][0]
        if  pgmConsulta.codigoAplicacao == self.cAppl:
            soag = self.soag
        else:
            soag = Aplicacao(self.db, pgmConsulta.codigoAplicacao).getSoag()
        if  soag:
            modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
            interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
            controle = self.applId + 'W00C'
        else:
            modulo = pgmConsulta.nomePrograma
            interface = pgmConsulta.bookInterface
            controle = pgmConsulta.bookControle

        dic = {'modulo':modulo
              ,'interface':interface
              ,'controle':controle}

        dicModulos[col.colunas.columnName]=dic
        return [1]

    def montaMensagem(self, codigoEntCol, origemMsg, tipoMsg, regra, nova=None):
        retMessage = self.mensagens.getMensagem(codigoEntCol, origemMsg, tipoMsg, regra, nova)
        if  not retMessage[0]:
            return [0, 'Ocorreu um erro na chamada de getMensagem.'  + str(retMessage[2])]
        return [1, '{}{:04}'.format(self.applId, retMessage[1])]
Пример #3
0
class Programas:
    def __init__(self, db, cAppl=None):
        self.db = db
        self.cAppl = cAppl or 0
        self.applId = Aplicacao(self.db, self.cAppl).getApplId()
        self.programas = self.db.programas
        self.char = string.digits + string.ascii_uppercase
        self.gravados = 0
        self.regra = Regras(self.db).getRegras(1)
        self.entidades = Entidades(self.db, cAppl=self.cAppl)
        self.primaryKeys = PrimaryKeys(self.db)
        self.bookSaida = {'I': 0, 'A': '0', 'E': 0, 'C': 1, 'L': 1}
        returnCode = self.maxPrograma()
        if returnCode[0] and returnCode[1]:
            mp = returnCode[1]
            self.c1 = self.char.index(mp[0])
            self.c2 = self.char.index(mp[1])
        else:
            self.c1 = 0
            self.c2 = -1
        self.checkList = CheckList(self.db, cAppl=self.cAppl)

    def nomearProgramas(self):
        returnCode = self.entidades.selectEntidadesProgramasBycodigoAplicacao()
        if not returnCode[0]:
            return [
                0, "Não existem Entidades para esta Aplicação", returnCode[1]
            ]
        for codigoEntidade, listaProgramas in returnCode[1]:
            if listaProgramas[0]:
                bookSaidaI = 0
                if not self.primaryKeys.primaryKeyInformada(codigoEntidade):
                    bookSaidaI = 1
                self.insertProgramas(codigoEntidade, 1, self.regra['I'][0],
                                     self.novoNomePrograma(), bookSaidaI)
            if listaProgramas[1]:
                self.insertProgramas(codigoEntidade, 1, self.regra['A'][0],
                                     self.novoNomePrograma(),
                                     self.bookSaida['A'])
            if listaProgramas[2]:
                self.insertProgramas(codigoEntidade, 1, self.regra['E'][0],
                                     self.novoNomePrograma(),
                                     self.bookSaida['E'])
            if listaProgramas[3]:
                self.insertProgramas(codigoEntidade, 1, self.regra['C'][0],
                                     self.novoNomePrograma(),
                                     self.bookSaida['C'])
            if listaProgramas[4]:
                self.insertProgramas(codigoEntidade, 1, self.regra['L'][0],
                                     self.novoNomePrograma(),
                                     self.bookSaida['L'])

        ckListPGM = self.checkList.updateCheckListProgramas()
        if not ckListPGM[0]:
            return ckListPGM

        self.db.commit()
        return [1,'Programas Nomeados >>>'                  \
               + '\n' + ' Gravados = ' + str(self.gravados) \
               + '\n']

    def nomearPrograma(self, entidadeId, codigoTipo, regra):
        returnCode = self.insertProgramas(entidadeId, codigoTipo,
                                          self.regra[regra][0],
                                          self.novoNomePrograma(),
                                          self.bookSaida[regra])
        if returnCode[0]:
            self.db.commit()
            return [1, str(self.gravados) + " Programa Nomeado"]
        else:
            return [0, returnCode[1], returnCode[2]]

    def insertProgramas(self, codigoEntidade, codigoTipo, codigoRegra,
                        nomePrograma, bookSaida):
        try:
            self.programas.insert(codigoAplicacao=int(self.cAppl),
                                  codigoEntidade=codigoEntidade,
                                  codigoTipo=codigoTipo,
                                  codigoRegra=codigoRegra,
                                  nomePrograma=nomePrograma,
                                  bookSaida=bookSaida)
            self.gravados += 1
            return [1]
        except:
            return [
                0, "Ocorreu um erro no Insert da Tabela Programas.",
                sys.exc_info()[1]
            ]

    def maxPrograma(self):
        try:
            query = self.db(
                self.programas.codigoAplicacao == int(self.cAppl)).select(
                    self.programas.nomePrograma.max())
        except:
            return [
                0, "Ocorreu um erro no select da Tabela Programas.",
                sys.exc_info()[1]
            ]
        if query:
            maxPrograma = query[0]._extra['MAX(programas.nomePrograma)']
        else:
            return [0, 0]
        return [1, maxPrograma]

    def novoNomePrograma(self):
        self.c2 += 1
        if self.c2 > 35:
            self.c1 += 1
            self.c2 = 0
        return self.char[self.c1] + self.char[self.c2]

    def selectProgramasByEntidadeRegra(self, codigoEntidade, regra):
        try:
            query = self.db(
                (self.programas.codigoEntidade == int(codigoEntidade))
                &
                (self.programas.codigoRegra == self.regra[regra][0])).select()
        except:
            return [
                0, 'Ocorreu um erro no Select da Tabela Programas.',
                sys.exc_info()[1]
            ]
        if not query:
            return [0, 0]
        return [1, query]
Пример #4
0
class Gerserv(object):
    def __init__(self,
                 db,
                 sessionId=None,
                 cAppl=None,
                 userName=None,
                 gerar=True):
        self.gerar = gerar
        self.db = db
        self.cAppl = cAppl or 0
        self.aplicacao = Aplicacao(self.db, self.cAppl)
        self.applId = self.aplicacao.getApplId().upper()
        self.applName = ra(self.aplicacao.getApplName()).upper()
        self.contratante = self.aplicacao.getContratante().upper()
        self.analista = self.aplicacao.getAnalista().upper()
        self.ownerDb2 = self.aplicacao.getOwnerDb2().upper()
        self.grupo = self.aplicacao.getGrupo()
        self.soag = self.aplicacao.getSoag()
        self.delecaoLogica = self.aplicacao.getDelecaoLogica()
        self.colDelLog = self.aplicacao.getColunaDelecaoLogica()
        self.empresa = Empresa(
            self.db, self.aplicacao.getEmpresaId()).getNome().upper()
        self.entidades = Entidades(self.db)
        self.colunas = Colunas(self.db, self.cAppl)
        if self.delecaoLogica:
            self.colDelLogName = self.colunas.selectColunasByColumnId(
                self.colDelLog)[1][0].columnName
        self.colunasEntidades = ColunasEntidades(self.db)
        self.ColunasEntidadesReferenciadas = ColunasEntidadesReferenciadas(
            self.db)
        self.programas = Programas(self.db)
        self.mensagens = Mensagens(self.db, cAppl=self.cAppl)
        self.primaryKeys = PrimaryKeys(self.db)
        self.foreignKeys = ForeignKeys(self.db)
        self.OrigemColunasAplicacao = OrigemColunasAplicacao(self.db)
        self.regrasColunas = RegrasColunas(self.db)
        self.bookSaiB = False
        self.userName = userName.upper()
        self.sessionId = sessionId or '1'
        self.parametros = self.db.parametros
        self.parms = self.db(self.parametros).select()[0]
        self.log = os.path.join('\\\\', '127.0.0.1', 'c$', self.parms.log,
                                "gerpro_%s.log" % (self.sessionId))
        arq = open(self.log, 'w')
        arq.close()
        self.gerBook = GerBook(self.db)
        self.gerProg = GerProg(self.db)
        self.compact = Compact(self.db)
        self.validarPK = 0

        self.ret = []

    def gerserv(self, entidadeId=None):
        entidadeId = entidadeId or 0
        gerados = 0
        retEntidade = self.entidades.selectEntidadesByEntidadeId(entidadeId)
        if not retEntidade[0]:
            return [
                0,
                'Ocorreu um erro na chamada de selectEntidadesByEntidadeId.',
                entidade[1]
            ]
        entidade = retEntidade[1][0]
        retColunasEntidades = self.colunasEntidades.selectColunasEntidadesResolvidasByCodigoEntidade(
            entidadeId)
        if not retColunasEntidades[0]:
            if retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]
        coo = []
        pgm = []
        coo.append(entidade.coordenadorInclusao)
        pgm.append(entidade.pgmInclusao)
        coo.append(entidade.coordenadorAlteracao)
        pgm.append(entidade.pgmAlteracao)
        coo.append(entidade.coordenadorExclusao)
        pgm.append(entidade.pgmExclusao)
        coo.append(entidade.coordenadorConsulta)
        pgm.append(entidade.pgmConsulta)
        coo.append(entidade.coordenadorLista)
        pgm.append(entidade.pgmLista)
        typePgm = 'IAECL'
        persistencia = 'IUDSS'
        servico = ('INCLUSAO', 'ALTERACAO', 'EXCLUSAO', 'CONSULTA',
                   'CONSULTALISTA')
        messageErro = [0, 0, 0, 1, 1]
        path = os.path.join('\\\\', '127.0.0.1', 'c$', self.parms.raiz,
                            self.empresa, self.applId)
        for i in xrange(5):
            if not pgm[i]:
                continue
            retPrograma = self.programas.selectProgramasByEntidadeRegra(
                entidadeId, typePgm[i])
            if not retPrograma[0]:
                return [
                    0,
                    'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.',
                    retPrograma[1]
                ]
            programa = retPrograma[1][0]
            self.bookSaiB = programa.bookSaida
            if self.bookSaiB:
                bookSaida = 'S'
            else:
                bookSaida = ''
            properties = {}
            properties['ANALISTA'] = self.analista
            properties['OWNERDB2'] = self.ownerDb2
            properties['APPLID'] = self.applId
            properties['APPLNAME'] = self.applName
            properties['BOOKS'] = 'E ' + bookSaida
            properties['CONTRATANTE'] = self.contratante
            properties['COORDENADOR'] = True if coo[i] else False
            properties['DCLGEN'] = entidade.nomeExterno
            properties['EMPRESA'] = self.empresa
            properties['ENTIDADE'] = entidade.nomeAmigavel.upper()
            properties['GRUPO'] = self.grupo
            properties['SERVICO'] = servico[i]
            properties['SIGLAPGM'] = programa.nomePrograma
            properties['TABLENAME'] = entidade.nomeFisico
            properties['TYPEPGM'] = typePgm[i]
            properties['PERSISTENCIA'] = persistencia[i]
            properties['USERNAME'] = self.userName
            properties['LOG'] = self.log
            retMessage = self.montaMensagem(entidadeId, 'E', 'S', typePgm[i])
            if not retMessage[0]:
                return retMessage
            properties['MSGSUCESSO'] = retMessage[1]
            if i == 0:
                self.validarPK = 0
                if self.primaryKeys.primaryKeyInformada(entidadeId):
                    messageErro[0] = 1
                    self.validarPK = 1
            if messageErro[i]:
                retMessage = self.montaMensagem(entidadeId, 'E', 'E',
                                                typePgm[i])
                if not retMessage[0]:
                    return retMessage
                properties['MSGERRO'] = retMessage[1]
                properties['LOG'] = self.log
            else:
                properties['MSGERRO'] = ''

            gerados += 1

            retGerarColunas = self.gerarColunas(colunasEntidade, entidadeId,
                                                typePgm[i])
            if not retGerarColunas[0]:
                return [
                    0, 'Ocorreu algum erro >>> ' + retGerarColunas[1] +
                    ' <<< na geracao das colunas'
                ]

            if self.gerar:
                self.gerBook.gerBook(properties, retGerarColunas[1])
                self.gerProg.gerProg(properties, retGerarColunas[1])
            else:
                self.ret.append([properties, retGerarColunas[1]])

        if self.gerar:
            cpy = os.path.join(path, 'GERADOS', 'CPY')
            pgm = os.path.join(path, 'GERADOS', 'PGM')
            self.compact.compact(entidade.nomeExterno, [cpy, pgm])
            print 'Servicos Gerados = ' + str(gerados)
            return [1, 'Servicos Gerados = ' + str(gerados)]
        else:
            return [1, self.ret]

    def gerarColunas(self, colunasEntidade, entidadeId, typePgm):
        retColunasEntidades = self.colunasEntidades.selectColunasEntidadesResolvidasByCodigoEntidade(
            entidadeId)
        if not retColunasEntidades[0]:
            if retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]

        dicPrimaryKeys = self.primaryKeys.selectPrimaryKeysByCodigoEntidade(
            entidadeId)
        dicForeignKeys = self.foreignKeys.selectForeignKeysByCodigoEntidade(
            entidadeId)

        lisBookE = []
        lisBookI = []
        lisBookS = []
        lisBookR = []
        lisCol = []
        dicCol = {}
        auxBookI = []
        dicRegras = {}
        pks = []
        dicModulos = {}

        if typePgm == 'L':
            col = self.colunas.selectColunasResolvidasByColumnName(
                'NREG_QTDE')[1][0]
            self.EntityColumns(col, lisCol, dicCol)
            self.bookSaida(col, lisBookS)

        for col in colunasEntidade:

            #>>>>>>> Regras de Dominio
            retRegras = self.regrasColunas.selectRegrasColunasByColumnId(
                col.colunas.id)
            if not retRegras[0] and retRegras[1]:
                return [
                    0,
                    'Ocorreu um erro na chamada de selectRegrasColunasByColumnId.',
                    retRegras[2]
                ]
            regras = retRegras[1]

            self.rowsPrimaryKeys(col, dicPrimaryKeys, pks)
            self.EntityColumns(col, lisCol, dicCol)

            #>>>>>>>>> Inclusao
            if typePgm == 'I':
                #>>>>>> Book de Entrada

                if col.colunasEntidades.inclusaoEntrada:

                    # Verifica se a coluna tem Origem
                    retOrigemColuna = self.origemColuna(
                        col, dicRegras, auxBookI, dicPrimaryKeys, typePgm)
                    if not retOrigemColuna[0]:
                        return retOrigemColuna

                # Coluna tem Origem do FrameWork
                    if retOrigemColuna[1] == 2:
                        retRegraPreenchimento = self.regraPreenchimento(
                            col, dicRegras)
                        if not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                # Coluna nao tem Origem ou eh Primary Key Informada
                    if  not retOrigemColuna[1]                                 \
                     or self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):

                        self.bookEntrada(col, lisBookE)
                        self.bookInterface(col, lisBookI)

                        #>> Regra Preenchimento
                        retRegraPreenchimento = self.regraPreenchimento(
                            col, dicRegras)
                        if not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                    #>> Regra Data
                        self.regraData(col, dicRegras)

                        #>> Regra Time
                        self.regraTime(col, dicRegras)

                        #>> Regra Timestamp
                        self.regraTimestamp(col, dicRegras)

                        #>> Regras de Dominio
                        retRegrasDominio = self.regrasDominio(
                            col, regras, dicRegras)
                        if not retRegrasDominio[0]:
                            return retRegrasDominio

                    #>> Regra Nao Existencia na própria entidade
                        regraEx = 'NX'
                        retExisteEntidade = self.existeEntidade(
                            entidadeId, col, dicPrimaryKeys, regraEx, typePgm,
                            dicRegras)
                        if not retExisteEntidade[0]:
                            return retExisteEntidade

                    #>> Regra Existencia nas Entidades Relacionadas
                        retEntidadeRelacionada = self.entidadeRelacionada(
                            col, dicForeignKeys, dicRegras, typePgm)
                        if not retEntidadeRelacionada[0]:
                            return retEntidadeRelacionada

        #>>>>>> Book de Saida
                if col.colunasEntidades.inclusaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>> Alteracao
            elif typePgm == 'A':
                #>>>>>> Book de Entrada
                if col.colunasEntidades.alteracaoEntrada:

                    # Verifica se a coluna tem Origem
                    retOrigemColuna = self.origemColuna(
                        col, dicRegras, auxBookI, dicPrimaryKeys, typePgm)
                    if not retOrigemColuna[0]:
                        return retOrigemColuna

                # Coluna tem Origem do FrameWork
                    if retOrigemColuna[1] == 2:
                        retRegraPreenchimento = self.regraPreenchimento(
                            col, dicRegras)
                        if not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                # Coluna não tem Origem ou eh Primary Key Informada
                    if  not retOrigemColuna[1]                            \
                     or self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):

                        self.bookEntrada(col, lisBookE)
                        self.bookInterface(col, lisBookI)

                        #>> Regra Preenchimento
                        retRegraPreenchimento = self.regraPreenchimento(
                            col, dicRegras)
                        if not retRegraPreenchimento[0]:
                            return retRegraPreenchimento

                    #>> Regra Data
                        self.regraData(col, dicRegras)

                        #>> Regra Time
                        self.regraTime(col, dicRegras)

                        #>> Regra Timestamp
                        self.regraTimestamp(col, dicRegras)

                        #>> Regras de Dominio
                        retRegrasDominio = self.regrasDominio(
                            col, regras, dicRegras)
                        if not retRegrasDominio[0]:
                            return retRegrasDominio

                    #>> Regra Existencia na própria entidade
                        regraEx = 'EX'
                        retExisteEntidade = self.existeEntidade(
                            entidadeId, col, dicPrimaryKeys, regraEx, typePgm,
                            dicRegras)
                        if not retExisteEntidade[0]:
                            return retExisteEntidade

                    #>> Regra Existencia nas Entidades Relacionadas
                        retEntidadeRelacionada = self.entidadeRelacionada(
                            col, dicForeignKeys, dicRegras, typePgm)
                        if not retEntidadeRelacionada[0]:
                            return retEntidadeRelacionada

        #>>>>>> Book de Saida
                if col.colunasEntidades.alteracaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>>>>>>> Exclusao
            elif typePgm == 'E':
                #>>>>>> Book de Entrada
                if col.colunasEntidades.exclusaoEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

                    #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(
                        col, dicRegras)
                    if not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

            #>> Regra Data
                    self.regraData(col, dicRegras)

                    #>> Regra Time
                    self.regraTime(col, dicRegras)

                    #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

                    #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(
                        col, regras, dicRegras)
                    if not retRegrasDominio[0]:
                        return retRegrasDominio

            #>> Regra Existencia na própria entidade
                    regraEx = 'EX'
                    retExisteEntidade = self.existeEntidade(
                        entidadeId, col, dicPrimaryKeys, regraEx, typePgm,
                        dicRegras)
                    if not retExisteEntidade[0]:
                        return retExisteEntidade

        #>>>>>> Book de Saida
                if col.colunasEntidades.exclusaoSaida:
                    self.bookSaida(col, lisBookS)

#>>>>>>>>>>>>>> Consulta
            elif typePgm == 'C':
                #>>>>>> Book de Entrada
                if col.colunasEntidades.consultaEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

                    #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(
                        col, dicRegras)
                    if not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

            #>> Regra Data
                    self.regraData(col, dicRegras)

                    #>> Regra Time
                    self.regraTime(col, dicRegras)

                    #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

                    #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(
                        col, regras, dicRegras)
                    if not retRegrasDominio[0]:
                        return retRegrasDominio

        #>>>>>> Book de Saida
                if col.colunasEntidades.consultaSaida:
                    self.bookSaida(col, lisBookS)

            #>> Regra Existencia nas Entidades Relacionadas
                retEntidadeRelacionada = self.entidadeRelacionada(
                    col, dicForeignKeys, dicRegras, typePgm)
                if not retEntidadeRelacionada[0]:
                    return retEntidadeRelacionada

#>>>>>>>>>>>>>> Lista
            else:
                #>>>>>> Book de Entrada
                if col.colunasEntidades.listaEntrada:
                    self.bookEntrada(col, lisBookE)
                    self.bookInterface(col, lisBookI)

                    #>> Regra Preenchimento
                    retRegraPreenchimento = self.regraPreenchimento(
                        col, dicRegras)
                    if not retRegraPreenchimento[0]:
                        return retRegraPreenchimento

            #>> Regra Data
                    self.regraData(col, dicRegras)

                    #>> Regra Time
                    self.regraTime(col, dicRegras)

                    #>> Regra Timestamp
                    self.regraTimestamp(col, dicRegras)

                    #>> Regras de Dominio
                    retRegrasDominio = self.regrasDominio(
                        col, regras, dicRegras)
                    if not retRegrasDominio[0]:
                        return retRegrasDominio

        #>>>>>> Book de Saida
                if col.colunasEntidades.listaSaida:
                    self.bookSaida(col, lisBookS)

            #>> Regra Existencia nas Entidades Relacionadas
                retEntidadeRelacionada = self.entidadeRelacionada(
                    col, dicForeignKeys, dicRegras, typePgm)
                if not retEntidadeRelacionada[0]:
                    return retEntidadeRelacionada

        retColunasEntidades = self.ColunasEntidadesReferenciadas.selectColunasEntidadesReferenciadasByCodigoEntidade(
            entidadeId)
        if not retColunasEntidades[0]:
            if retColunasEntidades[1]:
                return [0, retColunasEntidades[2]]
            else:
                return [0, 'Nao existem colunas para esta Entidade']
        colunasEntidade = retColunasEntidades[1]

        for col in colunasEntidade:
            #>>>>>>>>>>>>>> Consulta
            if typePgm == 'C':
                #>>>>>> Book de Saida
                if col.colunasEntidadesReferenciadas.consultaSaida:
                    self.bookRefer(col, lisBookR)
                    self.EntityColumns(col, lisCol, dicCol)

                    #>> Regra Coluna Existente em Entidades relacionadas
                    retColunaEntidadeRelacionada = self.colunaEntidadeRelacionada(
                        col, dicModulos)
                    if not retColunaEntidadeRelacionada[0]:
                        return retColunaEntidadeRelacionada

#>>>>>>>>>>>>>> Lista
            elif typePgm == 'L':
                #>>>>>> Book de Saida
                if col.colunasEntidadesReferenciadas.listaSaida:
                    self.bookRefer(col, lisBookR)
                    self.EntityColumns(col, lisCol, dicCol)

                    #>> Regra Coluna Existente em Entidades relacionadas
                    retColunaEntidadeRelacionada = self.colunaEntidadeRelacionada(
                        col, dicModulos)
                    if not retColunaEntidadeRelacionada[0]:
                        return retColunaEntidadeRelacionada

        for column in auxBookI:
            lisBookI.append(column)
        return [
            1,
            [
                lisBookE, lisBookI, lisBookS, lisBookR, lisCol, dicCol,
                dicRegras, pks, dicModulos
            ]
        ]

    def EntityColumns(self, col, lisCol, dicCol):
        lisCol.append(col.colunas.columnName)
        dicCol[col.colunas.columnName] = col

    def bookEntrada(self, col, lisBookE):
        lisBookE.append(col.colunas.columnName)

    def bookInterface(self, col, lisBookI):
        lisBookI.append(col.colunas.columnName)

    def bookSaida(self, col, lisBookS):
        lisBookS.append(col.colunas.columnName)

    def bookRefer(self, col, lisBookR):
        lisBookR.append(col.colunas.columnName)

    def origemColuna(self, col, dicRegras, auxBookI, dicPrimaryKeys, typePgm):
        retOrigemColuna = self.OrigemColunasAplicacao.selectOrigemColunasAplicacaoByCodigoColuna(
            col.colunas.id)
        if not retOrigemColuna[0]:
            return [
                0,
                'Ocorreu um erro na chamada de selectorigemColunasAplicacaoByCodigoColuna.'
                + str(retOrigemColuna[2])
            ]
        if not retOrigemColuna[1]:
            return [1, 0]
        if self.ehPrimaryKeyInformada(col, dicPrimaryKeys, typePgm):
            return [1, 0]
        origemColuna = retOrigemColuna[1][0]
        dic = {
            'origem': origemColuna.origemColunasApoio.origem,
            'fonte': origemColuna.origemColunasApoio.fonte
        }
        if col.colunas.columnName in dicRegras:
            oldDic = dicRegras[col.colunas.columnName]
            oldDic['OR'] = dic
            dicRegras[col.colunas.columnName] = oldDic
        else:
            dicRegras[col.colunas.columnName] = {'OR': dic}

        if origemColuna.origemColunasApoio.fonte == 'S':
            return [1, 1]

    # Origem do FrameWork
        auxBookI.append(col.colunas.columnName)
        return [1, 2]

    def regraPreenchimento(self, col, dicRegras):
        if col.colunasEntidades.ehNotNull:
            retMessage = self.montaMensagem(col.colunas.id,
                                            'C',
                                            'E',
                                            'PR',
                                            nova=1)
            if not retMessage[0]:
                return retMessage
            dic = {'message': retMessage[1]}
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['PR'] = dic
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {'PR': dic}
        return [1]

    def regraData(self, col, dicRegras):
        if col.datatypes.descricao == 'DATE':
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['DT'] = ''
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {'DT': ''}

    def regraTime(self, col, dicRegras):
        if col.datatypes.descricao == 'TIME':
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['TM'] = ''
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {'TM': ''}

    def regraTimestamp(self, col, dicRegras):
        if col.datatypes.descricao == 'TIMESTAMP':
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['TS'] = ''
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {'TS': ''}

    def regrasDominio(self, col, regras, dicRegras):
        for r in regras:
            retMessage = self.montaMensagem(col.colunas.id,
                                            'C',
                                            'E',
                                            r.regras.regra,
                                            nova=1)
            if not retMessage[0]:
                return retMessage
            dic = {'regra': r, 'message': retMessage[1]}
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic[r.regras.regra] = dic
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {r.regras.regra: dic}
        return [1]

    def ehPrimaryKeyInformada(self, col, dicPrimaryKeys, typePgm):
        if col.colunas.id in dicPrimaryKeys:
            if  (typePgm == 'I' and dicPrimaryKeys[col.colunas.id] != 3) \
            or (typePgm != 'I'):
                return 1
        return 0

    def existeEntidade(self, entidadeId, col, dicPrimaryKeys, regraEx, typePgm,
                       dicRegras):
        if col.colunas.id in dicPrimaryKeys:
            if ((typePgm == 'I' and self.validarPK) or (typePgm != 'I')):
                retPrograma = self.programas.selectProgramasByEntidadeRegra(
                    entidadeId, 'C')
                if not retPrograma[0]:
                    return [
                        0,
                        'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.'
                        + str(retPrograma[2])
                    ]
                pgmConsulta = retPrograma[1][0]
                if self.soag:
                    modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
                    interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
                    controle = self.applId + 'W00C'
                else:
                    modulo = pgmConsulta.nomePrograma
                    interface = pgmConsulta.bookInterface
                    controle = pgmConsulta.bookControle
                dic = {
                    'modulo': modulo,
                    'interface': interface,
                    'controle': controle,
                    'coluna': col.colunas.columnName
                }
                if col.colunas.columnName in dicRegras:
                    oldDic = dicRegras[col.colunas.columnName]
                    oldDic[regraEx] = dic
                    dicRegras[col.colunas.columnName] = oldDic
                else:
                    dicRegras[col.colunas.columnName] = {regraEx: dic}
        return [1]

    def rowsPrimaryKeys(self, col, dicPrimaryKeys, pks):
        if col.colunas.id in dicPrimaryKeys:
            pks.append(
                (col.colunas.columnName, str(dicPrimaryKeys[col.colunas.id])))

    def entidadeRelacionada(self, col, dicForeignKeys, dicRegras, typePgm):
        if col.colunas.id in dicForeignKeys:
            entidadeIdRef = dicForeignKeys[col.colunas.id][0]
            retPrograma = self.programas.selectProgramasByEntidadeRegra(
                entidadeIdRef, 'C')
            if not retPrograma[0]:
                if retPrograma[1]:
                    return [
                        0,
                        'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.'
                        + str(retPrograma[2])
                    ]
                else:
                    return [1]
            pgmConsulta = retPrograma[1][0]
            if pgmConsulta.codigoAplicacao == self.cAppl:
                soag = self.soag
            else:
                soag = Aplicacao(self.db,
                                 pgmConsulta.codigoAplicacao).getSoag()
            if soag:
                modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
                interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
                controle = self.applId + 'W00C'
            else:
                modulo = pgmConsulta.nomePrograma
                interface = pgmConsulta.bookInterface
                controle = pgmConsulta.bookControle
            if dicForeignKeys[col.colunas.id][1] == col.colunas.id:
                coluna = col.colunas.columnName
            else:
                retColRef = self.colunas.selectColunasByColumnId(
                    dicForeignKeys[col.colunas.id][1])
                if not retColRef:
                    return [
                        0,
                        'Ocorreu um erro na chamada de selectColunasByColumnId.'
                        + str(retColRef[2])
                    ]
                coluna = retColRef[1][0].columnName
            if typePgm == 'C':
                if col.colunasEntidades.consultaSaida:
                    esif = 'S'
                else:
                    esif = 'E'
            elif typePgm == 'L':
                if col.colunasEntidades.listaSaida:
                    esif = 'S'
                else:
                    esif = 'E'
            else:
                esif = ''

            dic = {
                'modulo': modulo,
                'interface': interface,
                'controle': controle,
                'coluna': coluna
            }
            #                  ,'esif':esif}
            if col.colunas.columnName in dicRegras:
                oldDic = dicRegras[col.colunas.columnName]
                oldDic['EX'] = dic
                dicRegras[col.colunas.columnName] = oldDic
            else:
                dicRegras[col.colunas.columnName] = {'EX': dic}

#>>>>>>> regra Registro Ativo
#            if  self.delecaoLogica:
#                retColunaDelecaoLogica = self.colunasEntidades.selectColunasEntidadesByCodigoEntidadeCodigoColuna \
#                                         (entidadeIdRef, self.colDelLog)
#                if  not retColunaDelecaoLogica[0]:
#                    return [0,'Ocorreu um erro na chamada de selectColunasEntidadesByCodigoEntidadeCodigoColuna.' \
#                             + str(retColunaDelecaoLogica[2])]
#                if  (retColunaDelecaoLogica[1]
#                and dicForeignKeys[col.colunas.id][2]):
#                    retMessage = self.montaMensagem(entidadeIdRef, 'E', 'E', 'AT', nova=1)
#                    if  not retMessage[0]:
#                        return retMessage
#                    dic = {'modulo':modulo
#                          ,'colDelLogName':self.colDelLogName
#                          ,'message':retMessage[1]}
#                    if  col.colunas.columnName in dicRegras:
#                        oldDic = dicRegras[col.colunas.columnName]
#                        oldDic['AT']=dic
#                        dicRegras[col.colunas.columnName]=oldDic
#                    else:
#                        dicRegras[col.colunas.columnName]={'AT':dic}
        return [1]

    def colunaEntidadeRelacionada(self, col, dicModulos):
        entidadeIdRef = col.colunasEntidadesReferenciadas.entidadeReferenciada
        retPrograma = self.programas.selectProgramasByEntidadeRegra(
            entidadeIdRef, 'C')
        if not retPrograma[0]:
            if retPrograma[1]:
                return [
                    0,
                    'Ocorreu um erro na chamada de selectProgramasByEntidadeRegra.'
                    + str(retPrograma[2])
                ]
            else:
                return [1]
        pgmConsulta = retPrograma[1][0]
        if pgmConsulta.codigoAplicacao == self.cAppl:
            soag = self.soag
        else:
            soag = Aplicacao(self.db, pgmConsulta.codigoAplicacao).getSoag()
        if soag:
            modulo = self.applId + '3' + pgmConsulta.nomePrograma + 'C'
            interface = self.applId + 'W' + pgmConsulta.nomePrograma + 'I'
            controle = self.applId + 'W00C'
        else:
            modulo = pgmConsulta.nomePrograma
            interface = pgmConsulta.bookInterface
            controle = pgmConsulta.bookControle

        dic = {'modulo': modulo, 'interface': interface, 'controle': controle}

        dicModulos[col.colunas.columnName] = dic
        return [1]

    def montaMensagem(self,
                      codigoEntCol,
                      origemMsg,
                      tipoMsg,
                      regra,
                      nova=None):
        retMessage = self.mensagens.getMensagem(codigoEntCol, origemMsg,
                                                tipoMsg, regra, nova)
        if not retMessage[0]:
            return [
                0, 'Ocorreu um erro na chamada de getMensagem.' +
                str(retMessage[2])
            ]
        return [1, '{}{:04}'.format(self.applId, retMessage[1])]
Пример #5
0
class Mensagens:

    def __init__(self, db, cAppl=None):
        self.db              = db
        self.cAppl           = int(cAppl) or 0
        self.mensagens       = self.db.mensagensEntCol
        self.gravados        = 0
        self.origem          = OrigemMensagens(self.db).getOrigens()
        self.tipo            = TipoMensagens(self.db).getTipos()
        self.regra           = Regras(self.db).getRegras(1)
        self.primaryKeys     = PrimaryKeys(self.db)
        self.codigoMsgPadrao = MensagensPadrao(self.db, cAppl=self.cAppl).selectMensagensPadraoBycodigoAplicacao()
        self.checkList       = CheckList(self.db, cAppl=self.cAppl)
        self.checkListPrototipo = self.db.checkListPrototipo

    def criaMensagensEntidades(self):
        entidades  = Entidades(self.db, cAppl=self.cAppl)
        returnCode = entidades.selectEntidadesProgramasBycodigoAplicacao()
        if not returnCode[0]:
            return [0, "Não existem Entidades para esta Aplicação"]
        for codigoEntidade, listaProgramas in returnCode[1]:
 #          servico inclusao
            if listaProgramas[0]:
                if self.primaryKeys.primaryKeyInformada(codigoEntidade):
                    self.insertMensagensEntidades(codigoEntidade, 'E', 'E', 'I')

                self.insertMensagensEntidades(codigoEntidade, 'E', 'S', 'I')
 #          servico alteracao
            if listaProgramas[1]:
                self.insertMensagensEntidades(codigoEntidade, 'E', 'S', 'A')
 #          servico exclusao
            if listaProgramas[2]:
                self.insertMensagensEntidades(codigoEntidade, 'E', 'S', 'E')
 #          servico consulta
            if listaProgramas[3]:
                self.insertMensagensEntidades(codigoEntidade, 'E', 'E', 'C')
                self.insertMensagensEntidades(codigoEntidade, 'E', 'S', 'C')
 #          servico lista
            if listaProgramas[4]:
                self.insertMensagensEntidades(codigoEntidade, 'E', 'E', 'L')
                self.insertMensagensEntidades(codigoEntidade, 'E', 'S', 'L')

        ckListMSG = self.checkList.updateCheckListMensagensEntidades()
        if not ckListMSG[0]:
            return ckListMSG

        self.atualizaCheckListPrototipo()

        self.db.commit()
        return [1,'Mensagens das Entidades >>>'          \
               + '\n' + ' Gravados = ' + str(self.gravados) \
               + '\n']

    def insertMensagensEntidades(self, codigoEntCol, origemMsg, tipoMsg, regra):

        codigos = self.getCodigos(origemMsg, tipoMsg, regra)

        codigoMensagem = numAuto(self.db, self.mensagens.codigoMensagem, self.mensagens.codigoAplicacao==self.cAppl)

        try:
            self.mensagens.insert(codigoAplicacao = self.cAppl
                                 ,codigoMensagem  = codigoMensagem
                                 ,codigoEntCol    = codigoEntCol
                                 ,codigoOrigemMsg = codigos[0]
                                 ,codigoMsgPadrao = codigos[1]
                                 ,codigoTipoMsg   = codigos[2]
                                 ,codigoRegra     = codigos[3])
            self.gravados = self.gravados +1
            return [1]
        except:
            return [0,"Ocorreu um erro no Insert da Tabela Programas.", sys.exc_info()[1]]

    def getMensagem(self, codigoEntCol, origemMsg, tipoMsg, regra, nova=None):

        codigos = self.getCodigos(origemMsg, tipoMsg, regra)

        try:
            query=self.db((self.mensagens.codigoAplicacao == self.cAppl)
                        & (self.mensagens.codigoEntCol    == codigoEntCol)
                        & (self.mensagens.codigoOrigemMsg == codigos[0])
                        & (self.mensagens.codigoMsgPadrao == codigos[1])).select()
        except:
            return [0,'Ocorreu um erro no Select da Tabela Mensagens.', sys.exc_info()[1]]
        if query:
            codigoMensagem = query[0].codigoMensagem
        else:
            if nova:
                msgNova = self.insertMensagensEntidades(codigoEntCol, origemMsg, tipoMsg, regra)
                if msgNova[0]:
                    self.atualizaCheckListPrototipo()
                    self.db.commit()
                    return self.getMensagem(codigoEntCol, origemMsg, tipoMsg, regra)
            else:
                return [0, 0, 0]
        return [1, codigoMensagem]

    def getCodigos(self, origemMsg, tipoMsg, regra):
        codigoOrigemMsg = self.origem[origemMsg]
        codigoTipoMsg   = self.tipo[tipoMsg]
        codigoRegra     = self.regra[regra][0]
        codigoMsgPadrao = self.codigoMsgPadrao[str(self.cAppl)    + str(codigoOrigemMsg)\
                                             + str(codigoTipoMsg) + str(codigoRegra)]
        return (codigoOrigemMsg, int(codigoMsgPadrao), int(codigoTipoMsg), int(codigoRegra))

    def atualizaCheckListPrototipo(self):
        try:
            self.db(self.checkListPrototipo.codigoAplicacao == self.cAppl).update(mensagens = False)
        except:
            return [0, 'CE - Ocorreu um erro no Update da Tabela checkListPrototipo.', sys.exc_info()[1]]
        return [1, 1]