commit b7d4cf429f291bf3f70f112854c3ab65083d4c15 Author: Martin Rattensberger Date: Mon Aug 7 08:01:16 2023 +0200 Initialer commit diff --git a/Allgemein/AGB-1_Vorlage.pdf b/Allgemein/AGB-1_Vorlage.pdf new file mode 100644 index 0000000..2c85f75 Binary files /dev/null and b/Allgemein/AGB-1_Vorlage.pdf differ diff --git a/Allgemein/AGB.docx b/Allgemein/AGB.docx new file mode 100644 index 0000000..a6bcffc Binary files /dev/null and b/Allgemein/AGB.docx differ diff --git a/Allgemein/AGB.pdf b/Allgemein/AGB.pdf new file mode 100644 index 0000000..ae0629b Binary files /dev/null and b/Allgemein/AGB.pdf differ diff --git a/Allgemein/Adressetiketten.docx b/Allgemein/Adressetiketten.docx new file mode 100644 index 0000000..cb1d1e1 Binary files /dev/null and b/Allgemein/Adressetiketten.docx differ diff --git a/Allgemein/Angebot.dotx b/Allgemein/Angebot.dotx new file mode 100644 index 0000000..70a1c9e Binary files /dev/null and b/Allgemein/Angebot.dotx differ diff --git a/Allgemein/Angebot_Vorlage.pdf b/Allgemein/Angebot_Vorlage.pdf new file mode 100644 index 0000000..7e8799f Binary files /dev/null and b/Allgemein/Angebot_Vorlage.pdf differ diff --git a/Allgemein/Avery-Zweckform_3474.doc b/Allgemein/Avery-Zweckform_3474.doc new file mode 100644 index 0000000..f1ee39d Binary files /dev/null and b/Allgemein/Avery-Zweckform_3474.doc differ diff --git a/Allgemein/Briefpapier_Vorlage.docx b/Allgemein/Briefpapier_Vorlage.docx new file mode 100644 index 0000000..7bc3d6b Binary files /dev/null and b/Allgemein/Briefpapier_Vorlage.docx differ diff --git a/Allgemein/Briefpapier_Vorlage.pdf b/Allgemein/Briefpapier_Vorlage.pdf new file mode 100644 index 0000000..d845e6a Binary files /dev/null and b/Allgemein/Briefpapier_Vorlage.pdf differ diff --git a/Kimai2/Rechnung_ABG.docx b/Kimai2/Rechnung_ABG.docx new file mode 100644 index 0000000..b3a2746 Binary files /dev/null and b/Kimai2/Rechnung_ABG.docx differ diff --git a/Kimai2/Rechnung_ABG_test.docx b/Kimai2/Rechnung_ABG_test.docx new file mode 100644 index 0000000..70a13c6 Binary files /dev/null and b/Kimai2/Rechnung_ABG_test.docx differ diff --git a/Kimai2/groupedByProjects-TEST.pdf.twig b/Kimai2/groupedByProjects-TEST.pdf.twig new file mode 100644 index 0000000..d62e0a1 --- /dev/null +++ b/Kimai2/groupedByProjects-TEST.pdf.twig @@ -0,0 +1,683 @@ +{%- set filename = invoice['invoice.date']|date('Y-m-d') ~ '_' ~ invoice['invoice.number']|replace({'/' : '-'}) ~ '_' ~ invoice['customer.company']|default(invoice['customer.name'])|replace({' ' : '-'}) -%} +{%- set option = pdfContext.setOption('filename', filename) -%} +{%- set option = pdfContext.setOption('format', 'A4-P') -%} + +{% set company = 'Martin Rattensberger' %} +{% set tagline = 'IT Services' %} +{% set weiss = '#FFFFFF' %} +{% set hintergrund = '#576F80' %} +{% set highlight = '#D4EFFC' %} +{% set suppress = '#576F80' %} +{% set logoUrl = config('theme.branding.logo') %} + +{% set groupByMaxProjects = 50 %} + +{% if logoUrl is empty %} +{% set logoUrl = 'https://kimai.rattensberger.com/bilder/logo/martin_rattensberger_gr.png' %} +{% endif %} + +{%- set setAutoTopMargin = pdfContext.setOption('setAutoTopMargin', false) -%} +{%- set setAutoBottomMargin = pdfContext.setOption('setAutoBottomMargin', false) -%} +{%- set marginBottom = pdfContext.setOption('margin_bottom', 20) -%} +{%- set marginLeft = pdfContext.setOption('margin_left', 25) -%} +{%- set marginRight = pdfContext.setOption('margin_right', 20) -%} + +{% set showFoldHoleMarks = showFoldHoleMarks ?? true %} + + +{% set fallback = app.request is not null ? app.request.locale : 'de' %} +{% set language = 'de' %} + + + + {% block title %}{{ invoice['invoice.date']|date('Y-m-d') }} {{ invoice['invoice.number'] }} {{ invoice['customer.company']|default(invoice['customer.name']) }}{% endblock %} + + {% block invoice_styles %} + + {% endblock %} + + + +
+ {% block invoice_address_sender %} +
+ + + + +
{{ invoice['user.display'] }} + • {{ invoice['template.address']|nl2str(' • ') }}
+
+ {% endblock %} + + {% block invoice_address_recipient %} +
+ {{ invoice['customer.name'] }}
+ {% if invoice['customer.contact'] %} + {{ invoice['customer.contact'] }}
+ {% endif %} + {{ invoice['customer.address']|nl2br }} +
+ {% endblock %} +
+ +
+ + + {% block invoice_content_subject %} + + {% endblock %} + {% block invoice_details_invoice_number %} + + {% endblock %} + + + {% block invoice_details_invoice_date %} + + + + + {% endblock %} + + {% block invoice_details_service_date %} + + + + + {% endblock %} + + {% block invoice_details_due_date %} + + + + + {% endblock %} + + {% if invoice['customer.vat_id'] is not empty %} + {% block invoice_details_customer_vatid %} + + + + + {% endblock %} + {% endif %} +
{{ invoice['template.title'] }}{{ invoice['invoice.number'] }}
{{ 'date'|trans }}{{ invoice['invoice.date'] }}
{{ 'invoice.service_date'|trans }} + {% if invoice['query.begin_month_number'] != invoice['query.end_month_number'] %} + {{ invoice['query.begin'] }}
– {{ invoice['query.end'] }} + {% else %} + {{ invoice['query.begin_month_number'] }} / {{ invoice['query.begin_year'] }} + {% endif %} +
{{ 'invoice.due_days'|trans }}{{ invoice['invoice.due_date'] }}
{{ 'vat_id'|trans }}{{ invoice['customer.vat_id'] }}
+
+
+
+ +
+

