Пример #1
0
def test_res_proc():
    from app import Res_proc
    from app import ErrorRun_impl

    try:
        res = []
               

        res_proc = Res_proc()
        s_empty = res_proc.PR_empty
        res_proc.any_str = s_empty
        res_proc.res_dict = dict(par=1)
        res_proc.res_list = [1,2]

        val_dict = res_proc.FN_get_val_dict(dict(par='anyDataDict'), 'par') 
        res.append(val_dict + '; ')

        s_proc = '{0} {1} {2}'.format(res_proc.FN_empty(), res_proc.FN_exist(), res_proc.PR_notRecord )
        res.append('## ' + s_proc)

        res_proc.error = ErrorRun_impl('ValueError##Пробное исключение')

        s_res = str(res_proc)

        res.append(s_res)


        return res
    except Exception as ex:
        return str(ex)
Пример #2
0
    def create_templDict_qust(cls, arg_user, arg_pswcl=None):
        from .serv_sprstatus import Com_proc_sprstatus

        res_proc = Res_proc()

        def run_raise(s_arg, showMes=None):
            s_err = 'advuser.forms.Base_profForm.create_templDict_quest'

            if showMes:
                raise ErrorRun_impl('verify##{0}'.format(s_arg))
            else:
                raise ErrorRun_impl('{0} {1}'.format(s_err, s_arg))

        try:
            _username = ''
            _user = getUser(arg_user)
            if _user is None:
                _username = arg_user
            else:
                _username = _user.username

            logincl = getLogin_cl()
            pswcl = ''
            if arg_pswcl:
                pswcl = arg_pswcl
            else:
                res_pswcl = getPassword_cl()
                if res_pswcl: pswcl = res_pswcl
                else:
                    ErrorRun_impl(
                        'NotData##advuser.forms.Base_profForm.create_templDict_quest пароль не создан'
                    )

            _dict = dict(
                username=logincl,
                first_name='Гость',
                last_name='сайта',
                password=pswcl,
                pswcl=pswcl,
                parentuser=_username,
                status_id=Com_proc_sprstatus.get_status_qust_simp().pk,
                sendMes='false',
                pol='-')

            res_proc.res_dict = _dict

        except Exception as ex:
            res_proc.error = ex

        return res_proc
Пример #3
0
def get_dictData_init_Form_regQuest(user):
    """ Инициализация базовых данных для измПрофиля участПроекта """

    from .serv_advuser import servAdvUser_get_advUser

    res_proc = Res_proc(res=False)
    perm_type = 'User, str, int'
    s_typeUser = type(user).__name__

    # ----------------- инициализация базовых параметров -------------------
    if 2 > 1:
        if user is None:
            res_proc.error = 'modify_models.get_dictData_init_Form_regQuest: user None'
            return res_proc

        if s_typeUser not in perm_type:
            res_proc.error = 'modify_models.get_dictData_init_Form_regQuest: user не соответствие типа'
            return res_proc

        if s_typeUser in ('str', 'int'):
            _user = getUser(user)
            if _user is None:
                res_proc.error = 'modify_models.get_dictData_init_Form_regQuest: user нет в БД'
                return res_proc
            else:
                user = _user

        if user.is_superuser:  # if type_status.is_proj_sadm:
            res_proc.error = 'Профиль superuser не меняется'
            return res_proc

        advuser = servAdvUser_get_advUser(user)
        if advuser is None:
            res_proc.error = 'Для {0} нет данных для профиля'.format(
                user.get_full_name())
            return res_proc

    # ------------- Конец блока инициализации базовых параметров -------------

    dict_models = initDict_allModels(user)

    for key, val in dict_models.items():
        if val == res_proc.PR_empty:
            dict_models[key] = None

    res_proc.res = True
    res_proc.res_dict = dict_models

    return res_proc
Пример #4
0
def sp_modf_data(arg_dc: dict, serv_proc='sp_serv_add_profil'):
    """ Процедура взаимодействия с сервПроцедурой 
    Общая для ВСЕх операций взаимодействия с БД
    """

    from ..com_data.write_exception_into_log import PM_write_except_into_log as write_into_log

    res_proc = Res_proc()
    s_error_not_show = 'verify#app.com_serv_dbase.serv_modf_profil.sp_modf_data'

    try:

        con = getConnection()
        s_dict = json.dumps(arg_dc, ensure_ascii=False)
        with con.cursor() as cur:
            cur.callproc(serv_proc, (s_dict, ))
            res_call = cur.fetchall()[0]

            # возврат из сервПроцедуры в виде select {res:ok/err, mes:ok/strMessage} as res
            # {"mes": "Создан профиль: mysql_test", "res": "ok", "data": {"username": "******", "str_status": "Участник проекта"}}
            # {"mes": "Повторный ввод данных профиля: insert into auth_user", "res": "err"}
            res_call = res_call['res']
            res_call_dc = json.loads(res_call)

            if res_call_dc[
                    'res'] == 'err':  # элемент, созданный в процессе проверки входящих данных
                err = None
                if res_call_dc.get('err'):
                    err = res_call_dc['err']
                else:
                    err = res_call_dc[
                        'mes_error']  # элемент, который используется в блоке обработчика исключений сервПроцедуры

                write_into_log(s_error_not_show, res_call_dc['mes_error'])
                run_raise('Ошибки исходных данных', showMes=True)

            res_data = res_call_dc['data']
            dc = dict(mes=res_call_dc['mes'], data_mes=res_data['mes'])

            res_proc.res_dict = dc
            res_proc.res = True

    except Exception as ex:
        res_proc.error = ex

    return res_proc
Пример #5
0
    def save_status_resume_into_db(self, arg_dict:dict):
        """ Запись изменений статуса в БД при понижении статуса  """
        from app.com_serv_dbase.serv_modf_profil import sp_modf_data

        res_proc = Res_proc()
        try:
            res_sp = sp_modf_data(arg_dict, serv_proc='sp_user_upd_status_reduce')
            if not res_sp:
                res_proc.error = res_sp.error
                return res_proc

            res_proc.res_dict = res_sp.res_dict
            res_proc.res = True

        except Exception as ex:
            res_proc.error = ex        

        return res_proc      
Пример #6
0
    def save_data_status(self, arg_head, arg_session) -> Res_proc:
        """ Процедура на уровне class -> сохранение изменений status_id/limitcon 
        вызывается из views.UpdStatus_user url:updpermuser
        """

        # Структура arg_session
        #lst_lvperm = lst_lvperm,
        #s_limit=s_limit,
        #upd_username=dc_datauser['username'],
        #upd_full_name=dc_datauser['full_name'],
        #upd_status=type_status.strIdent

        res_proc = Res_proc()

        try:

            dc_clean = self.cleaned_data

            user_head = getUser(arg_head)
            user_modf = getUser(arg_session['upd_username'])
            status_head = type_status_user(user_head)

            levelperm_sel = dc_clean['status'].levelperm
            levelperm_head = status_head.levelperm
            levelperm_user_base = type_status_user(user_modf).levelperm

            # Предварительное заполнение dict for update model advUser
            status_id = dc_clean['status'].pk

            dc_servproc = dict(user_modf=user_modf.username,
                               status_id=status_id,
                               status=status_id)

            js_struct = Com_proc_advuser.get_js_struct(user_modf)
            self.clear_data_status(
                js_struct)  # Удаление всех данных, связанных со status.*

            if levelperm_sel < 30:
                if js_struct.get('pswcl'): del js_struct['pswcl']
                if js_struct.get('logincl'): del js_struct['logincl']

            # Блок подготовки данных для сохранения изменений в БД
            if levelperm_sel < levelperm_user_base:  # Понижение привелигий

                user_head70 = Com_proc_advuser.get_head70_user(
                    user_modf).username

                if levelperm_sel == 40:
                    js_struct['limitcon'] = dc_clean['limitcon30']
                    lst = [70, 40]

                elif levelperm_sel in (20, 30):
                    if levelperm_sel == 30:
                        lst = [70, 40, 30]
                    else:
                        lst = [70, 40, 30, 20, 10]

                dc_servproc['js_struct'] = js_struct
                dc_servproc['lst'] = lst
                dc_servproc[
                    'user_head'] = user_head70  # рукГруппы на кого переводить структуру

                res_proc = self.save_status_resume_into_db(dc_servproc)

            # ---------- Конец контента обработки понижения статуса

            # блок обработки повышения статуса или только изменение параметров status.*
            if levelperm_sel > levelperm_user_base or levelperm_sel == levelperm_user_base:

                if levelperm_sel == 40:
                    js_struct['limitcon'] = dc_clean['limitcon30']

                elif levelperm_sel == 70:
                    js_struct.update(
                        dict(
                            limitcon=dc_clean['limitcon'],
                            limitcon40=dc_clean['limitcon40'],
                            limitcon70=dc_clean.get('limitcon70') or 0,
                            user_head=user_head.
                            username  # рукГруппы проводивший изменения профиля
                        ))

                #dc_servproc['advData'] = advData
                dc_servproc['js_struct'] = js_struct

                # Обновление данных через сервис django
                res_sp = self.save_status_into_db(dc_servproc, user_modf)
                if not res_sp:
                    res_proc.error = res_sp.error

                res_proc.res = True
                res_proc.res_dict = dict(
                    mes='Обновлен статус',
                    data_mes=f'Статус {user_modf} обновлен ')

        except Exception as ex:
            res_proc.error = ex

        return res_proc
