---------------------------------------------------
-- 기초 계획 작업 관련 기초 코드 
---------------------------------------------------

-- 법정검사기관 
-- CREATE TABLE FacoCoperation
CREATE TABLE FmsWorkCodeLegalInspectionAgency
(
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	InspectionAgencyId	int  identity(1,1) NOT NULL ,	-- 법정검사기관 고유번호
	Name				nvarchar(24)  NOT NULL ,		-- 법정검사기관 이름
	
	IsUse				bit  NULL ,						-- 사용 유무

	PRIMARY KEY (SiteId ASC , InspectionAgencyId ASC)
);
DBCC CHECKIDENT( FmsWorkCodeLegalInspectionAgency, RESEED, 1 )

-- 휴일작업 유형
-- CREATE TABLE FacoHoliday
CREATE TABLE FmsWorkCodeHolidayWorkType
(
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	HolidayWorkTypeId   int  NOT NULL ,					-- 휴일 작업 유형 고유번호 (근무, 익일, 등)
	Name				nvarchar(50)  NULL ,			-- 휴일 작업 유형 명칭

	IsUse				bit  NULL ,						-- 사용 유무
	
	PRIMARY KEY (SiteId ASC , HolidayWorkTypeId ASC)
);

INSERT INTO FmsWorkCodeHolidayWorkType VALUES(1, 0, '사용 안 함', 1);
INSERT INTO FmsWorkCodeHolidayWorkType VALUES(1, 1, '휴일작업', 1);
INSERT INTO FmsWorkCodeHolidayWorkType VALUES(1, 2, '익일작업', 1);


-- 주기 단위 코드
--CREATE TABLE FmsFacoUnit
CREATE TABLE FmsWorkCodeCycleUnit
(
	SiteId				int				NOT NULL ,	-- 현장 고유번호
	CycleUnitId         int				NOT NULL ,	-- 주기 단위 고유번호
	Name				nvarchar(24)	NOT NULL ,	-- 주기 단위명
	[Description]		nvarchar(200)	NULL ,		-- 설명

	PRIMARY KEY (SiteId ASC , CycleUnitId ASC)
);

---------------------------------------------------
-- 점검계획관리 (기초계획)
---------------------------------------------------



-- facility_schedule_schedule_FascSchedule
-- 점검계획관리
-- 시설 관리/점검계획/점검계획관리
--CREATE TABLE FascSchedule
-- 기초계획으로 변경, WorkTypeId에 따라 점검계획과 법정검사로 구분
CREATE TABLE FmsWorkSchedule
(
	SiteId				int					NOT NULL ,	-- 현장 고유번호
	WorkScheduleId      int identity(1,1)	NOT NULL ,	-- 기초계획 고유번호
	WorkTypeId          int					NOT NULL ,	-- 작업유형 (1: 점검그룹, 2: 법정검사그룹, 3: 민원)
	BusinessFieldId     int					NOT NULL ,	-- 업무유형 고유번호
	Name				nvarchar(100)		NOT NULL ,	-- 실행계획 이름

	CycleSize           int					NOT NULL ,	-- 설비스케쥴 주기 크기 (1시, 1일, 1월)
	CycleUnitId         int					NOT NULL ,	-- 주기단위 고유번호 (시, 일, 월)
	HolidayWorkTypeId   int					NOT NULL ,	-- 휴일 작업 유형 고유번호
	
	InspectionAgencyId	int					NULL ,		-- 법정검사기관 고유번호(법정검사인 경우만 사용)
	
	WorkDueDate			datetime			NOT NULL ,	-- 차기작업예정일(작업확인시 계산하여 수정됨)
	
	UpdateUserId		nvarchar(24)		NOT NULL ,  -- 최근 수정한 사람(작업요청자, 작업지시자로 설정됨)

	IsUse				bit					NOT NULL ,	-- 사용 유무
	IsAutoOrder			bit					NOT NULL ,	-- 자동 지시

	PRIMARY KEY (SiteId ASC , WorkScheduleId ASC)
);
DBCC CHECKIDENT( FmsWorkSchedule, RESEED, 1 )

CREATE TABLE FmsWorkScheduleToFacility
(
	SiteId				int  NOT NULL ,					-- 현장 고유번호
	WorkScheduleId		int  NOT NULL ,					-- 기초계획 고유번호
	FacilityCode        int  NOT NULL ,					-- 설비코드
	
	PRIMARY KEY (SiteId ASC , WorkScheduleId ASC , FacilityCode ASC)
);

---------------------------------------------------
-- 기초코드관리 FK
---------------------------------------------------
ALTER TABLE FmsWorkCodeLegalInspectionAgency
	ADD CONSTRAINT FK__FmsWorkCodeLegalInspectionAgency__CmSite
		FOREIGN KEY (SiteId) REFERENCES CmSite(SiteId)
