↶ Back to Rechnungstellung

at_rechnungstellung – User and administrator manual

Version 1.1.0 · Redmine 5.1 and 6 · GPLv2

This manual covers installation, configuration and daily use of the atori invoicing plugin.


1. Overview

The plugin adds customer master data, draft-to-paid invoice workflow, ZUGFeRD 2.x-compliant PDF output and payment tracking to Redmine. Invoices are independent of Redmine's project and issue models, but individual invoice items can reference approved TimeEntry records to build billable line items straight from tracked hours.

Key concepts:


2. Requirements


3. Installation

From a release archive

cd /path/to/redmine
unzip at_rechnungstellung-1.2.0.zip -d plugins/
bundle install
bundle exec rake redmine:plugins:migrate NAME=at_rechnungstellung RAILS_ENV=production
# restart Redmine

bundle install is required here because the plugin brings its own Gemfile declaring prawn and prawn-table.

From a git checkout

cd /path/to/redmine
git clone <repo-url> plugins/at_rechnungstellung
bundle install
bundle exec rake redmine:plugins:migrate NAME=at_rechnungstellung RAILS_ENV=production
# restart Redmine

Verifying the install

After restart, log in as administrator and open Administration → Plugins. The Rechnungstellung plugin should appear with version 1.1.0. Invoices and Customers entries should appear in the top navigation for users with the corresponding permissions.

Uninstall

cd /path/to/redmine
bundle exec rake redmine:plugins:migrate NAME=at_rechnungstellung VERSION=0 RAILS_ENV=production
rm -rf plugins/at_rechnungstellung
# restart Redmine

The rake task rolls back the plugin's migrations and drops its tables (customers, customer-project mapping, invoices, invoice items, time-entry links, payments). Core Redmine data is untouched.


4. Configuration

4.1 Plugin settings

Open Administration → Plugins → Rechnungstellung → Configure. The settings are grouped into four sections:

Issuer details – name, address, country, tax number, VAT ID, email, phone, website, bank details. These populate the header and footer of every generated PDF.

Invoice numbering – number format (e.g. RG-{YYYY}-{NNNN}), padding for the sequential counter, default currency, default VAT rate, default payment terms (in days).

PDF layout – logo position (left or right, configurable margin and width), colours (primary, secondary, title, total gross), font, table styling (zebra, border style, padding), DIN-5008 letter-head block, margins, free-form intro / thank-you / legal text.

E-mail dispatch – default subject and body templates, optional BCC address for the issuer's archive.

Settings live in a dedicated partial and are all form fields – no YAML or environment variables.

4.2 Grant permissions

Three independent global permissions are exposed:

PermissionScopeTypical role
View invoicesRead invoices and paymentsAccountant
Manage invoicesCreate, edit, issue, cancel, emailProject manager, accountant
Manage customersCRUD on customer master dataProject manager

All permissions are global (not per-project), matching how accounting typically operates across the organisation.

4.3 Verify the PDF layout with a demo invoice

At the bottom of the plugin settings page a Demo PDF section offers a download link that renders a sample invoice PDF using the current issuer details, logo, colors, number format and PDF-layout options. No real customer or invoice is created; the sample uses a fictional "Musterfirma GmbH" with three line items (two at the default VAT rate, one at 7%) to exercise typical table layout, thousands separators, and multi-rate totals.

Workflow:

  1. Change issuer details, colors, logo or layout options on the settings page.
  2. Save the settings (important — the demo uses saved values, not the current unsaved form state).
  3. Click Download demo invoice as PDF; the PDF opens in a new tab.
  4. If anything looks off, adjust the relevant settings and repeat.

The demo PDF is rendered through the same builder as real invoices, so what you see here is what customers will receive.


5. Usage

5.1 Creating a customer

Customers → New customer. Fill in name, address, country code (ISO 3166-1 alpha-2), optionally VAT ID, tax number and banking data. Assign one or more Redmine projects to enable their time entries to be pulled into invoices for this customer.

Choose the customer's e-invoice format: ZUGFeRD (default, B2B), XRechnung (for German public-sector recipients) or none (plain PDF only). For XRechnung customers, enter the Leitweg-ID – this is mandatory per the XRechnung specification and is validated on save.

5.2 Creating a draft invoice

Invoices → New invoice. Pick a customer; the issuer data is taken from the plugin settings. Add line items manually, or use From time entries to pull approved hours for a date range and a project. Items can mix sources freely – tracked hours alongside flat-fee manual lines.

Each item carries its own unit, unit price and VAT rate so mixed-rate invoices (e.g. 19% + 7% in Germany) produce correct totals without manual reconciliation.

5.3 Preview the PDF

Preview renders the PDF on the fly from the current draft without persisting. Useful for visual checks during editing. The preview is not numbered – number assignment happens only at issuance (see next).

5.4 Issue the invoice

Issue assigns the next invoice number according to the configured format, sets the state to issued, and finalises the document. Issued invoices are read-only: the underlying PDF and the invoice number become the commercial record. Changes require cancellation (see §5.7) and a new draft.

The e-invoice output matches the customer's configured format: ZUGFeRD customers receive a hybrid PDF plus a downloadable {number}-factur-x.xml; XRechnung customers receive a plain PDF plus a separate {number}-xrechnung.xml; none customers receive a plain PDF without any XML.

5.5 Email the invoice

Send by email opens a composer with the default subject and body pre-filled from settings. The PDF is attached automatically. An optional BCC to the issuer's archive mailbox is honoured. After sending, the sent_at timestamp is recorded.

5.6 Record a payment

New payment on the invoice page takes a date, amount and optional reference (bank transaction ID, cheque number). Partial payments move the invoice to partially_paid and reduce the open amount displayed on the invoice. A payment that closes the full amount transitions the invoice to paid.

Payments can be deleted to correct mistakes; the state is recalculated from the remaining payments.

5.7 Cancel an invoice

An issued invoice that turns out to be wrong is cancelled, not deleted. Cancel creates a reverse cancellation invoice with a new number and links it to the original. Both the original and the cancellation are preserved for the audit trail, and payment tracking reflects the zero balance after cancellation.

5.8 Overdue and reporting

The Invoices list has filters for open, overdue, paid, cancelled and date ranges. Overdue is computed from the invoice's due date relative to today. Export to CSV via the standard Redmine list export.


6. Troubleshooting

PDF rendering fails with "prawn not found" or similar. The plugin's Gemfile declares prawn and prawn-table. Run bundle install in the Redmine directory after installing the plugin, then restart the Redmine process.

Time entries don't appear when building from time. Verify that (1) the selected customer has the source project assigned under its master record, (2) the date range covers the entries, and (3) the entries are flagged as approved via the at_zeiterfassung plugin if approvals are enforced. Unapproved entries are excluded by design.

Invoice number not assigned. Invoice numbers are assigned at the issued transition, not on draft save. Check the state of the invoice – a draft shows "no number yet" and remains fully editable.

The recipient doesn't accept the e-invoice XML. Check the customer's e-invoice format first. Public-sector recipients in Germany typically require XRechnung (pure XML, Leitweg-ID validated) – not ZUGFeRD. Private recipients generally accept ZUGFeRD (hybrid PDF/A-3 with embedded EN-16931 XML). Switch the customer's format to match the recipient's requirement and re-issue. If a specific profile variant is demanded (Factur-X Basic, EN 16931 Comfort, XRechnung-CII) and the output is rejected, report back with the recipient's exact specification – we will verify profile conformance.

XRechnung customer refuses to save: "Leitweg-ID can't be blank". The Leitweg-ID is mandatory for customers whose e-invoice format is set to XRechnung. Enter the Leitweg-ID as communicated by the public-sector recipient, or change the format to ZUGFeRD or none if XRechnung is not actually required.

Logo placement or colours don't apply. Plugin settings are cached. Restart the Redmine process or clear the Rails cache after changing PDF-layout settings. Logo paths are resolved relative to the Redmine root; symlink or copy the image into a stable location before referencing it.

Email dispatch fails. Redmine's standard mailer settings are used (config/configuration.ymlemail_delivery). If Redmine's issue notifications work but invoice emails don't, check for attachment size limits on the outbound SMTP server – invoice PDFs with rich layouts can exceed a few hundred KB.


7. Support

Support is included for twelve months from the date of purchase.

E-mail: support@atori.de Initial response: within 48 hours on business days.

When reporting issues, please include: