adherent 0.3.4 → 0.3.5
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 +4 -4
- data/app/assets/stylesheets/adherent/jcmenu.css +5 -0
- data/app/controllers/adherent/allpayments_controller.rb +1 -1
- data/app/controllers/adherent/application_controller.rb +12 -0
- data/app/controllers/adherent/members_controller.rb +6 -7
- data/app/controllers/adherent/payments_controller.rb +2 -2
- data/app/helpers/adherent/application_helper.rb +9 -5
- data/app/helpers/adherent/payments_helper.rb +2 -2
- data/app/models/adherent/member.rb +77 -9
- data/app/models/adherent/payment.rb +0 -10
- data/app/views/adherent/allpayments/_payment.html.haml +3 -2
- data/app/views/adherent/members/index.html.erb +7 -1
- data/app/views/adherent/payments/_payment.html.haml +3 -2
- data/app/views/adherent/payments/show.html.haml +2 -2
- data/lib/adherent/version.rb +2 -1
- data/spec/controllers/adherent/adhesions_controller_spec.rb +25 -57
- data/spec/controllers/adherent/allpayments_controller_spec.rb +4 -1
- data/spec/controllers/adherent/members_controller_spec.rb +33 -46
- data/spec/controllers/adherent/payments_controller_spec.rb +18 -31
- data/spec/dummy/log/development.log +21002 -0
- data/spec/dummy/log/test.log +135111 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/8259f3fc885403b4eea8dd12964c2ffc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c35251b000451b1b9f7274e0ae471704 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d88c0d3362ebdb47849b797a3ec1b355 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ee6531726dfe6592fa84b42a420b6acd +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/fca89522784c8592001dc314a2361344 +0 -0
- data/spec/features/adhesions_spec.rb +3 -9
- data/spec/features/coord_spec.rb +3 -5
- data/spec/features/js_spec.rb +17 -15
- data/spec/features/members_spec.rb +26 -46
- data/spec/features/payments_spec.rb +15 -39
- data/spec/features/reglements_spec.rb +25 -31
- data/spec/models/adherent/adhesion_spec.rb +18 -40
- data/spec/models/adherent/coord_spec.rb +12 -9
- data/spec/models/adherent/member_spec.rb +144 -92
- data/spec/models/adherent/payment_spec.rb +20 -99
- data/spec/models/adherent/reglement_spec.rb +1 -1
- data/spec/rails_helper.rb +2 -1
- data/spec/spec_helper.rb +1 -0
- metadata +1 -6
- data/app/models/adherent/query_member.rb +0 -125
- data/spec/models/adherent/query_member_spec.rb +0 -169
- data/spec/support/fixtures.rb +0 -29
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'csv'
|
2
|
-
|
3
|
-
module Adherent
|
4
|
-
# La classe QueryMember s'appuie sur une view de SQL appelée
|
5
|
-
# adherent_query_members.
|
6
|
-
#
|
7
|
-
# Elle reprend les principaux éléments de Member (organism_id, id, name,
|
8
|
-
# forname, birthdate, et rajoute la date de la dernière adhésion (champ
|
9
|
-
# m_to_date), le montant total des adhésions dues (t_adhesions) et le montant
|
10
|
-
# total des règlements (t_reglements).
|
11
|
-
#
|
12
|
-
# Ces deux derniers champs sont utilisés pour savoir si le membre est à
|
13
|
-
# jour de ses paiements (méthode #a_jour?)
|
14
|
-
#
|
15
|
-
class QueryMember < ActiveRecord::Base
|
16
|
-
|
17
|
-
def self.columns() @columns ||= []; end
|
18
|
-
|
19
|
-
def self.column(name, sql_type = nil, default = nil, null = true)
|
20
|
-
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
21
|
-
end
|
22
|
-
|
23
|
-
column :id, :integer
|
24
|
-
column :organism_id, :integer
|
25
|
-
column :number, :string
|
26
|
-
column :name, :string
|
27
|
-
column :mail, :string
|
28
|
-
column :tel, :string
|
29
|
-
column :gsm, :string
|
30
|
-
column :office, :string
|
31
|
-
column :address, :string
|
32
|
-
column :zip, :string
|
33
|
-
column :city, :string
|
34
|
-
column :forname, :string
|
35
|
-
column :birthdate, :date
|
36
|
-
column :m_to_date, :date
|
37
|
-
column :t_adhesions, :decimal
|
38
|
-
column :t_reglements, :decimal
|
39
|
-
|
40
|
-
|
41
|
-
# juste pour avoir la remise en forme du champ birthdate
|
42
|
-
# pour l'affichage
|
43
|
-
pick_date_for :birthdate
|
44
|
-
|
45
|
-
# booléen indiquant si l'adhérent est à jour de ces cotisations
|
46
|
-
def a_jour?
|
47
|
-
montant_du <= 0.001
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.query_sql(organism)
|
51
|
-
%Q(SELECT adherent_members.id, organism_id, number, name, forname, birthdate,
|
52
|
-
adherent_coords.mail AS mail,
|
53
|
-
adherent_coords.tel AS tel,
|
54
|
-
adherent_coords.gsm AS gsm,
|
55
|
-
adherent_coords.office AS office,
|
56
|
-
adherent_coords.address AS address,
|
57
|
-
adherent_coords.zip AS zip,
|
58
|
-
adherent_coords.city AS city,
|
59
|
-
(SELECT to_date FROM adherent_adhesions
|
60
|
-
WHERE adherent_adhesions.member_id = adherent_members.id
|
61
|
-
ORDER BY to_date DESC LIMIT 1 ) AS m_to_date,
|
62
|
-
(SELECT SUM(adherent_reglements.amount) FROM adherent_reglements,
|
63
|
-
adherent_adhesions
|
64
|
-
WHERE adherent_reglements.adhesion_id = adherent_adhesions.id AND
|
65
|
-
adherent_adhesions.member_id = adherent_members.id) AS t_reglements,
|
66
|
-
(SELECT SUM(amount) FROM adherent_adhesions
|
67
|
-
WHERE adherent_adhesions.member_id = adherent_members.id) AS t_adhesions
|
68
|
-
FROM adherent_members
|
69
|
-
|
70
|
-
LEFT JOIN adherent_coords ON adherent_members.id = adherent_coords.member_id
|
71
|
-
WHERE organism_id = #{organism.id};
|
72
|
-
)
|
73
|
-
end
|
74
|
-
|
75
|
-
def self.query_members(organism)
|
76
|
-
find_by_sql(query_sql(organism))
|
77
|
-
end
|
78
|
-
|
79
|
-
# ici on aurait pu utiliser pick_date_for mais cela pose le problème
|
80
|
-
# des dates non remplies. Ce qui a son tour est gênant pour le tri dans
|
81
|
-
# les tables.
|
82
|
-
def m_to_date
|
83
|
-
td = read_attribute(:m_to_date)
|
84
|
-
td.is_a?(Date) ? (I18n::l td) : '31/12/2099'
|
85
|
-
end
|
86
|
-
|
87
|
-
# montant dû par l'adhérent pour ses adhésions
|
88
|
-
def montant_du
|
89
|
-
tadh = t_adhesions ? BigDecimal.new(t_adhesions, 2) : BigDecimal.new(0.0, 2)
|
90
|
-
treg = t_reglements ? BigDecimal.new(t_reglements, 2) : BigDecimal.new(0.0, 2)
|
91
|
-
tadh - treg
|
92
|
-
end
|
93
|
-
|
94
|
-
# edition en csv des membres d'un organisme dont l'id est
|
95
|
-
# transmis en argument
|
96
|
-
def self.to_csv(organism, options = {col_sep:"\t"})
|
97
|
-
ms = query_members(organism)
|
98
|
-
CSV.generate(options) do |csv|
|
99
|
-
csv << ['Numero', 'Nom', 'Prénom', 'Date de naissance',
|
100
|
-
'Mail', 'Tél', 'Gsm', 'Bureau', 'Adresse', 'Code Postal', 'Ville', 'Doit', 'Fin Adh.']
|
101
|
-
ms.each do |m|
|
102
|
-
csv << [m.number, m.name, m.forname, m.birthdate, m.mail, m.tel,
|
103
|
-
m.gsm, m.office, m.address, m.zip, m.city,
|
104
|
-
ActiveSupport::NumberHelper.number_to_rounded(m.montant_du, precision:2),
|
105
|
-
m.m_to_date]
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# Pour avoir l'encodage Windows, voir à mettre dans un module si
|
111
|
-
# répété avec d'autres modèles
|
112
|
-
def self.to_xls(organism, options = {col_sep:"\t"})
|
113
|
-
to_csv(organism, options).encode("windows-1252")
|
114
|
-
end
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
protected
|
119
|
-
|
120
|
-
# forcément car basé sur une view sql
|
121
|
-
def readonly?
|
122
|
-
true
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,169 +0,0 @@
|
|
1
|
-
# coding utf-8
|
2
|
-
|
3
|
-
require 'rails_helper'
|
4
|
-
|
5
|
-
RSpec.configure do |c|
|
6
|
-
# c.exclusion_filter = {js:true}
|
7
|
-
# c.filter = {wip:true}
|
8
|
-
end
|
9
|
-
|
10
|
-
|
11
|
-
describe Adherent::QueryMember, :type => :model do
|
12
|
-
|
13
|
-
def valid_attributes
|
14
|
-
{name:'Dupont', forname:'Jules', number:'Adh 001',
|
15
|
-
birthdate:Date.civil(1955,6,6)}
|
16
|
-
end
|
17
|
-
|
18
|
-
let(:org) {double(Organism, id:1)}
|
19
|
-
|
20
|
-
before(:each) do
|
21
|
-
@m = Adherent::Member.new(valid_attributes)
|
22
|
-
@m.organism_id = 1
|
23
|
-
@m.save!
|
24
|
-
@m.build_coord(tel:'01.02.03.04.05', mail:'bonjour@example.com')
|
25
|
-
@m.save
|
26
|
-
end
|
27
|
-
|
28
|
-
after(:each) do
|
29
|
-
Adherent::Member.delete_all
|
30
|
-
Adherent::Coord.delete_all
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'on peut initier un query_member' do
|
34
|
-
expect(Adherent::QueryMember.query_members(org).size).to eq(1)
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'dont les champs sont corrects' do
|
38
|
-
m = Adherent::QueryMember.query_members(org).first
|
39
|
-
expect(m.birthdate).to eq('06/06/1955')
|
40
|
-
expect(m.name).to eq(@m.name)
|
41
|
-
expect(m.forname).to eq(@m.forname)
|
42
|
-
expect(m.tel).to eq(@m.coord.tel)
|
43
|
-
expect(m.mail).to eq(@m.coord.mail)
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
context 'avec deux adhésions' do
|
48
|
-
|
49
|
-
before(:each) do
|
50
|
-
d = Date.today.beginning_of_year
|
51
|
-
@m.adhesions.new(from_date:d, to_date:(d>>1) -1, amount:12.25)
|
52
|
-
@m.adhesions.new(from_date:(d>>1), to_date:(d>>2)-1, amount:10.01)
|
53
|
-
@m.save
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
it 'donne la bonne fin d adhésion' do
|
58
|
-
m = Adherent::QueryMember.query_members(org).first
|
59
|
-
expect(m.m_to_date).to eq(I18n::l((Date.today.beginning_of_year>>2) -1))
|
60
|
-
end
|
61
|
-
|
62
|
-
context 'avec des règlements' do
|
63
|
-
|
64
|
-
before(:each) do
|
65
|
-
@p = @m.payments.new(date:Date.today, amount:8, mode:'CB')
|
66
|
-
allow(@p).to receive(:correct_range_date).and_return true
|
67
|
-
@p.save
|
68
|
-
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
after(:each) do
|
73
|
-
Adherent::Reglement.delete_all
|
74
|
-
Adherent::Adhesion.delete_all
|
75
|
-
Adherent::Payment.delete_all
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'le membre doit encore 14.26 ' do
|
80
|
-
m = Adherent::QueryMember.query_members(org).first
|
81
|
-
expect(m.t_reglements).to eq(8)
|
82
|
-
expect(m.t_adhesions).to eq(22.26)
|
83
|
-
expect(m.montant_du).to eq(14.26)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'après un paiement de 10.26 €, il doit encore 4' do
|
87
|
-
@p = @m.payments.new(date:Date.today, amount:10.26, mode:'CB')
|
88
|
-
allow(@p).to receive(:correct_range_date).and_return true
|
89
|
-
@p.save
|
90
|
-
m = Adherent::QueryMember.query_members(org).first
|
91
|
-
expect(m.montant_du).to eq(4)
|
92
|
-
expect(m.a_jour?).to be false
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'avec de paiements, l un de 10, l autre de 14.26 € il ne doit plus rien' do
|
96
|
-
@p = @m.payments.new(date:Date.today, amount:10, mode:'CB')
|
97
|
-
@q = @m.payments.new(date:Date.today, amount:14.26, mode:'CB')
|
98
|
-
allow(@p).to receive(:correct_range_date).and_return true
|
99
|
-
allow(@q).to receive(:correct_range_date).and_return true
|
100
|
-
@p.save; @q.save
|
101
|
-
m = Adherent::QueryMember.query_members(org).first
|
102
|
-
expect(m.montant_du).to eq(0)
|
103
|
-
expect(m.a_jour?).to be true
|
104
|
-
end
|
105
|
-
|
106
|
-
it 's il paye plus il ne doit rien non plus' do
|
107
|
-
@p = @m.payments.new(date:Date.today, amount:25, mode:'CB')
|
108
|
-
|
109
|
-
allow(@p).to receive(:correct_range_date).and_return true
|
110
|
-
|
111
|
-
@p.save
|
112
|
-
m = Adherent::QueryMember.query_members(org).first
|
113
|
-
expect(m.montant_du).to eq(0)
|
114
|
-
expect(m.a_jour?).to be true
|
115
|
-
end
|
116
|
-
|
117
|
-
|
118
|
-
end
|
119
|
-
|
120
|
-
|
121
|
-
describe 'export' do
|
122
|
-
|
123
|
-
def two_lines
|
124
|
-
[Adherent::QueryMember.new(number:'Adh 001', name:'Dupont', forname:'Jules',
|
125
|
-
birthdate:Date.civil(1955,6,6), mail:'bonjour@example.com',
|
126
|
-
tel:'01.02.03.04.05', t_adhesions:22.26, t_reglements:0,
|
127
|
-
office:'03.20.14.64.30',
|
128
|
-
zip:'59000',
|
129
|
-
address:'Place de la Mairie',
|
130
|
-
city:'LILLE',
|
131
|
-
m_to_date:((Date.today.beginning_of_year >> 2) -1))
|
132
|
-
]
|
133
|
-
end
|
134
|
-
|
135
|
-
|
136
|
-
describe 'to_csv' do
|
137
|
-
|
138
|
-
before(:each) do
|
139
|
-
@organism = double(Organism, id:1)
|
140
|
-
allow(Adherent::QueryMember).to receive(:query_members).with(@organism).
|
141
|
-
and_return(two_lines)
|
142
|
-
csv = Adherent::QueryMember.to_csv(@organism)
|
143
|
-
@lignes = csv.split("\n")
|
144
|
-
end
|
145
|
-
it 'la ligne de titre' do
|
146
|
-
expect(@lignes[0]).to eq("Numero\tNom\tPrénom\tDate de naissance\tMail\tTél\tGsm\tBureau\tAdresse\tCode Postal\tVille\tDoit\tFin Adh.")
|
147
|
-
end
|
148
|
-
|
149
|
-
it 'une ligne de valeurs' do
|
150
|
-
expect(@lignes[1]).to eq("Adh 001\tDupont\tJules\t06/06/1955\tbonjour@example.com\t01.02.03.04.05\t\t03.20.14.64.30\tPlace de la Mairie\t59000\tLILLE\t22,26\t#{I18n::l((Date.today.beginning_of_year>>2) -1)}")
|
151
|
-
end
|
152
|
-
|
153
|
-
end
|
154
|
-
|
155
|
-
describe 'to_xls' do
|
156
|
-
before(:each) do
|
157
|
-
@organism = double(Organism, id:1)
|
158
|
-
allow(Adherent::QueryMember).to receive(:query_members).with(@organism).
|
159
|
-
and_return(two_lines)
|
160
|
-
end
|
161
|
-
|
162
|
-
it 'to_xls doit marcher également' do
|
163
|
-
expect {Adherent::QueryMember.to_xls(@organism)}.not_to raise_error
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
end
|
data/spec/support/fixtures.rb
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
# coding utf-8
|
2
|
-
|
3
|
-
# ce module a pour objet de fournir quelques méthodes pour créer des
|
4
|
-
# enregistrements utilisés dans les requests
|
5
|
-
module Fixtures
|
6
|
-
|
7
|
-
def create_organism
|
8
|
-
@organism = Organism.find_or_create_by(title:'Mon association')
|
9
|
-
end
|
10
|
-
|
11
|
-
# crée des membres, 5 étant le nombre par défaut. Il est possible d'avoir un
|
12
|
-
# nombre différent en fournissant en argument un nombre quelconque.
|
13
|
-
def create_members(n = 5)
|
14
|
-
Adherent::Member.delete_all
|
15
|
-
create_organism unless @organism
|
16
|
-
n.times do |i|
|
17
|
-
m = Adherent::Member.new(name:"Nom_#{i}", forname:'le prénom', number:"Adh00#{i}")
|
18
|
-
m.organism_id = @organism.id
|
19
|
-
puts m.errors.messages unless m.valid?
|
20
|
-
m.save!
|
21
|
-
end
|
22
|
-
@members = Adherent::Member.all
|
23
|
-
end
|
24
|
-
|
25
|
-
def create_payment(member, amount=50)
|
26
|
-
member.payments.create!(amount:amount, date:Date.today,
|
27
|
-
mode:'CB')
|
28
|
-
end
|
29
|
-
end
|