-------------------------------------------------
-- 기초코드관리
---------------------------------------------------


-- FagrFirst, FagrSecond, FagrThird 를 하나로 통합
CREATE TABLE FmsFacilityCodeClass
(
	SiteId					int  NOT NULL ,					-- 현장 고유번호
	FacilityClassId         int  identity(1,1) NOT NULL ,	-- 설비유형 고유번호
	ParentFacilityClassId   int  NULL ,						-- 상위설비 고유번호
	Depth					int  NOT NULL ,					-- 트리 깊이
	Name					nvarchar(80)  NOT NULL ,		-- 설비명

	Abbreviation			nvarchar(40)  NULL ,			-- 설비명 약어

	IsUse					bit  NULL ,						-- 사용 유무
	
	PRIMARY KEY (SiteId ASC , FacilityClassId ASC)
);
DBCC CHECKIDENT( FmsFacilityCodeClass, RESEED, 1 )

---------------------------------------------------
-- 시설관리
---------------------------------------------------

-- facility_facility_driveItem_FafaDriveItem
-- 운전일지 항목
-- 시설 관리/시설 관리/운전일지 항목
--CREATE TABLE FafaDriveItem
CREATE TABLE FmsFacilityOperationItem
(
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	FacilityCode        int  NOT NULL ,					-- 설비코드
	ItemId              int identity(1,1) NOT NULL ,	-- 설비요소 고유번호
	Name				nvarchar(100)  NULL ,			-- 설비요소 이름
	ResultUnit          nvarchar(10)  NOT NULL ,		-- 설비요소 단위
	PointId				nvarchar(50)  NULL ,			-- 관제점 고유번호
	SystemId            int  NULL ,						-- 시스템 고유번호
	EnergyCode          bit  NULL ,						-- 에너지 분류 고유번호

	IsUse				bit  NULL ,						-- 사용 유무
	SortOrderNo         int  NULL ,						-- 정렬 번호
	InsertedDate        datetime  NULL ,				-- 데이터 생성일
	InsertedUserId      nvarchar(24)  NULL ,			-- 데이터 생성자 고유번호
	UpdatedDate         datetime  NULL ,				-- 데이터 변경일
	UpdatedUserId       nvarchar(24)  NULL ,			-- 데이터 변경자 고유번호

	PRIMARY KEY (SiteId ASC , ItemId ASC)
);
DBCC CHECKIDENT( FmsFacilityOperationItem, RESEED, 1 )

-- CREATE TABLE FafaFacility
CREATE TABLE CmFacility
(
	SiteId				int		NOT NULL ,		-- 현장 고유번호
	FacilityTypeId		int		NOT NULL,		-- 시설 종류(no SiteId)
	FacilityCode		int		NOT NULL,		-- 시설 코드 FacilityCode
	FirstClassId		int		NULL,			-- 시설 분류 FirstId,SecondId,ThirdId
	SecondClassId		int		NULL,			-- 시설 분류 FirstId,SecondId,ThirdId
	ThirdClassId		int		NULL,			-- 시설 분류 FirstId,SecondId,ThirdId

	DeviceType			nvarchar(48) NULL,		-- 종류(no SiteId)
	ParentFacilityCode	int		NULL,			-- 상위시설 ParentFacility
	Name				nvarchar(80) NOT NULL,	-- 시설명칭 FacilityName
	Nickname			nvarchar(40) NULL,		-- 시설별칭 ShortName

	Rfid				nvarchar(52) NULL,		-- RFID
	Manufacturer		nvarchar(40) NULL,		-- 제조업체 MakeCompany
	ManufactureDate		date NULL,				-- 제조일 MakeDate
	ManufactureSerial	nvarchar(20) NULL,		-- 제조번호 MakeNumber
	ManufactureModel	nvarchar(40) NULL,		-- 제조모델 MakeModel

	Supplier			nvarchar(40) NULL,		-- 납품업체 DeliveryCompany
	SupplierPhoneNo		nvarchar(20) NULL,		-- 업체전화 DeliveryPhone
	BuildingId			int NULL ,				-- 설치위치(빌딩) BuildingId
	FloorId				int NULL ,				-- 설치위치(층) FloorId
	ZoneId				int NULL,				-- 설치위치 SettingPosition
	InstallDate			date NULL,				-- 설치일자 SettingDate
	OperationStartDate	date NULL,				-- 운영시작일 OperationStart
	
	FacilityCapacity	nvarchar(40) NULL,		-- 시설용량 FacilityBuffer 정격용량 등으로 쓰이며, 단위까지 입력하기 위해 문자열타입을 쓰기로 함.(2014-12-05) 그래프는 여기서 숫자만 빼서 사용한다. 수식은 직접 숫자입력함
	FacilityCost		int NULL,				-- 시설비용 FacilityMoney
	FacilityCount		int NULL,				-- 시설수량 FacilityCount
	FacilitySeviceLifeYear int NULL,			-- 내용연수 FacilityLimit
	FacilityUsage		nvarchar(80) NULL,		-- 사설용도 FacilityUsage

	RatedPowerConsumption nvarchar(40) NULL,				-- 정격소비전력
	RatedCOP			int NULL,				-- 표준 COP(밴더에서 제공하는)

	FileId				int NULL,				-- 이미지

	MainContactorUserId	nvarchar(24) NULL,		-- 정담당자 MainUser
	SubContactorUserId	nvarchar(24) NULL,		-- 부담당자 SubUser
	Note				nvarchar(1024) NULL,	-- 시설비고 FacilityComment

	Reserved1			nvarchar(64) NULL,
	Reserved2			nvarchar(64) NULL,
	
	IsUse				bit NULL,				-- 사용여부 DataFlag

	--AmountCheck          CHAR(1)  NULL , ?? 기존 테이블에는 있으나 어디에 사용하는지 확인 못함
	--AccountId           int  NULL , ?? 기존 테이블에는 있으나 어디에 사용하는지 확인 못함
	--EnterId             int  NULL , ?? 기존 테이블에는 있으나 어디에 사용하는지 확인 못함
	--PointId              nvarchar(30)  NULL , ?? 기존 테이블에는 있으나 어디에 사용하는지 확인 못함


	PRIMARY KEY (SiteId ASC , FacilityCode ASC)
);


