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 ('', '')
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)
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})
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])
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'})
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'})