SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[p_acc_cl_bordereaux_details_by_id]
	@bordereau_id int,
	@account_id int = -1
AS

	/*
	DGE
	
	Cette procédure renvoie les détails d'un bordereau crédit sinistre:

	- si @account_id <= 0, la procédure renvoie 
		* l'entête du bordereau;
		* les critères (liste de compagnies, liste de variables);
		* tous les comptes créés (un compte par compagnie);

	- si @account_id > 0, la procédure renvoie uniquement les compte spécifié
	
	*/

	set nocount on;

    
	if @account_id <= 0
	begin
		-- détails du bordereau (entête)
		SELECT	b.*,
				vir_claim_internal_reference = c.cl_internal_reference
		from	acc_cl_bordereaux b
				left join claim_claims c on c.cl_claim_id = b.clb_claim_id
		where	b.clb_bordereau_id = @bordereau_id

		-- liste des compagnies
		select	c.*
		from	vw_act_cies c
				inner join acc_cl_bordereaux_companies bc on bc.clbcie_company_id = c.act_actor_id
		where	bc.clbcie_bordereau_id = @bordereau_id
	
		-- liste des variables
		select	v.*
		from	vw_nm_variables v
				inner join acc_cl_bordereaux_variables bv on bv.clbvar_variable_code = v.nmpv_variable_code
		where	bv.clbvar_bordereau_id = @bordereau_id
	end

	-- détails
	select	a.a_account_id, 

			vir_company_name = ac.adr_complete_name,				-- compagnie
			vir_actor_name = aa.adr_complete_name,					-- acteur
			ps.pols_number,											-- contrat
			cl.cl_internal_reference,								-- sinistre
			nv.nmpv_l1, nv.nmpv_l2, nv.nmpv_l3,						-- libellé de la variable
			ad.a_type_code,											-- règlement / encaissement de recours
			vir_amount_db =	case	
							when ad.a_type_code = 'CP' then abs(ad.a_amount)
							else 0
							end,
			vir_amount_cr = case 
							when ad.a_type_code = 'CR' then abs(ad.a_amount)
							else 0
							end,
			ad.a_operation_utc_date,									-- date de l'opération
			b.clb_bordereau_id, 
			atrn_transaction_id = ad.a_lettering						-- pour afficher l'identifiant de la transaction
	from	acc_cl_bordereaux b
			inner join acc_cl_bordereaux_accounts ba on ba.clba_bordereau_id = b.clb_bordereau_id
			-- ligne correspondant à la compagnie
			inner join acc_accounts a on a.a_account_id = ba.clba_account_id
			-- lignes "règlement sinistre" ou "encaissement de recours"
			inner join acc_cl_bordereaux_accounts_details bad	on	bad.clbad_bordereau_id = ba.clba_bordereau_id
																and	bad.clbad_account_id = ba.clba_account_id
			inner join acc_accounts ad							on	ad.a_account_id = bad.clbad_account_id__payrec
			
			-- sinistre
			inner join claim_variables_accounts cva				on	cva.clacc_account_id = ad.a_account_id
			inner join claim_claims cl							on	cl.cl_claim_id = cva.clacc_claim_id
			-- situation contrat
			inner join pol_policies_situations ps				on	ps.pols_policy_situation_id = cl.cl_policy_situation_id
			-- variables
			left join pr_products_variables pv					on pv.prdv_variable_id = cva.clacc_variable_id
			left join nm_claims_variables pv2					on pv2.nmcv_variable_id = cva.clacc_variable_id
			inner join vw_nm_variables nv						on nv.nmpv_variable_code = isnull(pv.prdv_variable_code, pv2.nmcv_variable_code)


			-- acteur
			inner join vw_act_actors_adresses aa	on	aa.act_actor_id = ad.a_actor_id		

			-- adresse compagnie
			inner join vw_act_cies ac on ac.act_actor_id = a.a_actor_id
	where	1 =	case
				when @account_id <= 0 and b.clb_bordereau_id = @bordereau_id then 1
				when @account_id > 0 and ba.clba_account_id = @account_id then 1
				else 0
				end

GO
