Guest User

Untitled

a guest
Jun 22nd, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.51 KB | None | 0 0
  1. ## Вот такой вот пипец )
  2. def stats
  3. ### NEW VERSION STARTS HERE
  4. @from = Date.today
  5. @to = @from
  6. if request.post?
  7. begin
  8. @from = Date.new(params[:from][:year].to_i, params[:from][:month].to_i, params[:from][:day].to_i)
  9. @to = Date.new(params[:to][:year].to_i, params[:to][:month].to_i, params[:to][:day].to_i)
  10. rescue
  11. @from = Date.today
  12. @to = @from
  13. end
  14. @sh = Hash.new
  15. #select * uniques
  16. select_dates = Hash.new
  17. StatUnique.find(:all, :conditions=>["date BETWEEN ? AND ?", @from, @to], :select=>"DISTINCT date" ).each do |su|
  18. db_date = su.date.to_s(:db)
  19. select_dates[db_date] = true
  20. end
  21. StatReg.find(:all, :conditions=>["date BETWEEN ? AND ?", @from, @to], :select=>"DISTINCT date" ).each do |su|
  22. db_date = su.date.to_s(:db)
  23. select_dates[db_date] = true
  24. end
  25. StatPay.find(:all, :conditions=>["date BETWEEN ? AND ?", @from, @to], :select=>"DISTINCT date" ).each do |su|
  26. db_date = su.date.to_s(:db)
  27. select_dates[db_date] = true
  28. end
  29. StatRebill.find(:all, :conditions=>["date BETWEEN ? AND ?", @from, @to], :select=>"DISTINCT date" ).each do |su|
  30. db_date = su.date.to_s(:db)
  31. select_dates[db_date] = true
  32. end
  33. select_dates.each_key do |db_date|
  34. key = db_date.split('-').map{|x| x.to_i}
  35. key = Time.gm(*key).to_i
  36. @sh[key] = {
  37. :partners=>
  38. {:uniques=>0,
  39. :regs=>0,
  40. :pays=>0,
  41. :pays_sum=>0,
  42. :rebills_sum=>0,
  43. :ratio_reg=>"0:0",
  44. :ratio_pay=>"0:0",
  45. :to_service_pays=>0,
  46. :to_service_rebills=>0,
  47. :referal_sum => 0,
  48. :total=>0,
  49. :total_to_partners=>0,
  50. :total_to_service=>0},
  51. :service=>
  52. {:uniques=>0,
  53. :regs=>0,
  54. :pays=>0,
  55. :pays_sum=>0,
  56. :rebills_sum=>0,
  57. :ratio_reg=>"0:0",
  58. :ratio_pay=>"0:0",
  59. :to_service_pays=>0,
  60. :to_service_rebills=>0,
  61. :total=>0,
  62. :total_to_partners=>0,
  63. :total_to_service=>0},
  64. :sub_total_to_service=>0}
  65. @sh[key][:partners][:uniques]=StatUnique.sum(:unique_visits,:conditions=>["date = ? AND partner_id !=-1", db_date])
  66. @sh[key][:service][:uniques]=(u=StatUnique.find(:first,:conditions=>["date = ? AND partner_id =-1", db_date])).nil? ? 0 : u.unique_visits
  67. @sh[key][:partners][:regs]=StatReg.sum(:regs,:conditions=>["date = ? AND partner_id !=-1", db_date])
  68. @sh[key][:service][:regs]=(u=StatReg.find(:first,:conditions=>["date = ? AND partner_id =-1", db_date])).nil? ? 0 : u.regs
  69. @sh[key][:partners][:pays]=StatPay.sum(:pays_counter,:conditions=>["date = ? AND partner_id !=-1", db_date])
  70. @sh[key][:service][:pays]=(u=StatPay.find(:first,:conditions=>["date = ? AND partner_id =-1", db_date])).nil? ? 0 : u.pays_counter
  71. @sh[key][:partners][:pays_sum]=StatPay.sum(:total, :conditions=>["date = ? AND partner_id !=-1", db_date])
  72. @sh[key][:service][:pays_sum]=StatPay.sum(:total, :conditions=>["date = ? AND partner_id =-1", db_date])
  73. @sh[key][:partners][:rebills_sum]=StatRebill.sum(:total, :conditions=>["date = ? AND partner_id !=-1", db_date])
  74. @sh[key][:service][:rebills_sum]=StatRebill.sum(:total, :conditions=>["date = ? AND partner_id =-1", db_date])
  75. @sh[key][:partners][:to_service_pays]=StatPay.sum(:to_service, :conditions=>["date = ? AND partner_id !=-1", db_date])
  76. @sh[key][:partners][:to_service_rebills]=StatRebill.sum(:to_service, :conditions=>["date = ? AND partner_id !=-1", db_date])
  77. @sh[key][:partners][:referal_sum]=StatReferal.sum(:total, :conditions=>["date = ?", db_date])
  78. #calculate sub_totals
  79. #for service
  80. @sh[key][:service][:total] = @sh[key][:service][:pays_sum] + @sh[key][:service][:rebills_sum]
  81. @sh[key][:service][:total_to_partners] = 0
  82. @sh[key][:service][:total_to_service] = @sh[key][:service][:total]
  83. #for partners
  84. @sh[key][:partners][:total] = @sh[key][:partners][:pays_sum] + @sh[key][:partners][:rebills_sum] + @sh[key][:partners][:to_service_pays] + @sh[key][:partners][:to_service_rebills]
  85. @sh[key][:partners][:total_to_partners] = @sh[key][:partners][:pays_sum] + @sh[key][:partners][:rebills_sum] + @sh[key][:partners][:referal_sum]
  86. @sh[key][:partners][:total_to_service] = @sh[key][:partners][:total] - @sh[key][:partners][:total_to_partners]
  87. #general sub_total to service
  88. @sh[key][:sub_total_to_service] = @sh[key][:service][:total_to_service] + @sh[key][:partners][:total_to_service]
  89. #calculate ratios
  90. service_ratios = calculate_ratios(:regs=>@sh[key][:service][:regs], :pays=>@sh[key][:service][:pays], :uniques =>@sh[key][:service][:uniques])
  91. partners_ratios = calculate_ratios(:regs=>@sh[key][:partners][:regs], :pays=>@sh[key][:partners][:pays], :uniques =>@sh[key][:partners][:uniques])
  92. @sh[key][:service][:ratio_reg] = service_ratios[:ratio_reg]
  93. @sh[key][:service][:ratio_pay] = service_ratios[:ratio_pay]
  94. @sh[key][:partners][:ratio_reg] = partners_ratios[:ratio_reg]
  95. @sh[key][:partners][:ratio_pay] = partners_ratios[:ratio_pay]
  96. end
  97. @sh.sort
  98. #calculate totals
  99. @uniques_total = StatUnique.sum(:unique_visits, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  100. @regs_total = StatReg.sum(:regs, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  101. @pays_total = StatPay.sum(:pays_counter, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  102. @pays_sum_total = StatPay.sum(:total, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  103. @rebills_sum_total = StatRebill.sum(:total, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  104. @total_total = @pays_sum_total + @rebills_sum_total
  105. @total_to_partners = StatPay.sum(:total, :conditions=>["date BETWEEN ? AND ? AND partner_id !=-1", @from, @to]) + StatRebill.sum(:total, :conditions=>["date BETWEEN ? AND ? AND partner_id != -1", @from, @to]) + StatReferal.sum(:total, :conditions=>["date BETWEEN ? AND ?", @from, @to])
  106. @total_to_service = @total_total - @total_to_partners
  107. # calculate total ratios
  108. total_ratios = calculate_ratios(:regs=>@regs_total, :pays=>@pays_total, :uniques=>@uniques_total)
  109. @ratio_reg_total = total_ratios[:ratio_reg]
  110. @ratio_pay_total = total_ratios[:ratio_pay]
  111. end
  112. end
  113.  
  114. ## Расчет ратио
  115. def calculate_ratios(options)
  116. regs = options[:regs]
  117. uniques = options[:uniques]
  118. pays = options[:pays]
  119.  
  120. if regs == 0 && uniques == 0
  121. ratio_reg = "0:0"
  122. elsif regs == 0 && uniques > 0
  123. ratio_reg = "0:0"
  124. elsif regs > 0 && uniques == 0
  125. ratio_reg = "1: #{(1.00/regs).round_to(2)}"
  126. elsif regs >= uniques
  127. ratio_reg = "1:#{(uniques.to_f/regs).round_to(2)}"
  128. elsif regs < uniques
  129. ratio_reg = "1:#{(uniques.to_f/regs).round_to(2)}"
  130. end
  131. if regs == 0 && pays == 0
  132. ratio_pay = "0:0"
  133. elsif regs== 0 && pays > 0
  134. ratio_pay = "1:#{(1.00/pays).round_to(2)}"
  135. elsif regs > 0 && pays == 0
  136. ratio_pay = "0:0"
  137. elsif regs >= pays
  138. ratio_pay = "1:#{(regs.to_f/pays).round_to(2)}"
  139. elsif regs < pays
  140. ratio_pay = "1:#{(regs.to_f/pays).round_to(2)}"
  141. end
  142. return {:ratio_reg=>ratio_reg, :ratio_pay=>ratio_pay}
  143. end
Add Comment
Please, Sign In to add comment