Compare commits

...

14 Commits

Author SHA1 Message Date
Patrick Nagurny
b0c129c980 Merge pull request #65 from alokmenghrajani/alok/fix_form_group_bug
Fixes <label> for attribute
2025-01-21 18:59:52 -07:00
Alok Menghrajani
62ec4a21fa Fixes <label> for attribute
The current for attribute is incorrect when creating a new organization. As a
result, clicking on the label does not select the proper radio button.
2025-01-20 13:53:39 +01:00
Patrick Nagurny
e093e0cdbe Merge pull request #64 from alokmenghrajani/dashboard_recent_transactions_account_name
Show account name on the dashboard's recent transactions
2023-11-20 12:44:02 -07:00
Alok Menghrajani
7a3deb4006 Show account name on the dashboard's recent transactions
If a transaction description is brief, it is useful to provide context by showing
the account name.

Note: this commit isn't ideal since it doesn't show all the accounts involved for
a given transaction. This might however be good enough for now.
2023-11-20 18:19:32 +01:00
Patrick Nagurny
9a6eef2fcc Merge pull request #63 from alokmenghrajani/main
Add currency when calling currencyFormat
2023-09-28 08:57:22 -06:00
Alok Menghrajani
7cf5c4a392 Tweak currencyFormat to display currency when it's not USD 2023-09-28 12:12:53 +02:00
Alok Menghrajani
bb93ac6bb5 Add currency when calling currencyFormat 2023-09-21 02:04:15 +02:00
Patrick Nagurny
ef36779afc fix transaction constructor 2020-08-26 10:30:34 -06:00
Patrick Nagurny
1dc3a849ba Merge pull request #29 from pnagurny/enhance/update-deps20200821
update deps
2020-08-21 12:24:53 -06:00
Patrick Nagurny
dce3701171 update deps 2020-08-21 12:23:00 -06:00
Patrick Nagurny
9a3a2e06c1 Merge pull request #27 from pnagurny/feature/business-accounts
default business accounts
2020-07-23 11:54:58 -06:00
Patrick Nagurny
ead6777089 business accounts 2020-07-23 11:45:26 -06:00
Patrick Nagurny
8133927c4b Merge pull request #25 from pnagurny/fix/copyright-2020
copyright 2020
2020-06-18 11:35:44 -06:00
Patrick Nagurny
8559b96c02 copyright 2020 2020-06-18 11:34:27 -06:00
17 changed files with 2989 additions and 3287 deletions

6006
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -37,7 +37,7 @@
"zone.js": "~0.8.26" "zone.js": "~0.8.26"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "~0.8.0", "@angular-devkit/build-angular": "^0.13.10",
"@angular/cli": "~6.2.5", "@angular/cli": "~6.2.5",
"@angular/compiler-cli": "^6.1.0", "@angular/compiler-cli": "^6.1.0",
"@angular/language-service": "^6.1.0", "@angular/language-service": "^6.1.0",

View File

@@ -71,7 +71,7 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
<p>Copyright &copy; 2019 Open Accounting, LLC<br> <p>Copyright &copy; 2020 Open Accounting, LLC<br>
<a href="/tou">Terms of Use</a> | <a href="/privacy-policy">Privacy Policy</a></p> <a href="/tou">Terms of Use</a> | <a href="/privacy-policy">Privacy Policy</a></p>
</div> </div>

View File

