order_detail.rb 5.8 KB

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