Esempio n. 1
0
def get_version_from_db():
    "Возвращает кортеж, вычитанных из БД данных о версии БД (номер версии, дата)"
    getted_version_dic = db.dbExec(sql="""select first 1 VERSION, DATE_RELEASE
                          from ENGINE_VERSIONS
                          order by date_release desc
                          """,
                                   fetch='one',
                                   id_system=-1)
    if getted_version_dic is not None:
        return (getted_version_dic['VERSION'],
                dtu.formatMxDateTime(
                    mxDateTime=getted_version_dic['DATE_RELEASE'],
                    format='%d.%m.%Y'))
    else:
        return ('', '')
Esempio n. 2
0
    def getReports(self, docid):
        def objName(objid):
            return self.dbExec('select * from getobjectname(?,?)', [objid, ''],
                               fetch='one')['FULLNAME']

        docs = docid.split(',')
        available = {}
        for docid in docs:
            if docid:
                reports = self.dbExec('select * from K_REPORTS_AVAILABLE(?)',
                                      [docid],
                                      fetch='all')['datalist']
                for report in reports:
                    if not available.has_key(report['REPORTID']):
                        available[report['REPORTID']] = {
                            'reportid': report['REPORTID'],
                            'reportname': report['REPORTNAME'],
                            'docs': []
                        }
                    doc = self.dbExec(
                        'select * from document d where d.docid=?', [docid],
                        fetch='one')
                    available[report['REPORTID']]['docs'].append({
                        'docid':
                        doc['DOCID'],
                        'docdate':
                        dtu.formatMxDateTime(doc['DOCDATE'],
                                             format='%d.%m.%Y'),
                        'number':
                        doc['NUMBER'],
                        'from':
                        objName(doc['FROMOBJ']),
                        'to':
                        objName(doc['TOOBJ'])
                    })
        out = []
        for key in available.keys():
            out.append(available[key])
        return self.pyDumps(out)
Esempio n. 3
0
    def ajaxTicketDelAll(self, perm):
        "Удалять можно только временные или только постоянные тикеты: если perm истинен, то постоянные, иначе - временные"
        tickets = []
        """for dic in self.dbExec(sql="select TICKET_ID, DEVEL_ID, DEVEL_FIO, REASON, GRANT_STAMP, TICKET, DELETED_TIME, ADMIN_FIO, DB_IP, DB_NAME" \
                              " from T_GET(?,?,?,?,?,?,?,?) WHERE DELETED_TIME IS NULL",
                          params=(None,
                                  None,
                                  None,
                                  mxToday(),
                                  LastTodayTime(),
                                  None,
                                  None,
                                  None),
                          fetch='all')['datalist']:"""

        for dic in self.tickets_get(ticketId=None, develId=None, reason=None, dtBeg=mxToday(), dtEnd=LastTodayTime(), ticket=None, adminId=None, idBase=None, perm=self.cStrE(perm), only_no_deleted=True, ip=None)['datalist']:
            tickets.append(dic)

        dic = self.dbExec(sql="select DELETED_TIME from T_MARK_DEL_ALL(?)",  params=[self.cStrE(perm)], fetch='one')
        if dic is not None:
            deleted_time = formatMxDateTime(dic['DELETED_TIME'], format='%H:%M', sformatFrom='%H:%M:%S')
        else:
            deleted_time = ''

        #для каждой зарегистрированной БД вызываем очистку каталогов тикетов на серверах (за сегодня)
        #for dic in self.dbExec(sql="select TICKETS_PATH_HOME, SERVER_IP, SERVER_USER from ENGINE_GET_BASES_INFO(NULL)", fetch='all')['datalist']:
        for base in db.get_bases_info()['dbs']:
            db.dbExecDirect(sql="delete from K_IP_CHECK where PERM is not null and PERM " + pu.iif(perm!='0', '<>0', '=0'),
                              params=[],
                              fetch='none',
                              id_base=base['ID_BASE']
                           )
            dublin.dropTodayLinks(links_path=pu.iif(perm!='0', base['TICKETS_PERM_PATH_HOME'], base['TICKETS_PATH_HOME']), user=base['SERVER_USER'], ip=base['SERVER_IP'])

        #по всем тикетам, попавшим в фильтр
        for dic in tickets:
            pu.send_devel_mail(subject='Тикет удалён', body='Тикет: %s\nIP/port: %s\nБД: %s\nID тикета: %s\nПерманент: %s\nВремя удаления: %s%s' \
                % (dic['TICKET'], dic['DB_IP'], dic['DB_NAME'], dic['TICKET_ID'], pu.iif(dic['PERM'], 'Да', 'Нет'), deleted_time, signature), id_devel=dic['DEVEL_ID'])
        return self.pyDumps(ext_data={'DELETED_TIME': deleted_time})
