diff --git a/app/components/agenda/agenda-header.hbs b/app/components/agenda/agenda-header.hbs
index 998fe66503..f0fb1b6732 100644
--- a/app/components/agenda/agenda-header.hbs
+++ b/app/components/agenda/agenda-header.hbs
@@ -15,13 +15,13 @@
{{moment-format @meeting.plannedStart "HH:mm"}}
{{/unless}}
- {{#if @meeting.kindToShow.label}}
+ {{#if @meeting.kind.label}}
-
- {{await @meeting.kindToShow.label}}
+ {{@meeting.kind.label}}
{{/if}}
diff --git a/app/components/agenda/future-agendas.hbs b/app/components/agenda/future-agendas.hbs
index 4306738b23..eb9fec129a 100644
--- a/app/components/agenda/future-agendas.hbs
+++ b/app/components/agenda/future-agendas.hbs
@@ -94,7 +94,7 @@
{{/if}}
- {{meeting.kindToShow.label}}
+ {{meeting.kind.label}}
|
diff --git a/app/components/meeting/edit-meeting-modal.hbs b/app/components/meeting/edit-meeting-modal.hbs
index 93f0b3344e..2f48896a8c 100644
--- a/app/components/meeting/edit-meeting-modal.hbs
+++ b/app/components/meeting/edit-meeting-modal.hbs
@@ -1,7 +1,11 @@
-
+
{{else}}
diff --git a/app/components/meeting/new-meeting-modal.js b/app/components/meeting/new-meeting-modal.js
index 60e41fe2bb..a3f5eaf947 100644
--- a/app/components/meeting/new-meeting-modal.js
+++ b/app/components/meeting/new-meeting-modal.js
@@ -1,16 +1,12 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
-import { dropTask } from 'ember-concurrency';
+import { task, dropTask } from 'ember-concurrency';
import { inject as service } from '@ember/service';
import { A } from '@ember/array';
import moment from 'moment';
import CONSTANTS from 'frontend-kaleidos/config/constants';
-import CONFIG from 'frontend-kaleidos/utils/config';
-import {
- isAnnexMeetingKind,
- fetchClosestMeetingAndAgendaId,
-} from 'frontend-kaleidos/utils/meeting-utils';
+import { fetchClosestMeetingAndAgendaId } from 'frontend-kaleidos/utils/meeting-utils';
/**
* @argument {didSave}
@@ -21,8 +17,9 @@ export default class MeetingNewMeetingModal extends Component {
@service newsletterService;
@service toaster;
+ @tracked kind = null;
@tracked selectedMainMeeting = null;
- @tracked selectedKindUri = null;
+ @tracked isAnnexMeeting = false;
@tracked isEditingFormattedMeetingIdentifier = false;
@tracked _meetingNumber = null;
@tracked _formattedMeetingIdentifier = null;
@@ -32,11 +29,15 @@ export default class MeetingNewMeetingModal extends Component {
constructor() {
super(...arguments);
+ this.initializeKind.perform();
this.initializeMeetingNumber.perform();
}
- get isAnnexMeeting() {
- return isAnnexMeetingKind(this.selectedKindUri);
+ get meetingKindPostfix() {
+ if (this.kind?.uri === CONSTANTS.MEETING_KINDS.PVV) {
+ return 'VV';
+ }
+ return '';
}
get formattedMeetingIdentifier() {
@@ -59,6 +60,13 @@ export default class MeetingNewMeetingModal extends Component {
this._formattedMeetingIdentifier = null;
}
+ @task
+ *initializeKind() {
+ this.kind = yield this.store.findRecordByUri('concept', CONSTANTS.MEETING_KINDS.MINISTERRAAD);
+ const broader = yield this.kind?.broader;
+ this.isAnnexMeeting = broader?.uri === CONSTANTS.MEETING_KINDS.ANNEX;
+ }
+
@dropTask
*initializeMeetingNumber() {
const meeting = yield this.store.queryOne('meeting', {
@@ -85,7 +93,7 @@ export default class MeetingNewMeetingModal extends Component {
extraInfo: this.extraInfo,
isFinal: false,
plannedStart: startDate,
- kind: this.selectedKindUri ?? CONFIG.MINISTERRAAD_TYPES.DEFAULT,
+ kind: this.kind,
mainMeeting: this.selectedMainMeeting,
number: this.meetingNumber,
numberRepresentation: this.formattedMeetingIdentifier,
@@ -96,7 +104,7 @@ export default class MeetingNewMeetingModal extends Component {
try {
yield meeting.save();
const agenda = yield this.createAgenda(meeting, now);
- if (!meeting.isAnnex && closestMeeting) {
+ if (!this.isAnnexMeeting && closestMeeting) {
yield this.createAgendaitemToApproveMinutes(
agenda,
meeting,
@@ -171,10 +179,7 @@ export default class MeetingNewMeetingModal extends Component {
@action
selectMainMeeting(mainMeeting) {
- const kind = CONFIG.MINISTERRAAD_TYPES.TYPES.find(
- (minsterraad) => minsterraad.uri === this.selectedKindUri
- );
- const postfix = (kind && kind.postfix) || '';
+ const postfix = this.meetingKindPostfix;
this.selectedMainMeeting = mainMeeting;
this.startDate = mainMeeting.plannedStart;
this.meetingNumber = mainMeeting.number;
@@ -188,8 +193,12 @@ export default class MeetingNewMeetingModal extends Component {
}
@action
- setKind(kind) {
- this.selectedKindUri = kind;
+ async setKind(kind) {
+ this.kind = kind;
+
+ const broader = await this.kind?.broader;
+ this.isAnnexMeeting = broader?.uri === CONSTANTS.MEETING_KINDS.ANNEX;
+
if (!this.isAnnexMeeting) {
this.selectedMainMeeting = null;
this.initializeMeetingNumber.perform();
diff --git a/app/components/newsletter/newsletter-header-overview.hbs b/app/components/newsletter/newsletter-header-overview.hbs
index 1a473dfe8e..0bb13e17d9 100644
--- a/app/components/newsletter/newsletter-header-overview.hbs
+++ b/app/components/newsletter/newsletter-header-overview.hbs
@@ -10,7 +10,7 @@
>
{{t "newsletter-overview-pdf-name"}}
-
- {{@meeting.kindToShow.label}}
+ {{@meeting.kind.label}}
{{moment-format @meeting.plannedStart "DD MMMM YYYY"}}
diff --git a/app/components/newsletter/newsletter-meeting.hbs b/app/components/newsletter/newsletter-meeting.hbs
index 56b9e1b0a2..dfe9c79502 100644
--- a/app/components/newsletter/newsletter-meeting.hbs
+++ b/app/components/newsletter/newsletter-meeting.hbs
@@ -2,7 +2,7 @@
{{!-- template-lint-disable no-action --}}
- {{t "newsletter-overview-pdf-name"}} - {{this.meeting.kindToShow.altLabel}} {{t "of"}} {{moment-format this.meeting.plannedStart "dddd DD-MM-YYYY"}}
+ {{t "newsletter-overview-pdf-name"}} - {{kind-print-label this.meeting.kind}} {{t "of"}} {{moment-format this.meeting.plannedStart "dddd DD-MM-YYYY"}}
{{#if (and this.allowEditing this.currentSession.isEditor)}}
diff --git a/app/components/utils/kind-selector.hbs b/app/components/utils/kind-selector.hbs
index 0c1b450048..69b3dbf530 100644
--- a/app/components/utils/kind-selector.hbs
+++ b/app/components/utils/kind-selector.hbs
@@ -1,22 +1,18 @@
-{{! TODO: octane-refactor }}
-{{! template-lint-disable no-action }}
-
+{{/if}}
\ No newline at end of file
diff --git a/app/components/utils/kind-selector.js b/app/components/utils/kind-selector.js
index bc3651fd8b..a0f39e01f3 100644
--- a/app/components/utils/kind-selector.js
+++ b/app/components/utils/kind-selector.js
@@ -1,29 +1,42 @@
-/* eslint-disable ember/no-arrow-function-computed-properties */
-// TODO: octane-refactor
-// eslint-disable-next-line ember/no-classic-components
-import Component from '@ember/component';
-import CONFIG from 'frontend-kaleidos/utils/config';
-import EmberObject, { computed } from '@ember/object';
+import Component from '@glimmer/component';
+import { tracked } from '@glimmer/tracking';
+import { inject as service } from '@ember/service';
+import { task } from 'ember-concurrency';
+import CONSTANTS from '../../config/constants';
+import { PAGE_SIZE } from 'frontend-kaleidos/config/config';
-// TODO: octane-refactor
-// eslint-disable-next-line ember/no-classic-classes, ember/require-tagless-components
-export default Component.extend({
- classNames: ['auk-u-mb-2'],
- isLoading: null,
- hideLabel: null,
+/**
+ * @argument {Concept} selectedKind The meeting kind to set the dropdown to
+ * @argument {function} onChange Action to perform once a meeting kind has been selected
+ * @argument {boolean} disabled
+ */
+export default class UtilsKindSelector extends Component {
+ @service store;
- options: computed(() => CONFIG.MINISTERRAAD_TYPES.TYPES.map((meetingType) => EmberObject.create(meetingType))),
+ @tracked options;
- selectedkind: computed('kind.uri', 'options', function() {
- return this.options.find((kind) => this.kind && kind.uri === this.kind.uri) || this.options.get('firstObject');
- }),
+ constructor() {
+ super(...arguments);
- // TODO: octane-refactor
- // eslint-disable-next-line ember/no-actions-hash
- actions: {
- setAction(meetingType) {
- this.set('selectedkind', meetingType);
- this.setAction(meetingType.get('uri'));
- },
- },
-});
+ this.loadKinds.perform();
+ }
+
+ get isLoading() {
+ return this.args.isLoading || this.loadKinds.isRunning;
+ }
+
+ @task
+ *loadKinds() {
+ this.options = yield this.store.query('concept', {
+ filter: {
+ 'concept-schemes': {
+ ':uri:': CONSTANTS.CONCEPT_SCHEMES.VERGADERACTIVITEIT,
+ },
+ ':has-no:narrower': true, // Only the most specific concepts, i.e. the actual meeting kinds (so no "Annex")
+ },
+ include: 'broader,narrower',
+ 'page[size]': PAGE_SIZE.CODE_LISTS,
+ sort: 'position',
+ });
+ }
+}
diff --git a/app/config/config.js b/app/config/config.js
index 98ae994c65..168cdd3a54 100644
--- a/app/config/config.js
+++ b/app/config/config.js
@@ -9,7 +9,6 @@ export const PAGE_SIZE = {
PIECES: 500,
ACTIVITIES: 500,
CASES: 500,
-
SELECT: 10,
};
diff --git a/app/config/constants.js b/app/config/constants.js
index 086966ea25..9c6ef49c58 100644
--- a/app/config/constants.js
+++ b/app/config/constants.js
@@ -3,6 +3,7 @@ export default {
CONCEPT_SCHEMES: {
BELEIDSDOMEIN: 'http://themis.vlaanderen.be/id/concept-schema/f4981a92-8639-4da4-b1e3-0e1371feaa81',
BELEIDSVELD: 'http://themis.vlaanderen.be/id/concept-schema/0012aad8-d6e5-49e2-af94-b1bebd484d5b',
+ VERGADERACTIVITEIT: 'http://kanselarij.vo.data.gift/id/concept-scheme/668f0c19-3864-4e96-9dd3-de806fd53357', // TODO: Replace with Themis URI
},
ACCESS_LEVELS: {
INTERN_REGERING: 'http://kanselarij.vo.data.gift/id/concept/toegangs-niveaus/d335f7e3-aefd-4f93-81a2-1629c2edafa3',
@@ -90,5 +91,10 @@ export default {
MB: 'http://themis.vlaanderen.be/id/concept/regelgeving-type/49bad4d9-745b-4a71-b6c6-0eac34e6bdd4',
DECREET: 'http://themis.vlaanderen.be/id/concept/regelgeving-type/bf6101a9-d06b-44d4-b629-13965654c8c2',
BVR: 'http://themis.vlaanderen.be/id/concept/regelgeving-type/ea7f5f79-f81c-459b-a0f7-d8e90e2d9b88',
- }
+ },
+ MEETING_KINDS: { // TODO: Replace with Themis URIs
+ MINISTERRAAD: 'http://kanselarij.vo.data.gift/id/concept/ministerraad-type-codes/A5D6B7A8-2F9C-44B6-B3BE-98D80B426254',
+ PVV: 'http://kanselarij.vo.data.gift/id/concept/ministerraad-type-codes/1d16cb70-0ae9-489e-bf97-c74897222e3c',
+ ANNEX: 'http://kanselarij.vo.data.gift/id/concept/ministerraad-type-codes/d36138a9-07f0-4df6-bbf0-abd51a24e4ce',
+ },
};
diff --git a/app/helpers/kind-print-label.js b/app/helpers/kind-print-label.js
new file mode 100644
index 0000000000..c51a65bd33
--- /dev/null
+++ b/app/helpers/kind-print-label.js
@@ -0,0 +1,9 @@
+import { helper } from '@ember/component/helper';
+
+export function kindPrintLabel(kind) {
+ return kind.get('altLabel') ?? kind.get('label') ?? '';
+}
+
+export default helper(([kind]) => {
+ return kindPrintLabel(kind);
+});
diff --git a/app/models/concept.js b/app/models/concept.js
index 0765e2f09b..c97b6174ab 100644
--- a/app/models/concept.js
+++ b/app/models/concept.js
@@ -1,8 +1,10 @@
import Model, { attr, hasMany, belongsTo } from '@ember-data/model';
export default class Concept extends Model {
+ @attr('string') uri;
@attr('string') label;
- @attr('string') scopeNote;
@attr('string') altLabel;
+ @attr('string') scopeNote;
+ @attr('number') position;
@hasMany('concept', { inverse: 'broader'}) narrower;
// The idea behind also using broader is because ember was automatically connecting the broader parent under the narrower relation
// Resulting in all concepts with 1 inverse narrower to break length == 0 checks on narrower
diff --git a/app/models/meeting.js b/app/models/meeting.js
index 1c894ac0b1..ac3a76a248 100644
--- a/app/models/meeting.js
+++ b/app/models/meeting.js
@@ -1,11 +1,8 @@
import Model, { belongsTo, hasMany, attr } from '@ember-data/model';
import { PromiseArray, PromiseObject } from '@ember-data/store/-private';
-import EmberObject, { computed } from '@ember/object';
+import { computed } from '@ember/object';
import { inject } from '@ember/service';
-import CONFIG from 'frontend-kaleidos/utils/config';
import { KALEIDOS_START_DATE } from 'frontend-kaleidos/config/config';
-import { isAnnexMeetingKind } from 'frontend-kaleidos/utils/meeting-utils';
-import moment from 'moment';
import {
sortDocumentContainers
} from 'frontend-kaleidos/utils/documents';
@@ -26,7 +23,6 @@ export default Model.extend({
numberRepresentation: attr('string'),
isFinal: attr('boolean'),
extraInfo: attr('string'),
- kind: attr('string'),
releasedDocuments: attr('datetime'),
releasedDecisions: attr('datetime'),
@@ -36,6 +32,7 @@ export default Model.extend({
requestedSubcases: hasMany('subcase'),
pieces: hasMany('piece'),
+ kind: belongsTo('concept'),
mainMeeting: belongsTo('meeting', {
inverse: null,
}),
@@ -47,13 +44,6 @@ export default Model.extend({
themisPublicationActivities: hasMany('themis-publication-activity'),
- label: computed('plannedStart', 'kind', 'numberRepresentation', function() {
- const date = moment(this.plannedStart).format('DD-MM-YYYY');
- const kind = CONFIG.MINISTERRAAD_TYPES.TYPES.find((type) => type.uri === this.kind);
- const kindLabel = kind ? kind.altLabel : '';
- return `${kindLabel} ${this.intl.t('of')} ${date} (${this.numberRepresentation})`;
- }),
-
// This computed does not seem to be used anywhere
documentContainers: computed('pieces.@each.name', 'id', 'store', function() {
return PromiseArray.create({
@@ -108,21 +98,6 @@ export default Model.extend({
return await agenda.get('agendaName');
}),
- kindToShow: computed('kind', function() {
- const options = CONFIG.MINISTERRAAD_TYPES.TYPES;
- const {
- kind,
- } = this;
- const foundOption = options.find((kindOption) => kindOption.uri === kind);
-
-
- return EmberObject.create(foundOption);
- }),
-
- isAnnex: computed('kind', function() {
- return isAnnexMeetingKind(this.kind);
- }),
-
isPreKaleidos: computed('plannedStart', function () {
return this.plannedStart < KALEIDOS_START_DATE;
}),
diff --git a/app/pods/agendas/overview/template.hbs b/app/pods/agendas/overview/template.hbs
index 495d3649c7..0f151902b0 100644
--- a/app/pods/agendas/overview/template.hbs
+++ b/app/pods/agendas/overview/template.hbs
@@ -135,7 +135,7 @@
{{/if}}
|
- {{meeting.kindToShow.label}}
+ {{meeting.kind.label}}
|
|