This commit is contained in:
Nicolas Bally 2016-04-28 12:04:43 +02:00
parent 7c6618aa97
commit 489b53d885
8 changed files with 115 additions and 7 deletions

View File

@ -1,7 +1,7 @@
class Public::ProductCustomersController < ApplicationController
layout "public"
before_filter :auth_product_customer, :except => [:new, :create, :confirm]
before_filter :auth_product_customer, :except => [:new, :create, :confirm, :find_parrain]
def index
@ -31,6 +31,14 @@ class Public::ProductCustomersController < ApplicationController
@product_customer = ProductCustomer.new()
if cookies[:mlm_token] and @parent = ProductCustomer.find_parrain(cookies[:mlm_token])
@product_customer.parent_code = @parent.mlm_token.upcase
elsif params[:p] and @parent = ProductCustomer.find_parrain(params[:p])
@product_customer.parent_code = @parent.mlm_token.upcase
end
end
@ -112,6 +120,24 @@ class Public::ProductCustomersController < ApplicationController
end
end
end
def find_parrain
@parent = ProductCustomer.find_parrain(params[:parent_code])
if @parent
cookies.permanent[:mlm_token] = @parent.mlm_token
else
cookies.permanent[:mlm_token] = nil
end
render layout: false
end
def parrainage
cookies.permanent[:mlm_token] = params[:mlm_token]
redirect_to "/"
end

View File

@ -16,12 +16,18 @@ class ProductCustomer < ActiveRecord::Base
before_create do
self.generate_token
self.generate_mlm_token
self.particular_bill = Particular.create(:particular_type => "facturation", :skip_validation => true)
self.particular_idem = true
self.particular_send = Particular.create(:particular_type => "expedition", :skip_validation => true)
end
def pseudo
self.particular_bill.firstname.to_s+" "+self.particular_bill.name.to_s
end
def send_password_reset
@ -43,5 +49,42 @@ class ProductCustomer < ActiveRecord::Base
end while ProductCustomer.exists?(:token => self.token)
end
def generate_mlm_token
self.mlm_token = loop do
mlm_token = SecureRandom.hex(3).upcase
break mlm_token unless ProductCustomer.exists?(mlm_token: mlm_token)
end
end
def self.find_parrain(token)
if token.to_s != ""
ProductCustomer.find_by_mlm_token(token.upcase)
else
nil
end
end
before_validation do
if !self.id
if self.parent_code?
if mlm_parent = ProductCustomer.find_parrain(self.parent_code)
self.parent_id = mlm_parent.id
self.parent_at_create = true
else
errors.add(:parent_code, "Ce code de recommandation n'est pas valide, merci de vérifier son exactitude. ")
end
end
end
end
end

View File

@ -28,10 +28,7 @@
= stylesheet_link_tag 'public'
= stylesheet_link_tag '/fonts/Advent/stylesheet.css'
<script src='https://app.neocamino.com/api.js?id=dhd7sy0f' type='text/javascript'></script>
=javascript_include_tag "http://maps.google.com/maps/api/js?sensor=false&region=FR"

View File

@ -0,0 +1,10 @@
-if @parent
%p
=qit("recommended-by-form", "Recommandé par")
=":"
%strong
= @parent.pseudo
%br
%br

View File

@ -33,11 +33,29 @@
=qit("your-password","Votre mot de passe")
= error
=f.label :parent_code, "Code de recommandation "
%p
=qit "offre-10-credits-offerts-parainnage" do
Profitez d'un bon d'achat de 5€ avec un code de recommandation valide. Si vous n'en avez pas et que quelqu'un vous a parlé du site demandez lui, il en a certainement un !
.form-group{:class => ("has-error has-feedback" if @product_customer.errors[:parent_code].size > 0)}
=f.text_field :parent_code, :class => "form-control", :placeholder => qit("code-de-recommandation","Code de recommandation"), :onchange => "find_parrain( $(this).val());", :onkeyup => "find_parrain( $(this).val());", :onkeydown => "find_parrain( $(this).val());"
-if @product_customer.errors[:parent_code].uniq
-@product_customer.errors[:parent_code].uniq.each do |error|
.error= error
.parent
=render :partial => "public/product_customers/find_parrain"
=f.submit qit("account-create-save","Créer mon compte !"), :class => "btn btn-primary order_button"
%br
%br
:coffeescript
@find_parrain = (value) ->
$.ajax({url : '/fr/public/product_customers/find_parrain.js', data : {parent_code :value}})
%br
%br

View File

@ -0,0 +1 @@
$('.parent').html("<%= escape_javascript(render(:partial => "find_parrain"))%>");

View File

@ -0,0 +1,9 @@
class AddMlmToProductCustomers < ActiveRecord::Migration
def change
add_column :product_customers, :parent_id, :integer
add_column :product_customers, :mlm_token, :string
add_column :product_customers, :parent_at_create, :boolean
add_column :product_customers, :parent_code, :string
end
end

View File

@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160426151106) do
ActiveRecord::Schema.define(version: 20160428093204) do
create_table "admins", force: :cascade do |t|
t.string "name", limit: 255
@ -574,6 +574,10 @@ ActiveRecord::Schema.define(version: 20160426151106) do
t.boolean "particular_idem", limit: 1, default: false
t.integer "particular_bill_id", limit: 4
t.integer "particular_send_id", limit: 4
t.integer "parent_id", limit: 4
t.string "mlm_token", limit: 255
t.boolean "parent_at_create", limit: 1
t.string "parent_code", limit: 255
end
create_table "product_fdps", force: :cascade do |t|
@ -680,7 +684,7 @@ ActiveRecord::Schema.define(version: 20160426151106) do
t.string "particular_send_id", limit: 255
t.string "token", limit: 255
t.boolean "completed_finish", limit: 1, default: false
t.integer "product_order_payment_ok", limit: 4
t.integer "product_order_payment_ok_id", limit: 4
t.integer "product_order_payment_type_ok_id", limit: 4
t.integer "bill_index", limit: 4
t.string "bill_number", limit: 255