Adding payment graph
This commit is contained in:
		
							parent
							
								
									b5383eaafb
								
							
						
					
					
						commit
						16e5e8d584
					
				@ -16,32 +16,66 @@ class PaymentsController < ApplicationController
 | 
				
			|||||||
  # GET /payments.json
 | 
					  # GET /payments.json
 | 
				
			||||||
  def index
 | 
					  def index
 | 
				
			||||||
    @payments = @payments.order("date DESC")
 | 
					    @payments = @payments.order("date DESC")
 | 
				
			||||||
    payment_months = @payments.group_by{ |p| p.date.beginning_of_month }
 | 
					
 | 
				
			||||||
 | 
					    respond_to do |format|
 | 
				
			||||||
 | 
					      format.html # index.html.erb
 | 
				
			||||||
 | 
					      format.json { render :json => @payments }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def chart
 | 
				
			||||||
 | 
					    chart_name = params[:name] || "total"
 | 
				
			||||||
 | 
					    if chart_name == "total"
 | 
				
			||||||
 | 
					      chart_type = [25, 50, 100]
 | 
				
			||||||
 | 
					    elsif chart_name == "members"
 | 
				
			||||||
 | 
					      chart_type = [25, 50, 100]
 | 
				
			||||||
 | 
					    elsif chart_name == "basic"
 | 
				
			||||||
 | 
					      chart_type = [50]
 | 
				
			||||||
 | 
					    elsif chart_name == "associate"
 | 
				
			||||||
 | 
					      chart_type = [25]
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      chart_type = [] 
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    payment_months = @payments.sort_by(&:date).group_by{ |p| p.date.beginning_of_month }
 | 
				
			||||||
    @payments_by_month = []
 | 
					    @payments_by_month = []
 | 
				
			||||||
    payment_months.each do |month|
 | 
					    payment_months.each do |month|
 | 
				
			||||||
      # Only grab the last year from today
 | 
					      # Only grab the last year from today
 | 
				
			||||||
      if month.first > (Date.today - 1.year) && month.first < Date.today
 | 
					      if month.first > (Date.today - 1.year) && month.first < Date.today
 | 
				
			||||||
        # Calculate sum of amounts for each month and store at end of month array
 | 
					        # Calculate sum of amounts for each month and store at end of month array
 | 
				
			||||||
        @payments_by_month << {:month => month.first, :sum => month.last.sum{|p| 
 | 
					        @payments_by_month << [month.first.to_time.to_i*1000, month.last.sum{|p| 
 | 
				
			||||||
          if p.amount
 | 
					          amount = amount_or_level(p)
 | 
				
			||||||
            p.amount.to_i
 | 
					          if chart_type.include?(amount)
 | 
				
			||||||
 | 
					            if chart_name == "members"
 | 
				
			||||||
 | 
					              1 # Output 1 to count members
 | 
				
			||||||
            else
 | 
					            else
 | 
				
			||||||
            if p.user
 | 
					              amount # Output dollars to count amount
 | 
				
			||||||
              Rails.logger.info p.user.member_level
 | 
					            end
 | 
				
			||||||
              p.user.member_level.to_i
 | 
					 | 
				
			||||||
          else
 | 
					          else
 | 
				
			||||||
              Rails.logger.info p.inspect
 | 
					 | 
				
			||||||
              Rails.logger.info p.user.inspect
 | 
					 | 
				
			||||||
            0
 | 
					            0
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          end
 | 
					        }]
 | 
				
			||||||
        }}
 | 
					 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    respond_to do |format|
 | 
					    respond_to do |format|
 | 
				
			||||||
      format.html # index.html.erb
 | 
					      format.html # index.html.erb
 | 
				
			||||||
      format.json { render :json => @payments }
 | 
					      format.json { render :json => @payments_by_month }
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def amount_or_level p
 | 
				
			||||||
 | 
					    if p.amount
 | 
				
			||||||
 | 
					      return p.amount.to_i
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					      if p.user
 | 
				
			||||||
 | 
					        Rails.logger.info p.user.member_level
 | 
				
			||||||
 | 
					        return p.user.member_level.to_i
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        Rails.logger.info p.inspect
 | 
				
			||||||
 | 
					        Rails.logger.info p.user.inspect
 | 
				
			||||||
 | 
					        return 0
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
    end 
 | 
					    end 
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,85 @@
 | 
				
			|||||||
