unlock_moip 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/Rakefile +21 -0
- data/app/assets/images/unlock_moip/logo.png +0 -0
- data/app/assets/javascripts/unlock_moip.js.coffee +72 -0
- data/app/assets/stylesheets/unlock_moip/contributions/edit.sass +31 -0
- data/app/assets/stylesheets/unlock_moip/contributions/form.sass +35 -0
- data/app/assets/stylesheets/unlock_moip/unlock_moip.sass +2 -0
- data/app/assets/stylesheets/unlock_moip.sass +1 -0
- data/app/controllers/unlock_moip/contributions_controller.rb +199 -0
- data/app/views/unlock_moip/contributions/_form.html.slim +61 -0
- data/app/views/unlock_moip/contributions/_gateway_data.html.slim +5 -0
- data/app/views/unlock_moip/contributions/edit.html.slim +32 -0
- data/config/initializers/moip_assinaturas.rb +9 -0
- data/config/initializers/register.rb +4 -0
- data/config/routes.rb +10 -0
- data/lib/tasks/unlock_moip_tasks.rake +4 -0
- data/lib/unlock_moip/engine.rb +4 -0
- data/lib/unlock_moip/models/contribution.rb +66 -0
- data/lib/unlock_moip/models/gateway.rb +32 -0
- data/lib/unlock_moip/version.rb +3 -0
- data/lib/unlock_moip.rb +7 -0
- metadata +121 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 41a64ef8cd2d508986e5ddd50573d896613c1a80
|
4
|
+
data.tar.gz: c3ae96b599ef0ffaf34da169d832ade5590f4c27
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 74cbfea0a95ea10009b62ce7afffef87315656abe05a462da72b456a0d201801649ca5135529fa7841f3ba2f652b8fca7139f47bccf60f17c7a41255f3ecfe44
|
7
|
+
data.tar.gz: 809204b80f664b5ecf6ae0bc9e8943655492376be2f5b4ec5e9fdc844a9e4205621647484331413a7ed5279324928f1dbc3147c7588a42b26670c674bcdc4cef
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'UnlockMoip'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
Binary file
|
@@ -0,0 +1,72 @@
|
|
1
|
+
$(document).ready ->
|
2
|
+
if action() == "new" and controller() == "contributions" and namespace() == "initiatives"
|
3
|
+
$('#contribution_value').maskMoney
|
4
|
+
thousands: ''
|
5
|
+
decimal: ''
|
6
|
+
precision: 0
|
7
|
+
if action() == "edit" and controller() == "contributions" and namespace() == "unlockmoip"
|
8
|
+
$('#pay_form [type=submit]').on "click", (event) ->
|
9
|
+
event.preventDefault()
|
10
|
+
event.stopPropagation()
|
11
|
+
billing_info_ok = false
|
12
|
+
form = $('#pay_form')
|
13
|
+
submit = form.find('[type=submit]')
|
14
|
+
status = form.find('.gateway_data')
|
15
|
+
terms = form.find('#terms')
|
16
|
+
status.removeClass 'success'
|
17
|
+
status.removeClass 'failure'
|
18
|
+
status.find('ul').html('')
|
19
|
+
unless terms.is(':checked')
|
20
|
+
status.addClass 'failure'
|
21
|
+
status.html("<h4>Você precisa aceitar os termos de uso para continuar.</h4>")
|
22
|
+
status.show()
|
23
|
+
else
|
24
|
+
status.html("<h4>Enviando dados de pagamento para o Moip...</h4><ul></ul>")
|
25
|
+
token = form.data('token')
|
26
|
+
plan_code = form.data('plan')
|
27
|
+
submit.hide()
|
28
|
+
status.show()
|
29
|
+
if MoipAssinaturas?
|
30
|
+
moip = new MoipAssinaturas(token)
|
31
|
+
moip.callback (response) ->
|
32
|
+
status.find('h4').html("#{response.message} (Moip)")
|
33
|
+
unless response.has_errors()
|
34
|
+
unless billing_info_ok
|
35
|
+
billing_info_ok = true
|
36
|
+
subscription = new Subscription()
|
37
|
+
subscription.with_code(form.data('subscription'))
|
38
|
+
subscription.with_customer(customer)
|
39
|
+
subscription.with_plan_code(plan_code)
|
40
|
+
moip.subscribe(subscription)
|
41
|
+
else
|
42
|
+
next_invoice = "#{response.next_invoice_date.day}/#{response.next_invoice_date.month}/#{response.next_invoice_date.year}"
|
43
|
+
$.ajax
|
44
|
+
url: form.data('activate'),
|
45
|
+
type: 'PUT',
|
46
|
+
dataType: 'json',
|
47
|
+
success: (response) ->
|
48
|
+
window.location.href = form.data('show')
|
49
|
+
error: (response) ->
|
50
|
+
status.find('h4').html("Não foi possível ativar sua assinatura")
|
51
|
+
status.addClass 'failure'
|
52
|
+
for error in response.responseJSON.errors
|
53
|
+
status.find('ul').append("<li>#{error}</li>")
|
54
|
+
submit.show()
|
55
|
+
else
|
56
|
+
status.addClass 'failure'
|
57
|
+
for error in response.errors
|
58
|
+
status.find('ul').append("<li>#{error.description}</li>")
|
59
|
+
submit.show()
|
60
|
+
billing_info =
|
61
|
+
fullname: $("#holder_name").val(),
|
62
|
+
expiration_month: $("#expiration_month").val(),
|
63
|
+
expiration_year: $("#expiration_year").val(),
|
64
|
+
credit_card_number: $("#number").val()
|
65
|
+
customer = new Customer()
|
66
|
+
customer.code = form.data('customer')
|
67
|
+
customer.billing_info = new BillingInfo(billing_info)
|
68
|
+
moip.update_credit_card(customer)
|
69
|
+
else
|
70
|
+
status.addClass 'failure'
|
71
|
+
status.find('h4').html("Erro ao carregar o Moip Assinaturas. Por favor, recarregue a página e tente novamente.")
|
72
|
+
submit.show()
|
@@ -0,0 +1,31 @@
|
|
1
|
+
body[data-action="edit"][data-controller="contributions"][data-namespace="unlockmoip"]
|
2
|
+
article
|
3
|
+
width: 92%
|
4
|
+
+media($tablet)
|
5
|
+
width: 90%
|
6
|
+
+media($desktop)
|
7
|
+
width: 70%
|
8
|
+
margin-left: auto
|
9
|
+
margin-right: auto
|
10
|
+
form
|
11
|
+
.field
|
12
|
+
float: left
|
13
|
+
width: 100%
|
14
|
+
margin-bottom: 0
|
15
|
+
.number
|
16
|
+
width: 47.5%
|
17
|
+
margin-right: 5%
|
18
|
+
.month
|
19
|
+
width: 21.25%
|
20
|
+
margin-right: 5%
|
21
|
+
.year
|
22
|
+
width: 21.25%
|
23
|
+
.value
|
24
|
+
margin-bottom: 2em
|
25
|
+
text-align: right
|
26
|
+
span
|
27
|
+
color: $link_color
|
28
|
+
font-size: 2em
|
29
|
+
.gateway_data
|
30
|
+
display: none
|
31
|
+
margin-bottom: 2em
|
@@ -0,0 +1,35 @@
|
|
1
|
+
body[data-action="new"][data-controller="contributions"][data-namespace="initiatives"], body[data-action="create"][data-controller="contributions"][data-namespace="unlockmoip"]
|
2
|
+
article
|
3
|
+
form
|
4
|
+
em
|
5
|
+
margin-bottom: 4em
|
6
|
+
.field
|
7
|
+
float: left
|
8
|
+
width: 100%
|
9
|
+
margin-bottom: 0
|
10
|
+
.document
|
11
|
+
width: 47.5%
|
12
|
+
margin-right: 5%
|
13
|
+
.birthdate
|
14
|
+
width: 47.5%
|
15
|
+
.street
|
16
|
+
width: 47.5%
|
17
|
+
margin-right: 5%
|
18
|
+
.number
|
19
|
+
width: 21.25%
|
20
|
+
margin-right: 5%
|
21
|
+
.complement
|
22
|
+
width: 21.25%
|
23
|
+
.district, .city, .state
|
24
|
+
width: 30%
|
25
|
+
margin-right: 5%
|
26
|
+
.state
|
27
|
+
margin-right: 0
|
28
|
+
.zipcode
|
29
|
+
width: 47.5%
|
30
|
+
margin-right: 5%
|
31
|
+
.phone_area_code
|
32
|
+
width: 12.5%
|
33
|
+
margin-right: 5%
|
34
|
+
.phone_number
|
35
|
+
width: 30%
|
@@ -0,0 +1 @@
|
|
1
|
+
@import unlock_moip/unlock_moip
|
@@ -0,0 +1,199 @@
|
|
1
|
+
class UnlockMoip::ContributionsController < ::ApplicationController
|
2
|
+
|
3
|
+
inherit_resources
|
4
|
+
actions :create, :edit
|
5
|
+
custom_actions member: %i[activate suspend]
|
6
|
+
respond_to :html, except: [:activate, :suspend]
|
7
|
+
respond_to :json, only: [:activate, :suspend]
|
8
|
+
|
9
|
+
after_action :verify_authorized
|
10
|
+
after_action :verify_policy_scoped, only: %i[]
|
11
|
+
before_action :authenticate_user!, only: %i[edit]
|
12
|
+
|
13
|
+
def create
|
14
|
+
|
15
|
+
# Getting the date from Pickadate
|
16
|
+
if params[:pickadate_birthdate_submit]
|
17
|
+
params[:contribution][:user_attributes][:birthdate] = params[:pickadate_birthdate_submit]
|
18
|
+
end
|
19
|
+
|
20
|
+
# Creating the contribution
|
21
|
+
@initiative = Initiative.find(contribution_params[:initiative_id])
|
22
|
+
@gateways = @initiative.gateways.without_state(:draft).order(:ordering)
|
23
|
+
@contribution = @initiative.contributions.new(contribution_params)
|
24
|
+
@contribution.gateway_state = @contribution.gateway.state
|
25
|
+
authorize @contribution
|
26
|
+
|
27
|
+
if @contribution.save
|
28
|
+
|
29
|
+
data = {}
|
30
|
+
# Storing the customer_code and subscription_code
|
31
|
+
data["customer_code"] = @contribution.customer_code
|
32
|
+
data["subscription_code"] = @contribution.subscription_code
|
33
|
+
# Storing user information
|
34
|
+
data["email"] = @contribution.user.email
|
35
|
+
data["full_name"] = @contribution.user.full_name
|
36
|
+
data["document"] = @contribution.user.document
|
37
|
+
data["phone_area_code"] = @contribution.user.phone_area_code
|
38
|
+
data["phone_number"] = @contribution.user.phone_number
|
39
|
+
data["birthdate"] = @contribution.user.birthdate
|
40
|
+
data["address_street"] = @contribution.user.address_street
|
41
|
+
data["address_number"] = @contribution.user.address_number
|
42
|
+
data["address_complement"] = @contribution.user.address_complement
|
43
|
+
data["address_district"] = @contribution.user.address_district
|
44
|
+
data["address_city"] = @contribution.user.address_city
|
45
|
+
data["address_state"] = @contribution.user.address_state
|
46
|
+
data["address_zipcode"] = @contribution.user.address_zipcode
|
47
|
+
# Saving gateway_data
|
48
|
+
@contribution.update gateway_data: data
|
49
|
+
|
50
|
+
# Creating the plan, if needed
|
51
|
+
begin
|
52
|
+
response = Moip::Assinaturas::Plan.details(@contribution.plan_code, @contribution.moip_auth)
|
53
|
+
rescue Moip::Assinaturas::WebServerResponseError => e
|
54
|
+
if @contribution.gateway.sandbox?
|
55
|
+
@contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de Sandbox do Moip Assinaturas.#{ ' Você já solicitou acesso ao Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
|
56
|
+
else
|
57
|
+
@contribution.errors.add(:base, "Parece que este Unlock não está autorizado a utilizar o ambiente de produção do Moip Assinaturas.#{ ' Você já homologou sua conta para produção no Moip Assinaturas? Verifique também se configurou o Token e a Chave de API.' if @initiative.user == current_user }")
|
58
|
+
end
|
59
|
+
return render '/initiatives/contributions/new'
|
60
|
+
rescue => e
|
61
|
+
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o plano de assinaturas no Moip. Por favor, tente novamente.")
|
62
|
+
return render '/initiatives/contributions/new'
|
63
|
+
end
|
64
|
+
unless response[:success]
|
65
|
+
plan = {
|
66
|
+
code: @contribution.plan_code,
|
67
|
+
name: @contribution.plan_name,
|
68
|
+
amount: (@contribution.value * 100).to_i
|
69
|
+
}
|
70
|
+
begin
|
71
|
+
response = Moip::Assinaturas::Plan.create(plan, @contribution.moip_auth)
|
72
|
+
rescue
|
73
|
+
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
|
74
|
+
return render '/initiatives/contributions/new'
|
75
|
+
end
|
76
|
+
unless response[:success]
|
77
|
+
if response[:errors] && response[:errors].kind_of?(Array)
|
78
|
+
response[:errors].each do |error|
|
79
|
+
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
|
80
|
+
end
|
81
|
+
else
|
82
|
+
@contribution.errors.add(:base, "Ocorreu um erro ao criar o plano de assinaturas no Moip. Por favor, tente novamente.")
|
83
|
+
end
|
84
|
+
return render '/initiatives/contributions/new'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# Creating the client, if needed
|
89
|
+
customer = {
|
90
|
+
code: @contribution.customer_code,
|
91
|
+
email: @contribution.user.email,
|
92
|
+
fullname: @contribution.user.full_name,
|
93
|
+
cpf: @contribution.user.document,
|
94
|
+
phone_area_code: @contribution.user.phone_area_code,
|
95
|
+
phone_number: @contribution.user.phone_number,
|
96
|
+
birthdate_day: @contribution.user.birthdate.strftime('%d'),
|
97
|
+
birthdate_month: @contribution.user.birthdate.strftime('%m'),
|
98
|
+
birthdate_year: @contribution.user.birthdate.strftime('%Y'),
|
99
|
+
address: {
|
100
|
+
street: @contribution.user.address_street,
|
101
|
+
number: @contribution.user.address_number,
|
102
|
+
complement: @contribution.user.address_complement,
|
103
|
+
district: @contribution.user.address_district,
|
104
|
+
city: @contribution.user.address_city,
|
105
|
+
state: @contribution.user.address_state,
|
106
|
+
country: "BRA",
|
107
|
+
zipcode: @contribution.user.address_zipcode
|
108
|
+
}
|
109
|
+
}
|
110
|
+
begin
|
111
|
+
response = Moip::Assinaturas::Customer.details(@contribution.customer_code, @contribution.moip_auth)
|
112
|
+
rescue
|
113
|
+
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao verificar o cadastro de cliente no Moip. Por favor, tente novamente.")
|
114
|
+
return render '/initiatives/contributions/new'
|
115
|
+
end
|
116
|
+
if response[:success]
|
117
|
+
begin
|
118
|
+
response = Moip::Assinaturas::Customer.update(@contribution.customer_code, customer, @contribution.moip_auth)
|
119
|
+
unless response[:success]
|
120
|
+
if response[:errors] && response[:errors].kind_of?(Array)
|
121
|
+
response[:errors].each do |error|
|
122
|
+
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
|
123
|
+
end
|
124
|
+
else
|
125
|
+
@contribution.errors.add(:base, "Ocorreu um erro ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
|
126
|
+
end
|
127
|
+
return render '/initiatives/contributions/new'
|
128
|
+
end
|
129
|
+
rescue
|
130
|
+
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao atualizar o cadastro de cliente no Moip. Por favor, tente novamente.")
|
131
|
+
return render '/initiatives/contributions/new'
|
132
|
+
end
|
133
|
+
else
|
134
|
+
begin
|
135
|
+
response = Moip::Assinaturas::Customer.create(customer, new_vault = false, @contribution.moip_auth)
|
136
|
+
rescue
|
137
|
+
@contribution.errors.add(:base, "Ocorreu um erro de conexão ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
|
138
|
+
return render '/initiatives/contributions/new'
|
139
|
+
end
|
140
|
+
unless response[:success]
|
141
|
+
if response[:errors] && response[:errors].kind_of?(Array)
|
142
|
+
response[:errors].each do |error|
|
143
|
+
@contribution.errors.add(:base, "#{response[:message]} (Moip). #{error[:description]}")
|
144
|
+
end
|
145
|
+
else
|
146
|
+
@contribution.errors.add(:base, "Ocorreu um erro ao realizar o cadastro de cliente no Moip. Por favor, tente novamente.")
|
147
|
+
end
|
148
|
+
return render '/initiatives/contributions/new'
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
flash[:success] = "Apoio iniciado com sucesso! Agora é só realizar o pagamento :D"
|
153
|
+
return redirect_to edit_moip_contribution_path(@contribution)
|
154
|
+
|
155
|
+
else
|
156
|
+
return render '/initiatives/contributions/new'
|
157
|
+
end
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
def edit
|
162
|
+
edit! { authorize resource }
|
163
|
+
end
|
164
|
+
|
165
|
+
def activate
|
166
|
+
transition_state("activate", :active)
|
167
|
+
end
|
168
|
+
|
169
|
+
def suspend
|
170
|
+
transition_state("suspend", :suspended)
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def transition_state(transition, state)
|
176
|
+
authorize resource
|
177
|
+
errors = []
|
178
|
+
if resource.send("can_#{transition}?")
|
179
|
+
begin
|
180
|
+
if resource.moip_state_name != state
|
181
|
+
response = Moip::Assinaturas::Subscription.send(transition.to_sym, resource.subscription_code, resource.moip_auth)
|
182
|
+
resource.send("#{transition}!") if response[:success]
|
183
|
+
else
|
184
|
+
resource.send("#{transition}!")
|
185
|
+
end
|
186
|
+
rescue
|
187
|
+
errors << "Não foi possível alterar o status de seu apoio."
|
188
|
+
end
|
189
|
+
else
|
190
|
+
errors << "Não é permitido alterar o status deste apoio."
|
191
|
+
end
|
192
|
+
render(json: {success: (errors.size == 0), errors: errors}, status: ((errors.size == 0) ? 200 : 422))
|
193
|
+
end
|
194
|
+
|
195
|
+
def contribution_params
|
196
|
+
params.require(:contribution).permit(*policy(@contribution || Contribution.new).permitted_attributes)
|
197
|
+
end
|
198
|
+
|
199
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
= form_for @contribution, url: moip_contributions_path, method: :post do |form|
|
2
|
+
- if gateway.sandbox?
|
3
|
+
.warning
|
4
|
+
h3 Atenção! Este unlock encontra-se em modo de testes (Sandbox) no Moip.
|
5
|
+
ul
|
6
|
+
li Nenhum apoio realizado neste modo será concretizado.
|
7
|
+
li Você pode testar livremente, sem medo de ser debitado.
|
8
|
+
- if @contribution.errors.any?
|
9
|
+
#error_explanation.warning
|
10
|
+
h3 = "#{pluralize(@contribution.errors.count, "erro impediu", "erros impediram")} que este apoio fosse salvo:"
|
11
|
+
ul
|
12
|
+
- @contribution.errors.full_messages.each do |msg|
|
13
|
+
li= msg
|
14
|
+
= form.hidden_field :user_id
|
15
|
+
= form.hidden_field :initiative_id
|
16
|
+
= form.hidden_field :gateway_id, value: gateway.id
|
17
|
+
h3 Com quanto você quer apoiar por mês?
|
18
|
+
= form.label :value
|
19
|
+
= form.text_field :value, class: "has_em"
|
20
|
+
em Assinatura mensal cobrada via cartão de crédito pelo meio de pagamentos #{link_to 'Moip', 'https://moip.com.br/', target: :_blank }. Você pode suspender #{ link_to 'a qualquer momento', my_contributions_path, target: :_blank }.
|
21
|
+
h3 Preencha e revise os dados para pagamento
|
22
|
+
= form.fields_for :user do |user_fields|
|
23
|
+
= user_fields.hidden_field :id
|
24
|
+
.field
|
25
|
+
= user_fields.label :full_name
|
26
|
+
= user_fields.text_field :full_name
|
27
|
+
.field.document
|
28
|
+
= user_fields.label :document
|
29
|
+
= user_fields.text_field :document
|
30
|
+
.field.birthdate
|
31
|
+
= user_fields.label :birthdate
|
32
|
+
= text_field_tag :pickadate_birthdate, (@contribution.user.birthdate.strftime('%d/%m/%Y') if @contribution.user.birthdate), class: "date", placeholder: "Data de nascimento"
|
33
|
+
= user_fields.hidden_field :birthdate
|
34
|
+
.field.street
|
35
|
+
= user_fields.label :address_street
|
36
|
+
= user_fields.text_field :address_street
|
37
|
+
.field.number
|
38
|
+
= user_fields.label :address_number
|
39
|
+
= user_fields.text_field :address_number
|
40
|
+
.field.complement
|
41
|
+
= user_fields.label :address_complement
|
42
|
+
= user_fields.text_field :address_complement
|
43
|
+
.field.district
|
44
|
+
= user_fields.label :address_district
|
45
|
+
= user_fields.text_field :address_district
|
46
|
+
.field.city
|
47
|
+
= user_fields.label :address_city
|
48
|
+
= user_fields.text_field :address_city
|
49
|
+
.field.state
|
50
|
+
= user_fields.label :address_state
|
51
|
+
= user_fields.select :address_state, options_for_select(ActionView::Helpers::FormOptionsHelper::ESTADOS_BRASILEIROS, @contribution.user.address_state)
|
52
|
+
.field.zipcode
|
53
|
+
= user_fields.label :address_zipcode
|
54
|
+
= user_fields.text_field :address_zipcode
|
55
|
+
.field.phone_area_code
|
56
|
+
= user_fields.label :phone_area_code
|
57
|
+
= user_fields.text_field :phone_area_code
|
58
|
+
.field.phone_number
|
59
|
+
= user_fields.label :phone_number
|
60
|
+
= user_fields.text_field :phone_number
|
61
|
+
.submit= form.submit "Realizar pagamento"
|
@@ -0,0 +1,5 @@
|
|
1
|
+
ul
|
2
|
+
li Seu código de assinatura é <strong>#{@contribution.subscription_code}</strong>
|
3
|
+
li Seu pagamento ainda será processado pelo <a href='https://www.moip.com.br/' target='_blank'>Moip</a>.
|
4
|
+
li Se você quiser suspender seu apoio, basta acessar o menu <a href='/my_contributions'>Unlocks apoiados</a> a qualquer momento.
|
5
|
+
li Sua próxima cobrança será realizada em #{@contribution.next_invoice_date}.
|
@@ -0,0 +1,32 @@
|
|
1
|
+
- content_for :title do
|
2
|
+
= "Dados de pagamento"
|
3
|
+
- content_for :external_js do
|
4
|
+
script type="text/javascript" src="https://#{( @contribution.gateway.sandbox? ? 'sandbox' : 'api' )}.moip.com.br/moip-assinaturas.min.js"
|
5
|
+
form#pay_form autocomplete="off" data-token=@contribution.gateway.settings["token"] data-plan=@contribution.plan_code data-customer=@contribution.customer_code data-subscription=@contribution.subscription_code data-activate=activate_moip_contribution_path data-show=initiative_contribution_path(@contribution.initiative.id, @contribution)
|
6
|
+
- if @contribution.gateway.sandbox?
|
7
|
+
.warning
|
8
|
+
h3 Atenção! Este unlock encontra-se em modo de testes (Sandbox) no Moip.
|
9
|
+
ul
|
10
|
+
li Nenhum apoio realizado neste modo será concretizado.
|
11
|
+
li Você pode testar livremente, sem medo de ser debitado.
|
12
|
+
.field
|
13
|
+
= label_tag :holder_name, "Nome escrito no cartão de crédito"
|
14
|
+
= text_field_tag :holder_name, "", autocomplete: "off"
|
15
|
+
.field.number
|
16
|
+
= label_tag :number, "Número do cartão de crédito"
|
17
|
+
= text_field_tag :number, "", autocomplete: "off"
|
18
|
+
.field.month
|
19
|
+
= label_tag :expiration_month, "Mês de expiração"
|
20
|
+
= text_field_tag :expiration_month, "", autocomplete: "off"
|
21
|
+
.field.year
|
22
|
+
= label_tag :expiration_year, "Ano de expiração"
|
23
|
+
= text_field_tag :expiration_year, "", autocomplete: "off"
|
24
|
+
.field
|
25
|
+
= check_box_tag :terms, "1", true
|
26
|
+
= label_tag :terms, "Eu li e aceito os #{ link_to 'termos de uso', page_path('terms'), target: :_blank }.".html_safe
|
27
|
+
h4.value
|
28
|
+
= "Apoio de "
|
29
|
+
span= "R$ #{@contribution.display_value},00"
|
30
|
+
= "/mês"
|
31
|
+
.gateway_data
|
32
|
+
.submit= submit_tag "Confirmar pagamento"
|
data/config/routes.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
module UnlockMoip
|
2
|
+
module Models
|
3
|
+
module Contribution
|
4
|
+
|
5
|
+
include UnlockGateway::Models::Contribution
|
6
|
+
|
7
|
+
def moip_auth
|
8
|
+
return {} unless self.gateway && self.gateway.settings
|
9
|
+
{ moip_auth: { token: self.gateway.settings["token"], key: self.gateway.settings["key"], sandbox: self.gateway.sandbox? }}
|
10
|
+
end
|
11
|
+
|
12
|
+
def plan_code
|
13
|
+
"#{self.initiative.permalink[0..29]}#{self.value.to_i}#{'sandbox' if self.gateway.sandbox?}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def plan_name
|
17
|
+
"#{self.initiative.name[0..29]} #{self.value.to_i}#{' (Sandbox)' if self.gateway.sandbox?}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def customer_code
|
21
|
+
if self.gateway_data && self.gateway_data["customer_code"]
|
22
|
+
self.gateway_data["customer_code"]
|
23
|
+
else
|
24
|
+
Digest::MD5.new.update("#{self.initiative.permalink[0..29]}#{self.user.id}#{'sandbox' if self.gateway.sandbox?}").to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def subscription_code
|
29
|
+
if self.gateway_data && self.gateway_data["subscription_code"]
|
30
|
+
self.gateway_data["subscription_code"]
|
31
|
+
else
|
32
|
+
Digest::MD5.new.update("#{self.initiative.permalink[0..29]}#{self.id}#{'sandbox' if self.gateway.sandbox?}").to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def moip_state_name
|
37
|
+
begin
|
38
|
+
response = Moip::Assinaturas::Subscription.details(self.subscription_code, self.moip_auth)
|
39
|
+
rescue
|
40
|
+
return nil
|
41
|
+
end
|
42
|
+
if response && response[:success]
|
43
|
+
status = (response[:subscription]["status"].upcase rescue nil)
|
44
|
+
case status
|
45
|
+
when 'ACTIVE', 'OVERDUE'
|
46
|
+
:active
|
47
|
+
when 'SUSPENDED', 'EXPIRED', 'CANCELED'
|
48
|
+
:suspended
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def update_state_from_gateway!
|
54
|
+
if self.state_name != self.moip_state_name
|
55
|
+
case self.moip_state_name
|
56
|
+
when :active
|
57
|
+
self.activate! if self.can_activate?
|
58
|
+
when :suspended
|
59
|
+
self.suspend! if self.can_suspend?
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module UnlockMoip
|
2
|
+
module Models
|
3
|
+
module Gateway
|
4
|
+
|
5
|
+
include UnlockGateway::Models::Gateway
|
6
|
+
|
7
|
+
def name
|
8
|
+
"Moip Assinaturas"
|
9
|
+
end
|
10
|
+
|
11
|
+
def description
|
12
|
+
"Gerencie mensalidades, assinaturas e cobranças recorrentes com o Moip"
|
13
|
+
end
|
14
|
+
|
15
|
+
def image
|
16
|
+
"unlock_moip/logo.png"
|
17
|
+
end
|
18
|
+
|
19
|
+
def path
|
20
|
+
"/moip"
|
21
|
+
end
|
22
|
+
|
23
|
+
def available_settings
|
24
|
+
settings = []
|
25
|
+
instructions = "Com sua conta de negócios Moip habilitada, vá em <a href='https://www.moip.com.br/AdmMainMenuMyData.do?method=assinaturas' target='_blank'>Ferramentas › Moip Assinaturas</a> e clique em Habilitar acesso. Depois, vá em <a href='https://www.moip.com.br/AdmAPI.do?method=keys' target='_blank'>Ferramentas › API Moip › Chaves de acesso</a>."
|
26
|
+
settings << UnlockGateway::Setting.new(:token, "Token de acesso no Moip", instructions)
|
27
|
+
settings << UnlockGateway::Setting.new(:key, "Chave de acesso no Moip", instructions)
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/unlock_moip.rb
ADDED
metadata
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: unlock_moip
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Weinmann
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.1.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.1.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: moip-assinaturas
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.4.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.4.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: unlock_gateway
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.5
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Moip Assinaturas integration with Unlock
|
70
|
+
email:
|
71
|
+
- danielweinmann@gmail.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- MIT-LICENSE
|
77
|
+
- Rakefile
|
78
|
+
- app/assets/images/unlock_moip/logo.png
|
79
|
+
- app/assets/javascripts/unlock_moip.js.coffee
|
80
|
+
- app/assets/stylesheets/unlock_moip.sass
|
81
|
+
- app/assets/stylesheets/unlock_moip/contributions/edit.sass
|
82
|
+
- app/assets/stylesheets/unlock_moip/contributions/form.sass
|
83
|
+
- app/assets/stylesheets/unlock_moip/unlock_moip.sass
|
84
|
+
- app/controllers/unlock_moip/contributions_controller.rb
|
85
|
+
- app/views/unlock_moip/contributions/_form.html.slim
|
86
|
+
- app/views/unlock_moip/contributions/_gateway_data.html.slim
|
87
|
+
- app/views/unlock_moip/contributions/edit.html.slim
|
88
|
+
- config/initializers/moip_assinaturas.rb
|
89
|
+
- config/initializers/register.rb
|
90
|
+
- config/routes.rb
|
91
|
+
- lib/tasks/unlock_moip_tasks.rake
|
92
|
+
- lib/unlock_moip.rb
|
93
|
+
- lib/unlock_moip/engine.rb
|
94
|
+
- lib/unlock_moip/models/contribution.rb
|
95
|
+
- lib/unlock_moip/models/gateway.rb
|
96
|
+
- lib/unlock_moip/version.rb
|
97
|
+
homepage: https://github.com/danielweinmann/unlock_moip
|
98
|
+
licenses:
|
99
|
+
- MIT
|
100
|
+
metadata: {}
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
requirements: []
|
116
|
+
rubyforge_project:
|
117
|
+
rubygems_version: 2.4.2
|
118
|
+
signing_key:
|
119
|
+
specification_version: 4
|
120
|
+
summary: Moip Assinaturas integration with Unlock
|
121
|
+
test_files: []
|