示例#1
0
def import_template(request):
    import_template_fields = DecisionItemLookup.get_all_fields()
    app_settings = ApplicationSetting.get()
    return render(
        request, 'application_settings/import.html', {
            'import_template_fields': import_template_fields,
            'app_settings': app_settings
        })
示例#2
0
 def get_visible_fields():
     fields = dict(DecisionItemLookup.get_custom_fields().items() +
                   DecisionItemLookup.get_base_fields().items())
     app_settings = ApplicationSetting.get()
     ordered_fields = OrderedDict()
     for key in app_settings[
             ApplicationSetting.DECISION_ITEMS_COLUMNS_DISPLAY]:
         if key in fields.keys():
             ordered_fields[key] = fields[key]
     return ordered_fields
示例#3
0
def sync_jira(request, deliverable_id, meeting_id):
    try:
        meeting = get_object_or_404(Meeting,
                                    pk=meeting_id,
                                    deliverable__id=deliverable_id)
        app_settings = ApplicationSetting.get()
        jira_is_enabled = app_settings.get(
            ApplicationSetting.JIRA_INTEGRATION_FLAG)
        if jira_is_enabled:
            meeting.update_managed_items(request)
        return HttpResponse()
    except Exception, e:
        return HttpResponseBadRequest(e.text)
示例#4
0
def import_decision_items(request):
    try:
        form = UploadFileForm(request.POST, request.FILES)
        html = ''
        if form.is_valid():
            app_settings = ApplicationSetting.get()
            column_map = excel_column_map()
            f = request.FILES['file']
            filename = f.name
            if '.xls' in filename or '.xlsx' in filename:
                wb = xlrd.open_workbook(filename=None, file_contents=f.read())
                decision_items = []
                for sheet in wb.sheets():
                    for row in range(
                            app_settings['EXCEL_STARTING_ROW_COLUMN'] - 1,
                            sheet.nrows):
                        decision_item = {}
                        for key in app_settings['EXCEL_IMPORT_TEMPLATE'].keys(
                        ):
                            column_name = app_settings[
                                'EXCEL_IMPORT_TEMPLATE'][key]
                            try:
                                decision_item[key] = sheet.cell(
                                    row, column_map[column_name]).value
                            except:
                                pass
                        decision_items.append(decision_item)
                fields = DecisionItemLookup.get_visible_fields()
                DecisionItemFormSet = modelformset_factory(
                    DecisionItem,
                    fields=fields.keys(),
                    extra=len(decision_items))
                formset = DecisionItemFormSet(
                    prefix='decision_item',
                    queryset=DecisionItem.objects.none(),
                    initial=decision_items)
                html = render_to_string(
                    'deliverables/includes/decision_items_import_table.html', {
                        'decision_items': decision_items,
                        'fields': fields,
                        'formset': formset,
                        'filename': filename
                    })
                return HttpResponse(html)
            else:
                return HttpResponseBadRequest(
                    _('Invalid file type. Supported extensions are .xls or .xlsx'
                      ))
        return HttpResponseBadRequest(_('Invalid form data.'))
    except:
        return HttpResponseBadRequest(_('An unexpected error ocurred.'))
示例#5
0
def items(request):
    custom_fields_range = range(1, 31)
    custom_fields = DecisionItemLookup.get_custom_fields()
    column_types = DecisionItemLookup.COLUMN_TYPES
    decision_items_fields = DecisionItemLookup.get_visible_fields()
    app_settings = ApplicationSetting.get()
    return render(
        request, 'application_settings/items.html', {
            'custom_fields_range': custom_fields_range,
            'custom_fields': custom_fields,
            'column_types': column_types,
            'decision_items_fields': decision_items_fields,
            'app_settings': app_settings
        })
示例#6
0
def jira_integration(request):
    app_settings = ApplicationSetting.get()
    if request.method == 'POST':
        form = JIRAForm(request.POST)
        if form.is_valid():
            jira_flag, created = ApplicationSetting.objects.get_or_create(
                name=ApplicationSetting.JIRA_INTEGRATION_FLAG)
            jira_flag.value = form.cleaned_data.get('enabled')
            jira_flag.save()

            jira_value_ranking, created = ApplicationSetting.objects.get_or_create(
                name=ApplicationSetting.JIRA_VALUE_RANKING_FIELD)
            jira_value_ranking.value = form.cleaned_data.get('value_ranking')
            jira_value_ranking.save()

            jira_summary, created = ApplicationSetting.objects.get_or_create(
                name=ApplicationSetting.JIRA_VALUE_EXTRA_DATA_FIELD)
            jira_summary.value = form.cleaned_data.get('value_ranking_summary')
            jira_summary.save()

            jira_url, created = ApplicationSetting.objects.get_or_create(
                name=ApplicationSetting.JIRA_VALUE_URL)
            jira_url.value = form.cleaned_data.get('value_url')
            jira_url.save()

            messages.success(
                request,
                _(u'JIRA integration information saved successfully.'))
            return redirect(reverse('settings:jira_integration'))
    else:
        form = JIRAForm({
            'enabled':
            app_settings.get(ApplicationSetting.JIRA_INTEGRATION_FLAG, False),
            'value_ranking':
            app_settings.get(ApplicationSetting.JIRA_VALUE_RANKING_FIELD, ''),
            'value_ranking_summary':
            app_settings.get(ApplicationSetting.JIRA_VALUE_EXTRA_DATA_FIELD,
                             ''),
            'value_url':
            app_settings.get(ApplicationSetting.JIRA_VALUE_URL, '')
        })
    return render(request, 'application_settings/jira.html', {'form': form})