{{ invoice['template.title'] }}

+
+ +
+

+ Sehr geehrte Damen und Herren,
+
+ heute erhalten Sie die Rechnung für die von mir vom {{ invoice['query.begin'] }} bis + zum {{ invoice['query.end'] }} erbrachten Leistungen. Bitte zahlen Sie die Rechnung pünktlich, spätestens + jedoch bis zum {{ invoice['invoice.due_date'] }}. + + {% block invoice_details_contact %} + {% if invoice['user.email'] is not empty %} + Bei Rückfragen erreichen Sie mich via E-Mail an {{ invoice['user.email'] }}. + {% endif %} + {% endblock %} +

+
+ +
+ + + + + + + + + + + + + {% set pos = 1 %} + + {% if invoice['project.' ~ groupByMaxProjects ~ '.id'] is not defined %} + + {% for i in 0..groupByMaxProjects %} + {% if i == 0 %} + {% set id = 'project' %} + {% else %} + {% set id = 'project.' ~ i %} + {% endif %} + + {% if invoice[id ~ '.id'] is defined and invoice[id ~ '.id'] is not null %} + + {% set totalDuration = 0 %} + {% set totalAmount = 0 %} + + + + + + + + + + {% for entry in entries %} + + {% if entry['entry.type'] == 'timesheet' %} + {% if entry['entry.project_id'] == invoice[id ~ '.id'] %} + {% set totalAmount = totalAmount + entry['entry.total_plain'] %} + {% set totalDuration = totalDuration + entry['entry.duration'] %} + + + + + + + + + + {% endif %} + {% endif %} + {% endfor %} + + + + + + + + + + + + + {% endif %} + {% endfor %} + {% else %} + + {% for entry in entries %} + + {% if entry['entry.type'] == 'timesheet' %} + + + + + + + + + + {% endif %} + {% endfor %} + {% endif %} + + {% set hasOther = false %} + {% for entry in entries %} + + + {% if entry['entry.type'] != 'timesheet' %} + + {% if not hasOther %} + + + + + + + + {% set hasOther = true %} + {% endif %} + {% set pos = pos + 1 %} + + + + + + + + + {% endif %} + {% endfor %} + + + + + + + + + {% if invoice['invoice.vat'] is not empty %} + + + + + + + + + + {% endif %} + + + + + + + +
Pos.{{ 'description'|trans }}#{{ 'unit_price'|trans }}{{ 'total_rate'|trans }}
{{ invoice[id ~ '.name'] }}
{{ pos }}{% set pos = pos + 1 %} + + {% if entry['entry.description'] is not empty %} + {{ entry['entry.description'] }} + {% endif %} + {% if entry['entry.activity'] is not null %} + ({{ entry['entry.activity'] }}) + {% endif %} + {{ entry['entry.duration_format'] }}{{ entry['entry.rate'] }}{{ entry['entry.total'] }}
Zwischensumme:{{ totalDuration|duration }}{{ totalAmount|money(invoice['invoice.currency']) }}
{{ pos }}{% set pos = pos + 1 %} + {% if entry['entry.description'] is not empty %} + {{ entry['entry.description'] }} + {% endif %} + + {% if entry['entry.project'] is not null %} + ({{ entry['entry.project'] }}) + {% endif %} + + {% if entry['entry.activity'] is not null %} + ({{ entry['entry.activity'] }}) + {% endif %} + {{ entry['entry.duration_format'] }}{{ entry['entry.rate'] }}{{ entry['entry.total'] }}
Auslagen
{{ pos }} + {% if entry['entry.description'] is not empty %} + {{ entry['entry.description'] }} + {% endif %} + + {% if entry['entry.project'] is not null %} + ({{ entry['entry.project'] }}) + {% endif %} + {{ entry['entry.amount'] }}{{ entry['entry.rate'] }}{{ entry['entry.total'] }}
+ {{ 'invoice.subtotal'|trans }} + + {{ invoice['invoice.subtotal'] }} +
+ {{ 'invoice.tax'|trans }} ({{ invoice['invoice.vat'] }} %) + + {{ invoice['invoice.tax'] }} +
+ {{ 'invoice.total'|trans }} + + {{ invoice['invoice.total'] }} +
+
+ + {% if model.template.paymentTerms is not empty %} +
+

+ {{ model.template.paymentTerms|md2html }} +

+
+ {% endif %} +
+ + diff --git a/Kimai2/groupedByProjects.pdf.twig b/Kimai2/groupedByProjects.pdf.twig new file mode 100644 index 0000000..a9d8123 --- /dev/null +++ b/Kimai2/groupedByProjects.pdf.twig @@ -0,0 +1,690 @@ +{%- set filename = invoice['invoice.date']|date('Y-m-d') ~ '_' ~ invoice['invoice.number']|replace({'/' : '-'}) ~ '_' ~ invoice['customer.company']|default(invoice['customer.name'])|replace({' ' : '-'}) -%} +{%- set option = pdfContext.setOption('filename', filename) -%} +{%- set option = pdfContext.setOption('format', 'A4-P') -%} + +{% set company = 'Martin Rattensberger' %} +{% set tagline = 'IT Services' %} +{% set weiss = '#FFFFFF' %} +{% set hintergrund = '#576F80' %} +{% set hintergrund_hell = '#D4EFFC' %} +{% set highlight = '#D4EFFC' %} +{% set suppress = '#576F80' %} +{% set logoUrl = config('theme.branding.logo') %} + +{% set groupByMaxProjects = 50 %} +{% set groupByMaxKeywords = 50 %} + +{% if logoUrl is empty %} +{% set logoUrl = 'https://kimai.rattensberger.com/bilder/logo/martin_rattensberger_gr.png' %} +{% endif %} + +{%- set setAutoTopMargin = pdfContext.setOption('setAutoTopMargin', false) -%} +{%- set setAutoBottomMargin = pdfContext.setOption('setAutoBottomMargin', false) -%} +{%- set marginBottom = pdfContext.setOption('margin_bottom', 20) -%} +{%- set marginLeft = pdfContext.setOption('margin_left', 25) -%} +{%- set marginRight = pdfContext.setOption('margin_right', 20) -%} + +{% set showFoldHoleMarks = showFoldHoleMarks ?? true %} + + +{% set fallback = app.request is not null ? app.request.locale : 'de' %} +{% set language = 'de' %} + + + + {% block title %}{{ invoice['invoice.date']|date('Y-m-d') }} {{ invoice['invoice.number'] }} {{ invoice['customer.company']|default(invoice['customer.name']) }}{% endblock %} + + {% block invoice_styles %} + + {% endblock %} + + + +
+ {% block invoice_address_sender %} +
+ + + + +
{{ invoice['user.display'] }} + • {{ invoice['template.address']|nl2str(' • ') }}
+
+ {% endblock %} + + {% block invoice_address_recipient %} +
+ {{ invoice['customer.name'] }}
+ {% if invoice['customer.contact'] %} + {{ invoice['customer.contact'] }}
+ {% endif %} + {{ invoice['customer.address']|nl2br }} +
+ {% endblock %} +
+ +
+ + + {% block invoice_content_subject %} + + {% endblock %} + {% block invoice_details_invoice_number %} + + {% endblock %} + + + {% block invoice_details_invoice_date %} + + + + + {% endblock %} + + {% block invoice_details_service_date %} + + + + + {% endblock %} + + {% block invoice_details_due_date %} + + + + + {% endblock %} + + {% if invoice['customer.vat_id'] is not empty %} + {% block invoice_details_customer_vatid %} + + + + + {% endblock %} + {% endif %} +
{{ invoice['template.title'] }}{{ invoice['invoice.number'] }}
{{ 'date'|trans }}{{ invoice['invoice.date'] }}
{{ 'invoice.service_date'|trans }} + {% if invoice['query.begin_month_number'] != invoice['query.end_month_number'] %} + {{ invoice['query.begin'] }}
– {{ invoice['query.end'] }} + {% else %} + {{ invoice['query.begin_month_number'] }} / {{ invoice['query.begin_year'] }} + {% endif %} +
{{ 'invoice.due_days'|trans }}{{ invoice['invoice.due_date'] }}
{{ 'vat_id'|trans }}{{ invoice['customer.vat_id'] }}
+
+
+
+ +
+