Пример #7
0
def get_list_prof_memb(arg_user, arg_list=None, num_rows=5, sel_page=1):
    """ Создание списка данных для отображения в шаблоне prof_table_format
    Предназначено для руководителей групп  
    Загрузка данных из БД
    arg_list формат '30,49,70'  строка levelperm
    num_rows кол-во записей в одной странице
    sel_page номер извлекаемой страницы   
    full_show Использование максимальной ширины данных
    """

    from .serv_advuser import Struct_default_AdvUser as Struct_def
    from app.com_serv_dbase.serv_modf_profil import serv_get_data_prof
    import json

    def run_raise(s_arg, showMes=None):
        s_err = 'ValError##advuser.modify_models.get_list_prof_memb'

        if showMes:
            raise ErrorRun_impl('verify##{0}'.format(s_arg))
        else:
            raise ErrorRun_impl('{0}: {1}'.format(s_err, s_arg))

    #---------------------------------------------------------

    res_proc = Res_proc()
    res_list = []

    if arg_list is None:
        arg_list = '30,40,70'

    try:
        user = getUser(arg_user)

        if user is None:
            run_raise('Пользователь не определен', True)

        res_data = serv_get_data_prof(user,
                                      arg_list,
                                      num_rows,
                                      sel_page,
                                      num_count=0)

        res_page = {}
        for item in res_data.res_list:

            _dict = json.loads(item['advData'])

            levelperm = item['levelperm']

            if levelperm == 0:
                res_page = _dict
            else:
                _dict['levelperm'] = levelperm
                _dict['status'] = Struct_def.conv_status_into_str(
                    _dict.get('status_id'))

                _dict['idcomp'] = res_proc.FN_get_val_dict(
                    _dict, 'idcomp') or Struct_def.idcomp
                _dict['email'] = res_proc.FN_get_val_dict(
                    _dict, 'email') or Struct_def.email
                _dict['phone'] = res_proc.FN_get_val_dict(
                    _dict, 'phone') or Struct_def.phone

                _dict['pol'] = Struct_def.conv_pol(_dict.get('pol'))
                _dict['sendMes'] = Struct_def.conv_send_mes(
                    _dict.get('sendMes'))
                _dict['ageGroup'] = res_proc.FN_get_val_dict(
                    _dict, 'ageGroup') or Struct_def.ageGroup
                _dict['post'] = res_proc.FN_get_val_dict(_dict,
                                                         'post') or 'Нет'
                _dict['logincl'] = res_proc.FN_get_val_dict(_dict,
                                                            'logincl') or 'Нет'

                if levelperm > 30:
                    _dict[
                        'status_perm'] = f'Мендж:{_dict.get("limitcon") or 0} '
                    if levelperm == 70:
                        _dict[
                            'status_perm'] = f'Мендж:{_dict.get("limitcon") or 0} РукГр:{_dict.get("limitcon40") or 0} РукГрРасш:{_dict.get("limitcon70") or 0}'

                else:
                    _dict['status_perm'] = 'Не назначено'

                res_list.append(_dict)

        res_proc.res_dict = res_page  # сведения пагинатора

        res_proc.res_list = res_list
        res_proc.res = True

    except Exception as ex:
        res_proc.error = ex

    return res_proc
