;** Rm_1501C *******************************************************************
;* Resumo de Saida Consignado II                                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 25/02/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao: 27/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes deduzir descontos nos calculos e no faturaI/pedidoI enova estrutura
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 02/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes desconto no item
;Ultima Alteracao: 19/06/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ #0227# -> [Codigo da Destinacao]="070"
;Ultima Alteracao: 01/07/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Rm_1501C_Checa_FaturaR(), Rm_1501C_Grava_FaturaC()
;Ultima Alteracao: 26/08/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Rm_1501C_Processo_GeraOF() ao excluir Tabela1 

;*******************************************************************************
;* Rotina p/ Geracao de Pedidos de Retorno/Complemento                         *
;*******************************************************************************
Proc Rm_1501C_Gera_OF()
AGUARDE("Aguarde, gerando ordem de faturamento")

MSG="Verificar gera‡„o da ordem de faturamento !// //"

;**** Vendas ****
INICIO=True
    
;If Not CheckTG_OPFAT[1] And Not CheckTG_OPFAT2[1] And Not CheckTG_COMISSAO[1]
;   Then Sort Tabela2 On "Codigo da Empresa", "Codigo", "Descricao do Item" To "Answer"
;        ClearAll
;EndIf
                                                                          
View Tabela1
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\TpPagto"
View "Destin"
View "NotaC"
View "FaturaC"
View "FaturaR"
View "FaturaI"
CoEdit "Answer"
Scan
  CODEMP=[Codigo da Empresa]
  CODCLI=[Codigo           ]
  
  QTDDIFER=[Saida_Qtd]-([Retorno_Qtd]+[Venda_Qtd]+[Bonif_Qtd]+[Troca_Qtd])
  
  If QTDDIFER>0
     Then If INICIO
             Then If Not Rm_1501C_Checa_FaturaR()
                     Then QuitLoop
                  EndIf
                  If Not Rm_1501C_Grava_FaturaC()
                     Then QuitLoop
                  EndIf
                  INICIO=False
          EndIf
          Rm_1501C_Grava_FaturaI([Codigo do Item],QTDDIFER,[Saida_Vr],([Saida_DescTotal]/[Saida_Qtd]))
  EndIf

EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina p/ checagem se documento ja existe no FaturaR                        *
;*******************************************************************************
Proc Rm_1501C_Checa_FaturaR()
private regtabela1, NUMOF

Moveto Tabela1
Moveto [Codigo da Empresa]
Locate CODEMP, CODCLI
If not RetVal
   Then
        Moveto "Answer"
        Mensagem("Erro ao localizar o cliente !")
        Return False
   else 
        while [Codigo da Empresa]=CODEMP and
              [Codigo           ]=CODCLI
              
          copytoarray regtabela1
              
          Moveto "FaturaR"
          Moveto [Numero_Documento]
          Locate regtabela1["Numero do Documento"]
          if retval
             then while [Numero_Documento]=regtabela1["Numero do Documento"]

                     if [Serie_Documento ]=regtabela1["Serie do Documento" ]
                        then
                             NUMOF=[FaturaR->Numero da OF]
                        
                             Moveto "FaturaC"
                             Moveto [Numero da OF]
                             locate NUMOF
                             if retval
                                then 
                                     if [FaturaC->Sistema Gerador        ]<>"C"             and
                                        [FaturaC->Codigo                 ]=CODCLI           and
                                        [FaturaC->Tipo Movimento Estoque ]="S"              and
                                        search("CONS",[FaturaC->Descricao da Destinacao])>0 and 
                                        search("VEND",[FaturaC->Descricao da Destinacao])>0 
                                        then 
                                             Moveto "Answer"
                                             switch
                                               case isblank([FaturaC->Sistema Gerador]):
                                                 If not ConfGeral("J  existe a OF "+NUMOF+",//gerada para este acerto de VENDA/CONSIGNA€¶O!// //"+
                                                                  "Deseja regerar novamente ?")
                                                    then Return False
                                                 endif   
                                               
                                               otherwise:
                                                 Mensagem("J  existe a OF "+NUMOF+",//gerada para este acerto de VENDA/CONSIGNA€¶O!// //Verificar !")
                                                 Return False

                                             endswitch

                                             Moveto "FaturaR"
                                             Moveto [Numero da OF]
                                             locate NUMOF
                                             if retval
                                                then while [Numero da OF]=NUMOF
                                                       del
                                                     endwhile
                                             endif         

                                             Moveto "FaturaI"
                                             Moveto [Numero da OF]
                                             locate NUMOF
                                             if retval
                                                then while [Numero da OF]=NUMOF
                                                       del
                                                     endwhile
                                             endif         

                                             Moveto "FaturaC"
                                             Moveto [Numero da OF]
                                             locate NUMOF
                                             if retval
                                                then while [Numero da OF]=NUMOF
                                                       while islockrecord() endwhile
                                                       del
                                                     endwhile
                                             endif         

                                             Moveto "Answer"
                                             return true
                                     endif
                             endif
                     endif    
                        
                    Moveto "FaturaR"
                    skip
                    if eot() then quitloop endif
                    Locate next regtabela1["Numero do Documento"]
                  endwhile
          endif   

          moveto Tabela1
          Skip
          if eot() then quitloop endif
        endwhile
