;** TrocaIt ********************************************************************
;* Substituicao de Item nas Formulas                                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 13/11/2003 por Anivel Augusto Rodrigues
;Ultima Alteracao: 09/06/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado filtro por Familia e Marca
;Ultima Alteracao: 21/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.  
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()                  
;Ultima Alteracao: 03/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao ajustar preco por porcentagem

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()
ClearAll

Formula_Aterada=False

CoEdit "FormulaC"
PickForm "1"
NR = NRecords("FormulaC")
Scan
  
  Barra(NR, RecNo())
  Aguarde("Aguarde, Processando "+BARRA_STRING)

  If not IsBlank(VSDGITEM) And
     [Codigo do Produto]<>VSDGITEM
     Then Loop
  EndIf

  If not IsBlank(VSDGCORTECIDO) And
     [Codigo Cor_Tecido]<>VSDGCORTECIDO
     Then Loop
  EndIf

  If not IsBlank(VSDGTAMANHO) And
     [Tamanho]<>VSDGTAMANHO
     Then Loop
  EndIf
  
  If not IsBlank(VSDGFAMI) Or not IsBlank(VSDGMARCA)
     Then GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Produto] To REG_ITEM
          If RetVal
             Then FAMILIA = REG_ITEM["Codigo da Familia"]
                  MARCA   = REG_ITEM["Codigo da Marca"  ]
             Else FAMILIA = ""
                  MARCA   = ""
          EndIf 
          
          If not IsBlank(VSDGFAMI) And VSDGFAMI<>FAMILIA
             Then Loop
          EndIf
          
          If not IsBlank(VSDGMARCA) And VSDGMARCA<>MARCA
             Then Loop
          EndIf
  EndIf         

  Atualiza_Custo=False
  Moveto "FormulaI"
  Scan
    If [Codigo do Material]=VSDGITEM1
      Then
           Formula_Aterada=True

           If VSDGOPCAO[1]=True 
              Then [Codigo do Material]=VSDGITEM2
                   [Lookup_Material   ]=VSDGITEM2
                   [Lookup_Material   ]=""                         
           EndIf
           If VSDGOPCAO[2]=True
              Then [Quantidade                ]=VSDGQUANTIDADE
                   Atualiza_Custo=True
           EndIf
           If VSDGOPCAO[3]=True
              Then [Valor Unitario            ]=VSDGPRECO_UNITARIO
                   Atualiza_Custo=True
           EndIf
           If VSDGOPCAO[4]=True
              Then [Valor Unitario            ]=NDecimal(([Valor Unitario]+(([Valor Unitario]*VSDGPORC1_UNITARIO)/100)),5)
                   Atualiza_Custo=True
           EndIf
    EndIf
  EndScan

  If Atualiza_Custo
     Then Custo()
  EndIf

  Moveto "FormulaC"
EndScan
Do_It!
ClearAll

If Not Formula_Aterada
   Then Mensagem("Item a substituir n„o encontrado em formulas !")
EndIf

EndProc ; (Seleciona)

;*******************************************************************************
;* Calculo Custo                                                               *
;*******************************************************************************
Proc CUSTO()
CUSTO=0
CFP  =0
Scan For Not IsBlank([Codigo do Material])
  Switch
    Case SYS_CODIGO_CLIENTE="0102":
         If [Codigo do Material]="0000001437"
            Then CFP=[Quantidade]
                 Loop
         EndIf
  EndSwitch

  If [Quantidade]>0
     Then CUSTO=CUSTO+([Quantidade]*[Valor Unitario])
     Else CUSTO=CUSTO+[Valor Unitario]
  EndIf
EndScan
Moveto "FormulaC"

Switch
  Case SYS_CODIGO_CLIENTE="0102":
       CUSTO=NDecimal(CUSTO+((CUSTO*CFP)/100),5)
EndSwitch

[Custo Total]=Round(CUSTO,2)
[Custo Unitario]=NDecimal([Custo Total]/[Quantidade Produzida],5)
[Preco de Venda_Calculado]=NDecimal([Custo Unitario]+(([Custo Unitario]*[Indice Preco de Venda])/100),2)
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_ITEM"           : Campo="NO"
            Case Campo="TG_FAMI"           : Campo="TG_ITEM"
            Case Campo="TG_MARCA"          : Campo="TG_FAMI"
            Case Campo="TG_COR_TECIDO"     : Campo="TG_MARCA"
            Case Campo="TG_TAMANHO"        : Campo="TG_COR_TECIDO"
            Case Campo="TG_ITEM1"          : Campo="TG_TAMANHO"
            Case Campo="TG_OPCOES"         : Campo="TG_ITEM1"
            Case Campo="TG_ITEM2"          Or
                 Campo="TG_QUANTIDADE"     Or
                 Campo="TG_PRECO_UNITARIO" Or
                 Campo="TG_PORC1_UNITARIO" : Campo="TG_OPCOES"
            Case Campo="YES" Or Campo="NO" : Campo="TG_ITEM"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_ITEM"           : Campo="TG_FAMI"
                    Case Campo="TG_FAMI"           : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"          : Campo="TG_COR_TECIDO"
                    Case Campo="TG_COR_TECIDO"     : Campo="TG_TAMANHO"
                    Case Campo="TG_TAMANHO"        : Campo="TG_ITEM1"
                         VSDGTAMANHO       =ControlValue("TG_TAMANHO")
                    Case Campo="TG_ITEM1"          : Campo="TG_OPCOES"
                    
                    Case Campo="TG_OPCOES"         : Proximo_Campo(0)
                    
                    Case Campo="TG_ITEM2"          : Proximo_Campo(1)
                    
                    Case Campo="TG_QUANTIDADE"     : Proximo_Campo(2)
                         VSDGQUANTIDADE    =ControlValue("TG_QUANTIDADE")
                         
                    Case Campo="TG_PRECO_UNITARIO" : Proximo_Campo(3)
                         VSDGPRECO_UNITARIO=ControlValue("TG_PRECO_UNITARIO")
                         
                    Case Campo="TG_PORC1_UNITARIO" : Proximo_Campo(4)
                         VSDGPORC1_UNITARIO=ControlValue("TG_PORC1_UNITARIO")
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo=""                 : MSG_CAMPO=""
  Case Campo="TG_ITEM"          : MSG_CAMPO="Informe o Produto da F˘rmula"
  Case Campo="TG_COR_TECIDO"    : MSG_CAMPO="Informe a Cor/Tecido da F˘rmula"
  Case Campo="TG_TAMANHO"       : MSG_CAMPO="Informe o Tamanho da F˘rmula"
  Case Campo="TG_ITEM1"         : MSG_CAMPO="Informe o Material da Formula‡„o"

  Case Campo="TG_ITEM2"         : MSG_CAMPO="Informe o novo valor do Material na Formula‡„o"
  Case Campo="TG_QUANTIDADE"    : MSG_CAMPO="Informe o novo valor da Quantidade na Formula‡„o"
  Case Campo="TG_PRECO_UNITARIO": MSG_CAMPO="Informe o novo valor do Pre‡o Unit rio na Formula‡„o"
  Case Campo="TG_PORC1_UNITARIO": MSG_CAMPO="Informe % '+' ou '-' no Valor do Pre‡o Unit rio na Formula‡„o"

  Case Campo="TG_OPCOES":
       MensagemCheckBoxes()
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Proximo Campo                                                               *
;*******************************************************************************
Proc Proximo_Campo(num)
Private num

While num<=4

  If num=4 or
     VSDGOPCAO[num+1]=True
     Then num=num+1
          QuitLoop
  EndIf

  num=num+1
EndWhile

Switch
  Case num=1 : Campo="TG_ITEM2"
  Case num=2 : Campo="TG_QUANTIDADE"
  Case num=3 : Campo="TG_PRECO_UNITARIO"
  Case num=4 : Campo="TG_PORC1_UNITARIO"
  Case num=5 : Campo="YES"
EndSwitch

If VSDGOPCAO[1]=False Then VSDGITEM2         =""
                           VSDGNOMITEM2      =""         EndIf
If VSDGOPCAO[2]=False Then VSDGQUANTIDADE    =BlankNum() EndIf
If VSDGOPCAO[3]=False Then VSDGPRECO_UNITARIO=BlankNum() EndIf
If VSDGOPCAO[4]=False Then VSDGPORC1_UNITARIO=BlankNum() EndIf

EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()

If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf

COR_MENSAGEM="1"
MSG="- Antes de efetuar esta opera‡„o de altera‡„o de dados,     //"
MSG=MSG+"  recomendamos que seja feito um backup do sistema.         //"
MSG=MSG+"- Caso a altera‡„o de dados fique errada ‚ possˇvel retornar//"
MSG=MSG+"  aos valores anteriores com a restaura‡„o do backup.       //"
MSG=MSG+"- Recomendamos tamb‚m que durante este processo ningu‚m     //"
MSG=MSG+"  esteja usando o sistema.                                  //"
Mensagem(MSG)

