#include "totvs.ch" #include "topconn.ch" /*/{Protheus.doc} VldPortalSMS Validações customizadas para campos específicos @type function @version @author Lucilene SMSTI @since 15/10/2024 @param cCampo, character, nome do campo chamado na validação @param nRecCpo, numeric, recno do registro selecionado @return variant, variável lógica de validação /*/ User Function VldPortalSMS(cCampo,nRecCpo) Local lRet:= .T. Local cMensagem:= "" Local cDest:= GetNewPar("PR_DESTFIS","contabilidade@lumicenter.com") //cMsg -- >variável private If cCampo = "CJ_CLIENTE" If SA1->A1_RISCO == 'E' cMsgCust+=u_FormEntities("Cliente com risco (E). Solicite ao Financeiro liberação de crédito.") Return .T. Endif If SA1->A1_COND == "001" cMsgCust+= u_FormEntities("Este cliente somente pode comprar à vista.
") Endif If SA1->A1_VIPENG = "SIM" .AND. xFilial("SCJ") = "01" cMsgCust+= "Cliente VIP. Aplicar desconto de 20%.
" EndIf If !Empty(SA1->A1_OBSERV) cMsgCust+=u_FormEntities(SA1->A1_OBSERV)+"
" ENDIF cMsgCust+= u_FormEntities(FATA1000A()) If SA1->A1_PV_FIN==.T. // Testa se o cliente foi liberado pelo Financeiro. 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 If RecLock("SA1",.F.) // Após realizar o PV a liberação manual é cancelada. SA1->A1_PV_FIN := .F. MsUnLock() EndIf ENDIF EndIf Endif If cCampo == "CK_PRODUTO" // se a observação está preenchida If !Empty(AllTrim(SB1->B1_OBSCOM)) // Mostra mensagem de alerta cMsgCust+= u_FormEntities("Aviso da Área de Suprimentos") cMsgCust+= "
"+AllTrim(u_FormEntities(SB1->B1_OBSCOM)) Endif // se a observação está preenchida If !Empty(AllTrim(SB1->B1_OBSPRO)) // Mostra mensagem de alerta cMsgCust+= u_FormEntities("Aviso da Área de Projetos") cMsgCust+= "
"+AllTrim(u_FormEntities(SB1->B1_OBSPRO)) Endif // Verifica se o pedido é normal If !Empty(AllTrim(SB1->B1_OBSPCP)) // Mostra mensagem de alerta cMsgCust+= u_FormEntities("Aviso da Área do PCP") cMsgCust+= "
"+AllTrim(u_FormEntities(SB1->B1_OBSPCP)) Endif //Validação do prazo de embarque If SB1->B1_TIPO == 'PA' .AND. Substr(SB1->B1_COD,1,6) <> 'RELUMI' cQuery:= "SELECT G1_COD FROM "+RetSQLName("SG1")+" SG1 " cQuery+= "WHERE G1_FILIAL = '"+xFilial("SG1")+"' " cQuery+= "AND G1_COD = '"+SB1->B1_COD+"' " cQuery+= "AND SG1.D_E_L_E_T_ = ' ' " TcQuery cQuery New Alias "QRYPROD1" If QRYPROD1->(EOF()) If cFilAnt = '01' cPrzEmb:= "2" Elseif cFilAnt = '05' cPrzEmb:= "5" EndIf Endif QRYPROD1->(dbCloseArea()) Endif //Verifica excessão fiscal cQuery := "SELECT * FROM " cQuery += RetSQLName("SF7")+" SF7 " cQuery += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' " cQuery += " AND F7_GRTRIB = '" + Trim(SB1->B1_GRTRIB) + "' " cQuery += " AND F7_EST = '" + SA1->A1_EST + "' " cQuery += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' " cQuery += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' " cQuery += " AND SF7.D_E_L_E_T_ = ' '" + " " TcQuery cQuery New Alias "QRX" If QRX->(EOF()) //Texto para email cMensagem := "Enviado por: PORTAL SMS" + Chr(13)+Chr(14) + Chr(13)+Chr(14) cMensagem += "Filial / Produto: " + Trim(xFilial("SF7")) + " - " + Trim(SB1->B1_COD) + " - " + Trim(SB1->B1_DESC) + Chr(13)+Chr(14) cMensagem += "Grupo Trib.Produto: " + Trim(SB1->B1_GRTRIB) + Chr(13)+Chr(14) cMensagem += "NCM: " + Trim(SB1->B1_POSIPI) + Chr(13)+Chr(14) cMensagem += "Tipo Operação: " + Trim(SA1->A1_TIPO) + Chr(13)+Chr(14) + Chr(13)+Chr(14) cMensagem += "Cliente: " + Trim(SA1->A1_COD) + "-" + Trim(SA1->A1_LOJA) + " - " + Trim(SA1->A1_NOME) + Chr(13)+Chr(14) cMensagem += "UF Cliente: " + Trim(SA1->A1_EST) + Chr(13)+Chr(14) cMensagem += "Grupo Trib.Cliente: " + Trim(SA1->A1_GRPTRIB) + Chr(13)+Chr(14) cMensagem += "Contribuinte: " + Trim(SA1->A1_CONTRIB) + Chr(13)+Chr(14) 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) cMsgCust:= u_FormEntities("Este produto não fará parte do Orçamento.
") cMsgCust+= u_FormEntities("Foi enviado e-Mail ao Depto.Fiscal para correção do problema.") QRX->(dbCloseArea()) Return .F. Else nCargIcm := QRX->F7_CARGICM nFatCorr := QRX->F7_FATCORR Endif QRX->(dbCloseArea()) //Verifica o uso de produto de materia prima lRet:= U_FATA1059(SB1->B1_COD,"",@cMensagem,.F.) cMsgCust:= u_FormEntities(cMensagem) Endif If cCampo == "EFETIVACAO" Endif Return lRet Static Function FATA1000A() Local cQuery := "" Local cString := "" Local vCont := 0 Local cQuery1 := "" Local cMensagem := "" Local cDestino := GETMV("MV_DESTFIN",,.F.) // e-Mail dos destinatarios do Financeiro. Local cCopia := IIF(CFILANT=="01","","") Local cFiltro := "('01','05')" Local cMsg := "" Local cIn := "" If Select("QRY") > 0 dbSelectArea("QRY") QRY->(dbCloseArea()) Endif // Valida o Raiz do CNPJ - Clientes com codigos diferentes mas com a mesma raiz. 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) + "' ") cQuery := "SELECT A1_COD FROM " cQuery += RetSQLName("SA1") cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' " cQuery += cString + " " cQuery += " AND D_E_L_E_T_ = ' ' " TcQuery cQuery New Alias "QRY" QRY->(dbGoTop()) While QRY->(!EOF()) .AND. vCont <= 998 cIn := cIn + "'"+QRY->A1_COD+"'," QRY->(dbSkip()) vCont++ EndDo // Valida a amarração pelo campo A1->MATRIZ - Clientes do mesmo grupo com CNPJ diferentes. If !Vazio(SA1->A1_MATRIZ) If Select("QRY") > 0 dbSelectArea("QRY") QRY->(dbCloseArea()) Endif cQuery := "SELECT A1_COD FROM " cQuery += RetSQLName("SA1") cQuery += " WHERE A1_FILIAL = '" + xFilial("SA1") + "' " cQuery += " AND A1_MATRIZ = '" + SA1->A1_MATRIZ + "' " cQuery += " AND D_E_L_E_T_ = ' ' " TcQuery cQuery New Alias "QRY" QRY->(dbGoTop()) vCont := 0 While QRY->(!EOF()) .AND. vCont <= 998 cIn := cIn + "'"+QRY->A1_COD+"'," QRY->(dbSkip()) vCont++ EndDo EndIf If Select("QRY1") > 0 dbSelectArea("QRY1") QRY1->(dbCloseArea()) Endif cIn := cIn + "'')" cQuery1 := "SELECT * FROM " cQuery1 += RetSQLName("SE1") cQuery1 += " WHERE E1_FILIAL in " + cFiltro cQuery1 += " AND E1_CLIENTE IN (" + cIn + " " cQuery1 += " AND E1_VENCREA < '" + DToS(DDATABASE) + "' " cQuery1 += " AND E1_SALDO > 0 " + " " cQuery1 += " AND E1_TIPO IN ('NF','DP')" + " " cQuery1 += " AND D_E_L_E_T_ = ' ' " + " " cQuery1 += " ORDER BY E1_CLIENTE, E1_VENCREA DESC" TcQuery cQuery1 New Alias "QRY1" While QRY1->(!EOF()) cMensagem += "Usuário: " + Trim(cUserName) + CHR(13)+CHR(14) cMensagem += "Código - Loja: " + QRY1->E1_CLIENTE + " - " + QRY1->E1_LOJA + CHR(13)+CHR(14) cMensagem += "Nome: " + QRY1->E1_NOMCLI + CHR(13)+CHR(14) 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) cMensagem += "Título - Tipo: " + QRY1->E1_NUM + " - " + QRY1->E1_TIPO + CHR(13)+CHR(14) 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) cMensagem += Replicate("- . ",30) + CHR(13)+CHR(14) + CHR(13)+CHR(14) QRY1->(dbSkip()) EndDo If !Empty(cMensagem) 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) //cMsg:="O cliente possui pendências financeiras. O orçamento será gravado e analisado pelo Setor Financeiro." cMsg:= ("O cliente possui pendências financeiras. O orçamento será gravado e analisado pelo Setor Financeiro.") EndIf Return cMsg User Function FormEntities(cTexto) Local cChar:= "" Local cAsc:= "" Local i:= 0 For i:= 1 to Len(cTexto) cChar:= Substr(cTexto,i,1) cAsc:= asc(cChar) If cAsc >=192 .and. cAsc <= 256 cTexto:= StrTran(cTexto,cChar,'&#'+cvaltochar(cAsc)+';') Endif Next Return cTexto