partsdb

electronic parts inventory
git clone https://git.e1e0.net/partsdb.git
Log | Files | Refs | README | LICENSE

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:
Mpartsdb/exports/__init__.py | 30+++++++++++++++++++++++++++++-
Mpartsdb/partsdb.py | 15++++++++++-----
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: