Comissoes.apl 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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 ¦ Comissoes ¦ Autor ¦ Lucilene Mendes ¦ Data ¦24.02.20 ¦¦¦
  10. ¦¦+----------+------------------------------------------------------------¦¦¦
  11. ¦¦¦Descriçäo ¦ Grid com as comissoes do vendedor. ¦¦¦
  12. ¦¦+-----------------------------------------------------------------------+¦¦
  13. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  14. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  15. User Function Comissoes()
  16. Local cHtml
  17. //Local cFiltro := ""
  18. Local cDataDe := ""
  19. Local cDataAte := ""
  20. Local cVendedor := ""
  21. Local nValTit := 0
  22. Local nTotalCom := 0
  23. Local v := 0
  24. Private cColunas:= ""
  25. Private cItens := ""
  26. Private cTopo := ""
  27. Private cSite := "u_PortalLogin.apw"
  28. Private cPagina := "Comissões"
  29. Private cTitle := ""
  30. Private lTableTools:= .T.
  31. Private lSidebar:= .T.
  32. Private cCodLogin := ""
  33. Private cVendLogin:= ""
  34. Web Extended Init cHtml Start U_inSite()
  35. cVendLogin := u_GetUsrPR()
  36. cCodLogin := U_SetParPR(cVendLogin)
  37. // TODO - Pedro 20210208 - Remover???
  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. // Pega do parâmetro com o Titulo do Portal
  47. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  48. // Define a funcao a ser chama no link
  49. cSite := "u_SMSPortal.apw?PR="+cCodLogin
  50. // Monta o cabeçalho para a pagina
  51. cHeader := U_PSHeader(cTitle, cSite)
  52. //Função que atualiza os menus
  53. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  54. //Tratamento dos filtros
  55. If type("HttpPost->DataDe") <> "U"
  56. //Se vazio, usa as datas padrão para evitar erro na query
  57. If Empty(HttpPost->DataDe) .or. Empty(HttpPost->DataAte)
  58. cDataDe:= dtos(FirstDay(date()))
  59. cDataAte:= dtos(LastDay(date()))
  60. Else
  61. cDataDe:= dtos(ctod(HttpPost->DataDe))
  62. cDataAte:= dtos(ctod(HttpPost->DataAte))
  63. Endif
  64. //Atualiza as variáveis no valor do filtro
  65. cFiltDe:= dtoc(stod(cDataDe))
  66. cFilAte:= dtoc(stod(cDataAte))
  67. cVendedor:= HttpPost->vendedor
  68. Else
  69. //Variáveis dos input dos filtros
  70. cFiltDe:= dtoc(FirstDay(date()))
  71. cFilAte:= dtoc(LastDay(date()))
  72. //Variáveis de filtro da query
  73. cDataDe:= dtos(FirstDay(date()))
  74. cDataAte:= dtos(LastDay(date()))
  75. //cFiltro:= '1' //1=Pagas, 2=Vencto
  76. Endif
  77. //Filtros
  78. cTopo:= '<div class="row form-group">'
  79. cTopo+= ' <div class="col-sm-12">'
  80. cTopo+= ' <form name="formGrid" id="formGrid" method="POST" action="U_Comissoes.apw?PR='+cCodLogin+'">'
  81. cTopo+= ' <label class="col-md-1 control-label">De:</label>'
  82. cTopo+= ' <div class="col-md-3">'
  83. cTopo+= ' <div class="input-group">'
  84. cTopo+= ' <span class="input-group-addon">'
  85. cTopo+= ' <i class="fa fa-calendar"></i>'
  86. cTopo+= ' </span>'
  87. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  88. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFiltDe+'" '
  89. cTopo+= ' placeholder="__/__/____" id="datade" name="datade" class="form-control only-numbers" type="text"></input>'
  90. cTopo+= ' </div>'
  91. cTopo+= ' </div>'
  92. cTopo+= ' <label class="col-md-1 control-label">Até:</label>'
  93. cTopo+= ' <div class="col-md-3">'
  94. cTopo+= ' <div class="input-group">'
  95. cTopo+= ' <span class="input-group-addon">'
  96. cTopo+= ' <i class="fa fa-calendar"></i>'
  97. cTopo+= ' </span>'
  98. cTopo+= ' <input data-plugin-datepicker="" data-plugin-options='+"'"+'{"autoclose": "true", "language": "pt-BR",'
  99. cTopo+= ' "daysOfWeekDisabled": "","daysOfWeekHighlighted":"[0]"}'+"'"+' value="'+cFilAte+'" '
  100. cTopo+= ' placeholder="__/__/____" id="dataate" name="dataate" class="form-control only-numbers" type="text"></input>'
  101. cTopo+= ' </div>'
  102. cTopo+= ' </div>'
  103. //Supervisor habilita o campo de vendedores
  104. If HttpSession->Tipo = 'S'
  105. cTopo+= '<div class="row form-group">'
  106. cTopo+= ' <div class="col-lg-4">'
  107. //cTopo+= ' <label class="control-label">Representante</label>'
  108. cTopo+= ' <select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  109. cTopo+= '{ "placeholder": "Selecione um Representante", "allowClear": false }'+"'"+' name="vendedor" id="vendedor" value="'+cVendedor+'"'
  110. cTopo+= 'required="" aria-required="true"> '
  111. If !Empty(cVendedor)
  112. cTopo+= ' <option value="'+cVendedor+'" selected>'+cVendedor+' - '+Upper(Alltrim(Posicione("SA3",1,xFilial("SA3")+cVendedor,"A3_NOME")))+'</option>'
  113. Else
  114. cTopo+= ' <option value=""></option>'
  115. Endif
  116. aVends:= Separa(HttpSession->Representantes,"|")
  117. //Adiciona o supervisor
  118. If !Empty(HttpSession->Superv) .and. cVendedor <> HttpSession->Superv
  119. cTopo+=' <option value="'+Alltrim(HttpSession->CodVend)+'">'+Alltrim(HttpSession->CodVend)+' - '+HttpSession->Nome+'</option>'
  120. Endif
  121. For v:= 1 to Len(aVends)
  122. If Alltrim(Substr(aVends[v],1,At("-",aVends[v])-1)) <> cVendedor
  123. cTopo+=' <option value="'+Alltrim(Substr(aVends[v],1,At("-",aVends[v])-1))+'">'+aVends[v]+'</option>'
  124. Endif
  125. Next
  126. cTopo+= ' </select'
  127. cTopo+= ' </div>'
  128. cTopo+= '</div>'
  129. Endif
  130. cTopo+= ' <div class="col-md-2">'
  131. cTopo+= ' <button class="btn btn-primary" id="btFiltro" value="" onclick="this.value= '+"'"+'Aguarde...'+"'"+';this.disabled= '+"'"+'disabled'+"'"+';Filtro()" name="btFiltro">'
  132. cTopo+= ' <i class="fa fa-filter"></i> Filtrar</button>'
  133. cTopo+= ' </div>'
  134. // Buscar os Títulos
  135. cQry := " Select E3_FILIAL, E3_VEND, E3_PREFIXO, E3_NUM, E3_PARCELA, E3_TIPO, E3_CODCLI, E3_LOJA, A1_NREDUZ, E3_EMISSAO, "
  136. cQry += "E3_VENCTO, E1_BAIXA, E3_DATA, E3_PEDIDO, E1_VALOR, E3_BASE, E3_PORC, E3_COMIS, E1_NUM, E3_SERIE, E3_TIPO "
  137. cQry += "FROM "+RetSqlName("SE3")+" SE3 "
  138. cQry += " INNER JOIN "+ RetSqlName("SA1")+" SA1 ON A1_FILIAL = '"+xFilial("SA1")+"' And A1_COD = E3_CODCLI "
  139. cQry += " AND A1_LOJA = E3_LOJA And SA1.D_E_L_E_T_= ' ' "
  140. cQry += " Left Join "+ RetSqlName("SE1")+" SE1 ON E1_FILIAL = E3_FILIAL and E1_PREFIXO = E3_PREFIXO and E1_NUM = E3_NUM "
  141. cQry += " and E1_PARCELA = E3_PARCELA and E1_TIPO = E3_TIPO and SE1.D_E_L_E_T_ = ' ' "
  142. If HttpSession->Tipo = 'S' //Supervisor acessa todas as informações da sua equipe
  143. If !Empty(cVendedor)
  144. cQry+= " WHERE E3_VEND = '"+cVendedor+"' "
  145. Else
  146. cQry+= " WHERE E3_VEND in "+FormatIn(HttpSession->Equipe,"|")+" "
  147. Endif
  148. Else
  149. cQry+= " WHERE E3_VEND ='"+cVendLogin+ "' "
  150. Endif
  151. cQry += " AND E3_EMISSAO between '"+cDataDe+"' and '"+cDataAte+"' "
  152. cQry += " AND SE3.D_E_L_E_T_ = ' ' "
  153. cQry := ChangeQuery(cQry)
  154. If Select("QRY") > 0
  155. QRY->(dbCloseArea())
  156. Endif
  157. APWExOpenQuery(ChangeQuery(cQry),'QRY',.T.)
  158. TcSetField("QRY","E3_EMISSAO","D")
  159. TcSetField("QRY","E3_VENCTO","D")
  160. TcSetField("QRY","E1_BAIXA","D")
  161. TcSetField("QRY","E3_DATA","D")
  162. //Cabeçalho do grid
  163. cColunas+='<th>Filial</th>'
  164. cColunas+='<th>Número</th>'
  165. cColunas+='<th>Parcela</th>'
  166. cColunas+='<th>Tipo</th>'
  167. cColunas+='<th>Cliente</th>'
  168. cColunas+='<th>Pedido</th>'
  169. cColunas+='<th>Vencimento</th>'
  170. cColunas+='<th>Baixa</th>'
  171. cColunas+='<th>Valor</th>'
  172. cColunas+='<th>Valor Base</th>'
  173. cColunas+='<th>%</th>'
  174. cColunas+='<th>Comissão</th>'
  175. If HttpSession->Tipo = 'S' //Supervisor
  176. cColunas+='<th>Vendedor</th>'
  177. Endif
  178. While QRY->(!Eof())
  179. If QRY->E3_TIPO = 'NCC'
  180. nValTit:= Posicione("SF1",1,QRY->E3_FILIAL+QRY->E3_NUM+QRY->E3_PREFIXO+QRY->E3_CODCLI+QRY->E3_LOJA,"F1_VALBRUT") * -1
  181. Elseif Empty(QRY->E1_NUM)
  182. nValTit:= Posicione("SF2",1,QRY->E3_FILIAL+QRY->E3_NUM+QRY->E3_SERIE+QRY->E3_CODCLI+QRY->E3_LOJA,"F2_VALFAT")
  183. Else
  184. nValTit:= QRY->E1_VALOR
  185. Endif
  186. cItens+='<tr role="button" onclick="window.document.location='+"'#'"+';">'
  187. cItens+=' <td>'+QRY->E3_FILIAL+'</td>'
  188. cItens+=' <td>'+trim(QRY->E3_PREFIXO)+'/'+QRY->E3_NUM+'</td>'
  189. cItens+=' <td>'+QRY->E3_PARCELA+'</td>'
  190. cItens+=' <td>'+QRY->E3_TIPO+'</td>'
  191. cItens+=' <td>'+QRY->E3_CODCLI+"/"+E3_LOJA+" - "+Alltrim(QRY->A1_NREDUZ)+'</td>'
  192. cItens+=' <td>'+QRY->E3_PEDIDO+'</td>'
  193. cItens+=' <td data-order="'+Iif(QRY->E3_TIPO = 'NCC','',dtos(QRY->E3_VENCTO))+'">'+DTOC(Iif(QRY->E3_TIPO = 'NCC',STOD(''),QRY->E3_VENCTO))+'</td>'
  194. cItens+=' <td data-order="'+dtos(QRY->E1_BAIXA)+'">'+DTOC(QRY->E1_BAIXA)+'</td>'
  195. cItens+=' <td>'+TransForm(nValTit,"@E 999,999,999.99")+'</td>'
  196. cItens+=' <td>'+TransForm(QRY->E3_BASE,"@E 999,999,999.99")+'</td>'
  197. cItens+=' <td>'+TransForm(QRY->E3_PORC,"@E 999.99")+'</td>'
  198. cItens+=' <td>'+TransForm(QRY->E3_COMIS,"@E 999,999,999.99")+'</td>'
  199. If HttpSession->Tipo = 'S' //Supervisor
  200. cItens+=' <td>'+QRY->E3_VEND+' - '+Posicione("SA3",1,xFilial("SA3")+QRY->E3_VEND,"A3_NREDUZ")+'</td>'
  201. Endif
  202. cItens+='</tr>'
  203. nTotalCom+= QRY->E3_COMIS
  204. QRY->(dbSkip())
  205. End
  206. cTopo+= ' <br><br><br>'
  207. cTopo+= ' <h3>'
  208. cTopo+= ' <label class="col-lg-6 control-label text-left">Total de Comissões: R$'+TransForm(nTotalCom,"@E 999,999,999.99")+'</label>'
  209. cTopo+= ' </h3>'
  210. cTopo+= ' </form>'
  211. cTopo+= ' </div>'
  212. cTopo+= '</div>'
  213. //Retorna o HTML para construção da página
  214. cHtml := H_SMSGrid()
  215. Web Extended End
  216. Return (cHTML)