Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Informações
titleAtenção

Necessário uso do ponto de entrada AT870NWMNU como sugestão para criação de opção no menu Ações Relacionadas na Gestão de Contratos, onde será disparado a importação das agendas dos Atendentes do Contrato conforme Orçamento, Locais e Recursos Humanos informados  neste Contrato posicionado.

Bloco de código
languagedelphitext
#INCLUDE "PROTHEUS.CH"

//----------------------------------------------
/*/{Protheus.doc} Ponto de Entrada AT870NWMNU/*/
//----------------------------------------------
User Function AT870NWMNU()
Local aRetMenu := {}
Local nC   := 0
Local nTam := 0

If ValType(PARAMIXB) == "A"
    nTam := Len(PARAMIXB)
    For nC := 1 To nTam
        aAdd(aRetMenu, aClone(PARAMIXB[nC]))
    Next nC
EndIf

aAdd( aRetMenu, {"Importar Agendas", {|| FwMsgRun(Nil,{|oSay| u_MoveAgenda(oSay)}, Nil, "Atualizando...")}, 2})

Return aRetMenu

//-------------------------------------------------
/*/{Protheus.doc}
Bloco de código
languagetext
// MoveAgenda - Atualzar Agebndas/*/
//-------------------------------------------------
Atualizar Agendas

User Function MoveAgenda(oSay)

Local aInfo     := {}
Local aAux      := {}
Local aCodTFF   := {}
Local aCodTec   := {}
Local aCampos   := {}
Local cAliasABQ	:= GetNextAlias()
Local cAliasABB := GetNextAlias()
Local cAliasTGY := GetNextAlias()
Local cAliasP   := "MNTPRO"
Local cCodTFJ   := (cAliasP)->TFJ_CODIGO
Local cContrt   := ""
Local cConRev   := ""
Local cOriTFJ   := ""
Local cIn2      := ""
Local cSqlTFF   := ""
Local cField    := ""
Local cMsg      := "NãoNao foram encontrados agendas de atendentes em aberto para o OrçamentoOrcamento/Contrato/Posto/Recursos HumanoHumanos informado."
Local dDtIni    := Stod("")
Local dDtFin    := Stod("")
Local lFound    := .F.
Local nPosTFF   := 0
Local nPosTec   := 0
Local nTotal    := 0
Local nPos      := 0
Local nI        := 0
Local nX        := 0

BEGIN TRANSACTION

