예제 #1
0
 def main(self):
     #Shops=self.dbExec(sql='select * from K_REPORTS_LISTSHOPS',params=(), fetch='all')    
     #Shops['dl_shops'] = Shops['datalist']
     #del Shops['datalist'] 
     
     #Suppls=self.dbExec(sql='select * from K_REPORTS_LISTSUPPLIERS',params=(), fetch='all')    
     #Suppls['dl_suppl'] = Suppls['datalist']
     #del Suppls['datalist']
     
     DStatus=self.dbExec(sql="select distinct dts.code, rs.name \
               from doctypestatus dts \
               left join r_status rs on rs.code = dts.code and rs.statustype='O' \
              where exists(select * from doctype dt \
                            where dt.code in ('INCOME','INSUPPLIER','WHTOSHOP') \
                              and dt.doctid = dts.doctid)",params=(), fetch='all')    
     DStatus['dl_dstatus'] = DStatus['datalist']
     del DStatus['datalist']
     
     systemid =db.dbExec(sql="select * from ENGINE_FIND_SYSTEM_BY_FULL_REF('/KURS/AMWARESSET')",params=(), fetch='one', id_system=-1)['ID_SYSTEM']   
     USERS=db.dbExec(sql="select * from ENGINE_GET_SYSTEM_USERS(?)",params=(systemid,), fetch='all', id_system=-1)    
     USERS['dl_user'] = USERS['datalist']
     del USERS['datalist']       
     
     #return self.drawTemplate(templ=index, data=[{'searchbar': {'visible':1, 'type':'h'}},Shops, Suppls, USERS, DStatus])
     return self.drawTemplate(templ=index, data=[{'searchbar': {'visible':1, 'type':'h'}}, USERS, DStatus])
예제 #2
0
파일: updater.py 프로젝트: shybkoi/WMS-Demo
    def DeleteUpdate(self, id_update):
        dbRes = db.dbExec(sql="select * from UPD_UPDATES up where up.id_update=?", \
                                    params=(id_update,),\
                                    fetch="one", id_system=-1)

        if (dbRes is not None):

            if (dbRes['DEVEL_ID'] != self.getUserVar("uid")
                    and str(self.isXmlAdmin()) != "1"):
                return self.pyDumps({
                    "res":
                    "0",
                    "mess":
                    "Нельзя удалять не свои обновления"
                })
            else:
                filepath = dbRes["FILENAME"]
                if (filepath is not None):
                    if (os.access(filepath, os.F_OK)):
                        os.remove(filepath)
                db.dbExec(sql="delete from UPD_UPDATES where id_update=?",
                          params=(id_update, ),
                          fetch="none",
                          id_system=-1)
                return self.pyDumps({"res": "ok"})
        else:
            return self.pyDumps({
                "res":
                "0",
                "mess":
                "Не удалось обнаружить обновление в базе..."
            })
예제 #3
0
    def verifyuser(self, **kwargs):
        "проверка существования пользователя"
        mes = _(
            "Аккаунт с этим адресом электронной почты не найден. Повторите попытку."
        )
        eres = {'res': '0', 'fields': [{'name': 'email', 'errmes': mes}]}
        usrReg = UserReg()
        if kwargs.has_key('email') and kwargs['email'] != '':
            # проверим капчу, если нужно
            if self.useCaptcha == 1:
                resc = self.checkCaptcha(**kwargs)
                if resc['res'] == 0:
                    eres['res'] = 0
                    eres['fieldvalues'] = kwargs
                    eres['fields'] = resc['fields']
                    return self.recovery(fields=eres)
            res, fields = usrReg.check_email_uniq(kwargs['email'])
            if res == 1:  # если такой имейл не нашелся
                return self.recovery(fields=eres)
            # если же имейл нашелся - генерируем урл сброса пароля
            resethref = pu.rndm_sha()
            # постим пометку в бд
            db.dbExec(sql='execute procedure ENGINE_PSWD_RECOVERY_INS(?,?)',
                      params=(fields['uid'], resethref),
                      fetch='none',
                      id_system=-1)

            # отправляем ссылку пользователю
            subject = _('Ваш пароль') + ' ' + cfg.service_name
            mailto = kwargs['email']
            mailfrom = cfg.from_mail_addr
            maildata = {}
            maildata['service_name'] = cfg.service_name
            maildata['owner_name'] = cfg.owner_name
            maildata['owner_href'] = cfg.owner_href
            maildata[
                'cphref'] = cherrypy.request.base + '/ACCOUNT/rp?c=' + resethref
            body_text = str(reset_passwd_txt(searchList=maildata))
            body_html = str(reset_passwd_html(searchList=maildata))
            pu.post_mail(mailto,
                         subject=subject,
                         body_text=body_text,
                         body_html=body_html)
            # радуем сообщением
            return self.drawTemplate(templ=emailrecovery,
                                     data=[{
                                         'mailfrom': mailfrom,
                                         'mailto': mailto,
                                         'baseurl': cherrypy.request.base
                                     }],
                                     draw_wo_login=True)

        return self.recovery(fields={})
예제 #4
0
    def readCommonParamsBySystem(self, system):
        "Читает общие параметры по определенной системе, содержащейся в строке таблицы ENGINE_SYSTEMS"

        import db
        global systems_params

        # id_system IS INT!!!
        id_system = system['ID_SYSTEM']

        # чтоб можно было вызывать функции чтения параметров в любом порядке
        systems_params.setdefault(id_system, {})

        #system_name
        systems_params[id_system]['system_name'] = system['SHOW_NAME']
        #system_ref
        systems_params[id_system]['system_ref'] = system['REF_NAME']
        #system_folder
        folder_name = db.dbExec(sql="select FULL_FOLDER_NAME from ENGINE_GET_FULL_FOLDER_NAME(?)",
                      params=(id_system,), fetch='one', id_system= -1)
        systems_params[id_system]['system_folder'] = folder_name['FULL_FOLDER_NAME']
        #system_full_ref
        ref_name = db.dbExec(sql="select FULL_REF_NAME from ENGINE_GET_FULL_REF_NAME(?)",
                      params=(id_system,), fetch='one', id_system= -1)
        systems_params[id_system]['system_full_ref'] = ref_name['FULL_REF_NAME']
        #higher
        systems_params[id_system]['higher'] = system['HIGHER']
        #top_system_name
        systems_params[id_system]['top_system_name'] = db.dbExec(sql="select TOP_SYSTEM_NAME FROM ENGINE_GET_TOP_SYSTEM_NAME(?)",
                        params=(id_system,), fetch='one', id_system= -1)['TOP_SYSTEM_NAME']
        #top_system_ref
        id_top = db.getIdSystemOfFirstParentFilledIdBase(id_system)
        if id_top == '-1':
            top_system_ref = '/ENGINE'
        else:
            top_system_ref = db.dbExec(sql="select FULL_REF_NAME from ENGINE_GET_FULL_REF_NAME(?)",
                                       params=[id_top], fetch='one', id_system= -1)['FULL_REF_NAME']
        systems_params[id_system]['top_system_ref'] = top_system_ref
        #show_on_click
        if system['MODULE_NAME'] and system['CLASS_NAME']:
            systems_params[id_system]['show_on_click'] = True
        else:
            systems_params[id_system]['show_on_click'] = False
        #has_child_systems
        if db.dbExec(sql='select first 1 id_system FROM ENGINE_SYSTEMS where higher=?',
                          params=(id_system,), fetch='one', id_system= -1) is not None:
            systems_params[id_system]['has_child_systems'] = True
        else:
            systems_params[id_system]['has_child_systems'] = False
        #no_map
        if system['NO_MAP']:
            systems_params[id_system]['no_map'] = True
        else:
            systems_params[id_system]['no_map'] = False
예제 #5
0
def get_user_systems(uid, higher=None, recurse=1, systems_order=None, spaces_per_level=24, use_layers=None, conEngine=None):
    u"""Дерево замапленных систем пользователя.
    Без учета прав его ролей в текущем тарифе организации пользователя, если используются слои,
    либо с учетом прав его ролей без использования тарифов, если слои не используются.

    Принимает:
    :param uid: ID пользователя (если None, используется uid текущего пользователя)
    :type uid: int
    :param higher: ID родительской системы, если нужно отфильтровать только какую-то ветку. None - все ветки.
    :type higher: int
    :param recurse: рекурсивный поиск дочерних узлов (любое число кроме 0 и None) либо возвращать лишь 1-й уровень вложенности (0, None)
    :type recurse: int
    :param systems_order: сортировка систем в дереве: 0 - по полям ORDERBY, SHOW_NAME таблицы ENGINE_SYSTEMS; 1 - по полю SHOW_NAME. None - значение по умолчанию из конфигурационного файла
    :type systems_order: int
    :param spaces_per_level: количество пробелов-отступов на 1 уровень
    :type spaces_per_level: int
    :param use_layers: использовать ли слои. None - использовать параметр конфигурационого файла. True - использовать слои и тарифы. False - не использовать слои и тарифы (возвращается всё дерево прав, в том числе и прав ролей)
    :type use_layers: int
    :param conEngine: объект соединения с БД Engine. Если передан, то доступ к ней происходит в его контексте и без commit'а в конце
    :type conEngine: объект соединения kinterbasdb

    Возвращает:
    Cписок прав, в виде:
        {'datalist':
        [{'ID_SYSTEM': ID_SYSTEM, 'HIGHER_OUT': HIGHER_OUT, 'SPACES': SPACES, 'FULL_REF_NAME': FULL_REF_NAME, 'SHOW_NAME': SHOW_NAME, 'LEVEL_OUT': LEVEL_OUT},
        ...
        {'ID_SYSTEM': ID_SYSTEM, 'HIGHER_OUT': HIGHER_OUT, 'SPACES': SPACES, 'FULL_REF_NAME': FULL_REF_NAME, 'SHOW_NAME': SHOW_NAME, 'LEVEL_OUT': LEVEL_OUT}]},
        где
        ID_SYSTEM - ID системы
        HIGHER_OUT - ID родительской системы
        SPACES - отступы: html-символы неразрывного пробела в количестве LEVEL_OUT*spaces_per_level
        FULL_REF_NAME - внутренняя полная ссылка на систему
        SHOW_NAME - название системы
        LEVEL_OUT - уровень вложенности, начиная с 0

    """

    if uid is None:
        uid = cpu.getUserVar('uid')
    if systems_order is None:
        systems_order = cfg.systems_order
    if use_layers is None:
        use_layers = layers.layersIsUse()
    if use_layers:
        return db.dbExec(sql="""select ID_SYSTEM, HIGHER_OUT, FULL_REF_NAME, FULL_FOLDER_NAME, SHOW_NAME, LEVEL_OUT, LASTDATE, lpad('', %d*level_out, ' ') SPACES from TAR_USER_SYSTEMS_GET(?,?,?,?,?)""" % spaces_per_level,
                        params=[uid, higher, recurse, None, systems_order], fetch='all', id_system=-1, conEngine=conEngine)
    else:
        return db.dbExec(sql="""select ID_SYSTEM, HIGHER_OUT, FULL_REF_NAME, FULL_FOLDER_NAME, SHOW_NAME, LEVEL_OUT, lpad('', %d*level_out, ' ') SPACES from ENGINE_USER_GET_SYSTEMS(?,?,?,?,?)""" % spaces_per_level,
                        params=[uid, higher, recurse, None, systems_order], fetch='all', id_system=-1, conEngine=conEngine)
예제 #6
0
def session_last_session_info(uid, fio, equip_kind):
    u"""Информация о последней открытой или закрытой pc-, терминальной или мобильной сессии.
    equip_kind - вид оборудования: 'T'-терминал, 'M'-мобильне устройство, 'P' и другое -PC

    """
    #print "%s: session_last_session_info" % (time.strftime('%H:%M:%S',time.localtime()))
    # если error_msg пусто, то go_url и info должно быть заполнено, если не произошёл Exception и LAST_ID_SYSTEM is not None
    error_msg = ''
    go_url = None
    info = None
    ses_info = db.dbExec(sql="select * from EQUIP_LAST_SESSION_INFO(?,?)",
                       params=[uid, equip_kind], fetch='one', id_system=-1)
    # ошибка обновления сессии
    if ses_info['ERROR_CODE'] != 0 and ses_info['ERROR_CODE'] != 3:
        from py_utils import iif
        error_msg = 'Ошибка получения информации о %(KIND)s сессии: %(ERROR_MSG)s. UID=%(UID)s, FIO=%(FIO)s' % \
            {'KIND': iif(equip_kind=='T', 'терминальной', iif(equip_kind=='M', 'мобильной', 'PC-')),
             'ERROR_MSG': ses_info['ERROR_MSG'],
             'UID': uid,
             'FIO': fio
            }
    else:
        go_url = si.get_full_ref_name_by_id_system(ses_info['LAST_ID_SYSTEM']) # м.б. None, если LAST_ID_SYSTEM is None
        info = ses_info
    return error_msg, go_url, info
예제 #7
0
def session_close(uid, fio, equip_kind, reason, closed_by=None, conEngine=None):
    u"""Закрытие pc-, терминальной или мобильной сессии по пользователю.
    Вызывается для PC- и мобильных сессий из exit, по тайм-ауту для PC-сессий,
    для терминальных и мобильных при скане ШК выхода либо после закрытия администратором,
    при использовании слоёв - скриптом, проверяющим окончание срока действия тарифа.
    Очищает старую историю за config.SESSION_MAX_HISTORY дней назад по переданному типу сессий equip_kind.

    equip_kind - вид оборудования: 'T'-терминал, 'M'-мобильне устройство, 'P' и другое -PC
    reason - Причина закрытия сессии:
        0.Зарезервировано на будущее,
        1.Выход(exit или ШК выхода),
        2.Автозакрытие из веб(только для PC),
        3.Открытие новой(продление)(вход с другого браузера,через index,скан ШК входа),
        4.Закрыта администратором
        5.Закрыта из-за окончания действия тарифа (только для PC, т.к. в случае продления тарифа для терминальных и мобильных сессий останутся незакрытые задания)

    """
    # print "%s: session_close" % (time.strftime('%H:%M:%S',time.localtime()))
    error_msg = ''
    ses_close = db.dbExec(sql="select * from EQUIP_SESSION_CLOSE(?,?,?,?)",
                        params=[uid, equip_kind, reason, closed_by], fetch='one', id_system=-1, con=conEngine)

    # ошибка закрытия сессии
    # ERROR_CODE = 3 - если PC-сессия очищена по тайм-ауту, а потом был нажат exit, или наоборот, то не считаем это ошибкой
    # ERROR_CODE = 3 - для терминальных и мобильных сессий - это ошибка
    if ses_close['ERROR_CODE'] not in (0, 3) and equip_kind not in ('T', 'M') \
    or ses_close['ERROR_CODE'] != 0 and equip_kind in ('T', 'M'):
        from py_utils import iif
        error_msg = 'Ошибка закрытия %(KIND)s сессии: %(ERROR_MSG)s. UID=%(UID)s, FIO=%(FIO)s ' % \
            {'KIND': iif(equip_kind=='T', 'терминальной', iif(equip_kind=='M', 'мобильной', 'PC-')),
             'ERROR_MSG': ses_close['ERROR_MSG'],
             'UID': uid,
             'FIO': fio
            }
    return error_msg, ses_close['WEB_SESSION_ID']
예제 #8
0
def session_open(uid, fio, equip_kind, termnum=None):
    u"""Открытие pc-, терминальной или мобильной сессии. Предварительно выполняет закрытие старой сессии и очистку истории за
    config.SESSION_MAX_HISTORY дней назад по пользователю и виду сессий.
    equip_kind - вид оборудования: 'T'-терминал, 'M'-мобильне устройство, 'P' и другое -PC
    termnum учитывается лишь в случае терминальных и мобильных сессий. Если же он не передан и equip_kind in ('M', 'T'),
        (что реально не происходит), новая сессия не будет открыта, и текст сообщения об ошибке будет
        содержать "Сессия утеряна" (в смысле утери номера терминала).

    """
    #print "%s: session_open" % (time.strftime('%H:%M:%S',time.localtime()))
    error_msg = ''
    old_web_session_id = None

    ses_open=db.dbExec(sql="select * from EQUIP_SESSION_OPEN(?,?,?,?)",
                       params=[uid, equip_kind, termnum, session_id()], fetch='one', id_system=-1)
    # ошибка открытия PC-сессии
    if ses_open['ERROR_CODE'] != 0:
        from py_utils import iif
        error_msg = 'Ошибка открытия %(KIND)s сессии: %(ERROR_MSG)s. UID=%(UID)s, FIO=%(FIO)s' % \
            {'KIND': iif(equip_kind=='T', 'терминальной', iif(equip_kind=='M', 'мобильной', 'PC-')),
             'ERROR_MSG': ses_open['ERROR_MSG'],
             'UID': uid,
             'FIO': fio
            }
    old_web_session_id = ses_open['CLOSED_WEB_SESSION_ID']
    return old_web_session_id, error_msg
