Skip to content

Commit

Permalink
added charts. modal for stats
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrewglass1 committed Jul 2, 2012
1 parent 4de8dd3 commit 97bba7a
Show file tree
Hide file tree
Showing 10 changed files with 225 additions and 19 deletions.
14 changes: 14 additions & 0 deletions app/assets/javascripts/markets.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@ $(document).ready(function() {
}
});

$('.revenue-dollar').click(function() {
dollarRevenue();
});

var dollarRevenue = function() {
$("#revenue-range").slider("values", 0, 1);
$("#revenue-range").slider("values", 1, Market.max_revenue);
RevenueRangeFilter.min = 1;
RevenueRangeFilter.max = Market.max_revenue;
$( "#filtered-rev" ).val( "$" + 1 + " - $" + RevenueRangeFilter.max );
applyAllFilters();
}


//properties

var AllPropertyFilters = [];
Expand Down
14 changes: 12 additions & 2 deletions app/assets/stylesheets/bootstrap_and_overrides.css.less
Original file line number Diff line number Diff line change
Expand Up @@ -188,5 +188,15 @@ revenue-reset {
background: #eeeeee;
}



a.catinfo:hover{z-index:25; background-color:#ff0}

a.catinfo span{display: none}

a.catinfo:hover span{ /*the span will display just on :hover state*/
display:block;
position:absolute;
top:2em; left:2em; width:15em;
border:1px solid #262626;
background-color:#cff; color:#eb3f3c;
text-align: center}
.modal { width: 800px; margin-left: 400px; }
4 changes: 0 additions & 4 deletions app/controllers/markets_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,4 @@ def index
@markets = Market.all
end

def stats
@market = Market.find(params[:id])
end

end
41 changes: 39 additions & 2 deletions app/models/market.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def all_csa_zipcodes
csa_zips.collect {|csazip| csazip.csa_zipcode}
end


def categories_index
cats = deals.map(&:category).compact
index = {}
Expand All @@ -50,7 +51,9 @@ def categories_index_with_total_revenue
index.sort_by { |key, value| value }.reverse
end

def graphael_data


def graphael_data_categories
revenues = categories_index_with_total_revenue.collect {|category,revenue| revenue}
legend = categories_index_with_total_revenue.collect {|category,revenue| "%%.%% - #{category.html_safe}" }
[revenues, legend]
Expand All @@ -67,12 +70,46 @@ def self.categories_index_with_total_revenue
index.sort_by { |key, value| value }.reverse
end

def self.graphael_data
def self.graphael_data_categories
revenues = Market.categories_index_with_total_revenue.collect {|category,revenue| revenue}
legend = Market.categories_index_with_total_revenue.collect {|category,revenue| "%%.%% - #{category.html_safe}" }
[revenues, legend]
end

def providers_index_with_total_revenue
index = {}
providers = deals.map(&:provider).uniq.compact
providers.each do |provider|
deals = Deal.where("provider = '#{provider}' AND market_id = #{id}")
revenue = deals.map(&:revenue).compact.sum
index[provider] = revenue
end
index.sort_by { |key, value| value }.reverse
end

def graphael_data_providers
providers = providers_index_with_total_revenue.collect {|provider,revenue| revenue}
legend = providers_index_with_total_revenue.collect {|provider,revenue| "%%.%% - #{provider.html_safe}" }
[providers, legend]
end

def self.providers_index_with_total_revenue
index = {}
providers = Deal.all.map(&:provider).uniq.compact
providers.each do |provider|
deals = Deal.where("provider = '#{provider}'")
revenue = deals.map(&:revenue).compact.sum
index[provider] = revenue
end
index.sort_by { |key, value| value }.reverse
end

def self.graphael_data_providers
providers = Market.providers_index_with_total_revenue.collect {|provider,revenue| revenue}
legend = Market.providers_index_with_total_revenue.collect {|provider,revenue| "%%.%% - #{provider.html_safe}" }
[providers, legend]
end

def zips_index
zips = merchants.map(&:zip).compact
index = {}
Expand Down
2 changes: 1 addition & 1 deletion app/views/layouts/application.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<%= link_to image_tag("ls_logo.png", :class=> "pull-left"), markets_path %>
<%= image_tag "ls_logo.png", :class=> "pull-left" %>
<a class="brand">Merchant Hunter</a>
<div class="nav-collapse">
<ul class="nav">
Expand Down
139 changes: 139 additions & 0 deletions app/views/markets/_stats.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@

</br>
</br>

<table class="table table-striped pretty">
<tbody>
<tr>
<td><div id="this_market_categories"></div></td>
<td><div id="all_market_categories"></div></td>
</tr>
<tr>
<td><div id="this_market_providers"></div></td>
<td><div id="all_market_providers"></div></td>
</tr>
</tbody>
</table>



<script type="text/javascript">
window.onload = function () {

//categories by market

/* Title settings */

titleXpos = 480;
titleYpos = 85;

/* Pie Data */
pieRadius = 130;
pieXpos = 150;
pieYpos = 180;

pieLegendPos = "east";

MarketCatstitle = "<%= @market.name %>" + " Revenues By Category";
MarketCatspieData = <%=raw @market.graphael_data_categories[0] %>;
MarketCatspieLegend = <%=raw @market.graphael_data_categories[1] %>;

//market categories

var r = Raphael("this_market_categories");
r.g.text(titleXpos, titleYpos, MarketCatstitle).attr({"font-size": 20});

var pie = r.g.piechart(pieXpos, pieYpos, pieRadius, MarketCatspieData, {legend: MarketCatspieLegend, legendpos: pieLegendPos});
pie.hover(function () {
this.sector.stop();
this.sector.scale(1.1, 1.1, this.cx, this.cy);
if (this.label) {
this.label[0].stop();
this.label[0].scale(1.5);
this.label[1].attr({"font-weight": 800});
}
}, function () {
this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
if (this.label) {
this.label[0].animate({scale: 1}, 500, "bounce");
this.label[1].attr({"font-weight": 400});
}
});

//all categories

AllMarketsCatstitle = "All Markets Revenues By Category";
AllMarketsCatspieData = <%=raw Market.graphael_data_categories[0] %>;
AllMarketsCatspieLegend = <%=raw Market.graphael_data_categories[1] %>;

var r = Raphael("all_market_categories");
r.g.text(titleXpos, titleYpos, AllMarketsCatstitle).attr({"font-size": 20});

var pie = r.g.piechart(pieXpos, pieYpos, pieRadius, AllMarketsCatspieData, {legend: AllMarketsCatspieLegend, legendpos: pieLegendPos});
pie.hover(function () {
this.sector.stop();
this.sector.scale(1.1, 1.1, this.cx, this.cy);
if (this.label) {
this.label[0].stop();
this.label[0].scale(1.5);
this.label[1].attr({"font-weight": 800});
}
}, function () {
this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
if (this.label) {
this.label[0].animate({scale: 1}, 500, "bounce");
this.label[1].attr({"font-weight": 400});
}
});

//market providers
MarketProviderstitle = "<%= @market.name %>" + " Revenues By Provider";
MarketProviderspieData = <%=raw @market.graphael_data_providers[0] %>;
MarketProviderspieLegend = <%=raw @market.graphael_data_providers[1] %>;

var r = Raphael("this_market_providers");
r.g.text(titleXpos, titleYpos, MarketProviderstitle).attr({"font-size": 20});

var pie = r.g.piechart(pieXpos, pieYpos, pieRadius, MarketProviderspieData, {legend: MarketProviderspieLegend, legendpos: pieLegendPos});
pie.hover(function () {
this.sector.stop();
this.sector.scale(1.1, 1.1, this.cx, this.cy);
if (this.label) {
this.label[0].stop();
this.label[0].scale(1.5);
this.label[1].attr({"font-weight": 800});
}
}, function () {
this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
if (this.label) {
this.label[0].animate({scale: 1}, 500, "bounce");
this.label[1].attr({"font-weight": 400});
}
});

//market providers
AllMarketsProviderstitle = "All Markets Revenues By Provider";
AllMarketsProviderspieData = <%=raw Market.graphael_data_providers[0] %>;
AllMarketsProviderspieLegend = <%=raw Market.graphael_data_providers[1] %>;

var r = Raphael("all_market_providers");
r.g.text(titleXpos, titleYpos, AllMarketsProviderstitle).attr({"font-size": 20});

var pie = r.g.piechart(pieXpos, pieYpos, pieRadius, AllMarketsProviderspieData, {legend: AllMarketsProviderspieLegend, legendpos: pieLegendPos});
pie.hover(function () {
this.sector.stop();
this.sector.scale(1.1, 1.1, this.cx, this.cy);
if (this.label) {
this.label[0].stop();
this.label[0].scale(1.5);
this.label[1].attr({"font-weight": 800});
}
}, function () {
this.sector.animate({scale: [1, 1, this.cx, this.cy]}, 500, "bounce");
if (this.label) {
this.label[0].animate({scale: 1}, 500, "bounce");
this.label[1].attr({"font-weight": 400});
}
});
};
</script>
20 changes: 16 additions & 4 deletions app/views/markets/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@
<div class="row">
<div class="well span12 pull-right" >
<p class="pull-right" id="toplinks">
<%= link_to "View Market Statistics", market_stats_path(@market) %> |
<%= link_to "View All Markets", markets_path %> |
<%= link_to "Edit My Markets", user_path(current_user) %> |
<a data-toggle="modal" href="#myModal" >View Market Statistics</a> |
<%= link_to "View All Markets", markets_path, :target => "_blank" %> |
<%= link_to "Edit My Markets", user_path(current_user), :target => "_blank" %> |
<a href="#" id="placeme">Place me on map</a>

</p>
Expand Down Expand Up @@ -41,6 +41,7 @@
<p>
<input type="text" id="filtered-rev"/>
</p>
<a class="revenue-dollar">$1 +</a> |
<a class="revenue-reset">Clear Revenue Filter</a>
</div>
</div>
Expand Down Expand Up @@ -84,7 +85,7 @@
<% @market.categories_index.each do |category, freq| %>
<option><%= category %></option>
<% end %>
</select>
</select>
<a class="category-reset">Clear Category Filters</a>
<br />
<br />
Expand All @@ -99,6 +100,17 @@
</div>
</div>

<div class="modal hide" id="myModal">
<div class="modal-header">
<h3> <%= @market.name %> All Time Statistics</h3>
</div>
<div class="modal-body">
<%= render :partial => "stats" %>
</div>
<div class="modal-footer">
<a href="#" class="btn" data-dismiss="modal">Close</a>
</div>
</div>

<script type="text/javascript">
var Market = {
Expand Down
2 changes: 1 addition & 1 deletion app/views/merchants/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<tbody>
<% @deals.each do |deal| %>
<tr>
<td><%= link_to deal.short_title, deal.deal_url, :target => "blank" %></td>
<td><%= link_to deal.short_title, deal.deal_url, :target => "_blank" %></td>
<td><%= deal.date_added %></td>
<td><%= deal.category %></td>
<td><%= number_to_currency(deal.price, :unit => "$") %></td>
Expand Down
2 changes: 0 additions & 2 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,5 @@
resources :users, :only => [:show]
resources :user_markets
resources :welcome, :only => [:show]
match '/markets/:id/stats' => 'markets#stats', :as => :market_stats


end
6 changes: 3 additions & 3 deletions lib/importer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ module Importer
require 'csv'
extend ApplicationHelper

DEAL_FILE_LOCATION = '/Users/andrewglass/Desktop/cleveland.csv'
CSA_FILE_LOCATION = '/Users/andrewglass/Desktop/cleveland_csa.csv'
DEAL_FILE_LOCATION = '/Users/andrewglass/Desktop/el_paso.csv'
CSA_FILE_LOCATION = '/Users/andrewglass/Desktop/el_paso_csa.csv'


def self.import
Expand Down Expand Up @@ -37,7 +37,7 @@ def self.import
:discount => row['discount'],
:full_title => clean_characters(row['full_title']),
:price => row['price'],
:provider => row['site'],
:provider => clean_characters(row['site']),
:revenue => row['revenue'],
:revenue_index => row['rev_index'],
:short_title => clean_characters(row['short_title']),
Expand Down

0 comments on commit 97bba7a

Please sign in to comment.