Estoque.apl 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  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 ¦ Estoque ¦ Autor ¦ Lucilene Mendes ¦ Data ¦17.07.19 ¦¦¦
  10. ¦¦+----------+------------------------------------------------------------¦¦¦
  11. ¦¦¦Descriçäo ¦ Grid com o estoque de itens por tabela de preço. ¦¦¦
  12. ¦¦+-----------------------------------------------------------------------+¦¦
  13. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  14. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  15. User Function Estoque()
  16. Local cHtml
  17. Local cArmazem := ""
  18. //Local cVend := HttpSession->CodVend
  19. Local cTabela := ""
  20. Local cGrupoP := ""
  21. Local cTpCli := ""
  22. Local i := 0
  23. Local cCliSel := ""
  24. Local cOport := ""
  25. Local cUfEntr := ""
  26. Local cUFFat := ""
  27. Local cMunEnt := ""
  28. Local cTipoProd := ""
  29. Local cGrupoProd:= ""
  30. Local nPrcVen := 0
  31. Private oObjLog := nil
  32. Private aMunic := {}
  33. Private cColunas:= ""
  34. Private cItens := ""
  35. Private cTopo := ""
  36. Private cSite := "u_PortalLogin.apw"
  37. Private cPagina := "Consulta de Preço"
  38. Private cTitle := ""
  39. Private lTableTools:= .T.
  40. Private lSidebar:= .F.
  41. Private cCodLogin := ""
  42. Private cVendLogin:= ""
  43. Web Extended Init cHtml Start U_inSite()
  44. oObjLog:= LogSMS():new()
  45. oObjLog:setFileName("\temp\"+Procname()+"_"+dtos(date())+".txt")
  46. cVendLogin := u_GetUsrPR()
  47. cCodLogin := U_SetParPR(cVendLogin)
  48. If Empty(HttpSession->CodVend)
  49. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  50. Return cHtml
  51. Else
  52. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  53. HttpSession->CodVend:= HttpSession->Superv
  54. Endif
  55. Endif
  56. // Pega do parâmetro com o Titulo do Portal
  57. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  58. // Define a funcao a ser chama no link
  59. cSite := "u_SMSPortal.apw?PR="+cCodLogin
  60. // Monta o cabeçalho para a pagina
  61. cHeader := U_PSHeader(cTitle, cSite)
  62. //Função que atualiza os menus
  63. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  64. //Armazéns considerados para busca do estoque
  65. //@Todo - Ainda precisa?
  66. cArmazem:= GetNewPar("PR_ARMZPR","'01'") //deve estar no formato '01','02'
  67. //Tipos de produto que devem ser exibidos na consulta
  68. cTipoProd:= GetNewPar("PR_TPPROD","PA|RE")
  69. //Grupos de produto que devem ser exibidos na consulta
  70. cGrupoProd:= GetNewPar("PR_GRPPROD","PE|PEL")
  71. If type("HttpPost->FILTROP") <> "U"
  72. if !empty(HttpPost->FILTROP)
  73. cTabela := Alltrim(HttpPost->FILTROP)//@Todo - Valor fixado em 001
  74. //cGrupoP := HttpPost->GRUPOP
  75. cOport := Alltrim(HttpPost->OPORTUN)
  76. cUFEntr := Alltrim(HttpPost->EST_ENTRE)
  77. cUFFat := Alltrim(HttpPost->EST_FAT)
  78. cMunEnt := Alltrim(HttpPost->MUN_ENTRE)
  79. cTpCli := Alltrim(HttpPost->TPCLI)
  80. if !empty(Alltrim(HttpPost->CLIENTE))
  81. cCliSel := Alltrim(HttpPost->CLIENTE)
  82. else
  83. cCliSel := RetCli(cUFFat,cTpCli)//Usuario não preencheu o campo do cliente
  84. endif
  85. endif
  86. endif
  87. cQuery := " Select A1_COD, A1_LOJA, A1_NOME,A1_TIPO,A1_EST,A1_MUN,A1_GRPTRIB"
  88. cQuery += " From "+RetSqlName("SA1")+" SA1 "
  89. cQuery += " Where A1_FILIAL = '"+xFilial("SA1")+"' "
  90. cQuery += " And A1_MSBLQL <> '1'"
  91. cQuery += " AND A1_VEND = '"+cVendLogin+"' "
  92. if !empty(cCliSel)//Ao entrar na rotina, não estava vindo nenhum cliente para seleção
  93. if !empty(Alltrim(HttpPost->CLIENTE))
  94. cQuery += " AND A1_COD = '"+SubStr(cCliSel,1,len(cCliSel)-2)+"' "
  95. endif
  96. endif
  97. cQuery += " And SA1.D_E_L_E_T_ = ' ' "
  98. cQuery += " Order by A1_COD "
  99. If Select("QRY") > 0
  100. QRY->(dbCloseArea())
  101. Endif
  102. APWExOpenQuery(ChangeQuery(cQuery),"QRY",.T.)
  103. //Query das oportunidades
  104. cQuery := " Select AD1_NROPOR,AD1_REVISA, AD1_DESCRI, AD1_DESCCI, AD1_NOMPAR"
  105. cQuery += " From "+RetSqlName("AD1")+" AD1 "
  106. cQuery += " Where AD1_FILIAL = '"+xFilial("AD1")+"' "
  107. cQuery += " And AD1_HOMOLO = '3' " //Status homologação = homologado
  108. cQuery += " And AD1.D_E_L_E_T_ = ' ' "
  109. cQuery += " Order by AD1_NROPOR "
  110. If Select("QRYAD1") > 0
  111. QRYAD1->(dbCloseArea())
  112. Endif
  113. APWExOpenQuery(ChangeQuery(cQuery),"QRYAD1",.T.)
  114. //Query dos grupos de produtos
  115. /*cQuery := " Select BM_GRUPO,BM_DESC"
  116. cQuery += " From "+RetSqlName("SBM")+" SBM "
  117. cQuery += " Where BM_FILIAL = '"+xFilial("SBM")+"' "
  118. cQuery += " And BM_GRUPO NOT IN ('PE') AND BM_MSBLQL <> '1' AND SBM.D_E_L_E_T_ = ' ' "
  119. cQuery += " Order by BM_GRUPO "
  120. If Select("QRYSBM") > 0
  121. QRYSBM->(dbCloseArea())
  122. Endif
  123. APWExOpenQuery(ChangeQuery(cQuery),"QRYSBM",.T.)
  124. */
  125. aTpCli := {{"F","Cons. Final"},{"L","Prod. Rural"},{"R","Revendedor"},{"S","Solidario"},{"X","Exportacao"}}
  126. aEstados := {"AC","AL","AM","AP","BA","CE","DF","ES","EX","GO","MA","MG","MS","MT","PA","PB","PI","PR","RJ","RN","RO","RR","RS","SC","SE","SP","TO"}
  127. aMunicipio := {}
  128. cTopo := '<form name="formGrid" id="formGrid" method="POST" action="U_Estoque.apw?PR=' + cCodLogin + '">'
  129. //1º Linha
  130. //-----------------------CLIENTE---------------------
  131. cTopo += ' <div class="row form-group">'
  132. cTopo += ' <div class="col-12">'
  133. cTopo += ' <label class="col-md-1 control-label">Cliente:</label>'
  134. cTopo += ' <div class="col-md-8">'
  135. cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  136. cTopo += ' { "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"+' name="CLIENTE" id="CLIENTE" '
  137. cTopo += ' onchange="javascript:SelectCli()" > '
  138. if empty(cCliSel) .or. empty(Alltrim(HttpPost->CLIENTE))
  139. cTopo += ' <option value=""> </option>'
  140. endif
  141. While !QRY->(EOF())
  142. cTopo += ' <option value="' + Alltrim(QRY->A1_COD + QRY->A1_LOJA) ;
  143. + '" TIPO="'+QRY->A1_TIPO+'" EST="'+QRY->A1_EST+'" ESTE="'+QRY->A1_EST+'" MUN="'+QRY->A1_MUN+'" >' ;
  144. + QRY->A1_COD + '/' + QRY->A1_LOJA + ' - ' + Alltrim(QRY->A1_NOME) + '</option>'
  145. QRY->(dbSkip())
  146. End
  147. cTopo += ' </select>'
  148. cTopo += ' </div>'
  149. //-----------------------TIPO DO CLIENTE---------------------
  150. cTopo += ' <label class="col-md-1 control-label text-right">Tipo:</label>'
  151. cTopo += ' <div class="col-md-2">'
  152. cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"'
  153. cTopo += ' name="TPCLI" id="TPCLI">'
  154. if Empty(cTpCli)
  155. cTopo += ' <option value=""> </option>'
  156. else
  157. cTopo += ' <option value="' + aTpCli[aScan(aTpCli,{|x| alltrim(x[1]) == cTpCli}), 1] + '">' + aTpCli[aScan(aTpCli,{|x| alltrim(x[1]) == cTpCli}), 2] + '</option>'
  158. endif
  159. for i := 1 to Len(aTpCli)
  160. cTopo += ' <option value="' + aTpCli[i, 1] + '">' + aTpCli[i, 2] + '</option>'
  161. Next
  162. cTopo += ' </select>'
  163. cTopo += ' </div>'
  164. cTopo += ' </div>'
  165. cTopo += ' </div>'
  166. //2º Linha
  167. //-----------------------ESTADO FATURAMENTO---------------------
  168. cTopo += ' <div class="row form-group">'
  169. cTopo += ' <label class="col-md-2 control-label">Estado Faturamento:</label>'
  170. cTopo += ' <div class="col-md-2">'
  171. cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"'
  172. cTopo += ' name="EST_FAT" id="EST_FAT">'
  173. if Empty(cUFFat)
  174. cTopo += ' <option value=""> </option>'
  175. else
  176. cTopo += ' <option value="' + aEstados[aScan(aEstados,cUFFat)] + '">' + aEstados[aScan(aEstados,cUFFat)] + '</option>'
  177. endif
  178. for i := 1 to Len(aEstados)
  179. cTopo += ' <option value="' + aEstados[i] + '">' + aEstados[i] + '</option>'
  180. Next
  181. cTopo += ' </select>'
  182. cTopo += ' </div>'
  183. //-----------------------ESTADO ENTREGA---------------------
  184. cTopo += ' <label class="col-md-1 control-label">Estado Entrega:</label>'
  185. cTopo += ' <div class="col-md-2">'
  186. cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"'
  187. cTopo += ' name="EST_ENTRE" id="EST_ENTRE" onchange="javascript:retMunicipios('+"'"+cMunEnt+"'"+')">'
  188. if empty(cUfEntr)
  189. cTopo += ' <option value=""> </option>'
  190. else
  191. cTopo += ' <option value="' + aEstados[aScan(aEstados,cUfEntr)] + '">' + aEstados[aScan(aEstados,cUfEntr)] + '</option>'
  192. endif
  193. for i := 1 to Len(aEstados)
  194. cTopo += ' <option value="' + aEstados[i] + '">' + aEstados[i] + '</option>'
  195. Next
  196. cTopo += ' </select>'
  197. cTopo += ' </div>'
  198. //-----------------------MUNICIPIO ENTREGA---------------------
  199. cTopo += ' <label class="col-md-1 control-label">Município Entrega:</label>'
  200. cTopo += ' <div class="col-md-4">'
  201. cTopo += ' <select data-plugin-selectTwo class="form-control poulate mb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"'
  202. cTopo += ' name="MUN_ENTRE" id="MUN_ENTRE">'
  203. if empty(cMunEnt)
  204. cTopo += ' <option value=""> </option>'
  205. else
  206. cTopo += u_retMun(cCliSel,cUFEntr)
  207. endif
  208. cTopo += ' </select>'
  209. cTopo += ' </div>'
  210. cTopo += ' </div>'
  211. //3º Linha
  212. //-----------------------OPORTUNIDADE---------------------
  213. cTopo += ' <div class="row form-group">'
  214. cTopo += ' <label class="col-md-2 control-label text-left">Oportunidade:</label>'
  215. cTopo += ' <div class="col-md-4">'
  216. cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  217. cTopo += ' { "placeholder": "Selecione a oportunidade", "allowClear": false }'+"'"+' name="OPORTUN" id="OPORTUN" >'
  218. if Empty(cOport)
  219. cTopo += ' <option value=""> </option>'
  220. else
  221. If cOport = 'ZZZZZZ'
  222. cTopo += ' <option value="ZZZZZZ">ZZZZZZ - SEM OPORTUNIDADE </option>'
  223. Else
  224. cTopo += ' <option value="' + Alltrim(cOport)+'">'+cOport+'/'+Alltrim(GetAdvfVal("AD1","AD1_REVISA",xFilial("AD1")+cOport,1))+'/'+;
  225. Alltrim(GetAdvfVal("AD1","AD1_DESCRI",xFilial("AD1")+cOport,1))+'/'+Alltrim(GetAdvfVal("AD1","AD1_DESCCI",xFilial("AD1")+cOport,1))+'/'+;
  226. Alltrim(GetAdvfVal("AD1","AD1_NOMPAR",xFilial("AD1")+cOport,1))+'</option>'
  227. Endif
  228. endif
  229. cTopo += ' <option value="ZZZZZZ">ZZZZZZ - SEM OPORTUNIDADE </option>'
  230. While !QRYAD1->(EOF())
  231. If Alltrim(QRYAD1->AD1_NROPOR) <> cOport
  232. cTopo += ' <option value="' + Alltrim(QRYAD1->AD1_NROPOR)+'">'+QRYAD1->AD1_NROPOR+'/'+Alltrim(QRYAD1->AD1_REVISA)+'/'+;
  233. Alltrim(QRYAD1->AD1_DESCRI)+'/'+Alltrim(QRYAD1->AD1_DESCCI)+'/'+Alltrim(QRYAD1->AD1_NOMPAR)+'</option>'
  234. Endif
  235. QRYAD1->(dbSkip())
  236. End
  237. cTopo += ' </select>'
  238. cTopo += ' </div>'
  239. //-----------------------GRUPO PRODUTO---------------------
  240. //cTopo += ' <div class="row form-group">'
  241. /*
  242. cTopo += ' <label class="col-md-1 control-label">Grupo:</label>'
  243. cTopo += ' <input type="hidden" name="GRUPOP" id="GRUPOP" value="" />'
  244. cTopo += ' <div class="col-md-5">'
  245. cTopo += ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  246. cTopo += ' { "placeholder": "Selecione a oportunidade", "allowClear": false }'+"'"+' name="GRUP_PROD" id="GRUP_PROD"> '
  247. if empty(cGrupoP)
  248. cTopo += ' <option value=""> </option>'
  249. else
  250. cTopo += ' <option value="' + Alltrim(cGrupoP)+'">'+cGrupoP + ' - ' + GetAdvfVal("SBM","BM_DESC",xFilial("SBM")+cGrupoP,1)+'</option>'
  251. endif
  252. While !QRYSBM->(EOF())
  253. cTopo += ' <option value="' + Alltrim(QRYSBM->BM_GRUPO)+'">'+QRYSBM->BM_GRUPO + ' - ' + Alltrim(QRYSBM->BM_DESC) +'</option>'
  254. QRYSBM->(dbSkip())
  255. End
  256. cTopo += ' </select>'
  257. cTopo += ' </div>'
  258. */
  259. cTopo += ' </div>'
  260. //-----------------------BOTAO BUSCAR---------------------
  261. cTopo += ' <br>'
  262. cTopo += ' <div class="row form-group text-center">'
  263. cTopo += ' <input type="hidden" name="FILTROP" id="FILTROP" value="" />'
  264. //cTopo += ' <div class="col-md-5" offset-2 style="text-align: right">'
  265. cTopo += '<input class="btn btn-primary" type="button" id="btFiltro" name="btFiltro" value="Consultar" onclick="this.value= ' + "'Consultando...'" + ';Filtro()" />'+chr(13)+chr(10)
  266. //cTopo += ' </div>'
  267. cTopo += ' </div>'
  268. cTopo += '</form>'
  269. APWExCloseQuery('QRY')
  270. cColunas+='<th>Código</th>'
  271. cColunas+='<th>Descrição</th>'
  272. cColunas+='<th>Qtd Disponível</th>'
  273. cColunas+='<th>Preço de Venda</th>'
  274. conout("Antes query: "+Time())
  275. if !empty(cTabela)
  276. cQry := "SELECT CODIGO,PRODUTO,sum(SALDO_ATUAL) SALDO "
  277. cQry += "FROM V_BI_ESTQ_01_SEM_DONO "
  278. cQry += "INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_COD = CODIGO AND SB1.D_E_L_E_T_ = ' ' "
  279. cQry += " AND B1_TIPO IN ('PA','RE') "
  280. cQry += " AND B1_MSBLQL <> '1' "
  281. cQry += "WHERE GRUPO NOT IN ('PEL','PE') "
  282. cQry += "GROUP BY CODIGO,PRODUTO"
  283. cQry += "ORDER BY 1"
  284. /*
  285. cQry := "SELECT CODIGO,PRODUTO,sum(SALDO_ATUAL) SALDO FROM V_BI_ESTQ_01_SEM_DONO"
  286. cQry += " WHERE GRUPO = '"+cGrupoP+"' "
  287. cQry += " GROUP BY CODIGO,PRODUTO"
  288. cQry += " ORDER BY 1"
  289. */
  290. If Select("QRPB2") > 0
  291. QRPB2->(dbCloseArea())
  292. Endif
  293. APWExOpenQuery(ChangeQuery(cQry),'QRPB2',.T.)
  294. conout("depois query: "+Time())
  295. conout("query estoque: "+cQuery)
  296. DbSelectArea("SA1")
  297. DbSelectArea("SB1")
  298. DbSelectArea("AD1")
  299. While QRPB2->(!Eof())
  300. lOportun:= .F.
  301. SA1->(DbSetOrder(1))
  302. if SA1->(DbSeek(xFilial("SA1")+SubStr(cCliSel,1,6)+SubStr(cCliSel,7,2)))
  303. SB1->(DbSetOrder(1))
  304. if SB1->(DbSeek(xFilial("SB1")+Alltrim(QRPB2->CODIGO)))
  305. If (SB1->B1_TIPO $ cTipoProd) .and. !(SB1->B1_GRUPO $ cGrupoProd)
  306. AD1->(DbSetOrder(1))
  307. if AD1->(DbSeek(xFilial("AD1")+cOport))//AD1_FILIAL+AD1_NROPOR+AD1_REVISA
  308. lOportun:= .T.
  309. endif
  310. nPrcVen := cpFata1003(cUfEntr,cMunEnt,lOportun)
  311. cItens+='<tr>'
  312. cItens+=' <td>'+Alltrim(QRPB2->CODIGO)+'</td>'
  313. cItens+=' <td>'+Alltrim(QRPB2->PRODUTO)+'</td>'
  314. cItens+=' <td>'+cValtoChar(Iif(QRPB2->SALDO > 0, QRPB2->SALDO, 0))+'</td>'
  315. cItens+=' <td>'+Transform(nPrcVen,'@E 9,999,999.9999')+'</td>'
  316. cItens+='</tr>'
  317. Endif
  318. endif
  319. endif
  320. QRPB2->(dbSkip())
  321. End
  322. endif
  323. conout("final rotina: "+Time())
  324. //oObjLog:saveMsg("Vai chamar H_SMSGrid")
  325. cHtml := H_SMSGrid()
  326. //oObjLog:saveMsg("Vai retornar")
  327. Web Extended End
  328. Return (cHTML)
  329. User Function RetMun(cCli,cUF)
  330. Local cHtml
  331. Local cSigla := iif(empty(HttpPost->CEST),cUF,HttpPost->CEST)
  332. Local cCliente := iif(empty(HttpPost->CCLI),cCli,HttpPost->CCLI)
  333. Local cMuns := ""
  334. Local cCodMun := ""
  335. Web Extended Init cHtml Start U_inSite()
  336. cQry:="SELECT CC2_EST,CC2_CODMUN,CC2_MUN "
  337. cQry+=" From "+RetSqlName("CC2")+" CC2"
  338. cQry+=" Where CC2_FILIAL = '"+xFilial("CC2")+"' "
  339. cQry+=" And CC2_EST = '"+cSigla+"' "
  340. cQry+=" AND CC2.D_E_L_E_T_ = ' ' "
  341. cQry+=" ORDER BY CC2_MUN "
  342. If Select("QRPCC2") > 0
  343. QRPCC2->(dbCloseArea())
  344. Endif
  345. APWExOpenQuery(ChangeQuery(cQry),'QRPCC2',.T.)
  346. DbSelectArea("SA1")
  347. SA1->(DbSetOrder(1))
  348. if SA1->(DbSeek(xFilial("SA1")+cCliente))
  349. if SA1->A1_EST == cSigla
  350. cCodMun := GetAdvfVal("CC2","CC2_CODMUN",xFilial("CC2")+SA1->A1_EST,1)
  351. cMuns +=' <option value="'+Alltrim(cCodMun)+'">'+encodeUTF8(Alltrim(Strtran(SA1->A1_MUN,"'","")))+'</option>'
  352. endif
  353. endif
  354. While QRPCC2->(!Eof())
  355. cMuns += ' <option value="' + Alltrim(QRPCC2->CC2_CODMUN) + '"'
  356. cMuns += '>' + encodeUTF8(Alltrim(Strtran(QRPCC2->CC2_MUN, "'", ""))) + '</option>'
  357. QRPCC2->(dbSkip())
  358. End
  359. cHtml:= cMuns
  360. Web Extended end
  361. Return cHtml
  362. Static Function cpFata1003(cUfEntr,cMunEnt,lOportun)
  363. Local aArea := GetArea()
  364. Local cPrTabela := 0
  365. If Select("QRY") > 0
  366. dbSelectArea("QRY")
  367. QRY->(DbCloseArea())
  368. Endif
  369. cQuery := "SELECT * FROM "
  370. cQuery += RetSQLName("SF7")
  371. cQuery += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' "
  372. cQuery += " AND F7_GRTRIB = '" + Trim(SB1->B1_GRTRIB) + "' "
  373. cQuery += " AND F7_EST = '" + SA1->A1_EST + "' "
  374. cQuery += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' "
  375. cQuery += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' "
  376. cQuery += " AND D_E_L_E_T_ = ' '" + " "
  377. TcQuery cQuery New Alias "QRY"
  378. cProduto := SB1->B1_COD//TMP1->CK_PRODUTO
  379. oObjLog:saveMsg("Estoque.apl - Calculo do produto:"+cProduto)
  380. If SB1->B1_TIPO = 'CO' .AND. SB1->B1_GRUPO = 'ELEV'
  381. oObjLog:saveMsg("Estoque.apl - Tipo do produto igual a CO e grupo igual a ELEV")
  382. cPrUnit := SB1->B1_CUSTD
  383. oObjLog:saveMsg("Estoque.apl - Recebeu preço de custo da SB1: "+cValtoChar(cPrUnit))
  384. Return(cPrUnit)
  385. EndIf
  386. If Select("QRY1") > 0
  387. dbSelectArea("QRY1")
  388. QRY1->(DbCloseArea())
  389. Endif
  390. cQuery1 := "SELECT DA1_PRCVEN FROM "
  391. cQuery1 += RetSQLName("DA1")
  392. cQuery1 += " WHERE DA1_FILIAL = '" + xFilial("DA1") + "' "
  393. cQuery1 += " AND DA1_CODPRO = '" + Trim(cProduto) + "' " //SB1->B1_COD + "' "
  394. cQuery1 += " AND DA1_CODTAB = '" + QRY->F7_TPL + "' "
  395. cQuery1 += " AND D_E_L_E_T_ = ' '"
  396. TcQuery cQuery1 New Alias "QRY1"
  397. If !QRY1->(Eof())
  398. cPrTabela := QRY1->DA1_PRCVEN
  399. oObjLog:saveMsg("Estoque.apl - Recebeu preço da tabela de venda: "+DA1->DA1_CODTAB+"="+cValtoChar(cPrTabela))
  400. Else
  401. cPrTabela := 0
  402. oObjLog:saveMsg("Estoque.apl - retorno zero da tabela de preço")
  403. EndIf
  404. cPrUnit := (cPrTabela - (cPrTabela * ((18 - QRY->F7_CARGICM - QRY->F7_FATCORR)/100)))
  405. If lOportun
  406. If AD1->AD1_COMIRT > 0
  407. cPrUnit := (cPrUnit * ((AD1->AD1_COMIRT/100)+1))
  408. oObjLog:saveMsg("Estoque.apl - entrou no calculo da oportunidade: "+cValtochar(cPrUnit)+" * ("+cValtochar(AD1->AD1_COMIRT)+"/100)+1")
  409. EndIf
  410. EndIf
  411. DbSelectArea("SZ3")
  412. SZ3->(DbSetOrder(1))//Z3_FILIAL+Z3_UF+Z3_MUNICIP
  413. if SZ3->(DbSeek(xFilial("SZ3")+cUfEntr+cMunEnt))
  414. oObjLog:saveMsg("Estoque.apl - Encntrou a UF e Municipio")
  415. If SZ3->Z3_PERFRAD > 0//Z3_VLFRMIN
  416. cPrUnit := (cPrUnit * ((SZ3->Z3_PERFRAD/100)+1))
  417. oObjLog:saveMsg("Estoque.apl - Entrou na SZ3 com SZ3->Z3_PERFRAD > 0: "+cValtoChar(cPrUnit)+" * ("+cValtoChar(SZ3->Z3_PERFRAD)+" /100)+1")
  418. EndIf
  419. elseif SZ3->(DbSeek(xFilial("SZ3")+cUfEntr))
  420. oObjLog:saveMsg("Estoque.apl - Encntrou a UF")
  421. If SZ3->Z3_PERFRAD > 0
  422. cPrUnit := (cPrUnit * ((SZ3->Z3_PERFRAD/100)+1))
  423. oObjLog:saveMsg("Estoque.apl - Entrou na SZ3 com SZ3->Z3_PERFRAD > 0: "+cValtoChar(cPrUnit)+" * ("+cValtoChar(SZ3->Z3_PERFRAD)+" /100)+1")
  424. EndIf
  425. endif
  426. oObjLog:saveMsg("Estoque.apl - Preço final retornado: "+cValtoChar(cPrUnit))
  427. RestArea(aArea)
  428. Return(cPrUnit)
  429. Static Function retCli(cEstFat,cTipoCli)
  430. Local aArea := GetArea()
  431. Local cCodigo := ""
  432. If Select("QRYCLI") > 0
  433. dbSelectArea("QRYCLI")
  434. QRYCLI->(DbCloseArea())
  435. Endif
  436. cQuery := "SELECT A1_COD,A1_LOJA FROM "+RetSQLName("SA1")+" SA1 "
  437. cQuery += " WHERE D_E_L_E_T_ = ' '"
  438. cQuery += " AND A1_TIPO = '"+cTipoCli+"' AND A1_EST = '"+cEstFat+"'"
  439. cQuery += " AND A1_COD = 'CLI-"+cEstFat+"' "
  440. TcQuery cQuery New Alias "QRYCLI"
  441. If !QRYCLI->(Eof())
  442. cCodigo := QRYCLI->A1_COD+QRYCLI->A1_LOJA
  443. oObjLog:saveMsg("Cliente padrão selecionado:"+cCodigo)
  444. else
  445. oObjLog:saveMsg("Estoque.apl - Cliente padrão não encontrado.")
  446. endif
  447. RestArea(aArea)
  448. Return cCodigo