Migrations
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
-- Add justification column to attendance_logs for overtime check-ins
|
||||
ALTER TABLE attendance_logs ADD COLUMN IF NOT EXISTS justification text;
|
||||
|
||||
-- Overtime check-in RPC: creates overtime duty_schedule + attendance_log in one call.
|
||||
-- Returns the attendance log ID.
|
||||
CREATE OR REPLACE FUNCTION public.overtime_check_in(
|
||||
p_lat double precision,
|
||||
p_lng double precision,
|
||||
p_justification text DEFAULT NULL
|
||||
) RETURNS uuid
|
||||
LANGUAGE plpgsql SECURITY DEFINER
|
||||
AS $$
|
||||
DECLARE
|
||||
v_uid uuid := auth.uid();
|
||||
v_now timestamptz := now();
|
||||
v_schedule_id uuid;
|
||||
v_log_id uuid;
|
||||
v_end_time timestamptz;
|
||||
BEGIN
|
||||
IF v_uid IS NULL THEN
|
||||
RAISE EXCEPTION 'Not authenticated';
|
||||
END IF;
|
||||
|
||||
-- Overtime shift: start now, end after 8 hours (can be checked out earlier)
|
||||
v_end_time := v_now + interval '8 hours';
|
||||
|
||||
-- Create overtime duty schedule
|
||||
INSERT INTO duty_schedules (user_id, shift_type, start_time, end_time, status, check_in_at, check_in_location)
|
||||
VALUES (
|
||||
v_uid,
|
||||
-- Store as a normal shift_type to satisfy enum constraints;
|
||||
-- overtime semantics are captured by this RPC + log justification.
|
||||
'normal',
|
||||
v_now,
|
||||
v_end_time,
|
||||
'arrival'::duty_status,
|
||||
v_now,
|
||||
ST_SetSRID(ST_MakePoint(p_lng, p_lat), 4326)::geography
|
||||
)
|
||||
RETURNING id INTO v_schedule_id;
|
||||
|
||||
-- Create attendance log
|
||||
INSERT INTO attendance_logs (user_id, duty_schedule_id, check_in_at, check_in_lat, check_in_lng, justification)
|
||||
VALUES (v_uid, v_schedule_id, v_now, p_lat, p_lng, p_justification)
|
||||
RETURNING id INTO v_log_id;
|
||||
|
||||
RETURN v_log_id;
|
||||
END;
|
||||
$$;
|
||||
Reference in New Issue
Block a user