order_detail.rb 6.6 KB

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