-- 점검 항목
-- CREATE TABLE FafaItem
CREATE TABLE FmsFacilityCheckItem
(
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	FacilityCode        int  NOT NULL ,					-- 설비코드
	CheckItemId         int  identity(1,1) NOT NULL ,	-- 확인항목 고유번호
	WorkTypeId          int  NOT NULL ,					-- 작업유형 고유번호(정기점검, 법정검사)
	CycleUnitId			int  NOT NULL ,					-- 점검 주기
	Name				nvarchar(100)  NOT NULL ,		-- 항목명
	
	IsYesNoResult		bit  NOT NULL ,					-- 예, 아니오 결과 여부(아니오면 직접 입력)
				
	IsUse				bit  NULL ,						-- 사용 유무
	
	PRIMARY KEY (SiteId ASC, CheckItemId ASC, FacilityCode ASC)
);
DBCC CHECKIDENT( FmsFacilityCheckItem, RESEED, 1 )


--CREATE TABLE FamaManual
CREATE TABLE FmsFacilityManual
(	
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	FacilityCode		int  NOT NULL ,					-- 설비코드
	ManualId            int  identity(1,1) NOT NULL ,	-- 설비매뉴얼 고유번호
	BusinessFieldId     int  NOT NULL ,					-- 사업영역 고유번호

	Name				nvarchar(100)  NULL ,			-- 설비매뉴얼 이름
	[Description]		nvarchar(1024)  NULL ,			-- 설비매뉴얼 설명
	Keyword				nvarchar(100)  NULL ,			-- 색인, 키워드
	FileId				int  NULL ,						-- 파일 고유번호

	IsUse				bit  NULL ,						-- 사용 유무
	
	PRIMARY KEY( SiteId ASC, FacilityCode ASC, ManualId ASC )
);
DBCC CHECKIDENT( FmsFacilityManual, RESEED, 1 )

--CREATE INDEX Index_CmFacilityManual_SiteId_FacilityCode ON FmsFacilityManual(SiteId,FacilityCode)



---------------------------------------------------
-- 시설관리
---------------------------------------------------


