-- 3.5.57 Power
-- Переименовать таблицу 'Кабель' в 'Отрезок_кабеля'
EXEC sp_rename 'Кабель', 'Отрезок_кабеля'
GO
EXEC sp_rename 'Отрезок_кабеля.Код_кабеля', 'Код_отрезка_кабеля', 'COLUMN'
GO
--ALTER TABLE Отрезок_кабеля
--DROP COLUMN Количество_параллельных
--GO
--ALTER TABLE Отрезок_кабеля
--DROP COLUMN Код_условий_прокладки
--GO
---------------------------------------------------------------------
---------------------------------------------------------------------
---- Изменяем функцию GetLinesPieces
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetLinesPieces]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[GetLinesPieces]
GO

CREATE FUNCTION GetLinesPieces()
RETURNS @retObjs TABLE (LineID int, LineGUID nvarchar(64), LineObjTypeID int, PieceID int, PieceName nvarchar(100), ObjType int, ParentID int, model nvarchar(50), length float)
-- возвращает таблицу с кодами, именами, марками, длинами отрезков всех линий
AS
BEGIN
  insert into @retobjs 
    select 
      case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.Код_объекта
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.Код_объекта
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.Код_объекта
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.Код_объекта
       else NULL
     end as LineID
     ,case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.GUID
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.GUID
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.GUID
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.GUID
       else NULL
     end as LineGUID
     ,case
       when о2.Код_типа_объекта <= 10 or о2.Код_типа_объекта = 15 or о2.Код_типа_объекта = 16 then о2.Код_типа_объекта
       when о3.Код_типа_объекта <= 10 or о3.Код_типа_объекта = 15 or о3.Код_типа_объекта = 16 then о3.Код_типа_объекта
       when о4.Код_типа_объекта <= 10 or о4.Код_типа_объекта = 15 or о4.Код_типа_объекта = 16 then о4.Код_типа_объекта
       when о5.Код_типа_объекта <= 10 or о5.Код_типа_объекта = 15 or о5.Код_типа_объекта = 16 then о5.Код_типа_объекта
       else NULL
     end as LineObjTypeID
     ,о1.Код_объекта as PieceID
     ,о1.Наименование as PieceName
     ,о1.Код_типа_объекта as ObjType
     ,о1.Код_объекта_владельца as ParentID
     ,case 
        when о1.Код_типа_объекта = 43 then ск.Описание
        when о1.Код_типа_объекта = 45 then св.Описание
        else null
      end as Model
     ,case
        when о1.Код_типа_объекта = 43 then к.Длина
        when о1.Код_типа_объекта = 45 then в.Длина
        else null
      end as Length

    from Объект о1
    inner join Объект о2 on о2.Код_объекта = о1.Код_объекта_владельца
    left  join Объект о3 on о3.Код_объекта = о2.Код_объекта_владельца
    left  join Объект о4 on о4.Код_объекта = о3.Код_объекта_владельца
    left  join Объект о5 on о5.Код_объекта = о4.Код_объекта_владельца
    left  join Отрезок_кабеля к on к.Код_отрезка_кабеля = о1.Код_объекта
    left  join Справочник_кабелей ск ON ск.Код_типа_кабеля = к.Код_типа_кабеля
    left join Отрезок_ВЛЭП в ON в.Код_отрезка = о1.Код_объекта
    left join Справочник_проводов св ON св.Код_типа_провода = в.Код_типа_провода
    where (о1.Код_типа_объекта = 43 or о1.Код_типа_объекта = 45)
  
  RETURN
END
GO
PRINT 'Procedures/GetLinesPieces.sql'
GO
---------------------------------------------------------------------
---------------------------------------------------------------------
---- Создаем таблицу 'Кабель'
CREATE TABLE Кабель(
        Код_кабеля	int NOT NULL,
	Imax		float NULL,
	ImaxW		float NULL,
	Фазы		int NULL,
        PRIMARY KEY (Код_кабеля)
)
GO
ALTER TABLE Кабель WITH NOCHECK
        ADD FOREIGN KEY (Код_кабеля)
                              REFERENCES Объект
                              ON DELETE CASCADE
