summaryrefslogtreecommitdiff
path: root/db/migrations/0377_same_sentry.sql
diff options
context:
space:
mode:
Diffstat (limited to 'db/migrations/0377_same_sentry.sql')
-rw-r--r--db/migrations/0377_same_sentry.sql150
1 files changed, 150 insertions, 0 deletions
diff --git a/db/migrations/0377_same_sentry.sql b/db/migrations/0377_same_sentry.sql
new file mode 100644
index 00000000..4ec10811
--- /dev/null
+++ b/db/migrations/0377_same_sentry.sql
@@ -0,0 +1,150 @@
+CREATE TABLE "purchase_request_attachments" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "request_id" integer NOT NULL,
+ "file_name" varchar(255) NOT NULL,
+ "original_file_name" varchar(255) NOT NULL,
+ "file_path" varchar(512) NOT NULL,
+ "file_size" integer,
+ "file_type" varchar(100),
+ "category" varchar(50) DEFAULT '설계문서' NOT NULL,
+ "description" varchar(500),
+ "created_by" integer NOT NULL,
+ "created_at" timestamp DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "purchase_requests" (
+ "id" serial PRIMARY KEY NOT NULL,
+ "request_code" varchar(50) NOT NULL,
+ "project_id" integer,
+ "project_code" varchar(100),
+ "project_name" varchar(255),
+ "project_company" varchar(255),
+ "project_site" varchar(255),
+ "class_no" varchar(50),
+ "package_no" varchar(50),
+ "package_name" varchar(255),
+ "major_item_material_category" varchar(100),
+ "major_item_material_description" varchar(255),
+ "sm_code" varchar(255),
+ "request_title" varchar(255) NOT NULL,
+ "request_description" text,
+ "estimated_budget" varchar(100),
+ "requested_delivery_date" timestamp with time zone,
+ "items" jsonb DEFAULT '[]'::jsonb,
+ "status" varchar(30) DEFAULT '작성중' NOT NULL,
+ "reject_reason" text,
+ "confirmed_at" timestamp with time zone,
+ "confirmed_by" integer,
+ "rfq_id" integer,
+ "rfq_code" varchar(50),
+ "rfq_created_at" timestamp with time zone,
+ "eng_pic_id" integer,
+ "eng_pic_name" varchar(50),
+ "purchase_pic_id" integer,
+ "purchase_pic_name" varchar(50),
+ "created_by" integer NOT NULL,
+ "updated_by" integer NOT NULL,
+ "created_at" timestamp DEFAULT now() NOT NULL,
+ "updated_at" timestamp DEFAULT now() NOT NULL,
+ CONSTRAINT "purchase_requests_request_code_unique" UNIQUE("request_code")
+);
+--> statement-breakpoint
+ALTER TABLE "purchase_request_attachments" ADD CONSTRAINT "purchase_request_attachments_request_id_purchase_requests_id_fk" FOREIGN KEY ("request_id") REFERENCES "public"."purchase_requests"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_request_attachments" ADD CONSTRAINT "purchase_request_attachments_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_project_id_projects_id_fk" FOREIGN KEY ("project_id") REFERENCES "public"."projects"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_confirmed_by_users_id_fk" FOREIGN KEY ("confirmed_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_eng_pic_id_users_id_fk" FOREIGN KEY ("eng_pic_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_purchase_pic_id_users_id_fk" FOREIGN KEY ("purchase_pic_id") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_created_by_users_id_fk" FOREIGN KEY ("created_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "purchase_requests" ADD CONSTRAINT "purchase_requests_updated_by_users_id_fk" FOREIGN KEY ("updated_by") REFERENCES "public"."users"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
+CREATE UNIQUE INDEX "request_file_idx" ON "purchase_request_attachments" USING btree ("request_id","file_name");--> statement-breakpoint
+CREATE VIEW "public"."purchase_requests_view" AS (
+ SELECT
+ pr.id,
+ pr.request_code,
+ pr.request_title,
+ pr.request_description,
+
+ -- 프로젝트 정보
+ pr.project_id,
+ pr.project_code,
+ pr.project_name,
+ pr.project_company,
+ pr.project_site,
+ pr.class_no,
+
+ -- 패키지 정보
+ pr.package_no,
+ pr.package_name,
+
+ -- 자재 정보
+ pr.major_item_material_category,
+ pr.major_item_material_description,
+ pr.sm_code,
+
+ -- 예산 및 납기
+ pr.estimated_budget,
+ pr.requested_delivery_date,
+
+ -- 아이템 정보
+ pr.items,
+ jsonb_array_length(pr.items) as item_count,
+ (
+ SELECT SUM((item->>'quantity')::numeric)
+ FROM jsonb_array_elements(pr.items) as item
+ ) as total_quantity,
+ (
+ SELECT SUM(
+ (item->>'quantity')::numeric *
+ COALESCE((item->>'estimatedUnitPrice')::numeric, 0)
+ )
+ FROM jsonb_array_elements(pr.items) as item
+ ) as total_estimated_amount,
+
+ -- 상태 정보
+ pr.status,
+ pr.reject_reason,
+
+ -- 확정 정보
+ pr.confirmed_at,
+ pr.confirmed_by,
+ cb.name as confirmed_by_name,
+
+ -- RFQ 정보
+ pr.rfq_id,
+ pr.rfq_code,
+ pr.rfq_created_at,
+
+ -- 담당자 정보
+ pr.eng_pic_id,
+ pr.eng_pic_name,
+ ep.email as eng_pic_email,
+
+ pr.purchase_pic_id,
+ pr.purchase_pic_name,
+ pp.email as purchase_pic_email,
+
+ -- 첨부파일 수
+ (
+ SELECT COUNT(*)
+ FROM purchase_request_attachments pra
+ WHERE pra.request_id = pr.id
+ ) as attachment_count,
+
+ -- 생성/수정 정보
+ pr.created_by,
+ cr.name as created_by_name,
+ cr.email as created_by_email,
+ pr.updated_by,
+ up.name as updated_by_name,
+ up.email as updated_by_email,
+ pr.created_at,
+ pr.updated_at
+
+ FROM purchase_requests pr
+ LEFT JOIN users cb ON cb.id = pr.confirmed_by
+ LEFT JOIN users ep ON ep.id = pr.eng_pic_id
+ LEFT JOIN users pp ON pp.id = pr.purchase_pic_id
+ LEFT JOIN users cr ON cr.id = pr.created_by
+ LEFT JOIN users up ON up.id = pr.updated_by
+ ); \ No newline at end of file