
/* Sistema	: Distribuidoras
   Ver		: 1.0
   Tipo 	: Store Procedure
   Nombre 	: p_cam_ven
   Autor	: jcp
   Descripcion	: Se cambia los codigos de un vendedor en un dia , solo tabla de documentos
   Fecha	: 24/julio/2013
			: 16/enero/2019 : se aumento el cambio tambien al documento LF
			                   (liquidacion factura)

		
*/

--IF EXISTS (SELECT name FROM sysobjects
--	WHERE name = 'p_cam_ven' AND type = 'P')
--	DROP PROCEDURE p_cam_ven
--GO

--create
ALTER 
procedure [dbo].[p_cam_ven]
	@cop_nom 	char(1),	-- Tipo C=Cliente P=Proveedor
  	@cod_nom	char(12), 	-- Codigo a cambiar
	@cod_nue	char(12),	-- Nuevo codigo
	@ven_nue	int,		-- nuevo vendedor
	@fec_cam	smalldatetime		-- fecha del cambio

as

declare
	@key_pri int,		-- Key_pri
	@key_doc int,		-- Key_pri del comedoc
	@sta_doc char(1),  	-- Estatus del documento
	@men_err char(512)	-- Mensaje de error

Begin Tran

if not exists(select key_pri from comenom where cop_nom=@cop_nom and cod_nom=@cod_nue)
   begin
   set @men_err='No existe el codigo del CUBRE RUTAS'
   raiserror(@men_err,16,1)
   ROLLBACK TRAN			--Deshacemos la transacción
   return
end

if not exists(select key_pri from comenom where cop_nom=@cop_nom and cod_nom=@cod_nom)
   begin
   set @men_err='No existe el codigo del VENDEDOR'
   raiserror(@men_err,16,1)
   ROLLBACK TRAN			--Deshacemos la transacción
   return
end


-- actualiza los documentos del dia
declare documentos cursor 
	for select comedoc.key_pri  from comedoc 
	    join cometdo on comedoc.tdo_tdo=cometdo.tdo_tdo 
		where comedoc.cop_nom=@cop_nom and cod_nom=@cod_nom and fec_doc=@fec_cam and 
		     ( ( inv_tdo='S' and coa_tdo='C' and comedoc.cop_nom='C') or (inv_tdo='E' and coa_tdo='A' and comedoc.cop_nom='C'))



			--(tdo_tdo<>'PA' and tdo_tdo<>'DS' and tdo_tdo<>'PR' and tdo_tdo<>'LQ' and tdo_tdo<>'AV' and
			 --tdo_tdo<>'CV' and tdo_tdo<>'DD' and tdo_tdo<>'PJ' and tdo_tdo<>'PK')


	open documentos
	fetch next from documentos into @key_doc
	while (@@FETCH_STATUS=0) 	
		begin
		   --begin tran   
		   select @sta_doc=sta_doc from comedoc where key_pri=@key_doc

		   update comedoc set cod_nom=@cod_nue, sta_doc='M', ven_ven=@ven_nue 
			where key_pri=@key_doc				-- where cop_nom=@cop_nom and cod_nom=@cod_nom  and key_pri=@key_doc

		   update comedoc set sta_doc=@sta_doc where key_pri=@key_doc
		   --commit tran
		   fetch next from documentos into @key_doc
		end
	close documentos
	deallocate documentos



-- actualiza la liquidacion en efectivo (LQ) en moneda 1
-- busca el documento
set @key_doc=0
select @key_doc = key_pri from comedoc 
	where cop_nom=@cop_nom and cod_nom=@cod_nom and fec_doc=@fec_cam and tdo_tdo='LQ' and mon_doc=1

-- haya encontrado un documento
if @key_doc > 0
	begin -- 
	select @sta_doc=sta_doc from comedoc where key_pri=@key_doc

	update comedoc set cod_nom=@cod_nue, sta_doc='M', ven_ven=@ven_nue 
		where key_pri=@key_doc
	-- where cop_nom=@cop_nom and cod_nom=@cod_nom  and key_pri=@key_doc

	update comedoc set sta_doc=@sta_doc where key_pri=@key_doc
	end --

-- actualiza la liquidacion factura (LF) en moneda 1 --
-- busca por documentos a excepto de los alternos
set @key_doc=0
select @key_doc = key_pri,@sta_doc=sta_doc from comedoc with (nolock) 
			where cop_nom=@cop_nom and cod_nom=@cod_nom and 
			fec_doc=@fec_cam and 
			tdo_tdo='LF' and mon_doc=1
if isnull(@key_doc,0)>0
	begin
		update comedoc set cod_nom=@cod_nue, sta_doc='M', ven_ven=@ven_nue 
		where key_pri=@key_doc
		update comedoc set sta_doc=@sta_doc where key_pri=@key_doc
	end

commit tran


GO
/*
select lq.rut_rut,lq.COD_NOM,lq.FEC_DOC,lq.VEN_VEN,lf.rut_rut,lf.COD_NOM,lf.FEC_DOC,lf.VEN_VEN from comedoc lq left join comedoc lf on 
lq.rut_rut=lf.rut_rut and lq.fec_doc=lf.fec_doc 
where lq.tdo_tdo='lq' and lf.tdo_tdo='lf'
and lq.cod_nom<>lf.cod_nom
order by lq.RUT_RUT
*/