#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