;** AltNumBc *******************************************************************
;*  Alteracao de Titulos com Numeracao Bancaria                                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/08/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 29/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Sort Answer
;Ultima Alteracao: 17/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: MODULO 11 Calculo pra todos Bancos
;Ultima Alteracao: 20/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: MODULO 11 Calculo pra todos Bancos
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 24/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog 
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()                  

;*******************************************************************************
;* Rotina Processa                                                             *
;*******************************************************************************
Proc Processa()

AGUARDE("Selecionando Registros")
{Ask} {Duplic} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo da Conta        ] TypeIn "~VSDGCONTA.."
Moveto [Tipo do Pagamento      ] TypeIn "~VSDGTPPAGTO.."
Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
Moveto [Saldo do Documento     ] TypeIn "> 0.01"
If Not CheckTG_OPNUMBCO[1]
   Then Moveto [Documento no Banco] TypeIn "Blank"
EndIf
Do_It!
ClearAll

If IsEmpty("Answer")
   Then LimpAguarde()
        Return
EndIf

{Tools} {Copy} {JustFamily} {Duplic} {Answer} {Replace}
ClearAll
LIMPAGUARDE()

Sort "Answer" On "Codigo da Empresa", "Tipo do Documento", "Numero do Documento"
ClearAll

CoEdit "Answer"
{TableAdd} {Duplic}
Moveto "Answer"
PickForm "8"

Moveto "Answer"
Moveto [Documento no Banco]
While True
  PAGINA("Answer","MRNS")
  If EDITAR="S"
     Then Editar()
     Else If EXCLUIR="S"
             Then If QuerExcluir("este titulo deste rela‡„o")
                     Then Del
                          Echo Normal
                          Echo Off
                     Else UnLockRecord
                  EndIf
             Else CONFGERAL("Desejar atualizar os Titulos com as novas numera‡”es ?")
                  If OK="S"
                     Then Atualizar()
                  EndIf
                  QuitLoop
          EndIf
  EndIf
  SetaPosForm()
EndWhile
Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar()
TPCALCULO=""
Home
Moveto [Documento no Banco]

While True

  TECLA= " Esc=Retornar  Del=Excluir  F9=Calcular  "

  Prompt TECLA

  Wait Field
    Message("NÆo informar o digito verificador no registro inicial !")
       Until "ESC","ENTER","DEL","FIELDVIEW","F35","UP","DOWN","PGUP","PGDN","HOME","END","DEL","RIGHT","LEFT","F9"

  Switch
  Case Retval="ESC":
       QuitLoop
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If QuerExcluir("este titulo deste rela‡„o")
          Then Del
               Echo Normal
               Echo Off
               If RecordStatus("New")
                  Then QuitLoop
               EndIf
       EndIf
  Case Retval="F9":

       Echo Normal
       Echo Off

       ShowPopup " Calculo Boleta - Modulo 11 " CENTERED
        "~1~ Bradesco I": " Ativar calculo Nosso Numero BRADESCO I " : "BRADESCO I",
        "~2~ CEF I     ": " Ativar calculo Nosso Numero CEF I      " : "CEF I",
        "~C~ancelar    ": " Cancelar a Opera‡„o                    " : "CANCELAR"
       EndMenu
        To MenuVar

       Echo Off

       If MenuVar="CANCELAR" or MenuVar="Esc"
           Then Loop
           Else OPBCO=MenuVar
       EndIf

       If IsBlank([Documento no Banco])
          Then Mensagem("N„o foi informado o numero inicial para o Titulo "+[Tipo do Documento]+"-"+[Numero do Documento])
               Loop
       EndIf
       MSG="Confirma inicializar a partir deste numero: "+[Documento no Banco]
       CONFGERAL(MSG)
       If OK="S"
          Then GeraNum()
       EndIf
  OtherWise:
       TECLAPRESS=RetVal

       If TECLAPRESS="LEFT"
          Then Loop
       EndIf
       If (TECLAPRESS="ENTER" or  TECLAPRESS="RIGHT")
          Then Down
               Moveto [Documento no Banco]
          Else KeyPress TECLAPRESS
        EndIf
        If RecordStatus("New")
           Then QuitLoop
        EndIf
  EndSwitch
EndWhile
EndProc ; (Editar)


Proc GeraNum()

Switch
  Case OPBCO="BRADESCO I" :
    If Not E_Numerico(SubStr([Documento no Banco],1,14))
       Then Mensagem([Documento no Banco]+" este numero contem outros caracteres n„o numericos !")
            Return
    EndIf
    Numbcoini=NumVal(SubStr([Documento no Banco],1,14))
  Case OPBCO="CEF I" :
    If Not E_Numerico(SubStr([Documento no Banco],1,10))
       Then Mensagem([Documento no Banco]+" este numero contem outros caracteres n„o numericos !")
            Return
    EndIf
    Numbcoini=NumVal(SubStr([Documento no Banco],1,10))
  Case OPBCO:
EndSwitch

Aguarde("Gerando novos numeros")
nreg=recno()
While True
  [Documento no Banco]=Mod11_CalcNum(Numbcoini)
  UnLockRecord
  Skip
  If EOT()
     Then QuitLoop
  EndIf
  Numbcoini=Numbcoini+1
EndWhile
Moveto Record Nreg
LimpAguarde()

EndProc


Proc Mod11_CalcNum(valor)
Private valor,mod11,vrstr,ci,soma,tm

;;;;;;;12345678901234

Switch
  Case OPBCO="BRADESCO I":
		mod11="32765432765432"
    vrstr=AlinhM(StrVal(SubStr(valor,1,14)),14)
    TM=14
  Case OPBCO="CEF I":
		mod11="3298765432"
    vrstr=AlinhM(StrVal(SubStr(valor,1,10)),10)
    TM=10
EndSwitch

soma=0
For ci From 1 To tm
  Soma=Soma+(Numval(SubStr(mod11,ci,1))*
             NumVal(SubStr(vrstr,ci,1)))
EndFor
resto=Mod(soma,11)
Switch
  Case OPBCO="BRADESCO I":
    Switch
      Case resto=1 : dig="P"
      Case resto=0 : dig="0"
      OtherWise    : dig=StrVal(11-resto)
    EndSwitch
  Case OPBCO="CEF I":
    If (11-resto)>9
       Then dig="0"
       Else dig=StrVal(11-resto)
    EndIf
EndSwitch

Return vrstr+dig
EndProc

;*******************************************************************************
;* Rotina para Atualizar Dados                                                 *
;*******************************************************************************
Proc Atualizar()
NR = NRecords("Answer")
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Atualizando "+BARRA_STRING)

  TudoOk=False
  Moveto "Duplic"
  Moveto [Numero do Lancamento]
  Locate [Answer->Numero do Lancamento]
  If Not RetVal
     Then MENSAGEM([Numero do Lancamento]+", lan‡amento n„o atualizado, verificar !")
     Else For ii From 1 To 5
            If Not IsLockRecord()
               Then TudoOk=True
                    QuitLoop
            EndIf
          EndFor
  EndIf
  If TudoOk
     Then [Documento no Banco]=[Answer->Documento no Banco]
          UnLockRecord
  EndIf

  Moveto "Answer"
EndScan
Do_It!

LimpAguarde()
Mensagem("Titulos Atualizados !")

Endproc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_CONTA"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTINI"         : Campo="TG_CONTA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_TPPAGTO"       : Campo="TG_DTFIM"
            Case Campo="TG_OPNUMBCO"      : Campo="TG_TPPAGTO"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          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_EMPRESA"    : Campo="TG_CONTA"
                    Case Campo="TG_CONTA"      : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_TPPAGTO"
                    Case Campo="TG_TPPAGTO"    : Campo="TG_OPNUMBCO"
                    Case Campo="TG_OPNUMBCO"   : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="":
     MSG_CAMPO=""
  Case Campo="TG_OPNUMBCO":
     MensagemCheckBoxes()
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

VSDGEMPRESA =""
VSDGCONTA   =""
VSDGTPPAGTO =""
VSDGDTINI  =Today()
VSDGDTFIM  =Today()

Array TG_OPNUMBCO[1]
TG_OPNUMBCO[1]="Incluir T¡tulos j  numerados"

Array CheckTG_OPNUMBCO[ArraySize(TG_OPNUMBCO)]
CheckTG_OPNUMBCO[1]=False

While True

  ShowDialog "Sele‡„o de T¡tulos p/ Numera‡„o Banc ria" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 11 Width 72

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Conta"  For "TG_CONTA"
    Accept @ 03,01 Width 07 "A4"  Picture "#*#" Tag "TG_CONTA" To VSDGCONTA
    Accept @ 03,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMCONT" To VSDGNOMCONTA

    Label  @ 04,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 05,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 05,16 "at‚" For "TG_DTFIM"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 00,35 "Forma de Pagamento"  For "TG_TPPAGTO"
    Accept @ 01,38 Width 05 "A2"  Picture "!*!" Tag "TG_TPPAGTO"    To VSDGTPPAGTO
    Accept @ 01,44 Width 25 "A20" Picture "!*!" Tag "TG_NOMTPPG"    To VSDGNOMTPPAGTO

    CheckBoxes @ 03,35 Height 1 Width 33 Tag "TG_OPNUMBCO"
    TG_OPNUMBCO[1] to CheckTG_OPNUMBCO[1]

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  Processa()
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
  EndIf
  Echo Normal
  Echo Off

EndWhile
ClearAll
Release Vars All
Release Procs All
