Пример #1
0
def getFormObjAjax(request):
    '''
    load service_object's form_object
    return: json
    author: Arthur
    '''
    username = request.user.username
    postdata = getPostdata(request)
    result = {}

    if username:
        require_field = ['api_path']
        checker = DataChecker(postdata, require_field)
        if checker.get('status') == 'success':
            flow_uuid = FlowActiveGlobalObject.APIgetUUID(
                postdata.get('api_path'))
            thisQuery = list(
                FlowActive.objects.filter(flow_uuid=flow_uuid,
                                          undeploy_flag=False).values(
                                              'formobject', 'attachment'))
            if len(thisQuery):
                result = thisQuery[0]
                language = get_language()
                app_id = FlowActiveGlobalObject.UUIDSearch(
                    flow_uuid).flow_app_id
                formobject = Translator('formobject', 'active', language,
                                        app_id, None).Do(result['formobject'])
                result['formobject'] = json.dumps(formobject)
        return ResponseAjax(statusEnum.success, _('讀取成功。'),
                            result).returnJSON()
    else:
        error('%s get form_object with no permission' % username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #2
0
def saveDashboardAjax(request):
    '''
    save user's omdashboard setting
    input: request
    return: json
    author: Arthur
    '''
    #Server Side Rule Check
    username = request.user.username
    postdata = getPostdata(request)

    if username:
        require_field = ['content']
        checker = DataChecker(postdata, require_field)
        if checker.get('status') == 'success':
            #static variable
            dashboard = OmDashboard.objects.get_or_create(user=request.user)[0]
            setattr(dashboard, "content", postdata.get('content', ''))
            dashboard.save()
            info('%s update Dashboard success' % username, request)
            return ResponseAjax(statusEnum.success, _('儲存成功')).returnJSON()
        else:
            info('%s update Dashboard error' % username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s update Dashboard with no permission' % username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #3
0
def deleteMessageHistoryAjax(request):
    '''
    create messages content
    input: request
    return: json
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    messagehistory_id_list = postdata.get('messagehistory_id', '')
    action = postdata.get('action', 'delete')
    if messagehistory_id_list:
        if action == 'delete':
            request.user.messagebox_set.filter(
                messagehistory_id__in=messagehistory_id_list).update(
                    delete=True)
            info('%s delete message success.' % request.user.username, request)
            return ResponseAjax(statusEnum.success, _('刪除訊息成功')).returnJSON()
        else:
            request.user.messagebox_set.filter(
                messagehistory_id__in=messagehistory_id_list).update(
                    delete=False)
            return ResponseAjax(statusEnum.success, _('訊息還原成功')).returnJSON()
    else:
        info('%s delete message success.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('找不到訊息資料')).returnJSON()
Пример #4
0
def listMessageHistoryAjax(request):
    '''
    show messages detail list
    input: request
    return: messages content object
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    messages_id = postdata.get('messages_id', None)
    if messages_id is not None:
        box_lst = list(
            request.user.messagebox_set.filter(
                messages_id=messages_id).values_list('id', flat=True))
        result = list(
            MessageHistory.objects.filterformat(
                'id',
                'create_user__nick_name',
                'create_group_name',
                'createtime',
                'messagebox__read',
                'messagehistoryfiles__main_id',
                messagebox__id__in=box_lst,
                messagebox__omuser_id=request.user.id).distinct().order_by(
                    '-createtime'))
        info('%s list message history success.' % request.user.username,
             request)
        return ResponseAjax(statusEnum.success, _('搜尋成功'), result).returnJSON()
    else:
        info('%s list message history error.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('請提供訊息編號')).returnJSON()
Пример #5
0
def saveServiceAjax(request):
    '''
    save manager's service setting
    input: request
    return: json
    author: Arthur
    '''
    #Server Side Rule Check
    username = request.user.username
    postdata = getPostdata(request)

    if username:
        require_field = ['content']
        checker = DataChecker(postdata, require_field)

        if checker.get('status') == 'success':

            #是否存入翻譯
            lan_package = postdata.get('lan_package', None)
            if lan_package:
                FlowActiveGlobalObject.setSysLanDict("service", None,
                                                     lan_package)

            #static variable
            box_object = json.loads(postdata.get('content', ''))
            OmServiceDesign.objects.create(
                content=json.dumps(box_object),
                language_package=json.dumps(
                    FlowActiveGlobalObject.getSysLanDict('service')))

            OmService.objects.all().delete()

            ServiceList = []
            for key in box_object["list"]:
                thisSer = box_object["list"][key]
                if thisSer["type"] == "service":
                    flow_uuid = FlowActiveGlobalObject.APIgetUUID(
                        thisSer['api_path'])
                    ser = OmService(service_id=thisSer['id'],
                                    flow_uuid=flow_uuid,
                                    role=thisSer['setting']['setRole'],
                                    default_value=json.dumps(
                                        thisSer['default_value']))
                    ServiceList.append(ser)

            OmService.objects.bulk_create(ServiceList)

            info('%s update Service success' % username, request)
            return ResponseAjax(statusEnum.success, _('儲存成功。')).returnJSON()
        else:
            info('%s update Service error' % username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s update Service with no permission' % username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #6
0
def composeMessageDetailAjax(request):
    '''
    create messages
    input: request
    return: json
    author: Kolin Hsu
    '''
    result = {}
    postdata = getPostdata(request)
    messagehistory_id = postdata.get('messagehsitory_id', '')
    reply_history = []
    if messagehistory_id:
        display_field = [
            'messages_id__subject', 'content', 'createtime', 'messages_id',
            'create_user_id', 'create_user__nick_name', 'create_group_id',
            'create_group_name', 'delete_users_username', 'receive_groups_name'
        ]
        reply_history = list(
            MessageHistory.objects.filterformat(*display_field,
                                                id=messagehistory_id))[0]
        #取出history members的nick_name(給引用使用)
        receivers = list(
            HistoryMembers.objects.filter(
                messagehistory_id=messagehistory_id).values_list(
                    'user_id__nick_name', flat=True))
        #取出history members的nick_name以及id(給回覆的選單使用)
        reply_users = list(
            HistoryMembers.objects.filter(
                messagehistory_id=messagehistory_id).values(
                    'user_id', 'user_id__nick_name'))
        #取出history groups的name以及id(給回覆的選單使用)
        reply_groups = list(
            HistoryGroups.objects.filter(
                messagehistory_id=messagehistory_id).values(
                    'group_id', 'group_id__name'))
        #把已刪除的使用者以及組織名稱放入陣列中
        if reply_history['delete_users_username']:
            receivers.extend(
                literal_eval(reply_history['delete_users_username']))
        if reply_history['receive_groups_name']:
            receivers.extend(literal_eval(
                reply_history['receive_groups_name']))
        result['reply_users'] = reply_users
        result['reply_groups'] = reply_groups
        result['receivers'] = receivers
    request_user_group_list = list(
        request.user.groups.filter(omgroup__functional_flag=False).values(
            'id', 'name'))
    result['reply_history'] = reply_history
    result['request_user_group_list'] = request_user_group_list
    info('%s load message success.' % request.user.username, request)
    return ResponseAjax(statusEnum.success, _('請求處理成功'), result).returnJSON()
Пример #7
0
def listPositionAjax(request):
    '''
    list position
    input: request
    return: json
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    datatable = postdata.get('datatable',None)
    if datatable:
        #function variable
        field_list=['display_name__icontains','description__icontains']
        query = ''
        #get post data
        postdata = getPostdata(request)
        query = Position.objects.all().values('id','display_name','description')
        result = DatatableBuilder(request, query, field_list)
        info('%s list position success.' % request.user.username,request)
        return JsonResponse(result)
    else:
        result = list(Position.objects.all().values('id','display_name','description'))
        info('%s list position success.' % request.user.username,request)
        return ResponseAjax(statusEnum.success, _('查詢成功'), result).returnJSON()
Пример #8
0
def createPositionAjax(request):
    '''
    create position
    input: request
    return: json
    author: Kolin Hsu
    '''
    #get post data
    postdata = getPostdata(request)
    display_name = postdata.get('display_name','')
    description = postdata.get('description','')
    Position.objects.create(display_name=display_name,description=description)
    info('%s create position success.' % request.user.username,request)
    return ResponseAjax(statusEnum.success, _('建立成功。')).returnJSON()
Пример #9
0
def searchGroupUserAjax(request):
    '''
    list sender
    input: request
    return: json
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    searchkey = postdata.get('searchkey', '')
    field_list = ['groups__id']
    ordercolumn = 'nick_name'
    result = UserSearch(field_list, searchkey, ordercolumn)
    info('%s search users by group success.' % request.user.username, request)
    return ResponseAjax(statusEnum.success, _('請求處理成功'), result).returnJSON()
Пример #10
0
def listFilesAjax(request):
    '''
    list files
    input: request
    return: list
    author: Kolin Hsu
    '''
    if request.user.is_superuser:
        #function variable
        field_list = []
        query = ''
        #server side rule check
        require_field = ['app_name']
        postdata = getPostdata(request)
        checker = DataChecker(postdata, require_field)
        if checker.get('status') == 'success':
            #get post data
            app_name = postdata.get('app_name', '')
            createtime = postdata.get('createtime', '')
            if app_name == 'ommessage':
                field_list = ['file__icontains']
                query = MessageHistoryFiles.objects.filter(
                    delete=False,
                    createtime__lte=createtime).values('file', 'size',
                                                       'createtime', 'main_id')
            if app_name == 'omformflow':
                field_list = ['file__icontains']
                query = OmdataFiles.objects.filter(
                    delete=False,
                    createtime__lte=createtime).values('file', 'size',
                                                       'createtime')
            if field_list or query:
                result = DatatableBuilder(request, query, field_list)
                info('%s list file success.' % request.user.username, request)
                return JsonResponse(result)
            else:
                info('%s list file error.' % request.user.username, request)
                return ResponseAjax(statusEnum.not_found,
                                    _('請提供正確的APP名稱。')).returnJSON()
        else:
            info(
                '%s missing some require variable or the variable type error.'
                % request.user.username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s has no permission.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #11
0
def searchSendGroupAjax(request):
    '''
    list sender
    input: request
    return: json
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    searchkey = postdata.get('searchkey', '')
    adGroup = postdata.get('adGroup', ['1', '0'])
    field_list = ['name__icontains']
    ordercolumn = 'name'
    result = GroupSearch(field_list, searchkey, ordercolumn, adGroup)
    info('%s search send group success.' % request.user.username, request)
    return ResponseAjax(statusEnum.success, _('請求處理成功'), result).returnJSON()
Пример #12
0
def updateOrganizationAjax(request):
    '''
    update organization
    input: request
    return: json
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    org_str = postdata.get('org','{}')
    o = Organization.objects.filter(name='organization')
    if o:
        o.update(value=org_str)
    else:
        Organization.objects.create(name='organization',value=org_str)
    setOrgToGlobal(org_str)
    info('%s update organization success.' % request.user.username,request)
    return ResponseAjax(statusEnum.success, _('更新成功。')).returnJSON()
Пример #13
0
def getDiskStatusAjax(request):
    '''
    check server disk space enough or not
    input: request
    return: boolean
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    file_size = int(postdata.get('file_size', '0'))
    disk_obj = shutil.disk_usage("/")
    disk_free = disk_obj.free // (2**20)
    if disk_free - file_size > 10:
        result = True
    else:
        result = False
    info('%s get disk status success.' % request.user.username, request)
    return ResponseAjax(statusEnum.success, _('查詢成功。'), result).returnJSON()
Пример #14
0
def importTranslationAjax(request):
    '''
    import service language package
    input: request
    return: json
    author: Arthur
    '''
    #function variable
    require_field = ['language']
    #server side rule check
    postdata = getPostdata(request)
    language_str = postdata.get('language_list', '')
    language = postdata.get('language', '')
    checker = DataChecker(postdata, require_field)
    if checker.get('status') == 'success':
        #wa = WorkspaceApplication.objects.get(id=app_id)
        #language_dict = json.loads(wa.language_package)
        max = OmServiceDesign.objects.all().aggregate(Max('id')).get('id__max')
        this_service = OmServiceDesign.objects.get(id=max)
        language_dict = json.loads(this_service.language_package)

        temp_dict = {}
        language_list = language_str.split('\r\n')
        for line in language_list:
            if line:
                sp_index = line.find(':')
                if line[:sp_index] == 'original':
                    key = line[sp_index + 1:]
                else:
                    temp_dict[key] = line[sp_index + 1:]
        language_dict[language] = temp_dict
        language_str = json.dumps(language_dict)
        this_service.language_package = language_str
        this_service.save()
        #set global
        FlowActiveGlobalObject.setSysLanDict("service", language, temp_dict)
        info('%s import language package success.' % request.user.username,
             request)
        return ResponseAjax(statusEnum.success, _('匯入成功。')).returnJSON()
    else:
        info(
            '%s missing some require variable or the variable type error.' %
            request.user.username, request)
        return ResponseAjax(statusEnum.not_found, checker.get('message', ''),
                            checker).returnJSON()
Пример #15
0
def deleteFilesAjax(request):
    '''
    delete files
    input: request
    return: status
    author: Kolin Hsu
    '''
    if request.user.is_superuser:
        #server side rule check
        require_field = ['app_name', 'path']
        postdata = getPostdata(request)
        checker = DataChecker(postdata, require_field)
        if checker.get('status') == 'success':
            #get post data
            app_name = postdata.get('app_name', '')
            path_list = postdata.get('path', '')
            if app_name == 'ommessage':
                for path in path_list:
                    file_path = os.path.join(settings.MEDIA_ROOT, path)
                    if os.path.isfile(file_path):
                        os.remove(file_path)
                        messagehistoryfile = MessageHistoryFiles.objects.get(
                            file=path)
                        messagehistoryfile.delete = True
                        messagehistoryfile.save()
            elif app_name == 'omformflow':
                for path in path_list:
                    file_path = os.path.join(settings.MEDIA_ROOT, path)
                    if os.path.isfile(file_path):
                        os.remove(file_path)
                        omdatafiles = OmdataFiles.objects.get(file=path)
                        omdatafiles.delete = True
                        omdatafiles.save()
            info('%s delete file success.' % request.user.username, request)
            return ResponseAjax(statusEnum.success, _('刪除成功。')).returnJSON()
        else:
            info(
                '%s missing some require variable or the variable type error.'
                % request.user.username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s has no permission.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #16
0
def listHistoryMissionAjax(request):
    '''
    list my groups missions.
    input: request
    return: json
    author: Kolin Hsu
    '''
    #get post data
    postdata = getPostdata(request)
    updatetime_str = postdata.get('updatetime', '')
    updatetime = updatetime_str.split(',')
    group_id = postdata.get('group_id', '')
    field_list = [
        'title__icontains', 'flow_name__icontains', 'status__icontains',
        'create_user__nick_name__icontains'
    ]
    display_field = [
        'flow_name', 'flow_uuid', 'title', 'create_user_id__nick_name',
        'data_id', 'data_no', 'updatetime', 'assign_group_id',
        'assign_group_id__display_name', 'assignee_id__nick_name', 'attachment'
    ]
    if group_id:
        username_list = list(
            OmUser.objects.filter(groups__id=group_id,
                                  delete=False).values_list('username',
                                                            flat=True))
        query = Missions.objects.filter(
            Q(update_user_id__in=username_list)
            & Q(updatetime__range=updatetime) & Q(history=True)
            & Q(is_active=True) & Q(deploy_flag=True)).values(*display_field)
    else:
        query = Missions.objects.filter(
            Q(update_user_id=request.user.username)
            & Q(updatetime__range=updatetime) & Q(history=True)
            & Q(is_active=True) & Q(deploy_flag=True)).values(*display_field)
    result = DatatableBuilder(request, query, field_list)

    #載入語言包
    language = get_language()
    result['data'] = Translator('datatable_multi_app', 'active', language,
                                None, None).Do(result['data'])

    info('%s list MissionHistory success.' % request.user.username, request)
    return JsonResponse(result)
Пример #17
0
def listMessagesAjax(request):
    '''
    show all messages list
    input: request
    return: messages object
    author: Kolin Hsu
    '''
    mes_box = getPostdata(request).get('mes_box', 'Inbox')
    field_list = ['messages_id__subject__icontains']
    if mes_box == 'Inbox':
        display_field = [
            'messages_id', 'messages_id__subject', 'createtime', 'id',
            'create_group__name', 'create_user__nick_name', 'messagebox__read',
            'messagehistoryfiles__main_id', 'content'
        ]
        messages_query = MessageHistory.objects.filterformat(
            *display_field,
            messagebox__omuser_id=request.user.id,
            messagebox__delete=False).exclude(
                create_user_id=request.user.id).distinct()
    elif mes_box == 'Sent':
        display_field = [
            'messages_id', 'messages_id__subject', 'createtime', 'id',
            'create_group__name', 'create_user__nick_name', 'messagebox__read',
            'messagehistoryfiles__main_id', 'content'
        ]
        messages_query = MessageHistory.objects.filterformat(
            *display_field,
            messagebox__omuser_id=request.user.id,
            create_user_id=request.user.id,
            messagebox__delete=False).distinct()
    elif mes_box == 'Trash':
        display_field = [
            'messages_id', 'messages_id__subject', 'createtime', 'id',
            'create_group__name', 'create_user__nick_name', 'messagebox__read',
            'messagehistoryfiles__main_id', 'content'
        ]
        messages_query = MessageHistory.objects.filterformat(
            *display_field,
            messagebox__omuser_id=request.user.id,
            messagebox__delete=True).distinct()
    result = DatatableBuilder(request, messages_query, field_list)
    info('%s list message success.' % request.user.username, request)
    return JsonResponse(result)
Пример #18
0
def createMessagesAjax(request):
    '''
    create messages
    input: request
    return: json
    author: Kolin Hsu
    '''
    #取得post資料
    postdata = getPostdata(request)
    subject = postdata.get('subject', '')
    if subject:
        #建立一筆新的messages
        messages = Messages.objects.create(subject=subject)
        #建立MessageHistory
        info('%s create message success.' % request.user.username, request)
        return createMessageHistoryAjax(request, messages.id)
    else:
        info('%s create message error.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('提供資料格式有誤')).returnJSON()
Пример #19
0
def deletePositionAjax(request):
    '''
    delete position
    input: request
    return: json
    author: Kolin Hsu
    '''
    #function variable
    require_field = ['id']
    #server side rule check
    postdata = getPostdata(request)
    checker = DataChecker(postdata, require_field)
    #get post data
    id_list = postdata.get('id','')
    if checker.get('status') == 'success':
        Position.objects.filter(id__in=id_list).delete()
        info('%s update position success.' % request.user.username,request)
        return ResponseAjax(statusEnum.success, _('刪除成功。')).returnJSON()
    else:
        info('%s missing some require variable or the variable type error.' % request.user.username,request)
        return ResponseAjax(statusEnum.not_found, checker.get('message'), checker).returnJSON()
Пример #20
0
def updatePositionAjax(request):
    '''
    update position
    input: request
    return: json
    author: Kolin Hsu
    '''
    #function variable
    require_field = ['id']
    #server side rule check
    postdata = getPostdata(request)
    checker = DataChecker(postdata, require_field)
    #get post data
    pos_id = postdata.get('id','')
    display_name = postdata.get('display_name','')
    description = postdata.get('description','')
    if checker.get('status') == 'success':
        Position.objects.filter(id=pos_id).update(display_name=display_name,description=description)
        info('%s update position success.' % request.user.username,request)
        return ResponseAjax(statusEnum.success, _('更新成功。')).returnJSON()
    else:
        info('%s missing some require variable or the variable type error.' % request.user.username,request)
        return ResponseAjax(statusEnum.not_found, checker.get('message'), checker).returnJSON()
Пример #21
0
def SubQueryHeaderAjax(request):
    '''
    list omdata for subquery.
    input: request
    return: json
    author: Kolin Hsu
    '''
    #function variable
    display_field_list = [
        'id', 'data_no', 'stop_uuid', 'stop_chart_text', 'error',
        'error_message', 'closed', 'running'
    ]
    #get post data
    postdata = getPostdata(request)
    app_name = postdata.get('app_name', '')
    flow_name = postdata.get('flow_name', '')
    condition = postdata.get('condition', [])
    service_id = postdata.get('service_id', [])
    flowactive = FlowActiveGlobalObject.NameSearch(flow_name, None, app_name)
    flow_uuid = flowactive.flow_uuid.hex

    if True:
        #get field setting
        display_field_dict = json.loads(flowactive.display_field)
        for key in display_field_dict:
            if '-' in key:
                key = 'group'
            if key == 'create_user_id' or key == 'create_user':
                key = 'create_user_id__nick_name'
            elif key == 'update_user_id' or key == 'update_user':
                key = 'update_user_id__nick_name'
            display_field_list.append(key)
        search_field_list = display_field_list.copy()
        #暫時先使用display_field當作search_field
        field_list = list(
            map(lambda search_field: search_field + '__icontains',
                search_field_list))

        #sp conditions
        search_conditions = [{
            'column': 'history',
            'condition': '=',
            'value': False
        }]
        exclude_conditions = []
        for con in condition:
            if con['condition'] == '!=':
                con['condition'] = '='
                exclude_conditions.append(con)
            elif con['condition'] == 'exclude':
                con['condition'] = 'contains'
                exclude_conditions.append(con)
            else:
                search_conditions.append(con)

        sc = searchConditionBuilder(search_conditions)
        ec = searchConditionBuilder(exclude_conditions)
        #get model
        omdata_model = getModel('omformmodel', 'Omdata_' + flow_uuid)
        if ec:
            query = omdata_model.objects.filter(
                reduce(operator.and_,
                       sc)).exclude(reduce(operator.and_,
                                           ec)).values(*display_field_list)
        else:
            query = omdata_model.objects.filter(reduce(
                operator.and_, sc)).values(*display_field_list)

        result = DatatableBuilder(request, query, field_list)

        #轉換字與值
        result['data'] = datatableValueToText(result['data'], flow_uuid)

        #載入語言包
        language = get_language()
        result['data'] = Translator('datatable_single_app', 'active', language,
                                    flowactive.flow_app_id,
                                    None).Do(result['data'])

        info(request, '%s list OmData success.' % request.user.username)
        return JsonResponse(result)
    else:
        info('%s has no permission.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #22
0
def loadLSideAjax(request):
    '''
    load left side bar design json for request user
    input: request
    return: json
    author: Kolin Hsu
    '''
    #function variable
    require_field = ['draw_$']
    mission = []
    sidebar = []
    request.session.set_expiry(130)
    #server side rule check
    postdata = getPostdata(request)
    data_checker = DataChecker(postdata, require_field)
    if data_checker.get('status') == 'success':
        if settings.OMFLOW_TYPE == 'collector':
            result = {'sidebar': sidebar, 'mission': mission}
        else:
            #get mission
            group_id_list = list(request.user.groups.all().values_list(
                'id', flat=True))
            level_list = list(
                Missions.objects.filter((Q(assignee_id=request.user.id) | (Q(
                    assign_group_id__in=group_id_list) & Q(assignee_id=None)))
                                        & Q(history=False) & Q(is_active=True)
                                        & Q(deploy_flag=True)).values_list(
                                            'level', flat=True))
            green = 0
            red = 0
            yellow = 0
            for i in level_list:
                if i == 'green':
                    green += 1
                elif i == 'yellow':
                    yellow += 1
                elif i == 'red':
                    red += 1
                elif i == None or i == '':
                    green += 1
            mission.append(red)
            mission.append(yellow)
            mission.append(green)
            #get sidebar
            draw = int(postdata.get('draw_$', ''))
            sidebar_design = GlobalObject.__sidebarDesignObj__[
                'sidebar_design']
            if draw == 1:
                reviseLside(request, sidebar, sidebar_design)
            else:
                #get session object
                lside_design = request.session.get('lside_design', '')
                session_updatetime = request.session.get(
                    'design_updatetime', '')
                #get global object
                design_updatetime = GlobalObject.__sidebarDesignObj__[
                    'design_updatetime']
                permission_updatetime = GlobalObject.__sidebarDesignObj__[
                    'permission_updatetime']
                #compare updatetime
                if session_updatetime < str(
                        design_updatetime) or session_updatetime < str(
                            permission_updatetime):
                    #compare two json array equal or not
                    if lside_design != sidebar_design:
                        reviseLside(request, sidebar, sidebar_design)
                    else:
                        sidebar = ''
                else:
                    sidebar = ''

            #載入語言包
            language = get_language()
            if isinstance(sidebar, list):
                trans_sidebar_str = json.dumps(sidebar)
                trans_sidebar = json.loads(trans_sidebar_str)
                for s in trans_sidebar:
                    app_id = None
                    sidebar_id = s['id']
                    if 'app-' in sidebar_id:
                        app_id = sidebar_id[4:]
                    elif 'formflow-' in sidebar_id:
                        app_id = s['p_id'][4:]
                    if app_id:
                        s['name'] = Translator('single_app', 'active',
                                               language, app_id,
                                               None).Do(s['name'])
            else:
                trans_sidebar = sidebar

            result = {'sidebar': trans_sidebar, 'mission': mission}
        info('%s load LSide success.' % request.user.username, request)
        return ResponseAjax(statusEnum.success, _('讀取成功。'),
                            result).returnJSON()
    else:
        info(
            '%s missing some require variable or the variable type error.' %
            request.user.username, request)
        return ResponseAjax(statusEnum.not_found, data_checker.get('message'),
                            data_checker).returnJSON()
Пример #23
0
def restapi(request, url):
    '''
    omflow api home page
    input: request
    return: json
    author: Kolin Hsu
    '''
    #check url
    try:
        if url[-1] == '/':
            new_url = '/' + url
        else:
            new_url = '/' + url + '/'
        module_name = resolve(new_url).func.__module__
        method = resolve(new_url).url_name
        kwargs = resolve(new_url).kwargs
        params = []
        for k in kwargs:
            params.append(kwargs[k])
    except:
        return ResponseAjax(statusEnum.no_permission,
                            _('URL錯誤,請確認後重新發送請求。')).returnJSON()
    #get post data
    postdata = getPostdata(request)
    security = postdata.get('security', '')
    omflow_restapi = postdata.get('omflow_restapi', '')
    if omflow_restapi:
        #postdata = inputJson.get('postdata', '')
        if security is not None:
            securityObj = GlobalObject.__securityObj__.get(security)
            if securityObj is not None:
                #check security expired or not
                expired_datetime = securityObj['updatetime'] + timedelta(
                    minutes=5)
                if datetime.now() < expired_datetime:
                    #get user name and password
                    username = securityObj['username']
                    #update security expired_datetime
                    GlobalObject.__securityObj__[security][
                        'updatetime'] = datetime.now()
                    GlobalObject.__userObj__[
                        username] = GlobalObject.__securityObj__[security]
                    #user login
                    user = OmUser.objects.get(username__icontains=username)
                    auth.login(request, user)
                    #to real function
                    module = import_module(module_name)
                    if params:
                        output = getattr(module, method)(request, *params)
                    else:
                        output = getattr(module, method)(request)
                    #logout user when api down
                    auth.logout(request)
                    return output
                else:
                    return ResponseAjax(statusEnum.no_permission,
                                        _('安全碼過期,請重新取得新的安全碼。')).returnJSON()
            else:
                return ResponseAjax(statusEnum.no_permission,
                                    _('安全碼錯誤,請確認安全碼或重新取得新的安全碼。')).returnJSON()
        else:
            return ResponseAjax(statusEnum.no_permission,
                                _('缺少安全碼。')).returnJSON()
    else:
        return ResponseAjax(statusEnum.no_permission,
                            _('缺少參數:') + 'omflow_restapi').returnJSON()
Пример #24
0
def createMessageHistoryAjax(request, *args):
    '''
    create messages content
    input: request
    return: json
    author: Kolin Hsu
    '''
    #預設變數
    create_box_id_lst = []
    create_group_name = ''
    create_user_username = ''
    receive_users_id_lst = ''
    receive_groups_id_lst = ''
    receive_groups_name = ''
    #取得post資料
    postdata = getPostdata(request)
    messages_id = postdata.get('messages_id', '')
    content = postdata.get('content', '')
    files = request.FILES.getlist('attachment[]', '')
    try:
        create_user_id = int(postdata.get('create_user_id'))
    except:
        create_user_id = None
    create_group_id = postdata.get('create_group_id', None)
    receive_users_id_str = postdata.get('receive_users_id_lst', '')
    if receive_users_id_str:
        receive_users_id_lst = receive_users_id_str.split(',')
        receive_users_id_lst = list(map(int, receive_users_id_lst))
    receive_groups_id_str = postdata.get('receive_groups_id_lst', '')
    if receive_groups_id_str:
        receive_groups_id_lst = receive_groups_id_str.split(',')
    if not messages_id:
        messages_id = args[0]
    if (create_user_id
            or create_group_id) and (receive_users_id_lst
                                     or receive_groups_id_lst) and messages_id:
        #將寄件人放入box_list中
        if create_user_id:
            create_box_id_lst.append(create_user_id)
            create_user_username = OmUser.objects.get(
                id=create_user_id).username
        #將寄件群組放入box_list中
        if create_group_id:
            create_group = Group.objects.get(id=create_group_id)
            create_group_user_list = list(
                create_group.user_set.all().values_list('id', flat=True))
            create_box_id_lst += create_group_user_list
            create_group_name = create_group.name
        #將收件人放入box_list中
        if receive_users_id_lst:
            create_box_id_lst += receive_users_id_lst
        #將收件群組放入box_list中
        if receive_groups_id_lst:
            for receive_group_id in receive_groups_id_lst:
                receive_omgroup_user_list = list(
                    Group.objects.get(
                        id=receive_group_id).user_set.all().values_list(
                            'id', flat=True))
                receive_groups_name = list(
                    Group.objects.filter(
                        id__in=receive_groups_id_lst).values_list('name',
                                                                  flat=True))
                create_box_id_lst += receive_omgroup_user_list
        #進行list的去重複
        distinct_box_lst = list(set(create_box_id_lst))
        #建立一筆新的messagehistory
        messagehistory = MessageHistory.objects.create(
            create_user_id=create_user_id,
            create_user_username=create_user_username,
            create_group_id=create_group_id,
            create_group_name=create_group_name,
            receive_groups_name=receive_groups_name,
            content=content,
            messages_id=messages_id)
        message = Messages.objects.get(id=messages_id)
        message.save()
        #儲存上傳的檔案
        if files:
            MessageHistoryFiles.objects.bulk_create([
                MessageHistoryFiles(main=messagehistory,
                                    file=file,
                                    size=file.size) for file in files
            ])
        #list中的所有人都建立一筆MessageBox
        MessageBox.objects.bulk_create([
            MessageBox(messagehistory=messagehistory,
                       messages_id=messages_id,
                       omuser_id=n) for n in distinct_box_lst
        ])
        #建立history members
        if receive_users_id_lst:
            if create_user_id and (create_user_id not in receive_users_id_lst):
                receive_users_id_lst.append(create_user_id)
            HistoryMembers.objects.bulk_create([
                HistoryMembers(messagehistory=messagehistory, user_id=n)
                for n in receive_users_id_lst
            ])
        #建立history groups
        if receive_groups_id_lst:
            HistoryGroups.objects.bulk_create([
                HistoryGroups(messagehistory=messagehistory, group_id=n)
                for n in receive_groups_id_lst
            ])
        #將creator已讀設置為true
        if create_user_id:
            create_user_box = MessageBox.objects.get(
                messagehistory=messagehistory,
                messages_id=messages_id,
                omuser_id=create_user_id)
            create_user_box.read = True
            create_user_box.save()
        info('%s send message success.' % request.user.username, request)
        return ResponseAjax(statusEnum.success, _('發送成功')).returnJSON()
    else:
        info('%s send message error.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('提供資料格式有誤')).returnJSON()
Пример #25
0
def loadMessageHistoryAjax(request):
    '''
    load messages content
    input: request
    return: messagehistory object
    author: Kolin Hsu
    '''
    postdata = getPostdata(request)
    messagehistory_id = postdata.get('messagehistory_id', '')
    if messagehistory_id:
        result = {}
        try:
            mes_box = request.user.messagebox_set.get(
                messagehistory_id=messagehistory_id)
        except:
            mes_box = None
        if mes_box:
            #取出歷史訊息
            mes_his = list(
                MessageHistory.objects.filterformat('create_user__username',
                                                    'create_user_id',
                                                    'create_user__nick_name',
                                                    'create_group_name',
                                                    'createtime',
                                                    'content',
                                                    'messages_id',
                                                    'messages_id__subject',
                                                    'delete_users_username',
                                                    'receive_groups_name',
                                                    id=messagehistory_id))[0]
            mes_his['createtime'] = mes_his['createtime']
            #取出附件
            files = list(
                MessageHistoryFiles.objects.filter(
                    main_id=messagehistory_id).values('file', 'size',
                                                      'delete'))
            for file in files:
                file_path = os.path.join(settings.MEDIA_ROOT, file['file'])
                if not file['delete'] and not os.path.exists(file_path):
                    file['delete'] = True
                    file_obj = MessageHistoryFiles.objects.get(
                        file=file['file'])
                    file_obj.delete = True
                    file_obj.save()
            mes_his['files'] = files
            #取出history members的nick_name
            receivers = list(
                HistoryMembers.objects.filter(
                    messagehistory_id=messagehistory_id).values_list(
                        'user_id__nick_name', flat=True))
            #把已刪除的使用者以及組織名稱放入陣列中
            if mes_his['delete_users_username']:
                receivers.extend(literal_eval(
                    mes_his['delete_users_username']))
            if mes_his['receive_groups_name']:
                receivers.extend(literal_eval(mes_his['receive_groups_name']))
            #將box更改為已讀
            if not mes_box.read:
                mes_box.read = True
                mes_box.save()
            result['messagehistory'] = mes_his
            result['receivers'] = receivers
            info('%s load message history success.' % request.user.username,
                 request)
            return ResponseAjax(statusEnum.success, _('搜尋成功'),
                                result).returnJSON()
        else:
            return ResponseAjax(statusEnum.no_permission,
                                _('您沒有權限進行此操作。')).returnJSON()
    else:
        info('%s load message error.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('請提供訊息編號')).returnJSON()
Пример #26
0
def updateGridAjax(request):
    '''
    update grid information
    input: request
    return: json
    author: Arthur
    '''
    username = request.user.username
    postdata = getPostdata(request)

    #判斷必填
    require_field = ['content']
    checker = DataChecker(postdata, require_field)
    result = {}
    result["labels"] = []
    result["dataset"] = []

    if username and checker.get('status') == 'success':
        #static variable
        error_message = ""
        QueryJson = json.loads(postdata.get('content'))

        #         QueryJson = {
        #             "type":"word",
        #             "form":"OmUser_View",
        #             "column":[
        #                     {
        #                         "column":"department",
        #                         "value":"max"
        #                     },
        #                 ],
        #             "time_range":"this_year",
        #             #"groupby":["gender"],
        #             "orderby":[]
        #         }
        #thisQuery = OmUser.objects.filter(updatetime__lte=datetime.date.today()).aggregate(**{"max":Max("department")})

        has_group = False
        if "groupby" in QueryJson:
            for key in QueryJson["groupby"]:
                if len(key):
                    has_group = True

        gte_list = []
        lt_list = []
        #判斷圖片類型

        if "type" in QueryJson and "form" in QueryJson:
            #判斷時間格式
            if "time_range" in QueryJson:
                today = datetime.datetime.today().replace(hour=0,
                                                          minute=0,
                                                          second=0,
                                                          microsecond=0)
                #print(today.strftime("%Y-%m-%d %H:%M:%S"))
                if QueryJson["time_range"] == "today":
                    gte_list.append(today)
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(hours=1))
                    #print((gte_list[0] + datetime.timedelta(hours=1)).strftime("%Y-%m-%d %H:%M:%S"))
                    result["labels"].append('00:00')
                    for i in range(23):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] +
                                       datetime.timedelta(hours=1))

                        result["labels"].append(switch00(i + 1) + ':00')
                    #else:
                    #lt_list.appecnd(gte_list[0] + datetime.timedelta(days=1))
                    #result["labels"].append(_('今日'))
                elif QueryJson["time_range"] == "yesterday":
                    gte_list.append(today - datetime.timedelta(days=1))
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(hours=1))
                    result["labels"].append('00:00')
                    for i in range(23):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] +
                                       datetime.timedelta(hours=1))
                        result["labels"].append(switch00(i + 1) + ':00')
                    #else:
                    #lt_list.append(today)
                    #result["labels"].append(_('昨日'))
                elif QueryJson["time_range"] == "this_week":
                    gte_list.append(today -
                                    datetime.timedelta(days=today.weekday()))
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(days=1))
                    result["labels"].append(translateW(1))
                    for i in range(6):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] + datetime.timedelta(days=1))
                        result["labels"].append(translateW(i + 2))
                    #else:
                    #lt_list.append(today + datetime.timedelta(days=-today.weekday(), weeks=1))
                    #result["labels"].append(_('本周'))
                elif QueryJson["time_range"] == "last_week":
                    gte_list.append(
                        today -
                        datetime.timedelta(days=today.weekday(), weeks=1))
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(days=1))
                    result["labels"].append(translateW(1))
                    for i in range(6):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] + datetime.timedelta(days=1))
                        result["labels"].append(translateW(i + 2))
                    #else:
                    #lt_list.append(today - datetime.timedelta(days=today.weekday()))
                    #result["labels"].append(_('上周'))
                elif QueryJson["time_range"] == "this_month":
                    gte_list.append(today.replace(day=1))
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(days=1))
                    result["labels"].append(
                        str(gte_list[0].month) + '/' + str(gte_list[0].day))
                    for i in range(monthrange(today.year, today.month)[1] - 1):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] + datetime.timedelta(days=1))
                        result["labels"].append(
                            str(lt_list[i].month) + '/' + str(lt_list[i].day))
                    #else:
                    #lt_list.append(gte_list[0] + datetime.timedelta(days=monthrange(gte_list[0].year, gte_list[0].month)[1]))
                    #result["labels"].append(_('今月'))
                elif QueryJson["time_range"] == "last_month":
                    if today.month == 1:
                        gte_list.append(today.replace(
                            day=1, month=switchM(today.month - 1)),
                                        year=today.year - 1)
                    else:
                        gte_list.append(
                            today.replace(day=1,
                                          month=switchM(today.month - 1)))
                    #if has_group:
                    lt_list.append(gte_list[0] + datetime.timedelta(days=1))
                    result["labels"].append(
                        str(gte_list[0].month) + '/' + str(gte_list[0].day))
                    for i in range(
                            monthrange(today.year, switchM(today.month -
                                                           1))[1] - 1):
                        gte_list.append(lt_list[i])
                        lt_list.append(lt_list[i] + datetime.timedelta(days=1))
                        result["labels"].append(
                            str(lt_list[i].month) + '/' + str(lt_list[i].day))
                    #else:
                    #lt_list.append(today.replace(day=1))
                    #result["labels"].append(_('上月'))
                elif QueryJson["time_range"] == "this_year":
                    gte_list.append(today.replace(day=1, month=1))
                    #if has_group:
                    lt_list.append(gte_list[0].replace(month=2))
                    result["labels"].append(translateM(1))
                    for i in range(11):
                        gte_list.append(lt_list[i])
                        result["labels"].append(translateM(i + 2))
                        if i != 11:
                            lt_list.append(
                                lt_list[i].replace(month=switchM(i + 3)))
                        else:
                            lt_list.append(
                                today.replace(year=today.year + 1,
                                              day=1,
                                              month=1))
                    #else:
                    #lt_list.append(today.replace(year=today.year+1,day=1,month=1))
                    #result["labels"].append(_('今年'))
                elif QueryJson["time_range"] == "last_year":
                    gte_list.append(
                        today.replace(year=today.year - 1, day=1, month=1))
                    #if has_group:
                    lt_list.append(gte_list[0].replace(month=2))
                    result["labels"].append(translateM(1))
                    for i in range(11):
                        gte_list.append(lt_list[i])
                        result["labels"].append(translateM(i + 2))
                        if i != 11:
                            lt_list.append(
                                lt_list[i].replace(month=switchM(i + 3)))
                        else:
                            lt_list.append(today.replace(day=1, month=1))
                    #else:
                    #lt_list.append(today.replace(day=1,month=1))
                    #result["labels"].append(_('去年'))
                else:
                    gte_list.append(today.replace(year=1970))
                    lt_list.append(today + datetime.timedelta(days=1))
                    result["labels"].append(_('所有時間'))

                #print(gte_list)
                #print(lt_list)
                #print(result["labels"])

            #解析json
            #permission = QueryJson["form"]
            permission = "Omdata_" + QueryJson["form"] + "_View"
            this_model = list(
                filter(
                    lambda x: x.__name__ == re.findall("^(.+)_View",
                                                       permission)[0],
                    apps.get_models()))
            getModel = False
            isPolicy = False
            if len(this_model) and request.user.has_perm(
                    str(this_model[0]._meta.app_label) + "." + permission):
                getModel = True
            else:
                this_model = list(
                    filter(lambda x: x.__name__ == QueryJson["form"],
                           apps.get_models()))
                if len(this_model) and request.user.has_perm(
                        "OmMonitor_Manage"):
                    getModel = True
                    isPolicy = True

            if getModel:
                #setCondition
                filter_count = 0
                for i in range(len(gte_list)):
                    #print(gte_list[i].strftime("%Y-%m-%d %H:%M:%S"))
                    if isPolicy:
                        QueryJson["condition"] = [{
                            "column": "createtime__gte",
                            "value": gte_list[i]
                        }, {
                            "column": "createtime__lt",
                            "value": lt_list[i]
                        }]
                    else:
                        QueryJson["condition"] = [{
                            "column": "updatetime__gte",
                            "value": gte_list[i]
                        }, {
                            "column": "updatetime__lt",
                            "value": lt_list[i]
                        }]

                    if not isPolicy:
                        #取得各ticket最新id_List
                        value_list = ["data_no"]
                        thisQuery = this_model[0].objects.all().values(
                            *tuple(value_list))
                        thisQuery = thisQuery.annotate(New=Max('id'))
                        thisQuery = thisQuery.filter(id__in=list(
                            thisQuery.values_list('New', flat=True)))
                        #id_list = list(thisQuery.values_list('New', flat=True))
                        #print(id_list)
                    else:
                        thisQuery = this_model[0].objects.all()

                    this_condition = Q()
                    for cObj in QueryJson["condition"]:
                        this_condition.add(
                            Q(**{cObj["column"]: cObj["value"]}), Q.AND)
                        #a = OmUser.objects.filter(Q(email="*****@*****.**")).values('nick_name').order_by('nick_name').annotate(count=Count('username'))

                    #thisQuery = this_model[0].objects.filter(this_condition)
                    thisQuery = thisQuery.filter(this_condition)

                    value_list = []
                    if has_group:
                        for key in QueryJson["groupby"]:
                            if len(key):
                                value_list.append(key)

                    #產出
                    thisQuery = thisQuery.values(*tuple(value_list))  #QuerySet
                    QueryList = []  #List物件
                    thisQueryJson = {}  #aggregate產出

                    for cObj in QueryJson["column"]:
                        #有分類
                        if has_group:
                            if cObj["value"] == "max":
                                thisQuery = thisQuery.annotate(
                                    **{cObj["column"]: Max(cObj["column"])})
                            elif cObj["value"] == "min":
                                thisQuery = thisQuery.annotate(
                                    **{cObj["column"]: Min(cObj["column"])})
                            elif cObj["value"] == "count":
                                thisQuery = thisQuery.annotate(
                                    **{cObj["column"]: Count(cObj["column"])})
                            elif cObj["value"] == "sum":
                                thisQuery = thisQuery.annotate(
                                    **{cObj["column"]: Sum(cObj["column"])})
                            elif cObj["value"] == "avg":
                                thisQuery = thisQuery.annotate(
                                    **{cObj["column"]: Avg(cObj["column"])})
                            else:
                                if isPolicy:
                                    thisQuery = thisQuery.annotate(
                                        New=Max('createtime'))
                                    thisQuery = thisQuery.filter(
                                        createtime__in=list(
                                            thisQuery.values_list('New',
                                                                  flat=True)))
                                else:
                                    thisQuery = thisQuery.annotate(
                                        New=Max('updatetime'))
                                    thisQuery = thisQuery.filter(
                                        updatetime__in=list(
                                            thisQuery.values_list('New',
                                                                  flat=True)))

                            has_static = False
                            for cObj in QueryJson["column"]:
                                if cObj["value"] == "static":
                                    value_list.append(cObj["column"])
                                    has_static = True
                            if has_static:
                                thisQuery = thisQuery.values(
                                    *tuple(value_list))

                            if "orderby" in QueryJson:
                                for key in QueryJson["orderby"]:
                                    thisQuery = thisQuery.order_by(key)

                            QueryList = list(thisQuery)

                        #無分類
                        else:
                            if cObj["value"] == "max":
                                thisQueryJson = thisQuery.aggregate(
                                    **{cObj["column"]: Max(cObj["column"])})
                            elif cObj["value"] == "min":
                                thisQueryJson = thisQuery.aggregate(
                                    **{cObj["column"]: Min(cObj["column"])})
                            elif cObj["value"] == "count":
                                thisQueryJson = thisQuery.aggregate(
                                    **{cObj["column"]: Count(cObj["column"])})
                            elif cObj["value"] == "sum":
                                thisQueryJson = thisQuery.aggregate(
                                    **{cObj["column"]: Sum(cObj["column"])})
                            elif cObj["value"] == "avg":
                                thisQueryJson = thisQuery.aggregate(
                                    **{cObj["column"]: Avg(cObj["column"])})

                            QueryList = [thisQueryJson]

                            if cObj["value"] == "static":
                                if isPolicy:
                                    thisQueryJson = thisQuery.aggregate(
                                        New=Max('createtime'))
                                    thisQuery = thisQuery.filter(
                                        createtime__in=list(
                                            [thisQueryJson.get('New')]))
                                else:
                                    thisQueryJson = thisQuery.aggregate(
                                        New=Max('updatetime'))
                                    thisQuery = thisQuery.filter(
                                        updatetime__in=list(
                                            [thisQueryJson.get('New')]))

                                QueryList = list(thisQuery)

                    if QueryJson["type"] and QueryJson["type"] != "table":
                        for row in QueryList:

                            if has_group:
                                this_value_list = list(
                                    filter(
                                        lambda x: x['name'] == row.get(
                                            QueryJson["groupby"][0], ""),
                                        result["dataset"]))
                            else:
                                this_value_list = result["dataset"]

                            if len(this_value_list) == 0:
                                value_list = {}
                                value = []
                                for j in range(filter_count):
                                    value.append("")
                                for cObj in QueryJson["column"]:
                                    value.append(row.get(cObj["column"], ""))
                                if has_group:
                                    value_list["name"] = row.get(
                                        QueryJson["groupby"][0], "")
                                value_list["data"] = value
                                result["dataset"].append(value_list)
                            else:
                                for cObj in QueryJson["column"]:
                                    this_value_list[0]['data'].append(
                                        row.get(cObj["column"], ""))
                        filter_count = filter_count + 1
                        for this_value_list in result["dataset"]:
                            if len(this_value_list['data']) < filter_count:
                                this_value_list['data'].append("")

                    else:  #表格查詢
                        result["dataset"] = QueryList
                        result["column"] = []
                        for k in thisQuery[0].keys():
                            this_field = list(
                                filter(lambda x: x.name == k,
                                       this_model[0]._meta.fields))
                            if len(this_field) > 0:
                                result["column"].append(
                                    this_field[0].verbose_name)

        #print(result)
        if error_message == "":
            if result:
                return ResponseAjax(statusEnum.success, _('查詢成功'),
                                    result).returnJSON()
            else:
                return ResponseAjax(statusEnum.error, _('查詢失敗')).returnJSON()
        else:
            return ResponseAjax(statusEnum.error, error_message).returnJSON()
    else:
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #27
0
def getColumnListAjax(request):
    '''
    get model column-list with permission
    input: request
    return: json
    author: Arthur
    '''
    username = request.user.username
    postdata = getPostdata(request)

    if username:
        require_field = ['model']
        checker = DataChecker(postdata, require_field)
        if checker.get('status') == 'success':
            permission = "Omdata_" + postdata.get('model', '') + "_View"
            this_model = list(
                filter(
                    lambda x: x.__name__ == re.findall("^(.+)_View",
                                                       permission)[0],
                    apps.get_models()))
            result = {}

            #isPolicy = False
            from omflow.syscom.common import License
            version_type = License().getVersionType()
            if version_type != 'C':
                from ommonitor.models import MonitorFlow
                if len(this_model) == 0 and request.user.has_perm(
                        "OmMonitor_Manage"):
                    policy_model = list(
                        filter(
                            lambda x: x.__name__ == postdata.get('model', ''),
                            apps.get_models()))
                    if len(policy_model):
                        this_table_id = re.findall("OmPolicy_(.+)",
                                                   postdata.get('model',
                                                                ''))[0]
                        fa = list(
                            MonitorFlow.objects.filter(
                                table_id=this_table_id).values('flowobject'))
                        if len(fa):
                            fa = json.loads(fa[0]['flowobject'])
                            result["collector_id"] = "收集器ID"
                            for item in fa['items']:
                                if item['type'] == "end":
                                    for output in item['config']['output']:
                                        field_name = re.findall(
                                            '\$\((.+)\)', output['name'])[0]
                                        result[field_name] = output['des']

            if len(this_model) and request.user.has_perm(
                    str(this_model[0]._meta.app_label) + "." + permission):
                if re.match('Omdata_.+_View', permission):
                    flow_uuid = re.findall("Omdata_(.+)_View", permission)[
                        0]  #Omdata_5d3c2cbdcf4145c3a05affaf4a74345b_View
                    fa = FlowActiveGlobalObject.UUIDSearch(
                        flow_uuid).merge_formobject
                    if len(fa):
                        fa = json.loads(fa)
                        for field in this_model[0]._meta.fields:
                            if 'formitm' in field.verbose_name:
                                if field.name.upper() in fa:
                                    if fa[field.name.upper(
                                    )]["type"] == 'h_group':
                                        #result[field.name] = fa[field.name.upper]
                                        result[
                                            field.name] = fa[field.name.upper(
                                            )]["config"]["group_title"]
                                    else:
                                        result[
                                            field.name] = fa[field.name.upper(
                                            )]["config"]["title"]
                            else:
                                result[field.name] = field.verbose_name

                    lang = get_language()
                    app_id = FlowActiveGlobalObject.UUIDSearch(
                        flow_uuid).flow_app_id
                    result = Translator('single_app', 'active', lang, app_id,
                                        None).Do(result)

            if result != {}:
                info('%s get Column-List success' % username, request)
                return ResponseAjax(statusEnum.success, _('讀取成功。'),
                                    result).returnJSON()
            else:
                info('%s get Column-List with no permission' % username,
                     request)
                return ResponseAjax(statusEnum.no_permission,
                                    _('您沒有權限進行此操作。')).returnJSON()
        else:
            info('%s get Column-List error' % username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s get Column-List with no permission' % username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #28
0
def exportTranslationAjax(request):
    '''
    export workspace application language package
    '''
    #function variable
    require_field = ['language']
    #get postdata
    postdata = getPostdata(request)
    language_type = postdata.get('language', '')
    #server side rule check
    checker = DataChecker(postdata, require_field)
    if checker.get('status') == 'success':
        export = ''
        export_list = []
        if OmServiceDesign.objects.all().count() > 0:
            max = OmServiceDesign.objects.all().aggregate(
                Max('id')).get('id__max')
            result = list(
                OmServiceDesign.objects.filter(id=max).values('content'))

            box_object = json.loads(result[0]["content"])

            #翻譯語言
            #language_type = get_language()
            lan_package = FlowActiveGlobalObject.getSysLanDict('service').get(
                language_type, {})

            #翻譯「全部」
            #export = check2addExport('全部',export,export_list,lan_package,language_type)
            for idx in box_object["list"]:
                this_service = box_object["list"][idx]
                #翻譯「服務名稱」
                export = check2addExport(this_service["setting"]["setTitle"],
                                         export, export_list, lan_package,
                                         language_type)

                if this_service["type"] == "service":
                    #翻譯「服務說明」
                    export = check2addExport(this_service["setting"]["setTip"],
                                             export, export_list, lan_package,
                                             language_type)
                    for sup_idx in this_service["service"]["list"]:
                        this_step = this_service["service"]["list"][sup_idx]
                        #翻譯「服務步驟名稱」
                        export = check2addExport(this_step["name"], export,
                                                 export_list, lan_package,
                                                 language_type)
                        #翻譯「服務步驟說明」
                        export = check2addExport(this_step["tip"], export,
                                                 export_list, lan_package,
                                                 language_type)

        info('%s export language package success.' % request.user.username,
             request)
        return ResponseAjax(statusEnum.success, _('匯出成功。'),
                            export).returnJSON()
    else:
        info(
            '%s missing some require variable or the variable type error.' %
            request.user.username, request)
        return ResponseAjax(statusEnum.not_found, checker.get('message', ''),
                            checker).returnJSON()
Пример #29
0
def loadServiceAjax(request):
    '''
    load manager's service setting
    return: json
    author: Arthur
    '''

    #Server Side Rule Check
    username = request.user.username
    postdata = getPostdata(request)
    result = {}
    if username:
        #static variable
        #         result['structure'] = OmServiceDesign.objects.all()
        #         if request.user.has_perm('omservice.OmServiceDesign_Manager'):
        #             result['objects'] = OmService.objects.all()
        #         else:
        #             #等待修改
        #             user_role_list = list(request.user.groups.all().values_list('id', flat=True))
        #             for service_obj in OmService.objects.all():
        #                 service_role_list = json.loads(service_obj.get('role','[]'))
        #                 if len(set(user_role_list) & set(service_role_list)):
        #                     result['objects'].append(service_obj)
        #print(OmServiceDesign.objects.all().count())
        if OmServiceDesign.objects.all().count() > 0:
            max = OmServiceDesign.objects.all().aggregate(
                Max('id')).get('id__max')
            result = list(
                OmServiceDesign.objects.filter(id=max).values('content'))

            box_object = json.loads(result[0]["content"])

            #檢查權限
            if request.user.has_perm('omservice.OmServiceDesign_Manage'):
                pass
            else:
                Service_List = list(OmService.objects.all())
                Group_List = list(request.user.groups.all().values_list(
                    'id', flat=True))
                if len(Group_List):
                    Group_List.append(-1)
                else:
                    Group_List = [-1]
                for thisSer in Service_List:
                    if len(set(json.loads(thisSer.role))
                           & set(Group_List)) == 0:
                        del box_object["list"][str(thisSer.service_id)]

            #檢查是否過期
            this_activeList = list(
                FlowActive.objects.filter(
                    undeploy_flag=0,
                    parent_uuid__isnull=True).values_list('flow_uuid',
                                                          flat=True))
            this_activeList = [o.hex for o in this_activeList]
            for idx in box_object["list"]:
                #print(box_object["list"][idx])
                if box_object["list"][idx]["type"] == "service":
                    if 'api_path' in box_object["list"][idx]:
                        flow_uuid = FlowActiveGlobalObject.APIgetUUID(
                            box_object["list"][idx]["api_path"])
                    else:
                        flow_uuid = box_object["list"][idx]["flow_uuid"]
                        box_object["list"][idx][
                            "api_path"] = FlowActiveGlobalObject.UUIDgetAPI(
                                flow_uuid)

                    if flow_uuid in this_activeList:
                        box_object["list"][idx]["available"] = 1
                    else:
                        box_object["list"][idx]["available"] = 0

            #翻譯語言
            if postdata.get('type') != "source":
                language_type = get_language()
                #print(FlowActiveGlobalObject.getSysLanDict('service'))
                lan_package = FlowActiveGlobalObject.getSysLanDict(
                    'service').get(language_type, None)

                if lan_package:
                    for idx in box_object["list"]:
                        this_service = box_object["list"][idx]
                        if this_service["setting"]["setTitle"]:
                            this_service["setting"]["setTitle"] = lan_package[
                                this_service["setting"]
                                ["setTitle"]] if checkJsonKey(
                                    lan_package,
                                    this_service["setting"]["setTitle"]
                                ) else this_service["setting"]["setTitle"]

                        if this_service["type"] == "service":
                            if this_service["setting"]["setTip"]:
                                this_service["setting"]["setTip"] = lan_package[
                                    this_service["setting"]
                                    ["setTip"]] if checkJsonKey(
                                        lan_package,
                                        this_service["setting"]["setTip"]
                                    ) else this_service["setting"]["setTip"]
                            for sup_idx in this_service["service"]["list"]:
                                this_step = this_service["service"]["list"][
                                    sup_idx]
                                if this_step["name"]:
                                    this_step["name"] = lan_package[
                                        this_step["name"]] if checkJsonKey(
                                            lan_package, this_step["name"]
                                        ) else this_step["name"]
                                if this_step["tip"]:
                                    this_step["tip"] = lan_package[
                                        this_step["tip"]] if checkJsonKey(
                                            lan_package, this_step["tip"]
                                        ) else this_step["tip"]

            #print(result[0]["content"])
            result[0]["content"] = json.dumps(box_object)

        return ResponseAjax(statusEnum.success, _('讀取成功。'),
                            result).returnJSON()
    else:
        error('%s load Service with no permission' % username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()
Пример #30
0
def SubQueryDataAjax(request):
    '''
    load omdata.
    input: request
    return: json
    author: Kolin Hsu
    '''
    #function variable
    require_field = ['app_name', 'flow_name', 'data_id']
    #server side rule check
    postdata = getPostdata(request)
    checker = DataChecker(postdata, require_field)
    #get post data
    app_name = postdata.get('app_name', '')
    flow_name = postdata.get('flow_name', '')
    data_id = postdata.get('data_id', '')
    field_list = postdata.get('fields', [])
    service_id = postdata.get('service_id', [])

    if True:
        if checker.get('status') == 'success':
            #get model
            fa = FlowActiveGlobalObject.NameSearch(flow_name, None, app_name)
            omdata_model = getModel('omformmodel',
                                    'Omdata_' + fa.flow_uuid.hex)
            #整理欄位
            new_field_list = []
            group_user = []
            group_user_id = None
            for f in field_list:
                if re.match(r'formitm_[0-9]+-.+', f):
                    group_user_id = re.findall(r'(.+)-.+', f)[0]
                    group_user.append(f)
                    new_field_list.append(group_user_id)
                else:
                    new_field_list.append(f)

            #取得資料
            omdata = list(
                omdata_model.objects.filterformat(*new_field_list, id=data_id))

            if omdata:
                result = omdata[0]
                if group_user_id:
                    group_user_dict = json.loads(result.pop(group_user_id))
                    for g_u in group_user:
                        key = re.findall(r'.+-(.+)', g_u)[0]
                        result[g_u] = group_user_dict.get(key, '')
            else:
                result = {}

            info('%s load OmData success.' % request.user.username, request)
            return ResponseAjax(statusEnum.success, _('讀取成功。'),
                                result).returnJSON()
        else:
            info(
                '%s missing some require variable or the variable type error.'
                % request.user.username, request)
            return ResponseAjax(statusEnum.not_found, checker.get('message'),
                                checker).returnJSON()
    else:
        info('%s has no permission.' % request.user.username, request)
        return ResponseAjax(statusEnum.no_permission,
                            _('您沒有權限進行此操作。')).returnJSON()