Exemple #1
0
def commandInvoiceAdd(args, session):
    dieIf(not isConfigurationValid(session), "Cannot execute invoicing commands with incomplete configuration.")

    invoice = Invoice()

    if args.client_handle:
        client = getClientByHandle(args.client_handle, session)
    else:
        clientId = getSetting(session, "default-client")
        dieIf(not clientId, "Default client is not set and no --client-handle was set.")
        client = session.query(Client).filter_by(id=clientId).first()

    dieIf(not client, "Default client not set and no --client-handle was set.")

    initializeClientFields(client, invoice)

    initializeSellerFields(session, invoice)

    # Date
    if args.date:
        date = parseDate(args.date)
    else:
        date = datetime.now()

    invoice.date = date

    if args.duedate:
        duedate = parseDate(args.duedate)
    elif args.duedays:
        duedate = date + timedelta(days=int(args.duedays))
    else:
        duedays = getSetting(session, "default-due-days")
        dieIf(not duedays, "Due date not specified and no default-due-days.")
        duedate = date + timedelta(days=int(duedays))

    invoice.due_date = duedate

    # Invoice number
    if args.invoice_number:
        invoice.invoice_number = args.invoice_number
    else:
        invoice.invoice_number = getNextInvoiceNumberAndIncrement(session)

    # Reference
    invoice.reference = getReference(invoice.invoice_number, invoice.client_number)

    invoice.time_added = datetime.now()

    session.add(invoice)
    session.commit()

    if args.json:
        _jsonPrintInvoice(invoice)
    else:
        print("Invoice created with number " + str(invoice.invoice_number) + ".")
Exemple #2
0
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) + "'.")
Exemple #3
0
def commandInvoiceGenerate(args, session):
    if args.template:
        template = args.template
    else:
        template = getSetting(session, "default-invoice-template")
        lokki_dir = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
        template = lokki_dir + "/" + template

    dieIf(not template, "No --template provided and default-invoice-template not set.")

    invoice = findInvoice(session, args)

    templateArguments = _getTemplateArguments(invoice)
    templateArguments["show_details"] = not args.hide_details and len(templateArguments["composite_rows"])

    with open(template, "r") as template:
        templateString = template.read()

    renderedInvoice = pystache.render(templateString, templateArguments)

    if args.filename:
        targetPath = args.filename
    else:
        targetFilenameTemplate = getSetting(session, "invoice-filename-template")
        targetPath = pystache.render(targetFilenameTemplate, templateArguments)

    targetPath = os.path.normpath(targetPath)

    templateArguments["output_path"] = targetPath
    templateArguments["output_basename"] = os.path.basename(targetPath)
    (templateArguments["output_path_no_ext"], templateArguments["output_path_ext"]) = os.path.splitext(targetPath)

    with open(targetPath, "w") as output:
        output.write(renderedInvoice)

    triggerEvent(session, "generate", templateArguments)