--USE [TouchScreen]
--GO
/****** Object:  StoredProcedure [dbo].[Update_Impuestos_Linea_Factura]    Script Date: 10/21/2016 15:43:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[Update_Impuestos_Linea_Factura] 
                @id_fali int
AS
BEGIN
/*
 PROC que calcula e inserta en RESTFAIM los importes unitarios de los impuestos que se deben aplicar 
 para la linea pasada como parametro.
  - Se calculan dos valores:
   importe_imp = Este valor es calculado es teniendo en cuenta todos los descuentos aplicados y tambien los recargos  
                 sean cuenta casa o no  y  ademas tiene en cuenta la exencion de impuestos aplicada. 
		 - Se calculara a partir de la columna importe_neto de RESTFALI
		 - Sera usado para calcular el saldo total a cobrar de una factura

   importe_imp_cont = Este valor es calculado es teniendo en cuenta todos los descuentos aplicados y tambien los recargos  
                     que no sean de tipo cuenta casa y  ademas tiene en cuenta la exencion de impuestos aplicada. 
		     este sera el valor que se contabilizara 
		 - Se calculara a partir de la columna importe_neto_cont de la tabla RESTFALI.
		 - Sera usado para realizar la contabilizacion de los impuestos

     - Estos valores se deben recalcular cada vez que:
	- se inserte  una nueva linea de factura
	- se modifique el modificador de precio de la linea, 
	- se modifique el modificador de total de factura aplicado
	- se modifique la exencion de impuestos aplicada.
      y despues de haber recalculado previamente las columnas importe_neto e importe_neto_cont
*/

  SET NOCOUNT ON

  Declare @id_enfa   int,
	      @id_exen   int,
	      @porc_impu numeric(8,2)
  
  Declare @t_impu TABLE
          ( id_enfa int, 
		    id_impu int,
		    desc_impu   varchar(30),	
		    porc_impu   numeric(8,2))

  Select @id_enfa = id_enfa,
	     @id_exen  = id_exen
      From VRESTFALI 
      Where id_fali = @id_fali

  -- Recupero cursor con todos los impuestos a aplicar segun la familia de venta
  Insert @t_impu 
     Select * 
        From fGet_Cur_Impu_Enfa (@id_enfa)

  -- Borro los impuestos calculados anteriormente  
  delete RESTFAIM 
     Where id_fali = @id_fali

 -- Tengo en cuenta la exencion de impuestos
 Insert Restfaim
   Select imp.id_impu,
	      fali.id_fali,
	      importe_imp = ROUND( importe_neto  * imp.porc_impu / 100, 3),
	      importe_imp_cont = 
	          CASE WHEN importe_neto = 0.00 
				   THEN 0 
				   ELSE ROUND( (importe_neto + recargo_neto - recargo_noccasa)
				        * imp.porc_impu / 100, 3) 
			       END,
	      exento = CASE WHEN exen.id_exen is null 
	                    THEN 0 
	                    ELSE 1 END
      From VRestfali fali
           Inner Join @t_impu imp  on fali.id_enfa = imp.id_enfa
           Left  Join RESTEXENENLA exen on exen.id_exen = @id_exen 
             and imp.id_impu  = exen.id_impu
      Where fali.id_fali = @id_fali  
        and fali.id_enfa is not null 

END



