VldPortalSMS.prw 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. #include "totvs.ch"
  2. #include "topconn.ch"
  3. /*/{Protheus.doc} VldPortalSMS
  4. Validações customizadas para campos específicos
  5. @type function
  6. @version
  7. @author Lucilene SMSTI
  8. @since 15/10/2024
  9. @param cCampo, character, nome do campo chamado na validação
  10. @param nRecCpo, numeric, recno do registro selecionado
  11. @return variant, variável lógica de validação
  12. /*/
  13. User Function VldPortalSMS(cCampo,nRecCpo)
  14. Local lRet:= .T.
  15. Local cMensagem:= ""
  16. Local cDest:= GetNewPar("PR_DESTFIS","contabilidade@lumicenter.com")
  17. //cMsg -- >variável private
  18. If cCampo = "CJ_CLIENTE"
  19. If SA1->A1_RISCO == 'E'
  20. cMsgCust+=u_FormEntities("Cliente com risco (E). Solicite ao Financeiro liberação de crédito.")
  21. Return .T.
  22. Endif
  23. If SA1->A1_COND == "001"
  24. cMsgCust+= u_FormEntities("Este cliente somente pode comprar à vista.<br>")
  25. Endif
  26. If SA1->A1_VIPENG = "SIM" .AND. xFilial("SCJ") = "01"
  27. cMsgCust+= "Cliente VIP. Aplicar desconto de 20%.<br>"
  28. EndIf
  29. If !Empty(SA1->A1_OBSERV)
  30. cMsgCust+=u_FormEntities(SA1->A1_OBSERV)+"<br>"
  31. ENDIF
  32. cMsgCust+= u_FormEntities(FATA1000A())
  33. If SA1->A1_PV_FIN==.T. // Testa se o cliente foi liberado pelo Financeiro.
  34. If Substr(SA1->A1_CGC,1,8) <> '60701190' .AND. Substr(SA1->A1_CGC,1,8) <> '47508411' // Banco Itau e GPA não desmarca - Solicitação Rogerio em 10.01.2023
  35. If RecLock("SA1",.F.) // Após realizar o PV a liberação manual é cancelada.
  36. SA1->A1_PV_FIN := .F.
  37. MsUnLock()
  38. EndIf
  39. ENDIF
  40. EndIf
  41. Endif
  42. If cCampo == "CK_PRODUTO"
  43. // se a observação está preenchida
  44. If !Empty(AllTrim(SB1->B1_OBSCOM))
  45. // Mostra mensagem de alerta
  46. cMsgCust+= u_FormEntities("<b>Aviso da Área de Suprimentos</b>")
  47. cMsgCust+= "<br>"+AllTrim(u_FormEntities(SB1->B1_OBSCOM))
  48. Endif
  49. // se a observação está preenchida
  50. If !Empty(AllTrim(SB1->B1_OBSPRO))
  51. // Mostra mensagem de alerta
  52. cMsgCust+= u_FormEntities("<b>Aviso da Área de Projetos</b>")
  53. cMsgCust+= "<br>"+AllTrim(u_FormEntities(SB1->B1_OBSPRO))
  54. Endif
  55. // Verifica se o pedido é normal
  56. If !Empty(AllTrim(SB1->B1_OBSPCP))
  57. // Mostra mensagem de alerta
  58. cMsgCust+= u_FormEntities("<b>Aviso da Área do PCP</b>")
  59. cMsgCust+= "<br>"+AllTrim(u_FormEntities(SB1->B1_OBSPCP))
  60. Endif
  61. //Validação do prazo de embarque
  62. If SB1->B1_TIPO == 'PA' .AND. Substr(SB1->B1_COD,1,6) <> 'RELUMI'
  63. cQuery:= "SELECT G1_COD FROM "+RetSQLName("SG1")+" SG1 "
  64. cQuery+= "WHERE G1_FILIAL = '"+xFilial("SG1")+"' "
  65. cQuery+= "AND G1_COD = '"+SB1->B1_COD+"' "
  66. cQuery+= "AND SG1.D_E_L_E_T_ = ' ' "
  67. TcQuery cQuery New Alias "QRYPROD1"
  68. If QRYPROD1->(EOF())
  69. If cFilAnt = '01'
  70. cPrzEmb:= "2"
  71. Elseif cFilAnt = '05'
  72. cPrzEmb:= "5"
  73. EndIf
  74. Endif
  75. QRYPROD1->(dbCloseArea())
  76. Endif
  77. //Verifica excessão fiscal
  78. cQuery := "SELECT * FROM "
  79. cQuery += RetSQLName("SF7")+" SF7 "
  80. cQuery += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' "
  81. cQuery += " AND F7_GRTRIB = '" + Trim(SB1->B1_GRTRIB) + "' "
  82. cQuery += " AND F7_EST = '" + SA1->A1_EST + "' "
  83. cQuery += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' "
  84. cQuery += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' "
  85. cQuery += " AND SF7.D_E_L_E_T_ = ' '" + " "
  86. TcQuery cQuery New Alias "QRX"
  87. If QRX->(EOF())
  88. //Texto para email
  89. cMensagem := "Enviado por: PORTAL SMS" + Chr(13)+Chr(14) + Chr(13)+Chr(14)
  90. cMensagem += "Filial / Produto: " + Trim(xFilial("SF7")) + " - " + Trim(SB1->B1_COD) + " - " + Trim(SB1->B1_DESC) + Chr(13)+Chr(14)
  91. cMensagem += "Grupo Trib.Produto: " + Trim(SB1->B1_GRTRIB) + Chr(13)+Chr(14)
  92. cMensagem += "NCM: " + Trim(SB1->B1_POSIPI) + Chr(13)+Chr(14)
  93. cMensagem += "Tipo Operação: " + Trim(SA1->A1_TIPO) + Chr(13)+Chr(14) + Chr(13)+Chr(14)
  94. cMensagem += "Cliente: " + Trim(SA1->A1_COD) + "-" + Trim(SA1->A1_LOJA) + " - " + Trim(SA1->A1_NOME) + Chr(13)+Chr(14)
  95. cMensagem += "UF Cliente: " + Trim(SA1->A1_EST) + Chr(13)+Chr(14)
  96. cMensagem += "Grupo Trib.Cliente: " + Trim(SA1->A1_GRPTRIB) + Chr(13)+Chr(14)
  97. cMensagem += "Contribuinte: " + Trim(SA1->A1_CONTRIB) + Chr(13)+Chr(14)
  98. U_EnvMail(cDest,"","","e-Mail Automático. Não encontrada a regra para exceção fiscal - Orçamento.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos)
  99. cMsgCust:= u_FormEntities("Este produto não fará parte do Orçamento.<br>")
  100. cMsgCust+= u_FormEntities("Foi enviado e-Mail ao Depto.Fiscal para correção do problema.")
  101. QRX->(dbCloseArea())
  102. Return .F.
  103. Else
  104. nCargIcm := QRX->F7_CARGICM
  105. nFatCorr := QRX->F7_FATCORR
  106. Endif
  107. QRX->(dbCloseArea())
  108. //Verifica o uso de produto de materia prima
  109. lRet:= U_FATA1059(SB1->B1_COD,"",@cMensagem,.F.)
  110. cMsgCust:= u_FormEntities(cMensagem)
  111. Endif
  112. If cCampo == "EFETIVACAO"
  113. Endif
  114. Return lRet
  115. Static Function FATA1000A()
  116. Local cQuery := ""
  117. Local cString := ""
  118. Local vCont := 0
  119. Local cQuery1 := ""
  120. Local cMensagem := ""
  121. Local cDestino := GETMV("MV_DESTFIN",,.F.) // e-Mail dos destinatarios do Financeiro.
  122. Local cCopia := IIF(CFILANT=="01","","")
  123. Local cFiltro := "('01','05')"
  124. Local cMsg := ""
  125. Local cIn := ""
  126. If Select("QRY") > 0
  127. dbSelectArea("QRY")
  128. QRY->(dbCloseArea())
  129. Endif
  130. // Valida o Raiz do CNPJ - Clientes com codigos diferentes mas com a mesma raiz.
  131. cString := IIF(Len(Trim(SA1->A1_CGC))==14," AND SUBSTR(A1_CGC,1,8) = '" + Substr(SA1->A1_CGC,1,8) + "' "," AND A1_CGC = '" + Trim(SA1->A1_CGC) + "' ")
  132. cQuery := "SELECT A1_COD FROM "
  133. cQuery += RetSQLName("SA1")
  134. cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' "
  135. cQuery += cString + " "
  136. cQuery += " AND D_E_L_E_T_ = ' ' "
  137. TcQuery cQuery New Alias "QRY"
  138. QRY->(dbGoTop())
  139. While QRY->(!EOF()) .AND. vCont <= 998
  140. cIn := cIn + "'"+QRY->A1_COD+"',"
  141. QRY->(dbSkip())
  142. vCont++
  143. EndDo
  144. // Valida a amarração pelo campo A1->MATRIZ - Clientes do mesmo grupo com CNPJ diferentes.
  145. If !Vazio(SA1->A1_MATRIZ)
  146. If Select("QRY") > 0
  147. dbSelectArea("QRY")
  148. QRY->(dbCloseArea())
  149. Endif
  150. cQuery := "SELECT A1_COD FROM "
  151. cQuery += RetSQLName("SA1")
  152. cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' "
  153. cQuery += " AND A1_MATRIZ = '" + SA1->A1_MATRIZ + "' "
  154. cQuery += " AND D_E_L_E_T_ = ' ' "
  155. TcQuery cQuery New Alias "QRY"
  156. QRY->(dbGoTop())
  157. vCont := 0
  158. While QRY->(!EOF()) .AND. vCont <= 998
  159. cIn := cIn + "'"+QRY->A1_COD+"',"
  160. QRY->(dbSkip())
  161. vCont++
  162. EndDo
  163. EndIf
  164. If Select("QRY1") > 0
  165. dbSelectArea("QRY1")
  166. QRY1->(dbCloseArea())
  167. Endif
  168. cIn := cIn + "'')"
  169. cQuery1 := "SELECT * FROM "
  170. cQuery1 += RetSQLName("SE1")
  171. cQuery1 += " WHERE E1_FILIAL in " + cFiltro
  172. cQuery1 += " AND E1_CLIENTE IN (" + cIn + " "
  173. cQuery1 += " AND E1_VENCREA < '" + DToS(DDATABASE) + "' "
  174. cQuery1 += " AND E1_SALDO > 0 " + " "
  175. cQuery1 += " AND E1_TIPO IN ('NF','DP')" + " "
  176. cQuery1 += " AND D_E_L_E_T_ = ' ' " + " "
  177. cQuery1 += " ORDER BY E1_CLIENTE, E1_VENCREA DESC"
  178. TcQuery cQuery1 New Alias "QRY1"
  179. While QRY1->(!EOF())
  180. cMensagem += "Usuário: " + Trim(cUserName) + CHR(13)+CHR(14)
  181. cMensagem += "Código - Loja: " + QRY1->E1_CLIENTE + " - " + QRY1->E1_LOJA + CHR(13)+CHR(14)
  182. cMensagem += "Nome: " + QRY1->E1_NOMCLI + CHR(13)+CHR(14)
  183. cMensagem += "CNPJ: " + Transform(Posicione("SA1",1,xFilial("SA1")+QRY1->E1_CLIENTE+QRY1->E1_LOJA,"A1_CGC"),"@R 99.999.999/9999-99") + CHR(13)+CHR(14)
  184. cMensagem += "Título - Tipo: " + QRY1->E1_NUM + " - " + QRY1->E1_TIPO + CHR(13)+CHR(14)
  185. cMensagem += "Vencimento - Saldo: " + Transform(StoD(QRY1->E1_VENCREA),"DD/MM/YYYY") + " - R$ " + Transform(QRY1->E1_SALDO,"@R 999,999,999.99") + CHR(13)+CHR(14)
  186. cMensagem += Replicate("- . ",30) + CHR(13)+CHR(14) + CHR(13)+CHR(14)
  187. QRY1->(dbSkip())
  188. EndDo
  189. If !Empty(cMensagem)
  190. U_EnvMail(cDestino,cCopia,"","e-Mail Automomático - Cliente com Pendência Financeira - ORÇAMENTO.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos)
  191. //cMsg:="O cliente possui pend&ecirc;ncias financeiras. O or&ccedil;amento ser&aacute; gravado e analisado pelo Setor Financeiro."
  192. cMsg:= ("O cliente possui pendências financeiras. O orçamento será gravado e analisado pelo Setor Financeiro.")
  193. EndIf
  194. Return cMsg
  195. User Function FormEntities(cTexto)
  196. Local cChar:= ""
  197. Local cAsc:= ""
  198. Local i:= 0
  199. For i:= 1 to Len(cTexto)
  200. cChar:= Substr(cTexto,i,1)
  201. cAsc:= asc(cChar)
  202. If cAsc >=192 .and. cAsc <= 256
  203. cTexto:= StrTran(cTexto,cChar,'&#'+cvaltochar(cAsc)+';')
  204. Endif
  205. Next
  206. Return cTexto