1 # -*- coding: utf-8 -*-
2 class Order < ActiveRecord::Base
6 has_many :order_deliveries
9 sum_deliveries :subtotal
17 sum_deliveries :payment_total
21 sum_deliveries :proceeds
24 def self.find_sum conditions=''
25 OrderDelivery.find_sum conditions
32 def self.get_conditions(search, params)
34 search && search.each do |k, v|
35 if (k =~ /^order_code/)
36 search[k.sub(pattern, 'orders.code')] = v
39 sex = params[:sex] || []
40 payment_id = params[:payment_id] || []
43 unless search.customer_name.blank?
44 search_list << [MergeAdapterUtil.concat("order_deliveries.family_name", "order_deliveries.first_name") + " like ?", "%#{search.customer_name}%"]
46 unless search.customer_name_kana.blank?
47 search_list << [MergeAdapterUtil.concat("order_deliveries.family_name_kana", "order_deliveries.first_name_kana") + " like ?", "%#{search.customer_name_kana}%"]
49 unless search.order_code_from.blank?
50 search_list << ["orders.code >= ?", search.order_code_from]
52 unless search.order_code_to.blank?
53 search_list << ["orders.code <= ?", search.order_code_to ]
55 unless search.status.blank?
56 search_list << ["order_deliveries.status = ? ", search.status.to_i]
58 unless search.email.blank?
59 search_list << ["order_deliveries.email like ?", "%#{search.email}%"]
61 unless search.tel.blank?
62 search_list << [MergeAdapterUtil.concat("order_deliveries.tel01", "order_deliveries.tel02", "order_deliveries.tel03") + " like ?", "%#{search.tel}%"]
64 unless search.search_birth_from.blank?
65 search_list << ["order_deliveries.birthday >= ?", search.search_birth_from]
68 unless search.search_birth_to.blank?
69 search_list << ["order_deliveries.birthday < ?", search.search_birth_to + 1 * 60 * 60 * 24 ]
71 unless search.search_updated_at_from.blank?
72 search_list << ["order_deliveries.created_at >= ?", search.search_updated_at_from]
74 unless search.search_updated_at_to.blank?
75 search_list << ["order_deliveries.created_at < ?", search.search_updated_at_to + 1 * 60 * 60 * 24 ]
77 unless search.search_updated_at_from.blank?
78 search_list << ["order_deliveries.updated_at >= ?", search.search_updated_at_from]
80 unless search.search_updated_at_to.blank?
81 search_list << ["order_deliveries.updated_at < ?", search.search_updated_at_to + 1 * 60 * 60 * 24 ]
83 unless search.total_from.blank?
84 if search.total_from.to_s =~ /^\d*$/
85 search_list << ["order_deliveries.total >= ?", search.total_from]
87 search.errors.add "購入金額は数字で入力してください。", ""
90 unless search.total_to.blank?
91 if search.total_to.to_s =~ /^\d*$/
92 search_list << ["order_deliveries.total <= ?", search.total_to]
94 search.errors.add "購入金額は数字で入力してください。", ""
97 unless search.product_code.blank?
98 search_list << ["order_details.product_code like ? ", "%#{search.product_code}%"]
100 unless search.shipped_at_from.blank?
101 search_list << ["order_deliveries.shipped_at >= ?", search.shipped_at_from]
103 unless search.shipped_at_to.blank?
104 search_list << ["order_deliveries.shipped_at < ?", search.shipped_at_to + 1 * 60 * 60 * 24 ]
106 unless search.retailer_id.blank?
107 search_list << ["orders.retailer_id = ? ", search.retailer_id]
110 search_list << ['order_deliveries.sex in (?)', sex] unless sex.empty?
111 search_list << ['order_deliveries.payment_id in (?)', payment_id] unless payment_id.empty?
112 [search, search_list, sex, payment_id]
115 def self.csv(search_list)
116 columns = OrderDelivery.csv_columns_name
117 order_deliveries = OrderDelivery.find(:all,
118 :conditions => flatten_conditions(search_list),
119 :include => OrderDelivery::DEFAULT_INCLUDE,
120 :order => "order_deliveries.id desc")
121 str = CSV.generate("") do | writer |
122 writer<< columns.map{|name| OrderDelivery.set_field_names[name]}
123 order_deliveries and order_deliveries.each do | od |
124 writer << columns.map do | column |
125 if ![:order_code,:prefecture_name,:occupation_name,:sex_name,:payment_name,:deliv_pref_name,:delivery_trader_name,:delivery_time_name,:status_view,:ticket_code].include?(column) && OrderDelivery.columns_hash[column.to_s].type == :datetime
126 (od[column] + (60*60*9)).strftime("%Y-%m-%d %H:%M") if od[column]
128 od[column] || od.send(column)
133 filename = "order_#{Time.now.strftime('%Y%m%d%H%M%S')}.csv"
140 id_code = ("%04d" % self.id).slice(-4..-1) # レコード ID の下 4 桁
141 self.code = created_at.strftime("%Y%m%d%H%M") + id_code
142 self.save_without_validation
145 def sum_deliveries message
146 order_deliveries.map(&message).map(&:to_i).sum