5
votes

I am building a dashboard application for an accounting department.

The user will select a month, and see all the companies that meet certain criteria in that month. The routes will be

/:month_id                         a summary page
/:month_id/companies               more details about each company
/:month_id/companies/:company_id   all details about a single company

Ideally I'd have a month model which hasMany company models. The only problem is, companies will show up in multiple months.

Correct me if I'm wrong, but doesn't this mean that if a company is already in the store, when a new month is requested, it will take that company's data from the store instead of from the server? The data will be different for each month, so this wouldn't work for me.

I suppose in this application each company's id is really their normal, integer id plus the selected month. So one way around this would be to give each company an id like '15-Mar-2013'.

Alternatively, I could just pass each month's companies data through raw and do transformations on the plain array. The problem with this, though, is that I'll have to calculate aggregates on companies (in addition to the entire month), and it would be very nice to keep those two things separate. If I had a completely separate Company model, I could just go to town within the model:

App.Company = DS.Model.extend({
    month: DS.belongsTo('App.Month'),
    name: DS.attr('string'),
    contracts: DS.hasMany('App.Contract'),

    totalRevenue: function() {
        return this.get('contracts')
            .filterProperty('type', 'newSetup')
            .getEach('feeChange').reduce(function(accum, item) {
                return accum + item;
            }, 0);
    }.property('[email protected]'),

    ...additional aggregation functions
});

What do you think?

1
If the data for the company is different every month then the record is not a company. It's a CompanyReport or something. - Brian Donovan
Agreed, but still - how to solve the problem? Assign an arbitrary id to the CompanyReport? The CompanyReport is essentially a filtered snapshot of some set of server data. - Sam Selikoff

1 Answers

0
votes

It doesn't make any sense to me that months own companies, which is what your month[1]->[N]company relationship indicates.

What you want to say is that you're looking for all companies that have certain criteria that occur within a month. The month chosen is just part of the search criteria.