#include 'protheus.ch' #include 'parmtype.ch' /*/{Protheus.doc} //TODO Descrição auto-gerada. @author Administrator @since 07/12/2018 @version 1.0 @return ${return}, ${return_description} @param aPedido, array, descricao @type function /*/ User function WorkGRE(aGREparam) //{cCodigo, dData, cCCusto, cDescri, cArquivo} Local oWF Local __User := RetCodUsr() Local vMensagem, vMedia, vIdWF, cQuery, cBaseWindows:= "" Local aNotas := {} Local aAprovador := {} Local aFiles, aAnexo := {} Local cBaseAnexo := '\anexos\' Local cNomeAnexo := ALLTRIM(xFilial())+ALLTRIM(aGREparam[1][1]) aFiles := Directory(cBaseAnexo+cNomeAnexo+".*") aAnexo := cBaseAnexo+aFiles[1][1] cQuery := "SELECT MAX(F1_FILIAL) AS F1_FILIAL, MAX(F1_DOC) AS F1_DOC, MAX(F1_EMISSAO) AS F1_EMISSAO, MAX(A2_NOME) AS A2_NOME, SUM(D1_TOTAL - D1_DESC + D1_DESPESA + D1_IPI + D1_VALFRE) AS TOTAL" cQuery += " FROM SF1010" cQuery += " INNER JOIN SA2010 ON F1_FORNECE = A2_COD AND SA2010.D_E_L_E_T_ <> '*'" cQuery += " INNER JOIN SD1010 ON F1_FILIAL = D1_FILIAL AND F1_DOC = D1_DOC AND F1_FORNECE = D1_FORNECE AND F1_SERIE = D1_SERIE AND SD1010.D_E_L_E_T_ <> '*'" cQuery += " WHERE F1_ZCODGRE = '" + Alltrim(aGREparam[1][1]) + "' AND SF1010.D_E_L_E_T_ <> '*'" cQuery += " GROUP BY F1_DOC, F1_EMISSAO, A2_NOME" If Select("TMP1") > 0 dbSelectArea("TMP1") dbCloseArea() EndIf dbUseArea(.t.,"TOPCONN",TcGenQry(,,cQuery),"TMP1", .f., .t.) DbSelectArea("TMP1") DbGoTop() While TMP1->(!EOF()) AADD(aNotas, {TMP1->F1_FILIAL, TMP1->F1_DOC, TMP1->F1_EMISSAO, TMP1->TOTAL, TMP1->A2_NOME}) TMP1->(dbSkip()) Enddo dbCloseArea() cQuery := "SELECT ZSC_NOME, ZSC_EMAIL, ZSC_USER" cQuery += " FROM ZSC010" cQuery += " WHERE ZSC_FILIAL = '"+ xFilial('ZSC') +"' AND ZSC_CC = '"+ ALLTRIM(aGREparam[1][3]) +"' AND ZSC010.D_E_L_E_T_ <> '*'" If Select("TMP2") > 0 dbSelectArea("TMP2") dbCloseArea() EndIf dbUseArea(.t.,"TOPCONN",TcGenQry(,,cQuery),"TMP2", .f., .t.) DbSelectArea("TMP2") DbGoTop() While TMP2->(!EOF()) AADD(aAprovador,{TMP2->ZSC_NOME, TMP2->ZSC_EMAIL, TMP2->ZSC_USER}) TMP2->(dbSkip()) EndDo dbCloseArea('TMP2') dbSelectArea("ZG1") dBSetOrder(1) If DbSeek(xFilial('ZG1')+Alltrim(aGREparam[1][1])) vIdWF := Alltrim(ZG1->ZG1_ZWFAPRO) If(Len(vIdWF)>0) WFKillProcess(vIdWF+".01") oWF := TWFProcess():New("APROVGRE", "Aprovação de GRE") Else oWF := TWFProcess():New("APROVGRE", "Aprovação de GRE") EndIf Endif oWF:NewTask("Aprovacao", "\workflow\gre\100_AprovGRE.htm") RecLock("ZG1", .F.) ZG1->ZG1_ZWFAPRO := oWF:fProcessID MsUnLock() dbCloseArea("ZG1") oWF:oHtml:ValByName("FILIAL" , LEFT(aGREparam[1][3], 2) ) oWF:oHtml:ValByName("FILCOD" , xFilial('ZG1'), "" ) oWF:oHtml:ValByName("GRE" , Alltrim(aGREparam[1][1]) ) oWF:oHtml:ValByName("USUARIO" , UsrRetName(RetCodUsr()) ) oWF:oHtml:ValByName("EMISSAO" , aGREparam[1][2]) oWF:oHtml:ValByName("APROVADOR" , aAprovador[1][3]) FOR nPos := 1 TO LEN(aNotas) AAdd(oWF:oHtml:ValByName("TABC1.FILIAL"), Alltrim(aNotas[nPos][1])) AAdd(oWF:oHtml:ValByName("TABC1.DOCUMENTO"), Alltrim(aNotas[nPos][2])) AAdd(oWF:oHtml:ValByName("TABC1.EMISSAO"), STOD(Alltrim(aNotas[nPos][3]))) AAdd(oWF:oHtml:ValByName("TABC1.TOTAL"), 'R$'+ALLTRIM(STR(NOROUND(aNotas[nPos][4], 2)))) AAdd(oWF:oHtml:ValByName("TABC1.FORNECEDOR"), Alltrim(aNotas[nPos][5])) NEXT nPos oWF:cTo := aAprovador[1][2] oWF:cCC := "" oWF:cBcc:= "" oWF:cSubject := "Aprovação de GRE - " + Alltrim(aGREparam[1][1]) oWF:bReturn := "U_GREWFRet" oWF:bTimeOut := {{"U_GRETmOut",0,0,10}} cAtuTo := oWF:cTo cAtuCC := oWF:cCC cAtuBCC := oWF:cBCC oWF:cTo := __User oWF:cCC := "" oWF:cBcc := "" cMailId := oWF:Start() Priemail(aAprovador[1][1], Alltrim(aGREparam[1][1]), aAnexo, cMailID,cAtuTo,cAtuCC,cAtuBCC,oWF:cSubject,oWF,__User) MsgInfo("Aprovação do GRE "+ Alltrim(aGREparam[1][1]) +" enviada com sucesso!", "WorkFlow") Return .T. Static Function Priemail(cNome, cPedido, aAnexo, cMailID,cAtuTo,cAtuCC,cAtuBCC,cSubject,oP,cCodUseWf) Local cIPInt := "192.168.50.160:8082" Local cIPExt := "177.71.74.75:9091" Local cLkInt := "http://"+cIPInt+"/wf/messenger/emp"+cEmpAnt+"/"+cCodUseWf+"/"+cMailID+".htm" Local cLkExt := "http://"+cIPExt+"/wf/messenger/emp"+cEmpAnt+"/"+cCodUseWf+"/"+cMailID+".htm" oP:NewTask("Link de Gestao Workflow", "\workflow\gre\link_WF.htm") oP:ohtml:ValByName("APROVADOR",cNome) oP:ohtml:ValByName("GRE",cPedido) oP:ohtml:ValByName("USUARIO",ALLTRIM(UsrRetName(RetCodUsr()))) oP:ohtml:ValByName("link_1",cLkInt) oP:ohtml:ValByName("link_2",cLkExt) oP:cTo := cAtuTo oP:cCC := cAtuCC oP:cBCC := cAtuBCC oP:csubject := cSubject IF !Empty(aAnexo) oP:AttachFile(aAnexo) ENDIF oP:bTimeOut := {{"U_GRETmOut",0,0,10}} oP:Start() oP:Free() Return() User Function GREWFRet(oWF) Local pFilial, pNum, pAprovador Local aAreaAnt := GETAREA() pFilial := oWF:oHtml:RetByName("FILCOD") pNum := oWF:oHtml:RetByName("GRE") pAprovador := oWF:oHtml:RetByName("APROVADOR") cAprova := LEFT(oWF:oHtml:RetByName("Aprovacao"),1) If(cAprova=="S") dbSelectArea("ZG1") dBSetOrder(1) If DbSeek(xFilial('ZG1')+Alltrim(pNum)) RecLock("ZG1", .F.) ZG1->ZG1_DTAPRO := DATE() ZG1->ZG1_APROV := pAprovador ZG1->ZG1_STATUS := .T. MsUnLock() ENDIF dbCloseArea() dbSelectArea('SF1') dbSetIndex("E") dbSeek(xFilial('SF1') + ALLTRIM(pNum)) While SF1->(!EOF()) .AND. ALLTRIM(SF1->F1_ZCODGRE) == ALLTRIM(pNum) SF1->F1_ZGREAPR := .T. SF1->(dbSkip()) ENDDO dbCloseArea() ELSEIF(cAprova=="N") SendEmail(pNum) EndIf oWF:Finish() Return Nil Static Function SendEmail(cGRE) Local cMensagem, cAssunto := "" Local cPara, cNome:= "" Private cMailConta := NIL Private cMailServer := NIL Private cMailSenha := NIL cMailConta :=If(cMailConta == NIL,GETMV("MV_EMCONTA"),cMailConta) cMailServer :=If(cMailServer == NIL,GETMV("MV_RELSERV"),cMailServer) cMailSenha :=If(cMailSenha == NIL,GETMV("MV_EMSENHA"),cMailSenha) If Empty(cMailServer) Help(" ",1,"SEMSMTP") Return(.F.) EndIf If Empty(cMailServer) Help(" ",1,"SEMCONTA") Return(.F.) EndIf dbSelectArea('ZG1') dbSetOrder(1) dbSeek(xFilial('ZG1') + cGRE) IF FOUND() .AND. ALLTRIM(ZG1->ZG1_USRCOD) <> '' cPara := ALLTRIM(UsrRetMail(ALLTRIM(ZG1->ZG1_USRCOD))) cNome := UsrRetName(ALLTRIM(ZG1->ZG1_USRCOD)) ELSE Help(NIL, NIL, "E-mail não enviado.", NIL, "Não foi possível notificar o usuário.", 1, 0, NIL, NIL, NIL, NIL, NIL, {"Não foi possível encontrar o e-mail do funcionário que criou a GRE"}) Return ENDIF dbCloseArea() cMensagem := '' cMensagem += '' cMensagem += '