示例#7
0
    def update_managed_items(self, request):
        app_settings = ApplicationSetting.get()
        jira = JIRA(server=settings.JIRA_URL,
                    basic_auth=(settings.JIRA_USERNAME,
                                settings.JIRA_PASSWORD),
                    options={'verify': False})
        items = self.meetingitem_set \
            .select_related('decision_item') \
            .filter(decision_item__is_managed=True)
        for item in items:
            issue = jira.issue(item.decision_item.name)

            value_ranking_field_name = u'customfield_{}'.format(
                app_settings.get(ApplicationSetting.JIRA_VALUE_RANKING_FIELD))
            value_summary_field_name = u'customfield_{}'.format(
                app_settings.get(
                    ApplicationSetting.JIRA_VALUE_EXTRA_DATA_FIELD))
            value_url_field_name = u'customfield_{}'.format(
                app_settings.get(ApplicationSetting.JIRA_VALUE_URL))

            item_summary_output = u''
            for ranking in item.evaluation_summary.all():
                bars = int(round(ranking.percentage_votes)) * u'|'
                item_summary_output += u'{color:' + ranking.measure_value.color + '}' + bars + '{color}'

            stakeholder_ids = item.meeting.meetingstakeholder_set.values_list(
                'stakeholder', flat=True)
            url = request.build_absolute_uri(
                reverse('deliverables:meetings:features_chart',
                        args=(item.meeting.deliverable_id, item.meeting_id,
                              item.pk)))
            params = u'?stakeholder={}&chart_type=stacked_bars'.format(
                '&stakeholder='.join(map(lambda x: str(x), stakeholder_ids)))
            item_value_url = u'{}{}'.format(url, params)

            fields = {
                value_ranking_field_name: item.value_ranking,
                value_summary_field_name: item_summary_output,
                value_url_field_name: item_value_url,
            }

            issue.update(**fields)
示例#8
0
 def test_application_setting_get_invalid_decision_items_column_display(self):
     setting = ApplicationSetting.objects.get(pk=ApplicationSetting.DECISION_ITEMS_COLUMNS_DISPLAY)
     setting.value = None
     setting.save()
     s = ApplicationSetting.get()
     self.assertEqual(s[ApplicationSetting.DECISION_ITEMS_COLUMNS_DISPLAY], ['name', 'description'])
示例#9
0
 def test_application_setting_get_invalid_excel_sheet_index(self):
     setting = ApplicationSetting.objects.get(pk=ApplicationSetting.EXCEL_SHEET_INDEX)
     setting.value = 'invalid_input'
     setting.save()
     s = ApplicationSetting.get()
     self.assertEqual(s[ApplicationSetting.EXCEL_SHEET_INDEX], 0)
示例#10
0
 def test_application_setting_get_invalid_excel_starting_row_column(self):
     setting = ApplicationSetting.objects.get(pk=ApplicationSetting.EXCEL_STARTING_ROW_COLUMN)
     setting.value = 'invalid_input'
     setting.save()
     s = ApplicationSetting.get()
     self.assertEqual(s[ApplicationSetting.EXCEL_STARTING_ROW_COLUMN], 0)
示例#11
0
 def test_application_setting_get_invalid_import_template(self):
     setting = ApplicationSetting.objects.get(pk=ApplicationSetting.EXCEL_IMPORT_TEMPLATE)
     setting.value = 'invalid_input'
     setting.save()
     s = ApplicationSetting.get()
     self.assertEqual(s[ApplicationSetting.EXCEL_IMPORT_TEMPLATE], dict())
示例#12
0
 def test_application_setting_get(self):
     s = ApplicationSetting.get()
     self.assertTrue(isinstance(s[ApplicationSetting.DECISION_ITEMS_COLUMNS_DISPLAY], list))
     self.assertTrue(isinstance(s[ApplicationSetting.EXCEL_IMPORT_TEMPLATE], dict))
     self.assertTrue(isinstance(s[ApplicationSetting.EXCEL_STARTING_ROW_COLUMN], int))
     self.assertTrue(isinstance(s[ApplicationSetting.EXCEL_SHEET_INDEX], int))