Jump to content
SpravkaCRM.ru - Ваш справочник по CRM
SpravkaCRM.ru

Определение уникальности ввода ИНН в карточке Контрагента в SuiteCRM

Recommended Posts

Хочу разместить тут одну из вариаций решения задачи: При добавлении нового Контрагента, если заполнено поле "ИНН", надо определить, нет ли в базе уже существующего Контрагента с таким же ИНН. И если есть - не дать сохранить выведя соответствующую надпись о этом.

Реализация сделана на странице добавления новой записи в модуле Accounts.

Если в вкратце, то алгоритм следующий:

  1. Добавляем на страницу создания/редактирования карточки Accounts произвольный js-файл
  2. В этом js-файле для кнопки "Сохранить" прописываем свой обработчик.
  3. Когда пользователь нажимает кнопку "Сохранить" обработчик получает введенное значение из поля "ИНН", и отправляет AJAX-запрос на сервер с этим ИНН, чтобы проверить его в базе.
  4. Если ИНН в базе найден, то подсвечиваем красным поле с ИНН и пишем о том, что введенное значение не уникально
  5. Если ИНН не найден, то продолжаем стандартное сохранение карточки.

Теперь давайте более предметно посмотрим, как это работает.

В 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);

Вот и все! Проверка на уникальность готова.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...