ALTER TABLE FmsFacilityOperationItem
	ADD CONSTRAINT FK__FmsFacilityOperationItem__CmFacility FOREIGN KEY (SiteId , FacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
;

--ALTER TABLE FmsFacilityOperationItem
--	ADD  FOREIGN KEY (systemId, pointId) REFERENCES FmsBapoMaster(systemId, pointId)
--;

ALTER TABLE FmsFacilityCodeClass
	ADD CONSTRAINT FK__FmsFacilityCodeClass__CmSite
		FOREIGN KEY (SiteId) REFERENCES CmSite(SiteId)
;

ALTER TABLE FmsFacilityCodeClass
	ADD CONSTRAINT FK__FmsFacilityCodeClass__FmsFacilityCodeClass 
		FOREIGN KEY (SiteId , ParentFacilityClassId) REFERENCES FmsFacilityCodeClass(SiteId , FacilityClassId)
;


ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmFacility FOREIGN KEY (SiteId , ParentFacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__BemsFacilityType 
	FOREIGN KEY (FacilityTypeId) REFERENCES BemsFacilityType(FacilityTypeId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__FmsFacilityCodeClassAsFirst FOREIGN KEY (SiteId , FirstClassId) REFERENCES FmsFacilityCodeClass(SiteId , FacilityClassId)
;
ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__FmsFacilityCodeClassAsSecond FOREIGN KEY (SiteId , SecondClassId) REFERENCES FmsFacilityCodeClass(SiteId , FacilityClassId)
;
ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__FmsFacilityCodeClassAsThird FOREIGN KEY (SiteId , ThirdClassId) REFERENCES FmsFacilityCodeClass(SiteId , FacilityClassId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmBuilding FOREIGN KEY (SiteId , BuildingId) REFERENCES CmBuilding(SiteId , BuildingId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmFloor FOREIGN KEY (SiteId , BuildingId , FloorId) REFERENCES CmFloor(SiteId , BuildingId , FloorId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmZone FOREIGN KEY (SiteId , BuildingId , FloorId , ZoneId) REFERENCES CmZone(SiteId , BuildingId , FloorId , ZoneId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmUserAsMainContactorUserId FOREIGN KEY (SiteId , MainContactorUserId) REFERENCES CmUser(SiteId , UserId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmUserAsSubContactorUserId FOREIGN KEY (SiteId , SubContactorUserId) REFERENCES CmUser(SiteId , UserId)
;

ALTER TABLE CmFacility
	ADD CONSTRAINT FK__CmFacility__CmFile FOREIGN KEY (SiteId , FileId) REFERENCES CmFile(SiteId , FileId)
;


ALTER TABLE FmsFacilityCheckItem
	ADD CONSTRAINT FK__FmsFacilityCheckItem__CmFacility FOREIGN KEY (SiteId , FacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
;


ALTER TABLE FmsFacilityManual
	ADD  FOREIGN KEY (SiteId , FacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
;
ALTER TABLE FmsFacilityManual
	ADD  FOREIGN KEY (SiteId , BusinessFieldId) REFERENCES CmBusinessField(SiteId , BusinessFieldId)
;

-- 작업관리로 이동
--ALTER TABLE FmsFacilityCheckItem
--	ADD  FOREIGN KEY (TypeId) REFERENCES FmsWorkCodeType(TypeId)
--;

--ALTER TABLE FmsFamaFile
--	ADD  FOREIGN KEY (FacilityCode,ManualId) REFERENCES FmsFacilityManual(FacilityCode,ManualId)
--;

--ALTER TABLE FmsFacilityManual
--	ADD  FOREIGN KEY (SiteId , FacilityClassId) REFERENCES FmsFacilityCodeClass(SiteId , FacilityClassId)
--;

-- facility/manual/file
--CREATE TABLE FamaFile
--CREATE TABLE FmsFacilityManualFile
--(
--	FacilityCode		nvarchar(32)  NOT NULL ,
--	ManualId            int NOT NULL ,
--	ManualFilename      nvarchar(255)  NOT NULL ,
--	--FilePath             nvarchar(200)  NOT NULL ,
--	--FileSize             numeric(10,0)  NOT NULL ,
--	--FileType             nvarchar(100)  NULL ,
--	InsertedDate        datetime  NULL ,
--	InsertedUserId      nvarchar(24)  NULL ,
--	UpdatedDate         datetime  NULL ,
--	UpdatedUserId       nvarchar(24)  NULL ,
--	PRIMARY KEY (ManualId ASC)
--);


----CREATE TABLE FagrFirst
--CREATE TABLE FmsFacilityCodeClassFirst
--(
--	FirstId              int NOT NULL ,
--	FirstShortName       nvarchar(50)  NULL ,
--	FirstName            nvarchar(50)  NOT NULL ,
--	SortOrderNo             int  NULL ,
--	IsUse             bit  NULL ,
--	InsertedDate        datetime  NULL ,
--	InsertedUserId      nvarchar(24)  NULL ,
--	UpdatedDate         datetime  NULL ,
--	UpdatedUserId       nvarchar(24)  NULL ,
--	 PRIMARY KEY (FirstId ASC)
--);


----CREATE TABLE FagrSecond
--CREATE TABLE FmsFacilityCodeClassSecond
--(
--	FirstId             int NOT NULL ,
--	SecondId            int NOT NULL ,
--	SecondShortName     nvarchar(50)  NULL ,
--	SecondName          nvarchar(50)  NULL ,

--	SortOrderNo            int  NULL ,
--	IsUse            bit  NULL ,
--	InsertedDate        datetime  NULL ,
--	InsertedUserId      nvarchar(24)  NULL ,
--	UpdatedDate         datetime  NULL ,
--	UpdatedUserId       nvarchar(24)  NULL ,
	
--	PRIMARY KEY (SecondId ASC)
--);


----CREATE TABLE FagrThird
--CREATE TABLE FmsFacilityCodeClassThird
--(
--	SecondId            int NOT NULL ,
--	ThirdId             int NOT NULL ,
--	ThirdShortName		nvarchar(50)  NULL ,
--	ThirdName           nvarchar(50)  NOT NULL ,
	
--	SortOrderNo            int  NULL ,
--	IsUse            bit  NULL ,
--	InsertedDate        datetime  NULL ,
--	InsertedUserId      nvarchar(24)  NULL ,
--	UpdatedDate         datetime  NULL ,
--	UpdatedUserId       nvarchar(24)  NULL ,
	
--	PRIMARY KEY (ThirdId ASC)
--);


--CREATE TABLE FafaFacility
--(
--	FacilityCode         nvarchar(32)  NOT NULL ,
--	RfidCode             nvarchar(50)  NULL ,
--	FirstId             int  NOT NULL ,
--	SecondId            int  NOT NULL ,
--	ThirdId             int  NOT NULL ,
--	ParentFacility       nvarchar(30)  NULL ,
--	FacilityName         nvarchar(100)  NOT NULL ,
--	ShortName            nvarchar(50)  NULL ,
--	FacilityUsage        nvarchar(200)  NULL ,
--	FacilityBuffer       nvarchar(50)  NULL ,
--	FacilityLimit        int  NULL ,
--	FacilityMoney        numeric(10,0)  NULL ,
--	FacilityComment      nvarchar(2000)  NULL ,
--	MakeCompany          nvarchar(50)  NULL ,
--	MakeDate             datetime  NULL ,
--	MakeNumber           nvarchar(50)  NULL ,
--	MakeModel            nvarchar(50)  NULL ,
--	DeliveryCompany      nvarchar(50)  NULL ,
--	DeliveryPhone        nvarchar(50)  NULL ,
--	BuildingId          int  NULL ,
--	FloorId             int  NULL ,
--	SettingPosition      nvarchar(50)  NULL ,
--	SettingDate          datetime  NULL ,
--	OperationStart       datetime  NULL ,
--	MainUser             nvarchar(10)  NOT NULL ,
--	SubUser              nvarchar(10)  NOT NULL ,
--	AmountCheck          CHAR(1)  NULL ,
--	AccountId           int  NULL ,
--	EnterId             int  NULL ,
--	PointId              nvarchar(30)  NULL ,
--	FacilityCnt          numeric(6,0)  NULL ,

--	SortOrderNo             int  NULL ,
--	IsUse             bit  NULL ,
--	InsertedDate        datetime  NULL ,
--	InsertedUserId      nvarchar(24)  NULL ,
--	UpdatedDate         datetime  NULL ,
--	UpdatedUserId       nvarchar(24)  NULL ,
--	PRIMARY KEY (FacilityCode ASC)
--);

-- CREATE TABLE FafaFile
-- 사용하지 않음
--CREATE TABLE CmFacilityFile
--(
--	SiteId				int  NOT NULL ,			-- 현장 고유번호
--	FacilityCode        int  NOT NULL ,			-- 설비코드
--	FileId              int  NOT NULL ,			-- 파일 고유번호

--	InsertedDate        datetime  NULL ,		-- 데이터 생성일
--	InsertedUserId      nvarchar(24)  NULL ,	-- 데이터 생성자 고유번호
--	UpdatedDate         datetime  NULL ,		-- 데이터 변경일
--	UpdatedUserId       nvarchar(24)  NULL ,	-- 데이터 변경자 고유번호

--	PRIMARY KEY (SiteId ASC , FacilityCode ASC , FileId ASC)
--);


--ALTER TABLE CmFacility
--	ADD  FOREIGN KEY (accountId) REFERENCES MacoAccount(accountId)
--;

--ALTER TABLE CmFacility
--	ADD  FOREIGN KEY (enterId) REFERENCES MacoEnter(enterId)
--;

--ALTER TABLE CmFacilityFile
--	ADD CONSTRAINT FK__CmFacilityFile__CmFacility FOREIGN KEY (SiteId , FacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
--;

--ALTER TABLE CmFacilityFile
--	ADD CONSTRAINT FK__CmFacilityFile__CmFile FOREIGN KEY (SiteId , FileId) REFERENCES CmFile(SiteId , FileId)
--;
