📝 Подсказки DaData

Делитесь своими плагинами и темами оформления.
Ответить
Аватара пользователя
Develop-Soft
Сообщения: 690
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

📝 Подсказки DaData

Сообщение Develop-Soft »

Код для вставки в "Javascript в форме".

Пока только "организации".

Настройка:

1. Указать ваш ключ "DaData" (бесплатно получается в личном кабинете сервиса).
2. Сопоставить переменные DaData с вашими id полей (указываются просто числом):
  • поле для поиска (оно же "выпадашка", в него же будет сохраняться "наименование")
  • остальные поля формы для заполнения (в неиспользуемых оставляется ноль).
Изображение

Работа:

Изображение


DaData "Организации":

Код: Выделить всё

///////////// https://dadata.ru/suggestions/usage/party////////////////
/******/ var Дадата = new Object(); Дадата.Поля = new Object();/******/ 

///////////////////////////////////////////////////////////////////////
//                                                                   //
//                   ЗАПОЛНИТЕ ПЕРЕМЕННЫЕ НИЖЕ                       //
//       Строго по шаблону не трогая запятые и двоеточия!            //
//         Последнее значение массива должно быть без запятой        //
//                                                                   //
//                                                                   //
///////////////////////////////////////////////////////////////////////

Дадата.Токен = '8c6ee..ваш токен DaData...1ff77dfb'; 
Дадата.Поле_поиска = 566; // = "Наименование компании" (value)

// Формат заполнения -  "Поле дадата: id вашего поля в форме"

Дадата.Поля = {
  
  ИНН: 563,
  КПП: 568, 
  ОГРН: 569,
  Дата_выдачи_ОГРН: 603,
  Тип_организации: 604, 
  Полное_наименование: 605,
  Краткое_наименование: 606,
  Фамилия_ИП: 607,
  Имя_ИП: 608,
  Отчество_ИП: 609,
  ОКАТО: 610,
  ОКТМО: 611,
  ОКПО: 612,
  ОКОГУ: 613,
  ОКФС: 614,
  ОКВЭД: 615,
  Версия_ОКВЭД_год: 616,
  ОКОПФ: 617,
  Полное_название_ОПФ: 618,
  Краткое_название_ОПФ: 619,
  Версия_справочника_ОКОПФ_год: 620,
  ФИО_руководителя: 582,
  Должность_руководителя: 581,
  Количество_филиалов: 621,
  Тип_подразделения: 622,
  Адрес_одной_строкой: 623,  
  Адрес_полный_с_индексом: 624,
 // Гранулярный_адрес["postal_code"]: 625, // пока недоступен
  
/*  Примеры:
    Гранулярный_адрес["postal_code"] = 123, // 308002 
	Гранулярный_адрес["country"] = 456, // Россия
	//... и так далее, по схеме:
	Гранулярный_адрес["параметр"] = id поля в форме  
	Весь список параметров можно найти тут: https://dadata.ru/api/suggest/address/
	*/
  Адрес_как_в_ЕГРЮЛ: 564,
  Код_проверки_адреса: 626, 
  Дата_последних_изменений:  627, 
  Дата_регистрации:  628, 
  Дата_ликвидации:  629, 
  Cтатус_организации:  630 
 } 



