Commit d24e09beae33a65c5d8ad16b3eba1b60d338b0c8
1 parent
70d4c608
Exists in
master
and in
5 other branches
Show or hide some institution fields depending on user country
Signed-off-by: Fabio Teixeira <fabio1079@gmail.com> Signed-off-by: Gabriela Navarro <navarro1703@gmail.com>
Showing
6 changed files
with
87 additions
and
17 deletions
Show diff stats
controllers/mpog_software_plugin_controller.rb
... | ... | @@ -198,11 +198,6 @@ class MpogSoftwarePluginController < ApplicationController |
198 | 198 | end |
199 | 199 | end |
200 | 200 | |
201 | - if institution.cnpj.nil? or institution.cnpj.blank? | |
202 | - institution.errors.add(:cnpj, _("can't be blank")) | |
203 | - return institution | |
204 | - end | |
205 | - | |
206 | 201 | InstitutionHelper.register_institution_modification institution |
207 | 202 | |
208 | 203 | institution | ... | ... |
lib/institution.rb
... | ... | @@ -22,7 +22,8 @@ class Institution < ActiveRecord::Base |
22 | 22 | where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) |
23 | 23 | } |
24 | 24 | |
25 | - validate :validate_country, :validate_state, :validate_city, :verify_institution_type | |
25 | + validate :validate_country, :validate_state, :validate_city, :verify_institution_type, :validate_cnpj, :validate_format_cnpj | |
26 | + | |
26 | 27 | |
27 | 28 | protected |
28 | 29 | |
... | ... | @@ -47,17 +48,51 @@ class Institution < ActiveRecord::Base |
47 | 48 | |
48 | 49 | def validate_state |
49 | 50 | if (self.community.blank?) || self.errors[:state].blank? && self.community.state.blank? |
50 | - self.errors.add(:state, _("can't be blank")) | |
51 | - return false | |
51 | + if self.community.country == "BR" | |
52 | + self.errors.add(:state, _("can't be blank")) | |
53 | + return false | |
54 | + else | |
55 | + return true | |
56 | + end | |
52 | 57 | end |
53 | 58 | return true |
54 | 59 | end |
55 | 60 | |
56 | 61 | def validate_city |
57 | 62 | if (self.community.blank?) || self.errors[:city].blank? && self.community.city.blank? |
58 | - self.errors.add(:city, _("can't be blank")) | |
59 | - return false | |
63 | + if self.community.country == "BR" | |
64 | + self.errors.add(:city, _("can't be blank")) | |
65 | + return false | |
66 | + else | |
67 | + return true | |
68 | + end | |
60 | 69 | end |
61 | 70 | return true |
62 | 71 | end |
72 | + | |
73 | + def validate_format_cnpj | |
74 | + return true if !self.community.blank? && self.community.country != "BR" | |
75 | + | |
76 | + format = /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/ | |
77 | + | |
78 | + if !self.cnpj.blank? && format.match(self.cnpj) | |
79 | + return true | |
80 | + else | |
81 | + self.errors.add(:cnpj, _("invalid format")) | |
82 | + return false | |
83 | + end | |
84 | + end | |
85 | + | |
86 | + def validate_cnpj | |
87 | + if !self.community.blank? && self.community.country == "BR" | |
88 | + if self.errors[:cnpj].blank? && self.cnpj.blank? | |
89 | + self.errors.add(:cnpj, _("can't be blank")) | |
90 | + return false | |
91 | + else | |
92 | + return true | |
93 | + end | |
94 | + else | |
95 | + return true | |
96 | + end | |
97 | + end | |
63 | 98 | end | ... | ... |
lib/private_institution.rb
1 | 1 | class PrivateInstitution < Institution |
2 | - validates :cnpj, :presence=>true, :uniqueness=>true | |
3 | - validates_format_of :cnpj, :with => /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/ | |
4 | -end | |
5 | 2 | \ No newline at end of file |
3 | + validates :cnpj, :uniqueness=>true, :allow_nil=>true, :allow_blank=>true | |
4 | +end | ... | ... |
public/mpog-institution-validations.js
... | ... | @@ -21,12 +21,10 @@ |
21 | 21 | |
22 | 22 | function show_public_institutions_fields() { |
23 | 23 | jQuery(".public-institutions-fields").show(); |
24 | - jQuery("label[for='institutions_acronym']").html(jQuery("#acronym_translate").val()); | |
25 | 24 | } |
26 | 25 | |
27 | 26 | function show_private_institutions_fields() { |
28 | 27 | jQuery(".public-institutions-fields").hide(); |
29 | - jQuery("label[for='institutions_acronym']").html(jQuery("#fantasy_name_translate").val()); | |
30 | 28 | |
31 | 29 | jQuery("#institutions_governmental_power option").selected(0); |
32 | 30 | jQuery("#institutions_governmental_sphere option").selected(0); |
... | ... | @@ -183,7 +181,25 @@ |
183 | 181 | jQuery(".intitution_cnpj_field").mask("99.999.999/9999-99"); |
184 | 182 | } |
185 | 183 | |
184 | + function show_hide_cnpj_city() { | |
185 | + var cnpj = jQuery("#institutions_cnpj").parent().parent(); | |
186 | + var city = jQuery("#community_city").parent().parent(); | |
187 | + var state = jQuery("#community_state").parent().parent(); | |
188 | + | |
189 | + if( this.value != "BR" ) { | |
190 | + cnpj.hide(); | |
191 | + city.hide(); | |
192 | + state.hide(); | |
193 | + } else { | |
194 | + cnpj.show(); | |
195 | + city.show(); | |
196 | + state.show(); | |
197 | + } | |
198 | + } | |
199 | + | |
186 | 200 | function set_events() { |
201 | + show_private_institutions_fields(); | |
202 | + | |
187 | 203 | jQuery('#community_country').val("BR"); |
188 | 204 | |
189 | 205 | jQuery("#create_institution_link").click(open_create_institution_modal); |
... | ... | @@ -203,6 +219,8 @@ |
203 | 219 | |
204 | 220 | jQuery(".remove-institution").click(remove_institution); |
205 | 221 | |
222 | + jQuery("#community_country").change(show_hide_cnpj_city); | |
223 | + | |
206 | 224 | add_mask_to_form_items(); |
207 | 225 | |
208 | 226 | institution_autocomplete(); | ... | ... |
test/functional/mpog_software_plugin_controller_test.rb
... | ... | @@ -148,6 +148,29 @@ class MpogSoftwarePluginControllerTest < ActionController::TestCase |
148 | 148 | assert_redirected_to(controller: "mpog_software_plugin", action: "create_institution_admin") |
149 | 149 | end |
150 | 150 | |
151 | + should "Create foreign institution without city, state and cnpj by post" do | |
152 | + @controller.stubs(:verify_recaptcha).returns(true) | |
153 | + | |
154 | + fields = generate_form_fields "Foreign institution", "AZ", "", "", "", "PrivateInstitution" | |
155 | + fields[:institutions][:acronym] = "FI" | |
156 | + | |
157 | + post :new_institution, fields | |
158 | + | |
159 | + assert_redirected_to(controller: "admin_panel", action: "index") | |
160 | + end | |
161 | + | |
162 | + should "Create foreign institution without city, state and cnpj by ajax" do | |
163 | + @controller.stubs(:verify_recaptcha).returns(true) | |
164 | + | |
165 | + fields = generate_form_fields "Foreign institution", "AZ", "", "", "", "PrivateInstitution" | |
166 | + fields[:institutions][:acronym] = "FI" | |
167 | + | |
168 | + xhr :post, :new_institution, fields | |
169 | + | |
170 | + json_response = ActiveSupport::JSON.decode(@response.body) | |
171 | + assert json_response["success"] | |
172 | + end | |
173 | + | |
151 | 174 | private |
152 | 175 | |
153 | 176 | def generate_form_fields name, country, state, city, cnpj, type | ... | ... |
views/mpog_software_plugin/_institution.html.erb
... | ... | @@ -30,12 +30,12 @@ |
30 | 30 | <span class=''> |
31 | 31 | <div class='formfield type-radio'> |
32 | 32 | <label> <%= _("Public Institution") %> |
33 | - <%= radio_button_tag("institutions[type]", "PublicInstitution", true) %> | |
33 | + <%= radio_button_tag("institutions[type]", "PublicInstitution") %> | |
34 | 34 | </label> |
35 | 35 | |
36 | 36 | <label> |
37 | 37 | <%= _("Private Institution") %> |
38 | - <%= radio_button_tag("institutions[type]" ,"PrivateInstitution")%> | |
38 | + <%= radio_button_tag("institutions[type]" ,"PrivateInstitution", true)%> | |
39 | 39 | </label> |
40 | 40 | </div> |
41 | 41 | </span> | ... | ... |