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,11 +198,6 @@ class MpogSoftwarePluginController < ApplicationController | ||
198 | end | 198 | end |
199 | end | 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 | InstitutionHelper.register_institution_modification institution | 201 | InstitutionHelper.register_institution_modification institution |
207 | 202 | ||
208 | institution | 203 | institution |
lib/institution.rb
@@ -22,7 +22,8 @@ class Institution < ActiveRecord::Base | @@ -22,7 +22,8 @@ class Institution < ActiveRecord::Base | ||
22 | where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) | 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 | protected | 28 | protected |
28 | 29 | ||
@@ -47,17 +48,51 @@ class Institution < ActiveRecord::Base | @@ -47,17 +48,51 @@ class Institution < ActiveRecord::Base | ||
47 | 48 | ||
48 | def validate_state | 49 | def validate_state |
49 | if (self.community.blank?) || self.errors[:state].blank? && self.community.state.blank? | 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 | end | 57 | end |
53 | return true | 58 | return true |
54 | end | 59 | end |
55 | 60 | ||
56 | def validate_city | 61 | def validate_city |
57 | if (self.community.blank?) || self.errors[:city].blank? && self.community.city.blank? | 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 | end | 69 | end |
61 | return true | 70 | return true |
62 | end | 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 | end | 98 | end |
lib/private_institution.rb
1 | class PrivateInstitution < Institution | 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 | \ No newline at end of file | 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,12 +21,10 @@ | ||
21 | 21 | ||
22 | function show_public_institutions_fields() { | 22 | function show_public_institutions_fields() { |
23 | jQuery(".public-institutions-fields").show(); | 23 | jQuery(".public-institutions-fields").show(); |
24 | - jQuery("label[for='institutions_acronym']").html(jQuery("#acronym_translate").val()); | ||
25 | } | 24 | } |
26 | 25 | ||
27 | function show_private_institutions_fields() { | 26 | function show_private_institutions_fields() { |
28 | jQuery(".public-institutions-fields").hide(); | 27 | jQuery(".public-institutions-fields").hide(); |
29 | - jQuery("label[for='institutions_acronym']").html(jQuery("#fantasy_name_translate").val()); | ||
30 | 28 | ||
31 | jQuery("#institutions_governmental_power option").selected(0); | 29 | jQuery("#institutions_governmental_power option").selected(0); |
32 | jQuery("#institutions_governmental_sphere option").selected(0); | 30 | jQuery("#institutions_governmental_sphere option").selected(0); |
@@ -183,7 +181,25 @@ | @@ -183,7 +181,25 @@ | ||
183 | jQuery(".intitution_cnpj_field").mask("99.999.999/9999-99"); | 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 | function set_events() { | 200 | function set_events() { |
201 | + show_private_institutions_fields(); | ||
202 | + | ||
187 | jQuery('#community_country').val("BR"); | 203 | jQuery('#community_country').val("BR"); |
188 | 204 | ||
189 | jQuery("#create_institution_link").click(open_create_institution_modal); | 205 | jQuery("#create_institution_link").click(open_create_institution_modal); |
@@ -203,6 +219,8 @@ | @@ -203,6 +219,8 @@ | ||
203 | 219 | ||
204 | jQuery(".remove-institution").click(remove_institution); | 220 | jQuery(".remove-institution").click(remove_institution); |
205 | 221 | ||
222 | + jQuery("#community_country").change(show_hide_cnpj_city); | ||
223 | + | ||
206 | add_mask_to_form_items(); | 224 | add_mask_to_form_items(); |
207 | 225 | ||
208 | institution_autocomplete(); | 226 | institution_autocomplete(); |
test/functional/mpog_software_plugin_controller_test.rb
@@ -148,6 +148,29 @@ class MpogSoftwarePluginControllerTest < ActionController::TestCase | @@ -148,6 +148,29 @@ class MpogSoftwarePluginControllerTest < ActionController::TestCase | ||
148 | assert_redirected_to(controller: "mpog_software_plugin", action: "create_institution_admin") | 148 | assert_redirected_to(controller: "mpog_software_plugin", action: "create_institution_admin") |
149 | end | 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 | private | 174 | private |
152 | 175 | ||
153 | def generate_form_fields name, country, state, city, cnpj, type | 176 | def generate_form_fields name, country, state, city, cnpj, type |
views/mpog_software_plugin/_institution.html.erb
@@ -30,12 +30,12 @@ | @@ -30,12 +30,12 @@ | ||
30 | <span class=''> | 30 | <span class=''> |
31 | <div class='formfield type-radio'> | 31 | <div class='formfield type-radio'> |
32 | <label> <%= _("Public Institution") %> | 32 | <label> <%= _("Public Institution") %> |
33 | - <%= radio_button_tag("institutions[type]", "PublicInstitution", true) %> | 33 | + <%= radio_button_tag("institutions[type]", "PublicInstitution") %> |
34 | </label> | 34 | </label> |
35 | 35 | ||
36 | <label> | 36 | <label> |
37 | <%= _("Private Institution") %> | 37 | <%= _("Private Institution") %> |
38 | - <%= radio_button_tag("institutions[type]" ,"PrivateInstitution")%> | 38 | + <%= radio_button_tag("institutions[type]" ,"PrivateInstitution", true)%> |
39 | </label> | 39 | </label> |
40 | </div> | 40 | </div> |
41 | </span> | 41 | </span> |