Jqgrid-free: свернуть все остальные развёрнутые субгриды

Задача: при развертывании нового субгрида, необходимо чтобы все остальные развернутые — сворачивались.

Решение:

	subGridRowExpanded: function(subgrid_id, row_id) {
                    $("#ezs_list").jqGrid('setSelection', row_id);
                    // свертываем все остальные субгриды
                    var rowIds = $("#ezs_list").getDataIDs();
                        $.each(rowIds, function (index, rowId) {
                            $("#ezs_list").collapseSubGridRow(rowId); 
                        });                    
                    
                    StationsGrid(subgrid_id, row_id);
		},

PostgreeSQL: добавление функций

Часто чтобы не плодить логику в приложении, проще часть функционала по вычислению чего-либо возложить на сервер БД. Для этого и нужны функции. Причем в Postgree мне они понравились много больше чем в MySQL в плане простоты и удобства.

Любая функция в PostgreeSQL начинается с объявления функции, перечисления используемых переменных, тела функции и в конце возврат результата выполнения функции.

Объявление функции:

CREATE OR REPLACE FUNCTION public.get_calculate_station_status(
	station_id integer) -- на входе параметр station_id - число  
    RETURNS integer -- возвращает число
    LANGUAGE 'plpgsql' -- язык 
plpgsql
AS $BODY$

Объявление переменных, идет после команды DECLARE. перечисляются заранее все переменные с указанием их типов, которые будут использоваться внутри функции. Например:

DECLARE
status integer; — число
st_online boolean; — true/false
stations integer[]; — массив чисел

Сама функция пишется непосредственно между BEGIN и END; Доступны элементарные условия:


 IF aa=bb THEN 
      bb:=1;
    ELSE 
      cc:=2;
END IF;

Поместить результат запроса в переменную или в массив:

select zz from xx into aa where vv=1;

Перебор массива:

FOREACH st_id IN ARRAY stations
    LOOP
       connectors_free:=connectors_free+get_count_connectors_free(st_id);
	   stations_online:=stations_online+1;
    END LOOP;

Результирующий пример готовой функции:

DECLARE
 status integer;
 stations integer[];
 connectors_free integer;
 stations_online integer;
 st_id integer;
BEGIN    		
  status:=get_ezs_status(ezs_id);
  if status=1 THEN
    connectors_free:=0;
	stations_online:=0;
  	stations:=ARRAY (select station from stations_online inner join stations on stations.id=station where stations.ezs=ezs_id  and stations.status=1 and deleted=false);
	FOREACH st_id IN ARRAY stations
    LOOP
       connectors_free:=connectors_free+get_count_connectors_free(st_id);
	   stations_online:=stations_online+1;
    END LOOP;
	IF stations_online>0 THEN
		if connectors_free>0 THEN
			status:=1;
		ELSE
			status:=4;
		END IF;
		
	ELSE
	  	status:=5;
	END IF;
  END IF;
  return status;
END;

JqGrid-Free: в модальных окнах Bootstrap 4 не активны поля Input

Неожиданно обнаружилось, что в модальных окнах использование jqgrid черевато тем, что в вызываемых диалогах add / edit не работают поля select и input.

Купирование проблемы (не решение): в модальном окне заменить tabindex=»-1″ на style=»overflow:hidden;»

<div class="modal hide fade" id="DialogWindowModal" style="overflow:hidden;" role="dialog" aria-labelledby="DialogWindowModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="DialogWindowModalName">Диалоговое окно</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body" id="DialogWindowModalDiv">
                                                         
      </div>   
    </div>
  </div>
</div>

PostgreeSQL: INSERT or UPDATE в запросе

В Postgree очень удобно реализовывать механизм защиты от избыточной вставки одинаковых значений.

  1. Назначаем на колонки таблицы контроль уникальности
 CONSTRAINT control_un_key UNIQUE (dtfrom_utc)
        INCLUDE(tar_id,user_group),

2. Далее при вставке достаточно указать что то в духе:

INSERT INTO tars_list
                ( dtfrom_utc, tar_id, user_group)
         VALUES (:dtfrom_utc,:tar_id,:user_group) ON CONFLICT  DO NOTHING

Одно плохое НО. Проверка уникальности не будет работать, если в полях есть null

JQGrid Free: вставка html в ячейку

Свободная редакция слегка отличается от не свободной. А потому вставка кода HTML в ячейку осуществляется несколько по иному:

                    {name:'deleted',       index:'deleted',fixed:true,width:15,search: false,editable:false,
                        formatter: function(cellvalue, options, rowobject){
                            if (cellvalue==true){
                                return '<i class="fas fa-times"></i>'; 
                            } else {
                                return "";
                            };
                            
                      }},  

Получается что то вроде:

1 15 16 17 18 19 55