You are on page 1of 15

#Include

#Include
#Include
#Include

"Rwmake.ch"
"Topconn.ch"
"AP5Mail.ch"
"Protheus.ch"

/*

Programa AUTA012 Autor Lucas Moresco


Data 25/06/11

Desc.
Workflow para envio de orcamento ao cliente.

Disparado apos a alteracao do orcamento,

se a funcao MsgYesNo() resultar em True.

Disparado no Ponto de Entrada PE_TECA400/AT400GRV

Uso
Protheus - Automatech

*/
User Function AUTA012()
//
//
Variaveis Tecnicas

//
Local _cQry
:= ""
//Variavel auxiliar para manipulacao da query. Seleciona dados do Cabecalho.
Local _cQry2
:= ""
//Variavel auxiliar para manipulacao da query. Update email do Cliente.
Local _cQry3
:= ""
//Variavel auxiliar para manipulacao da query. Le os Itens do Orcamento.
Local _lRet
:= .F.
//Flag para controle de execcao. F = Fluxo Normal, T = Encerramento da r
otina.
Local _lServ
:= .F.
//Flag para controle das variaveis de servico.
Local _lProd
:= .F.
//Flag para controle das variaveis de produto.
Local _lOk
:= .T.
//Flag para controle do preenchimento dos apontamentos.
Local _aInfo
:= {}
//Variavel para armazenar as informacoes do usuario.
Local cCepPict
:= PesqPict("SA1","A1_CEP")
//Variavel para auxiliar na exibicao da mascara do CEP
Local cCGCPict
:= PesqPict("SA1","A1_CGC")
//Variavel para auxiliar na exibicao da mascara
//
//
Variaveis Auxiliares

//
Local _nTotalPrc
:= 0
//Variavel para armazenar o total. Funcao: (AB5->AB5_TOTAL * nPgto)/100)
Local _cCliMen
:= ""
//Variavel para armazenamento de mensagem ao usuario. Cliente XX nao cadastrado.
Local _cUser
:= ""

//Variavel para armazenar o codigo do usuario.


Local _cCodPro
:= ""
//Variavel para armazenar o codigo do produto.
Local _cNomeCli
:= ""
//Variavel para armazenar o nome do cliente.
Local _cCliente
:= ""
//Variavel para armazenar o codigo do cliente.
Local _cLojaCli
:= ""
//Variavel para armazenar o loja do cliente.
Local _cLaudo
:= ""
//Variavel para armazenamento do Memo Laudo.
Local _cTecRespon := ""
//Variavel para armazenamento do Codigo do Tecnico Responsavel pelo Laudo.
Local _cCondPag
:= ""
//Variavel para armazenamento da Condicao de Pagamento.
Local _cEmail
:= Space(30)
//Variavel para armazenamento do Email do cliente.
Local _cURL
:= GetMV("MV_WFURL")
//Variavel para armazenamento do parametro de URL do workflow.
Local _cDesPro
:= ""
//Variavel para armazenamento da descricao do produto
Local _cUM
:= ""
//Variavel para armazenamento da Unidade de Medida.
Local _cQuant
:= ""
//Variavel para armazenamento da quantidade.
Local _cVUnit
:= ""
//Variavel para armazenamento do valor unitario.
Local _cTotal
:= ""
//Variavel para armazenamento do valor total.
Local _cSubVen
:= ""
//Va
rivel para armazenamento do Sub-Total.
Local _cDesVen
:= ""
//Va
rivel para armazenamento do valor do desconto.
Local _cCodPro
:= ""
//Variavel para armazenamento do codigo do produto.
Local _cEmailTec
:= ""
//Variavel para armazenamento do email do Tecnico Responsavel.
Local _cEmailAdd := GetMv("MV_WFUEMAI")
//Variavel para armazenamento do email recebido do parametro.
Private oProcess
//Variavel para controle do objeto de manipulacao do workflow.
Private oHtml
//Variavel para controle do objeto de manipulacao do workflow. Manipulacao do H
TML.
//
//Busca todos os dados do cabecalho
//
If Select("AB3TMP") <> 0
AB3TMP->(DbCloseArea())
EndIf
_cQry := "Select AB3.AB3_FILIAL, AB3.AB3_NUMORC, AB3.AB3_CODCLI, AB3.AB3_LOJA, A
B3.AB3_EMISSA,AB3.AB3_RLAUDO,AB3.AB3_LAUDO, AB3.AB3_ETIQUE, AB3.AB3_CONPAG, AB3.
AB3_MOEDA, SA1.A1_COD, SA1.A1_LOJA, "+chr(13)
_cQry += "SA1.A1_NOME, SA1.A1_TEL, SA1.A1_END, SA1.A1_CEP, SA1.A1_FAX, SA1.A1_MU
N, SA1.A1_EST, SU5.U5_EMAIL, SU5.U5_CODCONT, SU5.U5_CONTAT, "+chr(13)
_cQry += "SA1.A1_CGC, SA1.A1_INSCR, SA1.A1_ENDENT, SA1.A1_CEPE, SA1.A1_EMAIL, SA
1.A1_TIPO, SA1.A1_VEND, "+chr(13)

_cQry += "SA1.A1_ENDCOB, SA1.A1_CEPC, SA1.A1_MUNE, SA1.A1_ESTE, SA1.A1_MUNC, SA1


.A1_ESTC, SA1.A1_BAIRRO "+chr(13)
_cQry += "From " +RetSqlName("AB3")+" AB3(NoLock) "+chr(13)
_cQry += "Inner Join " +RetSqlName("SA1")+ " SA1(NoLock) "+chr(13)
_cQry += "On (AB3.AB3_CODCLI = SA1.A1_COD) And (AB3.AB3_LOJA = SA1.A1_LOJA) "+ch
r(13)
_cQry += "Inner Join " +RetSqlName("SU5")+ " SU5(NoLock) "+chr(13)
_cQry += "On (AB3.AB3_CONTWF = SU5.U5_CODCONT) And"+chr(13)
_cQry += "(AB3.AB3_FILIAL = '"+xFilial("AB3")+"') "
_cQry += "Where AB3.D_E_L_E_T_ <> '*' And SA1.D_E_L_E_T_ <> '*' And SU5.D_E_L_E
_T_ <> '*' And AB3.AB3_NUMORC = '"+AB3->AB3_NUMORC+"' "+chr(13)
_cQry += "And AB3.AB3_STATUS = 'A'"+chr(13)
_cQry := ChangeQuery(_cQry)
DbUseArea(.T.,"TOPCONN",TcGenQry(,,_cQry),"AB3TMP",.T.,.T.)
Count To nRecCount
//
//Caso tenha Dados.
//
If (nRecCount > 0)
DbSelectArea("AB3TMP")
DbGoTop()
// Caso nao encontre um e-mail
_cEmail := Alltrim(AB3TMP->U5_EMAIL)
If (Empty(_cEmail))
If MsgYesNo("O Contato "+AllTrim(AB3TMP->U5_CODCONT)+"-"+AllTrim
(AB3TMP->U5_CONTAT)+" no tem um email cadastrado, deseja cadastrar agora?")
_cEmail := Space(200)
@ 0,0 TO 150,300 DIALOG oDlg TITLE "Cadastro de Email do Cont
ato"
@ 1,1 Say AllTrim (AB3TMP->U5_CODCONT) + " - " + AllTrim(AB3T
MP->U5_CONTAT)
@ 2,1 Say "Contato sem Email cadastrado! Favor informar:"
@ 3,1 GET _cEmail PICTURE "@E" VALID .T. Size 120,10
@ 6,2 BUTTON "Confirmar" SIZE 35,10 ACTION Close(oDlg)
ACTIVATE DIALOG oDlg CENTER
// Grava o e-mail na na tabela de Cliente(SA1)
_cQry2 := "Update " +RetSqlName("SU5")+" Set U5_EMAIL = '"+Al
lTrim(_cEmail)+"' Where U5_CODCONT = '"+AB3TMP->U5_CODCONT+"' "
TcSqlExec(_cQry2)
EndIf
EndIf
// Caso nao tenha cadastrado e-mail, aborta a operacao
If Alltrim(_cEmail) == ""
_cCliMen := AB3TMP->AB3_CODCLI +"-"+ AB3TMP->A1_NOME

MsgStop("Operao cancelada!")
_cMen := "O Cliente "+_cCliMen+" no possui e-mail Cadastrado"
// Envia e-mail informando que o cliente nao possui e-mail.
U_AUTA007(_cMen,"")
_lRet := .T.
EndIf
// Pesquisa a situao da Etiqueta
If Select("T_FORMA") > 0
T_FORMA->( dbCloseArea() )
EndIf
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql

:=
:=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=

""
"SELECT
"
"
"
"
"
"
" FROM
"
" WHERE
" AND
" AND
" AND
" AND

A.AB3_FILIAL ,"
A.AB3_ETIQUE ,"
A.AB3_CODCLI ,"
A.AB3_LOJA ,"
C.AB4_NUMORC ,"
C.AB4_CODPRO ,"
C.AB4_NUMSER "
" + RetSqlName("AB3") + " A, "
" + RetSqlName("AB4") + " C "
A.AB3_ETIQUE = '" + Alltrim(AB3TMP->AB3_ETIQUE) + "'"
A.AB3_FILIAL = '" + Alltrim(AB3TMP->AB3_FILIAL) + "'"
A.AB3_NUMORC = C.AB4_NUMORC"
A.D_E_L_E_T_ = ''"
C.AB4_FILIAL = '" + Alltrim(AB3TMP->AB3_FILIAL) + "'"

cSql := ChangeQuery( cSql )


dbUseArea( .T., "TOPCONN", TcGenQry(,,cSql), "T_FORMA", .T., .T. )
// Pesquisa a base instalada para carrega a data de garantia/contrato
If Select("T_BASE") > 0
T_BASE->( dbCloseArea() )
EndIf
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql

:=
:=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=

""
"SELECT
"
"
"
"
"
"
" FROM
" WHERE
" AND
" AND
" AND
" AND
" AND

AA3_FILIAL,"
AA3_CODCLI,"
AA3_LOJA ,"
AA3_CODPRO,"
AA3_NUMSER,"
AA3_DTGAR ,"
AA3_CONTRT "
" + RetSqlName("AA3")
AA3_FILIAL = '" + Alltrim(AB3TMP->AB3_FILIAL)
AA3_CODCLI = '" + Alltrim(AB3TMP->AB3_CODCLI)
AA3_LOJA = '" + Alltrim(AB3TMP->AB3_LOJA)
AA3_CODPRO = '" + Alltrim(T_FORMA->AB4_CODPRO)
AA3_NUMSER = '" + Alltrim(T_FORMA->AB4_NUMSER)
D_E_L_E_T_ = ''"

+
+
+
+
+

cSql := ChangeQuery( cSql )


dbUseArea( .T., "TOPCONN", TcGenQry(,,cSql), "T_BASE", .T., .T. )

"'"
"'"
"'"
"'"
"'"

If T_BASE->( EOF() )
__Situacao := "NORMAL"

Else
If Empty(Alltrim(T_Base->AA3_CONTRT))
If T_BASE->AA3_DTGAR >= DTOS(date())
__Situacao := "GARANTIA"
Else
__Situacao := "NORMAL"
Endif
Else
// Pesquisa a data de validade final do contrato para verificao da situao
da Etiqueta
If Select("T_SITUACAO") > 0
T_SITUACAO->( dbCloseArea() )
EndIf
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql
cSql

:=
:=
+=
+=
+=
+=
+=
+=
+=
+=
+=
+=

""
"SELECT
"
"
"
"
" FROM
" WHERE
" AND
" AND
" AND
" AND

AAH_FILIAL,"
AAH_CONTRT,"
AAH_CODCLI,"
AAH_LOJA ,"
AAH_FIMVLD "
" + RetSqlName("AAH")
AAH_FILIAL = '" + Alltrim(AB3TMP->AB3_FILIAL)
AAH_CONTRT = '" + Alltrim(T_Base->AA3_CONTRT)
AAH_CODCLI = '" + Alltrim(AB3TMP->AB3_CODCLI)
AAH_LOJA = '" + Alltrim(AB3TMP->AB3_LOJA)
D_E_L_E_T_ = ''

+
+
+
+

"'"
"'"
"'"
"'"

cSql := ChangeQuery( cSql )


dbUseArea( .T., "TOPCONN", TcGenQry(,,cSql), "T_SITUACAO", .T., .T. )
If T_SITUACAO->( EOF() )
__Situacao := "NORMAL"
Else
If DTOS(ctod(substr(T_SITUACAO->AAH_FIMVLD,07,02) + "/" + substr(T_
SITUACAO->AAH_FIMVLD,05,02) + "/" + substr(T_SITUACAO->AAH_FIMVLD,01,04))) >= DT
OS(date())
__Situacao := "CONTRATO"
Else
__Situacao := "NORMAL"
Endif
Endif
Endif
Endif
//
//Se as informacoes de e-mail estiverem corretas.
//
If (! _lRet)
//
//Inicia o Processo de Workflow

