Skip to content

Instantly share code, notes, and snippets.

@ckk-scratch
Created December 5, 2016 19:45
Show Gist options
  • Save ckk-scratch/1c1bce7960eecaef5ceb56083d25888a to your computer and use it in GitHub Desktop.
Save ckk-scratch/1c1bce7960eecaef5ceb56083d25888a to your computer and use it in GitHub Desktop.
Event Notifications
%tr
%td{:style => "padding: 25px; text-align: left; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px; color: #555555;"}
%p
You have been sent event details by
%i= "#{@user.name ? @user.name : @user.email}."
%p
Please direct all event matters to your organization's responsible party, or to the Scratch Events Operations Manager.
%i
%p
="- Scratch Events "
%tr
%td{:style => "padding: 0px 30px 30px 30px; text-align: left; font-family: sans-serif; font-size: 15px; mso-height-rule: exactly; line-height: 20px; color: #555555;"}
%h2
Event Details
.event-item.relative
%strong
%i Name
%span :
= @event.name.split(' - ')[0]
.event-item.relative
%strong
%i Start
%span :
= @event.start.strftime("%B %e, %l:%M %p")
.event-item.relative
%strong
%i End
%span :
= @event.end.strftime("%B %e, %l:%M %p")
- if @event.description
.event-item.relative
%strong
%i Event Description
%span :
= @event.description
.event-item.relative
%strong
%i City
%span :
= "#{@event.venue.city} #{@event.venue.state}"
%hr
%h2
Venue
.detail-wrapper
.col.col-md-6.relative
.event-item.relative
%strong
%i Name
%span :
- if @event.type == "Cruise" || @event.venue.name == nil
= @event.type
- else
= @event.venue.name
.event-item.relative
%strong
%i Address
%span :
/ = link_to @event.venue.address ? @event.venue.address : @event.venue.city, "https://www.google.com/maps/place/#{@event.venue.latlon.split(',')[0]},#{@event.venue.latlon.split(',')[1]}", target: '_blank'
= link_to @event.venue.address ? @event.venue.address : @event.venue.city, "http://maps.google.com/maps?q=#{@event.venue.address} #{@event.venue.city} #{@event.venue.state}", target: '_blank'
- if @event.venue.timezone
.event-item.relative
%strong
%i Timezone
%span :
= @event.venue.timezone
%hr
%h2
Operations Manager
- if @event.operations_manager
.detail-wrapper
.event-item.relative
%strong
%i Name
%span :
= @event.operations_manager.name
.event-item.relative
%strong
%i Email
%span :
= mail_to @event.operations_manager.email
- else
.detail-wrapper
.event-item.relative
%strong
%i Name
%span :
Casey Rueben
.event-item.relative
%strong
%i Email
%span :
= mail_to 'casey@scratch.com'
%hr
%h2
Talent
.detail-wrapper
- if @event.confirmed_events_users.exists?
- @event.confirmed_events_users.order(:arrival_time).each_with_index do |eu, i|
- if i != 0
%hr
.event-item.relative
%strong
%i Name
%span :
= eu.user.name
.event-item.relative
%strong
%i DJ Name
%span :
= eu.user.artist_name
- if eu.talent_role
.event-item.relative
%strong
%i Role
%span :
= eu.talent_role
- if eu.arrival_time
.event-item.relative
%strong
%i Arrival Time
%span :
= eu.arrival_time.strftime("%B %e, %l:%M %p")
.event-item.relative
%strong
%i Phone
%span :
%a{href: "tel:#{eu.user.sms_number}"}= eu.user.sms_number
- else
%i.fa.fa-check-square{"aria-hidden" => "true"}
%strong
%i Talent booking in progress
class EventMailer < ActionMailer::Base
layout 'scratch_events_mail'
def event_details(current_user_id, recipient, event_id)
@user = User.find(current_user_id)
@event = Event.find event_id
mail(to: recipient, subject: "Scratch: Event Detail #{@event.start.strftime('%m-%d-%Y')}")
end
end
class EventsController < ApplicationController
authorize_resource
before_filter :fetch_events, except: [:new, :fm_sync]
before_filter :authenticate_current_user
def dashboard
store_location
case params[:view]
when 'month'
@event_group ||= @all_events.order('start DESC').group_by { |t| t.start.beginning_of_month }
when 'year'
@event_group ||= @all_events.order('start DESC').group_by { |t| t.start.beginning_of_year }
when 'state'
@event_group = @all_events.joins(:venue).group("locations.state").select("locations.state").count
when 'venue'
@event_group = @all_events.joins(:venue).group("locations.name").select("locations.name").count
else
@event_group ||= @all_events.order('start DESC').group_by { |t| t.start.beginning_of_month }
end
end
def venue_events
if params[:state]
@value = params[:state]
@venue_events = @all_events.order('start DESC').joins(:venue).where('locations.state = ?', @value)
else params[:venue]
@value = params[:venue]
@venue_events = @all_events.order('start DESC').joins(:venue).where('locations.name = ?', @value)
end
respond_to do |format|
format.js { render :action => 'venue_events.js.erb', :layout => false }
end
end
def list_download
@event_scope = params["event_scope"] unless params["event_scope"].blank?
@q = @all_events.ransack(params[:q])
@q.sorts = "start ASC" if @q.sorts.empty?
case @event_scope
when "all"
relation = @q.result
when "past"
relation = @q.result.where("events.end < ?", Time.zone.today)
else
# Upcoming is default
relation = @q.result.where("events.end >= ?", Time.zone.today)
end
events = relation
respond_to do |format|
format.csv { send_data events.to_csv, filename: "ScratchEvents_#{Time.now.strftime("%B_%d_%Y")}.csv" }
end
end
def index
store_location
if params[:view] == 'list_view'
list_index
elsif params[:view] == 'calendar_view' || action_name == 'day_show'
@all_events = current_user.all_events
render :calendar_index
else
list_index
end
end
def group_by_day
self.start.to_date.to_s(:db)
end
def day_show
store_location(request.url.chomp(".js"))
range = params[:date].to_datetime.beginning_of_day..params[:date].to_datetime.end_of_day
@events = @all_events.where(start: range)
respond_to do |format|
format.js { render :action => 'day_show.js.erb', :layout => false}
format.html
end
end
def show
@event = Event.find(params[:id])
@messages = @event.messages
@return_to = stored_location_or_default(events_path)
unless current_user.admin_or_manager? || (current_user.company && current_user.company.events.include?(@event))
flash[:error] = "Looks like a permissions error. Email techteam@scratch.com to get this fixed"
redirect_to '/'
end
end
def email_event
EventMailer.delay.event_details(current_user.id, params[:recipient], params[:event_id])
flash[:notice] = "Successfully sent event details to #{params[:recipient]}"
redirect_to action: "show", id: params[:event_id]
end
def fm_sync
@event = Event.find(params[:id])
begin
FilemakerEventWorker.perform_async(@event.id)
flash[:success] = "Filemaker sync scheduled."
rescue => e
flash[:error] = e.message
end
redirect_to event_path(@event)
end
private
def list_index
@event_scope = params["event_scope"] unless params["event_scope"].blank?
@q = @all_events.ransack(params[:q])
@q.sorts = "start ASC" if @q.sorts.empty?
case @event_scope
when "all"
relation = @q.result
when "past"
relation = @q.result.where("events.end < ?", Time.zone.today)
else
# Upcoming is default
relation = @q.result.where("events.end >= ?", Time.zone.today)
end
@events = relation.paginate(page: params[:page])
render :list_index
end
end
.dashboard-page-container#event-show-wrapper.relative
.col.col-md-10.col-md-offset-1#event-show-nav
.pull-left
= link_to(@return_to, class: "btn btn-large btn-primary") do
%span.glyphicon.glyphicon-arrow-left
%span{style: "position: relative;float: right;margin-left: 10px;top: 4px;"} Back
.pull-right
= render partial: "events/event_detail_modal"
.col.col-md-10.col-md-offset-1
.well
.col.col-md-4
.event-title.relative
/ = "#{@event.type} Details"
Event Details
.detail-wrapper
.event-item.relative
%span Name:
%i
= @event.name.split(' - ')[0]
.event-item.relative
%span Start:
= display_time(@event.start)
.event-item.relative
%span End:
= display_time(@event.end)
- if @event.description
.event-item.relative
%span Event Description:
= @event.description
%hr{style: 'color: rgba(0,0,0,0.0);'}
- if @event.operations_manager
.detail-wrapper
.event-item.relative
%i Scratch Events Manager:
= mail_to @event.operations_manager.email, @event.operations_manager.name
- else
.detail-wrapper
.event-item.relative
%i Scratch Events Manager:
= mail_to 'casey@scratch.com', 'Casey Rueben'
.col.col-md-4
.event-title.relative Venue
.detail-wrapper
.col.col-md-12.relative
.event-item.relative
%span Name:
- if @event.type == "Cruise" || @event.venue.name == nil
= @event.type
- else
= @event.venue.name
.event-item.relative
%span Address:
/ = link_to @event.venue.address ? @event.venue.address : @event.venue.city, "https://www.google.com/maps/place/#{@event.venue.latlon.split(',')[0]},#{@event.venue.latlon.split(',')[1]}", target: '_blank'
= link_to @event.venue.address ? @event.venue.address : @event.venue.city, "http://maps.google.com/maps?q=#{@event.venue.address} #{@event.venue.city} #{@event.venue.state}", target: '_blank'
%p
%span Location:
= "#{@event.venue.city} #{@event.venue.state}"
- if @event.venue.store_number
.event-item.relative
%span Store Number:
= "#{@event.venue.store_number} "
- if @event.venue.timezone
.event-item.relative
%span Timezone:
= @event.venue.timezone
.col.col-md-4#venue-map-wrapper
.event-title.relative Map
%iframe{:allowfullscreen => "", :frameborder => "0", :height => "250", :src => "https://www.google.com/maps/embed/v1/search?key=#{Rails.application.secrets.google_api_key}&q=#{@event.venue.address} #{@event.venue.city} #{@event.venue.state}", :style => "border:0", :width => "450"}
.col.col-md-12
.event-title.relative Talent
.detail-wrapper
- if @event.confirmed_events_users.exists?
- @event.confirmed_events_users.order(:arrival_time).each_with_index do |eu, i|
.col.col-md-4.talent-block{style: 'margin-bottom: 20px;'}
.event-item.relative
%span Name:
= eu.user.name
.event-item.relative
%span DJ Name:
= eu.user.artist_name
- if eu.talent_role
.event-item.relative
%span Role:
= eu.talent_role
- if eu.arrival_time
.event-item.relative
%span Arrival Time:
= display_time(eu.arrival_time)
- if eu.end >= Date.today
.event-item.relative
%span Phone:
%a{href: "tel:#{eu.user.sms_number}"}= eu.user.sms_number
- else
%i Talent booking in progress
- if current_user.admin_or_manager?
- if !@messages.empty?
.col.col-md-12
.event-title.relative Messages
= render partial: "messages/messages"
.col.col-md-12
.event-title.relative Admin
= link_to "Sync this Event with FM", fm_sync_event_path(@event), method: :post, class: "btn btn-primary"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment