quarta-feira, 27 de novembro de 2013

Redução de Sete dias no final do aviso prévio ( HCM210 )


/************************************************************************************************************/
/* Objetivo: Gerar no FP1600 historico de situacao referente ao aviso previo trabalhado.                    */
/************************************************************************************************************/
/* Descricao : Reducao de sete dias no final do aviso previo.                                               */
/*             Quando houver a programacao de uma resciscao (FR5040) com "Tipo Aviso" "Trabalhado",          */
/*             com "Jornada Trabalho" "Reduz 7 dias corridos", "Tipo Movimentacao" "Automatica",            */
/*             e calculo "Efetivo", gerar um historico de situacao para o funcionario (sit_afast_func)      */
/*             com cdn_sit_afast_func igual ao informado em "cdn_sit_afast_av_prev_reduz_dia",              */
/*             com quantidade de dias igual a sete, a data de inicio igual ("Termino Aviso" - 7) + 1), e    */
/*             data de termino igual "Termino Aviso".                                                       */
/************************************************************************************************************/
/*             Para eliminar as situacoes geradas utilizar o programa FP1630 e informar o lote.             */
/************************************************************************************************************/

def var emp_ini                         as int  format "999"        initial 1       label "Empresa De".
def var emp_fim                         as int  format "999"        initial 999     label "At‚".
def var est_ini                         as int  format "999"        initial 1       label "Estab.  De".
def var est_fim                         as int  format "999"        initial 999     label "At‚".
def var matric_ini                      as int  format ">>,>>>,>>9" initial 1       label "Matric. De".
def var matric_fim                      as int  format ">>,>>>,>>9" initial 9999999 label "At‚".
def var data_ini                        as date format "99/99/9999"                 label "Data    De".
def var data_fim                        as date format "99/99/9999"                 label "At‚".
def var v_lote                          as char format "x(08)"                      label "Lote".
def var l_gerar                         as log  format "Sim/NÆo"    initial no      label "Gerar ?".
def var cdn_sit_afast_av_prev_reduz_dia as int  format "99"         initial 36      label "Situa‡Æo  ".

form emp_ini                            emp_fim
     est_ini                            est_fim
     matric_ini                         matric_fim
     data_ini                           data_fim
     cdn_sit_afast_av_prev_reduz_dia    sit_afast.des_sit_afast_func no-label
     v_lote                             l_gerar      
     with frame f_param width 100 2 column view-as dialog-box title "Crit‚rios de Sele‡Æo e Parƒmetros".

assign data_ini = date (month(today),01,year(today))
       data_fim = data_ini + 30
       v_lote   = string (year(today),"9999") + string (month(today),"99") + string (day(today),"99").

repeat:
    update  emp_ini                            emp_fim
            est_ini                            est_fim
            matric_ini                         matric_fim
            data_ini                           data_fim
            cdn_sit_afast_av_prev_reduz_dia  
            v_lote                             l_gerar
            with frame f_param.
           
    find sit_afast
        where sit_afast.cdn_sit_afast_func = cdn_sit_afast_av_prev_reduz_dia
        no-lock no-error.
    if not avail sit_afast
    then do:
        message "Situa‡Æo nÆo cadastrada" view-as alert-box.
        undo, retry.
    end.  
    else do:
        disp sit_afast.des_sit_afast_func        with frame f_param.
        pause 0.
        leave.
    end.
end.  
hide frame f_param.


if l_gerar = yes
then do:
    /************************************************************************************************************/
    /* Recuperar as programacoes de resciscao, verificar o historico de situacao, e se nao existir criar.        */
    /************************************************************************************************************/
           
    for each habilit_rescis
        where habilit_rescis.cdn_empresa            >=  emp_ini
        and   habilit_rescis.cdn_empresa            <=  emp_fim
        and   habilit_rescis.cdn_estab              >=  est_ini
        and   habilit_rescis.cdn_estab              <=  est_fim
        and   habilit_rescis.cdn_funcionario        >=  matric_ini
        and   habilit_rescis.cdn_funcionario        <=  matric_fim
        and   habilit_rescis.dat_desligto_func      >=  data_ini
        and   habilit_rescis.dat_desligto_func      <=  data_fim
        and   habilit_rescis.idi_tip_aviso_previo   =   2 /*Trabalhado*/
        and   habilit_rescis.idi_reduc_jorn_trab    =   3 /*Reduz 7 dias corridos*/
        and   habilit_rescis.idi_tip_movimen_rescis =   1 /*Movimento Autom tico*/
        and   habilit_rescis.idi_tip_rescis_func    =   1 /*C lculo Efetivo*/:
       
        disp habilit_rescis.cdn_empresa
             habilit_rescis.cdn_estab
             habilit_rescis.cdn_funcionario
             habilit_rescis.dat_desligto_func
             habilit_rescis.dat_inic_aviso_previo
             habilit_rescis.dat_term_aviso_previo
             with frame f_acomp 1 column 1 down view-as dialog-box.
        pause 0.
       
        find first sit_afast_func
            where sit_afast_func.cdn_empresa            =   habilit_rescis.cdn_empresa
            and   sit_afast_func.cdn_estab              =   habilit_rescis.cdn_estab
            and   sit_afast_func.cdn_funcionario        =   habilit_rescis.cdn_funcionario
            and   sit_afast_func.dat_inic_sit_afast     >=  (habilit_rescis.dat_term_aviso_previo - 7 ) + 1
            and   sit_afast_func.dat_inic_sit_afast     <=  (habilit_rescis.dat_term_aviso_previo - 7 ) + 1
            no-lock no-error.
        if not avail sit_afast_func
        then do:
            CREATE sit_afast_func.
            ASSIGN sit_afast_func.cdn_empresa               =   habilit_rescis.cdn_empresa
                   sit_afast_func.cdn_estab                 =   habilit_rescis.cdn_estab
                   sit_afast_func.cdn_funcionario           =   habilit_rescis.cdn_funcionario
                   sit_afast_func.cdn_sit_afast_func        =   cdn_sit_afast_av_prev_reduz_dia
                   sit_afast_func.dat_inic_sit_afast        =   (habilit_rescis.dat_term_aviso_previo - 7 ) + 1
                   sit_afast_func.dat_term_sit_afast        =   habilit_rescis.dat_term_aviso_previo
                   sit_afast_func.dat_inic_proces_sit_afast =   (habilit_rescis.dat_term_aviso_previo - 7 ) + 1
                   sit_afast_func.dat_term_proces_sit_afast =   habilit_rescis.dat_term_aviso_previo
                   sit_afast_func.idi_sit_afast_func        =   1
                   sit_afast_func.qti_dias_sit_func         =   7
                   SUBSTRING (sit_afast_func.cod_livre_1,1,8)   =   v_lote.
            /*
             message "Vou criar o hist¢tico... "
                    "Situa‡Æo: " cdn_sit_afast_av_prev_reduz_dia ", in¡cio em " (habilit_rescis.dat_term_aviso_previo - 7 ) + 1
                    ", e t‚rmino em " habilit_rescis.dat_term_aviso_previo
                    view-as alert-box.
             */
        end.
        else do:
            message "Funcionario ja  possui uma situacao para o periodo:"
                    "Situacao: " sit_afast_func.cdn_sit_afast_func ", in¡cio em " sit_afast_func.dat_inic_sit_afast
                    ", e t‚rmino em " sit_afast_func.dat_term_sit_afast
                view-as alert-box.
        end.
    end.      
end.      

RETURN.      
       
       

Nenhum comentário:

Postar um comentário