ViewNF.apl 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. #include "PROTHEUS.CH"
  2. #include "RWMAKE.CH"
  3. #include "APWEBEX.CH"
  4. #include "TOPCONN.CH"
  5. #include "TBICONN.CH"
  6. #DEFINE SMSDEBUG
  7. /*__________________________________________________________________________
  8. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  9. ¦¦+-----------------------------------------------------------------------+¦¦
  10. ¦¦¦Funçäo ¦ ViewNF ¦ Autor ¦ Lucilene Mendes ¦ Data ¦03.12.17 ¦¦¦
  11. ¦¦+----------+------------------------------------------------------------¦¦¦
  12. ¦¦¦Descriçäo ¦ Visualização das notas fiscais. ¦¦¦
  13. ¦¦+-----------------------------------------------------------------------+¦¦
  14. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  15. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  16. User Function ViewNF()
  17. Local cHtml
  18. Local nTFil := FWSizeFilial()
  19. Local cItem := ""
  20. Local cTr := ""
  21. Local cTrHid:= ""
  22. Local nTNum := 0
  23. Local nTPro := 0
  24. Local nDiasEnt := 0
  25. Local nPosFrete:= 0
  26. Local lDigitado:= .F.
  27. Local lMoeda := .F.
  28. Local lNumber := .F.
  29. Local aTpFrete := {}
  30. Local aTipoOrc := {}
  31. Private cDirPortal := ""
  32. Private cEndServ := "" // Endereço do servidor da pagina de Portal
  33. Private cNFCabec := ""
  34. Private cNFItens := ""
  35. Private cNFSerie := ""
  36. Private cBotoes := ""
  37. Private cTpFrete := ""
  38. Private cValFre := ""
  39. Private cTransp := ""
  40. Private cCliente := ""
  41. Private cEntrega := ""
  42. Private cBtnItens := ""
  43. Private cObsNota := ""
  44. Private cChaveNF := ""
  45. Private cEmissao := ""
  46. Private nTVlrUnit := 0
  47. Private nTTotal := 0
  48. Private nTImpostos := 0
  49. Private nTFrete := 0
  50. Private nItens := 0
  51. Private cSite := "u_PortalLogin.apw"
  52. Private cPagina := "Nota Fiscal"
  53. Private cMenus := ""
  54. Private cTitle := ""
  55. Private cAnexos := ""
  56. Private aItens := {}
  57. Private cCodLogin := ""
  58. Private cVendLogin:= ""
  59. Web Extended Init cHtml Start U_inSite()
  60. cVendLogin := u_GetUsrPR()
  61. cCodLogin := U_SetParPR(cVendLogin)
  62. // TODO - Pedro 20210208 - Remover???
  63. If Empty(HttpSession->CodVend)
  64. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  65. Return cHtml
  66. Else
  67. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  68. HttpSession->CodVend:= HttpSession->Superv
  69. Endif
  70. Endif
  71. // Pega do parâmetro com o Titulo do Portal
  72. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  73. // Define a funcao a ser chama no link
  74. cSite := Procname()+".apw?PR="+cCodLogin
  75. // Monta o cabeçalho para a pagina
  76. cHeader := U_PSHeader(cTitle, cSite)
  77. //Função que atualiza os menus
  78. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  79. //Atualiza as variáveis
  80. cEndServ := GetMv('MV_WFBRWSR')
  81. cItem := StrZero(1,TamSX3("D2_ITEM")[1])
  82. nRecSF2 := val(HttpGet->rec)
  83. //Posiciona na Nota Fiscal
  84. If !Empty(nRecSF2)
  85. dbSelectArea("SF2")
  86. SF2->(dbGoTo(nRecSF2))
  87. //Troca de filial
  88. u_PTChgFil(SF2->F2_FILIAL)
  89. dbSelectArea("SF2")
  90. SF2->(dbGoTo(nRecSF2))
  91. dbSelectArea("SD2")
  92. SD2->(dbSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE))
  93. Endif
  94. cNFSerie:= SF2->F2_DOC+'/'+SF2->F2_SERIE
  95. cChaveNF:= SF2->F2_CHVNFE
  96. cEmissao:= dtoc(SF2->F2_EMISSAO)
  97. //Observações do orçamento
  98. cObsNota:= SF2->F2_MENNOTA
  99. /*
  100. aItens - array que define o cabeçalho da tabela de produtos
  101. [1] - Nome da coluna
  102. [2] - Nome do campo
  103. [3] - Tamanho
  104. [4] - Alinhamento
  105. [5] - Tipo
  106. [6] - Editável
  107. [7] - Obrigatório
  108. [8] - Moeda
  109. [9] - Placeholder
  110. */
  111. aItens := { {"Produto","D2_COD","300px","left","C",.F.,.T.,.F.,"Selecione..."},; // {"UM","D2_UM","70px","right","C",.F.,.F.,.F.,""},;
  112. {"Quantidade","D2_QUANT","*","right","N",.F.,.T.,.F.,"0"},;
  113. {"V.Unitário","D2_PRCVEN","*","","N",.F.,.F.,.T.,"0,00000"},;
  114. {"IPI","D2_VALIPI","*","right","N",.F.,.F.,.T.,"0,00"},;
  115. {"ICMS","D2_VALICM","*","right","N",.F.,.F.,.T.,"0,00"},;
  116. {"ICMS ST","D2_ICMSRET","*","right","N",.F.,.F.,.T.,"0,00"},;
  117. {"Total","D2_TOTAL","*","right","N",.F.,.F.,.T.,"0,00"}}
  118. // Cria o cabeçalho dos Itens
  119. For nLin := 1 to Len(aItens)
  120. cNFCabec += '<th'+Iif(aItens[nLin,2] == "D2_COD",' width="'+aItens[nLin,3]+'"','')+'>'+aItens[nLin][1]+'</th>'
  121. Next
  122. //Tipo de frete
  123. aTpFrete:= {{"S","Sem Frete"},{"C","CIF"},{"F","FOB"}}
  124. cTpFrete:='<select class="form-control mb-md" name="F2_TPFRETE" id="F2_TPFRETE" value="'+SF2->F2_TPFRETE+'" disabled>'
  125. nPosFrete:= aScan(aTpFrete,{|x|x[1]==SF2->F2_TPFRETE})
  126. If nPosFrete = 0
  127. nPosFrete:= 1
  128. Endif
  129. cTpFrete+=' <option value="'+SF2->F2_TPFRETE+'">'+aTpFrete[nPosFrete,2]+'</option>'
  130. cTpFrete+='</select>'
  131. cValFre:= Transform(SF2->F2_FRETE,"@E 999,999,999.99")
  132. //Transportadora
  133. cTransp:= SF2->F2_TRANSP+' - '+Alltrim(Posicione("SA4",1,xFilial("SA4")+SF2->F2_TRANSP,"A4_NREDUZ"))
  134. //Condição de Pagamento
  135. cCondPag:='<select class="form-control mb-md" name="F2_COND" id="F2_COND" required="" aria-required="true" disabled>'
  136. cCondPag+=' <option value="'+SF2->F2_COND+'">'+SF2->F2_COND+" - "+Posicione("SE4",1,xFilial("SE4")+SF2->F2_COND,"E4_DESCRI")+'</option>'
  137. cCondPag+='</select>'
  138. //Cliente
  139. cCliente:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  140. cCliente+='{ "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"+' name="CJ_CLIENTE" id="CJ_CLIENTE" '
  141. cCliente+=' disabled >'
  142. cCliente+=' <option value='+SF2->F2_CLIENTE+SF2->F2_LOJA+'>'+SF2->F2_CLIENTE+'/'+SF2->F2_LOJA+' - '+Alltrim(Posicione("SA1",1,xFilial("SA1")+SF2->F2_CLIENTE+SF2->F2_LOJA,"A1_NOME"))+'</option>'
  143. cCliente+='</select>'
  144. //Data Prevista de Entrega
  145. /*
  146. nDiasEnt:= GetNewPar("AE_DTENT",10)
  147. cEntrega:='<input type="text" id="CK_ENTREG" name="CK_ENTREG" data-plugin-datepicker data-plugin-options='+"'"+'{ "startDate": "+'+nDiasEnt+'d", "language": "pt-BR",'
  148. cEntrega+='"daysOfWeekDisabled": "[0]","daysOfWeekHighlighted":"[0]"}'+"'"+' class="form-control only-numbers" placeholder="__/__/____"'
  149. cEntrega+='value='+DTOC(SCK->CK_ENTREG)
  150. cEntrega+=Iif(!lEdit,' disabled','')+'>'
  151. */
  152. //Preenchimento dos itens
  153. nTTotal:= Sf2->F2_VALFAT
  154. nTFrete:= SF2->F2_FRETE
  155. dbSelectArea("SD2")
  156. SD2->(dbSetOrder(3))
  157. SD2->(dbSeek(xFilial("SD2")+SF2->F2_DOC+SF2->F2_SERIE))
  158. While SD2->(!Eof()) .and. SD2->D2_DOC = SF2->F2_DOC .AND. SD2->D2_SERIE = SF2->F2_SERIE
  159. nItens++
  160. Posicione("SB1",1,xFilial("SB1")+SD2->D2_COD,"B1_DESC")
  161. cNFItens += '<tr class="odd" id="linha'+StrZero(nItens,2)+'">'
  162. nTImpostos += SD2->(D2_ICMSRET+D2_VALIPI) //D2_VALICM+
  163. nTVlrUnit += SD2->D2_QUANT * SD2->D2_PRCVEN
  164. For nLin := 1 to Len(aItens)
  165. cNFItens += '<td'+Iif(!Empty(aItens[nLin][4]),' align="'+aItens[nLin][4]+'"',"")+'>'
  166. lMoeda:= aItens[nLin,8] //Indica se é Moeda
  167. lNumber:= aItens[nLin,5] = "N" //Indica que é numérico
  168. xValue:= ""
  169. Do Case
  170. Case aItens[nLin][5] == 'C'
  171. If aItens[nLin,2] == "D2_COD"
  172. xValue := AllTrim(SD2->&(aItens[nLin][2]))+Alltrim(SB1->B1_DESC)
  173. Else
  174. xValue := AllTrim(SD2->&(aItens[nLin][2]))
  175. Endif
  176. Case aItens[nLin][5] == 'N'
  177. If aItens[nLin,2] == "D2_QUANT"
  178. xValue := Alltrim(PadR(TransForm(SD2->&(aItens[nLin][2]),"@E 999,999,999"),14))
  179. Else
  180. xValue := Alltrim(PadR(TransForm(SD2->&(aItens[nLin][2]),"@E 999,999,999.99"),14))
  181. Endif
  182. EndCase
  183. cNFItens += '<input id="'+aItens[nLin][2]+cItem+'" data-prop="'+aItens[nLin][2]+'" name="'+aItens[nLin][2]+cItem+'" class="form-control input-block" type="text" disabled width="" '
  184. cNFItens += 'value="'+Alltrim(xValue)+'" title="'+Alltrim(xValue)+'">'
  185. cNFItens += '</td>'
  186. Next
  187. cNFItens += '</tr>'
  188. SD2->(dbSkip())
  189. End
  190. //Adiciona os botões da página
  191. cBotoes+='<input class="btn btn-primary" type="button" id="btVoltar" name="btVoltar" value="Voltar" onclick="javascript: location.href='+"'"+'u_notasfiscais.apw?PR='+cCodLogin+"';"+'"/>'+chr(13)+chr(10)
  192. //Retorna o HTML para construção da página
  193. cHtml := H_ViewNF()
  194. Web Extended End
  195. Return (cHTML)