Skip to content
3 changes: 2 additions & 1 deletion app/controllers/marketplace.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ var MarketplaceController = Ember.ObjectController.extend({

transactionSelected: isSelected('marketplace.transactions', 'credits', 'debits', 'holds', 'refunds', 'reversals'),
orderSelected: isSelected('marketplace.orders', 'orders'),
settlementSelected: isSelected('marketplace.settlements', 'settlement'),
disputeSelected: isSelected('marketplace.disputes', 'dispute'),
customerSelected: isSelected('marketplace.customers', 'customer'),
fundingInstrumentSelected: isSelected('marketplace.funding_instruments', 'bank_accounts', 'cards'),
disputeSelected: isSelected('marketplace.disputes', 'dispute'),
logSelected: isSelected('marketplace.logs', 'log'),
invoiceSelected: isSelected('marketplace.invoices', 'invoice'),
settingSelected: isSelected('marketplace.settings'),
Expand Down
16 changes: 16 additions & 0 deletions app/controllers/marketplace/settlements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import Ember from "ember";

var MarketplaceSettlementsController = Ember.ObjectController.extend({
needs: ['marketplace'],
resultsLoader: Ember.computed.oneWay("model"),
actions: {
changeDateFilter: function(startTime, endTime) {
this.get("resultsLoader").setProperties({
endTime: endTime,
startTime: startTime
});
},
}
});

export default MarketplaceSettlementsController;
8 changes: 8 additions & 0 deletions app/models/bk/account.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
`import Ember from "ember";`
`import BkAccount from "balanced-addon-models/models/account";`

Account = BkAccount.extend(
routeName: "account"
)

`export default Account;`
6 changes: 3 additions & 3 deletions app/models/bk/bank-account.coffee
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
`import Ember from "ember";`
`import BankAccount from "balanced-addon-models/models/bank-account";`
`import BkBankAccount from "balanced-addon-models/models/bank-account";`

BkBankAccount = BankAccount.extend(
BankAccount = BkBankAccount.extend(
)

`export default BkBankAccount;`
`export default BankAccount;`
8 changes: 8 additions & 0 deletions app/models/bk/settlement.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
`import Ember from "ember";`
`import BkSettlement from "balanced-addon-models/models/settlement";`

Settlement = BkSettlement.extend(
routeName: "settlement"
)

`export default Settlement;`
7 changes: 7 additions & 0 deletions app/models/customer.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import Model from "./core/model";
import Computed from "balanced-dashboard/utils/computed";
import FundingInstrumentsResultsLoader from "./results-loaders/funding-instruments";
import TransactionsResultsLoader from "./results-loaders/transactions";
import AccountsResultsLoader from "./results-loaders/accounts";

var CUSTOMER_TYPES = {
BUSINESS: 'Business',
Expand Down Expand Up @@ -73,6 +74,12 @@ var Customer = Model.extend({
}, attributes);
return TransactionsResultsLoader.create(attributes);
},
getAccountsLoader: function(attributes) {
attributes = _.extend({
path: this.get("accounts_uri"),
}, attributes);
return AccountsResultsLoader.create(attributes);
},

type: function() {
return (this.get('ein') || this.get('business_name')) ? CUSTOMER_TYPES.BUSINESS : CUSTOMER_TYPES.PERSON;
Expand Down
8 changes: 8 additions & 0 deletions app/models/results-loaders/accounts.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import BaseResultsLoader from "./base";
import Account from "../bk/account";

var AccountsResultsLoader = BaseResultsLoader.extend({
resultsType: Account,
});

export default AccountsResultsLoader;
8 changes: 8 additions & 0 deletions app/models/results-loaders/settlements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import BaseResultsLoader from "./base";
import Settlement from "../bk/settlement";

var SettlementsResultsLoader = BaseResultsLoader.extend({
resultsType: Settlement,
});

export default SettlementsResultsLoader;
3 changes: 3 additions & 0 deletions app/router.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ Router.map ->
this.route("customers")
this.resource('customer', path: '/customers/:item_id')

this.route("settlements")
this.resource('settlement', path: '/settlements/:item_id')

this.route("disputes")
this.resource('dispute', path: '/disputes/:item_id')

Expand Down
7 changes: 7 additions & 0 deletions app/routes/customer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import ModelRoute from "./model";
import Customer from "../models/customer";
import LegacyResultsLoaderWrapper from "balanced-dashboard/utils/legacy-results-loader-wrapper";

var CustomerRoute = ModelRoute.extend({
title: 'Customer',
Expand All @@ -8,6 +9,12 @@ var CustomerRoute = ModelRoute.extend({
setupController: function(controller, customer) {
this._super(controller, customer);

var store = this.container.lookup("controller:marketplace").get("store");
store.fetchCollection("account", customer.get("accounts_uri"), { limit: 10 }).then(function(collection) {
var wrapper = LegacyResultsLoaderWrapper.create({collection: collection});
controller.set("accountsResultsLoader", wrapper);
});

controller.setProperties({
fundingInstrumentsResultsLoader: customer.getFundingInstrumentsLoader({
limit: 10
Expand Down
15 changes: 15 additions & 0 deletions app/routes/marketplace/settlements.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import AuthRoute from "../auth";
import LegacyResultsLoaderWrapper from "balanced-dashboard/utils/legacy-results-loader-wrapper";

var MarketplaceSettlementsRoute = AuthRoute.extend({
pageTitle: 'Settlements',
model: function() {
var store = this.container.lookup("controller:marketplace").get("store");
return store.fetchCollection("settlement", "/settlements", { limit: 50 }).then(function(collection) {
var wrapper = LegacyResultsLoaderWrapper.create({collection: collection});
return wrapper;
});
},
});

export default MarketplaceSettlementsRoute;
13 changes: 13 additions & 0 deletions app/routes/settlement.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import ModelRoute from "./model";
import Settlement from "../models/bk/settlement";

var SettlementRoute = ModelRoute.extend({
title: 'Settlement',
modelObject: Settlement,
marketplaceUri: 'settlements_uri',
setupController: function(controller, customer) {
this._super(controller, customer);
}
});

export default SettlementRoute;
2 changes: 2 additions & 0 deletions app/stores/balanced.coffee
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ BalancedStore = Store.extend(
modelMaps:
bank_account: "model:bk/bank-account"
customer: "model:bk/customer"
account: "model:bk/customer"
settlement: "model:bk/customer"
)

`export default BalancedStore;`
5 changes: 5 additions & 0 deletions app/templates/customer.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@
{{view "results/embedded-funding-instruments-table" loader=fundingInstrumentsResultsLoader}}
</div>

<h3>Accounts</h3>
<div class="results">
{{view "results/embedded-funding-instruments-table" loader=accountsResultsLoader}}
</div>

<h3>Logs</h3>
<div class="results">
{{view "resource-logs" content=model}}
Expand Down
9 changes: 9 additions & 0 deletions app/templates/marketplace/settlements.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{{view "page-navigations/page-navigation" title="Settlements"}}

<nav class="results-actions-bar"></nav>

<div class="results">
<div class="items-wrapper">
{{view "results/settlements-table" loader=resultsLoader}}
</div>
</div>
28 changes: 28 additions & 0 deletions app/templates/results/grouped-settlement-row.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<td {{bind-attr class="view.item.route_name :status :two-lines"}}>
{{#link-to view.routeName view.item}}
<span {{bind-attr class="view.isBlank:sl-none view.spanClassNames"}}>
{{view.displayValue}}
</span>
{{/link-to}}
</td>
<td class="customer two-lines">
{{#link-to view.routeName view.item}}
<span {{bind-attr class="view.spanClassNames"}}>
{{view.paymentMethodText}}
</span>
{{/link-to}}
</td>
<td class="payment-method two-lines">
{{#link-to view.routeName view.item}}
<span {{bind-attr class="view.spanClassNames"}}>
{{view.paymentMethodText}}
</span>
{{/link-to}}
</td>
<td class="amount num">
{{#link-to view.routeName view.item}}
<span {{bind-attr class="view.spanClassNames"}}>
{{view.amountText}}
</span>
{{/link-to}}
</td>
41 changes: 41 additions & 0 deletions app/templates/results/settlements-table.hbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<thead>
<tr>
<th class="col-md-4">
{{view "results/settlements-transaction-results-dropdown-filter"}}
</th>
<th class="col-md-2 account"><span>Customer</span></th>
<th class="col-md-2 funding-instrument"><span>Payment method</span></th>
<th class="col-md-2 funding-instrument"><span></span></th>
<th class="col-md-2 amount num has-filter">
{{#view "results/results-loader-sort-column-header" resultsLoader=view.loader field="amount" actionName="changeDisputesSort"}}
<span>Amount</span>
{{/view}}
</th>
</tr>
</thead>

{{#if view.loader.results.hasNextPage}}
{{view "results/results-load-more" results=view.loader.results columns=view.colspan}}
{{/if}}

<tbody>
{{#each dispute in view.loader.results}}
<tr>
<td class="grouped-transactions-container" colspan="5">
{{#view "results/grouped-transactions-table"}}
{{view "results/grouped-settlement-row" item=view.parentView.transaction.dispute}}
{{/view}}
</td>
</tr>
{{else}}
<tr>
<td colspan="5" class="no-results">
{{#if view.loader.results.isLoaded}}
No settlements
{{else}}
Loading...
{{/if}}
</td>
</tr>
{{/each}}
</tbody>
28 changes: 28 additions & 0 deletions app/utils/legacy-results-loader-wrapper.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
`import Ember from "ember";`

LegacyResultsLoaderWrapper = Ember.Object.extend(
results: Ember.computed.reads("collection")
isLoading: Ember.computed.reads("collection.isLoading")

loadNextPage: ->
@get("collection").loadNextPage()
)

LegacyResultsLoaderWrapper.reopenClass(
generateMethod: (methodName) ->
return (attributes) ->
LegacyResultsLoaderWrapper.createForCollection(=>
return @[methodName](attributes || {})
)

createForCollection: (initializer) ->
loader = @create(collection: [])
if Ember.isArray(initializer)
loader.set("collection", initializer)
else
initializer().then (collection) ->
loader.set("collection", collection)
loader
)

`export default LegacyResultsLoaderWrapper;`
8 changes: 8 additions & 0 deletions app/views/results/settlements-table.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import ResultsTableView from "./results-table";

var SettlementsResultsView = ResultsTableView.extend({
classNames: 'settlements',
templateName: 'results/settlements-table'
});

export default SettlementsResultsView;
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import ResultsDropdownFilterView from "./results-dropdown-filter";
import { defineFilter } from "./results-dropdown-filter";

var SettlementsTransactionResultsDropdownFilterView = ResultsDropdownFilterView.extend({
toggleText: "Status",
filters: function() {
return [
defineFilter("All", null, true),
defineFilter("Needs attention & Under review", ["pending"]),
defineFilter("Won", ["won"]),
defineFilter("Lost", ["lost"])
];
}.property(),

actions: {
setFilter: function(filterLink) {
var controller = this.get('controller');
controller.send('changeDisputeStatusFilter', filterLink.value);
this.toggleSelected(filterLink);
}
}
});

export default SettlementsTransactionResultsDropdownFilterView;
23 changes: 14 additions & 9 deletions app/views/sidebar/marketplace-sidebar.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,10 @@ var SIDEBAR_ITEMS = [{
routeName: "marketplace.orders",
isSelectedBinding: "controller.controllers.marketplace.paymentSelected",
}, {
linkText: "Customers",
linkIcon: "icon-customers",
routeName: "marketplace.customers",
isSelectedBinding: "controller.controllers.marketplace.customerSelected"
}, {
linkText: "Payment methods",
linkIcon: "icon-card",
routeName: "marketplace.funding_instruments",
isSelectedBinding: "controller.controllers.marketplace.fundingInstrumentSelected"
linkText: "Settlements",
linkIcon: "icon-settlements",
routeName: "marketplace.settlements",
isSelectedBinding: "controller.controllers.marketplace.settlementSelected",
}, {
linkText: "Disputes",
linkIcon: "icon-disputes",
Expand All @@ -26,6 +21,16 @@ var SIDEBAR_ITEMS = [{
linkIcon: "icon-logs",
routeName: "marketplace.logs",
isSelectedBinding: "controller.controllers.marketplace.logSelected"
}, {
linkText: "Customers",
linkIcon: "icon-customers",
routeName: "marketplace.customers",
isSelectedBinding: "controller.controllers.marketplace.customerSelected"
}, {
linkText: "Payment methods",
linkIcon: "icon-card",
routeName: "marketplace.funding_instruments",
isSelectedBinding: "controller.controllers.marketplace.fundingInstrumentSelected"
}, {
linkText: "Account statements",
linkIcon: "icon-invoices",
Expand Down
2 changes: 1 addition & 1 deletion bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
"ember-validations": "lcoq/ember-validations",
"google-code-prettify": "1.0.0",
"handlebars": "~1.3.0",
"strapped": "0.3.14",
"strapped": "0.3.15",
"jquery-csv": "",
"jquery-hotkeys": "jeresig/jquery.hotkeys",
"jquery.cookie": "1.3.1",
Expand Down