ositah 24.4.dev1__py3-none-any.whl → 24.7.dev1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. {ositah-24.4.dev1.dist-info → ositah-24.7.dev1.dist-info}/METADATA +1 -1
  2. ositah-24.7.dev1.dist-info/RECORD +6 -0
  3. {ositah-24.4.dev1.dist-info → ositah-24.7.dev1.dist-info}/WHEEL +1 -1
  4. ositah/__init__.py +0 -0
  5. ositah/app.py +0 -17
  6. ositah/apps/__init__.py +0 -0
  7. ositah/apps/analysis.py +0 -774
  8. ositah/apps/configuration/__init__.py +0 -0
  9. ositah/apps/configuration/callbacks.py +0 -917
  10. ositah/apps/configuration/main.py +0 -542
  11. ositah/apps/configuration/parameters.py +0 -74
  12. ositah/apps/configuration/tools.py +0 -112
  13. ositah/apps/export.py +0 -1172
  14. ositah/apps/validation/__init__.py +0 -0
  15. ositah/apps/validation/callbacks.py +0 -240
  16. ositah/apps/validation/main.py +0 -89
  17. ositah/apps/validation/parameters.py +0 -25
  18. ositah/apps/validation/tables.py +0 -654
  19. ositah/apps/validation/tools.py +0 -533
  20. ositah/assets/arrow_down_up.svg +0 -4
  21. ositah/assets/ositah.css +0 -54
  22. ositah/assets/sort_ascending.svg +0 -5
  23. ositah/assets/sort_descending.svg +0 -6
  24. ositah/assets/sorttable.js +0 -499
  25. ositah/main.py +0 -449
  26. ositah/ositah.example.cfg +0 -215
  27. ositah/static/style.css +0 -54
  28. ositah/templates/base.html +0 -22
  29. ositah/templates/bootstrap_login.html +0 -38
  30. ositah/templates/login_form.html +0 -27
  31. ositah/utils/__init__.py +0 -0
  32. ositah/utils/agents.py +0 -117
  33. ositah/utils/authentication.py +0 -287
  34. ositah/utils/cache.py +0 -19
  35. ositah/utils/core.py +0 -13
  36. ositah/utils/exceptions.py +0 -64
  37. ositah/utils/hito_db.py +0 -51
  38. ositah/utils/hito_db_model.py +0 -245
  39. ositah/utils/menus.py +0 -339
  40. ositah/utils/period.py +0 -135
  41. ositah/utils/projects.py +0 -1175
  42. ositah/utils/teams.py +0 -42
  43. ositah/utils/utils.py +0 -459
  44. ositah-24.4.dev1.dist-info/RECORD +0 -46
  45. {ositah-24.4.dev1.dist-info → ositah-24.7.dev1.dist-info}/LICENSE +0 -0
  46. {ositah-24.4.dev1.dist-info → ositah-24.7.dev1.dist-info}/entry_points.txt +0 -0
  47. {ositah-24.4.dev1.dist-info → ositah-24.7.dev1.dist-info}/top_level.txt +0 -0
@@ -1,542 +0,0 @@
1
- """
2
- OSITAH subapplication to manage the configuration
3
-
4
- This file contains only the layout definitions
5
- """
6
-
7
- from datetime import date
8
-
9
- from dash import dcc
10
-
11
- from ositah.apps.configuration.callbacks import *
12
- from ositah.utils.menus import TABLE_TYPE_DUMMY_STORE
13
- from ositah.utils.projects import MASTERPROJECT_DELETED_ACTIVITY
14
- from ositah.utils.utils import AUTHORIZED_ROLES, HITO_ROLE_PROJECT_MGR
15
-
16
-
17
- def configuration_layout():
18
- """
19
- Build the layout for this application, after reading the data if necessary.
20
-
21
- :return: application layout
22
- """
23
-
24
- return html.Div(
25
- [
26
- html.H1("Configuration OSITAH"),
27
- html.Div(
28
- configuration_submenus(),
29
- id="configuration-submenus",
30
- style={"margin-top": "3em"},
31
- ),
32
- # The following dcc.Store coupled with tables must be created in the layout for
33
- # the callback to work
34
- dcc.Store(
35
- id={"type": TABLE_TYPE_DUMMY_STORE, "id": TABLE_NSIP_PROJECT_SYNC_ID},
36
- data=0,
37
- ),
38
- ]
39
- )
40
-
41
-
42
- def declaration_periods_layout():
43
- """
44
- Define the layout specific to the management of declaration periods
45
-
46
- :return: html.Div component
47
- """
48
-
49
- declaration_periods = get_declaration_periods(descending=False)
50
- declaration_period_items = []
51
- i = 0
52
- for period in declaration_periods:
53
- declaration_period_items.append({"label": period.name, "value": i})
54
- i += 1
55
-
56
- # Disable creation of a new (next) period if the period matching the current already exists
57
- today = date.today().isoformat()
58
- if today >= declaration_periods[-1].start_date and today <= declaration_periods[-1].end_date:
59
- current_period_exists = True
60
- else:
61
- current_period_exists = False
62
-
63
- period_params = [
64
- dbc.Row(
65
- [
66
- dbc.Label(
67
- "Date de début",
68
- html_for=DECLARATION_PERIOD_START_DATE_ID,
69
- style={"font-weight": "bold"},
70
- width="5",
71
- ),
72
- dbc.Col(
73
- dcc.DatePickerSingle(
74
- id=DECLARATION_PERIOD_START_DATE_ID,
75
- month_format="MMMM Y",
76
- placeholder="MMMM Y",
77
- ),
78
- width="auto",
79
- class_name="me-3",
80
- ),
81
- ],
82
- style={"margin-bottom": "10px"},
83
- ),
84
- dbc.Row(
85
- [
86
- dbc.Label(
87
- "Date de validation",
88
- html_for=DECLARATION_PERIOD_VALIDATION_DATE_ID,
89
- style={"font-weight": "bold"},
90
- width="5",
91
- ),
92
- dbc.Col(
93
- dcc.DatePickerSingle(
94
- id=DECLARATION_PERIOD_VALIDATION_DATE_ID,
95
- month_format="MMMM Y",
96
- placeholder="MMMM Y",
97
- ),
98
- width="auto",
99
- class_name="me-3",
100
- ),
101
- ],
102
- style={"margin-bottom": "10px"},
103
- ),
104
- dbc.Row(
105
- [
106
- dbc.Label(
107
- "Date de fin",
108
- html_for=DECLARATION_PERIOD_END_DATE_ID,
109
- style={"font-weight": "bold"},
110
- width="5",
111
- ),
112
- dbc.Col(
113
- dcc.DatePickerSingle(
114
- id=DECLARATION_PERIOD_END_DATE_ID,
115
- month_format="MMMM Y",
116
- placeholder="MMMM Y",
117
- ),
118
- width="auto",
119
- class_name="me-3",
120
- ),
121
- ],
122
- style={"margin-bottom": "10px"},
123
- ),
124
- dbc.Row(
125
- [
126
- dbc.Label(
127
- "Nom",
128
- html_for=DECLARATION_PERIOD_NAME_ID,
129
- style={"font-weight": "bold"},
130
- width="5",
131
- ),
132
- dbc.Col(
133
- dbc.Input(
134
- type="start_date",
135
- id=DECLARATION_PERIOD_NAME_ID,
136
- placeholder="Nom de la période",
137
- ),
138
- width="6",
139
- class_name="me-3",
140
- ),
141
- ],
142
- ),
143
- ]
144
-
145
- return html.Div(
146
- [
147
- html.P(),
148
- dbc.Alert(id=DECLARATION_PERIODS_STATUS_ID, is_open=False),
149
- dbc.Row(
150
- [
151
- dbc.Col(
152
- [
153
- dbc.Label(html.B("Périodes")),
154
- dbc.Select(
155
- id=DECLARATION_PERIODS_ID,
156
- options=declaration_period_items,
157
- html_size=DECLARATION_PERIODS_LIST_MAX_SIZE,
158
- ),
159
- ],
160
- width={"offset": 1, "size": 3},
161
- ),
162
- dbc.Col(
163
- dbc.Form(period_params),
164
- id=DECLARATION_PERIOD_PARAMS_ID,
165
- style={
166
- "border": "1px solid",
167
- "border-radius": "4px",
168
- "border-sizing": "border-box",
169
- "padding": "10px 10px",
170
- "visibility": "hidden",
171
- },
172
- width={"offset": 1, "size": 4},
173
- ),
174
- ],
175
- align="center",
176
- justify="start",
177
- ),
178
- dbc.Row(
179
- [
180
- dbc.Col(
181
- html.Div(
182
- dbc.Button(
183
- "Nouveau semestre",
184
- id=DECLARATION_PERIODS_CREATE_NEW_ID,
185
- disabled=current_period_exists,
186
- ),
187
- id=DECLARATION_PERIODS_CREATE_DIV_ID,
188
- ),
189
- width={"size": 3, "offset": 0},
190
- ),
191
- dbc.Col(
192
- dbc.Button(
193
- "Valider",
194
- id=DECLARATION_PERIODS_SAVE_NEW_ID,
195
- disabled=True,
196
- ),
197
- width={"size": 3, "offset": 0},
198
- ),
199
- dbc.Tooltip(
200
- (
201
- "Le semestre courant existe déjà"
202
- if current_period_exists
203
- else "Ajoute le semestre courant"
204
- ),
205
- target=DECLARATION_PERIODS_CREATE_DIV_ID,
206
- placement="bottom",
207
- ),
208
- ],
209
- justify="evenly",
210
- style={"margin-top": "3em"},
211
- ),
212
- dcc.Store(id=DECLARATION_PERIODS_CREATE_CLICK_ID, data=0),
213
- # The 2 following Stores are used to control if the status must be displayed or not.
214
- # If DECLARATION_PERIODS_STATUS_VISIBLE_ID > DECLARATION_PERIODS_STATUS_HIDDEN_ID,
215
- # it must be displayed else it must be hidden.
216
- dcc.Store(id=DECLARATION_PERIODS_STATUS_HIDDEN_ID, data=-0),
217
- dcc.Store(id=DECLARATION_PERIODS_STATUS_VISIBLE_ID, data=0),
218
- ]
219
- )
220
-
221
-
222
- def nsip_sync_layout():
223
- """
224
- Define the layout specific to the NSIP project synchronisation
225
-
226
- :return: html.Div component
227
- """
228
-
229
- return html.Div(
230
- [
231
- html.P(),
232
- dbc.Row(
233
- [
234
- dbc.Col(
235
- dbc.RadioItems(
236
- id=NSIP_SYNC_ACTIVITY_TYPE_ID,
237
- options=[
238
- {
239
- "label": "Projets",
240
- "value": NSIP_SYNC_ACTIVITY_TYPE_PROJECT,
241
- },
242
- {
243
- "label": "Autres activités",
244
- "value": NSIP_SYNC_ACTIVITY_TYPE_OTHER,
245
- },
246
- ],
247
- value=NSIP_SYNC_ACTIVITY_TYPE_PROJECT,
248
- ),
249
- width={"offset": 1, "size": 2},
250
- ),
251
- dbc.Col(
252
- dbc.Button(
253
- "Differences OSITAH/NSIP",
254
- id=NSIP_SYNC_SHOW_DIFF_ID,
255
- color="secondary",
256
- className="me-1",
257
- ),
258
- width={"offset": 1, "size": 3},
259
- ),
260
- dbc.Col(
261
- dbc.Button(
262
- "Mise à jour OSITAH",
263
- id=NSIP_SYNC_APPLY_DIFF_ID,
264
- color="secondary",
265
- className="me-1",
266
- disabled=True,
267
- ),
268
- width={"offset": 1, "size": 2},
269
- ),
270
- ]
271
- ),
272
- html.P(),
273
- html.Div(id=NSIP_SYNC_CONTENT_ID),
274
- ]
275
- )
276
-
277
-
278
- def project_teams_layout():
279
- """
280
- Define the layout specific to the configuration of project teams
281
-
282
- :return: html.Div component
283
- """
284
-
285
- activities = get_all_hito_activities(True)
286
- masterproject_items = []
287
- for masterproject in sorted(activities.masterproject.unique(), key=lambda x: x.upper()):
288
- if masterproject != MASTERPROJECT_DELETED_ACTIVITY:
289
- masterproject_items.append({"label": masterproject, "value": masterproject})
290
-
291
- return html.Div(
292
- [
293
- html.P(),
294
- dbc.Alert(id=ACTIVITY_TEAMS_STATUS_ID, is_open=False),
295
- dbc.Row(
296
- [
297
- dbc.Col(
298
- [
299
- dbc.Label(html.B("Masterprojet")),
300
- dbc.Select(
301
- id=ACTIVITY_TEAMS_MASTERPROJECTS_ID,
302
- options=masterproject_items,
303
- html_size=ACTIVITY_TEAMS_LIST_MAX_SIZE,
304
- ),
305
- ],
306
- width={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH, "offset": 0},
307
- xxl={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH_XXL, "offset": 0},
308
- ),
309
- dbc.Col(
310
- [
311
- dbc.Label(html.B("Projet")),
312
- dbc.Select(
313
- id=ACTIVITY_TEAMS_PROJECTS_ID,
314
- html_size=ACTIVITY_TEAMS_LIST_MAX_SIZE,
315
- ),
316
- ],
317
- width={
318
- "size": ACTIVITY_TEAMS_LIST_BOX_WIDTH,
319
- "offset": ACTIVITY_TEAMS_LIST_BOX_INTERVAL,
320
- },
321
- xxl={
322
- "size": ACTIVITY_TEAMS_LIST_BOX_WIDTH_XXL,
323
- "offset": ACTIVITY_TEAMS_LIST_BOX_INTERVAL,
324
- },
325
- ),
326
- ],
327
- justify="start",
328
- ),
329
- dbc.Row(
330
- [
331
- dbc.Col(
332
- [
333
- dbc.Label(html.B("Equipes IJCLab")),
334
- dbc.Select(
335
- id=ACTIVITY_TEAMS_LAB_TEAMS_ID,
336
- html_size=ACTIVITY_TEAMS_LIST_MAX_SIZE,
337
- ),
338
- ],
339
- width={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH, "offset": 0},
340
- xxl={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH_XXL, "offset": 0},
341
- ),
342
- dbc.Col(
343
- html.Div(
344
- [
345
- dbc.ButtonGroup(
346
- [
347
- dbc.Button(
348
- html.I(className="bi bi-chevron-double-right"),
349
- id=ACTIVITY_TEAMS_BUTTON_ADD_ID,
350
- disabled=True,
351
- style={"margin-top": "1em"},
352
- ),
353
- dbc.Button(
354
- html.I(className="bi bi-chevron-double-left"),
355
- id=ACTIVITY_TEAMS_BUTTON_REMOVE_ID,
356
- disabled=True,
357
- style={"margin-top": "2em"},
358
- ),
359
- ],
360
- vertical=True,
361
- ),
362
- ],
363
- style={"display": "flex", "justify-content": "center"},
364
- ),
365
- width=ACTIVITY_TEAMS_LIST_BOX_INTERVAL,
366
- align="center",
367
- ),
368
- dbc.Col(
369
- [
370
- dbc.Label(html.B("Equipes du projet")),
371
- dbc.Select(
372
- id=ACTIVITY_TEAMS_SELECTED_TEAMS_ID,
373
- html_size=ACTIVITY_TEAMS_LIST_MAX_SIZE,
374
- ),
375
- ],
376
- width={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH, "offset": 0},
377
- xxl={"size": ACTIVITY_TEAMS_LIST_BOX_WIDTH_XXL, "offset": 0},
378
- ),
379
- ],
380
- justify="start",
381
- style={"margin-top": "5em"},
382
- ),
383
- dbc.Row(
384
- [
385
- dbc.Col(
386
- dbc.Button(
387
- "Mettre à jour",
388
- id=ACTIVITY_TEAMS_BUTTON_UPDATE_ID,
389
- disabled=True,
390
- ),
391
- width={"size": 3, "offset": 0},
392
- ),
393
- dbc.Col(
394
- dbc.Button(
395
- "Annuler",
396
- id=ACTIVITY_TEAMS_BUTTON_CANCEL_ID,
397
- disabled=True,
398
- ),
399
- width={"size": 3, "offset": 0},
400
- ),
401
- ],
402
- justify="evenly",
403
- style={"margin-top": "3em"},
404
- ),
405
- dcc.Store(id=ACTIVITY_TEAMS_PROJECT_ACTIVITY_ID, data=True),
406
- dcc.Store(id=ACTIVITY_TEAMS_ADDED_TEAMS_ID, data=[]),
407
- dcc.Store(id=ACTIVITY_TEAMS_REMOVED_TEAMS_ID, data=[]),
408
- dcc.Store(id=ACTIVITY_TEAMS_RESET_INDICATOR_ID, data=0),
409
- ],
410
- )
411
-
412
-
413
- def project_mgt_layout():
414
- """
415
- Build the layout for the project management tab.
416
-
417
- :return: html.Div component
418
- """
419
-
420
- masterproject_list = []
421
- project_list = []
422
- return html.Div(
423
- [
424
- html.P(),
425
- dbc.Alert(id=PROJECT_MGT_STATUS_ID, is_open=False),
426
- dbc.Row(
427
- [
428
- dbc.RadioItems(
429
- id=PROJECT_MGT_PROJECT_TYPE_ID,
430
- options=[
431
- {
432
- "label": "Projets NSIP",
433
- "value": PROJECT_MGT_PROJECT_TYPE_NSIP,
434
- },
435
- {
436
- "label": "Projets locaux",
437
- "value": PROJECT_MGT_PROJECT_TYPE_LOCAL,
438
- },
439
- {
440
- "label": "Projets désactivés",
441
- "value": PROJECT_MGT_PROJECT_TYPE_DISABLED,
442
- },
443
- ],
444
- inline=True,
445
- ),
446
- ],
447
- justify="center",
448
- style={"margin-top": "1em"},
449
- ),
450
- dbc.Row(
451
- [
452
- dbc.Col(
453
- [
454
- dbc.Label(html.B("Masterprojets")),
455
- dbc.Select(
456
- id=PROJECT_MGT_MASTERPROJECT_LIST_ID,
457
- options=masterproject_list,
458
- html_size=PROJECT_MGT_LIST_MAX_SIZE,
459
- ),
460
- ],
461
- width={"size": PROJECT_MGT_LIST_BOX_WIDTH, "offset": 0},
462
- xxl={"size": PROJECT_MGT_LIST_BOX_WIDTH_XXL, "offset": 0},
463
- ),
464
- dbc.Col(
465
- [
466
- dbc.Label(html.B("Projets")),
467
- dbc.Select(
468
- id=PROJECT_MGT_PROJECT_LIST_ID,
469
- options=project_list,
470
- html_size=PROJECT_MGT_LIST_MAX_SIZE,
471
- ),
472
- ],
473
- width={"size": PROJECT_MGT_LIST_BOX_WIDTH, "offset": 0},
474
- xxl={"size": PROJECT_MGT_LIST_BOX_WIDTH_XXL, "offset": 0},
475
- ),
476
- ],
477
- style={"margin-top": "1em"},
478
- ),
479
- dbc.Row(
480
- dbc.Col(
481
- dbc.Button(
482
- "",
483
- id=PROJECT_MGT_ACTION_BUTTON_ID,
484
- disabled=True,
485
- style={"visibility": "hidden"},
486
- ),
487
- ),
488
- style={"margin-top": "3em"},
489
- ),
490
- dcc.Store(id=PROJECT_MGT_PROJECT_ACTIVITY_ID, data=True),
491
- ],
492
- )
493
-
494
-
495
- def configuration_submenus():
496
- """
497
- Build the tabs menus of the configuration subapplication
498
-
499
- :return: DBC Tabs
500
- """
501
-
502
- global_params = GlobalParams()
503
- if AUTHORIZED_ROLES.index(global_params.session_data.role) > AUTHORIZED_ROLES.index(
504
- HITO_ROLE_PROJECT_MGR
505
- ):
506
- nsip_sync_disabled = True
507
- declaration_period_disabled = True
508
- project_mgt_disabled = True
509
- else:
510
- nsip_sync_disabled = False
511
- declaration_period_disabled = False
512
- project_mgt_disabled = False
513
-
514
- return dbc.Tabs(
515
- [
516
- dbc.Tab(
517
- id=TAB_ID_ACTIVITY_TEAMS,
518
- tab_id=TAB_ID_ACTIVITY_TEAMS,
519
- label="Equipes des projets",
520
- ),
521
- dbc.Tab(
522
- id=TAB_ID_NSIP_PROJECT_SYNC,
523
- tab_id=TAB_ID_NSIP_PROJECT_SYNC,
524
- label="Synchronisation NSIP",
525
- disabled=nsip_sync_disabled,
526
- ),
527
- dbc.Tab(
528
- id=TAB_ID_DECLARATION_PERIODS,
529
- tab_id=TAB_ID_DECLARATION_PERIODS,
530
- label="Périodes de déclaration",
531
- disabled=declaration_period_disabled,
532
- ),
533
- dbc.Tab(
534
- id=TAB_ID_PROJECT_MGT,
535
- tab_id=TAB_ID_PROJECT_MGT,
536
- label="Projets",
537
- disabled=project_mgt_disabled,
538
- ),
539
- ],
540
- id=CONFIGURATION_TAB_MENU_ID,
541
- persistence=True,
542
- )
@@ -1,74 +0,0 @@
1
- """
2
- Parameters related to Dash components in the Configuration sub-application
3
- """
4
-
5
- CONFIGURATION_TAB_MENU_ID = "configuration-tabs"
6
- TAB_ID_NSIP_PROJECT_SYNC = "nsip-project-sync-tab"
7
- TAB_ID_ACTIVITY_TEAMS = "config-activity-teams-tab"
8
- TAB_ID_DECLARATION_PERIODS = "config-validation-period-tab"
9
- TAB_ID_PROJECT_MGT = "config-project-mgt-tab"
10
-
11
- ACTIVITY_TEAMS_MASTERPROJECTS_ID = "config-activity-teams-masterprojects"
12
- ACTIVITY_TEAMS_PROJECTS_ID = "config-activity-teams-projects"
13
- ACTIVITY_TEAMS_LAB_TEAMS_ID = "config-activity-teams-lab-teams"
14
- ACTIVITY_TEAMS_SELECTED_TEAMS_ID = "config-activity-teams-selected-teams"
15
- ACTIVITY_TEAMS_BUTTON_ADD_ID = "config-activity-teams-add-team"
16
- ACTIVITY_TEAMS_BUTTON_CANCEL_ID = "config-activity-teams-cancel-team"
17
- ACTIVITY_TEAMS_BUTTON_REMOVE_ID = "config-activity-teams-remove-team"
18
- ACTIVITY_TEAMS_BUTTON_UPDATE_ID = "config-activity-teams-update-button"
19
- ACTIVITY_TEAMS_PROJECT_ACTIVITY_ID = "config-activity-teams-is-project"
20
- ACTIVITY_TEAMS_ADDED_TEAMS_ID = "config-activity-teams-added-teams"
21
- ACTIVITY_TEAMS_REMOVED_TEAMS_ID = "config-activity-teams-removed-teams"
22
- ACTIVITY_TEAMS_STATUS_ID = "config-activity-teams-status-msg"
23
- ACTIVITY_TEAMS_RESET_INDICATOR_ID = "config-activity-teams-reset-indicator"
24
- ACTIVITY_TEAMS_LIST_MAX_SIZE = 10
25
- ACTIVITY_TEAMS_LIST_BOX_WIDTH = 5
26
- # Attempt to reduce list box width on very large display (2500+px) but unfortunately
27
- # Bootstrap xxl is 1400+px thus including full HD. Not clear how to tune mediaclass definitions.
28
- ACTIVITY_TEAMS_LIST_BOX_WIDTH_XXL = 5
29
- ACTIVITY_TEAMS_LIST_BOX_INTERVAL = 1
30
-
31
- DECLARATION_PERIOD_END_DATE_ID = "config-declaration-period-end"
32
- DECLARATION_PERIOD_NAME_ID = "config-declaration-period-name"
33
- DECLARATION_PERIOD_PARAMS_ID = "config-declaration-period-params"
34
- DECLARATION_PERIOD_START_DATE_ID = "config-declaration-period-start"
35
- DECLARATION_PERIOD_VALIDATION_DATE_ID = "config-declaration-period-validation"
36
- DECLARATION_PERIODS_ID = "config-declaration-periods"
37
- DECLARATION_PERIODS_CREATE_NEW_ID = "config-declaration-periods-create-new"
38
- DECLARATION_PERIODS_CREATE_DIV_ID = "config-declaration-periods-create-div"
39
- DECLARATION_PERIODS_CREATE_CLICK_ID = "config-declaration-periods-create-click-saved"
40
- DECLARATION_PERIODS_SAVE_NEW_ID = "config-declaration-periods-save-new"
41
- DECLARATION_PERIODS_SAVE_DIV_ID = "config-declaration-periods-save-div"
42
- DECLARATION_PERIODS_STATUS_ID = "config-declaration-periods-status"
43
- DECLARATION_PERIODS_STATUS_HIDDEN_ID = "config-declaration-periods-status-hidden"
44
- DECLARATION_PERIODS_STATUS_VISIBLE_ID = "config-declaration-periods-status-visible"
45
- DECLARATION_PERIODS_VALIDATION_ID = "config-declaration-periods-validation"
46
- DECLARATION_PERIODS_LIST_MAX_SIZE = 10
47
-
48
- NSIP_SYNC_SHOW_DIFF_ID = "nsip-sync-show-diff-button"
49
- NSIP_SYNC_APPLY_DIFF_ID = "nsip-sync-apply-diff-button"
50
- NSIP_SYNC_CONTENT_ID = "nsip-project-sync-content"
51
- NSIP_SYNC_ACTIVITY_TYPE_ID = "nsip-sync-activity-type"
52
- NSIP_SYNC_ACTIVITY_TYPE_PROJECT = 1
53
- NSIP_SYNC_ACTIVITY_TYPE_OTHER = 2
54
-
55
- PROJECT_MGT_MASTERPROJECT_LIST_ID = "project-mgt-masterproject-list"
56
- PROJECT_MGT_PROJECT_LIST_ID = "project-mgt-project-list"
57
- PROJECT_MGT_PROJECT_ACTIVITY_ID = "project-mgt-is-project"
58
- PROJECT_MGT_PROJECT_TYPE_ID = "project-mgt-project-type"
59
- PROJECT_MGT_ACTION_BUTTON_ID = "project-mgt-action-button"
60
- PROJECT_MGT_ACTION_BUTTON_DISABLE = "Désactiver"
61
- PROJECT_MGT_ACTION_BUTTON_ENABLE = "Réactiver"
62
- PROJECT_MGT_STATUS_ID = "project-mgt-status"
63
- PROJECT_MGT_PROJECT_TYPE_NSIP = 0
64
- PROJECT_MGT_PROJECT_TYPE_LOCAL = 1
65
- PROJECT_MGT_PROJECT_TYPE_DISABLED = 2
66
- PROJECT_MGT_LIST_MAX_SIZE = 10
67
- PROJECT_MGT_LIST_BOX_WIDTH = 5
68
- PROJECT_MGT_LIST_BOX_WIDTH_XXL = 5
69
-
70
- TABLE_NSIP_PROJECT_SYNC_ID = "nsip-project-sync"
71
-
72
- PROJECT_CHANGE_ADDED = "Ajouté"
73
- PROJECT_CHANGE_CHANGED = "Modifié"
74
- PROJECT_CHANGE_REMOVED = "Supprimé"