Merge branch 'master' into error_opening_link_to_difficulty_level

This commit is contained in:
James Mason 2017-11-03 11:25:29 -07:00 committed by GitHub
commit ae0538e1ad
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 88 additions and 52 deletions

View file

@ -16,6 +16,12 @@ RUN cd /usr/bin && \
tar -xf dockerize.tar.gz && \ tar -xf dockerize.tar.gz && \
rm dockerize.tar.gz rm dockerize.tar.gz
# dumb-init for a proper PID 1
RUN cd /tmp && \
wget https://github.com/Yelp/dumb-init/releases/download/v1.2.0/dumb-init_1.2.0_amd64.deb && \
dpkg -i dumb-init_1.2.0_amd64.deb && \
rm dumb-init_1.2.0_amd64.deb
# explicitly add Gemfile and install dependencies using bundler to make use of # explicitly add Gemfile and install dependencies using bundler to make use of
# Docker's caching # Docker's caching
WORKDIR /osem/ WORKDIR /osem/
@ -25,12 +31,13 @@ RUN bundle install --without test development
# add OSEM files and prepare them for use inside a Docker container # add OSEM files and prepare them for use inside a Docker container
COPY . /osem/ COPY . /osem/
RUN chown osem.osem /osem/ -R && \ RUN chown -R osem.root /osem/ && \
chmod -R g=u /osem/ && \
mv /osem/config/database.yml.docker /osem/config/database.yml mv /osem/config/database.yml.docker /osem/config/database.yml
# data directory is used to cache the secret key in a file # data directory is used to cache the secret key in a file
ENV DATA_DIR /data ENV DATA_DIR /data
RUN install -d -m 0700 -o osem $DATA_DIR RUN install -d -m 0770 -o osem -g root $DATA_DIR
VOLUME ["$DATA_DIR"] VOLUME ["$DATA_DIR"]
USER osem USER osem
@ -42,4 +49,7 @@ COPY docker/init.sh /init.sh
# from a webserver # from a webserver
ENV RAILS_SERVE_STATIC_FILES 1 ENV RAILS_SERVE_STATIC_FILES 1
# Runs "/usr/bin/dumb-init -- /my/script --with --args"
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["bash", "/init.sh"] CMD ["bash", "/init.sh"]

View file

