== Descripcion ==
Una vez que ingresa los datos básicos de un producto, verifica que este producto tenga alguna composicion (solo los elementos básicos). Si la tiene, divide el proceso en 2 partes
#Une 2 grupos de datos dentro del mismo subconjunto
##Todos los productos-elementos de la [[VISTA:visprodadic]] cuyo codigo de producto sea igual al código de producto madre y que sea "propiamente dichos" (cuyo código de producto sea igual al código de elemento)
##Todos los productos-elementos de la [[VISTA:visprodadic]] cuyo codigo de producto sea igual al código de producto madre y el código de producto sea diferente al codigo de elemento.
###Incluye todos los productos-elementos de un nivel inferior. Esto se realiza seleccionando los elementos de la composicion como si fuesen productos y esos productos son la clave de búsqueda dentro de la misma tabla de composición.

== Composicion ==
*VISTA:visproadic->
*->TABLA:vidquoten3

== Estructura ==
<pre>
</pre>
== SQL ==
<small><pre>
delimiter |
CREATE PROCEDURE AltaItemPresupuesto (IN pVidQuoteID INT(5), IN pVidQuoteLPre INT(1), IN pVidQuoteItem INT(5), IN pVidQuoteProdID CHAR(8), IN pVidQuoteProdCantidad INT(5), IN pVidQuoteAncho INT(5), IN pVidQuoteAlto INT(5)) 
BEGIN
	INSERT INTO vidquoten3 (
		VidQuoteID,
		VidQuoteLPre,
		VidQuoteItem,
		VidQuoteProdID,
		VidQuoteProdCantidad,
		VidQuoteAncho,
		VidQuoteAlto,
		VidQuoteElementoID,
		VidQuotePrecio,
		VidQuotePrecioP)
	SELECT
		pVidQuoteID,
		pVidQuoteLPre,
		pVidQuoteItem,
		pVidQuoteProdID,
		pVidQuoteProdCantidad,
		pVidQuoteAncho,
		pVidQuoteAlto,
		`T3`.`ProdCmpID`,
		SUM(CalculoPrecio(
			pVidQuoteAncho, 
			pVidQuoteAlto,
			`T3`.`PrecioProd`,
			`T3`.`Magnitud`,
			`T3`.`OffsetVanoAlto`,
			`T3`.`OffsetVanoAncho`,
			`T3`.`CoefVanoAlto`,
			`T3`.`CoefVanoAncho`,
			`T3`.`ValorElemento`)) AS pVidQuotePrecio,
		SUM(CalculoPrecio(
			pVidQuoteAncho, 
			pVidQuoteAlto,
			`T3`.`PrecioProd`,
			`T3`.`Magnitud`,
			`T3`.`OffsetVanoAlto`,
			`T3`.`OffsetVanoAncho`,
			`T3`.`CoefVanoAlto`,
			`T3`.`CoefVanoAncho`,
			`T3`.`ValorElemento`) * pVidQuoteProdCantidad) AS pVidQuotePrecioP
	FROM
		(
		SELECT
		`T1`.`ProductoID` AS ProductoID,
		`T1`.`ProductoID` AS ProdCmpID,
		`T1`.`ElementoID`,
		`T1`.`ValorElemento`,
		`T1`.`Descripcion`,
		`T1`.`Magnitud`,
		`T1`.`OffsetVanoAncho`,
		`T1`.`OffsetVanoAlto`,
		`T1`.`CoefVanoAncho`,
		`T1`.`CoefVanoAlto`,
		(CASE (pVidQuoteLPre)
		 WHEN 0 THEN `T1`.`PrecioProd00`
		 WHEN 1 THEN `T1`.`PrecioProd01`
		 WHEN 2 THEN `T1`.`PrecioProd02`
		 WHEN 3 THEN `T1`.`PrecioProd03`
		END) AS PrecioProd
		FROM visprodadic AS T1
		WHERE ProductoID=pVidQuoteProdID AND ElementoID=pVidQuoteProdID AND ElementoPM=1
		UNION
		SELECT 
		pVidQuoteProdID AS ProductoID,
		`T2`.`ProductoID` AS ProdCmpID,
		`T2`.`ElementoID`,
		`T2`.`ValorElemento`,
		`T2`.`Descripcion`,
		`T2`.`Magnitud`,
		`T2`.`OffsetVanoAncho`,
		`T2`.`OffsetVanoAlto`,
		`T2`.`CoefVanoAncho`,
		`T2`.`CoefVanoAlto`,
		(CASE (pVidQuoteLPre)
		 WHEN 0 THEN `T2`.`PrecioProd00`
		 WHEN 1 THEN `T2`.`PrecioProd01`
		 WHEN 2 THEN `T2`.`PrecioProd02`
		 WHEN 3 THEN `T2`.`PrecioProd03`
		END) AS PrecioProd
		FROM visprodadic AS T2
		WHERE ProductoID IN 
			 (SELECT ElementoID 
			  FROM visprodadic 
			  WHERE ProductoID=pVidQuoteProdID AND ElementoID<>pVidQuoteProdID AND ElementoPM=1
		 )
		) AS T3
	GROUP BY ProdCmpID;
END;|		
</pre></small>

== Bitácora ==
*20120419
**Cambio de esquema para colocar el cálculo de subitems.

== Uso ==
*MACR:EventoBRCDetallePresupuesto

== URL ==
FZG.Procedure.AltaItemPresupuesto.sql