diff --git a/cntmanage/flightslot/actions/exportweek.py b/cntmanage/flightslot/actions/exportweek.py index 7c80cc3..66fb991 100644 --- a/cntmanage/flightslot/actions/exportweek.py +++ b/cntmanage/flightslot/actions/exportweek.py @@ -10,7 +10,7 @@ from typing import List from ..models.weekpref import WeekPreference from ..models.missions import Training -from ..models.hourbuildings import HourBuilding, HourBuildingLegFlight, HourBuildingLegStop +from ..models.hourbuildings import HourBuilding, HourBuildingLegFlight, HourBuildingLegStop, HourBuildingLegBase def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> HttpResponse: @@ -41,7 +41,7 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> # Header titles days = [f"{datetime.strptime(f"{year} {week} {x}", "%G %V %u").strftime("%A")} {datetime.strptime(f"{year} {week} {x}", "%G %V %u").day}" for x in range(1,8)] - headers = ["Week", "Student", "Course", *days, "Cell.", "Mail", "Notes"] + headers = ["Week", "Student", "Course", *days, "Notes", "Cell.", "Mail"] # Header fields positions week_index: int = headers.index("Week") + 1 @@ -60,6 +60,8 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> # Cell styles border_thick: Side = Side(style='thick', color='000000') border_bottom: Border = Border(bottom=border_thick) + border_left: Border = Border(left=border_thick) + border_right: Border = Border(right=border_thick) border_all: Border = Border(bottom=border_thick, top=border_thick, left=border_thick, right=None) # Scrittura header @@ -102,12 +104,11 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> mission_name if t.sunday else "" ] mission_notes = t.notes if t.notes else "--" - mission_data.append([str(q.week), *student_data, *mission_days, student_phone, student_email, mission_notes]) + mission_data.append([str(q.week), *student_data, *mission_days, mission_notes, student_phone, student_email, ]) # Fill HourBuilding rows hb_name: str hb_days: List[str] - hb_notes: str hb_data: List[List[str]] = [] for h in HourBuilding.objects.filter(weekpref = q.id): hb_name = f"HB-{h.aircraft}\nVedi Note ->" @@ -120,12 +121,14 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> hb_name if h.saturday else "", hb_name if h.sunday else "" ] - hb_notes = f"{h.notes}\n----\n" if h.notes else "" - hb_legs = HourBuildingLegFlight.objects.filter(hb_id = h.id) - #for hh in hb_legs: - # hb_notes += f"{hh.departure} -> {hh.destination} [{hh.time}]\n" if not hh.stop else f"STOP at {hh.departure} [{hh.time}]\n" - hb_notes.strip('\n') - hb_data.append([str(q.week), *student_data, *hb_days, str(q.student.phone), q.student.email, hb_notes]) + hb_notes: List[str] = [f"{h.notes}", "---"] if h.notes else [] + hb_legs_all = HourBuildingLegBase.objects.filter(hb_id = h.id) + for hh in hb_legs_all: + if isinstance(hh, HourBuildingLegFlight): + hb_notes.append(f"{hh.departure} -> {hh.destination} [{hh.time}]") + elif isinstance(hh, HourBuildingLegStop): + hb_notes.append(f"STOP [{hh.time}] {"Refuel" if hh.refuel else ""}" ) + hb_data.append([str(q.week), *student_data, *hb_days, "\n".join(hb_notes), str(q.student.phone), q.student.email]) # Build rows for table all_data: List[List[str]] = mission_data + hb_data @@ -164,9 +167,16 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> # End week preferences for this student student_end: int = row + row_offset -1 + # Add thick border to the last cell row of this student + for i in range(course_index, len(all_data[0])+1): + ws.cell(row=student_end, column=i).border = border_bottom + if i == len(all_data[0]): + for j in range(student_start, student_end + 1): + ws.cell(row=j, column=i).border += border_right + # Merge Week, thick border - # ws.cell(row=student_start, column=week_index).border = border_all - # ws.merge_cells(start_row=student_start, end_row=student_end, start_column=week_index, end_column=week_index) + #ws.cell(row=student_start, column=week_index).border = border_bottom + #ws.merge_cells(start_row=student_start, end_row=student_end, start_column=week_index, end_column=week_index) # Merge Name, thick border ws.cell(row=student_start, column=student_index).border = border_all ws.merge_cells(start_row=student_start, end_row=student_end, start_column=student_index, end_column=student_index) @@ -177,10 +187,6 @@ def export_selected(request: HttpRequest, queryset: QuerySet[WeekPreference]) -> # Merge Mail ws.merge_cells(start_row=student_start, end_row=student_end, start_column=mail_index, end_column=mail_index) - # Add thick border to the last cell row of this student - for i in range(course_index, len(all_data[0])+1): - ws.cell(row=student_end, column=i).border = border_bottom - # Keep the largest column for column_cells in ws.columns: length: int = max(len(str(cell.value)) for cell in column_cells) diff --git a/cntmanage/flightslot/models/hourbuildings.py b/cntmanage/flightslot/models/hourbuildings.py index e9e1e5b..3de50e6 100644 --- a/cntmanage/flightslot/models/hourbuildings.py +++ b/cntmanage/flightslot/models/hourbuildings.py @@ -114,14 +114,14 @@ class HourBuildingLegFlight(HourBuildingLegBase): verbose_name = "Flight leg" verbose_name_plural = "Flight legs" - def __str__(self): - return f"{self.departure} -> {self.destination}" - def save(self, *args, **kwargs): self.departure = self.departure.upper().strip() self.destination = self.destination.upper().strip() super().save(*args, **kwargs) + def __str__(self): + return f"{self.departure} -> {self.destination}" + class HourBuildingLegStop(HourBuildingLegBase): refuel = models.BooleanField(