Commit Graph

196 Commits

Author SHA1 Message Date
4c5e170b85 # 61 General table enhancements
* enhances rendering of tables
* enhances rendering of filter section
* reorganizes table filter codes into konova/filters/ folder and splits into mixins and table_filters
2022-01-12 10:11:47 +01:00
d57478ee09 # 61 Filter code enhancement
* reorganizes code
2022-01-12 09:23:22 +01:00
834fa8dbd4 # 61 Filter offices frontend/backend
* adds filters for registration and conservation offices
* adds SelectionTableFilter as new holder for these types of filter components
2022-01-12 08:56:49 +01:00
8a19d7239d # 61 Filter backend
* refactors XYTableFilter classes to hold query_filter and checkbox_filter which are separate instances of django_filter.FilterSets
* improves render ability for frontend
2022-01-11 15:19:16 +01:00
87f11a9914 # 61 Filter frontend
* optimizes minor parts of table-filter initialization and queryset passing
2022-01-11 14:28:34 +01:00
524b5c340f # 61 Filter backend
* refactors table filters by introducing AbstractTableFilter, GeoReferencedTableFilterMixin, ShareableTableFilterMixin and RecordableTableFilterMixin
* adds full filter functionality
* refactors TableFilter inheritances for all objects
2022-01-11 12:56:27 +01:00
e2fe85a4fb #57 Deduction shortcut remove
* removes deduction shortcut
* adds missing quality checks on intervention deduction accounts validity
* fixes error if checked intervention shall be checked again
* adds/updates translations
2022-01-07 15:41:40 +01:00
393f9a4d47 #49 Parcels on report
* adds parcel displaying on public reports
* fixes bug in EMA where autocomplete js would not load for modal forms
* fixes bug where BaseContext cached data from last request and reused it, if not overwritten
2022-01-05 14:41:32 +01:00
bf0de00b72 #49 Frontend rendering
* adds rendering for detail view
* adds new includable html snippet for parcel rendering
* refactors generic includables in konova/ app into konova/templates/includes/...
* fixes bug where parcels have been reused from the database due to wrong model structure
* adds get_underlying_parcels() for Geometry model
* adds get_underlying_parcels() for GeoReferencedMixin models
* fixes bug where missing geometry would lead to an error during geometry conflict check
* removes unused wfs attribute from AbstractWFSFetcher
* adds/updates translations
2022-01-05 14:13:26 +01:00
286ed609da #50 Overlaying geometries KOM + OEK
* removes unused messages
* adds geometry conflict message rendering for KOM and OEK
* removes unused methods in GeoReferencedMixin
* generalizes geometrical lookup for conflicts from overlaps to intersects
2021-12-15 15:10:35 +01:00
2bd94a7618 #50 Overlaying geometries
* refactors geometry field into GeoReferencedMixin, holding more handy methods and used in all models, formerly holding the geometry field
* refactors backend admin configuration, so modified, deleted and created are not editable in the backend which also skips loading of all possible choices
* fixes typo in sanitize_db command
* introduces GeometryConflict model, holding a link between two geometries, where one overlaps the other
* adds first (WIP) messages into detail views of ema and intervention for test purposes
2021-12-15 13:59:52 +01:00
22da2d4bbe #48 Changes autocomplete
* changes the autocomplete route for user retrieving from _istartswith to full qualified check
* extends the help text for form to inform about full qualified username needed
* updates translation
2021-12-14 13:55:08 +01:00
6cb1a31aff Refactors triggering checked/recorded
* refactors BaseForm request/user initialization
* introduces mark_as_edited() method for compensation models
2021-11-17 14:33:05 +01:00
bd36ab5b6f #35 Sanity command
* refactors "toggling" of recorded/checked state
* introduces mark_as_edited() for RecordableObjectMixin
2021-11-17 12:09:49 +01:00
779065ec91 Refactoring
* adds simple getter methods for UserActionLogEntry
* replaces manual creation of UserActionLogEntry with new methods
2021-11-16 13:15:15 +01:00
71e4aa9a2f Refactoring
* moves updating of shared access users into ShareableObjectMixin
* renames ShareInterventionModalForm to ShareModalForm since it's used for EMA and eco accounts as well
2021-11-16 12:54:28 +01:00
6ad387daa3 Refactoring
* moves updating of shared access users into Intervention
2021-11-16 12:51:10 +01:00
d8f0db6bd6 Refactoring
* moves adding of deduction into Intervention and EcoAccount model
* hardens against circular import issues
2021-11-16 12:43:13 +01:00
9b531bc09e Refactoring
* moves adding of revocation into Intervention model
2021-11-16 12:26:50 +01:00
60a50b304a Refactoring
* drop SSO message sending for now from the logic
2021-11-16 11:57:06 +01:00
78945d648f Refactoring
* splits compensation/models.py into subpackage
* renames base objects by adding suffix Mixin
2021-11-16 08:29:18 +01:00
d78afbfb5c Refactoring
* splits intervention/models.py into subpackage
2021-11-15 17:19:06 +01:00
bcffae4a95 Refactoring
* renames model ResponsibilityData into Responsibility
* renames model LegalData into Legal
* moves form->object saving logic into model
* refactors NewDocumentForm into special types for intervention, compensation, eco account and ema
*
2021-11-15 17:09:17 +01:00
7ed114a858 #38 User requests
* implements 3) "Extend sharing on direct adding of users"
2021-11-15 14:00:08 +01:00
36470f819c #38 User requests
* implements 2) "Multiple revocations for interventions"
2021-11-15 12:18:22 +01:00
e922b983dd #38 User requests
* implements 1) "Add titles to public reports, next to identifiers"
2021-11-15 11:05:39 +01:00
e59af1e437 #19 Tests
* restructures setup for workflow tests in interventions
2021-11-12 16:42:40 +01:00
ea14a01f89 #19 Tests
* adds workflow testing for geometries on new creation of intervention and compensation
*
2021-11-12 14:54:33 +01:00
ce7033943f #19 Tests
* refactors sharing user setting by introducing share_with(user) and share_with_list(user_list) for BaseObject for a more self-explanatory sharing
2021-11-11 15:09:03 +01:00
667f378b74 #19 Tests
* adds workflow tests for compensation checking and recording
* improves related code
2021-11-11 13:13:05 +01:00
7d611a60d8 #19 Tests
* adds workflow tests for checkability and recordability for interventions
* fixes/improves code snippets detected by testing
2021-11-11 10:37:22 +01:00
bcee58700a #19 Tests
* adds workflow tests or deductions in InterventionWorkflowTestCase
* fixes bugs detected by testing
2021-11-10 15:36:18 +01:00
08d023092f #19 Tests
* adds new BaseWorkflowTestCase class for encapsulating
* adds new InterventionWorkflowTestCase class with first workflow tests
2021-11-10 14:08:16 +01:00
0fac17ad68 #19 Tests
* adds EMA test
2021-11-09 15:33:26 +01:00
c221d00c28 #19 Tests
* adds EMA tests
* extends compensation tests
* fixes bugs detected by testing
* restructured tests for performance boost
2021-11-09 13:06:22 +01:00
107cbeadee #19 Tests
* fixes bug where compensations still appeared on the public report despite being marked as deleted
* fixes bug where eco account could be deducted into a negative account balance
2021-10-28 17:21:07 +02:00
b5fc96c1cf #19 Tests
* adds tests for compensations (WIP)
* refactors some dummy data generating into base test class
* fixes bugs detected by testing
* adds important requirements.txt change for itsdangerous package (<1.0.0 for compatibility to django-simple-sso)
2021-10-27 14:44:49 +02:00
5213c717d9 #19 Tests
* refactors CheckableMixin and RecordableMixin into CheckableObject and RecordableObject
* adds ShareableObject for wrapping share related fields and functionality
* adds share functionality to EcoAccount and EMA, just like Intervention
2021-10-26 15:09:30 +02:00
bfe541f83e #19 Tests
* refactors test logic into base test classes
* adds tests for views in konova app
* fixes bugs/warnings detected by testing
2021-10-26 14:26:32 +02:00
2553eb2825 #19 Tests
* adds tests for views in intervention app
* fixes bugs detected by test writing
2021-10-26 11:38:34 +02:00
4a4c9ad049 #36 Quality checks
* adds unchecking/unrecording of interventions in case of post-check|post-record editing
2021-10-25 17:39:39 +02:00
1c3ab898cc #36 Quality checks
* refactors toggling of recorded status into RecordableMixin
2021-10-25 17:01:02 +02:00
619f2110e4 #36 Quality checks
* adds quality check logic for Compensations with CompensationQUalityChecker
* adds compensation quality checking to checking routine of RunCheckModalForm.is_valid()
* adds/updates translations
2021-10-25 13:44:54 +02:00
4c7efdb800 #36 Quality checks
* moves geometry check logic to upper class
2021-10-25 13:21:27 +02:00
a5b1f68f62 #36 Quality checks
* adds AbstractQualityChecker as base for all quality checker instances
* adds InterventionQualityChecker, inheriting from AbstractQualityChecker
* adds functionality to InterventionQualityChecker
* adds/updates translations
2021-10-25 13:06:54 +02:00
af70303b32 #32 Disable file download
* refactors: attached files can only be downloaded by users with shared access
* adds hint on unshared data being unshared for compensation, ema, eco-account
* minor optical enhancement for user contact form
2021-10-25 08:51:06 +02:00
6b839b7f60 #26 Annual conservation reports
* adds index form for selecting timespan and office of interest
* adds timespan support for TimespanReport
* fixes naive datetime issues
* fixes missing error message css tag
* adds/updates translations
2021-10-20 13:23:35 +02:00
9e7e5ee726 EcoAccount fixes
* adds deductable surface field into NewEcoAccountForm directly
* removes custom manager for LegalData and ResponsibilityData
2021-10-20 10:28:01 +02:00
85759a636a Database performance
* optimizes the db fetching for all index views and detail views
* introduces usage of managers.py in all necessary apps for wrapping basic fetch settings
* moves comment.html to comment_card.html under /konova/templates/konova/
* adds/updates translations
* fixes document typos
* drops comment rendering in public reports
* opens public reports in new tabs if button is clicked from the detail view
2021-10-14 14:12:33 +02:00
ce74d011f6 #25 Public reports
* prevents Actions column in tables from being rendered if there would be no buttons inside due to permission checking
* enhances amount of sql requests for detail view and report view
2021-10-14 08:21:51 +02:00
193ba4c658 #25 Public reports
* adds public report for compensations
* adds/updates translations
* prepares EMA and eco account reports
2021-10-13 17:35:11 +02:00
ac17d953c6 #25 Public reports
* adds public report rendering for intervention model
* adds new routes for report
* adds new public_base.html and public_navbar.html
* adds lookup table for zoom levels for lanis link generating
* moves qr code generating into utils/generators.py
2021-10-13 14:03:34 +02:00
af0fe655b3 Intervention template adjustments
* renames intervention variable to obj to match other template style
* renames open routes to detail routes
2021-10-13 09:26:46 +02:00
f50dccb30b #17 Update setup
* removes unused organisation app from project
* removes null=True parameters for M2M fields in models
2021-10-13 09:04:01 +02:00
mipel
0e839f5e44 #7 New Form
* refactors/renames folders and files for generic template rendering
* removes unused choiceColumnForm.html
2021-10-06 16:15:40 +02:00
mipel
3842bcf0b1 #7 New Form
* adds NewEmaForm and EditEmaForm
* refactors ResponsibilityData related form fields into reusable mixin CompensationResponsibleFormMixin
   * used in NewEcoAccountForm and NewEmaForm for easier maintaining and reducing amount of code
