Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision b1adbcbe

Von Hans P. Schlaepfer vor fast 4 Jahren hinzugefügt

  • ID b1adbcbef727695ce7f833db7eab88d6ad91c282
  • Vorgänger 3e710302
  • Nachfolger 2a594346

Neues Design 2019 Standard-Code templates/webpages/bank_transactions/tabs/all.html

Unterschiede anzeigen:

templates/webpages/bank_transactions/tabs/all.html
5 5
[% USE P %]
6 6

  
7 7
[% BLOCK proposal_div %]
8
        <div data-proposal-id="[% prop.id %]">
9
         <a href=# onclick="kivi.BankTransaction.add_invoices('[% bt.id %]', '[% prop.id %]');"
10
            title="<table><tr><th></th><th>[% 'Suggested invoice' | $T8 %][% IF !prop.is_sales %] ([% 'AP' | $T8 %])[% END %]</th><th>[% 'Bank transaction' | $T8 %]</th></tr><tr><th>[% 'Amount' | $T8 %]</th><td>[% prop.realamount %] ([% 'open' | $T8 %]: [% LxERP.format_amount(prop.open_amount, 2) %])</td><td>[% LxERP.format_amount(bt.amount, 2) %]</td></tr>[% IF prop.skonto_date %]<tr><th>[% 'Payment terms' | $T8 %]</th><td>[% LxERP.format_amount(prop.amount_less_skonto, 2) %] [% 'until' | $T8 %] [% HTML.escape(prop.skonto_date.to_kivitendo) %] ([% prop.percent_skonto * 100 %] %)</td><td></td></tr>[% END %]<tr><th>[% 'Customer/Vendor' | $T8 %]</th><td>[% HTML.escape(prop.customer.displayable_name) %][% HTML.escape(prop.vendor.displayable_name) %]</td><td>[% HTML.escape(bt.remote_name) %]</td></tr><tr><th>[% 'Invoice Date' | $T8 %]</th><td>[% HTML.escape(prop.transdate_as_date) %]</td><td>[% HTML.escape(bt.transdate_as_date) %] ([% HTML.escape(bt.transdate.utc_rd_days - prop.transdate.utc_rd_days) %])</td></tr><tr><th>[% 'Invoice Number' | $T8 %]</th><td>[% HTML.escape(prop.invnumber) %]</td><td>[% HTML.escape(bt.purpose) %]</td></tr></table>"
8
  <div data-proposal-id="[% prop.id %]">
9
 <a href=# onclick="kivi.BankTransaction.add_invoices('[% bt.id %]', '[% prop.id %]');" title="<table><tr><th></th><th>[% 'Suggested invoice' | $T8 %][% IF !prop.is_sales %] ([% 'AP' | $T8 %])[% END %]</th><th>[% 'Bank transaction' | $T8 %]</th></tr><tr><th>[% 'Amount' | $T8 %]</th><td>[% prop.realamount %] ([% 'open' | $T8 %]: [% LxERP.format_amount(prop.open_amount, 2) %])</td><td>[% LxERP.format_amount(bt.amount, 2) %]</td></tr>[% IF prop.skonto_date %]<tr><th>[% 'Payment terms' | $T8 %]</th><td>[% LxERP.format_amount(prop.amount_less_skonto, 2) %] [% 'until' | $T8 %] [% HTML.escape(prop.skonto_date.to_kivitendo) %] ([% prop.percent_skonto * 100 %] %)</td><td></td></tr>[% END %]<tr><th>[% 'Customer/Vendor' | $T8 %]</th><td>[% HTML.escape(prop.customer.displayable_name) %][% HTML.escape(prop.vendor.displayable_name) %]</td><td>[% HTML.escape(bt.remote_name) %]</td></tr><tr><th>[% 'Invoice Date' | $T8 %]</th><td>[% HTML.escape(prop.transdate_as_date) %]</td><td>[% HTML.escape(bt.transdate_as_date) %] ([% HTML.escape(bt.transdate.utc_rd_days - prop.transdate.utc_rd_days) %])</td></tr><tr><th>[% 'Invoice Number' | $T8 %]</th><td>[% HTML.escape(prop.invnumber) %]</td><td>[% HTML.escape(bt.purpose) %]</td></tr></table>"
11 10
              class="[% IF bt.agreement >= 5 %]green[% ELSIF bt.agreement < 5 and bt.agreement >= 3 %]orange[% ELSE %]red[% END %] tooltipster-html">&larr;[% HTML.escape(prop.invnumber)%]</a>
12 11
        </div>