endif

Moveto "Answer"

return true
endproc

;*******************************************************************************
;* Rotina p/ Grava FaturaC                                                     *
;*******************************************************************************
Proc Rm_1501C_Grava_FaturaC()
private DESTIN, destinok, seqr, REG_EMPRESA, regtabela1

Moveto Tabela1
Moveto [Codigo da Empresa]
Locate CODEMP, CODCLI
If not RetVal
   Then
        Moveto "Answer"
        Mensagem("Erro ao localizar o cliente !")
        Return False
   else 
        while [Codigo da Empresa]=CODEMP and
              [Codigo           ]=CODCLI
              
          NUMDOC=[Numero do Documento] 
          SERDOC=[Serie do Documento ]

          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate CODEMP, NUMDOC, SERDOC
          If Not RetVal
             Then Moveto "Answer"
                  Mensagem("Erro ao localizar a Nota de Consigna‡Æo !// //Verificar !")
                  Return False
          EndIf
          
          If SYS_CODIGO_CLIENTE="0227"
             Then destinok = True
                  If [UF]="MG"
                     Then DESTIN = "070"  ;DENTRO DO ESTADO
                     Else DESTIN = "069"  ;FORA DO ESTADO  
                  EndIf
             Else destinok = False
                  Moveto "Destin"
                  Scan
                    If Search("VEND",[Descricao da Destinacao])>0 And
                       Search("CONS",[Descricao da Destinacao])>0 And
                       substr([CFO],1,1)                       =substr([NotaC->CFO],1,1)
                       then DESTIN  =[Codigo da Destinacao]
                            destinok=true
                    endif    
                  endscan
          EndIf        
          
          if not destinok
             then Moveto "Answer" 
                  Mensagem("Erro ao localizar a Destina‡Æo para a Venda de Consignado !// //Verificar !")
                  DESTIN=False
                  return false
          endif

          moveto Tabela1
          Skip
          if eot() then quitloop endif
        endwhile
endif


Moveto "FaturaC"
While True
  End
  Moveto [Numero da OF]
  If Numero_Lancamento("Interno","Locked_Down")
     Then OF = PROXLANCTO_NLANC
          Release Vars PROXLANCTO_NLANC
          quitloop
  EndIf    
EndWhile
[Codigo da Empresa       ]=[NotaC->Codigo da Empresa]
[Data de Emissao         ]=Today()
[Data de Saida           ]=Today()
[Hora de Saida           ]=Time()
[Codigo da Destinacao    ]=DESTIN
[Codigo                  ]=[NotaC->Codigo]
[Codigo do Representante ]=[NotaC->Codigo do Representante ]
[Codigo da Tabela        ]=[NotaC->Codigo da Tabela        ]
[Condicao de Pagamento   ]=[NotaC->Condicao de Pagamento   ]
[Forma de Pagamento      ]=[NotaC->Forma de Pagamento      ]
[Codigo da Transportadora]=[NotaC->Codigo da Transportadora]
[Frete por Conta         ]=[NotaC->Frete por Conta         ]
[Placa do Veiculo        ]=[NotaC->Placa do Veiculo        ]
[UF Veiculo              ]=[NotaC->UF Veiculo              ]
[Frete Incluso na Nota   ]=":"

[Observacao na Nota Fiscal]="VENDAS DE ITEN(S) REF. CONSIGNACAO No "+RELDOCTO_SAIDA
if not isblank(RELDOCTO_RETOR) then [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+" * RETORNO No "  +RELDOCTO_RETOR   endif
if not isblank(RELDOCTO_TROCA) then [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+" * TROCA No "    +RELDOCTO_TROCA   endif
if not isblank(RELDOCTO_DEVOL) then [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+" * DEVOLUCAO No "+RELDOCTO_DEVOL   endif

Controle_Dia()
MSG=MSG+"Ordem de Faturamento: "+OF+" - "+[Descricao da Destinacao]+"// //"
UnLockRecord

seqr=0

Moveto Tabela1
Moveto [Codigo da Empresa]
Locate CODEMP, CODCLI
If RetVal
   Then
        while [Codigo da Empresa]=CODEMP and
              [Codigo           ]=CODCLI

          copytoarray regtabela1

          switch
            Case substr([Tipo do Documento],1,3)="NFE" : MODELO="55"
            otherwise                                  : MODELO="01"
          endswitch
          seqr=seqr+1

          Moveto "FaturaR"
          End Down
          [Numero da OF            ] = OF
          [Sequencia               ] = seqr
          [IND_EMIT                ] = "0"
          [Modelo_Documento        ] = MODELO  
          [Data_Documento          ] = regtabela1["Data de Emissao"    ]
          [Numero_Documento        ] = regtabela1["Numero do Documento"]
          [Serie_Documento         ] = regtabela1["Serie do Documento" ]
          [Chave_Acesso            ] = regtabela1["Chave_Acesso_NFe"   ]
          
          GetRecord "\\Sistemas\\Cadastro\\Empresas" CODEMP To REG_EMPRESA
          [Codigo_Participante] = CODEMP 
          [Nome_Participante  ] = REG_EMPRESA["Razao Social Empresa"]
          [UF                 ] = REG_EMPRESA["UF Empresa"] 
          [CNPJ_CPF           ] = REG_EMPRESA["CGC Empresa"]
          [IE                 ] = REG_EMPRESA["IE Empresa"]
          UnLockRecord 
          
          moveto Tabela1
          Skip
          if eot() then quitloop endif
        endwhile
endif

Moveto "Answer"

SEQI=0

Return True
EndProc

;*******************************************************************************
;* Rotina p/ Gravar FaturaI                                                    *
;*******************************************************************************
Proc Rm_1501C_Grava_FaturaI(ITEM,QTD,VR,vrdescto)
private item,qtd,vr,vrdescto

SEQI=SEQI+1

Moveto "FaturaI"
End
Down
[Numero da OF         ]=OF
[Item da OF           ]=SEQI
[Codigo do Item       ]=ITEM
[Quantidade           ]=QTD
[Preco Unitario       ]=VR
[Preco Unitario Tabela]=[Preco Unitario              ]

if vrdescto>0
   then [Tipo Desconto Item     ]="T"
        [Valor Desconto Unitario]=numval(format("W15.2",(qtd*vrdescto)))
        [Valor Desconto Item    ]=[Valor Desconto Unitario]
endif   
[Preco Total          ]=([Quantidade]*[Preco Unitario ])-[Valor Desconto Item]

If [Aliquota de ICMS]>0
   Then [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf

[Codigo da Tabela     ]=[NotaC->Codigo da Tabela     ]
UnLockRecord

Moveto "Answer"

EndProc

;*******************************************************************************
;* Processo p/ gerar ordem de faturamento                                      * 
;*******************************************************************************
Proc Rm_1501C_Processo_GeraOF()
private result

ConfGeral("Deseja gerar a ordem de faturamento ?")
If Ok<>"S"
   Then Return False
EndIf

result=Gera_Dados()
if result 
   Then 
        Rm_1501C_Gera_OF()
        If IsAssigned(DESTIN)
           Then If DESTIN=False
                   Then MSG="Destina‡„o de VENDA CONSIGNADA n„o encontrada!"
                EndIf
           Else MSG=MSG+"Confirmar Ordem de Faturamento !"
        EndIf
        Mensagem(MSG)
EndIf

If IsAssigned(Tabela1) And IsTable(Tabela1) Then Delete Tabela1 EndIf  

Return result

EndProc ;Processo_GeraOF() 

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************

Retorno_ok=Rm_1501C_Processo_GeraOF()

Release Vars  OF,SEQI,INICIO, DESTIN, MSG,
              CODEMP, CODCLI, QTDDIFER

Release Procs Rm_1501C_Processo_GeraOF, Rm_1501C_Gera_OF, Rm_1501C_Grava_FaturaC, Rm_1501C_Grava_FaturaI, Rm_1501C_Checa_FaturaR
