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

SpravkaCRM.ru

Administrators
  • Content count

    269
  • Joined

  • Last visited

  • Days Won

    7

SpravkaCRM.ru last won the day on February 21

SpravkaCRM.ru had the most liked content!

Community Reputation

13 Good

About SpravkaCRM.ru

  • Rank
    Advanced Member

Recent Profile Visitors

1788 profile views
  1. На сколько я помню там где то в конфиге можно определить способ обращения к БД SuiteCRM: напрямую, или через SOAP. В логгере. Там прям сверху где то было.
  2. Хочу разместить тут одну из вариаций решения задачи: При добавлении нового Контрагента, если заполнено поле "ИНН", надо определить, нет ли в базе уже существующего Контрагента с таким же ИНН. И если есть - не дать сохранить выведя соответствующую надпись о этом. Реализация сделана на странице добавления новой записи в модуле 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); Вот и все! Проверка на уникальность готова.
  3. Интересно, тайм-линия в звонках от таких преобразований не ломается? там же заточено на 15 минут...
  4. Добрый день! Буквально на той неделе был клиент с секундами в логах. Правда разговоры были тоже секундными. Даже добавляли поле с длительностью в секундах. Сейчас специалист по Астериску подойдет может ))) расскажет поточнее....
  5. Добрый день! да, нечто похожее делали. если вкратце на пальцах, то: добавляем JavaScript-код в карточку редактирования, который задает новую функцию проверки формы с полями ввода для кнопки "Сохранить" При нажатии кнопки "Сохранить" запускается наша функция, которая получает значение из поля "Код" и аяксом отправляет запрос на сервер с просьбой проверить уникальность. Если поле уникально, то мы запускаем стандартную проверку полей ввода (которая в итоге проверит другие поля и сохранит введенные данные) Если поле не уникально, то мы поле "Код" кидаем в функцию подсветки красным и внизу надпись что типа не уникально (в CRM есть соответствующая функция) Кнопками вы такого эффекта не добьетесь. Если есть навыки программирования, то могу на досуге поискать образцы наработок. Если навыков нет, то могу сделать на коммерческой основе. Пишите в skype: evgenjekson
  6. Да, нету. Видимо в SugarCRM Pro видел... старом... получается, что так, в ручную...
  7. Да, было бы не плохо такую получить. Если найдете, дайте знать плз. Ну либо можно обсудить формирование такой схемы совместными усилиями: в диалоге по скайпу я расскажу все, что знаю по этому поводу, а вы сформируете красивые картинки.
  8. это было конечно в мае прошлого года... но лучше поздно, чем никода, да и вдруг кому пригодиться... Прям папки сделать тоже можно, но геморно. тут всеже система с своим запрограммированным видением по сегментации. В общем надо определиться как именно можно в договоре понять к какому филиалу он принадлежит. Выпадающий список с филиалами? Еще что то? Если вы можете в поиске договоров найти договора определенного филиала, то мой способ вам поможет: Тут на сайте есть модуль: суть в том, что вы ищете все договора определенного контрагента (или по любым другим условиям), потом создаете на основе этого поискового запроса пункт в меню. И так для всех филиалов. А если поиском по договорам у вас нельзя филиалы выбирать, значит добавьте это. Создаете комбобокс с филиалами в студии и поле в виде выпадающего списчка в модуле с договорами. и в режиме редактирования договора указываете из выпадающего списка к какому филиалу принадлежит договор.
  9. Проверил сейчас на php7.2 на SuiteCRM 7.9.11 дашлеты себя хорошо ведут...
  10. Я при установке CRM-систем НИКОГДА не создавал базы из скрипта. Обычно заходил в базы данных, создавал ее вручную, а потом уже запускал установку CRM, где просто указывал название базы существующей. Установщик просто спрашивает действительно ли хотите поставить в эту базу? Соглашаешся и все. Не надо там ничего комментировать. Система сама определит наличие базы.
  11. А чем модуль с Контактами не угодил? Если очень хочется объединить, то можно разместить поля и по физ.лицу и по юр.лицу. Сделать необходимое количество полей, и разместить их в разных вкладках. Я у себя сделал примерно так для ООО и ИП: Таким же образом можно добавить и поля по Контакту. Ну и совсем для верности можно где то на первой вкладке поставить выпадающий список с указанием кто это: юр или физ. и через JavaScript открывать/скрывать соответствующие вкладки. но это уже программировать надо. а без программирования вот так на вкладки разбить добавив соответствующих полей.
  12. Шахматка

    Основной функционал Шахматка — это реестр квартир в доме в виде таблицы с основной информацией о квартирах и их статусе. Что бы зайти в шахматку необходимо в CRM системе перейти в модуль "Дома" и выбрать интересующий Вас дом в Шахматке мы увидим название дома, подъезды, номера и статус и основную информацию о квартирах. О каждой квартире в модуле содержится следующая информация: количество комнат Общая площадь квартиры Номер квартиры Общая стоимость квартиры Цена за квадратный метр Информер о критической ошибке(появляется в случае возникновения критической ошибки их список приведен ниже в статье) Критические ошибки, которые регистрирует система: Наличие двух квартир в системе с одним и тем же номером Несоответствие статуса (статус свободно, если на квартиру найден договор или статус продано а договора на данную квартиру нет) В вышеуказанных случаях появляется информер о критической ошибке, при наведении на него курсора мыши появится всплывающая подсказка, с описанием возникшей ошибки. Быстрое создание квартир Как правило в большинстве домов квартиры в каждом стояке и даже в совпадают по проектной площади и основным показателям, для быстрого внесения в систему квартир и информации о них, достаточно заполнить 1 этаж подъезда(если в доме одинаковая планировка всех подъездов) или 1 этаж дома. Все остальные квартиры можно быстро скопировать с помощью модуля шахматки. Для этого нажимаем на пустые ячейки в шахматке, после чего в них появляется форма. В нее мы вносим номер квартиры. Выполняем данную операцию со всеми квартирами, одного стояка, после чего в нижней части окна в выпадающем списке выбираем тип недвижимости в нашем случае Квартира и ее номер. именно с нее будут скопированы все параметры для заданных нами квартир. После чего нажимаем кнопку создать по примеру.
×