<h1>Listing payments</h1>
 | 
					<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
 | 
				
			||||||
 | 
					<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
 | 
				
			||||||
 | 
					<script src="highstock/js/highstock.js"></script>
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					$(function() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  $( "#graph" ).dialog({
 | 
				
			||||||
 | 
					    autoOpen: false,
 | 
				
			||||||
 | 
					    height: 325,
 | 
				
			||||||
 | 
					    width: 525,
 | 
				
			||||||
 | 
					    modal: true,
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					  $( "#graph-button" ).click(function() {
 | 
				
			||||||
 | 
					    $( "#graph" ).dialog( "open" );
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  var seriesOptions = [],
 | 
				
			||||||
 | 
					    yAxisOptions = [],
 | 
				
			||||||
 | 
					    seriesCounter = 0,
 | 
				
			||||||
 | 
					    names = ['Members', 'Associate', 'Basic', 'Total'],
 | 
				
			||||||
 | 
					    colors = Highcharts.getOptions().colors;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  $.each(names, function(i, name) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $.getJSON('/payments/chart.json?name='+ name.toLowerCase(), function(data) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      seriesOptions[i] = {
 | 
				
			||||||
 | 
					        name: name,
 | 
				
			||||||
 | 
					        data: data
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // As we're loading the data asynchronously, we don't know what order it will arrive. So
 | 
				
			||||||
 | 
					      // we keep a counter and create the chart when all the data is loaded.
 | 
				
			||||||
 | 
					      seriesCounter++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (seriesCounter == names.length) {
 | 
				
			||||||
 | 
					        createChart();
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // create the chart when all data is loaded
 | 
				
			||||||
 | 
					  function createChart() {
 | 
				
			||||||
 | 
					    $('#graph').highcharts('StockChart', {
 | 
				
			||||||
 | 
					        chart: {
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        rangeSelector: {
 | 
				
			||||||
 | 
					            selected: 1
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        yAxis: {
 | 
				
			||||||
 | 
					          labels: {
 | 
				
			||||||
 | 
					            formatter: function() {
 | 
				
			||||||
 | 
					              return '$' + this.value;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          plotLines: [{
 | 
				
			||||||
 | 
					            value: 0,
 | 
				
			||||||
 | 
					            width: 2,
 | 
				
			||||||
 | 
					            color: 'silver'
 | 
				
			||||||
 | 
					          }]
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        tooltip: {
 | 
				
			||||||
 | 
					          pointFormat: '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',
 | 
				
			||||||
 | 
					          valueDecimals: 0
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        series: seriesOptions
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div id="graph" title="Payments by Month" style="height: 250px; width: 500px; float: right;"></div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<h1>Listing payments <button id="graph-button">View Graph</button></h1>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<p>
 | 
					<p>
 | 
				
			||||||
<b>Create Payments:</b>
 | 
					<b>Create Payments:</b>
 | 
				
			||||||
@ -7,14 +88,6 @@
 | 
				
			|||||||
<%= link_to 'IPN', ipns_path %>
 | 
					<%= link_to 'IPN', ipns_path %>
 | 
				
			||||||
</p>
 | 
					</p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<p>
 | 
					 | 
				
			||||||
<h3>Payments by Month</h3>
 | 
					 | 
				
			||||||
<dl>
 | 
					 | 
				
			||||||
<% @payments_by_month.each do |month| %>
 | 
					 | 
				
			||||||
  <dt><%= month[:month] %></dt>
 | 
					 | 
				
			||||||
  <dd><%= month[:sum] %></dd>
 | 
					 | 
				
			||||||
<% end %>
 | 
					 | 
				
			||||||
</dl>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<table>
 | 
					<table>
 | 
				
			||||||
  <tr>
 | 
					  <tr>
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ Dooraccess::Application.routes.draw do
 | 
				
			|||||||
  resources :paypal_csvs
 | 
					  resources :paypal_csvs
 | 
				
			||||||
  match 'paypal_csvs/:id/link' => 'paypal_csvs#link', :as => :link_paypal_csv
 | 
					  match 'paypal_csvs/:id/link' => 'paypal_csvs#link', :as => :link_paypal_csv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  match 'payments/chart' => 'payments#chart', :as => :chart_payments
 | 
				
			||||||
  resources :payments
 | 
					  resources :payments
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  resources :user_certifications
 | 
					  resources :user_certifications
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user