Esempio n. 4
0
 def report(self, docid, **args):
     ownerObj = self.dbExec(sql='SELECT OWNER FROM CONFIG',params=(), fetch="one")
     owner = self.GetCompanyInfo(objid=ownerObj['OWNER'], Prefix='owner')
     
     if args.has_key('flag'): flag = args['flag']
     else: flag = None
     
     docsData = []
     docs = docid.split(',')        
     for docid in docs:
         if docid:
             doc = self.dbExec(sql='select * from K_DOCPRINT_GET_DOC_INFO(?)',params=(docid,),fetch="one")
             if doc['DTCODE']=='INCOME' and flag=='c':
                 if args.has_key('timestamp'): timestamp = args['timestamp']
                 else: timestamp = None
             
                 task = self.GetTaskInfo(docid)
                 # акт разногласий
                 wares = self.dbExec(sql='select distinct * from K_INCOME_CLAIM_REPORT_PRINT(?,?,?,?) ORDER BY WARESNAME ',
                     params=(task['taskid'], self.rnd, 1, timestamp), fetch="all")
                 sum = self.dbExec(sql='select distinct * from K_INCOME_GET_CLAIM_SUM(?)',
                     params=(docid,), fetch="one")
                 date = self.dbExec(sql='select distinct * from K_INCOME_GET_DOCDATETIME(?)',
                     params=(docid,), fetch="one")['DOCDATETIME']
                 docsData.append({'doc':doc,'wares':wares['datalist'], 'sumClaim': sum['SUM'], 'sumFact': sum['SUMFACT'], 
                                  'dateTime': dtu.formatMxDateTime(date, '%d.%m.%Y %H:%M:%S')})
             elif doc['DTCODE']=='ININCOME':
                 wares = self.dbExec(sql='select * from K_DOCPRINT_ININCOME_LISTWARES(?)',params=[docid], fetch="all")
                 docsData.append({'doc':doc,'wares':wares['datalist']})
             else:
                 wares = self.dbExec(sql='select lc.code,lc.waresname,lc.amount,lc.price,lc.docsum, lc.WARESUNITID_NAME\
                                            from listcargo(?) lc \
                                           where abs(lc.amount)>0.00001 \
                                           order by lc.waresname',
                                 params=(docid, ), fetch="all")
                 docsData.append({'doc':doc,'wares':wares['datalist']})
     return self.drawTemplate(templ=docPrintTMPL, data=[{'docs':docsData,'prefix':'O', 'flag':flag},owner])
Esempio n. 5
0
    def ajaxTicketDel(self, ticketId):
        #Ищем idBase
        idBase = self.dbExec(sql="select ID_BASE from T_TICKETS where TICKET_ID=?",
                             params=[self.cInt(ticketId)],
                             fetch='one')['ID_BASE']

        #Мультибазная транзакция
        conEngine = db.getConEng()
        group = dbEngine.ConnectionGroup()
        try:
            conDb = db.getConDb(idBase)
            group.add(conDb)
            #conEngine.commit()
            group.add(conEngine)
            group.begin()

            try:
                dic = db.dbExec(sql="select TICKET, DELETED_TIME, DEVEL_ID, ID_BASE, PERM from T_MARK_DEL(?)",
                                  params=[self.cInt(ticketId)],
                                  fetch='one',
                                  id_system=-1,
                                  con=conEngine,
                                  conEngine=conEngine
                                  )
                db.dbExecDirect(sql="delete from K_IP_CHECK where TICKET_ID=?",
                                  params=[self.cInt(ticketId)],
                                  fetch='none',
                                  id_base=idBase,
                                  con=conDb,
                                  conEngine=conEngine
                                  )
            except:
                if group.count(): group.rollback()
                raise
            else:
                group.commit()

        finally:
            group.disband() #disband the group so that member connections can operate independently again.

        if dic is not None:
            deleted_time = formatMxDateTime(dic['DELETED_TIME'], format='%H:%M', sformatFrom='%H:%M:%S')
            ticket = dic['TICKET']
            idBase = dic['ID_BASE']
            perm = dic['PERM']
            #db_info = self.dbExec(sql="select DB_IP, DB_NAME, SERVER_IP, SERVER_USER from ENGINE_GET_BASES_INFO(?)", params=[self.cInt(idBase)], fetch='one')
            #if db_info is None:
            #    raise TicketsException('Base with ID=%s not found!' % idBase)
            #dbs = db.get_bases_info(idBase)['dbs']
            #if len(dbs) == 0:
            #    raise TicketsException('Base with ID=%s not found!' % idBase)
            #db_info = dbs[0]
            db_info = db.get_bases_info(idBase)

            server_user = db_info['SERVER_USER']
            server_ip = db_info['SERVER_IP']
            db_ip = db.db_ip_to_private(db_info['DB_IP'])
            db_name = db_info['DB_NAME']

            dublin.dropLink(link_location=ticket, user=server_user, ip=server_ip)
            pu.send_devel_mail(subject='Тикет удалён', body='Тикет: %s\nIP/port: %s\nБД: %s\nID тикета: %s\nПерманент: %s\nВремя удаления: %s%s' \
                % (ticket, db_ip, db_name, ticketId, pu.iif(perm, 'Да', 'Нет'), deleted_time, signature), id_devel=dic['DEVEL_ID'])
            return self.pyDumps(ext_data={'TICKET': ticket, 'DELETED_TIME': deleted_time})
        else:
            return self.pyDumps(ext_data={'TICKET': 'no', 'DELETED_TIME': 'no'})
