def commandCompositeAdd(args, session): invoice = beginRowCommand(args, session) row = CompositeRow() row.index = getNextRowIndex(invoice) row.invoice = invoice row.title = args.title if args.vat: row.vat = args.vat else: row.vat = getSetting(session, 'default-vat') dieIf(not row.vat, "default-vat is not set and no VAT was provided.") if args.note: row.note = args.note if args.external_source: row.external_source = args.external_source if args.external_id: row.external_id = args.external_id if args.external_source and args.external_id: query = (session.query(Row) .filter_by(external_source=args.external_source) .filter_by(external_id=args.external_id)) dieIf(query.first(), 'External id already exists.') session.add(row) session.commit() if args.json: jsonPrintRow(row) else: print("Added row '" + str(row.index) + "'.")
def commandSubrowGet(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, CompositeRow) subrow = findSubrow(row, args.subrow_index) dieIf(not hasattr(subrow, args.setting_name), "Setting '" + args.setting_name + "' not found.") print(getattr(subrow, args.setting_name))
def commandSubrowAdd(args, session): invoice = beginRowCommand(args, session) subrow = Subrow() subrow.row = findRow(args, invoice, session, type=CompositeRow) # Note: Indexing starts from one here. Setting subrow.row in the previous # statement causes its insertion in subrow.row.subrows. subrow.index = len(subrow.row.subrows) subrow.title = args.title subrow.num_units = args.num_units subrow.price_per_unit = args.price_per_unit if args.note: subrow.note = args.note if args.external_source: subrow.external_source = args.external_source if args.external_id: subrow.external_id = args.external_id if args.external_source and args.external_id: query = (session.query(Subrow) .filter_by(external_source=args.external_source) .filter_by(external_id=args.external_id)) dieIf(query.first(), 'External id already exists.') session.add(subrow) session.commit() print("Added subrow '" + str(subrow.index) + "'.")
def commandCompositeRemove(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, CompositeRow) session.delete(row) session.commit() print("Deleted row '" + str(row.index) + "'.")
def commandSubrowRemove(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, CompositeRow) subrow = findSubrow(row, args.subrow_index) session.delete(subrow) session.commit() print("Deleted subrow '" + str(subrow.index) + "'.")
def commandRowSet(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, type=None) dieIf(not hasattr(row, args.setting_name), "Setting '" + args.setting_name + "' does not exist.") setattr(row, args.setting_name, args.setting_value) session.commit() print("Updated row '" + str(row.index) + "'.")
def commandSubrowSet(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, CompositeRow) subrow = findSubrow(row, args.subrow_index) dieIf(not hasattr(subrow, args.setting_name), "Setting '" + args.setting_name + "' not found.") setattr(subrow, args.setting_name, args.setting_value) session.commit() print('Updated subrow ' + str(subrow.index) + ' of row ' + str(row.index) + ' of invoice ' + str(invoice.invoice_number) + '.')
def commandCompositeShow(args, session): invoice = beginRowCommand(args, session) row = findRow(args, invoice, session, CompositeRow) table = PrettyTable(['N', 'Title', 'Price per unit', 'Num units', 'Total']) for subrow in row.subrows: table.add_row([ subrow.index, subrow.title, subrow.price_per_unit, subrow.num_units, Decimal(subrow.price_per_unit) * Decimal(subrow.num_units), ]) print(table)
def commandSubrowMv(args, session): invoice = beginRowCommand(args, session) srcRow = invoice.rows[int(args.src_row_index) - 1] dstRow = invoice.rows[int(args.dst_row_index) - 1] if srcRow == dstRow: print('Source and destination are the same row.') print('Nothing done.') return subrow = findSubrow(srcRow, args.subrow_index) subrow.row_id = dstRow.id subrow.index = len(dstRow.subrows) + 1 session.commit() compressIndices(session, Subrow, row_id=srcRow.id) session.commit()
def commandCompositeMerge(args, session): invoice = beginRowCommand(args, session) sourceRow = invoice.rows[int(args.source_index) - 1] targetRow = invoice.rows[int(args.target_index) - 1] dieIf(not isinstance(sourceRow, CompositeRow), "Source row is not a composite row."); dieIf(not isinstance(targetRow, CompositeRow), "Target row is not a composite row."); dieIf(sourceRow == targetRow, "Source and target rows cannot be the same row.") subrows = sourceRow.subrows[:] for subrow in subrows: subrow.row = targetRow session.delete(sourceRow); session.commit(); compressIndices(session, Subrow, row_id=targetRow.id) compressIndices(session, Row, invoice_id=invoice.id) session.commit();
def commandRowGet(args, session): invoice = beginRowCommand(args, session, readonly=True) row = findRow(args, invoice, session, type=None) dieIf(not hasattr(row, args.setting_name), "Setting '" + args.setting_name + "' does not exist.") print(getattr(row, args.setting_name))