Пример #8
0
def get_dictData_init_Form(user_head, user_modf):
    """ Процедура выборки данных для редактирования профиля 
    рукГруппы 
    """

    from .serv_typestatus import type_status_user
    from .serv_advuser import Com_proc_advuser

    res_proc = Res_proc(res=False)

    def run_raise(s_arg, showMes=None):
        s_err = 'modify_models.get_dictData_init_Form'

        if showMes:
            raise ErrorRun_impl('verify##{0}'.format(s_arg))
        else:
            raise ErrorRun_impl('{0} {1}'.format(s_err, s_arg))

    # -------------------------------------------------------

    try:
        # ----------------- инициализация базовых параметров -------------------
        user_head = getUser(user_head)
        user_modf = getUser(user_modf)

        if user_head is None or user_modf is None:
            run_raise('user_head or user_modf is None')

        if user_modf.is_superuser:
            run_raise('Профиль суперПользователя не меняется', True)

        if user_modf.username == user_head.username:
            run_raise('Свой профиль изменяется из панели Профиль', True)

        # ------------- Конец блока инициализации базовых параметров -------------

        type_status_modf = type_status_user(user_modf)
        if not type_status_modf:
            run_raise('ошибка из advuser.models.Type_status_userExt(user_modf')

        type_status_head = type_status_user(user_head)
        if not type_status_head:
            run_raise('ошибка из advuser.models.Type_status_userExt(user_head')

        # Профиль изменяется пользователями со статусом subheader, headerexp, proj-head,
        if type_status_modf.levelperm in (10, 20):
            run_raise('Профиль гостевого входа не меняется', True)

        if type_status_modf.levelperm == 100:
            run_raise(
                'Изменение проводятся из панели Профиль под учетной записью рукПроекта',
                True)

        if type_status_head.levelperm < 40:
            run_raise('Нет прав на изменение профиля', True)

        # выборочная верификация прав
        levelperm_modf = type_status_modf.levelperm
        levelperm_head = type_status_head.levelperm

        if levelperm_head == 40 and levelperm_modf >= 40:
            run_raise('Нет прав на изменение профиля рукГруппы', True)
        #if levelperm_head == 70 and levelperm_modf > 69:
        #    run_raise('Нет прав на изменение профиля супер рукГруппы', True)

        # Загрузка данных из user_head.advuser.advData
        advData = Com_proc_advuser.get_advData(user_modf)

        if not advData:
            run_raise('Нет данных для профиля. Обратитесь к рукГруппы', True)

        for key, val in advData.items():
            if val == res_proc.PR_empty:
                advData[key] = None

        res_proc.res = True
        res_proc.res_dict = advData

    except Exception as ex:
        res_proc.error = ex

    return res_proc
