LC_PE_A415TDOK.PRW 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. //--------------------------------------------------------------------------------------
  2. // Ponto de Entrada: A415TDOK - Valida o Orçamento antes de Gravar.
  3. // Solicitante: Rodrigo / Comercial.
  4. // Autor: Aytel M. Fonseca.
  5. // Data: 06-08-2014
  6. // Data Alteração: PILATTI - Incluída pergunta sobre o valor do frete, pois para SEDEX é
  7. // necessário permitir a inclusão do valor, nesses caso pergunto e caso a resposta seja
  8. // positiva, desconsidero o cálculo de frete mínimo.
  9. //--------------------------------------------------------------------------------------
  10. #include "protheus.ch"
  11. #include "rwmake.ch"
  12. #include "TOTVS.CH"
  13. #include "topconn.ch"
  14. User Function A415TDOK()
  15. Local aArea := GetArea()
  16. Local lRet := .T.
  17. Local cTotOrcTab := 0
  18. Local cDscVista := 0
  19. Local cMsLumEspL := ""
  20. Local cMsLumEspT := ""
  21. Private cTotOrc := 0
  22. Private Gravou := .F.
  23. Private cCusto := 0
  24. Private cAliqIPI := 0
  25. Private cICMS := 0
  26. Private cSubsTrb := 0
  27. Private cSubsCus := 0
  28. Private cPIS := 0
  29. Private cCofins := 0
  30. Private cComissao := 0
  31. Private cComis1, cComis2
  32. Private cFrete := 0
  33. Private cRT := 0
  34. Private cIPI := 0
  35. Private cST := 0
  36. Private cPerST := 0
  37. Private cGrupoTri := 0
  38. Private cINSSP := 0
  39. Private cRecLiq := 0
  40. Private cMC := 0
  41. Private cMensagem := ""
  42. /* TMP1->(dbGoTop())
  43. While TMP1->(!EOF())
  44. If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado)
  45. TMP1->(dbSkip())
  46. Loop
  47. EndIf
  48. If Trim(POSICIONE("SB1",1,xFilial("SB1")+Trim(TMP1->CK_PRODUTO),"B1_GRUPO")) == 'PAN'
  49. IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) <> 0 .AND. TMP1->CK_DESCACM > 0 // Alterado em 15.03.22 p/ permitir desconto negativo (Acrescimo) - Gabrielle e Rodrigo.
  50. // .AND. M->CJ_CONDPAG <> 'A49'
  51. MsgStop("Desconto permitido apenas para quantdades multiplos de 6.", "Produto Grupo PAN - Ajsutes Necessarios.")
  52. lRet := .F.
  53. ENDIF
  54. ENDIF
  55. TMP1->(dbSkip())
  56. EndDo
  57. If !lRet
  58. Return(.F.)
  59. EndIf
  60. TMP1->(dbGoTop())
  61. While TMP1->(!EOF())
  62. If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado)
  63. TMP1->(dbSkip())
  64. Loop
  65. EndIf
  66. If Trim(POSICIONE("SB1",1,xFilial("SB1")+Trim(TMP1->CK_PRODUTO),"B1_GRUPO")) == 'PAN'
  67. /* If M->CJ_CONDPAG = 'A49'
  68. IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) = 0 .AND. TMP1->CK_DESCACM > 6.5
  69. MsgStop("Produto Grupo PAN com Pagto. A Vista - Desconto máximo permitido de 6.5 % ", "Ajsutes Necessarios.")
  70. lRet := .F.
  71. ENDIF
  72. Else
  73. IF Int(TMP1->CK_QTDVEN / 6) - (TMP1->CK_QTDVEN / 6) = 0 .AND. TMP1->CK_DESCACM > 5
  74. MsgStop("Produto Grupo PAN - Desconto máximo permitido de 5 % ", "Ajsutes Necessarios.")
  75. lRet := .F.
  76. ENDIF
  77. // ENDIF
  78. ENDIF
  79. TMP1->(dbSkip())
  80. EndDo
  81. If !lRet
  82. Return(.F.)
  83. EndIf */
  84. // CHAMADO RODRIGO
  85. //E4_FILIAL+E4_CODIGO
  86. If Posicione("SE4",1,xFilial('SE4')+ M->CJ_CONDPAG, "E4_MSBLQL")=='1' .and. !isblind()
  87. MsgStop("A codição de pagamento " + M->CJ_CONDPAG + " esta bloqueada, por favor verifique. ","ATENÇÃO")
  88. Return()
  89. EndIf
  90. //----------------------------------
  91. // Validações Comerciais Engenharia.
  92. //----------------------------------
  93. // If cFilAnt = '01'
  94. If Vazio(M->CJ_NROPOR) .and. !isblind()
  95. MsgStop("Não foi informado o código da oportunidade. Aba cadastrais.","Erro.")
  96. RestArea(aArea)
  97. Return(.F.)
  98. EndIf
  99. // Chamado 000051
  100. If !Vazio(M->CJ_CODPERD).AND.Vazio(M->CJ_CDCONCO) .and. !isblind()
  101. MsgStop("O cód. da perda está preenchido portanto, o campo concorrente deve ser preenchido.","Atenção")
  102. RestArea(aArea)
  103. Return(.F.)
  104. EndIf
  105. If M->CJ_LUMINOT = '1' .AND. Vazio(M->CJ_REGLUMI) .and. !isblind()
  106. MsgStop("Foi informado que houve Estudo Luminotécnico, mas não foi"+Chr(13)+"informado o numero do Registro.","Erro !!!")
  107. RestArea(aArea)
  108. Return(.F.)
  109. EndIf
  110. If M->CJ_LUMINOT <> '1' .AND. !Vazio(M->CJ_REGLUMI) .and. !isblind()
  111. MsgStop("Foi informado o Registro do Estudo Luminotécnico, mas não houve o Estudo.","Erro !!!")
  112. RestArea(aArea)
  113. Return(.F.)
  114. EndIf
  115. If ALTERA .AND. aRotina[3][2] <> 'A415Copia'
  116. If Select("QRY") > 0
  117. dbSelectArea("QRY")
  118. dbCloseArea("QRY")
  119. Endif
  120. cQuery := "SELECT * FROM SZW010 WHERE D_E_L_E_T_ = ' ' AND ZW_FILIAL = '" + xFilial("SCJ") + "' AND ZW_ORCAMEN = '" + M->CJ_NUM + "' AND ZW_DATA = '" + DToS(DDATABASE) + "' "
  121. TcQuery cQuery New Alias "QRY"
  122. If QRY->(EOF()) .and. !isblind()
  123. MsgStop("Não foi encontrado nenhum registro no cadastro da Etapa de Negociação.","Erro.")
  124. RestArea(aArea)
  125. Return(.F.)
  126. EndIf
  127. If Vazio(M->CJ_CLIINTE) .and. !isblind()
  128. MsgStop("Não foi informado o Cliente de Intermediação. Aba Etapas da Negociação.","Erro.")
  129. RestArea(aArea)
  130. Return(.F.)
  131. EndIf
  132. EndIf
  133. // Política de Descontos.
  134. TMP1->(dbGoTop())
  135. While TMP1->(!EOF())
  136. If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado)
  137. TMP1->(dbSkip())
  138. Loop
  139. EndIf
  140. cTotOrc := cTotOrc + TMP1->CK_VALOR
  141. cTotOrcTab := cTotOrcTab + (TMP1->CK_PRTAB * TMP1->CK_QTDVEN)
  142. TMP1->(dbSkip())
  143. EndDo
  144. cDscConc := Round(((((Round(cTotOrc,2)/NoRound(cTotOrcTab,2))*100)-100)*-1),2)
  145. If ABS(Round(cDscConc,2)) <= 0.02
  146. cDscConc := 0
  147. EndIf
  148. If Select("QRY") > 0
  149. dbSelectArea("QRY")
  150. dbCloseArea("QRY")
  151. Endif
  152. cQuery := "SELECT ZA_PERCDES, ZA_PEDESAV FROM " + RetSQLName("SZA") + " WHERE "
  153. cQuery += "ZA_FILIAL = '" + xFilial("SZA") + "' AND ZA_DE <= " + Str(cTotOrcTab) + " AND ZA_ATE >= " + Str(cTotOrcTab) + " AND D_E_L_E_T_ = ' ' "
  154. TcQuery cQuery New Alias "QRY"
  155. If CJ_CONDPAG == '001' .OR. CJ_CONDPAG == '500'
  156. cDscVista := QRY->ZA_PEDESAV
  157. EndIf
  158. If Round(cDscConc,2) > (QRY->ZA_PERCDES + CJ_DSDIRET + cDscVista) .and. !isblind()
  159. lRet := .F.
  160. MsgStop("Orçamento excedeu a Política de Descontos." + Chr(13) + "Entre em contato com a Supervisão ou Diretoria." + Chr(13) + Chr(13)+;
  161. "Dsc.Concedido: " + Transform(cDscConc,"@R 999.99") + " %" + Chr(13) + "Dsc.Máximo Permitido:" +;
  162. Transform((QRY->ZA_PERCDES + CJ_DSDIRET + cDscVista),"@R 999.99") + " %" + Chr(13) + Chr(13)+;
  163. "Orçamento Pr.Tabela: R$ " + Transform(Round(cTotOrcTab,2),"@R 9,999,999.99") ,"Política de Descontos")
  164. EndIf
  165. // Frete.
  166. // CJ_FRETE := 0 Pilatti - 26/03/2015 -
  167. // If cTotOrcTab <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ") // Alterado em 17.03.2015 - Katiane.
  168. If (CJ_TPFRETE = 'F' .OR. CJ_TPFRETE = 'T' .OR. CJ_TPFRETE = 'S')
  169. CJ_FRETE := 0
  170. Else
  171. If CJ_FRETE > 0
  172. If MsgYesNo("*** ATENÇÃO *** " + Chr(13) + Chr(13) + "Foi informado um valor de FRETE diferente do frete mínimo calculado pelo sistema, CONFIRMA ?")
  173. CJ_FRETE := CJ_FRETE
  174. Else
  175. If cTotOrc <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ")
  176. If Select("QRY") > 0
  177. dbSelectArea("QRY")
  178. dbCloseArea("QRY")
  179. Endif
  180. cQuery := "SELECT * FROM " + RetSQLName("SZ3") + " WHERE "
  181. // cQuery += "Z3_FILIAL = '" + xFilial("SZ3") + "' AND D_E_L_E_T_ = ' ' AND "
  182. cQuery += "D_E_L_E_T_ = ' ' AND "
  183. cQuery += "Z3_UF = '" + Substr(CJ_UFEnt,1,2) + "' ORDER BY Z3_MUNICIP"
  184. TcQuery cQuery New Alias "QRY"
  185. CJ_FRETE := QRY->Z3_VLFRMIN
  186. While QRY->(!EOF())
  187. If Trim(QRY->Z3_MUNICIP) == Substr(CJ_UFEnt,3,5)
  188. CJ_FRETE := QRY->Z3_VLFRMIN
  189. EndIf
  190. QRY->(DbSkip())
  191. EndDo
  192. Else
  193. CJ_FRETE := 0
  194. EndIf
  195. EndIf
  196. Else
  197. If cTotOrc <= GETMV("MV_FRETMIN",,.F.) .AND. (CJ_TPFRETE == "C" .OR. CJ_TPFRETE == " ")
  198. If Select("QRY") > 0
  199. dbSelectArea("QRY")
  200. dbCloseArea("QRY")
  201. Endif
  202. cQuery := "SELECT * FROM " + RetSQLName("SZ3") + " WHERE "
  203. // cQuery += "Z3_FILIAL = '" + xFilial("SZ3") + "' AND D_E_L_E_T_ = ' ' AND "
  204. cQuery += "D_E_L_E_T_ = ' ' AND "
  205. cQuery += "Z3_UF = '" + Substr(CJ_UFEnt,1,2) + "' ORDER BY Z3_MUNICIP"
  206. TcQuery cQuery New Alias "QRY"
  207. CJ_FRETE := QRY->Z3_VLFRMIN
  208. While QRY->(!EOF())
  209. If Trim(QRY->Z3_MUNICIP) == Substr(CJ_UFEnt,3,5)
  210. CJ_FRETE := QRY->Z3_VLFRMIN
  211. EndIf
  212. QRY->(DbSkip())
  213. EndDo
  214. Else
  215. CJ_FRETE := 0
  216. EndIf
  217. EndIf
  218. EndIf
  219. // EndIf
  220. // Pergunta se o cliente é contribuinte do ICMS - Sim ou Não.
  221. // Atualiza SA1 - Solicitante: Rodrigo Wilges em 30-11-2015.
  222. // Autor: Aytel M. Fonseca.
  223. // Retirado em 09.10.2020 Solicitação Marcelo.
  224. /* If lRet .AND. INCLUI
  225. MontaTela()
  226. If Gravou = .F.
  227. MontaTela()
  228. EndIf
  229. EndIf */
  230. // If cFilAnt == '01' .AND. INCLUI
  231. // Envia e-Mail para supervisoras dos clientes que ficaram ativos.
  232. If (DToS(SA1->A1_ULTORCA) = ' ' .OR. (DDATABASE-SA1->A1_ULTORCA) > 365)
  233. EmailAtiv()
  234. EndIf
  235. // Grava data do último orçamento.
  236. RecLock("SA1",.F.)
  237. SA1->A1_ULTORCA:= DDATABASE
  238. MsUnlock()
  239. // EndIf
  240. /* If cFilAnt = '05'
  241. If Select("QRY") > 0
  242. dbSelectArea("QRY")
  243. dbCloseArea("QRY")
  244. Endif
  245. cQuery := "SELECT * FROM SUC010 WHERE D_E_L_E_T_ = ' ' AND UC_CODIGO = '" + M->CJ_ATENDIM + "' AND UC_ENTIDAD = 'SA1' AND UC_CHAVE = '" + M->CJ_CLIENTE + M->CJ_LOJA + "'"
  246. TcQuery cQuery New Alias "QRY"
  247. If QRY->(EOF())
  248. MsgStop("O atendimento selecionado não é para o mesmo cliente do orçamento.","Validação do Atendimento.")
  249. RestArea(aArea)
  250. Return(.F.)
  251. EndIf
  252. EndIf */
  253. // Testa a Validade do Custo das Luminarias Especiais. 08/10/2018.
  254. TMP1->(dbGoTop())
  255. While TMP1->(!EOF())
  256. If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado)
  257. TMP1->(dbSkip())
  258. Loop
  259. EndIf
  260. If Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PE" .OR.;
  261. Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PEL" .OR.;
  262. Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PED" .OR.;
  263. Trim(POSICIONE("SB1",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B1_GRUPO")) == "PI"
  264. If (POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP")+30) < dDataBase
  265. cMsLumEspL += "<tr><td>" + TMP1->CK_ITEM + "</td>"
  266. cMsLumEspL += "<td>" + TMP1->CK_PRODUTO + "</td>"
  267. cMsLumEspL += "<td>" + TMP1->CK_DESCRI + "</td>"
  268. cMsLumEspL += "<td>" + DToC(POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP"))+" "+;
  269. Str(dDatabase - POSICIONE("SB5",1,"01"+TMP1->CK_PRODUTO,"B5_DTVLESP"))+" dias"+"</td>"
  270. cMsLumEspL += "<td>" + Transform(TMP1->CK_QTDVEN,"@E 99999.99") + "</td></tr>"
  271. EndIf
  272. EndIf
  273. TMP1->(dbSkip())
  274. EndDo
  275. If cMsLumEspL <> ""
  276. cMsLumEspT += IIf(cFilAnt = '01',"Engenharia - "+Trim(cUserName),"Abalux - "+Trim(cUserName))+Chr(13)+Chr(14)
  277. cMsLumEspT += "Cliente: "+Trim(M->CJ_CLIENTE)+" - "+Trim(M->CJ_YNOMCLI)+Chr(13)+Chr(14)
  278. cMsLumEspT += "Obra: "+Trim(M->CJ_OBRA)+Chr(13)+Chr(14)
  279. cMsLumEspT += "<table border='1' cellpadding='5' width='100%'><strong><tr><td>Item</td><td>Produto</td><td>Descrição</td></td><td>Atualização do custo em</td><td>Qtde.</td></tr></strong>"
  280. If MsgYesNo("Existem códigos especiais com preços desatualizados."+Chr(13)+Chr(13)+"Deseja enviar e-Mail solicitando atualização ?","** Atenção **")
  281. U_EnvMail("jucelene-sjp@lumicenter.com;victor.pires@lumicenter.com;gustavo-sjp@lumicenter.com",UsrRetMail(__cUserId),"","e-Mail Automático. Atualização de preço - Luminárias especiais. Orçamento: "+M->CJ_NUM+"",cMsLumEspT+cMsLumEspL,"")
  282. EndIf
  283. cMsLumEspL := ""
  284. cMsLumEspT := ""
  285. EndIf
  286. Calc_MC()
  287. RestArea(aArea)
  288. // Desabilita Funções
  289. SetKey(K_ALT_K, Nil)
  290. SetKey(K_ALT_L, Nil)
  291. Return(lRet)
  292. /*Static Function MontaTela()
  293. Local aOptions :={"Sim","Não"}
  294. Local oRadio := 1
  295. Private nRadio := IIf(SA1->A1_CONTRIB = '1' .OR. SA1->A1_CONTRIB = ' ',1,2) // 1=Sim 2=Nao
  296. Private oFont1 := TFont():New("Calibri",,020,,.T.,,,,,.F.,.F.)
  297. Private oButton1
  298. Private oSay1
  299. Private oDlg
  300. DEFINE MSDIALOG oDlg TITLE "Cliente Contribuinte do ICMS" FROM 000,000 TO 140,330 COLORS 0,16777215 PIXEL
  301. oRadio:= tRadMenu():New(25,08,aOptions,{|u|if(PCount()>0,nRadio:=u,nRadio)},oDlg,,,,,,,,100,20,,,,.T.)
  302. @ 010,005 SAY oSay1 PROMPT "O cliente é contribuinte do ICMS ?" SIZE 150,012 OF oDlg COLORS 0,16777215 FONT oFont1 PIXEL
  303. @ 050,115 BUTTON oButton1 PROMPT "Confirmar" SIZE 040,012 ACTION GravaA1() OF oDlg PIXEL
  304. ACTIVATE MSDIALOG oDlg CENTERED
  305. Return()
  306. Static Function GravaA1()
  307. RecLock("SA1",.F.)
  308. SA1->A1_CONTRIB := IIf(nRadio = 1,'1','2')
  309. MsUnlock()
  310. Gravou := .T.
  311. oDlg:END()
  312. Return()*/
  313. Static Function Calc_MC()
  314. TMP1->(dbGoTop())
  315. While TMP1->(!EOF())
  316. If TMP1->CK_FLAG = .T. // Flag que testa se linha esta deletada. (.T. = Deletado)
  317. TMP1->(dbSkip())
  318. Loop
  319. EndIf
  320. // Buscar o Custo Medio ou Custo Standart, Aliquota do IPI
  321. If Select("QRY1") > 0
  322. dbSelectArea("QRY1")
  323. dbCloseArea("QRY1")
  324. Endif
  325. cQuery1 := "SELECT B1_CUSTD,B1_IPI,B1_GRTRIB, B1_TIPO, B1_GRUPO FROM " + RetSQLName("SB1") + " WHERE B1_FILIAL = '" + xFilial("SB1") + "' AND "
  326. cQuery1 += "B1_COD = '" + TMP1->CK_PRODUTO + "' AND "
  327. cQuery1 += RetSQLName("SB1") + ".D_E_L_E_T_ = ' ' "
  328. TcQuery cQuery1 New Alias "QRY1"
  329. If QRY1->B1_TIPO = 'PS' .AND. QRY1->B1_GRUPO = 'SERV'
  330. cCusto := TMP1->CK_CUSTO // * TMP1->CK_QTDVEN)
  331. Else
  332. cCusto := (QRY1->B1_CUSTD * TMP1->CK_QTDVEN)
  333. EndIf
  334. cAliqIPI := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_IPI") == "S",QRY1->B1_IPI,0)
  335. cGrupoTri := Trim(QRY1->B1_GRTRIB)
  336. // Buscar a Aliquota Externa e do Destino
  337. If Select("QRY2") > 0
  338. dbSelectArea("QRY2")
  339. dbCloseArea("QRY2")
  340. Endif
  341. cQuery2 := "SELECT * FROM "
  342. cQuery2 += RetSQLName("SF7")
  343. cQuery2 += " WHERE F7_FILIAL = '" + xFilial("SF7") + "' "
  344. cQuery2 += " AND F7_GRTRIB = '" + Trim(cGrupoTri) + "' "
  345. cQuery2 += " AND F7_EST = '" + SA1->A1_EST + "' "
  346. cQuery2 += " AND F7_TIPOCLI = '" + SA1->A1_TIPO + "' "
  347. cQuery2 += " AND F7_GRPCLI = '" + SA1->A1_GRPTRIB + "' "
  348. cQuery2 += " AND D_E_L_E_T_ = ' '"
  349. TcQuery cQuery2 New Alias "QRY2"
  350. // Carrega as Variaveis
  351. If CJ_TIPOCLI $ 'F/S'
  352. cICMS := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_ICM") == "S",(TMP1->CK_VALOR*(1+(cALIQIPI/100))*QRY2->F7_CARGICM/100),0)
  353. If POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_TIPO") == "PS" .AND.;
  354. POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_GRUPO") == "SERV"
  355. cICMS := ((TMP1->CK_VALOR * POSICIONE("SB1",1,xFilial("SB1")+TMP1->CK_PRODUTO,"B1_ALIQISS"))/100)
  356. EndIf
  357. Else
  358. cICMS := IIF(POSICIONE("SF4",1,xFilial("SF4")+TMP1->CK_TES,"F4_ICM") == "S",((TMP1->CK_VALOR * QRY2->F7_CARGICM)/100),0)
  359. EndIf
  360. cPIS := ((TMP1->CK_VALOR * 1.65)/100)
  361. cCofins := ((TMP1->CK_VALOR * 7.60)/100)
  362. // Testa se tem Subsido Tributario.
  363. cSubsTrb := 0
  364. If POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSTRB") > 0
  365. cSubsTrb := ((cICMS * 0.80) * POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSTRB"))
  366. Endif
  367. // Testa se tem Subsido no Custo.
  368. cSubsCus := 0
  369. If POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSCUS") > 0
  370. cSubsCus := (cCusto * POSICIONE("SB5",1,xFilial("SCJ")+TMP1->CK_PRODUTO,"B5_SUBSCUS"))
  371. Endif
  372. cComis2 := 0
  373. cComis3 := 0
  374. If !Vazio(CJ_VEND)
  375. cComis2 := TMP1->CK_COMIS1
  376. EndIf
  377. If !Vazio(CJ_VEND3)
  378. cComis3 := TMP1->CK_COMIS3
  379. EndIf
  380. If cFilAnt = '05' .AND. CJ_VEND = '00143'
  381. cComissao := (TMP1->CK_VALOR * 0.05) // Alterado para 5 em 21-02-2018 - Dr. Chen
  382. Else
  383. cComissao := ((TMP1->CK_VALOR * (cComis2 + cComis3))/100)
  384. EndIf
  385. cRT := (((TMP1->CK_VALOR * CJ_COMISTR)/100)*0.60)
  386. cIPI := IIF(Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_IPI")=='S',((TMP1->CK_VALOR * cALIQIPI)/100),0)
  387. // If Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPCMP") == "2" // Comentado para que as usuarios do comercial possam usar o campo %ST para informa o valor ao cliente.
  388. If Select("QRY5") > 0
  389. dbSelectArea("QRY5")
  390. dbCloseArea("QRY5")
  391. Endif
  392. cQuery5 := "SELECT CFC_ALQFCP FROM CFC010 WHERE CFC_FILIAL = '" + xFilial("SCK") + "' AND CFC_UFDEST = '" + QRY2->F7_EST + "' AND D_E_L_E_T_ = ' ' "
  393. TcQuery cQuery5 New Alias "QRY5"
  394. cFCP := QRY5->CFC_ALQFCP
  395. If (CJ_TPFRETE = 'F' .OR. CJ_TPFRETE = 'T' .OR. CJ_TPFRETE = 'S')
  396. CJ_FRETE := 0
  397. Else
  398. cFrete := ((((TMP1->CK_VALOR + cIPI) * (3 + CJ_PERCFRT))/100)*0.60)
  399. EndIf
  400. // Calculo da ST
  401. /* If M->CJ_FRETE > 0
  402. If Select("QRY_FRT") > 0
  403. dbSelectArea("QRY_FRT")
  404. dbCloseArea("QRY_FRT")
  405. Endif
  406. cQuery := "SELECT SUM(CK_VALOR) TotMer FROM SCK010 WHERE D_E_L_E_T_ = ' ' AND CK_FILIAL = '" + xFilial("SCJ") + "' AND CK_NUM = '" + CJ_NUM + "' "
  407. TcQuery cQuery New Alias "QRY_FRT"
  408. EndIf*/
  409. CalcST()
  410. /* If QRY2->F7_MARGEM > 0
  411. If QRY2->F7_EST = 'PR'
  412. cST := (((((TMP1->CK_VALOR + cIPI)*QRY2->F7_MARGEM)/100) + (TMP1->CK_VALOR + cIPI)) * ((QRY2->F7_ALIQDST)/100) - (TMP1->CK_VALOR * (QRY2->F7_ALIQINT/100)))
  413. cPerST := ((cST / (TMP1->CK_VALOR + cIPI))*100)
  414. Else
  415. cST := (((((TMP1->CK_VALOR + cIPI)*QRY2->F7_MARGEM)/100) + (TMP1->CK_VALOR + cIPI)) * (((QRY2->F7_ALIQDST+cFCP))/100) - (TMP1->CK_VALOR * (QRY2->F7_ALIQEXT/100)))
  416. cPerST := ((cST / (TMP1->CK_VALOR + cIPI))*100)
  417. EndIf
  418. Else
  419. If Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPCMP") == '2' .AND. Posicione("SF4",1,xFilial('SF4')+TMP1->CK_TES,"F4_MKPSOL") == '1'
  420. CalcST()
  421. EndIf
  422. EndIf
  423. // EndIf */
  424. cINSSP := 0
  425. cRecLiq := (TMP1->CK_VALOR - cICMS - cPIS - cCofins - cINSSP)
  426. cMC := ((TMP1->CK_VALOR - cCusto - cICMS - cPIS - cCofins - cFrete - cComissao - cINSSP - cRT) + cSubsTrb + cSubsCus)
  427. TMP1->CK_CUSTO = cCusto
  428. TMP1->CK_ICMS = cICMS
  429. TMP1->CK_SUBSTRB = cSubsTrb
  430. TMP1->CK_SUBSCUS = cSubsCus
  431. TMP1->CK_PIS = cPIS
  432. TMP1->CK_COFINS = cCofins
  433. TMP1->CK_COMISSA = cComissao
  434. TMP1->CK_FRETE = cFrete
  435. TMP1->CK_RT = cRT
  436. TMP1->CK_IPI = cIPI
  437. TMP1->CK_ST = cST
  438. TMP1->CK_MCPERST = cPerST
  439. TMP1->CK_INSSP = cINSSP
  440. TMP1->CK_CARICMS = QRY2->F7_CARGICM
  441. TMP1->CK_MC = cMC
  442. TMP1->CK_MCPERC = ((cMC / TMP1->CK_VALOR) * 100)
  443. TMP1->CK_RECLIQ = cRecLiq
  444. TMP1->(dbSkip())
  445. EndDo
  446. Return()
  447. Static Function CalcST()
  448. Local cFreteVal := 0
  449. // Em Produção 09.12.2020
  450. If M->CJ_FRETE > 0
  451. // cFreteVal := ((TMP1->CK_VALOR * M->CJ_FRETE) / QRY_FRT->TotMer)
  452. cFreteVal := ((TMP1->CK_VALOR * M->CJ_FRETE) / cTotOrc)
  453. EndIf
  454. MaFisSave()
  455. MaFisEnd()
  456. //Dados do Cliente Para Calculo do Imposto.
  457. MaFisIni(M->CJ_CLIENTE,; // 1-Codigo Cliente/Fornecedor
  458. M->CJ_LOJA,; // 2-Loja do Cliente/Fornecedor
  459. "C",; // 3-C:Cliente , F:Fornecedor
  460. M->CJ_TIPOORC,; // 4-Tipo da NF
  461. M->CJ_TIPOCLI,; // 5-Tipo do Cliente/Fornecedor
  462. Nil,; // 6-Relacao de Impostos que suportados no arquivo
  463. Nil,; // 7-Tipo de complemento
  464. Nil,; // 8-Permite Incluir Impostos no Rodape .T./.F.
  465. Nil,; // 9-Alias do Cadastro de Produtos - ("SBI" P/ Front Loja)
  466. "MATA415",; // 10-Nome da rotina que esta utilizando a funcao
  467. Nil,; // 11-Tipo de documento
  468. Nil,; // 12-Especie do documento
  469. Nil) // 13- Codigo e Loja do Prospect
  470. //Calculo Substituição Tributaria
  471. MaFisAdd(Trim(TMP1->CK_PRODUTO),; // 1-Codigo do Produto
  472. TMP1->CK_TES,; // 2-Codigo do TES
  473. TMP1->CK_QTDVEN,; // 3-Quantidade
  474. Round(TMP1->CK_PRCVEN,2),; // 4-Preco Unitario
  475. 0,; // 5-Valor do Desconto
  476. "",; // 6-Numero da NF Original
  477. "",; // 7-Serie da NF Original
  478. 0,; // 8-RecNo da NF Original
  479. Round(cFreteVal,2),; // Valor do frete do item
  480. 0,; // Valor da despesa do item
  481. 0,; // Valor do seguro do item
  482. 0,; // 12-Valor do Frete Autonomo
  483. Round(TMP1->CK_VALOR,2),; // 13-Valor da Mercadoria
  484. 0) // 14-Valor da Embalagem
  485. cST := MaFisRet(1,"IT_VALSOL")
  486. cPerST := ((cST / (TMP1->CK_VALOR + cIPI + cFreteVal))*100)
  487. MaFisEnd()
  488. MaFisRestore()
  489. Return()
  490. /* Local A:= 0
  491. Local B:= 0
  492. Local C:= 0
  493. Local D:= 0
  494. Local cFreteVal := 0
  495. // Calculo criado em 16.10.2020 - Marcelo.
  496. If CJ_FRETE > 0
  497. If Select("QRY_FRT") > 0
  498. dbSelectArea("QRY_FRT")
  499. dbCloseArea("QRY_FRT")
  500. Endif
  501. cQuery := "SELECT SUM(CK_VALOR) TotMer FROM SCK010 WHERE D_E_L_E_T_ = ' ' AND CK_FILIAL = '" + xFilial("SCJ") + "' AND CK_NUM = '" + CJ_NUM + "' "
  502. TcQuery cQuery New Alias "QRY_FRT"
  503. cFreteVal := ((TMP1->CK_VALOR * CJ_FRETE) / QRY_FRT->TotMer)
  504. EndIf
  505. If Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'MG' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'MGS'
  506. A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)))
  507. B := (A / (1 - (QRY2->F7_ALIQDST / 100)))
  508. C := (B * (QRY2->F7_ALIQDST / 100))
  509. D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))
  510. cST := (C - D)
  511. ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'RS' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'RSS'
  512. A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)))
  513. B := (A / (1 - (QRY2->F7_ALIQDST / 100)))
  514. C := (B * (QRY2->F7_ALIQDST / 100))
  515. D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))
  516. cST := (C - D)
  517. ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'GO' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'GOS'
  518. A := ((TMP1->CK_VALOR + cIPI + cFreteVal) / (1 - (QRY2->F7_ALIQDST / 100)))
  519. B := ((QRY2->F7_ALIQDST - QRY2->F7_ALIQEXT) / 100)
  520. cST := (A * B)
  521. ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'BA' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'BAS'
  522. A := (TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))
  523. B := (A / (1 - (QRY2->F7_ALIQDST / 100)))
  524. C := (B * (QRY2->F7_ALIQDST / 100))
  525. cST := (C - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)))
  526. ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'RJ' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'RJS'
  527. A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)))
  528. B := (A / (1 - ((cFCP + QRY2->F7_ALIQDST) / 100)))
  529. C := (B * ((cFCP + QRY2->F7_ALIQDST) / 100))
  530. D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))
  531. cST := (C - D)
  532. ElseIf Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_EST") = 'MT' .AND. Posicione("SA1",1,xFilial("SA1")+M->CJ_CLIENTE+M->CJ_LOJA,"A1_GRPTRIB") = 'MTS'
  533. A := ((TMP1->CK_VALOR + cIPI + cFreteVal) - ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100)))
  534. B := (A / (1 - (QRY2->F7_ALIQDST / 100)))
  535. C := (B * (QRY2->F7_ALIQDST / 100))
  536. D := ((TMP1->CK_VALOR + cIPI + cFreteVal) * (QRY2->F7_ALIQEXT / 100))
  537. cST := (C - D)
  538. Else
  539. cST := ((TMP1->CK_VALOR + cIPI + cFreteVal) * ((QRY2->F7_ALIQDST - QRY2->F7_ALIQEXT) / 100))
  540. EndIf
  541. Return() */
  542. Static Function EMailAtiv()
  543. Local cMensagem := ""
  544. cMensagem += "Cliente Ativado pelo Orçamento: " + Trim(CJ_NUM) + CHR(13)+CHR(14)+CHR(13)+CHR(14)
  545. cMensagem += "Cliente: " + Trim(SA1->A1_COD)+"-"+Trim(SA1->A1_NOME) + CHR(13)+CHR(14)
  546. cMensagem += "Representante: " + Trim(CJ_VEND)+'-'+Trim(Posicione("SA3",1,xFilial('SCJ')+CJ_VEND,"A3_NOME")) + CHR(13)+CHR(14)
  547. cMensagem += "Regional: " + Trim(CJ_REGIAO)+'-'+Trim(Posicione("SA3",1,xFilial('SCJ')+CJ_REGIAO,"A3_NOME")) + CHR(13)+CHR(14)
  548. cMensagem += "Pré-Resgate: " + IIF(!Vazio(Trim(SA1->A1_USUPRER)),Trim(SA1->A1_USUPRER)+ " em: "+DToC(SA1->A1_DTPRERE),'-*-*-*-*-') + CHR(13)+CHR(14)
  549. U_EnvMail("gabrielle-sjp@lumicenter.com","tabata-sjp@lumicenter.com;regiane-sp@lumicenter.com","","e-Mail Automático. Cliente Ativado - Engenharia.",cMensagem,"") //(Destino, Com Copia, Com Copia Oculta, Titulo , Mensagem Corpo, Anexos)
  550. Return()