DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `generar_comprobante`(id_fk_fct INT,id_tal INT,total FLOAT,importe_neto FLOAT,neto_21 FLOAT,neto_105 FLOAT, importe_exento FLOAT,importe_alicuota FLOAT) RETURNS int(11)
    DETERMINISTIC
BEGIN
DECLARE nuevo_nro_comp INT;
DECLARE tipo_comp VARCHAR(5);
DECLARE imp_tot FLOAT(11,2);
DECLARE imp_neto FLOAT(11,2);
DECLARE imp_iva FLOAT(11,2);
IF(id_fk_fct IS NULL OR id_tal IS NULL OR total IS NULL) THEN RETURN -1; END IF;
IF(total IS NULL OR total=0) THEN RETURN -1; END IF;

SELECT ci.comp_tipo INTO tipo_comp FROM facturas f INNER JOIN cliente c ON CAST(f.id_cliente AS CHAR)=c.cuenta
INNER JOIN cond_iva ci ON c.id_cond_ante_iva=ci.id WHERE f.codfactura=id_fk_fct;

IF(tipo_comp='A')THEN
SET imp_neto=importe_neto-importe_exento;
SET imp_iva=(total-importe_alicuota)-importe_neto;
SET imp_tot=total;
ELSE
SET imp_neto=total-importe_exento;
SET imp_iva=0;
SET imp_tot=total;
END IF;
SELECT MAX(ultimo_nro_comp)+1 INTO nuevo_nro_comp FROM talonarios WHERE id_talonario=id_tal;
INSERT INTO comprobantes (id_comp,id_fk_factura,id_talonario,nro_comp,importe_total,importe_neto,neto_21,neto_105,importe_exento,importe_iva,importe_alicuota,fecha_comp)VALUES(NULL,id_fk_fct,id_tal,nuevo_nro_comp,imp_tot,imp_neto,neto_21,neto_105,importe_exento,imp_iva,importe_alicuota,NOW());
UPDATE talonarios SET ultimo_nro_comp=nuevo_nro_comp WHERE id_talonario=id_tal;
RETURN nuevo_nro_comp;
    END$$
DELIMITER ;