예제 #9
0
    def readRelatedDBParamsBySystem(self, system):
        "Читает параметры связанной БД по определенной системе, содержащиеся в строке таблицы ENGINE_SYSTEMS"

        import db
        global systems_params

        # id_system IS INT!!!
        id_system = system['ID_SYSTEM']

        # чтоб можно было вызывать функции чтения параметров в любом порядке
        systems_params.setdefault(id_system, {})

        idParentSystem = db.getIdSystemOfFirstParentFilledIdBase(id_system)
        if idParentSystem is None or idParentSystem == '-1':
            systems_params[id_system]['users_table_name'] = None
            systems_params[id_system]['users_table_id_field'] = None
            systems_params[id_system]['users_table_fio_field'] = None
            systems_params[id_system]['id_base'] = None
            systems_params[id_system]['db_path'] = None
            systems_params[id_system]['db_charset'] = None
        else:
            params = db.dbExec(sql="""select B.ID_BASE, B.DB_PATH, B.DB_CHARSET, B.USERS_TABLE_NAME, B.USERS_TABLE_ID_FIELD, B.USERS_TABLE_FIO_FIELD
                                  from ENGINE_SYSTEMS S
                                    left join ENGINE_BASES B ON S.ID_BASE=B.ID_BASE
                                  where S.ID_SYSTEM=?""",
                          params=(int(idParentSystem),),
                          fetch='one',
                          id_system= -1)
            systems_params[id_system]['users_table_name'] = params['USERS_TABLE_NAME']
            systems_params[id_system]['users_table_id_field'] = params['USERS_TABLE_ID_FIELD']
            systems_params[id_system]['users_table_fio_field'] = params['USERS_TABLE_FIO_FIELD']
            systems_params[id_system]['id_base'] = params['ID_BASE']
            systems_params[id_system]['db_path'] = params['DB_PATH']
            systems_params[id_system]['db_charset'] = params['DB_CHARSET']
예제 #10
0
 def getEmployeeList(self, taskid):
     try:
         mas = []
         task_info = self.dbExec(
             sql="select * from RBS_TASKVIEW_GETSYSTEMID(?)",
             params=[taskid],
             fetch='one')
         data = db.dbExec(sql="select * from RBS_TASKVIEW_ENGUSERS(?)",
                          params=[task_info['ID_SYSTEM']],
                          fetch='all',
                          id_system=-1)
         for item in data['datalist']:
             print data
             dic = {}
             taskamount = self.dbExec(
                 sql='select * from RBS_TASKVIEW_GETEMPLTASK(?,?)',
                 params=[item['IDUSER'], task_info['TTID']],
                 fetch="one")
             for key in taskamount.keys():
                 dic[key] = taskamount[key]
             for key in item.keys():
                 dic[key] = item[key]
             mas.append(dic)
     except Exception, exc:
         return self.pyDumps({'errMes': exc[1]})
예제 #11
0
def hisInsert(object_name, action, data=None):
    u"""Сохранить данные в истории действий по объекту и действию.

    Принимает:
    object_name - имя объекта (таблицы или виртуального объекта)
    action - код действия: 'i' - insert, 'u' - update, 'd' - delete
    data - сохраняемый сериализуемый объект. Для возможности однотипной обработки рекомендуется придерживаться формата словаря:
        {"olds": {"FIELD1": val1, "FIELD2": val2, ...}, "news": {"FIELD1": val1, "FIELD2": val2, ...}},
            где словарик "olds" - старые значения полей (применимо для a in ('d','u')), "news" - новые значения полей (применимо для a in ('i','u'))

    Возвращает словарь вида:
      {'ID_HISTORY': ID_HISTORY, 'LASTDATE': LASTDATE}, где
    ID_HISTORY - ID записи в таблице истории,
    LASTDATE - дата/время добавленной записи

    """
    res = db.dbExec(sql='execute procedure HIS_INSERT(?,?,?)',
                    params=[
                        object_name, action,
                        pu.decodeUStr(json.dumps(data, encoding="cp1251"))
                    ],
                    fetch='none',
                    id_system=-1)

    return pu.kbToPy(res)
예제 #12
0
def verify_user(login, password, pwd_is_hash=False):
    u"""Валидация логина и пароля - возвращает объект usr, который в поле ERROR_CODE содержит код ошибки(0-успех),
    а ERROR_MSG содержит сообщение об ошибки (если она возникла).
    При успешной проверке пользователя/пароля дополнительно в полях ID_USER, FIO, EMAIL, PHONENUMBER, LAYER_ID,
    LANG_CODE, IS_SUPERADMIN возвращаются соответствующие данные.
    Вычисление кэша проводится здесь или в БД в зависимости от параметра AUTH_TYPE.

    """
    from db import dbExec

    if pwd_is_hash:
        calc_hash_in_db = 0
    else:
        password, calc_hash_in_db = pwd_hash(password)

    if getattr(cfg, 'ACCOUNT_NEED_PASSWORD_RESET', False):
        need_password_reset = 1
    else:
        need_password_reset = 0
    usr = dbExec(sql='select * from ENGINE_USER_VERIFY(?,?,?,?)',
                 params=(login, password, calc_hash_in_db,
                         need_password_reset),
                 fetch='one',
                 id_system=-1)
    return usr