;

ALTER TABLE FmsWorkCodeHolidayWorkType
	ADD CONSTRAINT FK__FmsWorkCodeHolidayWorkType__CmSite
		FOREIGN KEY (SiteId) REFERENCES CmSite(SiteId)
;

ALTER TABLE FmsWorkCodeCycleUnit
	ADD CONSTRAINT FK__FmsWorkCodeCycleUnit__CmSite
		FOREIGN KEY (SiteId) REFERENCES CmSite(SiteId)
;

-- 시설 점검 항목 주기 FK
ALTER TABLE FmsFacilityCheckItem
	ADD CONSTRAINT FK__FmsFacilityCheckItem__FmsWorkCodeCycleUnit 
		FOREIGN KEY (SiteId , CycleUnitId) REFERENCES FmsWorkCodeCycleUnit(SiteId , CycleUnitId)
;

---------------------------------------------------
-- 점검계획관리(기초계획) FK
---------------------------------------------------

--ALTER TABLE FmsWorkSchedule
--	ADD CONSTRAINT FK__FmsWorkSchedule__FmsWorkCodeCycleType 
--		FOREIGN KEY (SiteId , CycleTypeId) REFERENCES FmsWorkCodeCycleType(SiteId , CycleTypeId)
--;

ALTER TABLE FmsWorkSchedule
	ADD CONSTRAINT FK__FmsWorkSchedule__FmsWorkCodeCycleUnit 
		FOREIGN KEY (SiteId , CycleUnitId) REFERENCES FmsWorkCodeCycleUnit(SiteId , CycleUnitId)
;

ALTER TABLE FmsWorkSchedule
	ADD CONSTRAINT FK__FmsWorkSchedule__FmsWorkCodeHolidayWorkType
		FOREIGN KEY (SiteId , HolidayWorkTypeId) REFERENCES FmsWorkCodeHolidayWorkType(SiteId , HolidayWorkTypeId)
;

ALTER TABLE FmsWorkSchedule
	ADD CONSTRAINT FK__FmsWorkSchedule__CmBusinessField 
		FOREIGN KEY (SiteId , BusinessFieldId) REFERENCES CmBusinessField(SiteId , BusinessFieldId)
;


ALTER TABLE FmsWorkSchedule
	ADD CONSTRAINT FK__FmsWorkSchedule__CmUser
		FOREIGN KEY (SiteId , UpdateUserId) REFERENCES CmUser(SiteId , UserId)
;

ALTER TABLE FmsWorkSchedule
	ADD CONSTRAINT FK__FmsWorkSchedule__FmsWorkCodeLegalInspectionAgency
		FOREIGN KEY (SiteId , InspectionAgencyId) REFERENCES FmsWorkCodeLegalInspectionAgency(SiteId , InspectionAgencyId)
;


ALTER TABLE FmsWorkScheduleToFacility
	ADD CONSTRAINT FK__FmsWorkScheduleToFacility__FmsWorkSchedule 
		FOREIGN KEY (SiteId , WorkScheduleId) REFERENCES FmsWorkSchedule(SiteId , WorkScheduleId)
;

ALTER TABLE FmsWorkScheduleToFacility
	ADD CONSTRAINT FK__FmsWorkScheduleToFacility__CmFacility 
		FOREIGN KEY (SiteId , FacilityCode) REFERENCES CmFacility(SiteId , FacilityCode)
;


-- 제거됨
-- 시설관리/기초 코드 관리/자동 지시 구분 코드 
--CREATE TABLE FacoOrder
--CREATE TABLE FmsFacilityCodeOrder
--(
--	SiteId				int  NOT NULL ,					-- 현장 고유번호
--	OrderId             int  NOT NULL ,					-- 작업지시 고유번호
--	Name				nvarchar(50)  NOT 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 , OrderId ASC)
--);


---- 시설 관리/기초 코드 관리/주기 구분 코드 무조건 정기으로 설정되기 때문에 제거됨
----CREATE TABLE FacoKind
--CREATE TABLE FmsWorkCodeCycleType
--(
--	SiteId				int  NOT NULL ,					-- 현장 고유번호	
--	CycleTypeId         int  NOT NULL ,					-- 주기유형 고유번호	
--	Name				nvarchar(50)  NOT NULL ,		-- 주기명

--	IsUse				bit  NULL ,						-- 사용 유무

--	PRIMARY KEY (SiteId ASC , CycleTypeId ASC)
--);



--ALTER TABLE FmsWorkCodeCycleType
--	ADD CONSTRAINT FK__FmsWorkCodeCycleType__CmSite
--	FOREIGN KEY (SiteId) REFERENCES CmSite(SiteId)
--;