Пример #9
0
def restor_data_quest(arg_user):
    from .models import AdvUser
    from .forms import Base_profForm as profForm

    res_proc = Res_proc()

    def run_raise(s_arg, showMes=None):
        s_err = 'advuser.modify_serv.restor_data_quest'

        if showMes:
            raise ErrorRun_impl('verify##{0}'.format(s_arg))
        else:
            raise ErrorRun_impl('{0} {1}'.format(s_err, s_arg))

    # ------------------------------------------------------------

    try:
        logincl = None
        pswcl = None

        _user = getUser(arg_user)
        if _user is None:
            run_raise('arg_user не определен как User')

        # Поиск последней записи гостВхода
        advUser_cl = AdvUser.objects.filter(parentuser=_user.username,
                                            status__levelperm=10)
        if advUser_cl.exists():

            # запись гостВхода найдена -> выборка значений logincl and pswcl
            advUser_cl = advUser_cl.last()
            advData_cl = json.loads(advUser_cl.advData)

            logincl = advUser_cl.user.username
            pswcl = advData_cl.get('pswcl')

            if pswcl is None:

                # Обновление pswcl гостВхода
                res_upd_pswcl = upd_pswcl_quest(logincl)
                if not res_upd_pswcl:
                    run_raise('ошибка обновления pswcl из upd_pswcl_quest')

                pswcl = res_upd_pswcl.any_str

            _dict = dict(logincl=logincl, pswcl=pswcl)

            # Обновление advData
            advUser_user = AdvUser.get_advUser(_user)
            if not advUser_user:
                run_raise('нет данных для advuser ' + _user.username)

            FM_init_advData(advUser_user, _dict)
            advUser_user.save()

            res_proc.res_dict = _dict
            res_proc.res = True

        else:  # продолжение, если запись гостВхода не найдена

            res_templ = profForm.create_templDict_qust(_user)
            if not res_templ:
                run_raise('шаблон templDict_quest не создан')

            dict_templ = res_templ.res_dict
            _dict = dict(logincl=dict_templ['username'],
                         pswcl=dict_templ['pswcl'])

            advUser_user = AdvUser.get_advUser(_user)
            if not advUser_user:
                run_raise('Нет данных advuser для ' + _user.username)

            # Обновление advData
            FM_init_advData(advUser_user, _dict)

            with transaction.atomic():
                advUser_user.save()
                res_addProf = profForm.addProfilUser(dict_templ)
                if not res_addProf:
                    run_raise(
                        'сбой сохранения пакета advUser_user and addProfUser')

            res_proc.res_dict = _dict
            res_proc.res = True

    except Exception as ex:
        res_proc.error = ex

    return res_proc
