import { MigrationInterface, QueryRunner } from 'typeorm'; export class PhaseF11MultiActInspections1789495200000 implements MigrationInterface { name = 'PhaseF11MultiActInspections1789495200000'; public async up(queryRunner: QueryRunner): Promise { await queryRunner.query(` ALTER TABLE inspection_acts DROP CONSTRAINT IF EXISTS uq_inspection_acts_visit `); await queryRunner.query(` CREATE UNIQUE INDEX uq_inspection_acts_one_draft_per_visit ON inspection_acts (visit_id) WHERE status = 'DRAFT' `); await queryRunner.query(` ALTER TABLE inspection_reports DROP CONSTRAINT IF EXISTS uq_inspection_reports_visit `); await queryRunner.query(` CREATE INDEX idx_inspection_reports_visit_id ON inspection_reports (visit_id) `); await queryRunner.query(` ALTER TABLE inspection_act_signatures ADD COLUMN company_manifestation varchar(20), ADD COLUMN company_statement text `); await queryRunner.query(` UPDATE inspection_act_signatures SET company_manifestation = 'CONFORMITY' WHERE signer_type = 'COMPANY_RESPONSIBLE' AND status = 'SIGNED' `); await queryRunner.query(` ALTER TABLE inspection_act_signatures ADD CONSTRAINT chk_inspection_act_signatures_company_manifestation CHECK ( ( signer_type = 'COMPANY_RESPONSIBLE' AND status = 'SIGNED' AND company_manifestation IN ('CONFORMITY', 'DISSENT') AND ( (company_manifestation = 'CONFORMITY' AND company_statement IS NULL) OR (company_manifestation = 'DISSENT' AND LENGTH(TRIM(COALESCE(company_statement, ''))) >= 10) ) ) OR ( NOT (signer_type = 'COMPANY_RESPONSIBLE' AND status = 'SIGNED') AND company_manifestation IS NULL AND company_statement IS NULL ) ) `); } public async down(queryRunner: QueryRunner): Promise { await queryRunner.query(` DO $$ BEGIN IF EXISTS ( SELECT visit_id FROM inspection_acts GROUP BY visit_id HAVING COUNT(*) > 1 ) THEN RAISE EXCEPTION 'F1.1 no puede revertirse: existen inspecciones con mĂșltiples actas'; END IF; IF EXISTS ( SELECT visit_id FROM inspection_reports GROUP BY visit_id HAVING COUNT(*) > 1 ) THEN RAISE EXCEPTION 'F1.1 no puede revertirse: existen inspecciones con mĂșltiples informes'; END IF; IF EXISTS ( SELECT 1 FROM inspection_act_signatures WHERE company_manifestation = 'DISSENT' ) THEN RAISE EXCEPTION 'F1.1 no puede revertirse: existen firmas en disidencia'; END IF; END $$ `); await queryRunner.query(` ALTER TABLE inspection_act_signatures DROP CONSTRAINT chk_inspection_act_signatures_company_manifestation `); await queryRunner.query(` ALTER TABLE inspection_act_signatures DROP COLUMN company_statement, DROP COLUMN company_manifestation `); await queryRunner.query(`DROP INDEX idx_inspection_reports_visit_id`); await queryRunner.query(` ALTER TABLE inspection_reports ADD CONSTRAINT uq_inspection_reports_visit UNIQUE (visit_id) `); await queryRunner.query(`DROP INDEX uq_inspection_acts_one_draft_per_visit`); await queryRunner.query(` ALTER TABLE inspection_acts ADD CONSTRAINT uq_inspection_acts_visit UNIQUE (visit_id) `); } }