* refactors templates /xy/new/view.html into /xy/form/view.html since the same template file is used for new and edit forms
2021-10-06 16:00:17 +02:00
mipel
60f03591ef #7 New Form
* adds EditEcoAccountForm
* adds placeholders for some form fields
* changes comment card in detail view into rlp-grayish
* adds eco account detail view comment box
* removes unnecessary loading of dal scripts in view.html
* refactors generated identifier for data objects (10 digits to 6 uppercase letter-digit combination)
* improves generate_random_string() method by adding more options for generation of strings
* adds/updates translations
2021-10-06 13:10:10 +02:00
mipel
d84fe68120 #7 New Form
* adds NewEcoAccountForm
* refactors NewCompensationForm into AbstractCompensationForm so main fields can be reused again
* fixes template bug in account detail view where the amount of deductions has been displayed instead of the available rest
* refactors _generate_new_identifier() into generate_new_identifier()
* refactors get_available_rest() into returning both, the total and relative amount
* improves saving of SimpleGeometryForm()
* adds/updates translations
2021-10-05 16:35:24 +02:00
mipel
3d31a13508 #7 New Form
* adds creation of new compensation directly from intervention detail view
* adds comment rendering on compensation detail view (WIP)
* adds shared_access_required decorator
* adds/updates translations
2021-10-04 13:23:14 +02:00
mipel
9cfb400bad #7 New Form
* adds NewCompensationForm content and functionality
* renames CODELIST_COMPENSATION_COMBINATION_ID into CODELIST_COMPENSATION_FUNDING_ID for more clarity
* reorganizes compensation forms into compensation/forms/forms.py and forms/modalForms.py
* adds new compensation html template in compensation/templates/compensation/new
* adds new default message template in message_templates.py: IDENTIFIER_REPLACED
* adds/updates translations
2021-10-04 09:55:59 +02:00
mipel
61b75be1a1 #7 New Form
* adds intervention comment to detail view
2021-09-29 15:48:25 +02:00
mipel
7841599650 #7 New Form
* extends KonovaCode filtering for parent objects matching given input
* renames data_form into form for easier template render support
* simplifies empty geometry form initialization
2021-09-29 14:49:17 +02:00
ea0a07890c #7 New forms
* introduces bootstrap class form-control for proper html form input rendering
* fixes bug where missing shared users for an entry resulted in a None exception
* adds GenerateInput with template in generate-content-input.html, which provides a generate button for fetching server-side content
* adds/updates translations
2021-09-27 13:57:56 +02:00
78ef1b79af #7 New forms
* removes unused OpenInterventionForm
2021-09-27 11:46:41 +02:00
877a1ca335 #7 New forms
* refactors large forms.py into forms/modalForms.py and forms/forms.py
* refactors custom input fields into intervention/inputs.py
2021-09-27 11:45:13 +02:00
e94dbbd3c8 #7 New forms
* fixes bug in case of unset dates for intervention
* adds missing template formater
* adds/updates translations
2021-09-27 11:12:40 +02:00
mipel
7ee28e526e #7 New Form
* adds functionality for EditInterventionForm (WIP)
2021-09-27 09:40:00 +02:00
72ed82ecd6 Full width fields
* refactors full width fields from BaseModalForm into BaseForm to have this nice little feature for regular forms as well!
2021-09-24 15:05:50 +02:00
mipel
9b728e5d10 #7 New forms WIP
* adds saving functionality for new intervention form
* refactors new identifier generating, so a pre-generated identifier from a new element form will be checked again before saving
* adds css fixes for disturbing input field:focus bugs
* adds missing csrf token to new collapsible form
* adds/updates translations
* introduces mark_as_deleted as only marking instead of using delete() which will really delete from the db
2021-09-23 15:05:17 +02:00
mipel
951477c58f #7 New forms WIP
* adds new collapsible styled form for new main data
* adds/updates translations
2021-09-21 14:32:10 +02:00
mipel
89c75d471b #20 Multiple laws
* improves w-100 handling for ModalForms
* adds documentation strings
2021-09-20 14:13:59 +02:00
mipel
8a2bbb1fc2 #20 Multiple laws
* refactors law field from ForeignKey to ManyToManyField to support multiple laws being added to one LegalData object
* added funding data to EMA detail view
2021-09-20 13:33:07 +02:00
mipel
4c045618e6 Eco Account deduction
* adds deductable_surface to EcoAccount model to provide an easy way to change the deductable amount from an account -> depends on external funding e.g. with AktionBlau or similar
* adds overview of deducted and deductable volume to detail view
* adds check to eco account model, so the deductable_surface can never be larger than the total amount of after_state surface sum
* adds german formating for python logic based number formating
* adds/updates translations
2021-09-17 13:33:51 +02:00
mipel
416d11d1ee #18 File upload in certain folders
* adds try-except for removing folders in case of non existence or changed folder names on the hard drive
2021-09-17 09:43:03 +02:00
mipel
9dbea71af5 #18 File upload in certain folders
* removes 'revocation' folder if RevocationDocument is removed from an intervention and removes the whole intervention document folder as well, if no other documents for this intervention exist
* adds further documentation
* refactors getting of related documents into Intervention model
2021-09-17 09:05:43 +02:00
mipel
cd3eb8099d #18 File upload in certain folders
* removes folder if last InterventionDocument is removed from an intervention and no RevocationDocument exists as well
2021-09-16 09:12:32 +02:00
mipel
270f9ab7d2 #18 File upload in certain folders
* increases max_size for FileFields --> triggers when the file name will be automatically changed during upload
* adds Http404 Exception in case document file does not exist anymore on the hard drive
2021-09-01 16:40:36 +02:00
mipel
3c9d73533f #18 File upload in certain folders
* refactors documents and file upload to be distributed into different subfolders, depending on the type of document (InterventionDocument, RevocationDocument, ...)
* refactors Document model into AbstractDocument
* subclasses RevocationDocument, InterventionDocument, COmpensationDocument, EmaDocument and EcoAccountDocument from AbstractDocument to provide proper functionality for each
* adds new specialized routes for each new document type (opening, removing)
* drops generic get and remove routes for documents
2021-09-01 16:24:49 +02:00
mipel
d569be80b3 Withdraw to deduct
* refactors Models and attributes
2021-08-30 11:34:35 +02:00
mipel
cd5fb9cad6 Withdraw to deduct
* refactors all files and variable names
* WIP: Models and attributes
2021-08-30 11:29:15 +02:00
mipel
81cea4f045 [Compensation] Conservation office #5
* keeps responsible data in compensation model for potential future purposes
* refactors registration_office and conservation_office to map onto KonovaCodes instead of own Organization model
* adds str_as_office property-method to KonovaCode to provide an easy way of rendering template data
* adds missing highlighting in case of missing information about registration office and conservation office
* extends KonovaCode command update_codelist.py for CODELIST_PROCESS_TYPE_ID
* adds preselectors for konova codes in models of CompensationAction, Law and CompensationState
2021-08-27 15:16:05 +02:00
mipel
6b70ee8ba9 [Compensation] Conservation office #5
* keeps responsible data in compensation model for potential future purposes
* refactors registration_office and conservation_office to map onto KonovaCodes instead of own Organization model
* adds str_as_office property-method to KonovaCode to provide an easy way of rendering template data
* adds missing highlighting in case of missing information about registration office and conservation office
2021-08-27 09:44:23 +02:00
mipel
280510d729 [EcoAccount] See recorded state of withdraw #6
* adds prefiltering of withdraws --> excludes withdraws of as deleted flagged interventions
* renders intervention-recorded icon into eco account withdraws details view
* fixes bug in case of document deleting which does not contain any files
* renames RecordForm into RecordModalForm for more clarity
2021-08-26 15:45:24 +02:00
mipel
415fe267d2 [Intervention] Revocations files optional #4
* makes revocation file upload optional
 * adds overview about revocations to intervention index
 * adds/updates translations
2021-08-26 15:02:34 +02:00
mipel
6ce17dd480 Payment date and comment #3
* adds payment-comment relation in NewPaymentForm
 * drops transfer note form field (may not be used anyway) and replace it with comment
 * adds/updates translations
2021-08-26 14:30:05 +02:00
mipel
2c3f6bbcd1 Detail view adjustments
* adds EMA and eco account conservation office data to detail views
* adds line break in header of detail views
* adds/updates translations
2021-08-19 14:04:44 +02:00
mipel
615b7bf5ea EMA
* fixes created timestamp in detail views where modified needs to be displayed
* adds fallback timestamp if data has not been edited, yet --> show created timestamp
* fixes bug where deleting of certain data didn't redirect to the index view
* adds quality_check() method for EMA, needed for recording
* adds all functions which are provided for compensations to EMA
* adds/updates translations
2021-08-19 13:44:06 +02:00
mipel
d1f43f8c64 EMA
* adds Ema model (basically Compensation inherited)
* adds index view for EMAs
* fixes drop-down link bug for menu 'More' in navbar
* refactors some more forms to use process_request()
* adds modified attribute to BaseResource for easy last_modified check
* adds setting of modified attribute in all places where UserAction.EDITED is added to log
* adds EMA_ACCOUNT_IDENTIFIER_LENGTH and EMA_ACCOUNT_IDENTIFIER_TEMPLATE to ema/settings.py
* adds EmaAdmin to ema/admin.py
* fixes wrong title in intervention detail view html for revocations
* adds support for subtitle variable to BaseTable and generic_index.html
* drops next_version attribute from models
* adds/updates translations
* adds default ordering for UserActionLogEntry
   * removes extra ordering in log modal rendering