13 12
[% END %]
14 13

  
15 14
[% SET debug=1 %]
16 15
<form method="post" id="list_all_form">
17
[% L.hidden_tag('filter.bank_account', FORM.filter.bank_account) %]
18
[% L.hidden_tag('filter.fromdate', FORM.filter.fromdate) %]
19
[% L.hidden_tag('filter.todate',   FORM.filter.todate) %]
20
[% L.hidden_tag('action', 'BankTransaction/dispatch') %]
21
[% L.hidden_tag('ui_tab', ui_tab) %]
16
  [% L.hidden_tag('filter.bank_account', FORM.filter.bank_account) %]
17
  [% L.hidden_tag('filter.fromdate', FORM.filter.fromdate) %]
18
  [% L.hidden_tag('filter.todate',   FORM.filter.todate) %]
19
  [% L.hidden_tag('action', 'BankTransaction/dispatch') %]
20
  [% L.hidden_tag('ui_tab', ui_tab) %]
22 21

  
23
 <table id="bt_list">
24
  <thead>
25
   <tr class="listheading">
26
    <th></th>
27
    <th></th>
28
    <th>[% LxERP.t8("Assigned invoices with amount") %]</th>
29
    <th style="width: 100px">[% LxERP.t8("Source") %]</th>
30
    <th style="width: 100px">[% LxERP.t8("Memo") %]</th>
31
    [% IF debug %]
32
    <th>[% 'Score' | $T8 %]</th>
33
    [% END %]
34
    <th>[% IF FORM.sort_by == 'proposal'%]
35
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=proposal&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
36
            [% 'Proposal' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
37
        [% ELSE %]
38
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=proposal&sort_dir=0" class="sort_link">
39
            [% 'Proposal' | $T8 %]</a>
40
        [% END %]
41
    </th>
42
    <th>[% IF FORM.sort_by == 'transdate'%]
43
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=transdate&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
44
            [% 'Transdate' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
45
        [% ELSE %]
46
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=transdate&sort_dir=0" class="sort_link">
47
            [% 'Transdate' | $T8 %]</a>
48
        [% END %]
49
    </th>
50
    <th>[% IF FORM.sort_by == 'amount'%]
51
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=amount&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
52
            [% 'Amount' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
53
        [% ELSE %]
54
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=amount&sort_dir=0" class="sort_link">
55
            [% 'Amount' | $T8 %]</a>
56
        [% END %]
57
    </th>
58
    <th>[% 'Assigned' | $T8 %]</th>
59
    <th>[% IF FORM.sort_by == 'remote_name'%]
60
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_name&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
61
            [% 'Remote name' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
62
        [% ELSE %]
63
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_name&sort_dir=0" class="sort_link">
64
            [% 'Remote name' | $T8 %]</a>
65
        [% END %]
66
    </th>
67
    <th>[% 'Purpose' | $T8 %]</th>
68
    <th>[% 'Type' | $T8 %]</th>
69
    <th>[% IF FORM.sort_by == 'remote_account_number'%]
70
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_account_number&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
71
            [% 'Remote account number' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
72
        [% ELSE %]
73
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_account_number&sort_dir=0" class="sort_link">
74
            [% 'Remote account number' | $T8 %]</a>
75
        [% END %]
76
    </th>
77
    <th>[% IF FORM.sort_by == 'remote_bank_code'%]
78
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_bank_code&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
79
            [% 'Remote bank code' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
80
        [% ELSE %]
81
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_bank_code&sort_dir=0" class="sort_link">
82
            [% 'Remote bank code' | $T8 %]</a>
83
        [% END %]
84
    </th>
85
    <th>[% IF FORM.sort_by == 'valutadate'%]
86
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=valutadate&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
87
            [% 'Valutadate' | $T8 %][% IF FORM.sort_dir == 0 %]<img border="0" src="image/down.png">[% ELSE %]<img border="0" src="image/up.png">[% END %]</a>
88
        [% ELSE %]
89
          <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=valutadate&sort_dir=0" class="sort_link">
90
            [% 'Valutadate' | $T8 %]</a>
91
        [% END %]
92
    </th>
93
    <th>[% 'Currency' | $T8 %]</th>
94
   </tr>
95
  </thead>
96

  
97
  [%- FOREACH bt = BANK_TRANSACTIONS %]
98
   <tbody class="listrow" id="bt_rows_[% HTML.escape(bt.id) %]">
99
    [% SET proposals = bt.proposals.as_list.size > 0 ? bt.proposals.as_list : [{}] ;
100
       FOREACH prop = proposals %]
101
     [% IF loop.first %]
102
      <tr id="bt_id_[% bt.id %]">
103
       <td><a href=# onclick="kivi.BankTransaction.assign_invoice('[% bt.id %]'); return false;">[% 'Assign invoice' | $T8 %]</a></td>
104
       <td><a href=# onclick="kivi.BankTransaction.create_invoice('[% bt.id %]'); return false;">[% 'Create invoice' | $T8 %]</a></td>
105
       <td id="assigned_invoices_[% bt.id %]_[% prop.id %]"></td>
106
       <td>[% P.input_tag("sources_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
107
       <td>[% P.input_tag("memos_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
108
       [% IF debug %]
109
       <td class="tooltipster-html" title="[% FOREACH match = bt.rule_matches %] [% match %]<br> [% END %]">[% bt.agreement %]</td>
110
       [% END %]
111
       <td>
112
        [% IF prop.id ;
113
             PROCESS proposal_div ;
114
           END %]
115
       </td>
116
       <td align="right">[% bt.transdate_as_date %]</td>
117
       <td align="right">[% LxERP.format_amount(bt.amount, 2) %]</td>
118
       <td align="right" id="invoice_amount_[% HTML.escape(bt.id) %]" data-invoice-amount="[% HTML.escape(bt.invoice_amount) %]">[% HTML.escape(LxERP.format_amount(bt.invoice_amount, 2)) %]</td>
119
       <td>[% HTML.escape(bt.remote_name) %]</td>
120
       <td>[% HTML.escape(bt.purpose) %]</td>
121
       <td>[% HTML.escape(bt.transaction_text) %]</td>
122
       <td>[% HTML.escape(bt.remote_account_number) %]</td>
123
       <td>[% HTML.escape(bt.remote_bank_code) %]</td>
124
       <td align="right">[% bt.valutadate_as_date %]</td>
125
       <td align="center">[% HTML.escape(bt.currency.name) %]</td>
126
      </tr>
127
     [% ELSE # loop.first %]
22
  <table id="bt_list" class="tbl-list">
23
    <thead>
128 24
      <tr>
129
       <td></td>
130
       <td></td>
131
       <td id="assigned_invoices_[% bt.id %]_[% prop.id %]"></td>
132
       <td>[% P.input_tag("sources_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
133
       <td>[% P.input_tag("memos_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
134
       [% IF debug %]
135
       <td></td>
136
       [% END %]
137
       <td>
138
        [% PROCESS proposal_div %]
139
       </td>
140
       <td></td>
141
       <td></td>
142
       <td></td>
143
       <td></td>
144
       <td></td>
145
       <td></td>
146
       <td></td>
147
       <td></td>
148
       <td></td>
149
       <td></td>
25
        <th></th>
26
        <th></th>
27
        <th>[% LxERP.t8("Assigned invoices with amount") %]</th>
28
        <th style="width: 100px">[% LxERP.t8("Source") %]</th>
29
        <th style="width: 100px">[% LxERP.t8("Memo") %]</th>
30
        [% IF debug %]
31
        <th>[% 'Score' | $T8 %]</th>
32
        [% END %]
33
        <th>
34
          [% IF FORM.sort_by == 'proposal'%]
35
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=proposal&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
36
            [% 'Proposal' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
37
          [% ELSE %]
38
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=proposal&sort_dir=0" class="sort_link">[% 'Proposal' | $T8 %]</a>
39
          [% END %]
40
        </th>
41
        <th>
42
          [% IF FORM.sort_by == 'transdate'%]
43
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=transdate&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
44
            [% 'Transdate' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
45
          [% ELSE %]
46
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=transdate&sort_dir=0" class="sort_link">[% 'Transdate' | $T8 %]</a>
47
          [% END %]
48
        </th>
49
        <th>
50
          [% IF FORM.sort_by == 'amount'%]
51
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=amount&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
52
              [% 'Amount' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
53
          [% ELSE %]
54
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=amount&sort_dir=0" class="sort_link">
55
              [% 'Amount' | $T8 %]</a>
56
          [% END %]
57
        </th>
58
        <th>[% 'Assigned' | $T8 %]</th>
59
        <th>
60
          [% IF FORM.sort_by == 'remote_name'%]
61
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_name&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
62
              [% 'Remote name' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
63
          [% ELSE %]
64
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_name&sort_dir=0" class="sort_link">
65
              [% 'Remote name' | $T8 %]</a>
66
          [% END %]
67
        </th>
68
        <th>[% 'Purpose' | $T8 %]</th>
69
        <th>[% 'Type' | $T8 %]</th>
70
        <th>
71
          [% IF FORM.sort_by == 'remote_account_number'%]
72
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_account_number&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
73
              [% 'Remote account number' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
74
          [% ELSE %]
75
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_account_number&sort_dir=0" class="sort_link">
76
              [% 'Remote account number' | $T8 %]</a>
77
          [% END %]
78
        </th>
79
        <th>
80
          [% IF FORM.sort_by == 'remote_bank_code'%]
81
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_bank_code&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
82
            [% 'Remote bank code' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
83
          [% ELSE %]
84
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=remote_bank_code&sort_dir=0" class="sort_link">[% 'Remote bank code' | $T8 %]</a>
85
          [% END %]
86
        </th>
87
        <th>
88
          [% IF FORM.sort_by == 'valutadate'%]
89
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=valutadate&sort_dir=[% 1 - FORM.sort_dir %]" class="sort_link">
90
              [% 'Valutadate' | $T8 %][% IF FORM.sort_dir == 0 %]<img src="image/down.png">[% ELSE %]<img src="image/up.png">[% END %]</a>
91
          [% ELSE %]
92
            <a href="controller.pl?action=BankTransaction/list&filter.bank_account=[% bank_account.id %]&sort_by=valutadate&sort_dir=0" class="sort_link">
93
              [% 'Valutadate' | $T8 %]</a>
94
          [% END %]
95
        </th>
96
        <th>[% 'Currency' | $T8 %]</th>
150 97
      </tr>
151
     [% END # loop.first %]
98
    </thead>
99
  [% FOREACH bt = BANK_TRANSACTIONS %]
100
    <tbody id="bt_rows_[% HTML.escape(bt.id) %]">
101
    [% SET proposals = bt.proposals.as_list.size > 0 ? bt.proposals.as_list : [{}] ;
102
      FOREACH prop = proposals %]
103
        [% IF loop.first %]
104
          <tr id="bt_id_[% bt.id %]">
105
            <td><a href=# onclick="kivi.BankTransaction.assign_invoice('[% bt.id %]'); return false;">[% 'Assign invoice' | $T8 %]</a></td>
106
            <td><a href=# onclick="kivi.BankTransaction.create_invoice('[% bt.id %]'); return false;">[% 'Create invoice' | $T8 %]</a></td>
107
            <td id="assigned_invoices_[% bt.id %]_[% prop.id %]"></td>
108
            <td>[% P.input_tag("sources_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
109
            <td>[% P.input_tag("memos_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
110
            [% IF debug %]
111
              <td class="tooltipster-html" title="[% FOREACH match = bt.rule_matches %] [% match %]<br> [% END %]">[% bt.agreement %]</td>
112
            [% END %]
113
            <td>[% IF prop.id ; PROCESS proposal_div ; END %]</td>
114
            <td>[% bt.transdate_as_date %]</td>
115
            <td>[% LxERP.format_amount(bt.amount, 2) %]</td>
116
            <td id="invoice_amount_[% HTML.escape(bt.id) %]" data-invoice-amount="[% HTML.escape(bt.invoice_amount) %]">[% HTML.escape(LxERP.format_amount(bt.invoice_amount, 2)) %]</td>
117
            <td>[% HTML.escape(bt.remote_name) %]</td>
118
            <td>[% HTML.escape(bt.purpose) %]</td>
119
            <td>[% HTML.escape(bt.transaction_text) %]</td>
120
            <td>[% HTML.escape(bt.remote_account_number) %]</td>
121
            <td>[% HTML.escape(bt.remote_bank_code) %]</td>
122
            <td>[% bt.valutadate_as_date %]</td>
123
            <td>[% HTML.escape(bt.currency.name) %]</td>
124
          </tr>
125
        [% ELSE # loop.first %]
126
          <tr>
127
            <td></td>
128
            <td></td>
129
            <td id="assigned_invoices_[% bt.id %]_[% prop.id %]"></td>
130
            <td>[% P.input_tag("sources_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
131
            <td>[% P.input_tag("memos_" _ bt.id _ "_" _ prop.id, "", class="hidden") %]</td>
132
            [% IF debug %]
133
              <td></td>
134
            [% END %]
135
            <td>
136
            [% PROCESS proposal_div %]
137
            </td>
138
            <td></td>
139
            <td></td>
140
            <td></td>
141
            <td></td>
142
            <td></td>
143
            <td></td>
144
            <td></td>
145
            <td></td>
146
            <td></td>
147
            <td></td>
148
          </tr>
149
       [% END # loop.first %]
152 150
    [% END # FOREACH proposal %]
153 151
   </tbody>
154
  [%- END %]
155
 </table>
152
  [% END %]
153
  </table>
156 154

  
157
 <p>
155
 <div class="buttons">
158 156
  [% L.submit_tag('action_save_invoices', LxERP.t8('Save invoices')) %]
159
  [% L.button_tag('kivi.BankTransaction.show_set_all_sources_memos_dialog("#list_all_form [name^=\\"sources_\\"]:visible", "#list_all_form [name^=\\"memos_\\"]:visible")', LxERP.t8('Set all source and memo fields')) %]
160
 </p>
157
  [% L.button_tag('kivi.BankTransaction.show_set_all_sources_memos_dialog("#list_all_form [name^=\\"sources_\\"]:visible", "#list_all_form [name^=\\"memos_\\"]:visible")', LxERP.t8('Set all source and memo fields'), class='neutral') %]
158
 </div>
161 159

  
162 160
</form>

Auch abrufbar als: Unified diff