VldPortalSMS.prw.bak 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  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+="Cliente com risco (E). Solicite ao Financeiro liberação de crédito."
  21. Return .F.
  22. Endif
  23. If SA1->A1_COND == "001"
  24. cMsgCust+= "Este cliente somente pode comprar &agrave; 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+=SA1->A1_OBSERV+"<br>"
  31. ENDIF
  32. cMsgCust+= 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 = "C5_CLIENTE"
  43. If SA1->A1_RISCO == 'E'
  44. cMsgCust+="Cliente com risco (E). Solicite ao Financeiro libera&ccedil;&atilde;o de cr&eacute;dito."
  45. Return .F.
  46. Endif
  47. If SA1->A1_COND == "001"
  48. cMsgCust+= "Este cliente somente pode comprar &agrave; vista.<br>"
  49. Endif
  50. If SA1->A1_VIPENG = "SIM" .AND. xFilial("SCJ") = "01"
  51. cMsgCust+= "Cliente VIP. Aplicar desconto de 20%.<br>"
  52. EndIf
  53. If !Empty(SA1->A1_OBSERV)
  54. cMsgCust+=SA1->A1_OBSERV+"<br>"
  55. ENDIF
  56. cMsgCust+= FATA1000A()
  57. If SA1->A1_PV_FIN==.T. // Testa se o cliente foi liberado pelo Financeiro.
  58. 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
  59. If RecLock("SA1",.F.) // Após realizar o PV a liberação manual é cancelada.
  60. SA1->A1_PV_FIN := .F.
  61. MsUnLock()
  62. EndIf
  63. ENDIF
  64. EndIf
  65. Endif
  66. If cCampo == "CK_PRODUTO"
  67. // se a observação está preenchida
  68. If !Empty(AllTrim(SB1->B1_OBSCOM))
  69. // Mostra mensagem de alerta
  70. cMsgCust+= "<b>Aviso da &Aacute;rea de Suprimentos</b>"
  71. cMsgCust+= "<br>"+AllTrim(SB1->B1_OBSCOM)
  72. Endif
  73. // se a observação está preenchida
  74. If !Empty(AllTrim(SB1->B1_OBSPRO))
  75. // Mostra mensagem de alerta
  76. cMsgCust+= "<b>Aviso da &Aacute;rea de Projetos</b>"
  77. cMsgCust+= "<br>"+AllTrim(SB1->B1_OBSPRO)
  78. Endif
  79. // Verifica se o pedido é normal
  80. If !Empty(AllTrim(SB1->B1_OBSPCP))
  81. // Mostra mensagem de alerta
  82. cMsgCust+= "<b>Aviso da &Aacute;rea do PCP</b>"
  83. cMsgCust+= "<br>"+AllTrim(SB1->B1_OBSPCP)
  84. Endif
  85. //Validação do prazo de embarque
  86. If SB1->B1_TIPO == 'PA' .AND. Substr(SB1->B1_COD,1,6) <> 'RELUMI'
  87. cQuery:= "SELECT G1_COD FROM "+RetSQLName("SG1")+" SG1 "
  88. cQuery+= "WHERE G1_FILIAL = '"+xFilial("SG1")+"' "
  89. cQuery+= "AND G1_COD = '"+SB1->B1_COD+"' "
  90. cQuery+= "AND SG1.D_E_L_E_T_ = ' ' "
  91. TcQuery cQuery New Alias "QRYPROD1"
  92. If QRYPROD1->(EOF())
  93. If cFilAnt = '01'
  94. cPrzEmb:= "2"
  95. Elseif cFilAnt = '05'
  96. cPrzEmb:= "5"
  97. EndIf
  98. Endif
  99. QRYPROD1->(dbCloseArea())
  100. Endif
  101. //Verifica excessão fiscal
  102. cQuery := "SELECT * FROM "
  103. cQuery += RetSQLName("SF7")+" SF7 "
  104. cQuery += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' "
  105. cQuery += " AND F7_GRTRIB = '" + Trim(SB1->B1_GRTRIB) + "' "
  106. cQuery += " AND F7_EST = '" + SA1->A1_EST + "' "
  107. cQuery += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' "
  108. cQuery += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' "
  109. cQuery += " AND SF7.D_E_L_E_T_ = ' '" + " "
  110. TcQuery cQuery New Alias "QRX"
  111. If QRX->(EOF())
  112. //Texto para email
  113. cMensagem := "Enviado por: PORTAL SMS" + Chr(13)+Chr(14) + Chr(13)+Chr(14)
  114. cMensagem += "Filial / Produto: " + Trim(xFilial("SF7")) + " - " + Trim(SB1->B1_COD) + " - " + Trim(SB1->B1_DESC) + Chr(13)+Chr(14)
  115. cMensagem += "Grupo Trib.Produto: " + Trim(SB1->B1_GRTRIB) + Chr(13)+Chr(14)
  116. cMensagem += "NCM: " + Trim(SB1->B1_POSIPI) + Chr(13)+Chr(14)
  117. cMensagem += "Tipo Operação: " + Trim(SA1->A1_TIPO) + Chr(13)+Chr(14) + Chr(13)+Chr(14)
  118. cMensagem += "Cliente: " + Trim(SA1->A1_COD) + "-" + Trim(SA1->A1_LOJA) + " - " + Trim(SA1->A1_NOME) + Chr(13)+Chr(14)
  119. cMensagem += "UF Cliente: " + Trim(SA1->A1_EST) + Chr(13)+Chr(14)
  120. cMensagem += "Grupo Trib.Cliente: " + Trim(SA1->A1_GRPTRIB) + Chr(13)+Chr(14)
  121. cMensagem += "Contribuinte: " + Trim(SA1->A1_CONTRIB) + Chr(13)+Chr(14)
  122. U_EnvMail(cDest,"","","e-Mail Automático. Não encontrada a regra para exceo fiscal - Orçamento.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos)
  123. cMsgCust:="Este produto n&atilde;o far&aacute; parte do Or&ccedil;amento.<br>"
  124. cMsgCust+="Foi enviado e-Mail ao Depto.Fiscal para corre&ccedil;&atilde;o do problema."
  125. QRX->(dbCloseArea())
  126. Return .F.
  127. Else
  128. nCargIcm := QRX->F7_CARGICM
  129. nFatCorr := QRX->F7_FATCORR
  130. Endif
  131. QRX->(dbCloseArea())
  132. Endif
  133. Return lRet
  134. Static Function FATA1000A()
  135. Local cQuery := ""
  136. Local cString := ""
  137. Local vCont := 0
  138. Local cQuery1 := ""
  139. Local cMensagem := ""
  140. Local cDestino := GETMV("MV_DESTFIN",,.F.) // e-Mail dos destinatarios do Financeiro.
  141. Local cCopia := IIF(CFILANT=="01","","")
  142. Local cFiltro := "('01','05')"
  143. Local cMsg := ""
  144. Local cIn := ""
  145. If Select("QRY") > 0
  146. dbSelectArea("QRY")
  147. QRY->(dbCloseArea())
  148. Endif
  149. // Valida o Raiz do CNPJ - Clientes com codigos diferentes mas com a mesma raiz.
  150. 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) + "' ")
  151. cQuery := "SELECT A1_COD FROM "
  152. cQuery += RetSQLName("SA1")
  153. cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' "
  154. cQuery += cString + " "
  155. cQuery += " AND D_E_L_E_T_ = ' ' "
  156. TcQuery cQuery New Alias "QRY"
  157. QRY->(dbGoTop())
  158. While QRY->(!EOF()) .AND. vCont <= 998
  159. cIn := cIn + "'"+QRY->A1_COD+"',"
  160. QRY->(dbSkip())
  161. vCont++
  162. EndDo
  163. // Valida a amarração pelo campo A1->MATRIZ - Clientes do mesmo grupo com CNPJ diferentes.
  164. If !Vazio(SA1->A1_MATRIZ)
  165. If Select("QRY") > 0
  166. dbSelectArea("QRY")
  167. QRY->(dbCloseArea())
  168. Endif
  169. cQuery := "SELECT A1_COD FROM "
  170. cQuery += RetSQLName("SA1")
  171. cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' "
  172. cQuery += " AND A1_MATRIZ = '" + SA1->A1_MATRIZ + "' "
  173. cQuery += " AND D_E_L_E_T_ = ' ' "
  174. TcQuery cQuery New Alias "QRY"
  175. QRY->(dbGoTop())
  176. vCont := 0
  177. While QRY->(!EOF()) .AND. vCont <= 998
  178. cIn := cIn + "'"+QRY->A1_COD+"',"
  179. QRY->(dbSkip())
  180. vCont++
  181. EndDo
  182. EndIf
  183. If Select("QRY1") > 0
  184. dbSelectArea("QRY1")
  185. QRY1->(dbCloseArea())
  186. Endif
  187. cIn := cIn + "'')"
  188. cQuery1 := "SELECT * FROM "
  189. cQuery1 += RetSQLName("SE1")
  190. cQuery1 += " WHERE E1_FILIAL in " + cFiltro
  191. cQuery1 += " AND E1_CLIENTE IN (" + cIn + " "
  192. cQuery1 += " AND E1_VENCREA < '" + DToS(DDATABASE) + "' "
  193. cQuery1 += " AND E1_SALDO > 0 " + " "
  194. cQuery1 += " AND E1_TIPO IN ('NF','DP')" + " "
  195. cQuery1 += " AND D_E_L_E_T_ = ' ' " + " "
  196. cQuery1 += " ORDER BY E1_CLIENTE, E1_VENCREA DESC"
  197. TcQuery cQuery1 New Alias "QRY1"
  198. While QRY1->(!EOF())
  199. cMensagem += "Usuário: " + Trim(cUserName) + CHR(13)+CHR(14)
  200. cMensagem += "Código - Loja: " + QRY1->E1_CLIENTE + " - " + QRY1->E1_LOJA + CHR(13)+CHR(14)
  201. cMensagem += "Nome: " + QRY1->E1_NOMCLI + CHR(13)+CHR(14)
  202. 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)
  203. cMensagem += "Título - Tipo: " + QRY1->E1_NUM + " - " + QRY1->E1_TIPO + CHR(13)+CHR(14)
  204. 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)
  205. cMensagem += Replicate("- . ",30) + CHR(13)+CHR(14) + CHR(13)+CHR(14)
  206. QRY1->(dbSkip())
  207. EndDo
  208. If !Empty(cMensagem)
  209. U_EnvMail(cDestino,cCopia,"","e-Mail Automático - Cliente com Pendência Financeira - ORÇAMENTO.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos)
  210. cMg:="O Cliente possui pendências financeiras. O Orçamento será gravado e analisado pelo Depto. Financeiro."
  211. EndIf
  212. Return cMsg