SpravkaCRM.ru Posted February 15, 2018 Report Share Posted February 15, 2018 Хочу разместить тут одну из вариаций решения задачи: При добавлении нового Контрагента, если заполнено поле "ИНН", надо определить, нет ли в базе уже существующего Контрагента с таким же ИНН. И если есть - не дать сохранить выведя соответствующую надпись о этом. Реализация сделана на странице добавления новой записи в модуле Accounts. Если в вкратце, то алгоритм следующий: Добавляем на страницу создания/редактирования карточки Accounts произвольный js-файл В этом js-файле для кнопки "Сохранить" прописываем свой обработчик. Когда пользователь нажимает кнопку "Сохранить" обработчик получает введенное значение из поля "ИНН", и отправляет AJAX-запрос на сервер с этим ИНН, чтобы проверить его в базе. Если ИНН в базе найден, то подсвечиваем красным поле с ИНН и пишем о том, что введенное значение не уникально Если ИНН не найден, то продолжаем стандартное сохранение карточки. Теперь давайте более предметно посмотрим, как это работает. В meta-файле, описывающем editview для Account custom/modules/Accounts/metadata/editviewdefs.php, добавляем блок, который подключит js-файл: <?php $viewdefs ['Accounts'] = array ( 'EditView' => array ( 'templateMeta' => array ( 'form' => array ( 'enctype' => 'multipart/form-data', 'buttons' => array ( 0 => 'SAVE', 1 => 'CANCEL', ), ), 'maxColumns' => '2', 'widths' => array ( 0 => array ( 'label' => '10', 'field' => '30', ), 1 => array ( 'label' => '10', 'field' => '30', ), ), 'includes' => array ( 1 => array ( 'file' => 'modules/Accounts/Account.js', ), 2 => array ( 'file' => 'modules/Accounts/edit.view.js', ), ), ), Это лишь кусок файла с мета-данными. Непосредственно наша вставка, это: 2 => array ( 'file' => 'modules/Accounts/edit.view.js', ), Таким образом нам надо добавить пустой файл modules/Accounts/edit.view.js, и заполнить его примерно так: $(document).ready(function(){ // Ставим для кнопки Сохранения свой обработчик $('#EditView').find('input[type=submit][id=saveButton]').click(function(){ // Ставим действие после срабатывания формы $('#EditView').find('input[type=hidden][name=action]').val('Save'); var checkForm = check_form('EditView'); if($('#inn').val() != '') { // Проверям на уникальность ИНН $.ajax({ url: "index.php", type: "POST", data: { module: 'Accounts', action: 'checkINN', record: $('#EditView').find('input[name=record]').val(), inn: $('#inn').val(), to_pdf: true } }).done(function(responce) { // Обработка полученных данных var accounts = jQuery.parseJSON(responce); if(accounts.length > 0) { // Найдены дубликаты var list = ''; for(var i = 0; i < accounts.length; i++) { list += '<li><A href="index.php?module=Accounts&action=DetailView&record='+accounts[i]['id']+'" style="color: red;" target="_blank">'+accounts[i]['name']+'</A></li>'; } list = '<B>Найдены дубликаты по ИНН</B>:<BR>' + list; if(isAccessDoubleINN) { list += '<BR>Если желаете все равно сохранить Контрагента с текущим ИНН нажмите кнопку: <button class="button" onclick="if(check_form(\'EditView\')){$(\'#EditView\').submit();}">Пропустить</button>'; } add_error_style('EditView','inn', list); } else { // Дубликатов по ИНН нет, можем прождолжать // Стандартная проверка остальных полей if(checkForm) { $('#EditView').submit(); } } }); } else { if(checkForm) { $('#EditView').submit(); } } return false; }); // Удаляем уже ранее установленный обработчик $('#EditView').find('input[type=submit][id=saveButton]').removeAttr("onclick"); }); Здесь в блоке $.ajax({ url: "index.php", type: "POST", data: { module: 'Accounts', action: 'checkINN', record: $('#EditView').find('input[name=record]').val(), inn: $('#inn').val(), to_pdf: true } }) как раз и происходит AJAX-запрос к серверу на проверку уникальности введенного значения. Запрос происходит к action=checkINN. Нам надо добавить php-файл с таким названием по адресу modules/Accounts/checkINN.php: <?php if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); /** * Created by JetBrains PhpStorm. * User: Evgen * Date: 22.08.13 * Time: 12:57 * To change this template use File | Settings | File Templates. */ global $db; $sql = " SELECT `id`, `name` FROM `accounts` WHERE `inn` = '".$_REQUEST["inn"]."' AND `deleted` = 0 "; if(isset($_REQUEST['record']) AND $_REQUEST['record'] != '') { $sql .= " AND `id` != '".$_REQUEST["record"]."' "; } $result = $db->query($sql, true); $return_array = array(); while($row = $db->fetchByAssoc($result)) { $return_array[] = $row; } $json = new JSON(); echo $json->encode($return_array); Вот и все! Проверка на уникальность готова. Quote Link to comment Share on other sites More sharing options...
Янчик Posted October 30, 2019 Report Share Posted October 30, 2019 не работает код-( Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.