' cMensagem += 'Prezado(a) '+cNome+',' cMensagem += '

' cMensagem += '

' cMensagem += 'Sua GRE de numero '+cGRE+' não foi aprovada pelo seu gerente.
' cMensagem += '

' cMensagem += '

' cMensagem += 'Observações:
' cMensagem += 'Verifique o motivo da rejeição, caso tenha sido acidentalmente solicite ao gerente que aprove diretamente no sistema, ' cMensagem += 'caso contrário exclua a GRE gerada e crie uma nova dentro dos padrões aceitáveis.' cMensagem += '

' cMensagem += '' cMensagem += '' cAssunto := 'GRE '+cGRE+' não aprovada pelo gerente.' GPEMail(cAssunto,cMensagem,cPara) Return User Function GRETmOut(oWF) oWF:Finish() // Cria uma nova tarefa para o reenvio da mensagem ao mesmo destinatario. oWF:NewTask("Aprovacao", "\workflow\gre\100_AprovGRE.htm", .T.) // Parametro .T. --> repete os dados do HTML anterior. oWF:bReturn := "U_GREWFRet" oWF:cSubject += " (Timeout processo: " + oWF:fProcessID + ") REENVIO" oWF:cCC := "flavio.martins@ormec.com.br" // Reenvia a mensagem. oWF:Start() Return Nil