예제 #13
0
def hisGet(object_name,
           action,
           datetime_from=None,
           datetime_to=None,
           format_lastdate=None):
    u"""Получить историю действий по объекту и действию за период:

    Принимает:
    object_name - имя объекта (таблицы или виртуального объекта)
    action - код действия: 'i' - insert, 'u' - update, 'd' - delete, None - без фильтра
    datetime_from - дата/время начала запрашиваемого периода (None - бесконечное прошлое) в cтроковом формате '%d.%m.%Y %H:%M:%S' или '%Y-%m-%d %H:%M:%S' или в mxDateTime
    datetime_to - дата/время конца запрашиваемого периода (None - бесконечное будущее)
    format_lastdate - формат поля LASTDATE (None - поле не форматируется в строку, а возвращается типа mxDateTime)

    Возвращает:
    Cписок записей в истории, отсортированный по LASTDATE, содержащий словари вида:
      {'ID_HISTORY': ID_HISTORY, 'ACTION_OUT': ACTION_OUT, 'DATA': DATA, 'LASTDATE': LASTDATE}, где
    ID_HISTORY - ID записи таблицы истории,
    ACTION_OUT - код действия: 'i' - insert, 'u' - update, 'd' - delete. Если action не None, то совпадает с ним.
    DATA - строка в json-формате '{"olds": {"FIELD1": val1, "FIELD2": val2, ...}, "news": {"FIELD1": val1, "FIELD2": val2, ...}}',
        где "olds" - старые значения полей (применимо для a in ('d','u')), "news" - новые значения полей (применимо для a in ('i','u'))
    LASTDATE - дата/время записи в истории

    """
    res = db.dbExec(sql='select * from HIS_GET(?,?,?,?)',
                    params=[object_name, action, datetime_from, datetime_to],
                    fetch='all',
                    id_system=-1)

    if format_lastdate:
        return pu.kbToPy(res, formats={'LASTDATE': format_lastdate})
    else:
        return pu.kbToPy(res)
