Advertisement
Guest User

Untitled

a guest
Oct 6th, 2015
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.09 KB | None | 0 0
  1. class CheckoutsController < ApplicationController
  2. include CheckoutsHelper
  3. before_action :set_checkout, only: :show
  4.  
  5. def new
  6. unless params[:cart].nil?
  7. session[:cart] = params[:cart]
  8. session[:profile] = nil
  9. end
  10. return render 'public/404.html', status: 404 if session[:cart].nil?
  11. @room = Room.find(session[:cart][:room_id])
  12. @property = @room.property
  13. @months = Date::ABBR_MONTHNAMES[1..12].map { |m| [m, Date::ABBR_MONTHNAMES.index(m)] }
  14. @years = Array(Time.now.year..(Time.now + 10.year).year)
  15. unless params[:user].eql?('guest') || user_signed_in?
  16. store_location_for(:user, new_checkout_path)
  17. render 'checkouts/book_now'
  18. end
  19. end
  20.  
  21. def create
  22. room = Room.find(session[:cart][:room_id].to_i)
  23. amount = total_cart(session[:cart]) * 100
  24. if params[:checkout][:pay_type] == 'card'
  25. credit_card = ActiveMerchant::Billing::CreditCard.new(card_params)
  26. options = {
  27. ip: request.remote_ip,
  28. email: params[:checkout][:email_id],
  29. customer: params[:billing][:fullname],
  30. address: {
  31. name: params[:billing][:fullname],
  32. address1: params[:billing][:address],
  33. address2: params[:billing][:address_two],
  34. city: params[:billing][:city],
  35. state: params[:billing][:state],
  36. country: params[:billing][:select_country],
  37. zip: params[:billing][:postal_code],
  38. phone: params[:billing][:mobile]
  39. }
  40. }
  41. response = STANDARD_GATEWAY.authorize(amount, credit_card, options)
  42.  
  43. if response.success?
  44. @checkout = Checkout.new(checkout_create)
  45. @checkout.user_id = current_user.id if current_user.present?
  46. @checkout.property_id = room.property_id
  47. @checkout.city = params[:billing][:city]
  48. @checkout.address = params[:billing][:address]
  49. @checkout.state = params[:billing][:state]
  50. @checkout.select_country = params[:billing][:select_country]
  51. @checkout.postal_code = params[:billing][:postal_code]
  52. @checkout.mobile = params[:billing][:mobile]
  53. #save price
  54. @checkout.total_price = total_price(session[:cart])
  55. @checkout.government = government_tax(session[:cart])
  56. @checkout.service = service_tax(session[:cart])
  57. @checkout.total_cart = total_cart(session[:cart])
  58. @checkout.per_night = session[:cart][:price].to_f
  59. @checkout.check_in = session[:cart][:check_in]
  60. @checkout.check_out = session[:cart][:check_out]
  61. @checkout.nights = session[:cart][:night]
  62. @checkout.room_id = session[:cart][:room_id]
  63. @checkout.no_room = session[:cart][:no_room]
  64. @checkout.guest = session[:cart][:guest]
  65. #save credit card
  66. @checkout.card_number = credit_card.display_number
  67. @checkout.brand = credit_card.brand
  68. @checkout.year = credit_card.year
  69. @checkout.month = credit_card.month
  70. @checkout.status = 'Not Confirm'
  71. @checkout.authorization_id = response.params['transaction_id']
  72.  
  73. if @checkout.save
  74. if room.instant
  75. purchase = STANDARD_GATEWAY.capture(amount, @checkout.authorization_id )
  76. @checkout.transaction_id = purchase.params['transaction_id']
  77. if purchase.success?
  78. @checkout.update!(status: 'Confirmed')
  79. pdf = WickedPdf.new.pdf_from_string(
  80. render_to_string('contact_us/voucher_hotel', layout: false, locals: { checkout: @checkout })
  81. )
  82. ContactUs.instant_booking(@checkout, pdf).deliver
  83. ContactUs.submit_order_admin(@checkout).deliver
  84. else
  85. render 'failed'
  86. end
  87. else
  88. ContactUs.submit_order_admin(@checkout).deliver
  89. ContactUs.submit_order_user(@checkout).deliver
  90. end
  91. #create activity
  92. @checkout.create_activity(:create, owner: @checkout.property.user)
  93. session[:cart] = nil
  94. session[:profile] = nil
  95. render 'success'
  96. else
  97. render 'failed'
  98. end
  99. else
  100. session[:profile] = params[:checkout].merge(params[:billing])
  101. @message = response.message
  102. render 'failed'
  103. end
  104. else
  105. session[:checkout] = params[:checkout]
  106. response = EXPRESS_GATEWAY.setup_purchase(amount,
  107. ip: request.remote_ip,
  108. return_url: checkouts_success_url,
  109. cancel_return_url: root_url,
  110. currency: 'USD',
  111. items: [{
  112. description: 'Paying for order',
  113. amount: amount
  114. }]
  115. )
  116. redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
  117. end
  118. end
  119.  
  120. def success
  121. if params[:token].present?
  122. if session[:checkout].present? && session[:cart].present?
  123. room = Room.find(session[:cart][:room_id].to_i)
  124. rooms = Room.where(title: room.title, about: room.about, price: room.price).limit(session[:cart][:no_room].to_i)
  125. rooms.each do |room|
  126. binding.pry
  127. @checkout = Checkout.new
  128. @checkout.first_name = session[:checkout][:first_name]
  129. @checkout.last_name = session[:checkout][:last_name]
  130. @checkout.email_id = session[:checkout][:email_id]
  131. @checkout.special = session[:checkout][:special]
  132. # save price
  133. @checkout.total_price = total_price(session[:cart]) #тут передаються усі параметри, у тому числі room_id, а коли я копіюю обєкт як тоді робити?
  134. @checkout.government = government_tax(session[:cart])
  135. @checkout.service = service_tax(session[:cart])
  136. @checkout.total_cart = total_cart(session[:cart])
  137. @checkout.per_night = session[:cart][:price].to_f
  138. # save detail booking
  139. @checkout.guest = session[:cart][:guest]
  140. @checkout.check_in = session[:cart][:check_in]
  141. @checkout.check_out = session[:cart][:check_out]
  142. # @checkout.room_id = session[:cart][:room_id]
  143. @checkout.room_id = room.id
  144. @checkout.nights = session[:cart][:night]
  145. @checkout.no_room = session[:cart][:no_room]
  146. # save detail paypal
  147. @checkout.express_payer_id = params[:PayerID]
  148. @checkout.express_token = params[:token]
  149. @checkout.status = 'Not Confirm'
  150. @checkout.pay_type = 'Paypal'
  151. @checkout.user_id = current_user.id if current_user
  152. @checkout.property_id = room.property_id
  153. if @checkout.save
  154. if room.instant
  155. purchase = EXPRESS_GATEWAY.purchase((total_cart(session[:cart]) * 100),
  156. ip: request.ip,
  157. token: @checkout.express_token,
  158. payer_id: @checkout.express_payer_id
  159. )
  160. if purchase.success?
  161. @checkout.update!(status: 'Confirmed')
  162. pdf = WickedPdf.new.pdf_from_string(
  163. render_to_string('contact_us/voucher_hotel', layout: false, locals: { checkout: @checkout })
  164. )
  165. ContactUs.instant_booking(@checkout, pdf).deliver
  166. ContactUs.submit_order_admin(@checkout).deliver
  167. end
  168. else
  169. ContactUs.submit_order_admin(@checkout).deliver
  170. ContactUs.submit_order_user(@checkout).deliver
  171. end
  172. @checkout.create_activity(:create, owner: @checkout.property.user)
  173. else
  174. render 'failed'
  175. end
  176. session[:cart] = nil
  177. session[:checkouts] = nil
  178. end
  179. end
  180. @checkout = Checkout.find_by_express_token(params[:token])
  181. else
  182. redirect_to root_url
  183. end
  184. end
  185.  
  186. private
  187. # Use callbacks to share common setup or constraints between actions.
  188. def credit_card
  189. ActiveMerchant::Billing::CreditCard.new(
  190. number: params[:card][:card_number],
  191. verification_value: params[:card][:cvv],
  192. month: params[:card][:month],
  193. year: params[:card][:year],
  194. first_name: params,
  195. last_name: last_name
  196. )
  197. end
  198.  
  199. def set_checkout
  200. @checkout = Checkout.find(params[:id])
  201. end
  202. # Never trust parameters from the scary internet, only allow the white list through.
  203.  
  204. def checkout_params
  205. params.require(:checkout).permit(:last_name, :custom_id, :first_name, :email_id, :special, :gender, :mobile, :country, :passport, :birth, :estimate, :card_number, :card_holders, :card_type, :cvv_code, :mounth, :year, :select_country, :address, :state, :city, :postal_code, :check_in, :check_out)
  206. end
  207.  
  208. def checkout_create
  209. params.require(:checkout).permit(:first_name, :last_name, :email_id, :special, :general_price, :check_in, :check_out, :guest, :pay_type, :property_id, :nights)
  210. end
  211.  
  212. def card_params
  213. params.require(:card).permit(:first_name, :last_name, :number, :verification_value, :month, :year)
  214. end
  215. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement