🤑

商品合計金額、請求金額合計とかの表示

2023/07/29に公開

🍍やりたいこと

注文履歴詳細ページでの各商品の単価、数量、小計の表示。
注文全部の商品合計金額、送料、請求金額の合計の表示。など

🍍記述

admin/orders_controler.rb
 def show
     @customer = Customer.find(params[:id])
     @order = Order.find(params[:id])
     @item = Item.find(params[:id])
     @order_items = @order.order_details.all 
     @order_details = @order.order_details.all
     @total_item_amount = @order_details.sum { |order_detail| order_detail.subtotal }
     @order = Order.find(params[:id])
  end
admin/orders/show.html.erb
<tbody>
<% @order_items.each do |item| %>
 <tr>
  <td><%= item.item.name %></td>
  <td><%= item.item.with_tax_price %></td>
  <td><%= item.quantity %></td>
  <td><%= item.subtotal %></td>
  <td>
  <%= form_with model: item, url: admin_order_detail_path(item.id), method: :patch do |f| %>
     <%= f.select :making_status, OrderDetail.making_statuses.keys.map  %>
     <%= f.submit '更新', class:"btn btn-outline-success"  %>
  <% end %>
  </td>
 </tr>
<% end %>
</tbody>

 <table>
    <thred>
      <tr>
	<th>商品合計</th>
	<td><%= @order.total_item_amount.to_s(:delimited) %></td>
	<td></td>
      </tr>
      <tr>
	<th>送料</th>
	<td><%= @order.postage.to_s(:delimited) %></td>
	<td></td>
      </tr>
      <tr>
	<th>請求金額合計</th>
	<td><strong><%= @order.total_amount.to_s(:delimited) %></strong></td>
	<td><strong></strong></td>
      </tr>
    </thred>
  </table>
model/order_details.rb
 def subtotal #数量×商品税込み価格
    quantity * item.with_tax_price
 end
model/item.rb
TAX_RATE = 10 #%表記

def with_tax_price #税込み価格
   (price * (1 + TAX_RATE * 0.01)).floor
end

def total_item_amount #アイテム合計金額
   order_details.sum { |order_detail| order_detail.subtotal }
end

🍍解説

商品名

商品単価(税込み)


税率が変わったら同じモデル内に記述しているTAX_RATEを変更するだけでOK

商品個数


商品個数はorder_detailsテーブルのカラムなのでそのまま取り出せる。

小計

商品合計金額


💎文字列にする必要ってなに?
→数字だけだとカンマが入れれないから文字列にしてカンマが入れれるようにするってことなのかな?

送料

今回は送料を一律800円にするので、定数として定義しなければならないので
$ touch config/initializers/constants.rbでファイルを作成し

config/initializers/constants.rb
POSTAGE = 800

と記述する。

請求金額合計

🍍参考

https://zenn.dev/farstep/books/7f169cdc597ada/viewer/35442b

Discussion