Skip to content

Instantly share code, notes, and snippets.

def stats( params )
params = params.with_indifferent_access
group_by = params[:group_by] || 'week'
cruise_name = params['cruise_name']
query = "SELECT cruises.name,
DATE_TRUNC('#{group_by}', tours.departure) AS #{group_by},
COUNT(enquiries.id) AS count_enquiries,
SUM(enquiries.pax) AS count_paxes,
SUM(CASE WHEN enquiries.booking_status='Confirmed' THEN enquiries.pax END) AS count_confirmed_paxes
FROM cruises
rake braintree_subscriptions:update
~ Проверит отмененные и оконченные подписки в брейнтри и уберет их(*cancel) у юзера.
~ Проверяет на случай, когда в БД нет подписки, которая создалась в Брейнтри.
Скидочные купоны
~ Создаются или через админку или rake таской для оконченных Free подписок.
~ Поведение рассылки по дням можно изменить в таске braintree_subscriptions:send_discount_emails
~ Купон создастся в базе, но его нужно активировать по ссылке( метод coupon.link ) или из админки.
~ Купонов может быть несколько на одного юзера, но после активации одного, остальные удаляются.
~ После покупки с активированным купоном, создается подписка по скидочной цене, а купон удаляется.
Free Plan
irb(main):049:0* puts Delayed::Job.all.first.last_error
undefined method `first_name' for nil:NilClass
/app/app/models/enquiry.rb:119:in `customer_name'
/app/vendor/bundle/ruby/2.2.0/gems/draper-1.4.0/lib/draper/delegation.rb:10:in `customer_name'
/app/lib/csv_generator.rb:18:in `public_send'
/app/lib/csv_generator.rb:18:in `block (3 levels) in save'
/app/lib/csv_generator.rb:18:in `map'
/app/lib/csv_generator.rb:18:in `block (2 levels) in save'
/app/vendor/bundle/ruby/2.2.0/gems/draper-1.4.0/lib/draper/delegation.rb:10:in `each'
/app/vendor/bundle/ruby/2.2.0/gems/draper-1.4.0/lib/draper/delegation.rb:10:in `each'
def sorted_pax_list
ship_priority = ['Standard', 'Ensuite', 'Premier', 'Premier Plus']
name_condition = "CASE WHEN first_name <> '' THEN 1 ELSE 0 END DESC"
deck_condition = "CASE deck WHEN 'Above Deck' THEN 1 ELSE 0 END DESC"
ship_condition = "CASE ship_type "
ship_priority.each_with_index { |ship, i| ship_condition += "WHEN '#{ship}' then #{i} "}
ship_condition += "END DESC"
partners = Partner.where(id: enquiry.partners.pluck(:id)) # Somehow ordering does not work without this
partners.order("#{name_condition}, #{ship_condition}, #{deck_condition}")
Enquiry.last.partners.order(:first_name)
Enquiry Load (0.5ms) SELECT "enquiries".* FROM "enquiries" ORDER BY "enquiries"."id" DESC LIMIT 1
Enquiry Load (0.5ms) SELECT "enquiries".* FROM "enquiries" ORDER BY "enquiries"."id" DESC LIMIT 1
Partner Load (0.7ms) SELECT "partners".* FROM "partners" WHERE "partners"."enquiry_id" = $1 ORDER BY "partners"."is_cancel" ASC, first_name = '', first_name, last_name = '', last_name, ship_type, deck, "partners"."first_name" ASC [["enquiry_id", 10261]]
Partner Load (0.7ms) SELECT "partners".* FROM "partners" WHERE "partners"."enquiry_id" = $1 ORDER BY "partners"."is_cancel" ASC, first_name = '', first_name, last_name = '', last_name, ship_type, deck, "partners"."first_name" ASC [["enquiry_id", 10261]]
import React from 'react';
import ReactDOM from 'react-dom';
import Header from './components/Artist'
import Artist from './components/Artist';
class App extends React.Component{
constructor(){
<% if enquiry.status == 'Deposit' %>
<%= enquiry.status %>
<% elsif enquiry.status == 'Paid' %>
<%= enquiry.status %>
<% elsif enquiry.status == 'Refund' %>
Over Paid
<% elsif enquiry.status == 'Awaiting Payment' %>
Awaiting Payment
<% end %>
production:
solr:
hostname: localhost
port: 8983
log_level: WARNING
path: /solr/production
# read_timeout: 2
# open_timeout: 0.5
development:
3) Backend plan
- Add new fields for 'Feedback': crew, meals, cleanliness, representatives, booking_experience, suggestions, other.
Serialize these fields.
? - Add new model 'Excursion'( name, rating, cruise_id, direction_id )
- Add new user type 'StaffMember'( first_name, last_name, email, boat_id )
- When logged in it should be redirected to the feedback form with combination of his boat and the nearest departure time for it.
? - Should we bind a 'StaffMember' to a tour?
- Partial which accepts an array of hashes as a collection
- Hold the hash structure in yml file
The array structure is something like:
SELECT DISTINCT COUNT(DISTINCT `questionnaire_answer_set_answers`.`id`)
FROM `questionnaire_answer_set_answers`
INNER JOIN `questionnaire_answer_set_answers_question_answer_options`
ON `questionnaire_answer_set_answers_question_answer_options`.`answer_id` = `questionnaire_answer_set_answers`.`id`
INNER JOIN `questionnaire_question_answer_options`
ON `questionnaire_question_answer_options`.`id` = `questionnaire_answer_set_answers_question_answer_options`.`answer_option_id`
LEFT OUTER JOIN `questionnaire_question_answer_option_translations`
ON `questionnaire_question_answer_option_translations`.`questionnaire_question_answer_option_id` = `questionnaire_question_answer_options`.`id`
WHERE `questionnaire_answer_set_answers`.`question_id` = 23