MailOrc.apl 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. #include "PROTHEUS.CH"
  2. #include "RWMAKE.CH"
  3. #include "APWEBEX.CH"
  4. #include "TOPCONN.CH"
  5. #include "TBICONN.CH"
  6. #include "Fileio.ch"
  7. #DEFINE SMSDEBUG
  8. /*__________________________________________________________________________
  9. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  10. ¦¦+-----------------------------------------------------------------------+¦¦
  11. ¦¦¦Funçäo ¦ MailOrc ¦ Autor ¦ Lucilene Mendes ¦ Data ¦28.08.17 ¦¦¦
  12. ¦¦+----------+------------------------------------------------------------¦¦¦
  13. ¦¦¦Descriçäo ¦ Envio do orcamento por e-mail ¦¦¦
  14. ¦¦+-----------------------------------------------------------------------+¦¦
  15. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  16. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  17. User Function MailOrc()
  18. Local cHtml
  19. Local nTFil := FWSizeFilial()
  20. Local cItem := ""
  21. Local cTr := ""
  22. Local cTrHid:= ""
  23. Local cDoc := ""
  24. Local nLin := 0
  25. Local a := 0
  26. Local nTNum := 0
  27. Local nTPro := 0
  28. Local nDiasEnt := 0
  29. Local nPosFrete:= 0
  30. Local lDigitado:= .F.
  31. Local lMoeda := .F.
  32. Local lNumber := .F.
  33. Local aTpFrete := {}
  34. Local aTipoOrc := {}
  35. Local _cArq
  36. Local nHandle
  37. Local cFileLoc
  38. Private cFilVen := ""
  39. Private cDirOrc := "anexosportal\orcamentos\"
  40. Private cDirPortal := ""
  41. Private cEndServ := "" // Endereço do servidor da pagina de Portal
  42. Private cNumOrc := ""
  43. Private cEmissao := ""
  44. Private cOrcCabec := ""
  45. Private cOrcItens := ""
  46. Private cItensHid := ""
  47. Private cBotoes := ""
  48. Private cTpFrete := ""
  49. Private cValFre := ""
  50. Private cTransp := ""
  51. Private cCliente := ""
  52. Private cTabela := ""
  53. Private cTipoOrc := ""
  54. Private cFaixaDesc := ""
  55. Private cEntrega := ""
  56. Private cBtnItens := ""
  57. Private cTblDesc := ""
  58. Private cObsInterna := ""
  59. Private cObsNota := ""
  60. Private cCss := ""
  61. Private cdivComis := ""
  62. Private nTVlrUnit := 0
  63. Private nTQtdItem := 0
  64. Private nTTotal := 0
  65. Private nTImpostos := 0
  66. Private nTFrete := 0
  67. Private nTComiss := 0
  68. Private nItens := 0
  69. Private aAnexos := {}
  70. Private lEdit := .F.
  71. Private lMail := .F.
  72. Private cSite := "u_PortalLogin.apw"
  73. Private cPagina := "Orçamento de Venda"
  74. Private cMenus := ""
  75. Private cTitle := "Portal SMS"
  76. Private cAnexos := ""
  77. Private cCodLogin := ""
  78. Private cVendLogin:= ""
  79. Private aItens := {}
  80. Private aFaixaDesc:= {}
  81. Web Extended Init cHtml Start U_inSite()
  82. cVendLogin := u_GetUsrPR()
  83. cCodLogin := U_SetParPR(cVendLogin)
  84. If Empty(HttpSession->CodVend)
  85. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  86. Return cHtml
  87. Else
  88. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  89. HttpSession->CodVend:= HttpSession->Superv
  90. Endif
  91. Endif
  92. // Pega do parâmetro com o Titulo do Portal
  93. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  94. // Define a funcao a ser chama no link
  95. cSite := Procname()+".apw?PR="+cCodLogin
  96. // Monta o cabeçalho para a pagina
  97. cHeader := GetHeader(cTitle, cSite)
  98. //Atualiza as variáveis
  99. cEndServ := GetMv('MV_WFBRWSR')
  100. cCodVend := cVendLogin //HttpSession->CodVend
  101. cNomeVend:= HttpSession->Nome
  102. cItem := StrZero(1,TamSX3("CK_ITEM")[1])
  103. lEdit := .F.
  104. lMail := !HttpGet->opc = 'print'
  105. nDoc := val(Iif(Type("HttpPost->DOC") == "U",HttpGet->DOC,HttpPost->DOC))
  106. //Posiciona no Orçamento
  107. dbSelectArea("SCJ")
  108. SCJ->(dbGoTo(nDoc))
  109. //Troca de filial
  110. u_PTChgFil(SCJ->CJ_FILIAL)
  111. //Gera o pdf
  112. _cArq:= u_ImprOrcto(nDoc)
  113. If lMail
  114. If !Empty(Alltrim(HttpPost->email)) .and. At("@",Alltrim(HttpPost->email)) > 0
  115. cFileLoc:= cDirOrc
  116. If !File(_cArq)
  117. cHtml := 'Houve falha na geração do PDF. Tente novamente.'+CRLF
  118. Endif
  119. If Empty(SCJ->CJ_NUM)
  120. cHtml := 'Houve falha no envio do e-mail. Tente novamente.'+CRLF
  121. Endif
  122. If EnvOrcMail(_cArq,HttpPost->email)
  123. cHtml := 'E-mail enviado com sucesso.'+CRLF
  124. Else
  125. cHtml := 'Houve falha no envio do e-mail. Tente novamente.'+CRLF
  126. EndIf
  127. Else
  128. cHtml := 'E-mail invalido!'+CRLF
  129. EndIf
  130. Else
  131. cArquivo:= Alltrim(Substr(_cArq, Rat('\',_cArq)+1))
  132. Return cArquivo
  133. //cHtml:= 'http://'+cEndServ+'/anexos/orcamentos/'+cArquivo
  134. Endif
  135. Web Extended End
  136. Return (cHTML)
  137. Static Function EnvOrcMail(cAnexo,cMail)
  138. Local _cMsgem := ''
  139. Local _cStyle := ''
  140. Local _cDirWF := ""
  141. Local _lRet := .F.
  142. Private oProcAprov
  143. //Diretório onde está o arquivo HTML
  144. If Empty(_cDirWF)
  145. _cDirWf := '\workflow\'
  146. Endif
  147. /*
  148. If Right(_cDirWF,1) <> '\'
  149. _cDirWF += '\'
  150. Endif
  151. */
  152. _cDirWF += 'portalwf\'
  153. // Crio o objeto oProcAprov, que recebe a inicialização da classe TWFProcess.
  154. // Repare que o primeiro Parâmetro é o código do processo cadastrado no configurador
  155. oProcAprov := TWFProcess():New( 'ORCMAIL','FN' )
  156. //Informo o título do email.
  157. oProcAprov:cSubject := 'Envio de Orcamento '//+cPedido
  158. // Crio uma task. Um Processo pode ter várias Tasks(tarefas). Para cada Task
  159. // informo um nome para ela e o HTML envolvido. Repare que o path do HTML é sempre abaixo do RootPath do AP7.
  160. // aqui usarei uma task para cada PC enviada
  161. oProcAprov:NewTask('ORCMAIL', _cDirWF+'orcmail.htm' )
  162. oProcAprov:AttachFile(cAnexo)
  163. //Destinatário
  164. oProcAprov:cTo := cMail
  165. _cMsgem := 'Segue anexo orçamento nº '+SCJ->CJ_FILIAL+"/"+SCJ->CJ_NUM+'. '
  166. oProcAprov:oHtml:ValByName('MSGEM',_cMsgem)
  167. oProcAprov:oHtml:ValByName('TITULO',"Orçamento de Venda")
  168. _cStyle := ""
  169. // Endereço dos CSS e Imagens da Pagina
  170. oProcAprov:oHtml:ValByName('cCSS',_cStyle)
  171. // Envio do email
  172. oProcAprov:Start()
  173. oProcAprov:Finish()
  174. Return .T.
  175. /*
  176. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  177. ++-------------------------------------------------------------------------++
  178. ++ Função | MntCSSOrc | Autor | Lucilene Mendes | Data | 05/12/2017 ++
  179. ++-------------------------------------------------------------------------++
  180. ++ Descrição | Montagem do CSS do HTML do Orcamento ++
  181. ++-------------------------------------------------------------------------++
  182. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  183. */
  184. Static Function MntCSSOrc(lMail)
  185. Local _cCSS := ""
  186. if lMail
  187. _cCSS := "<style>"+CRLF
  188. _cCSS += leArqCSS("assets/vendor/bootstrap/css/bootstrap.css")+CRLF
  189. _cCSS += leArqCSS("assets/stylesheets/theme.css")+CRLF
  190. _cCSS += leArqCSS("assets/stylesheets/skins/default.css")+CRLF
  191. _cCSS += leArqCSS("assets/vendor/jquery-datatables-bs3/assets/css/datatables.css")+CRLF
  192. _cCSS += leArqCSS("assets/stylesheets/theme-custom.css")+CRLF
  193. _cCSS += "</style>"+CRLF
  194. Else
  195. _cCSS := '<link rel="stylesheet" href="assets/vendor/bootstrap/css/bootstrap.css" />'+CRLF
  196. _cCSS += '<link rel="stylesheet" href="assets/stylesheets/theme.css" />'+CRLF
  197. _cCSS += '<link rel="stylesheet" href="assets/stylesheets/skins/default.css" />'+CRLF
  198. _cCSS += '<link rel="stylesheet" href="assets/vendor/jquery-datatables-bs3/assets/css/datatables.css" />'+CRLF
  199. EndIf
  200. return _cCSS
  201. /*
  202. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  203. ++-------------------------------------------------------------------------++
  204. ++ Função | leArqCSS | Autor | Lucilene Mendes | Data | 05/12/2017 ++
  205. ++-------------------------------------------------------------------------++
  206. ++ Descrição | Le arquivo CSS e retorna como string ++
  207. ++-------------------------------------------------------------------------++
  208. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  209. */
  210. static function leArqCSS(cArq)
  211. Local cRet := ""
  212. Local nHdl
  213. Local cStr
  214. Local cBase := GetNewPar("AA_DIRCSS","\web\PortalSMS\")
  215. if file(cBase+cArq)
  216. nHdl := fopen(cBase+cArq, FC_NORMAL)
  217. cStr := ""
  218. if ferror() <> 0
  219. Conout("Erro de abertura: " + cValToChar(ferror())+ " " + cArq)
  220. else
  221. while .t.
  222. cStr := freadstr(nHdl, 4096*4)
  223. if empty(cStr)
  224. exit
  225. EndIf
  226. cRet += cStr
  227. enddo
  228. fclose(nHdl)
  229. endif
  230. endif
  231. return cRet
  232. /*__________________________________________________________________________
  233. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  234. ¦¦+-----------------------------------------------------------------------+¦¦
  235. ¦¦¦Funçäo ¦ GetHeader ¦ Autor ¦ Anderson Zelenski ¦ Data ¦15.08.17 ¦¦¦
  236. ¦¦+----------+------------------------------------------------------------¦¦¦
  237. ¦¦¦Descriçäo ¦ Gera o cabeçalho das paginas para o portal ¦¦¦
  238. ¦¦+-----------------------------------------------------------------------+¦¦
  239. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  240. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  241. Static Function GetHeader(cTitle, cSite)
  242. Local cHeader := ""
  243. Local cFim := Chr(13)+Chr(10)
  244. Local cEndServ := GetMv('MV_WFBRWSR') // Endereço do servidor da pagina de Portal
  245. cHeader := '<div class="logo-container">'+cFim
  246. cHeader += ' <a href="" class="logo pull-left">'+cFim
  247. cHeader += ' <img src="http://'+cEndServ+'/imagens/logo.png" alt="'+cTitle+'" height="35"/>'+cFim
  248. cHeader += ' </a>'+cFim
  249. cHeader += ' <div class="visible-xs toggle-sidebar-left" data-toggle-class="sidebar-left-opened" data-target="html" data-fire-event="sidebar-left-opened">'+cFim
  250. cHeader += ' <i class="fa fa-bars" aria-label="Toggle sidebar"></i>'+cFim
  251. cHeader += ' </div>'+cFim
  252. cHeader += '</div>'+cFim
  253. Return cHeader