-- DROP SCHEMA Caja;

CREATE SCHEMA Caja;
-- Clinica.Caja.TipoCopago definition

-- Drop table

-- DROP TABLE Clinica.Caja.TipoCopago;

CREATE TABLE Clinica.Caja.TipoCopago (
	IdTipoCopago int NOT NULL,
	Descripcion varchar(256) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	CONSTRAINT PK__TipoCopa__686987A65B18635F PRIMARY KEY (IdTipoCopago)
);


-- Clinica.Caja.TipoEstadoCaja definition

-- Drop table

-- DROP TABLE Clinica.Caja.TipoEstadoCaja;

CREATE TABLE Clinica.Caja.TipoEstadoCaja (
	IdTipoEstadoCaja int NOT NULL,
	Descripcion varchar(256) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	CONSTRAINT PK__TipoEsta__EF7F67DF28F256A4 PRIMARY KEY (IdTipoEstadoCaja)
);


-- Clinica.Caja.TipoModalidadPago definition

-- Drop table

-- DROP TABLE Clinica.Caja.TipoModalidadPago;

CREATE TABLE Clinica.Caja.TipoModalidadPago (
	IdTipoModalidadPago int NOT NULL,
	Descripcion varchar(256) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	CONSTRAINT PK__TipoModa__75E5D9D9A542317F PRIMARY KEY (IdTipoModalidadPago)
);


-- Clinica.Caja.Caja definition

-- Drop table

-- DROP TABLE Clinica.Caja.Caja;

CREATE TABLE Clinica.Caja.Caja (
	IdCaja int IDENTITY(1,1) NOT NULL,
	Descripcion varchar(256) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	IdCentroMedico int NOT NULL,
	IdTipoEstadoCaja int NOT NULL,
	CONSTRAINT PK__Caja__3B7BF2C5479699CE PRIMARY KEY (IdCaja)
);


-- Clinica.Caja.CicloCaja definition

-- Drop table

-- DROP TABLE Clinica.Caja.CicloCaja;

CREATE TABLE Clinica.Caja.CicloCaja (
	IdCicloCaja int IDENTITY(1,1) NOT NULL,
	FechaApertura datetime NULL,
	IdUsuarioCajero int NOT NULL,
	SaldoInicial decimal(16,2) DEFAULT 0 NOT NULL,
	FechaCierre datetime NULL,
	SaldoFinal decimal(16,2) DEFAULT 0 NOT NULL,
	FechaValidacion datetime NULL,
	IdUsuarioValidacion int NULL,
	ArchivoPdfInicial varchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	ArchivoPdfFirmado varchar(512) COLLATE SQL_Latin1_General_CP1_CI_AS DEFAULT '' NOT NULL,
	IdCaja int DEFAULT 0 NOT NULL,
	CONSTRAINT PK__CicloCaj__F982EF8521A294AB PRIMARY KEY (IdCicloCaja)
);


-- Clinica.Caja.MovimientoCaja definition

-- Drop table

-- DROP TABLE Clinica.Caja.MovimientoCaja;

CREATE TABLE Clinica.Caja.MovimientoCaja (
	IdMovimientoCaja int IDENTITY(1,1) NOT NULL,
	IdCicloCaja int NOT NULL,
	IdCaja int NOT NULL,
	IdTipoModalidadPago int NOT NULL,
	IdTipoCopago int NOT NULL,
	Monto decimal(16,2) DEFAULT 0 NOT NULL,
	FechaMovimiento datetime NOT NULL,
	CONSTRAINT PK__Movimien__D126CD2D19B38750 PRIMARY KEY (IdMovimientoCaja)
);


-- Clinica.Caja.Caja foreign keys

ALTER TABLE Clinica.Caja.Caja ADD CONSTRAINT FK__Caja__IdCentroMe__2D67AF2B FOREIGN KEY (IdCentroMedico) REFERENCES Clinica.Clinica.CentroMedico(IdCentroMedico);
ALTER TABLE Clinica.Caja.Caja ADD CONSTRAINT FK__Caja__IdTipoEsta__2E5BD364 FOREIGN KEY (IdTipoEstadoCaja) REFERENCES Clinica.Caja.TipoEstadoCaja(IdTipoEstadoCaja);


-- Clinica.Caja.CicloCaja foreign keys

ALTER TABLE Clinica.Caja.CicloCaja ADD CONSTRAINT CicloCaja_Caja_FK FOREIGN KEY (IdCaja) REFERENCES Clinica.Caja.Caja(IdCaja);
ALTER TABLE Clinica.Caja.CicloCaja ADD CONSTRAINT FK__CicloCaja__IdUsu__3138400F FOREIGN KEY (IdUsuarioCajero) REFERENCES Clinica.Core.Usuario(IdUsuario);
ALTER TABLE Clinica.Caja.CicloCaja ADD CONSTRAINT FK__CicloCaja__IdUsu__3414ACBA FOREIGN KEY (IdUsuarioValidacion) REFERENCES Clinica.Core.Usuario(IdUsuario);


-- Clinica.Caja.MovimientoCaja foreign keys

ALTER TABLE Clinica.Caja.MovimientoCaja ADD CONSTRAINT FK__Movimient__IdCaj__3F865F66 FOREIGN KEY (IdCaja) REFERENCES Clinica.Caja.Caja(IdCaja);
ALTER TABLE Clinica.Caja.MovimientoCaja ADD CONSTRAINT FK__Movimient__IdCic__3E923B2D FOREIGN KEY (IdCicloCaja) REFERENCES Clinica.Caja.CicloCaja(IdCicloCaja);
ALTER TABLE Clinica.Caja.MovimientoCaja ADD CONSTRAINT FK__Movimient__IdTip__407A839F FOREIGN KEY (IdTipoModalidadPago) REFERENCES Clinica.Caja.TipoModalidadPago(IdTipoModalidadPago);
ALTER TABLE Clinica.Caja.MovimientoCaja ADD CONSTRAINT FK__Movimient__IdTip__416EA7D8 FOREIGN KEY (IdTipoCopago) REFERENCES Clinica.Caja.TipoCopago(IdTipoCopago);


-- Caja.VWCaja source

CREATE OR ALTER VIEW Caja.VWCaja AS

	SELECT
		c.IdCaja, c.Descripcion, m.IdCentroMedico, m.Descripcion as CentroMedico, ec.IdTipoEstadoCaja, ec.Descripcion as TipoEstadoCaja
	FROM
		Caja.Caja c
	JOIN Clinica.CentroMedico m ON c.IdCentroMedico = m.IdCentroMedico
	JOIN Caja.TipoEstadoCaja ec on c.IdTipoEstadoCaja = ec.IdTipoEstadoCaja;


-- Caja.VWMovimientoCaja source

CREATE OR ALTER VIEW Caja.VWMovimientoCaja AS
SELECT 
    mc.IdMovimientoCaja,
    mc.IdCicloCaja,
    mc.IdCaja,
    mc.IdTipoModalidadPago,
    mc.IdTipoCopago,
    mc.Monto,
    mc.FechaMovimiento,
    c.Descripcion AS Caja,
    mp.Descripcion AS TipoModalidadPago,
    tc.Descripcion AS TipoCopago
FROM 
    Clinica.Caja.MovimientoCaja mc
INNER JOIN 
    Clinica.Caja.Caja c ON mc.IdCaja = c.IdCaja
INNER JOIN 
    Clinica.Caja.CicloCaja cc ON mc.IdCicloCaja = cc.IdCicloCaja
INNER JOIN 
    Clinica.Caja.TipoModalidadPago mp ON mc.IdTipoModalidadPago = mp.IdTipoModalidadPago
INNER JOIN 
    Clinica.Caja.TipoCopago tc ON mc.IdTipoCopago = tc.IdTipoCopago;


-- Caja.VWTipoModalidadPago source

CREATE OR ALTER VIEW Caja.VWTipoModalidadPago AS
SELECT 
    IdTipoModalidadPago,
    Descripcion
FROM 
    Clinica.Caja.TipoModalidadPago;