فهرست منبع

Fixed bug, where deleted printer was not removed from maintenance

maziggy 8 ماه پیش
والد
کامیت
508116e5b7
4فایلهای تغییر یافته به همراه19 افزوده شده و 1 حذف شده
  1. 16 0
      backend/app/api/routes/printers.py
  2. 2 0
      frontend/src/pages/PrintersPage.tsx
  3. 0 0
      static/assets/index-BSqss_Fl.js
  4. 1 1
      static/index.html

+ 16 - 0
backend/app/api/routes/printers.py

@@ -117,7 +117,10 @@ async def delete_printer(
         delete_archives: If True (default), delete all print archives for this printer.
         delete_archives: If True (default), delete all print archives for this printer.
                         If False, keep archives but remove their printer association.
                         If False, keep archives but remove their printer association.
     """
     """
+    from sqlalchemy import delete as sql_delete
+
     from backend.app.models.archive import PrintArchive
     from backend.app.models.archive import PrintArchive
+    from backend.app.models.maintenance import MaintenanceHistory, PrinterMaintenance
 
 
     result = await db.execute(select(Printer).where(Printer.id == printer_id))
     result = await db.execute(select(Printer).where(Printer.id == printer_id))
     printer = result.scalar_one_or_none()
     printer = result.scalar_one_or_none()
@@ -132,6 +135,19 @@ async def delete_printer(
 
 
         await db.execute(update(PrintArchive).where(PrintArchive.printer_id == printer_id).values(printer_id=None))
         await db.execute(update(PrintArchive).where(PrintArchive.printer_id == printer_id).values(printer_id=None))
 
 
+    # Delete maintenance history and items for this printer
+    # (SQLite doesn't enforce FK cascades, so do it explicitly)
+    maintenance_ids = (
+        (await db.execute(select(PrinterMaintenance.id).where(PrinterMaintenance.printer_id == printer_id)))
+        .scalars()
+        .all()
+    )
+    if maintenance_ids:
+        await db.execute(
+            sql_delete(MaintenanceHistory).where(MaintenanceHistory.printer_maintenance_id.in_(maintenance_ids))
+        )
+        await db.execute(sql_delete(PrinterMaintenance).where(PrinterMaintenance.printer_id == printer_id))
+
     await db.delete(printer)
     await db.delete(printer)
     await db.commit()
     await db.commit()
 
 

+ 2 - 0
frontend/src/pages/PrintersPage.tsx

@@ -1034,6 +1034,7 @@ function PrinterCard({
     onSuccess: () => {
     onSuccess: () => {
       queryClient.invalidateQueries({ queryKey: ['printers'] });
       queryClient.invalidateQueries({ queryKey: ['printers'] });
       queryClient.invalidateQueries({ queryKey: ['archives'] });
       queryClient.invalidateQueries({ queryKey: ['archives'] });
+      queryClient.invalidateQueries({ queryKey: ['maintenanceOverview'] });
     },
     },
   });
   });
 
 
@@ -3674,6 +3675,7 @@ export function PrintersPage() {
     mutationFn: api.createPrinter,
     mutationFn: api.createPrinter,
     onSuccess: () => {
     onSuccess: () => {
       queryClient.invalidateQueries({ queryKey: ['printers'] });
       queryClient.invalidateQueries({ queryKey: ['printers'] });
+      queryClient.invalidateQueries({ queryKey: ['maintenanceOverview'] });
       setShowAddModal(false);
       setShowAddModal(false);
     },
     },
   });
   });

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
static/assets/index-BSqss_Fl.js


+ 1 - 1
static/index.html

@@ -23,7 +23,7 @@
 
 
     <!-- Splash screens for iOS -->
     <!-- Splash screens for iOS -->
     <link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
     <link rel="apple-touch-startup-image" href="/img/android-chrome-512x512.png" />
-    <script type="module" crossorigin src="/assets/index-CLcf9MNg.js"></script>
+    <script type="module" crossorigin src="/assets/index-BSqss_Fl.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-CrUIX1oi.css">
     <link rel="stylesheet" crossorigin href="/assets/index-CrUIX1oi.css">
   </head>
   </head>
   <body>
   <body>

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است