adherent 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/images/adherent/icones/imputation-delete.png +0 -0
- data/app/assets/images/adherent/icones/imputation-edit.png +0 -0
- data/app/assets/images/images/Sorting icons.psd +0 -0
- data/app/assets/images/images/back_disabled.png +0 -0
- data/app/assets/images/images/back_enabled.png +0 -0
- data/app/assets/images/images/back_enabled_hover.png +0 -0
- data/app/assets/images/images/favicon.ico +0 -0
- data/app/assets/images/images/forward_disabled.png +0 -0
- data/app/assets/images/images/forward_enabled.png +0 -0
- data/app/assets/images/images/forward_enabled_hover.png +0 -0
- data/app/assets/images/images/sort_asc.png +0 -0
- data/app/assets/images/images/sort_asc_disabled.png +0 -0
- data/app/assets/images/images/sort_both.png +0 -0
- data/app/assets/images/images/sort_desc.png +0 -0
- data/app/assets/images/images/sort_desc_disabled.png +0 -0
- data/app/assets/javascripts/adherent/allpayments.js +7 -0
- data/app/assets/javascripts/adherent/jquery.dataTables.min.js +157 -0
- data/app/assets/javascripts/adherent/members.js +116 -0
- data/app/assets/stylesheets/adherent/allpayments.css +4 -0
- data/app/assets/stylesheets/adherent/demo_table.css +577 -0
- data/app/controllers/adherent/allpayments_controller.rb +9 -0
- data/app/controllers/adherent/payments_controller.rb +41 -4
- data/app/controllers/adherent/reglements_controller.rb +24 -0
- data/app/helpers/adherent/allpayments_helper.rb +5 -0
- data/app/helpers/adherent/application_helper.rb +24 -9
- data/app/helpers/adherent/payments_helper.rb +1 -10
- data/app/models/adherent/adhesion.rb +10 -6
- data/app/models/adherent/member.rb +2 -2
- data/app/models/adherent/payment.rb +27 -6
- data/app/views/adherent/allpayments/_payment.html.haml +14 -0
- data/app/views/adherent/allpayments/index.html.haml +22 -0
- data/app/views/adherent/members/index.html.erb +6 -5
- data/app/views/adherent/payments/_payment.html.haml +11 -0
- data/app/views/adherent/payments/edit.html.erb +13 -0
- data/app/views/adherent/payments/index.html.haml +1 -12
- data/app/views/adherent/payments/new.html.erb +1 -1
- data/app/views/adherent/payments/show.html.haml +33 -0
- data/app/views/adherent/reglements/show.html.haml +31 -0
- data/config/initializers/validators.rb +12 -0
- data/config/locales/fr.yml +1 -1
- data/config/routes.rb +3 -0
- data/lib/adherent/version.rb +1 -1
- data/test/dummy/app/models/organism.rb +1 -0
- data/test/dummy/log/development.log +14434 -0
- data/test/dummy/log/test.log +62947 -0
- data/test/dummy/tmp/cache/assets/BF0/070/sprockets%2F42b486109907c85c344e3428f5615140 +0 -0
- data/test/dummy/tmp/cache/assets/C2F/180/sprockets%2F24383c007af706866f9a978498308d01 +0 -0
- data/test/dummy/tmp/cache/assets/C44/670/sprockets%2Fe128312dd259094d00196a3f02f41819 +0 -0
- data/test/dummy/tmp/cache/assets/C4D/C10/sprockets%2Fe52bf847776498593423b635698c989c +0 -0
- data/test/dummy/tmp/cache/assets/C50/1E0/sprockets%2Fd687f61462083316a5947ccd9211605a +0 -0
- data/test/dummy/tmp/cache/assets/C53/BA0/sprockets%2F0701319e027b68d87b4d5727aa571973 +0 -0
- data/test/dummy/tmp/cache/assets/C7C/2A0/sprockets%2F451d3616d07ff0801851aecc85940392 +0 -0
- data/test/dummy/tmp/cache/assets/C8B/B50/sprockets%2F1bf0946089435ce76a87bd41668373c2 +0 -0
- data/test/dummy/tmp/cache/assets/C8C/C00/sprockets%2F25d88d6c610820a36668853eea17e359 +0 -0
- data/test/dummy/tmp/cache/assets/C91/5E0/sprockets%2F28a1436ca683918e98c79266d19d430e +0 -0
- data/test/dummy/tmp/cache/assets/CA4/6A0/sprockets%2F49b5803aaa253c1ffa5214311973e684 +0 -0
- data/test/dummy/tmp/cache/assets/CA6/0A0/sprockets%2F63a72244bdf73521f399e501b341d16d +0 -0
- data/test/dummy/tmp/cache/assets/CAA/020/sprockets%2Fa2032410860d92e63293c996d5fa3ac6 +0 -0
- data/test/dummy/tmp/cache/assets/CAA/DA0/sprockets%2Fc1d5b8783261726af51242f75d0034ef +0 -0
- data/test/dummy/tmp/cache/assets/CAD/BF0/sprockets%2Fd27d4e6bd84d0108fc54a21959181335 +0 -0
- data/test/dummy/tmp/cache/assets/CB3/3E0/sprockets%2Ff03d611409c3b2c45d75f97158197ee0 +0 -0
- data/test/dummy/tmp/cache/assets/CB7/310/sprockets%2F9d00a7c05c5990e797170e06dd5641d9 +0 -0
- data/test/dummy/tmp/cache/assets/CC5/430/sprockets%2F887b61f7cb339b94a85b7e721295493c +0 -0
- data/test/dummy/tmp/cache/assets/CC6/700/sprockets%2Fda996593aa3789391cab3d7762f13687 +0 -0
- data/test/dummy/tmp/cache/assets/CC7/410/sprockets%2Fc39062f6a04c41168a923ea22d701a5a +0 -0
- data/test/dummy/tmp/cache/assets/CCB/400/sprockets%2Fb211324ce679335840009b6a2aa45cfc +0 -0
- data/test/dummy/tmp/cache/assets/CD6/8A0/sprockets%2Fcb476833cd1a806e251da407a58d9520 +0 -0
- data/test/dummy/tmp/cache/assets/CDC/0B0/sprockets%2Ffef07c3c165353f861564ede180350a4 +0 -0
- data/test/dummy/tmp/cache/assets/CDD/EB0/sprockets%2F0e17703d917f6560e5c3b46ae85c09a2 +0 -0
- data/test/dummy/tmp/cache/assets/CE0/B90/sprockets%2F7baa8d092b9d409d47643521a8b55e62 +0 -0
- data/test/dummy/tmp/cache/assets/CE1/EB0/sprockets%2Fe2d34e55c19309ae4d1b8628d38514c6 +0 -0
- data/test/dummy/tmp/cache/assets/CE4/B80/sprockets%2Fdc146f8d1ff283ff045000f8349e3942 +0 -0
- data/test/dummy/tmp/cache/assets/CE8/950/sprockets%2Fd68548f1d6d12fe519aea39909520b36 +0 -0
- data/test/dummy/tmp/cache/assets/CEA/B70/sprockets%2F2cdb1061009b0d4430f4d073562b2cbc +0 -0
- data/test/dummy/tmp/cache/assets/CF6/590/sprockets%2F4904f8e3b4e2397b86f64f3549e3d63c +0 -0
- data/test/dummy/tmp/cache/assets/CF8/560/sprockets%2F7e8587b418f3496ca670f76e8b7423ea +0 -0
- data/test/dummy/tmp/cache/assets/CFA/700/sprockets%2Ff51725f304c66b6ed8ab01120cb1a593 +0 -0
- data/test/dummy/tmp/cache/assets/CFD/F60/sprockets%2Faac72c81c4f00133234e7d1bb46d7925 +0 -0
- data/test/dummy/tmp/cache/assets/CFE/380/sprockets%2F25b295cad423d26a3a334e3864cab085 +0 -0
- data/test/dummy/tmp/cache/assets/D04/640/sprockets%2F93cc6f780004fd5b09d1774c3bb0b802 +0 -0
- data/test/dummy/tmp/cache/assets/D0B/520/sprockets%2Fa659c61ab2078241e32ebaf671f87e41 +0 -0
- data/test/dummy/tmp/cache/assets/D0D/CC0/sprockets%2F90fc5652fe6161075680fcd4cd0c45d2 +0 -0
- data/test/dummy/tmp/cache/assets/D14/210/sprockets%2Fb5db5427cdef8d152ae598d461178026 +0 -0
- data/test/dummy/tmp/cache/assets/D15/960/sprockets%2F557c56f5b8b86ba772e07281f1f3a0c7 +0 -0
- data/test/dummy/tmp/cache/assets/D16/870/sprockets%2F3f2a439772fcd9cd0f434f723837ae51 +0 -0
- data/test/dummy/tmp/cache/assets/D16/D00/sprockets%2F52e940c5c1d8089bcdf984d4d27c5520 +0 -0
- data/test/dummy/tmp/cache/assets/D1A/390/sprockets%2F1d08a6978a059fa2494e078ec1ac7e93 +0 -0
- data/test/dummy/tmp/cache/assets/D1A/820/sprockets%2F20a218b05c2726d14bd025c36ba31ddd +0 -0
- data/test/dummy/tmp/cache/assets/D1A/D90/sprockets%2F6c459fd8844374d4aa166c64f544fae0 +0 -0
- data/test/dummy/tmp/cache/assets/D20/590/sprockets%2F22948c5cb4a59a4c252888f75cdf387a +0 -0
- data/test/dummy/tmp/cache/assets/D25/100/sprockets%2F4b9f1fdc6f9b86cc0624a7951766d926 +0 -0
- data/test/dummy/tmp/cache/assets/D26/A70/sprockets%2Fbb35e749193d15ad00bf0d04513a3bd6 +0 -0
- data/test/dummy/tmp/cache/assets/D27/980/sprockets%2F65718e7a65fd89199b02b7cd38b90be9 +0 -0
- data/test/dummy/tmp/cache/assets/D2A/220/sprockets%2Fb0d6ff4608e402650ca685bc013d5d0a +0 -0
- data/test/dummy/tmp/cache/assets/D2B/FA0/sprockets%2F32aa9ce8b2315cc01f8a2c27374215ce +0 -0
- data/test/dummy/tmp/cache/assets/D32/5D0/sprockets%2F3acc8697202c55974ff0122bcf20fa2b +0 -0
- data/test/dummy/tmp/cache/assets/D34/630/sprockets%2Fa259c79ff690848e93962f587da8f2ac +0 -0
- data/test/dummy/tmp/cache/assets/D34/E20/sprockets%2F3c0dfd7a47fb35af6a3ad88310713543 +0 -0
- data/test/dummy/tmp/cache/assets/D3E/7A0/sprockets%2Ff9a1dbe464c536a11de32284fbc89192 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/640/sprockets%2F9b448668c4c3a12d6aaa017b94e69ed2 +0 -0
- data/test/dummy/tmp/cache/assets/D42/040/sprockets%2F3def97f4406db752008fa340f74a6e3f +0 -0
- data/test/dummy/tmp/cache/assets/D42/C40/sprockets%2F224cf987cad00c39ae3d39b971f8109b +0 -0
- data/test/dummy/tmp/cache/assets/D44/860/sprockets%2F9157a652853bd3cea861bd767fed0b08 +0 -0
- data/test/dummy/tmp/cache/assets/D44/BF0/sprockets%2Fcf34626c45538b36718fd50fa9bcb2e6 +0 -0
- data/test/dummy/tmp/cache/assets/D45/2A0/sprockets%2F9c55f3eca763e68ded31023b7f66543a +0 -0
- data/test/dummy/tmp/cache/assets/D46/650/sprockets%2F6ee2abb1888774ab7c549f15b50d615f +0 -0
- data/test/dummy/tmp/cache/assets/D48/B20/sprockets%2F5768e2da329c68c958acde5d26124de0 +0 -0
- data/test/dummy/tmp/cache/assets/D48/FD0/sprockets%2F4403ce85c7fe84fe60d426553aa99b1f +0 -0
- data/test/dummy/tmp/cache/assets/D49/2D0/sprockets%2F59e843295151ccde25afb2f9f6e7a605 +0 -0
- data/test/dummy/tmp/cache/assets/D4B/710/sprockets%2F41e4ac5488184198d7e33e18b7aece4f +0 -0
- data/test/dummy/tmp/cache/assets/D4B/C40/sprockets%2F2428f6c76bb4a5efb583e158681fb73d +0 -0
- data/test/dummy/tmp/cache/assets/D51/560/sprockets%2Ff6c8347aff37a4784ea82069ba176f5f +0 -0
- data/test/dummy/tmp/cache/assets/D52/250/sprockets%2F967f6481dd795af37e3a49be042f8e1b +0 -0
- data/test/dummy/tmp/cache/assets/D56/090/sprockets%2F4af17d268e2ffe72af8a78b78811f666 +0 -0
- data/test/dummy/tmp/cache/assets/D57/2C0/sprockets%2F57e8e5954196bd14468ff5db3ae99cd0 +0 -0
- data/test/dummy/tmp/cache/assets/D5F/600/sprockets%2F9c4623e57da4d15adb71bd1b04188b1d +0 -0
- data/test/dummy/tmp/cache/assets/D63/7A0/sprockets%2Fa0d549181d4ba25b5ed57b841efc2d14 +0 -0
- data/test/dummy/tmp/cache/assets/D65/0C0/sprockets%2F409bdde508f6197117fe0ab1344ca3de +0 -0
- data/test/dummy/tmp/cache/assets/D65/900/sprockets%2F4dd3fce32a54a0f8fb029c30f41d3487 +0 -0
- data/test/dummy/tmp/cache/assets/D68/100/sprockets%2F7d7522df5cd3ba1f22c81c653dd5d651 +0 -0
- data/test/dummy/tmp/cache/assets/D6A/5C0/sprockets%2F9b410af44867a4979d1aea0ab84ed24b +0 -0
- data/test/dummy/tmp/cache/assets/D6B/970/sprockets%2F214e29a7345faee9672bca1756e4aaf1 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/D20/sprockets%2Fee6531726dfe6592fa84b42a420b6acd +0 -0
- data/test/dummy/tmp/cache/assets/D71/AF0/sprockets%2Fb289e7b3562dcfd42bd0957f27a2f52a +0 -0
- data/test/dummy/tmp/cache/assets/D73/0F0/sprockets%2F5ba6d2f108d33e64b84fc4dd91960d6e +0 -0
- data/test/dummy/tmp/cache/assets/D73/8B0/sprockets%2Fac0e6a1f5b87c2966f07864c89c0acc3 +0 -0
- data/test/dummy/tmp/cache/assets/D7A/3E0/sprockets%2F3dfc09dcfefff43d4680267d832149c3 +0 -0
- data/test/dummy/tmp/cache/assets/D7B/800/sprockets%2F850d92cf676cc2c2c662ee8dc328f82c +0 -0
- data/test/dummy/tmp/cache/assets/D7D/950/sprockets%2F8259f3fc885403b4eea8dd12964c2ffc +0 -0
- data/test/dummy/tmp/cache/assets/D7F/140/sprockets%2Fb6961cbff5838a917c93f2cb6185d6ae +0 -0
- data/test/dummy/tmp/cache/assets/D92/430/sprockets%2Fc55e2bbc3d3c5566893be021ec1c4ab7 +0 -0
- data/test/dummy/tmp/cache/assets/D9A/810/sprockets%2F53a9bd5325fcfa4148c273e3deb2d19d +0 -0
- data/test/dummy/tmp/cache/assets/D9D/BA0/sprockets%2Fa3a3f78f8e854339e32a5ab0638abbbf +0 -0
- data/test/dummy/tmp/cache/assets/DA7/930/sprockets%2F06db55d1b7d0c96a4ff1657e169e6ece +0 -0
- data/test/dummy/tmp/cache/assets/DA8/0D0/sprockets%2F74dcf71bbdf4ad56a3b4338b93d9866c +0 -0
- data/test/dummy/tmp/cache/assets/DAD/8E0/sprockets%2F498547cbaefbf040cfff05e9c6e53386 +0 -0
- data/test/dummy/tmp/cache/assets/DB0/A80/sprockets%2F9fdb8e951f975dae3836c2ccf0f65a34 +0 -0
- data/test/dummy/tmp/cache/assets/DBC/890/sprockets%2Fa6a1ac17a4326ab9f49d1a74de70f3aa +0 -0
- data/test/dummy/tmp/cache/assets/DC1/9E0/sprockets%2F4fdc113ba37308cc3d7d2dbbe1e9d625 +0 -0
- data/test/dummy/tmp/cache/assets/DCC/170/sprockets%2Fa2b9a6a717a82fc483c94abbe71aa95f +0 -0
- data/test/dummy/tmp/cache/assets/DCD/870/sprockets%2F26f53f256948ecabba69abf1e1dea282 +0 -0
- data/test/dummy/tmp/cache/assets/DD3/F60/sprockets%2Fde4fdc4d1f700596d5f2ce7077fbc32e +0 -0
- data/test/dummy/tmp/cache/assets/DD4/980/sprockets%2Fed1289bfd5270a38bd9adfcb8d0627c8 +0 -0
- data/test/dummy/tmp/cache/assets/DD7/110/sprockets%2Fa7626606dec6ffd4a8a4b76abb7f6a94 +0 -0
- data/test/dummy/tmp/cache/assets/DD7/2D0/sprockets%2F9f68c831ccc33f95a6b0a5d7aaf76d8a +0 -0
- data/test/dummy/tmp/cache/assets/DED/9A0/sprockets%2F1e96fab65eff8789cd8c76ffadf40814 +0 -0
- data/test/dummy/tmp/cache/assets/E12/820/sprockets%2Ff8ced48d293d9ae81be776bac3d3de86 +0 -0
- data/test/dummy/tmp/cache/assets/E2A/410/sprockets%2F73874a0edbd48f62ca7cad3c4a9e6aca +0 -0
- data/test/dummy/tmp/cache/assets/E3B/7A0/sprockets%2F3c7ac679f8c2cf31dec4ed6ee8064ece +0 -0
- data/test/dummy/tmp/cache/assets/E5A/2A0/sprockets%2Fed33dc2e47cddca2a7f3b9d850f01fef +0 -0
- data/test/dummy/tmp/cache/assets/E8E/C80/sprockets%2Fbcfe97b68b37db0b902decd4ea5ae8ea +0 -0
- data/test/dummy/tmp/pids/server.pid +1 -1
- metadata +78 -2
@@ -14,20 +14,35 @@ module Adherent
|
|
14
14
|
end
|
15
15
|
|
16
16
|
# Pour transformer un montant selon le format numérique français avec deux décimales
|
17
|
-
def
|
17
|
+
def two_decimals(montant)
|
18
18
|
ActionController::Base.helpers.number_with_precision(montant, precision:2) rescue '0,00'
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
# utilisé dans les vues qui demandent un montant
|
23
|
-
def two_decimals(montant)
|
24
|
-
sprintf('%0.02f',montant)
|
25
|
-
rescue
|
26
|
-
'0.00'
|
27
|
-
end
|
28
|
-
|
21
|
+
|
29
22
|
def icon_to_users
|
30
23
|
icon_to 'users.png', members_path, title:'Liste des membres'
|
31
24
|
end
|
25
|
+
|
26
|
+
def list_imputations(payment)
|
27
|
+
|
28
|
+
content_tag(:ul) do
|
29
|
+
payment.reglements.map do |r|
|
30
|
+
content_tag(:li) do
|
31
|
+
imputation_with_actions(payment, r)
|
32
|
+
end
|
33
|
+
end.join.html_safe
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def imputation_with_actions(pay, reglt)
|
38
|
+
html = ''
|
39
|
+
html << "Adhésion #{reglt.adhesion.member.to_s} pour #{number_to_currency(reglt.amount, locale: :fr)}"
|
40
|
+
html << " "
|
41
|
+
html << "#{icon_to 'detail.png', payment_reglement_path(pay, reglt)}"
|
42
|
+
# html << "#{icon_to 'imputation-edit.png', edit_payment_reglement_path(pay, reglt), title:'Modifier l\'imputation'}"
|
43
|
+
# html << "#{icon_to 'imputation-delete.png', payment_reglement_path(pay, reglt), title:'Supprimer l\'imputation'}"
|
44
|
+
html.html_safe
|
45
|
+
end
|
46
|
+
|
32
47
|
end
|
33
48
|
end
|
@@ -1,14 +1,5 @@
|
|
1
1
|
module Adherent
|
2
2
|
module PaymentsHelper
|
3
|
-
|
4
|
-
|
5
|
-
content_tag(:ul) do
|
6
|
-
payment.reglements.map do |r|
|
7
|
-
content_tag(:li) do
|
8
|
-
"Adhésion #{r.adhesion.member.to_s} pour #{number_to_currency(r.amount, locale: :fr)}"
|
9
|
-
end
|
10
|
-
end.join.html_safe
|
11
|
-
end
|
12
|
-
end
|
3
|
+
|
13
4
|
end
|
14
5
|
end
|
@@ -32,12 +32,15 @@ module Adherent
|
|
32
32
|
}
|
33
33
|
end
|
34
34
|
|
35
|
-
# liste toutes les adhésions qui ne sont pas payées
|
36
|
-
#
|
37
|
-
#
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
# liste toutes les adhésions qui ne sont pas payées.
|
36
|
+
# pour rappel un where ne fonctionne pas avec un aggrégat obligeant à utiliser la clause having
|
37
|
+
# reglements_amount.to_i donne le montant des règlements enregistrés
|
38
|
+
# to_i est nécessaire car le retour fait par Rails est un string
|
39
|
+
scope :unpaid, select('adherent_adhesions.*, sum(adherent_reglements.amount) as reglements_amount').
|
40
|
+
joins('left join adherent_reglements on adherent_reglements.adhesion_id = adherent_adhesions.id').
|
41
|
+
group('adherent_adhesions.id').
|
42
|
+
having('adherent_adhesions.amount > 0 AND (adherent_adhesions.amount > sum(adherent_reglements.amount) OR sum(adherent_reglements.amount) IS NULL)')
|
43
|
+
|
41
44
|
|
42
45
|
# méthode mise en place pour assurer une mise en forme lisible
|
43
46
|
# dans la sélection des imputations
|
@@ -67,6 +70,7 @@ module Adherent
|
|
67
70
|
imputation = [montant, due].min
|
68
71
|
r = reglements.new(amount:imputation)
|
69
72
|
r.payment_id = payment_id
|
73
|
+
puts r.errors.messages unless r.valid?
|
70
74
|
r.save!
|
71
75
|
r
|
72
76
|
|
@@ -12,9 +12,9 @@ module Adherent
|
|
12
12
|
validates :number, :name, :forname , :organism_id, :presence=>true
|
13
13
|
validates_uniqueness_of :number, :scope=>:organism_id
|
14
14
|
|
15
|
-
#
|
15
|
+
# arel des adhésions impayées par ordre de date
|
16
16
|
def unpaid_adhesions
|
17
|
-
adhesions.order(:to_date).
|
17
|
+
adhesions.order(:to_date).unpaid
|
18
18
|
end
|
19
19
|
|
20
20
|
# indique s'il y a des adhésions impayées pour ce membre
|
@@ -1,5 +1,21 @@
|
|
1
1
|
module Adherent
|
2
|
-
|
2
|
+
|
3
|
+
# La classe Payment permet d'enregistrer les payments effectués par les adhérents
|
4
|
+
#
|
5
|
+
# Un callback after_create tente d'imputer le réglement sur une adhésion qui soit due.
|
6
|
+
#
|
7
|
+
# Comme il est possible qu'un adhérent fasse un réglement pour plusieurs personnes (les
|
8
|
+
# membres de sa famille par exemple), il est possible d'éclater des payments sur
|
9
|
+
# différents réglements. Un payment a donc plusieurs réglements.
|
10
|
+
#
|
11
|
+
# Des méthodes non_impute et imputation_on_adh(adhesion) permettent de savoir
|
12
|
+
# si la totalité du payment a été affectée à un réglement et d'imputer le montant
|
13
|
+
# sur une adhésion spécifiée.
|
14
|
+
#
|
15
|
+
# Un validator spécifique est mis en place pour interdire de diminuer le payment
|
16
|
+
# en dessous des montants déja imputés.
|
17
|
+
#
|
18
|
+
class Payment < ActiveRecord::Base
|
3
19
|
|
4
20
|
has_many :reglements, :dependent=>:destroy
|
5
21
|
belongs_to :member
|
@@ -7,11 +23,12 @@ module Adherent
|
|
7
23
|
attr_accessible :amount, :date, :mode
|
8
24
|
|
9
25
|
validates :amount, :date, :mode, :member_id, presence:true
|
26
|
+
validates :amount, :over_imputations=>true
|
10
27
|
|
11
|
-
pick_date_for :date
|
28
|
+
pick_date_for :date
|
12
29
|
|
13
|
-
|
14
|
-
validates_numericality_of :amount
|
30
|
+
|
31
|
+
validates_numericality_of :amount
|
15
32
|
# le mode doit être dans les MODES
|
16
33
|
validates_inclusion_of :mode, in: Adherent::MODES
|
17
34
|
|
@@ -29,7 +46,11 @@ module Adherent
|
|
29
46
|
# calcule le montant du paiement qui n'a pas été imputé, donc qui
|
30
47
|
# ne correspond pas à des réglements
|
31
48
|
def non_impute
|
32
|
-
amount -
|
49
|
+
amount - impute
|
50
|
+
end
|
51
|
+
|
52
|
+
def impute
|
53
|
+
reglements(true).sum(:amount)
|
33
54
|
end
|
34
55
|
|
35
56
|
|
@@ -50,7 +71,7 @@ module Adherent
|
|
50
71
|
# on crée un réglement du montant dû dans la limité du montant du paiement.
|
51
72
|
a_imputer = amount
|
52
73
|
member.unpaid_adhesions.each do |adh|
|
53
|
-
if a_imputer > 0
|
74
|
+
if a_imputer > 0
|
54
75
|
reglemt = adh.add_reglement(id, a_imputer)
|
55
76
|
a_imputer -= reglemt.amount
|
56
77
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
%tr
|
2
|
+
%td
|
3
|
+
= payment.member.to_s
|
4
|
+
= icon_to 'payment.png', member_payments_path(payment.member), title:'Liste des paiements de cet adhérent'
|
5
|
+
%td= payment.date
|
6
|
+
%td.numeric= two_decimals payment.amount
|
7
|
+
%td= payment.mode
|
8
|
+
%td= list_imputations(payment)
|
9
|
+
%td.numeric= two_decimals payment.non_impute
|
10
|
+
|
11
|
+
%td
|
12
|
+
- if (payment.non_impute != 0.0)
|
13
|
+
= icon_to 'imputation.png', new_payment_reglement_path(payment), title: 'Imputer le solde sur une adhésion'
|
14
|
+
= icon_to 'detail.png', member_payment_path(payment.member, payment)
|
@@ -0,0 +1,22 @@
|
|
1
|
+
= content_for :menu do
|
2
|
+
= icon_to_users
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
.champ
|
7
|
+
%h3 Table de tous les paiements
|
8
|
+
|
9
|
+
%table.table.display.table-striped.table-bordered.table-condensed#allpayments(cellpadding="0" cellspacing="0" border="0")
|
10
|
+
%thead
|
11
|
+
%tr
|
12
|
+
%th De
|
13
|
+
%th.date-euro Le
|
14
|
+
%th Montant (€)
|
15
|
+
%th Par
|
16
|
+
%th Imputé sur
|
17
|
+
%th Reste à imputer (€)
|
18
|
+
%th Actions
|
19
|
+
%tbody
|
20
|
+
= render partial:'adherent/allpayments/payment', collection:@payments
|
21
|
+
|
22
|
+
|
@@ -1,6 +1,7 @@
|
|
1
1
|
<%= content_for :menu do %>
|
2
|
-
|
3
|
-
<%= icon_to '
|
2
|
+
|
3
|
+
<%= icon_to 'nouveau.png', new_member_path, title:'Ajouter un membre' %>
|
4
|
+
<%= icon_to 'payment.png', payments_path, title:'Table des paiements' %>
|
4
5
|
<% end -%>
|
5
6
|
|
6
7
|
|
@@ -8,7 +9,7 @@
|
|
8
9
|
|
9
10
|
|
10
11
|
<h3>Liste des <%= I18n::t('members') %></h3>
|
11
|
-
<table class="table table-striped table-bordered table-condensed" cellpadding="0" cellspacing="0" border="0">
|
12
|
+
<table class="table display table-striped table-bordered table-condensed" id='members' cellpadding="0" cellspacing="0" border="0">
|
12
13
|
<thead>
|
13
14
|
<tr>
|
14
15
|
|
@@ -18,12 +19,12 @@
|
|
18
19
|
|
19
20
|
<th><%= I18n::t('forname') %></th>
|
20
21
|
|
21
|
-
<th><%= I18n::t('birthdate') %></th>
|
22
|
+
<th class='date-euro'><%= I18n::t('birthdate') %></th>
|
22
23
|
|
23
24
|
<th><%= I18n::t('mail') %></th>
|
24
25
|
<th><%= I18n::t('tel') %></th>
|
25
26
|
|
26
|
-
<th>Actions</th>
|
27
|
+
<th class='actions'>Actions</th>
|
27
28
|
|
28
29
|
</tr>
|
29
30
|
</thead>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
%tr
|
2
|
+
%td= payment.date
|
3
|
+
%td.numeric= number_to_currency(payment.amount, locale: :fr)
|
4
|
+
%td= payment.mode
|
5
|
+
%td= list_imputations(payment)
|
6
|
+
%td.numeric= number_to_currency payment.non_impute, locale: :fr
|
7
|
+
|
8
|
+
%td
|
9
|
+
- if (payment.non_impute != 0.0)
|
10
|
+
= icon_to 'imputation.png', new_payment_reglement_path(payment), title: 'Imputer le solde sur une adhésion'
|
11
|
+
= icon_to 'detail.png', member_payment_path(payment.member, payment)
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<%= content_for :menu do %>
|
2
|
+
|
3
|
+
<%= icon_to 'payment.png', member_payments_path(@member) %>
|
4
|
+
<% end -%>
|
5
|
+
|
6
|
+
<div class="champ">
|
7
|
+
<h3>Enregistrement d'un paiement de <%= @member.to_s %></h3>
|
8
|
+
</div>
|
9
|
+
<div class="row-fluid inner-champ">
|
10
|
+
|
11
|
+
<%= render 'form' %>
|
12
|
+
</div>
|
13
|
+
|
@@ -16,15 +16,4 @@
|
|
16
16
|
%th Reste à imputer
|
17
17
|
%th Actions
|
18
18
|
%tbody
|
19
|
-
|
20
|
-
%tr
|
21
|
-
%td= payment.date
|
22
|
-
%td= number_to_currency(payment.amount, locale: :fr)
|
23
|
-
%td= payment.mode
|
24
|
-
%td= list_imputations(payment)
|
25
|
-
%td= number_to_currency payment.non_impute, locale: :fr
|
26
|
-
|
27
|
-
%td
|
28
|
-
- if (payment.non_impute != 0.0)
|
29
|
-
= icon_to 'imputation.png', new_payment_reglement_path(payment), title: 'Imputer le solde sur une autre adhésion'
|
30
|
-
= icon_to 'supprimer.png', [@member,payment], method: :delete, confirm: 'Etes vous sûr ?'
|
19
|
+
= render @payments
|
@@ -0,0 +1,33 @@
|
|
1
|
+
= content_for :menu do
|
2
|
+
= icon_to 'payment.png', member_payments_path(@member), title:"Liste des paiements de #{@member.to_s}"
|
3
|
+
= icon_to 'money-plus.png', new_member_payment_path(@member), title:'Nouveau paiement'
|
4
|
+
- if (@payment.non_impute != 0.0)
|
5
|
+
= icon_to 'imputation.png', new_payment_reglement_path(@payment), title: 'Imputer le solde sur une autre adhésion'
|
6
|
+
= icon_to 'modifier.png', edit_member_payment_path(@payment.member, @payment)
|
7
|
+
= icon_to 'supprimer.png', [@member,@payment], method: :delete, confirm: 'Etes vous sûr ?'
|
8
|
+
|
9
|
+
|
10
|
+
.champ
|
11
|
+
%h3 Détail d'un paiement
|
12
|
+
|
13
|
+
.inner-champ
|
14
|
+
%p
|
15
|
+
%b Effectué par :
|
16
|
+
= @member.to_s
|
17
|
+
%p
|
18
|
+
%b Le :
|
19
|
+
= @payment.date
|
20
|
+
%p
|
21
|
+
%b Montant :
|
22
|
+
= number_to_currency(@payment.amount, locale: :fr)
|
23
|
+
%p
|
24
|
+
%b Par :
|
25
|
+
= @payment.mode
|
26
|
+
%p
|
27
|
+
%b Imputé sur :
|
28
|
+
= list_imputations(@payment)
|
29
|
+
%p
|
30
|
+
%b Reste à imputer :
|
31
|
+
= number_to_currency @payment.non_impute, locale: :fr
|
32
|
+
|
33
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
= content_for :menu do
|
2
|
+
= icon_to 'supprimer.png', [@payment, @reglement], method: :delete, confirm: 'Etes vous sûr ?'
|
3
|
+
= icon_to 'retour.png', :back
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
.champ
|
8
|
+
%h3 Détail d'un réglement
|
9
|
+
|
10
|
+
.inner-champ
|
11
|
+
%p
|
12
|
+
%b Imputé sur un payment effectué par :
|
13
|
+
= @payment.member.to_s
|
14
|
+
%p
|
15
|
+
%b Le :
|
16
|
+
= @payment.date
|
17
|
+
%p
|
18
|
+
%b d'un montant total de :
|
19
|
+
= number_to_currency(@payment.amount, locale: :fr)
|
20
|
+
%p
|
21
|
+
%b dont sur ce réglement :
|
22
|
+
= number_to_currency(@reglement.amount, locale: :fr)
|
23
|
+
%p
|
24
|
+
%b enregistré le :
|
25
|
+
= l @reglement.created_at
|
26
|
+
- if @reglement.created_at != @reglement.updated_at
|
27
|
+
%p
|
28
|
+
%b modifié le :
|
29
|
+
= l @reglement.updated_at
|
30
|
+
|
31
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# ce validator est utilisé par Payment pour s'assurer que
|
2
|
+
# le montant du Payment est effectivement supérieur aux réglements
|
3
|
+
# qui ont déjà été imputés sur ce paiement.
|
4
|
+
#
|
5
|
+
class OverImputationsValidator < ActiveModel::EachValidator
|
6
|
+
|
7
|
+
def validate_each(record, attribute, value)
|
8
|
+
if (record.reglements.any? && value < record.impute)
|
9
|
+
record.errors.add(attribute, :under_imputations)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/config/locales/fr.yml
CHANGED
data/config/routes.rb
CHANGED
data/lib/adherent/version.rb
CHANGED