VSDGITEM     = ""
VSDGITEM1    = ""
VSDGITEM2    = ""
VSDGTAMANHO  = ""
VSDGCORTECIDO= ""
VSDGFAMI     = ""
VSDGNOMFAMI  = ""
VSDGMARCA    = ""
VSDGNOMMARCA = ""

VSDGQUANTIDADE    =BlankNum()
VSDGPRECO_UNITARIO=BlankNum()
VSDGPORC1_UNITARIO=BlankNum()

Array VSDGOPCAO[4]

If Checa_Supervisor()
   Then Supervisor_OK=True
   Else Supervisor_OK=False
EndIf

While Supervisor_OK

 ShowDialog "Substitui‡„o de valores nas formula‡”es" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
  @ 04,10   Height 22 Width 80

    Frame Single From 00,00 to 16,34
    @ 00,06 ?? " Sele‡„o da F˘rmula "

    Label  @ 01,01 "Item"  For "TG_ITEM"
    Accept @ 02,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 03,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM
    
    Label  @ 04,01 "Familia"  For "TG_FAMI"
    Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI"    To VSDGFAMI
    Accept @ 05,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI
   
    Label  @ 06,01 "Marca"  For "TG_MARCA"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 07,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 08,01 "Cor/Tecido" For "TG_COR_TECIDO"
    Accept @ 09,01 Width 07 "A4"  Picture "#*#" Tag "TG_COR_TECIDO"    To VSDGCORTECIDO
    Accept @ 09,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMCOR_TECIDO" To VSDGNOMCORTECIDO

    Label  @ 10,01 "Tamanho" For "TG_TAMANHO"
    Accept @ 11,01 Width 07 "A2"  Picture "!*!" Tag "TG_TAMANHO"    To VSDGTAMANHO

    Label  @ 13,01 "Item da F˘rmula"  For "TG_ITEM1"
    Accept @ 14,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM1"    To VSDGITEM1
    Accept @ 15,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM1" To VSDGNOMITEM1


    Frame Single From 00,35 to 16,69
    Label  @ 00,38 "Novos valores a substituir " For "TG_OPCOES"
    CheckBoxes @01,36 Height 4 Width 30 Tag "TG_OPCOES"
    "Item      " to VSDGOPCAO[1],
    "Quantidade" to VSDGOPCAO[2],
    "Pre‡o     " to VSDGOPCAO[3],
    "% no Pre‡o" to VSDGOPCAO[4]

    Label  @ 06,36 "Material.."  For "TG_ITEM2"
    Accept @ 07,36 Width 33 "A10" Picture "#*#" Tag "TG_ITEM2"    To VSDGITEM2
    Accept @ 08,36 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM2" To VSDGNOMITEM2

    Label  @ 09,36 "Quantidade" For "TG_QUANTIDADE"
    Accept @ 10,36 Width 13 "N" picture "#*#.[######]" Tag "TG_QUANTIDADE" to VSDGQUANTIDADE
   
    Label  @ 11,36 "Vr.Unit rio" For "TG_PRECO_UNITARIO"
    Accept @ 12,36 Width 13 "N" picture "#*#.[####]" Tag "TG_PRECO_UNITARIO" to VSDGPRECO_UNITARIO

    Label  @ 13,36 "% no Vr.Unit rio" For "TG_PORC1_UNITARIO"
    Accept @ 14,36 Width 13 "N"                      Tag "TG_PORC1_UNITARIO" to VSDGPORC1_UNITARIO

    Pushbutton @ 18,22 width 11 "~O~k"      OK     Default Value "Ok"  Tag "YES" To BottonValue
    Pushbutton @ 18,36 width 11 "~C~ancela" CANCEL                     Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGITEM1)
     Then MENSAGEM("O material da formula‡„o n„o pode estar em branco !")
          Loop
  EndIf

  ConfGeral("Confirma realmente a troca dos valores ?")
  If OK<>"S"
     Then Loop
  EndIf


  AGUARDE("Aguarde, processando")

  SELECIONA()

  Mensagem("Opera‡„o Finalizada !")

EndWhile
ClearAll
Release Vars All
Release Procs All

