#include "PROTHEUS.CH"
#include "RWMAKE.CH"
#include "APWEBEX.CH"
#include "TOPCONN.CH"
#include "TBICONN.CH"
#DEFINE SMSDEBUG
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ MntOrc ¦ Autor ¦ Lucilene Mendes ¦ Data ¦28.08.17 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Manutenção de Orçamento de Venda. ¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
User Function MntOrc()
Local cHtml
Local cItem := ""
Local nPosFrete := 0
Local nPerCom := 0
Local nValCom := 0
Local nOpc := 0
Local nLin := 0
Local f := 0
Local lMoeda := .F.
Local lNumber := .F.
Local lVencido := .F.
Local aTpFrete := {}
Local nRecSCJ := 0
private cLisPar := ""
private cParUs := GetMv('LC_FA074G1')
Private cFilVen := ""
Private cCodLogin := ""
Private cVendLogin := ""
Private cVendedor := ""
Private cSite := "u_PortalLogin.apw"
Private cPagina := "Orçamento de Venda"
Private cTitle := "Portal SMS"
Private cMenus := ""
Private cAnexos := ""
Private cDirOrc := "\anexosPortal\orcamentos\"
Private cDirPortal := ""
Private cEndServ := "" // Endereço do servidor da pagina de Portal
Private cOrcCabec := ""
Private cOrcItens := ""
Private cItensHid := ""
Private cBotoes := ""
Private cBtnItens := ""
Private cOptUF := ""
Private cOptMun := ""
Private cOptProd := ""
Private cOptCond := ""
Private cOptModal := ""
Private cTblDesc := ""
Private cCodOrc := ""
Private cTabela := ""
Private cCliente := ""
Private cContato := ""
Private cContDDD := ""
Private cContTel := ""
Private cTpCliente := ""
Private cGrpTrib := ""
Private cCondPag := ""
Private cLocalEnt := ""
Private cObra := ""
Private cStatusObra := ""
Private cIntermed := ""
Private cOport := ""
Private cRevOpt := ""
Private cRegional := ""
Private cTpFrete := ""
Private cValFre := ""
Private cPrazoEmb := ""
Private cEstudo := ""
Private cNumEst := ""
Private cPrevFecha := ""
Private cMargemCont := ""
Private cTransp := ""
Private cOptCli := ""
Private cTotalReg := ""
//Private cEntrega := ""
//Private cValidade := ""
Private nTVlrUnit := 0
Private nTVlrSDesc := 0
Private nTQtdItem := 0
Private nTTotal := 0
Private nTComiss := 0
Private nTImpostos := 0
Private nTAcresc := 0
Private nTFrete := 0
Private nItens := 0
Private lNewOrc := .F.
Private lEdit := .F.
Private lCopy := .F.
Private cShowDesc := "false"
Private aItens := {}
Private aAnexos := {}
Web Extended Init cHtml Start U_inSite()
cVendLogin := u_GetUsrPR()
cCodLogin := U_SetParPR(cVendLogin)
If Empty(HttpSession->CodVend)
cHtml:= ''
Return cHtml
Else
If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
HttpSession->CodVend:= HttpSession->Superv
Endif
Endif
// Pega do parâmetro com o Titulo do Portal
cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
// Define a funcao a ser chama no link
cSite := "u_SMSPortal.apw?PR="+cCodLogin
// Monta o cabeçalho para a pagina
cHeader := U_PSHeader(cTitle, cSite)
//Função que atualiza os menus
cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
//Atualiza as variáveis
cEndServ := GetMv('MV_WFBRWSR')
cCodVend := cVendLogin
cNomeVend:= HttpSession->Nome
cItem := StrZero(1,TamSX3("CK_ITEM")[1])
cOpcao := HttpGet->opc
if !empty(HttpGet->rec)
nRecSCJ := val(HttpGet->rec)
EndIf
lEdit := .F.
lDele := .F.
Do Case
Case cOpcao == "view"
nOpc:= 2
cPagina += " - Visualizar"
Case cOpcao == "edit"
nOpc:= 4
cPagina += " - Alterar"
lEdit := .T.
Case cOpcao == "dele"
nOpc:= 5
cPagina += " - Excluir"
lDele := .T.
Case cOpcao == "copy"
nOpc = 3
cPagina += " - Copiar"
lEdit := .T.
lCopy := .T.
EndCase
//Posiciona no Orçamento
If !Empty(nRecSCJ)
dbSelectArea("SCJ")
SCJ->(dbGoTo(nRecSCJ))
//Troca de filial
u_PTChgFil(SCJ->CJ_FILIAL)
dbSelectArea("SCJ")
SCJ->(dbGoTo(nRecSCJ))
dbSelectArea("SCK")
SCK->(DbSetOrder(1))
SCK->(dbgotop())
SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
dbSelectArea("SA1")
SA1->(DbSetOrder(1))
SA1->(dbgotop())
SA1->(dbSeek(xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA))
Endif
cLisPar:=''
cFilOrc:= '
'
//Cliente
If lEdit .or. lCopy
cCliente:='
cCliente+=' CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+'" />'
cCliente+='
cCliente+='
cOptCli+= u_ListaCli(cVendLogin,"")
HttpSession->Cliente:= SCJ->CJ_CLIENTE+SCJ->CJ_LOJA
Else
cCliente:=''
Endif
//Oportunidade
cOport:= ''
cRevOpt:= ''
//Combo da tabela de preço
cTabPadrao:= GetNewPar("PR_TABPADR","001")
cTabela:=''
//Tipo de cliente
Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_TIPO")
cTpCliente:=''
//Grupo de tributação do cliente
cGrpTrib:= ''
//Contato
cContato:= ' '
cContDDD:= ' '
cContTel:= ' '
//Cliente de Entrega
cCliEntr:=''
//Local de entrega
cLocalEnt:= ''
cLocalEnt+= ' ' //onchange="javascript:atuVlrFrete();"
cLocalEnt+=' '
cLocalEnt+='
'
//Alimenta os estados
cOptUF:= u_ListaUF()
//Nome da obra
cObra:= ' '
//cStatusObra:= ' CJ_VEND6))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
aStObra:= RetSx3Box(Posicione('SX3',2,'CJ_VEND6','X3CBox()'),,,1)
cStatusObra:=''
//Seleciona as condições de pagamento disponíveis no combo
cCondPag:=''
//Previsão Fechamento
aPrevisao:= {{"B","Balizador"},{"A","30/120 dias"},{"V","Em 30 dias"},{"M","Após 4 meses"},{"C","Concorrência"}}
//cPrevFecha:= ' '
cPrevFecha:=''
//Intermediador
If !(lEdit .or. lCopy)
cIntermed:=''
//Retorno
nDiasVal:= 0
cRetorno:='CJ_RETORNO)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
//Estudo Luminotécnico
//cEstudo:= ' CJ_LUMINOT))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
aEstd:= RetSx3Box(Posicione('SX3',2,'CJ_LUMINOT','X3CBox()'),,,1)
aSort(aEstd)
cEstudo:=''
cNumEst:= ' '
//Segmento
aSegmen:= RetSx3Box(Posicione('SX3',2,'CJ_SEGMENT','X3CBox()'),,,1)
cSegmento:=''
//Prospecção
aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROPECC','X3CBox()'),,,1)
aSort(aProsp)
cProsp:=''
//Prospectado por
aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROSCOD','X3CBox()'),,,1)
cProspPor:=''
//Regional
cRegional:=''
//Vendedor do cliente
cVend2:= ''
//Vendedor da oportunidade
cVend3:=''
//Vendedor 4
cVend4:= ''
//Especificado por
cEspecif:= ''
//Negociadora
cNegociad:= ''
//Validade do Orçamento
nDiasVal:= GetNewPar("PR_DTVALID",10)
cValidade:='CJ_VALIDA)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
//Prazo de embarque
cPrazoEmb:= ''
//Tipo de frete
aTpFrete:= {{"S","Sem Frete"},{"C","CIF"},{"F","FOB"}}
cTpFrete:=''
cPFrete:= 'CJ_PERCFRT,"@E 999.99")+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
cValFre:= 'CJ_FRETE,"@E 999,999,999,999.99")+'" '
cValFre+= Iif((!lCopy .and. !lEdit) .or. SCJ->CJ_TPFRETE = "S" ,'disabled','')+'>'
nTFrete+= SCJ->CJ_FRETE
//% RT
cComRT:= 'CJ_COMISTR,PesqPict("SCJ","CJ_COMISTR"))+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
//Observação Comercial
cObsCom:= SCJ->CJ_OBS
//Margem de Contribuição
If HttpSession->Tipo <> "R" //Representante
cMargemCont:= ' '
cMargemCont+= ' '
cMargemCont+= ' '
cMargemCont+= '
'
Endif
/*
//Transportadora
cTransp:=''
*/
/*
//Validade do Orçamento
nDiasVal:= GetNewPar("PR_DTVALID",3)
cValidade:='CJ_VALIDA))+'" disabled>'
//Peso
cPeso:= 'CJ_XPESO)+'" '+Iif(lCopy .or. lEdit,'',' disabled')+'>'
//Volume
cVolume:= 'CJ_XVOLUME)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+'>'
//Espécie
cEspecie:= 'CJ_XESPECI)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+' maxlength="10">'
//Combo da tabela de preço
cTabela:=''
HttpSession->Tabela:= SCJ->CJ_TABELA
*/
//Preenchimento dos itens
/*
aItens - array que define o cabeçalho da tabela de produtos
[1] - Nome da coluna
[2] - Nome do campo
[3] - Tamanho
[4] - Alinhamento
[5] - Tipo
[6] - Editável
[7] - Obrigatório
[8] - Moeda
[9] - Placeholder
[10]- Hidden
[11] - MaxLength
*/
aAdd(aItens, {"Item","CK_ITEM","*","text-left","C",.F.,.F.,.F.,"",.F.,""})
aAdd(aItens, {"Produto","CK_PRODUTO","300px"," text-left","C",lEdit,.T.,.F.,"Selecione...",.F.,""})
aAdd(aItens, {"Quant.","CK_QTDVEN","*"," text-right only-numbers","N",lEdit,.T.,.F.,"0",.F.,""})
aAdd(aItens, {"Observação","CK_OBS","*"," text-left","C",lEdit,.F.,.F.,"",.F.,"80"})
aAdd(aItens, {"Prazo de Embarque","CK_PRZEMB","70px","text-right only-numbers","N",.F.,.F.,.F.,"",.F.,"3"})
aAdd(aItens, {"Vlr Unitário","CK_PRCVEN","*"," text-right","N",lEdit,.F.,.T.,"0,00",.F.,""})
aAdd(aItens, {"Vlr c/ Impostos","CK_XPRCIMP","*","text-right","N",.F.,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"Vlr de Venda","iCK_PRCVEN","*"," text-right myformato","N",.F.,.T.,.T.,"0,00",.T.,""})
aAdd(aItens, {"Custo","CK_CUSTO","*"," text-right myformato","N",.F.,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"IPI","CK_XVALIPI","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"ICMS","CK_XVALICM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"ICMS ST","CK_XICMST","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"% Desconto","CK_DESCACM","*"," text-right percentual","N",lEdit,.F.,.T.,"0,00",Iif(HttpSession->Tipo <> "R",.F.,.T.) ,"7"})
aAdd(aItens, {"Diretor","CK_NOMDIRE","*"," text-left","C",.T.,.F.,.T.,"",.T.,"12"})
aAdd(aItens, {"% Comissão","PER_COM","*"," text-right ","N",.F.,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"Vlr Comissão","VAL_COM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
aAdd(aItens, {"Total","CK_VALOR","150px"," text-right","N",.F.,.F.,.T.,"0,00",.F.,""})
aAdd(aItens, {"","ACAO","*"," text-center","X",lEdit,.F.,.F.,"",.F.,""})
// Cria o cabeçalho dos Itens
For nLin := 1 to Len(aItens)
cOrcCabec += ''+aItens[nLin][1]+' | '
Next
dbSelectArea("SCK")
SCK->(dbSeek(SCJ->CJ_FILIAL+SCJ->CJ_NUM))
While SCK->(!Eof()) .and. SCK->CK_FILIAL == SCJ->CJ_FILIAL .and. SCK->CK_NUM == SCJ->CJ_NUM
nItens++
cItem := StrZero(nItens,TamSX3("CK_ITEM")[1])
Posicione("SB1",1,xFilial("SB1")+SCK->CK_PRODUTO,"B1_DESC")
If SB5->(MsSeek(xFilial("SB5")+SCK->CK_PRODUTO))
If SB5->B5_DTVLESP + 30 < dDataBase
lVencido:= .T.
Endif
Endif
cOrcItens += ''
nTImpostos += SCK->(CK_ST+CK_IPI)
nTQtdItem += SCK->CK_QTDVEN
nTVlrUnit += Round(SCK->CK_QTDVEN * SCK->CK_PRCVEN,2)
nTVlrSDesc+= nTVlrUnit - SCK->CK_VLDSCAC
nTTotal += SCK->CK_VALOR + SCK->(CK_IPI+CK_ST)
nPerCom:= SCK->CK_COMIS1
nValCom:= SCK->CK_COMISSA //(SCK->CK_QTDVEN * SCK->CK_PRCVEN) * (nPerCom/100)
nTComiss+= nValCom
// gera os produtos de acordo com o Cliente e Tabela
cOptProd := u_GetProdOrc(SCJ->CJ_CLIENTE, SCJ->CJ_TABELA, "")
For nLin := 1 to Len(aItens)
If aItens[nLin,2] == "ACAO"
cOrcItens += ''
If lEdit .or. lCopy //!lDele
//cOrcItens += ' '
//cOrcItens += ' '
If lEdit .or. lCopy
cOrcItens += '
Endif
Endif
If !lDele
cOrcItens += ' '
Endif
cOrcItens += ' |
Else
If aItens[nLin,2] == "CK_PRODUTO"
cOrcItens += '' //class="form-group row pb-4"
Else
cOrcItens += ' | '
Endif
lMoeda:= aItens[nLin,8] //Indica se é Moeda
lNumber:= aItens[nLin,5] = "N" //Indica que é numérico
xValue:= ""
Do Case
Case aItens[nLin][5] == 'C'
If aItens[nLin,2] == "CK_PRODUTO"
xValue := AllTrim(SCK->&(aItens[nLin][2]))+' - '+Alltrim(SB1->B1_DESC)
Else
xValue := AllTrim(SCK->&(aItens[nLin][2]))
Endif
Case aItens[nLin][5] == 'N'
If aItens[nLin,2] == "CK_QTDVEN"
xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->&(aItens[nLin][2]))))
ElseIf aItens[nLin,2] == "PER_COM"
xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nPerCom,PesqPict("SD2","D2_COMIS1")),TamSX3("D2_COMIS1")[1])))
ElseIf aItens[nLin,2] == "VAL_COM"
xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nValCom,PesqPict("SCK","CK_PRCVEN")),TamSX3("CK_PRCVEN")[1])))
ElseIf aItens[nLin,2] == "iCK_PRCVEN"
//xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->CK_PRCVEN)))
xValue := Iif(lNewOrc,"",Alltrim(TransForm(SCK->CK_PRCVEN,PesqPict("SCK","CK_PRCVEN"))))
Elseif aItens[nLin,2] == "CK_PRCVEN"
xValue := Alltrim(TransForm(SCK->CK_PRUNIT,PesqPict("SCK","CK_PRUNIT")))
Elseif aItens[nLin,2] == "CK_VALOR"
xValue := Alltrim(TransForm(SCK->(CK_VALOR/*+CK_XVALIPI+CK_XICMST*/),PesqPict("SCK",aItens[nLin,2])))
Else
If SCK->(FieldPos(aItens[nLin][2])) > 0
xValue := Alltrim(TransForm(SCK->&(aItens[nLin][2]),PesqPict("SCK",aItens[nLin,2])))
Else
xValue := ""
Endif
Endif
EndCase
If aItens[nLin,6] //Campo Editável
If aItens[nLin,2] == "CK_PRODUTO"
//Cria o select para o produto
If lEdit .or. lCopy
cOrcItens +='
Else
cOrcItens +=''
Endif
Else
cOrcItens += ' "CK_QTDVEN" .And. !(aItens[nLin,2] $ "CK_DESCONT") //.And. aItens[nLin,2] <> "CK_XPEDCLI" .And. aItens[nLin,2] <> "CK_XITEMCL"
cOrcItens += 'disabled '
EndIf
Else
cOrcItens += 'disabled '
EndIf
cOrcItens += 'value="'+Alltrim(xValue)+'">'
Endif
Else
cOrcItens += ''
Endif
Endif
cOrcItens += ' | '
Next
//Inputs Hidden
//cItensHid += ''
//cItensHid += ''
//cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cItensHid += ''
cOrcItens+=cItensHid
SCK->(dbSkip())
End
//nTAcresc:= Round(nTTotal*(nAcresc/100),2)
nTTotal+= nTFrete
//nTTotal+= nTFrete+nTAcresc
cOrcItens += ''
cOrcItens += '
cOrcItens += 'CJ_NUM)+'" />'
cOrcItens += ''
cOrcItens += ''
cOrcItens += 'CJ_DSDIRET))+'" />'
cOrcItens += ''
cOrcItens += '
'
//Adiciona os botões de ações na tabela de itens
If lEdit
cBtnItens+=''
Endif
//Adiciona os botões da página
If lEdit
//cBotoes+='Orçamento válido apenas dentro do mês de '+MesExtenso(SCJ->CJ_EMISSAO)+' de '+cvaltochar(Year(SCJ->CJ_EMISSAO))+'.
'
cBotoes+=''+chr(13)+chr(10)
Elseif lDele
cBotoes+=''+chr(13)+chr(10)
Endif
cBotoes+=''+chr(13)+chr(10)
//Totalizador disponível apenas para regional
If HttpSession->Tipo <> "R"
cTotalReg:=''
cTotalReg+=' '
cTotalReg+=' '
cTotalReg+=' '
cTotalReg+=' '
cTotalReg+=' '
cTotalReg+='
'
cTotalReg+='
'
cTotalReg+='
'
cShowDesc := 'true'
Endif
//Retorna o HTML para construção da página
cHtml := H_AddOrc()
Web Extended End
Return (cHTML)
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ ExcOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦10.12.17 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Exclui o Orçamento de Venda ¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
User Function ExcOrc()
Local cHtml
Local nOpc := 5 // 3- Incluir / 4- Alterar / 5- Excluir
Local cCliente := ""
Local cLoja := ""
Local cNumOrc := ""
Local cDirErro := "erro\"
Private cReturn
Private aCabSCJ :={}
Private aItemSCJ:={}
Private aLinhaSCJ:={}
Private lMsErroAuto:= .F.
Private cCodLogin := ""
Private cVendLogin:= ""
Private INCLUI := .F.
Private ALTERA := .F.
Web Extended Init cHtml Start U_inSite()
//Verifica se não perdeu a sessão
If type("HttpSession->CodVend") = "U" .or. Empty(HttpSession->CodVend)
conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"Sessao encerrada")
cHtml:= ''
return cHtml
Endif
cVendLogin := u_GetUsrPR()
cCodLogin := U_SetParPR(cVendLogin)
//Variáveis do cabeçalho
cCliente:= Left(HttpPost->CJ_CLIENTE,6)
cLoja:= Right(HttpPost->CJ_CLIENTE,6)
cNumOrc:= HttpPost->CJ_NUM
nModulo:= 5
//Posiciona nas tabelas
If !Empty(cCliente)
Posicione("SA1",1,xFilial("SA1")+Alltrim(HttpPost->CJ_CLIENTE),"A1_COD")
Endif
//Posiciona no orçamento
Posicione("SCJ",1,xFilial("SCJ")+cNumOrc,"CJ_NUM")
cFilOrc:= SCJ->CJ_FILIAL
//Monta o cabeçalho
aadd(aCabSCJ,{"CJ_NUM",cNumOrc,Nil})
aadd(aCabSCJ,{"CJ_CLIENTE",SA1->A1_COD,Nil})
aadd(aCabSCJ,{"CJ_LOJA", SA1->A1_LOJA ,Nil})
aLinhaSCJ:={}
//Monta os itens
lMsErroAuto:= .F.
//Chama execauto para inclusão do orçamento
If Len(aCabSCJ) > 0
MATA415(aCabSCJ,aItemSCJ,nOpc)
Else
conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"FALHA AO EXCLUIR O ORÇAMENTO!")
lMsErroAuto:= .T.
Endif
If lMsErroAuto
If !ExistDir(cDirErro)
MakeDir(cDirErro)
Endif
cDirErro+=dtos(date())
If !ExistDir(cDirErro)
MakeDir(cDirErro)
Endif
//Grava o erro
MostraErro(cDirErro,"erro_orcto_"+strtran(time(),":","")+".txt")
cHtml:= "erro"
Else
SCJ->(dbGoBottom())
cHtml:= SCJ->CJ_NUM
EndIf
Web Extended End
Return (cHTML)
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ GetProdOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 10.12.17 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Função para retornar os produtos da tabela e esta no Orç. ¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
User Function GetProdOrc(cOrcCli, cOrcTab, cOrcProd)
Local cHtml
Local cProds := ""
Local cGrupo := ""
//Atualiza a variável de sessão
HttpSession->TABELA := cOrcTab
//Busca os itens da tabela de preço
cQry:="Select DA1_CODTAB, B1_GRUPO, BM_DESC, DA1_CODPRO, B1_DESC "
cQry+=" From "+RetSqlName("DA1")+" DA1"
cQry+=" INNER JOIN "+RetSqlName("DA0")+" DA0 ON DA0_FILIAL = DA1_FILIAL AND DA0_CODTAB = DA1_CODTAB AND DA0_ATIVO = '1' AND DA0.D_E_L_E_T_ = ' ' "
cQry+=" INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = DA1_CODPRO AND B1_MSBLQL <> '1' AND SB1.D_E_L_E_T_ = ' ' "
cQry+=" LEFT JOIN "+RetSqlName("SBM")+" SBM ON BM_FILIAL = '"+xFilial("SBM")+"' AND B1_GRUPO = BM_GRUPO AND SBM.D_E_L_E_T_ = ' ' "
cQry+=" Where DA1_FILIAL = '"+xFilial("DA1")+"' "
cQry+=" And DA1_CODTAB = '"+cOrcTab+"' "
cQry+=" AND DA1_ATIVO = '1' "
If !Empty(cOrcProd)
cQry+=" AND DA1_CODPRO = '"+cOrcProd+"' "
Endif
cQry+=" AND DA1_PRCVEN > 0 "
cQry+=" AND DA1.D_E_L_E_T_ = ' ' "
cQry+=" Order by DA1_CODTAB, B1_GRUPO, B1_COD "
If Select("QRP") > 0
QRP->(dbCloseArea())
Endif
APWExOpenQuery(ChangeQuery(cQry),'QRP',.T.)
//Preenche o select de produtos
While QRP->(!Eof())
If Empty(cGrupo)
cProds+= ''
cProds+= ''
Endif
cHtml:= cProds
Return cHtml
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ GetMCOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 02.12.23 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Função para calcular a margem de contribuição do orçamento.¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
User Function GetMCOrc()
Local cMargem := ""
Local cQry := ""
Local nMkt := 0
Local nMktP := 0
Local nMC := 0
Local nMC_T := 0
Local nMCTotIt := 0
Local nCusto := 0
Local nICMS := 0
Local nComis2 := 0
Local nComis3 := 0
Local nPIS := 0
Local nCofins := 0
Local nComissao := 0
Local nRT := 0
Local nIPI := 0
Local nFrete := 0
Local nSubsTrb := 0
Local nSubsCus := 0
Local nST := 0
Local nINSSP := 0
Local nRecLiq := 0
Local nMargemT := 0
cQry:= "Select * From "+RetSqlName("SCK")+" SCK "
cQry+= "Inner Join "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = CK_PRODUTO AND SB1.D_E_L_E_T_ = ' ' "
cQry+= "Where CK_FILIAL = '"+SCJ->CJ_FILIAL+"' "
cQry+= "AND CK_NUM = '"+SCJ->CJ_NUM+"' "
cQry+= "AND SCK.D_E_L_E_T_ = ' ' "
If Select("TMP1") > 0
TMP1->(dbCloseArea())
Endif
TcQuery cQry New Alias "TMP1"
// passa por todos os itens do orcamento
While !TMP1->(EOF())
nMkt := 0
nCusto := TMP1->CK_CUSTO
nICMS := TMP1->CK_ICMS
nComis2 := TMP1->CK_COMIS1
nComis3 := TMP1->CK_COMIS3
nPIS := TMP1->CK_PIS
nCofins := TMP1->CK_COFINS
nComissao := TMP1->CK_COMISSA
nRT := TMP1->CK_RT
nIPI := TMP1->CK_IPI
nFrete := TMP1->CK_FRETE
nSubsTrb := TMP1->CK_SUBSTRB
nSubsCus := TMP1->CK_SUBSCUS
nST := TMP1->CK_ST
nINSSP := TMP1->CK_INSSP
// calcula receita liquida
nRecLiq := TMP1->CK_VALOR - nICMS - nPIS - nCofins - nINSSP
// se existe o campo de % do mkt
If TMP1->(FieldPos("CK_MKTP")) > 0
nMktP:= TMP1->CK_MKTP
Endif
// se existe o campo de vlr de mkt
If TMP1->(FieldPos("CK_MKT")) > 0
nMkt:= TMP1->CK_MKT
Endif
// calcula o valor da margem
nMC:= ((TMP1->CK_VALOR - nCusto - nICMS - nPIS - nCofins - nFrete - nComissao - nINSSP - nRT - nMkt) + nSubsTrb + nSubsCus)
// Carrega as Variaveis Totalizador Orçamento, Luminarias e Equipamentos.
If Alltrim(TMP1->B1_TIPO) == "CO" .AND. Alltrim(TMP1->B1_GRUPO) == "ELEV"
// soma a margem total
nMC_T := nMC_T + (TMP1->CK_VALOR * -1)
// soma o valor total
nMCTotIt := nMCTotIt + TMP1->CK_VALOR
Else
// se nao é do grupo pan e nao são acessorios de painel de led
If Alltrim(TMP1->B1_GRUPO) <> 'PAN' .and. !(AllTrim(TMP1->CK_PRODUTO) $ "ACS-LHT44BC/ACS-LHT44PT")
// soma a margem total
nMC_T := nMC_T + nMC
// soma o valor total
nMCTotIt := nMCTotIt + TMP1->CK_VALOR
EndIf
EndIf
TMP1->(dbSkip())
End
cMargem:= Transform(((nMC_T / nMCTotIt)*100),"@E 9999.99")
Return cMargem
/*__________________________________________________________________________
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦Funçäo ¦ GetSaldoProd ¦ Autor ¦ Lucilene Mendes ¦ Data ¦ 17.10.23 ¦¦¦
¦¦+----------+------------------------------------------------------------¦¦¦
¦¦¦Descriçäo ¦ Busca saldo do item (mesma query GetEstDisp-addorc.apl) ¦¦¦
¦¦+-----------------------------------------------------------------------+¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
Static Function GetSaldoProd()
//Armazéns considerados para busca do estoque
Local cArmazem:= GetNewPar("PR_ARMZPR","'01','02','03'") //deve estar no formato '01','02'
Local cQry:=""
//Busca o saldo do produto
cQry:= "With QRY AS( "
cQry+= "Select SUM(B2_QATU) EST , SUM(CASE WHEN B2_QEMP >= 0 THEN B2_QEMP ELSE 0 END) + SUM(CASE WHEN B2_RESERVA >= 0 THEN B2_RESERVA ELSE 0 END) + SUM(CASE WHEN B2_QPEDVEN >= 0 THEN B2_QPEDVEN ELSE 0 END) EMPENHO " //adicionado reserva 07.02.20 - Lucilene
cQry+= "From "+RetSqlName("SB2")+" SB2 "
cQry+= "Where B2_FILIAL = '"+xFilial("SB2")+"' And B2_COD = '"+SCK->CK_PRODUTO+"' And SB2.D_E_L_E_T_ = ' ' "
If !Empty(cArmazem)
cQry+= "AND B2_LOCAL in ("+cArmazem+") "
Endif
cQry+= "UNION ALL "
cQry+= "Select 0 EST , SUM(CK_QTDVEN) EMPENHO "
cQry+= "From "+RetSqlName("SCJ")+" SCJ, "+RetSqlName("SCK")+" SCK "
cQry+= "Where CJ_FILIAL = '"+xFilial("SB2")+"' AND CJ_XTPORC = '1' AND CJ_STATUS = 'A' AND SCJ.D_E_L_E_T_ = ' ' "
cQry+= "and CK_FILIAL = CJ_FILIAL AND CK_NUM = CJ_NUM AND CK_PRODUTO = '"+SCK->CK_PRODUTO+"' and SCK.D_E_L_E_T_ = ' ' "
If !Empty(cArmazem)
cQry+= "AND CK_LOCAL in ("+cArmazem+") "
Endif
cQry+= ")"
cQry+= "SELECT SUM(EST) -SUM(EMPENHO) SALDO FROM QRY "
If Select("QRS") > 0
QRS->(dbCloseArea())
Endif
APWExOpenQuery(cQry,'QRS',.T.)
Return cvaltochar(QRS->SALDO)