--
--


--
-- Name: SCHEMA public; Type: COMMENT; Schema: -; Owner: postgres
--

COMMENT ON SCHEMA public IS 'Standard public schema';


--
-- Name: regacd; Type: SCHEMA; Schema: -; Owner: masm
--

CREATE SCHEMA regacd;


ALTER SCHEMA regacd OWNER TO masm;

--
-- Name: plpgsql; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: 
--

CREATE PROCEDURAL LANGUAGE plpgsql;



--
-- Name: insc_registra_grupo(integer, integer, boolean, boolean, boolean); Type: FUNCTION; Schema: regacd; Owner: masm
--

CREATE FUNCTION insc_registra_grupo(integer, integer, boolean, boolean, boolean) RETURNS text
    AS $_$
declare
  v_tid alias for $1; -- trayectoria id
  v_gid alias for $2; -- grupo id
  v_perm alias for $3; -- si el alumno tiene o no permiso
  v_ignora_cupo alias for $4; -- verdadero si no tenemos que revisar el cupo.
  v_revisa alias for $5; -- si el alumno tiene o no permiso
  v_als int;
  v_grupo record;
  v_tray record;
  v_rec record;
  v_err text;
  v_map_el boolean := false;
  v_a22 boolean := false;
  v_gid_map int;
begin
  select asignatura_id, tipo_id, año_semestre, cupo, alumnos
    into v_grupo
    from regacd.grupo where id = v_gid for update;
  if not found then
    raise exception 'El grupo con id % no está registrado en la base de datos.', v_gid;
  end if;
  raise notice 'registra_grupo tid: % gid: % asignatura_id: % año semestre: %', v_tid, v_gid, v_grupo.asignatura_id, v_grupo.año_semestre;
  return null;
end;
$_$
    LANGUAGE plpgsql;


ALTER FUNCTION regacd.insc_registra_grupo(integer, integer, boolean, boolean, boolean) OWNER TO masm;



--
-- Name: grupo; Type: TABLE; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE TABLE grupo (
    id integer DEFAULT nextval(('regacd.grupo_sid'::text)::regclass) NOT NULL,
    version integer DEFAULT 1 NOT NULL,
    tipo_id "char" NOT NULL,
    estado_id "char" DEFAULT 'b'::"char" NOT NULL,
    "año_semestre" integer NOT NULL,
    asignatura_id integer NOT NULL,
    clave character(4) NOT NULL,
    cupo integer,
    alumnos integer DEFAULT 0 NOT NULL,
    nota text,
    "subtítulo" text,
    programa text,
    CONSTRAINT "AlumnosMayorQueCero" CHECK ((alumnos >= 0)),
    CONSTRAINT "ClaveFormadaPorDígitosYLetrasMayúsculas" CHECK ((clave ~ '^[0-9A-Z]{4}$'::text)),
    CONSTRAINT "CupoMayorQueCero" CHECK ((cupo >= 0))
);


ALTER TABLE regacd.grupo OWNER TO masm;

--
-- Name: registro; Type: TABLE; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE TABLE registro (
    id integer DEFAULT nextval(('regacd.registro_sid'::text)::regclass) NOT NULL,
    version integer DEFAULT 1 NOT NULL,
    grupo_id integer NOT NULL,
    trayectoria_id integer NOT NULL,
    "calificación_id" integer,
    estado_id "char" DEFAULT 'a'::"char" NOT NULL,
    folio_acta integer,
    orden_acta integer,
    CONSTRAINT "FolioActaEnteroPositivo" CHECK ((folio_acta > 0)),
    CONSTRAINT "OrdenActaMayorQueCero" CHECK ((orden_acta > 0)),
    CONSTRAINT "OrdenActaMenorQue25" CHECK ((orden_acta <= 25)),
    CONSTRAINT "UnRegistroCerradoRequiereCalificación" CHECK (((estado_id <> 'd'::"char") OR ("calificación_id" IS NOT NULL)))
);


ALTER TABLE regacd.registro OWNER TO masm;

--
-- Name: AsignaturClaveGrupoÚnicaPorAñoSemestre; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY grupo
    ADD CONSTRAINT "AsignaturClaveGrupoÚnicaPorAñoSemestre" UNIQUE ("año_semestre", tipo_id, asignatura_id, clave);


--
-- Name: AsignaturClaveGrupoÚnicaPorAñoSemestre2; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY grupo
    ADD CONSTRAINT "AsignaturClaveGrupoÚnicaPorAñoSemestre2" UNIQUE ("año_semestre", tipo_id, clave, asignatura_id);


--
-- Name: IdTipoIdÚnico; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY grupo
    ADD CONSTRAINT "IdTipoIdÚnico" UNIQUE (id, tipo_id);


--
-- Name: RegistroAlumnoGrupoÚnico; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY registro
    ADD CONSTRAINT "RegistroAlumnoGrupoÚnico" UNIQUE (trayectoria_id, grupo_id);


--
-- Name: grupo_pkey; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY grupo
    ADD CONSTRAINT grupo_pkey PRIMARY KEY (id);


--
-- Name: registro_pkey; Type: CONSTRAINT; Schema: regacd; Owner: masm; Tablespace: 
--

ALTER TABLE ONLY registro
    ADD CONSTRAINT registro_pkey PRIMARY KEY (id);


--
-- Name: grupo_asignatura; Type: INDEX; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE INDEX grupo_asignatura ON grupo USING btree (asignatura_id);


--
-- Name: registro_folio; Type: INDEX; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE INDEX registro_folio ON registro USING btree (folio_acta);


--
-- Name: registro_grupo; Type: INDEX; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE INDEX registro_grupo ON registro USING btree (grupo_id);


--
-- Name: registro_trayectoria; Type: INDEX; Schema: regacd; Owner: masm; Tablespace: 
--

CREATE INDEX registro_trayectoria ON registro USING btree (trayectoria_id);


--
-- Name: public; Type: ACL; Schema: -; Owner: postgres
--

REVOKE ALL ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON SCHEMA public FROM postgres;
GRANT ALL ON SCHEMA public TO postgres;
GRANT ALL ON SCHEMA public TO PUBLIC;


--
--

