;Chamado do C_ClieC - Op‡Æo F10

;** Rm_0028 ********************************************************************
;* Relacao de Documentos Emitidos por Cliente                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/08/2017 por Bruno Carvalho             
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()

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

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then
        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter Check
         If VSDGCODMODELO="02" Or VSDGCODMODELO="04"
            Then Moveto [Codigo da Empresa      ] Example "Empresa" TypeIn ", ~VSDGEMPRESA.."
                 Moveto [Numero do Documento    ] Example "Docto"
                 Moveto [Serie do Documento     ] Example "Serie"
            Else Moveto [Codigo da Empresa      ]                   TypeIn   "~VSDGEMPRESA.."
         EndIf
         Moveto [Codigo                 ] TypeIn "~VSDGDESTINAT.."
         Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
         Moveto [Data de Emissao        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
         Moveto [Descricao da Destinacao] 
         Switch
           Case VSDGFINAL=1 : TypeIn "..VEND.."
           Case VSDGFINAL=2 : TypeIn "..DEVOL.. Or ..VEND.."
         EndSwitch     
         If VSDGCODMODELO="02" Or VSDGCODMODELO="04" 
            Then {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"Notai" Enter Check
                 Moveto [Codigo da Empresa      ] Example "Empresa"
                 Moveto [Numero do Documento    ] Example "Docto"
                 Moveto [Serie do Documento     ] Example "Serie"
                 Moveto [Situacao_Item          ] TypeIn "Not C"
         EndIf
         Do_It!
         ClearAll
EndIf

EndProc ;Selecao()

;*******************************************************************************
;* Rotina Ajusta Dados                                                         *
;*******************************************************************************
Proc Ajusta_Dados()   
ClearAll

If VSDGCODMODELO="02" Or VSDGCODMODELO="04"
   Then Sort Tabela On "Codigo da Empresa", "Numero do Documento", "Serie do Documento","Item do Documento"
EndIf   

CDEMPR="****"
NDOCTO="****"
SDOCTO="****"

CoEdit Tabela
Scan

 If [Codigo da Empresa  ]<>CDEMPR Or
    [Numero do Documento]<>NDOCTO Or
    [Serie do Documento ]<>SDOCTO
    Then CDEMPR=[Codigo da Empresa  ]
         NDOCTO=[Numero do Documento]
         SDOCTO=[Serie do Documento ]
         [Numero Lancamento Cheque]=1
    Else 
         [Valor Nota Fiscal       ]=BlankNum()
         [Valor Mercadoria        ]=BlankNum()
         [Valor Mercadoria Liquido]=BlankNum()
 EndIf

 If [Situacao]="C"
    Then If Search("INUT",[Descricao da Destinacao])>0
            Then [Descricao da Destinacao ]="** INUTILIZADA **"
            Else [Descricao da Destinacao ]="** CANCELADA **"        
        EndIf
        If [Sistema Gerador] = "DN" Then [Descricao da Destinacao ]="** DENEGADA **"  EndIf
        If [Sistema Gerador] = "EX" Then [Descricao da Destinacao ]="**CANC.EXTEMP**"  EndIf    
        [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
 EndIf
 
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ Selecionar os Vencimentos                                         *
;*******************************************************************************
Proc Selecionav()

If Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV")
   Then Return False
EndIf   

Adiciona_Campo(Tabela,"Vencimentos(M1)")                     
ClearAll
                     
Copy Tabela Tabela1

{Ask} TypeIn Tabela Enter
Moveto [Codigo da Empresa  ] Example "codemp"
Moveto [Numero do Documento] Example "numdoc"
Moveto [Serie do Documento ] Example "serdoc"


{Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV" Enter Check
Moveto [Codigo da Empresa  ] Example "codemp"
Moveto [Numero do Documento] Example "numdoc"
Moveto [Serie do Documento ] Example "serdoc"
Do_It!
ClearAll

View "Answer"
Coedit Tabela1
Scan
  [Vencimentos]=""

  CODEMP = [Codigo da Empresa]
  NUMDOC = [Numero do Documento]
  SERDOC = [Serie do Documento]
  
  Moveto "Answer"
  Moveto [Codigo da Empresa]
  Locate CODEMP,NUMDOC,SERDOC
  If RetVal
     Then  AUXILIAR = ""
           NCHAR = 0
           While CODEMP=[Codigo da Empresa  ] And
                 NUMDOC=[Numero do Documento] And
                 SERDOC=[Serie do Documento ] 
                 If AUXILIAR<>""
                    Then AUXILIAR = AUXILIAR + " | "
                         NCHAR=NCHAR+2
                 EndIf   
                 AUXILIAR = AUXILIAR + Format("D13",[Data])+" "+[Forma de Pagamento]+" "+LTrim(Format("W10.2,EIC",[Valor])) ;22 Caracteres
                 NCHAR=NCHAR+22
                 Skip
                 If Eot() Then QuitLoop EndIf
           EndWhile

           Moveto Tabela1
           Moveto [Vencimentos]
           []=""
           []=AUXILIAR
           UnLockRecord

  EndIf

  Moveto Tabela1
EndScan
Do_It!
ClearAll

Return True

EndProc   ; (Selecionav)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog2(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""

If INICIO_DIALOG
   Then Campo="TG_REPRESEN"
        INICIO_DIALOG = False
Endif

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_EMPRESA"     Or 
                 Campo="TG_REPRESEN"     : Campo="NO"
            Case Campo="TG_DESTINAT"     : Campo="TG_EMPRESA"
            Case Campo="TG_DTINI"        : Campo="TG_REPRESEN"
            Case Campo="TG_DTFIM"        : Campo="TG_DTINI"
            Case Campo="TG_FINALIDADE"   : Campo="TG_DTFIM"
            Case Campo="TG_OBS"          : Campo="TG_FINALIDADE"
            Case Campo="TG_CODMODELO"    : Campo="TG_OBS"
            Case Campo="YES" Or Campo="NO": Campo="TG_REPRESEN"
          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_DESTINAT"
                    Case Campo="TG_DESTINAT"     : Campo="TG_REPRESEN"
                    Case Campo="TG_REPRESEN"     : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"        : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"        : Campo="TG_FINALIDADE"
                    Case Campo="TG_FINALIDADE"   : Campo="TG_OBS"
                    Case Campo="TG_OBS"          : Campo="TG_CODMODELO"
                    Case Campo="TG_CODMODELO"    : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_OBS":
     MensagemCheckBoxes()   
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()
Private PARAM

VSDGCODMODELO     = ""
VSDGMODELO        = ""

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Sem Itens")
ModeloRelatoriosAdd("02  Com Itens")
ModeloRelatoriosAdd("03  Sem Itens, Mostra Vencimentos")
ModeloRelatoriosAdd("04  Com Itens, Mostra Vencimentos")
ModeloRelatoriosAdd("Fim")
                       
EndProc ;ModeloRelatoriosCarregaLista()

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

Array VSDGOBS[1]
VSDGOBS[1]=False

INICIO_DIALOG = True
VSDGREPRESEN  = ""
VSDGDTINI     = BlankDate()
VSDGDTFIM     = BlankDate()

ModeloRelatoriosCarregaLista()

While True

  ShowDialog "Rela‡„o de Documentos Emitidos" Proc "SD_Dialog2"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 15 Width 73

    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_NOMEMPRESA" To VSDGNOMEMP
    
    RadioButtons @ 01,35 Height 3 Width 35
      "~1~ Notas de Vendas",
      "~2~ Notas de Vendas e Devolu‡”es",
      "~3~ Todas as Notas"
        Tag "TG_FINALIDADE"
        To VSDGFINAL  
        
    CheckBoxes @07,35 Height 1 Width 26 Tag "TG_OBS"
    "Incluir Observa‡Æo" to VSDGOBS[1]         

    Label  @ 02,00 "Pessoa"  For "TG_DESTINAT"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_DESTINAT" To VSDGDESTINAT
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMDEST"  To VSDGNOMDEST
    
    Label  @ 04,00 "Representante"  For "TG_REPRESEN"
    Accept @ 05,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 05,09 Width 25 "A15" Picture "!*!" Tag "TG_NOMREPR" To VSDGNOMREPR

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

    Label  @ 08,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 09,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 09,06  Width 63 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  if not ValidarModelosRelatorios() then loop endif         

  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf
  
  If PARAM_CCLIEC And VSDGDESTINAT <> VSDGDESTINAT2
     Then Mensagem("Cliente informado ‚ diferente desta ficha!")
          Loop
  EndIf
  
  If VSDGOBS[1] And VSDGCODMODELO="01"
     Then FastMsg("Este modelo de relat rio n„o exibe observa‡Æo!")
          Loop
  EndIf

  DISPOSITIVO()
  If OK=""  Then Loop EndIf

  AGUARDE("Aguarde, gerando o relat¢rio")
  Tabela=Cria_Temp(PrivDir())
  
  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    If IsTable("Answer")     Then Delete "Answer" EndIf
    Selecao()
    If Not IsTable("Answer") Then Loop EndIf
    If IsTable(Tabela)
       Then Add "Answer" Tabela
       Else Rename "Answer" Tabela
    EndIf
  EndWhile
  
  If Not Istable(Tabela) Or IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          If Istable(Tabela) Then Delete Tabela EndIf
          Loop
  EndIf                
  Ajusta_Dados()

  ;---- Exibe Vencimentos -------------------
  If VSDGCODMODELO="03" Or VSDGCODMODELO="05"
     Then Tabela1=Cria_Temp(PrivDir())
          If Selecionav()
             Then Rename Tabela1 Tabela
          EndIf   
  EndIF                   
  
  If VSDGOBS[1]
     Then MOSTRA_OBS=True
     Else MOSTRA_OBS=False
  EndIf   
    
  Impressao_Orientacao="Paisagem"        
  Switch
    case VSDGCODMODELO="01" : CopyReport "\\Base\\Sistemas\\Vendas\\RM_0028"  "R"  Tabela "R" ;Sem Itens
    case VSDGCODMODELO="02" : CopyReport "\\Base\\Sistemas\\Vendas\\RM_0028"  "3"  Tabela "R" ;Com Itens
    case VSDGCODMODELO="03" : CopyReport "\\Base\\Sistemas\\Vendas\\RM_0028"  "2"  Tabela "R" ;Sem Itens e Vencimento
    case VSDGCODMODELO="04" : CopyReport "\\Base\\Sistemas\\Vendas\\RM_0028"  "1"  Tabela "R" ;Com Itens e Vencimentos
  EndSwitch

  IMPRIREL(Tabela,"R")  
  Delete Tabela
EndWhile
ClearAll
Release Procs Selecionav,Ajusta_Dados,Selecao,SD_Dialog2,ModeloRelatoriosCarregaLista
