Adds payment page
Instead of sending all the payment details by email, we're now sending only a link to a page on this platform. This is to help reduce questions of whether the emails are from scammers or real.
This commit is contained in:
parent
8b4e0c9d62
commit
9058ed98f7
@ -96,6 +96,10 @@ Para o projecto funcionar a 100%, precisa de algumas dependências externas:
|
|||||||
Todas estas coisas são configuráveis via variáveis de ambiente. A lista de
|
Todas estas coisas são configuráveis via variáveis de ambiente. A lista de
|
||||||
variáveis está disponível no ficheiro `env.example`.
|
variáveis está disponível no ficheiro `env.example`.
|
||||||
|
|
||||||
|
**NOTA**: o projecto ainda não está pronto para ser personalizado à imagem de
|
||||||
|
outras associações, estando o contexto da ANSOL codificado em vários pontos da
|
||||||
|
aplicação. Alguns destes detalhes podem ser definidos em `app/lib/config.rb`.
|
||||||
|
|
||||||
|
|
||||||
## Pôr isto a dar
|
## Pôr isto a dar
|
||||||
|
|
||||||
@ -113,6 +117,6 @@ Quando se acede à plataforma pela primeira vez, é-nos pedido um endereço de
|
|||||||
email para criar a primeira conta de administração. Este endereço precisa de
|
email para criar a primeira conta de administração. Este endereço precisa de
|
||||||
conseguir receber mensagens para o processo de recuperação de senha funcionar.
|
conseguir receber mensagens para o processo de recuperação de senha funcionar.
|
||||||
|
|
||||||
Depois deste processo terminado, é possível gerir até 5 contas de
|
Depois deste processo terminado, é possível gerir até 6 contas de
|
||||||
administração. Atenção que qualquer uma delas consegue apagar as restantes (e
|
administração. Atenção que qualquer uma delas consegue apagar as restantes (e
|
||||||
até a si própria).
|
até a si própria).
|
||||||
|
38
app/assets/images/logo.svg
Normal file
38
app/assets/images/logo.svg
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="87.3125mm"
|
||||||
|
height="10.583333mm"
|
||||||
|
id="svg3003"
|
||||||
|
version="1.1">
|
||||||
|
<defs
|
||||||
|
id="defs3" />
|
||||||
|
<metadata
|
||||||
|
id="metadata4">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title></dc:title>
|
||||||
|
</cc:Work>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
transform="translate(-112.14286,-106.64789)">
|
||||||
|
<g
|
||||||
|
id="g12"
|
||||||
|
transform="matrix(0.125,0,0,-0.125,112.14286,146.64789)">
|
||||||
|
<path
|
||||||
|
d="m 0,0 v 200 c 0,66.273 53.7266,120 120,120 h 240 c 66.273,0 120,-53.727 120,-120 V 0 H 400 V 120 H 80 V 0 Z m 80,200 v 0 c 0,22.09 17.9102,40 40,40 h 240 c 22.09,0 40,-17.91 40,-40 z M 560,0 v 200 c 0,66.273 53.727,120 120,120 h 240 c 66.273,0 120,-53.727 120,-120 V 0 h -80 v 200 c 0,22.09 -17.91,40 -40,40 H 680 c -22.09,0 -40,-17.91 -40,-40 V 0 Z m 580,0 h 360 c 55.23,0 100,44.7734 100,100 0,55.227 -44.77,100 -100,100 h -280 c -11.04,0 -20,8.957 -20,20 0,11.043 8.96,20 20,20 h 360 v 80 h -360 c -55.23,0 -100,-44.773 -100,-100 0,-55.227 44.77,-100 100,-100 h 280 c 11.04,0 20,-8.957 20,-20 0,-11.043 -8.96,-20 -20,-20 h -360 z m 540,120 v 80 c 0,66.273 53.73,120 120,120 h 240 c 66.27,0 120,-53.727 120,-120 V 120 C 2160,53.7266 2106.27,0 2040,0 h -240 c -66.27,0 -120,53.7266 -120,120 z m 80,0 v 80 c 0,22.09 17.91,40 40,40 h 240 c 22.09,0 40,-17.91 40,-40 v -80 c 0,-22.0898 -17.91,-40 -40,-40 h -240 c -22.09,0 -40,17.9102 -40,40 z m 480,200 V 120 C 2240,53.7266 2293.73,0 2360,0 h 280 v 80 h -280 c -22.09,0 -40,17.9102 -40,40 v 200"
|
||||||
|
style="fill:#FFFFFF;fill-opacity:1;fill-rule:evenodd;stroke:none"
|
||||||
|
id="path14" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 2.0 KiB |
@ -1,10 +1,38 @@
|
|||||||
/* Application styles */
|
/* Application styles */
|
||||||
|
|
||||||
body {
|
body {
|
||||||
max-width: 1000px;
|
margin: 0px;
|
||||||
margin: 0 auto;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
main, nav, footer {
|
||||||
|
margin: 0 auto;
|
||||||
|
max-width: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner {
|
||||||
|
width: 100%;
|
||||||
|
height: 30px;
|
||||||
|
padding: 15px;
|
||||||
|
background-image: url(logo.svg);
|
||||||
|
background-size: auto 30px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-color: #041952;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
border-top: 1px solid #aaa;
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 20px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer div + div { margin-top: 10px; }
|
||||||
|
|
||||||
|
|
||||||
table {
|
table {
|
||||||
border: 1px solid black;
|
border: 1px solid black;
|
||||||
border-collapse: collapse;
|
border-collapse: collapse;
|
||||||
|
@ -3,7 +3,7 @@ class BoardsController < ApplicationController
|
|||||||
|
|
||||||
def edit
|
def edit
|
||||||
@users = User.where(active: true)
|
@users = User.where(active: true)
|
||||||
@users += Array.new(5 - @users.size) { User.new }
|
@users += Array.new(6 - @users.size) { User.new }
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
|
5
app/controllers/payments_controller.rb
Normal file
5
app/controllers/payments_controller.rb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
class PaymentsController < ApplicationController
|
||||||
|
def show
|
||||||
|
@payment = Payment.find(params[:id])
|
||||||
|
end
|
||||||
|
end
|
34
app/lib/config.rb
Normal file
34
app/lib/config.rb
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
module Config
|
||||||
|
def self.organization_full_name
|
||||||
|
"ANSOL - Associação Nacional para o Software Livre"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.organization_website
|
||||||
|
"https://ansol.org"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.regular_payment_value
|
||||||
|
30
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.reduced_payment_value
|
||||||
|
6
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.ifthenpay_payment_title
|
||||||
|
"Quotas ANSOL"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.payment_iban
|
||||||
|
"PT50 0035 2178 00027478430 14"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.payment_proof_email
|
||||||
|
"direccao@ansol.org"
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.reduced_payment_description
|
||||||
|
"Caso queiras usufruir da quota reduzida de 6.00€ para estudantes, pessoas
|
||||||
|
desempregadas ou reformadas, envia-nos um comprovativo desse estatuto."
|
||||||
|
end
|
||||||
|
end
|
@ -33,6 +33,6 @@ class NotificationMailer < ApplicationMailer
|
|||||||
private
|
private
|
||||||
def set_notification
|
def set_notification
|
||||||
@notification = params[:notification]
|
@notification = params[:notification]
|
||||||
@link = @notification.member.regular_ifthenpay_link
|
@payment = @notification.member.create_payment
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -2,16 +2,25 @@ class Member < ApplicationRecord
|
|||||||
default_scope { where(excluded: false) }
|
default_scope { where(excluded: false) }
|
||||||
has_many :contributions
|
has_many :contributions
|
||||||
has_many :notifications
|
has_many :notifications
|
||||||
|
has_many :payments
|
||||||
has_paper_trail
|
has_paper_trail
|
||||||
|
|
||||||
def self.ransackable_attributes(auth_object = nil)
|
def self.ransackable_attributes(auth_object = nil)
|
||||||
%w[display_name legal_name email identification_number]
|
%w[display_name legal_name email identification_number]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_payment
|
||||||
|
payments.create(status: "pending")
|
||||||
|
end
|
||||||
|
|
||||||
def cancelled_on
|
def cancelled_on
|
||||||
expires_on + 90.days
|
expires_on + 90.days
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def obtains_full_rights_on
|
||||||
|
joined_on + 6.months
|
||||||
|
end
|
||||||
|
|
||||||
def reset_status!
|
def reset_status!
|
||||||
update(status: expected_status)
|
update(status: expected_status)
|
||||||
end
|
end
|
||||||
@ -36,7 +45,7 @@ class Member < ApplicationRecord
|
|||||||
def expected_status
|
def expected_status
|
||||||
if joined_on.nil?
|
if joined_on.nil?
|
||||||
:pending
|
:pending
|
||||||
elsif (joined_on + 6.months).future?
|
elsif obtains_full_rights_on.future?
|
||||||
:passive
|
:passive
|
||||||
elsif expires_on.future?
|
elsif expires_on.future?
|
||||||
:active
|
:active
|
||||||
@ -82,14 +91,14 @@ class Member < ApplicationRecord
|
|||||||
def generate_missing_ifthenpay_links!
|
def generate_missing_ifthenpay_links!
|
||||||
self.regular_ifthenpay_link = IfThenPay.generate_gateway_link(
|
self.regular_ifthenpay_link = IfThenPay.generate_gateway_link(
|
||||||
id: number,
|
id: number,
|
||||||
amount: "30.00",
|
amount: "%.2f" % Config.regular_payment_value,
|
||||||
description: "Quotas ANSOL",
|
description: Config.ifthenpay_payment_title,
|
||||||
) unless self.regular_ifthenpay_link.present?
|
) unless self.regular_ifthenpay_link.present?
|
||||||
|
|
||||||
self.reduced_ifthenpay_link = IfThenPay.generate_gateway_link(
|
self.reduced_ifthenpay_link = IfThenPay.generate_gateway_link(
|
||||||
id: number,
|
id: number,
|
||||||
amount: "6.00",
|
amount: "%.2f" % Config.reduced_payment_value,
|
||||||
description: "Quotas ANSOL",
|
description: Config.ifthenpay_payment_title,
|
||||||
) unless self.reduced_ifthenpay_link.present?
|
) unless self.reduced_ifthenpay_link.present?
|
||||||
|
|
||||||
save!
|
save!
|
||||||
|
3
app/models/payment.rb
Normal file
3
app/models/payment.rb
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
class Payment < ApplicationRecord
|
||||||
|
belongs_to :member
|
||||||
|
end
|
@ -11,6 +11,7 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
<div class='banner'></div>
|
||||||
<% if signed_in? %>
|
<% if signed_in? %>
|
||||||
<nav>
|
<nav>
|
||||||
<ul>
|
<ul>
|
||||||
@ -28,6 +29,19 @@
|
|||||||
</nav>
|
</nav>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<main>
|
||||||
<%= yield %>
|
<%= yield %>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div>
|
||||||
|
<%= link_to Config.organization_full_name, Config.organization_website %>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<%= t('footer.description') %>
|
||||||
|
<%= t('footer.free_software_html') %>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
4
app/views/notification_mailer/_cheers.html.erb
Normal file
4
app/views/notification_mailer/_cheers.html.erb
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<p>
|
||||||
|
Saudações livres,<br>
|
||||||
|
Direcção da ANSOL
|
||||||
|
</p>
|
2
app/views/notification_mailer/_cheers.text.erb
Normal file
2
app/views/notification_mailer/_cheers.text.erb
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Saudações livres,
|
||||||
|
Direcção da ANSOL
|
@ -3,20 +3,8 @@
|
|||||||
MBWAY:
|
MBWAY:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<ul>
|
<div align="center">
|
||||||
<li>Valor: 30.00€</li>
|
<a style="border: 1px solid #ccc; background-color: #eee; margin: 30px; display: inline-block; padding: 10px 20px; margin: 0px auto;" href="<%= payment_url(payment) %>">
|
||||||
<li>Transferência bancária: <strong>PT50 0035 2178 00027478430 14</strong></li>
|
<%= t('notification_mailer.payment_cta') %>
|
||||||
<li>Multibanco ou MBWAY: <a href="<%= ifthenpay %>"><%= ifthenpay %></a></li>
|
</a>
|
||||||
</ul>
|
</div>
|
||||||
|
|
||||||
<p>
|
|
||||||
Caso queiras usufruir da quota reduzida de 6.00€ para estudantes, pessoas
|
|
||||||
desempregadas ou reformadas, pedimos que nos envies um comprovativo desse
|
|
||||||
estatuto e faças o pagamento por transferência bancária.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
Se optares pelo método de transferência bancária, pedimos que envies o
|
|
||||||
comprovativo de transferência em resposta a este email ou para o endereço
|
|
||||||
direccao@ansol.org.
|
|
||||||
</p>
|
|
||||||
|
@ -1,14 +1,3 @@
|
|||||||
Aceitamos pagamento via transferência bancária, referência multibanco ou
|
Aceitamos pagamento via transferência bancária, referência multibanco ou MBWAY:
|
||||||
MBWAY:
|
|
||||||
|
|
||||||
* Valor: 30.00€
|
<%= payment_url(payment) %>
|
||||||
* Transferência bancária: PT50 0035 2178 00027478430 14
|
|
||||||
* Multibanco ou MBWAY: <%= @link %>
|
|
||||||
|
|
||||||
Caso queiras usufruir da quota reduzida de 6.00€ para estudantes, pessoas
|
|
||||||
desempregadas e reformadas, pedimos que nos envies um comprovativo desse
|
|
||||||
estatuto e faças o pagamento por transferência bancária.
|
|
||||||
|
|
||||||
Se optares pelo método de transferência bancária, pedimos que envies o
|
|
||||||
comprovativo de transferência em resposta a este email ou para o endereço
|
|
||||||
direccao@ansol.org.
|
|
||||||
|
@ -16,9 +16,6 @@
|
|||||||
das quotas até <strong><%= @notification.member.expires_on %></strong>.
|
das quotas até <strong><%= @notification.member.expires_on %></strong>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
<p>
|
<%= render partial: "cheers" %>
|
||||||
Saudações livres,<br>
|
|
||||||
Direcção da ANSOL
|
|
||||||
</p>
|
|
||||||
|
@ -10,7 +10,6 @@ participação.
|
|||||||
Para estender a tua inscrição por mais um ano, pedimos que faças o pagamento
|
Para estender a tua inscrição por mais um ano, pedimos que faças o pagamento
|
||||||
das quotas até <%= @notification.member.expires_on %>.
|
das quotas até <%= @notification.member.expires_on %>.
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
Saudações livres,
|
<%= render partial: "cheers" %>
|
||||||
Direcção da ANSOL
|
|
||||||
|
@ -16,9 +16,6 @@
|
|||||||
das quotas até <strong><%= @notification.member.expires_on %></strong>.
|
das quotas até <strong><%= @notification.member.expires_on %></strong>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
<p>
|
<%= render partial: "cheers" %>
|
||||||
Saudações livres,<br>
|
|
||||||
Direcção da ANSOL
|
|
||||||
</p>
|
|
||||||
|
@ -10,7 +10,6 @@ participação.
|
|||||||
Para estender a tua inscrição por mais um ano, pedimos que faças o pagamento
|
Para estender a tua inscrição por mais um ano, pedimos que faças o pagamento
|
||||||
das quotas até <%= @notification.member.expires_on %>.
|
das quotas até <%= @notification.member.expires_on %>.
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
Saudações livres,
|
<%= render partial: "cheers" %>
|
||||||
Direcção da ANSOL
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
@ -20,7 +20,4 @@
|
|||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<%= render partial: "cheers" %>
|
||||||
Saudações livres,<br>
|
|
||||||
Direcção da ANSOL
|
|
||||||
</p>
|
|
||||||
|
@ -6,11 +6,10 @@ contribuição anual.
|
|||||||
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
|
|
||||||
Saudações livres,
|
<%= render partial: "cheers" %>
|
||||||
Direcção da ANSOL
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
@ -20,7 +20,4 @@
|
|||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<%= render partial: "cheers" %>
|
||||||
Saudações livres,
|
|
||||||
Direcção da ANSOL
|
|
||||||
</p>
|
|
||||||
|
@ -6,11 +6,10 @@ a tua contribuição anual.
|
|||||||
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
|
|
||||||
Saudações livres,
|
<%= render partial: "cheers" %>
|
||||||
Direcção da ANSOL
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
@ -20,7 +20,4 @@
|
|||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<%= render partial: "cheers" %>
|
||||||
Saudações livres,<br>
|
|
||||||
Direcção da ANSOL
|
|
||||||
</p>
|
|
||||||
|
@ -6,11 +6,10 @@ a tua contribuição anual.
|
|||||||
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
Dependemos exclusivamente da contribuição dos nossos membros para suportar as
|
||||||
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
nossas actividades. Gostaríamos de continuar a contar com a tua participação.
|
||||||
|
|
||||||
<%= render partial: "payment", locals: { ifthenpay: @link } %>
|
<%= render partial: "payment", locals: { payment: @payment } %>
|
||||||
|
|
||||||
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
Caso não recebamos o pagamento até dia <%= @notification.member.cancelled_on
|
||||||
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
%>, cancelaremos permanentemente a tua inscrição. Estamos disponíveis para
|
||||||
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
esclarecer qualquer dúvida através do endereço direccao@ansol.org.
|
||||||
|
|
||||||
Saudações livres,
|
<%= render partial: "cheers" %>
|
||||||
Direcção da ANSOL
|
|
||||||
|
60
app/views/payments/show.html.erb
Normal file
60
app/views/payments/show.html.erb
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<h1>Pagamento de quotas</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Olá <strong><%= @payment.member.display_name %></strong>.
|
||||||
|
Para estender a tua inscrição por
|
||||||
|
mais um ano, pedimos que faças o pagamento das quotas até
|
||||||
|
<strong><%= @payment.member.expires_on %></strong>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p><%= Config.reduced_payment_description %></p>
|
||||||
|
|
||||||
|
<p>Aceitamos pagamento via transferência bancária, referência multibanco ou MBWAY.</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<input class="show-hide-toggle" type='checkbox' id='regular' />
|
||||||
|
<label class="show-hide-button" for="regular">Pagamento normal (<%= number_with_precision(Config.regular_payment_value, precision: 2) %>€)</label>
|
||||||
|
<div class="show-hide-box">
|
||||||
|
<p>Valor: <%= number_with_precision(Config.regular_payment_value, precision: 2) %>€</p>
|
||||||
|
|
||||||
|
<p><%= link_to "Pagar por Multibanco ou MBWAY", @payment.member.regular_ifthenpay_link, class: 'button' %></p>
|
||||||
|
<p>Pagar por transferência bancária:</p>
|
||||||
|
<ul>
|
||||||
|
<li>IBAN: <strong><%= Config.payment_iban %></strong></li>
|
||||||
|
<li>obrigatório enviar comprovativo de pagamento para <%= Config.payment_proof_email %></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style='margin-top: 10px;'>
|
||||||
|
<input class="show-hide-toggle" type='checkbox' id='reduced' />
|
||||||
|
<label class="show-hide-button" for="reduced">Pagamento reduzido (<%= number_with_precision(Config.reduced_payment_value, precision: 2) %>€)</label>
|
||||||
|
<div class="show-hide-box">
|
||||||
|
<p>Valor: <%= number_with_precision(Config.reduced_payment_value, precision: 2) %>€</p>
|
||||||
|
|
||||||
|
<p><%= link_to "Pagar por Multibanco ou MBWAY", @payment.member.reduced_ifthenpay_link, class: 'button' %></p>
|
||||||
|
<p>Pagar por transferência bancária:</p>
|
||||||
|
<ul>
|
||||||
|
<li>IBAN: <strong><%= Config.payment_iban %></strong></li>
|
||||||
|
<li>obrigatório enviar comprovativo de pagamento para <%= Config.payment_proof_email %></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.button { border: 1px solid #ccc; background-color: #eee; cursor: pointer; padding: 4px 10px; display: inline-block; text-align: center; }
|
||||||
|
.show-hide-button { border: 1px solid #ccc; background-color: #eee; cursor: pointer; padding: 4px; display: block; text-align: center; }
|
||||||
|
.show-hide-toggle { display: none; }
|
||||||
|
.show-hide-toggle:not(:checked) ~ .show-hide-box { display: none; }
|
||||||
|
.show-hide-toggle:checked ~ .show-hide-box {
|
||||||
|
display: block;
|
||||||
|
overflow: auto;
|
||||||
|
padding: 10px 30px;
|
||||||
|
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-top: 0;
|
||||||
|
}
|
||||||
|
.show-hide-box ul {
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
</style>
|
@ -5,6 +5,9 @@ en:
|
|||||||
notifications: "Notificações"
|
notifications: "Notificações"
|
||||||
contributions: "Contributions"
|
contributions: "Contributions"
|
||||||
due_contributions: "Dues"
|
due_contributions: "Dues"
|
||||||
|
footer:
|
||||||
|
description: saucy – Membership management platform.
|
||||||
|
free_software_html: It's <a href="https://git.ansol.org/ansol/saucy">Free Software</a>.
|
||||||
members:
|
members:
|
||||||
index:
|
index:
|
||||||
title: "Members"
|
title: "Members"
|
||||||
@ -61,6 +64,7 @@ en:
|
|||||||
year after that. You can override the expiration date by setting a date
|
year after that. You can override the expiration date by setting a date
|
||||||
below.
|
below.
|
||||||
notification_mailer:
|
notification_mailer:
|
||||||
|
payment_cta: "Pay now"
|
||||||
expiration_in_60d:
|
expiration_in_60d:
|
||||||
subject: "ANSOL - Pagamento anual de quotas"
|
subject: "ANSOL - Pagamento anual de quotas"
|
||||||
title: "Pagamento anual de quotas"
|
title: "Pagamento anual de quotas"
|
||||||
|
@ -8,6 +8,9 @@ pt:
|
|||||||
notifications: "Notificações"
|
notifications: "Notificações"
|
||||||
contributions: "Contribuições"
|
contributions: "Contribuições"
|
||||||
due_contributions: "Dívidas"
|
due_contributions: "Dívidas"
|
||||||
|
footer:
|
||||||
|
description: saucy – Plataforma de gestão de sócios.
|
||||||
|
free_software_html: É <a href="https://git.ansol.org/ansol/saucy">Software Livre</a>.
|
||||||
members:
|
members:
|
||||||
delete:
|
delete:
|
||||||
confirmation_message: |
|
confirmation_message: |
|
||||||
@ -99,6 +102,7 @@ pt:
|
|||||||
due:
|
due:
|
||||||
title: "Contribuições em dívida"
|
title: "Contribuições em dívida"
|
||||||
notification_mailer:
|
notification_mailer:
|
||||||
|
payment_cta: "Pagar quotas"
|
||||||
expiration_in_60d:
|
expiration_in_60d:
|
||||||
subject: "ANSOL - Pagamento anual de quotas"
|
subject: "ANSOL - Pagamento anual de quotas"
|
||||||
expiration_in_30d:
|
expiration_in_30d:
|
||||||
|
@ -32,5 +32,7 @@ Rails.application.routes.draw do
|
|||||||
resource :board, only: [:edit, :update]
|
resource :board, only: [:edit, :update]
|
||||||
resource :letters, only: [:create]
|
resource :letters, only: [:create]
|
||||||
|
|
||||||
|
resources :payments, only: [:show]
|
||||||
|
|
||||||
resource :initial_setup, only: [:create, :show]
|
resource :initial_setup, only: [:create, :show]
|
||||||
end
|
end
|
||||||
|
11
db/migrate/20230712103042_create_payments.rb
Normal file
11
db/migrate/20230712103042_create_payments.rb
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
class CreatePayments < ActiveRecord::Migration[7.0]
|
||||||
|
def change
|
||||||
|
create_table :payments, id: :uuid do |t|
|
||||||
|
t.references :member, type: :uuid, foreign_key: true, null: false
|
||||||
|
|
||||||
|
t.string :status
|
||||||
|
|
||||||
|
t.timestamps
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
11
db/schema.rb
generated
11
db/schema.rb
generated
@ -10,7 +10,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[7.0].define(version: 2023_03_31_005733) do
|
ActiveRecord::Schema[7.0].define(version: 2023_07_12_103042) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "pgcrypto"
|
enable_extension "pgcrypto"
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
@ -60,6 +60,14 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_31_005733) do
|
|||||||
t.index ["member_id"], name: "index_notifications_on_member_id"
|
t.index ["member_id"], name: "index_notifications_on_member_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "payments", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||||
|
t.uuid "member_id", null: false
|
||||||
|
t.string "status"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["member_id"], name: "index_payments_on_member_id"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
create_table "users", id: :uuid, default: -> { "gen_random_uuid()" }, force: :cascade do |t|
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
@ -85,4 +93,5 @@ ActiveRecord::Schema[7.0].define(version: 2023_03_31_005733) do
|
|||||||
|
|
||||||
add_foreign_key "contributions", "members"
|
add_foreign_key "contributions", "members"
|
||||||
add_foreign_key "notifications", "members"
|
add_foreign_key "notifications", "members"
|
||||||
|
add_foreign_key "payments", "members"
|
||||||
end
|
end
|
||||||
|
@ -84,7 +84,7 @@ namespace :saucy do
|
|||||||
|
|
||||||
category = case member['membership']['membership_type_id']
|
category = case member['membership']['membership_type_id']
|
||||||
when "1" then 'student'
|
when "1" then 'student'
|
||||||
when "2" then 'normal'
|
when "2" then 'employed'
|
||||||
when "3" then 'retired'
|
when "3" then 'retired'
|
||||||
when "4" then 'unemployed'
|
when "4" then 'unemployed'
|
||||||
else raise "derp membership type"
|
else raise "derp membership type"
|
||||||
|
Loading…
Reference in New Issue
Block a user