dev export only selected
This commit is contained in:
parent
43b62efe2f
commit
026a51f9a8
@ -186,10 +186,12 @@ class Recipe_Selection(Widget):
|
|||||||
if session.is_admin:
|
if session.is_admin:
|
||||||
self.import_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().import_recipes())
|
self.import_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().import_recipes())
|
||||||
self.export_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes())
|
self.export_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes())
|
||||||
|
self.export_selected_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes(selected_only=True))
|
||||||
self.delete_all_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().delete_recipes())
|
self.delete_all_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().delete_recipes())
|
||||||
else:
|
else:
|
||||||
self.import_b.setVisible(False)
|
self.import_b.setVisible(False)
|
||||||
self.export_b.setVisible(False)
|
self.export_b.setVisible(False)
|
||||||
|
self.export_selected_b.setVisible(False)
|
||||||
self.delete_all_b.setVisible(False)
|
self.delete_all_b.setVisible(False)
|
||||||
|
|
||||||
# TESTING
|
# TESTING
|
||||||
@ -240,6 +242,7 @@ class Recipe_Selection(Widget):
|
|||||||
# Update button visibility
|
# Update button visibility
|
||||||
self.import_b.setVisible(has_admin)
|
self.import_b.setVisible(has_admin)
|
||||||
self.export_b.setVisible(has_admin)
|
self.export_b.setVisible(has_admin)
|
||||||
|
self.export_selected_b.setVisible(has_admin)
|
||||||
self.delete_all_b.setVisible(has_admin)
|
self.delete_all_b.setVisible(has_admin)
|
||||||
|
|
||||||
# Connect or disconnect button handlers
|
# Connect or disconnect button handlers
|
||||||
@ -253,6 +256,10 @@ class Recipe_Selection(Widget):
|
|||||||
self.export_b.clicked.disconnect()
|
self.export_b.clicked.disconnect()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
try:
|
||||||
|
self.export_selected_b.clicked.disconnect()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
try:
|
try:
|
||||||
self.delete_all_b.clicked.disconnect()
|
self.delete_all_b.clicked.disconnect()
|
||||||
except:
|
except:
|
||||||
@ -261,6 +268,7 @@ class Recipe_Selection(Widget):
|
|||||||
# Connect handlers
|
# Connect handlers
|
||||||
self.import_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().import_recipes())
|
self.import_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().import_recipes())
|
||||||
self.export_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes())
|
self.export_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes())
|
||||||
|
self.export_selected_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().export_recipes(selected_only=True))
|
||||||
self.delete_all_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().delete_recipes())
|
self.delete_all_b.clicked.connect(lambda checked, selfi=weakref.ref(self): selfi().delete_recipes())
|
||||||
|
|
||||||
# Update CRUD readonly status
|
# Update CRUD readonly status
|
||||||
@ -389,10 +397,34 @@ class Recipe_Selection(Widget):
|
|||||||
self.crud.refresh()
|
self.crud.refresh()
|
||||||
|
|
||||||
# EXPORT RECIPES TABLE TO CSV FILE
|
# EXPORT RECIPES TABLE TO CSV FILE
|
||||||
def export_recipes(self, csv_path=None, base_dir=None):
|
def export_recipes(self, csv_path=None, base_dir=None, selected_only=False):
|
||||||
"""
|
"""
|
||||||
Export recipes to a CSV file. Opens a dialog for saving if no path is provided.
|
Export recipes to a CSV file. Opens a dialog for saving if no path is provided.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
csv_path (str, optional): Path to save the CSV file. If None, a dialog will open.
|
||||||
|
base_dir (str, optional): Base directory for saving the file. If None, a default is used.
|
||||||
|
selected_only (bool, optional): If True, export only selected recipes. Default is False.
|
||||||
"""
|
"""
|
||||||
|
# Check if we should export only selected recipes
|
||||||
|
if selected_only:
|
||||||
|
# Get selected rows
|
||||||
|
selected_rows = self.crud.get_selected_rows()
|
||||||
|
if not selected_rows:
|
||||||
|
QMessageBox.information(self, "Esportazione ricette", "Nessuna ricetta selezionata.")
|
||||||
|
return
|
||||||
|
# Ask for confirmation
|
||||||
|
ret = QMessageBox.question(
|
||||||
|
self,
|
||||||
|
"Esportazione ricette selezionate",
|
||||||
|
f"Vuoi esportare solo le {len(selected_rows)} ricette selezionate?",
|
||||||
|
QMessageBox.Yes | QMessageBox.No,
|
||||||
|
QMessageBox.Yes
|
||||||
|
)
|
||||||
|
if ret == QMessageBox.No:
|
||||||
|
# User chose not to export only selected recipes
|
||||||
|
selected_only = False
|
||||||
|
|
||||||
base_dir = base_dir or self._get_base_dir() # Use base directory or default
|
base_dir = base_dir or self._get_base_dir() # Use base directory or default
|
||||||
|
|
||||||
if csv_path is None:
|
if csv_path is None:
|
||||||
@ -478,7 +510,25 @@ class Recipe_Selection(Widget):
|
|||||||
"labeltxt_4",
|
"labeltxt_4",
|
||||||
"labeltxt_5",
|
"labeltxt_5",
|
||||||
]
|
]
|
||||||
for recipe in list(Recipes.select()):
|
|
||||||
|
# Get the selected recipe IDs if we're exporting only selected recipes
|
||||||
|
selected_recipe_ids = []
|
||||||
|
if selected_only:
|
||||||
|
selected_rows = self.crud.get_selected_rows()
|
||||||
|
for row in selected_rows:
|
||||||
|
# Adjust row index to match data_index (row - 1 because row 0 is the filter row)
|
||||||
|
row_idx = row - 1
|
||||||
|
if 0 <= row_idx < len(self.crud.data_index):
|
||||||
|
recipe_id = self.crud.data_index[row_idx]
|
||||||
|
if recipe_id is not None:
|
||||||
|
selected_recipe_ids.append(recipe_id)
|
||||||
|
|
||||||
|
# Get all recipes or only selected ones
|
||||||
|
recipes_query = Recipes.select()
|
||||||
|
if selected_only and selected_recipe_ids:
|
||||||
|
recipes_query = recipes_query.where(Recipes.id.in_(selected_recipe_ids))
|
||||||
|
|
||||||
|
for recipe in list(recipes_query):
|
||||||
steps = recipe.get_steps_map()
|
steps = recipe.get_steps_map()
|
||||||
exportable = {
|
exportable = {
|
||||||
recipe_name_field: recipe.name,
|
recipe_name_field: recipe.name,
|
||||||
@ -533,6 +583,7 @@ class Recipe_Selection(Widget):
|
|||||||
"printer_selection": steps.get("print",Step()).spec.get("printer_selection",""),
|
"printer_selection": steps.get("print",Step()).spec.get("printer_selection",""),
|
||||||
}
|
}
|
||||||
data.append(exportable)
|
data.append(exportable)
|
||||||
|
|
||||||
if len(data):
|
if len(data):
|
||||||
self.log.info(f"recipes: exporting recipes to {csv_path}")
|
self.log.info(f"recipes: exporting recipes to {csv_path}")
|
||||||
with open(csv_path, "w", newline="") as f:
|
with open(csv_path, "w", newline="") as f:
|
||||||
|
|||||||
@ -7,7 +7,7 @@
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>985</width>
|
<width>985</width>
|
||||||
<height>201</height>
|
<height>198</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="minimumSize">
|
<property name="minimumSize">
|
||||||
@ -32,7 +32,10 @@
|
|||||||
<property name="bottomMargin">
|
<property name="bottomMargin">
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item row="2" column="2">
|
<item row="0" column="0" colspan="4">
|
||||||
|
<widget class="QWidget" name="crud_w" native="true"/>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="3">
|
||||||
<widget class="QPushButton" name="delete_all_b">
|
<widget class="QPushButton" name="delete_all_b">
|
||||||
<property name="font">
|
<property name="font">
|
||||||
<font>
|
<font>
|
||||||
@ -44,46 +47,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="0" colspan="3">
|
<item row="1" column="0" colspan="4" alignment="Qt::AlignHCenter">
|
||||||
<widget class="QWidget" name="crud_w" native="true"/>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QPushButton" name="import_b">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>16</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Importa ricette da file CSV</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="1">
|
|
||||||
<widget class="QPushButton" name="export_b">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="font">
|
|
||||||
<font>
|
|
||||||
<pointsize>16</pointsize>
|
|
||||||
</font>
|
|
||||||
</property>
|
|
||||||
<property name="text">
|
|
||||||
<string>Esporta ricette su file CSV</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0" colspan="3" alignment="Qt::AlignHCenter">
|
|
||||||
<widget class="QPushButton" name="select_b">
|
<widget class="QPushButton" name="select_b">
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||||
@ -119,6 +83,60 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0">
|
||||||
|
<widget class="QPushButton" name="export_selected_b">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Esporta ricette selezionate</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="1">
|
||||||
|
<widget class="QPushButton" name="export_b">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Esporta tutte le ricette</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QPushButton" name="import_b">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>16</pointsize>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Importa ricette da file CSV</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user