//
cCodProcesso := "ORCAMENTO"
//
//Arquivo html template utilizado para montagem da aprovacao
//
cHtmlModelo := "\workflow\htm\teca400.htm"
//
//Assunto da mensagem
//
cAssunto := "Oramento"
//
//Registre o nome do usuario corrente que esta criando o processo:
//
cUsuarioProtheus:= SubStr(cUsuario,7,15)
//
//Inicialize a classe TWFProcess e assinale a varivel objeto oProcess:
//
oProcess := TWFProcess():New(cCodProcesso, cAssunto)
//
//Crie uma tarefa.
//
oProcess:NewTask(cAssunto, cHtmlModelo)
oHtml := oProcess:oHtml
Conout("(INICIO|ENVIA_ORCAMENTO)Processo: " + oProcess:fProcessID + " Task: " + oProcess:fTaskID )
//
//Armazena dados do usuario
//
PswOrder(1)
If PswSeek(SubStr(cUsuario,7,15),.T.)
_aInfo := PswRet(1)
_cUser := SubStr(cUsuario,7,15)
EndIf

//aInfo[1,2]

DbSelectArea("AB3TMP")
DbGoTop()
While !Eof()
_cCliMen
:= AllTrim(AB3TMP->AB3_CODCLI +"-"+ AB3TMP->A1_NOME)
_cNomeCli := AllTrim(AB3TMP->A1_NOME)
_cTecRespon := AB3TMP->AB3_RLAUDO
If (Empty(_cEmailAdd))
_cEmailTec := AllTrim(Posicione("AA1",1,xFilial("AA1")+_
cTecRespon,"AA1_EMAIL"))
Else
_cEmailTec := Alltrim(_cEmailAdd)
EndIf
_cLaudo
_cCondPag

:= AB3_LAUDO
:= AB3TMP->AB3_CONPAG