TFJ->(DbSetOrder(1)) //TFJ_FILIAL+TFJ_CODIGO
If TFJ->(DbSeek(xFilial("TFJ")+cCodTFJ))

	// Pesquisar Orcamento/Contrato Origem
    cContrt := cContrt := TFJ->TFJ_CONTRT
    cConRev := TFJ->TFJ_CONREV
    cOriTFJ := TFJ->TFJ_XCODOR
	  BeginSql Alias cAliasABQ
		SELECT
			    SELECT
      TFF.TFF_COD,
			 TFF.TFF_XCODOR,
			 ABQ.ABQ_CONTRT,
			 ABQ.ABQ_ITEM,
			 ABQ.ABQ_ORIGEM,
			 ABQ.ABQ_TOTAL,
			 ABQ.ABQ_SALDO
		    FROM %table:ABQ% ABQ
		    INNER JOIN %table:TFJ% TFJ ON
			TFJ.TFJ_FILIAL       TFJ.TFJ_FILIAL = %xFilial:TFJ% AND
			      TFJ.TFJ_CODIGO = %Exp:cOriTFJ% AND
			      TFJ.TFJ_STATUS = '1' AND AND
			TFJ.%notdel%
		    INNER JOIN %table:TFL% TFL ON
			      TFL.TFL_FILIAL = %xFilial:TFL%  AND
			      TFL.TFL_CODPAI = TFJ.TFJ_CODIGO AND
			 TFL.%notdel%
		    INNER JOIN %table:TFF% TFF ON
			      TFF.TFF_FILIAL = %xFilial:TFF%  AND
			      TFF.TFF_FILIAL = ABQ.ABQ_FILTFF AND
			      TFF.TFF_COD    = ABQ.ABQ_CODTFF AND
			      TFF.TFF_CODPAI = TFL.TFL_CODIGO AND
			 TFF.%notdel%
		WHERE
			    WHERE
      ABQ.ABQ_FILIAL = %xFilial:ABQ% AND ABQ.%notdel%
	  EndSql

	  While (cAliasABQ)->(!EOF())
		    aAux := Array(3)
		    aAux[1] := (cAliasABQ)->ABQ_CONTRT+(cAliasABQ)->ABQ_ITEM+(cAliasABQ)->ABQ_ORIGEM // Contrato Origem
		    aAux[2] := cContrt+(cAliasABQ)->ABQ_ITEM+(cAliasABQ)->ABQ_ORIGEM // Contrato Destino
		    aAux[3] := (cAliasABQ)->ABQ_TOTAL -(cAliasABQ)->ABQ_SALDO // Consumido da configuracao original
		    aAdd(aInfo, aAux)
		    (cAliasABQ)->(DbSkip())
	  EndDo

	  (cAliasABQ)->(DbCloseArea())

	  If Len(aInfo) > 0 .And. MsgYesNo("Confirma a importaçãoimportacao das Agendas dos Atendentes do OrçamentoOrcamento " + cOriTFJ + " para o OrçamentoOrcamento " + cCodTFJ + "?")
     // Realiza atuacaoatualizacao da agenda do atendente
		    For nX := 1 To LEN(aInfo)
			      cIn2 += " '" + aInfo[nX][1] + "' "
			      If nX <> LEN(aInfo)
				        cIn2 += ","
			EndIf
		      EndIf
    Next nX
		    cIn2 := "% IN ( " + cIn2 + ") %"

		    BeginSQL Alias cAliasABB
			      SELECT ABB_IDCFAL, ABB_CODTEC, ABB_DTINI, ABB_HRINI, ABB_DTFIM, ABB.R_E_C_N_O_ AS REGISTRO
				      FROM %Table:ABB% ABB
				      WHERE ABB.ABB_FILIAL = %xFilial:ABB%
				        AND (ABB.ABB_CHEGOU <> "S" AND ABB.ABB_ATENDE <> "1")
				 AND ABB.%NotDel%
				AND ABB        AND ABB.ABB_IDCFAL %Exp:cIn2%
				      ORDER BY 1, 2, 3
		EndSQL
		    EndSQL

    While (cAliasABB)->(!EOF())
			// Reservar data inicial e final
			nPosTec oSay:= aScan(aCodTec, {|x| x[1] == SetText("Agenda - Atendente: "+(cAliasABB)->ABB_CODTEC})
			If +" - Data: "+(cAliasABB)->ABB_DTINI)
      ProcessMessages()
      // Controle data inicial final
      nPosTec := aScan(aCodTec)
      If nPosTec == 0
				        aAdd(aCodTec,{(cAliasABB)->ABB_CODTEC, StoDSToD((cAliasABB)->ABB_DTINI), StoDSToD((cAliasABB)->ABB_DTINI)})
			Else
				      Else
        aCodTec[nPosTec, 3] := StoD((cAliasABB)->ABB_DTINI)
			EndIf
			      EndIf
      // Encontrar registro substituido
			 substit
      nPos := aScan(aInfo, {|x| x[1] == (cAliasABB)->ABB_IDCFAL})
			      If nPos > 0 
				        ABB->(DbGoTo((cAliasABB)->REGISTRO))
				        RecLock("ABB", .F.)
				        ABB->ABB_IDCFAL := aInfo[nPos][2] // Atualizar IDCFAL
				
        ABB->(MsUnlock())
				        nTotal++
			EndIf
			      EndIf
      (cAliasABB)->(DbSkip())
		EndDo
		(cAliasABB)->(DbCloseArea())

		If Empty(cContrt)    EndDo
    If Empty(cContrt) .OR. At740Recor(cContrt)
			      For nI := 1 To Len(aInfo)
				        // Atualizar Saldos
				        ABQ->(DbSetOrder(1))
  //ABQ_FILIAL + ABQ_CONTRT + ABQ_ITEM + ABQ_ORIGEM
				If ABQ->(DbSeek(xFilial("ABQ")+aInfo[nI][2]))
					          RecLock("ABQ", .F.)
					          ABQ->ABQ_SALDO := ABQ->ABQ_TOTAL - aInfo[nI][3] // Desconta o que ja foi consumido na configuracao anterior
					MsUnlock()
				EndIf
			Next nI
		EndIf

		// Atualizar informacao da gestao de escalas
		 consumido na config anterior
          MsUnlock()
        EndIf
      Next nI
    EndIf
    // Atualizar gestao de escalas
    aCodTFF := At870CodTFF(cCodTFJ)
		    If Len(aCodTFF) > 0
			      cSqlTFF := "%("
			      For nI:=1 To Len(aCodTFF)
				        cSqlTFF += "'" + aCodTFF[ nI, 1 ] + "'"
				        If (nI+1) <= Len(aCodTFF)
					          cSqlTFF += ","
				EndIf
			        EndIf
      Next nI
			      cSqlTFF += ")%"
			      // Verificar as configuracoes dos efetivos
			      BeginSql Alias cAliasTGY
				SELECT
					        SELECT TGY.*
				FROM
					        FROM %table:TGY% TGY
				WHERE
					        WHERE
          TGY.TGY_FILIAL = %xFilial:TGY% AND
					          TGY.TGY_ULTALO <> ' ' AND TGY.%notDel% AND
					          TGY.TGY_CODTFF IN %Exp:cSqlTFF%
			EndSQL
			        EndSQL

        If (cAliasTGY)->(!Eof())
				          aCampos := FWSX3Util():GetAllFields("TGY", .F.)
				          If Len(aCampos) > 0
					            While (cAliasTGY)->(!Eof())
						// Pesquisar datas Inicial e Final
						              // Pesquisar datas Inicial e Final
              nPosTFF := aScan(aCodTFF, {|x| x[1] == (cAliasTGY)->TGY_CODTFF})
						              If nPosTFF > 0
							nPosTec := aScan(aCodTec, {|x| x[1] ==                 nPosTec := aScan(aCodTec, {|x|x[1]==(cAliasTGY)->TGY_ATEND})
							                dDtIni := StoD("")
							                dDtFin := StoD("")
							                If nPosTec > 0
								                  dDtIni := aCodTec[nPosTec, 2]
								                  dDtFin := aCodTec[nPosTec, 3]
							EndIf
							// Realiza a atualizacao das configuracoes do efetivo TGY
							                EndIf
                // Atualizacao configuracoes
                dbSelectArea("TGY")
							lFound := TGY->(                TGY->(DbSetOrder(1))
                lFound := TGY->(DbSeek(xFilial("TGY")+(cAliasTGY)->TGY_ESCALA+(cAliasTGY)->TGY_CODTDX+aCodTFF[nPosTFF, 2]+(cAliasTGY)->TGY_ITEM))
							                RecLock("TGY", !lFound)
							For nX := 1 to Len(aCampos)
								                For nX := 1 to Len(aCampos)
                  cField := AllTrim(aCampos[nX])
								                  If cField == "TGY_CODTFF"
									                    TGY->TGY_CODTFF := aCodTFF[nPosTFF, 2]
								                  ElseIf cField == "TGY_DTINI" .And. !Empty(dDtIni)
									                    TGY->TGY_DTINI := dDtIni
								                  ElseIf cField == "TGY_DTFIM" .And. !Empty(dDtFin)
									                    TGY->TGY_DTFIM := dDtFin
								                  ElseIf cField == "TGY_ULTALO" .And. !Empty(dDtFin)
									                    TGY->TGY_ULTALO := dDtFin
								                  ElseIf FWSX3Util():GetFieldType(cField) == "D"
									                    TGY->&(cField) := SToD((cAliasTGY)->&(cField))
								Else
									                  Else
                    TGY->&(cField) := (cAliasTGY)->&(cField)
								EndIf
							Next nX
							                  EndIf
                Next nX
              TGY->(MsUnlock())
						EndIf
						            EndIf
            (cAliasTGY)->(DbSkip())
					EndDo
					          EndDo
          (cAliasTGY)->(DbCloseArea())
				EndIf
			EndIf
		EndIf
		        EndIf
      EndIf
    EndIf
    If nTotal == 0
			      cMsg := "NãoNao foram encontradas Agendas."
		Else
			    Else
      cMsg := "Foram processados " + cValToChar(nTotal) + " Agendas."
		EndIf
	  Else
		    cMsg := "NãoNao foi encontradoinformado nenhum OrçamentoOrcamento/Contrato/Posto/Recursos Humano para este Contrato."
	  EndIf
EndIf

END TRANSACTION

MsgAlert(cMsg)

Return Nil
Bloco de código
languagetext


//-----------------------------------------------------------------------------------------
/*/{Protheus.doc} At870CodTFF - retornar o codigo do recurso humano dentro do orcamento /*/
//-----------------------------------------------------------------------------------------
Static Function At870CodTFF(cCodTFJ)
Local aRet      := {}
Local cAliasTFJ := GetNextAlias()

BeginSql Alias cAliasTFJ
	SELECT
		TFF.TFF_COD, TFF.TFF_XCODOR
	FROM
		%table:TFJ% TFJ
	INNER JOIN %table:TFL% TFL ON
		TFL.TFL_FILIAL = %xFilial:TFL%  AND
		TFL.TFL_CODPAI = TFJ.TFJ_CODIGO AND TFL.%notDel%
	INNER JOIN %table:TFF% TFF ON
		TFF.TFF_FILIAL = %xFilial:TFF%  AND
		TFF.TFF_CODPAI = TFL.TFL_CODIGO AND TFF.%notDel%
	WHERE
		TFJ.TFJ_FILIAL = %xFilial:TFJ% AND
		TFJ.TFJ_CODIGO = %Exp:cCodTFJ% AND TFJ.%notDel%
	GROUP BY
		TFF.TFF_COD, TFF.TFF_XCODOR
EndSql

While (cAliasTFJ)->(!Eof())
	aAdd(aRet,{(cAliasTFJ)->TFF_COD, (cAliasTFJ)->TFF_XCODOR})
	(cAliasTFJ)->(DbSkip())
EndDo

(cAliasTFJ)->(dbCloseArea())
Return(aRet)

//-------------------------------------------------------------
/*/{Protheus.doc} ConsLocOri - Consulta F3 campo TFL_XCODOR /*/
//-------------------------------------------------------------
User Function ConsLocOri()
Local cFiltro  := ""
Local oModel  := FwModelActive()
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local oMdlTFL := oModel:GetModel("TFL_LOC")

If oMdlTFL:Length() > 0
	  cFiltro := "TFL->TFL_LOCAL == '" + oMdlTFL:GetValue("TFL_LOCAL") + "' .AND. TFL->TFL_CONTRT <> ' ' .AND. TFL->TFL_CODPAI == '" + oMdlTFJ:GetValue("TFJ_XCODOR") + "'"
	  cFiltro := "@#" + cFiltro + "@#"
EndIf

Return cFiltro

//------------------------------------------------------------
/*/{Protheus.doc} ConsRHOri - Consulta F3 campo TFF_XCODOR /*/
//------------------------------------------------------------
User Function ConsRHOri()
Local cFiltro := ""
Local oModel  := FwModelActive()
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFF := oModel:GetModel("TFF_RH")

If oMdlTFF:Length() > 0
	  cFiltro := "TFF->TFF_PRODUT == '" + oMdlTFF:GetValue("TFF_PRODUT") + "' .AND. TFF->TFF_CONTRT <> ' ' .AND. TFF->TFF_CODPAI == '" + oMdlTFL:GetValue("TFL_XCODOR") + "'"
	  cFiltro := "@#" + cFiltro + "@#"
EndIf

Return cFiltro

//---------------------------------------------------------
/*/{Protheus.doc} ValLocOri - Valid do campo TFL_XCODOR /*/
//---------------------------------------------------------
User Function ValLocOri()
Local lRet    := .F.
Local oModel  := FwModelActive()
Local oMdlTFJ := oModel:GetModel("TFJ_REFER")
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local cAlias  := GetNextAlias()

BeginSql Alias cAlias
	  SELECT 1
	FROM
		  FROM %table:TFL% TFL
	  WHERE
		    TFL.TFL_FILIAL = %xFilial:TFL% AND
		    TFL.TFL_CODIGO = %Exp:oMdlTFL:GetValue("TFL_XCODOR")% AND
		    TFL.TFL_CODPAI = %Exp:oMdlTFJ:GetValue("TFJ_XCODOR")% AND
		    TFL.TFL_LOCAL  = %Exp:oMdlTFL:GetValue("TFL_LOCAL")%  AND
		    TFL.TFL_CONTRT <> ' ' AND TFL.%notDel%
EndSql

If (cAlias)->(!Eof())
	  lRet := .T.
EndIf

(cAlias)->(dbCloseArea())

Return lRet

//--------------------------------------------------------
/*/{Protheus.doc} ValRHOri - Valid do campo TFF_XCODOR /*/
//--------------------------------------------------------
User Function ValRHOri()
Local lRet    := .F.
Local oModel  := FwModelActive()
Local oMdlTFL := oModel:GetModel("TFL_LOC")
Local oMdlTFF := oModel:GetModel("TFF_RH")
Local cAlias  := GetNextAlias()

BeginSql Alias cAlias
	  SELECT 1
	FROM
		  FROM %table:TFF% TFF
	  WHERE
		    TFF.TFF_FILIAL = %xFilial:TFF% AND
		    TFF.TFF_COD    = %Exp:oMdlTFF:GetValue("TFF_XCODOR")% AND
		    TFF.TFF_PRODUT = %Exp:oMdlTFF:GetValue("TFF_PRODUT")% AND
		    TFF.TFF_LOCAL  = %Exp:oMdlTFL:GetValue("TFL_LOCAL")%  AND
		    TFF.TFF_CONTRT <> ' ' AND TFF.%notDel%
EndSql

If (cAlias)->(!Eof())
	  lRet := .T.
EndIf

(cAlias)->(dbCloseArea())

Return lRet 

04. DEMAIS INFORMAÇÕES

Aviso
titleObservação

Esta funcionalidade depende da criação dos campos e consultas específicas usados no Cadastro de Orçamentos Simplif. para permitir relacionar os Postos/Recursos Humanos com Orçamentos;Contratos vigentes, conforme exemplos abaixo.

Toggle Cloak
idupddistr
Clique aqui para exibir ou esconder as alterações de dicionário.

Cloak
idupddistr

Criação dos campos específicos:

CampoTipoTamanhoTítuloDescriçãoMascaraValidaçãoConsulta F3ContextoModo
TFJ_XCODORC11Orç. Orig. Orçamento Origem@!
TFJRealAlterar
TFL_XCODORC6Local Orig,   Local Origem@!U_ValLocOri()TFLORIRealAlterar
TFF_XCODORC6Posto Orig. Posto Origem@!U_ValRHOri()TFFORIRealAlterar

Criação das Consultas específicas:

ConsultaTipoSeq.ColunaDescriçãoConteúdo
TFLORI101DBLocais OrigemTFL
TFLORI20101Codigo
TFLORI40101CodigoTFL_CODIGO
TFLORI40102Local Atend.TFL_LOCAL
TFLORI40103Nr. ContratoTFL_CONTRT
TFLORI501

TFL->TFL_CODIGO
TFLORI601

@#U_ConsLocOri()
ConsultaTipoSeq.ColunaDescriçãoConteúdo
TFFORI101DBPostos OrigemTFF
TFFORI20101Codigo
TFFORI40101CodigoTFF_COD
TFFORI40102ProdutoTFF_PRODUT
TFFORI40103Local Atend.TFF_LOCAL
TFFORI40104Nr. ContratoTFF_CONTRT
TFFORI501

TFF->TFF_COD
TFFORI601

@#U_ConsRHOri()

...