@ -11,7 +11,7 @@ function update_price($this){
$('.total_row').each(function( index ) { $('.total_row').each(function( index ) {
total += parseFloat($(this).text()); total += parseFloat($(this).text());
}); });
$('#total_price').text(total); $('#total_price').text(total.toFixed(2));
} }
$( document ).ready(function() { $( document ).ready(function() {

View file

@ -27,8 +27,9 @@ class ConferenceRegistrationsController < ApplicationController
end end
def show def show
@total_price = Ticket.total_price(@conference, current_user, paid: true) @total_price = Ticket.total_price_user(@conference, current_user, paid: true)
@tickets = current_user.ticket_purchases.by_conference(@conference).paid @tickets = current_user.ticket_purchases.by_conference(@conference).paid
@total_price_per_ticket = @tickets.group(:ticket_id).sum('amount_paid * quantity')
@ticket_payments = @tickets.group_by(&:ticket_id) @ticket_payments = @tickets.group_by(&:ticket_id)
@total_quantity = @tickets.group(:ticket_id).sum(:quantity) @total_quantity = @tickets.group(:ticket_id).sum(:quantity)
end end

View file

@ -496,7 +496,7 @@ class Conference < ActiveRecord::Base
if tickets && ticket_purchases if tickets && ticket_purchases
tickets.each do |ticket| tickets.each do |ticket|
result[ticket.title] = { result[ticket.title] = {
'value' => ApplicationController.helpers.humanized_money(ticket.tickets_turnover).delete(',').to_i, 'value' => ApplicationController.helpers.humanized_money(ticket.tickets_turnover_total(ticket.id)).delete(',').to_i,
'color' => "\##{Digest::MD5.hexdigest(ticket.title)[0..5]}" 'color' => "\##{Digest::MD5.hexdigest(ticket.title)[0..5]}"
} }
end end

View file

@ -55,12 +55,18 @@ class Ticket < ActiveRecord::Base
result ? result : Money.new(0, 'USD') result ? result : Money.new(0, 'USD')
end end
def tickets_sold def self.total_price_user(conference, user, paid: false)
ticket_purchases.paid.sum(:quantity) tickets = TicketPurchase.where(conference: conference, user: user, paid: paid)
tickets.inject(0){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
end end
def tickets_turnover def tickets_turnover_total(id)
tickets_sold * price tickets = TicketPurchase.where(ticket_id: id)
tickets.inject(0){ |sum, ticket| sum + (ticket.amount_paid * ticket.quantity) }
end
def tickets_sold
ticket_purchases.paid.sum(:quantity)
end end
private private

View file

@ -52,7 +52,8 @@ class TicketPurchase < ActiveRecord::Base
purchase = new(ticket_id: ticket.id, purchase = new(ticket_id: ticket.id,
conference_id: conference.id, conference_id: conference.id,
user_id: user.id, user_id: user.id,
quantity: quantity) quantity: quantity,
amount_paid: ticket.price)
purchase.pay(nil) if ticket.price_cents.zero? purchase.pay(nil) if ticket.price_cents.zero?
end end
purchase purchase

View file

@ -0,0 +1,16 @@
%tr
%td= physical_ticket.id
%td= physical_ticket.ticket.title
%td= physical_ticket.user.email
%td= humanized_money_with_symbol physical_ticket.ticket_purchase.amount_paid
%td
.btn-group
= link_to 'Show',
conference_physical_ticket_path(conference.short_title,
physical_ticket.token),
class: 'btn btn-primary'
= link_to 'Generate PDF',
conference_physical_ticket_path(conference.short_title,
physical_ticket.token,
format: :pdf),
class: 'button btn btn-default btn-info'

View file

@ -21,23 +21,11 @@
%th ID %th ID
%th Type %th Type
%th User %th User
%th Paid
%th Actions %th Actions
%tbody %tbody
- @physical_tickets.each do |physical_ticket| - @physical_tickets.each do |physical_ticket|
%tr = render "physical_ticket", physical_ticket: physical_ticket,
%td= physical_ticket.id conference: @conference
%td= physical_ticket.ticket.title
%td= physical_ticket.user.email
%td
.btn-group
= link_to 'Show',
conference_physical_ticket_path(@conference.short_title,
physical_ticket.token),
class: 'btn btn-primary'
= link_to 'Generate PDF',
conference_physical_ticket_path(@conference.short_title,
physical_ticket.token,
format: :pdf),
class: 'button btn btn-default btn-info'
- else - else
%h5 No Tickets sold! %h5 No Tickets sold!

View file

@ -27,7 +27,7 @@
%td %td
= ticket.tickets_sold = ticket.tickets_sold
%td %td
= humanized_money_with_symbol ticket.tickets_turnover = humanized_money_with_symbol ticket.tickets_turnover_total(ticket.id)
%td %td
= ticket.registration_ticket? ? 'Yes' : 'No' = ticket.registration_ticket? ? 'Yes' : 'No'
%td %td

View file

@ -101,7 +101,7 @@
= word_pluralize(@total_quantity[ticket_id], 'Ticket') = word_pluralize(@total_quantity[ticket_id], 'Ticket')
for for
= tickets.first.price.symbol = tickets.first.price.symbol
= humanized_money tickets.first.price = humanized_money @total_price_per_ticket[ticket_id]
%br %br
- if @tickets.any? - if @tickets.any?
= link_to 'Get more tickets', conference_tickets_path(@conference.short_title), class: "btn btn-default" = link_to 'Get more tickets', conference_tickets_path(@conference.short_title), class: "btn btn-default"

View file

@ -1,11 +1,12 @@
- progress_status = event.progress_status - progress_status = event.progress_status
%ul.list-unstyled %ul.list-unstyled
%li{'class'=>class_for_todo(progress_status['registered'])} - if can? :create, @conference.registrations.new
%span{'class'=>icon_for_todo(progress_status['registered'])} %li{'class'=>class_for_todo(progress_status['registered'])}
- if progress_status['registered'] %span{'class'=>icon_for_todo(progress_status['registered'])}
Speaker(s) registered to the conference - if progress_status['registered']
- else Speaker(s) registered to the conference
= link_to 'Speaker(s) not registered to the conference', new_conference_conference_registration_path(event.program.conference.short_title) - else
= link_to 'Speaker(s) not registered to the conference', new_conference_conference_registration_path(event.program.conference.short_title)
%li{'class'=>class_for_todo(progress_status['biographies'])} %li{'class'=>class_for_todo(progress_status['biographies'])}
%span{'class'=>icon_for_todo(progress_status['biographies'])} %span{'class'=>icon_for_todo(progress_status['biographies'])}
- if progress_status['biographies'] - if progress_status['biographies']

View file

@ -48,12 +48,12 @@
The more information you add to your proposal, the more likely it is that the conference organizers accept your proposal. The more information you add to your proposal, the more likely it is that the conference organizers accept your proposal.
%br %br
It will also be more likely that visitors find your proposal interesting enough to attend. It will also be more likely that visitors find your proposal interesting enough to attend.
- if can? :create, @conference.registrations.new
%p %p
%strong %strong
Why do I need to register to the conference? Why do I need to register to the conference?
%p %p
Knowing the number of visitors for the conference helps the organizers plan better. Knowing the number of visitors for the conference helps the organizers plan better.
%table.table.table-striped#events %table.table.table-striped#events
- @events.each do |event| - @events.each do |event|
@ -67,20 +67,27 @@
%small.text-muted %small.text-muted
= event.event_type.title = event.event_type.title
= "(#{event.event_type.length} min)" = "(#{event.event_type.length} min)"
= "in #{event.track.name}" if event.track = "in #{event.traistck.name}" if event.track
- if event.require_registration - if event.require_registration
%br %br
= link_to registered_text(event), registrations_conference_program_proposal_path(@conference.short_title, event), class: 'btn btn-xs btn-danger' = link_to registered_text(event), registrations_conference_program_proposal_path(@conference.short_title, event), class: 'btn btn-xs btn-danger'
%td.col-md-2{style: "padding:20px 8px 20px 8px;"} %td.col-md-2{style: "padding:20px 8px 20px 8px;"}
= link_to 'Complete your proposal', 'javascript: void(0)', "type"=>"button", "data-trigger"=>"focus", "data-toggle"=>"popover", "title"=>"Your todo list", "data-content"=>"#{render partial: 'tooltip', locals: { event: event} }" = link_to 'Complete your proposal', 'javascript: void(0)', "type"=>"button", "data-trigger"=>"focus", "data-toggle"=>"popover", "title"=>"Your todo list", "data-content"=>"#{render partial: 'tooltip', locals: { event: event} }"
- if can? :create, @conference.registrations.new
- progress_percentage = event.calculate_progress - progress_percentage = event.calculate_progress
.progress .progress
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"} %div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
= event.progress_status.reject{ |_key, value| value || value.nil? }.length = event.progress_status.reject{ |_key, value| value || value.nil? }.length
left left
- else
:ruby
progress_list = event.progress_status
progress_percentage = (100 * progress_list.values.count(true) / (progress_list.values.compact.count-1)).to_s
.progress
%div{class: "progress-bar #{event_progress_color(progress_percentage)}", style: "width:#{progress_percentage}%;"}
= event.progress_status.reject{ |_key, value| value || value.nil? }.length-1
left
%td.col-md-3{style: "padding:20px 0px 20px 0px;"} %td.col-md-3{style: "padding:20px 0px 20px 0px;"}
.pull-right .pull-right
- if event.transition_possible? :confirm - if event.transition_possible? :confirm

View file

@ -3,7 +3,7 @@ require 'mina/rails'
require 'mina/git' require 'mina/git'
set :domain, 'proxy-opensuse.suse.de' set :domain, 'proxy-opensuse.suse.de'
set :port, 2214 set :port, 2252
set :user, 'osem' set :user, 'osem'
set :deploy_to, '/srv/www/vhosts/opensuse.org/events' set :deploy_to, '/srv/www/vhosts/opensuse.org/events'
set :repository, 'https://github.com/openSUSE/osem.git' set :repository, 'https://github.com/openSUSE/osem.git'
@ -42,7 +42,7 @@ task deploy: :environment do
#invoke :notify_errbit #invoke :notify_errbit
to :launch do to :launch do
queue "sudo /etc/init.d/apache2 restart" queue "sudo /usr/bin/systemctl restart apache2"
queue "cd #{deploy_to}/current && RAILS_ENV=production bin/delayed_job start" queue "cd #{deploy_to}/current && RAILS_ENV=production bin/delayed_job start"
end end

View file

@ -0,0 +1,5 @@
class AddAmountPaidToTicketPurchases < ActiveRecord::Migration
def change
add_column :ticket_purchases, :amount_paid, :float, default: 0
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170816203325) do ActiveRecord::Schema.define(version: 20170924190528) do
create_table "ahoy_events", force: :cascade do |t| create_table "ahoy_events", force: :cascade do |t|
t.uuid "visit_id", limit: 16 t.uuid "visit_id", limit: 16
@ -504,6 +504,7 @@ ActiveRecord::Schema.define(version: 20170816203325) do
t.integer "user_id" t.integer "user_id"
t.integer "payment_id" t.integer "payment_id"
t.integer "week" t.integer "week"
t.float "amount_paid"
end end
create_table "ticket_scannings", force: :cascade do |t| create_table "ticket_scannings", force: :cascade do |t|

View file

@ -252,7 +252,7 @@ describe ConferenceRegistrationsController, type: :controller do
end end
it 'does not assign price of purchased tickets to total_price and purchased tickets to tickets without payment' do it 'does not assign price of purchased tickets to total_price and purchased tickets to tickets without payment' do
expect(assigns(:total_price)).to eq Money.new(0, 'USD') expect(assigns(:total_price)).to eq 0
end end
end end
@ -262,7 +262,7 @@ describe ConferenceRegistrationsController, type: :controller do
end end
it 'assigns 0 dollars to total_price and empty array to tickets variables' do it 'assigns 0 dollars to total_price and empty array to tickets variables' do
expect(assigns(:total_price)).to eq Money.new(0, 'USD') expect(assigns(:total_price)).to eq 0
expect(assigns(:tickets)).to match_array [] expect(assigns(:tickets)).to match_array []
end end
end end