oHtml:ValByName("cNumeroCab", AB3TMP->AB3_ETIQUE)
//Numero do etiqueta/orc. p/ cabecalho
oHtml:ValByName("cNumero" , AB3TMP->AB3_ETIQUE)
//Numero da etiqueta/orc.
oHtml:ValByName("cNumOrc" , AB3TMP->AB3_NUMORC)
//Numero real do Orcamento
oHtml:ValByName("cGarantia" , __Situacao)
//Situao da Etiqueta
// Dados da Empresa Corrente
oHtml:ValByName("cNomEmp", SM0->M0_NOMECOM)
//Nome da Empresa corrente
oHtml:ValByName("cEnd" , SM0->M0_ENDCOB)
//Endereco
oHtml:ValByName("cMun" , SM0->M0_CIDCOB)
//Municipio
oHtml:ValByName("cEst" , SM0->M0_ESTCOB)
//Estado
oHtml:ValByName("cTel" , SM0->M0_TEL)
//Telefone
oHtml:ValByName("cFax" , SM0->M0_FAX)
//Fax
oHtml:ValByName("cCNPJ" , Transform(SM0->M0_CGC,cCgcPict))
//CNPJ
oHtml:ValByName("cIE"
, Transform(SM0->M0_INSC,"@R 999.999.99
9.999"))
//Inscricao Estadual
// Dados do Cliente
oHtml:ValByName("cNomCli"
//Razao Social do Cliente
oHtml:ValByName("cTelCli"
//Telefone
oHtml:ValByName("cBairroCli"
//Bairro
oHtml:ValByName("cMunCli"
//Municipio
oHtml:ValByName("cCEPCli"
999-999" ))
//Cep
oHtml:ValByName("cEndCli"
//Endereco
oHtml:ValByName("cEstCli"
//Estado
oHtml:ValByName("cCNPJCli"
))
//CNPJ
oHtml:ValByName("cIECli"
99.999.999.999")) //Inscricao Estadual

, SubStr(AB3TMP->A1_NOME,1,40))
, AB3TMP->A1_TEL)
, AB3TMP->A1_BAIRRO)
, AB3TMP->A1_MUN)
, Transform( AB3TMP->A1_CEP, "@R 99
, AB3TMP->A1_END)
, AB3TMP->A1_EST)
, Transform(AB3TMP->A1_CGC,cCgcPict
, Transform(AB3TMP->A1_INSCR ,"@R 9

// Le os Itens do Orcamento
If Select("AB4TMP") <> 0
AB4TMP->(DbCloseArea())
EndIf
_cQry3 := "Select AB3.AB3_NUMORC,AB3_ETIQUE, AB3.AB3_MOEDA, AB4.
AB4_ITEM, AB4.AB4_CODPRO, AB4.AB4_NUMSER,AB4.AB4_MEMO, "+chr(13)
_cQry3 += "AB5.AB5_CODPRO, AB5.AB5_DESPRO, AB5.AB5_QUANT, AB5.AB
5_VUNIT, AB5.AB5_TOTAL, AB5.AB5_CODSER, "+chr(13)
_cQry3 += "SB1.B1_IPI, SB1.B1_DESC, SB1.B1_UM "+chr(13)
_cQry3 += "From "+RetSqlName("AB3")+ " AB3(NoLock) "+chr(13)
_cQry3 += "Inner Join " +RetSqlName("AB4")+" AB4(NoLock) "+chr(1

3)
_cQry3 += "On (AB4.AB4_NUMORC = AB3.AB3_NUMORC) "+chr(13)
_cQry3 += "Inner Join " +RetSqlName("AB5")+" AB5(NoLock) "+chr(1
3)
_cQry3 += "On (AB5.AB5_NUMORC = AB4.AB4_NUMORC) "+chr(13)
_cQry3 += "Inner Join " +RetSqlName("SB1")+" SB1(NoLock) "+chr(1
3)
_cQry3
_cQry3
AND AB4.D_E_L_E_T_ <>
_cQry3

+= "On (SB1.B1_COD = AB4.AB4_CODPRO) "+chr(13)


+= "Where AB3.D_E_L_E_T_ <> '*' AND SB1.D_E_L_E_T_ <> '*'
'*' AND AB5.D_E_L_E_T_ <> '*' "+chr(13)
+= "And AB3.AB3_NUMORC = '"+AB3TMP->AB3_NUMORC+"'"+chr(13

)
_cQry3
_cQry3
_cQry3
_cQry3

+=
+=
+=
+=

"And
"And
"And
"And

AB3.AB3_FILIAL = '"+xFilial("AB3")+"' "+chr(13)


AB4.AB4_FILIAL = '"+xFilial("AB4")+"' "+chr(13)
AB5.AB5_FILIAL = '"+xFilial("AB5")+"' "+chr(13)
SB1.B1_FILIAL = '"+xFilial("SB1")+"' "+chr(13)

_cQry3 := ChangeQuery(_cQry3)
DbUseArea(.T.,"TOPCONN",TcGenQry(,,_cQry3),"AB4TMP",.T.,.T.)
Count To nRecCount
//
//Caso tenha Dados.
//
If (nRecCount > 0)
DbSelectArea("AB4TMP")
DbGoTop()
//
//Grava um Item Diferenciado por Produto na tabel
a AB4
//
If (AB4TMP->AB4_CODPRO # _cCodPro)
//
//Itens do Orcamento
//
oHtml:ValByName("cDesc"

, SubStr(A

oHtml:ValByName("cNser"

, AB4TMP->

oHtml:ValByName("cMemoObs"

, MSMM(AB4

B4TMP->B1_DESC,1,38))
AB4_NUMSER)
TMP->AB4_MEMO))
oHtml:ValByName("cLaudo"
oHtml:ValByName("cTecRespon"
e("AA1",1,xFilial("AA1")+_cTecRespon,"AA1_NOMTEC"))
oHtml:ValByName("cCondPag"
e("SE4",1,xFilial("SE4")+_cCondPag,"E4_DESCRI"))
oHtml:ValByName("cEmailTec"
ec)
oHtml:ValByName("cEmailParam"
dd)

, _cLaudo)
, Posicion
, Posicion
, _cEmailT
, _cEmailA

//oHtml:ValByName("cUMOrc"

, AB4TMP-

//oHtml:ValByName("cQtdVen"

, Transfo

//oHtml:ValByName("codPro"

, AB4TMP-

>B1_UM)
rm(1,"@E 999,999"))
>AB4_CODPRO)
EndIf
_cCodPro := AB4TMP->AB4_CODPRO

//
//Grava as informacoes de workflow na tabela AB4.
Motivo: Possivel auditoria rapida
//
DbSelectArea("AB4")
DbSetOrder(1)
If DbSeek(xFilial("AB4")+AB3TMP->AB3_NUMORC+AB4T
MP->AB4_ITEM)
RecLock("AB4",.F.)
If Empty(AB4->AB4_WFDT)
AB4->AB4_WFDT := dDataBa
se
EndIf
If Empty(AB4_WFEMAI)
If (cUsername == "Admini
strador")
AB4->AB4_WFEMAI
:= GetMV("MV_RELACNT")
Else
//AB4->AB4_WFEMA
I := cEmailUsu
EndIf
EndIf
AB4->AB4_WFID := oProcess:fProcessID
// Grava a indicao que foi enviado WorkFlow e data de Envio do
WorkFlow ao Cliente
AB3->AB3_FWORK := "X"
AB3->AB3_DWORK := dDataBase
If Empty(Alltrim(AB3->AB3_PWORK))
AB3->AB3_PWORK := dDataBase
Endif
MsUnlock()
EndIf

//
//Busca os Itens da tabela AB5, que Contem os Precos e P
ecas Utilizadas

//

oHtml:ValByName("it.cDescMat"
, {})
oHtml:ValByName("it.cQtdVen"
oHtml:ValByName("it.cPrcVen"
oHtml:ValByName("it.cSubVen"
oHtml:ValByName("it.cDesVen"
oHtml:ValByName("it.cValor"
oHtml:ValByName("it.cMat"
oHtml:ValByName("it2.cDescMat"
oHtml:ValByName("it2.cQtdVen"
oHtml:ValByName("it2.cPrcVen"
oHtml:ValByName("it2.cSubVen"
oHtml:ValByName("it2.cDesVen"
oHtml:ValByName("it2.cValor"
oHtml:ValByName("it2.cMat"

,
,
,
,
,

{})
{})
{})
{})
{})
, {})

,
,
,
,
,
,
,

{})
{})
{})
{})
{})
{})
{})

For _iy := 1 to Len(acolsAB5[1])


If (!acolsAB5[1][_iy][11])
nPgto
:= Posicione("AA5",1,xF
ilial("AA5")+acolsAB5[1][_iy][4],"AA5_PRCCLI")
cServico := Posicione("AA5",1,xF
ilial("AA5")+acolsAB5[1][_iy][4],"AA5_DESCRI")
cTipoPro := Posicione("SB1",1,xFilial("SB1")+acolsAB5[1]
[_iy][2],"B1_TIPO")
_cDesPro := SubStr(acolsAB5[1][_
iy][3],1,38)
_cUM

:= Posicione("SB1",1,xF

ilial("SB1")+acolsAB5[1][_iy][2],"B1_UM")
_cQuant := Transform(acolsAB5[1
][_iy][5],"@E 999,999")
//
_cVUnit := "R$ " + Transform(((acol
sAB5[1][_iy][6] * nPgto)/100),"@E 999,999.99")
//
_cTotal
:= "R$ " + Transform(((a
colsAB5[1][_iy][7] * nPgto)/100),"@E 9,999.99")
_cVUnit := Transform(((acolsAB5[1][
_iy][8] * nPgto)/100),"@E 999,999.99")
_cSubVen := Transform((((acolsAB5[1][_iy][5] * acolsAB5[
1][_iy][8]) * nPgto)/100),"@E 999,999.99")
_cDesVen := Transform(((((acolsAB5[1][_iy][5] * acolsAB5
[1][_iy][8]) - acolsAB5[1][_iy][7]) * nPgto)/100),"@E 999,999.99")
_cTotal := Transform(((acolsAB5[1][_iy][
7] * nPgto)/100),"@E 9,999.99")
_cCodPro := acolsAB5[1][_iy][2]
//
//Itens do Orcamento
//
If (cTipoPro == "MO")
Aadd(oHtml:ValByName("it
.cDescMat") , _cDesPro)
//

Aadd(oHtml:ValByName("it

.cUMServ")

, _cUM)

.cQtdVen")

, _cQuant)

.cPrcVen")

, _cVUnit)

.cSubVen")

, _cSubVen)

.cDesVen")

, _cDesVen)

.cValor")

, _cTotal)

.cMat")

, _cCodPro)

Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
_lServ := .T.
Else
Aadd(oHtml:ValByName("it
2.cDescMat") , _cDesPro)
//
2.cUMServ") , _cUM)

Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it

2.cQtdVen")

, _cQuant)

2.cPrcVen")

, _cVUnit)

2.cSubVen")

, _cSubVen)

2.cDesVen")

, _cDesVen)