Пример #10
0
    def get_profil_user(cls, user):
        """ Создание dict профиля """

        from app import Ext_dict
        from .serv_sprstatus import Com_proc_sprstatus

        structDef = Struct_default_AdvUser

        res_proc = Res_proc()

        s_err = 'get_profil_user'

        try:
            user = getUser(user)
            if user is None:
                raise ErrorRun_impl(
                    '{0} нет данных для аргумента user'.format(s_err))

            res_proc.any_str = user.username
            type_status = type_status_user(user)
            res_proc.res_obj = type_status
            """
            imgphoto    = self.imgphoto,
                full_name   = self.full_name,
                status      = self.status,
                idcomp      = self.idcomp
            """
            if user.is_superuser:
                param = dict(
                    imgphoto=cls.get_path_photo(user),
                    full_name='Супер-пользоатель',
                    status=Com_proc_sprstatus.get_status_suadm().strIdent,
                    idcomp=structDef.idcomp)

                _dict = dict(btn_upd=False, param=param, prof=[])
                res_proc.res_dict = _dict
                res_proc.res = True

                return res_proc

            # возврат нулевого статуса
            if not type_status:
                param = dict(
                    imgphoto=cls.get_path_photo('suadm'),
                    full_name='Пользователь не определен',
                    status=Com_proc_sprstatus.get_status_notstatus().strIdent,
                    idcomp=structDef.idcomp)

                _dict = dict(btn_upd=False, param=param, prof=[])

                res_proc.res_obj.levelperm = 20  # чтобы отображение стало как у клиента
                res_proc.res_dict = _dict
                res_proc.res = True

                return res_proc

            # ------------- обработка данных профиля -----------------
            status_strIdent = type_status.strIdent  # structDef.conv_status_into_str(type_status.statusID)
            dict_head = cls.get_dataHeader()
            dict_cons = cls.get_dataCons(user)
            dict_user = cls.get_advData(user)
            dict_user['sendMes'] = structDef.conv_send_mes(
                dict_user.get('sendMes'))

            if dict_cons is None:
                dict_cont = dict_head

            Ext_dict.CL_modify_empty(dict_head)
            Ext_dict.CL_modify_empty(dict_cons)
            Ext_dict.CL_modify_empty(dict_user)

            param = dict(imgphoto=cls.get_path_photo(user),
                         full_name=dict_user.get('full_name'),
                         status=status_strIdent,
                         idcomp=dict_user.get('idcomp') or structDef.idcomp)

            arrayProf = [dict(val=user.username, str='Логин:')]
            if type_status.levelperm < 30:
                arrayProf += [dict(val=dict_user.get('pswcl'), str='Пароль:')]

            # Обработка гостВхода
            if type_status.levelperm < 20:  # гостевой вход или клиент сайта

                arrayProf += [
                    dict(val=dict_cons.get('full_name') or structDef.full_name,
                         str='Личн. консультант:',
                         idrow='parentData'),
                    dict(val=dict_cons.get('phone') or structDef.phone,
                         str='Тел. личн. консультанта:')
                ]

                arrayProf += [
                    dict(val=dict_head.get('full_name') or structDef.full_name,
                         str='Админ. проекта:',
                         idrow='parentData'),
                    dict(val=dict_head.get('phone') or structDef.phone,
                         str='Телефон адмПроекта:')
                ]

            else:  # структура профиля для менеджеров и рукГрупп

                arrayProf += [
                    dict(val=dict_user.get('phone') or structDef.phone,
                         str='Телефон:'),
                    dict(val=dict_user.get('email') or structDef.email,
                         str='email:'),
                    dict(val=dict_user.get('sendMes'), str='Получать сообщ.:'),
                    dict(val=dict_user.get('ageGroup') or structDef.ageGroup,
                         str='ВозрГруппа:'),
                    dict(val=structDef.conv_pol(dict_user.get('pol')),
                         str='Пол:'),
                ]

                if type_status.levelperm > 20:
                    arrayProf += [
                        dict(val=dict_user.get('pswcl') or structDef.pswcl,
                             str='Пароль клиента:',
                             idrow='parentData'),
                        dict(val=dict_user.get('logincl') or structDef.logincl,
                             str='Логин клиента:')
                    ]

                if type_status.levelperm < 100:
                    arrayProf += [
                        dict(val=dict_cons.get('full_name')
                             or structDef.full_name,
                             str='Консультант:',
                             idrow='parentData'),
                        dict(val=dict_cons.get('phone') or structDef.phone,
                             str='Тел. консультанта:'),
                        dict(val=dict_cons.get('email') or structDef.email,
                             str='email консультанта:')
                    ]

                if type_status.levelperm in (40, 70):
                    if type_status.levelperm == 40:
                        arrayProf += [
                            dict(val=dict_user.get('limitcon')
                                 or structDef.limitcon,
                                 str='Лимит подкл.:')
                        ]
                    else:
                        arrayProf += [
                            dict(val=dict_user.get('limitcon')
                                 or structDef.limitcon,
                                 str='Лимит подкл.:'),
                            dict(val=dict_user.get('limitcon40')
                                 or structDef.limitcon,
                                 str='Подкл. рукГр:'),
                            dict(val=dict_user.get('limitcon70')
                                 or structDef.limitcon,
                                 str='Подкл. максУровень:')
                        ]

            res_proc.res_dict = dict(btn_upd=True, param=param, prof=arrayProf)

            res_proc.res = True
            return res_proc

        except Exception as ex:
            res_proc.error = ex

        return res_proc