123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- #include "PROTHEUS.CH"
- #include "RWMAKE.CH"
- #include "APWEBEX.CH"
- #include "TOPCONN.CH"
- #include "TBICONN.CH"
- /*__________________________________________________________________________
- ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
- ¦¦+-----------------------------------------------------------------------+¦¦
- ¦¦¦Funçäo ¦ Oportunidade ¦ Autor ¦ Lucilene Mendes ¦ Data ¦23.08.24 ¦¦¦
- ¦¦+----------+------------------------------------------------------------¦¦¦
- ¦¦¦Descriçäo ¦ Grid com as oportunidades do vendedor. ¦¦¦
- ¦¦+-----------------------------------------------------------------------+¦¦
- ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
- ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
- User Function Oportunidade()
- Local cHtml
- Local cLink := ""
- Local cCombo := ""
- Local cDataDe := ""
- Local cDataAte := ""
- Local cFiltDe := ""
- Local cFilAte := ""
- Local cLinkDet := ""
- Local aStatus:= {}
- Private cColunas:= ""
- Private cItens := ""
- Private cTopo := ""
- Private cSite := "u_PortalLogin.apw"
- Private cPagina := "Homologações"
- Private cTitle := ""
- Private lTableTools:= .T.
- Private lSidebar:= .F.
- Private cCodLogin := ""
- Private cVendLogin:= ""
- Web Extended Init cHtml Start U_inSite()
- If Empty(HttpSession->CodVend)
- cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
- Return cHtml
- Else
- If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
- HttpSession->CodVend:= HttpSession->Superv
- Endif
- Endif
-
- cVendLogin := u_GetUsrPR()
- cCodLogin := U_SetParPR(cVendLogin)
- // 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)
-
- //Tratamento dos filtros
- If type("HttpPost->DataDe") <> "U"
- //Se vazio, usa as datas padrão para evitar erro na query
- If Empty(HttpPost->DataDe) .or. Empty(HttpPost->DataAte)
- cDataDe:= dtos(date()-30)
- cDataAte:= dtos(date())
- Else
- cDataDe:= dtos(ctod(HttpPost->DataDe))
- cDataAte:= dtos(ctod(HttpPost->DataAte))
- Endif
- //Atualiza as variáveis no valor do filtro
- cFiltDe:= dtoc(stod(cDataDe))
- cFilAte:= dtoc(stod(cDataAte))
- Else
- //Variáveis dos input dos filtros
- cFiltDe:= dtoc(date()-30)
- cFilAte:= dtoc(date())
- //Variáveis de filtro da query
- cDataDe:= dtos(date()-30)
- cDataAte:= dtos(date())
- Endif
-
- //Topo da janela
- //Botão incluir novo orçamento
- cTopo:= '<div class="row form-group">'
- If HttpSession->Tipo = 'S'
- cTopo+= ' <div class="col-sm-3">'
- cTopo+= ' <button class="btn btn-primary" id="btAddOpt" name="btAddOpt" onclick="javascript: location.href='+"'"+'u_AddOpt.apw?PR='+cCodLogin+"'"+';">'
- cTopo+= ' <i class="fa fa-plus"></i> Nova Homologação</button>'
- cTopo+= ' </div>'
- Endif
- //Filtros
- cTopo+= ' <div class="col-sm-9" align="'+Iif(HttpSession->Tipo = 'S',"right","left")+'">'
- cTopo+= ' <form name="formGrid" id="formGrid" method="POST" action="U_Oportunidade.apw?PR='+cCodLogin+'">'
- cTopo+= ' <label class="col-md-2 control-label">Início De:</label>'
- cTopo+= ' <div class="col-md-3">'
- cTopo+= ' <div class="input-group">'
- cTopo+= ' <span class="input-group-addon">'
- cTopo+= ' <i class="fa fa-calendar"></i>'
- cTopo+= ' </span>'
- cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
- cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFiltDe+'" '
- cTopo+= ' placeholder="__/__/____" id="datade" name="datade" class="form-control only-numbers" type="text">'
- cTopo+= ' </div>'
- cTopo+= ' </div>'
-
- cTopo+= ' <label class="col-md-2 control-label">Início Até:</label>'
- cTopo+= ' <div class="col-md-3">'
- cTopo+= ' <div class="input-group">'
- cTopo+= ' <span class="input-group-addon">'
- cTopo+= ' <i class="fa fa-calendar"></i>'
- cTopo+= ' </span>'
- cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
- cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFilAte+'" '
- cTopo+= ' placeholder="__/__/____" id="dataate" name="dataate" class="form-control only-numbers" type="text">'
- cTopo+= ' </div>'
- cTopo+= ' </div>'
- cTopo+= ' <button class="btn btn-primary" id="btFiltro" value="" onclick="this.value= '+"'"+'Aguarde...'+"'"+';this.disabled= '+"'"+'disabled'+"'"+';Filtro()" name="btFiltro">'
- cTopo+= ' <i class="fa fa-filter"></i> Filtrar</button>'
- cTopo+= ' </form>'
- cTopo+= ' </div>'
- cTopo+= '</div>'
-
- cQry:= " Select DISTINCT AD1_FILIAL, AD1_NROPOR, AD1_DESCRI, AD1_DESCOP, AD1_CODCLI, AD1_LOJCLI, A1_NOME, A1_EMAIL, AD1_DTINI, AD1_DTFIM, AD1_HOMOLO, AD1_VEND, AD1_REGION, AD1_DESCRE, "
- cQry+= " AD1_DESCCI, AD1_UF, AD1_STATUS, AD1_REVISA, AD1.R_E_C_N_O_ RECAD1 "
- cQry+= " From "+RetSqlName("AD1")+" AD1 "
- cQry+= " Inner Join "+RetSqlName("SA1")+" SA1 On A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = AD1_CODCLI AND A1_LOJA = AD1_LOJCLI AND SA1.D_E_L_E_T_ = ' ' "
- cQry+= " Where AD1.D_E_L_E_T_ = ' ' "
- /*
- If HttpSession->Tipo = 'S' //Supervisor acessa todos os orçamentos da sua equipe
- cQry+= " AND AD1_VEND in "+FormatIn(HttpSession->Equipe,"|")+" "
- Else
- cQry+= " AND AD1_VEND = '"+cVendLogin+"' "
- Endif
- */
- If !Empty(cDataAte)
- cQry+= " And AD1_DTINI between '"+cDataDe+"' and '"+cDataAte+"' "
- Endif
- cQry+= " Order by AD1_DTINI, AD1_NROPOR, AD1_CODCLI, AD1_LOJCLI "
- If Select("QRY") > 0
- QRY->(dbCloseArea())
- Endif
- APWExOpenQuery(ChangeQuery(cQry),'QRY',.T.)
-
-
- //Cabeçalho do grid
- cColunas+='<th>Filial</th>'
- cColunas+='<th>Número</th>'
- cColunas+='<th>Descrição</th>'
- //cColunas+='<th>Complemento</th>'
- cColunas+='<th>Status</th>'
- cColunas+='<th>Revisão</th>'
- cColunas+='<th>Início</th>'
- cColunas+='<th>Fim</th>'
- cColunas+='<th>Cliente</th>'
- cColunas+='<th>Nome</th>'
- cColunas+='<th>Cidade/UF</th>'
- cColunas+='<th>Regional</th>'
- If HttpSession->Tipo = 'S'
- cColunas+='<th>Vendedor</th>'
- Endif
- cColunas+='<th></th>'
-
- aStatus:= RetSx3Box(Posicione('SX3',2,'AD1_STATUS','X3CBox()'),,,1)
-
- While QRY->(!Eof())
- //Atualiza os controles do grid
- cLink:= "U_MntOpt.apw?PR="+cCodLogin+"&rec="+cValtoChar(QRY->RECAD1)
- cLinkDet := '"onclick="window.document.location='+"'"+cLink+"&opc=view'"+';"'
- cItens+='<tr>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_FILIAL+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_NROPOR+'</td>'
- If (nSeek := Ascan(aStatus, { |x| x[ 2 ] == QRY->AD1_STATUS })) > 0
- cCombo := AllTrim( aStatus[nSeek,3])
- Endif
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Upper(QRY->AD1_DESCRI)+'</td>'
- //cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_DESCOP+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+cCombo+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_REVISA+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';" data-order="'+QRY->AD1_DTINI+'">'+dtoc(stod(QRY->AD1_DTINI))+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';" data-order="'+QRY->AD1_DTFIM+'">'+dtoc(stod(QRY->AD1_DTFIM))+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_CODCLI+'/'+QRY->AD1_LOJCLI+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->A1_NOME)+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->AD1_DESCCI+" / "+QRY->AD1_UF)+'</td>'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->AD1_DESCRE)+'</td>'
- If HttpSession->Tipo = 'S'
- cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->AD1_VEND+' - '+Posicione("SA3",1,xFilial("SA3")+QRY->AD1_VEND,"A3_NREDUZ")+'</td>'
-
-
- cItens+=' <td class="actions">'
-
- //cItens+= ' <a href="'+cLink+'&opc=copy" class="on-default" data-toggle="tooltip" data-original-title="Copiar Orçamento"><i class="fa fa-files-o"></i></a>'
-
- If QRY->AD1_VEND $ HttpSession->Equipe
- If QRY->AD1_STATUS $ "1/3"
- cItens+=' <a href="'+cLink+'&opc=edit" class="on-default" data-toggle="tooltip" data-original-title="Alterar Homologação"><i class="fa fa-pencil"></i></a>'
- If Empty(QRY->AD1_REVISA)
- cItens+=' <a href="'+cLink+'&opc=dele" class="on-default" data-toggle="tooltip" data-original-title="Excluir Homologação"><i class="fa fa-trash-o"></i></a>'
- Endif
- EndIf
- EndIf
-
- cItens+=' </td>'
- Endif
- cItens+='</tr>'
-
- QRY->(dbSkip())
- End
-
- //Retorna o HTML para construção da página
- cHtml := H_SMSGrid()
-
- Web Extended End
- Return (cHTML)
- // Montar o formulário para mandar por e-mail
- static function montarForm(cTitulo, cSubm)
- Local cRet:=""
- Local cEmail:= ""
- cRet+= '<!-- Modal Form -->'+CRLF
- cRet+= ' <div id="modalEmail" class="modal-block modal-block-primary mfp-hide">'+CRLF
- cRet+= ' <section class="panel">'+CRLF
- cRet+= ' <header class="panel-heading">'+CRLF
- cRet+= ' <h2 class="panel-title">Enviar '+cTitulo+' por e-mail</h2>'+CRLF
- cRet+= ' </header>'+CRLF
- cRet+= ' <div class="panel-body">'+CRLF
- cRet+= ' <form id="formEmail" class="form-horizontal mb-lg" novalidate="novalidate">'+CRLF
- cRet+= ' <span><i>Para enviar para mais de um destinatário, separe os e-mails com ;</i></span>'+CRLF
- cRet+= ' <br><br>'+CRLF
- cRet+= ' <div class="form-group">'+CRLF
- cRet+= ' <label class="col-sm-3 control-label">E-mail</label>'+CRLF
- cRet+= ' <div class="col-sm-9">'+CRLF
- cRet+= ' <input type="hidden" name="nrdoc"/>'+CRLF
- cRet+= ' <input type="hidden" name="formDest" value="'+cSubm+'"/>'+CRLF
- cRet+= ' <input type="email" name="email" class="form-control" placeholder="Insira seu email..." required/>'+CRLF
- cRet+= ' </div>'+CRLF
- cRet+= ' </div>'+CRLF
- cRet+= ' </form>'+CRLF
- cRet+= ' </div>'+CRLF
- cRet+= ' <footer class="panel-footer">'+CRLF
- cRet+= ' <div class="row">'+CRLF
- cRet+= ' <div class="col-md-12 text-right">'+CRLF
- cRet+= ' <button class="btn btn-primary modal-confirm" onclick="javascript:enviarEmail();">Enviar</button>'+CRLF
- cRet+= ' <button class="btn btn-default modal-dismiss" onclick="javascript:fecharEmail();">Cancelar</button>'+CRLF
- cRet+= ' </div>'+CRLF
- cRet+= ' </div>'+CRLF
- cRet+= ' </footer>'+CRLF
- cRet+= ' </section>'+CRLF
- cRet+= ' </div>'+CRLF
-
- return cRet
|