Beispiel #1
0
def load_file():
    ask = wc.CalendarDialog(window)
    if ask.result is None:
        return
    elif ask.result.day != 1:
        log.err_print(
            'Некорректная дата реестра! Допускается только первое число месяца!'
        )
        mb.showerror(
            'Загрузка реестра',
            'Некорректная дата реестра! Допускается только первое число месяца!'
        )
        return
    else:
        # проверим уникальность
        conn = sql.DatabaseManager('Zirk.db')
        if not conn.isPrimary('Reestr', {'Reestr_date': ask.result}):
            if not mb.askokcancel(
                    'Повторная загрузка',
                    'Реестр за эту дату уже заагружался.\nПерезатереть ранее загруженные данные?'
            ):
                return
            log.ok_print('Запускаем загрузку за дату: {}'.format(
                str(ask.result)))
    # return
    file = xlsparser.Reestr(ask.result)
    if file.path == '':
        return
    ds = file.parse()
    if ds:
        # conn = sql.DatabaseManager('Zirk.db')
        conn.delete('where reestr_date = date(\'{}\')'.format(str(ask.result)))
        for rec in ds:
            conn.insert('Reestr', rec.values())
        conn.commit()
Beispiel #2
0
 def drop_table(self, name):
     sSQL = 'drop table {}'.format(name)
     try:
         self.cursor.execute(sSQL)
         log.ok_print('table {} dropped successfully'.format(name))
     except Exception as e:
         log.err_print("Can't drop table {}".format(name) + ': ' + str(e))
Beispiel #3
0
    def parse(self):
        file = xlrd.open_workbook(self.path)
        sheet = file.sheet_by_index(0)
        vals = [sheet.row_values(rownum) for rownum in range(sheet.nrows)]
        ds = []
        cnt = 0
        allcnt = 0
        # Ищем позицию строки Итого
        #
        for row in vals:
            if str(row[0]) == 'номер':
                try:
                    posTotal = row.index('итого:')
                    break
                except ValueError as e:
                    errtext = 'Некорректный формат файла. Не найден столбец "итого:"'
                    log.err_print(errtext)
                    mb.showerror('Загрузка реестра', errtext)
                    return
        else:
            errtext = 'Некорректный формат файла. Не найдена шапка таблицы!"'
            log.err_print(errtext)
            mb.showerror('Загрузка реестра', errtext)
            return

        for row in vals:
            allcnt += 1
            try:
                if str(row[0]).startswith('комплекс') or str(row[0]).startswith('номер') or row[0] == '':
                    continue
                total = 0.0
                for sums in range(3, posTotal):
                    total += float(row[sums] or 0)
                    res = {
                            'reestr_id': self.id,
                            'reestr_date': self.dt,
                            'pactnum': str(row[0]),
                            'place': str(row[1]),
                            'renter': str(row[2]),
                            'month': 'JAN',
                            'summ': row[sums],
                            'phone': row[6]
                    }
                    ds.append(res)
                    cnt += 1
                if total != row[5]:
                    errtext = 'Ошибка в строке {}: поле "Итого" {} не соответствует сумме платежей {}'.format(row[2], row[5], str(total))
                    log.err_print(errtext)
                    mb.showerror('Загрузка реестра', errtext)
                    return
            except Exception as e:
                errtext = 'Ошибка при разборе файла на строке {}'.format(str(allcnt))+': '+str(e)
                log.err_print(errtext)
                mb.showerror('Загрузка реестра', errtext)
                return
        oktext = ('Файл успешно разобран. Обработано строк: {}'.format(str(cnt)))
        log.ok_print(oktext)
        mb.showinfo('Загрузка реестра', oktext)
        return ds
Beispiel #4
0
 def delete(self, clause):
     sSQL = 'delete from Reestr ' + clause
     try:
         log.ok_print(sSQL)
         self.cursor.execute(sSQL)
         log.ok_print(str(self.cursor.rowcount) + ' rows deleted')
     except Exception as e:
         log.err_print('Ошибка при удалении: ' + str(e))
Beispiel #5
0
 def getquery(self, sSQL: str):
     """
     :rtype: Cursor
     """
     log.ok_print('SQL: ' + sSQL)
     try:
         ls = list(self.cursor.execute(sSQL))
         log.ok_print('  rows selected: ' + str(len(ls)))
         return ls
     except Exception as e:
         log.err_print('SQL ERROR: ' + '\n' + sSQL + '\n' + str(e))
Beispiel #6
0
 def create_table(self, name, columns: dict):
     sSQL = 'create table {} ('.format(name)
     for k, v in columns.items():
         sSQL = sSQL + k + ' ' + v
         if k == list(columns.keys())[-1]:
             sSQL = sSQL + ')'
         else:
             sSQL = sSQL + ','
     try:
         self.cursor.execute(sSQL)
         log.ok_print('table {} successfully created'.format(name))
     except Exception as e:
         log.err_print('Error while creating table {}'.format(name) + ' ' +
                       str(e))
Beispiel #7
0
 def insert(self, table, column: list):
     sSQL = 'insert into {} values ('.format(table)
     for i, v in enumerate(column):
         if type(v) is int or type(v) is float:
             vv = str(v)
         else:
             vv = "'" + str(v) + "'"
         sSQL = sSQL + vv
         if i == len(column) - 1:
             sSQL = sSQL + ')'
         else:
             sSQL = sSQL + ','
     log.ok_print(sSQL)
     try:
         self.cursor.execute(sSQL)
         log.ok_print('1 row inserted into {}'.format(table))
     except Exception as e:
         log.err_print('Ошибка при Insert в таблицу {}: '.format(table) +
                       str(e))
Beispiel #8
0
 def commit(self):
     self.conn.commit()
     log.ok_print('Commit')