2021-08-19 13:02:31 +02:00
mipel
833483b810 SSO and messages
* adds message for checking of intervention
* refactors sso message sending to handle an iterable of users
* adds specific method for sending object checking related messages
* adds label support for modal form for more simple clicking of checkboxes
2021-08-17 10:32:54 +02:00
mipel
ddd6669bbf Translations
* adds/updates translations
2021-08-11 14:50:54 +02:00
mipel
244e300715 Identifier generating
* refactors identifier generating into BaseObject class
2021-08-11 14:31:24 +02:00
mipel
c8b6d001ef Minor enhancements
* refactors eco account rest surface calculation into designated method get_available_rest()
* refactors placeholder setter for BaseForm
* adds automatic eco account identifier generating on saving
* fixes ServerMessageImportance template tag
2021-08-11 14:17:43 +02:00
mipel
5f85f49636 Recording data
* adds dynamic icon for recording and unrecording of data
* adds record view to intervention and eco accounts
* adds quality_check() method for Intervention and EcoAccount class which holds logic for data quality checking
* adds UserAction "unrecorded"
2021-08-10 17:19:42 +02:00
mipel
bd2413d63c EcoAccount detail view
* adds record control button
* adds html markup for invalid withdraws (unrecorded account)
* adds constraint to is_valid() method of NewWithdrawForm for checking whether the selected account for a withdraw is recorded or not
* adds/updates translations
2021-08-10 14:15:42 +02:00
mipel
09d7cad8c8 LANIS Link
* adds LANIS link getter to Intervention, Compensation and EcoAccount for creating a usable link to LANIS
* adds/updates translations
2021-08-10 13:57:03 +02:00
mipel
766d38bcbf HTML improvements
* refactors initializing and rendering of a map view into map/geom_form.html, which leads to simple includes on the detail views instead of redundant html
* refactors django-autocomplete-light form media links and scripts into dal/scripts.html, which can be included on the header blocks of detail views to support form modals using dal easier without the need for form.media
* changes filter behaviour on eco account index: instead of hiding recorded accounts (like in interventions), the filter option there has been replaced with "Show only unrecorded" which can be used to hide all recorded ones
   * background: eco accounts shall be visible when recorded, since they can only be used for withdrawing if they are recorded. Hiding the recorded ones does not make any sense, just like in interventions