2.cValor")

, _cTotal)

2.cMat")

, _cCodPro)

Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
Aadd(oHtml:ValByName("it
_lProd := .T.
EndIf
//
//Soma os Totais
//
_nTotalPrc += ((acolsAB5[1][_iy][7] * nPgto)/100)
EndIf
Next
EndIf
//
//Totais do Orcamento
//
oHtml:ValByName("cTotalPrc" , "R$ " + Transform(_nTotalPrc,"@E 9,99
9,999.99"))
If !(_lServ)
Aadd(oHtml:ValByName("it.cDescMat")
//
Aadd(oHtml:ValByName("it.cUMServ")
Aadd(oHtml:ValByName("it.cQtdVen")
Aadd(oHtml:ValByName("it.cPrcVen")
Aadd(oHtml:ValByName("it.cSubVen")

,
,
,
,
,

Space(2))
Space(2))
Space(2))
Space(2))
Space(2))

Aadd(oHtml:ValByName("it.cDesVen")
Aadd(oHtml:ValByName("it.cValor")
Aadd(oHtml:ValByName("it.cMat")

, Space(2))
, Space(2))
, Space(2))

EndIf
If !(_lProd)
Aadd(oHtml:ValByName("it2.cDescMat")
//
Aadd(oHtml:ValByName("it2.cUMServ")
Aadd(oHtml:ValByName("it2.cQtdVen")
Aadd(oHtml:ValByName("it2.cPrcVen")
Aadd(oHtml:ValByName("it2.cSubVen")
Aadd(oHtml:ValByName("it2.cDesVen")
Aadd(oHtml:ValByName("it2.cValor")
Aadd(oHtml:ValByName("it2.cMat")
EndIf

,
,
,
,
,
,
,
,

Space(2))
Space(2))
Space(2))
Space(2))
Space(2))
Space(2))
Space(2))
Space(2))

DbSelectArea("AB3TMP")
DbSkip()
EndDo
If ((!_lProd) .And. (!_lServ))
MsgAlert("Oramento sem apontamento, favor inseir os apontamentos.")
_lOk := .F.
EndIf
If (_lOk)
//oProcess:oHtml := oHtml
//
//***********************Primeira Etapa do processo***********************
//
//
//Endereco do destinatario. Neste caso utiliza-se o diretorio htm
//devido a rotina utilizar o processo via link. Nesta primeira etapa
//e salvo o html no diretorio \web\messenger\emp01\htm.

//
oProcess:cTo := "htm"
//
//Nnome da funcao de retorno a ser executada quando a mensagem de
//espostas retornarem ao Workflow

//
oProcess:bReturn := "U_AUTA012RET(1)"
//
//Inicia o processo de gravacao do html no diretorio acima indicado,
//armazenado na variavel cMailID que sera utilizada abaixo.

//
cMailID := oProcess:Start()
//
//Repasse o texto do assunto criado para a propriedade especifica do processo.
//
oProcess:cSubject := cAssunto
//

//***********************Segunda Etapa do processo***********************


//

//
//Arquivo html template utilizado para montagem do html contendo o link (Enviado
ao cliente)
//
cHtmlModelo := "\workflow\wflink.htm"
//
//Inicialize a classe TWFProcess e assinale a varivel objeto oProcess:
//
oProcess:= TWFProcess():New(cCodProcesso, cAssunto)
//
//Crie uma tarefa.
//
oProcess:NewTask(cAssunto, cHtmlModelo)
conout("(INICIO|WFLINK)Processo: " + oProcess:fProcessID + " - Task: " + oProces
s:fTaskID )
//
// Repasse o texto do assunto criado para a propriedade especifica do processo.
//
oProcess:cSubject := cAssunto
//
//Endereco eletronico do destinatario.
//
oProcess:cTo := Alltrim(_cEmail)
//
//Insere nome do cliente da mensagem
//
//oProcess:ohtml:ValByName("usuario",_cNomeCli)
//
//Insere endeco (link) de acesso ao workflow do cliente.

//Baseado no id do processo html gerado anteriormente.

//Com isso o cliente sera direcionado via webservice ao diretorio


//do Protheus, para aprovacao do orcamento.

//
oProcess:ohtml:ValByName("proc_link","http://"+_cURL+"/messenger/emp01/htm/" + c
MailID + ".htm")
oProcess:ohtml:ValByName("proc_link2","mailto:administrativo@automatech.com.br")
oProcess:ohtml:ValByName("proc_link3","www.automatech.com.br")
//
//Complementa o link com numero do Orcamento
//
//oProcess:ohtml:ValByName("referente"," o oramento de nmero " + AllTrim(AB3TMP->A
B3_NUMORC))
//
//Eh necessario efetuar esta troca de WFHTTPRE.APW para WFHTTPRE.APL,
//devido ao fato da mudanca na versao do Protheus 11.

//
chave
:= "WFHTTPRET.APW"
cHtmlTexto := WFLoadFile("\web\messenger\emp01\htm\" + cMailID + ".htm")
cHtmlTexto := StrTran(cHtmlTexto,chave, "WFHTTPRET.APL")
WFSaveFile("\web\messenger\emp01\htm\" + cMailID + ".htm", cHtmlTexto)
//
//Apos ter repassado todas as informacoes necessarias para o workflow,

//execute o metodo Start() para se gerado todo processo e enviar a mensagem


//ao destinatrio.

//
oProcess:Start()
EndIf
EndIf //Fim do IF lRet
EndIf
If Select("AB4TMP") <> 0
AB4TMP->(DbCloseArea())
EndIf
If Select("AB3TMP") <> 0
AB3TMP->(DbCloseArea())
EndIf
Return()
/*

Programa AUTA012RETAutor Lucas Moresco


Data 01/07/11

Desc.
Retorno do workflow de Orcamento.

Uso
Protheus - Automatech

*/
User Function AUTA012RET(cOpc,oProcess)
Local _cNumOrc := ""
Local _cMen
:= ""
Private cEmailUsu := ""
Private cEmailAdm := ""
_cEmailTec := oProcess:oHtml:RetByName("cEmailTec")
If oProcess:oHtml:RetByName("Aprovacao") == "S"
_cNumOrc := oProcess:oHtml:RetByName("cNumOrc")
// Altera flag no orcamento. Indica que Orcamento foi aprovador pelo clien

te
DbSelectArea("AB3")
DbSetOrder(1)
If DbSeek(xFilial("AB3")+_cNumOrc)
RecLock("AB3",.F.)
AB3->AB3_APROV := "S"
If Empty(Alltrim(AB3->AB3_SITUA))
AB3->AB3_SITUA := "A"
Endif
AB3->AB3_COMC := Alltrim(oProcess:oHtml:RetByName("Obs"))
MsUnlock()
// Envia email para o tecnico avisando que o orcamento foi aprovado
_cMen := "O Oramento "+AB3->AB3_NUMORC+" do Cliente "+oProcess:oHtml:Ret
ByName("cNomCli")+" foi aprovado. "
_cMen += oProcess:oHtml:RetByName("Obs")
cEmailUsu := ""
U_AUTA007(_cMen,_cEmailTec)
EndIf
Else
// Envia email para o tecnico avisando que o orcamento foi rejeitado
_cNumOrc := oProcess:oHtml:RetByName("cNumOrc")



DbSelectArea("AB3")
DbSetOrder(1)
If DbSeek(xFilial("AB3")+_cNumOrc)
// Altera flag no orcamento. Indica que Orcamento foi rejeitado pelo cl
iente
RecLock("AB3",.F.)
AB3->AB3_APROV := "N"
If Empty(Alltrim(AB3->AB3_SITUA))
AB3->AB3_SITUA := "R"
Endif
AB3->AB3_COMC := Alltrim(oProcess:oHtml:RetByName("Obs"))
MsUnlock()
_cMen := "O Oramento "+AB3->AB3_NUMORC+" do Cliente "+oProcess:o
Html:RetByName("cNomCli")+" foi rejeitado pelo motivo: "+Chr(13)+Chr(10)
_cMen += oProcess:oHtml:RetByName("Obs")
cEmailUsu := ""
U_AUTA007(_cMen,Alltrim(_cEmailTec))
EndIf
EndIf
Return()

You might also like