order_detail.rb 6.5 KB

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