///////////////////////////////////////////////////////////////////////
/// Часть скрипта ниже - обновляемая и может быть скопирована в ваш  //
/// код отдельно (чтобы не трогать уже заполненные выше параметры)   //
///////////////////////////////////////////////////////////////////////
  
    
</script>   
<link href = "https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/css/suggestions.min.css" rel = "stylesheet"/>
<script src = "https://cdn.jsdelivr.net/npm/suggestions-jquery@21.6.0/dist/js/jquery.suggestions.min.js" ></script> 
<script>
  


    $("#fields_" + Дадата.Поле_поиска).focus(function() { // focusin
     //  console.log('focusin');
  
    // таймаут
	
var waitSuggestions = function(){
if( typeof($("#fields_" + Дадата.Поле_поиска).suggestions) != 'undefined'){

        $("#fields_" + Дадата.Поле_поиска).suggestions({
            token: Дадата.Токен,
            type: "PARTY",
            count: 4,
            onSelect: function(suggestion) { 
              clearFields();
			  
              function ff(loc,remote){
                if (loc > 0){ 
                  try { 
                    return $("#fields_" + loc).val(remote).blur();
                  } catch(e){
                    console.log(e);
                  }
                }
              }
			  
			  function ts_to_date_str(timestamp){
				if (!timestamp) {return null} else { 
				return new Date(timestamp).toLocaleDateString();
				}
			  }
			  
              
            ff(Дадата.Поле_поиска, suggestion.value);          
              with (Дадата.Поля) {  
                with (suggestion)  {
                  try {ff(ИНН, data.inn); } catch(e){}
                  try {ff(КПП, data.kpp); } catch(e){}
                  try {ff(ОГРН, data.ogrn); } catch(e){}
                  try {ff(Дата_выдачи_ОГРН, ts_to_date_str(data.ogrn_date)); } catch(e){}

				  var ddt_dt = '';
				  try {
				  if (data.type == 'LEGAL'){ddt_dt = "Юридическое лицо"} else
				  if (data.type == 'INDIVIDUAL'){ddt_dt = "Индивидуальный предприниматель"}
				  ff(Тип_организации, ddt_dt); 
				  } catch(e){}
				  
				  try { ff(Полное_наименование, data.name.full_with_opf); } catch(e){}
				  try { ff(Краткое_наименование, data.name.short_with_opf); } catch(e){}  
				 
                  try { ff(Фамилия_ИП, data.fio.surname); } catch(e){}
				  try { ff(Имя_ИП, data.fio.name); } catch(e){}
				  try { ff(Отчество_ИП, data.fio.patronymic); } catch(e){}
				
                  try { ff(ОКАТО, data.okato); } catch(e){}
				  try { ff(ОКТМО, data.oktmo); } catch(e){}
				  try { ff(ОКПО, data.okpo); } catch(e){}
				  try { ff(ОКОГУ, data.okogu); } catch(e){}
				  try { ff(ОКФС, data.okfs); } catch(e){}
				  try { ff(ОКВЭД, data.okved); } catch(e){}
				  try { ff(Версия_ОКВЭД_год, data.okved_type); } catch(e){} 
				  try { ff(ОКОПФ, data.opf.code); } catch(e){}
				  try { ff(Полное_название_ОПФ, data.opf.full); } catch(e){}
				  try { ff(Краткое_название_ОПФ, data.opf.short); } catch(e){}
				  try { ff(Версия_справочника_ОКОПФ_год, data.opf.type); } catch(e){}
				  try { ff(ФИО_руководителя, data.management.name); } catch(e){}
				  try { ff(Должность_руководителя, data.management.post); } catch(e){}
				  try { ff(Количество_филиалов, data.branch_count); } catch(e){}
				  
				  var ddt_dbt ='';
				  try { if (data.branch_type == "MAIN") {ddt_dbt = "Головная организация"} else
				  if (data.branch_type == "BRANCH") {ddt_dbt = "Филиал"}
				  ff(Тип_подразделения, ddt_dbt); } catch(e){}	
				  
				  try { ff(Адрес_одной_строкой, data.address.value); } catch(e){}
				  try { ff(Адрес_полный_с_индексом, data.address.unrestricted_value); } catch(e){}
				  try { ff(Гранулярный_адрес, data.address.data); /*console.log(data.address.data)*/} catch(e){}
				  try { ff(Адрес_как_в_ЕГРЮЛ, data.address.data.source); } catch(e){}
				  try { ff(Код_проверки_адреса, data.address.data.qc); } catch(e){}
				  try { ff(Дата_последних_изменений, ts_to_date_str(data.state.actuality_date)); } catch(e){} 
				  try { ff(Дата_регистрации, ts_to_date_str(data.state.registration_date)); } catch(e){}
				  try { ff(Дата_ликвидации, ts_to_date_str(data.state.liquidation_date)); } catch(e){}
				  
				  var ddt_dts = '';
				  try {
				  if (data.state.status == 'ACTIVE'){ddt_dts = 'Действующая'} else
				  if (data.state.status == 'LIQUIDATING'){ddt_dts = 'Ликвидируется'} else
				  if (data.state.status == 'LIQUIDATED'){ddt_dts = 'Ликвидирована'} else
				  if (data.state.status == 'BANKRUPT'){ddt_dts = 'Банкротство'} else
				  if (data.state.status == 'REORGANIZING'){ddt_dts = 'В процессе присоединения к другому юрлицу, с последующей ликвидацией'} 
				  ff(Cтатус_организации, ddt_dts); 
				  } catch(e){}
                }
              }
            },
            onSearchComplete: function(query, suggestions) {
                $(".suggestions-promo").css("display", "none");
            },
            onSearchError: function(query, jqXHR, textStatus, errorThrown) {
                $(".suggestions-promo").css("display", "none");
            },
            onSuggestionsFetch: function(suggestions) {
                $(".suggestions-promo").css("display", "none");
            } ,
		    onSelectNothing : function (query) {
		    }
			
			
        });
		    
	} else {
		setTimeout(waitSuggestions, 1000); 
	}
}
waitSuggestions();
// таймаут		
});

	function clearFields(){
		   for (let i = 0; i < Object.keys(Дадата.Поля).length; i++) { 
			 $("#fields_" + Дадата.Поля[Object.keys(Дадата.Поля)[i]])
				.val(null)
				.removeClass('unique-error error')
				.next(".error").remove();  
		   }
	}

	$("#fields_" + Дадата.Поле_поиска).on("input", function() {
	  if ($("#fields_" + Дадата.Поле_поиска).val() == "") {
	  clearFields();
	  }
	});

</script>
<script>
  

  

🤙
Изображение
Аватара пользователя
Develop-Soft
Сообщения: 690
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

Re: 📝 Подсказки DaData

Сообщение Develop-Soft »

Кое-что подпилил, местами исправил. Гранулярный адрес пока не доступен.
Обращаю внимание на блок:

Код: Выделить всё

///////////////////////////////////////////////////////////////////////
/// Часть скрипта ниже - обновляемая и может быть скопирована в ваш  //
/// код отдельно (чтобы не трогать уже заполненные выше параметры)   //
///////////////////////////////////////////////////////////////////////
Ответить