Orcamento.apl.bak 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  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. //Cabeçalho do grid
  137. cColunas+='<th>Filial</th>'
  138. cColunas+='<th>Orçamento</th>'
  139. cColunas+='<th>Status</th>'
  140. cColunas+='<th>Emissão</th>'
  141. cColunas+='<th>Hora</th>'
  142. cColunas+='<th>Cliente</th>'
  143. cColunas+='<th>Nome</th>'
  144. cColunas+='<th>Obra</th>'
  145. cColunas+='<th>Orcto Original</th>'
  146. cColunas+='<th>Pedido</th>'
  147. cColunas+='<th>Nota Fiscal</th>'
  148. If HttpSession->Tipo = 'S'
  149. cColunas+='<th>Vendedor</th>'
  150. Endif
  151. cColunas+='<th></th>'
  152. aStatus:= RetSx3Box(Posicione('SX3',2,'CJ_STATUS','X3CBox()'),,,1)
  153. //Busca os códigos de perda para o cancelamento
  154. cPerda:= u_getPerda()
  155. cConcorrente:= u_getConcor()
  156. While QRY->(!Eof())
  157. //Atualiza os controles do grid
  158. cLink:= "U_MntOrc.apw?PR="+cCodLogin+"&rec="+cValtoChar(QRY->RECSCJ)
  159. cLinkDet := '"onclick="window.document.location='+"'"+cLink+"&opc=view'"+';"'
  160. cItens+='<tr>'
  161. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_FILIAL+'</td>'
  162. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_NUM+'</td>'
  163. If (nSeek := Ascan(aStatus, { |x| x[ 2 ] == QRY->CJ_STATUS })) > 0
  164. cCombo := AllTrim( aStatus[nSeek,3])
  165. If QRY->CJ_STATUS $ 'Q|C'
  166. cCombo:= 'Cancelado'
  167. Elseif !Empty(QRY->CK_NUMPV) .and. QRY->CJ_STATUS = 'B'
  168. If Empty(QRY->C5_NOTA)
  169. cCombo:= 'Efetivado'
  170. Else
  171. cCombo:= 'NF Gerada'
  172. Endif
  173. Endif
  174. Endif
  175. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Iif(Empty(QRY->C5_NOTA),cCombo,"NF Gerada")+'</td>'
  176. 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>'
  177. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';" data-order="'+(QRY->CJ_EMISSAO)+QRY->CJ_HORA+'">'+QRY->CJ_HORA+'</td>'
  178. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_CLIENTE+'/'+QRY->CJ_LOJA+'</td>'
  179. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->A1_NOME)+'</td>'
  180. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+Alltrim(QRY->CJ_OBRA)+'</td>'
  181. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CJ_ORCORIG+'</td>'
  182. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+QRY->CK_NUMPV+'</td>'
  183. cItens+=' <td role="button" onclick="window.document.location='+"'"+cLink+"&opc=view'"+';">'+If(!Empty(QRY->C5_NOTA),QRY->C5_NOTA+"/"+QRY->C5_SERIE,"")+'</td>'
  184. If HttpSession->Tipo = 'S'
  185. 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>'
  186. Endif
  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="Revisão de Orçamento"><i class="fa fa-search" 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. cItens+='</tr>'
  205. QRY->(dbSkip())
  206. End
  207. cItens+= montarForm("Cancelar Orçamento")
  208. //Retorna o HTML para construção da página
  209. cHtml := H_SMSGrid()
  210. Web Extended End
  211. Return (cHTML)
  212. // Montar o formulário para cancelar orçamento
  213. static function montarForm(cTitulo)
  214. Local cRet:=""
  215. cRet+= '<!-- Modal Form -->'+CRLF
  216. cRet+= ' <div id="modalCanc" class="modal-block modal-block-primary mfp-hide">'+CRLF
  217. cRet+= ' <section class="panel">'+CRLF
  218. cRet+= ' <header class="panel-heading">'+CRLF
  219. cRet+= ' <h2 class="panel-title">'+cTitulo+'</h2>'+CRLF
  220. cRet+= ' </header>'+CRLF
  221. cRet+= ' <div class="panel-body">'+CRLF
  222. cRet+= ' <div class="row form-group">'+CRLF
  223. //Código de perda
  224. cRet+= ' <div class="row form-group">'+CRLF
  225. cRet+= ' <div class="col-lg-1"></div>'+CRLF
  226. cRet+= ' <div class="col-lg-9">'+CRLF
  227. cRet+= ' <label class="control-label">Motivo do Cancelamento</label>'+CRLF
  228. cRet+= ' <div >'+CRLF
  229. cRet+= ' <select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'"+CRLF
  230. cRet+= ' { "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_CODPERD" id="CJ_CODPERD" '+CRLF
  231. cRet+= ' required="" aria-required="true">'+CRLF
  232. cRet+= cPerda
  233. cRet+= ' </select>'+CRLF
  234. cRet+= ' </div>'+CRLF
  235. cRet+= ' </div>'+CRLF
  236. cRet+= ' </div>'+CRLF
  237. // concorrente
  238. cRet+= ' <div class="row form-group">'+CRLF
  239. cRet+= ' <div class="col-lg-1"></div>'+CRLF
  240. cRet+= ' <div class="col-lg-9">'+CRLF
  241. cRet+= ' <label class="control-label">Concorrente</label>'+CRLF
  242. cRet+= ' <div ">'+CRLF
  243. cRet+= ' <select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'"+CRLF
  244. cRet+= ' { "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_CDCONCO" id="CJ_CDCONCO" '+CRLF
  245. cRet+= ' required="" aria-required="true">'+CRLF
  246. cRet+= cConcorrente
  247. cRet+= ' </select>'+CRLF
  248. cRet+= ' </div>'+CRLF
  249. cRet+= ' </div>'+CRLF
  250. cRet+= ' </div>'+CRLF
  251. cRet+= ' </div>'+CRLF
  252. cRet+= ' </div>'+CRLF
  253. cRet+= ' <footer class="panel-footer">'+CRLF
  254. cRet+= ' <div class="row">'+CRLF
  255. cRet+= ' <div class="col-md-12 text-right">'+CRLF
  256. cRet+= ' <button class="btn btn-primary modal-confirm" onclick="javascript:confirmCanc();">Confirmar</button>'+CRLF
  257. cRet+= ' <button class="btn btn-default modal-dismiss" onclick="javascript:fecharCanc();">Cancelar</button>'+CRLF
  258. cRet+= ' </div>'+CRLF
  259. cRet+= ' </div>'+CRLF
  260. cRet+= ' </footer>'+CRLF
  261. cRet+= ' </section>'+CRLF
  262. cRet+= ' </div>'+CRLF
  263. return cRet
  264. /*__________________________________________________________________________
  265. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  266. ¦¦+-----------------------------------------------------------------------+¦¦
  267. ¦¦¦Funçäo ¦ FilVend ¦ Autor ¦ Lucilene Mendes ¦ Data ¦30.07.19 ¦¦¦
  268. ¦¦+----------+------------------------------------------------------------¦¦¦
  269. ¦¦¦Descriçäo ¦ Lista as filiais que o vendedor tem acesso ¦¦¦
  270. ¦¦+-----------------------------------------------------------------------+¦¦
  271. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  272. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  273. User Function FilVend()
  274. Local cHtml
  275. Private cSite := "u_PortalLogin.apw"
  276. Private cCodLogin := ""
  277. Private cVendLogin:= ""
  278. Private cFilFiltro:= ""
  279. Web Extended Init cHtml Start U_inSite()
  280. // TODO - Pedro 20210208 - Remover???
  281. If Empty(HttpSession->CodVend)
  282. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  283. Return cHtml
  284. Else
  285. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  286. HttpSession->CodVend:= HttpSession->Superv
  287. Endif
  288. Endif
  289. cVendLogin := u_GetUsrPR()
  290. cCodLogin := U_SetParPR(cVendLogin)
  291. //Retorna o HTML para construção da página
  292. cHtml := u_fFilVend(cVendLogin,cFilFiltro)
  293. Web Extended End
  294. Return (cHTML)
  295. User Function fFilVend(cCodVend,cFilFiltro)
  296. Local cRet:= ""
  297. Local aFiliais:= {}
  298. Local i:= 0
  299. aFiliais := FWAllFilial()
  300. For i:= 1 to Len(aFiliais)
  301. aFilAtu:= FWArrFilAtu(cEmpAnt,aFiliais[i])
  302. cRet+= ' <option value="'+Alltrim(aFilAtu[2])+'" '+Iif(Alltrim(aFilAtu[2])= cFilFiltro,' selected ','')+'>'+aFilAtu[2]+" - "+OemtoAnsi(Alltrim(aFilAtu[7]))+'</option>'
  303. Next
  304. Return cRet
  305. /*__________________________________________________________________________
  306. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  307. ¦¦+-----------------------------------------------------------------------+¦¦
  308. ¦¦¦Funçäo ¦ TrocaFil ¦ Autor ¦ Lucilene Mendes ¦ Data ¦30.07.19 ¦¦¦
  309. ¦¦+----------+------------------------------------------------------------¦¦¦
  310. ¦¦¦Descriçäo ¦ Altera a filial logada ¦¦¦
  311. ¦¦+-----------------------------------------------------------------------+¦¦
  312. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  313. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  314. User Function TrocaFil()
  315. Local cHtml
  316. Local cRet := ""
  317. Private cSite := "u_PortalLogin.apw"
  318. Private cCodLogin := ""
  319. Private cVendLogin:= ""
  320. Web Extended Init cHtml Start U_inSite()
  321. // TODO - Pedro 20210208 - Remover???
  322. If Empty(HttpSession->CodVend)
  323. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  324. Return cHtml
  325. Else
  326. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  327. HttpSession->CodVend:= HttpSession->Superv
  328. Endif
  329. Endif
  330. cVendLogin := u_GetUsrPR()
  331. cCodLogin := U_SetParPR(cVendLogin)
  332. //Altera a empresa para a filial de faturamento
  333. nRecSA3:= SA3->(Recno())
  334. If cFilAnt <> HttpPost->Filial
  335. HttpSession->Filial:= HttpPost->Filial //CEMPANT+CFILANT+CEMPFIL
  336. u_InSite(.f.)
  337. Endif
  338. //Posiciona na SA3 novamente, pois ao trocar a filial fecha a tabela
  339. dbSelectArea("SA3")
  340. SA3->(dbGoTo(nRecSA3))
  341. If cFilAnt == HttpPost->Filial
  342. cRet := cFilAnt
  343. Endif
  344. //Retorna o HTML para construção da página
  345. cHtml := cRet
  346. Web Extended End
  347. Return (cHTML)
  348. /*__________________________________________________________________________
  349. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  350. ¦¦+-----------------------------------------------------------------------+¦¦
  351. ¦¦¦Funçäo ¦ getPerda ¦ Autor ¦ Lucilene Mendes ¦ Data ¦24.08.24 ¦¦¦
  352. ¦¦+----------+------------------------------------------------------------¦¦¦
  353. ¦¦¦Descriçäo ¦ Retorna lista de select com os motivos de perda ¦¦¦
  354. ¦¦+-----------------------------------------------------------------------+¦¦
  355. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  356. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  357. User Function getPerda(cOpcSel)
  358. Local cLista:= ""
  359. cQry:= " Select Z4_CODIGO, Z4_DESCRI, Z4_CONC "
  360. cQry+= " From "+RetSqlName("SZ4")+" SZ4 "
  361. cQry+= " Where Z4_FILIAL = '"+xFilial("SZ4")+"' "
  362. cQry+= " And SZ4.D_E_L_E_T_ = ' ' "
  363. APWExOpenQuery(ChangeQuery(cQry),'QRPE',.T.)
  364. cLista+=' <option value=""></option>'
  365. While QRPE->(!Eof())
  366. 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>'
  367. QRPE->(dbSkip())
  368. End
  369. QRPE->(dbCloseArea())
  370. Return cLista
  371. /*__________________________________________________________________________
  372. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  373. ¦¦+-----------------------------------------------------------------------+¦¦
  374. ¦¦¦Funçäo ¦ getConcor ¦ Autor ¦ Lucilene Mendes ¦ Data ¦24.08.24 ¦¦¦
  375. ¦¦+----------+------------------------------------------------------------¦¦¦
  376. ¦¦¦Descriçäo ¦ Retorna lista de select com os concorrentes ¦¦¦
  377. ¦¦+-----------------------------------------------------------------------+¦¦
  378. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  379. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  380. User Function getConcor(cOpcSel)
  381. Local cLista:= ""
  382. cQry:= " Select Z21_COD "
  383. cQry+= " From "+RetSqlName("Z21")+" Z21 "
  384. cQry+= " Where Z21_FILIAL = '"+xFilial("Z21")+"' "
  385. cQry+= " And Z21.D_E_L_E_T_ = ' ' "
  386. APWExOpenQuery(ChangeQuery(cQry),'QRCO',.T.)
  387. cLista+=' <option value=""></option>'
  388. While QRCO->(!Eof())
  389. cLista+=' <option value="'+QRCO->Z21_COD+'"'+Iif(Alltrim(QRCO->Z21_COD) == AllTrim(cOpcSel),'selected','')+'>'+Alltrim(QRCO->Z21_COD)+'</option>'
  390. QRCO->(dbSkip())
  391. End
  392. QRCO->(dbCloseArea())
  393. Return cLista
  394. /*__________________________________________________________________________
  395. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  396. ¦¦+-----------------------------------------------------------------------+¦¦
  397. ¦¦¦Funçäo ¦ GeraEfetiva ¦ Autor ¦ Lucilene Mendes ¦ Data ¦11.01.25 ¦¦¦
  398. ¦¦+----------+------------------------------------------------------------¦¦¦
  399. ¦¦¦Descriçäo ¦ Gera efetivação para o orçamento ¦¦¦
  400. ¦¦+-----------------------------------------------------------------------+¦¦
  401. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  402. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  403. User Function GeraEfetiva()
  404. Local cHtml
  405. Local cRet := ""
  406. Local cDirErro := "\erro\"
  407. Local nRecSCJ := Val(HttpPost->recorc)
  408. Local aCabec := {}
  409. Local aLinha := {}
  410. Local aItens := {}
  411. Private cSite := "u_PortalLogin.apw"
  412. Private cCodLogin := ""
  413. Private cVendLogin:= ""
  414. Private lMsErroAuto := .F.
  415. Web Extended Init cHtml Start U_inSite()
  416. If Empty(HttpSession->CodVend)
  417. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  418. Return cHtml
  419. Endif
  420. cVendLogin := u_GetUsrPR()
  421. cCodLogin := U_SetParPR(cVendLogin)
  422. //Posiciona no orçamento
  423. dbSelectArea("SCJ")
  424. SCJ->(dbGoTo(nRecSCJ))
  425. If cFilAnt <> SCJ->CJ_FILIAL
  426. u_PtTrocaFil(SCJ->CJ_FILIAL)
  427. Endif
  428. aAdd(aCabec,{"CJ_NUM" , SCJ->CJ_NUM ,Nil})
  429. aAdd(aCabec,{"CJ_CLIENTE", SCJ->CJ_CLIENTE ,Nil})
  430. aAdd(aCabec,{"CJ_LOJACLI", SCJ->CJ_LOJA ,Nil})
  431. aAdd(aCabec,{"CJ_CONDPAG", SCJ->CJ_CONDPAG ,Nil})
  432. SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
  433. While SCK->(!Eof()) .and. SCK->CK_FILIAL = SCJ->CJ_FILIAL .and. SCK->CK_NUM = SCJ->CJ_NUM
  434. aLinha := {}
  435. aAdd(aLinha,{"CK_ITEM" , SCK->CK_ITEM ,Nil})
  436. aAdd(aLinha,{"CK_PRODUTO", SCK->CK_PRODUTO ,Nil})
  437. aAdd(aLinha,{"CK_QTDVEN" , SCK->CK_QTDVEN ,Nil})
  438. aAdd(aLinha,{"CK_PRCVEN" , SCK->CK_PRCVEN ,Nil})
  439. //aAdd(aLinha,{"CK_PRUNIT" , SCK->CK_PRUNIT ,Nil})
  440. aAdd(aLinha,{"CK_VALOR" , SCK->CK_VALOR ,Nil})
  441. aAdd(aLinha,{"CK_TES" , SCK->CK_TES ,Nil})
  442. aAdd(aItens,aLinha)
  443. SCK->(dbSkip())
  444. End
  445. MATA416(aCabec,aItens)
  446. If lMsErroAuto
  447. If !ExistDir(cDirErro)
  448. MakeDir(cDirErro)
  449. Endif
  450. cDirErro+=dtos(date())
  451. If !ExistDir(cDirErro)
  452. MakeDir(cDirErro)
  453. Endif
  454. cErro:= Mostraerro(cDirErro,"aprovacao_orcamento_erro_"+SCJ->CJ_FILIAL+SCJ->CJ_NUM+"_"+strtran(time(),":","")+".txt")
  455. cRet:= "Erro ao efetivar o orçamento!"
  456. Conout(cRet)
  457. cDestMail:= GetNewPar("PR_DESTORE ","lucilene@smsti.com.br")
  458. u_MailCM("ERRO ORCAMENTO",{cDestMail},{},"ERRO EFETIVAÇÃO ORCAMENTO",cErro,"","")
  459. Else
  460. SCJ->(dbGoTo(nRecSCJ))
  461. SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
  462. cRet:= "Orçamento efetivado com sucesso! Gerado o pedido "+SCK->CK_NUMPV+"."
  463. Endif
  464. cHtml := u_FormEntities(cRet)
  465. Web Extended End
  466. Return (cHTML)
  467. /*__________________________________________________________________________
  468. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  469. ¦¦+-----------------------------------------------------------------------+¦¦
  470. ¦¦¦Funçäo ¦ GeraCancela ¦ Autor ¦ Lucilene Mendes ¦ Data ¦11.01.25 ¦¦¦
  471. ¦¦+----------+------------------------------------------------------------¦¦¦
  472. ¦¦¦Descriçäo ¦ Gera cancelamento do orçamento ¦¦¦
  473. ¦¦+-----------------------------------------------------------------------+¦¦
  474. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  475. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  476. User Function GeraCancela()
  477. Local cHtml
  478. Local nRecSCJ := Val(HttpPost->recorc)
  479. Local cCodPerda := Val(HttpPost->codperda)
  480. Local cConcorr := Val(HttpPost->concorrente)
  481. Private cSite := "u_PortalLogin.apw"
  482. Private cCodLogin := ""
  483. Private cVendLogin:= ""
  484. Web Extended Init cHtml Start U_inSite()
  485. If Empty(HttpSession->CodVend)
  486. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  487. Return cHtml
  488. Endif
  489. cVendLogin := u_GetUsrPR()
  490. cCodLogin := U_SetParPR(cVendLogin)
  491. //Posiciona no orçamento
  492. dbSelectArea("SCJ")
  493. SCJ->(dbGoTo(nRecSCJ))
  494. conout("###**")
  495. CONOUT(NRECSCJ)
  496. If cFilAnt <> SCJ->CJ_FILIAL
  497. u_PtTrocaFil(SCJ->CJ_FILIAL)
  498. Endif
  499. SCJ->(dbGoTo(nRecSCJ))
  500. Reclock("SCJ",.F.)
  501. SCJ->CJ_CODPERD:= Substr(cCodPerda,2)
  502. SCJ->CJ_CDCONCO:= cConcorr
  503. SCJ->CJ_DTCANC:= dDataBase
  504. SCJ->CJ_STATUS:= 'C'
  505. msUnlock()
  506. cHtml := "OK"
  507. Web Extended End
  508. Return (cHTML)