Esempio n. 6
0
    def ajaxTicketAdd(self, develId, idBase, reason, perm, ips):
        #db_info = self.dbExec(sql="select DB_IP, DB_NAME, DB_LOCATION, SERVER_IP, SERVER_USER, TICKETS_PATH_HOME from ENGINE_GET_BASES_INFO(?)", params=[self.cInt(idBase)], fetch='one')
        #if db_info is None:
        #    raise TicketsException('Base with ID=%s not found!' % idBase)
        #dbs = db.get_bases_info(idBase)['dbs']
        #if len(dbs) == 0:
        #    raise TicketsException('Base with ID=%s not found!' % idBase)
        #db_info = dbs[0]
        #Переводим из строки в объект
        ips = json.loads(ips)
        db_info = db.get_bases_info(self.cInt(idBase))

        db_location = db_info['DB_LOCATION']
        server_user = db_info['SERVER_USER']
        server_ip = db_info['SERVER_IP']
        db_ip = db.db_ip_to_private(db_info['DB_IP'])
        db_name = db_info['DB_NAME']
        tickets_path_home = db_info['TICKETS_PATH_HOME']
        tickets_perm_path_home = db_info['TICKETS_PERM_PATH_HOME']

        devel = self.dbExec(sql="select DEVEL_LOGIN, DEVEL_FIO FROM T_DEVEL WHERE DEVEL_ID=?", params=[self.cInt(develId)], fetch='one')
        if devel is None:
            raise TicketsException('Developer with ID=%s not exists' % develId)

        reason = pu.convToWin(reason)
        devel_login = devel['DEVEL_LOGIN']
        devel_fio = devel['DEVEL_FIO']

        ticket = dublin.createLink(db_location=db_location, links_path=pu.iif(perm!='0', tickets_perm_path_home, tickets_path_home), login=devel_login, user=server_user, ip=server_ip)

        #print "55555555555555"
        #print perm, self.cStrE(perm)
        #print "55555555555555"
        conEngine = db.getConEng()
        group = dbEngine.ConnectionGroup()
        try:
            conDb = db.getConDb(self.cInt(idBase))
            group.add(conDb)
            #conEngine.commit()
            group.add(conEngine)
            group.begin()

            try:
                dic = db.dbExec(sql="select TICKET_ID, GRANT_STAMP from T_ADD(?,?,?,?,?,?)",
                    params=(self.cInt(develId),
                            reason,
                            ticket,
                            self.getUserVar('uid'),
                            self.cInt(idBase),
                            self.cStrE(perm)
                           ),
                    fetch='one',
                    id_system=-1,
                    con=conEngine,
                    conEngine=conEngine
                )
                grant_stamp = formatMxDateTime(dic['GRANT_STAMP'], '%d.%m.%Y %H:%M')

                for ip in ips:
                    """ip = db.dbExec(sql="select IP from T_DEVEL_IP where ID_DEVEL_IP=?",
                        params=[str(id_ip)],
                        fetch='one',
                        id_system=-1,
                        con=conEngine,
                        conEngine=conEngine
                        )['IP']
                    """
                    dic_ip = db.dbExec(sql="select ID_TICKETS_IP from T_ADD_IP(?,?)",
                        params=(dic['TICKET_ID'],
                                str(ip)
                               ),
                        fetch='one',
                        id_system=-1,
                        con=conEngine,
                        conEngine=conEngine
                        )
                    dic_base_ip = db.dbExecDirect(sql="INSERT INTO K_IP_CHECK (IP, DEVEL_FIO, TICKET_ID, PERM) VALUES(?,?,?,?)",
                        params=(str(ip),
                                devel_fio,
                                dic['TICKET_ID'],
                                self.cStrE(perm)
                               ),
                        fetch='none',
                        id_base=self.cInt(idBase),
                        con=conDb,
                        conEngine=conEngine
                        )
                #conEngine.savepoint('A')

            except:
                if group.count(): group.rollback()
                raise
            else:
                group.commit()

        finally:
            group.disband() #disband the group so that member connections can operate independently again.

        if dic is not None:
            pu.send_devel_mail(subject='Тикет выдан', body='Тикет: %s\nIP/port: %s\nБД: %s\nID тикета: %s\nПерманент: %s\nВремя выдачи: %s\nПричина: %s\nРазработчик: %s\nВыдал: %s%s' \
                % (ticket, db_ip, db_name, dic['TICKET_ID'], pu.iif(perm!='0', 'Да', 'Нет'), grant_stamp, reason, devel_fio, self.getUserVar('userfio'), signature), id_devel=develId)
            return self.pyDumps(ext_data={'TICKET_ID': dic['TICKET_ID'],
                                          'GRANT_STAMP': grant_stamp,
                                          #'REASON': dic['REASON'],
                                          'DEVEL_FIO': devel_fio,
                                          'TICKET': ticket,
                                          'ADMIN_FIO': self.getUserVar('userfio'),
                                          'DB_IP': db_ip,
                                          'DB_NAME': db_name
                                })
        else:
            return self.pyDumps(ext_data={'TICKET': 'no'})