예제 #14
0
    def index(self, id_system=None):
        u"""Инициализируем параметры системы, в которую вошли.

        """
        #запрет кэширования index
        cherrypy.response.headers["Expires"] = "Mon, 26 Jul 1997 05:00:00 GMT" #Date in the past
        cherrypy.response.headers["Last-Modified"] = "Mon, 26 Jul 1997 05:00:00 GMT" #always modified
        cherrypy.response.headers["Cache-Control"] = "no-cache, must-revalidate" # HTTP/1.1
        cherrypy.response.headers["Pragma"] = "no-cache" # HTTP/1.0

        if id_system is None:
            id_system = getattr(self, 'id_system', None)

            if id_system is None:
                id_system = si.get_id_system()

        if id_system is not None:
            #проверяем на отключенность систему
            dis=db.dbExec(sql="select DISABLED "
                              "from ENGINE_SYSTEMS "
                              "where id_system=? ",
                            params=(id_system,),
                            fetch='one',
                            id_system=-1)
            #print ""
            #print "INDEX: dis=", dis
            #print ""
            #no that system
            if not dis:
                #print ""
                #print "INDEX: gotoIndex. dis=", dis
                #print ""
                #return cpu.goToIndex()
                return cpu.goToError('Подсистема не найдена либо отключена.')
            if dis['DISABLED']:
                #print "dis['DISABLED']=", dis['DISABLED']
                return cpu.goToError('Подсистема временно недоступна.')
                #raise cherrypy.HTTPRedirect("/exception?exception="+
                #    "Система временно недоступна. Попробуйте зайти сюда позже. А пока можно вернуться <a href='javascript:history.back()'>Назад</a>")

            #self.setSesVar("id_system",id_system)
            self.setIfaceVar("id_system", id_system)

            #обновляем сессию, если только система - не список терминальных/мобильных интерфейсов
            if si.get_full_ref_name_by_id_system(id_system) not in (getattr(cfg, 'TERMINAL_link', None),
                                                                    getattr(cfg, 'MOBILE_link', None)):
                error_msg = sessions.session_update(uid=self.getUserVar('uid'), fio=self.getUserVar('userfio'),
                                                    equip_kind=cpu.equipKind(),
                                                    ip_addr=cpu.get_remote_ip(if_proxy='client'),
                                                    user_agent=cpu.getUserAgent(), id_system=id_system)

                # ошибка обновления сессии
                if error_msg:
                    cpu.cherrypylog(error_msg, context='APP.SESSIONS')
                    #return self.drawTemplate(templ=login_index, data=[{'mes': error_msg}, {'langs': cpu.getConfigLangs()}], draw_wo_login=True)
                    if not cpu.isPC():
                        return cpu.goToError(error_msg)
            so.create_sys_options(self.__module__, cfg.options_instances_subdir)

            """d=db.dbExec(sql="select SHOW_NAME,
예제 #15
0
    def readTimeFormatBySystem(self, system):
        "Читает формат времени по определенной системе, содержащейся в строке таблицы ENGINE_SYSTEMS"

        import db
        global systems_params

        # id_system IS INT!!!
        id_system = system['ID_SYSTEM']

        # чтоб можно было вызывать функции чтения параметров в любом порядке
        systems_params.setdefault(id_system, {})

        idParentSystem = self.getIdSystemOfFirstParentFilledTimeFormat(id_system)
        if idParentSystem is None:
            if hasattr(cfg, 'time_format'):
                systems_params[id_system]['time_format'] = cfg.time_format
            else:
                print
                print "WARNING!!! Could not find default Time format for system %s, id=%s" % (systems_params[id_system]['system_ref'], id_system)
                print "Time will not be formatted."
                print
                systems_params[id_system]['time_format'] = time_format #'%d.%m.%y %H:%M:%S'
        else:
            params = db.dbExec(sql="""select S.TIME_FORMAT
                                  from ENGINE_SYSTEMS S
                                  where S.ID_SYSTEM=?""",
                          params=(idParentSystem,),
                          fetch='one',
                          id_system= -1)
            systems_params[id_system]['time_format'] = params['TIME_FORMAT']
예제 #16
0
    def mapAll(self):
        # мэппинг страницы логина
        import db
        from systems.ENGINE.PROFILE.profile import Profile
        from systems.ENGINE.ACCOUNT.account import Account
        from syslogin import SysLogin
        from api.download import Download
        from api.metrics import Metrics

        self.root = SysLogin()
        # у корня id_system ставим -1
        #self.root.id_system = -1

        # мэппинг всех систем
        Systems = db.dbExec(sql="""select "MODULE_NAME",CLASS_NAME,FOLDER_NAME,REF_NAME,ID_SYSTEM,SHOW_NAME,DISABLED
                                   from ENGINE_SYSTEMS
                                   where higher is null
                                     and (no_map = 0 or no_map is null)
                                   order by orderby""",
                            fetch='all',
                            id_system= -1)
        for item in Systems['datalist']:
            self.mapSystem(self.root, item, "systems")

        # мэппинг систем обслуживания
        # Профиль пользователя
        #setattr(self.root, 'PROFILE', Profile())
        self.root.PROFILE = Profile()
        self.root.ACCOUNT = Account()
        self.root.download = Download()
        # мэппинг всех метрик. К этому времени все системы должны быть запаплены,
        # поскольку Metrics рекурсивно просматривает список систем от root
        self.root.ENGINE.METRICS = Metrics(self.enginePath, self.root, self.error_file, self.root.ENGINE.METRICS.id_system)

        return self.root, self.cntSystems, self.cntSuccessSystems
예제 #17
0
    def __init__(self):
        self.regaddon = 0
        self.regaddon_href = '/ADDONS/REGADDON'
        self.regaddon_tmpls = '../systems/ADDONS/REGADDON/templates/'
        self.regaddoninfo = get_mapped_sysinfo(self.regaddon_href)
        self.required_fields = cfg.ACCOUNT_REG_REQUIRED_FIELDS
        self.RegAddon = None
        if len(self.regaddoninfo) > 0:
            from systems.ADDONS.REGADDON.regaddon import RegAddon
            self.regaddon = 1
            self.RegAddon = RegAddon()
            self.RegAddon.regaddoninfo = self.regaddoninfo
            self.RegAddon.href = self.regaddon_href
            # расширение обязательных для заполнения полей
            if self.RegAddon.required_fields:
                self.required_fields += self.RegAddon.required_fields
        # проверим, нужна ли captcha при регистрации
        self.useCaptcha = 0
        res = db.dbExec(sql='select * from CONFIG',
                        params=(),
                        fetch='one',
                        id_system=-1)
        if res['REGCAPTCHA'] == 1: self.useCaptcha = 1

        if si.password_recovery_enabled:
            Account.recovery.im_func.exposed = True
            Account.verifyuser.im_func.exposed = True
            Account.rp.im_func.exposed = True
            Account.rp_drop.im_func.exposed = True
        Account.get_pwd_complexity_status.im_func.exposed = True
        if si.regopen:
            Account.index.im_func.exposed = True
            Account.createaccount.im_func.exposed = True
예제 #18
0
 def getRoles(self):
     try:
         data = db.dbExec(sql="select er.role_name, list(eur.id_user) as id_user\
                                 from engine_roles er\
                                      left join engine_user_roles eur on er.id_role = eur.id_role\
                                group by 1 order by er.role_name", params=[], fetch='all', id_system=-1)
     except FBExc, exc:
         return self.pyDumps({'errMes': exc[1]})
예제 #19
0
 def getSessions(self, uid, dtbeg, dtend, wmsesid, wtype):
     try:
         data = db.dbExec(sql='select * from K_WH_CRWORKER_GETSES(?,?,?,?)',
                          params=[uid, dtbeg, dtend, wtype],
                          fetch='all',
                          id_system=-1)
     except Exception, exc:
         return self.pyDumps({'errMes': exc[1]})
예제 #20
0
 def GetEmployersInfo(self,userid,dtbeg,dtend,objid,wmsesid):
     if not objid: objid = None
     try:
         ses = db.dbExec(sql="select min(s.SES_DTBEG) as dtbeg,max(s.SES_DTEND) as dtend from K_WH_CRWORKER_GETSES(?,?,?,?) s", 
                          params=[userid,dtbeg,dtend,'t'], fetch='one', id_system=-1)
         data = self.dbExec(sql='select * from K_WH_CRSHIFT_SESSIONSUMS(?,?,?,?)',params=[wmsesid,ses['DTBEG'],ses['DTEND'],objid], fetch='one')
     except Exception, exc: return self.pyDumps({'errMes':exc[1]})
     return self.pyDumps(data=data)
예제 #21
0
파일: updater.py 프로젝트: shybkoi/WMS-Demo
 def getUploadFile(self, updateid):
     # try:
     updateid = int(updateid)
     filename = db.dbExec(sql='select FILENAME from UPD_UPDATES where id_update=?', params=(updateid,),\
                             fetch="one", id_system=-1)['FILENAME']
     if not os.access(filename, os.F_OK):
         return self.pyDumps({'errMess': 'File not found on server...'})
     else:
         return serve_file(filename, content_type='application/x-download')
예제 #22
0
 def __init__(self):
     "Прочесть параметры систем из БД Engine"
     import db
     Systems = db.dbExec(sql="""select ID_SYSTEM, SHOW_NAME, SEND_BUG_MAIL, HIGHER, "MODULE_NAME","""
                         """ CLASS_NAME, REF_NAME, NO_MAP from ENGINE_SYSTEMS order by ID_SYSTEM""",
                      fetch='all',
                      id_system= -1)
     for system in Systems['datalist']:
         self.readAllBySystem(system)
예제 #23
0
파일: updater.py 프로젝트: shybkoi/WMS-Demo
    def index(self, id_system=None):
        BasePage.index(self, id_system)
        #raise cherrypy.HTTPRedirect('users')
        #return self.users() - если так, то при F5 чистится сессия, т.к. вызывается self.index
        bases = db.dbExec(
            sql=
            'select B.ID_BASE, B.DBALIAS, B.SHOW_NAME, S.IP from UPD_BASES B '
            '  left join SERVERS S on S.ID_SERVER=B.ID_SERVER '
            'order by B.ORDERBY ',
            params=(),
            fetch='all',
            id_system=-1)
        bases['datalist_bases'] = bases['datalist']
        del bases['datalist']

        modules = db.dbExec(
            sql=
            'select M.ID_MODULES, M.MALIAS, M.SHOW_NAME, S.IP from UPD_MODULES M '
            '  left join SERVERS S on S.ID_SERVER=M.ID_SERVER '
            'order by M.ORDERBY ',
            params=(),
            fetch='all',
            id_system=-1)
        modules['datalist_modules'] = modules['datalist']
        del modules['datalist']

        bond = db.dbExec(
            sql='select BO.ID_BASE, BO.ID_MODULES from UPD_BOND BO ',
            params=(),
            fetch='all',
            id_system=-1)
        bond['datalist_bond'] = bond['datalist']
        del bond['datalist']
        userfio = self.getUserVar('userfio')
        userid = self.getUserVar('uid')
        curtime = str(time.time())
        return self.drawTemplate(templ=updater_tmpl,
                                 data=[
                                     bases, modules, bond, userfio, {
                                         "userid": userid
                                     }, {
                                         "curtime": curtime
                                     }
                                 ])
예제 #24
0
파일: log.py 프로젝트: shybkoi/WMS-Demo
def logGet(class_name, code=None, datetime_from=None, datetime_to=None, uid=None, userfio=None):
    """getting log data by filter (class_name only required):
    ID_LOG, ID_SYSTEM, SYSTEM_DESCRIPT, CLASS_NAME, METHOD_NAME, CODE, DOC_STRING, UID, FIO, DATE_STAMP, PARAMS
    """
    log_system = logGetLOGIdSystem()
    table_name = logGetTableName(class_name)
    return db.dbExec(sql='select * from LOG_GET(?,?,?,?,?,?,?)',
        params=[table_name, str(class_name), code, datetime_from, datetime_to, uid, userfio],
        fetch='all',
        id_system=log_system)
예제 #25
0
 def getEmployeeId(self, dtbeg, dtend):
     try:
         ext_data = {'dtbeg': dtbeg, 'dtend': dtend}
         data = db.dbExec(sql='select * from K_WH_CRWORKER_GET_UID(?,?)',
                          params=[dtbeg, dtend],
                          fetch='all',
                          id_system=-1)
         #data = self.dbExec(sql='select * from k_wh_crworker_getempl_wh1(?,?)', params=[dtbeg,dtend],fetch='all')
     except Exception, exc:
         return self.pyDumps({'errMes': exc[1]})
예제 #26
0
def get_role_users(role_name):
    "По имени роли вернуть список пользователей со всеми их параметрами-полями, взятыми из таблицы ENGINE_USERS"
    return db.dbExec(sql="""select U.* from ENGINE_ROLES R
                                        LEFT JOIN ENGINE_USER_ROLES EUR ON EUR.ID_ROLE=R.ID_ROLE
                                        JOIN ENGINE_USERS U ON EUR.ID_USER=U.ID_USER
                                        WHERE R.ROLE_NAME=?
                                        ORDER BY U.FIO""",
                    params=[role_name],
                    fetch='all',
                    id_system=-1
                    )
예제 #27
0
 def getSystems(self):
     try:
         data = db.dbExec(sql="select list(er.id_user) as id_user,es.show_name\
                                 from ENGINE_FIND_SYSTEM_BY_FULL_REF(?) fr\
                                      left join engine_systems es\
                                           left join engine_rights er on es.id_system = er.id_system\
                                        on fr.id_system = es.higher\
                                group by 2 order by es.show_name ", params=[cfg.TERMINAL_link], fetch='all',
                          id_system=-1)
     except FBExc, exc:
         return self.pyDumps({'errMes': exc[1]})
예제 #28
0
def term_generate_barcode(login):
    "Генерирует ШК по логину и текущей дате/времени и записывает в БД"

    import py_utils as pu
    import datetime_utils as dtu
    import user_init as ui

    # 1.Получаем ШК

    # дополняем 36-ричное число слева нулями до 7 знаков
    if pu.is_x32():
        UUUUUUU = numeral_systems.dec_to_any(
            hash(login + cfg.term_hash_salt) + 2**31, 36).rjust(7,
                                                                '0').upper()
    else:
        UUUUUUU = numeral_systems.dec_to_any(
            hash(login + cfg.term_hash_salt) & (2**32 - 1),
            36).rjust(7, '0').upper()

    now = datetime.datetime.now()
    minutes_dec = dtu.MinutesBetweenDateTimes(dtBegin=datetime.datetime(
        2010, 01, 01, 0, 0),
                                              dtEnd=now)

    TTTTT = numeral_systems.dec_to_any(minutes_dec, 36).rjust(5, '0').upper()

    CCCC = (numeral_systems.dec_to_any(
        crc16.crc16(UUUUUUU + TTTTT + cfg.term_hash_salt),
        16).rjust(4, '0')).upper()

    BC = UUUUUUU + TTTTT + CCCC

    # 2.Сохраняем ШК в БД и одновременно получаем FIO

    from db import dbExec
    dic = dbExec(
        sql='update ENGINE_USERS set BARCODE=? where login=? returning FIO',
        params=(BC, login),
        fetch='one',
        id_system=-1)
    if dic is None:
        raise Exception("Couldn't get FIO by LOGIN: %s" % login)
    FIO = dic['FIO']

    (F, IO) = ui.get_f_io(FIO)
    DATETIME = now.strftime(
        getattr(cfg, 'TERMINAL_GEN_DATE_TIME_FORMAT', '%d.%m.%Y %H:%M'))

    # 3.Возвращаем для печати DATETIME, BC, FIO

    return (DATETIME, BC, F, IO)
예제 #29
0
파일: updater.py 프로젝트: shybkoi/WMS-Demo
    def getCommonReportWhatsNew(self, datein, in_txt=None):
        if (str(datein) == "0"):
            datein = None
        res = db.dbExec(sql="select * from UPD_COMMON_REPORT_WHATSNEW(?)",
                        params=(datein, ),
                        fetch="all",
                        id_system=-1)
        if (in_txt is None):
            return self.pyDumps(res)
        else:

            if (not os.access("../../base", os.F_OK)):
                os.mkdir("../../base")
            if (not os.access("../../base/files", os.F_OK)):
                os.mkdir("../../base/files", os.F_OK)
            if (not os.access("../../base/files/updatereports", os.F_OK)):
                os.mkdir("../../base/files/updatereports")
            filepath = "../../base/files/updatereports/"
            filename = "WhatsNewReport" + self.GetCurDateTime() + ".txt"

            f = open(filepath + filename, "wt")
            systems = {}
            for item in res['datalist']:
                detailStr = "\n\r\t-"+self.StrVal(item['TYPE_NAME'])+": " + \
                                        self.StrVal(item['DESCRIPTION']) + " ("+ self.StrVal(item['DEVELOPER'])+")"
                if (not systems.has_key(item['SYSTEM_NAME'])):
                    systems[item['SYSTEM_NAME']] = [detailStr]
                else:

                    systems[item['SYSTEM_NAME']].append(detailStr)
            if datein is None:
                toDay = datetime.date.today()
                dayTitle = str(toDay.day) + "." + str(toDay.month) + "." + str(
                    toDay.year)
            else:
                dayTitle = self.StrVal(datein)
            for sysitem in systems:
                f.write("\r\n" + self.StrVal(sysitem) + " (за " + dayTitle +
                        "):\n\r")
                for item in systems[sysitem]:

                    f.write(item)
                f.write("\r\n\r\n")
            # f.write(self.StrVal(item['ID_UPDATE'])+"\t"+self.StrVal(item['SYSTEM_NAME'])+"\t"+
            # self.StrVal(item['TYPE_NAME'])+"\t"+self.StrVal(item['DESCRIPTION'])+
            # "\t"+self.StrVal(item['DEVELOPER'])+"\r\n")

            f.close()
            absPath = os.path.abspath(filepath + filename)
            return self.pyDumps({'RES': quote(absPath)})
예제 #30
0
    def __init__(self):
        "Прочесть конфигурационные параметры из engine_conf.py и Engine.FDB"
        import db
        global from_mail_addr, from_mail_user, from_mail_passwd, from_mail_debug_level, send_core_bug_mail, date_time_format, time_format, regopen, password_recovery_enabled

        from_mail_addr = getattr(cfg, 'from_mail_addr', from_mail_addr)
        from_mail_user = getattr(cfg, 'from_mail_user', from_mail_user)
        from_mail_passwd = getattr(cfg, 'from_mail_passwd', from_mail_passwd)
        from_mail_debug_level = getattr(cfg, 'from_mail_debug_level', from_mail_debug_level)
        send_core_bug_mail = getattr(cfg, 'send_core_bug_mail', send_core_bug_mail)
        date_time_format = getattr(cfg, 'date_time_format', date_time_format)
        time_format = getattr(cfg, 'time_format', time_format)
        regopen = bool(db.dbExec(sql='select REGOPEN from CONFIG_SEL', fetch='one', id_system= -1)['REGOPEN'])
        password_recovery_enabled = getattr(cfg, 'ACCOUNT_PASSWORD_RECOVERY_ENABLED', password_recovery_enabled)