Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.
If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.
If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.
"
+ '#title': 'Persons responsible for operations'
+ '#multiple__add_more_button_label': 'Add person'
+ '#community_officials_select__title': 'Select official'
+ '#role__title': Role
+ '#email__title': 'Email address'
+ '#phone__title': 'Phone number'
+ 2_avustustiedot:
+ '#title': '2. Grant details'
+ avustuksen_tiedot:
+ '#title': 'Grant details'
+ acting_year:
+ '#title': 'Year for which I am applying for a grant'
+ avustuslajit:
+ '#title': 'Types of grant'
+ subventions:
+ '#title': Grants
+ grants_compensations_information:
+ '#markup': '
Only apply for one grant type at a time with each application.
'
+ kayttotarkoitus:
+ '#title': 'Purpose of use'
+ compensation_purpose:
+ '#title': 'Brief description of the purpose(s) of the grant(s) applied for'
+ '#help': '
Indicate the purpose for which the grant is applied for. If necessary, specify the different uses. Also tell us what is intended to be achieved with the grant and what goals are associated with the activities to be supported.
'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ other_grants_for_same_purpose:
+ '#title': 'Other grants received for the same purpose'
+ info_muut_samaan_tarkoitukseen_myonnetty:
+ '#markup': '
Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.
An affirmative answer opens a further question
'
+ olemme_saaneet_muita_avustuksia:
+ '#title': 'We have received other grants'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ myonnetty_avustus:
+ '#title': 'Received grant'
+ '#multiple__no_items_message': '
No values entered. Add the new grant granted below.
'
+ '#multiple__add_more_button_label': 'Add received grant'
+ '#element':
+ issuer:
+ '#options':
+ 1: State
+ 4: Other
+ 5: Foundation
+ '#title': 'Grant issuer'
+ issuer_name:
+ '#title': "Issuer's name"
+ '#help': '
Which body has granted the grant (e.g. name of the ministry)
'
+ year:
+ '#title': Year
+ '#pattern_error': 'Only numbers'
+ amount:
+ '#title': 'Amount of grant granted'
+ purpose:
+ '#title': 'Description of intended use'
+ '#help': '
Give a brief description, for what purpose has the grant been granted?
'
+ '#counter_maximum_message': '%d/1000 characters remaining'
+ muut_samaan_tarkoitukseen_haetut_avustukset:
+ '#title': 'Other grants applied for to be used for the same purpose'
+ info_muut_samaan_tarkoitukseen_haettu:
+ '#markup': '
Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.
An affirmative answer opens a further question
'
+ olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
+ '#title': 'We have applied for grants from somewhere other than the City of Helsinki'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ haettu_avustus_tieto:
+ '#title': 'Add new grant applied for'
+ '#multiple__no_items_message': '
No values entered. Add a new applied for grant below.
'
+ '#multiple__add_more_button_label': 'Add new grant applied for'
+ '#element':
+ issuer:
+ '#options':
+ 1: State
+ 4: Other
+ 5: Foundation
+ '#title': 'Grant issuer'
+ issuer_name:
+ '#title': "Issuer's name"
+ '#help': '
Which entity has granted the grant (e.g. name of the ministry)
'
+ year:
+ '#title': Year
+ '#pattern_error': 'Only numbers'
+ amount:
+ '#title': 'The amount of the grant applied for'
+ purpose:
+ '#title': 'Description of intended use'
+ '#help': '
Give a brief description, for what purpose has the grant been granted?
'
+ '#counter_maximum_message': '%d/1000 characters remaining'
+ 3_tarkemmat_tiedot:
+ '#title': '3. Information in more detail'
+ hankesuunnitelma_radios:
+ '#title': 'Is the 2nd part of the grant awarded in 2024 now being applied for?'
+ '#description': '
Grant decisions for 2024:
Sports Sub-committee: 11 April 2024 Section 10
Culture and Libraries Sub-committee: 16 April 2024 Section 15
'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ ensisijainen_taiteen_ala:
+ '#title': 'Primary field of art'
+ '#help': '
Choose the option that best describes your activities.
'
+ '#options':
+ 'Design ja käsityö': 'Design and crafts'
+ 'Elokuva, valokuva ja media': 'Film, photography and media'
+ Kaupunkikulttuuri: 'Urban art and culture'
+ Kirjallisuus: Literature
+ 'Kuvataide ja sarjakuva': 'Visual arts and comics'
+ Monitaide: 'Multidisciplinary art'
+ Museo: Museum
+ Musiikki: Music
+ Muu: Other
+ Sirkus: Circus
+ Tanssi: Dance
+ Teatteri: Theatre
+ hankesuunnitelma_section:
+ '#title': '3.1 Project plan'
+ hankesuunnitelma_jatkohakemus:
+ '#title': 'Is the grant to be applied for a renewal application for an ongoing project?'
+ '#description': '
Only answer “yes” to this question if your community already has an ongoing project funded by the same grant and you are applying for additional funding for it.
'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ hankkeen_tarkoitus_tavoitteet:
+ '#title': 'Purpose and goals of the project'
+ '#counter_maximum_message': '%d/2500 characters remaining'
+ hankkeen_toimenpiteet_aikataulu:
+ '#title': 'What are the concrete measures of the project and the schedule for their implementation?'
+ '#counter_maximum_message': '%d/4000 characters remaining'
+ hankkeen_toimenpiteet_toteutus:
+ '#title': 'The concrete measures of the project are to be implemented between'
+ hankkeen_toimenpiteet_alkupvm:
+ '#title': 'Start date'
+ hankkeen_toimenpiteet_loppupvm:
+ '#title': 'End date'
+ hankkeen_keskeisimmat_kumppanit:
+ '#title': 'Specify the main partners of the project and their role in the project'
+ '#counter_maximum_message': '%d/2500 characters remaining'
+ haun_painopisteet_section:
+ '#title': '3.2 Emphases of the grant program'
+ haun_painopisteet_ohje:
+ '#markup': '
Which of the following areas of emphasis of the grant for the promotion of sport and physical activity for the elderly does the project cover?
One or more areas must be implemented in the project. PLEASE NOTE: Only select the areas that you will contribute to in the project in a concrete way.
'
+ haun_painopisteet_liikkumis_kehitys:
+ '#title': 'Does the project develop sport and physical activity opportunities or art and cultural activities in the immediate environment / area? How?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ haun_painopisteet_digi_kehitys:
+ '#title': 'Does the project develop digital / remote cultural activities or activities that encourage people to exercise? How?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ haun_painopisteet_vertais_kehitys:
+ '#title': 'Does the project develop volunteering / peer activities? How?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ haun_painopisteet_kulttuuri_kehitys:
+ '#title': 'Does the project develop the skills of art and cultural operators or create new working methods / structures? How?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_section:
+ '#title': '3.3 Project target groups'
+ hankkeen_kohderyhmat_kenelle:
+ '#title': 'Who is the project primarily aimed at?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_erityisryhmat:
+ '#title': 'Does the project target a special group? For which special group? If not implemented, leave the field blank.'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_tavoitus:
+ '#title': 'How will the target groups of the project be reached?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_konkretia:
+ '#title': 'How will the project promote the functional capacity and well-being of the selected target group with concrete measures?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_osallisuus:
+ '#title': 'How does the project promote inclusion? What is the role of elderly people in the project?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_osaaminen:
+ '#title': 'What kind of expertise do the project operators already have in working with the target group(s) in question?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_kohderyhmat_postinrot:
+ '#title': 'In which postal code area(s) in Helsinki will the project be implemented? Please enter up to three (3) postal code areas in the field and separate them with a comma (,).'
+ hankkeen_kohderyhmat_miksi_alue:
+ '#title': 'Why is/are that particular area(s) selected?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ hankkeen_riskit_section:
+ '#title': '3.4 Risks and analysis'
+ hankkeen_riskit_keskeisimmat:
+ '#title': 'What are the main risks from the point of view of project implementation?'
+ '#counter_maximum_message': '%d/2500 characters remaining'
+ hankkeen_riskit_seuranta:
+ '#title': 'How will monitoring and evaluation be carried out in the project?'
+ '#counter_maximum_message': '%d/2500 characters remaining'
+ hankkeen_riskit_vakiinnuttaminen:
+ '#title': 'Will the intended project activity be established as part of the basic activity of the applicant/other operator after the project? If yes, please describe in the text field how it will be established, otherwise leave the field blank.'
+ '#counter_maximum_message': '%d/2500 characters remaining'
+ hankkeen_valiarviointi_section:
+ '#title': '3.5 Mid-term evaluation of 2-year projects'
+ arviointi_markup:
+ '#markup': '
In this section, evaluate the activities of the project so far using the following questions. Applicants for the 2nd part of the grant must also attach to the application a cost centre report under “Other appendix” for the period 1 June - 31 December 2024.
'
+ arviointi_toteuma:
+ '#title': 'Has the project progressed according to plan? Please rate the project implementation so far on a scale of 1- 100% and justify your response.'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ '#description': 'Have there been significant changes in the project?'
+ arviointi_muutokset_talous:
+ '#title': 'In terms of economy; please specify'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ arviointi_muutokset_toiminta:
+ '#title': 'In terms of activity; please specify'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ arviointi_muutokset_aikataulu:
+ '#title': 'In terms of schedule; please specify'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ arviointi_haasteet:
+ '#title': 'Has the project faced operational challenges? If so, what type of challenges?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ arviointi_saavutettavuus:
+ '#title': 'How have the activities reached the participants in relation to the goals?'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ arviointi_avustus_kaytto:
+ '#help': '
Grant conditions, section 10e: “A grant that has been granted must be returned to the City of Helsinki, the grant has not been used within the period as set down in the grant decision.”
'
+ '#title': 'Is the grant for the first project period expected to be used by the deadline of 31 May 2025? If not, please explain the reasons that led to this.'
+ '#counter_maximum_message': '%d/1250 characters remaining'
+ 4_talousarvio:
+ '#title': '4. Planned budget'
+ tulot_section:
+ '#title': '4.1 Incomes'
+ tulot:
+ '#title': Incomes
+ '#compensation__title': 'The applied grant (€)'
+ '#plannedOtherCompensations__title': 'Other grants (€)'
+ '#sales__title': 'Other incomes (€)'
+ '#ownFunding__title': 'The organizer’s own funding (€)'
+ talous_tulon_tyyppi:
+ '#title': 'Type of income'
+ '#help': '
Write down the type of income in question. Incomes can be, for example, other grants and admission or participation fees. Self financing has to be written down as an income even if the required self financing share is to be funded from the organisations overall operations.
All the appendices listed in the call for applications must be submitted for the processing of the grant application. The grant application may be rejected if the appendices are not submitted. If any of the appendices is missing, let us know in the Further clarification on attachments section of the application.
Appendices previously submitted to the City of Helsinki
If the required appendices have already been submitted as appendices to another grant application addressed to the City of Helsinki, the same appendices do not need to be submitted again. The confirmed financial statements, annual report, action plan and budget of the community cannot be different from one application to another. In this case, under the submitted appendices, indicate “The appendix has been submitted as a single file or with another application”.
'
+ notification_attachments:
+ '#markup': '
The contents of the attachments cannot be viewed afterwards
Please note that you will not be able to open the attachments after you have attached them to the form. You will only see the file name of the attachment.
Although you cannot view the attachments afterwards, the attachments to the form are sent along with the other information on the form to the grant application processor.
'
+ extra_info:
+ '#title': 'Further clarification on attachments'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ muu_liite:
+ '#title': 'Other attachment'
+ '#multiple__add_more_button_label': 'Add attachment'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ actions:
+ '#submit__label': Submit
+ '#draft__label': 'Save as draft'
+ '#wizard_prev__label': Previous
+ '#wizard_next__label': Next
+ '#preview_prev__label': Previous
+ '#preview_next__label': Preview
+ '#delete__label': 'Delete unfinished'
+settings:
+ wizard_confirmation_label: '7. Complete'
+ wizard_prev_button_label: Previous
+ wizard_next_button_label: Next
+ preview_label: '6. Confirm, preview, and submit'
+ preview_title: 'Confirm, preview, and submit'
diff --git a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
index 4a52088f1a..baaa170e55 100644
--- a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
+++ b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
@@ -82,7 +82,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
index 9b176e5549..566f1b029a 100644
--- a/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
+++ b/conf/cmi/language/en/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
@@ -84,7 +84,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': ' Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml
index 4061c225c6..a46e043077 100644
--- a/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml
+++ b/conf/cmi/language/en/webform.webform.kaupunginkanslia_tyollisyysavust.yml
@@ -85,7 +85,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
@@ -119,7 +118,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.kuva_projekti.yml b/conf/cmi/language/en/webform.webform.kuva_projekti.yml
index 25b02d5ff3..ba2f2050b7 100644
--- a/conf/cmi/language/en/webform.webform.kuva_projekti.yml
+++ b/conf/cmi/language/en/webform.webform.kuva_projekti.yml
@@ -104,7 +104,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': ' Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.kuva_toiminta.yml b/conf/cmi/language/en/webform.webform.kuva_toiminta.yml
index 44d3d0a7e6..ce138a5ff9 100644
--- a/conf/cmi/language/en/webform.webform.kuva_toiminta.yml
+++ b/conf/cmi/language/en/webform.webform.kuva_toiminta.yml
@@ -119,7 +119,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml
index 088d568abd..a4b7d15624 100644
--- a/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml
+++ b/conf/cmi/language/en/webform.webform.liikunta_laitosavustushakemus.yml
@@ -82,7 +82,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
@@ -116,7 +115,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
index 59405d65b8..5b4d9d68ab 100644
--- a/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
+++ b/conf/cmi/language/en/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
@@ -74,7 +74,7 @@ elements: |
'#markup': 'Provide a report on the use of the grant received from the City of Helsinki. A report on the use of the grant must be drawn up for the grant concerning the previous accounting period. A report on the use should not be drawn up for the current accounting period. Providing the report on the use is a prerequisite for receiving the next grant. If no report on the use is provided, the grant will not be awarded or paid. A grant awarded may be recovered if the use of the previous grant has not been satisfactorily reported.'
compensation_explanation:
'#title': 'Report on the use of the grant'
- '#help': 'The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. For example, if a community has received a lease grant, the profit and loss account in the financial statements must show the grant in both income and expenses. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.'
+ '#help': '
The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.
Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities, in the previous calendar year between 1 January and 31 December. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.
\r\n"
+ '#markup': '
Summary of rent paid by the club/association for regular training slots elsewhere than in Sports Services’ own facilities. Declare the realized paid rent sum and total hours in the previous calendar year between 1 January and 31 December according to the facility use appendix. The Rents paid for sports facilities section is mandatory if you are applying for a facility use grant.
'
liikuntatiloista_maksetut_vuokrat_fieldset:
'#title': 'Rent paid for sports facilities'
tuntimaara_yhteensa:
@@ -127,7 +126,8 @@ elements: |
vuokrat_yhteensa:
'#title': 'Total / EUR'
seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_:
- '#title': 'Change in the use of facilities planned for the next year, +/- hours and reason'
+ '#title': 'Significant change in the use of facilities planned for the next year, +/- hours and reason'
+ '#help': '
It is possible to include significant changes in the club’s use of sports facilities over the application period for consideration in the amount of the facility usage grant at our discretion. The following are considered significant changes: club mergers, a section(s) joining the club or leaving the club, renting or purchasing a new sports facility (attach the rental agreement to the application) or relinquishing control over or selling a sports facility.
'
seuran_yhdistyksen_saamat_vuokrat_edellisen_kalenterivuoden_ajal:
'#title': 'Rent received by the club/association in the previous calendar year between 1 January and 31 December'
'#description': 'If the club/association receives rental income for its premises, report it here'
@@ -225,8 +225,9 @@ elements: |
'#help': 'In addition to the VOK 1 training arranged by regional sports organisations, the calculation accounts for the number of instructors and coaches who have completed a sports federation’s coach and instructor training that are at least equal in terms of level and content, or who have completed a basic qualification in sports instruction (vocational college), a degree in sports instruction (university of applied sciences) or a master’s degree in sports sciences (sports pedagogy or sports biology).'
lajijaostot_helsinkilaisille_aktiiviharrastajille:
'#title': 'Operating sport divisions for Helsinki residents'
+ '#help': '
In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.
If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.
'
lajijaostot_info:
- '#markup': "
List the regular guided sports activities organised by the club/association by sport. Enter here the number of active members from Helsinki in the previous year, by sport, as well as their realized training hours.
\r\n"
+ '#markup': '
List the regular guided sports activities organised by the club/association by sport. Enter here the number of active members from Helsinki in the previous year, by sport, as well as their realized training hours by age group.
'
club_section:
'#multiple__add_more_button_label': 'Add new sport'
'#multiple__item_label': 'sport'
diff --git a/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml b/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml
index e0dcf1f654..be997d96c2 100644
--- a/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml
+++ b/conf/cmi/language/en/webform.webform.nuorisotoiminta_projektiavustush.yml
@@ -82,7 +82,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': ' Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
@@ -115,7 +114,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml
index b5c5689c0e..63a9f395b0 100644
--- a/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml
+++ b/conf/cmi/language/en/webform.webform.nuortoimpalkka.yml
@@ -66,7 +66,7 @@ elements: |
muut_samaan_tarkoitukseen_myonnetyt_avustukset:
'#title': 'Other grants received for the same purpose'
info_muut_samaan_tarkoitukseen_myonnetty:
- '#text': "
Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
+ '#markup': "
Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
olemme_saaneet_muita_avustuksia:
'#title': 'We have received other grants'
'#options':
@@ -83,11 +83,10 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
- '#help': '
Which body has granted the grant (e.g. name of the ministry)
'
+ '#help': '
Which body has granted the grant (e.g. name of the ministry).
'
year:
'#title': Year
'#pattern_error': 'Only numbers'
@@ -100,7 +99,7 @@ elements: |
muut_samaan_tarkoitukseen_haetut_avustukset:
'#title': 'Other grants applied for to be used for the same purpose'
info_muut_samaan_tarkoitukseen_haettu:
- '#text': "
Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
+ '#markup': "
Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
'#title': 'We have applied for grants from somewhere other than the City of Helsinki'
'#options':
@@ -117,7 +116,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.sotepe_yleis.yml b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml
new file mode 100644
index 0000000000..4f4a941508
--- /dev/null
+++ b/conf/cmi/language/en/webform.webform.sotepe_yleis.yml
@@ -0,0 +1,295 @@
+title: 'General grants for social welfare, health care and rescue services'
+elements: |
+ 1_hakijan_tiedot:
+ '#title': '1. Applicant details'
+ '#prev_button_label': 'Previous'
+ '#next_button_label': 'Next'
+ yhteiso_jolle_haetaan_avustusta:
+ '#title': 'Community for which the grant is being applied for'
+ prh_markup:
+ '#markup': '
The indicated information has been retrieved from the register of the Finnish Patent and Registration Office (PRH), and changing the information is only possible in the online service in question.
'
+ hakijan_tiedot:
+ '#title': Applicant
+ contact_person_email_section:
+ '#title': Email
+ contact_markup:
+ '#markup': 'Provide here a community email address that is actively read. Contact requests related to the grant application, such as requests for further clarification and completion, will be sent to the email address.'
+ email:
+ '#title': 'Email address'
+ '#help': 'Provide the email address to which you want the messages and notifications related to this application to be sent and which is actively read.'
+ contact_person_section:
+ '#title': 'Contact person for the application'
+ contact_person:
+ '#title': 'Contact person'
+ contact_person_phone_number:
+ '#title': 'Phone number'
+ osoite:
+ '#title': Address
+ community_address:
+ '#title': Address
+ '#help': 'If you want to add, delete or change address information, save the application as a draft and go to maintain the address information in your own data.'
+ '#community_address_select__title': 'Select the address'
+ tilinumero:
+ '#title': 'Account number'
+ bank_account:
+ '#title': 'Account number'
+ '#help': 'If you want to add, delete or change account number information, save the application as a draft and go to maintain the account number information in your own data.'
+ '#account_number_select__title': 'Select the account number'
+ '#account_number__title': ''
+ toiminnasta_vastaavat_henkilot:
+ '#title': 'Persons responsible for operations'
+ community_officials:
+ '#help': 'If you want to add, delete or change people, save the application as a draft and go to maintain the people's information in your own data.'
+ '#title': 'Persons responsible for operations'
+ '#multiple__add_more_button_label': 'Add person'
+ '#multiple__item_label': person
+ '#community_officials_select__title': 'Select official'
+ 2_avustustiedot:
+ '#title': '2. Grant details'
+ '#prev_button_label': 'Previous'
+ '#next_button_label': 'Next'
+ avustuksen_tiedot:
+ '#title': 'Grant details'
+ acting_year:
+ '#title': 'Year for which I am applying for a grant'
+ avustuslajit:
+ '#title': 'Types of grant'
+ subventions:
+ '#title': Grants
+ kayttotarkoitus:
+ '#title': 'Purpose of use'
+ compensation_purpose:
+ '#title': 'For what purpose will the grant be used?'
+ '#help': 'Provide a short description of the scope and nature of the activities to be carried out with the grant e.g. as follows: How much or how often will you organise groups, events or other activities during the period of the grant? How many target group representatives do you expect to reach? In what areas of Helsinki will the activities be arranged? What kind of cooperation do you pursue with other operators in Helsinki?'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ who_benefits:
+ '#title': 'Who are the main beneficiaries of your activities?'
+ '#help': 'Describe who belong to your target group and possibly also how many target group members there are in your operational area. It is important that the target group description shows what kind of people you want and can reach or what kind of people and in what situation will benefit most from your activities.'
+ changes_on_success:
+ '#title': 'What kind of changes will take place if you succeed?'
+ '#help': 'Your activities may have many goals. Describe and assess the key changes you are seeking to achieve in your target group's functioning and in their everyday life, relationships or other aspects related to well-being and health or involvement, for example. So what will change if you have succeeded or what kind of phenomena do your activities prevent?'
+ results_of_activities:
+ '#title': 'What are the benefits of the activities to be supported?'
+ '#help': 'Briefly describe the effects of the activities and how they are achieved. You can describe the effects in the order in which they occur: which effects occur first and which after a little longer time. However, focus on the immediate effects of the activities. You can indicate what is special about your activities or what (quality) factors need to be taken care of in order to achieve the desired effects. You can also describe how any cooperation you have pursued will contribute to achieving the effects.'
+ muut_samaan_tarkoitukseen_myonnetyt_avustukset:
+ '#title': 'Other grants received for the same purpose'
+ info_muut_samaan_tarkoitukseen_myonnetty:
+ '#markup': "
Indicate here only the grants received from somewhere other than the City of Helsinki in the current and two previous tax years.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
+ olemme_saaneet_muita_avustuksia:
+ '#title': 'We have received other grants'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ myonnetty_avustus:
+ '#title': 'Received grant'
+ '#multiple__no_items_message': 'No values entered. Add the new grant granted below.'
+ '#multiple__add_more_button_label': 'Add new received grant'
+ '#element':
+ issuer:
+ '#options':
+ 1: State
+ 3: EU
+ 4: Other
+ 5: Foundation
+ '#title': ' Grant issuer'
+ issuer_name:
+ '#title': 'Issuer''s name'
+ '#help': 'Which body has granted the grant (e.g. name of the ministry)'
+ year:
+ '#title': Year
+ '#pattern_error': 'Enter a year between 1900 - 2100'
+ amount:
+ '#title': 'Amount of grant granted'
+ purpose:
+ '#title': ' Description of intended use'
+ '#help': 'Give a brief description, for what purpose has the grant been granted?'
+ '#counter_maximum_message': '%d/1000 characters remaining'
+ muut_samaan_tarkoitukseen_haetut_avustukset:
+ '#title': 'Other grants applied for to be used for the same purpose'
+ info_muut_samaan_tarkoitukseen_haettu:
+ '#markup': "
Indicate here only the grants that have been applied for from somewhere other than the City of Helsinki and for which the decisions have not been made yet.
\r\n\r\n
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
+ olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
+ '#title': 'We have applied for grants from somewhere other than the City of Helsinki'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ haettu_avustus_tieto:
+ '#title': 'Add new grant applied for'
+ '#multiple__no_items_message': 'No values entered. Add a new applied for grant below.'
+ '#multiple__add_more_button_label': 'Add new grant applied for'
+ '#element':
+ issuer:
+ '#options':
+ 1: State
+ 3: EU
+ 4: Other
+ 5: Foundation
+ '#title': 'Grant issuer'
+ issuer_name:
+ '#title': 'Issuer''s name'
+ '#help': 'Which body has granted the grant (e.g. name of the ministry)'
+ year:
+ '#title': Year
+ '#pattern_error': 'Enter a year between 1900 - 2100'
+ amount:
+ '#title': 'The amount of the grant applied for'
+ purpose:
+ '#title': 'Description of intended use'
+ '#help': 'Give a brief description, for what purpose has the grant been granted?'
+ '#counter_maximum_message': '%d/1000 characters remaining'
+ edellisen_avustuksen_kayttoselvitys:
+ '#title': 'Report on the use of the previous grant'
+ compensation_boolean_info:
+ '#markup': "
\r\n
\r\n
An affirmative answer opens a further question
\r\n
\r\n
\r\n"
+ compensation_boolean:
+ '#title': 'Report on the use of the grant I received in the previous year'
+ '#options':
+ - 'I have not received a grant from the City of Helsinki for the same purpose in the previous year.'
+ - 'I received a grant from the city of Helsinki for the same purpose last year.'
+ markup:
+ '#markup': 'Provide a report on the use of the grant received from the City of Helsinki. A report on the use of the grant must be drawn up for the grant concerning the previous accounting period. A report on the use should not be drawn up for the current accounting period. Providing the report on the use is a prerequisite for receiving the next grant. If no report on the use is provided, the grant will not be awarded or paid. A grant awarded may be recovered if the use of the previous grant has not been satisfactorily reported.'
+ compensation_explanation:
+ '#title': 'Report on the use of the grant'
+ '#help': 'The report on the use must briefly describe how the received grant has been used. The recipient must arrange its accounting in such a way that it is possible to monitor the use of the grant. For example, if a community has received a lease grant, the profit and loss account in the financial statements must show the grant in both income and expenses. Further information on the use of the grant can also be written in a separate attachment, which can be returned under Report on the use.'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ 3_yhteison_tiedot:
+ '#title': '3. Activities of the community'
+ '#prev_button_label': 'Previous'
+ '#next_button_label': 'Next'
+ business_info:
+ '#title': 'Description of activities'
+ business_purpose:
+ '#title': 'Description of activities'
+ '#help': 'If you want to add, remove or change the description of activities, save the application as a draft and go to your data to maintain the description of activities.'
+ '#counter_maximum_message': '%d/500 characters remaining'
+ community_practices_business:
+ '#title': 'Is the entity engaged in business?'
+ '#options':
+ 1: 'Yes'
+ 0: 'No'
+ ensimmainen_otsikko:
+ '#title': 'Membership fees'
+ fee_person:
+ '#title': 'Individual membership fee (€/year)'
+ fee_community:
+ '#title': 'Community member (€/year)'
+ jasenmaara:
+ '#title': 'Numbers of members'
+ jasenmaara_fieldset:
+ '#title': 'Numbers of members'
+ '#help': 'If the community has members, please list them here.'
+ members_applicant_person_global:
+ '#title': 'Total number of individual members'
+ '#help': 'How many individual members does the community currently have who have paid the membership fee?'
+ members_applicant_person_local:
+ '#title': 'Total number of individual members in Helsinki'
+ '#help': 'How many individual members does the community currently have in Helsinki who have paid the membership fee?'
+ members_applicant_community_global:
+ '#title': 'Community members'
+ '#help': 'How many community members does the community currently have who have paid the membership fee? Community members are non-individual members, such as associations, foundations, companies or municipalities.'
+ members_applicant_community_local:
+ '#title': 'Total number of community members in Helsinki'
+ '#help': 'How many community members does the community currently have in Helsinki who have paid the membership fee? Community members are non-individual members, such as associations, foundations, companies or municipalities.'
+ lisatiedot_ja_liitteet:
+ '#title': '4. Additional information and attachments'
+ lisatietoja_hakemukseen_liittyen:
+ '#title': 'Additional information concerning the application'
+ additional_information:
+ '#title': 'Additional information'
+ '#help': 'If necessary, you can write additional information or other justifications related to the application.'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ liitteet:
+ '#title': Attachments
+ attachments_info:
+ '#markup': |-
+
All the attachments listed below must be submitted for the processing of the grant application. The grant application may be rejected if the attachments are not submitted. If any of the attachments is missing, let us know in the Further clarification on attachments section of the application.
+
+
Required attachments
+
For the processing of the grant application, the required attachments are the confirmed attachments approved and signed by the community at its meeting for the previous accounting period and for the operating year for which the grant is being applied for. The attachments concerning the previous accounting period are the financial statements, the annual report, the audit or performance audit report and the minutes of the annual meeting. The attachments for the year for which the grant is being applied for are the budget and action plan.
+
Submission of several attachments as a single file
+
If you wish, you can submit several attachments as a single file under Financial statements or Budget. In this case, under the other attachment headings, indicate “The attachment has been submitted as a single file or with another application.”
+
Attachments previously submitted to the City of Helsinki
+
If the required attachments have already been submitted as attachments to another grant application addressed to the City of Helsinki, the same attachments do not need to be submitted again. The confirmed financial statements, annual report, action plan and budget of the community cannot be different from one application to another. In this case, under the submitted attachments, indicate “The attachment has been submitted as a single file or with another application”.
+ notification_attachments:
+ '#markup': "
\r\n
\r\n
The contents of the attachments cannot be viewed afterwards
\r\n\r\n
\r\n
Please note that you will not be able to open the attachments after you have attached them to the form. You will only see the file name of the attachment.
\r\n\r\n
Although you cannot view the attachments afterwards, the attachments to the form are sent along with the other information on the form to the grant application processor.
\r\n
\r\n
\r\n
\r\n"
+ yhteison_saannot:
+ '#title': 'Community Rules'
+ '#help': 'A new applicant or the rules have changed.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_tilinpaatos:
+ '#title': 'Confirmed financial statements (for the previous accounting period)'
+ '#help': "The financial statements must include at least the profit and loss account and the balance sheet. An association must append to this section the financial statements confirmed and signed at the association’s annual meeting. \r\nThe community’s accounting period may be a calendar year or some other period. In the case of associations, their own rules state what the association’s accounting period is."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_toimintakertomus:
+ '#title': 'Confirmed annual report (for the previous accounting period)'
+ '#help': "An association must append to this section the annual report confirmed at the association’s annual meeting. If the annual report is part of the financial statements and you have already appended it to the form with the financial statements, it does not need to be appended here separately. In this case, under the annual report, indicate “The attachment has been submitted as a single file or with another application”."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_tilin_tai_toiminnantarkastuskertomus:
+ '#title': 'Confirmed audit or performance audit report (for the previous accounting period)'
+ '#help': "An association must append to this section the annual report confirmed at the association’s annual meeting. If the annual report is part of the financial statements and you have already appended it to the form with the financial statements, it does not need to be appended here separately. In this case, under the annual report, indicate “The attachment has been submitted as a single file or with another application”."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vuosikokouksen_poytakirja:
+ '#title': 'Minutes of the annual meeting confirming the financial statements for the previous accounting period'
+ '#help': 'Append here the minutes of the community meeting in which the financial statements for the previous accounting period are confirmed and discharge from liability granted. For associations, the financial statements are always confirmed at the association’s annual meeting. If the community is not required to have an annual meeting or other community meeting at which the financial statements should be approved and discharge from liability granted, this attachment does not need to be submitted.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ toimintasuunnitelma:
+ '#title': 'Action plan (for the year for which you are applying for a grant)'
+ '#help': 'Append here the action plan for the whole community.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ talousarvio:
+ '#title': 'Budget (for the year for which you are applying for a grant)'
+ '#help': 'Budget (for the year for which you are applying for a grant)'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ extra_info:
+ '#title': 'Further clarification on attachments'
+ '#counter_maximum_message': '%d/5000 characters remaining'
+ muu_liite:
+ '#title': 'Other attachment'
+ '#multiple__add_more_button_label': 'Add attachment'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ actions:
+ '#submit__label': Submit
+ '#draft__label': 'Save as draft'
+ '#wizard_prev__label': 'Previous'
+ '#wizard_next__label': 'Next'
+ '#preview_prev__label': 'Previous'
+ '#preview_next__label': 'Preview'
+ '#delete__label': ' Delete unfinished'
+settings:
+ wizard_prev_button_label: Previous
+ wizard_next_button_label: Next
+ preview_label: '5. Confirm, preview, and submit'
+ preview_title: 'Confirm, preview, and submit'
+ wizard_confirmation_label: '6. Complete'
diff --git a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
index 6a02c17a6f..1445e29f01 100644
--- a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
+++ b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
@@ -126,7 +126,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': ' Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
index 38bae87209..7f97d89e9b 100644
--- a/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
+++ b/conf/cmi/language/en/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
@@ -91,7 +91,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml b/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml
index 9460ee28c3..3c9378bc81 100644
--- a/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml
+++ b/conf/cmi/language/en/webform.webform.yleisavustushakemus.yml
@@ -80,7 +80,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
@@ -114,7 +113,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml b/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml
index 7ec7f0db9c..8bbdf3a774 100644
--- a/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml
+++ b/conf/cmi/language/en/webform.webform.ymparistopalvelut_yleisavustus.yml
@@ -83,7 +83,6 @@ elements: |
3: EU
4: Other
5: Foundation
- 6: STEA
'#title': 'Grant issuer'
issuer_name:
'#title': 'Issuer''s name'
diff --git a/conf/cmi/language/fi/grants_metadata.settings.yml b/conf/cmi/language/fi/grants_metadata.settings.yml
index 6acfc02f84..a13f128953 100644
--- a/conf/cmi/language/fi/grants_metadata.settings.yml
+++ b/conf/cmi/language/fi/grants_metadata.settings.yml
@@ -69,4 +69,12 @@ third_party_options:
44: Kehittämisavustus
45: 'Helsingin mallin kehittämisavustus'
46: 'Taiteen perusopetuksen kehittämisavustus'
+ 47: 'Kulttuurin erityisavustus 1'
+ 48: 'Kulttuurin erityisavustus 2'
+ 49: 'Nuorison erityisavustus 1'
+ 50: 'Nuorison erityisavustus 2'
+ 51: 'Liikunnan erityisavustus 1'
+ 52: 'Liikunnan erityisavustus 2'
+ 53: 'Kulttuurin ja vapaa-ajan erityisavustus 1'
+ 54: 'Kulttuurin ja vapaa-ajan erityisavustus 2'
langcode: fi
diff --git a/conf/cmi/language/sv/grants_metadata.settings.yml b/conf/cmi/language/sv/grants_metadata.settings.yml
index a5e6eb9a86..b4644c778c 100644
--- a/conf/cmi/language/sv/grants_metadata.settings.yml
+++ b/conf/cmi/language/sv/grants_metadata.settings.yml
@@ -69,4 +69,12 @@ third_party_options:
44: Utvecklingsunderstöd
45: 'Utvecklingsunderstöd för Helsingforsmodellen'
46: 'Utvecklingsunderstöd för grundläggande konstundervisning'
+ 47: 'Specialunderstöd för kultur 1'
+ 48: 'Specialunderstöd för kultur 2'
+ 49: 'Specialunderstöd för ungdomsverksamhet 1'
+ 50: 'Specialunderstöd för ungdomsverksamhet 2'
+ 51: 'Specialunderstöd för idrott 1'
+ 52: 'Specialunderstöd för idrott 2'
+ 53: 'Specialunderstöd för kultur och fritid 1'
+ 54: 'Specialunderstöd för kultur och fritid 2'
langcode: sv
diff --git a/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml b/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml
index c19f2645b4..4f1a00f00a 100644
--- a/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml
+++ b/conf/cmi/language/sv/webform.webform.hyte_yleisavustus.yml
@@ -85,7 +85,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
@@ -119,7 +118,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml
new file mode 100644
index 0000000000..be67445b87
--- /dev/null
+++ b/conf/cmi/language/sv/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml
@@ -0,0 +1,315 @@
+title: 'KUVA: ansökan om understöd för främjande av motion och kulturverksamhet hos äldre'
+elements: |
+ 1_hakijan_tiedot:
+ '#title': '1. Sökandens uppgifter'
+ '#prev_button_label': Tidigare
+ '#next_button_label': Nästa
+ hakemusprofiili:
+ '#title': 'Hämtade uppgifter'
+ prh_markup:
+ '#markup': '
Ange här samfundets e-postadress som läses aktivt. Till e-postadressen skickas kontaktförfrågningar som är relaterade till ansökan om understöd, såsom begäranden om tilläggsutredning och komplettering
'
+ email:
+ '#title': E-postadress
+ '#help': '
Ange en e-postadress dit meddelandena och begärandena relaterade till denna ansökan kommer att skickas och som läses aktivt.
Om du vill lägga till, ta bort eller ändra adressuppgifter, spara ansökan som ett utkast och gå till att behålla adressuppgifterna i dina egna uppgifter.
Om du vill lägga till, radera eller ändra kontonummerinformation, spara applikationen som ett utkast och gå till att behålla kontonummerinformationen i din egen data.
'
+ '#account_number_select__title': 'Välj ett kontonummer'
+ '#account_number__title': ''
+ toiminnasta_vastaavat_henkilot:
+ '#title': 'Personer som ansvarar för verksamheten'
+ community_officials:
+ '#help': '
Om du vill lägga till, ta bort eller ändra personer, spara applikationen som ett utkast och gå till att underhålla personernas information i din egen data.
'
+ '#title': 'Personer som ansvarar för verksamheten'
+ '#multiple__add_more_button_label': 'Lägg till en person'
+ '#community_officials_select__title': 'Välj motsvarande person'
+ '#role__title': Roll
+ '#email__title': E-post
+ '#phone__title': Telefonnummer
+ 2_avustustiedot:
+ '#title': '2. Uppgifter om understödet'
+ avustuksen_tiedot:
+ '#title': 'Uppgifter om understödet'
+ acting_year:
+ '#title': 'År för vilket jag ansöker om understöd'
+ avustuslajit:
+ '#title': Understöd
+ subventions:
+ '#title': 'Typ av stöd'
+ grants_compensations_information:
+ '#markup': '
Ansök alltid endast om en typ av understöd åt gången.
'
+ kayttotarkoitus:
+ '#title': 'Användningsän damål'
+ compensation_purpose:
+ '#title': 'En kort beskrivning av användningsändamålet för det/de understöd som ansöks'
+ '#help': '
Ange för vilket ändamål understödet ansöks och vid behov specificera de olika ändamålen. Ange också vad understödet är avsett för och vilka mål som är relaterade till den understödda verksamheten.
'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ other_grants_for_same_purpose:
+ '#title': 'Övriga understöd som beviljats för samma ändamål'
+ info_muut_samaan_tarkoitukseen_myonnetty:
+ '#markup': '
Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.
Ett jakande svar öppnar ytterligare en fråga
'
+ olemme_saaneet_muita_avustuksia:
+ '#title': 'Vi har fått andra understöd'
+ '#options':
+ 1: Ja
+ 0: Nej
+ myonnetty_avustus:
+ '#title': 'Bidrag beviljat'
+ '#multiple__no_items_message': '
Inga värden har angetts. Lägg till det nya beviljade bidraget nedan.
Vilket organ har beviljat bidraget (t.ex. namnet på departementet)
'
+ year:
+ '#title': År
+ '#pattern_error': 'Ange ett årtal'
+ amount:
+ '#title': 'Beviljat bidragsbelopp'
+ purpose:
+ '#title': 'Beskrivning av avsedd användning'
+ '#help': '
Ge en kort beskrivning, i vilket syfte har bidraget beviljats?
'
+ '#counter_maximum_message': '%d/1000 tecken kvar'
+ muut_samaan_tarkoitukseen_haetut_avustukset:
+ '#title': 'Övriga understöd som ansökts för samma ändamål'
+ info_muut_samaan_tarkoitukseen_haettu:
+ '#markup': '
Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.
Ett jakande svar öppnar ytterligare en fråga
'
+ olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
+ '#title': 'Vi har ansökt om understöd från annanstans än Helsingfors Stad'
+ '#options':
+ 1: Ja
+ 0: Nej
+ haettu_avustus_tieto:
+ '#title': 'Lägg till nytt understöd som ansökts'
+ '#multiple__no_items_message': '
Ei syötettyjä arvoja. Lisää uusi haettu avustus alta.
'
+ '#multiple__add_more_button_label': 'Lägg till nytt understöd som ansökts'
+ '#element':
+ issuer:
+ '#options':
+ 1: Stat
+ 4: Övrig
+ 5: Fundament
+ '#title': Bidragsgivare
+ issuer_name:
+ '#title': 'Emittentens namn'
+ '#help': '
Vilket organ har beviljat bidraget (t.ex. namnet på departementet)
'
+ year:
+ '#title': År
+ '#pattern_error': 'Ange ett årtal'
+ amount:
+ '#title': 'Beviljat bidragsbelopp'
+ purpose:
+ '#title': 'Beskrivning av avsedd användning'
+ '#help': '
Ge en kort beskrivning, i vilket syfte har bidraget beviljats?
'
+ '#counter_maximum_message': '%d/1000 tecken kvar'
+ 3_tarkemmat_tiedot:
+ '#title': '3. Mer detaljerad information'
+ hankesuunnitelma_radios:
+ '#title': 'Ansöker du nu om den andra delen av ett tvåårigt understöd som beviljades 2024?'
+ '#description': '
Beslut om understöd för 2024:
Idrottssektionen: 11.4.2024 §10
Kultur- och bibliotekssektionen: 16.4.2024 §15
'
+ '#options':
+ 1: Ja
+ 0: Nej
+ ensisijainen_taiteen_ala:
+ '#title': 'Huvudsaklig konstart '
+ '#help': '
Välj det alternativ, som bäst motsvarar er verksamhet.
'
+ '#options':
+ 'Design ja käsityö': 'Design och hantverk'
+ 'Elokuva, valokuva ja media': 'Film, fotokonst och media'
+ Kaupunkikulttuuri: Stadskultur
+ Kirjallisuus: Litteratur
+ 'Kuvataide ja sarjakuva': 'Bildkonst och seriekonst'
+ Monitaide: 'Tvärkonstnärlig verksamhet'
+ Museo: Museum
+ Musiikki: Musik
+ Muu: Annat
+ Sirkus: Cirkus
+ Tanssi: Dans
+ Teatteri: Teater
+ hankesuunnitelma_section:
+ '#title': '3.1 Projektplan'
+ hankesuunnitelma_jatkohakemus:
+ '#title': 'Är understödet du ansöker om en förlängning av ett pågående projekt?'
+ '#description': '
Svara bara ”ja” på den här frågan om din sammanslutning redan har ett pågående projekt som finansieras med samma understöd och du ansöker om fortsatt finansiering.
'
+ '#options':
+ 1: Ja
+ 0: Nej
+ hankkeen_tarkoitus_tavoitteet:
+ '#title': 'Syfte och mål med projektet'
+ '#counter_maximum_message': '%d/2500 tecken kvar'
+ hankkeen_toimenpiteet_aikataulu:
+ '#title': 'Vilka är de konkreta åtgärderna för projektet och tidtabellen för när de ska genomföras?'
+ '#counter_maximum_message': '%d/4000 tecken kvar'
+ hankkeen_toimenpiteet_toteutus:
+ '#title': 'Enligt planen ska de konkreta åtgärderna i projektet genomföras mellan'
+ hankkeen_toimenpiteet_alkupvm:
+ '#title': Startdatum
+ hankkeen_toimenpiteet_loppupvm:
+ '#title': Slutdatum
+ hankkeen_keskeisimmat_kumppanit:
+ '#title': 'Namnge de viktigaste samarbetspartnerna och deras roll i projektet'
+ '#counter_maximum_message': '%d/2500 tecken kvar'
+ haun_painopisteet_section:
+ '#title': '3.2 Tyngdpunkter för ansökan'
+ haun_painopisteet_ohje:
+ '#markup': '
Vilken av följande tyngdpunkter för understödet för främjande av idrott hos äldre är projektet inriktat på?
Projektet ska arbeta för en eller flera tyngdpunkter. OBS! Välj bara de tyngdpunkter som ni kommer att bidra till på ett konkret sätt genom projektet.
'
+ haun_painopisteet_liikkumis_kehitys:
+ '#title': 'Bidrar projektet till att utveckla möjligheter till idrott eller konst- och kulturverksamhet i närområdet/regionalt? På vilket sätt?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ haun_painopisteet_digi_kehitys:
+ '#title': 'Bidrar projektet till att utveckla kulturaktiviteter eller verksamhet som uppmuntrar till idrott som ordnas digitalt/på distans? På vilket sätt?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ haun_painopisteet_vertais_kehitys:
+ '#title': 'Bidrar projektet till att utveckla frivillig- /kamratverksamhet? På vilket sätt?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ haun_painopisteet_kulttuuri_kehitys:
+ '#title': 'Bidrar projektet till att utveckla kompetensen hos konst- och kulturaktörer eller skapa nya arbetssätt/strukturer? På vilket sätt?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_section:
+ '#title': '3.3 Projektets målgrupper'
+ hankkeen_kohderyhmat_kenelle:
+ '#title': 'Vem är den huvudsakliga målgruppen för projektet?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_erityisryhmat:
+ '#title': 'Riktar sig projektet till någon särskild grupp? Till vilken särskild grupp? Om svaret är ”nej”, lämna tomt.'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_tavoitus:
+ '#title': 'Hur ska ni nå ut med projektet till målgrupperna?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_konkretia:
+ '#title': 'På vilket sätt bidrar projektet till att främja den valda målgruppens funktionsförmåga och välbefinnande genom konkreta åtgärder?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_osallisuus:
+ '#title': 'På vilket sätt främjar projektet delaktighet? Vilken roll har äldre personer i projektet?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_osaaminen:
+ '#title': 'Vilken kompetens har aktörerna i projektet i förväg att arbeta med målgruppen/- grupperna?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_kohderyhmat_postinrot:
+ '#title': 'Inom vilket/vilka postnummerområden i Helsingfors kommer projektet att genomföras? Ange upp till tre (3) postnummerområden och separera dem med kommatecken (,).'
+ hankkeen_kohderyhmat_miksi_alue:
+ '#title': 'Varför har ni valt just det/de områdena?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ hankkeen_riskit_section:
+ '#title': '3.4 Risker och analys'
+ hankkeen_riskit_keskeisimmat:
+ '#title': 'Vilka är de största riskerna när det gäller genomförande av projektet?'
+ '#counter_maximum_message': '%d/2500 tecken kvar'
+ hankkeen_riskit_seuranta:
+ '#title': 'Hur kommer ni att följa upp och utvärdera projektet?'
+ '#counter_maximum_message': '%d/2500 tecken kvar'
+ hankkeen_riskit_vakiinnuttaminen:
+ '#title': 'Är den planerade verksamheten för projektet avsedd att bli en permanent del av den grundläggande verksamheten hos den sökande/en annan aktör efter projektet? Om ja, beskriv i textrutan hur det här kommer att ske, lämna annars tomt.'
+ '#counter_maximum_message': '%d/2500 tecken kvar'
+ hankkeen_valiarviointi_section:
+ '#title': '3.5 Mellanutvärderin g av tvååriga projekt'
+ arviointi_markup:
+ '#markup': '
I den här delen ska du använda följande frågor för att utvärdera verksamheten inom projektet hittills. Om du ansöker om andra delen av understödet ska du även bifoga en kostnadsställesrapport för perioden 1.6–31.12.2024 under Övriga bilagor.
'
+ arviointi_toteuma:
+ '#title': 'Har projektet framskridit enligt planen? Bedöm projektets resultat hittills på en skala 1–100 procent och motivera ditt svar.'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ '#description': 'Har det skett några väsentliga förändringar i projektet?'
+ arviointi_muutokset_talous:
+ '#title': 'Gällande ekonomin; vilka?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ arviointi_muutokset_toiminta:
+ '#title': 'Gällande verksamheten; vilka?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ arviointi_muutokset_aikataulu:
+ '#title': 'Gällande tidsplanen; vilka?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ arviointi_haasteet:
+ '#title': 'Har projektet stött på utmaningar som har påverkat verksamheten? Om ja, vilka utmaningar?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ arviointi_saavutettavuus:
+ '#title': 'Hur har verksamheten nått ut till deltagarna i förhållande till målen?'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ arviointi_avustus_kaytto:
+ '#help': '
Understödsvillkor, punkt 10 e: ”Beviljat understöd ska återbetalas till Helsingfors stad om understödet inte har använts inom den tid då det enligt understödsbeslutet borde ha förbrukats.”
'
+ '#title': 'Kommer understödet för den första projektperioden att användas inom tidsfristen (31.5.2025)? Om inte, förklara orsakerna här.'
+ '#counter_maximum_message': '%d/1250 tecken kvar'
+ 4_talousarvio:
+ '#title': '4. Budget'
+ tulot_section:
+ '#title': '4.1 Inkomster'
+ tulot:
+ '#title': Inkomster
+ '#compensation__title': 'Ansökt stöd (€)'
+ '#plannedOtherCompensations__title': 'Övriga understöd (€)'
+ '#sales__title': 'Övriga egna inkomster (€)'
+ '#ownFunding__title': 'Egenfinansiering (€)'
+ talous_tulon_tyyppi:
+ '#title': 'Typ av inkomst '
+ '#help': '
Skriv ner vilken typ av inkomst det gäller. Inkomster kan till exempel vara andra understöd och inträdes- eller deltagaravgifter. Självfinansiering måste uppges som en inkomst även om den självfinansierade delen finansieras med sökandes övrig verksamhet.
'
+ '#multiple__add_more_button_label': 'Lägg till en intäkt'
+ menot_section:
+ '#title': '4.2 Utgifter'
+ talous_menon_tyyppi:
+ '#title': 'Typ av utgift'
+ '#help': '
Skriv ner vilken typ av utgift det gäller. Utgifter kan till exempel vara andra lokalhyror och personalkostnader.
'
+ '#multiple__add_more_button_label': 'Lägg till en utgift'
+ lisatiedot_ja_liitteet:
+ '#title': '5. Ytterligare information och bilagor'
+ lisatietoja_hakemukseen_liittyen:
+ '#title': 'Ytterligare information för ansökan'
+ additional_information:
+ '#title': 'Ytterligare information'
+ '#help': '
Här kan du vid behov skriva ytterligare information eller andra motiveringar som rör ansökan eller meddela om ändringar i basuppgifterna.
Alla bilagor som anges i utlysningen måste lämnas in för behandling av ansökan om understöd. Ansökan om understöd kan avslås om bilagorna inte har lämnats in. Om någon av bilagorna saknas, meddela oss om det i punkten Ytterligare information om bilagor i ansökan.
Bilagor som tidigare lämnats in till Helsingfors stad
Om de erforderliga bilagorna redan har lämnats in som bilaga till en annan ansökan om understöd till Helsingfors stad, behöver samma bilagor inte lämnas in igen. Samfundets fastställda bokslut, verksamhetsberättelse, verksamhetsplan och budget får inte vara olika i bilagor till de olika ansökningarna. Ange i detta fall vid de inlämnade bilagorna att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.
'
+ notification_attachments:
+ '#markup': '
Innehållet i bilagorna kan inte granskas i efterhand
Observera att du inte kan öppna bilagorna efter att du har bifogat dem blanketten. Du ser bara bilagans filnamn.
Även om du inte kan granska innehållet i bilagorna i efterhand skickas bilagorna som bifogats blanketten med övriga uppgifter till personen som behandlar ansökan om understöd.
'
+ extra_info:
+ '#title': 'Ytterligare information om bilagorna'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ muu_liite:
+ '#title': 'Annan bilaga'
+ '#multiple__add_more_button_label': 'Lägg till en bilaga'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ actions:
+ '#submit__label': Skicka
+ '#draft__label': 'Spara som oavslutad'
+ '#wizard_prev__label': Tidigare
+ '#wizard_next__label': Nästa
+ '#preview_prev__label': Tidigare
+ '#preview_next__label': 'För förhandsvisning'
+ '#delete__label': 'Radera oavslutat'
+settings:
+ wizard_confirmation_label: '7. Slutförd'
+ wizard_prev_button_label: Tidigare
+ wizard_next_button_label: Nästa
+ preview_label: '6. Bekräfta, förhandsgranska och skicka'
+ preview_title: 'Bekräfta, förhandsgranska och skicka'
diff --git a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
index cfc0cd2964..568dfd85ba 100644
--- a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
+++ b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
@@ -85,7 +85,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
index fa0f7d4b54..435b9a5907 100644
--- a/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
+++ b/conf/cmi/language/sv/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
@@ -87,7 +87,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml
index 7d24e07b6b..b1bd2a72a9 100644
--- a/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml
+++ b/conf/cmi/language/sv/webform.webform.kaupunginkanslia_tyollisyysavust.yml
@@ -88,7 +88,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
@@ -122,7 +121,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.kuva_projekti.yml b/conf/cmi/language/sv/webform.webform.kuva_projekti.yml
index 2962bcbd20..16930ff1b1 100644
--- a/conf/cmi/language/sv/webform.webform.kuva_projekti.yml
+++ b/conf/cmi/language/sv/webform.webform.kuva_projekti.yml
@@ -107,7 +107,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml b/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml
index 417f267211..40d69cdbda 100644
--- a/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml
+++ b/conf/cmi/language/sv/webform.webform.kuva_toiminta.yml
@@ -121,7 +121,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml
index 363a343e43..7c3b12d8d7 100644
--- a/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml
+++ b/conf/cmi/language/sv/webform.webform.liikunta_laitosavustushakemus.yml
@@ -85,7 +85,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
@@ -119,7 +118,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
index 92016a206a..ab4e408957 100644
--- a/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
+++ b/conf/cmi/language/sv/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
@@ -79,7 +79,7 @@ elements: |
'#markup': 'Ge en redovisning om understödet som fåtts från Helsingfors stad. Redovisningen görs om understödet som beviljats för den senaste avslutade räkenskapsperioden. Redovisning görs inte om den innevarande räkenskapsperioden. Redovisningen krävs för att få ett nytt understöd. Om en redovisning inte görs, kommer ett understöd inte att beviljas eller betalas ut. Det beviljade understödet kan återkrävas om användningen av det tidigare understödet inte har redogjorts för på ett tillfredsställande sätt.'
compensation_explanation:
'#title': 'Redovisning om användningen av understödet'
- '#help': 'I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Om samfundet till exempel har fått hyresunderstöd ska det av resultaträkningen i bokslutet framgå både intäkter och utgifter vad gäller understödet. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan lämnas som Redovisning-bilaga.'
+ '#help': '
I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan lämnas som Redovisning-bilaga.
Sammanställning av de hyror som föreningen har betalatför regelbundna träningsskift förutom idrottstjänstens egna lokaler under föregående kalenderår 1.1. - 31.12.3. Avsnittet Hyror för idrottsanläggningar är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.
\r\n"
+ '#markup': '
Sammanställning av de hyror som föreningen har betalat för regelbundna träningsskift förutom idrottstjänstens egna lokaler. Uppge de realiserade hyrorna och antalet timmar under föregående kalenderår 1.1. - 31.12. i enlighet med lokalanvändningsbilaga. Avsnittet Hyror betalda för idrottslokaler är obligatoriskt om du ansöker om understöd för användning av idrottslokaler.
'
liikuntatiloista_maksetut_vuokrat_fieldset:
'#title': 'Hyror betalda för idrottslokaler'
tuntimaara_yhteensa:
@@ -132,7 +131,8 @@ elements: |
vuokrat_yhteensa:
'#title': 'Totalt / EUR'
seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_:
- '#title': 'Planerad ändring i användning av lokaler nästa år, +/- timmar och skäl'
+ '#title': 'Planerad väsentlig ändring i användning av lokaler nästa år, +/- timmar och skäl'
+ '#help': '
I beloppet av understödet för lokalanvändning kan enligt prövning beaktas väsentliga förändringar i föreningens användning av idrottslokaler rörande ansökningsåret. Med väsentliga förändringar avses: sammanslagning av föreningar, anslutning av en sektion eller sektioner till föreningen, avgång av en sektion eller sektioner från föreningen, en ny idrottslokal som hyrs av föreningen (hyresavtalet för lokalen i fråga ska bifogas ansökan) eller avstående från en idrottslokal som förvaltas eller ägs av föreningen.
'
seuran_yhdistyksen_saamat_vuokrat_edellisen_kalenterivuoden_ajal:
'#title': 'Föreningens hyresinkomster under föregående kalenderår 1.1. –31.12.'
'#description': 'Om föreningen får hyresinkomster för sina lokaler, anges de här.'
@@ -230,8 +230,9 @@ elements: |
'#help': 'Utöver de VOK 1-utbildningar som ordnas av regionala idrottsorganisationer beaktas i beräkningen antalet handledare och tränare som har genomgått en utbildning för tränare och handledare som ordnas av ett grenförbund på minst motsvarande nivå och med motsvarande innehåll eller som har avlagt grundexamen i idrott, idrottsinstruktör (YH) eller magisterexamen i idrottsvetenskaper (idrottspedagogik eller motionsbiologi).'
lajijaostot_helsinkilaisille_aktiiviharrastajille:
'#title': 'Aktiva grengsektioner för helsingforsare'
+ '#help': '
I avsnittet träningstimmar, rapportera inte enskilda idrottsutövarnas träningsprestationer i timmar, utan de faktiska träningstimmar som organiserats för helsingforsare som tillhör åldersgruppen.
Om det faktiska antalet träningstimmar för en åldersgrupp inte kan fastställas (t. ex. många blandade träningsgrupper), kan andelen av den åldersgruppen beräknas från det totala antalet timmar baserat på andelen av antalet aktiva idrottsutövare från Helsingfors i åldersgruppen av det totala antalet aktiva idrottsutövare från Helsingfors. T. ex. totala antalet timmar i grensektionen (alla blandade grupper) är 100 timmar, där 10 vuxna och 20 under 20-åringar är aktiva: antalet timmar för vuxna är 33 timmar och för under 20-åringar 67 timmar. Det faktiska antalet realiserade timmar för åldersgruppen bör dock i första hand användas.
'
lajijaostot_info:
- '#markup': "
Regelbunden handledd idrottsverksamhet som ordnas av föreningen, enligt gren. Ange här antalet aktiva idrottsutövare från Helsingfors under föregående år, per sport, samt deras realiserade träningstimmar.
\r\n"
+ '#markup': '
Regelbunden handledd idrottsverksamhet som ordnas av föreningen, enligt gren. Ange här antalet aktiva idrottsutövare från Helsingfors under föregående år, per sport, samt deras realiserade träningstimmar per åldersgrupp.
Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
+ '#markup': "
Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
olemme_saaneet_muita_avustuksia:
'#title': 'Vi har fått andra understöd'
'#options':
@@ -86,11 +86,10 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
- '#help': '
Vilket organ har beviljat bidraget (t.ex. namnet på departementet)
'
+ '#help': '
Vilket organ har beviljat bidraget (t.ex. namnet på departementet).
'
year:
'#title': År
'#pattern_error': 'Bara siffror'
@@ -103,7 +102,7 @@ elements: |
muut_samaan_tarkoitukseen_haetut_avustukset:
'#title': 'Övriga understöd som ansökts för samma ändamål'
info_muut_samaan_tarkoitukseen_haettu:
- '#text': "
Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
+ '#markup': "
Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
'#title': 'Vi har ansökt om understöd från annanstans än Helsingfors stad.'
'#options':
@@ -120,7 +119,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml
new file mode 100644
index 0000000000..e78fbdb049
--- /dev/null
+++ b/conf/cmi/language/sv/webform.webform.sotepe_yleis.yml
@@ -0,0 +1,297 @@
+title: 'Allmänt understöd inom social-, hälsovårds- och räddningssektorn'
+elements: |
+ 1_hakijan_tiedot:
+ '#title': '1. Sökandens uppgifter'
+ '#prev_button_label': '< Tidigare'
+ '#next_button_label': 'Nästa'
+ yhteiso_jolle_haetaan_avustusta:
+ '#title': 'Samfund för vilket understödet ansöks'
+ prh_markup:
+ '#markup': '
De markerade uppgifterna har hämtats från Patent- och registerstyrelsens register (PRH) och det är endast möjligt att ändra uppgifterna i nättjänsten i fråga.
'
+ hakijan_tiedot:
+ '#title': Sökande
+ contact_person_email_section:
+ '#title': E-post
+ contact_markup:
+ '#markup': 'Ange här samfundets e-postadress som läses aktivt. Till e-postadressen skickas kontaktförfrågningar som är relaterade till ansökan om understöd, såsom begäranden om tilläggsutredning och komplettering'
+ email:
+ '#title': E-postadress
+ '#help': 'Ange en e-postadress dit meddelandena och begärandena relaterade till denna ansökan kommer att skickas och som läses aktivt.'
+ contact_person_section:
+ '#title': 'Kontaktperson för ansökan'
+ contact_person:
+ '#title': Kontaktperson
+ contact_person_phone_number:
+ '#title': Telefonnummer
+ osoite:
+ '#title': Adress
+ community_address:
+ '#title': Adress
+ '#help': 'Om du vill lägga till, ta bort eller ändra adressuppgifter, spara ansökan som ett utkast och gå till att behålla adressuppgifterna i dina egna uppgifter.'
+ '#community_address_select__title': 'Välj en adress'
+ tilinumero:
+ '#title': Kontonummer
+ bank_account:
+ '#title': Kontonummer
+ '#help': 'Om du vill lägga till, radera eller ändra kontonummerinformation, spara applikationen som ett utkast och gå till att behålla kontonummerinformationen i din egen data.'
+ '#account_number_select__title': 'Välj ett kontonummer'
+ '#account_number__title': ''
+ toiminnasta_vastaavat_henkilot:
+ '#title': 'Personer som ansvarar för verksamheten'
+ community_officials:
+ '#help': 'Om du vill lägga till, ta bort eller ändra personer, spara applikationen som ett utkast och gå till att underhålla personernas information i din egen data.'
+ '#title': 'Personer som ansvarar för verksamheten'
+ '#multiple__add_more_button_label': 'Lägg till en person'
+ '#multiple__item_label': person
+ '#community_officials_select__title': 'Välj motsvarande person'
+ '#role__title': Roll
+ '#email__title': E-post
+ '#phone__title': Telefonnummer
+ 2_avustustiedot:
+ '#title': '2. Uppgifter om understödet'
+ '#prev_button_label': 'Tidigare'
+ '#next_button_label': 'Nästa'
+ avustuksen_tiedot:
+ '#title': 'Uppgifter om understödet'
+ acting_year:
+ '#title': 'År för vilket jag ansöker om understöd'
+ avustuslajit:
+ '#title': 'Understödskategorier'
+ subventions:
+ '#title': Understöd
+ kayttotarkoitus:
+ '#title': 'Användningsändamål'
+ compensation_purpose:
+ '#title': 'Vad kommer understödet att användas till?'
+ '#help': 'Beskriv den verksamhet som ska genomföras med hjälp av understödet och verksamhetens omfattning i korthet exempelvis på följande sätt: Hur mycket eller ofta ordnar ni grupper, evenemang eller annan verksamhet under den understödda perioden? Hur många representanter för målgruppen kommer ni att nå enligt er uppskattning? Inom vilka områden i Helsingfors kommer verksamheten att ordnas? På vilka sätt samarbetar ni med andra aktörer i Helsingfors?'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ who_benefits:
+ '#title': 'Who are the main beneficiaries of your activities?'
+ '#help': 'Beskriv vem som hör till er målgrupp och eventuellt också hur många av dem som hör till er målgrupp det finns i ert verksamhetsområde. I beskrivningen av målgruppen är det viktigt att det framgår vilka slags människor just ni önskar och kan bemöta, eller de situationer i vilka människor får den största nyttan av er verksamhet.'
+ changes_on_success:
+ '#title': 'What kind of changes will take place if you succeed?'
+ '#help': 'Er verksamhet kan ha flera mål. Beskriv och bedöm här de centrala förändringar som ni eftersträvar exempelvis i er målgrupps funktionsförmåga, vardag, människorelationer eller andra aspekter som anknyter till välfärd och hälsa eller delaktighet. Vilka slags förändringar kommer det alltså att ske om ni lyckas eller vilka slags fenomen förebygger er verksamhet?'
+ results_of_activities:
+ '#title': 'What are the benefits of the activities to be supported?'
+ '#help': 'Beskriv kort vilka effekter som uppnås genom verksamheten och på vilket sätt de uppstår. Du kan beskriva effekterna i den ordning de sker: vilka effekter uppstår först och vilka efter en längre tid. Koncentrera dig dock på verksamhetens omedelbara effekter. Du kan även berätta vad som är speciellt med er verksamhet eller vilka (kvalitets)faktorer som bör beaktas särskilt för att de effekter som eftersträvas ska uppnås. Du kan även beskriva hur något samarbete ni har främjar uppnåendet av effekterna.'
+ muut_samaan_tarkoitukseen_myonnetyt_avustukset:
+ '#title': 'Övriga understöd som beviljats för samma ändamål'
+ info_muut_samaan_tarkoitukseen_myonnetty:
+ '#markup': "
Ange här endast de understöd som beviljats från annanstans än Helsingfors stad under det innevarande beskattningsåret eller de föregående två beskattningsåren.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
+ olemme_saaneet_muita_avustuksia:
+ '#title': 'Vi har fått andra understöd'
+ '#options':
+ 1: Ja
+ 0: Nej
+ myonnetty_avustus:
+ '#title': 'Bidrag beviljat'
+ '#multiple__no_items_message': 'Inga värden har angetts. Lägg till det nya beviljade bidraget nedan.'
+ '#multiple__add_more_button_label': 'Lägg till understöd som beviljats'
+ '#element':
+ issuer:
+ '#options':
+ 1: Stat
+ 3: EU
+ 4: Övrig
+ 5: Fundament
+ '#title': Bidragsgivare
+ issuer_name:
+ '#title': 'Emittentens namn'
+ '#help': 'Vilket organ har beviljat bidraget (t.ex. namnet på departementet)'
+ year:
+ '#title': År
+ '#pattern_error': 'Ange ett årtal'
+ amount:
+ '#title': 'Beviljat bidragsbelopp'
+ purpose:
+ '#title': 'Beskrivning av avsedd användning'
+ '#help': 'Ge en kort beskrivning, i vilket syfte har bidraget beviljats?'
+ '#counter_maximum_message': '%d/1000 tecken kvar'
+ muut_samaan_tarkoitukseen_haetut_avustukset:
+ '#title': 'Övriga understöd som ansökts för samma ändamål'
+ info_muut_samaan_tarkoitukseen_haettu:
+ '#markup': "
Ange här endast de understöd som har ansökts från annanstans än Helsingfors stad, men beslut har ännu inte fattats.
\r\n\r\n
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
+ olemme_hakeneet_avustuksia_muualta_kuin_helsingin_kaupungilta:
+ '#title': 'Vi har ansökt om understöd från annanstans än Helsingfors stad.'
+ '#options':
+ 1: Ja
+ 0: Nej
+ haettu_avustus_tieto:
+ '#title': 'Lägg till nytt understöd som ansökts'
+ '#multiple__no_items_message': 'Inga värden har angetts. Lägg till ett nytt ansökt bidrag nedan.'
+ '#multiple__add_more_button_label': 'Lägg till nytt understöd som ansökts'
+ '#element':
+ issuer:
+ '#options':
+ 1: Stat
+ 3: EU
+ 4: Övrig
+ 5: Fundament
+ '#title': Bidragsgivare
+ issuer_name:
+ '#title': 'Emittentens namn'
+ '#help': 'Vilket organ har beviljat bidraget (t.ex. namnet på departementet)'
+ year:
+ '#title': År
+ '#pattern_error': 'Ange ett årtal'
+ amount:
+ '#title': 'Beviljat bidragsbelopp'
+ purpose:
+ '#title': 'Beskrivning av avsedd användning'
+ '#help': 'Ge en kort beskrivning, i vilket syfte har bidraget beviljats?'
+ '#counter_maximum_message': '%d/1000 tecken kvar'
+ edellisen_avustuksen_kayttoselvitys:
+ '#title': 'Redovisning om det tidigare understödet'
+ compensation_boolean_info:
+ '#markup': "
\r\n
\r\n
Ett jakande svar öppnar ytterligare en fråga
\r\n
\r\n
\r\n"
+ compensation_boolean:
+ '#title': 'Redovisning om understödet som jag fick under det föregående året'
+ '#options':
+ - 'Jag har inte fått bidrag från Helsingfors stad för samma ändamål föregående år.'
+ - 'Jag fick ett bidrag från Helsingfors stad för samma ändamål förra året.'
+ markup:
+ '#markup': 'Ge en redovisning om understödet som fåtts från Helsingfors stad. Redovisningen görs om understödet som beviljats för den senaste avslutade räkenskapsperioden. Redovisning görs inte om den innevarande räkenskapsperioden. Redovisningen krävs för att få ett nytt understöd. Om en redovisning inte görs, kommer ett understöd inte att beviljas eller betalas ut. Det beviljade understödet kan återkrävas om användningen av det tidigare understödet inte har redogjorts för på ett tillfredsställande sätt.'
+ compensation_explanation:
+ '#title': 'Redovisning om användningen av understödet'
+ '#help': 'I redovisningen ska det kortfattat anges hur det beviljade understödet har använts. Understödstagaren ska ordna sin bokföring så att användningen av understödet kan följas där. Om samfundet till exempel har fått hyresunderstöd ska det av resultaträkningen i bokslutet framgå både intäkter och utgifter vad gäller understödet. Mer information om användningen av understödet kan också skrivas i en separat bilaga som kan läggas till och skickas som Annan bilaga.'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ 3_yhteison_tiedot:
+ '#title': '3. Samfundets verksamhet'
+ '#prev_button_label': 'Tidigare'
+ '#next_button_label': 'Nästa'
+ business_info:
+ '#title': Verksamhetsbeskrivning
+ business_purpose:
+ '#title': Verksamhetsbeskrivning
+ '#help': 'Om du vill lägga till, ta bort eller ändra verksamhetsbeskrivningen, spara ansökan som ett utkast och gå till dina uppgifter för att redigera verksamhetsbeskrivningen.'
+ '#counter_maximum_message': '%d/500 tecken kvar'
+ community_practices_business:
+ '#title': 'Bedriver samfundet affärsverksamhet'
+ '#options':
+ 1: Ja
+ 0: Nej
+ ensimmainen_otsikko:
+ '#title': Medlemsavgifter
+ fee_person:
+ '#title': 'Medlemsavgift för personmedlemmar (€/år)'
+ fee_community:
+ '#title': 'Samfundsmedlem (€/år)'
+ jasenmaara:
+ '#title': 'Antal medlemmar'
+ jasenmaara_fieldset:
+ '#title': Medlemskap
+ '#help': 'Om gruppen har medlemmar, vänligen ange dem här.'
+ members_applicant_person_global:
+ '#title': 'Personmedlemmar sammanlagt'
+ '#help': 'Hur många personmedlemmar som har betalat medlemsavgiften har samfundet för närvarande?'
+ members_applicant_person_local:
+ '#title': 'Personmedlemmar från Helsingfors sammanlagt'
+ '#help': 'Hur många personmedlemmar från Helsingfors som har betalat medlemsavgiften har samfundet för närvarande?'
+ members_applicant_community_global:
+ '#title': Samfundsmedlemmar
+ '#help': 'Hur många samfundsmedlemmar som har betalat medlemsavgiften har samfundet för närvarande? Samfundsmedlemmar är andra än personmedlemmar, såsom föreningar, stiftelser, företag eller kommuner.'
+ members_applicant_community_local:
+ '#title': 'Samfundsmedlemmar från Helsingfors sammanlagt'
+ '#help': 'Hur många samfundsmedlemmar från Helsingfors som har betalat medlemsavgiften har samfundet för närvarande? Samfundsmedlemmar är andra än personmedlemmar, såsom föreningar, stiftelser, företag eller kommuner.'
+ lisatiedot_ja_liitteet:
+ '#title': '4. Ytterligare information och bilagor'
+ lisatietoja_hakemukseen_liittyen:
+ '#title': 'Ytterligare information för ansökan'
+ additional_information:
+ '#title': 'Ytterligare information'
+ '#help': 'Här kan du vid behov skriva ytterligare information eller andra motiveringar som rör ansökan.'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ liitteet:
+ '#title': Bilagor
+ attachments_info:
+ '#markup': |-
+
Alla bilagor som anges nedan måste lämnas in för behandling av ansökan om understöd. Ansökan om understöd kan avslås om bilagorna inte har lämnats in. Om någon av bilagorna saknas, meddela oss om det i punkten Ytterligare information om bilagor i ansökan.
+
Erforderliga bilagor
+
För behandling av ansökan om understöd behövs styrkta bilagor från den föregående räkenskapsperioden som samfundet har godkänt och undertecknat vid sitt möte samt bilagor för det verksamhetsår för vilket understödet ansöks. Bilagorna från den föregående räkenskapsperioden är: bokslut, verksamhetsberättelse, revisionsberättelse och protokoll från årsstämman. Bilagorna för det år för vilket understödet ansöks är: budget och verksamhetsplan.
+
Inlämning av flera bilagor i en fil
+
Om du vill kan du lämna in flera bilagor i en fil i punkten Bokslut eller budget. Ange i detta fall vid andra bilagor att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.
+
Bilagor som tidigare lämnats in till Helsingfors stad
+
Om de erforderliga bilagorna redan har lämnats in som bilaga till en annan ansökan om understöd till Helsingfors stad, behöver samma bilagor inte lämnas in igen. Samfundets fastställda bokslut, verksamhetsberättelse, verksamhetsplan och budget får inte vara olika i bilagor till de olika ansökningarna. Ange i detta fall vid de inlämnade bilagorna att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”.
+ notification_attachments:
+ '#markup': "
\r\n
\r\n
Innehållet i bilagorna kan inte granskas i efterhand
\r\n\r\n
\r\n
Observera att du inte kan öppna bilagorna efter att du har bifogat dem blanketten. Du ser bara bilagans filnamn.
\r\n\r\n
Även om du inte kan granska innehållet i bilagorna i efterhand skickas bilagorna som bifogats blanketten med övriga uppgifter till personen som behandlar ansökan om understöd.
\r\n
\r\n
\r\n
\r\n"
+ yhteison_saannot:
+ '#title': 'Samfundets stadgar'
+ '#help': 'En ny sökande eller reglerna har ändrats.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_tilinpaatos:
+ '#title': 'Fastställt bokslut (för den föregående avslutade räkenskapsperioden)'
+ '#help': "Bokslutet ska innehålla minst resultaträkningen och balansräkningen. Samfundet ska till denna punkt lägga till bokslutet som godkänts och undertecknats vid samfundets medlemsmöte. Samfundets räkenskapsperiod kan vara ett kalenderår eller en annan period. Vad gäller samfund anges det i deras egna stadgar vad samfundets räkenskapsperiod är."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_toimintakertomus:
+ '#title': 'Fastställd verksamhetsberättelse (för den föregående avslutade räkenskapsperioden)'
+ '#help': "Samfundet ska till denna punkt bifoga verksamhetsberättelsen som godkänts och undertecknats vid samfundets medlemsmöte. Om verksamhetsberättelsen ingår i bokslutet och du redan har bifogat den blanketten, behöver den inte bifogas separat. Ange i detta fall vid verksamhetsberättelsen att ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan”."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vahvistettu_tilin_tai_toiminnantarkastuskertomus:
+ '#title': 'Fastställd revisionsberättelse (för det föregående avslutade räkenskapsåret)'
+ '#help': "Bifoga den undertecknade revisionsberättelsen för samfundets senaste avslutade räkenskapsperiod här. Om den undertecknade revisionsberättelsen ingår i samfundets bokslut och du redan bifogat den till blanketten i samband med bokslutet, ange ”Bilagan har lämnats in som en fil eller i samband med en annan ansökan” här."
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ vuosikokouksen_poytakirja:
+ '#title': 'Protokoll från årsstämman med det godkända bokslutet för den föregående räkenskapsperioden'
+ '#help': 'Bifoga protokollet från samfundets möte här, där bokslutet för den föregående avslutade räkenskapsperioden har godkänts och ansvarsfrihet beviljats. Samfundens bokslut fastställs alltid vid samfundets medlemsmöte. Om samfundet inte är skyldigt att ha ett årsmöte eller annat samfundsmöte där bokslutet bör godkännas och ansvarsfrihet beviljas, behöver denna bilaga inte lämnas in.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ toimintasuunnitelma:
+ '#title': 'Verksamhetsplan (för det år du ansöker om understödet)'
+ '#help': 'Bifoga verksamhetsplanen för hela för samfundet här.'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ talousarvio:
+ '#title': 'Budget (för det år du ansöker om understödet)'
+ '#help': 'Budget (för det år du ansöker om understödet)'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ extra_info:
+ '#title': 'Ytterligare information om bilagorna'
+ '#counter_maximum_message': '%d/5000 tecken kvar'
+ muu_liite:
+ '#title': 'Annan bilaga'
+ '#multiple__add_more_button_label': 'Lägg till en bilaga'
+ '#attachmentName__title': ''
+ '#fileStatus__title': ''
+ '#fileType__title': ''
+ '#integrationID__title': ''
+ '#isAttachmentNew__title': ''
+ actions:
+ '#submit__label': Skicka
+ '#draft__label': 'Spara som oavslutad'
+ '#wizard_prev__label': 'Tidigare'
+ '#wizard_next__label': 'Nästa'
+ '#preview_prev__label': 'Tidigare'
+ '#preview_next__label': 'För förhandsvisning'
+ '#delete__label': ' Radera oavslutat'
+settings:
+ wizard_prev_button_label: Tidigare
+ wizard_next_button_label: Nästa
+ preview_label: '5. Bekräfta, förhandsgranska och skicka'
+ preview_title: 'Bekräfta, förhandsgranska och skicka'
+ wizard_confirmation_label: '6. Slutförd'
diff --git a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
index ecf8d4620c..62fdc5fe86 100644
--- a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
+++ b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuri_kehittamisavu.yml
@@ -129,7 +129,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
index 51e4b97aae..7327233be4 100644
--- a/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
+++ b/conf/cmi/language/sv/webform.webform.taide_ja_kulttuuriavustukset_tai.yml
@@ -94,7 +94,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml b/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml
index 67f569e281..25fe61efc0 100644
--- a/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml
+++ b/conf/cmi/language/sv/webform.webform.yleisavustushakemus.yml
@@ -85,7 +85,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
@@ -119,7 +118,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml b/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml
index 4832d6732a..c7fddcabfc 100644
--- a/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml
+++ b/conf/cmi/language/sv/webform.webform.ymparistopalvelut_yleisavustus.yml
@@ -87,7 +87,6 @@ elements: |
3: EU
4: Övrig
5: Fundament
- 6: STEA
'#title': Bidragsgivare
issuer_name:
'#title': 'Emittentens namn'
diff --git a/conf/cmi/metatag.settings.yml b/conf/cmi/metatag.settings.yml
index 4a857d7011..f260a90c78 100644
--- a/conf/cmi/metatag.settings.yml
+++ b/conf/cmi/metatag.settings.yml
@@ -16,3 +16,4 @@ entity_type_groups:
basic: basic
open_graph: open_graph
twitter_cards: twitter_cards
+tag_trim_end: '|.,-:;/+&([{"'''
diff --git a/conf/cmi/responsive_image.styles.image_gallery_1_1.yml b/conf/cmi/responsive_image.styles.image_gallery_1_1.yml
new file mode 100644
index 0000000000..4dfddfc68d
--- /dev/null
+++ b/conf/cmi/responsive_image.styles.image_gallery_1_1.yml
@@ -0,0 +1,38 @@
+uuid: c0fef26d-9cc5-4756-b247-5a9c3f7b4550
+langcode: en
+status: true
+dependencies:
+ config:
+ - image.style.1_1086w_1086h_LQ
+ - image.style.1_414w_414h
+ - image.style.1_543w_543h
+ - image.style.1_828w_828h_LQ
+ module:
+ - helfi_image_styles
+_core:
+ default_config_hash: 29_zAX_g0m2zPiaRWVs5QHweA-Yhu0_yQcb9LewDXMM
+id: image_gallery_1_1
+label: 'Image gallery 1:1'
+image_style_mappings:
+ -
+ image_mapping_type: image_style
+ image_mapping: 1_414w_414h
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1_828w_828h_LQ
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 2x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1_543w_543h
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1_1086w_1086h_LQ
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 2x
+breakpoint_group: helfi_image_styles
+fallback_image_style: 1_414w_414h
diff --git a/conf/cmi/responsive_image.styles.image_gallery_2_3.yml b/conf/cmi/responsive_image.styles.image_gallery_2_3.yml
new file mode 100644
index 0000000000..f5a90b0cac
--- /dev/null
+++ b/conf/cmi/responsive_image.styles.image_gallery_2_3.yml
@@ -0,0 +1,50 @@
+uuid: 4da06bdc-4ddf-479d-bd7a-e7ccbcf93a7e
+langcode: en
+status: true
+dependencies:
+ config:
+ - image.style.0.7_1086w_1630h_LQ
+ - image.style.0.7_352w_572h
+ - image.style.0.7_414w_621h
+ - image.style.0.7_543w_815h
+ - image.style.0.7_704w_1144h_LQ
+ - image.style.0.7_828w_1242h_LQ
+ module:
+ - helfi_image_styles
+_core:
+ default_config_hash: FsfbGbQamEyCjnhveCelHwebu8SHFK8rfWmoeeh7jEc
+id: image_gallery_2_3
+label: 'Image gallery 2:3'
+image_style_mappings:
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_414w_621h
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_828w_1242h_LQ
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 2x
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_352w_572h
+ breakpoint_id: helfi_image_styles.s
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_704w_1144h_LQ
+ breakpoint_id: helfi_image_styles.s
+ multiplier: 2x
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_543w_815h
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 0.7_1086w_1630h_LQ
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 2x
+breakpoint_group: helfi_image_styles
+fallback_image_style: 0.7_414w_621h
diff --git a/conf/cmi/responsive_image.styles.image_gallery_3_2.yml b/conf/cmi/responsive_image.styles.image_gallery_3_2.yml
new file mode 100644
index 0000000000..02858796ef
--- /dev/null
+++ b/conf/cmi/responsive_image.styles.image_gallery_3_2.yml
@@ -0,0 +1,50 @@
+uuid: 0011a33c-b46a-4354-af09-3ea3e656a790
+langcode: en
+status: true
+dependencies:
+ config:
+ - image.style.1.5_1120w_746h_LQ
+ - image.style.1.5_378w_252h
+ - image.style.1.5_452w_301h
+ - image.style.1.5_560w_373h
+ - image.style.1.5_756w_504h_LQ
+ - image.style.1.5_904w_602h_LQ
+ module:
+ - helfi_image_styles
+_core:
+ default_config_hash: l_qdU6nExbacBLGCv5ZQHXE54vA49nRWaLcmwRL479U
+id: image_gallery_3_2
+label: 'Image gallery 3:2'
+image_style_mappings:
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_452w_301h
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_904w_602h_LQ
+ breakpoint_id: helfi_image_styles.m
+ multiplier: 2x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_378w_252h
+ breakpoint_id: helfi_image_styles.s
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_756w_504h_LQ
+ breakpoint_id: helfi_image_styles.s
+ multiplier: 2x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_560w_373h
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 1x
+ -
+ image_mapping_type: image_style
+ image_mapping: 1.5_1120w_746h_LQ
+ breakpoint_id: helfi_image_styles.xs
+ multiplier: 2x
+breakpoint_group: helfi_image_styles
+fallback_image_style: 1.5_452w_301h
diff --git a/conf/cmi/webform.settings.yml b/conf/cmi/webform.settings.yml
index 5011ceaaaf..af11329b16 100644
--- a/conf/cmi/webform.settings.yml
+++ b/conf/cmi/webform.settings.yml
@@ -24,9 +24,9 @@ settings:
default_form_disable_inline_errors: false
default_form_required: false
default_form_required_label: 'Indicates required field'
- default_form_unsaved: false
+ default_form_unsaved: true
default_form_disable_back: false
- default_form_submit_back: false
+ default_form_submit_back: true
default_form_details_toggle: true
default_form_file_limit: ''
default_wizard_prev_button_label: Previous
diff --git a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml
index 2fbfa8523a..ad82299cb1 100644
--- a/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml
+++ b/conf/cmi/webform.webform.asukasosallisuus_pienavustushake.yml
@@ -265,7 +265,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -354,7 +353,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -637,9 +635,9 @@ settings:
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
- form_unsaved: false
+ form_unsaved: true
form_disable_back: false
- form_submit_back: false
+ form_submit_back: true
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
diff --git a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml
index 594b01da19..c6b1c01061 100644
--- a/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml
+++ b/conf/cmi/webform.webform.asukasosallisuus_yleis_ja_toimin.yml
@@ -271,7 +271,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -360,7 +359,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -757,9 +755,9 @@ settings:
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
- form_unsaved: false
+ form_unsaved: true
form_disable_back: false
- form_submit_back: false
+ form_submit_back: true
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
diff --git a/conf/cmi/webform.webform.grants_handler.yml b/conf/cmi/webform.webform.grants_handler.yml
index 29def5ffc9..bed09391bb 100644
--- a/conf/cmi/webform.webform.grants_handler.yml
+++ b/conf/cmi/webform.webform.grants_handler.yml
@@ -67,9 +67,9 @@ settings:
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
- form_unsaved: false
+ form_unsaved: true
form_disable_back: false
- form_submit_back: false
+ form_submit_back: true
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
diff --git a/conf/cmi/webform.webform.hyte_yleisavustus.yml b/conf/cmi/webform.webform.hyte_yleisavustus.yml
index 75267ef5cd..2450bdf09a 100644
--- a/conf/cmi/webform.webform.hyte_yleisavustus.yml
+++ b/conf/cmi/webform.webform.hyte_yleisavustus.yml
@@ -309,7 +309,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.elderly_sports_and_culture.yml b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml
similarity index 71%
rename from conf/cmi/webform.webform.elderly_sports_and_culture.yml
rename to conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml
index 727b1593c8..ca85e6f327 100644
--- a/conf/cmi/webform.webform.elderly_sports_and_culture.yml
+++ b/conf/cmi/webform.webform.iakkaiden_kulttuuri_ja_liikunta.yml
@@ -1,5 +1,5 @@
-uuid: 6b799d6a-d01b-4f56-9075-59e76476952c
-langcode: en
+uuid: d6a6681d-87e8-4a48-aa5a-cb1c12bd160f
+langcode: fi
status: open
dependencies:
module:
@@ -15,7 +15,7 @@ third_party_settings:
registered_community: registered_community
applicationTypeTerms:
62: '62'
- applicationTargetGroup: '22'
+ applicationTargetGroup: '75'
applicationOpen: null
applicationClose: null
applicationActingYearsType: fixed
@@ -35,9 +35,9 @@ close: null
uid: 1
template: false
archive: false
-id: elderly_sports_and_culture
-title: 'Kuva: Grant for elderly sports and culture'
-description: '
Kulttuurin ja vapaa-ajan erillisavustushakemus: Ikääntyneiden liikkumisen ja kulttuuritoiminnan avustus
'
+id: iakkaiden_kulttuuri_ja_liikunta
+title: 'KUVA: avustushakemus iäkkäiden ihmisten liikkumisen ja kulttuuritoiminnan edistämiseksi'
+description: '
'
+ '#description_display': after
'#options':
1: Kyllä
0: Ei
'#default_value': '0'
+ ensisijainen_taiteen_ala:
+ '#type': select
+ '#title': 'Ensisijainen taiteenala'
+ '#help': 'Valitse pudotusvalikosta toimintaa parhaiten kuvaava vaihtoehto.'
+ '#options':
+ 'Design ja käsityö': 'Design ja käsityö'
+ 'Elokuva, valokuva ja media': 'Elokuva, valokuva ja media'
+ Kaupunkikulttuuri: Kaupunkikulttuuri
+ Kirjallisuus: Kirjallisuus
+ 'Kuvataide ja sarjakuva': 'Kuvataide ja sarjakuva'
+ Monitaide: Monitaide
+ Museo: Museo
+ Musiikki: Musiikki
+ Muu: Muu
+ Sirkus: Sirkus
+ Tanssi: Tanssi
+ Teatteri: Teatteri
+ '#wrapper_attributes':
+ class:
+ - webform-element-help--wrapper-short
+ '#states':
+ visible:
+ - ':input[name="kulttuuri1_summa"]':
+ value:
+ greater: '0'
+ - or
+ - ':input[name="kulttuuri2_summa"]':
+ value:
+ greater: '0'
+ required:
+ - ':input[name="kulttuuri1_summa"]':
+ value:
+ greater: '0'
+ - or
+ - ':input[name="kulttuuri2_summa"]':
+ value:
+ greater: '0'
hankesuunnitelma_section:
'#type': webform_section
'#title': '3.1 Hankesuunnitelma'
@@ -505,34 +660,46 @@ elements: |-
hankesuunnitelma_jatkohakemus:
'#type': radios
'#title': 'Onko haettava avustus käynnissä olevan hankkeen jatkohakemus?'
- '#description_display': before
+ '#description': '
Vastaa tähän kysymykseen "kyllä" vain siinä tapauksessa, jos yhteisölläsi on jo käynnissä oleva, samasta avustuksesta rahoitettu hanke ja haet sille jatkorahoitusta.
'
+ '#description_display': after
'#options':
1: Kyllä
0: Ei
'#default_value': '0'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
hankkeen_tarkoitus_tavoitteet:
'#type': textarea
'#title': 'Hankkeen tarkoitus ja tavoitteet'
'#maxlength': 2500
- '#required': true
'#counter_type': character
'#counter_maximum': 2500
'#counter_maximum_message': '%d/2500 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_toimenpiteet_aikataulu:
'#type': textarea
'#title': 'Mitkä ovat hankkeen konkreettiset toimenpiteet ja niiden toteutusaikataulu?'
'#maxlength': 4000
- '#required': true
'#counter_type': character
'#counter_maximum': 4000
'#counter_maximum_message': '%d/4000 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_toimenpiteet_toteutus:
'#type': fieldset
@@ -542,35 +709,41 @@ elements: |-
- grants-fieldset
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_toimenpiteet_alkupvm:
'#type': date
'#title': Alkupäivämäärä
- '#required': true
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_toimenpiteet_loppupvm:
'#type': date
'#title': Loppupäivämäärä
- '#required': true
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_keskeisimmat_kumppanit:
'#type': textarea
'#title': 'Nimeä hankkeen keskeisimmät yhteistyökumppanit ja heidän roolinsa hankkeessa'
'#maxlength': 2500
- '#required': true
'#counter_type': character
'#counter_maximum': 2500
'#counter_maximum_message': '%d/2500 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
haun_painopisteet_section:
'#type': webform_section
@@ -579,11 +752,13 @@ elements: |-
visible:
':input[name="hankesuunnitelma_radios"]':
value: '0'
- ':input[name="hankesuunnitelma_jatkohakemus"]':
- value: '0'
haun_painopisteet_ohje:
'#type': webform_markup
- '#markup': 'Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.'
+ '#markup': 'Mihin seuraavista iäkkäiden liikkumisen ja kulttuuritoiminnan edistämisen avustuksen painopisteistä hanke vastaa?
Hankkeessa tulee toteuttaa yhtä tai useampaa painopistettä. HUOM! Valitse vain ne painopisteet, joita edistätte hankkeessa konkreettisella tavalla. Jos hanke ei toteuta jotakin painopistettä, jätä tekstikenttä tyhjäksi.
'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
haun_painopisteet_liikkumis_kehitys:
'#type': textarea
'#title': 'Kehitetäänkö hankkeessa liikkumismahdollisuuksia tai taide- ja kulttuuritoimintaa lähiympäristössä / alueellisesti? Miten?'
@@ -593,44 +768,43 @@ elements: |-
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
- '#required': true
haun_painopisteet_digi_kehitys:
'#type': textarea
'#title': 'Kehitetäänkö hankkeessa digitaalisesti / etänä toteutettavia kulttuuritoimintoja tai liikkumiseen aktivoivaa toimintaa? Miten?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
haun_painopisteet_vertais_kehitys:
'#type': textarea
'#title': 'Kehitetäänkö hankkeessa vapaaehtois- / vertaistoimintaa? Miten?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
haun_painopisteet_kulttuuri_kehitys:
'#type': textarea
'#title': 'Kehitetäänkö hankkeessa taide- ja kulttuuritoimijoiden osaamista tai luodaanko uusia työtapoja / rakenteita? Miten?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="kulttuuri1_summa"]':
+ value:
+ greater: '0'
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_section:
'#type': webform_section
@@ -639,84 +813,92 @@ elements: |-
visible:
':input[name="hankesuunnitelma_radios"]':
value: '0'
- ':input[name="hankesuunnitelma_jatkohakemus"]':
- value: '0'
hankkeen_kohderyhmat_kenelle:
'#type': textarea
'#title': 'Kenelle hankkeen toiminta on pääasiallisesti suunnattu?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_erityisryhmat:
'#type': textarea
- '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle?'
+ '#title': 'Kohdennetaanko hankkeessa toimintaa jollekin erityisryhmälle? Mille erityisryhmälle? Jos ei toteuteta, niin jätetään tyhjäksi.'
+ '#description_display': after
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_tavoitus:
'#type': textarea
'#title': 'Kuinka hankkeen kohderyhmät aiotaan tavoittaa?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_konkretia:
'#type': textarea
'#title': 'Miten hankkeessa edistetään konkreettisin toimenpitein valitun kohderyhmän toimintakykyä ja hyvinvointia?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_osallisuus:
'#type': textarea
'#title': 'Millä tavoin hankkeessa edistetään osallisuutta? Mikä ikäihmisten rooli hankkeessa on?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_osaaminen:
'#type': textarea
'#title': 'Millaista osaamista kyseisen kohderyhmän/-ryhmien kanssa työskentelystä hanketoimijoilla on ennestään?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_postinrot:
'#type': textfield
- '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan?'
- '#required': true
+ '#title': 'Millä postinumeroalueella tai -alueilla Helsingissä hanke toteutetaan? Kirjaa kenttään enintään kolme (3) postinumeroaluetta ja erottele ne toisistaan pilkulla (,)'
+ '#description_display': after
'#autocomplete': 'off'
'#attributes':
class:
@@ -724,19 +906,24 @@ elements: |-
'#size': 32
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_kohderyhmat_miksi_alue:
'#type': textarea
'#title': 'Miksi juuri kyseinen alue / alueet on valittu?'
'#maxlength': 1250
- '#required': true
'#counter_type': character
'#counter_maximum': 1250
'#counter_maximum_message': '%d/1250 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_riskit_section:
'#type': webform_section
@@ -745,52 +932,160 @@ elements: |-
visible:
':input[name="hankesuunnitelma_radios"]':
value: '0'
- ':input[name="hankesuunnitelma_jatkohakemus"]':
- value: '0'
hankkeen_riskit_keskeisimmat:
'#type': textarea
'#title': 'Mitkä ovat hankkeen toteuttamisen näkökulmasta keskeisimmät riskit?'
'#maxlength': 2500
- '#required': true
'#counter_type': character
'#counter_maximum': 2500
- '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#counter_maximum_message': '%d/2500 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_riskit_seuranta:
'#type': textarea
'#title': 'Miten hankkeessa aiotaan toteuttaa seurantaa ja arviointia?'
'#maxlength': 2500
- '#required': true
'#counter_type': character
'#counter_maximum': 2500
- '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#counter_maximum_message': '%d/2500 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '0'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
hankkeen_riskit_vakiinnuttaminen:
'#type': textarea
- '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen?'
- '#help': 'Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.'
+ '#title': 'Onko hankkeen suunniteltu toiminta aikomus vakiinnuttaa osaksi hakijan/jonkun muun toimijan perustoimintaa hankkeen jälkeen? Jos kyllä, niin kuvaa tekstikenttään kuinka vakiinnuttaminen aiotaan tehdä, muuten jätä tyhjäksi.'
'#maxlength': 2500
- '#required': true
'#counter_type': character
'#counter_maximum': 2500
- '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#counter_maximum_message': '%d/2500 merkkiä jäljellä'
'#states':
visible:
- ':input[name="hankesuunnitelma_jatkohakemus"]':
+ ':input[name="hankesuunnitelma_radios"]':
value: '0'
- unknown_for_now:
+ hankkeen_valiarviointi_section:
'#type': webform_section
- '#title': '3.5 puuttuva määritys'
+ '#title': '3.5 2-vuotisten hankkeiden väliarviointi'
'#states':
visible:
':input[name="hankesuunnitelma_radios"]':
value: '1'
+ arviointi_markup:
+ '#type': webform_markup
+ '#markup': 'Arvioi tässä osiossa hankkeen tähänastista toimintaa seuraavien kysymysten avulla. Avustuksen 2. osaa hakevien tulee liittää hakemukselle Muu liite-kohtaan niin ikään kustannuspaikkaraportti ajanjaksolta 1.6.-31.12.2024'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_toteuma:
+ '#type': textarea
+ '#title': 'Onko hanke edennyt suunnitelman mukaisesti? Arvioikaa hankkeen toteumaa tähän asti asteikolla 1-100% ja perustelkaa vastauksenne.'
+ '#description': 'Onko hankkeessa tapahtunut merkittäviä muutoksia?'
+ '#description_display': after
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_muutokset_talous:
+ '#type': textarea
+ '#title': 'Talouteen liittyen; mitä?'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_muutokset_toiminta:
+ '#type': textarea
+ '#title': 'Toimintaan liittyen; mitä?'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_muutokset_aikataulu:
+ '#type': textarea
+ '#title': 'Aikatauluun liittyen; mitä?'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_haasteet:
+ '#type': textarea
+ '#title': 'Onko hanke kohdannut toimintaan vaikuttaneita haasteita? Jos, niin millaisia?'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_saavutettavuus:
+ '#type': textarea
+ '#title': 'Miten toiminta on tavoittanut osallistujia suhteessa tavoitteisiin?'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ arviointi_avustus_kaytto:
+ '#type': textarea
+ '#help': 'Avustusehdot, kohta 10e: "Myönnetty avustus on palautettava Helsingin kaupungille, jos avustusta ei ole käytetty sinä aikana, jona se on avustuspäätöksen mukaan tullut käyttää.'
+ '#title': 'Tuleeko ensimmäiselle hankekaudelle myönnetty avustus käytettyä näillä näkymin määräaikaan (31.5.2025) mennessä? Jos ei, niin avatkaa tähän johtaneita syitä.'
+ '#maxlength': 1250
+ '#counter_type': character
+ '#counter_maximum': 1250
+ '#counter_maximum_message': '%d/1250 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
+ required:
+ ':input[name="hankesuunnitelma_radios"]':
+ value: '1'
4_talousarvio:
'#type': webform_wizard_page
'#title': '4. Talousarvio'
@@ -1112,12 +1407,12 @@ access:
handlers:
grants_handler:
id: grants_handler
- handler_id: grants_handler
+ handler_id: null
label: 'Grants Handler'
notes: ''
status: true
conditions: { }
- weight: 0
+ weight: null
settings:
debug: false
variants: { }
diff --git a/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml b/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
index 8ba573d9b5..4f44ff90a9 100644
--- a/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
+++ b/conf/cmi/webform.webform.kasvatus_ja_koulutus_toiminta_av.yml
@@ -313,7 +313,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml b/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
index e9992f05fc..c0ff3ce26c 100644
--- a/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
+++ b/conf/cmi/webform.webform.kasvatus_ja_koulutus_yleisavustu.yml
@@ -319,7 +319,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml b/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml
index cb1c7ccd4e..1070f3f136 100644
--- a/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml
+++ b/conf/cmi/webform.webform.kaupunginkanslia_tyollisyysavust.yml
@@ -318,7 +318,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -407,7 +406,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.kuva_projekti.yml b/conf/cmi/webform.webform.kuva_projekti.yml
index b72a931f4b..c68ba11f3c 100644
--- a/conf/cmi/webform.webform.kuva_projekti.yml
+++ b/conf/cmi/webform.webform.kuva_projekti.yml
@@ -385,7 +385,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.kuva_toiminta.yml b/conf/cmi/webform.webform.kuva_toiminta.yml
index 8dd86f607e..b5978324ff 100644
--- a/conf/cmi/webform.webform.kuva_toiminta.yml
+++ b/conf/cmi/webform.webform.kuva_toiminta.yml
@@ -440,7 +440,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml b/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml
index 7ee910e8df..219c12af33 100644
--- a/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml
+++ b/conf/cmi/webform.webform.liikunta_laitosavustushakemus.yml
@@ -322,7 +322,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
@@ -411,7 +410,6 @@ elements: |-
3: EU
4: Muu
5: Säätiö
- 6: STEA
'#required': true
'#title': 'Avustuksen myöntäjä'
issuer_name:
diff --git a/conf/cmi/webform.webform.liikunta_tapahtuma.yml b/conf/cmi/webform.webform.liikunta_tapahtuma.yml
index 537f2c5544..e108b662d1 100644
--- a/conf/cmi/webform.webform.liikunta_tapahtuma.yml
+++ b/conf/cmi/webform.webform.liikunta_tapahtuma.yml
@@ -618,9 +618,9 @@ settings:
form_prepopulate_source_entity: false
form_prepopulate_source_entity_required: false
form_prepopulate_source_entity_type: ''
- form_unsaved: false
+ form_unsaved: true
form_disable_back: false
- form_submit_back: false
+ form_submit_back: true
form_disable_autocomplete: false
form_novalidate: false
form_disable_inline_errors: false
diff --git a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
index 31e6a61256..e4985ba16a 100644
--- a/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
+++ b/conf/cmi/webform.webform.liikunta_toiminta_ja_tilankaytto.yml
@@ -370,7 +370,7 @@ elements: |-
compensation_explanation:
'#type': textarea
'#title': 'Selvitys avustuksen käytöstä'
- '#help': 'Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Esimerkiksi jos yhteisö on saanut vuokra-avustusta, tilinpäätöksen tuloslaskelmasta tulee käydä ilmi avustuksen toteutuminen sekä tuloissa että menoissa. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi palauttaa Käyttöselvitys-liite kohdasta.'
+ '#help': '
Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi palauttaa Käyttöselvitys-liite kohdasta.
Yhteenveto seuran/yhdistyksen maksamista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta, edellisen kalenterivuoden 1.1. - 31.12. ajalta. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.
+ '#markup': '
Yhteenveto seuran/yhdistyksen maksamista toteutuneista säännöllisten harjoitusvuorojen vuokrista, muiden kuin liikuntapalvelun omien tilojen osalta. Ilmoita toteutuneet vuokrat ja tuntimäärä edellisen kalenterivuoden 1.1. - 31.12. ajalta tilankäyttöliitteen mukaisesti. Liikuntatiloista maksetut vuokrat -kohta on pakollinen täyttää, mikäli haet tilankäyttöavustusta.
'
liikuntatiloista_maksetut_vuokrat_fieldset:
'#type': fieldset
'#title': 'Liikuntatiloista maksetut vuokrat'
@@ -539,7 +537,8 @@ elements: |-
- webform--small
seuraavalle_vuodelle_suunniteltu_muutos_tilojen_kaytossa_tunnit_:
'#type': textfield
- '#title': 'Seuraavalle vuodelle suunniteltu muutos tilojen käytössä +/- tunnit ja syy'
+ '#title': 'Seuraavalle vuodelle suunniteltu merkittävä muutos tilojen käytössä +/- tunnit ja vuokrasumma sekä syy muutokseen.'
+ '#help': '
Tilankäyttöavustuksen määrässä voidaan harkinnanvaraisesti huomioida hakuvuotta koskevat merkittävät muutokset seuran liikuntatilojen käytössä. Merkittäviksi muutoksiksi katsotaan: seurojen yhteenliittyminen, jaoston tai jaostojen liittyminen seuraan tai irtautuminen seurasta, seuran vuokraama tai omistama uusi liikuntatila (kyseisen tilan vuokrasopimus tulee liittää hakemukseen) tai seuran hallinnoimasta tai omistamasta liikuntatilasta luopuminen.
Mikäli ikäryhmän todellinen harjoitustuntimäärä ei ole selvitettävissä (esim. paljon sekaryhmiä), voit laskea kokonaistuntimäärästä kyseisen ikäryhmän osuuden perustuen ikäryhmän helsinkiläisten aktiiviharrastajien määrän osuuteen helsinkiläisten aktiiviharrastajien kokonaismäärästä. Esim. Jaoston kokonaistuntimäärä (kaikki sekaryhmiä) on 100 tuntia, jossa liikkuu aktiivisesti 10 aikuista ja 20 alle 20-vuotiasta: aikuisten tuntimäärä 33 tuntia ja alle 20-vuotiaiden tuntimäärä 67 tuntia. Ensisijaisesti tulee kuitenkin käyttää ikäryhmän osalta todellista toteutunutta tuntimäärää.
Seuran/yhdistyksen järjestämä säännöllinen ohjattu liikuntatoiminta lajeittain. Ilmoita tähän lajeittain edellisen vuoden helsinkiläisten aktiiviharrastajien määrät sekä heidän toteutuneet harjoitustunnit.
+ '#markup': '
Seuran/yhdistyksen järjestämä säännöllinen ohjattu liikuntatoiminta lajeittain. Ilmoita tähän lajeittain edellisen vuoden helsinkiläisten aktiiviharrastajien määrät sekä heidän toteutuneet harjoitustunnit ikäryhmittäin.
+ compensation_boolean:
+ '#type': radios
+ '#title': 'Käyttöselvitys edellisenä vuonna saamastani avustuksesta'
+ '#options':
+ - 'En ole saanut Helsingin kaupungilta avustusta samaan käyttötarkoitukseen edellisenä vuonna.'
+ - 'Olen saanut Helsingin kaupungilta avustusta samaan käyttötarkoitukseen edellisenä vuonna.'
+ '#required': true
+ markup:
+ '#type': webform_markup
+ '#states':
+ visible:
+ ':input[name="compensation_boolean"]':
+ value: '1'
+ '#markup': 'Anna käyttöselvitys Helsingin kaupungilta saadusta avustuksesta. Avustuksen käyttöselvitys tehdään avustuksesta, joka koskee viimeisintä päättynyttä tilikautta. Käyttöselvitystä ei tehdä käynnissä olevalta tilikaudelta. Käyttöselvityksen antaminen on seuraavan avustuksen saamisen ehtona. Mikäli käyttöselvitystä ei tehdä, avustusta ei myönnetä eikä makseta. Myönnetty avustus voidaan periä takaisin, jos edellisen avustuksen käyttöä ei ole hyväksyttävästi selvitetty.'
+ compensation_explanation:
+ '#type': textarea
+ '#title': 'Selvitys avustuksen käytöstä'
+ '#help': 'Käyttöselvityksessä tulee kuvata lyhyesti, miten myönnetty avustus on käytetty. Avustuksen saajan on järjestettävä kirjanpitonsa niin, että avustuksen käyttöä voidaan sieltä seurata. Esimerkiksi jos yhteisö on saanut vuokra-avustusta, tilinpäätöksen tuloslaskelmasta tulee käydä ilmi avustuksen toteutuminen sekä tuloissa että menoissa. Lisää tietoja avustuksen käytöstä voi myös kirjoittaa erilliseen liitteeseen, jonka voi ladata ja lähettää Muu-liitteenä.'
+ '#maxlength': 5000
+ '#counter_type': character
+ '#counter_maximum': 5000
+ '#counter_maximum_message': '%d/5000 merkkiä jäljellä'
+ '#states':
+ visible:
+ ':input[name="compensation_boolean"]':
+ value: '1'
+ required:
+ ':input[name="compensation_boolean"]':
+ value: '1'
+ '#attributes':
+ class:
+ - webform--large
+ '#cols': 63
+ 3_yhteison_tiedot:
+ '#type': webform_wizard_page
+ '#title': '3. Yhteisön toiminta'
+ '#prev_button_label': 'Edellinen'
+ '#next_button_label': 'Seuraava'
+ business_info:
+ '#type': webform_section
+ '#title': 'Toiminnan kuvaus'
+ business_purpose:
+ '#type': textarea
+ '#title': 'Toiminnan kuvaus'
+ '#help': 'Tieto haetaan omat tiedot -osiosta'
+ '#maxlength': 500
+ '#counter_type': character
+ '#counter_maximum': 500
+ '#counter_maximum_message': '%d/500 merkkiä jäljellä'
+ community_practices_business:
+ '#type': radios
+ '#title': 'Harjoittaako yhteisö liiketoimintaa'
+ '#options':
+ 1: Kyllä
+ 0: Ei
+ '#options_display': side_by_side
+ '#options_description_display': help
+ '#required': true
+ ensimmainen_otsikko:
+ '#type': webform_section
+ '#title': Jäsenmaksut
+ fee_person:
+ '#type': textfield
+ '#title': 'Henkilöjäsenen jäsenmaksu (€ / vuosi)'
+ '#attributes':
+ class:
+ - webform--small
+ '#maxlength': 50
+ '#input_mask': '''alias'': ''currency'', ''prefix'': '''', ''suffix'': ''€'',''groupSeparator'': '' '',''radixPoint'':'','''
+ '#size': 16
+ fee_community:
+ '#type': textfield
+ '#title': 'Yhteisöjäsen (€ / vuosi)'
+ '#attributes':
+ class:
+ - webform--small
+ '#maxlength': 50
+ '#input_mask': '''alias'': ''currency'', ''prefix'': '''', ''suffix'': ''€'',''groupSeparator'': '' '',''radixPoint'':'','''
+ '#size': 16
+ jasenmaara:
+ '#type': webform_section
+ '#title': Jäsenmäärä
+ jasenmaara_fieldset:
+ '#type': fieldset
+ '#title': Jäsenmäärä
+ '#help': 'Jos yhteisöllä on jäseniä, merkitse ne tähän.'
+ '#attributes':
+ class:
+ - grants-fieldset
+ - grants-fieldset-short
+ members_applicant_person_global:
+ '#type': textfield
+ '#title': 'Henkilöjäseniä yhteensä'
+ '#help': 'Kuinka monta jäsenmaksun maksanutta henkilöjäsentä yhteisöllä on tällä hetkellä?'
+ '#maxlength': 9
+ '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0'''
+ '#pattern': '^[0-9 ]*$'
+ '#pattern_error': 'Vain numeroita'
+ '#size': 16
+ '#attributes':
+ class:
+ - webform--small
+ members_applicant_person_local:
+ '#type': textfield
+ '#title': 'Helsinkiläisiä henkilöjäseniä yhteensä'
+ '#help': 'Kuinka monta jäsenmaksun maksanutta helsinkiläistä henkilöjäsentä yhteisöllä on tällä hetkellä?'
+ '#maxlength': 9
+ '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0'''
+ '#pattern': '^[0-9 ]*$'
+ '#pattern_error': 'Vain numeroita'
+ '#size': 16
+ '#attributes':
+ class:
+ - webform--small
+ members_applicant_community_global:
+ '#type': textfield
+ '#title': 'Yhteisöjäseniä yhteensä'
+ '#help': 'Kuinka monta jäsenmaksun maksanutta yhteisöjäsentä yhteisöllä on tällä hetkellä? Yhteisöjäseniä ovat muut kuin henkilöjäsenet, esimerkiksi yhdistykset, säätiöt, yritykset tai kunnat.'
+ '#maxlength': 9
+ '#size': 16
+ '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0'''
+ '#pattern': '^[0-9 ]*$'
+ '#pattern_error': 'Vain numeroita'
+ '#attributes':
+ class:
+ - webform--small
+ members_applicant_community_local:
+ '#type': textfield
+ '#title': 'Helsinkiläisiä yhteisöjäseniä yhteensä'
+ '#help': 'Kuinka monta jäsenmaksun maksanutta helsinkiläistä yhteisöjäsentä yhteisöllä on tällä hetkellä? Yhteisöjäseniä ovat muut kuin henkilöjäsenet, esimerkiksi yhdistykset, säätiöt, yritykset tai kunnat.'
+ '#maxlength': 9
+ '#input_mask': '''alias'': ''numeric'', ''groupSeparator'': '' '', ''digits'': ''0'''
+ '#pattern': '^[0-9 ]*$'
+ '#pattern_error': 'Vain numeroita'
+ '#size': 16
+ '#attributes':
+ class:
+ - webform--small
+ lisatiedot_ja_liitteet:
+ '#type': webform_wizard_page
+ '#title': '4. Lisätiedot ja liitteet'
+ lisatietoja_hakemukseen_liittyen:
+ '#type': webform_section
+ '#title': 'Lisätietoja hakemukseen liittyen'
+ additional_information:
+ '#type': textarea
+ '#title': Lisätiedot
+ '#attributes':
+ class:
+ - webform--large
+ '#help': 'Tähän voit tarvittaessa kirjoittaa lisätietoja tai muita perusteluja hakemukseen liittyen.'
+ '#counter_type': character
+ '#maxlength': 5000
+ '#counter_maximum': 5000
+ '#counter_maximum_message': '%d/5000 merkkiä jäljellä'
+ '#cols': 63
+ liitteet:
+ '#type': webform_section
+ '#title': Liitteet
+ attachments_info:
+ '#type': webform_markup
+ '#markup': |-
+
Avustushakemuksen käsittelyä varten tulee toimittaa kaikki alla luetellut liitteet. Avustushakemus voidaan hylätä, jos liitteitä ei ole toimitettu. Mikäli joku liitteistä puuttuu kerro siitä hakemuksen Lisäselvitys liitteistä -kohdassa.
+
Vaaditut liitteet
+
Avustushakemuksen käsittelyä varten tarvitaan vahvistettuja, yhteisön kokouksessaan hyväksymiä ja allekirjoittamia, liitteitä edelliseltä päättyneeltä tilikaudelta sekä liitteitä sille toimintavuodelle, jolle avustusta haetaan. Edellistä tilikautta koskevat liitteet ovat: tilinpäätös, toimintakertomus ja tilin- tai toiminnantarkastuskertomus sekä vuosikokouksen pöytäkirja. Liitteet vuodelle, jolle avustusta haetaan ovat: talousarvio ja toimintasuunnitelma.
+
Usean liitteen toimittaminen yhtenä tiedostona
+
Voit halutessasi toimittaa useampia liitteitä yhtenä tiedostona Tilinpäätös tai talousarvio -liitekohdassa. Merkitse tällöin muiden liiteotsikoiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.
+
Helsingin kaupungille aiemmin toimitetut liitteet
+
Jos vaaditut liitteet on jo toimitettu toisen Helsingin kaupungille osoitetun avustushakemuksen liitteenä, samoja liitteitä ei tarvitse toimittaa uudelleen. Yhteisön vahvistettu tilinpäätös, toimintakertomus, toimintasuunnitelma ja talousarvio eivät voi olla erilaisia eri hakemusten liitteenä. Merkitse tällöin toimitettujen liitteiden kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.
Liitteiden sisältöä ei voi tarkastella jälkikäteen
+
Huomioithan, että et pysty avaamaan liitteitä sen jälkeen, kun olet liittänyt ne lomakkeelle. Näet liitteestä ainoastaan sen tiedostonimen.
+
Vaikka et voi tarkastella liitteiden sisältöä jälkikäteen, lomakkeelle liitetyt liitteet lähtevät lomakkeen muiden tietojen mukana avustushakemuksen käsittelijälle.
Tilinpäätöksen täytyy sisältää vähintään tuloslaskelma ja tase. Yhdistys liittää tähän kohtaan yhdistyksen jäsenkokouksessa vahvistetun ja allekirjoitetun tilinpäätöksen.
+
Yhteisön tilikausi voi olla kalenterivuosi tai jokin muu kausi. Yhdistysten kohdalla niiden omissa säännöissä lukee, mikä on yhdistyksen tilikausi.
+ '#title_display': before
+ '#multiple__no_items_message': 'Ei syötettyjä arvoja. Lisää uusi sisältö alta.'
+ '#description__access': false
+ vahvistettu_toimintakertomus:
+ '#type': grants_attachments
+ '#title': 'Vahvistettu toimintakertomus (edelliseltä päättyneeltä tilikaudelta)'
+ '#multiple': false
+ '#filetype': '4'
+ '#help': |-
+
Yhdistys liittää tähän kohtaan yhdistyksen jäsenkokouksessa vahvistetun toimintakertomuksen.
+
Jos toimintakertomus on osana tilinpäätöstä ja liititte sen jo tilinpäätöksen mukana lomakkeelle, sitä ei tarvitse liittää tähän erikseen. Valitse tällaisessa tilanteessa toimintakertomuksen kohdalla ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.
Liitä tähän allekirjoitettu tilin- tai toiminnantarkastuskertomus yhteisön edelliseltä päättyneeltä tilikaudelta.
+
Jos allekirjoitettu tilin- tai toiminnantarkastuskertomus on osa yhteisönne tilinpäätöstä ja liitit sen jo lomakkeelle tilinpäätöksen kohdalla, valitse tässä kohdassa ”Liite on toimitettu yhtenä tiedostona tai toisen hakemuksen yhteydessä”.
In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.
If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.
',
'#element_validate' => [
@@ -146,7 +149,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Men (64 years and over)', [], $tOpts),
+ '#title' => t('Men from Helsinki (64 years and over)', [], $tOpts),
'#prefix' => '
',
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
@@ -157,7 +160,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Women (64 years and over)', [], $tOpts),
+ '#title' => t('Women from Helsinki (64 years and over)', [], $tOpts),
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
],
@@ -167,7 +170,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Others (64 years and over)', [], $tOpts),
+ '#title' => t('Others from Helsinki (64 years and over)', [], $tOpts),
'#suffix' => '
',
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
@@ -179,6 +182,7 @@ public static function getCompositeElements(array $element): array {
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
'#title' => t('Practice hours of adults (64 years and over)', [], $tOpts),
+ '#help' => $hoursHelp,
'#prefix' => '
',
'#suffix' => '
',
'#element_validate' => [
@@ -190,7 +194,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Boys (under 20 years of age)', [], $tOpts),
+ '#title' => t('Boys from Helsinki (under 20 years of age)', [], $tOpts),
'#prefix' => '
',
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
@@ -201,7 +205,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Girls (under 20 years of age)', [], $tOpts),
+ '#title' => t('Girls from Helsinki (under 20 years of age)', [], $tOpts),
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
],
@@ -211,7 +215,7 @@ public static function getCompositeElements(array $element): array {
'#type' => 'textfield',
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
- '#title' => t('Others (under 20 years of age)', [], $tOpts),
+ '#title' => t('Others from Helsinki (under 20 years of age)', [], $tOpts),
'#suffix' => '
',
'#element_validate' => [
[FieldValueValidator::class, 'validate'],
@@ -223,6 +227,7 @@ public static function getCompositeElements(array $element): array {
'#input_mask' => "'alias': 'numeric', 'groupSeparator': ' ', 'digits': '0'",
'#pattern' => '^[0-9 ]*$',
'#title' => t('Practice hours of children/young people (under 20 years of age)', [], $tOpts),
+ '#help' => $hoursHelp,
'#prefix' => '
',
'#suffix' => '
',
'#element_validate' => [
diff --git a/public/modules/custom/grants_club_section/translations/fi.po b/public/modules/custom/grants_club_section/translations/fi.po
index 2560d09e8e..d10d96c757 100644
--- a/public/modules/custom/grants_club_section/translations/fi.po
+++ b/public/modules/custom/grants_club_section/translations/fi.po
@@ -344,48 +344,52 @@ msgid "Sport"
msgstr "Laji"
msgctxt "grants_club_section"
-msgid "Women (20-63 years)"
-msgstr "Naiset (20-63-vuotiaat)"
+msgid "Women from Helsinki (20-63 years)"
+msgstr "Helsinkiläiset naiset (20-63-vuotiaat)"
msgctxt "grants_club_section"
-msgid "Men (20-63 years)"
-msgstr "Miehet (20-63-vuotiaat)"
+msgid "Men from Helsinki (20-63 years)"
+msgstr "Helsinkiläiset miehet (20-63-vuotiaat)"
msgctxt "grants_club_section"
-msgid "Others (20-63 years)"
-msgstr "Muut (20-63-vuotiaat)"
+msgid "Others from Helsinki (20-63 years)"
+msgstr "Helsinkiläiset muut (20-63-vuotiaat)"
msgctxt "grants_club_section"
msgid "Practice hours of adults (20-63 years)"
msgstr "20-63-vuotiaiden harjoitustunnit yhteensä"
msgctxt "grants_club_section"
-msgid "Men (64 years and over)"
-msgstr "Miehet (64 vuotta täyttäneet)"
+msgid "
In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.
If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.
Mikäli ikäryhmän todellinen harjoitustuntimäärä ei ole selvitettävissä (esim. paljon sekaryhmiä), voit laskea kokonaistuntimäärästä kyseisen ikäryhmän osuuden perustuen ikäryhmän helsinkiläisten aktiiviharrastajien määrän osuuteen helsinkiläisten aktiiviharrastajien kokonaismäärästä. Esim. Jaoston kokonaistuntimäärä (kaikki sekaryhmiä) on 100 tuntia, jossa liikkuu aktiivisesti 10 aikuista ja 20 alle 20-vuotiasta: aikuisten tuntimäärä 33 tuntia ja alle 20-vuotiaiden tuntimäärä 67 tuntia. Ensisijaisesti tulee kuitenkin käyttää ikäryhmän osalta todellista toteutunutta tuntimäärää.
"
msgctxt "grants_club_section"
-msgid "Women (64 years and over)"
-msgstr "Naiset (64 vuotta täyttäneet)"
+msgid "Men from Helsinki (64 years and over)"
+msgstr "Helsinkiläiset miehet (64 vuotta täyttäneet)"
msgctxt "grants_club_section"
-msgid "Others (64 years and over)"
-msgstr "Muut (64 vuotta täyttäneet)"
+msgid "Women from Helsinki (64 years and over)"
+msgstr "Helsinkiläiset naiset (64 vuotta täyttäneet)"
+
+msgctxt "grants_club_section"
+msgid "Others from Helsinki (64 years and over)"
+msgstr "Helsinkiläiset muut (64 vuotta täyttäneet)"
msgctxt "grants_club_section"
msgid "Practice hours of adults (64 years and over)"
msgstr "64 vuotta täyttäneiden harjoitustunnit yhteensä"
msgctxt "grants_club_section"
-msgid "Boys (under 20 years of age)"
-msgstr "Pojat (alle 20-vuotiaat)"
+msgid "Boys from Helsinki (under 20 years of age)"
+msgstr "Helsinkiläiset pojat (alle 20-vuotiaat)"
msgctxt "grants_club_section"
-msgid "Girls (under 20 years of age)"
-msgstr "Tytöt (alle 20-vuotiaat)"
+msgid "Girls from Helsinki (under 20 years of age)"
+msgstr "Helsinkiläiset tytöt (alle 20-vuotiaat)"
msgctxt "grants_club_section"
-msgid "Others (under 20 years of age)"
-msgstr "Muut (alle 20-vuotiaat)"
+msgid "Others from Helsinki (under 20 years of age)"
+msgstr "Helsinkiläiset muut (alle 20-vuotiaat)"
msgctxt "grants_club_section"
msgid "Practice hours of children/young people (under 20 years of age)"
diff --git a/public/modules/custom/grants_club_section/translations/sv.po b/public/modules/custom/grants_club_section/translations/sv.po
index a8c1e3f35d..9845ed3de1 100644
--- a/public/modules/custom/grants_club_section/translations/sv.po
+++ b/public/modules/custom/grants_club_section/translations/sv.po
@@ -344,48 +344,52 @@ msgid "Sport"
msgstr "Sport"
msgctxt "grants_club_section"
-msgid "Women (20-63 years)"
-msgstr "Kvinnor (20-63 år)"
+msgid "Women from Helsinki (20-63 years)"
+msgstr "Kvinnor från Helsingfors (20-63 år)"
msgctxt "grants_club_section"
-msgid "Men (20-63 years)"
-msgstr "Män (20-63 år)"
+msgid "Men from Helsinki (20-63 years)"
+msgstr "Män från Helsingfors (20-63 år)"
msgctxt "grants_club_section"
-msgid "Others (20-63 years)"
-msgstr "Övriga (20-63 år)"
+msgid "Others from Helsinki (20-63 years)"
+msgstr "Övriga från Helsingfors (20-63 år)"
msgctxt "grants_club_section"
msgid "Practice hours of adults (20-63 years)"
msgstr "Träningstimmar för vuxna (20-63 år)"
msgctxt "grants_club_section"
-msgid "Men (64 years and over)"
-msgstr "Män (64 år och äldre)"
+msgid "
In the practice hours section, do not report the training output of individual actives, but the actual practice hours organized for Helsinki residents belonging to the age group.
If the actual number of training hours for an age group cannot be ascertained (e.g. many mixed groups), can the share of that age group be calculated from the total number of hours based on the share of the number of active members from Helsinki in the age group out of the total number of active members from Helsinki. E.g. the total number of hours in the division (all mixed groups) is 100 hours, where 10 adults and 20 under 20-year-olds are active: the number of hours for adults is 33 hours and for under 20-year-olds 67 hours. However, the actual number of hours realized for the age group should be used primarily.
"
+msgstr "
I avsnittet träningstimmar, rapportera inte enskilda idrottsutövarnas träningsprestationer i timmar, utan de faktiska träningstimmar som organiserats för helsingforsare som tillhör åldersgruppen.
Om det faktiska antalet träningstimmar för en åldersgrupp inte kan fastställas (t. ex. många blandade träningsgrupper), kan andelen av den åldersgruppen beräknas från det totala antalet timmar baserat på andelen av antalet aktiva idrottsutövare från Helsingfors i åldersgruppen av det totala antalet aktiva idrottsutövare från Helsingfors. T. ex. totala antalet timmar i grensektionen (alla blandade grupper) är 100 timmar, där 10 vuxna och 20 under 20-åringar är aktiva: antalet timmar för vuxna är 33 timmar och för under 20-åringar 67 timmar. Det faktiska antalet realiserade timmar för åldersgruppen bör dock i första hand användas.
"
msgctxt "grants_club_section"
-msgid "Women (64 years and over)"
-msgstr "Kvinnor (64 år och äldre)"
+msgid "Men from Helsinki (64 years and over)"
+msgstr "Män från Helsingfors (64 år och äldre)"
msgctxt "grants_club_section"
-msgid "Others (64 years and over)"
-msgstr "Övriga (64 år och äldre)"
+msgid "Women from Helsinki (64 years and over)"
+msgstr "Kvinnor från Helsingfors (64 år och äldre)"
+
+msgctxt "grants_club_section"
+msgid "Others from Helsinki (64 years and over)"
+msgstr "Övriga från Helsingfors (64 år och äldre)"
msgctxt "grants_club_section"
msgid "Practice hours of adults (64 years and over)"
msgstr "Träningstimmar för vuxna (64 år och äldre)"
msgctxt "grants_club_section"
-msgid "Boys (under 20 years of age)"
-msgstr "Pojkar (under 20 år)"
+msgid "Boys from Helsinki (under 20 years of age)"
+msgstr "Pojkar från Helsingfors (under 20 år)"
msgctxt "grants_club_section"
-msgid "Girls (under 20 years of age)"
-msgstr "Flickor (under 20 år)"
+msgid "Girls from Helsinki (under 20 years of age)"
+msgstr "Flickor från Helsingfors (under 20 år)"
msgctxt "grants_club_section"
-msgid "Others (under 20 years of age)"
-msgstr "Övriga (under 20 år)"
+msgid "Others from Helsinki (under 20 years of age)"
+msgstr "Övriga från Helsingfors (under 20 år)"
msgctxt "grants_club_section"
msgid "Practice hours of children/young people (under 20 years of age)"
diff --git a/public/modules/custom/grants_events/src/EventsService.php b/public/modules/custom/grants_events/src/EventsService.php
index 8e88fd2f7d..8ffa9df10c 100644
--- a/public/modules/custom/grants_events/src/EventsService.php
+++ b/public/modules/custom/grants_events/src/EventsService.php
@@ -7,6 +7,7 @@
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\grants_handler\DebuggableTrait;
use Drupal\grants_metadata\AtvSchema;
+use Drupal\helfi_atv\AtvDocument;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use Ramsey\Uuid\Uuid;
@@ -67,6 +68,7 @@ class EventsService {
'MESSAGE_READ' => 'MESSAGE_READ',
'MESSAGE_RESEND' => 'MESSAGE_RESEND',
'HANDLER_ATT_OK' => 'HANDLER_ATT_OK',
+ 'HANDLER_SEND_INTEGRATION' => 'HANDLER_SEND_INTEGRATION',
'HANDLER_ATT_DELETE' => 'HANDLER_ATT_DELETE',
'HANDLER_RESEND_APP' => 'HANDLER_RESEND_APP',
'HANDLER_APP_COPIED' => 'HANDLER_APP_COPIED',
@@ -139,7 +141,7 @@ public function logEvent(
): ?array {
if (empty($eventData)) {
- $eventData = self::getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget);
+ $eventData = $this->getEventData($eventType, $applicationNumber, $eventDescription, $eventTarget);
}
$eventDataJson = Json::encode($eventData);
@@ -212,7 +214,7 @@ public function filterEvents(array $events, string $typeKey): array {
* @param string $eventDescription
* Event description.
* @param string $eventTarget
- * Eent target.
+ * Event target.
*
* @return array
* Event data in array.
@@ -245,4 +247,22 @@ public function getEventData(string $eventType, string $applicationNumber, strin
return $eventData;
}
+ /**
+ * Add new event to application document.
+ *
+ * @param \Drupal\helfi_atv\AtvDocument $document
+ * Document to be updated.
+ * @param array $eventData
+ * Event data to be added.
+ */
+ public function addNewEventForApplication(AtvDocument &$document, array $eventData): void {
+ $documentContent = $document->getContent();
+ $documentEvents = $documentContent['events'] ?? [];
+ $documentEvents[] = $eventData;
+ $documentContent['events'] = $documentEvents;
+
+ $document->setContent($documentContent);
+
+ }
+
}
diff --git a/public/modules/custom/grants_handler/grants_handler.libraries.yml b/public/modules/custom/grants_handler/grants_handler.libraries.yml
index 9ba38aff5b..029766017b 100644
--- a/public/modules/custom/grants_handler/grants_handler.libraries.yml
+++ b/public/modules/custom/grants_handler/grants_handler.libraries.yml
@@ -61,3 +61,11 @@ grants-dialog:
js/grants-dialog.js: { }
dependencies:
- core/drupal
+
+application-copy-dialog:
+ js:
+ js/application-copy-dialog.js: {}
+ dependencies:
+ - core/jquery
+ - core/drupal
+ - core/drupalSettings
diff --git a/public/modules/custom/grants_handler/grants_handler.module b/public/modules/custom/grants_handler/grants_handler.module
index 39f5111cd1..df4f2a8c13 100644
--- a/public/modules/custom/grants_handler/grants_handler.module
+++ b/public/modules/custom/grants_handler/grants_handler.module
@@ -21,7 +21,6 @@ use Drupal\Core\Url;
use Drupal\grants_attachments\AttachmentHandlerHelper;
use Drupal\grants_handler\ApplicationHelpers;
use Drupal\grants_handler\Event\UserLogoutEvent;
-use Drupal\grants_handler\Form\CopyApplicationModalForm;
use Drupal\grants_handler\GrantsErrorStorage;
use Drupal\grants_handler\Helpers;
use Drupal\grants_handler\Plugin\WebformElement\CompensationsComposite;
@@ -648,6 +647,31 @@ function _grants_handler_alter_number_fields(&$element): void {
}
}
+/**
+ * Function to update custom component dropdown value rather than via config.
+ *
+ * @param array $form
+ * The form.
+ *
+ * @return void
+ * No return?
+ */
+function grants_handler__update_issuer_dropdown(array &$form): void {
+
+ $tOpts = ['context' => 'Grant Issuers'];
+
+ $newOptions = [
+ 1 => t('State', [], $tOpts),
+ 3 => t('EU', [], $tOpts),
+ 4 => t('Other', [], $tOpts),
+ 5 => t('Foundation', [], $tOpts),
+ ];
+
+ // Call the method with multiple field names.
+ ApplicationHelpers::updateFieldOptions($form, $newOptions, ['myonnetty_avustus', 'issuer']);
+ ApplicationHelpers::updateFieldOptions($form, $newOptions, ['haettu_avustus_tieto', 'issuer']);
+}
+
/**
* Implements hook_form_FORM_ID_alter().
*/
@@ -667,6 +691,7 @@ function grants_handler_webform_submission_form_alter(&$form, FormStateInterface
$form['actions']['wizard_next']['#validate'][] = '::noValidate';
_grants_handler_alter_number_fields($form);
+ grants_handler__update_issuer_dropdown($form);
$grants_formnavigation_helper = \Drupal::service('grants_handler.navigation_helper');
$all_errors = [];
@@ -938,7 +963,8 @@ function grants_handler_preprocess_webform_submission_data(&$variables) {
/**
* Implements hook_preprocess_HOOK().
*/
-function grants_handler_preprocess_webform_submission(&$variables) {
+function grants_handler_preprocess_webform_submission(&$variables): void {
+
// Get submission object.
/** @var \Drupal\webform\Entity\WebformSubmission $submission */
$submission = $variables['webform_submission'];
@@ -1279,6 +1305,11 @@ function grants_handler_preprocess_webform_submission_form(&$variables) {
$navigationHelper = \Drupal::service('grants_handler.navigation_helper');
// Get errors for printing.
$variables['errors'] = $navigationHelper->getAllErrors($webform_submission);
+
+ $variables['unvisited_pages'] = $navigationHelper->getUnvisitedPages($webform_submission);
+ $variables['display_visit_all_pages_warning'] =
+ $navigationHelper->getCurrentPage($webform_submission) === 'webform_preview' &&
+ count($variables['unvisited_pages']) > 0;
}
/**
@@ -1361,7 +1392,6 @@ function grants_handler_preprocess_application_list(&$variables) {
* Implements hook_preprocess_HOOK().
*/
function grants_handler_preprocess_application_list_item(&$variables): void {
- $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
$tOpts = ['context' => 'grants_handler'];
// Get status service and get listed statuses.
@@ -1377,9 +1407,20 @@ function grants_handler_preprocess_application_list_item(&$variables): void {
return;
}
- $applicationTypes = Helpers::getApplicationTypes();
+ if (!isset($submissionData["metadata"]["form_uuid"])) {
+ \Drupal::logger('grants_handler')
+ ->error('No form uuid found for submission @submissionId',
+ ['@submissionId' => $submissionData["application_number"]]);
+ return;
+ }
+
+ /** @var \Drupal\grants_handler\ApplicationGetterService $applicationGetterService */
+ $applicationGetterService = \Drupal::service('grants_handler.application_getter_service');
- $variables['applicationFormName'] = $applicationTypes[$submissionData["application_type"]][$language];
+ // Get webform.
+ $webform = $applicationGetterService->getWebformFromApplicationNumber($submissionData["application_number"]);
+ // Set webform title.
+ $variables['applicationFormName'] = $webform->label();
$variables['applicationNumber'] = $submissionData["application_number"];
@@ -1503,8 +1544,8 @@ function grants_handler_preprocess_application_list_item(&$variables): void {
$status = $applicationStatusService->getWebformStatus($webform);
- $variables['openStartDate'] = strtotime($thirdPartySettings['applicationOpen']);
- $variables['openEndDate'] = strtotime($thirdPartySettings['applicationClose']);
+ $variables['openStartDate'] = $thirdPartySettings['applicationOpen'] ? strtotime($thirdPartySettings['applicationOpen']) : '';
+ $variables['openEndDate'] = $thirdPartySettings['applicationClose'] ? strtotime($thirdPartySettings['applicationClose']) : '';
$variables['isContinuous'] = $thirdPartySettings['applicationContinuous'] != 0;
if (!$variables['isContinuous'] && ($variables['openStartDate'] > time() || $variables['openEndDate'] < time())) {
$variables['errorType'] = 'NOT_OPEN';
@@ -1729,6 +1770,8 @@ function grants_handler_preprocess_webform_submission_information(array &$variab
$webform = $submission->getWebForm();
$thirdPartySettings = $webform->getThirdPartySettings('grants_metadata');
+ $applicationNumber = $submissionData['application_number'] ?? ApplicationHelpers::createApplicationNumber($submission);
+
$printApplicationUrl = Url::fromRoute(
'grants_webform_print.submission_print',
[
@@ -1794,38 +1837,36 @@ function grants_handler_preprocess_webform_submission_information(array &$variab
!$isApplicationArchived &&
$isApplicationOpen
) {
+
$copyApplicationUrl = Url::fromRoute(
- 'grants_handler.copy_application_modal',
+ 'grants_handler.copy_application',
[
'submission_id' => $submissionData['application_number'],
- 'nojs' => 'ajax',
- ],
- [
- 'attributes' => [
- 'class' => ['use-ajax', 'hds-button', 'hds-button--supplementary'],
- 'data-dialog-type' => 'modal',
- 'data-dialog-options' => json_encode(CopyApplicationModalForm::getDataDialogOptions()),
- // Add this id so that we can test this form.
- 'id' => 'copy-application-modal-form-link',
- ],
]
);
- $copyApplicationLinkText = [
- '#theme' => 'edit-label-with-icon',
- '#icon' => 'copy',
- '#text_label' => t('Copy application', [], $tOpts),
+
+ // Attach the JavaScript file.
+ $variables['#attached']['library'][] = 'grants_handler/grants-dialog';
+ $variables['#attached']['library'][] = 'grants_handler/application-copy-dialog';
+
+ // Render a Twig template.
+ $html_content = \Drupal::service('twig')->render('themes/custom/hdbt_subtheme/templates/webform/application-copy-dialog-content.html.twig', [
+ 'applicationNumber' => $applicationNumber,
+ 'webformTitle' => $webform->label(),
+ ]);
+
+ // Define the settings you want to pass.
+ $variables['#attached']['drupalSettings']['grants_handler'] = [
+ 'copyUrl' => $copyApplicationUrl->toString(),
+ 'htmlContent' => $html_content,
];
- $copyApplicationLink = Link::fromTextAndUrl($copyApplicationLinkText, $copyApplicationUrl);
- $variables['copyApplicationLink'] = $copyApplicationLink;
+ $variables['copyText'] = t('Copy application', [], $tOpts);
}
$variables['formTitle'] = $webform->label();
$variables['printLink'] = '';
$variables['copyLink'] = '';
- $submissionData = $submission->getData();
- $applicationNumber = $submissionData['application_number'] ?? ApplicationHelpers::createApplicationNumber($submission);
-
$variables['applicationNumber'] = $applicationNumber;
$variables['isEditable'] = $applicationStatusService->isSubmissionEditable($submission);
$variables['isEditPage'] = 'grants_handler.edit_application' === \Drupal::routeMatch()
@@ -1859,6 +1900,7 @@ function grants_handler_preprocess_webform_submission_information(array &$variab
'#theme' => 'webform_submission_attachment_list',
'#submission' => $submission,
];
+
}
/**
diff --git a/public/modules/custom/grants_handler/grants_handler.routing.yml b/public/modules/custom/grants_handler/grants_handler.routing.yml
index 70d03be369..b183f94e71 100644
--- a/public/modules/custom/grants_handler/grants_handler.routing.yml
+++ b/public/modules/custom/grants_handler/grants_handler.routing.yml
@@ -22,6 +22,14 @@ grants_handler.view_application:
requirements:
_custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
+grants_handler.copy_application:
+ path: '/hakemus/{submission_id}/kopioi'
+ defaults:
+ _title_callback: '\Drupal\grants_handler\Controller\ApplicationController::getTitle'
+ _controller: '\Drupal\grants_handler\Controller\CopyApplicationAjaxController'
+ requirements:
+ _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
+
grants_handler.edit_application:
path: '/hakemus/{webform}/{webform_submission}/muokkaa'
defaults:
@@ -45,26 +53,10 @@ grants_handler.message_read:
requirements:
_custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
-grants_handler.copy_application:
- path: '/hakemus/{submission_id}/kopioi'
- defaults:
- _title: 'Copy application'
- _form: 'Drupal\grants_handler\Form\CopyApplicationForm'
- requirements:
- _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
-
-grants_handler.copy_application_modal:
- path: '/hakemus/{submission_id}/kopioi/{nojs}'
- defaults:
- _title: 'You are copying an application'
- _form: 'Drupal\grants_handler\Form\CopyApplicationModalForm'
- requirements:
- _custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
-
-grants_handler.print_application_atv:
+grants_handler.atv_print_view:
path: '/hakemus/{submission_id}/tulosta'
defaults:
_title_callback: '\Drupal\grants_handler\Controller\ApplicationController::getTitle'
- _controller: '\Drupal\grants_handler\Controller\ApplicationController::printViewAtv'
+ _controller: '\Drupal\grants_handler\Controller\AtvPrintViewController'
requirements:
_custom_access: '\Drupal\grants_handler\Controller\ApplicationController::accessByApplicationNumber'
diff --git a/public/modules/custom/grants_handler/grants_handler.services.yml b/public/modules/custom/grants_handler/grants_handler.services.yml
index c054cdd8b7..103f38847d 100644
--- a/public/modules/custom/grants_handler/grants_handler.services.yml
+++ b/public/modules/custom/grants_handler/grants_handler.services.yml
@@ -155,9 +155,15 @@ services:
'@messenger',
'@grants_handler.application_getter_service',
'@helfi_helsinki_profiili.userdata',
- '@grants_attachments.attachment_fixer_service'
+ '@grants_attachments.attachment_fixer_service',
+ '@current_user',
+ '@database',
+ '@grants_events.events_service'
]
grants_handler.application_access_handler:
class: Drupal\grants_handler\ApplicationAccessHandler
- arguments: ['@grants_profile.service']
+ arguments: [
+ '@grants_profile.service',
+ '@grants_handler.application_getter_service'
+ ]
diff --git a/public/modules/custom/grants_handler/js/application-copy-dialog.js b/public/modules/custom/grants_handler/js/application-copy-dialog.js
new file mode 100644
index 0000000000..3482db5ca0
--- /dev/null
+++ b/public/modules/custom/grants_handler/js/application-copy-dialog.js
@@ -0,0 +1,36 @@
+(function (Drupal) {
+ Drupal.behaviors.copyApplicationModalForm = {
+ attach: function (context, settings) {
+ const triggerButton = document.getElementById('copy-application-button');
+
+ triggerButton.addEventListener('click', function (event) {
+
+ event.preventDefault();
+
+ const htmlContent = drupalSettings.grants_handler.htmlContent;
+ const copyUrl = drupalSettings.grants_handler.copyUrl;
+
+ Drupal.dialogFunctions.createDialog({
+ dialogContent: htmlContent,
+ actionButtonText: Drupal.t('Copy application'),
+ backButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }),
+ closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }),
+ actionButtonCallback: () => {
+ // Redirect to a new URL
+ window.location.href = copyUrl;
+ /*
+ We probably should handle the whole copy process here, but for
+ now we just redirect to the copy URL.
+
+ Much better UX would be to show spinner here while copying
+ application and then redirect when it's ready
+
+ */
+ },
+ dialogTitle: Drupal.t('Copy application'),
+ customSelector: 'application-copy-dialog'
+ })
+ });
+ },
+ };
+})(Drupal);
diff --git a/public/modules/custom/grants_handler/js/grants-dialog.js b/public/modules/custom/grants_handler/js/grants-dialog.js
index 925eead272..a1f651173d 100644
--- a/public/modules/custom/grants_handler/js/grants-dialog.js
+++ b/public/modules/custom/grants_handler/js/grants-dialog.js
@@ -12,31 +12,51 @@
* closes the dialog.
* @param {Function} actionButtonCallback - The function to execute when
* the "action" button is clicked.
+ * @param dialogTitle
+ * If we want to override the default title
+ * @param {Function} closeButtonCallback
+ * The function to execute when the "close" button is clicked.
+ * @param {Function} backButtonCallback
+ * The function to execute when the "back" button is clicked.
+ * @param escapeButtonCallback
+ * The function to execute when the "escape" button is clicked.
+ * @param customSelector
+ * If we want to add a custom class to the dialog container
*/
- createDialog: (dialogContent, actionButtonText, backButtonText, closeButtonText, actionButtonCallback = null) => {
- const dialogTitle = Drupal.t('Attention', {}, { context: 'grants_handler' });
+ createDialog: ({
+ dialogContent,
+ actionButtonText,
+ backButtonText,
+ closeButtonText,
+ dialogTitle = Drupal.t('Attention', {}, { context: 'grants_handler' }),
+ actionButtonCallback = null,
+ closeButtonCallback = null,
+ backButtonCallback = null,
+ escapeButtonCallback = null,
+ customSelector = '',
+ }) => {
const actionButtonHTML = actionButtonText && ``;
const backButtonHTML = backButtonText && ``;
const closeButtonHTML = closeButtonText && ``;
const dialogHTML = `
-
-
-
+
+
+
+
+ `;
// TODO: Surveys use very similar javascript dialog implementation.
// This and the survey implementation could possibly be merged with some
@@ -54,7 +74,7 @@
const closeButton = document.getElementById('helfi-dialog__close-button');
const dialog = document.getElementById('helfi-dialog__container');
const dialogFocusTrap = window.focusTrap.createFocusTrap('#helfi-dialog__container', {
- initialFocus: () => '#helfi-dialog__title'
+ initialFocus: () => '#helfi-dialog__title',
});
// Activate the focus trap so that the user needs to react to the dialog.
@@ -68,18 +88,30 @@
// Add click event listener to back button
backButton.addEventListener('click', () => {
dialogFocusTrap.deactivate();
+ // If we have a callback, execute it.
+ if (backButtonCallback) {
+ backButtonCallback();
+ }
Drupal.dialogFunctions.removeDialog(dialog);
});
// Add click event listener to close button
closeButton.addEventListener('click', () => {
dialogFocusTrap.deactivate();
+ // If we have a callback, execute it.
+ if (closeButtonCallback) {
+ closeButtonCallback();
+ }
Drupal.dialogFunctions.removeDialog(dialog);
});
// Add event listener to ESC button to remove the dialog
document.body.addEventListener('keydown', function (event) {
if (event.key === 'Escape') {
+ // If we have a escapeButtonCallback, execute it also when pressing escape.
+ if (escapeButtonCallback) {
+ escapeButtonCallback();
+ }
Drupal.dialogFunctions.removeDialog(dialog);
}
});
@@ -90,8 +122,7 @@
document.body.style.paddingRight = `${
window.innerWidth - document.documentElement.clientWidth
}px`;
- }
- else {
+ } else {
document.body.style.removeProperty('padding-right');
}
},
@@ -105,6 +136,6 @@
dialog.remove();
Drupal.dialogFunctions.toggleNoScroll(false);
Drupal.dialogFunctions.setBodyPaddingRight(false);
- }
- }
+ },
+ };
})(Drupal);
diff --git a/public/modules/custom/grants_handler/js/webform.form.unsaved.js b/public/modules/custom/grants_handler/js/webform.form.unsaved.js
index 99e66c6b8d..4f96d10cd1 100644
--- a/public/modules/custom/grants_handler/js/webform.form.unsaved.js
+++ b/public/modules/custom/grants_handler/js/webform.form.unsaved.js
@@ -108,7 +108,7 @@
});
});
}
- }
+ },
};
$('a').on('click', function (event) {
@@ -116,18 +116,18 @@
if (unsaved && !containingElement.contains(event.target) && !event.target.getAttribute('href').startsWith('#')) {
event.preventDefault();
- return Drupal.dialogFunctions.createDialog(
- Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }),
- Drupal.t('Leave the application', {}, { context: 'grants_handler' }),
- Drupal.t('Back to application', {}, { context: 'grants_handler' }),
- Drupal.t('Close', {}, { context: 'grants_handler' }),
- () => {
+ return Drupal.dialogFunctions.createDialog({
+ dialogContent: Drupal.t('You have unsaved changes. Are you sure you want to leave?', {}, { context: 'grants_handler' }),
+ actionButtonText: Drupal.t('Leave the application', {}, { context: 'grants_handler' }),
+ backButtonText: Drupal.t('Back to application', {}, { context: 'grants_handler' }),
+ closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }),
+ actionButtonCallback: () => {
unsaved = false;
const dialog = document.getElementById('helfi-dialog__container');
Drupal.dialogFunctions.removeDialog(dialog);
window.top.location.href = event.currentTarget.href;
- }
- );
+ },
+ });
}
});
@@ -147,18 +147,18 @@
if (unsaved && (e.which === 116 || (e.which === 82 && (e.ctrlKey || e.metaKey)))) {
e.preventDefault(); // Prevent F5 and Ctrl+R / Cmd+R refresh
- return Drupal.dialogFunctions.createDialog(
- Drupal.t('You have unsaved changes. Are you sure you want to refresh?', {}, { context: 'grants_handler' }),
- Drupal.t('Refresh the page', {}, { context: 'grants_handler' }),
- Drupal.t('Back to application', {}, { context: 'grants_handler' }),
- Drupal.t('Close', {}, { context: 'grants_handler' }),
- () => {
+ return Drupal.dialogFunctions.createDialog({
+ dialogContent: Drupal.t('You have unsaved changes. Are you sure you want to refresh?', {}, { context: 'grants_handler' }),
+ actionButtonText: Drupal.t('Refresh the page', {}, { context: 'grants_handler' }),
+ backButtonText: Drupal.t('Back to application', {}, { context: 'grants_handler' }),
+ closeButtonText: Drupal.t('Close', {}, { context: 'grants_handler' }),
+ actionButtonCallback: () => {
unsaved = false;
const dialog = document.getElementById('helfi-dialog__container');
Drupal.dialogFunctions.removeDialog(dialog);
location.reload();
- }
- );
+ },
+ });
}
});
diff --git a/public/modules/custom/grants_handler/phpunit.xml b/public/modules/custom/grants_handler/phpunit.xml
index fd7672ac52..ec1307b36e 100644
--- a/public/modules/custom/grants_handler/phpunit.xml
+++ b/public/modules/custom/grants_handler/phpunit.xml
@@ -1,44 +1,47 @@
-
-
-
-
-
-
-
-
-
-
- ./tests/src/Kernel
-
-
-
-
-
-
-
-
- ./src
- ./*.module
-
-
-
-
-
-
+ xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
+ bootstrap="../../../core/tests/bootstrap.php"
+ colors="true"
+ cacheResultFile=".phpunit.cache/test-results"
+ executionOrder="depends,defects"
+ forceCoversAnnotation="true"
+ beStrictAboutTestsThatDoNotTestAnything="true"
+ beStrictAboutOutputDuringTests="true"
+ beStrictAboutChangesToGlobalState="true"
+ beStrictAboutCoversAnnotation="true"
+ printerClass="\Drupal\Tests\Listeners\HtmlOutputPrinter"
+ failOnRisky="true"
+ failOnWarning="true"
+ verbose="true">
+
+
+
+
+
+
+
+
+
+
+ ./tests/src/Kernel
+
+
+ ./tests/src/Unit
+
+
+
+
+
+
+
+
+ ./src
+ ./*.module
+
+
+
+
+
+
diff --git a/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php b/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php
index 3919b5d13e..c8181a755e 100644
--- a/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php
+++ b/public/modules/custom/grants_handler/src/ApplicationAccessHandler.php
@@ -6,7 +6,6 @@
use Drupal\grants_mandate\CompanySelectException;
use Drupal\grants_profile\GrantsProfileService;
-use Drupal\helfi_atv\AtvDocumentNotFoundException;
use Drupal\webform\Entity\WebformSubmission;
/**
@@ -19,6 +18,7 @@
*/
public function __construct(
private GrantsProfileService $grantsProfileService,
+ private ApplicationGetterService $applicationGetterService,
) {}
/**
@@ -30,7 +30,8 @@ public function __construct(
* @return bool
* Access status
*
- * @throws \GuzzleHttp\Exception\GuzzleException
+ * @throws \Drupal\grants_profile\GrantsProfileException
+ * @throws \Drupal\grants_mandate\CompanySelectException
*/
public function singleSubmissionAccess(WebformSubmission $webform_submission): bool {
@@ -51,12 +52,12 @@ public function singleSubmissionAccess(WebformSubmission $webform_submission): b
return FALSE;
}
- try {
- $atvDoc = ApplicationHelpers::atvDocumentFromApplicationNumber($webformData['application_number']);
- }
- catch (AtvDocumentNotFoundException $e) {
+ $atvDoc = $this->applicationGetterService->getAtvDocument($webformData['application_number']);
+
+ if (!$atvDoc) {
return FALSE;
}
+
$atvMetadata = $atvDoc->getMetadata();
// Mismatch between profile and application applicant type.
if ($companyType !== $webformData['hakijan_tiedot']['applicantType']) {
diff --git a/public/modules/custom/grants_handler/src/ApplicationGetterService.php b/public/modules/custom/grants_handler/src/ApplicationGetterService.php
index c7b397538e..0372e01b86 100644
--- a/public/modules/custom/grants_handler/src/ApplicationGetterService.php
+++ b/public/modules/custom/grants_handler/src/ApplicationGetterService.php
@@ -6,19 +6,22 @@
use Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException;
use Drupal\Component\Plugin\Exception\PluginNotFoundException;
-use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\grants_mandate\CompanySelectException;
-use Drupal\grants_metadata\AtvSchema;
use Drupal\grants_metadata\DocumentContentMapper;
use Drupal\grants_profile\GrantsProfileService;
use Drupal\helfi_atv\AtvDocument;
use Drupal\helfi_atv\AtvDocumentNotFoundException;
+use Drupal\helfi_atv\AtvFailedToConnectException;
use Drupal\helfi_atv\AtvService;
use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData;
+use Drupal\helfi_helsinki_profiili\TokenExpiredException;
+use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
+use Drupal\webform\WebformException;
+use GuzzleHttp\Exception\GuzzleException;
/**
* Class to get things related to applications.
@@ -32,13 +35,6 @@ final class ApplicationGetterService {
*/
protected GrantsProfileService $grantsProfileService;
- /**
- * Atv document holding this application.
- *
- * @var \Drupal\helfi_atv\AtvDocument
- */
- protected AtvDocument $atvDocument;
-
/**
* Log errors.
*
@@ -47,11 +43,11 @@ final class ApplicationGetterService {
protected LoggerChannelInterface $logger;
/**
- * Webform submission storage.
+ * Loaded submissions in array to prevent multiple loads.
*
- * @var \Drupal\Core\Entity\EntityStorageInterface
+ * @var array
*/
- protected EntityStorageInterface $storage;
+ protected array $submissions = [];
/**
* Constructs an ApplicationGetterService object.
@@ -65,11 +61,6 @@ public function __construct(
private readonly EntityTypeManagerInterface $entityTypeManager,
) {
$this->logger = $loggerChannelFactory->get('application_getter_service');
- try {
- $this->storage = $entityTypeManager->getStorage('webform_submission');
- }
- catch (InvalidPluginDefinitionException | PluginNotFoundException $e) {
- }
}
/**
@@ -90,26 +81,26 @@ public function setGrantsProfileService(GrantsProfileService $grantsProfileServi
* @param bool $refetch
* Force atv document fetch.
*
- * @return \Drupal\helfi_atv\AtvDocument
+ * @return \Drupal\helfi_atv\AtvDocument|null
* FEtched document.
- *
- * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
- * @throws \Drupal\helfi_atv\AtvFailedToConnectException
- * @throws \GuzzleHttp\Exception\GuzzleException
*/
- public function getAtvDocument(string $transactionId, bool $refetch = FALSE): AtvDocument {
+ public function getAtvDocument(string $transactionId, bool $refetch = FALSE): ?AtvDocument {
+ $sParams = [
+ 'transaction_id' => $transactionId,
+ 'lookfor' => 'appenv:' . Helpers::getAppEnv(),
+ ];
- if (!isset($this->atvDocument) || $refetch === TRUE) {
- $sParams = [
- 'transaction_id' => $transactionId,
- 'lookfor' => 'appenv:' . Helpers::getAppEnv(),
- ];
-
- $res = $this->helfiAtvAtvService->searchDocuments($sParams);
- $this->atvDocument = reset($res);
+ try {
+ $result = $this->helfiAtvAtvService->searchDocuments($sParams, $refetch);
}
-
- return $this->atvDocument;
+ catch (AtvDocumentNotFoundException | AtvFailedToConnectException | TokenExpiredException | GuzzleException $e) {
+ $this->logger->error(
+ 'Failed to get document from ATV. Error: @error',
+ ['@error' => $e->getMessage()]
+ );
+ return NULL;
+ }
+ return reset($result);
}
/**
@@ -132,7 +123,7 @@ public function getAtvDocument(string $transactionId, bool $refetch = FALSE): At
*
* @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
* @throws \Drupal\helfi_atv\AtvFailedToConnectException
- * @throws \GuzzleHttp\Exception\GuzzleException
+ * @throws \GuzzleHttp\Exception\GuzzleException|\Drupal\helfi_helsinki_profiili\TokenExpiredException
*/
public function getCompanyApplications(
array $selectedCompany,
@@ -141,7 +132,6 @@ public function getCompanyApplications(
bool $sortByStatus = FALSE,
string $themeHook = '',
): array {
-
$userData = $this->helfiHelsinkiProfiiliUserdata->getUserData();
$applications = [];
@@ -177,72 +167,37 @@ public function getCompanyApplications(
$applicationDocuments = $this->helfiAtvAtvService->searchDocuments($searchParams);
- /**
+ /*
* Create rows for table.
- *
- * @var \Drupal\helfi_atv\AtvDocument $document
*/
foreach ($applicationDocuments as $document) {
- // Make sure the type is acceptable one.
- $docArray = $document->toArray();
- $id = AtvSchema::extractDataForWebForm(
- $docArray['content'], ['applicationNumber']
- );
- if (empty($id['applicationNumber'])) {
- continue;
- }
+ $applicationNumber = $document->getTransactionId();
if (array_key_exists($document->getType(), Helpers::getApplicationTypes())) {
try {
-
- // Convert the data.
- $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType());
- $submissionData = DocumentContentMapper::documentContentToTypedData(
- $document->getContent(),
- $dataDefinition,
- $document->getMetadata()
- );
-
- $metaData = $document->getMetadata();
-
- // Load the webform submission ID.
- $applicationNumber = $submissionData['application_number'];
- $serial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber);
-
- $webformUuidExists = isset($metaData['form_uuid']) && !empty($metaData['form_uuid']);
- $webform = $webformUuidExists
- ? ApplicationHelpers::getWebformByUuid($metaData['form_uuid'], $applicationNumber)
- : ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber);
-
- if (!$webform || !$serial) {
- continue;
- }
-
- $submissionId = ApplicationHelpers::getSubmissionIdWithSerialAndWebformId($serial, $webform->id(), $document);
+ $submission = $this->submissionObjectFromApplicationNumber($applicationNumber, $document, FALSE, TRUE);
}
catch (\Throwable $e) {
$this->logger->error(
'Failed to get submission object from application number. Submission skipped in application listing. ID: @id Error: @error',
[
'@error' => $e->getMessage(),
- '@id' => $document->getTransactionId(),
+ '@id' => $document->getTransactionId(),
]
);
continue;
}
- if (!$submissionData || !$submissionId) {
- continue;
- }
+ $submissionData = $submission->getData();
$submissionData['messages'] = $this->grantsHandlerMessageService->parseMessages($submissionData);
$submission = [
'#theme' => $themeHook,
'#submission' => $submissionData,
'#document' => $document,
- '#webform' => $webform,
- '#submission_id' => $submissionId,
+ '#webform' => $submission->getWebform(),
+ '#submission_id' => $submission->id(),
];
$ts = strtotime($submissionData['form_timestamp_created'] ?? '');
@@ -303,15 +258,8 @@ public function getCompanyApplications(
* @return \Drupal\webform\Entity\WebformSubmission|null
* Webform submission.
*
- * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
- * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
* @throws \Drupal\Core\Entity\EntityStorageException
- * @throws \Drupal\Core\TempStore\TempStoreException
* @throws \Drupal\grants_mandate\CompanySelectException
- * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
- * @throws \Drupal\helfi_atv\AtvFailedToConnectException
- * @throws \GuzzleHttp\Exception\GuzzleException
- * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException
*/
public function submissionObjectFromApplicationNumber(
string $applicationNumber,
@@ -319,24 +267,10 @@ public function submissionObjectFromApplicationNumber(
bool $refetch = FALSE,
bool $skipAccessCheck = FALSE,
): ?WebformSubmission {
-
- $submissionSerial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber);
- $webform = ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber, TRUE);
-
- if (!$webform) {
- return NULL;
+ if (isset($this->submissions[$applicationNumber])) {
+ return $this->submissions[$applicationNumber];
}
- $webformIds = array_map(function ($element) {
- return $element->id();
- }, $webform);
-
- $result = $this->storage
- ->loadByProperties([
- 'serial' => $submissionSerial,
- 'webform_id' => $webformIds,
- ]);
-
$selectedCompany = $this->grantsProfileService->getSelectedRoleData();
// If no company selected, no mandates no access.
@@ -344,20 +278,30 @@ public function submissionObjectFromApplicationNumber(
throw new CompanySelectException('User not authorised');
}
+ // We need the ATV document to get the form uuid.
if ($document == NULL) {
- $sParams = [
- 'transaction_id' => $applicationNumber,
- 'lookfor' => 'appenv:' . Helpers::getAppEnv(),
- ];
+ $document = $this->getAtvDocument($applicationNumber, $refetch);
+ }
- $document = $this->helfiAtvAtvService->searchDocuments(
- $sParams,
- $refetch
- );
- if (empty($document)) {
- throw new AtvDocumentNotFoundException('Document not found');
- }
- $document = reset($document);
+ // Get WebFrom from application number.
+ $webform = $this->getWebformFromApplicationNumber($applicationNumber);
+
+ // Should we throw an error here?
+ if (!$webform) {
+ throw new WebformException('Webform not found');
+ }
+ // Get serial from application number.
+ $submissionSerial = ApplicationHelpers::getSerialFromApplicationNumber($applicationNumber);
+
+ try {
+ $result = $this->entityTypeManager->getStorage('webform_submission')
+ ->loadByProperties([
+ 'serial' => $submissionSerial,
+ 'webform_id' => $webform->id(),
+ ]);
+ }
+ catch (InvalidPluginDefinitionException | PluginNotFoundException $e) {
+ throw new WebformException('Failed to load submission object with ATV data');
}
$submissionObject = NULL;
@@ -365,48 +309,100 @@ public function submissionObjectFromApplicationNumber(
// If there's no local submission with given serial
// we can actually create that object on the fly and use that for editing.
if (empty($result)) {
- $webform = ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber);
- if ($webform) {
- /** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */
- $submissionObject = WebformSubmission::create(['webform_id' => $webform->id()]);
- $submissionObject->set('serial', $submissionSerial);
-
- // Lets mark that we don't want to generate new application
- // number, as we just assigned the serial from ATV application id.
- // check GrantsHandler@preSave.
- WebformSubmissionNotesHelper::setValue(
- $submissionObject,
- 'skip_available_number_check',
- TRUE
- );
- if ($document->getStatus() == 'DRAFT') {
- $submissionObject->set('in_draft', TRUE);
- }
- $submissionObject->save();
+ /** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */
+ $submissionObject = WebformSubmission::create(['webform_id' => $webform->id()]);
+ $submissionObject->set('serial', $submissionSerial);
+
+ // Lets mark that we don't want to generate new application
+ // number, as we just assigned the serial from ATV application id.
+ // check GrantsHandler@preSave.
+ WebformSubmissionNotesHelper::setValue(
+ $submissionObject,
+ 'skip_available_number_check',
+ TRUE
+ );
+ if ($document->getStatus() == 'DRAFT') {
+ $submissionObject->set('in_draft', TRUE);
}
+ $submissionObject->save();
}
else {
/** @var \Drupal\webform\Entity\WebformSubmission $submissionObject */
$submissionObject = reset($result);
}
- if ($submissionObject) {
- $dataDefinition = ApplicationHelpers::getDataDefinition($document->getType());
+ if (!$submissionObject) {
+ throw new WebformException('Failed to load submission object with ATV data');
+ }
- $sData = DocumentContentMapper::documentContentToTypedData(
- $document->getContent(),
- $dataDefinition,
- $document->getMetadata()
- );
+ // Load definition.
+ $dataDefinition = $this->getDataDefinition($document->getType());
- $sData['messages'] = $this->grantsHandlerMessageService->parseMessages($sData);
+ // Build data.
+ $sData = DocumentContentMapper::documentContentToTypedData(
+ $document->getContent(),
+ $dataDefinition,
+ $document->getMetadata()
+ );
- // Set submission data from parsed mapper.
- $submissionObject->setData($sData);
+ // Parse messages separately.
+ $sData['messages'] = $this->grantsHandlerMessageService->parseMessages($sData);
- return $submissionObject;
+ // Set submission data from parsed mapper.
+ $submissionObject->setData($sData);
+
+ // Set caching, as we don't want to load this again.
+ $this->submissions[$applicationNumber] = $submissionObject;
+
+ return $submissionObject;
+ }
+
+ /**
+ * Get data definition class from application type.
+ *
+ * @param string $type
+ * Type of the application.
+ */
+ public function getDataDefinition(string $type) {
+ $defClass = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionClass'];
+ $defId = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionId'];
+ return $defClass::create($defId);
+ }
+
+ /**
+ * Extract webform id from application number string.
+ *
+ * @param string $applicationNumber
+ * Application number.
+ *
+ * @return \Drupal\webform\Entity\Webform
+ * Webform object.
+ */
+ public function getWebformFromApplicationNumber(string $applicationNumber): Webform {
+ // We need the ATV document to get the form uuid.
+ $document = $this->getAtvDocument($applicationNumber);
+ $uuid = $document->getMetadata()['form_uuid'];
+
+ try {
+ // Try to load webform via UUID and return it.
+ $wids = $this->entityTypeManager->getStorage('webform')
+ ->getQuery()
+ ->condition('uuid', $uuid)
+ ->execute();
+ return Webform::load(reset($wids));
+ }
+ catch (InvalidPluginDefinitionException | PluginNotFoundException $e) {
+ // Log failure.
+ $this->logger->error(
+ 'Failed to load webform with uuid: @uuid. Error: @error',
+ [
+ '@uuid' => $uuid,
+ '@error' => $e->getMessage(),
+ ]
+ );
}
- return NULL;
+ // And return webform loaded the old way.
+ return ApplicationHelpers::getWebformFromApplicationNumber($applicationNumber);
}
}
diff --git a/public/modules/custom/grants_handler/src/ApplicationHelpers.php b/public/modules/custom/grants_handler/src/ApplicationHelpers.php
index e57a8d5793..5e67ec59fe 100644
--- a/public/modules/custom/grants_handler/src/ApplicationHelpers.php
+++ b/public/modules/custom/grants_handler/src/ApplicationHelpers.php
@@ -2,15 +2,8 @@
namespace Drupal\grants_handler;
-use Drupal\Component\Datetime\Time;
-use Drupal\Core\Database\Database;
-use Drupal\grants_mandate\CompanySelectException;
-use Drupal\helfi_atv\AtvDocument;
-use Drupal\helfi_atv\AtvDocumentNotFoundException;
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
-use Drupal\webform\WebformSubmissionInterface;
-use Ramsey\Uuid\Uuid;
/**
* Handle all things related to applications & submission objects themselves.
@@ -42,18 +35,18 @@ public static function createApplicationNumber(WebformSubmission &$submission, $
$appParam = Helpers::getAppEnv();
$serial = $submission->serial();
- $applicationType = $submission->getWebform()
- ->getThirdPartySetting('grants_metadata', 'applicationType');
- $applicationTypeId = $submission->getWebform()
- ->getThirdPartySetting('grants_metadata', 'applicationTypeID');
+ $webform = $submission->getWebform();
+ $third_party_settings = $webform->getThirdPartySettings('grants_metadata');
+
+ $applicationType = $third_party_settings['applicationType'] ?? NULL;
+ $applicationTypeId = $third_party_settings['applicationTypeID'] ?? NULL;
if ($useOldFormat) {
return self::getApplicationNumberInEnvFormatOldFormat($appParam, $applicationType, $serial);
}
return self::getApplicationNumberInEnvFormat($appParam, $applicationTypeId, $serial);
-
}
/**
@@ -72,12 +65,14 @@ public static function createApplicationNumber(WebformSubmission &$submission, $
* @throws \Drupal\helfi_atv\AtvUnexpectedResponseException
*/
public static function getAvailableApplicationNumber(WebformSubmission &$submission): string {
-
$appParam = Helpers::getAppEnv();
$serial = $submission->serial();
$webform_id = $submission->getWebform()->id();
- $applicationTypeId = $submission->getWebform()
- ->getThirdPartySetting('grants_metadata', 'applicationTypeID');
+
+ $thirdPartySettings = $submission->getWebform()
+ ->getThirdPartySettings('grants_metadata');
+
+ $applicationTypeId = $thirdPartySettings['applicationTypeID'] ?? NULL;
$lastSerialKey = $applicationTypeId . '_' . $appParam;
$kvService = \Drupal::service('keyvalue.database');
@@ -129,7 +124,7 @@ public static function getAvailableApplicationNumber(WebformSubmission &$submiss
/**
* Format application number based by the enviroment.
*/
- private static function getApplicationNumberInEnvFormat($appParam, $typeId, $serial): string {
+ protected static function getApplicationNumberInEnvFormat($appParam, $typeId, $serial): string {
$applicationNumber = $appParam . '-' .
str_pad($typeId, 3, '0', STR_PAD_LEFT) . '-' .
str_pad($serial, 7, '0', STR_PAD_LEFT);
@@ -145,7 +140,7 @@ private static function getApplicationNumberInEnvFormat($appParam, $typeId, $ser
/**
* Format application number based by the enviroment in old format.
*/
- private static function getApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial): string {
+ protected static function getApplicationNumberInEnvFormatOldFormat($appParam, $typeId, $serial): string {
$applicationNumber = 'GRANTS-' . $appParam . '-' . $typeId . '-' . sprintf('%08d', $serial);
if ($appParam == 'PROD') {
@@ -194,7 +189,9 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool
return $map[$uuid];
}
- $applicationType = $webform->getThirdPartySetting('grants_metadata', 'applicationType');
+ $thirdPartySettingsWebform = $webform->getThirdPartySettings('grants_metadata');
+
+ $applicationType = $thirdPartySettingsWebform['applicationType'] ?? NULL;
$latestApplicationForm = self::getLatestApplicationForm($applicationType);
@@ -203,11 +200,11 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool
return FALSE;
}
- $parent = $latestApplicationForm->getThirdPartySetting('grants_metadata', 'parent');
- $hasBreakingChanges = $latestApplicationForm->getThirdPartySetting('grants_metadata', 'avus2BreakingChange');
+ $thirdPartySettingsLatest = $webform->getThirdPartySettings('grants_metadata');
+ $parent = $thirdPartySettingsLatest['parent'] ?? NULL;
+ $hasBreakingChanges = $thirdPartySettingsLatest['avus2BreakingChange'] ?? NULL;
while (!empty($parent)) {
-
$map[$parent] = $hasBreakingChanges;
$loaded_webform = \Drupal::entityTypeManager()
@@ -217,17 +214,18 @@ public static function hasBreakingChangesInNewerVersion(Webform $webform): bool
]);
$wf = reset($loaded_webform);
- $parent = $wf->getThirdPartySetting('grants_metadata', 'parent');
+
+ $thirdPartySettingsLatest = $wf->getThirdPartySettings('grants_metadata');
+ $parent = $thirdPartySettingsLatest['parent'] ?? NULL;
// No need to check the flag,
// if we already have a newer version with breaking changes.
if (!$hasBreakingChanges) {
- $hasBreakingChanges = $wf->getThirdPartySetting('grants_metadata', 'avus2BreakingChange');
+ $hasBreakingChanges = $thirdPartySettingsLatest['avus2BreakingChange'] ?? NULL;
}
}
return $map[$uuid] ?? FALSE;
-
}
/**
@@ -264,7 +262,6 @@ public static function getWebformFromApplicationNumber(string $applicationNumber
// Look for for application type and return if found.
$webform = array_filter($webforms, function ($wf) use ($webformTypeId, $applicationTypes, $fieldToCheck) {
-
$thirdPartySettings = $wf->getThirdPartySettings('grants_metadata');
$thisApplicationTypeConfig = array_filter($applicationTypes, function ($appType) use ($thirdPartySettings) {
if (isset($thirdPartySettings["applicationTypeID"]) &&
@@ -292,296 +289,6 @@ public static function getWebformFromApplicationNumber(string $applicationNumber
return reset($webform);
}
- /**
- * Get Webform object by UUID.
- *
- * @param string $uuid
- * Uuid of the webform.
- * @param string $application_number
- * The application number.
- *
- * @return \Drupal\webform\Entity\Webform
- * Webform object.
- */
- public static function getWebformByUuid(string $uuid, string $application_number): Webform|bool|array {
-
- $wids = \Drupal::entityQuery('webform')
- ->condition('uuid', $uuid)
- ->execute();
-
- // Fallback to original method, if webform for some reason is not found.
- if (empty($wids)) {
- return self::getWebformFromApplicationNumber($application_number);
- }
-
- return Webform::load(reset($wids));
- }
-
- /**
- * Extract serial numbor from application number string.
- *
- * @param string $applicationNumber
- * Application number.
- * @param bool $refetch
- * Force refetch from ATV.
- *
- * @return array|\Drupal\helfi_atv\AtvDocument
- * ATV Document
- *
- * @throws \Drupal\grants_mandate\CompanySelectException
- * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
- */
- public static function atvDocumentFromApplicationNumber(
- string $applicationNumber,
- bool $refetch = FALSE,
- ): array|AtvDocument {
-
- /** @var \Drupal\helfi_atv\AtvService $atvService */
- $atvService = \Drupal::service('helfi_atv.atv_service');
-
- $grantsProfileService = \Drupal::service('grants_profile.service');
- $selectedCompany = $grantsProfileService->getSelectedRoleData();
-
- // If no company selected, no mandates no access.
- if ($selectedCompany == NULL) {
- throw new CompanySelectException('User not authorised');
- }
- try {
- $sParams = [
- 'transaction_id' => $applicationNumber,
- 'lookfor' => 'appenv:' . Helpers::getAppEnv(),
- ];
-
- /** @var \Drupal\helfi_atv\AtvDocument[] $document */
- $document = $atvService->searchDocuments(
- $sParams,
- $refetch
- );
- }
- catch (\Throwable $e) {
- }
-
- if (empty($document)) {
- throw new AtvDocumentNotFoundException('Document not found');
- }
- $document = reset($document);
- return $document;
- }
-
- /**
- * Set up sender details from helsinkiprofiili data.
- *
- * @return array
- * Sender details.
- *
- * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException
- * @throws \Drupal\grants_handler\ApplicationException
- */
- public static function parseSenderDetails(): array {
-
- $helfiHelsinkiProfiiliUserdata = \Drupal::service('helfi_helsinki_profiili.userdata');
-
- // Set sender information after save so no accidental saving of data.
- $userProfileData = $helfiHelsinkiProfiiliUserdata->getUserProfileData();
- $userData = $helfiHelsinkiProfiiliUserdata->getUserData();
-
- $senderDetails = [];
-
- if (isset($userProfileData["myProfile"])) {
- $data = $userProfileData["myProfile"];
- }
- else {
- $data = $userProfileData;
- }
-
- // If no userprofile data, we need to hardcode these values.
- if ($userProfileData == NULL || $userData == NULL) {
- throw new ApplicationException('No profile data found for user.');
- }
- else {
- $senderDetails['sender_firstname'] = $data["verifiedPersonalInformation"]["firstName"];
- $senderDetails['sender_lastname'] = $data["verifiedPersonalInformation"]["lastName"];
- $senderDetails['sender_person_id'] = $data["verifiedPersonalInformation"]["nationalIdentificationNumber"];
- $senderDetails['sender_user_id'] = $userData["sub"];
- $senderDetails['sender_email'] = $data["primaryEmail"]["email"];
- }
-
- return $senderDetails;
- }
-
- /**
- * Get data definition class from application type.
- *
- * @param string $type
- * Type of the application.
- */
- public static function getDataDefinition(string $type) {
- $defClass = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionClass'];
- $defId = Helpers::getApplicationTypes()[$type]['dataDefinition']['definitionId'];
- return $defClass::create($defId);
- }
-
- /**
- * The getSubmissionIdWithSerialAndWebformId method.
- *
- * This method queries the database in an attempt to
- * find a webform submission ID with the help of a
- * submission serial and a webform ID. If one is not
- * found, then we create a submission.
- *
- * @param string $serial
- * A webform submission serial.
- * @param string $webformId
- * A webform ID.
- * @param \Drupal\helfi_atv\AtvDocument $document
- * An ATV document.
- *
- * @return string
- * A webform submission ID.
- *
- * @throws \Drupal\Core\Entity\EntityStorageException
- * Exception on EntityStorageException.
- */
- public static function getSubmissionIdWithSerialAndWebformId(
- string $serial,
- string $webformId,
- AtvDocument $document,
- ): string {
- $database = Database::getConnection();
- $query = $database->select('webform_submission', 'ws')
- ->fields('ws', ['sid'])
- ->condition('ws.serial', $serial)
- ->condition('ws.webform_id', $webformId);
- $result = $query->execute();
- $sid = $result->fetchField();
-
- // If a submission ID is found, return it.
- if ($sid) {
- return $sid;
- }
-
- // If we can't find a submission, then create one.
- $webformSubmission = self::createWebformSubmissionWithSerialAndWebformId($serial, $document);
- return $webformSubmission->id();
- }
-
- /**
- * The createWebformSubmissionWithSerialAndWebformId method.
- *
- * This method creates a webform submission and sets the
- * webform ID, serial and draft state if needed.
- *
- * @param string $serial
- * A webform submission serial.
- * @param \Drupal\helfi_atv\AtvDocument $document
- * An ATV document.
- *
- * @return \Drupal\webform\Entity\WebformSubmission
- * A webform submission.
- *
- * @throws \Drupal\Core\Entity\EntityStorageException
- * Exception on EntityStorageException.
- */
- protected static function createWebformSubmissionWithSerialAndWebformId(
- string $serial,
- AtvDocument $document,
- ): WebformSubmission {
-
- $metaData = $document->getMetadata();
- $webformUuidExists = isset($metaData['form_uuid']) && !empty($metaData['form_uuid']);
-
- $webform = $webformUuidExists
- ? self::getWebformByUuid($metaData['form_uuid'], $document->getTransactionId())
- : self::getWebformFromApplicationNumber($document->getTransactionId());
-
- $webformId = $webform->id();
-
- $submissionObject = WebformSubmission::create(['webform_id' => $webformId]);
- $submissionObject->set('serial', $serial);
-
- // Mark that we don't want to generate new application
- // number, as we just assigned the serial from ATV application id.
- // Check GrantsHandler@preSave.
- WebformSubmissionNotesHelper::setValue(
- $submissionObject,
- 'skip_available_number_check',
- TRUE
- );
- if ($document->getStatus() == 'DRAFT') {
- $submissionObject->set('in_draft', TRUE);
- }
- $submissionObject->save();
- return $submissionObject;
- }
-
- /**
- * Logs the current submission page.
- *
- * @param \Drupal\webform\WebformSubmissionInterface|null $webform_submission
- * A webform submission entity.
- * @param string $applicationNumber
- * The page to log.
- * @param array $userData
- * User data.
- * @param string $saveId
- * Submission save id.
- *
- * @return string
- * The save ID.
- *
- * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
- * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
- * @throws \Drupal\Core\Entity\EntityStorageException
- * @throws \Drupal\Core\TempStore\TempStoreException
- * @throws \Drupal\grants_mandate\CompanySelectException
- * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
- * @throws \Drupal\helfi_atv\AtvFailedToConnectException
- * @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException
- * @throws \GuzzleHttp\Exception\GuzzleException
- * @throws \Exception
- */
- public static function logSubmissionSaveid(
- ?WebformSubmissionInterface $webform_submission,
- string $applicationNumber,
- array $userData,
- string $saveId = '',
- ): string {
- if (!$userData) {
- throw new \Exception('User data is required');
- }
-
- if (empty($saveId)) {
- $saveId = Uuid::uuid4()->toString();
- }
-
- if ($webform_submission == NULL) {
- /** @var \Drupal\grants_handler\ApplicationGetterService $applicationGetterService */
- $applicationGetterService = \Drupal::service('grants_handler.application_getter_service');
- $webform_submission = $applicationGetterService->submissionObjectFromApplicationNumber($applicationNumber);
- }
-
- $currentUser = \Drupal::currentUser();
- $database = \Drupal::database();
-
- $fields = [
- 'webform_id' => ($webform_submission) ? $webform_submission->getWebform()
- ->id() : '',
- 'sid' => ($webform_submission) ? $webform_submission->id() : 0,
- 'handler_id' => self::HANDLER_ID,
- 'application_number' => $applicationNumber,
- 'saveid' => $saveId,
- 'uid' => $currentUser->id(),
- 'user_uuid' => $userData['sub'] ?? '',
- 'timestamp' => (string) (new Time)->getRequestTime(),
- ];
-
- $query = $database->insert(self::TABLE, $fields);
- $query->fields($fields)->execute();
-
- return $saveId;
-
- }
-
/**
* Tries to find latest webform for given application ID.
*
@@ -594,8 +301,7 @@ public static function logSubmissionSaveid(
* @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
* @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
- public static function getLatestApplicationForm($id): Webform|NULL {
-
+ public static function getLatestApplicationForm($id): Webform|null {
$webforms = \Drupal::entityTypeManager()
->getStorage('webform')
->loadByProperties([
@@ -615,16 +321,34 @@ public static function getLatestApplicationForm($id): Webform|NULL {
/**
* Get all Webform objects for given application id.
*
- * @param string $id
+ * @param string $applicationTypeId
* Application ID.
+ * @param null $formId
+ * Webform ID.
+ *
+ * @return array
+ * Active webforms.
+ *
+ * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+ * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
- public static function getActiveApplicationWebforms(string $id): array {
+ public static function getActiveApplicationWebforms(string $applicationTypeId, $formId = NULL): array {
+ $properties = [
+ 'third_party_settings.grants_metadata.applicationType' => $applicationTypeId,
+ 'archive' => FALSE,
+ ];
+
+ // If we've given form id, we want to load only that form.
+ if ($formId) {
+ // Effectevely this limits results to single form.
+ // But since we now can have multiple forms with same application type,
+ // we need to check that the form id is correct.
+ $properties['id'] = $formId;
+ }
+
$webforms = \Drupal::entityTypeManager()
->getStorage('webform')
- ->loadByProperties([
- 'third_party_settings.grants_metadata.applicationType' => $id,
- 'archive' => FALSE,
- ]);
+ ->loadByProperties($properties);
$result = [
'released' => [],
@@ -650,13 +374,62 @@ public static function getActiveApplicationWebforms(string $id): array {
*
* @param string $id
* Application ID.
+ * @param string|null $formId
+ * Webform ID. Or null if all is wanted.
*
* @return bool
* Can the webform be duplicated.
+ *
+ * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+ * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
*/
- public static function isApplicationWebformDuplicatable(string $id) {
- $applicationForms = self::getActiveApplicationWebforms($id);
+ public static function isApplicationWebformDuplicatable(string $id, string $formId = NULL): bool {
+ $applicationForms = self::getActiveApplicationWebforms($id, $formId);
return count($applicationForms['released']) <= 1 && count($applicationForms['development']) === 0;
}
+ /**
+ * Update field options in a form array.
+ *
+ * This method is used to update the options of a field in a form array.
+ *
+ * @param array $form
+ * The form array.
+ * @param array $newOptions
+ * The new options to set.
+ * @param array $fieldStructure
+ * The structure of the field.
+ */
+ public static function updateFieldOptions(array &$form, array $newOptions, array $fieldStructure): void {
+ $currentField = &$form;
+
+ // Traverse the form array based on the field structure.
+ foreach ($fieldStructure as $fieldName) {
+ if (isset($currentField[$fieldName])) {
+ $currentField = &$currentField[$fieldName];
+ }
+ elseif (isset($currentField['#element'][$fieldName])) {
+ $currentField = &$currentField['#element'][$fieldName];
+ }
+ else {
+ // If we don't have current field array, we can't update the options.
+ if (!is_iterable($currentField)) {
+ return;
+ }
+ // If the field is not found, continue searching recursively.
+ foreach ($currentField as &$subField) {
+ if (is_array($subField)) {
+ self::updateFieldOptions($subField, $newOptions, $fieldStructure);
+ }
+ }
+ return;
+ }
+ }
+
+ // Update the #options if the field with '#options' is found.
+ if (isset($currentField['#options'])) {
+ $currentField['#options'] = $newOptions;
+ }
+ }
+
}
diff --git a/public/modules/custom/grants_handler/src/ApplicationStatusService.php b/public/modules/custom/grants_handler/src/ApplicationStatusService.php
index 7d078c6a33..be4a82503c 100644
--- a/public/modules/custom/grants_handler/src/ApplicationStatusService.php
+++ b/public/modules/custom/grants_handler/src/ApplicationStatusService.php
@@ -160,6 +160,10 @@ public function isApplicationOpen(Webform $webform): bool {
$thirdPartySettings = $webform->getThirdPartySettings('grants_metadata');
$applicationContinuous = $thirdPartySettings["applicationContinuous"] == 1;
+ if (!$thirdPartySettings["applicationOpen"] && !$thirdPartySettings["applicationClose"]) {
+ return $applicationContinuous;
+ }
+
try {
$now = new \DateTime();
$from = new \DateTime($thirdPartySettings["applicationOpen"]);
diff --git a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php
index 38d88ae063..e6fec073de 100644
--- a/public/modules/custom/grants_handler/src/ApplicationUploaderService.php
+++ b/public/modules/custom/grants_handler/src/ApplicationUploaderService.php
@@ -4,19 +4,25 @@
namespace Drupal\grants_handler;
+use Drupal\Component\Datetime\Time;
use Drupal\Component\Serialization\Json;
+use Drupal\Core\Database\Connection;
use Drupal\Core\Language\LanguageManagerInterface;
use Drupal\Core\Logger\LoggerChannelFactoryInterface;
use Drupal\Core\Logger\LoggerChannelInterface;
use Drupal\Core\Messenger\MessengerInterface;
+use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Core\TypedData\TypedDataInterface;
use Drupal\grants_attachments\AttachmentFixerService;
+use Drupal\grants_events\EventsService;
use Drupal\grants_metadata\AtvSchema;
use Drupal\helfi_atv\AtvDocument;
use Drupal\helfi_atv\AtvService;
use Drupal\helfi_helsinki_profiili\HelsinkiProfiiliUserData;
+use Drupal\webform\WebformSubmissionInterface;
use GuzzleHttp\Client as HttpClient;
+use Ramsey\Uuid\Uuid;
/**
* Class to handle application uploads.
@@ -76,6 +82,9 @@ public function __construct(
private readonly ApplicationGetterService $applicationGetterService,
private readonly HelsinkiProfiiliUserData $helfiHelsinkiProfiiliUserdata,
private readonly AttachmentFixerService $attachmentFixerService,
+ private readonly AccountInterface $currentUser,
+ private readonly Connection $database,
+ private readonly EventsService $eventsService,
) {
$this->logger = $this->loggerChannelFactory->get('application_uploader_service');
@@ -129,7 +138,7 @@ public function handleApplicationUploadToAtv(
$atvDocument->addMetadata('language', $language);
try {
$userData = $this->helfiHelsinkiProfiiliUserdata->getUserData();
- $saveId = ApplicationHelpers::logSubmissionSaveid(NULL, $applicationNumber, $userData);
+ $saveId = $this->logSubmissionSaveid(NULL, $applicationNumber, $userData);
$atvDocument->addMetadata('saveid', $saveId);
}
catch (\Exception $e) {
@@ -178,6 +187,7 @@ public function handleApplicationUploadToAtv(
* @throws \Drupal\helfi_atv\AtvFailedToConnectException
* @throws \GuzzleHttp\Exception\GuzzleException
* @throws \Drupal\helfi_helsinki_profiili\TokenExpiredException
+ * @throws \Drupal\grants_events\EventException
*/
public function handleApplicationUploadViaIntegration(
TypedDataInterface $applicationData,
@@ -192,6 +202,25 @@ public function handleApplicationUploadViaIntegration(
* for some reason.
*/
$updatedDocumentFromAtv = $this->handleApplicationUploadToAtv($applicationData, $applicationNumber, $submittedFormData);
+
+ // Create new saveid before sending data to integration,
+ // so we can add it to event data.
+ $newSaveId = $this->logSubmissionSaveid(
+ NULL,
+ $applicationNumber,
+ $this->helfiHelsinkiProfiiliUserdata->getUserData()
+ );
+
+ // Add new event for sending it to integration.
+ $this->eventsService->addNewEventForApplication(
+ $updatedDocumentFromAtv,
+ $this->eventsService->getEventData(
+ $this->eventsService->getEventTypes()['HANDLER_SEND_INTEGRATION'],
+ $applicationNumber,
+ 'Send application to integration.',
+ $newSaveId
+ ));
+
$myJSON = Json::encode($updatedDocumentFromAtv->getContent());
// No matter what the debug value is, we do NOT log json in PROD.
@@ -213,6 +242,7 @@ public function handleApplicationUploadViaIntegration(
try {
$headers = [];
+ // Get status from updated document.
$headers['X-Case-Status'] = $updatedDocumentFromAtv->getStatus();
// We set the data source for integration to be used in controlling
@@ -224,12 +254,8 @@ public function handleApplicationUploadViaIntegration(
// Set application number to meta as well to enable better searches.
$headers['X-hki-applicationNumber'] = $applicationNumber;
- // Set new saveid and save it to db.
- $headers['X-hki-saveId'] = ApplicationHelpers::logSubmissionSaveid(
- NULL,
- $applicationNumber,
- $this->helfiHelsinkiProfiiliUserdata->getUserData()
- );
+ // Set new saveid to header.
+ $headers['X-hki-saveId'] = $newSaveId;
$res = $this->httpClient->post($this->endpoint, [
'auth' => [
@@ -279,4 +305,61 @@ public function clearCache(string $applicationNumber): void {
$this->helfiAtvAtvService->clearCache($applicationNumber);
}
+ /**
+ * Logs the current submission page.
+ *
+ * @param \Drupal\webform\WebformSubmissionInterface|null $webform_submission
+ * A webform submission entity.
+ * @param string $applicationNumber
+ * The page to log.
+ * @param array $userData
+ * User data.
+ * @param string $saveId
+ * Submission save id.
+ *
+ * @return string
+ * The save ID.
+ *
+ * @throws \Drupal\Core\Entity\EntityStorageException
+ * @throws \Drupal\grants_mandate\CompanySelectException
+ * @throws \Exception
+ */
+ public function logSubmissionSaveid(
+ ?WebformSubmissionInterface $webform_submission,
+ string $applicationNumber,
+ array $userData,
+ string $saveId = '',
+ ): string {
+ if (!$userData) {
+ throw new \Exception('User data is required');
+ }
+
+ if (empty($saveId)) {
+ $saveId = Uuid::uuid4()->toString();
+ }
+
+ if ($webform_submission == NULL) {
+ $webform_submission =
+ $this->applicationGetterService
+ ->submissionObjectFromApplicationNumber($applicationNumber);
+ }
+
+ $fields = [
+ 'webform_id' => ($webform_submission) ? $webform_submission->getWebform()
+ ->id() : '',
+ 'sid' => ($webform_submission) ? $webform_submission->id() : 0,
+ 'handler_id' => ApplicationHelpers::HANDLER_ID,
+ 'application_number' => $applicationNumber,
+ 'saveid' => $saveId,
+ 'uid' => $this->currentUser->id(),
+ 'user_uuid' => $userData['sub'] ?? '',
+ 'timestamp' => (string) (new Time())->getRequestTime(),
+ ];
+
+ $query = $this->database->insert(ApplicationHelpers::TABLE, $fields);
+ $query->fields($fields)->execute();
+
+ return $saveId;
+ }
+
}
diff --git a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php
index 289fdb8784..ffd9e645e7 100644
--- a/public/modules/custom/grants_handler/src/Controller/ApplicationController.php
+++ b/public/modules/custom/grants_handler/src/Controller/ApplicationController.php
@@ -9,24 +9,17 @@
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityStorageException;
-use Drupal\Core\Render\Markup;
+use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\Core\TempStore\TempStoreException;
use Drupal\grants_handler\ApplicationAccessHandler;
use Drupal\grants_handler\ApplicationGetterService;
-use Drupal\grants_handler\ApplicationHelpers;
use Drupal\grants_handler\ApplicationInitService;
use Drupal\grants_handler\ApplicationStatusService;
-use Drupal\grants_handler\Plugin\WebformElement\CompensationsComposite;
use Drupal\grants_mandate\CompanySelectException;
use Drupal\grants_metadata\ApplicationDataService;
-use Drupal\grants_metadata\InputmaskHandler;
-use Drupal\grants_profile\Form\GrantsProfileFormRegisteredCommunity;
use Drupal\grants_profile\GrantsProfileService;
use Drupal\helfi_atv\AtvDocumentNotFoundException;
-use Drupal\helfi_atv\AtvFailedToConnectException;
-use Drupal\helfi_helsinki_profiili\TokenExpiredException;
use Drupal\webform\Entity\Webform;
use Drupal\webform\Entity\WebformSubmission;
use Drupal\webform\WebformRequestInterface;
@@ -39,121 +32,45 @@
/**
* Returns responses for Grants Handler routes.
*/
-class ApplicationController extends ControllerBase {
+final class ApplicationController extends ControllerBase {
const ISO8601 = "/^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])" .
- "|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)" .
- "|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])" .
- "|(?:[2468][048]|[13579][26])00)-02-29)(T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d{1,9})" .
- "?(?:Z|[+-][01]\d:[0-5]\d))?$/";
-
+ "|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)" .
+ "|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])" .
+ "|(?:[2468][048]|[13579][26])00)-02-29)(T(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d{1,9})" .
+ "?(?:Z|[+-][01]\d:[0-5]\d))?$/";
use StringTranslationTrait;
- /**
- * The current user.
- *
- * @var \Drupal\Core\Session\AccountInterface
- */
- protected $currentUser;
-
- /**
- * The entity repository.
- *
- * @var \Drupal\Core\Entity\EntityRepositoryInterface
- */
- protected EntityRepositoryInterface $entityRepository;
-
- /**
- * The webform request handler.
- *
- * @var \Drupal\webform\WebformRequestInterface
- */
- protected WebformRequestInterface $requestHandler;
-
- /**
- * The entity type manager.
- *
- * @var \Drupal\Core\Entity\EntityTypeManagerInterface
- */
- protected $entityTypeManager;
-
- /**
- * The renderer service.
- *
- * @var \Drupal\Core\Render\RendererInterface
- */
- protected $renderer;
-
- /**
- * The request service.
- *
- * @var \Symfony\Component\HttpFoundation\RequestStack
- */
- protected RequestStack $request;
-
- /**
- * Access to grants profile.
- *
- * @var \Drupal\grants_profile\GrantsProfileService
- */
- protected GrantsProfileService $grantsProfileService;
-
- /**
- * Application data service.
- *
- * @var \Drupal\grants_metadata\ApplicationDataService
- */
- protected ApplicationDataService $applicationDataService;
-
- /**
- * Application status service.
- *
- * @var \Drupal\grants_handler\ApplicationStatusService
- */
- protected ApplicationStatusService $applicationStatusService;
-
- /**
- * Application init service.
- *
- * @var \Drupal\grants_handler\ApplicationInitService
- */
- protected ApplicationInitService $applicationInitService;
-
- /**
- * Access handler for applications.
- *
- * @var \Drupal\grants_handler\ApplicationAccessHandler
- */
- protected ApplicationAccessHandler $applicationAccessHandler;
-
- /**
- * Getter service for applications.
- *
- * @var \Drupal\grants_handler\ApplicationGetterService
- */
- protected ApplicationGetterService $applicationGetterService;
+ public function __construct(
+ private readonly EntityRepositoryInterface $entityRepository,
+ private readonly WebformRequestInterface $requestHandler,
+ private readonly RendererInterface $renderer,
+ private readonly RequestStack $request,
+ private readonly GrantsProfileService $grantsProfileService,
+ private readonly ApplicationDataService $applicationDataService,
+ private readonly ApplicationStatusService $applicationStatusService,
+ private readonly ApplicationInitService $applicationInitService,
+ private readonly ApplicationAccessHandler $applicationAccessHandler,
+ private readonly ApplicationGetterService $applicationGetterService,
+ ) {}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container): ApplicationController {
- $instance = parent::create($container);
- $instance->currentUser = $container->get('current_user');
-
- $instance->entityRepository = $container->get('entity.repository');
- $instance->requestHandler = $container->get('webform.request');
- $instance->entityTypeManager = $container->get('entity_type.manager');
- $instance->renderer = $container->get('renderer');
- $instance->request = $container->get('request_stack');
- $instance->grantsProfileService = $container->get('grants_profile.service');
- $instance->applicationDataService = $container->get('grants_metadata.application_data_service');
- $instance->applicationStatusService = $container->get('grants_handler.application_status_service');
- $instance->applicationInitService = $container->get('grants_handler.application_init_service');
- $instance->applicationAccessHandler = $container->get('grants_handler.application_access_handler');
- $instance->applicationGetterService = $container->get('grants_handler.application_getter_service');
-
- return $instance;
+ return new self(
+ $container->get('entity.repository'),
+ $container->get('webform.request'),
+ $container->get('renderer'),
+ $container->get('request_stack'),
+ $container->get('grants_profile.service'),
+ $container->get('grants_metadata.application_data_service'),
+ $container->get('grants_handler.application_status_service'),
+ $container->get('grants_handler.application_init_service'),
+ $container->get('grants_handler.application_access_handler'),
+ $container->get('grants_handler.application_getter_service')
+ );
}
/**
@@ -197,24 +114,16 @@ public function access(AccountInterface $account, string $webform, string $webfo
* @return \Drupal\Core\Access\AccessResultInterface
* The access result.
*
- * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
- * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
- * @throws \Drupal\helfi_atv\AtvDocumentNotFoundException
- * @throws \GuzzleHttp\Exception\GuzzleException
+ * @throws \Drupal\grants_mandate\CompanySelectException
+ * @throws \Drupal\grants_profile\GrantsProfileException
*/
public function accessByApplicationNumber(AccountInterface $account, string $submission_id): AccessResultInterface {
try {
$webform_submission = $this->applicationGetterService->submissionObjectFromApplicationNumber($submission_id);
}
- catch (InvalidPluginDefinitionException |
- PluginNotFoundException |
+ catch (
EntityStorageException |
- TempStoreException |
- CompanySelectException |
- AtvDocumentNotFoundException |
- AtvFailedToConnectException |
- TokenExpiredException |
- GuzzleException $e) {
+ CompanySelectException $e) {
return AccessResult::forbidden('Submission gettting failed');
}
@@ -261,12 +170,10 @@ public function showMessageForDataStatus(string $status): void {
default:
break;
-
}
if ($message != NULL) {
$this->messenger()->addWarning($message);
}
-
}
/**
@@ -283,7 +190,6 @@ public function showMessageForDataStatus(string $status): void {
* Build for the page.
*/
public function view(string $submission_id, string $view_mode = 'full', string $langcode = 'fi'): array {
-
$view_mode = 'default';
try {
@@ -305,8 +211,6 @@ public function view(string $submission_id, string $view_mode = 'full', string $
'#theme' => 'webform_submission',
'#view_mode' => $view_mode,
'#webform_submission' => $webform_submission,
- // '#editSubmissionLink' =>
- // Link::fromTextAndUrl(t('Edit application'), $url),
];
// Navigation.
@@ -322,7 +226,7 @@ public function view(string $submission_id, string $view_mode = 'full', string $
'#source_entity' => $webform_submission,
];
- $page = $this->entityTypeManager
+ $page = $this->entityTypeManager()
->getViewBuilder($webform_submission->getEntityTypeId())
->view($webform_submission, $view_mode);
@@ -341,7 +245,6 @@ public function view(string $submission_id, string $view_mode = 'full', string $
else {
throw new NotFoundHttpException('Application ' . $submission_id . ' not found.');
}
-
}
catch (InvalidPluginDefinitionException | PluginNotFoundException | AtvDocumentNotFoundException | GuzzleException $e) {
throw new NotFoundHttpException($e->getMessage());
@@ -366,13 +269,13 @@ public function view(string $submission_id, string $view_mode = 'full', string $
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public function newApplication(string $webform_id): RedirectResponse {
-
$webform = Webform::load($webform_id);
if (!$this->applicationStatusService->isApplicationOpen($webform)) {
// Add message if application is not open.
$tOpts = ['context' => 'grants_handler'];
- $this->messenger()->addError($this->t('This application is not open', [], $tOpts), TRUE);
+ $this->messenger()
+ ->addError($this->t('This application is not open', [], $tOpts), TRUE);
$node_storage = $this->entityTypeManager()->getStorage('node');
// @codingStandardsIgnoreStart
// Get service page node.
@@ -385,7 +288,8 @@ public function newApplication(string $webform_id): RedirectResponse {
$res = $query->execute();
if (empty($res)) {
// If we end up here, the real issue is with content input.
- $this->messenger()->addError($this->t('Service page not found!', [], $tOpts), TRUE);
+ $this->messenger()
+ ->addError($this->t('Service page not found!', [], $tOpts), TRUE);
return $this->redirect('');
}
@@ -429,251 +333,38 @@ public function newApplication(string $webform_id): RedirectResponse {
}
/**
- * Helper funtion to transform ATV data for print view.
- */
- private function transformField($field, &$pages, &$isSubventionType, &$subventionType, $langcode) {
- if (isset($field['ID'])) {
- $labelData = json_decode($field['meta'], TRUE);
- if (!$labelData || $labelData['element']['hidden']) {
- return;
- }
- // Handle application type field.
- if ($field['ID'] === 'applicantType' && $field['value'] === 'registered_community') {
- $field['value'] = '' . $this->t('Registered community', [], ['langcode' => $langcode]);
- // Add other types here when needed.
- }
- // Handle dates.
- if (preg_match(self::ISO8601, $field['value'])) {
- $field['value'] = date_format(date_create($field['value']), 'd.m.Y');
- }
-
- // Handle input masks.
- if (isset($labelData['element']['input_mask'])) {
- $field['value'] = InputmaskHandler::convertPossibleInputmaskValue($field['value'], $labelData);
- }
-
- // Handle application type field.
- if ($field['ID'] === 'issuer') {
- $issuerLanguageOptions = [
- 'context' => 'Grant Issuers',
- 'langcode' => $langcode,
- ];
- $issuerArray = [
- "1" => $this->t('State', [], $issuerLanguageOptions),
- "3" => $this->t('EU', [], $issuerLanguageOptions),
- "4" => $this->t('Other', [], $issuerLanguageOptions),
- "5" => $this->t('Foundation', [], $issuerLanguageOptions),
- "6" => $this->t("STEA", [], $issuerLanguageOptions),
- ];
- $field['value'] = $issuerArray[$field['value']];
- }
- if ($labelData['section']['id'] === 'application_number' || $labelData['section']['id'] === 'status') {
- unset($field);
- unset($labelData['section']);
- return;
- }
- if ($labelData['section']['id'] === 'lisatiedot_ja_liitteet_section') {
- if ($field['ID'] === 'integrationID' || $field['ID'] === 'isNewAttachment' || $field['ID'] === 'fileType') {
- unset($field);
- return;
- }
- if ($field['ID'] === 'isDeliveredLater' || $field['ID'] === 'isIncludedInOtherFile') {
- if ($field['value'] === 'false') {
- unset($field);
- return;
- }
- else {
- $field['value'] = Markup::create(' ');
- }
- }
- if ($field['ID'] === 'fileName') {
- $field['value'] = Markup::create($field['value'] . '