2016-11-24 3 views
1

Ich habe die Berechnungen, um die Summen seit Beginn dieser App zu tabellieren. Ich brauche Hilfe bei der Berechnung der Summen für nur den aktuellen Monat und bin mir nicht sicher, wie das geht. Danke im Voraus.Monatliche Gesamtberechnung mit Ruby Berechnungen

item.rb

class Item < ActiveRecord::Base 
    def profit_calc 
    sold_for - bought_for - fees - shipping rescue 0 
    end 

    def self.purchase_total 
    sum(:bought_for) 
    end 

    def self.fee_total 
    sum(:fees) 
    end 

    def self.shipping_total 
    sum(:shipping) 
    end 

    def self.sales_total 
    sum(:sold_for) 
    end 

    def self.profit_total 
    sold.sum(:sold_for) - sold.sum(:bought_for) - sold.sum(:fees) - sold.sum(:shipping) 
    end 

    def profit_margin_item 
    profit_calc/sold_for * 100 rescue 0 
    end 

    def self.profit_margin_total 
    profit_total/ sum(:sold_for) * 100 
    end 

    scope :visible, -> { where(sold: false) } 
    scope :sold, -> { where(sold: true) } 

    def self.search(search) 
    where("description LIKE ?", "%#{search}%") 
    end 
end 

statistics.html.erb

<h1 id="title">Statistics</h1> 
<br> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Bought</th> 
     <th>Bought This Month</th> 
     <th>Total Sold</th> 
     <th>Sold This Month</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= @items.count %></td> 
     <td><%= @items_month.count %></td> 
     <td><%= @items_sold.count %></td> 
     <td><%= @items_sold_month.count %></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Purchases</th> 
     <th>Total Month Purchases</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_currency(@items.purchase_total) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Sales</th> 
     <th>Total Month Sales</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_currency(@items.sales_total) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Fees</th> 
     <th>Total Month Fees</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_currency(@items.fee_total) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Shipping</th> 
     <th>Total Month Shipping</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_currency(@items.shipping_total) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Profit</th> 
     <th>Total Month Profit</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_currency(@items.profit_total) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

<table align="center" style="width: 95%" class="table table-striped table-bordered"> 
    <thead> 
    <tr> 
     <th>Total Margin</th> 
     <th>Total Month Margin</th> 
    </tr> 
    </thead> 

    <tbody> 
    <tr> 
     <td><%= number_to_percentage(@items.profit_margin_total, precision: 0) %></td> 
     <td></td> 
    </tr> 
    </tbody> 
</table> 

Antwort

2

Fügen Sie die folgende Bedingung für die Berechnung aktuellen Monat zu erhalten:

where(created_at: Time.zone.now.beginning_of_month..Time.zone.now.end_of_month) 

Zum Beispiel:

def self.purchase_total 
    where(created_at: Time.zone.now.beginning_of_month..Time.zone.now.end_of_month).sum(:bought_for) 
end 

Wenn Sie vorhaben, es ausgiebig zu nutzen, fügen Sie es als scope:

scope :current_month, -> { where(created_at: Time.zone.now.beginning_of_month..Time.zone.now.end_of_month) } 

Jetzt:

def self.purchase_total 
    current_month.sum(:bought_for) 
end 
+1

gute Antwort, aber immer Sie .sum im Rahmen – Fallenhero

+1

@Fallenhero thx für bemerkt! Fixed :) –

+0

Das funktioniert super. Danke für deine Hilfe und Happy Thanksgiving! –