define(function(require) {
  var BaseDataModel = require('app/models/data/BaseDataModel'),
      filterByItem = require('app/data/operations/filterByItem'),
      filterByEmployee = require('app/data/operations/filterByEmployee');

  var RevenueOverTimeModel = BaseDataModel.extend(function RevenueOverTimeModel() {
    BaseDataModel.apply(this, arguments);
    this.addDataOperation(_dataOperation);
  });

  function _dataOperation(handle) {
    // Filter if necessary
    filterByItem(handle, this.get('itemId'));
    filterByEmployee(handle, this.get('employeeName'));

    handle
      .map(function(order) {
        return {
          total: order.total,
          modified: order.modified
        };
      });
  }

  return RevenueOverTimeModel;
});
define(function(require) {
  var BaseDataModel = require('app/models/data/BaseDataModel');

  var BaseMetricsModel = BaseDataModel.extend(function BaseMetricsModel() {
    BaseDataModel.apply(this, arguments);
  }, {
    addMetric: function(name, dataOperation) {
      if (typeof name === 'object') {
        for (var key in name) {
          this.addMetric(key, name[key]);
        }
      } else {
        this.addDataOperation(function(handle) {
          dataOperation.call(this, handle);
          handle.done(function(data) {
            this.set(name, data);
          }.bind(this));
        });
      }
    }
  });

  return BaseMetricsModel;
});