From d24e09beae33a65c5d8ad16b3eba1b60d338b0c8 Mon Sep 17 00:00:00 2001 From: Gabriela Navarro Date: Mon, 3 Nov 2014 20:08:47 +0000 Subject: [PATCH] Show or hide some institution fields depending on user country --- controllers/mpog_software_plugin_controller.rb | 5 ----- lib/institution.rb | 45 ++++++++++++++++++++++++++++++++++++++++----- lib/private_institution.rb | 5 ++--- public/mpog-institution-validations.js | 22 ++++++++++++++++++++-- test/functional/mpog_software_plugin_controller_test.rb | 23 +++++++++++++++++++++++ views/mpog_software_plugin/_institution.html.erb | 4 ++-- 6 files changed, 87 insertions(+), 17 deletions(-) diff --git a/controllers/mpog_software_plugin_controller.rb b/controllers/mpog_software_plugin_controller.rb index c83ff5f..40df922 100644 --- a/controllers/mpog_software_plugin_controller.rb +++ b/controllers/mpog_software_plugin_controller.rb @@ -198,11 +198,6 @@ class MpogSoftwarePluginController < ApplicationController end end - if institution.cnpj.nil? or institution.cnpj.blank? - institution.errors.add(:cnpj, _("can't be blank")) - return institution - end - InstitutionHelper.register_institution_modification institution institution diff --git a/lib/institution.rb b/lib/institution.rb index fc58208..8cb64a9 100644 --- a/lib/institution.rb +++ b/lib/institution.rb @@ -22,7 +22,8 @@ class Institution < ActiveRecord::Base where("name ilike ? OR acronym ilike ?", "%#{value}%", "%#{value}%" ) } - validate :validate_country, :validate_state, :validate_city, :verify_institution_type + validate :validate_country, :validate_state, :validate_city, :verify_institution_type, :validate_cnpj, :validate_format_cnpj + protected @@ -47,17 +48,51 @@ class Institution < ActiveRecord::Base def validate_state if (self.community.blank?) || self.errors[:state].blank? && self.community.state.blank? - self.errors.add(:state, _("can't be blank")) - return false + if self.community.country == "BR" + self.errors.add(:state, _("can't be blank")) + return false + else + return true + end end return true end def validate_city if (self.community.blank?) || self.errors[:city].blank? && self.community.city.blank? - self.errors.add(:city, _("can't be blank")) - return false + if self.community.country == "BR" + self.errors.add(:city, _("can't be blank")) + return false + else + return true + end end return true end + + def validate_format_cnpj + return true if !self.community.blank? && self.community.country != "BR" + + format = /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/ + + if !self.cnpj.blank? && format.match(self.cnpj) + return true + else + self.errors.add(:cnpj, _("invalid format")) + return false + end + end + + def validate_cnpj + if !self.community.blank? && self.community.country == "BR" + if self.errors[:cnpj].blank? && self.cnpj.blank? + self.errors.add(:cnpj, _("can't be blank")) + return false + else + return true + end + else + return true + end + end end diff --git a/lib/private_institution.rb b/lib/private_institution.rb index 075b966..1ee0f70 100644 --- a/lib/private_institution.rb +++ b/lib/private_institution.rb @@ -1,4 +1,3 @@ class PrivateInstitution < Institution - validates :cnpj, :presence=>true, :uniqueness=>true - validates_format_of :cnpj, :with => /^\d{2}\.\d{3}\.\d{3}\/\d{4}\-\d{2}$/ -end \ No newline at end of file + validates :cnpj, :uniqueness=>true, :allow_nil=>true, :allow_blank=>true +end diff --git a/public/mpog-institution-validations.js b/public/mpog-institution-validations.js index 8544df0..228c5f4 100644 --- a/public/mpog-institution-validations.js +++ b/public/mpog-institution-validations.js @@ -21,12 +21,10 @@ function show_public_institutions_fields() { jQuery(".public-institutions-fields").show(); - jQuery("label[for='institutions_acronym']").html(jQuery("#acronym_translate").val()); } function show_private_institutions_fields() { jQuery(".public-institutions-fields").hide(); - jQuery("label[for='institutions_acronym']").html(jQuery("#fantasy_name_translate").val()); jQuery("#institutions_governmental_power option").selected(0); jQuery("#institutions_governmental_sphere option").selected(0); @@ -183,7 +181,25 @@ jQuery(".intitution_cnpj_field").mask("99.999.999/9999-99"); } + function show_hide_cnpj_city() { + var cnpj = jQuery("#institutions_cnpj").parent().parent(); + var city = jQuery("#community_city").parent().parent(); + var state = jQuery("#community_state").parent().parent(); + + if( this.value != "BR" ) { + cnpj.hide(); + city.hide(); + state.hide(); + } else { + cnpj.show(); + city.show(); + state.show(); + } + } + function set_events() { + show_private_institutions_fields(); + jQuery('#community_country').val("BR"); jQuery("#create_institution_link").click(open_create_institution_modal); @@ -203,6 +219,8 @@ jQuery(".remove-institution").click(remove_institution); + jQuery("#community_country").change(show_hide_cnpj_city); + add_mask_to_form_items(); institution_autocomplete(); diff --git a/test/functional/mpog_software_plugin_controller_test.rb b/test/functional/mpog_software_plugin_controller_test.rb index 511bb2b..4f96425 100644 --- a/test/functional/mpog_software_plugin_controller_test.rb +++ b/test/functional/mpog_software_plugin_controller_test.rb @@ -148,6 +148,29 @@ class MpogSoftwarePluginControllerTest < ActionController::TestCase assert_redirected_to(controller: "mpog_software_plugin", action: "create_institution_admin") end + should "Create foreign institution without city, state and cnpj by post" do + @controller.stubs(:verify_recaptcha).returns(true) + + fields = generate_form_fields "Foreign institution", "AZ", "", "", "", "PrivateInstitution" + fields[:institutions][:acronym] = "FI" + + post :new_institution, fields + + assert_redirected_to(controller: "admin_panel", action: "index") + end + + should "Create foreign institution without city, state and cnpj by ajax" do + @controller.stubs(:verify_recaptcha).returns(true) + + fields = generate_form_fields "Foreign institution", "AZ", "", "", "", "PrivateInstitution" + fields[:institutions][:acronym] = "FI" + + xhr :post, :new_institution, fields + + json_response = ActiveSupport::JSON.decode(@response.body) + assert json_response["success"] + end + private def generate_form_fields name, country, state, city, cnpj, type diff --git a/views/mpog_software_plugin/_institution.html.erb b/views/mpog_software_plugin/_institution.html.erb index fc6d475..f0a1a37 100644 --- a/views/mpog_software_plugin/_institution.html.erb +++ b/views/mpog_software_plugin/_institution.html.erb @@ -30,12 +30,12 @@
-- libgit2 0.21.2