NotasFiscais.apl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. #include "PROTHEUS.CH"
  2. #include "RWMAKE.CH"
  3. #include "APWEBEX.CH"
  4. #include "TOPCONN.CH"
  5. #include "TBICONN.CH"
  6. /*__________________________________________________________________________
  7. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  8. ¦¦+-----------------------------------------------------------------------+¦¦
  9. ¦¦¦Funçäo ¦ NotasFiscais ¦ Autor ¦ Lucilene Mendes ¦ Data ¦03.12.17 ¦¦¦
  10. ¦¦+----------+------------------------------------------------------------¦¦¦
  11. ¦¦¦Descriçäo ¦ Grid com as notas fiscais do vendedor. ¦¦¦
  12. ¦¦+-----------------------------------------------------------------------+¦¦
  13. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  14. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  15. User Function NotasFiscais()
  16. Local cHtml
  17. Local cLink := ""
  18. Local cCliente := ""
  19. Local cDataDe := ""
  20. Local cDataAte := ""
  21. Local cFiltDe := ""
  22. Local cEndServ := ""
  23. Private cColunas:= ""
  24. Private cItens := ""
  25. Private cTopo := ""
  26. Private cSite := "u_PortalLogin.apw"
  27. Private cPagina := "Notas Fiscais"
  28. Private cTitle := ""
  29. Private lTableTools:= .T.
  30. Private lSidebar:= .F.
  31. Private cCodLogin := ""
  32. Private cVendLogin:= ""
  33. Web Extended Init cHtml Start U_inSite()
  34. cVendLogin := u_GetUsrPR()
  35. cCodLogin := U_SetParPR(cVendLogin)
  36. // TODO - Pedro 20210208 - Remover???
  37. If Empty(HttpSession->CodVend)
  38. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  39. Return cHtml
  40. Else
  41. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  42. HttpSession->CodVend:= HttpSession->Superv
  43. Endif
  44. Endif
  45. // Pega do parâmetro com o Titulo do Portal
  46. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  47. // Define a funcao a ser chama no link
  48. cSite := "u_SMSPortal.apw?PR="+cCodLogin
  49. // Monta o cabeçalho para a pagina
  50. cHeader := U_PSHeader(cTitle, cSite)
  51. //Função que atualiza os menus
  52. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  53. //Atualiza variáveis
  54. cEndServ := GetMv('MV_WFBRWSR')
  55. //Tratamento dos filtros
  56. If type("HttpPost->DataDe") <> "U"
  57. //Se vazio, usa as datas padrão para evitar erro na query
  58. If Empty(HttpPost->DataDe) .or. Empty(HttpPost->DataAte)
  59. cDataDe:= dtos(date()-10)
  60. cDataAte:= dtos(date())
  61. Else
  62. cDataDe:= dtos(ctod(HttpPost->DataDe))
  63. cDataAte:= dtos(ctod(HttpPost->DataAte))
  64. Endif
  65. //Atualiza as variáveis no valor do filtro
  66. cFiltDe:= dtoc(stod(cDataDe))
  67. cFilAte:= dtoc(stod(cDataAte))
  68. cCliente:= HttpPost->cliente
  69. Else
  70. //Variáveis dos input dos filtros
  71. cFiltDe:= dtoc(date()-10)
  72. cFilAte:= dtoc(date())
  73. //Variáveis de filtro da query
  74. cDataDe:= dtos(date()-10)
  75. cDataAte:= dtos(date())
  76. cCliente:= '1'
  77. Endif
  78. //Filtros
  79. cTopo:= '<div class="row form-group">'
  80. cTopo+= ' <div class="col-sm-12" align="right">'
  81. cTopo+= ' <form name="formGrid" id="formGrid" method="POST" action="U_NotasFiscais.apw?PR='+cCodLogin+'">'
  82. cTopo+= ' <label class="col-md-1 control-label">Emissão De:</label>'
  83. cTopo+= ' <div class="col-md-3">'
  84. cTopo+= ' <div class="input-group">'
  85. cTopo+= ' <span class="input-group-addon">'
  86. cTopo+= ' <i class="fa fa-calendar"></i>'
  87. cTopo+= ' </span>'
  88. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  89. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFiltDe+'" '
  90. cTopo+= ' placeholder="__/__/____" id="datade" name="datade" class="form-control only-numbers" type="text"></input>'
  91. cTopo+= ' </div>'
  92. cTopo+= ' </div>'
  93. cTopo+= ' <label class="col-md-1 control-label">Emissão Até:</label>'
  94. cTopo+= ' <div class="col-md-3">'
  95. cTopo+= ' <div class="input-group">'
  96. cTopo+= ' <span class="input-group-addon">'
  97. cTopo+= ' <i class="fa fa-calendar"></i>'
  98. cTopo+= ' </span>'
  99. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  100. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFilAte+'" '
  101. cTopo+= ' placeholder="__/__/____" id="dataate" name="dataate" class="form-control only-numbers" type="text"></input>'
  102. cTopo+= ' </div>'
  103. cTopo+= ' </div>'
  104. cTopo+= ' <div class="col-md-2">'
  105. cTopo+= ' <button class="btn btn-primary" id="btFiltro" value="" onclick="this.value= '+"'"+'Aguarde...'+"'"+';this.disabled= '+"'"+'disabled'+"'"+';Filtro()" name="btFiltro">'
  106. cTopo+= ' <i class="fa fa-filter"></i> Filtrar</button>'
  107. cTopo+= ' </div>'
  108. cTopo+= ' </form>'
  109. cTopo+= ' </div>'
  110. cTopo+= '</div>'
  111. // Busca as notas fiscais
  112. cQry := " SELECT DISTINCT F2_FILIAL, F2_FLBASE, F2_DOC, F2_SERIE, F2_CLIENTE, F2_LOJA, A1_NREDUZ, A1_EMAIL, F2_EMISSAO, F2_VALBRUT, F2_VALFAT, F2_CHVNFE, D2_PEDIDO, F2_VEND2 VEND, F2_ESPECIE, SF2.R_E_C_N_O_ RECSF2 "
  113. cQry += " FROM "+RetSqlName("SF2")+" SF2 "
  114. cQry += " INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = F2_CLIENTE AND A1_LOJA = F2_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  115. cQry += " INNER JOIN "+RetSqlName("SD2")+" SD2 ON D2_FILIAL = F2_FILIAL AND D2_DOC = F2_DOC AND D2_SERIE = F2_SERIE AND SD2.D_E_L_E_T_ = ' ' "
  116. cQry += " WHERE " // AND F2_FILIAL = '"+xFilial("SF2")+"'
  117. If HttpSession->Tipo = 'S' //Supervisor acessa todas as informações da sua equipe
  118. cQry+= " F2_VEND2 in "+FormatIn(HttpSession->Equipe,"|")+" "
  119. Else
  120. cQry += " F2_VEND2 = '"+cVendLogin+ "' "
  121. Endif
  122. cQry += " AND F2_TIPO = 'N' "
  123. cQry += " AND F2_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  124. cQry += " AND SF2.D_E_L_E_T_ = ' ' "
  125. cQry += " ORDER BY F2_DOC, F2_EMISSAO "
  126. If Select("QRY") > 0
  127. QRY->(dbCloseArea())
  128. Endif
  129. APWExOpenQuery(ChangeQuery(cQry),'QRY',.T.)
  130. TcSetField("QRY","F2_EMISSAO","D")
  131. //Cabeçalho do grid
  132. cColunas+='<th>Filial</th>'
  133. cColunas+='<th>Tipo Operação</th>'
  134. cColunas+='<th>Nota Fiscal</th>'
  135. cColunas+='<th>Série</th>'
  136. cColunas+='<th>Emissão</th>'
  137. cColunas+='<th>Cliente</th>'
  138. cColunas+='<th>Nome</th>'
  139. cColunas+='<th>Valor</th>'
  140. cColunas+='<th>Pedido</th>'
  141. If HttpSession->Tipo = 'S' //Supervisor
  142. cColunas+='<th>Vendedor</th>'
  143. Endif
  144. cColunas+='<th></th>'
  145. While QRY->(!Eof())
  146. //Atualiza os controles do grid
  147. cLink:= "U_ViewNF.apw?PR="+cCodLogin+"&rec="+cValtoChar(QRY->RECSF2)"
  148. cLink+= ' onclick="window.document.location='+"'"+cLink+"&opc=view'"+';"'
  149. cItens+='<tr>'+CRLF
  150. cItens+=' <td role="button" '+cLink+'>'+QRY->F2_FILIAL+'</td>'
  151. cItens+=' <td role="button" '+cLink+'>'+X3COMBO("C5_TIPOLUM",Posicione("SC5",1,Iif(Empty(QRY->F2_FLBASE),QRY->F2_FILIAL,QRY->F2_FLBASE)+QRY->D2_PEDIDO,"C5_TIPOLUM"))+'</td>'
  152. cItens+=' <td role="button" '+cLink+'>'+QRY->F2_DOC+'</td>'
  153. cItens+=' <td role="button" '+cLink+'>'+QRY->F2_SERIE+'</td>'
  154. cItens+=' <td role="button" '+cLink+' data-order="'+dtos(QRY->F2_EMISSAO)+'">'+DTOC(QRY->F2_EMISSAO)+'</td>'
  155. cItens+=' <td role="button" '+cLink+'>'+QRY->F2_CLIENTE+'/'+QRY->F2_LOJA+'</td>'
  156. cItens+=' <td role="button" '+cLink+'>'+Alltrim(QRY->A1_NREDUZ)+'</td>'
  157. cItens+=' <td role="button" '+cLink+'>'+Transform(QRY->F2_VALBRUT,PesqPicT("SF2","F2_VALBRUT"))+'</td>'
  158. cItens+=' <td role="button" '+cLink+'>'+QRY->D2_PEDIDO+'</td>'
  159. If HttpSession->Tipo = 'S' //Supervisor
  160. cItens+=' <td role="button" '+cLink+'>'+QRY->VEND+' - '+Posicione("SA3",1,xFilial("SA3")+QRY->VEND,"A3_NREDUZ")+'</td>'
  161. Endif
  162. cItens+=' <td class="actions">'
  163. If !Empty(QRY->F2_CHVNFE) .and. QRY->F2_ESPECIE = "SPED"
  164. // cItens+=' <a class="modal-email" href="#modalEmail" id="oc'+cValtoChar(QRY->RECSF2)+'" data-toggle="tooltip" data-original-title="Enviar DANFE por e-mail" title="">'
  165. cItens+=' <a class="modal-email" href="#" data-toggle="tooltip" data-original-title="Enviar DANFE por e-mail" title="" onClick="javascript:abreEmail('+cValtoChar(QRY->RECSF2)+','+"'"+Alltrim(QRY->A1_EMAIL)+"'"+');">'
  166. cItens+=' <i class="fa fa-envelope-o"></i>'
  167. cItens+=' </a>'
  168. cItens+=' <a href="#" data-toggle="tooltip" data-original-title="Abrir DANFE" title="" onClick="javascript:ViewDanfe('+cValtoChar(QRY->RECSF2)+',1);">'
  169. cItens+=' <i class="fa fa-file-pdf-o"></i>'
  170. cItens+=' </a>'
  171. cItens+=' <a href="#" data-toggle="tooltip" data-original-title="Abrir XML" title="" onClick="javascript:ViewDanfe('+cValtoChar(QRY->RECSF2)+',2);">'
  172. cItens+=' <i class="fa fa-file-excel-o"></i>'
  173. cItens+=' </a>'
  174. Endif
  175. cItens+=' </td>'
  176. cItens+='</tr>'+CRLF
  177. QRY->(dbSkip())
  178. End
  179. cItens+= montarForm("Danfe", "MailNF.apw?PR="+cCodLogin)
  180. // cItens+= staticcall(orcamento, montarForm, "Danfe", "MailNF.apw")
  181. //Retorna o HTML para construção da página
  182. cHtml := H_SMSGrid()
  183. Web Extended End
  184. Return (cHTML)
  185. // Montar o formulário para mandar por e-mail
  186. static function montarForm(cTitulo, cSubm)
  187. Local cRet:=""
  188. cRet+= '<!-- Modal Form -->'+CRLF
  189. cRet+= ' <div id="modalEmail" class="modal-block modal-block-primary mfp-hide">'+CRLF
  190. cRet+= ' <section class="panel">'+CRLF
  191. cRet+= ' <header class="panel-heading">'+CRLF
  192. cRet+= ' <h2 class="panel-title">Enviar '+cTitulo+' por e-mail</h2>'+CRLF
  193. cRet+= ' </header>'+CRLF
  194. cRet+= ' <div class="panel-body">'+CRLF
  195. cRet+= ' <form id="formEmail" class="form-horizontal mb-lg" novalidate="novalidate">'+CRLF
  196. cRet+= ' <span><i>Para enviar para mais de um destinatário, separe os e-mails com ;</i></span>'+CRLF
  197. cRet+= ' <br><br>'+CRLF
  198. cRet+= ' <div class="form-group">'+CRLF
  199. cRet+= ' <label class="col-sm-3 control-label">E-mail</label>'+CRLF
  200. cRet+= ' <div class="col-sm-9">'+CRLF
  201. cRet+= ' <input type="hidden" name="nrdoc"/>'+CRLF
  202. cRet+= ' <input type="hidden" name="formDest" value="'+cSubm+'"/>'+CRLF
  203. cRet+= ' <input type="email" name="email" class="form-control" placeholder="Insira seu email..." required/>'+CRLF
  204. cRet+= ' </div>'+CRLF
  205. cRet+= ' </div>'+CRLF
  206. cRet+= ' </form>'+CRLF
  207. cRet+= ' </div>'+CRLF
  208. cRet+= ' <footer class="panel-footer">'+CRLF
  209. cRet+= ' <div class="row">'+CRLF
  210. cRet+= ' <div class="col-md-12 text-right">'+CRLF
  211. cRet+= ' <button class="btn btn-primary modal-confirm" onclick="javascript:enviarEmail();">Enviar</button>'+CRLF
  212. cRet+= ' <button class="btn btn-default modal-dismiss" onclick="javascript:fecharEmail();">Cancelar</button>'+CRLF
  213. cRet+= ' </div>'+CRLF
  214. cRet+= ' </div>'+CRLF
  215. cRet+= ' </footer>'+CRLF
  216. cRet+= ' </section>'+CRLF
  217. cRet+= ' </div>'+CRLF
  218. conout(cret)
  219. return cRet