#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.<br>")
	Endif
	If SA1->A1_VIPENG = "SIM" .AND. xFilial("SCJ") = "01"
		cMsgCust+= "Cliente VIP. Aplicar desconto de 20%.<br>"
	EndIf
	If !Empty(SA1->A1_OBSERV)
		cMsgCust+=u_FormEntities(SA1->A1_OBSERV)+"<br>"
	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("<b>Aviso da �rea de Suprimentos</b>")
        cMsgCust+= "<br>"+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("<b>Aviso da �rea de Projetos</b>")
		cMsgCust+= "<br>"+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("<b>Aviso da �rea do PCP</b>")
		cMsgCust+= "<br>"+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.<br>")
		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&ecirc;ncias financeiras. O or&ccedil;amento ser&aacute; 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