declare @id_estado int
select @id_estado=id from doc_estadotipodocumento where id_tipodocumento=7 and estadotipodocumento_codigo='APR'

update doc_estadotipodocumento_subtipodocumento
set estadotipodocumento_subtipodocumento='val_aprobarOC',sp_ejecucionFinal='ejf_aprobarOC'
where id_estadotipodocumento_destino=@id_estado

GO

create or alter procedure val_aprobarOC
    @P_EID VARCHAR(10)=''
    ,@p_id_documento int
    ,@p_id_usuario int
AS
BEGIN

    declare @msg varchar(100)=''
    if exists(select 1 from view_doc_documento where id=@p_id_documento and doc_estadotipodocumento_estadotipodocumento_codigo='CER')
    BEGIN
        --se está reabriendo la OC
        if not exists(select 1 from seg_usuario where id=@p_id_usuario and id_perfil=1)       
            set @msg='Su perfil no tiene autorización para reabrir órdenes de compra';
    END

    SELECT @msg

END
GO

create or alter procedure ejf_aprobarOC
    @p_eid varchar(10)
    ,@p_id_documento int
    ,@p_id_usuario int
AS
BEGIN

    declare @msg varchar(100)=''

    if exists(select 1 from seg_usuario where id=@p_id_usuario and id_perfil=1) 
        and exists(select 1 from view_doc_documento where id=@p_id_documento and doc_estadotipodocumento_estadotipodocumento_codigo='APR')
        and not exists(select 1 from view_doc_documento where id_documento=@p_id_documento and doc_estadotipodocumento_estadotipodocumento_codigo='CAN')
        and exists(select 1 from view_doc_documento_estadoTipoDocumento where  id_documento=@p_id_documento and doc_estadotipodocumento_estadotipodocumento_codigo='CER')
    BEGIN
        --se está reabriendo la OC y es OC sin hijos

        update doc_itemdocumento
        set doc_itemdocumento.cantidadEjecutado=doc_itemdocumento.cantidadEjecutado-itoc.cantidadEjecutado
            ,doc_itemdocumento.costoEjecutado=doc_itemdocumento.costoEjecutado-itoc.subtotalejecutado
        from doc_itemdocumento
            inner join doc_itemdocumento ITOC on ITOC.id_catalogo=doc_itemdocumento.id_catalogo
            inner join doc_documento OT on OT.id=doc_itemdocumento.id_documento
            inner join doc_documento OC on OT.id=OC.id_documento and OC.id=ITOC.id_documento
        where ITOC.id_documento=@p_id_documento
            and OT.prefijo='OTT'

        update doc_itemdocumento
        set cantidadEjecutado=0,valorunitarioEjecutado=0,subtotalejecutado=0,totalejecutado=0
        where id_documento=@p_id_documento and active=1

        exec _totalizarDocumento @p_id_documento

    END

    SELECT @msg

END
GO



