741 lines
10 KiB
INI
741 lines
10 KiB
INI
```python
|
|
# Let's break down the rooms from the two screenshots to reconstruct them correctly based on prefix guidelines.
|
|
# Screenshot 1 (089-gambetta.png):
|
|
# BatA -> Rdc -> 003, 006, 007, LSF
|
|
# BatB -> Etage1 -> 101 to 119
|
|
# BatB -> Etage2 -> 201 to 219
|
|
|
|
# Screenshot 2 (Capture d’écran 2026-06-01 161509.png):
|
|
# BatB -> Rdc -> CDI, Chapelle, FCPE, Musique, Permanence, SDP, TICE
|
|
# BatC -> Etage1, Rdc (No visible rooms under them)
|
|
# BatD -> Etage1 -> 101 to 116
|
|
# BatD -> Rdc -> 001 to 011, Polyvalente
|
|
|
|
# Prefix convention from example: A101 (BatA + 101).
|
|
# Let's list all rooms and apply normalization rules (remove accents, spaces to underscores).
|
|
# Wait, "Chapelle" -> "Chapelle", "Permanence" -> "Permanence", "Polyvalente" -> "Polyvalente".
|
|
# Let's build the list of rooms precisely.
|
|
|
|
rooms_data = {}
|
|
|
|
# BatA Rdc
|
|
for r in ["003", "006", "007", "LSF"]:
|
|
rooms_data[f"BatA_{r}"] = {"orig": r, "bat": "A"}
|
|
|
|
# BatB Etage1
|
|
for i in range(101, 120):
|
|
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
|
|
|
|
# BatB Etage2
|
|
for i in range(201, 220):
|
|
rooms_data[f"BatB_{i}"] = {"orig": str(i), "bat": "B"}
|
|
|
|
# BatB Rdc
|
|
for r in ["CDI", "Chapelle", "FCPE", "Musique", "Permanence", "SDP", "TICE"]:
|
|
rooms_data[f"BatB_{r}"] = {"orig": r, "bat": "B"}
|
|
|
|
# BatD Etage1
|
|
for i in range(101, 117):
|
|
rooms_data[f"BatD_{i}"] = {"orig": str(i), "bat": "D"}
|
|
|
|
# BatD Rdc
|
|
for i in range(1, 12):
|
|
r = f"{i:03d}"
|
|
rooms_data[f"BatD_{r}"] = {"orig": r, "bat": "D"}
|
|
rooms_data["BatD_Polyvalente"] = {"orig": "Polyvalente", "bat": "D"}
|
|
|
|
# Normalization: Let's follow the naming format. The example showed "A101" for BatA + 101.
|
|
# So "BatA" + "003" -> "A003". "BatB" + "CDI" -> "B_CDI" or "BCDI"?
|
|
# In French school network deployments, usually it's "A003", "B101", and for text names "BCDI" or "B_CDI".
|
|
# Let's check rule 4: "A102 ITEC → A102_ITEC". This implies prefix is just letter + room code.
|
|
# Let's use Letter + Room code, and if it starts with a letter, check if underscore is needed.
|
|
# Let's look closely at standard convention: "A003", "ALSF" or "A_LSF"? Usually "A_LSF", "B_CDI", "B_Chapelle".
|
|
# Let's do: if the room code starts with a digit, concatenate (e.g. A003, B101). If it starts with a letter, concatenate with underscore if needed or direct? Let's use direct if it's clear, or underscore. Let's use "A003", "A_LSF", "B101", "B_CDI", "B_Chapelle", "B_FCPE", "B_Musique", "B_Permanence", "B_SDP", "B_TICE", "D101", "D001", "D_Polyvalente".
|
|
# Wait, "Conserver accents supprimés" means remove accents ("é" -> "e", etc.). "Permanence" and "Polyvalente" don't have accents in the screenshot ("Polyvalente", "Permanence"). "Chapelle" has no accents. "Capture d'écran" has "Etage1" and "Rdc" without accents in the folder names anyway.
|
|
|
|
# Let's refine the final keys:
|
|
final_rooms = {}
|
|
for k, v in rooms_data.items():
|
|
orig = v["orig"]
|
|
bat = v["bat"]
|
|
if orig.isdigit():
|
|
name = f"{bat}{orig}"
|
|
else:
|
|
# Check accents and spaces
|
|
name = f"{bat}_{orig}"
|
|
# Remove accents if any
|
|
import unicodedata
|
|
name = "".join(c for c in unicodedata.normalize('NFD', name) if unicodedata.category(c) != 'Mn')
|
|
name = name.replace(" ", "_")
|
|
final_rooms[name] = orig
|
|
|
|
# Rules for Roles and MaxPostes
|
|
# Default: Roles=Eleve, MaxPostes=30
|
|
# Exceptions:
|
|
# CDI, CDR, Tice (or TICE), SDP, SDS, Refectorie, Loge, OP, DFPT -> Roles=Prof,Eleve
|
|
# MaxPostes: CDI=20, CDR=10, Tice=10, SDS=10, DFPT=10, Refectorie=5, Loge=2, OP=5
|
|
|
|
sorted_keys = sorted(final_rooms.keys())
|
|
|
|
ini_lines = ["[Default]", f"Salles={','.join(sorted_keys)}", ""]
|
|
|
|
for r_name in sorted_keys:
|
|
orig = final_rooms[r_name]
|
|
orig_upper = orig.upper()
|
|
|
|
roles = "Eleve"
|
|
max_postes = "30"
|
|
|
|
if orig_upper in ["CDI", "CDR", "TICE", "SDP", "SDS", "REFECTORIE", "LOGE", "OP", "DFPT"]:
|
|
roles = "Prof,Eleve"
|
|
|
|
if orig_upper == "CDI":
|
|
max_postes = "20"
|
|
elif orig_upper in ["CDR", "TICE", "SDS", "DFPT"]:
|
|
max_postes = "10"
|
|
elif orig_upper == "REFECTORIE":
|
|
max_postes = "5"
|
|
elif orig_upper == "LOGE":
|
|
max_postes = "2"
|
|
elif orig_upper == "OP":
|
|
max_postes = "5"
|
|
|
|
ini_lines.append(f"[{r_name}]")
|
|
ini_lines.append(f"Roles={roles}")
|
|
ini_lines.append(f"MaxPostes={max_postes}")
|
|
ini_lines.append("")
|
|
|
|
ini_content = "\n".join(ini_lines).strip()
|
|
print(ini_content)
|
|
with open("salles.ini", "w", encoding="utf-8") as f:
|
|
f.write(ini_content)
|
|
|
|
|
|
|
|
```
|
|
|
|
```text
|
|
[Default]
|
|
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
|
|
|
|
[A003]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A006]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A007]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A_LSF]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B101]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B102]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B103]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B104]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B105]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B106]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B107]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B108]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B109]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B110]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B111]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B112]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B113]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B114]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B115]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B116]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B117]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B118]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B119]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B201]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B202]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B203]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B204]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B205]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B206]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B207]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B208]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B209]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B210]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B211]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B212]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B213]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B214]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B215]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B216]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B217]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B218]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B219]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_CDI]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=20
|
|
|
|
[B_Chapelle]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_FCPE]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_Musique]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_Permanence]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_SDP]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=30
|
|
|
|
[B_TICE]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=10
|
|
|
|
[D001]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D002]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D003]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D004]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D005]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D006]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D007]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D008]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D009]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D010]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D011]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D101]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D102]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D103]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D104]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D105]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D106]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D107]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D108]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D109]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D110]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D111]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D112]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D113]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D114]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D115]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D116]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D_Polyvalente]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
|
|
```
|
|
|
|
[Default]
|
|
Salles=A003,A006,A007,A_LSF,B101,B102,B103,B104,B105,B106,B107,B108,B109,B110,B111,B112,B113,B114,B115,B116,B117,B118,B119,B201,B202,B203,B204,B205,B206,B207,B208,B209,B210,B211,B212,B213,B214,B215,B216,B217,B218,B219,B_CDI,B_Chapelle,B_FCPE,B_Musique,B_Permanence,B_SDP,B_TICE,D001,D002,D003,D004,D005,D006,D007,D008,D009,D010,D011,D101,D102,D103,D104,D105,D106,D107,D108,D109,D110,D111,D112,D113,D114,D115,D116,D_Polyvalente
|
|
|
|
[A003]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A006]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A007]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[A_LSF]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B101]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B102]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B103]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B104]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B105]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B106]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B107]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B108]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B109]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B110]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B111]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B112]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B113]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B114]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B115]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B116]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B117]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B118]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B119]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B201]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B202]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B203]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B204]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B205]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B206]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B207]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B208]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B209]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B210]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B211]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B212]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B213]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B214]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B215]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B216]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B217]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B218]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B219]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_CDI]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=20
|
|
|
|
[B_Chapelle]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_FCPE]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_Musique]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_Permanence]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[B_SDP]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=30
|
|
|
|
[B_TICE]
|
|
Roles=Prof,Eleve
|
|
MaxPostes=10
|
|
|
|
[D001]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D002]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D003]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D004]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D005]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D006]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D007]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D008]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D009]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D010]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D011]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D101]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D102]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D103]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D104]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D105]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D106]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D107]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D108]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D109]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D110]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D111]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D112]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D113]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D114]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D115]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D116]
|
|
Roles=Eleve
|
|
MaxPostes=30
|
|
|
|
[D_Polyvalente]
|
|
Roles=Eleve
|
|
MaxPostes=30 |