{{ invoice['template.title'] }}

+
+ +
+

+ Sehr geehrte Damen und Herren,
+
+ heute erhalten Sie die Rechnung für die von mir vom {{ invoice['query.begin'] }} bis + zum {{ invoice['query.end'] }} erbrachten Leistungen. Bitte zahlen Sie die Rechnung pünktlich, spätestens + jedoch bis zum {{ invoice['invoice.due_date'] }}. + + {% block invoice_details_contact %} + {% if invoice['user.email'] is not empty %} + Bei Rückfragen erreichen Sie mich via E-Mail an {{ invoice['user.email'] }}. + {% endif %} + {% endblock %} +

+
+ +
+ + + + + + + + + + + + + {% set pos = 1 %} + + {% if invoice['project.' ~ groupByMaxProjects ~ '.id'] is not defined %} + + {% for i in 0..groupByMaxProjects %} + {% if i == 0 %} + {% set id = 'project' %} + {% else %} + {% set id = 'project.' ~ i %} + {% endif %} + + {% if invoice[id ~ '.id'] is defined and invoice[id ~ '.id'] is not null %} + + {% set totalDuration = 0 %} + {% set totalAmount = 0 %} + + + + + + + + + + + + + {% for entry in entries %} + + {% if entry['entry.type'] == 'timesheet' %} + {% if entry['entry.project_id'] == invoice[id ~ '.id'] %} + {% set totalAmount = totalAmount + entry['entry.total_plain'] %} + {% set totalDuration = totalDuration + entry['entry.duration'] %} + {% set pos = pos + 1 %} + + + + + + + + + + {% endif %} + {% endif %} + {% endfor %} + + + + + + + + + + + + + {% endif %} + {% endfor %} + {% else %} + + {% for entry in entries %} + + {% if entry['entry.type'] == 'timesheet' %} + + + + + + + + + + {% endif %} + {% endfor %} + {% endif %} + + {% set hasOther = false %} + {% for entry in entries %} + + + {% if entry['entry.type'] != 'timesheet' %} + + {% if not hasOther %} + + + + + + + + {% set hasOther = true %} + {% endif %} + {% set pos = pos + 1 %} + + + + + + + + + {% endif %} + {% endfor %} + + + + + + + + + {% if invoice['invoice.vat'] is not empty %} + + + + + + + + + + {% endif %} + + + + + + + +
{{ 'date'|trans }}{{ 'description'|trans }}Ticket#{{ 'total_rate'|trans }}
{{ invoice[id ~ '.name'] }}{{ invoice[id ~ '.tags'] }}
{{ entry['entry.begin'] }} + {% if entry['entry.meta.tickettitel'] is not empty %} + {{ entry['entry.meta.tickettitel'] }} + {% else %} + {{ entry['entry.description'] }} + {% endif %} + {% if entry['entry.activity'] is not null %} + ({{ entry['entry.activity'] }}) + {% endif %} + {{ entry['entry.meta.ticketnummer'] }}{{ entry['entry.duration_format'] }}{{ entry['entry.total'] }}
Zwischensumme:{{ totalDuration|duration }}{{ totalAmount|money(invoice['invoice.currency']) }}
{{ pos }}{% set pos = pos + 1 %} + {% if entry['entry.description'] is not empty %} + {{ entry['entry.description'] }} + {% endif %} + + {% if entry['entry.project'] is not null %} + ({{ entry['entry.project'] }}) + {% endif %} + + {% if entry['entry.activity'] is not null %} + ({{ entry['entry.activity'] }}) + {% endif %} + {{ entry['entry.duration_format'] }}{{ entry['entry.rate'] }}{{ entry['entry.total'] }}
Auslagen
{{ pos }} + {% if entry['entry.description'] is not empty %} + {{ entry['entry.description'] }} + {% endif %} + + {% if entry['entry.project'] is not null %} + ({{ entry['entry.project'] }}) + {% endif %} + {{ entry['entry.amount'] }}{{ entry['entry.rate'] }}{{ entry['entry.total'] }}
+ {{ 'invoice.subtotal'|trans }} + + {{ invoice['invoice.subtotal'] }} +
+ {{ 'invoice.tax'|trans }} ({{ invoice['invoice.vat'] }} %) + + {{ invoice['invoice.tax'] }} +
+ {{ 'invoice.total'|trans }} + + {{ invoice['invoice.total'] }} +
+
+ + {% if model.template.paymentTerms is not empty %} +
+

+ {{ model.template.paymentTerms|md2html }} +

+
+ {% endif %} +
+ + diff --git a/Kimai2/invoice_company-en.docx b/Kimai2/invoice_company-en.docx new file mode 100644 index 0000000..5038114 Binary files /dev/null and b/Kimai2/invoice_company-en.docx differ diff --git a/freelancermap.at/Angebot_freelancermap.dotx b/freelancermap.at/Angebot_freelancermap.dotx new file mode 100644 index 0000000..991a324 Binary files /dev/null and b/freelancermap.at/Angebot_freelancermap.dotx differ diff --git a/freelancermap.at/Auftragsbestaetigung.dotx b/freelancermap.at/Auftragsbestaetigung.dotx new file mode 100644 index 0000000..d8fc554 Binary files /dev/null and b/freelancermap.at/Auftragsbestaetigung.dotx differ diff --git a/freelancermap.at/Dienstvertrag-Muster-Vorlage-Word-blanko.docx b/freelancermap.at/Dienstvertrag-Muster-Vorlage-Word-blanko.docx new file mode 100644 index 0000000..d1dd9a4 Binary files /dev/null and b/freelancermap.at/Dienstvertrag-Muster-Vorlage-Word-blanko.docx differ diff --git a/freelancermap.at/Geheimhaltungsvereinbarung-Muster-Vorlage-Word-blanko.docx b/freelancermap.at/Geheimhaltungsvereinbarung-Muster-Vorlage-Word-blanko.docx new file mode 100644 index 0000000..d5269a5 Binary files /dev/null and b/freelancermap.at/Geheimhaltungsvereinbarung-Muster-Vorlage-Word-blanko.docx differ diff --git a/freelancermap.at/Honorarvertrag-Muster-Vorlage-Word-blanko.docx b/freelancermap.at/Honorarvertrag-Muster-Vorlage-Word-blanko.docx new file mode 100644 index 0000000..2336d6b Binary files /dev/null and b/freelancermap.at/Honorarvertrag-Muster-Vorlage-Word-blanko.docx differ diff --git a/freelancermap.at/Kuendigung-Muster-Vorlage-Word-blanko.docx b/freelancermap.at/Kuendigung-Muster-Vorlage-Word-blanko.docx new file mode 100644 index 0000000..a441e53 Binary files /dev/null and b/freelancermap.at/Kuendigung-Muster-Vorlage-Word-blanko.docx differ diff --git a/freelancermap.at/Mahnung_1.dotx b/freelancermap.at/Mahnung_1.dotx new file mode 100644 index 0000000..a75e16a Binary files /dev/null and b/freelancermap.at/Mahnung_1.dotx differ diff --git a/freelancermap.at/Mahnung_2.dotx b/freelancermap.at/Mahnung_2.dotx new file mode 100644 index 0000000..5c4c207 Binary files /dev/null and b/freelancermap.at/Mahnung_2.dotx differ diff --git a/freelancermap.at/Mahnung_3.docx b/freelancermap.at/Mahnung_3.docx new file mode 100644 index 0000000..f179a91 Binary files /dev/null and b/freelancermap.at/Mahnung_3.docx differ diff --git a/freelancermap.at/Rechnung.dotx b/freelancermap.at/Rechnung.dotx new file mode 100644 index 0000000..9726b93 Binary files /dev/null and b/freelancermap.at/Rechnung.dotx differ diff --git a/freelancermap.at/Werkvertrag-Muster-Vorlage-Word-blanko.docx b/freelancermap.at/Werkvertrag-Muster-Vorlage-Word-blanko.docx new file mode 100644 index 0000000..5b63b1a Binary files /dev/null and b/freelancermap.at/Werkvertrag-Muster-Vorlage-Word-blanko.docx differ