Announcement

Collapse
No announcement yet.

Связь между таблицами

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Связь между таблицами

    Приветствую! Спасибо за ваш продукт.
    Внедряем его в работы и возникли некоторые трудности, ответ на которые я не нашел в документации и на форуме.

    Есть таблица товаров и таблица контактов. Настроена связь на бронирование контакт - товар (один ко многим). В карточке товара есть поле "продано"(isSale), необходимо чтобы при выборе товара в карточке контакта не выводились проданные. Понятно что можно добавить фильтр, но надо что бы это правило работало перманентно. Так же получается один и тот же товар забронировать за разными контактами. Чисто логически необходимо добавить в запрос isSale = 1, но я не нашел где это прописать и не уверен что это возможно.
    Очень рассчитываю на помощь.

  • #2
    Здравствуйте,
    > Понятно что можно добавить фильтр, но надо что бы это правило работало перманентно.
    Что вы имеете ввиду под "перманентно"? Я спрашиваю не о значении этого слова, а о том, как вы себе это представляете. Имеете ли вы в виду чтобы фильтр был автоматически установлен на отсортировку при выборе товара (т.е. показывал только доступные товары) или же чтото иное?
    > Так же получается один и тот же товар забронировать за разными контактами.
    То есть если этот товар уже привязан к контакту, то он не может быть выбран для другого контакта? А может ли быть такое что у вас в наличии несколько единиц одного товара, и при привязке его к контакту количество на складе уменьшается на 1 и когда значение равно 0 то тогда и выбор его становится невозможным?
    Также напишите есть ли у вас Advanced Pack чтобы понимать объем инструментов которыми вы располагаете?

    Comment


    • #3
      Спасибо за быстрый ответ.
      >Фильтр должен срабатывать когда выбираем товар (квартиру) для бронирования. Необходимо что бы были скрыты из списка элементы у которых стоит галочка - продано. (скриншот прилагается)
      > Товар (квартира) в единичном количестве представлен и если он уже привязан к другой карточке клиента, то он должен быть недоступен при выборе.
      Сейчас если я привязывают его к новому клиенту - у старого ссылка пропадает. Т.е. один товар привязан может быть только к одному клиенту.

      Расширенного набора нету. Если он необходим - приобретём.
      Attached Files

      Comment


      • #4
        Я могу вам посоветовать использовать наш Real Estate extension https://www.espocrm.com/extensions/real-estate/. Данное расширение абсолютно бесплатно и как раз предназначено для работы с недвижимостью. Для клиентов можно создавать запросы которые будут фильтровать предложения и показывать только подходящие.
        Если вы все же решите не пользоваться расширением, тогда список действий примерно следующий:
        1. Чтобы фильтр срабатывал автоматически его нужно будет дописать через код. Примеры реализаций можно найти как на форуме (для поиска формируйте запрос на англ. языке так как есть большая вероятность что вы найдете ответ).
        2. Для фильтра вам понадобится поле типа Boolean (true, false). Не обязательно даже выводить это поле в шаблон.
        3. Затем для сущности Товар написать формулу чтобы автоматизировать процесс изменения статуса для нашего Boolean поля. Формула типа:
        Code:
        ifThenElse(
            contactId,
            isSale = 1,
            isSale = 0
        )
        Иными словами, если контакт привязан значить isSale true, если поле контакт пусто то статус снова false.
        Фильтр из п.1 как раз должен будет зависить от значения поля isSale.

        Comment


        • #5
          Таки спасибо за ответы.
          1) Эстейт я смотрел, оно удобно если начинать с нуля. Я подключаю нашу базу с квартирами и всё настроено для работы с ней, переносить и перестраивать это очень много времени.
          2) Кастомный фильтр искал, не нашел, но видимо плохо искал =) Буду глубже копать. Спасибо за советы!

          Comment


          • #6
            Если вдруг с созданием фильтра по умолчанию у вас возникнут трудности, вы можете избрать другой путь фильтрования просто добав это поле в условия фильтра: Администрирование -> Управление макетами -> Товары -> Фильтры поиска -> перетянуть поле "Продано".
            Attached Files

            Comment


            • #7
              Для получения нужного вам фильтра сделайте следующее:
              1. В директории /custom/Espo/Custom/SelectManagers/ если у вас нету (а я полагаю что нету так как сущность создана вами вручную) создаете php файл c названием вашей сущности (у меня к примеру файл назван BasePlusTest.php).
              2. В этот файл записываете следующий код:
              Code:
              <?php
              
              namespace Espo\Custom\SelectManagers;
              
              class [COLOR=#FF0000]BasePlusTest[/COLOR] extends \Espo\Core\SelectManagers\Base
              {
                  protected function filterActual(&$result)
                  {    
                      $result['whereClause'][] = array(
                          'isSale=' => 'false'
                      );
                  }    
              }
              Примечание. выделенный красным текст меняете на название своей сущности.
              3. Открываете файл /custom/Espo/Custom/Resources/metadata/clientDefs/BasePlusTest.json (вместо этого файла, файл с названием вашей сущности) и дописываете в него код выделенный красным:
              Code:
              {
                  "controller": "controllers/record",
                  "boolFilterList": [
                      "onlyMy"
                  ],
              [COLOR=#FF0000]"filterList":[
                      "actual"
                  ],
                  "selectDefaultFilters": {
                      "filter": "actual"
                  },[/COLOR]
                  "sidePanels": {
                      "detail": [
                          {
                              "name": "activities",
                              "label": "Activities",
                              "view": "crm:views/record/panels/activities",
                              "aclScope": "Activities"
                          },
                          .........................
              }
              4. Очищаете кэш (Администрирование -> Очистить кэш)
              5. Обновите старице браузера.
              Теперь при нажатии выбор автоматически будут фильтроваться записи (см. скриншот)
              Attached Files

              Comment


              • #8
                Maximus

                Спасибо за помощь, но почему-то не получается.

                Вот код в /custom/Espo/Custom/SelectManagers/
                PHP Code:
                <?php
                namespace Espo\Custom\SelectManagers;

                class 
                Flat extends \Espo\Core\SelectManagers\Base
                {
                    protected function 
                filterActual(&$result)
                    {    
                        
                $result['whereClause'][] = array(
                            
                'sold=' => 'true'
                        
                );
                    }    
                }
                вот в /custom/Espo/Custom/Resources/metadata/clientDefs
                PHP Code:
                ..
                //
                    
                "filterList":[
                        
                "actual"
                    
                ],
                    
                "selectDefaultFilters": {
                        
                "filter""actual"
                    
                },
                    
                //
                .. 
                Attached Files

                Comment


                • #9
                  Здравствуйте,
                  а как вы назвали свой файл? У вас сущность называется 'Flat' а файл Flat.php? Имя класса должно совпадать с названием файла. И вы ранее упоминали поле 'isSale' но в фильтре используете 'sold=' => 'true'. Ваше поле "Продано" называется 'sold'? Раз так то тогда такой фильтр покажет не те записи которые еще не проданы, а те которые проданы (т.е. привязаны к контакту).

                  Comment

                  Working...
                  X