order_detail.rb 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241
  1. # encoding:utf-8
  2. class OrderDetail < ActiveRecord::Base
  3. has_paper_trail
  4. self.table_name = "order_details"
  5. #belongs_to :product
  6. belongs_to :order, :foreign_key => :order_id
  7. # has_one :order, :foreign_key=>:order_id, :primary_key=>:order_id
  8. validates :order_no,:product_id,:nums, presence: true
  9. validate :order_validation
  10. after_import :import_orders
  11. def import_orders
  12. # 获取商品信息
  13. pd = Product.where("id = ?", self.product_id).first
  14. detail = OrderDetail.where("id = ?", self.id).first
  15. od = Order.where("order_id = ?", self.order_no).first
  16. if !pd.blank? && !od.blank?
  17. detail.order_id=od.id
  18. detail.product_name=pd.name
  19. detail.relate_product_id=pd.relate_product_id
  20. detail.pv=pd.pv
  21. detail.price=pd.price
  22. detail.order_status=order.status
  23. detail.depart=order.depart
  24. od.pv=od.pv+detail.nums*pd.pv
  25. #生成base_dt明细
  26. if pd.package!=1
  27. baseDt = BaseDetail.new
  28. baseDt.order_no=od.order_id
  29. baseDt.product_id=pd.id
  30. baseDt.dt_id=detail.id
  31. baseDt.order_id=od.id
  32. baseDt.is_zeng=detail.is_zeng
  33. baseDt.nums=detail.nums
  34. baseDt.price=pd.price
  35. baseDt.product_name=pd.name
  36. baseDt.depart=order.depart
  37. baseDt.save
  38. else
  39. #生成套装商品明细
  40. end
  41. end
  42. # 更新order信息
  43. od.save
  44. detail.save
  45. end
  46. def order_validation
  47. if self.product_id > 0
  48. prd = Product.where("id = ?", self.product_id).first
  49. if prd.blank?
  50. self.errors.add(:product_id,"商品不存在,请重新填写商品ID")
  51. else
  52. self.product_name=prd.name
  53. #self.price=prd.price
  54. end
  55. end
  56. if self.order_no.length>0
  57. ord = Order.where("order_id = ?", self.order_no).first
  58. if ord.blank?
  59. self.errors.add(:order_id,"订单不存在,请重新填写编号")
  60. else
  61. self.order_id=ord.id
  62. end
  63. end
  64. end
  65. def order_state
  66. order = Order.where("id = ?", self.order_id).first
  67. if !order.blank?
  68. return order.status
  69. end
  70. end
  71. def product
  72. pd = Product.where("id = ?", self.product_id).first
  73. if !pd.blank?
  74. return pd.name
  75. else
  76. return "--"
  77. end
  78. end
  79. def paid_time
  80. order = Order.where("id = ?", self.order_id).first
  81. if !order.blank?
  82. paidTime=order.paied_at == 0 || order.paied_at == nil ? Time.at(0) : Time.at(order.paied_at)
  83. return paidTime
  84. end
  85. return paidTime
  86. end
  87. def pay_way
  88. payWay = ""
  89. order = Order.where("id = ?", self.order_id).first
  90. if !order.blank?
  91. payWay=order.pay_way
  92. end
  93. return payWay
  94. end
  95. STATUS_ENUM = [["未支付","unpay"],["已关闭","closed"],["待确认","unconfirmed"],["处理中","processing"],["已完成","complete"],["待收货","dispatch"],["已退款","refunded"]]
  96. PAY_WAY_ENUM = [
  97. # ["Web网银连连支付","webbankllpay"],
  98. # ["Web认证连连支付","webauthllpay"],
  99. # ["Wap认证连连支付","wapauthllpay"],
  100. ["微信支付","weixinpay"],
  101. ["提货券支付","balance"],
  102. # ["公众号微信支付","gzhwxpay"],
  103. # ["公众号提货券支付","gzhbalance"],
  104. # ["统统微信支付","wx_sumpay"],
  105. # ["统统Web网银支付","webbanksumpay"],
  106. ]
  107. rails_admin do
  108. navigation_label '商品管理'
  109. weight -240
  110. parent Order
  111. list do
  112. filters [:order_no,:nums,:price,:order_status]
  113. field :id
  114. field :order_no do
  115. filterable true
  116. end
  117. #field :order
  118. #field :product
  119. field :product do
  120. visible false
  121. end
  122. field :nums
  123. field :price do
  124. visible true
  125. label "单价(元)"
  126. formatted_value do
  127. value!=0 ? (value/100.0):0
  128. end
  129. end
  130. field :product_name
  131. field :order_status, :enum do
  132. filterable true
  133. enum do
  134. STATUS_ENUM
  135. end
  136. end
  137. # field :paid_time do
  138. # filterable true
  139. # formatted_value do
  140. # #bindings[:object].order.paied_time
  141. # (bindings[:object].order.paied_at == 0 || bindings[:object].order.paied_at == nil) ? Time.at(0) : Time.at(bindings[:object].order.paied_at)
  142. # end
  143. # end
  144. field :paid_time
  145. field :order do
  146. queryable true
  147. searchable [:status]
  148. end
  149. field :pay_way, :enum do
  150. filterable true
  151. enum do
  152. PAY_WAY_ENUM
  153. end
  154. end
  155. field :is_zeng
  156. field :size_name
  157. field :color_name
  158. field :pv do
  159. formatted_value do # used in form views
  160. value.to_f / 100
  161. end
  162. end
  163. field :created_at
  164. field :updated_at
  165. end
  166. show do
  167. field :id
  168. field :order_no
  169. field :product
  170. field :nums
  171. field :is_zeng
  172. field :price do
  173. visible true
  174. label "单价(元)"
  175. formatted_value do
  176. value!=0 ? (value/100.0):0
  177. end
  178. end
  179. field :order_status, :enum do
  180. filterable true
  181. enum do
  182. STATUS_ENUM
  183. end
  184. end
  185. field :product_name
  186. field :size_name
  187. field :color_name
  188. field :pv do
  189. formatted_value do # used in form views
  190. value.to_f / 100
  191. end
  192. end
  193. field :created_at
  194. field :updated_at
  195. end
  196. edit do
  197. field :order_no
  198. #field :order_id
  199. field :product_id
  200. field :nums
  201. field :is_zeng
  202. field :price
  203. end
  204. export do
  205. include_all_fields
  206. field :wx_user_id do
  207. formatted_value do
  208. bindings[:object].order.wx_user_id
  209. end
  210. end
  211. field :nums
  212. field :product_name
  213. field :unit_robo_balance_price do
  214. visible false
  215. end
  216. field :pv do
  217. formatted_value do # used in form views
  218. value.to_f / 100
  219. end
  220. end
  221. end
  222. end
  223. end