@@ -23,6 +23,7 @@ import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/debounceTime'; import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/take'; import 'rxjs/add/operator/take';
import { Util } from '../shared/util'; import { Util } from '../shared/util';
import { businessAccounts } from '../fixtures/businessAccounts';
import { personalAccounts } from '../fixtures/personalAccounts'; import { personalAccounts } from '../fixtures/personalAccounts';
import { ErrorObservable } from 'rxjs/observable/ErrorObservable'; import { ErrorObservable } from 'rxjs/observable/ErrorObservable';
@@ -62,7 +63,7 @@ export class AccountService {
if(options.createDefaultAccounts) { if(options.createDefaultAccounts) {
this.getAccountTree().take(1).switchMap(tree => { this.getAccountTree().take(1).switchMap(tree => {
return this.createDefaultAccounts(tree); return this.createDefaultAccounts(tree, options.createDefaultAccounts);
}).subscribe(accounts => { }).subscribe(accounts => {
log.debug('Created default accounts'); log.debug('Created default accounts');
log.debug(accounts); log.debug(accounts);
@@ -590,7 +591,7 @@ export class AccountService {
return this.apiService.deleteAccount(id); return this.apiService.deleteAccount(id);
} }
createDefaultAccounts(tree: AccountTree): Observable<any> { createDefaultAccounts(tree: AccountTree, type: string): Observable<any> {
let assetAccount = tree.getAccountByName('Assets', 1); let assetAccount = tree.getAccountByName('Assets', 1);
let equityAccount = tree.getAccountByName('Equity', 1); let equityAccount = tree.getAccountByName('Equity', 1);
let liabilityAccount = tree.getAccountByName('Liabilities', 1); let liabilityAccount = tree.getAccountByName('Liabilities', 1);
@@ -608,10 +609,10 @@ export class AccountService {
'Expenses': [expenseAccount.id, true] 'Expenses': [expenseAccount.id, true]
}; };
let newAccounts; let newAccounts = type === 'business' ? businessAccounts : personalAccounts;
try { try {
newAccounts = personalAccounts.map(data => { newAccounts = newAccounts.map(data => {
let id = Util.newGuid(); let id = Util.newGuid();
let [parentId, debitBalance] = accountNameMap[data.parent]; let [parentId, debitBalance] = accountNameMap[data.parent];

View File

@@ -37,7 +37,7 @@ export class OrgService {
return this.apiService.getOrgs(); return this.apiService.getOrgs();
} }
newOrg(org: Org, createDefaultAccounts: boolean): Observable<Org> { newOrg(org: Org, createDefaultAccounts: string): Observable<Org> {
let sessionOptions = new SessionOptions({ let sessionOptions = new SessionOptions({
createDefaultAccounts: createDefaultAccounts createDefaultAccounts: createDefaultAccounts
}); });

View File

@@ -20,7 +20,7 @@
<h5>Current spending</h5> <h5>Current spending</h5>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h5>{{expenseAmount | currencyFormat:org.precision}}</h5> <h5>{{expenseAmount | currencyFormat:org.precision:org.currency}}</h5>
</div> </div>
</div> </div>
<div class="row" *ngFor="let expense of expenseAccounts" [routerLink]="'/accounts/'+expense.id+'/transactions'" [ngClass]="{hidden: hiddenExpenses[expense.id]}"> <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}} {{expense.fullName | accountName:2}}
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
{{expense.nativeBalanceCost | currencyFormat:org.precision}} {{expense.nativeBalanceCost | currencyFormat:org.precision:org.currency}}
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@@ -59,10 +59,11 @@
{{recentTx.tx.date | datetz:"M/D":org.timezone}} {{recentTx.tx.date | datetz:"M/D":org.timezone}}
</div> </div>
<div class="col-5 col-md-6 description"> <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>
<div class="col-4 col-md-4 amount" [ngClass]="{'negative': recentTx.split.amount > 0}"> <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> </div>
<div class="row"> <div class="row">

View File

@@ -41,6 +41,19 @@
.expanded .hidden { .expanded .hidden {
display: flex display: flex
} }
.row {
padding-bottom: 1em;
.description {
.primary:empty::after {
content: ".";
visibility: hidden;
}
.additional {
font-size: small;
color: $black;
}
}
}
} }
@media (max-width: 767px) { @media (max-width: 767px) {

View File

@@ -0,0 +1,123 @@
export const businessAccounts: any =
[
{
"name": "Checking",
"parent": "Assets"
},
{
"name": "Petty Cash",
"parent": "Assets"
},
{
"name": "Accounting",
"parent": "Expenses"
},
{
"name": "Accounts Receivable",
"parent": "Assets"
},
{
"name": "Capital",
"parent": "Equity"
},
{
"name": "Drawing",
"parent": "Equity"
},
{
"name": "Accounts Payable",
"parent": "Liabilities"
},
{
"name": "Credit Card",
"parent": "Liabilities"
},
{
"name": "Auto",
"parent": "Expenses"
},
{
"name": "Bank Fees",
"parent": "Expenses"
},
{
"name": "Computer Equipment",
"parent": "Expenses"
},
{
"name": "Cost of Goods Sold",
"parent": "Expenses"
},
{
"name": "Dining / Entertainment",
"parent": "Expenses"
},
{
"name": "Internet",
"parent": "Expenses"
},
{
"name": "Legal",
"parent": "Expenses"
},
{
"name": "Licenses / Fees",
"parent": "Expenses"
},
{
"name": "Marketing",
"parent": "Expenses"
},
{
"name": "Miscellaneous",
"parent": "Expenses"
},
{
"name": "Office Furniture",
"parent": "Expenses"
},
{
"name": "Office Rent",
"parent": "Expenses"
},
{
"name": "Office Supplies",
"parent": "Expenses"
},
{
"name": "Payment Processing",
"parent": "Expenses"
},
{
"name": "Payroll",
"parent": "Expenses"
},
{
"name": "Phone",
"parent": "Expenses"
},
{
"name": "Shipping",
"parent": "Expenses"
},
{
"name": "Software",
"parent": "Expenses"
},
{
"name": "Tax Preparation",
"parent": "Expenses"
},
{
"name": "Travel",
"parent": "Expenses"
},
{
"name": "Web Domains / Hosting",
"parent": "Expenses"
},
{
"name": "Sales",
"parent": "Income"
}
];

View File

@@ -41,13 +41,24 @@
</option> </option>
</select> </select>
</div> </div>
<p>Create default accounts (can be customized later)</p>
<div class="form-group"> <div class="form-group">
<label for="createDefaultAccounts">Create default accounts<br>(can be customized later)</label> <div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts" type="checkbox" class="form-control" /> <input formControlName="createDefaultAccounts" id="createDefaultAccounts1" type="radio" class="form-check-input" value="" />
<label for="createDefaultAccounts1" class="form-check-label">None</label>
</div>
<div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts2" type="radio" class="form-check-input" value="business" />
<label for="createDefaultAccounts2" class="form-check-label">Business accounts</label>
</div>
<div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts3" type="radio" class="form-check-input" value="personal" />
<label for="createDefaultAccounts3" class="form-check-label">Personal accounts</label>
</div>
</div> </div>
<p *ngIf="error" class="error"> <p *ngIf="error" class="error">
{{error.message}} {{error.message}}
</p> </p>
<button type="submit" class="btn btn-primary" [disabled]="!form.valid">Submit</button> <button type="submit" class="btn btn-primary" [disabled]="!form.valid">Submit</button>
</form> </form>
</div> </div>

View File

@@ -39,7 +39,7 @@ export class NewOrgPage {
'currency': ['USD', Validators.required], 'currency': ['USD', Validators.required],
'precision': [2, Validators.required], 'precision': [2, Validators.required],
'timezone': [this.defaultTz, Validators.required], 'timezone': [this.defaultTz, Validators.required],
'createDefaultAccounts': [true, Validators.required] 'createDefaultAccounts': ['business']
}); });
this.joinOrgForm = fb.group({ this.joinOrgForm = fb.group({

View File

@@ -148,10 +148,19 @@
</select> </select>
</div> </div>
</div> </div>
<div class="form-group row"> <p>Create default accounts (can be customized later)</p>
<label for="createDefaultAccounts" class="col-sm-3 col-form-label">Create default accounts<br>(can be customized later)</label> <div class="form-group">
<div class="col-sm-9"> <div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts" type="checkbox" class="form-control" /> <input formControlName="createDefaultAccounts" id="createDefaultAccounts1" type="radio" class="form-check-input" value="" />
<label for="createDefaultAccounts1" class="form-check-label">None</label>
</div>
<div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts2" type="radio" class="form-check-input" value="business" />
<label for="createDefaultAccounts2" class="form-check-label">Business accounts</label>
</div>
<div class="form-check">
<input formControlName="createDefaultAccounts" id="createDefaultAccounts3" type="radio" class="form-check-input" value="personal" />
<label for="createDefaultAccounts3" class="form-check-label">Personal accounts</label>
</div> </div>
</div> </div>
<p *ngIf="newOrgError" class="error">{{newOrgError.message}}</p> <p *ngIf="newOrgError" class="error">{{newOrgError.message}}</p>

View File

@@ -72,7 +72,7 @@ export class OrgPage {
'currency': ['', Validators.required], 'currency': ['', Validators.required],
'precision': [null, Validators.required], 'precision': [null, Validators.required],
'timezone': [this.defaultTz, Validators.required], 'timezone': [this.defaultTz, Validators.required],
'createDefaultAccounts': [true, Validators.required] 'createDefaultAccounts': ['']
}); });
} }
@@ -95,7 +95,7 @@ export class OrgPage {
currency: this.currentOrg.currency, currency: this.currentOrg.currency,
precision: this.currentOrg.precision, precision: this.currentOrg.precision,
timezone: this.defaultTz, timezone: this.defaultTz,
createDefaultAccounts: true createDefaultAccounts: ''
} }
); );

View File

@@ -29,8 +29,8 @@
<h4>Assets</h4> <h4>Assets</h4>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h4 *ngIf="priceSource === 'price'">{{+assetAccount.totalNativeBalancePrice | 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}}</h4> <h4 *ngIf="priceSource === 'cost'">{{+assetAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
</div> </div>
</div> </div>
<div class="row" *ngFor="let account of assetAccounts" [attr.depth]="account.depth"> <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> <span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice"> <div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
{{+account.totalNativeBalancePrice | currencyFormat:org.precision}} {{+account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost"> <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> </div>
<div class="row"> <div class="row">
@@ -55,8 +55,8 @@
<h4>Liabilities</h4> <h4>Liabilities</h4>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h4 *ngIf="priceSource === 'price'">{{-liabilityAccount.totalNativeBalancePrice | 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}}</h4> <h4 *ngIf="priceSource === 'cost'">{{-liabilityAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
</div> </div>
</div> </div>
<div class="row" *ngFor="let account of liabilityAccounts" [attr.depth]="account.depth"> <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> <span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice"> <div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
{{-account.totalNativeBalancePrice | currencyFormat:org.precision}} {{-account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost"> <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> </div>
<div class="row" depth="1"> <div class="row" depth="1">
@@ -76,8 +76,8 @@
<h4>Equity</h4> <h4>Equity</h4>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h4 *ngIf="priceSource === 'price'">{{-equityAccount.totalNativeBalancePrice | 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}}</h4> <h4 *ngIf="priceSource === 'cost'">{{-equityAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
</div> </div>
</div> </div>
<div class="row" *ngFor="let account of equityAccounts" [attr.depth]="account.depth"> <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> <span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice"> <div class="col-4 amount" *ngIf="priceSource === 'price' && account.totalNativeBalancePrice">
{{-account.totalNativeBalancePrice | currencyFormat:org.precision}} {{-account.totalNativeBalancePrice | currencyFormat:org.precision:org.currency}}
</div> </div>
<div class="col-4 amount" *ngIf="priceSource === 'cost' && account.totalNativeBalanceCost"> <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> </div>
</div> </div>

View File

@@ -24,7 +24,7 @@
<h4>Income</h4> <h4>Income</h4>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h4>{{-incomeAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4> <h4>{{-incomeAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
</div> </div>
</div> </div>
<div class="row" *ngFor="let account of incomeAccounts" [attr.depth]="account.depth"> <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> <span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
</div> </div>
<div class="col-4 amount" *ngIf="account.totalNativeBalanceCost"> <div class="col-4 amount" *ngIf="account.totalNativeBalanceCost">
{{-account.totalNativeBalanceCost | currencyFormat:org.precision}} {{-account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
</div> </div>
</div> </div>
<div class="row" depth="1"> <div class="row" depth="1">
@@ -41,7 +41,7 @@
<h4>Expenses</h4> <h4>Expenses</h4>
</div> </div>
<div class="col-4 amount"> <div class="col-4 amount">
<h4>{{expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision}}</h4> <h4>{{expenseAccount.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}</h4>
</div> </div>
</div> </div>
<div class="row" *ngFor="let account of expenseAccounts" [attr.depth]="account.depth"> <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> <span *ngIf="!account.children.length"><a [routerLink]="'/accounts/' + account.id + '/transactions'">{{account.name | slice:0:30}}</a></span>
</div> </div>
<div class="col-4 amount" *ngIf="account.totalNativeBalanceCost"> <div class="col-4 amount" *ngIf="account.totalNativeBalanceCost">
{{account.totalNativeBalanceCost | currencyFormat:org.precision}} {{account.totalNativeBalanceCost | currencyFormat:org.precision:org.currency}}
</div> </div>
</div> </div>
<div class="row" depth="1"> <div class="row" depth="1">
@@ -58,7 +58,7 @@
<h4>Net Income</h4> <h4>Net Income</h4>
</div> </div>
<div class="col-4 amount"> <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> </div>
</div> </div>

View File

@@ -1,7 +1,16 @@
import { Pipe, PipeTransform } from '@angular/core'; import { Pipe, PipeTransform } from '@angular/core';
import { DecimalPipe } from '@angular/common'; 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 { export class CurrencyFormatPipe implements PipeTransform {
constructor(private decimalPipe: DecimalPipe) { constructor(private decimalPipe: DecimalPipe) {
} }
@@ -11,17 +20,12 @@ export class CurrencyFormatPipe implements PipeTransform {
return ''; return '';
} }
let prefix = amount < 0 ? '-' : ''; // 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, {
if(currency === 'USD') { style: "currency",
prefix += '$'; currency,
} minimumFractionDigits: precision,
signDisplay: "negative",
let minDigits = Math.min(2, precision); } as any).format(amount / Math.pow(10, precision));
return prefix +
this.decimalPipe.transform(
Math.abs(amount) / Math.pow(10, precision),
'1.' + minDigits + '-' + precision);
} }
} }

View File

@@ -1,5 +1,5 @@
export class SessionOptions { export class SessionOptions {
createDefaultAccounts: boolean; createDefaultAccounts: string;
constructor(options: any = {}) { constructor(options: any = {}) {
this.createDefaultAccounts = options.createDefaultAccounts; this.createDefaultAccounts = options.createDefaultAccounts;
} }

View File

@@ -11,8 +11,8 @@ export class Transaction {
splits: Split[]; splits: Split[];
constructor(options: any = {}) { constructor(options: any = {}) {
this.id = options.id; this.id = options.id;
this.orgId = options.id; this.orgId = options.orgId;
this.userId = options.id; this.userId = options.userId;
this.date = options.date ? new Date(options.date) : null; this.date = options.date ? new Date(options.date) : null;
this.inserted = options.inserted ? new Date(options.inserted) : null; this.inserted = options.inserted ? new Date(options.inserted) : null;
this.updated = options.updated ? new Date(options.updated) : null; this.updated = options.updated ? new Date(options.updated) : null;