SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE procedure [dbo].[p_pr_products_list_by_branch_currency_tax_entity]
	@branch_id		int,					-- entité juridique de la session
	@user_code		ais_code_medium,		-- login
	@introducer_id	int,					-- apporteur attaché à l'utilisateur
	@currency_code	ais_code_short,			-- code devise
	@actor_id		int						-- entité de taxation	
as

	set nocount on;

	declare @products_table TABLE(product_code ais_code_short not null)

	insert into @products_table (product_code)
	select	product_code
	from	pr_products p
			/*
			DGE 20/04/2017
			0000702: Affichage des produits en fonction des droits d'accès- bordereau compagnie
			On n'applique pas des filtres par utilisateur/apporteur en ce qui concerne l'affichage des produits
			inner join dbo.f_pr_products(@branch_id, @user_code, @introducer_id,@currency_code, null) on product_code = p.prd_product_code
			*/
			inner join dbo.f_pr_products(@branch_id, '%', 0,@currency_code, null) on product_code = p.prd_product_code
			inner join pr_products_branches pb	on	pb.prdb_product_code = p.prd_product_code 
												and pb.prdb_branch_id = @branch_id
												and	pb.prdb_currency_code = @currency_code
	
	
	DECLARE @t TABLE
	(
		product_code ais_code_short not null,
		variable_code ais_code_short not null
	)	
	
	insert into @t(product_code, variable_code)
	select	distinct p.prd_product_code, nv.nmpv_variable_code
	from	nm_products_variables nv
			inner join pr_products_variables pv on pv.prdv_variable_code = nv.nmpv_variable_code 
			inner join pr_products_variables_taxes pvt on pvt.prdvt_variable_id = pv.prdv_variable_id
			inner join nm_taxes nt on nt.nmtax_tax_code = pvt.prdvt_tax_code 
			inner join pr_products p on p.prd_product_code = pv.prdv_product_code 
			inner join @products_table pt on pt.product_code = p.prd_product_code
			inner join nm_products_variables_types nvt on nvt.nmpvt_type_code = nv.nmpv_type_code 
	where	nt.nmtax_taxent_id = @actor_id 
	and		pv.prdv_ignored = 0	
	
	
	
	/* 
	Liste des produits utilisés par l'organisme de taxation sélectionné
	*/	
	select	distinct p.prd_product_code, p.prd_l1, p.prd_l2, p.prd_l3 
	from	pr_products p
			inner join @products_table on product_code = p.prd_product_code
	
	/* 
	Liste des variables (et leur type) utilisées par l'organisme de taxation sélectionné
	- freeze = 0;
	- ignored = 0
	On aurait pu utiliser la table pr_families_variables pour déterminer la liste des variables. 
	On a préféré l'utilisation de pr_products_variables pour avoir accès aux informations prdv_ignored et prdv_retroceded
	*/	
	select	distinct nv.nmpv_variable_code, nv.nmpv_l1, nv.nmpv_l2, nv.nmpv_l3, p.prd_product_code,
			nvt.nmpvt_l1, nvt.nmpvt_l2, nvt.nmpvt_l3
	from	@t t
			inner join nm_products_variables nv on nv.nmpv_variable_code = t.variable_code 
			inner join nm_products_variables_types nvt on nvt.nmpvt_type_code = nv.nmpv_type_code 
			inner join pr_products p on p.prd_product_code = t.product_code
	






GO
