commit 47d6d147c08c11e1a64ad888841908c7bce075cd
parent dc4f7c304c10374c092048d3b13d3eea29779234
Author: Paco Esteban <paco@e1e0.net>
Date: Sat, 7 Oct 2023 20:12:41 +0200
add export to excel functionality
This is so I can create batch labels with the new label printer.
Diffstat:
2 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/partsdb/exports/__init__.py b/partsdb/exports/__init__.py
@@ -1,10 +1,13 @@
import os
from jinja2 import Environment, PackageLoader, select_autoescape
+from openpyxl import Workbook
from partsdb import database as pdb
from partsdb import helpers
+BASE_URL = "https://e1e0.net/partsdb"
+
db = pdb.PartsDB(
os.getenv("PARTSDB_FILE", f"{os.getenv('HOME')}/.local/share/partsdb/parts.db")
)
@@ -37,4 +40,29 @@ def export_to_html(dest_folder):
def export_to_excel(dest_folder="."):
- pass
+ workbook = Workbook()
+ sheet = workbook.active
+
+ sheet["A1"] = "Name"
+ sheet["B1"] = "URL"
+ a = 2
+
+ storages = db.get_storages()
+ for s in storages:
+ url = f"{BASE_URL}/storage_{s[0]}.html"
+ name = s[1]
+ sheet.cell(row=a, column=1).value = name
+ sheet.cell(row=a, column=2).value = url
+ a += 1
+
+ workbook.save(filename=f"{dest_folder}/locations.xlsx")
+
+ parts = db.list_parts()
+ for p in parts:
+ url = f"{BASE_URL}/part_{p[0]}.html"
+ name = p[1]
+ sheet.cell(row=a, column=1).value = name
+ sheet.cell(row=a, column=2).value = url
+ a += 1
+
+ workbook.save(filename=f"{dest_folder}/parts.xlsx")
diff --git a/partsdb/partsdb.py b/partsdb/partsdb.py
@@ -176,10 +176,6 @@ def adjust_stock(part_id, stock_mod, comment):
db.update_part_qty(part_id, stock_mod)
-def export_db(dest_folder):
- exports.export_to_html(dest_folder)
-
-
def list_categories():
categories = db.get_categories()
print("ID\tName")
@@ -262,6 +258,12 @@ def main():
ap_stock.add_argument("comment", help="Reason for the stock mod")
# export
ap_export = asp.add_parser("export", help="Exports DB to HTML")
+ ap_export.add_argument(
+ "-x",
+ dest="to_excel",
+ action="store_true",
+ help="Export to Excel. Only parts and storages (default is to HTML)",
+ )
ap_export.add_argument("dest_folder", help="Destination folder")
args = ap.parse_args()
@@ -286,7 +288,10 @@ def main():
elif args.command == "stock":
adjust_stock(args.part_id, args.stock_mod, args.comment)
elif args.command == "export":
- export_db(args.dest_folder)
+ if args.to_excel:
+ exports.export_to_excel(args.dest_folder)
+ else:
+ exports.export_to_html(args.dest_folder)
elif args.command == "cat":
list_categories()
else: