;** RM_0150A *******************************************************************
;* Relacao de Notas Fiscais - Diversos Modelos                                 *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/02/2020 por Anivel Augusto Rodrigues
;Ultima Alteracao: 05/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes agrupado RM_0150
;Ultima Alteracao: 05/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes substituido RM_0021, RM_0030, RM_0020
;Ultima Alteracao: 10/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_DESTIN, TG_TPMOVDESTIN                  
;Ultima Alteracao: 21/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_OPDTESI                  
;Ultima Alteracao: 21/02/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes na ASK p/ otimiza‡Æo ao linkar com a tabela itens
;Ultima Alteracao: 23/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modelo 1C, RM_0046
;Ultima Alteracao: 23/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtro referencia
;Ultima Alteracao: 25/09/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro por [Atividade] -> VSDGATIVIDADE  
;Ultima Alteracao: 20/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado modelo "01A" mostrando a coluna "bandeira de cartÆo" 
;Ultima Alteracao: 27/01/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao filtrar MARCA, REFERENCIA e/ou ITEM
;Ultima Alteracao: 01/02/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes modelo "01I"   
;Ultima Alteracao: 08/02/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes para filtrar o item quando informado
;Ultima Alteracao: 01/03/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes relatorio com itens e sem itens , e filtro de dados do item

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

If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") And
   IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then Release Vars Atividade
        If VSDGATIVIDADE<>""
            Then {Ask} {\\Sistemas\\Cadastro\\Destinat} 
                ;Moveto [Tipo            ]        TypeIn "C"
                 Moveto [Codigo          ] Check TypeIn "~VSDGDESTINAT.."
                 Moveto [Codigo Atividade]       TypeIn "~VSDGATIVIDADE.."
                ;Moveto [Inativo         ]        TypeIn "N"
                 Do_It!
                 ClearAll

                 If Not IsEmpty("Answer")
                    Then Atividade=Cria_Temp(PrivDir())
                         Copy "Answer" Atividade
                          
                         Adiciona_Indice(Atividade,"Codigo")
                         
                         {Ask} TypeIn Atividade Enter
                         Moveto [Codigo         ] Example "Pessoa"
                 EndIf
         EndIf
         {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter Check
         Moveto [Codigo da Empresa      ] Example "Empresa" TypeIn ", ~VSDGEMPRESA.."
         Moveto [Numero do Documento    ] Example "Docto"
         Moveto [Serie do Documento     ] Example "Serie"
         Moveto [Codigo do Documento    ] TypeIn "~VSDGTPDOCTO.."
         If IsAssigned(Atividade)
            Then Moveto [Codigo         ] Example "Pessoa"
            Else Moveto [Codigo         ] TypeIn "~VSDGDESTINAT.." 
         EndIf
         Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
         Moveto [Cidade                 ] TypeIn CIDADE
         Moveto [UF                     ] TypeIn "~VSDGESTADO.."
         switch
           case ListaRegra_VSDGDESTIN_Ativo  : Moveto [Codigo da Destinacao] TypeIn ListaRegra_VSDGDESTIN
           otherwise                         : Moveto [Codigo da Destinacao] TypeIn "~VSDGDESTIN.."
         endswitch
         Moveto [Tipo Movimento Estoque ] TypeIn "~VSDGTPMOVDESTIN.."

         switch
          case VSDGOPDTESI="1" : Moveto [Data de Emissao] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
          case VSDGOPDTESI="2" : Moveto [Data de Saida  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
          case VSDGOPDTESI="3" : Moveto [Data_Inclusao  ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
         endswitch

         Moveto [Condicao de Pagamento  ] TypeIn "~VSDGCONDPGTO.."
         Moveto [Forma de Pagamento     ] TypeIn "~VSDGTPPAGTO.."

         Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
         Moveto [Placa do Veiculo       ] TypeIn "~VSDGPLACAVEICULO.."

         Switch
            case VSDGSITUACAONOTA="NORMAL"                 : Moveto [Situacao                ] TypeIn "Not C"
                                                             Moveto [Descricao da Destinacao ] TypeIn "Not ..INUT.."
                                                                            
            case VSDGSITUACAONOTA="CANCELADA"              : Moveto [Situacao                ] TypeIn "C"
                
            case VSDGSITUACAONOTA="CANCELADA+DENEGADA"     : Moveto [Situacao                ] TypeIn "C"
                                                             Moveto [Sistema Gerador         ] TypeIn "DN"
                                                             
            case VSDGSITUACAONOTA="CANCELADA+EXTEMPORANEA" : Moveto [Situacao                ] TypeIn "C"
                                                             Moveto [Sistema Gerador         ] TypeIn "EX"

            case VSDGSITUACAONOTA="INUTILIZADA"            : Moveto [Descricao da Destinacao ] TypeIn "..INUT.."
         endSwitch

         If VSDGCODMODELO="02C" 
            Then moveto [Codigo da Destinacao   ] CtrlBackspace
                 moveto [Descricao da Destinacao] CtrlBackspace
                 Moveto [Sistema Gerador        ] CtrlBackspace
                 moveto [Descricao da Destinacao] typein "..CONSIG.."
                 moveto [Tipo Movimento Estoque ] 
                 moveto [Situacao               ] CtrlBackspace typeIn "Not C"
                 moveto [Data de Acerto         ]               TypeIn "Blank"
         EndIf     
         Do_It!
         ClearAll
         
         If IsAssigned(Atividade)
            Then Delete Atividade
         EndIf   

         if RM_0150_FiltrarItens()
            then
                 {Ask} TypeIn TabelaItens Enter
                 Moveto [Codigo do Item         ] Example "cite"
         endif
         if RM_0150_FiltrarItens() or RM_0150_RelatoriocomItens()
            then
                 {Ask} {Answer} check
                 Moveto [Codigo da Empresa      ] Example "Empresa"
                 Moveto [Numero do Documento    ] Example "Docto"
                 Moveto [Serie do Documento     ] Example "Serie"
                 {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"Notai" Enter        
                 if RM_0150_RelatoriocomItens() 
                    then Check      ; talvez tenha que colocar check s¢ nos campos que usa nos reltorios
                 endif   
                 Moveto [Codigo da Empresa      ] Example "Empresa"
                 Moveto [Numero do Documento    ] Example "Docto"
                 Moveto [Serie do Documento     ] Example "Serie"
                 if RM_0150_FiltrarItens()
                    then Moveto [Codigo do Item ] Example "cite"
                 endif   
                 Moveto [Situacao_Item          ] TypeIn "Not C"
                 Do_It!
                 ClearAll
         endif
EndIf

EndProc   ; (Seleciona)

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

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} {NotaV} 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

  [Observacao na Nota Fiscal]=""

  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 [Observacao na Nota Fiscal]
           []=""
           []=AUXILIAR
           UnLockRecord

  EndIf

  Moveto Tabela1
EndScan
Do_It!
ClearAll

EndProc   ; (Selecionav)

;*******************************************************************************
;* Rotina ajustar dados na tabela                                              *
;*******************************************************************************
Proc RM_0150B_Adiciona()

Moveto Tabela 
Moveto [Codigo da Empresa]
Locate DOCTO_EMP,DOCTO_NUM,DOCTO_SER
If RetVal
   Then [Observacao na Nota Fiscal] = DOCTO_AUX
        UnLockRecord
EndIF
Moveto TabelaVencto

EndProc ;RM_0150B_Adiciona

;*******************************************************************************
;* Rotina ajustar dados na tabela                                              *
;*******************************************************************************
Proc RM_0150B_Seleciona(PARAM)

;----- Atribuindo Valores ------------------------------------------------------
;[Observacao na Nota Fiscal]  = Forma de Pagamento, Nome do CartÆo, VrCartao 

Switch
  Case PARAM="Apura Dados" :
       If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV")
           Then {Ask} TypeIn Tabela Enter
                Moveto [Codigo da Empresa      ] Example "Empresa"
                Moveto [Numero do Documento    ] Example "Docto"
                Moveto [Serie do Documento     ] Example "Serie"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaV" Enter 
                Moveto [Codigo da Empresa      ] Check Example "Empresa"
                Moveto [Numero do Documento    ] Check Example "Docto"
                Moveto [Serie do Documento     ] Check Example "Serie"
                Moveto [Forma de Pagamento     ] Check
                Moveto [Nome do Cartao         ] Check
                Moveto [Valor                  ] TypeIn "Calc Sum as Valor"
                Do_it!         
                ClearAll
       EndIf
  OtherWise :
       DOCTO_EMP = ""
       DOCTO_NUM = ""
       DOCTO_SER = ""
       DOCTO_AUX = ""
        
       CoEdit Tabela
       Scan
         Barra(NRecords(Tabela), RecNo())
         Aguarde("Aguarde, verificando dados "+BARRA_STRING)
         Moveto [Observacao na Nota Fiscal] CtrlBackSpace  
       EndScan
       Do_it!
       ClearAll
        
       View Tabela 
       CoEdit TabelaVencto
       Scan
         Barra(NRecords(TabelaVencto), RecNo())
         Aguarde("Aguarde, processando dados "+BARRA_STRING)
                                    
         If (DOCTO_EMP = "" Or (DOCTO_EMP <> [Codigo da Empresa ] Or DOCTO_NUM <> [Numero do Documento]  Or DOCTO_SER <> [Serie do Documento ])) 
            Then If DOCTO_EMP <> "" And DOCTO_AUX <> ""
                    Then RM_0150B_Adiciona()
                 EndIf   
                 DOCTO_AUX = ""
                 DOCTO_EMP = [Codigo da Empresa  ]   
                 DOCTO_NUM = [Numero do Documento]
                 DOCTO_SER = [Serie do Documento ]
         EndIf
         If [Forma de Pagamento]="CT" Or 
            [Forma de Pagamento]="CD" Or 
            [Forma de Pagamento]="CL"
            Then DOCTO_AUX = DOCTO_AUX + Format("W57",Format("W2",[Forma de Pagamento])+" "+Format("W10",[Nome do Cartao])+" "+Format("W12.2,EIC",[Valor])) 
         EndIf   
       EndScan
       If DOCTO_AUX<>"" Then RM_0150B_Adiciona() EndIf
       Do_it!
       ClearAll 
EndSwitch

EndProc ;RM_0150B_Seleciona()

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

if RM_0150_RelatoriocomItens()
   then Sort Tabela On "Codigo da Empresa", "Numero do Documento", "Serie do Documento","Item do Documento"
   else Sort Tabela On "Codigo da Empresa", "Numero do Documento", "Serie 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()
         [Peso 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 Principal                                                            *
;*******************************************************************************
Proc RM_0150A_Principal()

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
  RM_0150A_Seleciona()
  If Not IsTable("Answer") Then Loop EndIf
  If IsTable(Tabela)
     Then Add "Answer" Tabela
     Else Rename "Answer" Tabela
  EndIf
EndWhile

If IsEmpty(Tabela)
   Then MENSAGEM("N„o existem registros a processar")
   else RM_0150A_Ajusta_Dados()
        
        If VSDGCODMODELO="02V" Or
           VSDGCODMODELO="03"  Or
           VSDGCODMODELO="03B" Or
           VSDGCODMODELO="03C" Or
           VSDGCODMODELO="03D"
           Then Tabela1=Cria_Temp(PrivDir())
                RM_0150A_Selecionav()
                Rename Tabela1 Tabela
        EndIF
        
        ;---- Verifica NotaV no mes atual e fechaMes --------------------------
        If VSDGCODMODELO="01A" 
           Then TabelaVencto=Cria_Temp(PrivDir())
                Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
                While Novo_Dir_Trab()
                  If IsTable("Answer")     Then Delete "Answer" EndIf
                  RM_0150B_Seleciona("Apura Dados")
                  If Not IsTable("Answer") Then Loop EndIf
                  If IsTable(TabelaVencto)
                     Then Add "Answer" TabelaVencto
                     Else Rename "Answer" TabelaVencto
                  EndIf
                EndWhile
                RM_0150B_Seleciona("")
        EndIF        
               
        Switch
          case VSDGCODMODELO="01"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "10" Tabela "R"
          case VSDGCODMODELO="01A" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "5"  Tabela "R"
          case VSDGCODMODELO="01I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "9"  Tabela "R"
      
          case VSDGCODMODELO="01B" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "3"  Tabela "R"
          case VSDGCODMODELO="01C" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "2"  Tabela "R"
          
          case VSDGCODMODELO="02"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "1"  Tabela "R"
          case VSDGCODMODELO="02I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "R"  Tabela "R"
          case VSDGCODMODELO="02V" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2006"  "R"  Tabela "R"
          case VSDGCODMODELO="02C" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "1"  Tabela "R"
      
          case VSDGCODMODELO="04"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_1999"  "4"  Tabela "R"
          case VSDGCODMODELO="67"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2000"  "7"  Tabela "R"
          
          case VSDGCODMODELO="05"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "3"  Tabela "R"
          case VSDGCODMODELO="05O" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "1"  Tabela "R"
          case VSDGCODMODELO="05I" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001"  "2"  Tabela "R"
      
          case VSDGCODMODELO="1L"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001" "11"  Tabela "R"
          case VSDGCODMODELO="1LI" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001" "12"  Tabela "R"
      
          case VSDGCODMODELO="03C" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "R"  Tabela "R" 
          case VSDGCODMODELO="03D" : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2001b" "4"  Tabela "R"

          case VSDGCODMODELO="1C"  : CopyReport "\\Base\\Sistemas\\Vendas\\Rm_2000" "11" Tabela "R"
          
        endSwitch
        IMPRIREL(Tabela,"R")  
EndIf
Delete Tabela
if RM_0150_FiltrarItens() then Delete TabelaItens endif

EndProc

;-- Chamada principal ----------------------------------------------------------
RM_0150A_Principal()

Release Vars Tabela, TabelaItens
Release Procs RM_0150A_Principal, RM_0150A_Seleciona, RM_0150A_Selecionav, RM_0150A_Ajusta_Dados,
              RM_0150B_Seleciona,RM_0150B_Adiciona, RM_0150A_SelecionaItens
