USE websiscre;

INSERT INTO clases_prestamo(nombre,descripcion,activo)
SELECT 'Nuevos','Clase predeterminada para nuevas operaciones',1
WHERE NOT EXISTS(SELECT 1 FROM clases_prestamo WHERE nombre IN('Nuevo','Nuevos'));
UPDATE operaciones o JOIN (SELECT MIN(id) id FROM clases_prestamo WHERE nombre IN('Nuevo','Nuevos')) x
SET o.clase_prestamo_id=x.id WHERE o.clase_prestamo_id IN(SELECT id FROM clases_prestamo WHERE nombre IN('Nuevo','Nuevos'));
UPDATE clases_prestamo c JOIN (SELECT MIN(id) id FROM clases_prestamo WHERE nombre IN('Nuevo','Nuevos')) x
SET c.nombre='Nuevos',c.descripcion='Clase predeterminada para nuevas operaciones',c.activo=IF(c.id=x.id,1,0)
WHERE c.nombre IN('Nuevo','Nuevos');

INSERT INTO canales_venta(nombre,descripcion,activo)
SELECT 'Venta Directa','Canal predeterminado',1 WHERE NOT EXISTS(SELECT 1 FROM canales_venta WHERE nombre='Venta Directa');
UPDATE canales_venta SET activo=1 WHERE nombre='Venta Directa';

UPDATE garantias SET nombre='A Sola Firma',activo=1 WHERE nombre IN('Sola Firma','A Sola Firma');
INSERT INTO garantias(nombre,descripcion,activo)
SELECT 'A Sola Firma','Garantía predeterminada',1 WHERE NOT EXISTS(SELECT 1 FROM garantias WHERE nombre='A Sola Firma');

CREATE TABLE IF NOT EXISTS capitales(
 id INT AUTO_INCREMENT PRIMARY KEY,
 fecha DATE NOT NULL,
 cliente_id INT NOT NULL,
 origen_capital_id INT NOT NULL,
 moneda_id TINYINT NOT NULL DEFAULT 1,
 monto DECIMAL(18,2) NOT NULL,
 tasa DECIMAL(10,4) NOT NULL DEFAULT 24,
 cantidad_cuotas INT NOT NULL,
 periodicidad ENUM('Mensual','Bimestral','Semestral','Anual','Al vencimiento') NOT NULL,
 primer_vencimiento DATE NOT NULL,
 total_interes DECIMAL(18,2) NOT NULL DEFAULT 0,
 total_capital DECIMAL(18,2) NOT NULL DEFAULT 0,
 estado ENUM('Vigente','Cancelado','Anulado') NOT NULL DEFAULT 'Vigente',
 observaciones TEXT,
 creado_por INT NULL,
 creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 FOREIGN KEY(cliente_id) REFERENCES clientes(id),
 FOREIGN KEY(origen_capital_id) REFERENCES origenes_capital(id),
 FOREIGN KEY(moneda_id) REFERENCES monedas(id)
);

CREATE TABLE IF NOT EXISTS capital_detalles(
 id INT AUTO_INCREMENT PRIMARY KEY,
 capital_id INT NOT NULL,
 numero_cuota INT NOT NULL,
 vencimiento DATE NOT NULL,
 plazo_dias INT NOT NULL,
 interes DECIMAL(18,2) NOT NULL DEFAULT 0,
 capital DECIMAL(18,2) NOT NULL DEFAULT 0,
 cobrado_interes DECIMAL(18,2) NOT NULL DEFAULT 0,
 cobrado_capital DECIMAL(18,2) NOT NULL DEFAULT 0,
 ultima_fecha_pago DATETIME NULL,
 FOREIGN KEY(capital_id) REFERENCES capitales(id) ON DELETE CASCADE,
 UNIQUE(capital_id,numero_cuota)
);

CREATE TABLE IF NOT EXISTS capital_pagos(
 id INT AUTO_INCREMENT PRIMARY KEY,
 fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 cliente_id INT NOT NULL,
 capital_detalle_id INT NOT NULL,
 monto DECIMAL(18,2) NOT NULL,
 interes_aplicado DECIMAL(18,2) NOT NULL DEFAULT 0,
 capital_aplicado DECIMAL(18,2) NOT NULL DEFAULT 0,
 recibo VARCHAR(60),
 observacion VARCHAR(255),
 usuario_id INT NULL,
 FOREIGN KEY(cliente_id) REFERENCES clientes(id),
 FOREIGN KEY(capital_detalle_id) REFERENCES capital_detalles(id) ON DELETE CASCADE
);
