Orcamento.apl 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  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 ¦ Orcamento ¦ Autor ¦ Lucilene Mendes ¦ Data ¦28.08.17 ¦¦¦
  10. ¦¦+----------+------------------------------------------------------------¦¦¦
  11. ¦¦¦Descriçäo ¦ Grid com os orçamentos em aberto do vendedor. ¦¦¦
  12. ¦¦+-----------------------------------------------------------------------+¦¦
  13. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  14. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  15. User Function Orcamento()
  16. Local cHtml
  17. Local cLink := ""
  18. Local cCombo := ""
  19. Local cDataDe := ""
  20. Local cDataAte := ""
  21. Local cFiltDe := ""
  22. Local cFilAte := ""
  23. Local cLinkDet := ""
  24. Local aStatus:= {}
  25. Private cColunas:= ""
  26. Private cItens := ""
  27. Private cTopo := ""
  28. Private cSite := "u_PortalLogin.apw"
  29. Private cPagina := "Orçamentos"
  30. Private cTitle := ""
  31. Private lTableTools:= .T.
  32. Private lSidebar:= .F.
  33. Private cCodLogin := ""
  34. Private cVendLogin:= ""
  35. Private cPerda:=""
  36. Private cConcorrente:=""
  37. Web Extended Init cHtml Start U_inSite()
  38. If Empty(HttpSession->CodVend)
  39. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  40. Return cHtml
  41. Else
  42. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  43. HttpSession->CodVend:= HttpSession->Superv
  44. Endif
  45. Endif
  46. cVendLogin := u_GetUsrPR()
  47. cCodLogin := U_SetParPR(cVendLogin)
  48. // Pega do parâmetro com o Titulo do Portal
  49. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  50. // Define a funcao a ser chama no link
  51. cSite := "u_SMSPortal.apw?PR="+cCodLogin
  52. // Monta o cabeçalho para a pagina
  53. cHeader := U_PSHeader(cTitle, cSite)
  54. //Função que atualiza os menus
  55. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  56. //Tratamento dos filtros
  57. If type("HttpPost->DataDe") <> "U"
  58. //Se vazio, usa as datas padrão para evitar erro na query
  59. If Empty(HttpPost->DataDe) .or. Empty(HttpPost->DataAte)
  60. cDataDe:= dtos(date()-30)
  61. cDataAte:= dtos(date())
  62. Else
  63. cDataDe:= dtos(ctod(HttpPost->DataDe))
  64. cDataAte:= dtos(ctod(HttpPost->DataAte))
  65. Endif
  66. //Atualiza as variáveis no valor do filtro
  67. cFiltDe:= dtoc(stod(cDataDe))
  68. cFilAte:= dtoc(stod(cDataAte))
  69. Else
  70. //Variáveis dos input dos filtros
  71. cFiltDe:= dtoc(date()-30)
  72. cFilAte:= dtoc(date())
  73. //Variáveis de filtro da query
  74. cDataDe:= dtos(date()-30)
  75. cDataAte:= dtos(date())
  76. Endif
  77. //Topo da janela
  78. //Botão incluir novo orçamento
  79. cTopo:= '<div class="row form-group">'
  80. If HttpSession->Tipo = 'S'
  81. cTopo+= ' <div class="col-sm-3">'
  82. cTopo+= ' <button class="btn btn-primary" id="btAddOrc" name="btAddOrc" onclick="javascript: getFilVend();">'
  83. cTopo+= ' <i class="fa fa-plus"></i> Novo Orçamento</button>'
  84. cTopo+= ' </div>'
  85. Endif
  86. //Filtros
  87. cTopo+= ' <div class="col-sm-9" align="'+Iif(HttpSession->Tipo = 'S',"right","left")+'">'
  88. cTopo+= ' <form name="formGrid" id="formGrid" method="POST" action="U_Orcamento.apw?PR='+cCodLogin+'">'
  89. cTopo+= ' <label class="col-md-2 control-label">Emissão De:</label>'
  90. cTopo+= ' <div class="col-md-3">'
  91. cTopo+= ' <div class="input-group">'
  92. cTopo+= ' <span class="input-group-addon">'
  93. cTopo+= ' <i class="fa fa-calendar"></i>'
  94. cTopo+= ' </span>'
  95. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  96. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFiltDe+'" '
  97. cTopo+= ' placeholder="__/__/____" id="datade" name="datade" class="form-control only-numbers" type="text">'
  98. cTopo+= ' </div>'
  99. cTopo+= ' </div>'
  100. cTopo+= ' <label class="col-md-2 control-label">Emissão Até:</label>'
  101. cTopo+= ' <div class="col-md-3">'
  102. cTopo+= ' <div class="input-group">'
  103. cTopo+= ' <span class="input-group-addon">'
  104. cTopo+= ' <i class="fa fa-calendar"></i>'
  105. cTopo+= ' </span>'
  106. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  107. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFilAte+'" '
  108. cTopo+= ' placeholder="__/__/____" id="dataate" name="dataate" class="form-control only-numbers" type="text">'
  109. cTopo+= ' </div>'
  110. cTopo+= ' </div>'
  111. cTopo+= ' <button class="btn btn-primary" id="btFiltro" value="" onclick="this.value= '+"'"+'Aguarde...'+"'"+';this.disabled= '+"'"+'disabled'+"'"+';Filtro()" name="btFiltro">'
  112. cTopo+= ' <i class="fa fa-filter"></i> Filtrar</button>'
  113. cTopo+= ' </form>'
  114. cTopo+= ' </div>'
  115. cTopo+= '</div>'
  116. cQry:= " Select DISTINCT SCJ.CJ_FILIAL, SCJ.CJ_NUM, SCJ.CJ_CLIENTE, SCJ.CJ_LOJA, A1_NOME, A1_EMAIL, SCJ.CJ_EMISSAO, SCJ.CJ_STATUS, CK_NUMPV, SCJ.CJ_VEND, SCJ.R_E_C_N_O_ RECSCJ, "
  117. cQry+= " C5_NOTA,C5_SERIE, SCJ.CJ_HORA, SCJ.CJ_ORCORIG, SCJ.CJ_OBRA "
  118. cQry+= " From "+RetSqlName("SCJ")+" SCJ "
  119. cQry+= " Inner Join "+RetSqlName("SA1")+" SA1 On A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = SCJ.CJ_CLIENTE AND A1_LOJA = SCJ.CJ_LOJA AND SA1.D_E_L_E_T_ = ' ' "
  120. cQry+= " Inner Join "+RetSqlName("SCK")+" SCK On CK_FILIAL = SCJ.CJ_FILIAL AND CK_NUM = SCJ.CJ_NUM AND SCK.D_E_L_E_T_ = ' ' "
  121. cQry+= " Left Join "+RetSqlName("SC5")+" SC5 ON C5_NUM = CK_NUMPV AND C5_NOTA <> 'XXXXXXXXX' AND SC5.D_E_L_E_T_ = ' ' " //C5_FILIAL = CK_FILIAL AND
  122. cQry+= " Where SCJ.D_E_L_E_T_ = ' ' "
  123. If HttpSession->Tipo = 'S' //Supervisor acessa todos os orçamentos da sua equipe
  124. //cQry+= " AND SCJ.CJ_VEND in "+FormatIn(HttpSession->Equipe,"|")+" "
  125. Else
  126. cQry+= " AND SCJ.CJ_VEND = '"+cVendLogin+"' "
  127. Endif
  128. If !Empty(cDataAte)
  129. cQry+= " And SCJ.CJ_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  130. Endif
  131. cQry+= " Order by SCJ.CJ_EMISSAO, SCJ.CJ_NUM, SCJ.CJ_CLIENTE, SCJ.CJ_LOJA "
  132. If Select("QRY") > 0
  133. QRY->(dbCloseArea())
  134. Endif
  135. APWExOpenQuery(ChangeQuery(cQry),'QRY',.T.)
  136. CONOUT(CqRY)
  137. //Cabeçalho do grid
  138. cColunas+='<th>Filial</th>'
  139. cColunas+='<th>Orçamento</th>'
  140. cColunas+='<th>Status</th>'
  141. cColunas+='<th>Emissão</th>'
  142. cColunas+='<th>Hora</th>'
  143. cColunas+='<th>Cliente</th>'
  144. cColunas+='<th>Nome</th>'
  145. cColunas+='<th>Obra</th>'
  146. cColunas+='<th>Orcto Original</th>'
  147. cColunas+='<th>Pedido</th>'
  148. cColunas+='<th>Nota Fiscal</th>'
  149. If HttpSession->Tipo = 'S'
  150. cColunas+='<th>Vendedor</th>'
  151. Endif
  152. cColunas+='<th></th>'
  153. aStatus:= RetSx3Box(Posicione('SX3',2,'CJ_STATUS','X3CBox()'),,,1)
  154. //Busca os códigos de perda para o cancelamento
  155. cPerda:= u_getPerda()
  156. cConcorrente:= u_getConcor()
  157. While QRY->(!Eof())
  158. //Atualiza os controles do grid
  159. cLink:= "U_MntOrc.apw?PR="+cCodLogin+"&rec="+cValtoChar(QRY->RECSCJ)
  160. cLinkDet := '"onclick="window.document.location='+"'"+cLink+"&opc=view'"+';"'
  161. cItens+='<tr>'
  162. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_FILIAL+'</td>'
  163. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_NUM+'</td>'
  164. If (nSeek := Ascan(aStatus, { |x| x[ 2 ] == QRY->CJ_STATUS })) > 0
  165. cCombo := AllTrim( aStatus[nSeek,3])
  166. If QRY->CJ_STATUS $ 'Q|C'
  167. cCombo:= 'Cancelado'
  168. Elseif !Empty(QRY->CK_NUMPV) .and. QRY->CJ_STATUS = 'B'
  169. If Empty(QRY->C5_NOTA)
  170. cCombo:= 'Efetivado'
  171. Else
  172. cCombo:= 'NF Gerada'
  173. Endif
  174. Endif
  175. Endif
  176. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Iif(Empty(QRY->C5_NOTA),cCombo,"NF Gerada")+'</td>'
  177. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';" data-order="'+(QRY->CJ_EMISSAO)+QRY->CJ_HORA+'">'+dtoc(stod(QRY->CJ_EMISSAO))+'</td>'
  178. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';" data-order="'+(QRY->CJ_EMISSAO)+QRY->CJ_HORA+'">'+QRY->CJ_HORA+'</td>'
  179. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_CLIENTE+'/'+QRY->CJ_LOJA+'</td>'
  180. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->A1_NOME)+'</td>'
  181. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->CJ_OBRA)+'</td>'
  182. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_ORCORIG+'</td>'
  183. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CK_NUMPV+'</td>'
  184. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+If(!Empty(QRY->C5_NOTA),QRY->C5_NOTA+"/"+QRY->C5_SERIE,"")+'</td>'
  185. If HttpSession->Tipo = 'S'
  186. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_VEND+' - '+Posicione("SA3",1,xFilial("SA3")+QRY->CJ_VEND,"A3_NREDUZ")+'</td>'
  187. cItens+=' <td class="actions">'
  188. 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>'
  189. If QRY->CJ_STATUS = "A"
  190. cItens+=' <a href="'+cLink+'&opc=edit" class="on-default" data-toggle="tooltip" data-original-title="Alterar Orçamento"><i class="fa fa-pencil"></i></a>'
  191. cItens+=' <a href="'+cLink+'&opc=dele" class="on-default" data-toggle="tooltip" data-original-title="Excluir Orçamento"><i class="fa fa-trash-o"></i></a>'
  192. cItens+=' <a class="modal-email" href="#" data-toggle="tooltip" data-original-title="Efetivar orçamento" title="" onClick="javascript:efetivaOrc('+QRY->CJ_NUM+','+cValtoChar(QRY->RECSCJ)+');">'
  193. cItens+=' <i class="fa fa-check-square-o"></i></a>'
  194. cItens+=' <a class="modal-canc" href="#" data-toggle="tooltip" data-original-title="Cancelar orçamento" title="" onClick="javascript:cancelaOrc('+QRY->CJ_NUM+','+cValtoChar(QRY->RECSCJ)+');">'
  195. cItens+=' <i class="fa fa-window-close-o"></i></a>'
  196. cItens+=' <a href="U_RevOrc.apw?PR='+cCodLogin+'&rec='+cValtoChar(QRY->RECSCJ)+'&opc=rev" class="on-default" data-toggle="tooltip" data-original-title="Revisar Orçamento"><i class="fa fa-clipboard" aria-hidden="true"></i></a>'
  197. EndIf
  198. /*
  199. cItens+=' <a class="modal-email" href="#" data-toggle="tooltip" data-original-title="Enviar orçamento por e-mail" title="" onClick="javascript:abreEmail('+cValtoChar(QRY->RECSCJ)+','+"'"+Alltrim(QRY->A1_EMAIL)+"'"+');">'
  200. cItens+=' <i class="fa fa-envelope-o"></i></a>'
  201. cItens+=' <a href="#" data-toggle="tooltip" data-original-title="Imprimir Orçamento" title="" onClick="javascript:PrtOrc('+cValtoChar(QRY->RECSCJ)+');"><i class="fa fa-print"></i></a>'
  202. cItens+=' </td>'
  203. */
  204. Endif
  205. cItens+='</tr>'
  206. QRY->(dbSkip())
  207. End
  208. //Retorna o HTML para construção da página
  209. cHtml := H_SMSGrid()
  210. Web Extended End
  211. Return (cHTML)
  212. /*__________________________________________________________________________
  213. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  214. ¦¦+-----------------------------------------------------------------------+¦¦
  215. ¦¦¦Funçäo ¦ FilVend ¦ Autor ¦ Lucilene Mendes ¦ Data ¦30.07.19 ¦¦¦
  216. ¦¦+----------+------------------------------------------------------------¦¦¦
  217. ¦¦¦Descriçäo ¦ Lista as filiais que o vendedor tem acesso ¦¦¦
  218. ¦¦+-----------------------------------------------------------------------+¦¦
  219. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  220. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  221. User Function FilVend()
  222. Local cHtml
  223. Private cSite := "u_PortalLogin.apw"
  224. Private cCodLogin := ""
  225. Private cVendLogin:= ""
  226. Private cFilFiltro:= ""
  227. Web Extended Init cHtml Start U_inSite()
  228. // TODO - Pedro 20210208 - Remover???
  229. If Empty(HttpSession->CodVend)
  230. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  231. Return cHtml
  232. Else
  233. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  234. HttpSession->CodVend:= HttpSession->Superv
  235. Endif
  236. Endif
  237. cVendLogin := u_GetUsrPR()
  238. cCodLogin := U_SetParPR(cVendLogin)
  239. //Retorna o HTML para construção da página
  240. cHtml := u_fFilVend(cVendLogin,cFilFiltro)
  241. Web Extended End
  242. Return (cHTML)
  243. User Function fFilVend(cCodVend,cFilFiltro)
  244. Local cRet:= ""
  245. Local aFiliais:= {}
  246. Local i:= 0
  247. aFiliais := FWAllFilial()
  248. For i:= 1 to Len(aFiliais)
  249. aFilAtu:= FWArrFilAtu(cEmpAnt,aFiliais[i])
  250. cRet+= ' <option value="'+Alltrim(aFilAtu[2])+'" '+Iif(Alltrim(aFilAtu[2])= cFilFiltro,' selected ','')+'>'+aFilAtu[2]+" - "+OemtoAnsi(Alltrim(aFilAtu[7]))+'</option>'
  251. Next
  252. Return cRet
  253. /*__________________________________________________________________________
  254. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  255. ¦¦+-----------------------------------------------------------------------+¦¦
  256. ¦¦¦Funçäo ¦ TrocaFil ¦ Autor ¦ Lucilene Mendes ¦ Data ¦30.07.19 ¦¦¦
  257. ¦¦+----------+------------------------------------------------------------¦¦¦
  258. ¦¦¦Descriçäo ¦ Altera a filial logada ¦¦¦
  259. ¦¦+-----------------------------------------------------------------------+¦¦
  260. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  261. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  262. User Function TrocaFil()
  263. Local cHtml
  264. Local cRet := ""
  265. Private cSite := "u_PortalLogin.apw"
  266. Private cCodLogin := ""
  267. Private cVendLogin:= ""
  268. Web Extended Init cHtml Start U_inSite()
  269. // TODO - Pedro 20210208 - Remover???
  270. If Empty(HttpSession->CodVend)
  271. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  272. Return cHtml
  273. Else
  274. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  275. HttpSession->CodVend:= HttpSession->Superv
  276. Endif
  277. Endif
  278. cVendLogin := u_GetUsrPR()
  279. cCodLogin := U_SetParPR(cVendLogin)
  280. //Altera a empresa para a filial de faturamento
  281. nRecSA3:= SA3->(Recno())
  282. If cFilAnt <> HttpPost->Filial
  283. HttpSession->Filial:= HttpPost->Filial //CEMPANT+CFILANT+CEMPFIL
  284. u_InSite(.f.)
  285. Endif
  286. //Posiciona na SA3 novamente, pois ao trocar a filial fecha a tabela
  287. dbSelectArea("SA3")
  288. SA3->(dbGoTo(nRecSA3))
  289. If cFilAnt == HttpPost->Filial
  290. cRet := cFilAnt
  291. Endif
  292. //Retorna o HTML para construção da página
  293. cHtml := cRet
  294. Web Extended End
  295. Return (cHTML)
  296. /*__________________________________________________________________________
  297. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  298. ¦¦+-----------------------------------------------------------------------+¦¦
  299. ¦¦¦Funçäo ¦ getPerda ¦ Autor ¦ Lucilene Mendes ¦ Data ¦24.08.24 ¦¦¦
  300. ¦¦+----------+------------------------------------------------------------¦¦¦
  301. ¦¦¦Descriçäo ¦ Retorna lista de select com os motivos de perda ¦¦¦
  302. ¦¦+-----------------------------------------------------------------------+¦¦
  303. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  304. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  305. User Function getPerda(cOpcSel)
  306. Local cLista:= ""
  307. cQry:= " Select Z4_CODIGO, Z4_DESCRI, Z4_CONC "
  308. cQry+= " From "+RetSqlName("SZ4")+" SZ4 "
  309. cQry+= " Where Z4_FILIAL = '"+xFilial("SZ4")+"' "
  310. cQry+= " And SZ4.D_E_L_E_T_ = ' ' "
  311. APWExOpenQuery(ChangeQuery(cQry),'QRPE',.T.)
  312. cLista+=' <option value=""></option>'
  313. While QRPE->(!Eof())
  314. cLista+=' <option value="'+QRPE->Z4_CONC+QRPE->Z4_CODIGO+'"'+Iif(Alltrim(QRPE->Z4_CODIGO) == AllTrim(cOpcSel),'selected','')+'>'+Alltrim(QRPE->Z4_CODIGO)+" - "+Alltrim(u_RemEspec(QRPE->Z4_DESCRI))+'</option>'
  315. QRPE->(dbSkip())
  316. End
  317. QRPE->(dbCloseArea())
  318. Return cLista
  319. /*__________________________________________________________________________
  320. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  321. ¦¦+-----------------------------------------------------------------------+¦¦
  322. ¦¦¦Funçäo ¦ getConcor ¦ Autor ¦ Lucilene Mendes ¦ Data ¦24.08.24 ¦¦¦
  323. ¦¦+----------+------------------------------------------------------------¦¦¦
  324. ¦¦¦Descriçäo ¦ Retorna lista de select com os concorrentes ¦¦¦
  325. ¦¦+-----------------------------------------------------------------------+¦¦
  326. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  327. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  328. User Function getConcor(cOpcSel)
  329. Local cLista:= ""
  330. cQry:= " Select Z21_COD "
  331. cQry+= " From "+RetSqlName("Z21")+" Z21 "
  332. cQry+= " Where Z21_FILIAL = '"+xFilial("Z21")+"' "
  333. cQry+= " And Z21.D_E_L_E_T_ = ' ' "
  334. APWExOpenQuery(ChangeQuery(cQry),'QRCO',.T.)
  335. cLista+=' <option value=""></option>'
  336. While QRCO->(!Eof())
  337. cLista+=' <option value="'+QRCO->Z21_COD+'"'+Iif(Alltrim(QRCO->Z21_COD) == AllTrim(cOpcSel),'selected','')+'>'+Alltrim(QRCO->Z21_COD)+'</option>'
  338. QRCO->(dbSkip())
  339. End
  340. QRCO->(dbCloseArea())
  341. Return cLista
  342. /*__________________________________________________________________________
  343. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  344. ¦¦+-----------------------------------------------------------------------+¦¦
  345. ¦¦¦Funçäo ¦ GeraEfetiva ¦ Autor ¦ Lucilene Mendes ¦ Data ¦11.01.25 ¦¦¦
  346. ¦¦+----------+------------------------------------------------------------¦¦¦
  347. ¦¦¦Descriçäo ¦ Gera efetivação para o orçamento ¦¦¦
  348. ¦¦+-----------------------------------------------------------------------+¦¦
  349. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  350. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  351. User Function GeraEfetiva()
  352. Local cHtml
  353. Local cRet := ""
  354. Local cDirErro := "\erro\"
  355. Local nRecSCJ := Val(HttpPost->recorc)
  356. Local aCabec := {}
  357. Local aLinha := {}
  358. Local aItens := {}
  359. Private cSite := "u_PortalLogin.apw"
  360. Private cCodLogin := ""
  361. Private cVendLogin:= ""
  362. Private lMsErroAuto := .F.
  363. Web Extended Init cHtml Start U_inSite()
  364. If Empty(HttpSession->CodVend)
  365. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  366. Return cHtml
  367. Endif
  368. cVendLogin := u_GetUsrPR()
  369. cCodLogin := U_SetParPR(cVendLogin)
  370. //Posiciona no orçamento
  371. dbSelectArea("SCJ")
  372. SCJ->(dbGoTo(nRecSCJ))
  373. If cFilAnt <> SCJ->CJ_FILIAL
  374. u_PtTrocaFil(SCJ->CJ_FILIAL)
  375. Endif
  376. aAdd(aCabec,{"CJ_NUM" , SCJ->CJ_NUM ,Nil})
  377. aAdd(aCabec,{"CJ_CLIENTE", SCJ->CJ_CLIENTE ,Nil})
  378. aAdd(aCabec,{"CJ_LOJACLI", SCJ->CJ_LOJA ,Nil})
  379. aAdd(aCabec,{"CJ_CONDPAG", SCJ->CJ_CONDPAG ,Nil})
  380. SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
  381. While SCK->(!Eof()) .and. SCK->CK_FILIAL = SCJ->CJ_FILIAL .and. SCK->CK_NUM = SCJ->CJ_NUM
  382. aLinha := {}
  383. aAdd(aLinha,{"CK_ITEM" , SCK->CK_ITEM ,Nil})
  384. aAdd(aLinha,{"CK_PRODUTO", SCK->CK_PRODUTO ,Nil})
  385. aAdd(aLinha,{"CK_QTDVEN" , SCK->CK_QTDVEN ,Nil})
  386. aAdd(aLinha,{"CK_PRCVEN" , SCK->CK_PRCVEN ,Nil})
  387. //aAdd(aLinha,{"CK_PRUNIT" , SCK->CK_PRUNIT ,Nil})
  388. aAdd(aLinha,{"CK_VALOR" , SCK->CK_VALOR ,Nil})
  389. aAdd(aLinha,{"CK_TES" , SCK->CK_TES ,Nil})
  390. aAdd(aItens,aLinha)
  391. SCK->(dbSkip())
  392. End
  393. MATA416(aCabec,aItens)
  394. If lMsErroAuto
  395. If !ExistDir(cDirErro)
  396. MakeDir(cDirErro)
  397. Endif
  398. cDirErro+=dtos(date())
  399. If !ExistDir(cDirErro)
  400. MakeDir(cDirErro)
  401. Endif
  402. cErro:= Mostraerro(cDirErro,"aprovacao_orcamento_erro_"+SCJ->CJ_FILIAL+SCJ->CJ_NUM+"_"+strtran(time(),":","")+".txt")
  403. cRet:= "Erro ao efetivar o orçamento!"
  404. Conout(cRet)
  405. cDestMail:= GetNewPar("PR_DESTORE ","lucilene@smsti.com.br")
  406. u_MailCM("ERRO ORCAMENTO",{cDestMail},{},"ERRO EFETIVAÇÃO ORCAMENTO",cErro,"","")
  407. Else
  408. SCJ->(dbGoTo(nRecSCJ))
  409. SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
  410. cRet:= "Orçamento efetivado com sucesso! Gerado o pedido "+SCK->CK_NUMPV+"."
  411. Endif
  412. cHtml := u_FormEntities(cRet)
  413. Web Extended End
  414. Return (cHTML)
  415. /*__________________________________________________________________________
  416. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  417. ¦¦+-----------------------------------------------------------------------+¦¦
  418. ¦¦¦Funçäo ¦ GeraCancela ¦ Autor ¦ Lucilene Mendes ¦ Data ¦11.01.25 ¦¦¦
  419. ¦¦+----------+------------------------------------------------------------¦¦¦
  420. ¦¦¦Descriçäo ¦ Gera cancelamento do orçamento ¦¦¦
  421. ¦¦+-----------------------------------------------------------------------+¦¦
  422. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  423. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  424. User Function GeraCancela()
  425. Local cHtml
  426. Local nRecSCJ := Val(HttpPost->recorc)
  427. Local cCodPerda := HttpPost->codperda
  428. Local cConcorr := Alltrim(HttpPost->concorrente)
  429. Private cSite := "u_PortalLogin.apw"
  430. Private cCodLogin := ""
  431. Private cVendLogin:= ""
  432. Web Extended Init cHtml Start U_inSite()
  433. If Empty(HttpSession->CodVend)
  434. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  435. Return cHtml
  436. Endif
  437. cVendLogin := u_GetUsrPR()
  438. cCodLogin := U_SetParPR(cVendLogin)
  439. //Posiciona no orçamento
  440. dbSelectArea("SCJ")
  441. SCJ->(dbGoTo(nRecSCJ))
  442. If cFilAnt <> SCJ->CJ_FILIAL
  443. u_PtTrocaFil(SCJ->CJ_FILIAL)
  444. Endif
  445. SCJ->(dbGoTo(nRecSCJ))
  446. Reclock("SCJ",.F.)
  447. SCJ->CJ_CODPERD:= Substr(cCodPerda,2)
  448. SCJ->CJ_DSCPERD:= fDesc("SZ4",Substr(cCodPerda,2),"Z4_DESCRI")
  449. SCJ->CJ_CDCONCO:= cConcorr
  450. SCJ->CJ_DTCANC:= dDataBase
  451. SCJ->CJ_STATUS:= 'C'
  452. msUnlock()
  453. cHtml := "OK"
  454. Web Extended End
  455. Return (cHTML)