01. DADOS GERAIS

Produto:

Linha de Produto:

Segmento:

Módulo:Prestadores de Serviços Terceirização
Função:TECA190D.PRW
País:Brasil
Ticket:Não há
Requisito/Story/Issue (informe o requisito relacionado) :DSERSGS-10341


02. SITUAÇÃO/REQUISITO

Quando é utilizado a alocação Multi-filial e também o local de atendimento ter a integração com o Modulo de Medicina do trabalho, é necessário um ponto de entrada para que o cliente controle essas alocações da mesa operacional dentro do MDT.

03. SOLUÇÃO

Desenvolvido o ponto de entrada GsMDTFil que vai ser chamado na gravação das agendas do atendente na mesa operacional, o ponto de entrada só vai ser chamado caso o parâmetro de multi-filial esteja ativo(MV_GSMSFIL) e a alocação do atendente ser em um contrato para uma filial diferente dele.

Ao ser chamado, alguns parâmetros para a criação da TN5 e TN6 dentro do modulo do MDT serão passados, assim o cliente vai conseguir incluir e atualizar os registros.

Serão passados 2 arrays contendo informações para a TN5 e a TN6, os 2 arrays terão 2 posições onde vai constar o nome do campo e o conteúdo.

No array da TN5 estará contido as seguintes informações para atualizar os seguintes campos:

            {"TN5_FILIAL",Filial da SRA do atendente}
            aTN5,{"TN5_NOMTAR",TFF->TFF_LOCAL + " - " + TFF->TFF_FUNCAO}
            aTN5,{"TN5_LOCAL",TFF->TFF_LOCAL}
            aTN5,{"TN5_POSTO",TFF→TFF_FUNCAO}

       O campo TN5_CODTAR deve ser criado dentro do ponto de entrada, ele corresponde ao código da tarefa.

       No array da TN6 estará contido as seguintes informações para atualizar os seguintes campos:

            {"TN6_FILIAL",Filial da SRA do atendente}
            {"TN6_MAT",Matricula do Atendente}
            {"TN6_DTINIC",TGY->TGY_DTINI}
            {"TN6_DTTERM",TGY->TGY_ULTALO}

        Quando já existe registro na TN6 para o atendente, é necessário só atualizar a data de inicio e termino da alocação, sem ter a necessidade de criar uma nova linha.


#Include 'Protheus.ch'

User Function GsMDTFil()
Local aTN5 := PARAMIXB[01]
Local aTN6 := PARAMIXB[02]   

Local nFilTN5       := aScan(aTN5,{|x| AllTrim(x[1])=="TN5_FILIAL"})
Local nNomTarTN5    := aScan(aTN5,{|x| AllTrim(x[1])=="TN5_NOMTAR"})
Local nLocalTN5     := aScan(aTN5,{|x| AllTrim(x[1])=="TN5_LOCAL"})
Local nPostoTN5     := aScan(aTN5,{|x| AllTrim(x[1])=="TN5_POSTO"})

Local nFilTN6       := aScan(aTN6,{|x| AllTrim(x[1])=="TN6_FILIAL"})
Local nMatTN6       := aScan(aTN6,{|x| AllTrim(x[1])=="TN6_MAT"})
Local nDtInic       := aScan(aTN6,{|x| AllTrim(x[1])=="TN6_DTINIC"})
Local nDtTerm       := aScan(aTN6,{|x| AllTrim(x[1])=="TN6_DTTERM"})
Local cProxTN5      := ""
Local cQueryTN5     := GetNextAlias()
Local cQueryNum     := GetNextAlias()
Local dDtIniMdt     := sTod("")
Local lNewTN6       := .F.
Local lNewTN5       := .F.

//Faz a Busca do codigo da Tarefa
BeginSql Alias cQueryNum
    SELECT MAX(TN5_CODTAR) ULTTAREFA    
    FROM %Table:TN5% TN5
    WHERE TN5.TN5_FILIAL = %exp:aTN5[nFilTN5][2]%
        AND TN5.%NotDel%
    EndSql
    
cProxTN5 := Soma1( (cQueryNum)->ULTTAREFA )

//Verifica se já existe tarefa criada na TN5
BeginSql Alias cQueryTN5
        
    SELECT TN5.R_E_C_N_O_ TN5RECNO
        FROM %Table:TN5% TN5
        WHERE TN5.TN5_FILIAL    = %exp:aTN5[nFilTN5][2]%
            AND TN5.TN5_LOCAL   = %exp:aTN5[nLocalTN5][2]%
            AND TN5.TN5_POSTO   = %exp:aTN5[nPostoTN5][2]%
            AND TN5.%NotDel%
EndSql
    
If (cQueryTN5)->(EOF()) 
    RecLock("TN5",.T.)
        TN5->TN5_FILIAL := aTN5[nFilTN5][2]
        TN5->TN5_CODTAR := cProxTN5
        TN5->TN5_NOMTAR := aTN5[nNomTarTN5][2]
        TN5->TN5_LOCAL  := aTN5[nLocalTN5][2]
        TN5->TN5_POSTO  := aTN5[nPostoTN5][2]
    TN5->(MsUnlock())   
    lNewTN5 := .T.   //Indica que é um novo registro
Else
    TN5->(DbGoTo((cQueryTN5)->TN5RECNO))
    //Verifica se há registros na TN6
    DbSelectArea("TN6")
    If !TN6->(dbSeek(aTN6[nFilTN6][2]+TN5->TN5_CODTAR+aTN6[nMatTN6][2]))
        lNewTN6 := .T.      
    Else 
        dDtIniMdt := TN6->TN6_DTINIC
    Endif   
EndIf


If !lNewTN5
    If lNewTN6 .And. !TN6->(dbSeek(aTN6[nFilTN6][2]+TN5->TN5_CODTAR+aTN6[nMatTN6][2]+Dtos(dDtIniMdt)))
        RecLock("TN6",.T.)
            TN6->TN6_FILIAL := aTN6[nFilTN6][2]
            TN6->TN6_CODTAR := TN5->TN5_CODTAR
            TN6->TN6_MAT    := aTN6[nMatTN6][2]
            TN6->TN6_DTINIC := aTN6[nDtInic][2]
            TN6->TN6_DTTERM := aTN6[nDtTerm][2]
        TN6->(MsUnLock())
    Else
        RecLock("TN6",.F.)
            TN6->TN6_DTINIC := aTN6[nDtInic][2]
            TN6->TN6_DTTERM := aTN6[nDtTerm][2]
        TN6->(MsUnLock())       
    Endif
else
    RecLock("TN6",.T.)
        TN6->TN6_FILIAL := aTN6[nFilTN6][2]
        TN6->TN6_CODTAR := cProxTN5
        TN6->TN6_MAT    := aTN6[nMatTN6][2]
        TN6->TN6_DTINIC := aTN6[nDtInic][2]
        TN6->TN6_DTTERM := aTN6[nDtTerm][2]
    TN6->(MsUnLock())
EndIf

(cQueryTN5)->(dbCloseArea())
(cQueryNum)->(dbCloseArea())

Return



04. DEMAIS INFORMAÇÕES

Outras ações/ações relacionadas 

05. ASSUNTOS RELACIONADOS




<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>