You've already forked openaccounting-web
forked from cybercinch/openaccounting-web
Compare commits
7 Commits
dependabot
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b0c129c980 | ||
|
|
62ec4a21fa | ||
|
|
e093e0cdbe | ||
|
|
7a3deb4006 | ||
|
|
9a6eef2fcc | ||
|
|
7cf5c4a392 | ||
|
|
bb93ac6bb5 |
79
package-lock.json
generated
79
package-lock.json
generated
@@ -2694,8 +2694,7 @@
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
|
||||
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"decode-uri-component": {
|
||||
"version": "0.2.0",
|
||||
@@ -4008,8 +4007,7 @@
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
@@ -4033,15 +4031,13 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"brace-expansion": {
|
||||
"version": "1.1.11",
|
||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"balanced-match": "^1.0.0",
|
||||
"concat-map": "0.0.1"
|
||||
@@ -4056,22 +4052,19 @@
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
|
||||
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
@@ -4200,6 +4193,12 @@
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
|
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
|
||||
"dev": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
@@ -4208,7 +4207,6 @@
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
@@ -4225,7 +4223,6 @@
|
||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"brace-expansion": "^1.1.7"
|
||||
}
|
||||
@@ -4348,8 +4345,7 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
|
||||
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
@@ -4363,7 +4359,6 @@
|
||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
@@ -4500,7 +4495,6 @@
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
@@ -4522,7 +4516,6 @@
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
@@ -4555,8 +4548,7 @@
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.2",
|
||||
@@ -4570,7 +4562,6 @@
|
||||
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
|
||||
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"inherits": "~2.0.0",
|
||||
@@ -4620,8 +4611,7 @@
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
|
||||
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"get-stream": {
|
||||
"version": "3.0.0",
|
||||
@@ -4983,7 +4973,7 @@
|
||||
},
|
||||
"http-errors": {
|
||||
"version": "1.6.3",
|
||||
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
||||
"resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
|
||||
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
@@ -5205,9 +5195,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.7",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
|
||||
"integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
|
||||
"version": "1.3.5",
|
||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
||||
"dev": true
|
||||
},
|
||||
"internal-ip": {
|
||||
@@ -5517,8 +5507,7 @@
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
|
||||
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"is-windows": {
|
||||
"version": "1.0.2",
|
||||
@@ -6277,7 +6266,6 @@
|
||||
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
|
||||
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"parse-json": "^2.2.0",
|
||||
@@ -6290,8 +6278,7 @@
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -6446,8 +6433,7 @@
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
|
||||
"integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"map-visit": {
|
||||
"version": "1.0.0",
|
||||
@@ -6651,7 +6637,6 @@
|
||||
"resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
|
||||
"integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
@@ -6661,8 +6646,7 @@
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -7454,7 +7438,6 @@
|
||||
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
|
||||
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"error-ex": "^1.2.0"
|
||||
}
|
||||
@@ -7583,8 +7566,7 @@
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
|
||||
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"pify": {
|
||||
"version": "4.0.1",
|
||||
@@ -8114,7 +8096,6 @@
|
||||
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
|
||||
"integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"load-json-file": "^1.0.0",
|
||||
"normalize-package-data": "^2.3.2",
|
||||
@@ -8126,7 +8107,6 @@
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
|
||||
"integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"graceful-fs": "^4.1.2",
|
||||
"pify": "^2.0.0",
|
||||
@@ -8137,8 +8117,7 @@
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
|
||||
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -8147,7 +8126,6 @@
|
||||
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
|
||||
"integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"find-up": "^1.0.0",
|
||||
"read-pkg": "^1.0.0"
|
||||
@@ -8158,7 +8136,6 @@
|
||||
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
|
||||
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"path-exists": "^2.0.0",
|
||||
"pinkie-promise": "^2.0.0"
|
||||
@@ -8169,7 +8146,6 @@
|
||||
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
|
||||
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"pinkie-promise": "^2.0.0"
|
||||
}
|
||||
@@ -9463,7 +9439,6 @@
|
||||
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
|
||||
"integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"is-utf8": "^0.2.0"
|
||||
}
|
||||
@@ -10281,7 +10256,6 @@
|
||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
|
||||
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"is-extglob": "^2.1.1"
|
||||
}
|
||||
@@ -10297,8 +10271,7 @@
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
||||
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
||||
"dev": true,
|
||||
"optional": true
|
||||
"dev": true
|
||||
},
|
||||
"readdirp": {
|
||||
"version": "3.4.0",
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<h5>Current spending</h5>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h5>{{expenseAmount | currencyFormat:org.precision}}</h5>
|
||||
<h5>{{expenseAmount | currencyFormat:org.precision:org.currency}}</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let expense of expenseAccounts" [routerLink]="'/accounts/'+expense.id+'/transactions'" [ngClass]="{hidden: hiddenExpenses[expense.id]}">
|
||||
@@ -28,7 +28,7 @@
|
||||
{{expense.fullName | accountName:2}}
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
{{expense.nativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{expense.nativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -59,10 +59,11 @@
|
||||
{{recentTx.tx.date | datetz:"M/D":org.timezone}}
|
||||
</div>
|
||||
<div class="col-5 col-md-6 description">
|
||||
{{recentTx.tx.description}}
|
||||
<div class="primary">{{recentTx.tx.description}}</div>
|
||||
<div class="additional">{{recentTx.account.fullName}}</div>
|
||||
</div>
|
||||
<div class="col-4 col-md-4 amount" [ngClass]="{'negative': recentTx.split.amount > 0}">
|
||||
{{-recentTx.split.amount | currencyFormat:recentTx.account.precision}}
|
||||
{{-recentTx.split.amount | currencyFormat:recentTx.account.precision:recentTx.account.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
@@ -41,6 +41,19 @@
|
||||
.expanded .hidden {
|
||||
display: flex
|
||||
}
|
||||
.row {
|
||||
padding-bottom: 1em;
|
||||
.description {
|
||||
.primary:empty::after {
|
||||
content: ".";
|
||||
visibility: hidden;
|
||||
}
|
||||
.additional {
|
||||
font-size: small;
|
||||
color: $black;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 767px) {
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input formControlName="createDefaultAccounts" id="createDefaultAccounts3" type="radio" class="form-check-input" value="personal" />
|
||||
<label for="createDefaultAccounts2" class="form-check-label">Personal accounts</label>
|
||||
<label for="createDefaultAccounts3" class="form-check-label">Personal accounts</label>
|
||||
</div>
|
||||
</div>
|
||||
<p *ngIf="error" class="error">
|
||||
|
||||
@@ -160,7 +160,7 @@
|
||||
</div>
|
||||
<div class="form-check">
|
||||
<input formControlName="createDefaultAccounts" id="createDefaultAccounts3" type="radio" class="form-check-input" value="personal" />
|
||||
<label for="createDefaultAccounts2" class="form-check-label">Personal accounts</label>
|
||||
<label for="createDefaultAccounts3" class="form-check-label">Personal accounts</label>
|
||||
</div>
|
||||
</div>
|
||||
<p *ngIf="newOrgError" class="error">{{newOrgError.message}}</p>
|
||||
|
||||
@@ -29,8 +29,8 @@
|
||||
<h4>Assets</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4 *ngIf="priceSource === 'price'">{{+assetAccount.totalNativeBalancePrice | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{+assetAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'price'">{{+assetAccount.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{+assetAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let account of assetAccounts" [attr.depth]="account.depth">
|
||||
@@ -39,10 +39,10 @@
|
||||
<span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
|
||||
{{+account.totalNativeBalancePrice | currencyFormat:org.precision}}
|
||||
{{+account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost">
|
||||
{{+account.totalNativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{+account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
@@ -55,8 +55,8 @@
|
||||
<h4>Liabilities</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4 *ngIf="priceSource === 'price'">{{-liabilityAccount.totalNativeBalancePrice | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{-liabilityAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'price'">{{-liabilityAccount.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{-liabilityAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let account of liabilityAccounts" [attr.depth]="account.depth">
|
||||
@@ -65,10 +65,10 @@
|
||||
<span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
|
||||
{{-account.totalNativeBalancePrice | currencyFormat:org.precision}}
|
||||
{{-account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost">
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" depth="1">
|
||||
@@ -76,8 +76,8 @@
|
||||
<h4>Equity</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4 *ngIf="priceSource === 'price'">{{-equityAccount.totalNativeBalancePrice | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{-equityAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4 *ngIf="priceSource === 'price'">{{-equityAccount.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}</h4>
|
||||
<h4 *ngIf="priceSource === 'cost'">{{-equityAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let account of equityAccounts" [attr.depth]="account.depth">
|
||||
@@ -86,10 +86,10 @@
|
||||
<span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
|
||||
{{-account.totalNativeBalancePrice | currencyFormat:org.precision}}
|
||||
{{-account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost">
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<h4>Income</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4>{{-incomeAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4>{{-incomeAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let account of incomeAccounts" [attr.depth]="account.depth">
|
||||
@@ -33,7 +33,7 @@
|
||||
<span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="account.totalNativeBalanceCost">
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{-account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" depth="1">
|
||||
@@ -41,7 +41,7 @@
|
||||
<h4>Expenses</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4>{{expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4>{{expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" *ngFor="let account of expenseAccounts" [attr.depth]="account.depth">
|
||||
@@ -50,7 +50,7 @@
|
||||
<span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
|
||||
</div>
|
||||
<div class="col-4 amount" *ngIf="account.totalNativeBalanceCost">
|
||||
{{account.totalNativeBalanceCost | currencyFormat:org.precision}}
|
||||
{{account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" depth="1">
|
||||
@@ -58,7 +58,7 @@
|
||||
<h4>Net Income</h4>
|
||||
</div>
|
||||
<div class="col-4 amount">
|
||||
<h4>{{-incomeAccount.totalNativeBalanceCost - expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4>
|
||||
<h4>{{-incomeAccount.totalNativeBalanceCost - expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,7 +1,16 @@
|
||||
import { Pipe, PipeTransform } from '@angular/core';
|
||||
import { DecimalPipe } from '@angular/common';
|
||||
|
||||
@Pipe({name: 'currencyFormat'})
|
||||
// Format the currency according to the user's browser locale.
|
||||
//
|
||||
// Some currencies share the same symbol (e.g. $ is used for USD and CAN).
|
||||
// Ideally, the user experience should not be confusing if different accounts
|
||||
// have conflicting symbols. One solution might be to always show the ISO
|
||||
// currency code for accounts with mixes currencies. Another solution would be
|
||||
// to let the user configure how the currency is displayed on a per-currency
|
||||
// or per-account basis.
|
||||
|
||||
@Pipe({ name: 'currencyFormat' })
|
||||
export class CurrencyFormatPipe implements PipeTransform {
|
||||
constructor(private decimalPipe: DecimalPipe) {
|
||||
}
|
||||
@@ -11,17 +20,12 @@ export class CurrencyFormatPipe implements PipeTransform {
|
||||
return '';
|
||||
}
|
||||
|
||||
let prefix = amount < 0 ? '-' : '';
|
||||
|
||||
if(currency === 'USD') {
|
||||
prefix += '$';
|
||||
}
|
||||
|
||||
let minDigits = Math.min(2, precision);
|
||||
|
||||
return prefix +
|
||||
this.decimalPipe.transform(
|
||||
Math.abs(amount) / Math.pow(10, precision),
|
||||
'1.' + minDigits + '-' + precision);
|
||||
// note: we can drop the cast to any if we change the ts target from es5 to es2020 or newer.
|
||||
return Intl.NumberFormat(navigator.language, {
|
||||
style: "currency",
|
||||
currency,
|
||||
minimumFractionDigits: precision,
|
||||
signDisplay: "negative",
|
||||
} as any).format(amount / Math.pow(10, precision));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user