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 })
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
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)
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.'))
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 })
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})
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)
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'])
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)
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)
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())
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))