MntOrc.apl.bak 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173
  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 ¦ MntOrc ¦ Autor ¦ Lucilene Mendes ¦ Data ¦28.08.17 ¦¦¦
  11. ¦¦+----------+------------------------------------------------------------¦¦¦
  12. ¦¦¦Descriçäo ¦ Manutenção de Orçamento de Venda. ¦¦¦
  13. ¦¦+-----------------------------------------------------------------------+¦¦
  14. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  15. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  16. User Function MntOrc()
  17. Local cHtml
  18. Local cItem := ""
  19. Local nPosFrete := 0
  20. Local nPerCom := 0
  21. Local nValCom := 0
  22. Local nOpc := 0
  23. Local nLin := 0
  24. Local f := 0
  25. Local lMoeda := .F.
  26. Local lNumber := .F.
  27. Local lVencido := .F.
  28. Local aTpFrete := {}
  29. Local nRecSCJ := 0
  30. private cLisPar := ""
  31. private cParUs := GetMv('LC_FA074G1')
  32. Private cFilVen := ""
  33. Private cCodLogin := ""
  34. Private cVendLogin := ""
  35. Private cVendedor := ""
  36. Private cSite := "u_PortalLogin.apw"
  37. Private cPagina := "Orçamento de Venda"
  38. Private cTitle := "Portal SMS"
  39. Private cMenus := ""
  40. Private cAnexos := ""
  41. Private cDirOrc := "\anexosPortal\orcamentos\"
  42. Private cDirPortal := ""
  43. Private cEndServ := "" // Endereço do servidor da pagina de Portal
  44. Private cOrcCabec := ""
  45. Private cOrcItens := ""
  46. Private cItensHid := ""
  47. Private cBotoes := ""
  48. Private cBtnItens := ""
  49. Private cOptUF := ""
  50. Private cOptMun := ""
  51. Private cOptProd := ""
  52. Private cOptCond := ""
  53. Private cOptModal := ""
  54. Private cTblDesc := ""
  55. Private cCodOrc := ""
  56. Private cTabela := ""
  57. Private cCliente := ""
  58. Private cContato := ""
  59. Private cContDDD := ""
  60. Private cContTel := ""
  61. Private cTpCliente := ""
  62. Private cGrpTrib := ""
  63. Private cCondPag := ""
  64. Private cLocalEnt := ""
  65. Private cObra := ""
  66. Private cStatusObra := ""
  67. Private cIntermed := ""
  68. Private cOport := ""
  69. Private cRevOpt := ""
  70. Private cRegional := ""
  71. Private cTpFrete := ""
  72. Private cValFre := ""
  73. Private cPrazoEmb := ""
  74. Private cEstudo := ""
  75. Private cNumEst := ""
  76. Private cPrevFecha := ""
  77. Private cMargemCont := ""
  78. Private cTransp := ""
  79. Private cOptCli := ""
  80. Private cTotalReg := ""
  81. //Private cEntrega := ""
  82. //Private cValidade := ""
  83. Private nTVlrUnit := 0
  84. Private nTVlrSDesc := 0
  85. Private nTQtdItem := 0
  86. Private nTTotal := 0
  87. Private nTComiss := 0
  88. Private nTImpostos := 0
  89. Private nTAcresc := 0
  90. Private nTFrete := 0
  91. Private nItens := 0
  92. Private lNewOrc := .F.
  93. Private lEdit := .F.
  94. Private lCopy := .F.
  95. Private cShowDesc := "false"
  96. Private aItens := {}
  97. Private aAnexos := {}
  98. Web Extended Init cHtml Start U_inSite()
  99. cVendLogin := u_GetUsrPR()
  100. cCodLogin := U_SetParPR(cVendLogin)
  101. If Empty(HttpSession->CodVend)
  102. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL='+cSite+'">'
  103. Return cHtml
  104. Else
  105. If !Empty(HttpSession->Superv) .and. HttpSession->Superv <> HttpSession->CodVend
  106. HttpSession->CodVend:= HttpSession->Superv
  107. Endif
  108. Endif
  109. // Pega do parâmetro com o Titulo do Portal
  110. cTitle := SuperGetMV("PS_TITLE", .T., "Portal SMS")
  111. // Define a funcao a ser chama no link
  112. cSite := "u_SMSPortal.apw?PR="+cCodLogin
  113. // Monta o cabeçalho para a pagina
  114. cHeader := U_PSHeader(cTitle, cSite)
  115. //Função que atualiza os menus
  116. cMenus := U_GetMenus(AllTrim(Upper(Procname())), cVendLogin)
  117. //Atualiza as variáveis
  118. cEndServ := GetMv('MV_WFBRWSR')
  119. cCodVend := cVendLogin
  120. cNomeVend:= HttpSession->Nome
  121. cItem := StrZero(1,TamSX3("CK_ITEM")[1])
  122. cOpcao := HttpGet->opc
  123. if !empty(HttpGet->rec)
  124. nRecSCJ := val(HttpGet->rec)
  125. EndIf
  126. lEdit := .F.
  127. lDele := .F.
  128. Do Case
  129. Case cOpcao == "view"
  130. nOpc:= 2
  131. cPagina += " - Visualizar"
  132. Case cOpcao == "edit"
  133. nOpc:= 4
  134. cPagina += " - Alterar"
  135. lEdit := .T.
  136. Case cOpcao == "dele"
  137. nOpc:= 5
  138. cPagina += " - Excluir"
  139. lDele := .T.
  140. Case cOpcao == "copy"
  141. nOpc = 3
  142. cPagina += " - Copiar"
  143. lEdit := .T.
  144. lCopy := .T.
  145. EndCase
  146. //Posiciona no Orçamento
  147. If !Empty(nRecSCJ)
  148. dbSelectArea("SCJ")
  149. SCJ->(dbGoTo(nRecSCJ))
  150. //Troca de filial
  151. u_PTChgFil(SCJ->CJ_FILIAL)
  152. dbSelectArea("SCJ")
  153. SCJ->(dbGoTo(nRecSCJ))
  154. dbSelectArea("SCK")
  155. SCK->(DbSetOrder(1))
  156. SCK->(dbgotop())
  157. SCK->(dbSeek(xFilial("SCK")+SCJ->CJ_NUM))
  158. dbSelectArea("SA1")
  159. SA1->(DbSetOrder(1))
  160. SA1->(dbgotop())
  161. SA1->(dbSeek(xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA))
  162. Endif
  163. cLisPar:='<select class="form-control" name="parceiro" id="cmbParceiro" '
  164. cLisPar+= '<option value="">Selecione...</option>'
  165. cLisPar+= U_GETPARC()
  166. cLisPar+='</select>'
  167. cFilOrc:= '<div class="row form-group">'
  168. cFilOrc+= ' <div class="col-lg-2">'
  169. cFilOrc+= ' <label class="control-label">Filial</label>'
  170. cFilOrc+= ' <input id="CJ_FILIAL" name="CJ_FILIAL" class="form-control" value="'+SCJ->CJ_FILIAL+'" disabled >'
  171. //cFilOrc+= ' <input id="CJ_VEND" name="CJ_VEND" type="hidden" value="'+SCJ->CJ_VEND+'">'
  172. cFilOrc+= ' </div>'
  173. cCodOrc:= ' <div class="col-lg-2">'
  174. cCodOrc+= ' <label class="control-label">Número</label>'
  175. cCodOrc+= ' <input id="CJ_NUM" name="CJ_NUM" class="form-control" value="'+SCJ->CJ_NUM+'" disabled >'
  176. cCodOrc+= ' </div>'
  177. cCodOrc+= '</div>'
  178. //Cliente
  179. If lEdit .or. lCopy
  180. cCliente:=' <div class="flexContainer">
  181. cCliente+=' <input type="text" class="form-control smsediticon" placeholder="Digite o código, CPF/CNPJ ou Razão Social..." '
  182. cCliente+=' name="CJ_CLIENTE" id="CJ_CLIENTE"'
  183. cCliente+=' aria-required="true" data-live-search="true" '
  184. cCliente+=' autocomplete="off" value="'+SCJ->CJ_CLIENTE+'/'+SCJ->CJ_LOJA+' - '+Alltrim(Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+'" />'
  185. cCliente+=' <button class="btSearchCli" id="btSearchCli">'
  186. cCliente+=' <i class="fa fa-search" alt="Pesquisar"></i>'
  187. cCliente+=' </button>
  188. cCliente+=' </div>
  189. cOptCli+= u_ListaCli(cVendLogin,"")
  190. HttpSession->Cliente:= SCJ->CJ_CLIENTE+SCJ->CJ_LOJA
  191. Else
  192. cCliente:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  193. cCliente+='{ "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"+' name="CJ_CLIENTE" id="CJ_CLIENTE" '
  194. cCliente+=' disabled >' //value='+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA+'
  195. cCliente+=' <option value='+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA+'>'+SCJ->CJ_CLIENTE+'/'+SCJ->CJ_LOJA+' - '+Alltrim(Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_NOME"))+'</option>'
  196. cCliente+='</select>'
  197. Endif
  198. //Oportunidade
  199. cOport:= '<input id="CJ_NROPOR" name="CJ_NROPOR" class="form-control" value="'+SCJ->CJ_NROPOR+'" disabled >'
  200. cRevOpt:= '<input id="CJ_REVISA" name="CJ_REVISA" class="form-control" value="'+SCJ->CJ_REVISA+'" disabled>'
  201. //Combo da tabela de preço
  202. cTabPadrao:= GetNewPar("PR_TABPADR","001")
  203. cTabela:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  204. cTabela+='{ "placeholder": "Selecione", "allowClear": false }'+"'"+' name="CJ_TABELA" id="CJ_TABELA" '
  205. cTabela+='</select>'
  206. //Tabela de preço por filial
  207. cQry:= "SELECT DA0_CODTAB, DA0_DESCRI "
  208. cQry+= "FROM "+RetSqlName("DA0")+" DA0 "
  209. cQry+= "WHERE DA0_FILIAL = '"+xFilial("DA0")+"'
  210. cQry+= "AND DA0_ATIVO = '1' "
  211. cQry+= "AND (DA0_DATATE = '' OR DA0_DATATE >= '"+dtos(dDataBase)+"') "
  212. cQry+= "AND DA0.D_E_L_E_T_ = ' ' "
  213. If Select("QFIL") > 0
  214. QFIL->(dbCloseArea())
  215. Endif
  216. TcQuery cQry New Alias "QFIL"
  217. While QFIL->(!Eof())
  218. cTabela+=' <option value="'+Alltrim(QFIL->DA0_CODTAB)+'" '+Iif(QFIL->DA0_CODTAB == SCJ->CJ_TABELA,'selected','')+'>'+Alltrim(QFIL->DA0_CODTAB)+' - '+Alltrim(QFIL->DA0_DESCRI)+'</option>'
  219. QFIL->(dbSkip())
  220. End
  221. cTabela+='</select>'
  222. //Tipo de cliente
  223. Posicione("SA1",1,xFilial("SA1")+SCJ->CJ_CLIENTE+SCJ->CJ_LOJA,"A1_TIPO")
  224. cTpCliente:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  225. cTpCliente+='{ "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"+' name="CJ_TIPOCLI" id="A1_TIPOCLI" '
  226. cTpCliente+=' disabled >'
  227. cTpCliente+=' <option value="'+SA1->A1_TIPO+'">'+X3COMBO("A1_TIPO",SA1->A1_TIPO)+'</option>'
  228. cTpCliente+='</select>'
  229. //Grupo de tributação do cliente
  230. cGrpTrib:= '<input id="CJ_GRPTRIB" name="CJ_GRPTRIB" class="form-control" value="'+SCJ->CJ_GRPTRIB+'" disabled>'
  231. //Contato
  232. cContato:= ' <input id="CJ_XCONTAT" name="CJ_XCONTAT" maxlength="'+cvaltochar(GetSX3Cache("CJ_XCONTAT","X3_TAMANHO"))+'" class="form-control" value="'+Alltrim(SCJ->CJ_XCONTAT)+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  233. cContDDD:= ' <input id="CJ_XCONDDD" name="CJ_XCONDDD" maxlength="'+cvaltochar(GetSX3Cache("CJ_XCONDDD","X3_TAMANHO"))+'" class="form-control only-numbers" value="'+Alltrim(SCJ->CJ_XCONDDD)+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  234. cContTel:= ' <input id="CJ_XCONTEL" name="CJ_XCONTEL" maxlength="'+cvaltochar(GetSX3Cache("CJ_XCONTEL","X3_TAMANHO"))+'" class="form-control only-numbers" value="'+Alltrim(SCJ->CJ_XCONTEL)+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  235. //Cliente de Entrega
  236. cCliEntr:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  237. cCliEntr+='{ "placeholder": "Selecione um Cliente", "allowClear": false }'+"'"
  238. cCliEntr+='name="CJ_CLIENT" id="CJ_CLIENT" '
  239. If lEdit .or. lCopy
  240. cCliEntr+='onchange="javascript:atuLocEnt();" '
  241. Else
  242. cCliEntr+='disabled'
  243. Endif
  244. cCliEntr+='>'
  245. If lEdit .or. lCopy
  246. cCliEntr+=' <option data-hidden="true"></option>'
  247. Endif
  248. // Localiza os clientes
  249. cCliEntr+= u_ListaCli(cVendLogin,"QRY->A1_COD+QRY->A1_LOJA==SCJ->CJ_CLIENT+SCJ->CJ_LOJAENT")
  250. cCliEntr+='</select>'
  251. //Local de entrega
  252. cLocalEnt:= '<div class="flexContainer">'
  253. cLocalEnt+= ' <input id="CJ_UFENT" name="CJ_UFENT" class="form-control" value="'+Alltrim(SCJ->CJ_UFENT)+'" disabled>' //onchange="javascript:atuVlrFrete();"
  254. cLocalEnt+=' <button class="btEndEntrega" id="btEndEntrega">'
  255. cLocalEnt+=' <i class="fa fa-exchange" title="Alterar endereço"></i>'
  256. cLocalEnt+=' </button>'
  257. cLocalEnt+='</div>'
  258. //Alimenta os estados
  259. cOptUF:= u_ListaUF()
  260. //Nome da obra
  261. cObra:= ' <input id="CJ_OBRA" name="CJ_OBRA" maxlength="'+cvaltochar(GetSX3Cache("CJ_OBRA","X3_TAMANHO"))+'" class="form-control text-uppercase" value="'+Alltrim(Upper(SCJ->CJ_OBRA))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  262. //cStatusObra:= ' <input id="CJ_VEND6" name="CJ_VEND6" class="form-control" value="'+Upper(X3COMBO("CJ_VEND6",SCJ->CJ_VEND6))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  263. aStObra:= RetSx3Box(Posicione('SX3',2,'CJ_VEND6','X3CBox()'),,,1)
  264. cStatusObra:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...", "minimumResultsForSearch": "-1"}'+"'"'
  265. cStatusObra+=' name="CJ_VEND6" id="CJ_VEND6" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  266. cStatusObra+='<option value=""></option>'
  267. For f:= 1 to Len(aStObra)
  268. cStatusObra+=' <option value="'+Left(aStObra[f,1],2)+'" '+Iif(Left(aStObra[f,1],2)==Alltrim(SCJ->CJ_VEND6),'selected','')+'>'+aStObra[f,1]+'</option>'
  269. Next
  270. cStatusObra+='</select>'
  271. //Seleciona as condições de pagamento disponíveis no combo
  272. cCondPag:='<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  273. cCondPag+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_CONDPAG" id="CJ_CONDPAG" '
  274. cCondPag+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+' onchange="javascript:vldCond()">'
  275. cCondPag+=' <option value="'+SCJ->CJ_CONDPAG+'">'+SCJ->CJ_CONDPAG+" - "+Posicione("SE4",1,xFilial("SE4")+SCJ->CJ_CONDPAG,"E4_DESCRI")+'</option>'
  276. If lEdit
  277. //Verifica a tabela cadastrada no cliente
  278. SE4->(dbSeek(xFilial("SE4")+SA1->A1_COND))
  279. //Seleciona as condições de pagamento disponíveis no combo
  280. cQry:= " Select E4_CODIGO, E4_DESCRI, E4_ACRSFIN"
  281. cQry+= " From "+RetSqlName("SE4")+" SE4 "
  282. cQry+= " Where E4_FILIAL = '"+xFilial("SE4")+"' "
  283. cQry+= " And E4_MSBLQL <> '1' "
  284. cQry+= " And E4_CODIGO NOT IN ('"+SCJ->CJ_CONDPAG+"') "
  285. cQry+= " And SE4.D_E_L_E_T_ = ' ' "
  286. If Select("QRP") > 0
  287. QRP->(dbCloseArea())
  288. Endif
  289. TcQuery cqry New Alias "QRP"
  290. While QRP->(!Eof())
  291. cCondPag+=' <option value="'+QRP->E4_CODIGO+'" '+Iif(Alltrim(QRP->E4_CODIGO) == AllTrim(SCJ->CJ_CONDPAG),'selected','')+'>'+Alltrim(QRP->E4_CODIGO)+" - "+Alltrim(QRP->E4_DESCRI)+'</option>'
  292. QRP->(dbSkip())
  293. End
  294. QRP->(dbCloseArea())
  295. Endif
  296. cCondPag+='</select>'
  297. //Previsão Fechamento
  298. aPrevisao:= {{"B","Balizador"},{"A","30/120 dias"},{"V","Em 30 dias"},{"M","Após 4 meses"},{"C","Concorrência"}}
  299. //cPrevFecha:= ' <input id="CJ_TERMOME" name="CJ_TERMOME" class="form-control" value="'+cPrevisao+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  300. cPrevFecha:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...", "minimumResultsForSearch": "-1"}'+"'"'
  301. cPrevFecha+=' name="CJ_TERMOME" id="CJ_TERMOME" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  302. cPrevFecha+='<option value=""></option>'
  303. For f:= 1 to Len(aPrevisao)
  304. cPrevFecha+=' <option value="'+aPrevisao[f,1]+'" '+Iif(aPrevisao[f,1]==SCJ->CJ_TERMOME,'selected','')+'>'+aPrevisao[f,2]+'</option>'
  305. Next
  306. cPrevFecha+='</select>'
  307. //Intermediador
  308. If !(lEdit .or. lCopy)
  309. cIntermed:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  310. cIntermed+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' disabled '
  311. Else
  312. cIntermed:='<select class="form-control populate selectpicker" data-live-search="true" '
  313. cIntermed+='title="Selecione..." '
  314. Endif
  315. cIntermed+=' name="CJ_CLIINTE" id="CJ_CLIINTE" >'
  316. cIntermed+='<option data-hidden="true"></option>'
  317. //Busca a lista de clientes
  318. cIntermed+= u_ListaCli(cVendLogin,"QRY->A1_COD==SCJ->CJ_CLIINTE")
  319. cIntermed+='</select>'
  320. //Retorno
  321. nDiasVal:= 0
  322. cRetorno:='<input type="text" id="CJ_RETORNO" name="CJ_RETORNO" data-plugin-datepicker data-plugin-options='+"'"+'{ "startDate": "+'+cvaltochar(nDiasVal)+'d", "language": "pt-BR",'
  323. cRetorno+='"daysOfWeekDisabled": "[0]","daysOfWeekHighlighted":"[0]","autoclose": "true","disabled":"true"}'+"'"+' class="form-control only-numbers" placeholder="__/__/____" '
  324. cRetorno+='value="'+dtoc(SCJ->CJ_RETORNO)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  325. //Estudo Luminotécnico
  326. //cEstudo:= ' <input id="CJ_LUMINOT" name="CJ_LUMINOT" class="form-control" value="'+Upper(X3COMBO("CJ_LUMINOT",SCJ->CJ_LUMINOT))+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  327. aEstd:= RetSx3Box(Posicione('SX3',2,'CJ_LUMINOT','X3CBox()'),,,1)
  328. aSort(aEstd)
  329. cEstudo:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...", "minimumResultsForSearch": "-1"}'+"'"'
  330. cEstudo+=' name="CJ_LUMINOT" id="CJ_LUMINOT" '+Iif(lCopy .or. lEdit,'','disabled')+' onchange="javascript:vldEstudo()">'
  331. cEstudo+='<option value=""></option>'
  332. For f:= 1 to Len(aEstd)
  333. cEstudo+=' <option value="'+aEstd[f,2]+'" '+Iif(AllTrim(aEstd[f,2]) == AllTrim(SCJ->CJ_LUMINOT),'selected','')+'>'+Upper(aEstd[f,3])+'</option>'
  334. Next
  335. cEstudo+='</select>'
  336. cNumEst:= ' <input id="CJ_REGLUMI" name="CJ_REGLUMI" maxlength="'+cvaltochar(GetSX3Cache("CJ_REGLUMI","X3_TAMANHO"))+'" class="form-control" value="'+SCJ->CJ_REGLUMI+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  337. //Segmento
  338. aSegmen:= RetSx3Box(Posicione('SX3',2,'CJ_SEGMENT','X3CBox()'),,,1)
  339. cSegmento:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...","minimumResultsForSearch": "-1"}'+"'"'
  340. cSegmento+=' name="CJ_SEGMENT" id="CJ_SEGMENT" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  341. cSegmento+=' <option value=""></option>'
  342. For f:= 1 to Len(aSegmen)
  343. cSegmento+=' <option value="'+aSegmen[f,1]+'" '+Iif(aSegmen[f,1]==Alltrim(SCJ->CJ_SEGMENT),'selected','')+'>'+aSegmen[f,1]+'</option>'
  344. Next
  345. cSegmento+='</select>'
  346. //Prospecção
  347. aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROPECC','X3CBox()'),,,1)
  348. aSort(aProsp)
  349. cProsp:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...", "minimumResultsForSearch": "-1"}'+"'"'
  350. cProsp+=' name="CJ_PROPECC" id="CJ_PROPECC" onchange="javascript:vldProspec()" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  351. cProsp+='<option value=""></option>'
  352. For f:= 1 to Len(aProsp)
  353. cProsp+=' <option value="'+aProsp[f,2]+'" '+Iif(aProsp[f,2]==SCJ->CJ_PROPECC,'selected','')+'>'+Upper(aProsp[f,3])+'</option>'
  354. Next
  355. cProsp+='</select>'
  356. //Prospectado por
  357. aProsp:= RetSx3Box(Posicione('SX3',2,'CJ_PROSCOD','X3CBox()'),,,1)
  358. cProspPor:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"placeholder": "Selecione...","minimumResultsForSearch": "-1"}'+"'"'
  359. cProspPor+=' name="CJ_PROSCOD" id="CJ_PROSCOD" '+Iif(lCopy .or. lEdit .or. !Empty(SCJ->CJ_PROSCOD),'','disabled')+'>'
  360. cProspPor+=' <option value=""></option>'
  361. For f:= 1 to Len(aProsp)
  362. cProspPor+=' <option value="'+aProsp[f,1]+'" '+Iif(aProsp[f,1]==Alltrim(SCJ->CJ_PROSCOD),'selected','')+'>'+aProsp[f,1]+'</option>'
  363. Next
  364. cProspPor+='</select>'
  365. //Regional
  366. cRegional:='<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  367. cRegional+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_REGIAO" id="CJ_REGIAO" '
  368. cRegional+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  369. If lCopy .or. lEdit
  370. cRegional+= u_ListaVend(.T.,SCJ->CJ_REGIAO)
  371. Else
  372. cRegional+='<option value="'+SCJ->CJ_REGIAO+'">'+SCJ->CJ_REGIAO+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_REGIAO,"A3_NOME")+'</option>'
  373. Endif
  374. cRegional+='</select>'
  375. //Vendedor do cliente
  376. cVend2:= '<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  377. cVend2+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_VEND" id="CJ_VEND" '
  378. cVend2+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  379. If lCopy .or. lEdit
  380. cVend2+= u_ListaVend(.F.,SCJ->CJ_VEND)
  381. Else
  382. cVend2+='<option value="'+SCJ->CJ_VEND+'">'+SCJ->CJ_VEND+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_VEND,"A3_NOME")+'</option>'
  383. Endif
  384. cVend2+='</select>'
  385. //Vendedor da oportunidade
  386. cVend3:='<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-live-search="true" data-plugin-options='+"'"
  387. cVend3+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"
  388. cVend3+=' name="CJ_VEND3" id="CJ_VEND3" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  389. If lCopy .or. lEdit
  390. cVend3+= u_ListaVend(.F.,SCJ->CJ_VEND3)
  391. Else
  392. cVend3+='<option value="'+SCJ->CJ_VEND3+'">'+SCJ->CJ_VEND3+" - "+Posicione("SA3",1,xFilial("SA3")+SCJ->CJ_VEND3,"A3_NOME")+'</option>'
  393. Endif
  394. cVend3+='</select>'
  395. //Vendedor 4
  396. cVend4:= '<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  397. cVend4+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_VEND4" id="CJ_VEND4" '
  398. cVend4+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  399. cVend4+= u_Vend04(SCJ->CJ_VEND4)
  400. cVend4+='</select>'
  401. //Especificado por
  402. cEspecif:= '<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  403. cEspecif+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_CODESP" id="CJ_CODESP" '
  404. cEspecif+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  405. cEspecif+= u_ListaEsp(SCJ->CJ_CODESP)
  406. cEspecif+='</select>'
  407. //Negociadora
  408. cNegociad:= '<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  409. cNegociad+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_VEND7" id="CJ_VEND7" '
  410. cNegociad+='required="" aria-required="true" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  411. cNegociad+= u_ListaNeg(SCJ->CJ_VEND7)
  412. cNegociad+='</select>'
  413. //Validade do Orçamento
  414. nDiasVal:= GetNewPar("PR_DTVALID",10)
  415. cValidade:='<input type="text" id="CJ_VALIDA" name="CJ_VALIDA" data-plugin-datepicker data-plugin-options='+"'"+'{ "startDate": "+'+cvaltochar(nDiasVal)+'d", "language": "pt-BR",'
  416. cValidade+='"daysOfWeekDisabled": "[0]","daysOfWeekHighlighted":"[0]","autoclose": "true","disabled":"true"}'+"'"+' class="form-control only-numbers" placeholder="__/__/____" '
  417. cValidade+='value="'+dtoc(SCJ->CJ_VALIDA)+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  418. //Prazo de embarque
  419. cPrazoEmb:= '<input id="CJ_PRZEMB" name="CJ_PRZEMB" maxlength="'+cvaltochar(GetSX3Cache("CJ_PRZEMB","X3_TAMANHO"))+'" class="form-control" value="'+SCJ->CJ_PRZEMB+'" '+Iif(lCopy .or. lEdit,'','disabled')+' >'
  420. //Tipo de frete
  421. aTpFrete:= {{"S","Sem Frete"},{"C","CIF"},{"F","FOB"}}
  422. cTpFrete:='<select data-plugin-selectTwo class="form-control poulatemb-md" data-plugin-options='+"'"+'{"minimumResultsForSearch": "-1"}'+"'"'
  423. cTpFrete+=' name="CJ_TPFRETE" id="CJ_TPFRETE" onchange="javascript:VldFrete()" '
  424. //cTpFrete:='<select class="form-control mb-md" name="CJ_TPFRETE" id="CJ_TPFRETE" onchange="javascript:VldFrete()" value="'+SCJ->CJ_TPFRETE+'"'
  425. cTpFrete+= Iif(!lEdit,'disabled','')+'>'
  426. If lEdit
  427. For f:= 1 to Len(aTpFrete)
  428. cTpFrete+=' <option value="'+aTpFrete[f,1]+'" '+Iif(AllTrim(aTpFrete[f,1]) == AllTrim(SCJ->CJ_TPFRETE),'selected','')+'>'+aTpFrete[f,2]+'</option>'
  429. Next
  430. Else
  431. nPosFrete:= aScan(aTpFrete,{|x|x[1]==SCJ->CJ_TPFRETE})
  432. If nPosFrete = 0
  433. nPosFrete:= 1
  434. Endif
  435. cTpFrete+=' <option value="'+SCJ->CJ_TPFRETE+'">'+aTpFrete[nPosFrete,2]+'</option>'
  436. Endif
  437. cTpFrete+='</select>'
  438. cPFrete:= '<input id="CJ_PERCFRT" name="CJ_PERCFRT" class="form-control percentual text-right" placeholder="0,00" maxlength="'+cvaltochar(GetSX3Cache("CJ_PERCFRT","X3_TAMANHO"))+'" '
  439. cPFrete+= 'value="'+TransForm(SCJ->CJ_PERCFRT,"@E 999.99")+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  440. cValFre:= '<input id="CJ_FRETE" name="CJ_FRETE" class="form-control money text-right" placeholder="0,00" '
  441. cValFre+= 'value="'+Transform(SCJ->CJ_FRETE,"@E 999,999,999,999.99")+'" '
  442. cValFre+= Iif((!lCopy .and. !lEdit) .or. SCJ->CJ_TPFRETE = "S" ,'disabled','')+'>'
  443. nTFrete+= SCJ->CJ_FRETE
  444. //% RT
  445. cComRT:= '<input id="CJ_COMISTR" name="CJ_COMISTR" class="form-control percentual text-right" placeholder="0,00" maxlength="'+cvaltochar(GetSX3Cache("CJ_COMISTR","X3_TAMANHO"))+'" '
  446. cComRT+= 'value="'+Transform(SCJ->CJ_COMISTR,PesqPict("SCJ","CJ_COMISTR"))+'" '+Iif(lCopy .or. lEdit,'','disabled')+'>'
  447. //Observação Comercial
  448. cObsCom:= SCJ->CJ_OBS
  449. //Margem de Contribuição
  450. If HttpSession->Tipo <> "R" //Representante
  451. cMargemCont:= ' <div class="col-lg-2"> '
  452. cMargemCont+= ' <label class="control-label">MC</label> '
  453. cMargemCont+= ' <input id="MARGEM" name="MARGEM" class="form-control" value="'+u_getMCOrc() + "%"+'" disabled >'
  454. cMargemCont+= ' </div>'
  455. Endif
  456. /*
  457. //Transportadora
  458. cTransp:='<select data-plugin-selectTwo class="form-control populate placeholder mb-md" data-plugin-options='+"'" '
  459. cTransp+='{ "placeholder": "Selecione uma Transportadora", "allowClear": false }'+"'"+' name="CJ_XTRANSP" id="CJ_XTRANSP" '
  460. cTransp+='required="" aria-required="true" '
  461. cTransp+= Iif(!lEdit .or. SCJ->CJ_TPFRETE = 'S','disabled','')+'>'
  462. cTransp+=' <option value="'+SCJ->CJ_XTRANSP+'">'+Alltrim(Posicione("SA4",1,xFilial("SA4")+SCJ->CJ_XTRANSP,"A4_NOME"))+'</option>'
  463. If lEdit
  464. //Transportadora do cadastro do cliente
  465. If !Empty(SA1->A1_TRANSP)
  466. cNome:= Alltrim(Posicione("SA4",1,xFilial("SA4")+SA1->A1_TRANSP,"A4_NOME"))
  467. cTransp+=' <option value="'+Alltrim(cTransp)+'">'+cNome+'</option>'
  468. Endif
  469. //Seleciona as transportadoras disponíveis no combo
  470. cQry:= " Select A4_COD COD, A4_NOME NOME"
  471. cQry+= " From "+RetSqlName("SA4")+" SA4 "
  472. cQry+= " Where A4_FILIAL = '"+xFilial("SA4")+"' "
  473. cQry+= " And A4_COD NOT IN ('"+SA1->A1_TRANSP+"','"+SCJ->CJ_XTRANSP+"') "
  474. cQry+= " And SA4.D_E_L_E_T_ = ' ' "
  475. If Select("QRT")> 0
  476. QRT->(dbCloseArea())
  477. Endif
  478. APWExOpenQuery(ChangeQuery(cQry),'QRT',.T.)
  479. While QRT->(!Eof())
  480. cTransp+=' <option value="'+Alltrim(QRT->COD)+'">'+Alltrim(QRT->NOME)+'</option>'
  481. QRT->(dbSkip())
  482. End
  483. Endif
  484. cTransp+='</select>'
  485. */
  486. /*
  487. //Validade do Orçamento
  488. nDiasVal:= GetNewPar("PR_DTVALID",3)
  489. cValidade:='<input type="text" id="CJ_VALIDA" name="CJ_VALIDA" data-plugin-datepicker data-plugin-options='+"'"+'{ "startDate": "+'+cvaltochar(nDiasVal)+'d", "language": "pt-BR",'
  490. cValidade+='"daysOfWeekDisabled": "[0]","daysOfWeekHighlighted":"[0]","autoclose": "true","disabled":"true"}'+"'"+' class="form-control only-numbers" placeholder="__/__/____" '
  491. cValidade+='value="'+Iif(lCopy,dtoc(date()+nDiasVal),dtoc(SCJ->CJ_VALIDA))+'" disabled>'
  492. //Peso
  493. cPeso:= '<input type="text" id="CJ_XPESO" name="CJ_XPESO" class="form-control text-right only-numbers" placeholder="0" '
  494. cPeso+= 'value="'+cvaltochar(SCJ->CJ_XPESO)+'" '+Iif(lCopy .or. lEdit,'',' disabled')+'>'
  495. //Volume
  496. cVolume:= '<input type="text" id="CJ_XVOLUME" name="CJ_XVOLUME" class="form-control text-right only-numbers" placeholder="0" '
  497. cVolume+= 'value="'+cvaltochar(SCJ->CJ_XVOLUME)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+'>'
  498. //Espécie
  499. cEspecie:= '<input type="text" id="CJ_XESPECI" name="CJ_XESPECI" class="form-control" placeholder="" '
  500. cEspecie+= 'value="'+cvaltochar(SCJ->CJ_XESPECI)+'"'+Iif(lCopy .or. lEdit,'',' disabled')+' maxlength="10">'
  501. //Combo da tabela de preço
  502. cTabela:='<select data-plugin-selectTwo class="form-control populate placeholder" data-plugin-options='+"'"
  503. cTabela+='{ "placeholder": "Selecione...", "allowClear": false }'+"'"+' name="CJ_TABELA" id="CJ_TABELA" '
  504. cTabela+='onchange="javascript:selProd()" disabled >'
  505. cTabela+=' <option value='+SCJ->CJ_TABELA+'>'+Alltrim(Posicione("DA0",1,xFilial("DA0")+SCJ->CJ_TABELA,"DA0_DESCRI"))+'</option>'
  506. cTabela+='</select>'
  507. HttpSession->Tabela:= SCJ->CJ_TABELA
  508. */
  509. //Preenchimento dos itens
  510. /*
  511. aItens - array que define o cabeçalho da tabela de produtos
  512. [1] - Nome da coluna
  513. [2] - Nome do campo
  514. [3] - Tamanho
  515. [4] - Alinhamento
  516. [5] - Tipo
  517. [6] - Editável
  518. [7] - Obrigatório
  519. [8] - Moeda
  520. [9] - Placeholder
  521. [10]- Hidden
  522. [11] - MaxLength
  523. */
  524. aAdd(aItens, {"Item","CK_ITEM","*","text-left","C",.F.,.F.,.F.,"",.F.,""})
  525. aAdd(aItens, {"Produto","CK_PRODUTO","300px"," text-left","C",lEdit,.T.,.F.,"Selecione...",.F.,""})
  526. aAdd(aItens, {"Quant.","CK_QTDVEN","*"," text-right only-numbers","N",lEdit,.T.,.F.,"0",.F.,""})
  527. aAdd(aItens, {"Observação","CK_OBS","*"," text-left","C",lEdit,.F.,.F.,"",.F.,"80"})
  528. aAdd(aItens, {"Prazo de Embarque","CK_PRZEMB","70px","text-right only-numbers","N",.F.,.F.,.F.,"",.F.,"3"})
  529. aAdd(aItens, {"Vlr Unitário","CK_PRCVEN","*"," text-right","N",lEdit,.F.,.T.,"0,00",.F.,""})
  530. aAdd(aItens, {"Vlr c/ Impostos","CK_XPRCIMP","*","text-right","N",.F.,.F.,.T.,"0,00",.T.,""})
  531. aAdd(aItens, {"Vlr de Venda","iCK_PRCVEN","*"," text-right myformato","N",.F.,.T.,.T.,"0,00",.T.,""})
  532. aAdd(aItens, {"Custo","CK_CUSTO","*"," text-right myformato","N",.F.,.F.,.T.,"0,00",.T.,""})
  533. aAdd(aItens, {"IPI","CK_XVALIPI","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
  534. aAdd(aItens, {"ICMS","CK_XVALICM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
  535. aAdd(aItens, {"ICMS ST","CK_XICMST","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
  536. aAdd(aItens, {"% Desconto","CK_DESCACM","*"," text-right percentual","N",lEdit,.F.,.T.,"0,00",Iif(HttpSession->Tipo <> "R",.F.,.T.) ,"7"})
  537. aAdd(aItens, {"Diretor","CK_NOMDIRE","*"," text-left","C",.T.,.F.,.T.,"",.T.,"12"})
  538. aAdd(aItens, {"% Comissão","PER_COM","*"," text-right ","N",.F.,.F.,.T.,"0,00",.T.,""})
  539. aAdd(aItens, {"Vlr Comissão","VAL_COM","*"," text-right","N",lEdit,.F.,.T.,"0,00",.T.,""})
  540. aAdd(aItens, {"Total","CK_VALOR","150px"," text-right","N",.F.,.F.,.T.,"0,00",.F.,""})
  541. aAdd(aItens, {"","ACAO","*"," text-center","X",lEdit,.F.,.F.,"",.F.,""})
  542. // Cria o cabeçalho dos Itens
  543. For nLin := 1 to Len(aItens)
  544. cOrcCabec += '<th'+Iif(aItens[nLin,2] == "CK_VALOR",' width="'+aItens[nLin,3]+'"',Iif(aItens[nLin,2] == "CK_PRODUTO",' width="'+aItens[nLin,3]+'"',''))
  545. cOrcCabec+= Iif(aItens[nLin,10],' hidden','')+'>'+aItens[nLin][1]+'</th>'
  546. Next
  547. dbSelectArea("SCK")
  548. SCK->(dbSeek(SCJ->CJ_FILIAL+SCJ->CJ_NUM))
  549. While SCK->(!Eof()) .and. SCK->CK_FILIAL == SCJ->CJ_FILIAL .and. SCK->CK_NUM == SCJ->CJ_NUM
  550. nItens++
  551. cItem := StrZero(nItens,TamSX3("CK_ITEM")[1])
  552. Posicione("SB1",1,xFilial("SB1")+SCK->CK_PRODUTO,"B1_DESC")
  553. If SB5->(MsSeek(xFilial("SB5")+SCK->CK_PRODUTO))
  554. If SB5->B5_DTVLESP + 30 < dDataBase
  555. lVencido:= .T.
  556. Endif
  557. Endif
  558. cOrcItens += '<tr class="odd" id="linha'+StrZero(nItens,2)+'">'
  559. nTImpostos += SCK->(CK_ST+CK_IPI)
  560. nTQtdItem += SCK->CK_QTDVEN
  561. nTVlrUnit += Round(SCK->CK_QTDVEN * SCK->CK_PRCVEN,2)
  562. nTVlrSDesc+= nTVlrUnit - SCK->CK_VLDSCAC
  563. nTTotal += SCK->CK_VALOR + SCK->(CK_IPI+CK_ST)
  564. nPerCom:= SCK->CK_COMIS1
  565. nValCom:= SCK->CK_COMISSA //(SCK->CK_QTDVEN * SCK->CK_PRCVEN) * (nPerCom/100)
  566. nTComiss+= nValCom
  567. // gera os produtos de acordo com o Cliente e Tabela
  568. cOptProd := u_GetProdOrc(SCJ->CJ_CLIENTE, SCJ->CJ_TABELA, "")
  569. For nLin := 1 to Len(aItens)
  570. If aItens[nLin,2] == "ACAO"
  571. cOrcItens += '<td class="actions">'
  572. If lEdit .or. lCopy //!lDele
  573. //cOrcItens += ' <a href="#" id="btnRemItm" name="btnRemItm" class="on-default remove-row"><i class="fa fa-times-circle"></i></a>'
  574. //cOrcItens += ' <i class="fa fa-info fa-lg" data-toggle="tooltip" data-original-title="Detalhes da linha" onclick="detalheOrc('+"'"+cItem+"'"+');"></i>'
  575. If lEdit .or. lCopy
  576. cOrcItens += ' <i class="fa fa-times-circle fa-lg" data-toggle="tooltip" data-original-title="Remover a linha" onclick="removeItem('+"'"+cItem+"'"+');"></i>
  577. Endif
  578. Endif
  579. If !lDele
  580. cOrcItens += ' <i class="fa fa-info fa-lg" data-toggle="tooltip" data-original-title="Detalhes da linha" onclick="detalheOrc('+"'"+cItem+"'"+');"></i>'
  581. Endif
  582. cOrcItens += '</td>
  583. Else
  584. If aItens[nLin,2] == "CK_PRODUTO"
  585. cOrcItens += '<td>' //class="form-group row pb-4"
  586. Else
  587. cOrcItens += '<td'+Iif(!Empty(aItens[nLin][4]),' align="'+aItens[nLin][4]+'"',"")+Iif(aItens[nLin,10],'hidden','')+'>'
  588. Endif
  589. lMoeda:= aItens[nLin,8] //Indica se é Moeda
  590. lNumber:= aItens[nLin,5] = "N" //Indica que é numérico
  591. xValue:= ""
  592. Do Case
  593. Case aItens[nLin][5] == 'C'
  594. If aItens[nLin,2] == "CK_PRODUTO"
  595. xValue := AllTrim(SCK->&(aItens[nLin][2]))+' - '+Alltrim(SB1->B1_DESC)
  596. Else
  597. xValue := AllTrim(SCK->&(aItens[nLin][2]))
  598. Endif
  599. Case aItens[nLin][5] == 'N'
  600. If aItens[nLin,2] == "CK_QTDVEN"
  601. xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->&(aItens[nLin][2]))))
  602. ElseIf aItens[nLin,2] == "PER_COM"
  603. xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nPerCom,PesqPict("SD2","D2_COMIS1")),TamSX3("D2_COMIS1")[1])))
  604. ElseIf aItens[nLin,2] == "VAL_COM"
  605. xValue := Iif(lNewOrc,"",Alltrim(PadR(TransForm(nValCom,PesqPict("SCK","CK_PRCVEN")),TamSX3("CK_PRCVEN")[1])))
  606. ElseIf aItens[nLin,2] == "iCK_PRCVEN"
  607. //xValue := Iif(lNewOrc,"",Alltrim(cvaltochar(SCK->CK_PRCVEN)))
  608. xValue := Iif(lNewOrc,"",Alltrim(TransForm(SCK->CK_PRCVEN,PesqPict("SCK","CK_PRCVEN"))))
  609. Elseif aItens[nLin,2] == "CK_PRCVEN"
  610. xValue := Alltrim(TransForm(SCK->CK_PRUNIT,PesqPict("SCK","CK_PRUNIT")))
  611. Elseif aItens[nLin,2] == "CK_VALOR"
  612. xValue := Alltrim(TransForm(SCK->(CK_VALOR/*+CK_XVALIPI+CK_XICMST*/),PesqPict("SCK",aItens[nLin,2])))
  613. Else
  614. If SCK->(FieldPos(aItens[nLin][2])) > 0
  615. xValue := Alltrim(TransForm(SCK->&(aItens[nLin][2]),PesqPict("SCK",aItens[nLin,2])))
  616. Else
  617. xValue := ""
  618. Endif
  619. Endif
  620. EndCase
  621. If aItens[nLin,6] //Campo Editável
  622. If aItens[nLin,2] == "CK_PRODUTO"
  623. //Cria o select para o produto
  624. If lEdit .or. lCopy
  625. cOrcItens +='<div class="form-group">'
  626. cOrcItens +=' <div class="col-md-12">
  627. cOrcItens +=' <div class="flexContainer">
  628. cOrcItens +=' <input type="text" class="form-control smsediticon" placeholder="Digite o código ou descrição..." '
  629. cOrcItens +=' name="CK_PRODUTO'+cItem+'" id="CK_PRODUTO'+cItem+'"'
  630. cOrcItens += Iif(aItens[nLin][7],'required="" aria-required="true" ','')+' data-live-search="true" '
  631. cOrcItens +=' autocomplete="off" value="'+Alltrim(SCK->CK_PRODUTO)+' -- '+Alltrim(SB1->B1_DESC)+'" >'
  632. cOrcItens +=' <button class="btSearch" id="btSearch"'+cItem+'>'
  633. cOrcItens +=' <i class="fa fa-search" alt="Pesquisar"></i>'
  634. cOrcItens +=' </button>
  635. cOrcItens +=' </div>
  636. cOrcItens +=' </div>
  637. cOrcItens +='</div>
  638. Else
  639. cOrcItens +='<select class="selectpicker" name="CK_PRODUTO'+cItem+'" id="CK_PRODUTO'+cItem+'" '
  640. cOrcItens += Iif(aItens[nLin][7],'required="" aria-required="true" ','')+' data-live-search="true" '
  641. cOrcItens +=' data-width="484px" disabled>' //style="size:4" data-width="90%" style="height:90%"
  642. cOrcItens += GetProdOrc(SCJ->CJ_CLIENTE, SCJ->CJ_TABELA, SCK->CK_PRODUTO)
  643. cOrcItens+='</select>'
  644. Endif
  645. Else
  646. cOrcItens += '<input id="'+aItens[nLin][2]+cItem+'" data-prop="'+aItens[nLin][2]+'" name="'+aItens[nLin][2]+cItem+'" class="form-control'
  647. cOrcItens += Iif(lNumber, aItens[nLin][4], "")
  648. cOrcItens +=If(lMoeda," ",If(lNumber," only-numbers",""))+'" type="text" '
  649. cOrcItens += 'placeholder="'+aItens[nLin,9]+'" '
  650. //Atribui as funções javascript
  651. If aItens[nLin,2] == "CK_QTDVEN"
  652. cOrcItens+='onblur="javascript:VldQtd('+"'"+cItem+"'"+') "'
  653. Endif
  654. If aItens[nLin,2] == "iCK_PRCVEN"
  655. cOrcItens+='onblur="javascript:VldValor('+"'"+cItem+"'"+') " '
  656. Endif
  657. If aItens[nLin,2] == "CK_DESCONT"
  658. cVldDesc:= Iif(GetMv("LC_OR1012A",,.F.),'S','N')
  659. cOrcItens+='onblur="javascript:VldValor('+"'"+cItem+"'"+','+"'"+cVldDesc+"'"+')" maxlength="7" '
  660. Endif
  661. If aItens[nLin,2] $ ("CK_QTDVEN|iCK_PRCVEN|CK_DESCONT")
  662. cOrcItens+='onkeyup="javascript:TotalItem('+"'"+cItem+"'"+') "'
  663. Endif
  664. //Campo obrigatório
  665. cOrcItens += Iif(aItens[nLin][7],'required="" aria-required="true" ','')
  666. If lEdit //Inicia todos os campos desabilitados caso não for para editar ou copiar
  667. If aItens[nLin,2] <> "CK_QTDVEN" .And. !(aItens[nLin,2] $ "CK_DESCONT") //.And. aItens[nLin,2] <> "CK_XPEDCLI" .And. aItens[nLin,2] <> "CK_XITEMCL"
  668. cOrcItens += 'disabled '
  669. EndIf
  670. Else
  671. cOrcItens += 'disabled '
  672. EndIf
  673. cOrcItens += 'value="'+Alltrim(xValue)+'">'
  674. Endif
  675. Else
  676. cOrcItens += '<input id="'+aItens[nLin][2]+cItem+'" data-prop="'+aItens[nLin][2]+'" name="'+aItens[nLin][2]+cItem+'" '
  677. cOrcItens += 'class="form-control input-block '+Iif(lNumber, aItens[nLin][4], "")+'" '
  678. cOrcItens += 'type="text" disabled width="" '
  679. If aItens[nLin,2] $ "CK_PRODUTO|CK_OBS"
  680. cOrcItens += 'title="'+Alltrim(xValue)+'" '
  681. Endif
  682. cOrcItens += 'value="'+Alltrim(xValue)+'">'
  683. Endif
  684. Endif
  685. cOrcItens += '</td>'
  686. Next
  687. //Inputs Hidden
  688. //cItensHid += '<input type="hidden" class="" id="ALIQ_ICMS'+cItem+'" name="ALIQ_ICMS'+cItem+'" value="'+cValtochar(SCK->CK_CARICMS)+'">'
  689. //cItensHid += '<input type="hidden" class="" id="ALIQ_IPI'+cItem+'" name="ALIQ_IPI'+cItem+'" value="'+cValtochar(SCK->CK_XALIIPI)+'">'
  690. //cItensHid += '<input type="hidden" class="" id="ALIQ_ST'+cItem+'" name="ALIQ_ST'+cItem+'" value="'+cValtochar(SCK->CK_MCPERST)+'">'
  691. cItensHid += '<input type="hidden" class="" id="VAL_ICMS'+cItem+'" name="VAL_ICMS'+cItem+'" value="'+Alltrim(Transform(SCK->CK_ICMS,PesqPict("SCK","CK_ICMS")))+'">'
  692. cItensHid += '<input type="hidden" class="" id="VAL_IPI'+cItem+'" name="VAL_IPI'+cItem+'" value="'+Alltrim(Transform(SCK->CK_IPI,PesqPict("SCK","CK_IPI")))+'">'
  693. cItensHid += '<input type="hidden" class="" id="VAL_ST'+cItem+'" name="VAL_ST'+cItem+'" value="'+Alltrim(Transform(SCK->CK_ST,PesqPict("SCK","CK_ST")))+'">'
  694. cItensHid += '<input type="hidden" class="" id="BASE_ICMS'+cItem+'" name="BASE_ICMS'+cItem+'" value="0">'
  695. cItensHid += '<input type="hidden" class="" id="BASE_ST'+cItem+'" name="BASE_ST'+cItem+'" value="0">'
  696. cItensHid += '<input type="hidden" class="" id="BASE_IPI'+cItem+'" name="BASE_IPI'+cItem+'" value="0">'
  697. cItensHid += '<input type="hidden" class="" id="IMP_PRCTAB'+cItem+'" name="IMP_PRCTAB'+cItem+'" value="0">'
  698. cItensHid += '<input type="hidden" class="" id="QTD_EMB'+cItem+'" name="QTD_EMB'+cItem+'" value="'+cValtochar(SB1->B1_QE)+'">'
  699. cItensHid += '<input type="hidden" class="" id="CK_TES'+cItem+'" name="CK_TES'+cItem+'" value="'+SCK->CK_TES+'">'
  700. cItensHid += '<input type="hidden" class="" id="QTDMIN'+cItem+'" name="QTDMIN'+cItem+'" value="">'
  701. cItensHid += '<input type="hidden" class="" id="GRUPO'+cItem+'" name="GRUPO'+cItem+'" value="'+SB1->B1_GRUPO+'">'
  702. cItensHid += '<input type="hidden" class="" id="VENCIMENTO'+cItem+'" name="VENCIMENTO'+cItem+'" value="'+Iif(lVencido,'1','0')+'">'
  703. cOrcItens+=cItensHid
  704. SCK->(dbSkip())
  705. End
  706. //nTAcresc:= Round(nTTotal*(nAcresc/100),2)
  707. nTTotal+= nTFrete
  708. //nTTotal+= nTFrete+nTAcresc
  709. cOrcItens += '<input type="hidden" name="QtdItens" id="QtdItens" value="'+cValtoChar(nItens)+'"/>'
  710. cOrcItens += '<input type="hidden" id="PROXIMO" name="PROXIMO" value="'+StrZero(nItens,2)+'"/>
  711. cOrcItens += '<input type="hidden" class="" name="CJ_NUM" id="CJ_NUM" value="'+IIf(lCopy, "", SCJ->CJ_NUM)+'" />'
  712. cOrcItens += '<input type="hidden" name="OPCAO" id="OPCAO" value="'+cValtoChar(nOpc)+'" />'
  713. cOrcItens += '<input type="hidden" name="DESCCOND" id="DESCCOND" value="" />'
  714. cOrcItens += '<input type="hidden" name="CJ_DSDIRET" id="CJ_DSDIRET" value="'+IIf(lCopy, "", cvaltochar(SCJ->CJ_DSDIRET))+'" />'
  715. cOrcItens += '<input type="hidden" name="FRETEMIN" id="FRETEMIN" value="'+cvaltochar(GetMv("MV_FRETMIN"))+'" />'
  716. cOrcItens += '</tr>'
  717. //Adiciona os botões de ações na tabela de itens
  718. If lEdit
  719. cBtnItens+='<div class="row form-group">'
  720. cBtnItens+=' <div class="col-sm-2">'
  721. cBtnItens+=' <button class="btn btn-primary" id="btAddItm" name="btAddItm">' //onclick="javascript:newItem()" >'
  722. cBtnItens+=' <i class="fa fa-plus-square"></i> Novo Item</button>'
  723. cBtnItens+=' </div>'
  724. cBtnItens+='</div>'
  725. Endif
  726. //Adiciona os botões da página
  727. If lEdit
  728. //cBotoes+='<h5 class="text-primary">Orçamento válido apenas dentro do mês de '+MesExtenso(SCJ->CJ_EMISSAO)+' de '+cvaltochar(Year(SCJ->CJ_EMISSAO))+'.</h5>'
  729. cBotoes+='<input class="btn btn-primary" type="button" id="btSalvar" name="btSalvar" value="Salvar"/>'+chr(13)+chr(10)
  730. Elseif lDele
  731. cBotoes+='<input class="btn btn-primary " type="button" id="btExcluir" name="btExcluir" value="Excluir"/>'+chr(13)+chr(10)
  732. Endif
  733. cBotoes+='<input class="btn btn-primary" type="button" id="btVoltar" name="btVoltar" value="Voltar" onclick="javascript: location.href='+"'"+'U_orcamento.apw?PR='+cCodLogin+"';"+'"/>'+chr(13)+chr(10)
  734. //Totalizador disponível apenas para regional
  735. If HttpSession->Tipo <> "R"
  736. cTotalReg:='<div class="col-sm-12">'
  737. cTotalReg+=' <label class="">Itens sem Desconto&nbsp;</label>'
  738. cTotalReg+=' <input class="form-control text-right" id="TOTAL_ITENS_NODESC" name="TOTAL_ITENS_NODESC" placeholder="0,00" disabled="" type="text" value="'+Transform(nTVlrSDesc,"@E 999,999,999,999.99")+'"></input>'
  739. cTotalReg+=' &nbsp;&nbsp;&nbsp;&nbsp;'
  740. cTotalReg+=' <label class="">Itens sem Desconto+Impostos&nbsp;</label>'
  741. cTotalReg+=' <input class="form-control text-right" id="TOTAL_NODESC_IMP" name="TOTAL_NODESC_IMP" placeholder="0,00" disabled="" type="text" value="'+Transform(nTVlrSDesc+nTImpostos,"@E 999,999,999,999.99")+'"></input>'
  742. cTotalReg+='</div>'
  743. cTotalReg+='<br>'
  744. cTotalReg+='<br>'
  745. cShowDesc := 'true'
  746. Endif
  747. //Retorna o HTML para construção da página
  748. cHtml := H_AddOrc()
  749. Web Extended End
  750. Return (cHTML)
  751. /*__________________________________________________________________________
  752. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  753. ¦¦+-----------------------------------------------------------------------+¦¦
  754. ¦¦¦Funçäo ¦ ExcOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦10.12.17 ¦¦¦
  755. ¦¦+----------+------------------------------------------------------------¦¦¦
  756. ¦¦¦Descriçäo ¦ Exclui o Orçamento de Venda ¦¦¦
  757. ¦¦+-----------------------------------------------------------------------+¦¦
  758. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  759. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  760. User Function ExcOrc()
  761. Local cHtml
  762. Local nOpc := 5 // 3- Incluir / 4- Alterar / 5- Excluir
  763. Local cCliente := ""
  764. Local cLoja := ""
  765. Local cNumOrc := ""
  766. Local cDirErro := "erro\"
  767. Private cReturn
  768. Private aCabSCJ :={}
  769. Private aItemSCJ:={}
  770. Private aLinhaSCJ:={}
  771. Private lMsErroAuto:= .F.
  772. Private cCodLogin := ""
  773. Private cVendLogin:= ""
  774. Private INCLUI := .F.
  775. Private ALTERA := .F.
  776. Web Extended Init cHtml Start U_inSite()
  777. //Verifica se não perdeu a sessão
  778. If type("HttpSession->CodVend") = "U" .or. Empty(HttpSession->CodVend)
  779. conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"Sessao encerrada")
  780. cHtml:= '<META HTTP-EQUIV="Refresh" CONTENT="0 ; URL=U_SMSPortal.apw">'
  781. return cHtml
  782. Endif
  783. cVendLogin := u_GetUsrPR()
  784. cCodLogin := U_SetParPR(cVendLogin)
  785. //Variáveis do cabeçalho
  786. cCliente:= Left(HttpPost->CJ_CLIENTE,6)
  787. cLoja:= Right(HttpPost->CJ_CLIENTE,6)
  788. cNumOrc:= HttpPost->CJ_NUM
  789. nModulo:= 5
  790. //Posiciona nas tabelas
  791. If !Empty(cCliente)
  792. Posicione("SA1",1,xFilial("SA1")+Alltrim(HttpPost->CJ_CLIENTE),"A1_COD")
  793. Endif
  794. //Posiciona no orçamento
  795. Posicione("SCJ",1,xFilial("SCJ")+cNumOrc,"CJ_NUM")
  796. cFilOrc:= SCJ->CJ_FILIAL
  797. //Monta o cabeçalho
  798. aadd(aCabSCJ,{"CJ_NUM",cNumOrc,Nil})
  799. aadd(aCabSCJ,{"CJ_CLIENTE",SA1->A1_COD,Nil})
  800. aadd(aCabSCJ,{"CJ_LOJA", SA1->A1_LOJA ,Nil})
  801. aLinhaSCJ:={}
  802. //Monta os itens
  803. lMsErroAuto:= .F.
  804. //Chama execauto para inclusão do orçamento
  805. If Len(aCabSCJ) > 0
  806. MATA415(aCabSCJ,aItemSCJ,nOpc)
  807. Else
  808. conout(Procname()+"("+ltrim(str(procline()))+") *** Portal "+"FALHA AO EXCLUIR O ORÇAMENTO!")
  809. lMsErroAuto:= .T.
  810. Endif
  811. If lMsErroAuto
  812. If !ExistDir(cDirErro)
  813. MakeDir(cDirErro)
  814. Endif
  815. cDirErro+=dtos(date())
  816. If !ExistDir(cDirErro)
  817. MakeDir(cDirErro)
  818. Endif
  819. //Grava o erro
  820. MostraErro(cDirErro,"erro_orcto_"+strtran(time(),":","")+".txt")
  821. cHtml:= "erro"
  822. Else
  823. SCJ->(dbGoBottom())
  824. cHtml:= SCJ->CJ_NUM
  825. EndIf
  826. Web Extended End
  827. Return (cHTML)
  828. /*__________________________________________________________________________
  829. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  830. ¦¦+-----------------------------------------------------------------------+¦¦
  831. ¦¦¦Funçäo ¦ GetProdOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 10.12.17 ¦¦¦
  832. ¦¦+----------+------------------------------------------------------------¦¦¦
  833. ¦¦¦Descriçäo ¦ Função para retornar os produtos da tabela e esta no Orç. ¦¦¦
  834. ¦¦+-----------------------------------------------------------------------+¦¦
  835. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  836. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  837. User Function GetProdOrc(cOrcCli, cOrcTab, cOrcProd)
  838. Local cHtml
  839. Local cProds := ""
  840. Local cGrupo := ""
  841. //Atualiza a variável de sessão
  842. HttpSession->TABELA := cOrcTab
  843. //Busca os itens da tabela de preço
  844. cQry:="Select DA1_CODTAB, B1_GRUPO, BM_DESC, DA1_CODPRO, B1_DESC "
  845. cQry+=" From "+RetSqlName("DA1")+" DA1"
  846. cQry+=" INNER JOIN "+RetSqlName("DA0")+" DA0 ON DA0_FILIAL = DA1_FILIAL AND DA0_CODTAB = DA1_CODTAB AND DA0_ATIVO = '1' AND DA0.D_E_L_E_T_ = ' ' "
  847. cQry+=" INNER JOIN "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = DA1_CODPRO AND B1_MSBLQL <> '1' AND SB1.D_E_L_E_T_ = ' ' "
  848. cQry+=" LEFT JOIN "+RetSqlName("SBM")+" SBM ON BM_FILIAL = '"+xFilial("SBM")+"' AND B1_GRUPO = BM_GRUPO AND SBM.D_E_L_E_T_ = ' ' "
  849. cQry+=" Where DA1_FILIAL = '"+xFilial("DA1")+"' "
  850. cQry+=" And DA1_CODTAB = '"+cOrcTab+"' "
  851. cQry+=" AND DA1_ATIVO = '1' "
  852. If !Empty(cOrcProd)
  853. cQry+=" AND DA1_CODPRO = '"+cOrcProd+"' "
  854. Endif
  855. cQry+=" AND DA1_PRCVEN > 0 "
  856. cQry+=" AND DA1.D_E_L_E_T_ = ' ' "
  857. cQry+=" Order by DA1_CODTAB, B1_GRUPO, B1_COD "
  858. If Select("QRP") > 0
  859. QRP->(dbCloseArea())
  860. Endif
  861. APWExOpenQuery(ChangeQuery(cQry),'QRP',.T.)
  862. //Preenche o select de produtos
  863. While QRP->(!Eof())
  864. If Empty(cGrupo)
  865. cProds+= '<optgroup label="'+Alltrim(StrTran(QRP->BM_DESC,"'",""))+'">
  866. Elseif !Empty(cGrupo) .and. cGrupo <> QRP->B1_GRUPO
  867. cProds+= '</optgroup>'
  868. cProds+= '<optgroup label="'+Alltrim(StrTran(QRP->BM_DESC,"'",""))+'">
  869. Endif
  870. cProds+=' <option value="'+Alltrim(QRP->DA1_CODPRO)+'" '+Iif(Alltrim(QRP->DA1_CODPRO) == AllTrim(cOrcProd), 'selected','')+'>'+Alltrim(QRP->DA1_CODPRO)+' - '+Alltrim(StrTran(QRP->B1_DESC,"'",""))+'</option>'
  871. cGrupo:= QRP->B1_GRUPO
  872. QRP->(dbSkip())
  873. End
  874. If !Empty(cProds)
  875. cProds+= '</optgroup>'
  876. Endif
  877. cHtml:= cProds
  878. Return cHtml
  879. /*__________________________________________________________________________
  880. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  881. ¦¦+-----------------------------------------------------------------------+¦¦
  882. ¦¦¦Funçäo ¦ GetMCOrc ¦ Autor ¦ Anderson Zelenski ¦ Data ¦ 02.12.23 ¦¦¦
  883. ¦¦+----------+------------------------------------------------------------¦¦¦
  884. ¦¦¦Descriçäo ¦ Função para calcular a margem de contribuição do orçamento.¦¦¦
  885. ¦¦+-----------------------------------------------------------------------+¦¦
  886. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  887. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  888. User Function GetMCOrc()
  889. Local cMargem := ""
  890. Local cQry := ""
  891. Local nMkt := 0
  892. Local nMktP := 0
  893. Local nMC := 0
  894. Local nMC_T := 0
  895. Local nMCTotIt := 0
  896. Local nCusto := 0
  897. Local nICMS := 0
  898. Local nComis2 := 0
  899. Local nComis3 := 0
  900. Local nPIS := 0
  901. Local nCofins := 0
  902. Local nComissao := 0
  903. Local nRT := 0
  904. Local nIPI := 0
  905. Local nFrete := 0
  906. Local nSubsTrb := 0
  907. Local nSubsCus := 0
  908. Local nST := 0
  909. Local nINSSP := 0
  910. Local nRecLiq := 0
  911. Local nMargemT := 0
  912. cQry:= "Select * From "+RetSqlName("SCK")+" SCK "
  913. cQry+= "Inner Join "+RetSqlName("SB1")+" SB1 ON B1_FILIAL = '"+xFilial("SB1")+"' AND B1_COD = CK_PRODUTO AND SB1.D_E_L_E_T_ = ' ' "
  914. cQry+= "Where CK_FILIAL = '"+SCJ->CJ_FILIAL+"' "
  915. cQry+= "AND CK_NUM = '"+SCJ->CJ_NUM+"' "
  916. cQry+= "AND SCK.D_E_L_E_T_ = ' ' "
  917. If Select("TMP1") > 0
  918. TMP1->(dbCloseArea())
  919. Endif
  920. TcQuery cQry New Alias "TMP1"
  921. // passa por todos os itens do orcamento
  922. While !TMP1->(EOF())
  923. nMkt := 0
  924. nCusto := TMP1->CK_CUSTO
  925. nICMS := TMP1->CK_ICMS
  926. nComis2 := TMP1->CK_COMIS1
  927. nComis3 := TMP1->CK_COMIS3
  928. nPIS := TMP1->CK_PIS
  929. nCofins := TMP1->CK_COFINS
  930. nComissao := TMP1->CK_COMISSA
  931. nRT := TMP1->CK_RT
  932. nIPI := TMP1->CK_IPI
  933. nFrete := TMP1->CK_FRETE
  934. nSubsTrb := TMP1->CK_SUBSTRB
  935. nSubsCus := TMP1->CK_SUBSCUS
  936. nST := TMP1->CK_ST
  937. nINSSP := TMP1->CK_INSSP
  938. // calcula receita liquida
  939. nRecLiq := TMP1->CK_VALOR - nICMS - nPIS - nCofins - nINSSP
  940. // se existe o campo de % do mkt
  941. If TMP1->(FieldPos("CK_MKTP")) > 0
  942. nMktP:= TMP1->CK_MKTP
  943. Endif
  944. // se existe o campo de vlr de mkt
  945. If TMP1->(FieldPos("CK_MKT")) > 0
  946. nMkt:= TMP1->CK_MKT
  947. Endif
  948. // calcula o valor da margem
  949. nMC:= ((TMP1->CK_VALOR - nCusto - nICMS - nPIS - nCofins - nFrete - nComissao - nINSSP - nRT - nMkt) + nSubsTrb + nSubsCus)
  950. // Carrega as Variaveis Totalizador Orçamento, Luminarias e Equipamentos.
  951. If Alltrim(TMP1->B1_TIPO) == "CO" .AND. Alltrim(TMP1->B1_GRUPO) == "ELEV"
  952. // soma a margem total
  953. nMC_T := nMC_T + (TMP1->CK_VALOR * -1)
  954. // soma o valor total
  955. nMCTotIt := nMCTotIt + TMP1->CK_VALOR
  956. Else
  957. // se nao é do grupo pan e nao são acessorios de painel de led
  958. If Alltrim(TMP1->B1_GRUPO) <> 'PAN' .and. !(AllTrim(TMP1->CK_PRODUTO) $ "ACS-LHT44BC/ACS-LHT44PT")
  959. // soma a margem total
  960. nMC_T := nMC_T + nMC
  961. // soma o valor total
  962. nMCTotIt := nMCTotIt + TMP1->CK_VALOR
  963. EndIf
  964. EndIf
  965. TMP1->(dbSkip())
  966. End
  967. cMargem:= Transform(((nMC_T / nMCTotIt)*100),"@E 9999.99")
  968. Return cMargem
  969. /*__________________________________________________________________________
  970. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  971. ¦¦+-----------------------------------------------------------------------+¦¦
  972. ¦¦¦Funçäo ¦ GetSaldoProd ¦ Autor ¦ Lucilene Mendes ¦ Data ¦ 17.10.23 ¦¦¦
  973. ¦¦+----------+------------------------------------------------------------¦¦¦
  974. ¦¦¦Descriçäo ¦ Busca saldo do item (mesma query GetEstDisp-addorc.apl) ¦¦¦
  975. ¦¦+-----------------------------------------------------------------------+¦¦
  976. ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
  977. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯*/
  978. Static Function GetSaldoProd()
  979. //Armazéns considerados para busca do estoque
  980. Local cArmazem:= GetNewPar("PR_ARMZPR","'01','02','03'") //deve estar no formato '01','02'
  981. Local cQry:=""
  982. //Busca o saldo do produto
  983. cQry:= "With QRY AS( "
  984. cQry+= "Select SUM(B2_QATU) EST , SUM(CASE WHEN B2_QEMP >= 0 THEN B2_QEMP ELSE 0 END) + SUM(CASE WHEN B2_RESERVA >= 0 THEN B2_RESERVA ELSE 0 END) + SUM(CASE WHEN B2_QPEDVEN >= 0 THEN B2_QPEDVEN ELSE 0 END) EMPENHO " //adicionado reserva 07.02.20 - Lucilene
  985. cQry+= "From "+RetSqlName("SB2")+" SB2 "
  986. cQry+= "Where B2_FILIAL = '"+xFilial("SB2")+"' And B2_COD = '"+SCK->CK_PRODUTO+"' And SB2.D_E_L_E_T_ = ' ' "
  987. If !Empty(cArmazem)
  988. cQry+= "AND B2_LOCAL in ("+cArmazem+") "
  989. Endif
  990. cQry+= "UNION ALL "
  991. cQry+= "Select 0 EST , SUM(CK_QTDVEN) EMPENHO "
  992. cQry+= "From "+RetSqlName("SCJ")+" SCJ, "+RetSqlName("SCK")+" SCK "
  993. cQry+= "Where CJ_FILIAL = '"+xFilial("SB2")+"' AND CJ_XTPORC = '1' AND CJ_STATUS = 'A' AND SCJ.D_E_L_E_T_ = ' ' "
  994. cQry+= "and CK_FILIAL = CJ_FILIAL AND CK_NUM = CJ_NUM AND CK_PRODUTO = '"+SCK->CK_PRODUTO+"' and SCK.D_E_L_E_T_ = ' ' "
  995. If !Empty(cArmazem)
  996. cQry+= "AND CK_LOCAL in ("+cArmazem+") "
  997. Endif
  998. cQry+= ")"
  999. cQry+= "SELECT SUM(EST) -SUM(EMPENHO) SALDO FROM QRY "
  1000. If Select("QRS") > 0
  1001. QRS->(dbCloseArea())
  1002. Endif
  1003. APWExOpenQuery(cQry,'QRS',.T.)
  1004. Return cvaltochar(QRS->SALDO)