Skip to content

Commit e653895

Browse files
author
Andreas Müller
committed
support multiple extra-positions
1 parent 4749446 commit e653895

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed

src/gtt-report.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ config
151151
.set('invoiceCurrencyMaxUnit', program.opts().invoiceCurrencyMaxUnit)
152152
.set('invoicePositionText', program.opts().invoicePositionText)
153153
.set('invoicePositionExtra', program.opts().invoicePositionExtra)
154-
.set('invoicePositionExtraText', program.opts().invoicePositionExtraText)
155-
.set('invoicePositionExtraValue', program.opts().invoicePositionExtraValue)
154+
.set('invoicePositionExtraText', program.opts().invoicePositionExtraText.split(','))
155+
.set('invoicePositionExtraValue', program.opts().invoicePositionExtraValue.split(','))
156156
.set('_createDump', program.opts().output === 'dump');
157157

158158
// date shortcuts
@@ -172,6 +172,11 @@ if (program.opts().this_month)
172172
Cli.quiet = config.get('quiet');
173173
Cli.verbose = config.get('_verbose');
174174

175+
// check extra Text/value arrays
176+
if(config.get('invoicePositionExtraText').length != config.get('invoicePositionExtraValue').length) {
177+
Cli.error(`invoicePositionExtraText and invoicePositionExtraValue length do not match`);
178+
}
179+
175180
// create stuff
176181
let reports = new ReportCollection(config),
177182
master = new Report(config),

src/output/invoice.js

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,21 @@ class invoice extends Base {
2121
this.invoiceCurrencyPerHour = this.config.get('invoiceCurrencyPerHour');
2222
this.invoiceVAT = this.config.get('invoiceVAT');
2323
this.invoicePositionText = this.config.get('invoicePositionText');
24-
this.invoicePositionExtraText = this.config.get('invoicePositionExtraText');
25-
this.invoicePositionExtraValue = parseFloat(this.config.get('invoicePositionExtraValue'));
26-
if(!this.invoicePositionExtraValue > 0) {
27-
this.invoicePositionExtraValue = 0.0;
28-
}
24+
this.invoicePositionExtraTexts = this.config.get('invoicePositionExtraText');
25+
this.invoicePositionExtraValues = this.config.get('invoicePositionExtraValue').map(
26+
(v) => {
27+
const value = parseFloat(v);
28+
return value > 0? value: 0; // NaN -> 0
29+
});
30+
this.invoicePositionExtraTotal = 0.0;
31+
this.invoicePositionExtraValues.forEach(v => (this.invoicePositionExtraTotal += v));
32+
33+
34+
2935
this.invoiceCurrencyMaxUnit = this.config.get('invoiceCurrencyMaxUnit');
3036
this.totalhForInvoice = (this.spent-this.spentFree-(this.spentHalfPrice*0.5)) / 3600.0;
3137
// round subtotals to 0.01 and total to invoiceCurrencyMaxUnit.
32-
let invoiceTotal = this.totalhForInvoice * this.invoiceCurrencyPerHour + this.invoicePositionExtraValue;
38+
let invoiceTotal = this.totalhForInvoice * this.invoiceCurrencyPerHour + this.invoicePositionExtraTotal;
3339
this.totalForInvoiceH = Math.round(this.totalhForInvoice * this.invoiceCurrencyPerHour * 100) * 0.01;
3440
this.totalForInvoiceExkl = Math.round(invoiceTotal * 100) * 0.01;
3541
this.totalForInvoiceMwst = Math.round(invoiceTotal * this.invoiceVAT * 100) * 0.01;
@@ -132,9 +138,15 @@ class invoice extends Base {
132138
svg.instance.height("");
133139
svg.instance.width("");
134140
let extra = "";
135-
if(this.invoicePositionExtraValue > 0) {
136-
extra = `<div class="positionDesc">${this.invoicePositionExtraText}</div>
137-
<div class="positionValue">${this.invoiceCurrency} ${this.invoicePositionExtraValue.toFixed(2)}</div>`;
141+
if(this.invoicePositionExtraTotal > 0) {
142+
for(var i in this.invoicePositionExtraTexts) {
143+
extra +=
144+
`
145+
<div class="positionDesc">${this.invoicePositionExtraTexts[i]}</div>
146+
<div class="positionValue">${this.invoiceCurrency} ${this.invoicePositionExtraValues[i].toFixed(2)}</div>
147+
`;
148+
}
149+
138150
}
139151

140152
this.out +=

src/output/invoice2.js

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ class invoice2 extends Base {
2323
this.invoiceText = this.config.get('invoiceText') ? this.config.get('invoiceText') : '';
2424
this.invoicePositionText = this.config.get('invoicePositionText');
2525
this.invoicePositionExtra = this.config.get('invoicePositionExtra');
26-
this.invoicePositionExtraText = this.config.get('invoicePositionExtraText');
27-
this.invoicePositionExtraValue = parseFloat(this.config.get('invoicePositionExtraValue'));
28-
if(!this.invoicePositionExtraValue > 0) {
29-
this.invoicePositionExtraValue = 0.0;
30-
}
26+
this.invoicePositionExtraTexts = this.config.get('invoicePositionExtraText');
27+
this.invoicePositionExtraValues = this.config.get('invoicePositionExtraValue').map(
28+
(v) => {
29+
const value = parseFloat(v);
30+
return value > 0? value: 0; // NaN -> 0
31+
});
32+
this.invoicePositionExtraTotal = 0.0;
33+
this.invoicePositionExtraValues.forEach(v => (this.invoicePositionExtraTotal += v));
34+
3135
this.invoiceCurrencyMaxUnit = this.config.get('invoiceCurrencyMaxUnit');
3236
this.invoiceTimeMaxUnit = this.config.get('invoiceTimeMaxUnit');
3337

@@ -48,7 +52,7 @@ class invoice2 extends Base {
4852
);
4953
});
5054

51-
let invoiceTotal = this.invoicePositionExtraValue;
55+
let invoiceTotal = this.invoicePositionExtraTotal;
5256
Object.keys(this.invoicePositions).forEach(
5357
k => {
5458
invoiceTotal += this.invoicePositions[k][3];
@@ -169,15 +173,17 @@ class invoice2 extends Base {
169173
);
170174

171175
let extra = "";
172-
if(this.invoicePositionExtra || this.invoicePositionExtraValue > 0) {
176+
if(this.invoicePositionExtra || this.invoicePositionExtraTotal > 0) {
173177
if(this.invoicePositionExtra) {
174178
extra += `<div class="position">${this.invoicePositionExtra}</div>`;
175179
}
176-
extra +=
177-
`
178-
<div class="positionDesc">${this.invoicePositionExtraText}</div>
179-
<div class="positionValue">${this.invoiceCurrency} ${this.invoicePositionExtraValue.toFixed(2)}</div>
180-
`;
180+
for(var i in this.invoicePositionExtraTexts) {
181+
extra +=
182+
`
183+
<div class="positionDesc">${this.invoicePositionExtraTexts[i]}</div>
184+
<div class="positionValue">${this.invoiceCurrency} ${this.invoicePositionExtraValues[i].toFixed(2)}</div>
185+
`;
186+
}
181187
}
182188

183189
this.out +=

0 commit comments

Comments
 (0)