F2.1: exigir GPS y foto antes de un Hallazgo
This commit is contained in:
@@ -91,6 +91,64 @@ export class PhaseF21FieldInventory1789668000000 implements MigrationInterface {
|
|||||||
)
|
)
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
await queryRunner.query(`
|
||||||
|
CREATE OR REPLACE FUNCTION enforce_field_inventory_capture_before_finding()
|
||||||
|
RETURNS trigger
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
AS $$
|
||||||
|
DECLARE
|
||||||
|
finding_visit_id uuid;
|
||||||
|
BEGIN
|
||||||
|
SELECT act.visit_id INTO finding_visit_id
|
||||||
|
FROM inspection_acts act
|
||||||
|
WHERE act.id = NEW.act_id;
|
||||||
|
|
||||||
|
IF finding_visit_id IS NULL THEN
|
||||||
|
RETURN NEW;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM asset_field_discoveries discovery
|
||||||
|
WHERE discovery.visit_id = finding_visit_id
|
||||||
|
AND discovery.asset_id = NEW.asset_id
|
||||||
|
) THEN
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM asset_field_capture_events capture
|
||||||
|
WHERE capture.visit_id = finding_visit_id
|
||||||
|
AND capture.asset_id = NEW.asset_id
|
||||||
|
AND capture.event_type = 'CREATED'
|
||||||
|
) THEN
|
||||||
|
RAISE EXCEPTION USING
|
||||||
|
ERRCODE = '23514',
|
||||||
|
MESSAGE = 'FIELD_INVENTORY_GPS_REQUIRED';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF NOT EXISTS (
|
||||||
|
SELECT 1
|
||||||
|
FROM asset_field_capture_events capture
|
||||||
|
WHERE capture.visit_id = finding_visit_id
|
||||||
|
AND capture.asset_id = NEW.asset_id
|
||||||
|
AND capture.event_type = 'PHOTO'
|
||||||
|
) THEN
|
||||||
|
RAISE EXCEPTION USING
|
||||||
|
ERRCODE = '23514',
|
||||||
|
MESSAGE = 'FIELD_INVENTORY_PHOTO_REQUIRED';
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN NEW;
|
||||||
|
END
|
||||||
|
$$
|
||||||
|
`);
|
||||||
|
await queryRunner.query(`
|
||||||
|
CREATE TRIGGER trg_inspection_findings_field_capture
|
||||||
|
BEFORE INSERT OR UPDATE OF act_id, asset_id ON inspection_findings
|
||||||
|
FOR EACH ROW
|
||||||
|
EXECUTE FUNCTION enforce_field_inventory_capture_before_finding()
|
||||||
|
`);
|
||||||
|
|
||||||
const appRole = process.env.DB_APP_USER;
|
const appRole = process.env.DB_APP_USER;
|
||||||
if (!appRole) throw new Error('Missing required environment variable: DB_APP_USER');
|
if (!appRole) throw new Error('Missing required environment variable: DB_APP_USER');
|
||||||
const applicationRole = quoteIdentifier(appRole);
|
const applicationRole = quoteIdentifier(appRole);
|
||||||
@@ -116,6 +174,9 @@ export class PhaseF21FieldInventory1789668000000 implements MigrationInterface {
|
|||||||
$$
|
$$
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
await queryRunner.query(`DROP TRIGGER IF EXISTS trg_inspection_findings_field_capture ON inspection_findings`);
|
||||||
|
await queryRunner.query(`DROP FUNCTION IF EXISTS enforce_field_inventory_capture_before_finding()`);
|
||||||
|
|
||||||
await queryRunner.query(`ALTER TABLE inspection_visit_asset_events DROP CONSTRAINT chk_inspection_visit_asset_events_type`);
|
await queryRunner.query(`ALTER TABLE inspection_visit_asset_events DROP CONSTRAINT chk_inspection_visit_asset_events_type`);
|
||||||
await queryRunner.query(`
|
await queryRunner.query(`
|
||||||
ALTER TABLE inspection_visit_asset_events
|
ALTER TABLE inspection_visit_asset_events
|
||||||
|
|||||||
Reference in New Issue
Block a user