* updates some code documentation
* adds/updates translations
2021-08-10 13:12:15 +02:00
mipel
f8b3e5c8fd EcoAccount withdraws
* adds functionality for withdraws from eco accounts in detail view of interventions and eco account as well
* adds get_surface() method to AbstractCompensation class to provide a simple getter for a sql calculation
* adds get_surface_withdraws() method to EcoAccount class to provide a simple getter for a sql calculation
* renames some routes to match coherent rout naming
* adds logic check on NewWithdrawForm
* renames templates/table directory to templates/form, since there are form-table templates inside --> more clarity
* adds new autocomplete routes to konova/urls.py for Interventions and EcoAccounts
* adds/updates translations
* adds/updates template comments
* updates requirements.txt
2021-08-10 10:42:04 +02:00
mipel
58510eee50 EcoAccount template and logic
* adds eco-account own includes for simpler maintainability instead of refactoring to generic includes for compensation app and predefining urls and stuff on the backend
* adds before-state, after-state, actions, deadlines, documents and withdraws to eco account detail view
* adds hint for invalid withdraw in intervention detail view in case of deleted eco account
* adds/updates translations
2021-08-09 15:09:43 +02:00
mipel
abdc574ea2 EcoAccount detail
* adds detail view for eco account
* adds withdraw detail view to eco acount detail
* generalizes compensation/includes templates to be reusable for eco-accounts
* moves is_shared_with() check to class BaseObject
* adds/updates translations
2021-08-09 14:39:36 +02:00
mipel
93c02a72ca EcoAccount index
* renames eco_withdraws to withdraws
* adds EcoAccountTableFilter
* changes percentage withdraw to surface withdraw --> renames amount to surface
* updates EcoAccountTable
  * adds column for rendering rest of available account using a progress bar
* adds progressbar.html to konova/custom_widgets
* adds/updates translations
2021-08-09 14:16:54 +02:00