GO
---------------------------------------------------------------------
---------------------------------------------------------------------
---- Создаем таблицу 'Кабельная линия'
CREATE TABLE Кабельная_линия(
        Код_кл			int NOT NULL,
	Код_условий_прокладки	int NULL, -- 1: в земле, 2: по воздуху, 3: в трубе, 4: на эстакаде
        PRIMARY KEY (Код_кл)
)
GO
ALTER TABLE Кабельная_линия
        ADD FOREIGN KEY (Код_условий_прокладки)
                              REFERENCES Спр_условий_прокладки
GO
ALTER TABLE Кабельная_линия WITH NOCHECK
        ADD FOREIGN KEY (Код_кл)
                              REFERENCES Объект
                              ON DELETE CASCADE
GO
---------------------------------------------------------------------
---------------------------------------------------------------------
---- Изменяем таблицу 'Справочник_типов_объектов'
-- 'Кабель' теперь называется 'Отрезком кабеля'
UPDATE Справочник_типов_объектов SET 
Описание = 'Отрезок кабеля', Имя_папки = 'Отрезки кабелей'
WHERE Код_типа_объекта = 43
GO
-- добавляем 'Кабель'
SET IDENTITY_INSERT Справочник_типов_объектов ON
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE Код_типа_объекта = 91) 
  INSERT INTO Справочник_типов_объектов (Код_типа_объекта,Класс_объекта,Описание,Имя_папки) 
    VALUES (91,'Кабельные линии','Кабель','Кабели')

-- добавляем 'Кабельную линию'
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE Код_типа_объекта = 92) 
  INSERT INTO Справочник_типов_объектов (Код_типа_объекта,Класс_объекта,Описание,Имя_папки) 
    VALUES (92,'Кабельные линии','Кабельная линия','Кабельные линии')

SET IDENTITY_INSERT Справочник_типов_объектов OFF
GO
---------------------------------------------------------------------
---------------------------------------------------------------------
---- Изменяем таблицу 'Характеристики_типов_объектов'

--
-- для тех объектов куда раньше можно было добавлять 'Кабели' теперь можно добавлять 'Кабельные линии'
--

-- ЛЭП 110 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 6) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (6,92,1)

-- ЛЭП 35 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 7) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (7,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 7) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (7,92,1)

-- ЛЭП 10 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 8) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (8,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 8) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (8,92,1)

-- ЛЭП 6 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 9) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (9,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 9) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (9,92,1)

-- ЛЭП 0.4 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 10) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (10,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 10) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (10,92,1)

-- ЛЭП 3 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 15) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (15,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 15) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (15,92,1)

-- ЛЭП 150 кВ
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 16) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (16,92,0,1)
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 16) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = 1) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Верхний_уровень) VALUES (16,92,1)

-- Участок ЛЭП
IF NOT EXISTS (SELECT * FROM характеристики_типов_объектов WHERE (Код_типа_объекта = 30) AND (Код_типа_подобъекта = 92) AND (Верхний_уровень = NULL) )
  INSERT INTO характеристики_типов_объектов (Код_типа_объекта,Код_типа_подобъекта,Представлять_папкой,Разрешать_новые_подобъекты) VALUES (30,92,0,1)

-- в Каб линии можно добавлять Кабели
INSERT INTO характеристики_типов_объектов (Код_типа_объекта, Код_типа_подобъекта, Представлять_папкой, Разрешать_новые_подобъекты)
VALUES (92, 91, 0, 1)
-- в Кабели можно добавлять Отрезки кабеля
INSERT INTO характеристики_типов_объектов (Код_типа_объекта, Код_типа_подобъекта, Представлять_папкой, Разрешать_новые_подобъекты)
VALUES (91, 43, 0, 1)
-- в Кабели можно добавлять Муфты
INSERT INTO характеристики_типов_объектов (Код_типа_объекта, Код_типа_подобъекта, Представлять_папкой, Разрешать_новые_подобъекты)
VALUES (91, 32, 0, 1)
-- Муфты нельзя добавлять в Отрезки кабеля
DELETE FROM Характеристики_типов_объектов
WHERE Код_типа_объекта = 43 AND Код_типа_подобъекта = 32
