SMSPortal.apl 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857
  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 ¦ SMSPortal ¦ Autor ¦ Lucilene Mendes ¦ Data ¦22.08.16 ¦¦¦
  11. ¦¦+----------+------------------------------------------------------------¦¦¦
  12. ¦¦¦Descriçäo ¦ Tela inicial do portal. ¦¦¦
  13. ¦¦+-----------------------------------------------------------------------+¦¦
  14. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  15. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  16. User Function SMSPortal(cVendLogin)
  17. Local cHtml
  18. Local cMeta := ""
  19. //Local cAtingido := ""
  20. Local cFalta := ""
  21. Local aWidGet := {}
  22. Local nW := 0
  23. Local nTotValor := 0
  24. Local nTotQtd := 0
  25. Local nMeta := 0
  26. Local nItem := 1
  27. Private cColunas := ""
  28. Private cItens := ""
  29. Private cSite := "u_PortalLogin.apw"
  30. Private cPagina := ""
  31. Private cMenus := ""
  32. Private cTitle := "Portal SMS"
  33. Private cWidgets := ""
  34. Private cWidgets2 := ""
  35. Private cWidMeta := ""
  36. Private cTopo := ""
  37. Private cCodVend := ""
  38. Private cDataDe := ""
  39. Private cDataAte := ""
  40. Private cVndFlt := ""
  41. Private cMetaLj := ""
  42. Private cAtingidoLj := ""
  43. Private CVLRLJATINGIDO := ""
  44. Private cAtingido := ""
  45. Private cMVendas := ""
  46. Private cVSegmto := ""
  47. Private cCodLogin := ""
  48. Default cVendLogin:= ""
  49. Web Extended Init cHtml Start U_inSite(empty(cVendLogin))
  50. if empty(cVendLogin)
  51. cVendLogin := u_GetUsrPR()
  52. endif
  53. cCodVend := cVendLogin
  54. cCodLogin := U_SetParPR(cCodVend)
  55. If Empty(HttpSession->CodVend)
  56. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  57. Return cHtml
  58. Else
  59. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  60. HttpSession->CodVend:= HttpSession->Superv
  61. Endif
  62. Endif
  63. // Pega do parâmetro com o Titulo do Portal
  64. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  65. // Define a funcao a ser chama no link
  66. cSite := Procname()+".apw?PR="+cCodLogin
  67. //Função que atualiza os menus
  68. HttpSession->aMenu:= {}
  69. cMenus := u_GetMenus(AllTrim(Upper(Procname())), cCodVend)
  70. //Tratamento dos filtros
  71. If type("HttpPost->DataDe") <> "U"
  72. //Se vazio, usa as datas padrão para evitar erro na query
  73. If Empty(HttpPost->DataDe) .or. Empty(HttpPost->DataAte)
  74. cDataDe:= dtos(FirstDay(date()))
  75. cDataAte:= dtos(LastDay(date()))
  76. Else
  77. cDataDe:= dtos(ctod(HttpPost->DataDe))
  78. cDataAte:= dtos(ctod(HttpPost->DataAte))
  79. Endif
  80. //Atualiza as variáveis no valor do filtro
  81. cFiltDe:= dtoc(stod(cDataDe))
  82. cFilAte:= dtoc(stod(cDataAte))
  83. cVndFlt:= Iif(!Empty(HttpPost->VenFiltro),HttpPost->VenFiltro,"")
  84. Else
  85. //Variáveis dos input dos filtros
  86. cFiltDe:= dtoc(FirstDay(date()))
  87. cFilAte:= dtoc(LastDay(date()))
  88. //Variáveis de filtro da query
  89. cDataDe:= dtos(FirstDay(date()))
  90. cDataAte:= dtos(LastDay(date()))
  91. Endif
  92. //Filtro período
  93. cTopo:= '<div class="row form-group">'
  94. cTopo+= ' <div class="col-sm-12">'
  95. cTopo+= ' <form name="formGrid" id="formGrid" method="POST" action="'+procname()+'.apw?PR='+cCodLogin+'">'
  96. cTopo+= ' <label class="col-md-1 control-label">De:</label>'
  97. cTopo+= ' <div class="col-md-3">'
  98. cTopo+= ' <div class="input-group">'
  99. cTopo+= ' <span class="input-group-addon">'
  100. cTopo+= ' <i class="fa fa-calendar"></i>'
  101. cTopo+= ' </span>'
  102. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  103. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFiltDe+'" '
  104. cTopo+= ' placeholder="__/__/____" id="datade" name="datade" class="form-control only-numbers" type="text"></input>'
  105. cTopo+= ' </div>'
  106. cTopo+= ' </div>'
  107. cTopo+= ' <label class="col-md-1 control-label">Até:</label>'
  108. cTopo+= ' <div class="col-md-3">'
  109. cTopo+= ' <div class="input-group">'
  110. cTopo+= ' <span class="input-group-addon">'
  111. cTopo+= ' <i class="fa fa-calendar"></i>'
  112. cTopo+= ' </span>'
  113. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  114. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFilAte+'" '
  115. cTopo+= ' placeholder="__/__/____" id="dataate" name="dataate" class="form-control only-numbers" type="text"></input>'
  116. cTopo+= ' </div>'
  117. cTopo+= ' </div>'
  118. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  119. cTopo+= ' <label class="col-md-1 control-label">Repr.:</label>'
  120. cTopo+= ' <div class="col-md-3">'
  121. cTopo+= ' <select data-plugin-selectTwo class="form-control populate mb-md" name="VENFILTRO" id="VENFILTRO" '
  122. cTopo+= ' required="" aria-required="true">'
  123. cTopo+= ' <option value=" ">Todos</option>'
  124. cTopo+= u_fEqpSup(cVndFlt)
  125. cTopo+= ' </select>'
  126. cTopo+= ' </div>'
  127. Endif
  128. //cTopo+= '<div><br><br></div>'
  129. cTopo+= ' <div class="col-sm-2">'
  130. cTopo+= ' <button class="btn btn-primary" id="btFiltroD" value="" onclick="this.value= '+"'"+'Aguarde...'+"'"+';this.disabled= '+"'"+'disabled'+"'"+';Filtro()" name="btFiltro">'
  131. cTopo+= ' <i class="fa fa-refresh"></i> Atualizar</button>'
  132. cTopo+= ' </div>'
  133. cTopo+= ' </form>'
  134. cTopo+= ' </div>'
  135. cTopo+= '</div>'
  136. // Recupera as rotinas que possuem WidGet
  137. aWidGet := HttpSession->aWidGet
  138. // Rotina para montar os Widgets
  139. For nW := 1 To Len(aWidGet)
  140. // Verificar se a função do WidGet está compilado no PRO
  141. If ExistBlock(aWidGet[nW,3])
  142. // Executa a função do WidGet
  143. aParam := aWidGet[nW]
  144. lGravou := ExecBlock(aWidGet[nW,3],.F.,.F.,aParam)
  145. EndIf
  146. Next
  147. //cWidgets+= wgOrcamentos()
  148. //Total de Orçamentos
  149. cQry:= "With QRY AS ( "
  150. cQry+= "SELECT COUNT(*) QTD, 0 VALOR, 0 MC "
  151. cQry+= "From A0_BI_DESEMPENHO_OPERACIONAL "
  152. cQry+= "Where REVISAO = 'OR' "
  153. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  154. If !Empty(cVndFlt)
  155. cQry+= " AND COD_VEND = '"+cVndFlt+"' "
  156. Else
  157. cQry+= " AND REGIAO = '"+HttpSession->Regional+"' "
  158. Endif
  159. Else
  160. cQry+= " AND COD_VEND = '"+cCodVend+"' "
  161. Endif
  162. cQry+= "AND EMISSAO between TO_DATE('"+cDataDe+"') and TO_DATE('"+cDataAte+"') "
  163. cQry+= "UNION ALL "
  164. cQry+= "Select 0 QTD, SUM(VALOR+IPI+ST) VALOR, SUM(VLR_MC) MC "
  165. cQry+= " From A0_BI_DESEMPENHO_OPERACIONAL "
  166. cQry+= "Where REVISAO = 'OR' "
  167. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  168. If !Empty(cVndFlt)
  169. cQry+= " AND COD_VEND = '"+cVndFlt+"' "
  170. Else
  171. cQry+= " AND REGIAO = '"+HttpSession->Regional+"' "
  172. Endif
  173. Else
  174. cQry+= " AND COD_VEND = '"+cCodVend+"' "
  175. Endif
  176. cQry+= "AND EMISSAO between TO_DATE('"+cDataDe+"') and TO_DATE('"+cDataAte+"') "
  177. cQry+= ") "
  178. cQry+= "SELECT SUM(QTD) QTD, SUM(VALOR) VALOR, SUM(MC) MC FROM QRY "
  179. // cQry:= "With QRY AS ( "
  180. // cQry+= "SELECT COUNT(*) QTD, 0 VALOR, 0 MC "
  181. // cQry+= "From "+RetSqlName("SCJ")+" SCJ "
  182. // cQry+= "Where CJ_REVISAO = ' ' "
  183. // If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  184. // If !Empty(cVndFlt)
  185. // cQry+= " AND CJ_VEND = '"+cVndFlt+"' "
  186. // Else
  187. // cQry+= " AND CJ_REGIAO = "+HttpSession->Regional+" "
  188. // Endif
  189. // Else
  190. // cQry+= " AND CJ_VEND = '"+cCodVend+"' "
  191. // Endif
  192. // cQry+= "AND CJ_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  193. // cQry+= "AND SCJ.D_E_L_E_T_ = ' ' "
  194. // cQry+= "UNION ALL "
  195. // cQry+= "Select 0 QTD, SUM(CK_VALOR)+SUM(CK_IPI)+SUM(CK_FRETE) VALOR, SUM(CK_MC) MC "
  196. // cQry+= " From "+RetSqlName("SCK")+" SCK "
  197. // cQry+= " INNER JOIN "+RetSqlName("SCJ")+" SCJ ON CJ_FILIAL = CK_FILIAL AND CJ_NUM = CK_NUM AND CJ_CLIENTE = CK_CLIENTE AND CJ_LOJA = CK_LOJA "
  198. // If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  199. // If !Empty(cVndFlt)
  200. // cQry+= " AND CJ_VEND = '"+cVndFlt+"' "
  201. // Else
  202. // cQry+= " AND CJ_REGIAO = '"+HttpSession->Regional+"' "
  203. // Endif
  204. // Else
  205. // cQry+= " AND CJ_VEND = '"+cCodVend+"' "
  206. // Endif
  207. // cQry+= " AND CJ_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  208. // cQry+= " AND CJ_REVISAO = ' ' "
  209. // cQry+= " AND SCJ.D_E_L_E_T_ = ' ' "
  210. // cQry+= " Where SCK.D_E_L_E_T_ = ' ' "
  211. // cQry+= ") "
  212. // cQry+= "SELECT SUM(QTD) QTD, SUM(VALOR) VALOR, SUM(MC) MC FROM QRY "
  213. If Select("QTO") > 0
  214. QTO->(dbCloseArea())
  215. Endif
  216. APWExOpenQuery(cQry,'QTO',.T.)
  217. conout("query orçamentos: "+cqry)
  218. cWidgets += U_GetWdGet(1, {"fa fa-calculator", "R$ "+Transform(QTO->VALOR,"@E 999,999,999,999.99"), "Orçamentos", cvaltochar(QTO->QTD)+" orçamento"+Iif(QTO->QTD>1,"s","")})
  219. //Total de Orçamentos cancelados
  220. cQry:= "With QRY AS ( "
  221. cQry+= "SELECT COUNT(*) QTD, 0 VALOR "
  222. cQry+= "From "+RetSqlName("SCJ")+" SCJ "
  223. cQry+= "Where CJ_STATUS = 'C' "
  224. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  225. If !Empty(cVndFlt)
  226. cQry+= " AND CJ_VEND = '"+cVndFlt+"' "
  227. Else
  228. cQry+= " AND CJ_REGIAO = "+HttpSession->Regional+" "
  229. Endif
  230. Else
  231. cQry+= " AND CJ_VEND = '"+cCodVend+"' "
  232. Endif
  233. cQry+= "AND CJ_DTCANC between '"+cDataDe+"' and '"+cDataAte+"' "
  234. cQry+= "AND CJ_CODPERD IN "+FormatIn(GetNewPar("PS_CODPER","500006,500007,500008,500010,500011,500012,500013,500014"),",")+" "
  235. cQry+= "AND SCJ.D_E_L_E_T_ = ' ' "
  236. cQry+= "UNION ALL "
  237. cQry+= "Select 0 QTD, SUM(CK_VALOR) VALOR "
  238. cQry+= " From "+RetSqlName("SCK")+" SCK "
  239. cQry+= " INNER JOIN "+RetSqlName("SCJ")+" SCJ ON CJ_FILIAL = CK_FILIAL AND CJ_NUM = CK_NUM AND CJ_CLIENTE = CK_CLIENTE AND CJ_LOJA = CK_LOJA "
  240. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  241. If !Empty(cVndFlt)
  242. cQry+= " AND CJ_VEND = '"+cVndFlt+"' "
  243. Else
  244. cQry+= " AND CJ_REGIAO = '"+HttpSession->Regional+"' "
  245. Endif
  246. Else
  247. cQry+= " AND CJ_VEND = '"+cCodVend+"' "
  248. Endif
  249. cQry+= " AND CJ_STATUS = 'C' "
  250. cQry+= " AND CJ_DTCANC between '"+cDataDe+"' and '"+cDataAte+"' "
  251. cQry+= " AND CJ_CODPERD IN "+FormatIn(GetNewPar("PS_CODPER","500006,500007,500008,500010,500011,500012,500013,500014"),",")+" "
  252. cQry+= " AND SCJ.D_E_L_E_T_ = ' ' "
  253. cQry+= " Where SCK.D_E_L_E_T_ = ' ' "
  254. cQry+= ") "
  255. cQry+= "SELECT SUM(QTD) QTD, SUM(VALOR) VALOR FROM QRY "
  256. If Select("QTX") > 0
  257. QTX->(dbCloseArea())
  258. Endif
  259. APWExOpenQuery(cQry,'QTX',.T.)
  260. conout("query orçamentos cancelados: "+cqry)
  261. //Total de Orçamentos Efetivados
  262. cQry:= "With QRY AS ( "
  263. cQry+= "SELECT COUNT(*) QTD, 0 VALOR, 0 IPI, 0 MC "
  264. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  265. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  266. cQry+= "Where C5_FILIAL = '01' "
  267. cQry+= "AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  268. cQry+= "AND C5_XREEMIS <> 'S' "
  269. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  270. If !Empty(cVndFlt)
  271. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  272. Else
  273. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  274. Endif
  275. Else
  276. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  277. Endif
  278. cQry+= "AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  279. cQry+= "AND EXISTS (SELECT C6_NUMORC FROM "+RetSqlName("SC6")+" SC6 WHERE C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM "
  280. cQry+= " AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND C6_NUMORC <> ' ' AND SC6.D_E_L_E_T_ = ' ') "
  281. cQry+= "AND SC5.D_E_L_E_T_ = ' ' "
  282. cQry+= "UNION ALL "
  283. cQry+= "Select 0 QTD, SUM(C6_VALOR) VALOR, SUM(C6_IPI) IPI, SUM(C6_MC) "
  284. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  285. cQry+= "INNER JOIN "+RetSqlName("SC6")+" SC6 ON C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND C6_NUMORC <> ' 'AND SC6.D_E_L_E_T_ = ' ' "
  286. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  287. cQry+= "Where C5_FILIAL = '01' "
  288. cQry+= "AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  289. cQry+= "AND C5_XREEMIS <> 'S' "
  290. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  291. If !Empty(cVndFlt)
  292. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  293. Else
  294. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  295. Endif
  296. Else
  297. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  298. Endif
  299. cQry+= "AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  300. cQry+= "AND SC5.D_E_L_E_T_ = ' ' "
  301. cQry+= ") "
  302. cQry+= "SELECT SUM(QTD) QTD, SUM(VALOR) VALOR, SUM(IPI) IPI, SUM(MC) MC FROM QRY "
  303. If Select("QTE") > 0
  304. QTE->(dbCloseArea())
  305. Endif
  306. APWExOpenQuery(cQry,'QTE',.T.)
  307. conout("query orçamentos efetivados: "+cqry)
  308. //Total de Pedidos
  309. cQry:= "With QRY AS ( "
  310. cQry+= "SELECT COUNT(*) QTD, 0 VALOR, 0 IPI, 0 ST, 0 FRETE, 0 MC "
  311. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  312. //cQry+= "INNER JOIN "+RetSqlName("SC6")+" SC6 ON C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND SC6.D_E_L_E_T_ = ' ' "
  313. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  314. cQry+= "Where C5_FILIAL = '01' "
  315. cQry+= "AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  316. cQry+= "AND C5_XREEMIS <> 'S' "
  317. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  318. If !Empty(cVndFlt)
  319. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  320. Else
  321. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  322. Endif
  323. Else
  324. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  325. Endif
  326. cQry+= "AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  327. cQry+= "AND SC5.D_E_L_E_T_ = ' ' "
  328. /*
  329. cQry+= "AND NOT EXISTS ( SELECT C6_PRODUTO FROM "+RetSqlName("SC6")+" SC6 "
  330. cQry+= " INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = C6_PRODUTO AND B1_GRUPO NOT IN "+FormatIn(GetNewPar("PS_GRPNMC","PAN"),",")+" AND SB1.D_E_L_E_T_ = ' ' "
  331. cQry+= " WHERE C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND SC6.D_E_L_E_T_ = ' ' ) "
  332. */
  333. cQry+= "AND SC5.D_E_L_E_T_ = ' ' "
  334. cQry+= "UNION ALL "
  335. cQry+= "Select 0 QTD, SUM(C6_VALOR) VALOR, SUM(C6_IPI) IPI, SUM(C6_ST) ST, SUM(C5_FRETE) FRETE, SUM(C6_MC) "
  336. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  337. cQry+= "INNER JOIN "+RetSqlName("SC6")+" SC6 ON C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND SC6.D_E_L_E_T_ = ' ' "
  338. cQry+= "INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = C6_PRODUTO AND B1_GRUPO NOT IN "+FormatIn(GetNewPar("PS_GRPNMC","PAN"),",")+" AND SB1.D_E_L_E_T_ = ' ' "
  339. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  340. cQry+= "Where C5_FILIAL = '01' "
  341. cQry+= "AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  342. cQry+= "AND C5_XREEMIS <> 'S' "
  343. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  344. If !Empty(cVndFlt)
  345. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  346. Else
  347. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  348. Endif
  349. Else
  350. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  351. Endif
  352. cQry+= "AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  353. cQry+= "AND SC5.D_E_L_E_T_ = ' ' "
  354. cQry+= ") "
  355. cQry+= "SELECT SUM(QTD) QTD, SUM(VALOR) VALOR, SUM(IPI) IPI, SUM(ST) ST, SUM(FRETE) FRETE, SUM(MC) MC FROM QRY "
  356. If Select("QTP") > 0
  357. QTP->(dbCloseArea())
  358. Endif
  359. APWExOpenQuery(cQry,'QTP',.T.)
  360. conout("query pedidos: "+cqry)
  361. //Venda por segmento
  362. //Orçamentos efetivados no período
  363. cQry:= "With QRY AS ( "
  364. cQry+= "SELECT COUNT(*) QTD, 0 VALOR, CJ_SEGMENT "
  365. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  366. cQry+= "INNER JOIN "+RetSqlName("SC6")+" SC6 ON C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND C6_NUMORC <> ' ' AND C6_ITEM = '01' AND SC6.D_E_L_E_T_ = ' ' "
  367. cQry+= "INNER JOIN "+RetSqlName("SCJ")+" SCJ ON CJ_NUM = SUBSTR(C6_NUMORC,1,6) AND SCJ.D_E_L_E_T_ = ' ' "
  368. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  369. cQry+= "Where C5_FILIAL = '01'"
  370. cQry+= " AND C5_TIPOLUM IN ('1','2','3')" //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  371. cQry+= " AND C5_XREEMIS <> 'S' "
  372. cQry+= " AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' AND SC5.D_E_L_E_T_ = ' ' "
  373. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  374. If !Empty(cVndFlt)
  375. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  376. Else
  377. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  378. Endif
  379. Else
  380. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  381. Endif
  382. cQry+= "GROUP BY CJ_SEGMENT "
  383. cQry+= "UNION ALL "
  384. cQry+= "Select 0 QTD, SUM(C6_VALOR)+SUM(C6_IPI)+SUM(C6_ST)+C5_FRETE VALOR, CJ_SEGMENT "
  385. cQry+= "From "+RetSqlName("SC5")+" SC5 "
  386. cQry+= "INNER JOIN "+RetSqlName("SC6")+" SC6 ON C6_FILIAL = C5_FILIAL AND C6_NUM = C5_NUM AND C6_CLI = C5_CLIENTE AND C6_LOJA = C5_LOJACLI AND C6_NUMORC <> ' ' AND SC6.D_E_L_E_T_ = ' ' "
  387. cQry+= "INNER JOIN "+RetSqlName("SCJ")+" SCJ ON CJ_NUM = SUBSTR(C6_NUMORC,1,6) AND SCJ.D_E_L_E_T_ = ' ' "
  388. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  389. cQry+= "Where C5_FILIAL = '01' "
  390. cQry+= " AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' AND SC5.D_E_L_E_T_ = ' ' "
  391. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  392. If !Empty(cVndFlt)
  393. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  394. Else
  395. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  396. Endif
  397. Else
  398. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  399. Endif
  400. cQry+= "GROUP BY CJ_SEGMENT, C5_FRETE "
  401. cQry+= ") SELECT CJ_SEGMENT, SUM(QTD) QTD, SUM(VALOR) VALOR FROM QRY "
  402. cQry+= "GROUP BY CJ_SEGMENT "
  403. If Select("QVS") > 0
  404. QVS->(dbCloseArea())
  405. Endif
  406. CONOUT("VENDA POR SEGMENTO "+cQry)
  407. APWExOpenQuery(cQry,'QVS',.T.)
  408. //Total de pedidos
  409. While QVS->(!EOF())
  410. nTotValor+= QVS->VALOR
  411. nTotQtd+= QVS->QTD
  412. QVS->(dbSkip())
  413. End
  414. cWidgets += U_GetWdGet(1, {"fa fa-dashboard", "R$ "+Transform(nTotValor,"@E 999,999,999,999.99"), "Pedidos", cvaltochar(nTotQtd)+" pedido"+Iif(nTotQtd>1,"s","")})
  415. //cWidgets += U_GetWdGet(1, {"fa fa-dashboard", "R$ "+Transform(QTP->VALOR+QTP->IPI+QTP->ST,"@E 999,999,999,999.99"), "Pedidos", cvaltochar(QTP->QTD)+" pedido"+Iif(QTP->QTD>1,"s","")})
  416. //Total Homologações
  417. cQry:= "SELECT COUNT(*) QTD "
  418. cQry+= "FROM "+RetSqlName("AD1")+" AD1 "
  419. cQry+= "WHERE AD1_FILIAL ='"+xFilial("AD1")+"' "//AD1_DATA between '"+cDataDe+"' and '"+cDataAte+"' "
  420. cQry+= "AND AD1_HOMOLO = '3' " //Status homologação = homologado
  421. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  422. If !Empty(cVndFlt)
  423. cQry+= " AND AD1_VEND = '"+cVndFlt+"' "
  424. Else
  425. cQry+= " AND AD1_REGION = '"+HttpSession->Regional+"' "
  426. Endif
  427. Else
  428. cQry+= " AND AD1_VEND = '"+cCodVend+"' "
  429. Endif
  430. cQry+= "AND AD1.D_E_L_E_T_ = ' ' "
  431. If Select("QTH") > 0
  432. QTH->(dbCloseArea())
  433. Endif
  434. APWExOpenQuery(cQry,'QTH',.T.)
  435. conout("query homologações: "+cqry)
  436. cWidgets += U_GetWdGet(1, {"fa fa-handshake-o", CVALTOCHAR(QTH->QTD), "Total Homologações", ""})
  437. //Total clientes
  438. If HttpSession->Tipo <> 'S'
  439. cQry:= "SELECT COUNT(*) QTD "
  440. cQry+= "FROM "+RetSqlName("SA1")+" SA1 "
  441. cQry+= "WHERE A1_MSBLQL <> '1' "
  442. cQry+= "AND A1_VEND = '"+cCodVend+"' "
  443. cQry+= "AND SA1.D_E_L_E_T_ = ' ' "
  444. If Select("QTC") > 0
  445. QTC->(dbCloseArea())
  446. Endif
  447. APWExOpenQuery(cQry,'QTC',.T.)
  448. conout("query clientes: "+cqry)
  449. cWidgets += U_GetWdGet(1, {"fa fa-users", CVALTOCHAR(QTC->QTD), "Total de Clientes",""})
  450. Endif
  451. //Margem de Contribuição
  452. //soma da Margem de Contribuição / soma do valor total dos pedidos sem IPI
  453. nMargem:= Round((QTP->MC /QTP->VALOR) * 100,2)
  454. //nMargem:= Round((QTP->MC /(QTP->VALOR-QTP->IPI)) * 100,2)
  455. cWidgets += U_GetWdGet(1, {"fa fa-percent", cvaltochar(nMargem)+"%", "Margem Contribuição", ""})
  456. //Taxa de conversão
  457. //orçamentos efetivados / (orçamentos cancelados + orçamento efetivados)
  458. nValConv:= Round(((QTE->VALOR+QTE->IPI) / (QTX->VALOR+QTE->VALOR+QTE->IPI)) * 100,2)
  459. CONOUT("QTE->VALOR "+CVALTOCHAR(QTE->VALOR+QTE->IPI))
  460. CONOUT("QTX->VALOR "+CVALTOCHAR(QTX->VALOR))
  461. CONOUT("SOMA "+CVALTOCHAR((QTX->VALOR+QTE->VALOR+QTE->IPI)))
  462. nNumConv:= Round((QTE->QTD / (QTX->QTD+QTE->QTD))*100,2)
  463. cWidgets += U_GetWdGet(1, {"fa fa-refresh", "Qtd: "+cvaltochar(nNumConv)+"%", "Taxa de Conversão", "Valor: "+cvaltochar(nValConv)+"%"})
  464. If HttpSession->Tipo <> "R" //Representante
  465. //Variáveis para o quadro de meta do vendedor
  466. cQry:= "Select SUM(CT_VALOR) VALOR "
  467. cQry+= " From "+RetSqlName("SCT")+" SCT "
  468. cQry+= " Where CT_DATA between '"+Left(cDataDe,6)+'01'+"' and '"+Left(cDataAte,6)+'01'+"' "
  469. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  470. If !Empty(cVndFlt)
  471. cQry+= " AND CT_VEND = '"+cVndFlt+"' "
  472. Else
  473. cQry+= " AND CT_VEND = "+HttpSession->Regional+" "
  474. Endif
  475. Else
  476. cQry+= " and CT_VEND = '"+cCodVend+"' "
  477. Endif
  478. cQry+= " And SCT.D_E_L_E_T_ = ' ' "
  479. If Select("QRM") > 0
  480. QRM->(dbCloseArea())
  481. Endif
  482. APWExOpenQuery(cQry,'QRM',.T.)
  483. nMeta:= QRM->VALOR
  484. cVlrAtingido:= Transform(QTO->VALOR,PesqPict("SCT","CT_VALOR"))
  485. cAtingido:= cValtoChar(Int((QTO->VALOR/nMeta) * 100)) //+ "%"
  486. cFalta:= cValtoChar(Iif(100 - val(cAtingido) < 0,0,100 - val(cAtingido))) //+"%"
  487. cMeta:= Transform(nMeta,PesqPict("SCT","CT_VALOR"))
  488. cWidMeta:='<div class="col-lg-4 text-center panel-body ">'
  489. cWidMeta+=' <h2 class="panel-title">Meta de Venda</h2>'
  490. cWidMeta+=' <h2 class="panel-title mt-sm">R$ '+cMeta+'</h2>'
  491. cWidMeta+=' <div class="liquid-meter-wrapper liquid-meter-sm mt-sm">'
  492. cWidMeta+=' <div class="liquid-meter">'
  493. cWidMeta+=' <meter min="0" max="100" value="'+cAtingido+'" id="meterSales"></meter>'
  494. cWidMeta+=' </div>'
  495. cWidMeta+=' <div class="liquid-meter-selector" id="meterSalesSel">'
  496. cWidMeta+=' <a href="#" data-val="'+cAtingido+'" class="active">Atingido</a>'
  497. cWidMeta+=' <a href="#" data-val="'+cFalta+'">Falta</a>'
  498. cWidMeta+=' </div>'
  499. cWidMeta+=' </div>'
  500. cWidMeta+='</div>'
  501. Endif
  502. // Produtos mais vendidos
  503. cQry:= "WITH QRY AS ( "
  504. cQry+= "Select C6_PRODUTO, C6_DESCRI, SUM(C6_QTDVEN) AS QTD, SUM(C6_VALOR)+SUM(C6_IPI)+SUM(C6_ST) VALOR " //+C5_FRETE
  505. cQry+= "From "+RetSqlName("SC6")+" SC6 "
  506. cQry+= "Inner Join "+RetSqlName("SC5")+" SC5 ON C5_FILIAL = C6_FILIAL AND C5_NUM = C6_NUM "
  507. cQry+= " AND C5_FILIAL = '01' "
  508. cQry+= " AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  509. cQry+= " AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' AND C5_XREEMIS <> 'S' And SC5.D_E_L_E_T_ = ' ' "
  510. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  511. If !Empty(cVndFlt)
  512. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  513. Else
  514. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  515. Endif
  516. Else
  517. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  518. Endif
  519. cQry+= "INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = C6_PRODUTO AND B1_TIPO IN "+FormatIn(GetNewPar("PS_TPMAISV","PA"),",")+" AND SB1.D_E_L_E_T_ = ' ' "
  520. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  521. cQry+= " Where SC6.D_E_L_E_T_ = ' ' "
  522. cQry+= "Group by C6_PRODUTO, C6_DESCRI, C5_FRETE "
  523. cQry+= "Order by SUM(C6_QTDVEN) DESC "
  524. cQry+= "Fetch first 10 rows only "
  525. cQry+= "), "
  526. cQry+= "QRY2 AS ( "
  527. cQry+= "Select C6_NUM, C6_PRODUTO, 1 AS QTDPED "
  528. cQry+= "From "+RetSqlName("SC6")+" SC6 "
  529. cQry+= "Inner Join "+RetSqlName("SC5")+" SC5 ON C5_FILIAL = C6_FILIAL AND C5_NUM = C6_NUM "
  530. cQry+= " AND C5_FILIAL = '01' "
  531. cQry+= " AND C5_TIPOLUM IN ('1','2','3') " //1.VENDA, 2.VENDA ORDEM, 3.FATURAMENTO ANTECIPADO. -->1=VND;2=V.ORD;3=S.FAT;4=RM.VOR;5=REM.FAT;6=IND;7=SUC;8=CONSER;9=GARAN;A=TRANSF;O=OTR;B=AMOS;C=BON;D=V.CONS;E=R.CONS;M=ZFM
  532. cQry+= " AND C5_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' AND C5_XREEMIS <> 'S' And SC5.D_E_L_E_T_ = ' ' "
  533. If HttpSession->Tipo = 'S' //Supervisor acessa informações da sua equipe
  534. If !Empty(cVndFlt)
  535. cQry+= " AND C5_VEND2 = '"+cVndFlt+"' "
  536. Else
  537. cQry+= " AND C5_VEND1 = '"+HttpSession->Regional+"' "
  538. Endif
  539. Else
  540. cQry+= " AND C5_VEND2 = '"+cCodVend+"' "
  541. Endif
  542. cQry+= "INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = C6_PRODUTO AND B1_TIPO IN "+FormatIn(GetNewPar("PS_TPMAISV","PA"),",")+" AND SB1.D_E_L_E_T_ = ' ' "
  543. cQry+= "INNER JOIN "+RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' AND A1_COD = C5_CLIENTE AND A1_LOJA = C5_LOJACLI AND A1_NOME NOT LIKE 'LUMICENTER%' AND SA1.D_E_L_E_T_ = ' ' "
  544. cQry+= " Where SC6.D_E_L_E_T_ = ' ' "
  545. cQry+= "Group by C6_NUM, C6_PRODUTO "
  546. cQry+= ") "
  547. cQry+= "SELECT QRY.*, SUM(QRY2.QTDPED) QTDPED FROM QRY, QRY2 "
  548. cQry+= "WHERE QRY.C6_PRODUTO = QRY2.C6_PRODUTO "
  549. cQry+= "GROUP BY QRY.C6_PRODUTO, QRY.C6_DESCRI, QTD, VALOR "
  550. cQry+= "ORDER BY QTD DESC "
  551. If Select("QTV") > 0
  552. QTV->(dbCloseArea())
  553. Endif
  554. APWExOpenQuery(cQry,'QTV',.T.)
  555. conout("query produtos mais vendidos: "+cqry)
  556. While QTV->(!Eof())
  557. cMVendas+= '<li>'
  558. cMVendas+= ' <figure class="image rounded">'
  559. cMVendas+= ' <span class="badge">'+cvaltochar(nItem++)+'</span>'
  560. //cMVendas+= ' <img src="/images/prod.jpg" alt="" class="img-circle">'
  561. cMVendas+= ' </figure>'
  562. cMVendas+= ' <div class="profile-info">'
  563. cMVendas+= ' <span class="title">'+QTV->C6_DESCRI+'</span>'
  564. cMVendas+= ' <span class="message truncate">'+cvaltochar(QTV->QTD)+Iif(QTV->QTD > 1,' unidades vendidas',' unidade vendida')+", "+cvaltochar(QTV->QTDPED)+Iif(QTV->QTDPED > 1,' pedidos',' pedido')+', valor R$'+Alltrim(Transform(QTV->VALOR,"@E 999,999,999,999.99"))+'</span>'
  565. cMVendas+= ' </div>'
  566. cMVendas+= '</li>'
  567. QTV->(dbSkip())
  568. End
  569. //Venda por segmento
  570. QVS->(dbGotop())
  571. nTotValor:= 0
  572. nTotQtd:= 0
  573. If QVS->(!Eof())
  574. While QVS->(!Eof())
  575. Do Case
  576. Case QVS->CJ_SEGMENT = "SUPERMERCADO"
  577. cIconeSeg:= "shopping-cart"
  578. Case QVS->CJ_SEGMENT = "INDUSTRIA"
  579. cIconeSeg:= "industry"
  580. Case QVS->CJ_SEGMENT = "REVENDA"
  581. cIconeSeg:= "shopping-basket"
  582. Case QVS->CJ_SEGMENT = "VAREJO/FRANQUIA"
  583. cIconeSeg:= "hospital-o"
  584. Case QVS->CJ_SEGMENT = "REDE/FRANQUIA"
  585. cIconeSeg:= "hospital-o"
  586. Case QVS->CJ_SEGMENT = "GERENCIADORA"
  587. cIconeSeg:= "bank"
  588. Case QVS->CJ_SEGMENT = "OUTROS"
  589. cIconeSeg:= "suitcase"
  590. Otherwise
  591. cIconeSeg:= "building-o"
  592. EndCase
  593. cVSegmto+= '<li>'
  594. cVSegmto+= ' <div>'
  595. cVSegmto+= ' <span class="title"><i class="fa fa-'+cIconeSeg+'"></i>&nbsp;'+QVS->CJ_SEGMENT+'</span>'
  596. cVSegmto+= ' <div class="text-primary text-right">'
  597. cVSegmto+= ' <span>R$ '+TRANSFORM(QVS->VALOR,"@E 999,999,999,999.99")+'</span>'
  598. cVSegmto+= ' </div>'
  599. cVSegmto+= ' <div class="message truncate text-right">'
  600. cVSegmto+= ' <span class="message truncate">'+cvaltochar(QVS->QTD)+Iif(QVS->QTD > 1,' pedidos',' pedido')+'</span>'
  601. cVSegmto+= ' </div>'
  602. cVSegmto+= ' </div>'
  603. cVSegmto+= '</li>'
  604. nTotValor+= QVS->VALOR
  605. nTotQtd+= QVS->QTD
  606. QVS->(dbSkip())
  607. End
  608. cVSegmto+= '<li>'
  609. cVSegmto+= ' <div>'
  610. cVSegmto+= ' <hr class="solid short mt-3">'
  611. cVSegmto+= ' <span class="title text-primary-bold text-weight-bold"><i class="fa fa-"></i>TOTAL</span>'
  612. cVSegmto+= ' <div class="text-primary text-right">'
  613. cVSegmto+= ' <span>R$ '+Alltrim(Transform(nTotValor,"@E 999,999,999,999,999.99"))+'</span>'
  614. cVSegmto+= ' </div>'
  615. cVSegmto+= ' <div class="message truncate text-right">'
  616. cVSegmto+= ' <span class="message truncate">'+cvaltochar(nTotQtd)+Iif(nTotQtd > 1,' pedidos','pedido')+'</span>'
  617. cVSegmto+= ' </div>'
  618. cVSegmto+= ' </div>'
  619. cVSegmto+= '</li>'
  620. Endif
  621. //Retorna o HTML para construção da página
  622. cHtml := H_SMSPortal()
  623. Web Extended End
  624. Return (cHTML)
  625. /*__________________________________________________________________________
  626. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  627. ¦¦+-----------------------------------------------------------------------+¦¦
  628. ¦¦¦Funçäo ¦ VerSessao ¦ Autor ¦ Lucilene Mendes ¦ Data ¦ 27.04.18 ¦¦¦
  629. ¦¦+----------+------------------------------------------------------------¦¦¦
  630. ¦¦¦Descriçäo ¦ Verifica se a sessão está ativa ¦¦¦
  631. ¦¦+-----------------------------------------------------------------------+¦¦
  632. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  633. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  634. */
  635. User Function VerSessao()
  636. Local cHtml:= "ok"
  637. Web Extended Init cHtml
  638. If Valtype(HttpSession->CodVend) <> "C"
  639. cHtml:= "nok"
  640. Endif
  641. Web Extended end
  642. Return cHtml
  643. /*__________________________________________________________________________
  644. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  645. ¦¦+-----------------------------------------------------------------------+¦¦
  646. ¦¦¦Funçäo ¦ WidGetPC ¦ Autor ¦ Anderson Zelenski ¦ Data ¦14.08.17 ¦¦¦
  647. ¦¦+----------+------------------------------------------------------------¦¦¦
  648. ¦¦¦Descriçäo ¦ PE para gerar o WidGet de Pedido de Compra para o Portal ¦¦¦
  649. ¦¦+-----------------------------------------------------------------------+¦¦
  650. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  651. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  652. User Function GetWdGet(nTipo, aParWid)
  653. Local cWidget := ""
  654. If nTipo == 1
  655. cWidget += '<div class="col-md-12 col-lg-6 col-xl-6">'
  656. cWidget += '<section class="panel panel-featured-left panel-featured-primary">'
  657. cWidget += '<div class="panel-body">'
  658. cWidget += '<div class="widget-summary">'
  659. cWidget += '<div class="widget-summary-col widget-summary-col-icon">'
  660. cWidget += '<div class="summary-icon bg-primary">'
  661. cWidget += '<i class="'+aParWid[1]+'"></i>'
  662. cWidget += '</div>'
  663. cWidget += '</div>'
  664. cWidget += '<div class="widget-summary-col">'
  665. cWidget += '<div class="summary">'
  666. cWidget += '<h4 class="title">'+aParWid[3]+'</h4>'
  667. cWidget += '<div class="info">'
  668. cWidget += '<strong class="amount" style="font-size: larger">'+aParWid[2]+'</strong>'
  669. cWidget += '<br>'
  670. cWidget += '<span class="text-primary">'+aParWid[4]+'</span>'
  671. cWidget += '</div>'
  672. cWidget += '</div>'
  673. /*
  674. cWidget += '<div class="summary-footer">'
  675. cWidget += '<a href="'+aParWid[5]+'" class="text-muted text-uppercase">(Visualizar)</a>'
  676. cWidget += '</div>'
  677. */
  678. cWidget += '</div>'
  679. cWidget += '</div>'
  680. cWidget += '</div>'
  681. cWidget += '</section>'
  682. cWidget += '</div>'
  683. EndIf
  684. Return cWidGet
  685. /*__________________________________________________________________________
  686. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  687. ¦¦+-----------------------------------------------------------------------+¦¦
  688. ¦¦¦Funçäo ¦ NoAcMI ¦ Autor ¦ Anderson Zelenski ¦ Data ¦23.08.17 ¦¦¦
  689. ¦¦+----------+------------------------------------------------------------¦¦¦
  690. ¦¦¦Descriçäo ¦ Função para tratar caracteres acentuados ¦¦¦
  691. ¦¦+-----------------------------------------------------------------------+¦¦
  692. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  693. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  694. User Function NoAcMI(cString)
  695. Local cChar := ""
  696. Local nX := 0
  697. Local nY := 0
  698. Local cVogal := "aeiouAEIOU"
  699. Local cAgudo := "áéíóú"+"ÁÉÍÓÚ"
  700. Local cCircu := "âêîôû"+"ÂÊÎÔÛ"
  701. Local cTrema := "äëïöü"+"ÄËÏÖÜ"
  702. Local cCrase := "àèìòù"+"ÀÈÌÒÙ"
  703. Local cTio := "ãõ"
  704. Local cCecid := "çÇ"
  705. Local cMaior := "&lt;"
  706. Local cMenor := "&gt;"
  707. For nX:= 1 To Len(cString)
  708. cChar:=SubStr(cString, nX, 1)
  709. IF cChar$cAgudo+cCircu+cTrema+cCecid+cTio+cCrase
  710. nY:= At(cChar,cAgudo)
  711. If nY > 0
  712. cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
  713. EndIf
  714. nY:= At(cChar,cCircu)
  715. If nY > 0
  716. cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
  717. EndIf
  718. nY:= At(cChar,cTrema)
  719. If nY > 0
  720. cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
  721. EndIf
  722. nY:= At(cChar,cCrase)
  723. If nY > 0
  724. cString := StrTran(cString,cChar,SubStr(cVogal,nY,1))
  725. EndIf
  726. nY:= At(cChar,cTio)
  727. If nY > 0
  728. cString := StrTran(cString,cChar,SubStr("ao",nY,1))
  729. EndIf
  730. nY:= At(cChar,cCecid)
  731. If nY > 0
  732. cString := StrTran(cString,cChar,SubStr("cC",nY,1))
  733. EndIf
  734. Endif
  735. Next
  736. If cMaior$ cString
  737. cString := strTran( cString, cMaior, "" )
  738. EndIf
  739. If cMenor$ cString
  740. cString := strTran( cString, cMenor, "" )
  741. EndIf
  742. For nX:=1 To Len(cString)
  743. cChar:=SubStr(cString, nX, 1)
  744. If Asc(cChar) < 32 .Or. Asc(cChar) > 123
  745. cString:=StrTran(cString,cChar,".")
  746. Endif
  747. Next nX
  748. Return cString
  749. /*__________________________________________________________________________
  750. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  751. ¦¦+---------------------------- ------------------------------------------+¦¦
  752. ¦¦¦Funçäo ¦ fEqpSup ¦ Autor ¦ Lucilene Mendes ¦ Data ¦03.11.22 ¦¦¦
  753. ¦¦+----------+------------------------------------------------------------¦¦¦
  754. ¦¦¦Descriçäo ¦ Retorna as opções do select com a equipe do supervisor ¦¦¦
  755. ¦¦+-----------------------------------------------------------------------+¦¦
  756. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  757. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  758. User Function fEqpSup(cVendFiltro)
  759. Local i:= 0
  760. Local cRet:= ""
  761. Local cVend:= ""
  762. Local aEquipe:= Separa(HttpSession->Equipe,"|")
  763. For i:= 1 to Len(aEquipe)
  764. cVend:= Upper(Posicione("SA3",1,xFilial("SA3")+aEquipe[i],"A3_NOME"))
  765. cRet+= ' <option value="'+Alltrim(aEquipe[i])+'" '+Iif(Alltrim(aEquipe[i])= cVendFiltro,' selected ','')+'>'+Alltrim(aEquipe[i])+" - "+cVend+'</option>'
  766. Next
  767. Return cRet