modulejs.define('CreateInstitution', ['jquery', 'NoosferoRoot', 'SelectElement'], function($, NoosferoRoot, SelectElement) { 'use strict'; var AJAX_URL = { create_institution_modal: NoosferoRoot.urlWithSubDirectory("/plugin/software_communities/create_institution"), new_institution: NoosferoRoot.urlWithSubDirectory("/plugin/software_communities/new_institution"), institution_already_exists: NoosferoRoot.urlWithSubDirectory("/plugin/software_communities/institution_already_exists"), get_institutions: NoosferoRoot.urlWithSubDirectory("/plugin/software_communities/get_institutions") }; function open_create_institution_modal(evt) { evt.preventDefault(); $.get(AJAX_URL.create_institution_modal, function(response){ $("#institution_dialog").html(response); set_form_count_custom_data(); set_events(); $("#institution_dialog").dialog({ modal: true, width: 500, height: 530, position: 'center', close: function() { $("#institution_dialog").html(""); $('#institution_empty_ajax_message').switchClass("show-field", "hide-field"); } }); }); } function show_public_institutions_fields() { $(".public-institutions-fields").show(); } function show_private_institutions_fields() { $(".public-institutions-fields").hide(); $("#institutions_governmental_power option").selected(0); $("#institutions_governmental_sphere option").selected(0); } function get_comunity_post_data() { return { name : $("#community_name").val(), country : $("#community_country").val(), state : $("#community_state").val(), city : $("#community_city").val() } } function get_institution_post_data() { return { cnpj: $("#institutions_cnpj").val(), type: $("input[name='institutions[type]']:checked").val(), acronym : $("#institutions_acronym").val(), governmental_power: $("#institutions_governmental_power").selected().val(), governmental_sphere: $("#institutions_governmental_sphere").selected().val(), juridical_nature: $("#institutions_juridical_nature").selected().val(), corporate_name: $("#institutions_corporate_name").val() } } function get_post_data() { var post_data = {}; post_data.community = get_comunity_post_data(); post_data.institutions = get_institution_post_data(); return post_data; } function success_ajax_response(response) { close_loading(); if(response.success){ var institution_name = response.institution_data.name; var institution_id = response.institution_data.id; $("#institution_dialog").html("

"+response.message+"

"); $("#create_institution_errors").switchClass("show-field", "hide-field"); $(".institution_container").append(get_clone_institution_data(institution_id)); add_selected_institution_to_list(institution_id, institution_name); $(".remove-institution").click(remove_institution); } else { var errors = ""; $("#create_institution_errors").switchClass("hide-field", "show-field").html("

"+response.message+"

"+errors); } } function save_institution(evt) { evt.preventDefault(); open_loading($("#loading_message").val()); $.ajax({ url: AJAX_URL.new_institution, data : get_post_data(), type: "POST", success: success_ajax_response, error: function() { close_loading(); var error_message = $("#institution_error_message").val(); $("#create_institution_errors").switchClass("hide-field", "show-field").html("

"+error_message+"

"); } }); } function institution_already_exists(){ if( this.value.length >= 3 ) { $.get(AJAX_URL.institution_already_exists, {name:this.value}, function(response){ if( response === true ) { $("#already_exists_text").switchClass("hide-field", "show-field"); } else { $("#already_exists_text").switchClass("show-field", "hide-field"); } }); } } function get_clone_institution_data(value) { var user_institutions = $(".user_institutions").first().clone(); user_institutions.val(value); return user_institutions; } function institution_autocomplete() { $("#input_institution").autocomplete({ source : function(request, response){ $.ajax({ type: "GET", url: AJAX_URL.get_institutions, data: {query: request.term}, success: function(result){ response(result); if( result.length === 0 ) { $('#institution_empty_ajax_message').switchClass("hide-field", "show-field"); } else { $('#institution_empty_ajax_message').switchClass("show-field", "hide-field"); } }, error: function(ajax, stat, errorThrown) { console.log('Link not found : ' + errorThrown); } }); }, minLength: 2, select : function (event, selected) { $("#institution_selected").val(selected.item.id).attr("data-name", selected.item.label); } }); } function add_selected_institution_to_list(id, name) { var selected_institution = "
  • "+name; selected_institution += "
  • "; $(".institutions_added").append(selected_institution); } function add_new_institution(evt) { evt.preventDefault(); var selected = $("#institution_selected"); var institution_already_added = $(".institutions_added li[data-institution='"+selected.val()+"']").length; if(selected.val().length > 0 && institution_already_added === 0) { //field that send the institutions to the server $(".institution_container").append(get_clone_institution_data(selected.val())); // Visualy add the selected institution to the list add_selected_institution_to_list(selected.val(), selected.attr("data-name")); // clean the institution flag selected.val("").attr("data-name", ""); $("#input_institution").val(""); $(".remove-institution").click(remove_institution); } } function remove_institution(evt) { evt.preventDefault(); var code = $(this).parent().attr("data-institution"); $(".user_institutions[value="+code+"]").remove(); $(this).parent().remove(); } function add_mask_to_form_items() { $(".intitution_cnpj_field").mask("99.999.999/9999-99"); } function show_hide_cnpj_city(country) { var cnpj = $("#institutions_cnpj").parent().parent(); var city = $("#community_city").parent().parent(); var state = $("#community_state").parent().parent(); if( country === "-1" ) $("#community_country").val("BR"); if( country !== "BR" ) { cnpj.hide(); city.hide(); state.hide(); } else { cnpj.show(); city.show(); state.show(); } } function institution_type_actions(type) { if( type === "PublicInstitution" ) { show_public_institutions_fields(); } else { show_private_institutions_fields(); } } function set_form_count_custom_data() { var divisor_option = SelectElement.generateOption("-1", "--------------------------------"); var default_option = SelectElement.generateOption("BR", "Brazil"); var inst_type = $("input[name='institutions[type]']:checked").val(); var country = $("#community_country").val(); institution_type_actions(inst_type); show_hide_cnpj_city(country); if( $('#community_country').find("option[value='']").length === 1 ) { $('#community_country').find("option[value='']").remove(); $('#community_country').prepend(divisor_option); $('#community_country').prepend(default_option); if($("#edit_institution_page").val() === "false") { $('#community_country').val("BR"); show_hide_cnpj_city($('#community_country').val()); } } } function set_events() { $("#create_institution_link").click(open_create_institution_modal); $("input[name='institutions[type]']").click(function(){ institution_type_actions(this.value); }); $('#save_institution_button').click(save_institution); $("#community_name").keyup(institution_already_exists); $("#add_new_institution").click(add_new_institution); $(".remove-institution").click(remove_institution); $("#community_country").change(function(){ show_hide_cnpj_city(this.value); }); add_mask_to_form_items(); institution_autocomplete(); } return { isCurrentPage: function() { return $("#institution_form").length === 1; }, init: function() { set_form_count_custom_data(); set_events(); } } });